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

Reply via email to