summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLincoln Ramsay <a1291762@gmail.com>2013-03-26 10:43:27 +1000
committerEike Ziller <eike.ziller@digia.com>2013-09-24 15:40:02 +0200
commit3c6ee449e647cbded43058c32c14818e185fb7c9 (patch)
tree4b83898d1749b4cb82663b348070abd954013bbc
parentf55cd6362257477900c1d3c428a712c995a46bbb (diff)
downloadqt-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.cpp19
-rw-r--r--src/plugins/coreplugin/outputpane.h1
-rw-r--r--src/plugins/coreplugin/outputpanemanager.cpp9
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()