forked from qt-creator/qt-creator
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:
@@ -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";
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -70,6 +70,7 @@ private:
|
||||
friend class OutputPaneManageButton;
|
||||
|
||||
static void create();
|
||||
static void initialize();
|
||||
static void destroy();
|
||||
|
||||
explicit OutputPaneManager(QWidget *parent = nullptr);
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user