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

@@ -442,16 +442,6 @@ int BuildManager::getErrorTaskCount()
return errors;
}
void BuildManager::setCompileOutputSettings(const CompileOutputSettings &settings)
{
d->m_outputWindow->setSettings(settings);
}
const CompileOutputSettings &BuildManager::compileOutputSettings()
{
return d->m_outputWindow->settings();
}
QString BuildManager::displayNameForStepId(Id stepId)
{
if (stepId == Constants::BUILDSTEPS_CLEAN) {
@@ -853,7 +843,7 @@ bool BuildManager::buildLists(const QList<BuildStepList *> bsls, const QStringLi
return false;
}
if (d->m_outputWindow->settings().popUp)
if (CompileOutputSettings::instance().popUp())
d->m_outputWindow->popup(IOutputPane::NoModeSwitch);
startBuildQueue();
return true;
@@ -866,7 +856,7 @@ void BuildManager::appendStep(BuildStep *step, const QString &name)
d->m_outputWindow->popup(IOutputPane::NoModeSwitch);
return;
}
if (d->m_outputWindow->settings().popUp)
if (CompileOutputSettings::instance().popUp())
d->m_outputWindow->popup(IOutputPane::NoModeSwitch);
startBuildQueue();
}

View File

@@ -10,12 +10,10 @@
#include <QStringList>
namespace ProjectExplorer {
class RunConfiguration;
namespace Internal { class CompileOutputSettings; }
class Task;
class Project;
class RunConfiguration;
class Task;
enum class BuildForRunConfigStatus { Building, NotBuilding, BuildFailed };
enum class ConfigSelection { All, Active };
@@ -66,9 +64,6 @@ public:
static int getErrorTaskCount();
static void setCompileOutputSettings(const Internal::CompileOutputSettings &settings);
static const Internal::CompileOutputSettings &compileOutputSettings();
static QString displayNameForStepId(Utils::Id stepId);
public slots:

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

View File

@@ -26,6 +26,18 @@ namespace Internal {
class ShowOutputTaskHandler;
class CompileOutputTextEdit;
class CompileOutputSettings final : public Core::PagedSettings
{
public:
CompileOutputSettings();
static CompileOutputSettings &instance();
Utils::BoolAspect popUp{this};
Utils::BoolAspect wrapOutput{this};
Utils::IntegerAspect maxCharCount{this};
};
class CompileOutputWindow final : public Core::IOutputPane
{
Q_OBJECT
@@ -57,19 +69,13 @@ public:
void flush();
void reset();
const CompileOutputSettings &settings() const { return m_settings; }
void setSettings(const CompileOutputSettings &settings);
Utils::OutputFormatter *outputFormatter() const;
private:
void updateFilter() override;
const QList<Core::OutputWindow *> outputWindows() const override { return {m_outputWindow}; }
void loadSettings();
void storeSettings() const;
void updateFromSettings();
Core::OutputWindow *m_outputWindow;
ShowOutputTaskHandler *m_handler;
QToolButton *m_cancelBuildButton;
@@ -77,11 +83,5 @@ private:
CompileOutputSettings m_settings;
};
class CompileOutputSettingsPage final : public Core::IOptionsPage
{
public:
CompileOutputSettingsPage();
};
} // namespace Internal
} // namespace ProjectExplorer

View File

@@ -666,7 +666,6 @@ public:
// Settings pages
ProjectExplorerSettingsPage m_projectExplorerSettingsPage;
AppOutputSettingsPage m_appOutputSettingsPage;
CompileOutputSettingsPage m_compileOutputSettingsPage;
DeviceSettingsPage m_deviceSettingsPage;
SshSettingsPage m_sshSettingsPage;
CustomParsersSettingsPage m_customParsersSettingsPage;

View File

@@ -74,14 +74,6 @@ public:
int maxCharCount = Core::Constants::DEFAULT_MAX_CHAR_COUNT;
};
class CompileOutputSettings
{
public:
bool popUp = false;
bool wrapOutput = false;
int maxCharCount = Core::Constants::DEFAULT_MAX_CHAR_COUNT;
};
class ProjectExplorerSettingsPage : public Core::IOptionsPage
{
public: