11QPushButton* CTitleBar::CreateSmallPushButton(QIcon icon, QWidget *parent) {
12 QPushButton *button =
new QPushButton(icon,
"", parent);
13 if(!button)
return button;
15 button->setObjectName(
"TitleBarButton");
16 button->setFlat(
true);
19 button->setFocusPolicy(Qt::NoFocus);
24CTitleBar::CTitleBar(QWidget *parent)
28 m_pCloseButton(nullptr),
29 m_pFloatButton(nullptr),
30 m_pMaxButton(nullptr),
39 QHBoxLayout *layout =
new QHBoxLayout(
this);
43 layout->setContentsMargins(10, 3, 10, 3);
45 layout->setSpacing(10);
47 layout->setSpacing(0);
50 m_pIcon =
new QLabel(
this);
52 m_pIcon->setWindowIcon(parent->windowIcon());
53 check = connect(parent, &QWidget::windowIconChanged,
54 this, [&](
const QIcon &icon){
58 auto sizeList = icon.availableSizes();
59 if(sizeList.isEmpty())
61 QPixmap p = icon.pixmap(*sizeList.begin());
64 QMargins cm = m_pIcon->contentsMargins();
65 int w = m_pIcon->height() - cm.top() - cm.bottom();
66 p = p.scaled(w, w, Qt::KeepAspectRatio, Qt::SmoothTransformation);
67 m_pIcon->setPixmap(p);
71 m_pIcon->setPixmap(QPixmap());
74 layout->addWidget(m_pIcon);
77 m_pTitle =
new QLabel(
this);
79 m_pTitle->setText(parent->windowTitle());
80 check = connect(parent, SIGNAL(windowTitleChanged(
const QString&)),
81 m_pTitle, SLOT(setText(
const QString&)));
83 m_pTitle->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
84 layout->addWidget(m_pTitle);
86 m_pMinButton = CreateSmallPushButton(QIcon::fromTheme(
"window-minimize"),
this);
87 Q_ASSERT(m_pMinButton);
88 m_pMinButton->setToolTip(tr(
"Minimize"));
89 layout->addWidget(m_pMinButton);
90 check = connect(m_pMinButton, SIGNAL(clicked()),
91 this, SLOT(slotMinimize()));
94 m_pMaxButton = CreateSmallPushButton(QIcon::fromTheme(
"window-maximize"),
this);
95 Q_ASSERT(m_pMaxButton);
96 m_pMaxButton->setToolTip(tr(
"Maximize"));
97 layout->addWidget(m_pMaxButton);
98 check = connect(m_pMaxButton, SIGNAL(clicked()),
99 this, SLOT(slotMaximize()));
102 m_pFloatButton = CreateSmallPushButton(QIcon::fromTheme(
"floating"),
this);
103 Q_ASSERT(m_pFloatButton);
104 m_pFloatButton->setToolTip(tr(
"Floating"));
105 layout->addWidget(m_pFloatButton);
106 check = connect(m_pFloatButton, SIGNAL(clicked()),
107 this, SLOT(slotFloat()));
110 m_pCloseButton = CreateSmallPushButton(
111 QIcon::fromTheme(
"window-close"),
this);
112 Q_ASSERT(m_pCloseButton);
113 m_pCloseButton->setToolTip(tr(
"Close"));
114 layout->addWidget(m_pCloseButton);
115 check = connect(m_pCloseButton, SIGNAL(clicked()),
116 parent, SLOT(close()));
119 QDockWidget* pParent = qobject_cast<QDockWidget*>(parent);
121 QDockWidget::DockWidgetFeatures features = pParent->features();
122 VisibleCloseButton(QDockWidget::DockWidgetClosable & features);
123 VisibleFloatButton(QDockWidget::DockWidgetFloatable & features);
124 bool bFloating = pParent->isFloating();
127 m_pFloatButton->setIcon(QIcon::fromTheme(
"unfloating"));
129 m_pFloatButton->setIcon(QIcon::fromTheme(
"floating"));
131 bool check = connect(parent, SIGNAL(topLevelChanged(
bool)),
132 this, SLOT(slotTopLevelChanged(
bool)));
134 if(!pParent->isFloating())
136 VisibleMaximizeButton(
false);
137 VisibleMinimizeButton(
false);
140 VisibleFloatButton(
false);
144int CTitleBar::AddWidgets(QList<QWidget*> pLstWidget)
146 QHBoxLayout *layout = qobject_cast<QHBoxLayout*>(this->layout());
147 foreach (
auto w, pLstWidget) {
149 layout->insertWidget(2, w);
154int CTitleBar::VisibleIconButton(
bool bVisible)
157 m_pIcon->setVisible(bVisible);
161int CTitleBar::VisibleTitleButton(
bool bVisible)
164 m_pTitle->setVisible(bVisible);
168int CTitleBar::VisibleMaximizeButton(
bool bVisible)
171 m_pMaxButton->setVisible(bVisible);
175int CTitleBar::VisibleMinimizeButton(
bool bVisible)
178 m_pMinButton->setVisible(bVisible);
182int CTitleBar::VisibleFloatButton(
bool bVisible)
185 m_pFloatButton->setVisible(bVisible);
189int CTitleBar::VisibleCloseButton(
bool bVisible)
192 m_pCloseButton->setVisible(bVisible);
196void CTitleBar::slotMinimize()
198 QWidget* pParent = qobject_cast<QWidget*>(parent());
200 if(pParent->isMinimized())
201 pParent->showNormal();
203 pParent->showMinimized();
206void CTitleBar::slotMaximize()
208 QWidget* pParent = qobject_cast<QWidget*>(parent());
210 if(pParent->isMaximized())
211 pParent->showNormal();
213 pParent->showMaximized();
216void CTitleBar::slotFloat()
218 QDockWidget* pParent = qobject_cast<QDockWidget*>(parent());
220 pParent->setFloating(!pParent->isFloating());
224void CTitleBar::slotTopLevelChanged(
bool topLevel)
228#if !defined(Q_OS_UNIX)
229 VisibleMaximizeButton(
true);
232 m_pFloatButton->setIcon(QIcon::fromTheme(
"unfloating"));
234 m_pFloatButton->setIcon(QIcon::fromTheme(
"floating"));
235 VisibleMaximizeButton(
false);
236 VisibleMinimizeButton(
false);