ProjectExplorer: Aspectify Compile output settings page

Change-Id: Icc7b1917a57a96e482db7b4f0ba5c0a203f4958c
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2023-05-31 12:38:49 +02:00
parent 3ca94f9c90
commit 9574122da1
6 changed files with 62 additions and 114 deletions

View File

@@ -17,7 +17,9 @@
#include <texteditor/texteditorsettings.h>
#include <texteditor/fontsettings.h>
#include <texteditor/behaviorsettings.h>
#include <utils/algorithm.h>
#include <utils/layoutbuilder.h>
#include <utils/outputformatter.h>
#include <utils/proxyaction.h>
#include <utils/theme/theme.h>
@@ -43,9 +45,6 @@ namespace Internal {
const char SETTINGS_KEY[] = "ProjectExplorer/CompileOutput/Zoom";
const char C_COMPILE_OUTPUT[] = "ProjectExplorer.CompileOutput";
const char POP_UP_KEY[] = "ProjectExplorer/Settings/ShowCompilerOutput";
const char WRAP_OUTPUT_KEY[] = "ProjectExplorer/Settings/WrapBuildOutput";
const char MAX_LINES_KEY[] = "ProjectExplorer/Settings/MaxBuildOutputLines";
const char OPTIONS_PAGE_ID[] = "C.ProjectExplorer.CompileOutputOptions";
CompileOutputWindow::CompileOutputWindow(QAction *cancelBuildAction) :
@@ -101,8 +100,17 @@ CompileOutputWindow::CompileOutputWindow(QAction *cancelBuildAction) :
Tr::tr("O"));
ExtensionSystem::PluginManager::addObject(m_handler);
setupContext(C_COMPILE_OUTPUT, m_outputWindow);
loadSettings();
updateFromSettings();
m_outputWindow->setWordWrapEnabled(m_settings.wrapOutput());
m_outputWindow->setMaxCharCount(m_settings.maxCharCount());
connect(&m_settings.wrapOutput, &Utils::BaseAspect::changed, m_outputWindow, [this] {
m_outputWindow->setWordWrapEnabled(m_settings.wrapOutput());
});
connect(&m_settings.maxCharCount, &Utils::BaseAspect::changed, m_outputWindow, [this] {
m_outputWindow->setMaxCharCount(m_settings.maxCharCount());
});
}
CompileOutputWindow::~CompileOutputWindow()
@@ -115,10 +123,7 @@ CompileOutputWindow::~CompileOutputWindow()
void CompileOutputWindow::updateFromSettings()
{
m_outputWindow->setWordWrapEnabled(m_settings.wrapOutput);
m_outputWindow->setMaxCharCount(m_settings.maxCharCount);
}
bool CompileOutputWindow::hasFocus() const
{
return m_outputWindow->window()->focusWidget() == m_outputWindow;
@@ -213,13 +218,6 @@ void CompileOutputWindow::reset()
m_outputWindow->reset();
}
void CompileOutputWindow::setSettings(const CompileOutputSettings &settings)
{
m_settings = settings;
storeSettings();
updateFromSettings();
}
Utils::OutputFormatter *CompileOutputWindow::outputFormatter() const
{
return m_outputWindow->outputFormatter();
@@ -231,75 +229,49 @@ void CompileOutputWindow::updateFilter()
filterUsesRegexp(), filterIsInverted());
}
const bool kPopUpDefault = false;
const bool kWrapOutputDefault = true;
// CompileOutputSettings
void CompileOutputWindow::loadSettings()
static CompileOutputSettings *s_compileOutputSettings;
CompileOutputSettings &CompileOutputSettings::instance()
{
QSettings * const s = Core::ICore::settings();
m_settings.popUp = s->value(POP_UP_KEY, kPopUpDefault).toBool();
m_settings.wrapOutput = s->value(WRAP_OUTPUT_KEY, kWrapOutputDefault).toBool();
m_settings.maxCharCount = s->value(MAX_LINES_KEY,
Core::Constants::DEFAULT_MAX_CHAR_COUNT).toInt() * 100;
return *s_compileOutputSettings;
}
void CompileOutputWindow::storeSettings() const
CompileOutputSettings::CompileOutputSettings()
{
Utils::QtcSettings *const s = Core::ICore::settings();
s->setValueWithDefault(POP_UP_KEY, m_settings.popUp, kPopUpDefault);
s->setValueWithDefault(WRAP_OUTPUT_KEY, m_settings.wrapOutput, kWrapOutputDefault);
s->setValueWithDefault(MAX_LINES_KEY,
m_settings.maxCharCount / 100,
Core::Constants::DEFAULT_MAX_CHAR_COUNT);
}
s_compileOutputSettings = this;
class CompileOutputSettingsWidget : public Core::IOptionsPageWidget
{
public:
CompileOutputSettingsWidget()
{
const CompileOutputSettings &settings = BuildManager::compileOutputSettings();
m_wrapOutputCheckBox.setText(Tr::tr("Word-wrap output"));
m_wrapOutputCheckBox.setChecked(settings.wrapOutput);
m_popUpCheckBox.setText(Tr::tr("Open Compile Output when building"));
m_popUpCheckBox.setChecked(settings.popUp);
m_maxCharsBox.setMaximum(100000000);
m_maxCharsBox.setValue(settings.maxCharCount);
const auto layout = new QVBoxLayout(this);
layout->addWidget(&m_wrapOutputCheckBox);
layout->addWidget(&m_popUpCheckBox);
const auto maxCharsLayout = new QHBoxLayout;
const QString msg = Tr::tr("Limit output to %1 characters");
const QStringList parts = msg.split("%1") << QString() << QString();
maxCharsLayout->addWidget(new QLabel(parts.at(0).trimmed()));
maxCharsLayout->addWidget(&m_maxCharsBox);
maxCharsLayout->addWidget(new QLabel(parts.at(1).trimmed()));
maxCharsLayout->addStretch(1);
layout->addLayout(maxCharsLayout);
layout->addStretch(1);
}
void apply() final
{
CompileOutputSettings s;
s.wrapOutput = m_wrapOutputCheckBox.isChecked();
s.popUp = m_popUpCheckBox.isChecked();
s.maxCharCount = m_maxCharsBox.value();
BuildManager::setCompileOutputSettings(s);
}
private:
QCheckBox m_wrapOutputCheckBox;
QCheckBox m_popUpCheckBox;
QSpinBox m_maxCharsBox;
};
CompileOutputSettingsPage::CompileOutputSettingsPage()
{
setId(OPTIONS_PAGE_ID);
setDisplayName(Tr::tr("Compile Output"));
setCategory(Constants::BUILD_AND_RUN_SETTINGS_CATEGORY);
setWidgetCreator([] { return new CompileOutputSettingsWidget; });
wrapOutput.setSettingsKey("ProjectExplorer/Settings/WrapBuildOutput");
wrapOutput.setDefaultValue(true);
wrapOutput.setLabelText(Tr::tr("Word-wrap output"));
popUp.setSettingsKey("ProjectExplorer/Settings/ShowCompilerOutput");
popUp.setLabelText(Tr::tr("Open Compile Output when building"));
maxCharCount.setSettingsKey("ProjectExplorer/Settings/MaxBuildOutputLines");
maxCharCount.setRange(1, Core::Constants::DEFAULT_MAX_CHAR_COUNT);
maxCharCount.setDefaultValue(Core::Constants::DEFAULT_MAX_CHAR_COUNT);
maxCharCount.setToSettingsTransformation([](const QVariant &v) { return v.toInt() / 100; });
maxCharCount.setFromSettingsTransformation([](const QVariant &v) { return v.toInt() * 100; });
setLayouter([this] {
using namespace Layouting;
const QString msg = Tr::tr("Limit output to %1 characters");
const QStringList parts = msg.split("%1") << QString() << QString();
return Column {
wrapOutput,
popUp,
Row { parts.at(0), maxCharCount, parts.at(1), st },
st
};
});
readSettings();
}
} // Internal