implemented the ability to close panels

This commit is contained in:
Roman Pudashkin 2021-01-28 15:26:47 +02:00 committed by pereverzev+v
parent 88c897de54
commit 0d2a610dd1
3 changed files with 45 additions and 8 deletions

View file

@ -44,7 +44,9 @@ DockPage {
color: notationPage.color
borderColor: notationPage.borderColor
floatable: true
closable: true
PalettesWidget {}
},
@ -62,7 +64,9 @@ DockPage {
borderColor: notationPage.borderColor
tabifyObjectName: "palettePanel"
floatable: true
closable: true
InstrumentsPanel {
anchors.fill: parent
@ -82,7 +86,9 @@ DockPage {
borderColor: notationPage.borderColor
tabifyObjectName: "instrumentsPanel"
floatable: true
closable: true
InspectorForm {
anchors.fill: parent

View file

@ -19,8 +19,6 @@
#include "dockpanel.h"
#include <QDockWidget>
using namespace mu::dock;
static const QString PANEL_QSS = QString("QDockWidget { border: 1 solid %2; color: transparent; }"
@ -130,7 +128,7 @@ void DockPanel::setMinimumWidth(int width)
bool DockPanel::floatable() const
{
return panel()->features().testFlag(QDockWidget::DockWidgetFloatable);
return featureEnabled(QDockWidget::DockWidgetFloatable);
}
void DockPanel::setFloatable(bool floatable)
@ -139,14 +137,40 @@ void DockPanel::setFloatable(bool floatable)
return;
}
QDockWidget::DockWidgetFeatures features = panel()->features();
features.setFlag(QDockWidget::DockWidgetFloatable, floatable);
panel()->setFeatures(features);
setFeature(QDockWidget::DockWidgetFloatable, floatable);
emit floatableChanged(floatable);
}
bool DockPanel::closable() const
{
return featureEnabled(QDockWidget::DockWidgetClosable);
}
void DockPanel::setClosable(bool closable)
{
if (closable == this->closable()) {
return;
}
setFeature(QDockWidget::DockWidgetClosable, closable);
emit closableChanged(closable);
}
void DockPanel::setFeature(QDockWidget::DockWidgetFeature feature, bool value)
{
QDockWidget::DockWidgetFeatures features = panel()->features();
features.setFlag(feature, value);
panel()->setFeatures(features);
}
bool DockPanel::featureEnabled(QDockWidget::DockWidgetFeature feature) const
{
return panel()->features().testFlag(feature);
}
QDockWidget* DockPanel::panel() const
{
return m_dock.panel;

View file

@ -22,7 +22,7 @@
#include "dockview.h"
class QDockWidget;
#include <QDockWidget>
namespace mu::dock {
class DockPanel : public DockView
@ -34,6 +34,7 @@ class DockPanel : public DockView
Q_PROPERTY(QString tabifyObjectName READ tabifyObjectName WRITE setTabifyObjectName NOTIFY tabifyObjectNameChanged)
Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth NOTIFY minimumWidthChanged)
Q_PROPERTY(bool floatable READ floatable WRITE setFloatable NOTIFY floatableChanged)
Q_PROPERTY(bool closable READ closable WRITE setClosable NOTIFY closableChanged)
public:
explicit DockPanel(QQuickItem* parent = nullptr);
@ -47,6 +48,7 @@ public:
int preferedWidth() const;
bool floatable() const;
bool closable() const;
struct Widget {
QDockWidget* panel = nullptr;
@ -62,6 +64,7 @@ public slots:
void setTabifyObjectName(QString tabifyObjectName);
void setMinimumWidth(int width);
void setFloatable(bool floatable);
void setClosable(bool closable);
signals:
void titleChanged(QString title);
@ -69,6 +72,7 @@ signals:
void tabifyObjectNameChanged(QString tabifyObjectName);
void minimumWidthChanged(int width);
void floatableChanged(bool floatable);
void closableChanged(bool closable);
protected:
void onComponentCompleted() override;
@ -77,6 +81,9 @@ protected:
private:
QDockWidget* panel() const;
void setFeature(QDockWidget::DockWidgetFeature feature, bool value);
bool featureEnabled(QDockWidget::DockWidgetFeature feature) const;
Widget m_dock;
QString m_title;