From fafb99d9101cdb13eff028e3e1ecbe84d7ea70ad Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 7 Oct 2016 12:15:33 +0200 Subject: [PATCH] QmlDesigner: Reformat .ui.qml files when saving The feature can be turned off using a setting, if there are serious issues with the reformating. Change-Id: If90475af2db8aaade8bc52af0fb7cd14bfa1c121 Reviewed-by: Tim Jenssen --- src/plugins/qmldesigner/designersettings.cpp | 1 + src/plugins/qmldesigner/designersettings.h | 4 ++- src/plugins/qmldesigner/shortcutmanager.cpp | 28 ++++++++++++++++++-- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/plugins/qmldesigner/designersettings.cpp b/src/plugins/qmldesigner/designersettings.cpp index 6a371a50b49..9e06deab976 100644 --- a/src/plugins/qmldesigner/designersettings.cpp +++ b/src/plugins/qmldesigner/designersettings.cpp @@ -68,6 +68,7 @@ void DesignerSettings::fromSettings(QSettings *settings) restoreValue(settings, DesignerSettingsKey::PUPPET_KILL_TIMEOUT, 3000); // this has no ui at the moment restoreValue(settings, DesignerSettingsKey::DEBUG_PUPPET, QString()); restoreValue(settings, DesignerSettingsKey::FORWARD_PUPPET_OUTPUT, QString()); + restoreValue(settings, DesignerSettingsKey::REFORMAT_UI_QML_FILES, true); settings->endGroup(); settings->endGroup(); diff --git a/src/plugins/qmldesigner/designersettings.h b/src/plugins/qmldesigner/designersettings.h index 2159230cbfd..bc53d15aca1 100644 --- a/src/plugins/qmldesigner/designersettings.h +++ b/src/plugins/qmldesigner/designersettings.h @@ -57,7 +57,9 @@ const char ENABLE_MODEL_EXCEPTION_OUTPUT[] = "WarnException"; const char PUPPET_KILL_TIMEOUT[] = "PuppetKillTimeout"; const char DEBUG_PUPPET[] = "DebugPuppet"; const char FORWARD_PUPPET_OUTPUT[] = "ForwardPuppetOutput"; - +const char REFORMAT_UI_QML_FILES[] = "ReformatUiQmlFiles"; /* This Setting is not exposed in ui. + The setting can be used to turn off the feature, + if there are serious issues */ } class DesignerSettings : public QHash diff --git a/src/plugins/qmldesigner/shortcutmanager.cpp b/src/plugins/qmldesigner/shortcutmanager.cpp index c17740c6706..d06f32c1181 100644 --- a/src/plugins/qmldesigner/shortcutmanager.cpp +++ b/src/plugins/qmldesigner/shortcutmanager.cpp @@ -25,6 +25,8 @@ #include "shortcutmanager.h" +#include "designersettings.h" + #include #include #include @@ -33,7 +35,13 @@ #include #include #include +#include +#include + #include +#include + +#include #include "qmldesignerconstants.h" #include "qmldesignerplugin.h" @@ -106,13 +114,29 @@ void ShortCutManager::registerActions(const Core::Context &qmlDesignerMainContex SLOT(toggleRightSidebar())); // Revert to saved - QObject *em = Core::EditorManager::instance(); + Core::EditorManager *em = Core::EditorManager::instance(); Core::ActionManager::registerAction(&m_revertToSavedAction,Core::Constants::REVERTTOSAVED, qmlDesignerMainContext); connect(&m_revertToSavedAction, SIGNAL(triggered()), em, SLOT(revertToSaved())); //Save Core::ActionManager::registerAction(&m_saveAction, Core::Constants::SAVE, qmlDesignerMainContext); - connect(&m_saveAction, SIGNAL(triggered()), em, SLOT(saveDocument())); + connect(&m_saveAction, &QAction::triggered, em, [em] { + DesignerSettings settings = QmlDesignerPlugin::instance()->settings(); + /* Reformat document if we have a .ui.qml file */ + if (settings.value(DesignerSettingsKey::REFORMAT_UI_QML_FILES).toBool() + && em->currentDocument()->filePath().toString().endsWith(".ui.qml")) + if (QmlJSEditor::QmlJSEditorDocument *document + = qobject_cast(em->currentDocument())) { + const QString &newText = QmlJS::reformat(document->semanticInfo().document); + QTextCursor tc(document->document()); + tc.movePosition(QTextCursor::Start); + tc.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); + tc.insertText(newText); + } + em->saveDocument(); + }); + + //Save As Core::ActionManager::registerAction(&m_saveAsAction, Core::Constants::SAVEAS, qmlDesignerMainContext);