10QPushButton* CTitleBar::CreateSmallPushButton(QIcon icon, QWidget *parent) {
11 QPushButton *button =
new QPushButton(icon,
"", parent);
12 if(!button)
return button;
14 button->setObjectName(
"TitleBarButton");
15 button->setFlat(
true);
18 button->setFocusPolicy(Qt::NoFocus);
23CTitleBar::CTitleBar(QWidget *parent)
26 m_pCloseButton(nullptr),
27 m_pFloatButton(nullptr),
28 m_pMaxButton(nullptr),
37 QHBoxLayout *layout =
new QHBoxLayout(
this);
41 layout->setContentsMargins(10, 3, 10, 3);
43 layout->setSpacing(10);
45 layout->setSpacing(0);
48 m_pTitle =
new QLabel(
this);
50 m_pTitle->setText(parent->windowTitle());
51 check = connect(parent, SIGNAL(windowTitleChanged(
const QString&)),
52 m_pTitle, SLOT(setText(
const QString&)));
54 m_pTitle->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
55 layout->addWidget(m_pTitle);
57 m_pMinButton = CreateSmallPushButton(QIcon::fromTheme(
"window-minimize"),
this);
58 Q_ASSERT(m_pMinButton);
59 m_pMinButton->setToolTip(tr(
"Minimize"));
60 layout->addWidget(m_pMinButton);
61 check = connect(m_pMinButton, SIGNAL(clicked()),
62 this, SLOT(slotMinimize()));
65 m_pMaxButton = CreateSmallPushButton(QIcon::fromTheme(
"window-maximize"),
this);
66 Q_ASSERT(m_pMaxButton);
67 m_pMaxButton->setToolTip(tr(
"Maximize"));
68 layout->addWidget(m_pMaxButton);
69 check = connect(m_pMaxButton, SIGNAL(clicked()),
70 this, SLOT(slotMaximize()));
73 m_pFloatButton = CreateSmallPushButton(QIcon::fromTheme(
"floating"),
this);
74 Q_ASSERT(m_pFloatButton);
75 m_pFloatButton->setToolTip(tr(
"Floating"));
76 layout->addWidget(m_pFloatButton);
77 check = connect(m_pFloatButton, SIGNAL(clicked()),
78 this, SLOT(slotFloat()));
81 m_pCloseButton = CreateSmallPushButton(
82 QIcon::fromTheme(
"window-close"),
this);
83 Q_ASSERT(m_pCloseButton);
84 m_pCloseButton->setToolTip(tr(
"Close"));
85 layout->addWidget(m_pCloseButton);
86 check = connect(m_pCloseButton, SIGNAL(clicked()),
87 parent, SLOT(close()));
90 QDockWidget* pParent = qobject_cast<QDockWidget*>(parent);
92 QDockWidget::DockWidgetFeatures features = pParent->features();
93 VisibleCloseButton(QDockWidget::DockWidgetClosable & features);
94 VisibleFloatButton(QDockWidget::DockWidgetFloatable & features);
95 bool bFloating = pParent->isFloating();
98 m_pFloatButton->setIcon(QIcon::fromTheme(
"unfloating"));
100 m_pFloatButton->setIcon(QIcon::fromTheme(
"floating"));
102 bool check = connect(parent, SIGNAL(topLevelChanged(
bool)),
103 this, SLOT(slotTopLevelChanged(
bool)));
105 if(!pParent->isFloating())
107 VisibleMaximizeButton(
false);
108 VisibleMinimizeButton(
false);
111 VisibleFloatButton(
false);
115int CTitleBar::AddWidgets(QList<QWidget*> pLstWidget)
117 QHBoxLayout *layout = qobject_cast<QHBoxLayout*>(this->layout());
118 foreach (
auto w, pLstWidget) {
120 layout->insertWidget(1, w);
125int CTitleBar::VisibleTitleButton(
bool bVisible)
128 m_pTitle->setVisible(bVisible);
132int CTitleBar::VisibleMaximizeButton(
bool bVisible)
135 m_pMaxButton->setVisible(bVisible);
139int CTitleBar::VisibleMinimizeButton(
bool bVisible)
142 m_pMinButton->setVisible(bVisible);
146int CTitleBar::VisibleFloatButton(
bool bVisible)
149 m_pFloatButton->setVisible(bVisible);
153int CTitleBar::VisibleCloseButton(
bool bVisible)
156 m_pCloseButton->setVisible(bVisible);
160void CTitleBar::slotMinimize()
162 QWidget* pParent = qobject_cast<QWidget*>(parent());
164 if(pParent->isMinimized())
165 pParent->showNormal();
167 pParent->showMinimized();
170void CTitleBar::slotMaximize()
172 QWidget* pParent = qobject_cast<QWidget*>(parent());
174 if(pParent->isMaximized())
175 pParent->showNormal();
177 pParent->showMaximized();
180void CTitleBar::slotFloat()
182 QDockWidget* pParent = qobject_cast<QDockWidget*>(parent());
184 pParent->setFloating(!pParent->isFloating());
188void CTitleBar::slotTopLevelChanged(
bool topLevel)
192#if !defined(Q_OS_UNIX)
193 VisibleMaximizeButton(
true);
196 m_pFloatButton->setIcon(QIcon::fromTheme(
"unfloating"));
198 m_pFloatButton->setIcon(QIcon::fromTheme(
"floating"));
199 VisibleMaximizeButton(
false);
200 VisibleMinimizeButton(
false);