Line length for QML/JS editing automatic formatting

Adding parameters to functions in the QML/JS formatter
Adding widget and setting to the QML/JS editing settings

Fixes: QTCREATORBUG-23411
Change-Id: Ib9d3ac3b22443e81cd636fbc276c6544dab1511b
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@qt.io>
This commit is contained in:
Xavier BESSON
2022-04-02 12:15:26 +02:00
parent 4762d54401
commit 87e52ad189
21 changed files with 780 additions and 61 deletions

View File

@@ -5,6 +5,10 @@ add_qtc_plugin(QmlJSTools
SOURCES
qmljsbundleprovider.cpp qmljsbundleprovider.h
qmljscodestylepreferencesfactory.cpp qmljscodestylepreferencesfactory.h
qmljscodestylepreferences.cpp qmljscodestylepreferences.h
qmljscodestylepreferenceswidget.cpp qmljscodestylepreferenceswidget.h
qmljscodestylesettings.cpp qmljscodestylesettings.h
qmljscodestylesettingswidget.cpp qmljscodestylesettingswidget.h qmljscodestylesettingswidget.ui
qmljscodestylesettingspage.cpp qmljscodestylesettingspage.h qmljscodestylesettingspage.ui
qmljsfunctionfilter.cpp qmljsfunctionfilter.h
qmljsindenter.cpp qmljsindenter.h

View File

@@ -0,0 +1,110 @@
/****************************************************************************
**
** 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 "qmljscodestylepreferences.h"
namespace QmlJSTools {
QmlJSCodeStylePreferences::QmlJSCodeStylePreferences(QObject *parent) :
ICodeStylePreferences(parent)
{
setSettingsSuffix("CodeStyleSettings");
connect(this, &QmlJSCodeStylePreferences::currentValueChanged,
this, &QmlJSCodeStylePreferences::slotCurrentValueChanged);
}
QVariant QmlJSCodeStylePreferences::value() const
{
QVariant v;
v.setValue(codeStyleSettings());
return v;
}
void QmlJSCodeStylePreferences::setValue(const QVariant &data)
{
if (!data.canConvert<QmlJSCodeStyleSettings>())
return;
setCodeStyleSettings(data.value<QmlJSCodeStyleSettings>());
}
QmlJSCodeStyleSettings QmlJSCodeStylePreferences::codeStyleSettings() const
{
return m_data;
}
void QmlJSCodeStylePreferences::setCodeStyleSettings(const QmlJSCodeStyleSettings &data)
{
if (m_data == data)
return;
m_data = data;
QVariant v;
v.setValue(data);
emit valueChanged(v);
emit codeStyleSettingsChanged(m_data);
if (!currentDelegate())
emit currentValueChanged(v);
}
QmlJSCodeStyleSettings QmlJSCodeStylePreferences::currentCodeStyleSettings() const
{
QVariant v = currentValue();
if (!v.canConvert<QmlJSCodeStyleSettings>()) {
// warning
return {};
}
return v.value<QmlJSCodeStyleSettings>();
}
void QmlJSCodeStylePreferences::slotCurrentValueChanged(const QVariant &value)
{
if (!value.canConvert<QmlJSCodeStyleSettings>())
return;
emit currentCodeStyleSettingsChanged(value.value<QmlJSCodeStyleSettings>());
}
QVariantMap QmlJSCodeStylePreferences::toMap() const
{
QVariantMap map = ICodeStylePreferences::toMap();
if (!currentDelegate()) {
const QVariantMap dataMap = m_data.toMap();
for (auto it = dataMap.begin(), end = dataMap.end(); it != end; ++it)
map.insert(it.key(), it.value());
}
return map;
}
void QmlJSCodeStylePreferences::fromMap(const QVariantMap &map)
{
ICodeStylePreferences::fromMap(map);
if (!currentDelegate())
m_data.fromMap(map);
}
} // namespace QmlJSTools

View File

@@ -0,0 +1,65 @@
/****************************************************************************
**
** 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.
**
****************************************************************************/
#pragma once
#include "qmljstools_global.h"
#include "qmljscodestylesettings.h"
#include <texteditor/icodestylepreferences.h>
namespace QmlJSTools {
class QMLJSTOOLS_EXPORT QmlJSCodeStylePreferences : public TextEditor::ICodeStylePreferences
{
Q_OBJECT
public:
explicit QmlJSCodeStylePreferences(QObject *parent = nullptr);
QVariant value() const override;
void setValue(const QVariant &) override;
QmlJSCodeStyleSettings codeStyleSettings() const;
// tracks parent hierarchy until currentParentSettings is null
QmlJSCodeStyleSettings currentCodeStyleSettings() const;
QVariantMap toMap() const override;
void fromMap(const QVariantMap &map) override;
public slots:
void setCodeStyleSettings(const QmlJSCodeStyleSettings &data);
signals:
void codeStyleSettingsChanged(const QmlJSCodeStyleSettings &);
void currentCodeStyleSettingsChanged(const QmlJSCodeStyleSettings &);
private:
void slotCurrentValueChanged(const QVariant &);
QmlJSCodeStyleSettings m_data;
};
} // namespace QmlJSTools

View File

@@ -28,7 +28,7 @@
#include "qmljstoolsconstants.h"
#include "qmljsindenter.h"
#include <texteditor/simplecodestylepreferences.h>
#include <qmljscodestylepreferences.h>
#include <qmljseditor/qmljseditorconstants.h>
@@ -68,16 +68,19 @@ QString QmlJSCodeStylePreferencesFactory::displayName()
TextEditor::ICodeStylePreferences *QmlJSCodeStylePreferencesFactory::createCodeStyle() const
{
return new TextEditor::SimpleCodeStylePreferences();
return new QmlJSCodeStylePreferences();
}
TextEditor::CodeStyleEditorWidget *QmlJSCodeStylePreferencesFactory::createEditor(
TextEditor::ICodeStylePreferences *preferences,
QWidget *parent) const
{
auto qmlJSPreferences = qobject_cast<QmlJSCodeStylePreferences *>(preferences);
if (!qmlJSPreferences)
return nullptr;
auto widget = new Internal::QmlJSCodeStylePreferencesWidget(parent);
widget->layout()->setContentsMargins(0, 0, 0, 0);
widget->setPreferences(preferences);
widget->setPreferences(qmlJSPreferences);
return widget;
}

View File

@@ -0,0 +1,94 @@
/****************************************************************************
**
** 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 "qmljscodestylepreferenceswidget.h"
#include "qmljscodestylepreferences.h"
#include "qmljscodestylesettingswidget.h"
#include "qmljscodestylesettings.h"
#include <QVBoxLayout>
#include <QLabel>
namespace QmlJSTools {
QmlJSCodeStylePreferencesWidget::QmlJSCodeStylePreferencesWidget(QWidget *parent) :
QWidget(parent)
{
m_codeStyleSettingsWidget = new QmlJSCodeStyleSettingsWidget(this);
auto layout = new QVBoxLayout(this);
layout->addWidget(m_codeStyleSettingsWidget);
layout->setContentsMargins(QMargins());
m_codeStyleSettingsWidget->setEnabled(false);
}
void QmlJSCodeStylePreferencesWidget::setPreferences(QmlJSCodeStylePreferences *preferences)
{
if (m_preferences == preferences)
return; // nothing changes
// cleanup old
if (m_preferences) {
disconnect(m_preferences, &QmlJSCodeStylePreferences::currentCodeStyleSettingsChanged,
m_codeStyleSettingsWidget, &QmlJSCodeStyleSettingsWidget::setCodeStyleSettings);
disconnect(m_preferences, &QmlJSCodeStylePreferences::currentPreferencesChanged,
this, &QmlJSCodeStylePreferencesWidget::slotCurrentPreferencesChanged);
disconnect(m_codeStyleSettingsWidget, &QmlJSCodeStyleSettingsWidget::settingsChanged,
this, &QmlJSCodeStylePreferencesWidget::slotSettingsChanged);
}
m_preferences = preferences;
// fillup new
if (m_preferences) {
slotCurrentPreferencesChanged(m_preferences->currentPreferences());
m_codeStyleSettingsWidget->setCodeStyleSettings(m_preferences->currentCodeStyleSettings());
connect(m_preferences, &QmlJSCodeStylePreferences::currentCodeStyleSettingsChanged,
m_codeStyleSettingsWidget, &QmlJSCodeStyleSettingsWidget::setCodeStyleSettings);
connect(m_preferences, &QmlJSCodeStylePreferences::currentPreferencesChanged,
this, &QmlJSCodeStylePreferencesWidget::slotCurrentPreferencesChanged);
connect(m_codeStyleSettingsWidget, &QmlJSCodeStyleSettingsWidget::settingsChanged,
this, &QmlJSCodeStylePreferencesWidget::slotSettingsChanged);
}
m_codeStyleSettingsWidget->setEnabled(m_preferences);
}
void QmlJSCodeStylePreferencesWidget::slotCurrentPreferencesChanged(TextEditor::ICodeStylePreferences *preferences)
{
m_codeStyleSettingsWidget->setEnabled(!preferences->isReadOnly() && !m_preferences->currentDelegate());
}
void QmlJSCodeStylePreferencesWidget::slotSettingsChanged(const QmlJSCodeStyleSettings &settings)
{
if (!m_preferences)
return;
QmlJSCodeStylePreferences *current = qobject_cast<QmlJSCodeStylePreferences*>(m_preferences->currentPreferences());
if (!current)
return;
current->setCodeStyleSettings(settings);
}
} // namespace QmlJSTools

View File

@@ -0,0 +1,60 @@
/****************************************************************************
**
** 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.
**
****************************************************************************/
#pragma once
#include "qmljstools_global.h"
#include <QWidget>
namespace TextEditor {
class ICodeStylePreferences;
}
namespace QmlJSTools {
class QmlJSCodeStyleSettings;
class QmlJSCodeStyleSettingsWidget;
class QmlJSCodeStylePreferences;
namespace Ui { class TabPreferencesWidget; }
class QMLJSTOOLS_EXPORT QmlJSCodeStylePreferencesWidget : public QWidget
{
Q_OBJECT
public:
explicit QmlJSCodeStylePreferencesWidget(QWidget *parent = nullptr);
void setPreferences(QmlJSCodeStylePreferences *tabPreferences);
private:
void slotCurrentPreferencesChanged(TextEditor::ICodeStylePreferences* preferences);
void slotSettingsChanged(const QmlJSCodeStyleSettings &settings);
QmlJSCodeStyleSettingsWidget *m_codeStyleSettingsWidget;
QmlJSCodeStylePreferences *m_preferences = nullptr;
};
} // namespace QmlJSTools

View File

@@ -0,0 +1,83 @@
/****************************************************************************
**
** 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 "qmljscodestylesettings.h"
#include "qmljscodestylepreferences.h"
#include "qmljstoolssettings.h"
#include <projectexplorer/editorconfiguration.h>
#include <projectexplorer/project.h>
#include <projectexplorer/projecttree.h>
#include <texteditor/tabsettings.h>
#include <cplusplus/Overview.h>
#include <utils/qtcassert.h>
#include <utils/settingsutils.h>
static const char lineLengthKey[] = "LineLength";
namespace QmlJSTools {
// ------------------ QmlJSCodeStyleSettingsWidget
QmlJSCodeStyleSettings::QmlJSCodeStyleSettings() = default;
QVariantMap QmlJSCodeStyleSettings::toMap() const
{
return {
{lineLengthKey, lineLength}
};
}
void QmlJSCodeStyleSettings::fromMap(const QVariantMap &map)
{
lineLength = map.value(lineLengthKey, lineLength).toInt();
}
bool QmlJSCodeStyleSettings::equals(const QmlJSCodeStyleSettings &rhs) const
{
return lineLength == rhs.lineLength;
}
QmlJSCodeStyleSettings QmlJSCodeStyleSettings::currentGlobalCodeStyle()
{
QmlJSCodeStylePreferences *QmlJSCodeStylePreferences = QmlJSToolsSettings::globalCodeStyle();
QTC_ASSERT(QmlJSCodeStylePreferences, return QmlJSCodeStyleSettings());
return QmlJSCodeStylePreferences->currentCodeStyleSettings();
}
TextEditor::TabSettings QmlJSCodeStyleSettings::currentGlobalTabSettings()
{
QmlJSCodeStylePreferences *QmlJSCodeStylePreferences = QmlJSToolsSettings::globalCodeStyle();
QTC_ASSERT(QmlJSCodeStylePreferences, return TextEditor::TabSettings());
return QmlJSCodeStylePreferences->currentTabSettings();
}
} // namespace QmlJSTools

View File

@@ -0,0 +1,58 @@
/****************************************************************************
**
** 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.
**
****************************************************************************/
#pragma once
#include "qmljstools_global.h"
#include <utils/optional.h>
#include <QVariantMap>
namespace TextEditor { class TabSettings; }
namespace QmlJSTools {
class QMLJSTOOLS_EXPORT QmlJSCodeStyleSettings
{
public:
QmlJSCodeStyleSettings();
int lineLength = 80;
QVariantMap toMap() const;
void fromMap(const QVariantMap &map);
bool equals(const QmlJSCodeStyleSettings &rhs) const;
bool operator==(const QmlJSCodeStyleSettings &s) const { return equals(s); }
bool operator!=(const QmlJSCodeStyleSettings &s) const { return !equals(s); }
static QmlJSCodeStyleSettings currentGlobalCodeStyle();
static TextEditor::TabSettings currentGlobalTabSettings();
};
} // namespace CppEditor
Q_DECLARE_METATYPE(QmlJSTools::QmlJSCodeStyleSettings)

View File

@@ -29,11 +29,11 @@
#include "qmljstoolssettings.h"
#include "qmljsindenter.h"
#include "qmljsqtstylecodeformatter.h"
#include "qmljscodestylepreferences.h"
#include <texteditor/fontsettings.h>
#include <texteditor/snippets/snippetprovider.h>
#include <texteditor/tabsettings.h>
#include <texteditor/simplecodestylepreferences.h>
#include <texteditor/displaysettings.h>
#include <texteditor/texteditorsettings.h>
#include <texteditor/codestyleeditor.h>
@@ -70,13 +70,18 @@ QmlJSCodeStylePreferencesWidget::~QmlJSCodeStylePreferencesWidget()
delete m_ui;
}
void QmlJSCodeStylePreferencesWidget::setPreferences(ICodeStylePreferences *preferences)
void QmlJSCodeStylePreferencesWidget::setPreferences(QmlJSCodeStylePreferences *preferences)
{
m_preferences = preferences;
m_ui->tabPreferencesWidget->setPreferences(preferences);
m_ui->codeStylePreferencesWidget->setPreferences(preferences);
if (m_preferences)
{
connect(m_preferences, &ICodeStylePreferences::currentTabSettingsChanged,
this, &QmlJSCodeStylePreferencesWidget::slotSettingsChanged);
connect(m_preferences, &QmlJSCodeStylePreferences::currentCodeStyleSettingsChanged,
this, &QmlJSCodeStylePreferencesWidget::slotSettingsChanged);
}
updatePreview();
}
@@ -134,15 +139,16 @@ QmlJSCodeStyleSettingsPage::QmlJSCodeStyleSettingsPage()
QWidget *QmlJSCodeStyleSettingsPage::widget()
{
if (!m_widget) {
SimpleCodeStylePreferences *originalTabPreferences
QmlJSCodeStylePreferences *originalPreferences
= QmlJSToolsSettings::globalCodeStyle();
m_pageTabPreferences = new SimpleCodeStylePreferences(m_widget);
m_pageTabPreferences->setDelegatingPool(originalTabPreferences->delegatingPool());
m_pageTabPreferences->setTabSettings(originalTabPreferences->tabSettings());
m_pageTabPreferences->setCurrentDelegate(originalTabPreferences->currentDelegate());
m_pageTabPreferences->setId(originalTabPreferences->id());
m_preferences = new QmlJSCodeStylePreferences(m_widget);
m_preferences->setDelegatingPool(originalPreferences->delegatingPool());
m_preferences->setCodeStyleSettings(originalPreferences->codeStyleSettings());
m_preferences->setTabSettings(originalPreferences->tabSettings());
m_preferences->setCurrentDelegate(originalPreferences->currentDelegate());
m_preferences->setId(originalPreferences->id());
m_widget = new CodeStyleEditor(TextEditorSettings::codeStyleFactory(QmlJSTools::Constants::QML_JS_SETTINGS_ID),
m_pageTabPreferences);
m_preferences);
}
return m_widget;
}
@@ -152,14 +158,18 @@ void QmlJSCodeStyleSettingsPage::apply()
if (m_widget) {
QSettings *s = Core::ICore::settings();
SimpleCodeStylePreferences *originalTabPreferences = QmlJSToolsSettings::globalCodeStyle();
if (originalTabPreferences->tabSettings() != m_pageTabPreferences->tabSettings()) {
originalTabPreferences->setTabSettings(m_pageTabPreferences->tabSettings());
originalTabPreferences->toSettings(QLatin1String(QmlJSTools::Constants::QML_JS_SETTINGS_ID), s);
QmlJSCodeStylePreferences *originalPreferences = QmlJSToolsSettings::globalCodeStyle();
if (originalPreferences->codeStyleSettings() != m_preferences->codeStyleSettings()) {
originalPreferences->setCodeStyleSettings(m_preferences->codeStyleSettings());
originalPreferences->toSettings(QLatin1String(QmlJSTools::Constants::QML_JS_SETTINGS_ID), s);
}
if (originalTabPreferences->currentDelegate() != m_pageTabPreferences->currentDelegate()) {
originalTabPreferences->setCurrentDelegate(m_pageTabPreferences->currentDelegate());
originalTabPreferences->toSettings(QLatin1String(QmlJSTools::Constants::QML_JS_SETTINGS_ID), s);
if (originalPreferences->tabSettings() != m_preferences->tabSettings()) {
originalPreferences->setTabSettings(m_preferences->tabSettings());
originalPreferences->toSettings(QLatin1String(QmlJSTools::Constants::QML_JS_SETTINGS_ID), s);
}
if (originalPreferences->currentDelegate() != m_preferences->currentDelegate()) {
originalPreferences->setCurrentDelegate(m_preferences->currentDelegate());
originalPreferences->toSettings(QLatin1String(QmlJSTools::Constants::QML_JS_SETTINGS_ID), s);
}
}
}

View File

@@ -37,12 +37,13 @@ QT_END_NAMESPACE
namespace TextEditor {
class FontSettings;
class TabSettings;
class CodeStyleEditor;
class ICodeStylePreferences;
}
namespace QmlJSTools {
class QmlJSCodeStylePreferences;
class QmlJSCodeStyleSettings;
namespace Internal {
namespace Ui { class QmlJSCodeStyleSettingsPage; }
@@ -55,7 +56,7 @@ public:
explicit QmlJSCodeStylePreferencesWidget(QWidget *parent = nullptr);
~QmlJSCodeStylePreferencesWidget() override;
void setPreferences(TextEditor::ICodeStylePreferences *preferences);
void setPreferences(QmlJSCodeStylePreferences* preferences);
private:
void decorateEditor(const TextEditor::FontSettings &fontSettings);
@@ -63,7 +64,7 @@ private:
void slotSettingsChanged();
void updatePreview();
TextEditor::ICodeStylePreferences *m_preferences = nullptr;
QmlJSCodeStylePreferences *m_preferences = nullptr;
Ui::QmlJSCodeStyleSettingsPage *m_ui;
};
@@ -78,7 +79,7 @@ public:
void finish() override;
private:
TextEditor::ICodeStylePreferences *m_pageTabPreferences = nullptr;
QmlJSCodeStylePreferences *m_preferences = nullptr;
QPointer<TextEditor::CodeStyleEditor> m_widget;
};

View File

@@ -24,7 +24,20 @@
</property>
</widget>
</item>
<item row="0" column="1" rowspan="2">
<item row="2" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>267</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1" rowspan="3">
<widget class="TextEditor::SnippetEditorWidget" name="previewTextEdit">
<property name="plainText">
<string notr="true">import QtQuick 1.0
@@ -48,17 +61,7 @@ Rectangle {
</widget>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>267</height>
</size>
</property>
</spacer>
<widget class="QmlJSTools::QmlJSCodeStylePreferencesWidget" name="codeStylePreferencesWidget" native="true"/>
</item>
</layout>
</widget>
@@ -74,6 +77,12 @@ Rectangle {
<extends>QPlainTextEdit</extends>
<header location="global">texteditor/snippets/snippeteditor.h</header>
</customwidget>
<customwidget>
<class>QmlJSTools::QmlJSCodeStylePreferencesWidget</class>
<extends>QWidget</extends>
<header location="global">qmljscodestylepreferenceswidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>

View File

@@ -0,0 +1,70 @@
/****************************************************************************
**
** 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 "qmljscodestylesettingswidget.h"
#include "ui_qmljscodestylesettingswidget.h"
#include "qmljscodestylesettings.h"
#include <QTextStream>
namespace QmlJSTools {
QmlJSCodeStyleSettingsWidget::QmlJSCodeStyleSettingsWidget(QWidget *parent) :
QGroupBox(parent),
ui(new Internal::Ui::QmlJSCodeStyleSettingsWidget)
{
ui->setupUi(this);
auto spinValueChanged = QOverload<int>::of(&QSpinBox::valueChanged);
connect(ui->lineLengthSpinBox, spinValueChanged,
this, &QmlJSCodeStyleSettingsWidget::slotSettingsChanged);
}
QmlJSCodeStyleSettingsWidget::~QmlJSCodeStyleSettingsWidget()
{
delete ui;
}
void QmlJSCodeStyleSettingsWidget::setCodeStyleSettings(const QmlJSCodeStyleSettings& s)
{
QSignalBlocker blocker(this);
ui->lineLengthSpinBox->setValue(s.lineLength);
}
QmlJSCodeStyleSettings QmlJSCodeStyleSettingsWidget::codeStyleSettings() const
{
QmlJSCodeStyleSettings set;
set.lineLength = ui->lineLengthSpinBox->value();
return set;
}
void QmlJSCodeStyleSettingsWidget::slotSettingsChanged()
{
emit settingsChanged(codeStyleSettings());
}
} // namespace TextEditor

View File

@@ -0,0 +1,66 @@
/****************************************************************************
**
** 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.
**
****************************************************************************/
#pragma once
#include "qmljstools_global.h"
#include <QGroupBox>
namespace QmlJSTools {
class QmlJSCodeStyleSettings;
namespace Internal { namespace Ui { class QmlJSCodeStyleSettingsWidget; } }
class QMLJSTOOLS_EXPORT QmlJSCodeStyleSettingsWidget : public QGroupBox
{
Q_OBJECT
public:
enum CodingStyleLink {
CppLink,
QtQuickLink
};
explicit QmlJSCodeStyleSettingsWidget(QWidget *parent = nullptr);
~QmlJSCodeStyleSettingsWidget() override;
QmlJSCodeStyleSettings codeStyleSettings() const;
void setCodingStyleWarningVisible(bool visible);
void setCodeStyleSettings(const QmlJSCodeStyleSettings& s);
signals:
void settingsChanged(const QmlJSCodeStyleSettings &);
private:
void slotSettingsChanged();
void codingStyleLinkActivated(const QString &linkString);
Internal::Ui::QmlJSCodeStyleSettingsWidget *ui;
};
} // namespace QmlJSTools

View File

@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QmlJSTools::Internal::QmlJSCodeStyleSettingsWidget</class>
<widget class="QGroupBox" name="QmlJSTools::Internal::QmlJSCodeStyleSettingsWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>254</width>
<height>203</height>
</rect>
</property>
<property name="windowTitle">
<string notr="true"/>
</property>
<property name="title">
<string>Qml JS Code Style</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="lineLengthLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>&amp;Indent size:</string>
</property>
<property name="buddy">
<cstring>lineLengthSpinBox</cstring>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="lineLengthSpinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>999</number>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<tabstops>
<tabstop>lineLengthSpinBox</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>

View File

@@ -25,10 +25,10 @@
#include "qmljstoolssettings.h"
#include "qmljstoolsconstants.h"
#include "qmljscodestylepreferences.h"
#include "qmljscodestylepreferencesfactory.h"
#include <texteditor/texteditorsettings.h>
#include <texteditor/simplecodestylepreferences.h>
#include <texteditor/tabsettings.h>
#include <texteditor/codestylepool.h>
@@ -44,7 +44,7 @@ namespace QmlJSTools {
const char idKey[] = "QmlJSGlobal";
static SimpleCodeStylePreferences *m_globalCodeStyle = nullptr;
static QmlJSCodeStylePreferences *m_globalCodeStyle = nullptr;
QmlJSToolsSettings::QmlJSToolsSettings()
{
@@ -59,7 +59,7 @@ QmlJSToolsSettings::QmlJSToolsSettings()
TextEditorSettings::registerCodeStylePool(Constants::QML_JS_SETTINGS_ID, pool);
// global code style settings
m_globalCodeStyle = new SimpleCodeStylePreferences(this);
m_globalCodeStyle = new QmlJSCodeStylePreferences(this);
m_globalCodeStyle->setDelegatingPool(pool);
m_globalCodeStyle->setDisplayName(tr("Global", "Settings"));
m_globalCodeStyle->setId(idKey);
@@ -68,7 +68,7 @@ QmlJSToolsSettings::QmlJSToolsSettings()
// built-in settings
// Qt style
auto qtCodeStyle = new SimpleCodeStylePreferences;
auto qtCodeStyle = new QmlJSCodeStylePreferences;
qtCodeStyle->setId("qt");
qtCodeStyle->setDisplayName(tr("Qt"));
qtCodeStyle->setReadOnly(true);
@@ -78,6 +78,9 @@ QmlJSToolsSettings::QmlJSToolsSettings()
qtTabSettings.m_indentSize = 4;
qtTabSettings.m_continuationAlignBehavior = TabSettings::ContinuationAlignWithIndent;
qtCodeStyle->setTabSettings(qtTabSettings);
QmlJSCodeStyleSettings qtQmlJSSetings;
qtQmlJSSetings.lineLength = 80;
qtCodeStyle->setCodeStyleSettings(qtQmlJSSetings);
pool->addCodeStyle(qtCodeStyle);
// default delegate for global preferences
@@ -148,7 +151,7 @@ QmlJSToolsSettings::~QmlJSToolsSettings()
m_globalCodeStyle = nullptr;
}
SimpleCodeStylePreferences *QmlJSToolsSettings::globalCodeStyle()
QmlJSCodeStylePreferences *QmlJSToolsSettings::globalCodeStyle()
{
return m_globalCodeStyle;
}

View File

@@ -29,9 +29,8 @@
#include <QObject>
namespace TextEditor { class SimpleCodeStylePreferences; }
namespace QmlJSTools {
class QmlJSCodeStylePreferences;
/**
* This class provides a central place for cpp tools settings.
@@ -44,7 +43,7 @@ public:
explicit QmlJSToolsSettings();
~QmlJSToolsSettings() override;
static TextEditor::SimpleCodeStylePreferences *globalCodeStyle();
static QmlJSCodeStylePreferences *globalCodeStyle();
};
} // namespace QmlJSTools