diff options
Diffstat (limited to 'src/plugins/beautifier/uncrustify/uncrustifysettings.cpp')
-rw-r--r-- | src/plugins/beautifier/uncrustify/uncrustifysettings.cpp | 195 |
1 files changed, 102 insertions, 93 deletions
diff --git a/src/plugins/beautifier/uncrustify/uncrustifysettings.cpp b/src/plugins/beautifier/uncrustify/uncrustifysettings.cpp index e827a8f7915..1aa9e8502c6 100644 --- a/src/plugins/beautifier/uncrustify/uncrustifysettings.cpp +++ b/src/plugins/beautifier/uncrustify/uncrustifysettings.cpp @@ -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/qtcprocess.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,120 +29,60 @@ 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") +const char SETTINGS_NAME[] = "uncrustify"; + +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()); - read(); -} -UncrustifySettings::~UncrustifySettings() = default; + command.setDefaultValue("uncrustify"); + command.setLabelText(Tr::tr("Uncrustify command:")); + command.setPromptDialogTitle(BeautifierPlugin::msgCommandPromptDialogTitle( + Tr::tr(Constants::UNCRUSTIFY_DISPLAY_NAME))); -bool UncrustifySettings::useOtherFiles() const -{ - return m_settings.value(USE_OTHER_FILES).toBool(); -} + useOtherFiles.setSettingsKey("useOtherFiles"); + useOtherFiles.setDefaultValue(true); + useOtherFiles.setLabelText(Tr::tr("Use file uncrustify.cfg defined in project files")); -void UncrustifySettings::setUseOtherFiles(bool useOtherFiles) -{ - m_settings.insert(USE_OTHER_FILES, QVariant(useOtherFiles)); -} + useHomeFile.setSettingsKey("useHomeFile"); + useHomeFile.setLabelText(Tr::tr("Use file uncrustify.cfg in HOME") + .replace( "HOME", QDir::toNativeSeparators(QDir::home().absolutePath()))); -bool UncrustifySettings::useHomeFile() const -{ - return m_settings.value(USE_HOME_FILE).toBool(); -} + useCustomStyle.setSettingsKey("useCustomStyle"); + useCustomStyle.setLabelText(Tr::tr("Use customized style:")); -void UncrustifySettings::setUseHomeFile(bool useHomeFile) -{ - m_settings.insert(USE_HOME_FILE, QVariant(useHomeFile)); -} + useSpecificConfigFile.setSettingsKey("useSpecificConfigFile"); + useSpecificConfigFile.setLabelText(Tr::tr("Use file specific uncrustify.cfg")); -FilePath UncrustifySettings::specificConfigFile() const -{ - return FilePath::fromString(m_settings.value(SPECIFIC_CONFIG_FILE_PATH).toString()); -} + customStyle.setSettingsKey("customStyle"); -void UncrustifySettings::setSpecificConfigFile(const FilePath &filePath) -{ - m_settings.insert(SPECIFIC_CONFIG_FILE_PATH, QVariant(filePath.toString())); -} + 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")); -bool UncrustifySettings::useSpecificConfigFile() const -{ - return m_settings.value(USE_SPECIFIC_CONFIG_FILE_PATH).toBool(); -} + specificConfigFile.setSettingsKey("specificConfigFile"); + specificConfigFile.setExpectedKind(Utils::PathChooser::File); + specificConfigFile.setPromptDialogFilter(Tr::tr("Uncrustify file (*.cfg)")); -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(); -} + documentationFilePath = Core::ICore::userResourcePath(Constants::SETTINGS_DIRNAME) + .pathAppended(Constants::DOCUMENTATION_DIRNAME) + .pathAppended(SETTINGS_NAME).stringAppended(".xml"); -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(); + read(); } void UncrustifySettings::createDocumentationFile() const { - QtcProcess process; + Process process; process.setTimeoutS(2); process.setCommand({command(), {"--show-config"}}); process.runBlocking(); 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 +136,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 |