forked from qt-creator/qt-creator
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:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user