forked from qt-creator/qt-creator
QmlJSEditor: Add option to automatically format QML/JS file on save
Change-Id: Ide1810efdef98595705daa32c83fecc2ad367a49 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Thomas Hartmann <Thomas.Hartmann@theqtcompany.com>
This commit is contained in:
194
src/plugins/qmljseditor/qmljseditingsettingspage.cpp
Normal file
194
src/plugins/qmljseditor/qmljseditingsettingspage.cpp
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator.
|
||||||
|
**
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "qmljseditingsettingspage.h"
|
||||||
|
#include "qmljseditorconstants.h"
|
||||||
|
|
||||||
|
#include <qmljstools/qmljstoolsconstants.h>
|
||||||
|
#include <coreplugin/icore.h>
|
||||||
|
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QTextStream>
|
||||||
|
#include <QCheckBox>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace QmlJSEditor;
|
||||||
|
using namespace QmlJSEditor::Internal;
|
||||||
|
|
||||||
|
QmlJsEditingSettings::QmlJsEditingSettings()
|
||||||
|
: m_enableContextPane(false),
|
||||||
|
m_pinContextPane(false),
|
||||||
|
m_autoFormatOnSave(false),
|
||||||
|
m_autoFormatOnlyCurrentProject(false)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void QmlJsEditingSettings::set()
|
||||||
|
{
|
||||||
|
if (get() != *this)
|
||||||
|
toSettings(Core::ICore::settings());
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlJsEditingSettings::fromSettings(QSettings *settings)
|
||||||
|
{
|
||||||
|
settings->beginGroup(QLatin1String(QmlJSEditor::Constants::SETTINGS_CATEGORY_QML));
|
||||||
|
m_enableContextPane = settings->value(
|
||||||
|
QLatin1String(QmlJSEditor::Constants::QML_CONTEXTPANE_KEY),
|
||||||
|
QVariant(false)).toBool();
|
||||||
|
m_pinContextPane = settings->value(
|
||||||
|
QLatin1String(QmlJSEditor::Constants::QML_CONTEXTPANEPIN_KEY),
|
||||||
|
QVariant(false)).toBool();
|
||||||
|
m_autoFormatOnSave = settings->value(
|
||||||
|
QLatin1String(QmlJSEditor::Constants::AUTO_FORMAT_ON_SAVE),
|
||||||
|
QVariant(false)).toBool();
|
||||||
|
m_autoFormatOnlyCurrentProject = settings->value(
|
||||||
|
QLatin1String(QmlJSEditor::Constants::AUTO_FORMAT_ONLY_CURRENT_PROJECT),
|
||||||
|
QVariant(false)).toBool();
|
||||||
|
settings->endGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlJsEditingSettings::toSettings(QSettings *settings) const
|
||||||
|
{
|
||||||
|
settings->beginGroup(QLatin1String(QmlJSEditor::Constants::SETTINGS_CATEGORY_QML));
|
||||||
|
settings->setValue(QLatin1String(QmlJSEditor::Constants::QML_CONTEXTPANE_KEY),
|
||||||
|
m_enableContextPane);
|
||||||
|
settings->setValue(QLatin1String(QmlJSEditor::Constants::QML_CONTEXTPANEPIN_KEY),
|
||||||
|
m_pinContextPane);
|
||||||
|
settings->setValue(QLatin1String(QmlJSEditor::Constants::AUTO_FORMAT_ON_SAVE),
|
||||||
|
m_autoFormatOnSave);
|
||||||
|
settings->setValue(QLatin1String(QmlJSEditor::Constants::AUTO_FORMAT_ONLY_CURRENT_PROJECT),
|
||||||
|
m_autoFormatOnlyCurrentProject);
|
||||||
|
settings->endGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QmlJsEditingSettings::equals(const QmlJsEditingSettings &other) const
|
||||||
|
{
|
||||||
|
return m_enableContextPane == other.m_enableContextPane
|
||||||
|
&& m_pinContextPane == other.m_pinContextPane
|
||||||
|
&& m_autoFormatOnSave == other.m_autoFormatOnSave
|
||||||
|
&& m_autoFormatOnlyCurrentProject == other.m_autoFormatOnlyCurrentProject;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QmlJsEditingSettings::enableContextPane() const
|
||||||
|
{
|
||||||
|
return m_enableContextPane;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlJsEditingSettings::setEnableContextPane(const bool enableContextPane)
|
||||||
|
{
|
||||||
|
m_enableContextPane = enableContextPane;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QmlJsEditingSettings::pinContextPane() const
|
||||||
|
{
|
||||||
|
return m_pinContextPane;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlJsEditingSettings::setPinContextPane(const bool pinContextPane)
|
||||||
|
{
|
||||||
|
m_pinContextPane = pinContextPane;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QmlJsEditingSettings::autoFormatOnSave() const
|
||||||
|
{
|
||||||
|
return m_autoFormatOnSave;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlJsEditingSettings::setAutoFormatOnSave(const bool autoFormatOnSave)
|
||||||
|
{
|
||||||
|
m_autoFormatOnSave = autoFormatOnSave;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QmlJsEditingSettings::autoFormatOnlyCurrentProject() const
|
||||||
|
{
|
||||||
|
return m_autoFormatOnlyCurrentProject;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlJsEditingSettings::setAutoFormatOnlyCurrentProject(const bool autoFormatOnlyCurrentProject)
|
||||||
|
{
|
||||||
|
m_autoFormatOnlyCurrentProject = autoFormatOnlyCurrentProject;
|
||||||
|
}
|
||||||
|
|
||||||
|
QmlJsEditingSettignsPageWidget::QmlJsEditingSettignsPageWidget(QWidget *parent) :
|
||||||
|
QWidget(parent)
|
||||||
|
{
|
||||||
|
m_ui.setupUi(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QmlJsEditingSettings QmlJsEditingSettignsPageWidget::settings() const
|
||||||
|
{
|
||||||
|
QmlJsEditingSettings s;
|
||||||
|
s.setEnableContextPane(m_ui.textEditHelperCheckBox->isChecked());
|
||||||
|
s.setPinContextPane(m_ui.textEditHelperCheckBoxPin->isChecked());
|
||||||
|
s.setAutoFormatOnSave(m_ui.autoFormatOnSave->isChecked());
|
||||||
|
s.setAutoFormatOnlyCurrentProject(m_ui.autoFormatOnlyCurrentProject->isChecked());
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlJsEditingSettignsPageWidget::setSettings(const QmlJsEditingSettings &s)
|
||||||
|
{
|
||||||
|
m_ui.textEditHelperCheckBox->setChecked(s.enableContextPane());
|
||||||
|
m_ui.textEditHelperCheckBoxPin->setChecked(s.pinContextPane());
|
||||||
|
m_ui.autoFormatOnSave->setChecked(s.autoFormatOnSave());
|
||||||
|
m_ui.autoFormatOnlyCurrentProject->setChecked(s.autoFormatOnlyCurrentProject());
|
||||||
|
}
|
||||||
|
|
||||||
|
QmlJsEditingSettings QmlJsEditingSettings::get()
|
||||||
|
{
|
||||||
|
QmlJsEditingSettings settings;
|
||||||
|
settings.fromSettings(Core::ICore::settings());
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
QmlJsEditingSettingsPage::QmlJsEditingSettingsPage() :
|
||||||
|
m_widget(0)
|
||||||
|
{
|
||||||
|
setId("C.QmlJsEditing");
|
||||||
|
setDisplayName(tr("QML/JS Editing"));
|
||||||
|
setCategory(Constants::SETTINGS_CATEGORY_QML);
|
||||||
|
setDisplayCategory(QCoreApplication::translate("QmlJSEditor",
|
||||||
|
QmlJSEditor::Constants::SETTINGS_TR_CATEGORY_QML));
|
||||||
|
setCategoryIcon(Utils::Icon(QmlJSTools::Constants::SETTINGS_CATEGORY_QML_ICON));
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget *QmlJsEditingSettingsPage::widget()
|
||||||
|
{
|
||||||
|
if (!m_widget) {
|
||||||
|
m_widget = new QmlJsEditingSettignsPageWidget;
|
||||||
|
m_widget->setSettings(QmlJsEditingSettings::get());
|
||||||
|
}
|
||||||
|
return m_widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlJsEditingSettingsPage::apply()
|
||||||
|
{
|
||||||
|
if (!m_widget) // page was never shown
|
||||||
|
return;
|
||||||
|
m_widget->settings().set();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QmlJsEditingSettingsPage::finish()
|
||||||
|
{
|
||||||
|
delete m_widget;
|
||||||
|
}
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "ui_quicktoolbarsettingspage.h"
|
#include "ui_qmljseditingsettingspage.h"
|
||||||
#include <coreplugin/dialogs/ioptionspage.h>
|
#include <coreplugin/dialogs/ioptionspage.h>
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
@@ -36,61 +36,77 @@ QT_END_NAMESPACE
|
|||||||
|
|
||||||
namespace QmlJSEditor {
|
namespace QmlJSEditor {
|
||||||
|
|
||||||
class QuickToolBarSettings {
|
class QmlJsEditingSettings {
|
||||||
public:
|
public:
|
||||||
QuickToolBarSettings();
|
QmlJsEditingSettings();
|
||||||
|
|
||||||
static QuickToolBarSettings get();
|
static QmlJsEditingSettings get();
|
||||||
void set();
|
void set();
|
||||||
|
|
||||||
void fromSettings(QSettings *);
|
void fromSettings(QSettings *);
|
||||||
void toSettings(QSettings *) const;
|
void toSettings(QSettings *) const;
|
||||||
|
|
||||||
bool equals(const QuickToolBarSettings &other) const;
|
bool equals(const QmlJsEditingSettings &other) const;
|
||||||
bool enableContextPane;
|
|
||||||
bool pinContextPane;
|
bool enableContextPane() const;
|
||||||
|
void setEnableContextPane(const bool enableContextPane);
|
||||||
|
|
||||||
|
bool pinContextPane() const;
|
||||||
|
void setPinContextPane(const bool pinContextPane);
|
||||||
|
|
||||||
|
bool autoFormatOnSave() const;
|
||||||
|
void setAutoFormatOnSave(const bool autoFormatOnSave);
|
||||||
|
|
||||||
|
bool autoFormatOnlyCurrentProject() const;
|
||||||
|
void setAutoFormatOnlyCurrentProject(const bool autoFormatOnlyCurrentProject);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_enableContextPane;
|
||||||
|
bool m_pinContextPane;
|
||||||
|
bool m_autoFormatOnSave;
|
||||||
|
bool m_autoFormatOnlyCurrentProject;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline bool operator==(const QuickToolBarSettings &s1, const QuickToolBarSettings &s2)
|
inline bool operator==(const QmlJsEditingSettings &s1, const QmlJsEditingSettings &s2)
|
||||||
{ return s1.equals(s2); }
|
{ return s1.equals(s2); }
|
||||||
inline bool operator!=(const QuickToolBarSettings &s1, const QuickToolBarSettings &s2)
|
inline bool operator!=(const QmlJsEditingSettings &s1, const QmlJsEditingSettings &s2)
|
||||||
{ return !s1.equals(s2); }
|
{ return !s1.equals(s2); }
|
||||||
|
|
||||||
|
|
||||||
class QuickToolBarSettings;
|
class QmlJsEditingSettings;
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
class QuickToolBarSettingsPageWidget : public QWidget
|
class QmlJsEditingSettignsPageWidget : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit QuickToolBarSettingsPageWidget(QWidget *parent = 0);
|
explicit QmlJsEditingSettignsPageWidget(QWidget *parent = 0);
|
||||||
|
|
||||||
QuickToolBarSettings settings() const;
|
QmlJsEditingSettings settings() const;
|
||||||
void setSettings(const QuickToolBarSettings &);
|
void setSettings(const QmlJsEditingSettings &);
|
||||||
|
|
||||||
static QuickToolBarSettings get();
|
static QmlJsEditingSettings get();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::QuickToolBarSettingsPage m_ui;
|
Ui::QmlJsEditingSettingsPage m_ui;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class QuickToolBarSettingsPage : public Core::IOptionsPage
|
class QmlJsEditingSettingsPage : public Core::IOptionsPage
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QuickToolBarSettingsPage();
|
QmlJsEditingSettingsPage();
|
||||||
|
|
||||||
QWidget *widget();
|
QWidget *widget();
|
||||||
void apply();
|
void apply();
|
||||||
void finish();
|
void finish();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QPointer<QuickToolBarSettingsPageWidget> m_widget;
|
QPointer<QmlJsEditingSettignsPageWidget> m_widget;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<class>QmlJSEditor::Internal::QuickToolBarSettingsPage</class>
|
<class>QmlJSEditor::Internal::QmlJsEditingSettingsPage</class>
|
||||||
<widget class="QWidget" name="QmlJSEditor::Internal::QuickToolBarSettingsPage">
|
<widget class="QWidget" name="QmlJSEditor::Internal::QmlJsEditingSettingsPage">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
@@ -14,8 +14,8 @@
|
|||||||
<string>Form</string>
|
<string>Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="0" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QGroupBox" name="groupBox">
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Qt Quick Toolbars</string>
|
<string>Qt Quick Toolbars</string>
|
||||||
</property>
|
</property>
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="3" column="0">
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
@@ -48,13 +48,56 @@
|
|||||||
<property name="sizeHint" stdset="0">
|
<property name="sizeHint" stdset="0">
|
||||||
<size>
|
<size>
|
||||||
<width>20</width>
|
<width>20</width>
|
||||||
<height>207</height>
|
<height>40</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QGroupBox" name="groupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Automatic Formatting on File Save</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="autoFormatOnSave">
|
||||||
|
<property name="text">
|
||||||
|
<string>Enable auto format on file save</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="autoFormatOnlyCurrentProject">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Restrict to files contained in the current project</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>autoFormatOnSave</sender>
|
||||||
|
<signal>toggled(bool)</signal>
|
||||||
|
<receiver>autoFormatOnlyCurrentProject</receiver>
|
||||||
|
<slot>setEnabled(bool)</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>216</x>
|
||||||
|
<y>40</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>216</x>
|
||||||
|
<y>63</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
</ui>
|
</ui>
|
||||||
@@ -17,7 +17,7 @@ HEADERS += \
|
|||||||
qmloutlinemodel.h \
|
qmloutlinemodel.h \
|
||||||
qmltaskmanager.h \
|
qmltaskmanager.h \
|
||||||
qmljsoutlinetreeview.h \
|
qmljsoutlinetreeview.h \
|
||||||
quicktoolbarsettingspage.h \
|
qmljseditingsettingspage.h \
|
||||||
quicktoolbar.h \
|
quicktoolbar.h \
|
||||||
qmljscomponentnamedialog.h \
|
qmljscomponentnamedialog.h \
|
||||||
qmljsfindreferences.h \
|
qmljsfindreferences.h \
|
||||||
@@ -46,7 +46,7 @@ SOURCES += \
|
|||||||
qmltaskmanager.cpp \
|
qmltaskmanager.cpp \
|
||||||
qmljsquickfixes.cpp \
|
qmljsquickfixes.cpp \
|
||||||
qmljsoutlinetreeview.cpp \
|
qmljsoutlinetreeview.cpp \
|
||||||
quicktoolbarsettingspage.cpp \
|
qmljseditingsettingspage.cpp \
|
||||||
quicktoolbar.cpp \
|
quicktoolbar.cpp \
|
||||||
qmljscomponentnamedialog.cpp \
|
qmljscomponentnamedialog.cpp \
|
||||||
qmljsfindreferences.cpp \
|
qmljsfindreferences.cpp \
|
||||||
@@ -62,5 +62,5 @@ SOURCES += \
|
|||||||
qmljseditordocument.cpp
|
qmljseditordocument.cpp
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
quicktoolbarsettingspage.ui \
|
qmljseditingsettingspage.ui \
|
||||||
qmljscomponentnamedialog.ui
|
qmljscomponentnamedialog.ui
|
||||||
|
|||||||
@@ -26,6 +26,9 @@ QtcPlugin {
|
|||||||
"qmljscomponentnamedialog.cpp",
|
"qmljscomponentnamedialog.cpp",
|
||||||
"qmljscomponentnamedialog.h",
|
"qmljscomponentnamedialog.h",
|
||||||
"qmljscomponentnamedialog.ui",
|
"qmljscomponentnamedialog.ui",
|
||||||
|
"qmljseditingsettingspage.cpp",
|
||||||
|
"qmljseditingsettingspage.h",
|
||||||
|
"qmljseditingsettingspage.ui",
|
||||||
"qmljseditor.cpp",
|
"qmljseditor.cpp",
|
||||||
"qmljseditor.h",
|
"qmljseditor.h",
|
||||||
"qmljseditor_global.h",
|
"qmljseditor_global.h",
|
||||||
@@ -68,9 +71,6 @@ QtcPlugin {
|
|||||||
"qmltaskmanager.h",
|
"qmltaskmanager.h",
|
||||||
"quicktoolbar.cpp",
|
"quicktoolbar.cpp",
|
||||||
"quicktoolbar.h",
|
"quicktoolbar.h",
|
||||||
"quicktoolbarsettingspage.cpp",
|
|
||||||
"quicktoolbarsettingspage.h",
|
|
||||||
"quicktoolbarsettingspage.ui",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
Export {
|
Export {
|
||||||
|
|||||||
@@ -57,5 +57,8 @@ const char QML_CONTEXTPANEPIN_KEY[] = "QmlJSEditor.ContextPanePinned";
|
|||||||
|
|
||||||
const char QML_UI_FILE_WARNING[] = "QmlJSEditor.QmlUiFileWarning";
|
const char QML_UI_FILE_WARNING[] = "QmlJSEditor.QmlUiFileWarning";
|
||||||
|
|
||||||
|
const char AUTO_FORMAT_ON_SAVE[] = "QmlJSEditor.AutoFormatOnSave";
|
||||||
|
const char AUTO_FORMAT_ONLY_CURRENT_PROJECT[] = "QmlJSEditor.AutoFormatOnlyCurrentProject";
|
||||||
|
|
||||||
} // namespace Constants
|
} // namespace Constants
|
||||||
} // namespace QmlJSEditor
|
} // namespace QmlJSEditor
|
||||||
|
|||||||
@@ -23,18 +23,18 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "qmljseditorplugin.h"
|
#include "qmljseditingsettingspage.h"
|
||||||
#include "qmljshighlighter.h"
|
|
||||||
#include "qmljseditor.h"
|
#include "qmljseditor.h"
|
||||||
#include "qmljseditorconstants.h"
|
#include "qmljseditorconstants.h"
|
||||||
#include "qmljseditordocument.h"
|
#include "qmljseditordocument.h"
|
||||||
|
#include "qmljseditorplugin.h"
|
||||||
|
#include "qmljshighlighter.h"
|
||||||
#include "qmljsoutline.h"
|
#include "qmljsoutline.h"
|
||||||
#include "qmljspreviewrunner.h"
|
#include "qmljspreviewrunner.h"
|
||||||
|
#include "qmljsquickfixassist.h"
|
||||||
#include "qmljssnippetprovider.h"
|
#include "qmljssnippetprovider.h"
|
||||||
#include "qmltaskmanager.h"
|
#include "qmltaskmanager.h"
|
||||||
#include "quicktoolbar.h"
|
#include "quicktoolbar.h"
|
||||||
#include "quicktoolbarsettingspage.h"
|
|
||||||
#include "qmljsquickfixassist.h"
|
|
||||||
|
|
||||||
#include <qmljs/qmljsicons.h>
|
#include <qmljs/qmljsicons.h>
|
||||||
#include <qmljs/qmljsmodelmanagerinterface.h>
|
#include <qmljs/qmljsmodelmanagerinterface.h>
|
||||||
@@ -50,6 +50,8 @@
|
|||||||
#include <coreplugin/actionmanager/command.h>
|
#include <coreplugin/actionmanager/command.h>
|
||||||
#include <coreplugin/editormanager/editormanager.h>
|
#include <coreplugin/editormanager/editormanager.h>
|
||||||
#include <projectexplorer/taskhub.h>
|
#include <projectexplorer/taskhub.h>
|
||||||
|
#include <projectexplorer/project.h>
|
||||||
|
#include <projectexplorer/projecttree.h>
|
||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
#include <texteditor/texteditorconstants.h>
|
#include <texteditor/texteditorconstants.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
@@ -193,11 +195,14 @@ bool QmlJSEditorPlugin::initialize(const QStringList & /*arguments*/, QString *e
|
|||||||
addAutoReleasedObject(new QmlJSOutlineWidgetFactory);
|
addAutoReleasedObject(new QmlJSOutlineWidgetFactory);
|
||||||
|
|
||||||
addAutoReleasedObject(new QuickToolBar);
|
addAutoReleasedObject(new QuickToolBar);
|
||||||
addAutoReleasedObject(new QuickToolBarSettingsPage);
|
addAutoReleasedObject(new QmlJsEditingSettingsPage);
|
||||||
|
|
||||||
connect(EditorManager::instance(), &EditorManager::currentEditorChanged,
|
connect(EditorManager::instance(), &EditorManager::currentEditorChanged,
|
||||||
this, &QmlJSEditorPlugin::currentEditorChanged);
|
this, &QmlJSEditorPlugin::currentEditorChanged);
|
||||||
|
|
||||||
|
connect(EditorManager::instance(), &Core::EditorManager::aboutToSave,
|
||||||
|
this, &QmlJSEditorPlugin::autoFormatOnSave);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,9 +239,25 @@ void QmlJSEditorPlugin::renameUsages()
|
|||||||
void QmlJSEditorPlugin::reformatFile()
|
void QmlJSEditorPlugin::reformatFile()
|
||||||
{
|
{
|
||||||
if (m_currentDocument) {
|
if (m_currentDocument) {
|
||||||
QTC_ASSERT(!m_currentDocument->isSemanticInfoOutdated(), return);
|
QmlJS::Document::Ptr document = m_currentDocument->semanticInfo().document;
|
||||||
|
QmlJS::Snapshot snapshot = QmlJS::ModelManagerInterface::instance()->snapshot();
|
||||||
|
|
||||||
const QString &newText = QmlJS::reformat(m_currentDocument->semanticInfo().document);
|
if (m_currentDocument->isSemanticInfoOutdated()) {
|
||||||
|
QmlJS::Document::MutablePtr latestDocument;
|
||||||
|
|
||||||
|
const QString fileName = m_currentDocument->filePath().toString();
|
||||||
|
latestDocument = snapshot.documentFromSource(QString::fromUtf8(m_currentDocument->contents()),
|
||||||
|
fileName,
|
||||||
|
QmlJS::ModelManagerInterface::guessLanguageOfFile(fileName));
|
||||||
|
latestDocument->parseQml();
|
||||||
|
snapshot.insert(latestDocument);
|
||||||
|
document = latestDocument;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!document->isParsedCorrectly())
|
||||||
|
return;
|
||||||
|
|
||||||
|
const QString &newText = QmlJS::reformat(document);
|
||||||
QTextCursor tc(m_currentDocument->document());
|
QTextCursor tc(m_currentDocument->document());
|
||||||
tc.movePosition(QTextCursor::Start);
|
tc.movePosition(QTextCursor::Start);
|
||||||
tc.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
|
tc.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
|
||||||
@@ -296,4 +317,25 @@ void QmlJSEditorPlugin::checkCurrentEditorSemanticInfoUpToDate()
|
|||||||
m_reformatFileAction->setEnabled(semanticInfoUpToDate);
|
m_reformatFileAction->setEnabled(semanticInfoUpToDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QmlJSEditorPlugin::autoFormatOnSave(Core::IDocument *document)
|
||||||
|
{
|
||||||
|
if (!QmlJsEditingSettings::get().autoFormatOnSave())
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Check that we are dealing with a QML/JS editor
|
||||||
|
if (document->id() != Constants::C_QMLJSEDITOR_ID)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Check if file is contained in the current project (if wished)
|
||||||
|
if (QmlJsEditingSettings::get().autoFormatOnlyCurrentProject()) {
|
||||||
|
const ProjectExplorer::Project *pro = ProjectExplorer::ProjectTree::currentProject();
|
||||||
|
if (!pro || !pro->files(ProjectExplorer::Project::SourceFiles).contains(
|
||||||
|
document->filePath().toString())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reformatFile();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace QmlJSEditor
|
} // namespace QmlJSEditor
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ namespace Utils { class JsonSchemaManager; }
|
|||||||
namespace Core {
|
namespace Core {
|
||||||
class Command;
|
class Command;
|
||||||
class ActionContainer;
|
class ActionContainer;
|
||||||
|
class IDocument;
|
||||||
class IEditor;
|
class IEditor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,6 +83,7 @@ private:
|
|||||||
void currentEditorChanged(Core::IEditor *editor);
|
void currentEditorChanged(Core::IEditor *editor);
|
||||||
void runSemanticScan();
|
void runSemanticScan();
|
||||||
void checkCurrentEditorSemanticInfoUpToDate();
|
void checkCurrentEditorSemanticInfoUpToDate();
|
||||||
|
void autoFormatOnSave(Core::IDocument *document);
|
||||||
|
|
||||||
Core::Command *addToolAction(QAction *a, Core::Context &context, Core::Id id,
|
Core::Command *addToolAction(QAction *a, Core::Context &context, Core::Id id,
|
||||||
Core::ActionContainer *c1, const QString &keySequence);
|
Core::ActionContainer *c1, const QString &keySequence);
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "quicktoolbar.h"
|
#include "quicktoolbar.h"
|
||||||
#include "quicktoolbarsettingspage.h"
|
#include "qmljseditingsettingspage.h"
|
||||||
|
|
||||||
#include <utils/changeset.h>
|
#include <utils/changeset.h>
|
||||||
#include <qmleditorwidgets/contextpanewidget.h>
|
#include <qmleditorwidgets/contextpanewidget.h>
|
||||||
@@ -114,7 +114,7 @@ QuickToolBar::~QuickToolBar()
|
|||||||
|
|
||||||
void QuickToolBar::apply(TextEditor::TextEditorWidget *editorWidget, Document::Ptr document, const ScopeChain *scopeChain, Node *node, bool update, bool force)
|
void QuickToolBar::apply(TextEditor::TextEditorWidget *editorWidget, Document::Ptr document, const ScopeChain *scopeChain, Node *node, bool update, bool force)
|
||||||
{
|
{
|
||||||
if (!QuickToolBarSettings::get().enableContextPane && !force && !update) {
|
if (!QmlJsEditingSettings::get().enableContextPane() && !force && !update) {
|
||||||
contextWidget()->hide();
|
contextWidget()->hide();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -219,10 +219,10 @@ void QuickToolBar::apply(TextEditor::TextEditorWidget *editorWidget, Document::P
|
|||||||
if (!update)
|
if (!update)
|
||||||
contextWidget()->setType(m_prototypes);
|
contextWidget()->setType(m_prototypes);
|
||||||
if (!update)
|
if (!update)
|
||||||
contextWidget()->activate(p3 , p1, p2, QuickToolBarSettings::get().pinContextPane);
|
contextWidget()->activate(p3 , p1, p2, QmlJsEditingSettings::get().pinContextPane());
|
||||||
else
|
else
|
||||||
contextWidget()->rePosition(p3 , p1, p2, QuickToolBarSettings::get().pinContextPane);
|
contextWidget()->rePosition(p3 , p1, p2, QmlJsEditingSettings::get().pinContextPane());
|
||||||
contextWidget()->setOptions(QuickToolBarSettings::get().enableContextPane, QuickToolBarSettings::get().pinContextPane);
|
contextWidget()->setOptions(QmlJsEditingSettings::get().enableContextPane(), QmlJsEditingSettings::get().pinContextPane());
|
||||||
contextWidget()->setPath(document->path());
|
contextWidget()->setPath(document->path());
|
||||||
contextWidget()->setProperties(&propertyReader);
|
contextWidget()->setProperties(&propertyReader);
|
||||||
m_doc = document;
|
m_doc = document;
|
||||||
@@ -404,16 +404,16 @@ void QuickToolBar::onPropertyRemovedAndChange(const QString &remove, const QStri
|
|||||||
|
|
||||||
void QuickToolBar::onPinnedChanged(bool b)
|
void QuickToolBar::onPinnedChanged(bool b)
|
||||||
{
|
{
|
||||||
QuickToolBarSettings settings = QuickToolBarSettings::get();
|
QmlJsEditingSettings settings = QmlJsEditingSettings::get();
|
||||||
settings.pinContextPane = b;
|
settings.setPinContextPane(b);
|
||||||
settings.set();
|
settings.set();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickToolBar::onEnabledChanged(bool b)
|
void QuickToolBar::onEnabledChanged(bool b)
|
||||||
{
|
{
|
||||||
QuickToolBarSettings settings = QuickToolBarSettings::get();
|
QmlJsEditingSettings settings = QmlJsEditingSettings::get();
|
||||||
settings.pinContextPane = b;
|
settings.setPinContextPane(b);
|
||||||
settings.enableContextPane = b;
|
settings.setEnableContextPane(b);
|
||||||
settings.set();
|
settings.set();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,133 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of Qt Creator.
|
|
||||||
**
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
||||||
** information use the contact form at https://www.qt.io/contact-us.
|
|
||||||
**
|
|
||||||
** GNU General Public License Usage
|
|
||||||
** Alternatively, this file may be used under the terms of the GNU
|
|
||||||
** General Public License version 3 as published by the Free Software
|
|
||||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
|
||||||
** included in the packaging of this file. Please review the following
|
|
||||||
** information to ensure the GNU General Public License requirements will
|
|
||||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include "quicktoolbarsettingspage.h"
|
|
||||||
#include "qmljseditorconstants.h"
|
|
||||||
|
|
||||||
#include <qmljstools/qmljstoolsconstants.h>
|
|
||||||
#include <coreplugin/icore.h>
|
|
||||||
|
|
||||||
#include <QSettings>
|
|
||||||
#include <QTextStream>
|
|
||||||
#include <QCheckBox>
|
|
||||||
|
|
||||||
|
|
||||||
using namespace QmlJSEditor;
|
|
||||||
using namespace QmlJSEditor::Internal;
|
|
||||||
|
|
||||||
QuickToolBarSettings::QuickToolBarSettings()
|
|
||||||
: enableContextPane(false),
|
|
||||||
pinContextPane(false)
|
|
||||||
{}
|
|
||||||
|
|
||||||
void QuickToolBarSettings::set()
|
|
||||||
{
|
|
||||||
if (get() != *this)
|
|
||||||
toSettings(Core::ICore::settings());
|
|
||||||
}
|
|
||||||
|
|
||||||
void QuickToolBarSettings::fromSettings(QSettings *settings)
|
|
||||||
{
|
|
||||||
settings->beginGroup(QLatin1String(QmlJSEditor::Constants::SETTINGS_CATEGORY_QML));
|
|
||||||
enableContextPane = settings->value(
|
|
||||||
QLatin1String(QmlJSEditor::Constants::QML_CONTEXTPANE_KEY), QVariant(false)).toBool();
|
|
||||||
pinContextPane = settings->value(
|
|
||||||
QLatin1String(QmlJSEditor::Constants::QML_CONTEXTPANEPIN_KEY), QVariant(false)).toBool();
|
|
||||||
settings->endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
void QuickToolBarSettings::toSettings(QSettings *settings) const
|
|
||||||
{
|
|
||||||
settings->beginGroup(QLatin1String(QmlJSEditor::Constants::SETTINGS_CATEGORY_QML));
|
|
||||||
settings->setValue(QLatin1String(QmlJSEditor::Constants::QML_CONTEXTPANE_KEY), enableContextPane);
|
|
||||||
settings->setValue(QLatin1String(QmlJSEditor::Constants::QML_CONTEXTPANEPIN_KEY), pinContextPane);
|
|
||||||
settings->endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QuickToolBarSettings::equals(const QuickToolBarSettings &other) const
|
|
||||||
{
|
|
||||||
return enableContextPane == other.enableContextPane
|
|
||||||
&& pinContextPane == other.pinContextPane;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QuickToolBarSettingsPageWidget::QuickToolBarSettingsPageWidget(QWidget *parent) :
|
|
||||||
QWidget(parent)
|
|
||||||
{
|
|
||||||
m_ui.setupUi(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
QuickToolBarSettings QuickToolBarSettingsPageWidget::settings() const
|
|
||||||
{
|
|
||||||
QuickToolBarSettings ds;
|
|
||||||
ds.enableContextPane = m_ui.textEditHelperCheckBox->isChecked();
|
|
||||||
ds.pinContextPane = m_ui.textEditHelperCheckBoxPin->isChecked();
|
|
||||||
return ds;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QuickToolBarSettingsPageWidget::setSettings(const QuickToolBarSettings &s)
|
|
||||||
{
|
|
||||||
m_ui.textEditHelperCheckBox->setChecked(s.enableContextPane);
|
|
||||||
m_ui.textEditHelperCheckBoxPin->setChecked(s.pinContextPane);
|
|
||||||
}
|
|
||||||
|
|
||||||
QuickToolBarSettings QuickToolBarSettings::get()
|
|
||||||
{
|
|
||||||
QuickToolBarSettings settings;
|
|
||||||
settings.fromSettings(Core::ICore::settings());
|
|
||||||
return settings;
|
|
||||||
}
|
|
||||||
|
|
||||||
QuickToolBarSettingsPage::QuickToolBarSettingsPage() :
|
|
||||||
m_widget(0)
|
|
||||||
{
|
|
||||||
setId("C.QmlToolbar");
|
|
||||||
setDisplayName(tr("Qt Quick ToolBar"));
|
|
||||||
setCategory(Constants::SETTINGS_CATEGORY_QML);
|
|
||||||
setDisplayCategory(QCoreApplication::translate("QmlJSEditor",
|
|
||||||
QmlJSEditor::Constants::SETTINGS_TR_CATEGORY_QML));
|
|
||||||
setCategoryIcon(Utils::Icon(QmlJSTools::Constants::SETTINGS_CATEGORY_QML_ICON));
|
|
||||||
}
|
|
||||||
|
|
||||||
QWidget *QuickToolBarSettingsPage::widget()
|
|
||||||
{
|
|
||||||
if (!m_widget) {
|
|
||||||
m_widget = new QuickToolBarSettingsPageWidget;
|
|
||||||
m_widget->setSettings(QuickToolBarSettings::get());
|
|
||||||
}
|
|
||||||
return m_widget;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QuickToolBarSettingsPage::apply()
|
|
||||||
{
|
|
||||||
if (!m_widget) // page was never shown
|
|
||||||
return;
|
|
||||||
m_widget->settings().set();
|
|
||||||
}
|
|
||||||
|
|
||||||
void QuickToolBarSettingsPage::finish()
|
|
||||||
{
|
|
||||||
delete m_widget;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user