Beautifier: Use Aspects for part of settings

Change-Id: Icff60f5f1292ae6b2de2ce757d645d5fec47bcc6
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2023-05-16 15:00:32 +02:00
parent 5e059db065
commit 4de56e2683
22 changed files with 453 additions and 896 deletions

View File

@@ -5,7 +5,6 @@ add_qtc_plugin(Beautifier
abstractsettings.cpp abstractsettings.h
artisticstyle/artisticstyle.cpp artisticstyle/artisticstyle.h
artisticstyle/artisticstyleconstants.h
artisticstyle/artisticstyleoptionspage.cpp artisticstyle/artisticstyleoptionspage.h
artisticstyle/artisticstylesettings.cpp artisticstyle/artisticstylesettings.h
beautifier.qrc
beautifierabstracttool.h
@@ -14,7 +13,6 @@ add_qtc_plugin(Beautifier
beautifiertr.h
clangformat/clangformat.cpp clangformat/clangformat.h
clangformat/clangformatconstants.h
clangformat/clangformatoptionspage.cpp clangformat/clangformatoptionspage.h
clangformat/clangformatsettings.cpp clangformat/clangformatsettings.h
configurationdialog.cpp configurationdialog.h
configurationeditor.cpp configurationeditor.h
@@ -22,6 +20,5 @@ add_qtc_plugin(Beautifier
generalsettings.cpp generalsettings.h
uncrustify/uncrustify.cpp uncrustify/uncrustify.h
uncrustify/uncrustifyconstants.h
uncrustify/uncrustifyoptionspage.cpp uncrustify/uncrustifyoptionspage.h
uncrustify/uncrustifysettings.cpp uncrustify/uncrustifysettings.h
)

View File

@@ -26,9 +26,6 @@ using namespace Utils;
namespace Beautifier::Internal {
const char COMMAND[] = "command";
const char SUPPORTED_MIME[] = "supportedMime";
class VersionUpdater
{
public:
@@ -86,9 +83,40 @@ AbstractSettings::AbstractSettings(const QString &name, const QString &ending)
, m_styleDir(Core::ICore::userResourcePath(Beautifier::Constants::SETTINGS_DIRNAME)
.pathAppended(name)
.toString())
, m_name(name)
, m_versionUpdater(new VersionUpdater)
{
setSettingsGroups(Utils::Constants::BEAUTIFIER_SETTINGS_GROUP, name);
registerAspect(&command);
command.setSettingsKey("command");
command.setExpectedKind(Utils::PathChooser::ExistingCommand);
command.setCommandVersionArguments({"--version"});
command.setPromptDialogTitle(BeautifierPlugin::msgCommandPromptDialogTitle("Clang Format"));
registerAspect(&supportedMimeTypes);
supportedMimeTypes.setDisplayStyle(StringAspect::LineEditDisplay);
supportedMimeTypes.setSettingsKey("supportedMime");
supportedMimeTypes.setLabelText(Tr::tr("Restrict to MIME types:"));
supportedMimeTypes.setDefaultValue("text/x-c++src; text/x-c++hdr; text/x-csrc;text/x-chdr; "
"text/x-objcsrc; text/x-objc++src");
supportedMimeTypes.setValueAcceptor([](const QString &, const QString &value) -> std::optional<QString> {
const QStringList stringTypes = value.split(';');
QStringList types;
for (const QString &type : stringTypes) {
const MimeType mime = mimeTypeForName(type.trimmed());
if (!mime.isValid())
continue;
const QString canonicalName = mime.name();
if (!types.contains(canonicalName))
types << canonicalName;
}
return types.join("; ");
});
connect(&command, &BaseAspect::changed, this, [this] {
m_versionUpdater->update(command());
});
}
AbstractSettings::~AbstractSettings() = default;
@@ -157,20 +185,6 @@ QString AbstractSettings::styleFileName(const QString &key) const
return m_styleDir.absoluteFilePath(key + m_ending);
}
FilePath AbstractSettings::command() const
{
return m_command;
}
void AbstractSettings::setCommand(const FilePath &cmd)
{
if (cmd == m_command)
return;
m_command = cmd;
m_versionUpdater->update(command());
}
QVersionNumber AbstractSettings::version() const
{
return m_versionUpdater->version();
@@ -181,30 +195,6 @@ void AbstractSettings::setVersionRegExp(const QRegularExpression &versionRegExp)
m_versionUpdater->setVersionRegExp(versionRegExp);
}
QString AbstractSettings::supportedMimeTypesAsString() const
{
return m_supportedMimeTypes.join("; ");
}
void AbstractSettings::setSupportedMimeTypes(const QString &mimes)
{
const QStringList stringTypes = mimes.split(';');
QStringList types;
for (const QString &type : stringTypes) {
const MimeType mime = mimeTypeForName(type.trimmed());
if (!mime.isValid())
continue;
const QString canonicalName = mime.name();
if (!types.contains(canonicalName))
types << canonicalName;
}
if (m_supportedMimeTypes != types) {
m_supportedMimeTypes = types;
emit supportedMimeTypesChanged();
}
}
bool AbstractSettings::isApplicable(const Core::IDocument *document) const
{
if (!document)
@@ -240,17 +230,8 @@ void AbstractSettings::save()
{
// Save settings, except styles
QSettings *s = Core::ICore::settings();
s->beginGroup(Utils::Constants::BEAUTIFIER_SETTINGS_GROUP);
s->beginGroup(m_name);
QMap<QString, QVariant>::const_iterator iSettings = m_settings.constBegin();
while (iSettings != m_settings.constEnd()) {
s->setValue(iSettings.key(), iSettings.value());
++iSettings;
}
s->setValue(COMMAND, m_command.toSettings());
s->setValue(SUPPORTED_MIME, supportedMimeTypesAsString());
s->endGroup();
s->endGroup();
AspectContainer::writeSettings(s);
// Save styles
if (m_stylesToRemove.isEmpty() && m_styles.isEmpty())
@@ -306,27 +287,9 @@ void AbstractSettings::createDocumentationFile() const
void AbstractSettings::read()
{
// Set default values
setSupportedMimeTypes("text/x-c++src;text/x-c++hdr;text/x-csrc;text/x-chdr;text/x-objcsrc;"
"text/x-objc++src");
// Read settings, except styles
QSettings *s = Core::ICore::settings();
s->beginGroup(Utils::Constants::BEAUTIFIER_SETTINGS_GROUP);
s->beginGroup(m_name);
const QStringList keys = s->allKeys();
for (const QString &key : keys) {
if (key == COMMAND)
setCommand(FilePath::fromSettings(s->value(key)));
else if (key == SUPPORTED_MIME)
setSupportedMimeTypes(s->value(key).toString());
else if (m_settings.contains(key))
m_settings[key] = s->value(key);
else
s->remove(key);
}
s->endGroup();
s->endGroup();
AspectContainer::readSettings(s);
m_styles.clear();
m_changedStyles.clear();
@@ -336,18 +299,19 @@ void AbstractSettings::read()
void AbstractSettings::readDocumentation()
{
const QString filename = documentationFilePath();
const FilePath filename = documentationFilePath();
if (filename.isEmpty()) {
BeautifierPlugin::showError(Tr::tr("No documentation file specified."));
return;
}
QFile file(filename);
QFile file(filename.toFSPathString());
if (!file.exists())
createDocumentationFile();
if (!file.open(QIODevice::ReadOnly)) {
BeautifierPlugin::showError(Tr::tr("Cannot open documentation file \"%1\".").arg(filename));
BeautifierPlugin::showError(Tr::tr("Cannot open documentation file \"%1\".")
.arg(filename.toUserOutput()));
return;
}
@@ -356,7 +320,7 @@ void AbstractSettings::readDocumentation()
return;
if (xml.name() != QLatin1String(Constants::DOCUMENTATION_XMLROOT)) {
BeautifierPlugin::showError(Tr::tr("The file \"%1\" is not a valid documentation file.")
.arg(filename));
.arg(filename.toUserOutput()));
return;
}
@@ -387,7 +351,7 @@ void AbstractSettings::readDocumentation()
if (xml.hasError()) {
BeautifierPlugin::showError(Tr::tr("Cannot read documentation file \"%1\": %2.")
.arg(filename).arg(xml.errorString()));
.arg(filename.toUserOutput()).arg(xml.errorString()));
}
}

View File

@@ -3,6 +3,8 @@
#pragma once
#include <coreplugin/dialogs/ioptionspage.h>
#include <utils/aspects.h>
#include <utils/filepath.h>
@@ -40,7 +42,6 @@ public:
void read();
void save();
virtual QString documentationFilePath() const = 0;
virtual void createDocumentationFile() const;
virtual QStringList completerWords();
@@ -53,25 +54,21 @@ public:
void replaceStyle(const QString &oldKey, const QString &newKey, const QString &value);
virtual QString styleFileName(const QString &key) const;
Utils::FilePath command() const;
void setCommand(const Utils::FilePath &cmd);
Utils::FilePathAspect command;
Utils::StringAspect supportedMimeTypes;
Utils::FilePathAspect documentationFilePath;
QVersionNumber version() const;
QString supportedMimeTypesAsString() const;
void setSupportedMimeTypes(const QString &mimes);
bool isApplicable(const Core::IDocument *document) const;
QStringList options();
QString documentation(const QString &option) const;
signals:
void supportedMimeTypesChanged();
protected:
void setVersionRegExp(const QRegularExpression &versionRegExp);
QMap<QString, QString> m_styles;
QMap<QString, QVariant> m_settings;
QString m_ending;
QDir m_styleDir;
@@ -79,11 +76,9 @@ protected:
virtual void readStyles();
private:
QString m_name;
std::unique_ptr<VersionUpdater> m_versionUpdater;
QStringList m_stylesToRemove;
QSet<QString> m_changedStyles;
Utils::FilePath m_command;
QHash<QString, int> m_options;
QStringList m_docu;
QStringList m_supportedMimeTypes;

View File

@@ -48,7 +48,7 @@ ArtisticStyle::ArtisticStyle()
Core::ActionManager::actionContainer(Constants::MENU_ID)->addMenu(menu);
connect(&m_settings, &ArtisticStyleSettings::supportedMimeTypesChanged,
connect(&m_settings.supportedMimeTypes, &Utils::BaseAspect::changed,
this, [this] { updateActions(Core::EditorManager::currentEditor()); });
}

View File

@@ -5,7 +5,6 @@
#include "../beautifierabstracttool.h"
#include "artisticstyleoptionspage.h"
#include "artisticstylesettings.h"
namespace Beautifier::Internal {

View File

@@ -1,134 +0,0 @@
// Copyright (C) 2016 Lorenz Haas
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "artisticstyleoptionspage.h"
#include "artisticstyleconstants.h"
#include "artisticstylesettings.h"
#include "../beautifierconstants.h"
#include "../beautifierplugin.h"
#include "../beautifiertr.h"
#include "../configurationpanel.h"
#include <utils/layoutbuilder.h>
#include <utils/pathchooser.h>
#include <QApplication>
#include <QCheckBox>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
namespace Beautifier::Internal {
class ArtisticStyleOptionsPageWidget : public Core::IOptionsPageWidget
{
public:
explicit ArtisticStyleOptionsPageWidget(ArtisticStyleSettings *settings);
void apply() final;
private:
ArtisticStyleSettings *m_settings;
Utils::PathChooser *m_command;
QLineEdit *m_mime;
QCheckBox *m_useOtherFiles;
QCheckBox *m_useSpecificConfigFile;
Utils::PathChooser *m_specificConfigFile;
QCheckBox *m_useHomeFile;
QCheckBox *m_useCustomStyle;
Beautifier::Internal::ConfigurationPanel *m_configurations;
};
ArtisticStyleOptionsPageWidget::ArtisticStyleOptionsPageWidget(ArtisticStyleSettings *settings)
: m_settings(settings)
{
m_command = new Utils::PathChooser;
m_mime = new QLineEdit(m_settings->supportedMimeTypesAsString());
auto options = new QGroupBox(Tr::tr("Options"));
m_useOtherFiles = new QCheckBox(Tr::tr("Use file *.astylerc defined in project files"));
m_useOtherFiles->setChecked(m_settings->useOtherFiles());
m_useSpecificConfigFile = new QCheckBox(Tr::tr("Use specific config file:"));
m_useSpecificConfigFile->setChecked(m_settings->useSpecificConfigFile());
m_specificConfigFile = new Utils::PathChooser;
m_specificConfigFile->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
m_specificConfigFile->setExpectedKind(Utils::PathChooser::File);
m_specificConfigFile->setPromptDialogFilter(Tr::tr("AStyle (*.astylerc)"));
m_specificConfigFile->setFilePath(m_settings->specificConfigFile());
m_useHomeFile = new QCheckBox(
Tr::tr("Use file .astylerc or astylerc in HOME").
replace("HOME", QDir::toNativeSeparators(QDir::home().absolutePath())));
m_useHomeFile->setChecked(m_settings->useHomeFile());
m_useCustomStyle = new QCheckBox(Tr::tr("Use customized style:"));
m_useCustomStyle->setChecked(m_settings->useCustomStyle());
m_configurations = new ConfigurationPanel(options);
m_configurations->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
m_configurations->setSettings(m_settings);
m_configurations->setCurrentConfiguration(m_settings->customStyle());
m_command->setExpectedKind(Utils::PathChooser::ExistingCommand);
m_command->setCommandVersionArguments({"--version"});
m_command->setPromptDialogTitle(BeautifierPlugin::msgCommandPromptDialogTitle(
Tr::tr(Constants::ARTISTICSTYLE_DISPLAY_NAME)));
m_command->setFilePath(m_settings->command());
using namespace Layouting;
Column {
m_useOtherFiles,
Row { m_useSpecificConfigFile, m_specificConfigFile },
m_useHomeFile,
Row { m_useCustomStyle, m_configurations },
noMargin,
}.attachTo(options);
Column {
Group {
title(Tr::tr("Configuration")),
Form {
Tr::tr("Artistic Style command:"), m_command, br,
Tr::tr("Restrict to MIME types:"), m_mime
}
},
options,
st
}.attachTo(this);
connect(m_command, &Utils::PathChooser::validChanged, options, &QWidget::setEnabled);
}
void ArtisticStyleOptionsPageWidget::apply()
{
m_settings->setCommand(m_command->filePath());
m_settings->setSupportedMimeTypes(m_mime->text());
m_settings->setUseOtherFiles(m_useOtherFiles->isChecked());
m_settings->setUseSpecificConfigFile(m_useSpecificConfigFile->isChecked());
m_settings->setSpecificConfigFile(m_specificConfigFile->filePath());
m_settings->setUseHomeFile(m_useHomeFile->isChecked());
m_settings->setUseCustomStyle(m_useCustomStyle->isChecked());
m_settings->setCustomStyle(m_configurations->currentConfiguration());
m_settings->save();
// update since not all MIME types are accepted (invalids or duplicates)
m_mime->setText(m_settings->supportedMimeTypesAsString());
}
ArtisticStyleOptionsPage::ArtisticStyleOptionsPage(ArtisticStyleSettings *settings)
{
setId("ArtisticStyle");
setDisplayName(Tr::tr("Artistic Style"));
setCategory(Constants::OPTION_CATEGORY);
setWidgetCreator([settings] { return new ArtisticStyleOptionsPageWidget(settings); });
}
} // Beautifier::Internal

View File

@@ -1,18 +0,0 @@
// Copyright (C) 2016 Lorenz Haas
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#pragma once
#include <coreplugin/dialogs/ioptionspage.h>
namespace Beautifier::Internal {
class ArtisticStyleSettings;
class ArtisticStyleOptionsPage final : public Core::IOptionsPage
{
public:
explicit ArtisticStyleOptionsPage(ArtisticStyleSettings *settings);
};
} // Beautifier::Internal

View File

@@ -3,16 +3,24 @@
#include "artisticstylesettings.h"
#include "artisticstyleconstants.h"
#include "../beautifierconstants.h"
#include "../beautifierplugin.h"
#include "../beautifiertr.h"
#include "../configurationpanel.h"
#include <coreplugin/icore.h>
#include <utils/layoutbuilder.h>
#include <utils/pathchooser.h>
#include <utils/process.h>
#include <utils/stringutils.h>
#include <QApplication>
#include <QDateTime>
#include <QFile>
#include <QFileInfo>
#include <QGroupBox>
#include <QRegularExpression>
#include <QXmlStreamWriter>
@@ -20,96 +28,52 @@ using namespace Utils;
namespace Beautifier::Internal {
const char USE_OTHER_FILES[] = "useOtherFiles";
const char USE_SPECIFIC_CONFIG_FILE[] = "useSpecificConfigFile";
const char SPECIFIC_CONFIG_FILE[] = "specificConfigFile";
const char USE_HOME_FILE[] = "useHomeFile";
const char USE_CUSTOM_STYLE[] = "useCustomStyle";
const char CUSTOM_STYLE[] = "customStyle";
const char SETTINGS_NAME[] = "artisticstyle";
ArtisticStyleSettings::ArtisticStyleSettings() :
AbstractSettings(SETTINGS_NAME, ".astyle")
ArtisticStyleSettings::ArtisticStyleSettings()
: AbstractSettings(SETTINGS_NAME, ".astyle")
{
setVersionRegExp(QRegularExpression("([2-9]{1})\\.([0-9]{1,2})(\\.[1-9]{1})?$"));
setCommand("astyle");
m_settings.insert(USE_OTHER_FILES, QVariant(true));
m_settings.insert(USE_SPECIFIC_CONFIG_FILE, QVariant(false));
m_settings.insert(SPECIFIC_CONFIG_FILE, QVariant());
m_settings.insert(USE_HOME_FILE, QVariant(false));
m_settings.insert(USE_CUSTOM_STYLE, QVariant(false));
m_settings.insert(CUSTOM_STYLE, QVariant());
command.setLabelText(Tr::tr("Artistic Style command:"));
command.setDefaultValue("astyle");
command.setPromptDialogTitle(BeautifierPlugin::msgCommandPromptDialogTitle(
Tr::tr(Constants::ARTISTICSTYLE_DISPLAY_NAME)));
registerAspect(&useOtherFiles);
useOtherFiles.setSettingsKey("useOtherFiles");
useOtherFiles.setLabelText(Tr::tr("Use file *.astylerc defined in project files"));
useOtherFiles.setDefaultValue(true);
registerAspect(&useSpecificConfigFile);
useSpecificConfigFile.setSettingsKey("useSpecificConfigFile");
useSpecificConfigFile.setLabelText(Tr::tr("Use specific config file:"));
registerAspect(&specificConfigFile);
specificConfigFile.setSettingsKey("specificConfigFile");
specificConfigFile.setExpectedKind(PathChooser::File);
specificConfigFile.setPromptDialogFilter(Tr::tr("AStyle (*.astylerc)"));
registerAspect(&useHomeFile);
useHomeFile.setSettingsKey("useHomeFile");
useHomeFile.setLabelText(Tr::tr("Use file .astylerc or astylerc in HOME").
replace("HOME", QDir::toNativeSeparators(QDir::home().absolutePath())));
registerAspect(&useCustomStyle);
useCustomStyle.setSettingsKey("useCustomStyle");
useCustomStyle.setLabelText(Tr::tr("Use customized style:"));
registerAspect(&customStyle);
customStyle.setSettingsKey("customStyle");
documentationFilePath.setFilePath(
Core::ICore::userResourcePath(Beautifier::Constants::SETTINGS_DIRNAME)
.pathAppended(Beautifier::Constants::DOCUMENTATION_DIRNAME)
.pathAppended(SETTINGS_NAME)
.stringAppended(".xml"));
read();
}
bool ArtisticStyleSettings::useOtherFiles() const
{
return m_settings.value(USE_OTHER_FILES).toBool();
}
void ArtisticStyleSettings::setUseOtherFiles(bool useOtherFiles)
{
m_settings.insert(USE_OTHER_FILES, QVariant(useOtherFiles));
}
bool ArtisticStyleSettings::useSpecificConfigFile() const
{
return m_settings.value(USE_SPECIFIC_CONFIG_FILE).toBool();
}
void ArtisticStyleSettings::setUseSpecificConfigFile(bool useSpecificConfigFile)
{
m_settings.insert(USE_SPECIFIC_CONFIG_FILE, QVariant(useSpecificConfigFile));
}
FilePath ArtisticStyleSettings::specificConfigFile() const
{
return FilePath::fromString(m_settings.value(SPECIFIC_CONFIG_FILE).toString());
}
void ArtisticStyleSettings::setSpecificConfigFile(const FilePath &specificConfigFile)
{
m_settings.insert(SPECIFIC_CONFIG_FILE, QVariant(specificConfigFile.toString()));
}
bool ArtisticStyleSettings::useHomeFile() const
{
return m_settings.value(USE_HOME_FILE).toBool();
}
void ArtisticStyleSettings::setUseHomeFile(bool useHomeFile)
{
m_settings.insert(USE_HOME_FILE, QVariant(useHomeFile));
}
bool ArtisticStyleSettings::useCustomStyle() const
{
return m_settings.value(USE_CUSTOM_STYLE).toBool();
}
void ArtisticStyleSettings::setUseCustomStyle(bool useCustomStyle)
{
m_settings.insert(USE_CUSTOM_STYLE, QVariant(useCustomStyle));
}
QString ArtisticStyleSettings::customStyle() const
{
return m_settings.value(CUSTOM_STYLE).toString();
}
void ArtisticStyleSettings::setCustomStyle(const QString &customStyle)
{
m_settings.insert(CUSTOM_STYLE, QVariant(customStyle));
}
QString ArtisticStyleSettings::documentationFilePath() const
{
return (Core::ICore::userResourcePath(Beautifier::Constants::SETTINGS_DIRNAME)
/ Beautifier::Constants::DOCUMENTATION_DIRNAME / SETTINGS_NAME)
.stringAppended(".xml")
.toString();
}
void ArtisticStyleSettings::createDocumentationFile() const
{
Process process;
@@ -119,7 +83,7 @@ void ArtisticStyleSettings::createDocumentationFile() const
if (process.result() != ProcessResult::FinishedWithSuccess)
return;
QFile file(documentationFilePath());
QFile file(documentationFilePath().toFSPathString());
const QFileInfo fi(file);
if (!fi.exists())
fi.dir().mkpath(fi.absolutePath());
@@ -183,4 +147,61 @@ void ArtisticStyleSettings::createDocumentationFile() const
}
}
class ArtisticStyleOptionsPageWidget : public Core::IOptionsPageWidget
{
public:
explicit ArtisticStyleOptionsPageWidget(ArtisticStyleSettings *settings)
{
QGroupBox *options = nullptr;
auto configurations = new ConfigurationPanel(this);
configurations->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
configurations->setSettings(settings);
configurations->setCurrentConfiguration(settings->customStyle());
using namespace Layouting;
ArtisticStyleSettings &s = *settings;
Column {
Group {
title(Tr::tr("Configuration")),
Form {
s.command, br,
s.supportedMimeTypes
}
},
Group {
title(Tr::tr("Options")),
bindTo(&options),
Column {
s.useOtherFiles,
Row { s.useSpecificConfigFile, s.specificConfigFile },
s.useHomeFile,
Row { s.useCustomStyle, configurations },
}
},
st
}.attachTo(this);
setOnApply([&s, configurations] {
s.customStyle.setValue(configurations->currentConfiguration());
s.save();
});
s.read();
connect(s.command.pathChooser(), &PathChooser::validChanged, options, &QWidget::setEnabled);
options->setEnabled(s.command.pathChooser()->isValid());
}
};
ArtisticStyleOptionsPage::ArtisticStyleOptionsPage(ArtisticStyleSettings *settings)
{
setId("ArtisticStyle");
setDisplayName(Tr::tr("Artistic Style"));
setCategory(Constants::OPTION_CATEGORY);
setWidgetCreator([settings] { return new ArtisticStyleOptionsPageWidget(settings); });
}
} // Beautifier::Internal

View File

@@ -5,8 +5,6 @@
#include "../abstractsettings.h"
#include <utils/fileutils.h>
namespace Beautifier::Internal {
class ArtisticStyleSettings : public AbstractSettings
@@ -14,26 +12,20 @@ class ArtisticStyleSettings : public AbstractSettings
public:
ArtisticStyleSettings();
bool useOtherFiles() const;
void setUseOtherFiles(bool useOtherFiles);
Utils::BoolAspect useOtherFiles;
Utils::BoolAspect useSpecificConfigFile;
Utils::FilePathAspect specificConfigFile;
Utils::BoolAspect useHomeFile;
Utils::BoolAspect useCustomStyle;
Utils::StringAspect customStyle;
bool useSpecificConfigFile() const;
void setUseSpecificConfigFile(bool useSpecificConfigFile);
Utils::FilePath specificConfigFile() const;
void setSpecificConfigFile(const Utils::FilePath &specificConfigFile);
bool useHomeFile() const;
void setUseHomeFile(bool useHomeFile);
bool useCustomStyle() const;
void setUseCustomStyle(bool useCustomStyle);
QString customStyle() const;
void setCustomStyle(const QString &customStyle);
QString documentationFilePath() const override;
void createDocumentationFile() const override;
};
class ArtisticStyleOptionsPage final : public Core::IOptionsPage
{
public:
explicit ArtisticStyleOptionsPage(ArtisticStyleSettings *settings);
};
} // Beautifier::Internal

View File

@@ -36,8 +36,6 @@ QtcPlugin {
"artisticstyle.cpp",
"artisticstyle.h",
"artisticstyleconstants.h",
"artisticstyleoptionspage.cpp",
"artisticstyleoptionspage.h",
"artisticstylesettings.cpp",
"artisticstylesettings.h"
]
@@ -50,8 +48,6 @@ QtcPlugin {
"clangformat.cpp",
"clangformat.h",
"clangformatconstants.h",
"clangformatoptionspage.cpp",
"clangformatoptionspage.h",
"clangformatsettings.cpp",
"clangformatsettings.h"
]
@@ -64,8 +60,6 @@ QtcPlugin {
"uncrustify.cpp",
"uncrustify.h",
"uncrustifyconstants.h",
"uncrustifyoptionspage.cpp",
"uncrustifyoptionspage.h",
"uncrustifysettings.cpp",
"uncrustifysettings.h"
]

View File

@@ -64,7 +64,7 @@ ClangFormat::ClangFormat()
Core::ActionManager::actionContainer(Constants::MENU_ID)->addMenu(menu);
connect(&m_settings, &ClangFormatSettings::supportedMimeTypesChanged,
connect(&m_settings.supportedMimeTypes, &Utils::BaseAspect::changed,
this, [this] { updateActions(Core::EditorManager::currentEditor()); });
}
@@ -191,10 +191,10 @@ Command ClangFormat::command() const
command.setProcessing(Command::PipeProcessing);
if (m_settings.usePredefinedStyle()) {
const QString predefinedStyle = m_settings.predefinedStyle();
const QString predefinedStyle = m_settings.predefinedStyle.stringValue();
command.addOption("-style=" + predefinedStyle);
if (predefinedStyle == "File") {
const QString fallbackStyle = m_settings.fallbackStyle();
const QString fallbackStyle = m_settings.fallbackStyle.stringValue();
if (fallbackStyle != "Default")
command.addOption("-fallback-style=" + fallbackStyle);
}

View File

@@ -5,7 +5,6 @@
#include "../beautifierabstracttool.h"
#include "clangformatoptionspage.h"
#include "clangformatsettings.h"
namespace Beautifier::Internal {

View File

@@ -1,144 +0,0 @@
// Copyright (C) 2016 Lorenz Haas
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "clangformatoptionspage.h"
#include "clangformatsettings.h"
#include "../beautifierconstants.h"
#include "../beautifierplugin.h"
#include "../beautifiertr.h"
#include "../configurationpanel.h"
#include <utils/layoutbuilder.h>
#include <utils/pathchooser.h>
#include <QButtonGroup>
#include <QComboBox>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
#include <QRadioButton>
#include <QSpacerItem>
namespace Beautifier::Internal {
class ClangFormatOptionsPageWidget : public Core::IOptionsPageWidget
{
public:
explicit ClangFormatOptionsPageWidget(ClangFormatSettings *settings);
void apply() final;
private:
ClangFormatSettings *m_settings;
ConfigurationPanel *m_configurations;
QRadioButton *m_usePredefinedStyle;
QComboBox *m_predefinedStyle;
QComboBox *m_fallbackStyle;
Utils::PathChooser *m_command;
QLineEdit *m_mime;
};
ClangFormatOptionsPageWidget::ClangFormatOptionsPageWidget(ClangFormatSettings *settings)
: m_settings(settings)
{
auto options = new QGroupBox(Tr::tr("Options"));
options->setEnabled(false);
auto styleButtonGroup = new QButtonGroup(this);
auto useCustomizedStyle = new QRadioButton(Tr::tr("Use customized style:"));
styleButtonGroup->addButton(useCustomizedStyle);
m_configurations = new ConfigurationPanel;
m_configurations->setSettings(m_settings);
m_configurations->setCurrentConfiguration(m_settings->customStyle());
m_usePredefinedStyle = new QRadioButton(Tr::tr("Use predefined style:"));
m_usePredefinedStyle->setChecked(true);
styleButtonGroup->addButton(m_usePredefinedStyle);
m_predefinedStyle = new QComboBox;
m_predefinedStyle->addItems(m_settings->predefinedStyles());
const int predefinedStyleIndex = m_predefinedStyle->findText(m_settings->predefinedStyle());
if (predefinedStyleIndex != -1)
m_predefinedStyle->setCurrentIndex(predefinedStyleIndex);
m_fallbackStyle = new QComboBox;
m_fallbackStyle->addItems(m_settings->fallbackStyles());
m_fallbackStyle->setEnabled(false);
const int fallbackStyleIndex = m_fallbackStyle->findText(m_settings->fallbackStyle());
if (fallbackStyleIndex != -1)
m_fallbackStyle->setCurrentIndex(fallbackStyleIndex);
m_mime = new QLineEdit(m_settings->supportedMimeTypesAsString());
m_command = new Utils::PathChooser;
m_command->setExpectedKind(Utils::PathChooser::ExistingCommand);
m_command->setCommandVersionArguments({"--version"});
m_command->setPromptDialogTitle(
BeautifierPlugin::msgCommandPromptDialogTitle("Clang Format"));
if (m_settings->usePredefinedStyle())
m_usePredefinedStyle->setChecked(true);
else
useCustomizedStyle->setChecked(true);
using namespace Layouting;
Form {
m_usePredefinedStyle, m_predefinedStyle, br,
empty, Row { Tr::tr("Fallback style:"), m_fallbackStyle }, br,
useCustomizedStyle, m_configurations, br,
}.attachTo(options);
Column {
Group {
title(Tr::tr("Configuration")),
Form {
Tr::tr("Clang Format command:"), m_command, br,
Tr::tr("Restrict to MIME types:"), m_mime
}
},
options,
st
}.attachTo(this);
connect(m_command, &Utils::PathChooser::validChanged, options, &QWidget::setEnabled);
connect(m_predefinedStyle, &QComboBox::currentTextChanged, this, [this](const QString &item) {
m_fallbackStyle->setEnabled(item == "File");
});
connect(m_usePredefinedStyle, &QRadioButton::toggled, this, [this](bool checked) {
m_fallbackStyle->setEnabled(checked && m_predefinedStyle->currentText() == "File");
m_predefinedStyle->setEnabled(checked);
});
// might trigger PathChooser::validChanged, so so after the connect above
m_command->setFilePath(m_settings->command());
}
void ClangFormatOptionsPageWidget::apply()
{
m_settings->setCommand(m_command->filePath());
m_settings->setSupportedMimeTypes(m_mime->text());
m_settings->setUsePredefinedStyle(m_usePredefinedStyle->isChecked());
m_settings->setPredefinedStyle(m_predefinedStyle->currentText());
m_settings->setFallbackStyle(m_fallbackStyle->currentText());
m_settings->setCustomStyle(m_configurations->currentConfiguration());
m_settings->save();
// update since not all MIME types are accepted (invalids or duplicates)
m_mime->setText(m_settings->supportedMimeTypesAsString());
}
ClangFormatOptionsPage::ClangFormatOptionsPage(ClangFormatSettings *settings)
{
setId("ClangFormat");
setDisplayName(Tr::tr("Clang Format"));
setCategory(Constants::OPTION_CATEGORY);
setWidgetCreator([settings] { return new ClangFormatOptionsPageWidget(settings); });
}
} // Beautifier::Internal

View File

@@ -1,18 +0,0 @@
// Copyright (C) 2016 Lorenz Haas
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#pragma once
#include <coreplugin/dialogs/ioptionspage.h>
namespace Beautifier::Internal {
class ClangFormatSettings;
class ClangFormatOptionsPage final : public Core::IOptionsPage
{
public:
explicit ClangFormatOptionsPage(ClangFormatSettings *settings);
};
} // Beautifier::Internal

View File

@@ -4,43 +4,80 @@
#include "clangformatsettings.h"
#include "../beautifierconstants.h"
#include "../beautifierplugin.h"
#include "../beautifiertr.h"
#include <QDateTime>
#include <QXmlStreamWriter>
#include "../configurationpanel.h"
#include <coreplugin/icore.h>
#include <utils/layoutbuilder.h>
#include <utils/pathchooser.h>
#include <QDateTime>
#include <QXmlStreamWriter>
#include <QButtonGroup>
#include <QComboBox>
#include <QGroupBox>
#include <QRadioButton>
using namespace Utils;
namespace Beautifier::Internal {
const char USE_PREDEFINED_STYLE[] = "usePredefinedStyle";
const char PREDEFINED_STYLE[] = "predefinedStyle";
const char FALLBACK_STYLE[] = "fallbackStyle";
const char CUSTOM_STYLE[] = "customStyle";
const char SETTINGS_NAME[] = "clangformat";
ClangFormatSettings::ClangFormatSettings() :
AbstractSettings(SETTINGS_NAME, ".clang-format")
ClangFormatSettings::ClangFormatSettings()
: AbstractSettings(SETTINGS_NAME, ".clang-format")
{
setCommand("clang-format");
m_settings.insert(USE_PREDEFINED_STYLE, QVariant(true));
m_settings.insert(PREDEFINED_STYLE, "LLVM");
m_settings.insert(FALLBACK_STYLE, "Default");
m_settings.insert(CUSTOM_STYLE, QVariant());
read();
}
command.setDefaultValue("clang-format");
command.setPromptDialogTitle(BeautifierPlugin::msgCommandPromptDialogTitle("Clang Format"));
command.setLabelText(Tr::tr("Clang Format command:"));
QString ClangFormatSettings::documentationFilePath() const
{
return (Core::ICore::userResourcePath() / Beautifier::Constants::SETTINGS_DIRNAME
/ Beautifier::Constants::DOCUMENTATION_DIRNAME / SETTINGS_NAME)
.stringAppended(".xml")
.toString();
registerAspect(&usePredefinedStyle);
usePredefinedStyle.setSettingsKey("usePredefinedStyle");
usePredefinedStyle.setLabelText(Tr::tr("Use predefined style:"));
usePredefinedStyle.setDefaultValue(true);
registerAspect(&predefinedStyle);
predefinedStyle.setSettingsKey("predefinedStyle");
predefinedStyle.setDisplayStyle(SelectionAspect::DisplayStyle::ComboBox);
predefinedStyle.addOption("LLVM");
predefinedStyle.addOption("Google");
predefinedStyle.addOption("Chromium");
predefinedStyle.addOption("Mozilla");
predefinedStyle.addOption("WebKit");
predefinedStyle.addOption("File");
predefinedStyle.setDefaultValue("LLVM");
registerAspect(&fallbackStyle);
fallbackStyle.setSettingsKey("fallbackStyle");
fallbackStyle.setDisplayStyle(SelectionAspect::DisplayStyle::ComboBox);
fallbackStyle.addOption("Default");
fallbackStyle.addOption("None");
fallbackStyle.addOption("LLVM");
fallbackStyle.addOption("Google");
fallbackStyle.addOption("Chromium");
fallbackStyle.addOption("Mozilla");
fallbackStyle.addOption("WebKit");
fallbackStyle.setDefaultValue("Default");
registerAspect(&predefinedStyle);
predefinedStyle.setSettingsKey("predefinedStyle");
predefinedStyle.setDefaultValue("LLVM");
registerAspect(&customStyle);
customStyle.setSettingsKey("customStyle");
documentationFilePath.setFilePath(Core::ICore::userResourcePath(Constants::SETTINGS_DIRNAME)
.pathAppended(Constants::DOCUMENTATION_DIRNAME)
.pathAppended(SETTINGS_NAME).stringAppended(".xml"));
read();
}
void ClangFormatSettings::createDocumentationFile() const
{
QFile file(documentationFilePath());
QFile file(documentationFilePath().toFSPathString());
const QFileInfo fi(file);
if (!fi.exists())
fi.dir().mkpath(fi.absolutePath());
@@ -144,60 +181,6 @@ QStringList ClangFormatSettings::completerWords()
};
}
bool ClangFormatSettings::usePredefinedStyle() const
{
return m_settings.value(USE_PREDEFINED_STYLE).toBool();
}
void ClangFormatSettings::setUsePredefinedStyle(bool usePredefinedStyle)
{
m_settings.insert(USE_PREDEFINED_STYLE, QVariant(usePredefinedStyle));
}
QString ClangFormatSettings::predefinedStyle() const
{
return m_settings.value(PREDEFINED_STYLE).toString();
}
void ClangFormatSettings::setPredefinedStyle(const QString &predefinedStyle)
{
const QStringList test = predefinedStyles();
if (test.contains(predefinedStyle))
m_settings.insert(PREDEFINED_STYLE, QVariant(predefinedStyle));
}
QString ClangFormatSettings::fallbackStyle() const
{
return m_settings.value(FALLBACK_STYLE).toString();
}
void ClangFormatSettings::setFallbackStyle(const QString &fallbackStyle)
{
const QStringList test = fallbackStyles();
if (test.contains(fallbackStyle))
m_settings.insert(FALLBACK_STYLE, QVariant(fallbackStyle));
}
QString ClangFormatSettings::customStyle() const
{
return m_settings.value(CUSTOM_STYLE).toString();
}
void ClangFormatSettings::setCustomStyle(const QString &customStyle)
{
m_settings.insert(CUSTOM_STYLE, QVariant(customStyle));
}
QStringList ClangFormatSettings::predefinedStyles() const
{
return {"LLVM", "Google", "Chromium", "Mozilla", "WebKit", "File"};
}
QStringList ClangFormatSettings::fallbackStyles() const
{
return {"Default", "None", "LLVM", "Google", "Chromium", "Mozilla", "WebKit"};
}
QString ClangFormatSettings::styleFileName(const QString &key) const
{
return m_styleDir.absolutePath() + '/' + key + '/' + m_ending;
@@ -213,4 +196,86 @@ void ClangFormatSettings::readStyles()
}
}
class ClangFormatOptionsPageWidget : public Core::IOptionsPageWidget
{
public:
explicit ClangFormatOptionsPageWidget(ClangFormatSettings *settings)
{
ClangFormatSettings &s = *settings;
QGroupBox *options = nullptr;
auto predefinedStyleButton = new QRadioButton;
s.usePredefinedStyle.adoptButton(predefinedStyleButton);
auto customizedStyleButton = new QRadioButton(Tr::tr("Use customized style:"));
auto styleButtonGroup = new QButtonGroup;
styleButtonGroup->addButton(predefinedStyleButton);
styleButtonGroup->addButton(customizedStyleButton);
auto configurations = new ConfigurationPanel(this);
configurations->setSettings(&s);
configurations->setCurrentConfiguration(s.customStyle());
using namespace Layouting;
auto fallbackBlob = Row { noMargin, Tr::tr("Fallback style:"), s.fallbackStyle }.emerge();
auto predefinedBlob = Column { noMargin, s.predefinedStyle, fallbackBlob }.emerge();
Column {
Group {
title(Tr::tr("Configuration")),
Form {
s.command, br,
s.supportedMimeTypes
}
},
Group {
title(Tr::tr("Options")),
bindTo(&options),
Form {
s.usePredefinedStyle, predefinedBlob, br,
customizedStyleButton, configurations,
},
},
st
}.attachTo(this);
if (s.usePredefinedStyle.value())
predefinedStyleButton->click();
else
customizedStyleButton->click();
const auto updateEnabled = [&s, styleButtonGroup, predefinedBlob, fallbackBlob,
configurations, predefinedStyleButton] {
const bool predefSelected = styleButtonGroup->checkedButton() == predefinedStyleButton;
predefinedBlob->setEnabled(predefSelected);
fallbackBlob->setEnabled(predefSelected && s.predefinedStyle.volatileValue().toInt() == 5); // File
configurations->setEnabled(!predefSelected);
};
updateEnabled();
connect(styleButtonGroup, &QButtonGroup::buttonClicked, this, updateEnabled);
connect(&s.predefinedStyle, &SelectionAspect::volatileValueChanged, this, updateEnabled);
setOnApply([settings, configurations] {
settings->customStyle.setValue(configurations->currentConfiguration());
settings->save();
});
s.read();
connect(s.command.pathChooser(), &PathChooser::validChanged, options, &QWidget::setEnabled);
options->setEnabled(s.command.pathChooser()->isValid());
}
};
ClangFormatOptionsPage::ClangFormatOptionsPage(ClangFormatSettings *settings)
{
setId("ClangFormat");
setDisplayName(Tr::tr("Clang Format"));
setCategory(Constants::OPTION_CATEGORY);
setWidgetCreator([settings] { return new ClangFormatOptionsPageWidget(settings); });
}
} // Beautifier::Internal

View File

@@ -12,24 +12,14 @@ class ClangFormatSettings : public AbstractSettings
public:
explicit ClangFormatSettings();
QString documentationFilePath() const override;
void createDocumentationFile() const override;
QStringList completerWords() override;
bool usePredefinedStyle() const;
void setUsePredefinedStyle(bool usePredefinedStyle);
QString predefinedStyle() const;
void setPredefinedStyle(const QString &predefinedStyle);
QString fallbackStyle() const;
void setFallbackStyle(const QString &fallbackStyle);
QString customStyle() const;
void setCustomStyle(const QString &customStyle);
QStringList predefinedStyles() const;
QStringList fallbackStyles() const;
Utils::BoolAspect usePredefinedStyle;
Utils::SelectionAspect predefinedStyle;
Utils::SelectionAspect fallbackStyle;
Utils::StringAspect customStyle;
QString styleFileName(const QString &key) const override;
@@ -37,4 +27,10 @@ private:
void readStyles() override;
};
class ClangFormatOptionsPage final : public Core::IOptionsPage
{
public:
explicit ClangFormatOptionsPage(ClangFormatSettings *settings);
};
} // Beautifier::Internal

View File

@@ -54,7 +54,7 @@ Uncrustify::Uncrustify()
Core::ActionManager::actionContainer(Constants::MENU_ID)->addMenu(menu);
connect(&m_settings, &UncrustifySettings::supportedMimeTypesChanged,
connect(&m_settings.supportedMimeTypes, &Utils::BaseAspect::changed,
this, [this] { updateActions(Core::EditorManager::currentEditor()); });
}

View File

@@ -5,7 +5,6 @@
#include "../beautifierabstracttool.h"
#include "uncrustifyoptionspage.h"
#include "uncrustifysettings.h"
namespace Beautifier::Internal {

View File

@@ -1,137 +0,0 @@
// Copyright (C) 2016 Lorenz Haas
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "uncrustifyoptionspage.h"
#include "uncrustifyconstants.h"
#include "uncrustifysettings.h"
#include "../beautifierconstants.h"
#include "../beautifierplugin.h"
#include "../beautifiertr.h"
#include "../configurationpanel.h"
#include <utils/layoutbuilder.h>
#include <utils/pathchooser.h>
#include <QCheckBox>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
namespace Beautifier::Internal {
class UncrustifyOptionsPageWidget : public Core::IOptionsPageWidget
{
public:
explicit UncrustifyOptionsPageWidget(UncrustifySettings *settings);
void apply() final;
private:
UncrustifySettings *m_settings;
Utils::PathChooser *m_command;
QLineEdit *m_mime;
QCheckBox *m_useOtherFiles;
QCheckBox *m_useSpecificFile;
Utils::PathChooser *m_uncrusifyFilePath;
QCheckBox *m_useHomeFile;
QCheckBox *m_useCustomStyle;
ConfigurationPanel *m_configurations;
QCheckBox *m_formatEntireFileFallback;
};
UncrustifyOptionsPageWidget::UncrustifyOptionsPageWidget(UncrustifySettings *settings)
: m_settings(settings)
{
m_command = new Utils::PathChooser;
m_mime = new QLineEdit(m_settings->supportedMimeTypesAsString());
m_useOtherFiles = new QCheckBox(Tr::tr("Use file uncrustify.cfg defined in project files"));
m_useOtherFiles->setChecked(m_settings->useOtherFiles());
m_useSpecificFile = new QCheckBox(Tr::tr("Use file specific uncrustify.cfg"));
m_useSpecificFile->setChecked(m_settings->useSpecificConfigFile());
m_uncrusifyFilePath = new Utils::PathChooser;
m_uncrusifyFilePath->setExpectedKind(Utils::PathChooser::File);
m_uncrusifyFilePath->setPromptDialogFilter(Tr::tr("Uncrustify file (*.cfg)"));
m_uncrusifyFilePath->setFilePath(m_settings->specificConfigFile());
m_useHomeFile = new QCheckBox(Tr::tr("Use file uncrustify.cfg in HOME")
.replace( "HOME", QDir::toNativeSeparators(QDir::home().absolutePath())));
m_useHomeFile->setChecked(m_settings->useHomeFile());
m_useCustomStyle = new QCheckBox(Tr::tr("Use customized style:"));
m_useCustomStyle->setChecked(m_settings->useCustomStyle());
m_configurations = new ConfigurationPanel;
m_configurations->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
m_configurations->setSettings(m_settings);
m_configurations->setCurrentConfiguration(m_settings->customStyle());
m_formatEntireFileFallback = new QCheckBox(Tr::tr("Format entire file if no text was selected"));
m_formatEntireFileFallback->setToolTip(Tr::tr("For action Format Selected Text"));
m_formatEntireFileFallback->setChecked(m_settings->formatEntireFileFallback());
m_command->setExpectedKind(Utils::PathChooser::ExistingCommand);
m_command->setCommandVersionArguments({"--version"});
m_command->setPromptDialogTitle(BeautifierPlugin::msgCommandPromptDialogTitle(
Tr::tr(Constants::UNCRUSTIFY_DISPLAY_NAME)));
m_command->setFilePath(m_settings->command());
auto options = new QGroupBox(Tr::tr("Options"));
using namespace Layouting;
Column {
m_useOtherFiles,
Row { m_useSpecificFile, m_uncrusifyFilePath },
m_useHomeFile,
Row { m_useCustomStyle, m_configurations },
m_formatEntireFileFallback
}.attachTo(options);
Column {
Group {
title(Tr::tr("Configuration")),
Form {
Tr::tr("Uncrustify command:"), m_command, br,
Tr::tr("Restrict to MIME types:"), m_mime
}
},
options,
st
}.attachTo(this);
connect(m_command, &Utils::PathChooser::validChanged, options, &QWidget::setEnabled);
}
void UncrustifyOptionsPageWidget::apply()
{
m_settings->setCommand(m_command->filePath());
m_settings->setSupportedMimeTypes(m_mime->text());
m_settings->setUseOtherFiles(m_useOtherFiles->isChecked());
m_settings->setUseHomeFile(m_useHomeFile->isChecked());
m_settings->setUseSpecificConfigFile(m_useSpecificFile->isChecked());
m_settings->setSpecificConfigFile(m_uncrusifyFilePath->filePath());
m_settings->setUseCustomStyle(m_useCustomStyle->isChecked());
m_settings->setCustomStyle(m_configurations->currentConfiguration());
m_settings->setFormatEntireFileFallback(m_formatEntireFileFallback->isChecked());
m_settings->save();
// update since not all MIME types are accepted (invalids or duplicates)
m_mime->setText(m_settings->supportedMimeTypesAsString());
}
UncrustifyOptionsPage::UncrustifyOptionsPage(UncrustifySettings *settings)
{
setId("Uncrustify");
setDisplayName(Tr::tr("Uncrustify"));
setCategory(Constants::OPTION_CATEGORY);
setWidgetCreator([settings] { return new UncrustifyOptionsPageWidget(settings); });
}
} // Beautifier::Internal

View File

@@ -1,18 +0,0 @@
// Copyright (C) 2016 Lorenz Haas
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#pragma once
#include <coreplugin/dialogs/ioptionspage.h>
namespace Beautifier::Internal {
class UncrustifySettings;
class UncrustifyOptionsPage final : public Core::IOptionsPage
{
public:
explicit UncrustifyOptionsPage(UncrustifySettings *settings);
};
} // Beautifier::Internal

View File

@@ -3,14 +3,25 @@
#include "uncrustifysettings.h"
#include "uncrustifyconstants.h"
#include "../beautifierconstants.h"
#include "../beautifierplugin.h"
#include "../beautifiertr.h"
#include "../configurationpanel.h"
#include <coreplugin/icore.h>
#include <utils/layoutbuilder.h>
#include <utils/pathchooser.h>
#include <utils/process.h>
#include <QCheckBox>
#include <QDateTime>
#include <QFile>
#include <QFileInfo>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
#include <QRegularExpression>
#include <QXmlStreamWriter>
@@ -18,110 +29,57 @@ using namespace Utils;
namespace Beautifier::Internal {
const char USE_OTHER_FILES[] = "useOtherFiles";
const char USE_HOME_FILE[] = "useHomeFile";
const char USE_SPECIFIC_CONFIG_FILE_PATH[] = "useSpecificConfigFile";
const char SPECIFIC_CONFIG_FILE_PATH[] = "specificConfigFile";
const char USE_CUSTOM_STYLE[] = "useCustomStyle";
const char CUSTOM_STYLE[] = "customStyle";
const char FORMAT_ENTIRE_FILE_FALLBACK[] = "formatEntireFileFallback";
const char SETTINGS_NAME[] = "uncrustify";
UncrustifySettings::UncrustifySettings() :
AbstractSettings(SETTINGS_NAME, ".cfg")
UncrustifySettings::UncrustifySettings()
: AbstractSettings(SETTINGS_NAME, ".cfg")
{
setVersionRegExp(QRegularExpression("([0-9]{1})\\.([0-9]{2})"));
setCommand("uncrustify");
m_settings.insert(USE_OTHER_FILES, QVariant(true));
m_settings.insert(USE_HOME_FILE, QVariant(false));
m_settings.insert(USE_CUSTOM_STYLE, QVariant(false));
m_settings.insert(USE_SPECIFIC_CONFIG_FILE_PATH, QVariant(false));
m_settings.insert(CUSTOM_STYLE, QVariant());
m_settings.insert(FORMAT_ENTIRE_FILE_FALLBACK, QVariant(true));
m_settings.insert(SPECIFIC_CONFIG_FILE_PATH, QVariant());
command.setDefaultValue("uncrustify");
command.setLabelText(Tr::tr("Uncrustify command:"));
command.setPromptDialogTitle(BeautifierPlugin::msgCommandPromptDialogTitle(
Tr::tr(Constants::UNCRUSTIFY_DISPLAY_NAME)));
registerAspect(&useOtherFiles);
useOtherFiles.setSettingsKey("useOtherFiles");
useOtherFiles.setDefaultValue(true);
useOtherFiles.setLabelText(Tr::tr("Use file uncrustify.cfg defined in project files"));
registerAspect(&useHomeFile);
useHomeFile.setSettingsKey("useHomeFile");
useHomeFile.setLabelText(Tr::tr("Use file uncrustify.cfg in HOME")
.replace( "HOME", QDir::toNativeSeparators(QDir::home().absolutePath())));
registerAspect(&useCustomStyle);
useCustomStyle.setSettingsKey("useCustomStyle");
useCustomStyle.setLabelText(Tr::tr("Use customized style:"));
registerAspect(&useSpecificConfigFile);
useSpecificConfigFile.setSettingsKey("useSpecificConfigFile");
useSpecificConfigFile.setLabelText(Tr::tr("Use file specific uncrustify.cfg"));
registerAspect(&customStyle);
customStyle.setSettingsKey("customStyle");
registerAspect(&formatEntireFileFallback);
formatEntireFileFallback.setSettingsKey("formatEntireFileFallback");
formatEntireFileFallback.setDefaultValue(true);
formatEntireFileFallback.setLabelText(Tr::tr("Format entire file if no text was selected"));
formatEntireFileFallback.setToolTip(Tr::tr("For action Format Selected Text"));
registerAspect(&specificConfigFile);
specificConfigFile.setSettingsKey("specificConfigFile");
specificConfigFile.setExpectedKind(Utils::PathChooser::File);
specificConfigFile.setPromptDialogFilter(Tr::tr("Uncrustify file (*.cfg)"));
documentationFilePath.setFilePath(Core::ICore::userResourcePath(Constants::SETTINGS_DIRNAME)
.pathAppended(Constants::DOCUMENTATION_DIRNAME)
.pathAppended(SETTINGS_NAME).stringAppended(".xml"));
read();
}
UncrustifySettings::~UncrustifySettings() = default;
bool UncrustifySettings::useOtherFiles() const
{
return m_settings.value(USE_OTHER_FILES).toBool();
}
void UncrustifySettings::setUseOtherFiles(bool useOtherFiles)
{
m_settings.insert(USE_OTHER_FILES, QVariant(useOtherFiles));
}
bool UncrustifySettings::useHomeFile() const
{
return m_settings.value(USE_HOME_FILE).toBool();
}
void UncrustifySettings::setUseHomeFile(bool useHomeFile)
{
m_settings.insert(USE_HOME_FILE, QVariant(useHomeFile));
}
FilePath UncrustifySettings::specificConfigFile() const
{
return FilePath::fromString(m_settings.value(SPECIFIC_CONFIG_FILE_PATH).toString());
}
void UncrustifySettings::setSpecificConfigFile(const FilePath &filePath)
{
m_settings.insert(SPECIFIC_CONFIG_FILE_PATH, QVariant(filePath.toString()));
}
bool UncrustifySettings::useSpecificConfigFile() const
{
return m_settings.value(USE_SPECIFIC_CONFIG_FILE_PATH).toBool();
}
void UncrustifySettings::setUseSpecificConfigFile(bool useConfigFile)
{
m_settings.insert(USE_SPECIFIC_CONFIG_FILE_PATH, QVariant(useConfigFile));
}
bool UncrustifySettings::useCustomStyle() const
{
return m_settings.value(USE_CUSTOM_STYLE).toBool();
}
void UncrustifySettings::setUseCustomStyle(bool useCustomStyle)
{
m_settings.insert(USE_CUSTOM_STYLE, QVariant(useCustomStyle));
}
QString UncrustifySettings::customStyle() const
{
return m_settings.value(CUSTOM_STYLE).toString();
}
void UncrustifySettings::setCustomStyle(const QString &customStyle)
{
m_settings.insert(CUSTOM_STYLE, QVariant(customStyle));
}
bool UncrustifySettings::formatEntireFileFallback() const
{
return m_settings.value(FORMAT_ENTIRE_FILE_FALLBACK).toBool();
}
void UncrustifySettings::setFormatEntireFileFallback(bool formatEntireFileFallback)
{
m_settings.insert(FORMAT_ENTIRE_FILE_FALLBACK, QVariant(formatEntireFileFallback));
}
QString UncrustifySettings::documentationFilePath() const
{
return (Core::ICore::userResourcePath() / Beautifier::Constants::SETTINGS_DIRNAME
/ Beautifier::Constants::DOCUMENTATION_DIRNAME / SETTINGS_NAME)
.stringAppended(".xml")
.toString();
}
void UncrustifySettings::createDocumentationFile() const
{
Process process;
@@ -131,7 +89,7 @@ void UncrustifySettings::createDocumentationFile() const
if (process.result() != ProcessResult::FinishedWithSuccess)
return;
QFile file(documentationFilePath());
QFile file(documentationFilePath().toFSPathString());
const QFileInfo fi(file);
if (!fi.exists())
fi.dir().mkpath(fi.absolutePath());
@@ -185,4 +143,62 @@ void UncrustifySettings::createDocumentationFile() const
}
}
class UncrustifyOptionsPageWidget : public Core::IOptionsPageWidget
{
public:
explicit UncrustifyOptionsPageWidget(UncrustifySettings *settings)
{
UncrustifySettings &s = *settings;
auto configurations = new ConfigurationPanel(this);
configurations->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
configurations->setSettings(settings);
configurations->setCurrentConfiguration(settings->customStyle());
QGroupBox *options = nullptr;
using namespace Layouting;
Column {
Group {
title(Tr::tr("Configuration")),
Form {
s.command, br,
s.supportedMimeTypes,
}
},
Group {
title(Tr::tr("Options")),
bindTo(&options),
Column {
s.useOtherFiles,
Row { s.useSpecificConfigFile, s.specificConfigFile },
s.useHomeFile,
Row { s.useCustomStyle, configurations },
s.formatEntireFileFallback
},
},
st
}.attachTo(this);
s.read();
connect(s.command.pathChooser(), &PathChooser::validChanged, options, &QWidget::setEnabled);
options->setEnabled(s.command.pathChooser()->isValid());
setOnApply([&s, configurations] {
s.customStyle.setValue(configurations->currentConfiguration());
s.save();
});
}
};
UncrustifyOptionsPage::UncrustifyOptionsPage(UncrustifySettings *settings)
{
setId("Uncrustify");
setDisplayName(Tr::tr("Uncrustify"));
setCategory(Constants::OPTION_CATEGORY);
setWidgetCreator([settings] { return new UncrustifyOptionsPageWidget(settings); });
}
} // Beautifier::Internal

View File

@@ -5,41 +5,30 @@
#include "../abstractsettings.h"
namespace Beautifier {
namespace Internal {
namespace Beautifier::Internal {
class UncrustifySettings : public AbstractSettings
{
Q_OBJECT
public:
UncrustifySettings();
~UncrustifySettings() override;
bool useOtherFiles() const;
void setUseOtherFiles(bool useOtherFiles);
bool useHomeFile() const;
void setUseHomeFile(bool useHomeFile);
bool useCustomStyle() const;
void setUseCustomStyle(bool useCustomStyle);
QString customStyle() const;
void setCustomStyle(const QString &customStyle);
bool formatEntireFileFallback() const;
void setFormatEntireFileFallback(bool formatEntireFileFallback);
QString documentationFilePath() const override;
void createDocumentationFile() const override;
Utils::FilePath specificConfigFile() const;
void setSpecificConfigFile(const Utils::FilePath &filePath);
Utils::BoolAspect useOtherFiles;
Utils::BoolAspect useHomeFile;
Utils::BoolAspect useCustomStyle;
bool useSpecificConfigFile() const;
void setUseSpecificConfigFile(bool useConfigFile);
Utils::StringAspect customStyle;
Utils::BoolAspect formatEntireFileFallback;
Utils::FilePathAspect specificConfigFile;
Utils::BoolAspect useSpecificConfigFile;
};
} // namespace Internal
} // namespace Beautifier
class UncrustifyOptionsPage final : public Core::IOptionsPage
{
public:
explicit UncrustifyOptionsPage(UncrustifySettings *settings);
};
} // Beautifier::Internal