4 * John Levon, moz@compsoc.man.ac.uk
10 #include "qwidgetstack.h"
15 * A tab bar and a widget stack for storing related pages.
18 TabStack::TabStack(QWidget * parent, const char * name)
19 : QWidget(parent,name), tabs(0), stack(0), topLayout(0)
21 stack = new QWidgetStack(this, "stack");
22 tabs = new QTabBar(this, "tabbar");
23 connect(tabs, SIGNAL(selected(int)), this, SLOT(selected(int)));
36 void TabStack::doLayout()
41 topLayout = new QBoxLayout(this, QBoxLayout::Down);
43 topLayout->addSpacing(margin);
45 QBoxLayout * tmp = new QBoxLayout(QBoxLayout::LeftToRight);
46 topLayout->addLayout(tmp, 0);
47 tmp->addSpacing(margin);
48 tmp->addWidget(tabs, 0);
50 tmp->addSpacing(margin + 2);
52 tmp = new QBoxLayout(QBoxLayout::LeftToRight);
53 topLayout->addLayout(tmp, 1);
54 tmp->addSpacing(margin + 1);
55 tmp->addWidget(stack, 1);
56 tmp->addSpacing(margin + 2);
58 topLayout->addSpacing(margin);
60 topLayout->activate();
63 void TabStack::paintEvent(QPaintEvent *)
71 QRect s(stack->geometry());
73 QCOORD t = s.top() - 1;
74 QCOORD b = s.bottom() + 2;
75 QCOORD r = s.right() + 2;
76 QCOORD l = s.left() - 1;
78 p.setPen(colorGroup().light());
79 p.drawLine(l, t, r - 1, t);
80 p.drawLine(l, t + 1, l, b);
82 p.drawLine(r, b, l,b);
83 p.drawLine(r, b-1, r, t);
84 p.setPen(colorGroup().dark());
85 p.drawLine(l+1, b-1, r-1, b-1);
86 p.drawLine(r-1, b-2, r-1, t+1);
91 int TabStack::addTabPage(QWidget *page, const char *label)
93 QTab *tab = new QTab();
97 int id = tabs->addTab(tab);
98 stack->addWidget(page, id);
99 tabs->setMinimumSize(tabs->sizeHint());
103 void TabStack::setTabPageEnabled(int id, bool enable)
105 tabs->setTabEnabled(id, enable);
108 bool TabStack::isTabPageEnabled(int id) const
110 return tabs->isTabEnabled(id);
113 void TabStack::setCurrentTabPage(int id)
118 int TabStack::currentTabPage() const
120 return tabs->currentTab();
123 void TabStack::selected(int id)
125 if (tabs->currentTab() != id)
126 tabs->setCurrentTab(id);
127 stack->raiseWidget(id);