This patch makes both MainWindow splitters to move the same when one of them is moved by the user.
In order to access QSplitter protected member, I had to subclass QSplitter into new class. I know this practice is not preferred, but should work for this scenario just fine. Maybe(in some future) I will create QGridSplitter widget, but until then, this is the best solution. br, Boris..
From ff39a8d351f6cb9001b7ff3db127986d5132abd7 Mon Sep 17 00:00:00 2001 From: Boris Barbulovski <[email protected]> Date: Tue, 11 Feb 2014 15:54:46 +0100 Subject: [PATCH] MainWindow "tied splitterMoved" feature. Force both(upper and lower) widget splitters to move if ether one of them recieve splitterMoved event. Signed-off-by: Boris Barbulovski <[email protected]> --- qt-ui/mainwindow.cpp | 17 ++++++++++++++++- qt-ui/mainwindow.h | 2 ++ qt-ui/mainwindow.ui | 10 ++++++++-- qt-ui/qsplitterex.cpp | 11 +++++++++++ qt-ui/qsplitterex.h | 18 ++++++++++++++++++ subsurface.pro | 6 ++++-- 6 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 qt-ui/qsplitterex.cpp create mode 100644 qt-ui/qsplitterex.h diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index df6e131..9ceaeda 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -47,7 +47,8 @@ MainWindow::MainWindow() : QMainWindow(), actionNextDive(0), actionPreviousDive(0), helpView(0), - state(VIEWALL) + state(VIEWALL), + isSplitterUpdating(false) { instance = this; ui.setupUi(this); @@ -378,6 +379,20 @@ void MainWindow::on_mainSplitter_splitterMoved(int pos, int idx) void MainWindow::on_infoProfileSplitter_splitterMoved(int pos, int idx) { redrawProfile(); + if (!isSplitterUpdating) { + isSplitterUpdating = true; + ui.listGlobeSplitter->moveSplitterEx(pos, idx); + isSplitterUpdating = false; + } +} + +void MainWindow::on_listGlobeSplitter_splitterMoved(int pos, int idx) +{ + if (!isSplitterUpdating) { + isSplitterUpdating = true; + ui.infoProfileSplitter->moveSplitterEx(pos, idx); + isSplitterUpdating = false; + } } /** diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h index 2d91745..f552071 100644 --- a/qt-ui/mainwindow.h +++ b/qt-ui/mainwindow.h @@ -99,6 +99,7 @@ private slots: /* monitor resize of the info-profile splitter */ void on_mainSplitter_splitterMoved(int pos, int idx); void on_infoProfileSplitter_splitterMoved(int pos, int idx); + void on_listGlobeSplitter_splitterMoved(int pos, int idx); void current_dive_changed(int divenr); void initialUiSetup(); @@ -134,6 +135,7 @@ private: QAction *actionPreviousDive; UserManual *helpView; CurrentState state; + bool isSplitterUpdating; QString filter(); bool askSaveChanges(); void writeSettings(); diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui index c04fc20..1416fe9 100644 --- a/qt-ui/mainwindow.ui +++ b/qt-ui/mainwindow.ui @@ -32,7 +32,7 @@ <property name="orientation"> <enum>Qt::Vertical</enum> </property> - <widget class="QSplitter" name="infoProfileSplitter"> + <widget class="QSplitterEx" name="infoProfileSplitter"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> @@ -546,7 +546,7 @@ </widget> </widget> </widget> - <widget class="QSplitter" name="listGlobeSplitter"> + <widget class="QSplitterEx" name="listGlobeSplitter"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> @@ -983,6 +983,12 @@ <extends>QGraphicsView</extends> <header>qt-ui/profile/profilewidget2.h</header> </customwidget> + <customwidget> + <class>QSplitterEx</class> + <extends>QSplitter</extends> + <header>qt-ui/qsplitterex.h</header> + <container>1</container> + </customwidget> </customwidgets> <resources> <include location="../subsurface.qrc"/> diff --git a/qt-ui/qsplitterex.cpp b/qt-ui/qsplitterex.cpp new file mode 100644 index 0000000..887eb7e --- /dev/null +++ b/qt-ui/qsplitterex.cpp @@ -0,0 +1,11 @@ +#include "qsplitterex.h" + +QSplitterEx::QSplitterEx(QWidget *parent) : + QSplitter(parent) +{ +} + +void QSplitterEx::moveSplitterEx(int pos, int index) +{ + moveSplitter(pos, index); +} diff --git a/qt-ui/qsplitterex.h b/qt-ui/qsplitterex.h new file mode 100644 index 0000000..f59f0ba --- /dev/null +++ b/qt-ui/qsplitterex.h @@ -0,0 +1,18 @@ +#ifndef QSPLITTEREX_H +#define QSPLITTEREX_H + +#include <QSplitter> + +class QSplitterEx : public QSplitter +{ + Q_OBJECT +public: + explicit QSplitterEx(QWidget *parent = 0); + void moveSplitterEx(int pos, int index); +signals: + +public slots: + +}; + +#endif // QSPLITTEREX_H diff --git a/subsurface.pro b/subsurface.pro index 2c78751..2bf3d30 100644 --- a/subsurface.pro +++ b/subsurface.pro @@ -75,7 +75,8 @@ HEADERS = \ qt-ui/profile/diveplotdatamodel.h \ qt-ui/profile/diveprofileitem.h \ qt-ui/profile/diveeventitem.h \ - qt-ui/profile/divetooltipitem.h + qt-ui/profile/divetooltipitem.h \ + qt-ui/qsplitterex.h SOURCES = \ deco.c \ @@ -138,7 +139,8 @@ SOURCES = \ qt-ui/profile/diveplotdatamodel.cpp \ qt-ui/profile/diveprofileitem.cpp \ qt-ui/profile/diveeventitem.cpp \ - qt-ui/profile/divetooltipitem.cpp + qt-ui/profile/divetooltipitem.cpp \ + qt-ui/qsplitterex.cpp linux*: SOURCES += linux.c mac: SOURCES += macos.c -- 1.8.3.2
_______________________________________________ subsurface mailing list [email protected] http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface
