From 3c6ee449e647cbded43058c32c14818e185fb7c9 Mon Sep 17 00:00:00 2001 From: Lincoln Ramsay Date: Tue, 26 Mar 2013 10:43:27 +1000 Subject: Track the size of the output pane and restore it. This way the output pane maintains a consistent height even across application restarts. Task-number: QTCREATORBUG-8877 Change-Id: I2249d8c59b10f623f04fe9c5b6cc3fd3bbdf2d82 Reviewed-by: David Schulz --- src/plugins/coreplugin/outputpane.cpp | 19 +++++++++++++------ src/plugins/coreplugin/outputpane.h | 1 + src/plugins/coreplugin/outputpanemanager.cpp | 9 +++++++++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/plugins/coreplugin/outputpane.cpp b/src/plugins/coreplugin/outputpane.cpp index e82d1b255a..0002229bf1 100644 --- a/src/plugins/coreplugin/outputpane.cpp +++ b/src/plugins/coreplugin/outputpane.cpp @@ -136,8 +136,10 @@ bool OutputPanePlaceHolder::isMaximized() const return Internal::OutputPaneManager::instance()->isMaximized(); } -void OutputPanePlaceHolder::ensureSizeHintAsMinimum() +void OutputPanePlaceHolder::setDefaultHeight(int height) { + if (height == 0) + return; if (!d->m_splitter) return; int idx = d->m_splitter->indexOf(this); @@ -146,19 +148,24 @@ void OutputPanePlaceHolder::ensureSizeHintAsMinimum() d->m_splitter->refresh(); QList sizes = d->m_splitter->sizes(); - Internal::OutputPaneManager *om = Internal::OutputPaneManager::instance(); - int minimum = (d->m_splitter->orientation() == Qt::Vertical - ? om->sizeHint().height() : om->sizeHint().width()); - int difference = minimum - sizes.at(idx); + int difference = height - sizes.at(idx); if (difference <= 0) // is already larger return; for (int i = 0; i < sizes.count(); ++i) { sizes[i] += difference / (sizes.count()-1); } - sizes[idx] = minimum; + sizes[idx] = height; d->m_splitter->setSizes(sizes); } +void OutputPanePlaceHolder::ensureSizeHintAsMinimum() +{ + Internal::OutputPaneManager *om = Internal::OutputPaneManager::instance(); + int minimum = (d->m_splitter->orientation() == Qt::Vertical + ? om->sizeHint().height() : om->sizeHint().width()); + setDefaultHeight(minimum); +} + void OutputPanePlaceHolder::unmaximize() { if (Internal::OutputPaneManager::instance()->isMaximized()) diff --git a/src/plugins/coreplugin/outputpane.h b/src/plugins/coreplugin/outputpane.h index f908e626d2..ddeef9435e 100644 --- a/src/plugins/coreplugin/outputpane.h +++ b/src/plugins/coreplugin/outputpane.h @@ -61,6 +61,7 @@ public: void unmaximize(); bool isMaximized() const; + void setDefaultHeight(int height); void ensureSizeHintAsMinimum(); private slots: diff --git a/src/plugins/coreplugin/outputpanemanager.cpp b/src/plugins/coreplugin/outputpanemanager.cpp index 2d3a647825..a34149c0c4 100644 --- a/src/plugins/coreplugin/outputpanemanager.cpp +++ b/src/plugins/coreplugin/outputpanemanager.cpp @@ -473,6 +473,8 @@ void OutputPaneManager::showPage(int idx, int flags) } if (ph) { + QSettings *settings = ICore::settings(); + int height = settings->value(QLatin1String("OutputPanePlaceHolder/Height"), 0).toInt(); // make the page visible ph->setVisible(true); ensurePageVisible(idx); @@ -483,6 +485,7 @@ void OutputPaneManager::showPage(int idx, int flags) ICore::raiseWindow(m_outputWidgetPane); } + ph->setDefaultHeight(height); if (flags & IOutputPane::EnsureSizeHint) ph->ensureSizeHintAsMinimum(); } else { @@ -569,6 +572,12 @@ void OutputPaneManager::saveSettings() const settings->setValue(QLatin1String(outputPaneVisibleKeyC), m_buttons.at(i)->isVisible()); } settings->endArray(); + OutputPanePlaceHolder *ph = OutputPanePlaceHolder::getCurrent(); + if (ph) { + int height = ph->height(); + if (height) + settings->setValue(QLatin1String("OutputPanePlaceHolder/Height"), height); + } } void OutputPaneManager::clearPage() -- cgit v1.2.1