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 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";
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user