Add clear button to build system output

in Projects mode.

Change-Id: I7ab5b460228f6c8a2c68ece87ccfbdef3608bd9c
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
Eike Ziller
2021-06-18 16:27:13 +02:00
parent d42953160b
commit f3997c565e
5 changed files with 101 additions and 40 deletions

View File

@@ -136,6 +136,8 @@ const char ABOUT_PLUGINS[] = "QtCreator.AboutPlugins";
const char S_RETURNTOEDITOR[] = "QtCreator.ReturnToEditor"; const char S_RETURNTOEDITOR[] = "QtCreator.ReturnToEditor";
const char SHOWINGRAPHICALSHELL[] = "QtCreator.ShowInGraphicalShell"; const char SHOWINGRAPHICALSHELL[] = "QtCreator.ShowInGraphicalShell";
const char OUTPUTPANE_CLEAR[] = "Coreplugin.OutputPane.clear";
// Default groups // Default groups
const char G_DEFAULT_ONE[] = "QtCreator.Group.Default.One"; const char G_DEFAULT_ONE[] = "QtCreator.Group.Default.One";
const char G_DEFAULT_TWO[] = "QtCreator.Group.Default.Two"; const char G_DEFAULT_TWO[] = "QtCreator.Group.Default.Two";

View File

@@ -299,6 +299,7 @@ void MainWindow::init()
{ {
m_progressManager->init(); // needs the status bar manager m_progressManager->init(); // needs the status bar manager
MessageManager::init(); MessageManager::init();
OutputPaneManager::create();
} }
void MainWindow::extensionsInitialized() void MainWindow::extensionsInitialized()
@@ -307,7 +308,7 @@ void MainWindow::extensionsInitialized()
MimeTypeSettings::restoreSettings(); MimeTypeSettings::restoreSettings();
m_windowSupport = new WindowSupport(this, Context("Core.MainWindow")); m_windowSupport = new WindowSupport(this, Context("Core.MainWindow"));
m_windowSupport->setCloseActionEnabled(false); m_windowSupport->setCloseActionEnabled(false);
OutputPaneManager::create(); OutputPaneManager::initialize();
VcsManager::extensionsInitialized(); VcsManager::extensionsInitialized();
m_leftNavigationWidget->setFactories(INavigationWidgetFactory::allNavigationFactories()); m_leftNavigationWidget->setFactories(INavigationWidgetFactory::allNavigationFactories());
m_rightNavigationWidget->setFactories(INavigationWidgetFactory::allNavigationFactories()); m_rightNavigationWidget->setFactories(INavigationWidgetFactory::allNavigationFactories());

View File

