-
Notifications
You must be signed in to change notification settings - Fork 0
/
fancytabwidget.cpp
87 lines (68 loc) · 2.26 KB
/
fancytabwidget.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "headers.h"
#include "fancytabwidget.h"
FancyTabWidget::FancyTabWidget(QWidget *parent)
: QWidget(parent)
{
mSplitIndex = -1;
mButtonsWidget = new QWidget;
mButtonsWidget->setObjectName("fancyTabButtonsWidget");
mTopButtonsLayout = new QVBoxLayout;
mTopButtonsLayout->setSpacing(0);
mTopButtonsLayout->setMargin(0);
mBottomButtonsLayout = new QVBoxLayout;
mBottomButtonsLayout->setSpacing(0);
mBottomButtonsLayout->setMargin(0);
QVBoxLayout *buttonsLayout = new QVBoxLayout;
buttonsLayout->setSpacing(0);
buttonsLayout->setMargin(0);
buttonsLayout->addLayout(mTopButtonsLayout);
buttonsLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
buttonsLayout->addLayout(mBottomButtonsLayout);
mButtonsWidget->setLayout(buttonsLayout);
mPagesWidget = new QStackedWidget;
mPagesWidget->setObjectName("fancyTabPagesWidget");
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->setSpacing(0);
mainLayout->setMargin(0);
mainLayout->addWidget(mButtonsWidget);
mainLayout->addWidget(mPagesWidget,1);
setLayout(mainLayout);
mButtons = new QButtonGroup(mButtonsWidget);
mButtons->setExclusive(true);
connect(mButtons, SIGNAL(buttonClicked(int)), this, SLOT(changePage(int)));
}
void FancyTabWidget::insertTab(int index, QWidget *tab, const QString &label)
{
QPushButton *button = insertButton(index, label);
button->setCheckable(true);
mPagesWidget->insertWidget(index, tab);
if(mButtons->buttons().size() == 1)
button->setChecked(true);
}
QPushButton *FancyTabWidget::insertButton(int index, const QString &label)
{
QPushButton *button = new QPushButton(label, mButtonsWidget);
button->setFocusPolicy(Qt::NoFocus);
button->setProperty("tabIndex",index);
mButtons->addButton(button, index);
if(index > mSplitIndex)
mBottomButtonsLayout->insertWidget(index, button);
else
mTopButtonsLayout->insertWidget(index, button);
return button;
}
void FancyTabWidget::setLocked(int index, bool locked)
{
if(index == mPagesWidget->currentIndex() && locked)
return;
mButtons->buttons().at(index)->setEnabled(!locked);
}
void FancyTabWidget::setSplitIndex(int index)
{
mSplitIndex = index;
}
void FancyTabWidget::changePage(int index)
{
if(mButtons->button(index)->isCheckable())
mPagesWidget->setCurrentIndex(index);
}