Allow resizing of locator edit

Task-number: QTCREATORBUG-6719

Change-Id: I97a8972da3cb793324ca366bf4c977553e6bb38d
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
This commit is contained in:
Eike Ziller
2014-02-27 17:26:04 +01:00
parent e75cd440ed
commit c1b6571d71
6 changed files with 112 additions and 23 deletions

View File

@@ -36,8 +36,13 @@
#include <QHBoxLayout>
#include <QLabel>
#include <QResizeEvent>
#include <QSplitter>
#include <QStatusBar>
static const char kSettingsGroup[] = "StatusBar";
static const char kLeftSplitWidthKey[] = "LeftSplitWidth";
using namespace Core;
using namespace Core::Internal;
@@ -55,16 +60,31 @@ StatusBarManager::StatusBarManager(MainWindow *mainWnd)
m_mainWnd(mainWnd)
{
QStatusBar *bar = m_mainWnd->statusBar();
for (int i = 0; i <= StatusBarWidget::LastLeftAligned; ++i) {
QWidget *w = createWidget(bar);
bar->insertPermanentWidget(i, w);
m_statusBarWidgets.append(w);
}
m_mainWnd->statusBar()->insertPermanentWidget(StatusBarWidget::LastLeftAligned + 1,
new QLabel(), 1);
m_splitter = new NonResizingSplitter(bar);
bar->insertPermanentWidget(0, m_splitter, 10);
m_splitter->setChildrenCollapsible(false);
// first
QWidget *w = createWidget(m_splitter);
w->layout()->setContentsMargins(0, 0, 3, 0);
m_splitter->addWidget(w);
m_statusBarWidgets.append(w);
QWidget *w2 = createWidget(m_splitter);
w2->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
m_splitter->addWidget(w2);
// second
w = createWidget(w2);
w2->layout()->addWidget(w);
m_statusBarWidgets.append(w);
// third
w = createWidget(w2);
w2->layout()->addWidget(w);
m_statusBarWidgets.append(w);
static_cast<QBoxLayout *>(w2->layout())->addStretch(1);
QWidget *rightCornerWidget = createWidget(bar);
m_mainWnd->statusBar()->insertPermanentWidget(StatusBarWidget::LastLeftAligned + 2,
rightCornerWidget);
bar->insertPermanentWidget(1, rightCornerWidget);
m_statusBarWidgets.append(rightCornerWidget);
}
@@ -78,6 +98,7 @@ void StatusBarManager::init()
this, SLOT(objectAdded(QObject*)));
connect(ExtensionSystem::PluginManager::instance(), SIGNAL(aboutToRemoveObject(QObject*)),
this, SLOT(aboutToRemoveObject(QObject*)));
connect(ICore::instance(), SIGNAL(saveSettingsRequested()), this, SLOT(saveSettings()));
}
void StatusBarManager::objectAdded(QObject *obj)
@@ -101,6 +122,44 @@ void StatusBarManager::aboutToRemoveObject(QObject *obj)
m_mainWnd->removeContextObject(view);
}
void StatusBarManager::saveSettings()
{
QSettings *s = ICore::settings();
s->beginGroup(QLatin1String(kSettingsGroup));
s->setValue(QLatin1String(kLeftSplitWidthKey), m_splitter->sizes().at(0));
s->endGroup();
}
void StatusBarManager::extensionsInitalized()
{
}
void StatusBarManager::restoreSettings()
{
QSettings *s = ICore::settings();
s->beginGroup(QLatin1String(kSettingsGroup));
int leftSplitWidth = s->value(QLatin1String(kLeftSplitWidthKey), -1).toInt();
s->endGroup();
if (leftSplitWidth < 0) {
// size first split after its sizeHint + a bit of buffer
leftSplitWidth = m_splitter->widget(0)->sizeHint().width();
}
int sum = 0;
foreach (int w, m_splitter->sizes())
sum += w;
m_splitter->setSizes(QList<int>() << leftSplitWidth << (sum - leftSplitWidth));
}
NonResizingSplitter::NonResizingSplitter(QWidget *parent)
: MiniSplitter(parent, Light)
{
}
void NonResizingSplitter::resizeEvent(QResizeEvent *ev)
{
// bypass QSplitter magic
int leftSplitWidth = qMin(sizes().at(0), ev->size().width());
int rightSplitWidth = qMax(0, ev->size().width() - leftSplitWidth);
setSizes(QList<int>() << leftSplitWidth << rightSplitWidth);
return QWidget::resizeEvent(ev);
}