@@ -403,20 +403,20 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
Command *cmd; Command *cmd;
cmd = ActionManager::registerAction(m_clearAction, "Coreplugin.OutputPane.clear"); cmd = ActionManager::registerAction(m_clearAction, Constants::OUTPUTPANE_CLEAR);
m_clearButton->setDefaultAction(cmd->action()); m_clearButton->setDefaultAction(
m_clearButton->setIcon(Utils::Icons::CLEAN_TOOLBAR.icon()); ProxyAction::proxyActionWithIcon(m_clearAction, Utils::Icons::CLEAN_TOOLBAR.icon()));
mpanes->addAction(cmd, "Coreplugin.OutputPane.ActionsGroup"); mpanes->addAction(cmd, "Coreplugin.OutputPane.ActionsGroup");
cmd = ActionManager::registerAction(m_prevAction, "Coreplugin.OutputPane.previtem"); cmd = ActionManager::registerAction(m_prevAction, "Coreplugin.OutputPane.previtem");
cmd->setDefaultKeySequence(QKeySequence(tr("Shift+F6"))); cmd->setDefaultKeySequence(QKeySequence(tr("Shift+F6")));
m_prevToolButton->setDefaultAction( m_prevToolButton->setDefaultAction(
ProxyAction::proxyActionWithIcon(cmd->action(), Utils::Icons::PREV_TOOLBAR.icon())); ProxyAction::proxyActionWithIcon(m_prevAction, Utils::Icons::PREV_TOOLBAR.icon()));
mpanes->addAction(cmd, "Coreplugin.OutputPane.ActionsGroup"); mpanes->addAction(cmd, "Coreplugin.OutputPane.ActionsGroup");
cmd = ActionManager::registerAction(m_nextAction, "Coreplugin.OutputPane.nextitem"); cmd = ActionManager::registerAction(m_nextAction, "Coreplugin.OutputPane.nextitem");
m_nextToolButton->setDefaultAction( m_nextToolButton->setDefaultAction(
ProxyAction::proxyActionWithIcon(cmd->action(), Utils::Icons::NEXT_TOOLBAR.icon())); ProxyAction::proxyActionWithIcon(m_nextAction, Utils::Icons::NEXT_TOOLBAR.icon()));
cmd->setDefaultKeySequence(QKeySequence(tr("F6"))); cmd->setDefaultKeySequence(QKeySequence(tr("F6")));
mpanes->addAction(cmd, "Coreplugin.OutputPane.ActionsGroup"); mpanes->addAction(cmd, "Coreplugin.OutputPane.ActionsGroup");
@@ -429,8 +429,12 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
m_minMaxButton->setDefaultAction(cmd->action()); m_minMaxButton->setDefaultAction(cmd->action());
mpanes->addSeparator("Coreplugin.OutputPane.ActionsGroup"); mpanes->addSeparator("Coreplugin.OutputPane.ActionsGroup");
}
QFontMetrics titleFm = m_titleLabel->fontMetrics(); void OutputPaneManager::initialize()
{
ActionContainer *mpanes = ActionManager::actionContainer(Constants::M_VIEW_PANES);
QFontMetrics titleFm = m_instance->m_titleLabel->fontMetrics();
int minTitleWidth = 0; int minTitleWidth = 0;
Utils::sort(g_outputPanes, [](const OutputPaneData &d1, const OutputPaneData &d2) { Utils::sort(g_outputPanes, [](const OutputPaneData &d1, const OutputPaneData &d2) {
@@ -443,29 +447,30 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
for (int i = 0; i != n; ++i) { for (int i = 0; i != n; ++i) {
OutputPaneData &data = g_outputPanes[i]; OutputPaneData &data = g_outputPanes[i];
IOutputPane *outPane = data.pane; IOutputPane *outPane = data.pane;
const int idx = m_outputWidgetPane->addWidget(outPane->outputWidget(this)); const int idx = m_instance->m_outputWidgetPane->addWidget(outPane->outputWidget(m_instance));
QTC_CHECK(idx == i); QTC_CHECK(idx == i);
connect(outPane, &IOutputPane::showPage, this, [this, idx](int flags) { connect(outPane, &IOutputPane::showPage, m_instance, [idx](int flags) {
showPage(idx, flags); m_instance->showPage(idx, flags);
}); });
connect(outPane, &IOutputPane::hidePage, this, &OutputPaneManager::slotHide); connect(outPane, &IOutputPane::hidePage, m_instance, &OutputPaneManager::slotHide);
connect(outPane, &IOutputPane::togglePage, this, [this, idx](int flags) { connect(outPane, &IOutputPane::togglePage, m_instance, [idx](int flags) {
if (OutputPanePlaceHolder::isCurrentVisible() && currentIndex() == idx) if (OutputPanePlaceHolder::isCurrentVisible() && m_instance->currentIndex() == idx)
slotHide(); m_instance->slotHide();
else else
showPage(idx, flags); m_instance->showPage(idx, flags);
}); });
connect(outPane, &IOutputPane::navigateStateUpdate, this, [this, idx, outPane] { connect(outPane, &IOutputPane::navigateStateUpdate, m_instance, [idx, outPane] {
if (currentIndex() == idx) { if (m_instance->currentIndex() == idx) {
m_prevAction->setEnabled(outPane->canNavigate() && outPane->canPrevious()); m_instance->m_prevAction->setEnabled(outPane->canNavigate()
m_nextAction->setEnabled(outPane->canNavigate() && outPane->canNext()); && outPane->canPrevious());
m_instance->m_nextAction->setEnabled(outPane->canNavigate() && outPane->canNext());
} }
}); });
QWidget *toolButtonsContainer = new QWidget(m_opToolBarWidgets); QWidget *toolButtonsContainer = new QWidget(m_instance->m_opToolBarWidgets);
auto toolButtonsLayout = new QHBoxLayout; auto toolButtonsLayout = new QHBoxLayout;
toolButtonsLayout->setContentsMargins(0, 0, 0, 0); toolButtonsLayout->setContentsMargins(0, 0, 0, 0);
toolButtonsLayout->setSpacing(0); toolButtonsLayout->setSpacing(0);
@@ -474,48 +479,55 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
toolButtonsLayout->addStretch(5); toolButtonsLayout->addStretch(5);
toolButtonsContainer->setLayout(toolButtonsLayout); toolButtonsContainer->setLayout(toolButtonsLayout);
m_opToolBarWidgets->addWidget(toolButtonsContainer); m_instance->m_opToolBarWidgets->addWidget(toolButtonsContainer);
minTitleWidth = qMax(minTitleWidth, titleFm.horizontalAdvance(outPane->displayName())); minTitleWidth = qMax(minTitleWidth, titleFm.horizontalAdvance(outPane->displayName()));
QString suffix = outPane->displayName().simplified(); QString suffix = outPane->displayName().simplified();
suffix.remove(QLatin1Char(' ')); suffix.remove(QLatin1Char(' '));
data.id = baseId.withSuffix(suffix); data.id = baseId.withSuffix(suffix);
data.action = new QAction(outPane->displayName(), this); data.action = new QAction(outPane->displayName(), m_instance);
Command *cmd = ActionManager::registerAction(data.action, data.id); Command *cmd = ActionManager::registerAction(data.action, data.id);
mpanes->addAction(cmd, "Coreplugin.OutputPane.PanesGroup"); mpanes->addAction(cmd, "Coreplugin.OutputPane.PanesGroup");
cmd->setDefaultKeySequence(paneShortCut(shortcutNumber)); cmd->setDefaultKeySequence(paneShortCut(shortcutNumber));
auto button = new OutputPaneToggleButton(shortcutNumber, outPane->displayName(), auto button = new OutputPaneToggleButton(shortcutNumber,
outPane->displayName(),
cmd->action()); cmd->action());
data.button = button; data.button = button;
connect(outPane, &IOutputPane::flashButton, button, [button] { button->flash(); }); connect(outPane, &IOutputPane::flashButton, button, [button] { button->flash(); });
connect(outPane, &IOutputPane::setBadgeNumber, connect(outPane,
button, &OutputPaneToggleButton::setIconBadgeNumber); &IOutputPane::setBadgeNumber,
button,
&OutputPaneToggleButton::setIconBadgeNumber);
++shortcutNumber; ++shortcutNumber;
m_buttonsWidget->layout()->addWidget(data.button); m_instance->m_buttonsWidget->layout()->addWidget(data.button);
connect(data.button, &QAbstractButton::clicked, this, [this, i] { connect(data.button, &QAbstractButton::clicked, m_instance, [i] {
buttonTriggered(i); m_instance->buttonTriggered(i);
}); });
bool visible = outPane->priorityInStatusBar() != -1; bool visible = outPane->priorityInStatusBar() != -1;
data.button->setVisible(visible); data.button->setVisible(visible);
data.buttonVisible = visible; data.buttonVisible = visible;
connect(data.action, &QAction::triggered, this, [this, i] { connect(data.action, &QAction::triggered, m_instance, [i] {
shortcutTriggered(i); m_instance->shortcutTriggered(i);
}); });
} }
m_titleLabel->setMinimumWidth(minTitleWidth + m_titleLabel->contentsMargins().left() m_instance->m_titleLabel->setMinimumWidth(
+ m_titleLabel->contentsMargins().right()); minTitleWidth + m_instance->m_titleLabel->contentsMargins().left()
m_buttonsWidget->layout()->addWidget(m_manageButton); + m_instance->m_titleLabel->contentsMargins().right());
connect(m_manageButton, &QAbstractButton::clicked, this, &OutputPaneManager::popupMenu); m_instance->m_buttonsWidget->layout()->addWidget(m_instance->m_manageButton);
connect(m_instance->m_manageButton,
&QAbstractButton::clicked,
m_instance,
&OutputPaneManager::popupMenu);
readSettings(); m_instance->readSettings();
} }
OutputPaneManager::~OutputPaneManager() = default; OutputPaneManager::~OutputPaneManager() = default;

View File

@@ -70,6 +70,7 @@ private:
friend class OutputPaneManageButton; friend class OutputPaneManageButton;
static void create(); static void create();
static void initialize();
static void destroy(); static void destroy();
explicit OutputPaneManager(QWidget *parent = nullptr); explicit OutputPaneManager(QWidget *parent = nullptr);

View File

@@ -40,6 +40,7 @@
#include "targetsettingspanel.h" #include "targetsettingspanel.h"
#include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/commandbutton.h>
#include <coreplugin/coreconstants.h> #include <coreplugin/coreconstants.h>
#include <coreplugin/coreicons.h> #include <coreplugin/coreicons.h>
#include <coreplugin/icontext.h> #include <coreplugin/icontext.h>
@@ -54,6 +55,7 @@
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/styledbar.h> #include <utils/styledbar.h>
#include <utils/treemodel.h> #include <utils/treemodel.h>
#include <utils/utilsicons.h>
#include <QApplication> #include <QApplication>
#include <QComboBox> #include <QComboBox>
@@ -76,6 +78,50 @@ namespace Internal {
class MiscSettingsGroupItem; class MiscSettingsGroupItem;
const char kBuildSystemOutputContext[] = "ProjectsMode.BuildSystemOutput";
class BuildSystemOutputWindow : public OutputWindow
{
public:
BuildSystemOutputWindow();
QWidget *toolBar();
private:
QPointer<QWidget> m_toolBar;
QAction *m_clear;
};
BuildSystemOutputWindow::BuildSystemOutputWindow()
: OutputWindow(Context(kBuildSystemOutputContext), "ProjectsMode.BuildSystemOutput.Zoom")
, m_clear(new QAction)
{
Command *clearCommand = ActionManager::command(Core::Constants::OUTPUTPANE_CLEAR);
m_clear->setIcon(Utils::Icons::CLEAN_TOOLBAR.icon());
m_clear->setText(clearCommand->action()->text());
ActionManager::registerAction(m_clear,
Core::Constants::OUTPUTPANE_CLEAR,
Context(kBuildSystemOutputContext));
connect(m_clear, &QAction::triggered, this, [this] { clear(); });
}
QWidget *BuildSystemOutputWindow::toolBar()
{
if (!m_toolBar) {
m_toolBar = new StyledBar(this);
auto clearButton = new CommandButton(Core::Constants::OUTPUTPANE_CLEAR);
clearButton->setDefaultAction(m_clear);
clearButton->setToolTipBase(m_clear->text());
auto layout = new QHBoxLayout;
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);
m_toolBar->setLayout(layout);
layout->addWidget(clearButton);
layout->addStretch();
}
return m_toolBar;
}
// Standard third level for the generic case: i.e. all except for the Build/Run page // Standard third level for the generic case: i.e. all except for the Build/Run page
class MiscSettingsPanelItem : public TreeItem // TypedTreeItem<TreeItem, MiscSettingsGroupItem> class MiscSettingsPanelItem : public TreeItem // TypedTreeItem<TreeItem, MiscSettingsGroupItem>
{ {
@@ -474,8 +520,7 @@ public:
auto selectorDock = q->addDockForWidget(selectorView, true); auto selectorDock = q->addDockForWidget(selectorView, true);
q->addDockWidget(Qt::LeftDockWidgetArea, selectorDock); q->addDockWidget(Qt::LeftDockWidgetArea, selectorDock);
m_buildSystemOutput = new OutputWindow(Context("ProjectsMode.BuildSystemOutput"), m_buildSystemOutput = new BuildSystemOutputWindow;
"ProjectsMode.BuildSystemOutput.Zoom");
m_buildSystemOutput->setReadOnly(true); m_buildSystemOutput->setReadOnly(true);
auto output = new QWidget; auto output = new QWidget;
output->setObjectName("BuildSystemOutput"); output->setObjectName("BuildSystemOutput");
@@ -484,7 +529,7 @@ public:
output->setLayout(outputLayout); output->setLayout(outputLayout);
outputLayout->setContentsMargins(0, 0, 0, 0); outputLayout->setContentsMargins(0, 0, 0, 0);
outputLayout->setSpacing(0); outputLayout->setSpacing(0);
outputLayout->addWidget(new StyledBar(output)); outputLayout->addWidget(m_buildSystemOutput->toolBar());
outputLayout->addWidget(m_buildSystemOutput); outputLayout->addWidget(m_buildSystemOutput);
auto outputDock = q->addDockForWidget(output, true); auto outputDock = q->addDockForWidget(output, true);
q->addDockWidget(Qt::RightDockWidgetArea, outputDock); q->addDockWidget(Qt::RightDockWidgetArea, outputDock);
@@ -658,7 +703,7 @@ public:
SelectorTree *m_selectorTree; SelectorTree *m_selectorTree;
QPushButton *m_importBuild; QPushButton *m_importBuild;
QPushButton *m_manageKits; QPushButton *m_manageKits;
OutputWindow *m_buildSystemOutput; BuildSystemOutputWindow *m_buildSystemOutput;
}; };
// //