forked from qt-creator/qt-creator
ProjectExplorer: Make build and run widget width persistent
... by storing the splitter state in the session. Task-number: QTCREATORBUG-24690 Change-Id: Ifd27382cc61825f96de4fa5d4691b4f615448182 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -55,18 +55,18 @@ const int PANEL_LEFT_MARGIN = 70;
|
|||||||
// PanelsWidget
|
// PanelsWidget
|
||||||
///
|
///
|
||||||
|
|
||||||
PanelsWidget::PanelsWidget(QWidget *parent) : QWidget(parent)
|
PanelsWidget::PanelsWidget(QWidget *parent)
|
||||||
|
: QWidget(parent), m_splitter(new Core::MiniSplitter(this))
|
||||||
{
|
{
|
||||||
const auto splitter = new Core::MiniSplitter(this);
|
|
||||||
m_root = new QWidget(nullptr);
|
m_root = new QWidget(nullptr);
|
||||||
m_root->setFocusPolicy(Qt::NoFocus);
|
m_root->setFocusPolicy(Qt::NoFocus);
|
||||||
m_root->setContentsMargins(0, 0, 40, 0);
|
m_root->setContentsMargins(0, 0, 40, 0);
|
||||||
splitter->addWidget(m_root);
|
m_splitter->addWidget(m_root);
|
||||||
splitter->addWidget(new QWidget);
|
m_splitter->addWidget(new QWidget);
|
||||||
splitter->setStretchFactor(1, 100); // Force root widget to its minimum size initially
|
m_splitter->setStretchFactor(1, 100); // Force root widget to its minimum size initially
|
||||||
|
|
||||||
const auto scroller = new QScrollArea(this);
|
const auto scroller = new QScrollArea(this);
|
||||||
scroller->setWidget(splitter);
|
scroller->setWidget(m_splitter);
|
||||||
scroller->setFrameStyle(QFrame::NoFrame);
|
scroller->setFrameStyle(QFrame::NoFrame);
|
||||||
scroller->setWidgetResizable(true);
|
scroller->setWidgetResizable(true);
|
||||||
scroller->setFocusPolicy(Qt::NoFocus);
|
scroller->setFocusPolicy(Qt::NoFocus);
|
||||||
@@ -153,4 +153,14 @@ void PanelsWidget::addPropertiesPanel(const QString &displayName, const QIcon &i
|
|||||||
m_layout->addWidget(widget, widgetRow, 0, 1, 2);
|
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
|
} // ProjectExplorer
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ class QGridLayout;
|
|||||||
class QIcon;
|
class QIcon;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
namespace Core { class MiniSplitter; }
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
|
|
||||||
class PROJECTEXPLORER_EXPORT PanelsWidget : public QWidget
|
class PROJECTEXPLORER_EXPORT PanelsWidget : public QWidget
|
||||||
@@ -49,8 +51,12 @@ public:
|
|||||||
void addPropertiesPanel(const QString &displayName, const QIcon &icon,
|
void addPropertiesPanel(const QString &displayName, const QIcon &icon,
|
||||||
QWidget *widget);
|
QWidget *widget);
|
||||||
|
|
||||||
|
QByteArray saveSplitterState() const;
|
||||||
|
void loadSplitterState(const QByteArray &state);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QGridLayout *m_layout;
|
QGridLayout *m_layout;
|
||||||
|
Core::MiniSplitter * const m_splitter;
|
||||||
QWidget *m_root;
|
QWidget *m_root;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -613,14 +613,33 @@ public:
|
|||||||
QWidget *panel() const
|
QWidget *panel() const
|
||||||
{
|
{
|
||||||
if (!m_panel) {
|
if (!m_panel) {
|
||||||
m_panel = (m_subIndex == RunPage)
|
QString splitterStateKey = "PanelSplitterState:"
|
||||||
? new PanelsWidget(RunSettingsWidget::tr("Run Settings"),
|
+ m_project->projectFilePath().toString() + ':';
|
||||||
|
if (m_subIndex == RunPage) {
|
||||||
|
splitterStateKey += "Run";
|
||||||
|
m_panel = new PanelsWidget(RunSettingsWidget::tr("Run Settings"),
|
||||||
QIcon(":/projectexplorer/images/RunSettings.png"),
|
QIcon(":/projectexplorer/images/RunSettings.png"),
|
||||||
new RunSettingsWidget(target()))
|
new RunSettingsWidget(target()));
|
||||||
: new PanelsWidget(QCoreApplication::translate("BuildSettingsPanel", "Build Settings"),
|
} else {
|
||||||
|
splitterStateKey += "Build";
|
||||||
|
m_panel = new PanelsWidget(QCoreApplication::translate("BuildSettingsPanel", "Build Settings"),
|
||||||
QIcon(":/projectexplorer/images/BuildSettings.png"),
|
QIcon(":/projectexplorer/images/BuildSettings.png"),
|
||||||
new BuildSettingsWidget(target()));
|
new BuildSettingsWidget(target()));
|
||||||
}
|
}
|
||||||
|
const auto panel = qobject_cast<PanelsWidget *>(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);
|
||||||
|
}
|
||||||
return m_panel;
|
return m_panel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user