Move title bar logic regarding close button to base class
So QtQuick can use it too
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user