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 SHOWINGRAPHICALSHELL[] = "QtCreator.ShowInGraphicalShell";
const char OUTPUTPANE_CLEAR[] = "Coreplugin.OutputPane.clear";
// Default groups
const char G_DEFAULT_ONE[] = "QtCreator.Group.Default.One";
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
MessageManager::init();
OutputPaneManager::create();
}
void MainWindow::extensionsInitialized()
@@ -307,7 +308,7 @@ void MainWindow::extensionsInitialized()
MimeTypeSettings::restoreSettings();
m_windowSupport = new WindowSupport(this, Context("Core.MainWindow"));
m_windowSupport->setCloseActionEnabled(false);
OutputPaneManager::create();
OutputPaneManager::initialize();
VcsManager::extensionsInitialized();
m_leftNavigationWidget->setFactories(INavigationWidgetFactory::allNavigationFactories());
m_rightNavigationWidget->setFactories(INavigationWidgetFactory::allNavigationFactories());

View File

@@ -403,20 +403,20 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
Command *cmd;
cmd = ActionManager::registerAction(m_clearAction, "Coreplugin.OutputPane.clear");
m_clearButton->setDefaultAction(cmd->action());
m_clearButton->setIcon(Utils::Icons::CLEAN_TOOLBAR.icon());
cmd = ActionManager::registerAction(m_clearAction, Constants::OUTPUTPANE_CLEAR);
m_clearButton->setDefaultAction(
ProxyAction::proxyActionWithIcon(m_clearAction, Utils::Icons::CLEAN_TOOLBAR.icon()));
mpanes->addAction(cmd, "Coreplugin.OutputPane.ActionsGroup");
cmd = ActionManager::registerAction(m_prevAction, "Coreplugin.OutputPane.previtem");
cmd->setDefaultKeySequence(QKeySequence(tr("Shift+F6")));
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");
cmd = ActionManager::registerAction(m_nextAction, "Coreplugin.OutputPane.nextitem");
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")));
mpanes->addAction(cmd, "Coreplugin.OutputPane.ActionsGroup");
@@ -429,8 +429,12 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
m_minMaxButton->setDefaultAction(cmd->action());
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;
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) {
OutputPaneData &data = g_outputPanes[i];
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);
connect(outPane, &IOutputPane::showPage, this, [this, idx](int flags) {
showPage(idx, flags);
connect(outPane, &IOutputPane::showPage, m_instance, [idx](int 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) {
if (OutputPanePlaceHolder::isCurrentVisible() && currentIndex() == idx)
slotHide();
connect(outPane, &IOutputPane::togglePage, m_instance, [idx](int flags) {
if (OutputPanePlaceHolder::isCurrentVisible() && m_instance->currentIndex() == idx)
m_instance->slotHide();
else
showPage(idx, flags);
m_instance->showPage(idx, flags);
});
connect(outPane, &IOutputPane::navigateStateUpdate, this, [this, idx, outPane] {
if (currentIndex() == idx) {
m_prevAction->setEnabled(outPane->canNavigate() && outPane->canPrevious());
m_nextAction->setEnabled(outPane->canNavigate() && outPane->canNext());
connect(outPane, &IOutputPane::navigateStateUpdate, m_instance, [idx, outPane] {
if (m_instance->currentIndex() == idx) {
m_instance->m_prevAction->setEnabled(outPane->canNavigate()
&& 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;
toolButtonsLayout->setContentsMargins(0, 0, 0, 0);
toolButtonsLayout->setSpacing(0);
@@ -474,48 +479,55 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
toolButtonsLayout->addStretch(5);
toolButtonsContainer->setLayout(toolButtonsLayout);
m_opToolBarWidgets->addWidget(toolButtonsContainer);
m_instance->m_opToolBarWidgets->addWidget(toolButtonsContainer);
minTitleWidth = qMax(minTitleWidth, titleFm.horizontalAdvance(outPane->displayName()));
QString suffix = outPane->displayName().simplified();
suffix.remove(QLatin1Char(' '));
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);
mpanes->addAction(cmd, "Coreplugin.OutputPane.PanesGroup");
cmd->setDefaultKeySequence(paneShortCut(shortcutNumber));
auto button = new OutputPaneToggleButton(shortcutNumber, outPane->displayName(),
auto button = new OutputPaneToggleButton(shortcutNumber,
outPane->displayName(),
cmd->action());
data.button = button;
connect(outPane, &IOutputPane::flashButton, button, [button] { button->flash(); });
connect(outPane, &IOutputPane::setBadgeNumber,
button, &OutputPaneToggleButton::setIconBadgeNumber);
connect(outPane,
&IOutputPane::setBadgeNumber,
button,
&OutputPaneToggleButton::setIconBadgeNumber);
++shortcutNumber;
m_buttonsWidget->layout()->addWidget(data.button);
connect(data.button, &QAbstractButton::clicked, this, [this, i] {
buttonTriggered(i);
m_instance->m_buttonsWidget->layout()->addWidget(data.button);
connect(data.button, &QAbstractButton::clicked, m_instance, [i] {
m_instance->buttonTriggered(i);
});
bool visible = outPane->priorityInStatusBar() != -1;
data.button->setVisible(visible);
data.buttonVisible = visible;
connect(data.action, &QAction::triggered, this, [this, i] {
shortcutTriggered(i);
connect(data.action, &QAction::triggered, m_instance, [i] {
m_instance->shortcutTriggered(i);
});
}
m_titleLabel->setMinimumWidth(minTitleWidth + m_titleLabel->contentsMargins().left()
+ m_titleLabel->contentsMargins().right());
m_buttonsWidget->layout()->addWidget(m_manageButton);
connect(m_manageButton, &QAbstractButton::clicked, this, &OutputPaneManager::popupMenu);
m_instance->m_titleLabel->setMinimumWidth(
minTitleWidth + m_instance->m_titleLabel->contentsMargins().left()
+ m_instance->m_titleLabel->contentsMargins().right());
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;

View File

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

View File

@@ -40,6 +40,7 @@
#include "targetsettingspanel.h"
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/commandbutton.h>
#include <coreplugin/coreconstants.h>
#include <coreplugin/coreicons.h>
#include <coreplugin/icontext.h>
@@ -54,6 +55,7 @@
#include <utils/qtcassert.h>
#include <utils/styledbar.h>
#include <utils/treemodel.h>
#include <utils/utilsicons.h>
#include <QApplication>
#include <QComboBox>
@@ -76,6 +78,50 @@ namespace Internal {
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
class MiscSettingsPanelItem : public TreeItem // TypedTreeItem<TreeItem, MiscSettingsGroupItem>
{
@@ -474,8 +520,7 @@ public:
auto selectorDock = q->addDockForWidget(selectorView, true);
q->addDockWidget(Qt::LeftDockWidgetArea, selectorDock);
m_buildSystemOutput = new OutputWindow(Context("ProjectsMode.BuildSystemOutput"),
"ProjectsMode.BuildSystemOutput.Zoom");
m_buildSystemOutput = new BuildSystemOutputWindow;
m_buildSystemOutput->setReadOnly(true);
auto output = new QWidget;
output->setObjectName("BuildSystemOutput");
@@ -484,7 +529,7 @@ public:
output->setLayout(outputLayout);
outputLayout->setContentsMargins(0, 0, 0, 0);
outputLayout->setSpacing(0);
outputLayout->addWidget(new StyledBar(output));
outputLayout->addWidget(m_buildSystemOutput->toolBar());
outputLayout->addWidget(m_buildSystemOutput);
auto outputDock = q->addDockForWidget(output, true);
q->addDockWidget(Qt::RightDockWidgetArea, outputDock);
@@ -658,7 +703,7 @@ public:
SelectorTree *m_selectorTree;
QPushButton *m_importBuild;
QPushButton *m_manageKits;
OutputWindow *m_buildSystemOutput;
BuildSystemOutputWindow *m_buildSystemOutput;
};
//