]> git.lyx.org Git - lyx.git/blob - src/frontends/kde/dlg/tabstack.C
Patches from Angus and John
[lyx.git] / src / frontends / kde / dlg / tabstack.C
1 /*
2  * tabstack.C
3  * (C) 2000 LyX Team
4  * John Levon, moz@compsoc.man.ac.uk
5  */
6
7 /***************************************************************************
8  *                                                                         *
9  *   This program is free software; you can redistribute it and/or modify  *
10  *   it under the terms of the GNU General Public License as published by  *
11  *   the Free Software Foundation; either version 2 of the License, or     *
12  *   (at your option) any later version.                                   *
13  *                                                                         *
14  ***************************************************************************/
15
16 #include "tabstack.h"
17
18 #include "qlayout.h" 
19 #include "qwidgetstack.h"
20 #include "qtabbar.h"
21 #include "qpainter.h"
22
23 /**
24  * A tab bar and a widget stack for storing related pages.
25  */
26
27 TabStack::TabStack(QWidget * parent, const char * name)
28         : QWidget(parent,name), tabs(0), stack(0)
29 {
30         stack = new QWidgetStack(this, "stack");
31         tabs = new QTabBar(this, "tabbar");
32         connect(tabs, SIGNAL(selected(int)), this, SLOT(selected(int)));
33         
34         topLayout = new QHBoxLayout(this, 1);
35
36         layout = new QVBoxLayout();
37         topLayout->addLayout(layout);
38         layout->addWidget(tabs, 0);
39         layout->addWidget(stack, 1);
40 }
41
42 TabStack::~TabStack()
43 {
44 }
45
46 int TabStack::addTabPage(QWidget *page, const char *label)
47 {
48         QTab *tab = new QTab();
49
50         tab->label = label;
51
52         int id = tabs->addTab(tab);
53         stack->addWidget(page, id);
54         tabs->setMinimumSize(tabs->sizeHint());
55         return id;
56 }
57
58 void TabStack::setTabPageEnabled(int id, bool enable)
59 {
60         tabs->setTabEnabled(id, enable);
61 }
62
63 bool TabStack::isTabPageEnabled(int id) const
64 {
65         return tabs->isTabEnabled(id);
66
67
68 void TabStack::setCurrentTabPage(int id)
69 {
70         selected(id);
71 }
72
73 int TabStack::currentTabPage() const
74 {
75         return tabs->currentTab();
76 }
77
78 void TabStack::selected(int id)
79 {
80         if (tabs->currentTab() != id)
81                 tabs->setCurrentTab(id);
82         stack->raiseWidget(id);
83 }
84
85 void TabStack::paintEvent(QPaintEvent *)
86 {
87         if (!tabs)
88                 return;
89         
90         QPainter p;
91         p.begin(this);
92         QRect geom(stack->geometry());
93          
94         QCOORD top = geom.top() - 1;
95         QCOORD bottom = geom.bottom() + 2;
96         QCOORD right = geom.right() + 2;
97         QCOORD left = geom.left() - 1;
98
99         p.setPen(white);
100         p.drawLine(left, top, right - 1, top);
101         p.drawLine(left, top + 1, left, bottom);
102         p.setPen(black);
103         p.drawLine(right, bottom, left, bottom);
104         p.drawLine(right, bottom-1, right, top);
105         p.setPen(colorGroup().dark());
106         p.drawLine(left+1, bottom-1, right-1, bottom-1);
107         p.drawLine(right-1, bottom-2, right-1, top+1);
108
109         p.end(); 
110         
111         // FIXME: do this better ?
112         tabs->update();
113 }