From a51941db310cfa9938c3f6841f81aa50b8564b84 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 25 Jan 2023 20:50:22 +0100 Subject: [PATCH] QmlDesigner: Implement styles in the status bar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I8413394484dc9d19e1bbe64391cefaba0f976f94 Reviewed-by: Henning Gründl --- .../qtcreator/qmldesigner/statusbar/Main.qml | 5 +- .../components/toolbar/toolbarbackend.cpp | 49 +++++++++++++++++++ .../components/toolbar/toolbarbackend.h | 7 +++ 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/qmldesigner/statusbar/Main.qml b/share/qtcreator/qmldesigner/statusbar/Main.qml index 0fbd95ea44d..70972031775 100644 --- a/share/qtcreator/qmldesigner/statusbar/Main.qml +++ b/share/qtcreator/qmldesigner/statusbar/Main.qml @@ -64,10 +64,11 @@ Item { anchors.verticalCenter: parent.verticalCenter anchors.left: kits.right anchors.leftMargin: 32 - model: [ "Basic", "Default", "Universal", "Material" ] - //onActivated: backend.setCurrentWorkspace(workspaces.currentText) + model: backend.styles + onActivated: backend.setCurrentStyle(styles.currentIndex) openUpwards: true enabled: backend.isInDesignMode + currentIndex: backend.currentStyle } diff --git a/src/plugins/qmldesigner/components/toolbar/toolbarbackend.cpp b/src/plugins/qmldesigner/components/toolbar/toolbarbackend.cpp index 832692ef1be..32ee44740dc 100644 --- a/src/plugins/qmldesigner/components/toolbar/toolbarbackend.cpp +++ b/src/plugins/qmldesigner/components/toolbar/toolbarbackend.cpp @@ -3,6 +3,7 @@ #include "toolbarbackend.h" +#include #include #include #include @@ -174,6 +175,26 @@ void ToolBarBackend::showZoomMenu(int x, int y) mainMenu->deleteLater(); } +void ToolBarBackend::setCurrentStyle(int index) +{ + const QList items = ChangeStyleWidgetAction::getAllStyleItems(); + + QTC_ASSERT(items.count() > index, return ); + QTC_ASSERT(index > 0, return ); + + QTC_ASSERT(currentDesignDocument(), return ); + + auto item = items.at(index); + + auto view = currentDesignDocument()->rewriterView(); + + const QString qmlFile = view->model()->fileUrl().toLocalFile(); + + ChangeStyleWidgetAction::changeCurrentStyle(item.styleName, qmlFile); + + view->resetPuppet(); +} + bool ToolBarBackend::canGoBack() const { QTC_ASSERT(designModeWidget(), return false); @@ -223,6 +244,11 @@ ToolBarBackend::ToolBarBackend(QObject *parent) this, &ToolBarBackend::documentIndexChanged); + connect(Core::EditorManager::instance(), + &Core::EditorManager::currentEditorChanged, + this, + &ToolBarBackend::currentStyleChanged); + connect(designModeWidget(), &Internal::DesignModeWidget::initialized, this, [this]() { const auto dockManager = designModeWidget()->dockManager(); @@ -300,6 +326,16 @@ QStringList ToolBarBackend::workspaces() const return m_workspaces; } +QStringList ToolBarBackend::styles() const +{ + const QList items = ChangeStyleWidgetAction::getAllStyleItems(); + QStringList list; + for (const auto &item : items) + list.append(item.displayName); + + return list; +} + bool ToolBarBackend::isInDesignMode() const { if (!Core::ModeManager::instance()) @@ -316,6 +352,19 @@ bool ToolBarBackend::isDesignModeEnabled() const return false; } +int ToolBarBackend::currentStyle() const +{ + QTC_ASSERT(currentDesignDocument(), return 0); + + auto view = currentDesignDocument()->rewriterView(); + + const QString qmlFile = view->model()->fileUrl().toLocalFile(); + + const int index = ChangeStyleWidgetAction::getCurrentStyle(qmlFile); + + return index; +} + void ToolBarBackend::setupWorkspaces() { m_workspaces.clear(); diff --git a/src/plugins/qmldesigner/components/toolbar/toolbarbackend.h b/src/plugins/qmldesigner/components/toolbar/toolbarbackend.h index 9bf2869dd26..b957d9dcb8f 100644 --- a/src/plugins/qmldesigner/components/toolbar/toolbarbackend.h +++ b/src/plugins/qmldesigner/components/toolbar/toolbarbackend.h @@ -74,8 +74,10 @@ class ToolBarBackend : public QObject Q_PROPERTY(int documentIndex READ documentIndex NOTIFY documentIndexChanged) Q_PROPERTY(QString currentWorkspace READ currentWorkspace NOTIFY currentWorkspaceChanged) Q_PROPERTY(QStringList workspaces READ workspaces NOTIFY workspacesChanged) + Q_PROPERTY(QStringList styles READ styles FINAL) Q_PROPERTY(bool isInDesignMode READ isInDesignMode NOTIFY isInDesignModeChanged) Q_PROPERTY(bool isDesignModeEnabled READ isDesignModeEnabled NOTIFY isDesignModeEnabledChanged) + Q_PROPERTY(int currentStyle READ currentStyle NOTIFY currentStyleChanged) public: ToolBarBackend(QObject *parent = nullptr); @@ -92,6 +94,7 @@ public: Q_INVOKABLE void setCurrentWorkspace(const QString &workspace); Q_INVOKABLE void editGlobalAnnoation(); Q_INVOKABLE void showZoomMenu(int x, int y); + Q_INVOKABLE void setCurrentStyle(int index); bool canGoBack() const; bool canGoForward() const; @@ -104,8 +107,11 @@ public: QString currentWorkspace() const; QStringList workspaces() const; + QStringList styles() const; + bool isInDesignMode() const; bool isDesignModeEnabled() const; + int currentStyle() const; signals: void navigationHistoryChanged(); @@ -115,6 +121,7 @@ signals: void workspacesChanged(); void isInDesignModeChanged(); void isDesignModeEnabledChanged(); + void currentStyleChanged(); private: void setupWorkspaces();