Avoid setting large minimum size for output panes.

The search result pane set a minimum size for the "New Search"
panel which forced this relative big minimum size on all panels
and made it impossible to make the output pane area small.
Now, the new search is wrapped into a scroll area, doesn't
enforce a minimum size anymore, and, instead, when initiating
a new search (via shortcut or menu action) resizes the pane
so the panel fits nicely.

Change-Id: I9afe67e66f324111a10a97f33c203846231e6a93
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
Eike Ziller
2011-11-24 11:38:35 +01:00
parent 06f53a4e25
commit cc11186bad
6 changed files with 38 additions and 8 deletions

View File

@@ -78,15 +78,16 @@ public:
virtual void goToPrev() = 0;
public slots:
void popup() { popup(true); }
void popup(bool withFocus) { emit showPage(withFocus); }
void popup() { popup(true, false); }
void popup(bool withFocus) { popup(withFocus, false); }
void popup(bool withFocus, bool ensureSizeHint) { emit showPage(withFocus, ensureSizeHint); }
void hide() { emit hidePage(); }
void toggle() { toggle(true); }
void toggle(bool withFocusIfShown) { emit togglePage(withFocusIfShown); }
void navigateStateChanged() { emit navigateStateUpdate(); }
signals:
void showPage(bool withFocus);
void showPage(bool withFocus, bool ensureSizeHint);
void hidePage();
void togglePage(bool withFocusIfShown);
void navigateStateUpdate();

View File

@@ -143,6 +143,28 @@ bool OutputPanePlaceHolder::isMaximized() const
return Internal::OutputPaneManager::instance()->isMaximized();
}
void OutputPanePlaceHolder::ensureSizeHintAsMinimum()
{
if (!d->m_splitter)
return;
int idx = d->m_splitter->indexOf(this);
if (idx < 0)
return;
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);
if (difference <= 0) // is already larger
return;
for (int i = 0; i < sizes.count(); ++i) {
sizes[i] += difference / (sizes.count()-1);
}
sizes[idx] = minimum;
d->m_splitter->setSizes(sizes);
}
void OutputPanePlaceHolder::unmaximize()
{
if (Internal::OutputPaneManager::instance()->isMaximized())

View File

@@ -64,6 +64,7 @@ public:
void unmaximize();
bool isMaximized() const;
void ensureSizeHintAsMinimum();
private slots:
void currentModeChanged(Core::IMode *);

View File

@@ -254,7 +254,7 @@ void OutputPaneManager::init()
const int idx = m_outputWidgetPane->addWidget(outPane->outputWidget(this));
m_pageMap.insert(idx, outPane);
connect(outPane, SIGNAL(showPage(bool)), this, SLOT(showPage(bool)));
connect(outPane, SIGNAL(showPage(bool,bool)), this, SLOT(showPage(bool,bool)));
connect(outPane, SIGNAL(hidePage()), this, SLOT(slotHide()));
connect(outPane, SIGNAL(togglePage(bool)), this, SLOT(togglePage(bool)));
connect(outPane, SIGNAL(navigateStateUpdate()), this, SLOT(updateNavigateState()));
@@ -431,10 +431,12 @@ void OutputPaneManager::updateNavigateState()
}
// Slot connected to showPage signal of each page
void OutputPaneManager::showPage(bool focus)
void OutputPaneManager::showPage(bool focus, bool ensureSizeHint)
{
int idx = findIndexForPage(qobject_cast<IOutputPane*>(sender()));
showPage(idx, focus);
if (ensureSizeHint && OutputPanePlaceHolder::getCurrent())
OutputPanePlaceHolder::getCurrent()->ensureSizeHintAsMinimum();
}
void OutputPaneManager::showPage(int idx, bool focus)

View File

@@ -78,7 +78,7 @@ protected:
private slots:
void changePage();
void showPage(bool focus);
void showPage(bool focus, bool ensureSizeHint);
void togglePage(bool focus);
void clearPage();
void buttonTriggered();