Move title bar logic regarding close button to base class

So QtQuick can use it too
This commit is contained in:
Sergio Martins
2020-11-19 22:09:40 +00:00
parent b19c53d650
commit 0331f90791
4 changed files with 35 additions and 15 deletions

View File

@@ -69,6 +69,7 @@ void TitleBar::init()
// repaint
update();
});
updateCloseButton();
}
TitleBar::~TitleBar()
@@ -89,6 +90,16 @@ bool TitleBar::onDoubleClicked()
return false;
}
void TitleBar::updateCloseButton()
{
const bool anyNonClosable = frame() ? frame()->anyNonClosable()
: (floatingWindow() ? floatingWindow()->anyNonClosable()
: false);
setCloseButtonEnabled(!anyNonClosable);
}
void TitleBar::toggleMaximized()
{
if (!m_floatingWindow)
@@ -116,6 +127,14 @@ bool TitleBar::isOverlayed() const
return m_frame && m_frame->isOverlayed();
}
void TitleBar::setCloseButtonEnabled(bool enabled)
{
if (enabled != m_closeButtonEnabled) {
m_closeButtonEnabled = enabled;
Q_EMIT closeButtonEnabledChanged(enabled);
}
}
void TitleBar::setTitle(const QString &title)
{
if (title != m_title) {
@@ -362,3 +381,8 @@ void TitleBar::onAutoHideClicked()
}
}
}
bool TitleBar::closeButtonEnabled() const
{
return m_closeButtonEnabled;
}

View File

@@ -41,6 +41,7 @@ class DOCKS_EXPORT TitleBar : public QWidgetAdapter
Q_OBJECT
Q_PROPERTY(QString title READ title NOTIFY titleChanged)
Q_PROPERTY(bool hasIcon READ hasIcon NOTIFY iconChanged)
Q_PROPERTY(bool closeButtonEnabled READ closeButtonEnabled WRITE setCloseButtonEnabled NOTIFY closeButtonEnabledChanged)
public:
typedef QVector<TitleBar *> List;
@@ -95,12 +96,14 @@ public:
///@brief getter for m_floatingWindow
FloatingWindow *floatingWindow() const { return m_floatingWindow; }
virtual void updateCloseButton() {}
/// @brief updates the close button enabled state
void updateCloseButton();
Q_SIGNALS:
void titleChanged();
void iconChanged();
void isFocusedChanged();
void closeButtonEnabledChanged(bool);
protected:
@@ -111,6 +114,8 @@ protected:
Q_INVOKABLE void toggleMaximized();
Q_INVOKABLE void onAutoHideClicked();
bool closeButtonEnabled() const;
virtual void updateFloatButton() {}
virtual void updateMaximizeButton() {}
@@ -124,11 +129,10 @@ protected:
virtual bool isFloatButtonEnabled() const { return true; }
void focusInEvent(QFocusEvent *event) override;
bool isOverlayed() const;
private:
friend class ::TestDocks;
void setCloseButtonEnabled(bool);
void init();
@@ -139,6 +143,7 @@ private:
Frame *const m_frame;
FloatingWindow *const m_floatingWindow;
const bool m_supportsAutoHide;
bool m_closeButtonEnabled = true;
};

View File

@@ -72,7 +72,6 @@ void TitleBarWidget::init()
connect(m_minimizeButton, &QAbstractButton::clicked, this, &TitleBarWidget::onMinimizeClicked);
connect(m_autoHideButton, &QAbstractButton::clicked, this, &TitleBarWidget::onAutoHideClicked);
updateCloseButton();
updateFloatButton();
updateMaximizeButton();
updateMinimizeButton();
@@ -93,6 +92,9 @@ void TitleBarWidget::init()
}
update();
});
m_closeButton->setEnabled(closeButtonEnabled());
connect(this, &TitleBar::closeButtonEnabledChanged, m_closeButton, &QAbstractButton::setEnabled);
}
QRect TitleBarWidget::iconRect() const
@@ -154,16 +156,6 @@ void TitleBarWidget::updateFloatButton()
m_floatButton->setVisible(supportsFloatingButton());
}
void TitleBarWidget::updateCloseButton()
{
const bool anyNonClosable = frame() ? frame()->anyNonClosable()
: (floatingWindow() ? floatingWindow()->anyNonClosable()
: false);
qCDebug(closebutton) << Q_FUNC_INFO << "enabled=" << !anyNonClosable;
m_closeButton->setEnabled(!anyNonClosable);
}
void TitleBarWidget::updateMinimizeButton()
{
m_minimizeButton->setVisible(supportsMinimizeButton());

View File

@@ -47,7 +47,6 @@ protected:
void paintEvent(QPaintEvent *) override;
void mouseDoubleClickEvent(QMouseEvent *) override;
void updateFloatButton() override;
void updateCloseButton() override;
void updateMaximizeButton() override;
void updateMinimizeButton() override;
void updateAutoHideButton() override;