From d32cc4bd383fc5eb6749fda1222d6fe225f20643 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 9 Nov 2020 08:49:15 +0100 Subject: [PATCH] ProjectExplorer: Replace project mode main window splitter by dockwidget The main window of the project mode is already a QMainWindow, using a dock window also for the empty space on the right makes it consistent with the separation of the project tree on the left. Change-Id: Ida42f267b87eb45cd1692ebcc16ded2ee6c1e523 Reviewed-by: Eike Ziller Reviewed-by: Cristian Adam --- src/plugins/projectexplorer/panelswidget.cpp | 24 +++----------- src/plugins/projectexplorer/panelswidget.h | 6 ---- src/plugins/projectexplorer/projectwindow.cpp | 13 ++++++++ .../projectexplorer/targetsettingspanel.cpp | 33 ++++--------------- 4 files changed, 24 insertions(+), 52 deletions(-) diff --git a/src/plugins/projectexplorer/panelswidget.cpp b/src/plugins/projectexplorer/panelswidget.cpp index 1fd98512dc9..ef5ad7dce5c 100644 --- a/src/plugins/projectexplorer/panelswidget.cpp +++ b/src/plugins/projectexplorer/panelswidget.cpp @@ -25,12 +25,10 @@ #include "panelswidget.h" -#include - -#include -#include #include #include +#include +#include #include #include @@ -55,18 +53,14 @@ const int PANEL_LEFT_MARGIN = 70; // PanelsWidget /// -PanelsWidget::PanelsWidget(QWidget *parent) - : QWidget(parent), m_splitter(new Core::MiniSplitter(this)) +PanelsWidget::PanelsWidget(QWidget *parent) : QWidget(parent) { m_root = new QWidget(nullptr); m_root->setFocusPolicy(Qt::NoFocus); m_root->setContentsMargins(0, 0, 40, 0); - m_splitter->addWidget(m_root); - m_splitter->addWidget(new QWidget); - m_splitter->setStretchFactor(1, 100); // Force root widget to its minimum size initially const auto scroller = new QScrollArea(this); - scroller->setWidget(m_splitter); + scroller->setWidget(m_root); scroller->setFrameStyle(QFrame::NoFrame); scroller->setWidgetResizable(true); scroller->setFocusPolicy(Qt::NoFocus); @@ -153,14 +147,4 @@ void PanelsWidget::addPropertiesPanel(const QString &displayName, const QIcon &i m_layout->addWidget(widget, widgetRow, 0, 1, 2); } -QByteArray PanelsWidget::saveSplitterState() const -{ - return m_splitter->saveState().toHex(); -} - -void PanelsWidget::loadSplitterState(const QByteArray &state) -{ - m_splitter->restoreState(QByteArray::fromHex(state)); -} - } // ProjectExplorer diff --git a/src/plugins/projectexplorer/panelswidget.h b/src/plugins/projectexplorer/panelswidget.h index 35e57351f11..1be7723aaad 100644 --- a/src/plugins/projectexplorer/panelswidget.h +++ b/src/plugins/projectexplorer/panelswidget.h @@ -34,8 +34,6 @@ class QGridLayout; class QIcon; QT_END_NAMESPACE -namespace Core { class MiniSplitter; } - namespace ProjectExplorer { class PROJECTEXPLORER_EXPORT PanelsWidget : public QWidget @@ -51,12 +49,8 @@ public: void addPropertiesPanel(const QString &displayName, const QIcon &icon, QWidget *widget); - QByteArray saveSplitterState() const; - void loadSplitterState(const QByteArray &state); - private: QGridLayout *m_layout; - Core::MiniSplitter * const m_splitter; QWidget *m_root; }; diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp index 0b928b4e664..5d000c1108f 100644 --- a/src/plugins/projectexplorer/projectwindow.cpp +++ b/src/plugins/projectexplorer/projectwindow.cpp @@ -653,6 +653,19 @@ ProjectWindow::ProjectWindow() { setBackgroundRole(QPalette::Base); + // The empty space on the right side of the project mode window. + auto rightSpace = new QWidget; + rightSpace->setAutoFillBackground(true); + rightSpace->setObjectName("ProjectModeRightSpace"); // Needed for dock widget state saving + rightSpace->setWindowTitle("dummy"); + + auto rightSpaceLayout = new QVBoxLayout(rightSpace); + rightSpaceLayout->setContentsMargins(0, 0, 0, 0); + rightSpaceLayout->addWidget(new StyledBar(rightSpace)); // The black blob on top + rightSpaceLayout->addStretch(); + + addDockWidget(Qt::RightDockWidgetArea, addDockForWidget(rightSpace, true)); + // Request custom context menu but do not provide any to avoid // the creation of the dock window selection menu. setContextMenuPolicy(Qt::CustomContextMenu); diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp index dbd999ecf7b..7e0524d4170 100644 --- a/src/plugins/projectexplorer/targetsettingspanel.cpp +++ b/src/plugins/projectexplorer/targetsettingspanel.cpp @@ -612,32 +612,13 @@ public: QWidget *panel() const { if (!m_panel) { - QString splitterStateKey = "PanelSplitterState:" - + m_project->projectFilePath().toString() + ':'; - if (m_subIndex == RunPage) { - splitterStateKey += "Run"; - m_panel = new PanelsWidget(RunSettingsWidget::tr("Run Settings"), - QIcon(":/projectexplorer/images/RunSettings.png"), - new RunSettingsWidget(target())); - } else { - splitterStateKey += "Build"; - m_panel = new PanelsWidget(QCoreApplication::translate("BuildSettingsPanel", "Build Settings"), - QIcon(":/projectexplorer/images/BuildSettings.png"), - new BuildSettingsWidget(target())); - } - const auto panel = qobject_cast(m_panel.data()); - const auto loadSplitterValue = [panel, splitterStateKey] { - const QByteArray splitterState = SessionManager::value(splitterStateKey).toByteArray(); - if (!splitterState.isEmpty()) - panel->loadSplitterState(splitterState); - }; - loadSplitterValue(); - QObject::connect(SessionManager::instance(), &SessionManager::aboutToSaveSession, - panel, [panel, splitterStateKey] { - SessionManager::setValue(splitterStateKey, panel->saveSplitterState()); - }); - QObject::connect(SessionManager::instance(), &SessionManager::sessionLoaded, - panel, loadSplitterValue); + m_panel = (m_subIndex == RunPage) + ? new PanelsWidget(RunSettingsWidget::tr("Run Settings"), + QIcon(":/projectexplorer/images/RunSettings.png"), + new RunSettingsWidget(target())) + : new PanelsWidget(QCoreApplication::translate("BuildSettingsPanel", "Build Settings"), + QIcon(":/projectexplorer/images/BuildSettings.png"), + new BuildSettingsWidget(target())); } return m_panel; }