2022-08-19 15:59:36 +02:00
|
|
|
// Copyright (C) 2016 The Qt Company Ltd.
|
|
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
|
2016-06-18 14:15:02 +02:00
|
|
|
|
|
|
|
|
#include "qmljseditingsettingspage.h"
|
|
|
|
|
#include "qmljseditorconstants.h"
|
|
|
|
|
|
2022-05-05 18:18:44 +03:00
|
|
|
#include <coreplugin/coreconstants.h>
|
2016-06-18 14:15:02 +02:00
|
|
|
#include <coreplugin/icore.h>
|
2022-08-17 17:13:21 +02:00
|
|
|
#include <qmljstools/qmljstoolsconstants.h>
|
|
|
|
|
#include <utils/layoutbuilder.h>
|
2016-06-18 14:15:02 +02:00
|
|
|
|
2022-08-17 17:13:21 +02:00
|
|
|
#include <QCheckBox>
|
|
|
|
|
#include <QComboBox>
|
2016-06-18 14:15:02 +02:00
|
|
|
#include <QSettings>
|
|
|
|
|
#include <QTextStream>
|
|
|
|
|
|
2019-07-18 14:17:25 +02:00
|
|
|
const char AUTO_FORMAT_ON_SAVE[] = "QmlJSEditor.AutoFormatOnSave";
|
|
|
|
|
const char AUTO_FORMAT_ONLY_CURRENT_PROJECT[] = "QmlJSEditor.AutoFormatOnlyCurrentProject";
|
|
|
|
|
const char QML_CONTEXTPANE_KEY[] = "QmlJSEditor.ContextPaneEnabled";
|
|
|
|
|
const char QML_CONTEXTPANEPIN_KEY[] = "QmlJSEditor.ContextPanePinned";
|
2020-02-20 15:19:12 +01:00
|
|
|
const char FOLD_AUX_DATA[] = "QmlJSEditor.FoldAuxData";
|
2022-05-05 18:18:44 +03:00
|
|
|
const char UIQML_OPEN_MODE[] = "QmlJSEditor.openUiQmlMode";
|
2016-06-18 14:15:02 +02:00
|
|
|
|
|
|
|
|
using namespace QmlJSEditor;
|
|
|
|
|
using namespace QmlJSEditor::Internal;
|
|
|
|
|
|
|
|
|
|
QmlJsEditingSettings::QmlJsEditingSettings()
|
|
|
|
|
: m_enableContextPane(false),
|
|
|
|
|
m_pinContextPane(false),
|
|
|
|
|
m_autoFormatOnSave(false),
|
2020-02-20 15:19:12 +01:00
|
|
|
m_autoFormatOnlyCurrentProject(false),
|
2022-01-21 20:08:28 +01:00
|
|
|
m_foldAuxData(false),
|
2022-05-05 18:18:44 +03:00
|
|
|
m_uiQmlOpenMode("")
|
2016-06-18 14:15:02 +02:00
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
void QmlJsEditingSettings::set()
|
|
|
|
|
{
|
|
|
|
|
if (get() != *this)
|
|
|
|
|
toSettings(Core::ICore::settings());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void QmlJsEditingSettings::fromSettings(QSettings *settings)
|
|
|
|
|
{
|
2019-07-18 14:17:25 +02:00
|
|
|
settings->beginGroup(QmlJSEditor::Constants::SETTINGS_CATEGORY_QML);
|
|
|
|
|
m_enableContextPane = settings->value(QML_CONTEXTPANE_KEY, QVariant(false)).toBool();
|
|
|
|
|
m_pinContextPane = settings->value(QML_CONTEXTPANEPIN_KEY, QVariant(false)).toBool();
|
|
|
|
|
m_autoFormatOnSave = settings->value(AUTO_FORMAT_ON_SAVE, QVariant(false)).toBool();
|
|
|
|
|
m_autoFormatOnlyCurrentProject
|
|
|
|
|
= settings->value(AUTO_FORMAT_ONLY_CURRENT_PROJECT, QVariant(false)).toBool();
|
2020-02-20 15:19:12 +01:00
|
|
|
m_foldAuxData = settings->value(FOLD_AUX_DATA, QVariant(true)).toBool();
|
2022-05-05 18:18:44 +03:00
|
|
|
m_uiQmlOpenMode = settings->value(UIQML_OPEN_MODE, "").toString();
|
2016-06-18 14:15:02 +02:00
|
|
|
settings->endGroup();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void QmlJsEditingSettings::toSettings(QSettings *settings) const
|
|
|
|
|
{
|
2019-07-18 14:17:25 +02:00
|
|
|
settings->beginGroup(QmlJSEditor::Constants::SETTINGS_CATEGORY_QML);
|
|
|
|
|
settings->setValue(QML_CONTEXTPANE_KEY, m_enableContextPane);
|
|
|
|
|
settings->setValue(QML_CONTEXTPANEPIN_KEY, m_pinContextPane);
|
|
|
|
|
settings->setValue(AUTO_FORMAT_ON_SAVE, m_autoFormatOnSave);
|
|
|
|
|
settings->setValue(AUTO_FORMAT_ONLY_CURRENT_PROJECT, m_autoFormatOnlyCurrentProject);
|
2020-02-20 15:19:12 +01:00
|
|
|
settings->setValue(FOLD_AUX_DATA, m_foldAuxData);
|
2022-05-05 18:18:44 +03:00
|
|
|
settings->setValue(UIQML_OPEN_MODE, m_uiQmlOpenMode);
|
2016-06-18 14:15:02 +02:00
|
|
|
settings->endGroup();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool QmlJsEditingSettings::equals(const QmlJsEditingSettings &other) const
|
|
|
|
|
{
|
2022-01-21 20:08:28 +01:00
|
|
|
return m_enableContextPane == other.m_enableContextPane
|
|
|
|
|
&& m_pinContextPane == other.m_pinContextPane
|
|
|
|
|
&& m_autoFormatOnSave == other.m_autoFormatOnSave
|
|
|
|
|
&& m_autoFormatOnlyCurrentProject == other.m_autoFormatOnlyCurrentProject
|
|
|
|
|
&& m_foldAuxData == other.m_foldAuxData
|
2022-05-05 18:18:44 +03:00
|
|
|
&& m_uiQmlOpenMode == other.m_uiQmlOpenMode;
|
2016-06-18 14:15:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2020-02-20 15:19:12 +01:00
|
|
|
bool QmlJsEditingSettings::foldAuxData() const
|
|
|
|
|
{
|
|
|
|
|
return m_foldAuxData;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void QmlJsEditingSettings::setFoldAuxData(const bool foldAuxData)
|
|
|
|
|
{
|
|
|
|
|
m_foldAuxData = foldAuxData;
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-05 18:18:44 +03:00
|
|
|
const QString QmlJsEditingSettings::uiQmlOpenMode() const
|
2022-01-21 20:08:28 +01:00
|
|
|
{
|
2022-05-05 18:18:44 +03:00
|
|
|
return m_uiQmlOpenMode;
|
2022-01-21 20:08:28 +01:00
|
|
|
}
|
|
|
|
|
|
2022-05-05 18:18:44 +03:00
|
|
|
void QmlJsEditingSettings::setUiQmlOpenMode(const QString &mode)
|
2022-01-21 20:08:28 +01:00
|
|
|
{
|
2022-05-05 18:18:44 +03:00
|
|
|
m_uiQmlOpenMode = mode;
|
2022-01-21 20:08:28 +01:00
|
|
|
}
|
|
|
|
|
|
2020-01-28 16:11:51 +01:00
|
|
|
class QmlJsEditingSettingsPageWidget final : public Core::IOptionsPageWidget
|
2016-06-18 14:15:02 +02:00
|
|
|
{
|
2020-01-28 16:11:51 +01:00
|
|
|
public:
|
|
|
|
|
QmlJsEditingSettingsPageWidget()
|
|
|
|
|
{
|
|
|
|
|
auto s = QmlJsEditingSettings::get();
|
2022-08-17 17:13:21 +02:00
|
|
|
autoFormatOnSave = new QCheckBox(tr("Enable auto format on file save"));
|
|
|
|
|
autoFormatOnSave->setChecked(s.autoFormatOnSave());
|
|
|
|
|
autoFormatOnlyCurrentProject =
|
|
|
|
|
new QCheckBox(tr("Restrict to files contained in the current project"));
|
|
|
|
|
autoFormatOnlyCurrentProject->setChecked(s.autoFormatOnlyCurrentProject());
|
|
|
|
|
autoFormatOnlyCurrentProject->setEnabled(autoFormatOnSave->isChecked());
|
|
|
|
|
pinContextPane = new QCheckBox(tr("Pin Qt Quick Toolbar"));
|
|
|
|
|
pinContextPane->setChecked(s.pinContextPane());
|
|
|
|
|
enableContextPane = new QCheckBox(tr("Always show Qt Quick Toolbar"));
|
|
|
|
|
enableContextPane->setChecked(s.enableContextPane());
|
|
|
|
|
foldAuxData = new QCheckBox(tr("Auto-fold auxiliary data"));
|
|
|
|
|
foldAuxData->setChecked(s.foldAuxData());
|
|
|
|
|
uiQmlOpenComboBox = new QComboBox;
|
|
|
|
|
uiQmlOpenComboBox->addItem(tr("Always Ask"), "");
|
|
|
|
|
uiQmlOpenComboBox->addItem(tr("Qt Design Studio"), Core::Constants::MODE_DESIGN);
|
|
|
|
|
uiQmlOpenComboBox->addItem(tr("Qt Creator"), Core::Constants::MODE_EDIT);
|
|
|
|
|
const int comboIndex = qMax(0, uiQmlOpenComboBox->findData(s.uiQmlOpenMode()));
|
|
|
|
|
uiQmlOpenComboBox->setCurrentIndex(comboIndex);
|
|
|
|
|
uiQmlOpenComboBox->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
|
|
|
|
|
uiQmlOpenComboBox->setSizeAdjustPolicy(QComboBox::QComboBox::AdjustToContents);
|
|
|
|
|
|
|
|
|
|
using namespace Utils::Layouting;
|
|
|
|
|
Column {
|
|
|
|
|
Group {
|
|
|
|
|
title(tr("Automatic Formatting on File Save")),
|
|
|
|
|
Column { autoFormatOnSave, autoFormatOnlyCurrentProject },
|
|
|
|
|
},
|
|
|
|
|
Group {
|
|
|
|
|
title(tr("Qt Quick Toolbars")),
|
|
|
|
|
Column { pinContextPane, enableContextPane },
|
|
|
|
|
},
|
|
|
|
|
Group {
|
|
|
|
|
title(tr("Features")),
|
|
|
|
|
Column {
|
|
|
|
|
foldAuxData,
|
|
|
|
|
Form { tr("Open .ui.qml files with:"), uiQmlOpenComboBox },
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
st,
|
|
|
|
|
}.attachTo(this);
|
|
|
|
|
|
|
|
|
|
connect(autoFormatOnSave, &QCheckBox::toggled,
|
|
|
|
|
autoFormatOnlyCurrentProject, &QWidget::setEnabled);
|
2020-01-28 16:11:51 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void apply() final
|
|
|
|
|
{
|
|
|
|
|
QmlJsEditingSettings s;
|
2022-08-17 17:13:21 +02:00
|
|
|
s.setEnableContextPane(enableContextPane->isChecked());
|
|
|
|
|
s.setPinContextPane(pinContextPane->isChecked());
|
|
|
|
|
s.setAutoFormatOnSave(autoFormatOnSave->isChecked());
|
|
|
|
|
s.setAutoFormatOnlyCurrentProject(autoFormatOnlyCurrentProject->isChecked());
|
|
|
|
|
s.setFoldAuxData(foldAuxData->isChecked());
|
|
|
|
|
s.setUiQmlOpenMode(uiQmlOpenComboBox->currentData().toString());
|
2020-01-28 16:11:51 +01:00
|
|
|
s.set();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
2022-08-17 17:13:21 +02:00
|
|
|
QCheckBox *autoFormatOnSave;
|
|
|
|
|
QCheckBox *autoFormatOnlyCurrentProject;
|
|
|
|
|
QCheckBox *pinContextPane;
|
|
|
|
|
QCheckBox *enableContextPane;
|
|
|
|
|
QCheckBox *foldAuxData;
|
|
|
|
|
QComboBox *uiQmlOpenComboBox;
|
2020-01-28 16:11:51 +01:00
|
|
|
};
|
2016-06-18 14:15:02 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
QmlJsEditingSettings QmlJsEditingSettings::get()
|
|
|
|
|
{
|
|
|
|
|
QmlJsEditingSettings settings;
|
|
|
|
|
settings.fromSettings(Core::ICore::settings());
|
|
|
|
|
return settings;
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-24 02:45:30 +01:00
|
|
|
QmlJsEditingSettingsPage::QmlJsEditingSettingsPage()
|
2016-06-18 14:15:02 +02:00
|
|
|
{
|
|
|
|
|
setId("C.QmlJsEditing");
|
2020-01-28 16:11:51 +01:00
|
|
|
setDisplayName(QmlJsEditingSettingsPageWidget::tr("QML/JS Editing"));
|
2016-06-18 14:15:02 +02:00
|
|
|
setCategory(Constants::SETTINGS_CATEGORY_QML);
|
2020-01-28 16:11:51 +01:00
|
|
|
setWidgetCreator([] { return new QmlJsEditingSettingsPageWidget; });
|
2016-06-18 14:15:02 +02:00
|
|
|
}
|
|
|
|
|
|