From d58184173e84e9e1d22fbf227ce1bb24ae88271d Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig <jbache@trolltech.com> Date: Tue, 16 Mar 2010 16:55:56 +0100 Subject: [PATCH] Clean up layouts and use minisplitter everywhere This patch replaces all uses of QSplitter with thin 1-pixel splitters. I also fixed dock widget layouts in main windows to do the same. Additionally I had to tweak the tabbars so they look good in mini splitter layouts to avoid a double left-border. Reviewed-by: thorbjorn --- src/libs/extensionsystem/mainwindow.ui | 0 src/libs/utils/fancymainwindow.cpp | 2 +- src/plugins/coreplugin/manhattanstyle.cpp | 30 +++++++++++++++++-- src/plugins/debugger/breakwindow.cpp | 1 + src/plugins/debugger/debuggermanager.cpp | 3 +- src/plugins/debugger/debuggeroutputwindow.cpp | 4 ++- src/plugins/debugger/snapshotwindow.cpp | 1 + src/plugins/debugger/sourcefileswindow.cpp | 1 + src/plugins/debugger/stackwindow.cpp | 1 + src/plugins/debugger/threadswindow.cpp | 1 + src/plugins/debugger/watchwindow.cpp | 1 + src/plugins/designer/editorwidget.cpp | 8 +++++ src/plugins/designer/formeditorstack.cpp | 5 ++++ 13 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 src/libs/extensionsystem/mainwindow.ui diff --git a/src/libs/extensionsystem/mainwindow.ui b/src/libs/extensionsystem/mainwindow.ui new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/libs/utils/fancymainwindow.cpp b/src/libs/utils/fancymainwindow.cpp index bbb703f8f7a..6428e20bcd4 100644 --- a/src/libs/utils/fancymainwindow.cpp +++ b/src/libs/utils/fancymainwindow.cpp @@ -33,7 +33,6 @@ #include <QtGui/QDockWidget> #include <QtCore/QSettings> - using namespace Utils; FancyMainWindow::FancyMainWindow(QWidget *parent) @@ -41,6 +40,7 @@ FancyMainWindow::FancyMainWindow(QWidget *parent) m_locked(true), m_handleDockVisibilityChanges(true) { + setProperty("panelwidget", true); } QDockWidget *FancyMainWindow::addDockForWidget(QWidget *widget) diff --git a/src/plugins/coreplugin/manhattanstyle.cpp b/src/plugins/coreplugin/manhattanstyle.cpp index 924b290c763..10415187592 100644 --- a/src/plugins/coreplugin/manhattanstyle.cpp +++ b/src/plugins/coreplugin/manhattanstyle.cpp @@ -55,6 +55,7 @@ #include <QtGui/QStyleFactory> #include <QtGui/QStyleOption> #include <QtGui/QToolBar> +#include <QtGui/QTreeView> #include <QtGui/QToolButton> #include <QtGui/QAbstractItemView> @@ -88,10 +89,9 @@ bool panelWidget(const QWidget *widget) while (p) { if (qobject_cast<const QToolBar *>(p) || qobject_cast<const QStatusBar *>(p) || - qobject_cast<const QMenuBar *>(p)) + qobject_cast<const QMenuBar *>(p) || + p->property("panelwidget").toBool()) return styleEnabled(widget); - if (p->property("panelwidget").toBool()) - return true; p = p->parentWidget(); } return false; @@ -197,6 +197,8 @@ int ManhattanStyle::pixelMetric(PixelMetric metric, const QStyleOption *option, if (panelWidget(widget)) retval = 16; break; + case PM_DockWidgetSeparatorExtent: + return 1; case PM_MenuPanelWidth: case PM_MenuBarHMargin: case PM_MenuBarVMargin: @@ -260,6 +262,7 @@ void ManhattanStyle::polish(QWidget *widget) if (qobject_cast<QToolBar*>(widget)) widget->removeEventFilter(baseStyle()); } + if (panelWidget(widget)) { widget->setAttribute(Qt::WA_LayoutUsesWidgetRect, true); if (qobject_cast<QToolButton*>(widget)) { @@ -594,6 +597,27 @@ void ManhattanStyle::drawControl(ControlElement element, const QStyleOption *opt return QProxyStyle::drawControl(element, option, painter, widget); switch (element) { + case CE_Splitter: + painter->fillRect(option->rect, Utils::StyleHelper::borderColor()); + break; + + case CE_TabBarTabShape: + // Most styles draw a single dark outline. This looks rather ugly when combined with our + // single pixel dark separator so we adjust the first tab to compensate for this + + if (const QStyleOptionTabV3 *tab = qstyleoption_cast<const QStyleOptionTabV3 *>(option)) { + QStyleOptionTabV3 adjustedTab = *tab; + if (tab->position == QStyleOptionTab::Beginning) { + if (option->direction == Qt::LeftToRight) + adjustedTab.rect = adjustedTab.rect.adjusted(-1, 0, 0, 0); + else + adjustedTab.rect = adjustedTab.rect.adjusted(0, 0, 1 ,0); + } + QProxyStyle::drawControl(element, &adjustedTab, painter, widget); + return; + } + break; + case CE_MenuBarItem: painter->save(); if (const QStyleOptionMenuItem *mbi = qstyleoption_cast<const QStyleOptionMenuItem *>(option)) { diff --git a/src/plugins/debugger/breakwindow.cpp b/src/plugins/debugger/breakwindow.cpp index 6cd9b4841d6..953d1cea250 100644 --- a/src/plugins/debugger/breakwindow.cpp +++ b/src/plugins/debugger/breakwindow.cpp @@ -83,6 +83,7 @@ BreakWindow::BreakWindow(Debugger::DebuggerManager *manager) : m_manager(manager), m_alwaysResizeColumnsToContents(false) { QAction *act = theDebuggerAction(UseAlternatingRowColors); + setFrameStyle(QFrame::NoFrame); setWindowTitle(tr("Breakpoints")); setWindowIcon(QIcon(":/debugger/images/debugger_breakpoints.png")); setAlternatingRowColors(act->isChecked()); diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp index 9c0e217e14e..70c02b886ff 100644 --- a/src/plugins/debugger/debuggermanager.cpp +++ b/src/plugins/debugger/debuggermanager.cpp @@ -64,6 +64,7 @@ #endif #include <coreplugin/icore.h> +#include <coreplugin/minisplitter.h> #include <coreplugin/editormanager/editormanager.h> #include <utils/qtcassert.h> #include <projectexplorer/toolchain.h> @@ -585,7 +586,7 @@ void DebuggerManager::init() d->m_threadsDock = uiSwitcher->createDockWidget(LANG_CPP, d->m_threadsWindow); - QSplitter *localsAndWatchers = new QSplitter(Qt::Vertical); + QSplitter *localsAndWatchers = new Core::MiniSplitter(Qt::Vertical); localsAndWatchers->setWindowTitle(d->m_localsWindow->windowTitle()); localsAndWatchers->addWidget(d->m_localsWindow); localsAndWatchers->addWidget(d->m_watchersWindow); diff --git a/src/plugins/debugger/debuggeroutputwindow.cpp b/src/plugins/debugger/debuggeroutputwindow.cpp index 45e535c2299..0c39f9a1531 100644 --- a/src/plugins/debugger/debuggeroutputwindow.cpp +++ b/src/plugins/debugger/debuggeroutputwindow.cpp @@ -47,6 +47,7 @@ #include <aggregation/aggregate.h> #include <coreplugin/findplaceholder.h> +#include <coreplugin/minisplitter.h> #include <find/basetextfind.h> using namespace Debugger; @@ -329,7 +330,8 @@ DebuggerOutputWindow::DebuggerOutputWindow(QWidget *parent) { setWindowTitle(tr("Debugger")); - QSplitter *m_splitter = new QSplitter(Qt::Horizontal, this); + QSplitter *m_splitter = new Core::MiniSplitter(Qt::Horizontal); + m_splitter->setParent(this); // mixed input/output m_combinedText = new CombinedPane(this); m_combinedText->setReadOnly(true); diff --git a/src/plugins/debugger/snapshotwindow.cpp b/src/plugins/debugger/snapshotwindow.cpp index 15ecd0b22e5..ab11f0fbfbe 100644 --- a/src/plugins/debugger/snapshotwindow.cpp +++ b/src/plugins/debugger/snapshotwindow.cpp @@ -74,6 +74,7 @@ SnapshotWindow::SnapshotWindow(DebuggerManager *manager, QWidget *parent) QAction *act = theDebuggerAction(UseAlternatingRowColors); setWindowTitle(tr("Snapshots")); + setFrameStyle(QFrame::NoFrame); setAlternatingRowColors(act->isChecked()); setRootIsDecorated(false); setIconSize(QSize(10, 10)); diff --git a/src/plugins/debugger/sourcefileswindow.cpp b/src/plugins/debugger/sourcefileswindow.cpp index 37ac5f75aa3..5d321fc81c1 100644 --- a/src/plugins/debugger/sourcefileswindow.cpp +++ b/src/plugins/debugger/sourcefileswindow.cpp @@ -169,6 +169,7 @@ SourceFilesWindow::SourceFilesWindow(QWidget *parent) proxyModel->setSourceModel(m_model); setModel(proxyModel); + setFrameStyle(QFrame::NoFrame); setWindowTitle(tr("Source Files")); setSortingEnabled(true); setAlternatingRowColors(act->isChecked()); diff --git a/src/plugins/debugger/stackwindow.cpp b/src/plugins/debugger/stackwindow.cpp index a0029b79a70..c5e3637801b 100644 --- a/src/plugins/debugger/stackwindow.cpp +++ b/src/plugins/debugger/stackwindow.cpp @@ -54,6 +54,7 @@ namespace Internal { StackWindow::StackWindow(DebuggerManager *manager, QWidget *parent) : QTreeView(parent), m_manager(manager), m_alwaysResizeColumnsToContents(false) { + setFrameStyle(QFrame::NoFrame); m_disassemblerAgent = new DisassemblerViewAgent(manager); QAction *act = theDebuggerAction(UseAlternatingRowColors); diff --git a/src/plugins/debugger/threadswindow.cpp b/src/plugins/debugger/threadswindow.cpp index 472cba0e4a0..951a0eb0385 100644 --- a/src/plugins/debugger/threadswindow.cpp +++ b/src/plugins/debugger/threadswindow.cpp @@ -43,6 +43,7 @@ ThreadsWindow::ThreadsWindow(QWidget *parent) { QAction *act = theDebuggerAction(UseAlternatingRowColors); + setFrameStyle(QFrame::NoFrame); setWindowTitle(tr("Thread")); setAlternatingRowColors(act->isChecked()); setRootIsDecorated(false); diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp index 7d076e26594..77c9f2bd9bb 100644 --- a/src/plugins/debugger/watchwindow.cpp +++ b/src/plugins/debugger/watchwindow.cpp @@ -125,6 +125,7 @@ WatchWindow::WatchWindow(Type type, DebuggerManager *manager, QWidget *parent) m_grabbing = false; QAction *act = theDebuggerAction(UseAlternatingRowColors); + setFrameStyle(QFrame::NoFrame); setWindowTitle(tr("Locals and Watchers")); setAlternatingRowColors(act->isChecked()); setIndentation(indentation() * 9/10); diff --git a/src/plugins/designer/editorwidget.cpp b/src/plugins/designer/editorwidget.cpp index cd6796e1e67..d35cd0e05b4 100644 --- a/src/plugins/designer/editorwidget.cpp +++ b/src/plugins/designer/editorwidget.cpp @@ -35,6 +35,7 @@ #include <QtGui/QVBoxLayout> #include <QtGui/QDockWidget> +#include <QtGui/QAbstractItemView> using namespace Designer::Constants; @@ -59,6 +60,13 @@ EditorWidget::EditorWidget(FormEditorW *few, QWidget *parent) : QWidget *subWindow = subs[i]; subWindow->setWindowTitle(subs[i]->windowTitle()); m_designerDockWidgets[i] = addDockForWidget(subWindow); + + // Since we have 1-pixel splitters, we generally want to remove + // frames around item views. So we apply this hack for now. + QList<QAbstractItemView*> frames = subWindow->findChildren<QAbstractItemView*>(); + for (int i = 0 ; i< frames.count(); ++i) + frames[i]->setFrameStyle(QFrame::NoFrame); + } resetToDefaultLayout(); } diff --git a/src/plugins/designer/formeditorstack.cpp b/src/plugins/designer/formeditorstack.cpp index a21a81595cc..af1f3813c15 100644 --- a/src/plugins/designer/formeditorstack.cpp +++ b/src/plugins/designer/formeditorstack.cpp @@ -80,6 +80,11 @@ void FormEditorStack::add(const EditorData &data) if (Designer::Constants::Internal::debug) qDebug() << "FormEditorStack::add" << data.widgetHost; + + // Since we have 1 pixel splitters we enforce no frame + // on the content widget + if (QFrame *frame = qobject_cast<QFrame*>(data.widgetHost)) + frame->setFrameStyle(QFrame::NoFrame); } int FormEditorStack::indexOf(const QDesignerFormWindowInterface *fw) const -- GitLab