diff options
author | Lincoln Ramsay <a1291762@gmail.com> | 2013-03-26 10:43:27 +1000 |
---|---|---|
committer | Eike Ziller <eike.ziller@digia.com> | 2013-09-24 15:40:02 +0200 |
commit | 3c6ee449e647cbded43058c32c14818e185fb7c9 (patch) | |
tree | 4b83898d1749b4cb82663b348070abd954013bbc | |
parent | f55cd6362257477900c1d3c428a712c995a46bbb (diff) | |
download | qt-creator-3c6ee449e647cbded43058c32c14818e185fb7c9.tar.gz |
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 <david.schulz@digia.com>
-rw-r--r-- | src/plugins/coreplugin/outputpane.cpp | 19 | ||||
-rw-r--r-- | src/plugins/coreplugin/outputpane.h | 1 | ||||
-rw-r--r-- | 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<int> 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() |