There are obvious bugs that i'm working on.
most notably, it forgets the size of the widgets.

On Tue, Feb 10, 2015 at 12:34 PM, Dirk Hohndel <[email protected]> wrote:

> On Tue, Feb 10, 2015 at 12:18:18PM -0200, Tomaz Canabrava wrote:
> > of course, i had forgotten to add the patches. wich is good, it helps me
> a
> > bit to bettter reword them.
>
> I applied all the patches you sent :-)
>
> /D
>
From 0d7f8b27e7326666cb04348c32847b4f82e9b2ef Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 15:32:16 -0200
Subject: [PATCH 01/18] Added a new Enum that will be used to simplify the
 mainwindow

This new enum states the possible places that a widget can be
used on the window, the four corners. the next few commits will
add support to control the widgets using it.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/mainwindow.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index 2364caa..4ee1994 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -55,6 +55,13 @@ public:
 		LIST_MAXIMIZED
 	};
 
+	enum WidgetLocation {
+		TOPLEFT,
+		BOTTOMLEFT,
+		TOPRIGHT,
+		BOTTOMRIGHT
+	};
+
 	MainWindow();
 	virtual ~MainWindow();
 	static MainWindow *instance();
-- 
2.3.0

From 7598cb2790064a210886acb443dee5e114e3fa5b Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 15:35:36 -0200
Subject: [PATCH 02/18] Added a new struct that will hold the widgets for each
 border

The combination of the map / struct will change based on what
state the application changes. currently a lot of different
widgets changes the aspect of the mainWindow, and it's very
messy.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/mainwindow.h | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index 4ee1994..657970a 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -201,6 +201,14 @@ private:
 	struct dive copyPasteDive;
 	struct dive_components what;
 	QList<QAction *> profileToolbarActions;
+
+	struct WidgetForBorder {
+		QWidget *topLeft;
+		QWidget *bottomLeft;
+		QWidget *topRight;
+		QWidget *bottomRight;
+	};
+	QHash<QByteArray, WidgetForBorder> applicationState;
 };
 
 #endif // MAINWINDOW_H
-- 
2.3.0

From ba88c52564e91fbe656cfb75fef12e93fd03af20 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 15:42:32 -0200
Subject: [PATCH 03/18] Implement the registerApplicationState function

This function registers the different widget layouts
that we will have in subsurface. Currently we have three layouts
( default, plan, add ) and a few more are comming ( for instance
location ) and the code is scattered around. it was making me
unconfortable.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/mainwindow.cpp | 5 +++++
 qt-ui/mainwindow.h   | 3 +++
 2 files changed, 8 insertions(+)

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 3142f5a..5cef86a 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -1466,3 +1466,8 @@ void MainWindow::on_actionFilterTags_triggered()
 	else
 		ui.multiFilter->setVisible(true);
 }
+
+void registerApplicationState(const QByteArray& state, QWidget *topLeft, QWidget *bottomLeft, QWidget *topRight, QWidget *bottomRight)
+{
+	applicationState[state] = WidgetForBorder(topLeft, bottomLeft, topRight, bottomRight);
+}
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index 657970a..1a958b5 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -192,6 +192,7 @@ private:
 	void saveSplitterSizes();
 	QString lastUsedDir();
 	void updateLastUsedDir(const QString &s);
+	void registerApplicationState(const QByteArray& state, QWidget *topLeft, QWidget *bottomLeft, QWidget *topRight, QWidget *bottomRight);
 	bool filesAsArguments;
 	UpdateManager *updateManager;
 
@@ -203,6 +204,8 @@ private:
 	QList<QAction *> profileToolbarActions;
 
 	struct WidgetForBorder {
+		WidgetForBorder(QWidget *tl, QWidget *bl, QWidget *tr, QWidget *br) :
+			topLeft(tl), bottomLeft(bl), topRight(tr), bottomRight(br) {}
 		QWidget *topLeft;
 		QWidget *bottomLeft;
 		QWidget *topRight;
-- 
2.3.0

From d3304c0643e36b1e3dba1ffc46f730201502667a Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 15:44:53 -0200
Subject: [PATCH 04/18] Simplify a bit of code

two #ifdef NO_PRINTING one over the other, merged them together.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/mainwindow.cpp | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 5cef86a..363460a 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -79,6 +79,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	connect(ui.printPlan, SIGNAL(pressed()), ui.divePlannerWidget, SLOT(printDecoPlan()));
 #ifdef NO_PRINTING
 	ui.printPlan->hide();
+	ui.menuFile->removeAction(ui.actionPrint);
 #endif
 
 	ui.mainErrorMessage->hide();
@@ -102,9 +103,6 @@ MainWindow::MainWindow() : QMainWindow(),
 #ifdef NO_USERMANUAL
 	ui.menuHelp->removeAction(ui.actionUserManual);
 #endif
-#ifdef NO_PRINTING
-	ui.menuFile->removeAction(ui.actionPrint);
-#endif
 	memset(&copyPasteDive, 0, sizeof(copyPasteDive));
 	memset(&what, 0, sizeof(what));
 
-- 
2.3.0

From 96c3d6d62565167e4e7bda609df53296db646085 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 16:23:30 -0200
Subject: [PATCH 05/18] Added the first call to registerApplicationState

This will be used to set the 'default' state. the other
two possible states right now are Plan and add, that will
be created right next.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/globe.h        |  2 +-
 qt-ui/maintab.h      |  2 +-
 qt-ui/mainwindow.cpp | 13 ++++++++++++-
 qt-ui/mainwindow.h   |  2 +-
 4 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/qt-ui/globe.h b/qt-ui/globe.h
index b6a33bb..4f9d7c6 100644
--- a/qt-ui/globe.h
+++ b/qt-ui/globe.h
@@ -19,7 +19,7 @@ class GlobeGPS : public MarbleWidget {
 	Q_OBJECT
 public:
 	using MarbleWidget::centerOn;
-	GlobeGPS(QWidget *parent);
+	GlobeGPS(QWidget *parent = 0);
 	void reload();
 	void repopulateLabels();
 	void centerOnCurrentDive();
diff --git a/qt-ui/maintab.h b/qt-ui/maintab.h
index 71703e3..a279baf 100644
--- a/qt-ui/maintab.h
+++ b/qt-ui/maintab.h
@@ -40,7 +40,7 @@ public:
 		IGNORE
 	};
 
-	MainTab(QWidget *parent);
+	MainTab(QWidget *parent = 0);
 	~MainTab();
 	void clearStats();
 	void clearInfo();
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 363460a..1d93add 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -44,6 +44,17 @@ MainWindow::MainWindow() : QMainWindow(),
 	Q_ASSERT_X(m_Instance == NULL, "MainWindow", "MainWindow recreated!");
 	m_Instance = this;
 	ui.setupUi(this);
+	// Define the States of the Application Here, Currently the states are situations where the different
+	// widgets will change on the mainwindow.
+
+	// for the "default" mode
+	MainTab *mainTab = new MainTab();
+	DiveListView *diveListView = new DiveListView();
+	ProfileWidget2 *profileWidget = new ProfileWidget2();
+	GlobeGPS *globe = new GlobeGPS();
+
+	registerApplicationState("Default", mainTab, diveListView, profileWidget, globe );
+
 	ui.multiFilter->hide();
 	// what is a sane order for those icons? we should have the ones the user is
 	// most likely to want towards the top so they are always visible
@@ -1465,7 +1476,7 @@ void MainWindow::on_actionFilterTags_triggered()
 		ui.multiFilter->setVisible(true);
 }
 
-void registerApplicationState(const QByteArray& state, QWidget *topLeft, QWidget *bottomLeft, QWidget *topRight, QWidget *bottomRight)
+void MainWindow::registerApplicationState(const QByteArray& state, QWidget *topLeft, QWidget *bottomLeft, QWidget *topRight, QWidget *bottomRight)
 {
 	applicationState[state] = WidgetForBorder(topLeft, bottomLeft, topRight, bottomRight);
 }
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index 1a958b5..4e5f290 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -204,7 +204,7 @@ private:
 	QList<QAction *> profileToolbarActions;
 
 	struct WidgetForBorder {
-		WidgetForBorder(QWidget *tl, QWidget *bl, QWidget *tr, QWidget *br) :
+		WidgetForBorder(QWidget *tl = 0, QWidget *bl = 0, QWidget *tr = 0, QWidget *br = 0) :
 			topLeft(tl), bottomLeft(bl), topRight(tr), bottomRight(br) {}
 		QWidget *topLeft;
 		QWidget *bottomLeft;
-- 
2.3.0

From 3a6c1ef4fa792952c4d99ada48541454d9643455 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 16:28:33 -0200
Subject: [PATCH 06/18] Addded the modes for ADD and PLAN

the Plan mode still misses a widget that was done directly inside
the mainwindow. I'll extract it from there and create a proper
class in the next commit.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/mainwindow.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 1d93add..0a7a2a3 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -53,7 +53,13 @@ MainWindow::MainWindow() : QMainWindow(),
 	ProfileWidget2 *profileWidget = new ProfileWidget2();
 	GlobeGPS *globe = new GlobeGPS();
 
+	PlannerSettingsWidget *plannerSettings = new PlannerSettingsWidget();
+	DivePlannerWidget *plannerWidget = new DivePlannerWidget();
+	//DivePlannerDetails *plannerDetails = new DivePlannerDetails();
+
 	registerApplicationState("Default", mainTab, diveListView, profileWidget, globe );
+	registerApplicationState("AddDive", mainTab, diveListView, profileWidget, globe );
+	registerApplicationState("PlanDive", plannerWidget, plannerSettings, profileWidget, globe );
 
 	ui.multiFilter->hide();
 	// what is a sane order for those icons? we should have the ones the user is
-- 
2.3.0

From 818b0a825f21d73042b25f92866cd88769598700 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 16:29:37 -0200
Subject: [PATCH 07/18] Added a new file, plannerDetauls.ui

This new file is the interface for the Details of the planned dive
removed from the mainwindow.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/plannerDetails.ui | 89 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)
 create mode 100644 qt-ui/plannerDetails.ui

diff --git a/qt-ui/plannerDetails.ui b/qt-ui/plannerDetails.ui
new file mode 100644
index 0000000..73e5b14
--- /dev/null
+++ b/qt-ui/plannerDetails.ui
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="divePlanOutputLabel">
+       <property name="maximumSize">
+        <size>
+         <width>16777215</width>
+         <height>20</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Dive plan details&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+       </property>
+       <property name="textFormat">
+        <enum>Qt::RichText</enum>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="printPlan">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>Print</string>
+       </property>
+       <property name="autoDefault">
+        <bool>false</bool>
+       </property>
+       <property name="default">
+        <bool>false</bool>
+       </property>
+       <property name="flat">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QTextEdit" name="divePlanOutput">
+     <property name="enabled">
+      <bool>true</bool>
+     </property>
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="styleSheet">
+      <string notr="true">font: 13pt &quot;Courier&quot;;</string>
+     </property>
+     <property name="readOnly">
+      <bool>true</bool>
+     </property>
+     <property name="html">
+      <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Courier'; font-size:13pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'.Curier New';&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
-- 
2.3.0

From 0042a5dc080b28023da923d7bc6855d4c89decdc Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 16:37:26 -0200
Subject: [PATCH 08/18] Added the PlannerDetails class

This is the last of the current dialogs to be ported to the
new widgets system. now we need to clean the mainwindow of the
old code.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/diveplanner.cpp   |  5 +++++
 qt-ui/diveplanner.h     | 11 +++++++++++
 qt-ui/plannerDetails.ui |  4 ++--
 subsurface.pro          |  3 ++-
 4 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp
index 84555bc..3587d3c 100644
--- a/qt-ui/diveplanner.cpp
+++ b/qt-ui/diveplanner.cpp
@@ -1266,3 +1266,8 @@ void DivePlannerPointsModel::createPlan(bool replanCopy)
 	setPlanMode(NOTHING);
 	planCreated();
 }
+
+PlannerDetails::PlannerDetails(QWidget *parent) : QWidget(parent)
+{
+	ui.setupUi(this);
+}
diff --git a/qt-ui/diveplanner.h b/qt-ui/diveplanner.h
index 4093bac..49fd43f 100644
--- a/qt-ui/diveplanner.h
+++ b/qt-ui/diveplanner.h
@@ -186,6 +186,17 @@ private:
 	void updateUnitsUI();
 };
 
+#include "ui_plannerDetails.h"
+
+class PlannerDetails : public QWidget {
+	Q_OBJECT
+public:
+	explicit PlannerDetails(QWidget *parent = 0);
+private:
+	Ui::plannerDetails ui;
+};
+
+
 QString dpGasToStr(const divedatapoint &p);
 
 #endif // DIVEPLANNER_H
diff --git a/qt-ui/plannerDetails.ui b/qt-ui/plannerDetails.ui
index 73e5b14..349ec53 100644
--- a/qt-ui/plannerDetails.ui
+++ b/qt-ui/plannerDetails.ui
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0">
- <class>Form</class>
- <widget class="QWidget" name="Form">
+ <class>plannerDetails</class>
+ <widget class="QWidget" name="plannerDetails">
   <property name="geometry">
    <rect>
     <x>0</x>
diff --git a/subsurface.pro b/subsurface.pro
index 2cc6b09..5fb6ab5 100644
--- a/subsurface.pro
+++ b/subsurface.pro
@@ -235,7 +235,8 @@ FORMS = \
 	qt-ui/configuredivecomputerdialog.ui \
 	qt-ui/listfilter.ui \
 	qt-ui/diveshareexportdialog.ui \
-	qt-ui/filterwidget.ui
+	qt-ui/filterwidget.ui \
+	qt-ui/plannerDetails.ui
 
 # Nether usermanual or printing is supported on android right now
 android: FORMS -= qt-ui/printoptions.ui
-- 
2.3.0

From bd6259ab49ee68bccc928f71f1d136f509a76a39 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 17:09:06 -0200
Subject: [PATCH 09/18] Changed splitters names to something more meaningfull

listGlobe and infoProfileSplitters weren't good names as
now we will be able to create more types of widgets there

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/mainwindow.cpp | 44 ++++++++++++++++++++++----------------------
 qt-ui/mainwindow.ui  |  6 +++---
 2 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 0a7a2a3..a464d0c 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -627,16 +627,16 @@ void MainWindow::on_actionYearlyStatistics_triggered()
 #define TOGGLE_COLLAPSABLE( X ) \
 	ui.mainSplitter->setCollapsible(0, X); \
 	ui.mainSplitter->setCollapsible(1, X); \
-	ui.infoProfileSplitter->setCollapsible(0, X); \
-	ui.infoProfileSplitter->setCollapsible(1, X); \
-	ui.listGlobeSplitter->setCollapsible(0, X); \
-	ui.listGlobeSplitter->setCollapsible(1, X);
+	ui.topSplitter->setCollapsible(0, X); \
+	ui.topSplitter->setCollapsible(1, X); \
+	ui.bottomSplitter->setCollapsible(0, X); \
+	ui.bottomSplitter->setCollapsible(1, X);
 
 void MainWindow::on_actionViewList_triggered()
 {
 	TOGGLE_COLLAPSABLE( true );
 	beginChangeState(LIST_MAXIMIZED);
-	ui.listGlobeSplitter->setSizes(BEHAVIOR << EXPANDED << COLLAPSED);
+	ui.topSplitter->setSizes(BEHAVIOR << EXPANDED << COLLAPSED);
 	ui.mainSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
 }
 
@@ -644,7 +644,7 @@ void MainWindow::on_actionViewProfile_triggered()
 {
 	TOGGLE_COLLAPSABLE( true );
 	beginChangeState(PROFILE_MAXIMIZED);
-	ui.infoProfileSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
+	ui.topSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
 	ui.mainSplitter->setSizes(BEHAVIOR << EXPANDED << COLLAPSED);
 }
 
@@ -652,7 +652,7 @@ void MainWindow::on_actionViewInfo_triggered()
 {
 	TOGGLE_COLLAPSABLE( true );
 	beginChangeState(INFO_MAXIMIZED);
-	ui.infoProfileSplitter->setSizes(BEHAVIOR << EXPANDED << COLLAPSED);
+	ui.topSplitter->setSizes(BEHAVIOR << EXPANDED << COLLAPSED);
 	ui.mainSplitter->setSizes(BEHAVIOR << EXPANDED << COLLAPSED);
 }
 
@@ -661,7 +661,7 @@ void MainWindow::on_actionViewGlobe_triggered()
 	TOGGLE_COLLAPSABLE( true );
 	beginChangeState(GLOBE_MAXIMIZED);
 	ui.mainSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
-	ui.listGlobeSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
+	ui.bottomSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
 }
 #undef BEHAVIOR
 
@@ -692,26 +692,26 @@ void MainWindow::on_actionViewAll_triggered()
 	settings.beginGroup("MainWindow");
 	if (settings.value("mainSplitter").isValid()) {
 		ui.mainSplitter->restoreState(settings.value("mainSplitter").toByteArray());
-		ui.infoProfileSplitter->restoreState(settings.value("infoProfileSplitter").toByteArray());
-		ui.listGlobeSplitter->restoreState(settings.value("listGlobeSplitter").toByteArray());
+		ui.topSplitter->restoreState(settings.value("topSplitter").toByteArray());
+		ui.bottomSplitter->restoreState(settings.value("bottomSplitter").toByteArray());
 		if (ui.mainSplitter->sizes().first() == 0 || ui.mainSplitter->sizes().last() == 0)
 			ui.mainSplitter->setSizes(mainSizes);
-		if (ui.infoProfileSplitter->sizes().first() == 0 || ui.infoProfileSplitter->sizes().last() == 0)
-			ui.infoProfileSplitter->setSizes(infoProfileSizes);
-		if (ui.listGlobeSplitter->sizes().first() == 0 || ui.listGlobeSplitter->sizes().last() == 0)
-			ui.listGlobeSplitter->setSizes(listGlobeSizes);
+		if (ui.topSplitter->sizes().first() == 0 || ui.topSplitter->sizes().last() == 0)
+			ui.topSplitter->setSizes(infoProfileSizes);
+		if (ui.bottomSplitter->sizes().first() == 0 || ui.bottomSplitter->sizes().last() == 0)
+			ui.bottomSplitter->setSizes(listGlobeSizes);
 
 	} else {
 		ui.mainSplitter->setSizes(mainSizes);
-		ui.infoProfileSplitter->setSizes(infoProfileSizes);
-		ui.listGlobeSplitter->setSizes(listGlobeSizes);
+		ui.topSplitter->setSizes(infoProfileSizes);
+		ui.bottomSplitter->setSizes(listGlobeSizes);
 	}
 	ui.mainSplitter->setCollapsible(0, false);
 	ui.mainSplitter->setCollapsible(1, false);
-	ui.infoProfileSplitter->setCollapsible(0, false);
-	ui.infoProfileSplitter->setCollapsible(1, false);
-	ui.listGlobeSplitter->setCollapsible(0,false);
-	ui.listGlobeSplitter->setCollapsible(1,false);
+	ui.topSplitter->setCollapsible(0, false);
+	ui.topSplitter->setCollapsible(1, false);
+	ui.bottomSplitter->setCollapsible(0,false);
+	ui.bottomSplitter->setCollapsible(1,false);
 }
 
 #undef TOGGLE_COLLAPSABLE
@@ -729,8 +729,8 @@ void MainWindow::saveSplitterSizes()
 	QSettings settings;
 	settings.beginGroup("MainWindow");
 	settings.setValue("mainSplitter", ui.mainSplitter->saveState());
-	settings.setValue("infoProfileSplitter", ui.infoProfileSplitter->saveState());
-	settings.setValue("listGlobeSplitter", ui.listGlobeSplitter->saveState());
+	settings.setValue("topSplitter", ui.topSplitter->saveState());
+	settings.setValue("bottomSplitter", ui.bottomSplitter->saveState());
 }
 
 void MainWindow::on_actionPreviousDC_triggered()
diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui
index 8ffb8bb..75119a3 100644
--- a/qt-ui/mainwindow.ui
+++ b/qt-ui/mainwindow.ui
@@ -23,7 +23,7 @@
       <property name="orientation">
        <enum>Qt::Vertical</enum>
       </property>
-      <widget class="QSplitter" name="infoProfileSplitter">
+      <widget class="QSplitter" name="topSplitter">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
@@ -64,7 +64,7 @@
         </layout>
        </widget>
       </widget>
-      <widget class="QSplitter" name="listGlobeSplitter">
+      <widget class="QSplitter" name="bottomSplitter">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
@@ -195,7 +195,7 @@ p, li { white-space: pre-wrap; }
      <x>0</x>
      <y>0</y>
      <width>1682</width>
-     <height>27</height>
+     <height>32</height>
     </rect>
    </property>
    <widget class="QMenu" name="menuFile">
-- 
2.3.0

From 95f11751c0ee05a68eeaf50134da916a4493d515 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 17:10:08 -0200
Subject: [PATCH 10/18] Create the method that changes the state of the
 application

Not used yet. the idea is to call 'setApplicationState("plan");'
and all widgegts for plan will be magically setuped because we
added the plan stte with registerApplicationState.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/mainwindow.cpp | 23 +++++++++++++++++++++++
 qt-ui/mainwindow.h   |  1 +
 2 files changed, 24 insertions(+)

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index a464d0c..70d6c7a 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -167,6 +167,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	toolBar->setContentsMargins(zeroMargins);
 
 	updateManager = new UpdateManager(this);
+	setApplicationState("Default");
 }
 
 MainWindow::~MainWindow()
@@ -1486,3 +1487,25 @@ void MainWindow::registerApplicationState(const QByteArray& state, QWidget *topL
 {
 	applicationState[state] = WidgetForBorder(topLeft, bottomLeft, topRight, bottomRight);
 }
+
+void MainWindow::setApplicationState(const QByteArray& state) {
+	if (!applicationState.keys().contains(state))
+		return;
+
+	// yes, index is zero both times. please don't change it.
+	if (ui.topSplitter->count()) {
+		ui.topSplitter->widget(0)->setParent(NULL);
+		ui.topSplitter->widget(0)->setParent(NULL);
+	}
+	if (ui.bottomSplitter->count()) {
+		ui.bottomSplitter->widget(0)->setParent(NULL);
+		ui.bottomSplitter->widget(0)->setParent(NULL);
+	}
+
+
+	WidgetForBorder curr = applicationState[state];
+	ui.topSplitter->addWidget(curr.topLeft);
+	ui.topSplitter->addWidget(curr.topRight);
+	ui.bottomSplitter->addWidget(curr.bottomLeft);
+	ui.bottomSplitter->addWidget(curr.bottomRight);
+}
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index 4e5f290..f8de798 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -89,6 +89,7 @@ public:
 	void setPlanNotes(const char *notes);
 	void printPlan();
 	void checkSurvey(QSettings *s);
+	void setApplicationState(const QByteArray& state);
 private
 slots:
 	/* file menu action */
-- 
2.3.0

From 5b865b1e07c76f4e4541cdc0a547238444d9ff90 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 18:05:27 -0200
Subject: [PATCH 11/18] Setup correctly the Planner state

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/mainwindow.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 70d6c7a..b4f7e0e 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -55,11 +55,11 @@ MainWindow::MainWindow() : QMainWindow(),
 
 	PlannerSettingsWidget *plannerSettings = new PlannerSettingsWidget();
 	DivePlannerWidget *plannerWidget = new DivePlannerWidget();
-	//DivePlannerDetails *plannerDetails = new DivePlannerDetails();
+	PlannerDetails *plannerDetails = new PlannerDetails();
 
 	registerApplicationState("Default", mainTab, diveListView, profileWidget, globe );
 	registerApplicationState("AddDive", mainTab, diveListView, profileWidget, globe );
-	registerApplicationState("PlanDive", plannerWidget, plannerSettings, profileWidget, globe );
+	registerApplicationState("PlanDive", plannerWidget, plannerSettings, profileWidget, plannerDetails );
 
 	ui.multiFilter->hide();
 	// what is a sane order for those icons? we should have the ones the user is
-- 
2.3.0

From 470bb5333a94caed060423d60e34b6ba292d81cc Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 18:27:59 -0200
Subject: [PATCH 12/18] Removed the DiveList from the mainwindow.ui

It's now setupped from the mainwindow.cpp file.
good thing: I'v managed to not break the build. :D

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-gui.cpp                             |  1 +
 qt-ui/divecomputermanagementdialog.cpp |  1 +
 qt-ui/diveplanner.cpp                  |  1 +
 qt-ui/downloadfromdivecomputer.cpp     |  2 +-
 qt-ui/filtermodels.cpp                 |  2 ++
 qt-ui/globe.cpp                        |  1 +
 qt-ui/maintab.cpp                      |  2 ++
 qt-ui/mainwindow.cpp                   | 27 ++++++++++++++-------------
 qt-ui/mainwindow.ui                    | 15 +--------------
 qt-ui/modeldelegates.cpp               |  1 +
 qt-ui/preferences.cpp                  |  2 ++
 qt-ui/printlayout.cpp                  |  1 +
 qt-ui/profile/profilewidget2.cpp       |  2 ++
 qt-ui/simplewidgets.cpp                |  2 +-
 qt-ui/subsurfacewebservices.cpp        |  1 +
 15 files changed, 32 insertions(+), 29 deletions(-)

diff --git a/qt-gui.cpp b/qt-gui.cpp
index e007a25..98a45a5 100644
--- a/qt-gui.cpp
+++ b/qt-gui.cpp
@@ -19,6 +19,7 @@
 #include "qt-ui/mainwindow.h"
 #include "helpers.h"
 #include "qthelper.h"
+#include "divecomputer.h"
 
 #include <QApplication>
 #include <QFileDialog>
diff --git a/qt-ui/divecomputermanagementdialog.cpp b/qt-ui/divecomputermanagementdialog.cpp
index 742facd..552f605 100644
--- a/qt-ui/divecomputermanagementdialog.cpp
+++ b/qt-ui/divecomputermanagementdialog.cpp
@@ -1,6 +1,7 @@
 #include "divecomputermanagementdialog.h"
 #include "mainwindow.h"
 #include "helpers.h"
+#include "models.h"
 #include <QMessageBox>
 #include <QShortcut>
 
diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp
index 3587d3c..6741d9c 100644
--- a/qt-ui/diveplanner.cpp
+++ b/qt-ui/diveplanner.cpp
@@ -3,6 +3,7 @@
 #include "mainwindow.h"
 #include "planner.h"
 #include "helpers.h"
+#include "models.h"
 
 #include <QGraphicsSceneMouseEvent>
 #include <QMessageBox>
diff --git a/qt-ui/downloadfromdivecomputer.cpp b/qt-ui/downloadfromdivecomputer.cpp
index cd3dd90..14ba7f2 100644
--- a/qt-ui/downloadfromdivecomputer.cpp
+++ b/qt-ui/downloadfromdivecomputer.cpp
@@ -1,7 +1,7 @@
 #include "downloadfromdivecomputer.h"
 #include "helpers.h"
 #include "mainwindow.h"
-
+#include "divelistview.h"
 #include <QTimer>
 #include <QFileDialog>
 #include <QMessageBox>
diff --git a/qt-ui/filtermodels.cpp b/qt-ui/filtermodels.cpp
index e2597a6..3585065 100644
--- a/qt-ui/filtermodels.cpp
+++ b/qt-ui/filtermodels.cpp
@@ -1,5 +1,7 @@
 #include "filtermodels.h"
 #include "mainwindow.h"
+#include "models.h"
+#include "divelistview.h"
 
 #define CREATE_INSTANCE_METHOD( CLASS ) \
 CLASS *CLASS::instance() \
diff --git a/qt-ui/globe.cpp b/qt-ui/globe.cpp
index 1e4639d..6bfd987 100644
--- a/qt-ui/globe.cpp
+++ b/qt-ui/globe.cpp
@@ -2,6 +2,7 @@
 #ifndef NO_MARBLE
 #include "mainwindow.h"
 #include "helpers.h"
+#include "divelistview.h"
 #include <QTimer>
 
 #include <marble/AbstractFloatItem.h>
diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp
index 00aae5f..a6505d7 100644
--- a/qt-ui/maintab.cpp
+++ b/qt-ui/maintab.cpp
@@ -9,6 +9,8 @@
 #include "helpers.h"
 #include "statistics.h"
 #include "modeldelegates.h"
+#include "models.h"
+#include "divelistview.h"
 
 #if defined(FBSUPPORT)
 #include "socialnetworks.h"
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index b4f7e0e..d7cef33 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -12,6 +12,7 @@
 #include <QShortcut>
 #include <QToolBar>
 #include "ssrf-version.h"
+#include "divelistview.h"
 #include "downloadfromdivecomputer.h"
 #include "preferences.h"
 #include "subsurfacewebservices.h"
@@ -78,10 +79,10 @@ MainWindow::MainWindow() : QMainWindow(),
 	if (!QIcon::hasThemeIcon("window-close")) {
 		QIcon::setThemeName("subsurface");
 	}
-	connect(ui.ListWidget, SIGNAL(currentDiveChanged(int)), this, SLOT(current_dive_changed(int)));
+	connect(dive_list(), SIGNAL(currentDiveChanged(int)), this, SLOT(current_dive_changed(int)));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), this, SLOT(readSettings()));
-	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.ListWidget, SLOT(update()));
-	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.ListWidget, SLOT(reloadHeaderActions()));
+	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), diveListView, SLOT(update()));
+	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), diveListView, SLOT(reloadHeaderActions()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.InfoWidget, SLOT(updateDiveInfo()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.divePlannerWidget, SLOT(settingsChanged()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.plannerSettingsWidget, SLOT(settingsChanged()));
@@ -103,12 +104,12 @@ MainWindow::MainWindow() : QMainWindow(),
 	ui.newProfile->setEmptyState();
 	initialUiSetup();
 	readSettings();
-	ui.ListWidget->reload(DiveTripModel::TREE);
-	ui.ListWidget->reloadHeaderActions();
-	ui.ListWidget->setFocus();
+	diveListView->reload(DiveTripModel::TREE);
+	diveListView->reloadHeaderActions();
+	diveListView->setFocus();
 	ui.globe->reload();
-	ui.ListWidget->expand(ui.ListWidget->model()->index(0, 0));
-	ui.ListWidget->scrollTo(ui.ListWidget->model()->index(0, 0), QAbstractItemView::PositionAtCenter);
+	diveListView->expand(dive_list()->model()->index(0, 0));
+	diveListView->scrollTo(dive_list()->model()->index(0, 0), QAbstractItemView::PositionAtCenter);
 	ui.divePlannerWidget->settingsChanged();
 	ui.plannerSettingsWidget->settingsChanged();
 #ifdef NO_MARBLE
@@ -204,8 +205,8 @@ void MainWindow::refreshDisplay(bool doRecreateDiveList)
 	ui.globePane->hide();
 #endif
 	ui.globePane->setCurrentIndex(0);
-	ui.ListWidget->setEnabled(true);
-	ui.ListWidget->setFocus();
+	dive_list()->setEnabled(true);
+	dive_list()->setFocus();
 	WSInfoModel::instance()->updateInfo();
 	if (amount_selected == 0)
 		cleanUpEmpty();
@@ -213,7 +214,7 @@ void MainWindow::refreshDisplay(bool doRecreateDiveList)
 
 void MainWindow::recreateDiveList()
 {
-	ui.ListWidget->reload(DiveTripModel::CURRENT);
+	dive_list()->reload(DiveTripModel::CURRENT);
 	TagFilterModel::instance()->repopulate();
 	BuddyFilterModel::instance()->repopulate();
 	LocationFilterModel::instance()->repopulate();
@@ -280,7 +281,7 @@ void MainWindow::cleanUpEmpty()
 	ui.InfoWidget->clearEquipment();
 	ui.InfoWidget->updateDiveInfo(true);
 	ui.newProfile->setEmptyState();
-	ui.ListWidget->reload(DiveTripModel::TREE);
+	dive_list()->reload(DiveTripModel::TREE);
 	ui.globe->reload();
 	if (!existing_filename)
 		setTitle(MWTF_DEFAULT);
@@ -1010,7 +1011,7 @@ void MainWindow::closeEvent(QCloseEvent *event)
 
 DiveListView *MainWindow::dive_list()
 {
-	return ui.ListWidget;
+	return qobject_cast<DiveListView*>(applicationState["Default"].bottomLeft);
 }
 
 GlobeGPS *MainWindow::globe()
diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui
index 75119a3..3b631a4 100644
--- a/qt-ui/mainwindow.ui
+++ b/qt-ui/mainwindow.ui
@@ -73,15 +73,7 @@
          <number>0</number>
         </property>
         <widget class="QWidget" name="page_3">
-         <layout class="QVBoxLayout" name="diveListLayout">
-          <item>
-           <widget class="DiveListView" name="ListWidget">
-            <property name="selectionMode">
-             <enum>QAbstractItemView::ExtendedSelection</enum>
-            </property>
-           </widget>
-          </item>
-         </layout>
+         <layout class="QVBoxLayout" name="diveListLayout"/>
         </widget>
         <widget class="PlannerSettingsWidget" name="plannerSettingsWidget"/>
        </widget>
@@ -828,11 +820,6 @@ p, li { white-space: pre-wrap; }
    <container>1</container>
   </customwidget>
   <customwidget>
-   <class>DiveListView</class>
-   <extends>QTreeView</extends>
-   <header>divelistview.h</header>
-  </customwidget>
-  <customwidget>
    <class>GlobeGPS</class>
    <extends>QWidget</extends>
    <header>globe.h</header>
diff --git a/qt-ui/modeldelegates.cpp b/qt-ui/modeldelegates.cpp
index ee7dc6c..d60b0ea 100644
--- a/qt-ui/modeldelegates.cpp
+++ b/qt-ui/modeldelegates.cpp
@@ -2,6 +2,7 @@
 #include "dive.h"
 #include "gettextfromc.h"
 #include "mainwindow.h"
+#include "models.h"
 
 #include <QCompleter>
 
diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp
index ab241f3..e4f9700 100644
--- a/qt-ui/preferences.cpp
+++ b/qt-ui/preferences.cpp
@@ -1,5 +1,7 @@
 #include "preferences.h"
 #include "mainwindow.h"
+#include "models.h"
+
 #include <QSettings>
 #include <QFileDialog>
 #include <QMessageBox>
diff --git a/qt-ui/printlayout.cpp b/qt-ui/printlayout.cpp
index 6b88f0d..eef5144 100644
--- a/qt-ui/printlayout.cpp
+++ b/qt-ui/printlayout.cpp
@@ -8,6 +8,7 @@
 #include "printdialog.h"
 #include "printlayout.h"
 #include "modeldelegates.h"
+#include "models.h"
 
 PrintLayout::PrintLayout(PrintDialog *dialogPtr, QPrinter *printerPtr, struct print_options *optionsPtr)
 {
diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index f04d16b..89ab62d 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -10,6 +10,8 @@
 #include "ruleritem.h"
 #include "tankitem.h"
 #include "pref.h"
+#include "models.h"
+
 #include <libdivecomputer/parser.h>
 #include <QScrollBar>
 #include <QtCore/qmath.h>
diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index d258fe7..42f00fb 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -10,7 +10,7 @@
 #include "mainwindow.h"
 #include "helpers.h"
 #include "libdivecomputer/parser.h"
-
+#include "divelistview.h"
 
 class MinMaxAvgWidgetPrivate {
 public:
diff --git a/qt-ui/subsurfacewebservices.cpp b/qt-ui/subsurfacewebservices.cpp
index 597fe03..6498f43 100644
--- a/qt-ui/subsurfacewebservices.cpp
+++ b/qt-ui/subsurfacewebservices.cpp
@@ -2,6 +2,7 @@
 #include "webservice.h"
 #include "mainwindow.h"
 #include "usersurvey.h"
+#include "divelist.h"
 #include <errno.h>
 
 #include <QDir>
-- 
2.3.0

From 50d0a4772a35658f07d832106d264498b269093d Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 18:43:41 -0200
Subject: [PATCH 13/18] Removed the Globe from the mainwindow.ui

Now it's started from mainwindo.cpp and it's part of the
new states

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/maintab.cpp               |  1 +
 qt-ui/mainwindow.cpp            | 19 ++++++++++---------
 qt-ui/mainwindow.ui             | 14 ++------------
 qt-ui/subsurfacewebservices.cpp |  2 ++
 4 files changed, 15 insertions(+), 21 deletions(-)

diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp
index a6505d7..baaa9f8 100644
--- a/qt-ui/maintab.cpp
+++ b/qt-ui/maintab.cpp
@@ -6,6 +6,7 @@
  */
 #include "maintab.h"
 #include "mainwindow.h"
+#include "globe.h"
 #include "helpers.h"
 #include "statistics.h"
 #include "modeldelegates.h"
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index d7cef33..72b278b 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -21,6 +21,7 @@
 #include "updatemanager.h"
 #include "planner.h"
 #include "filtermodels.h"
+#include "globe.h"
 #ifndef NO_PRINTING
 #include <QPrintDialog>
 #include "printdialog.h"
@@ -52,14 +53,14 @@ MainWindow::MainWindow() : QMainWindow(),
 	MainTab *mainTab = new MainTab();
 	DiveListView *diveListView = new DiveListView();
 	ProfileWidget2 *profileWidget = new ProfileWidget2();
-	GlobeGPS *globe = new GlobeGPS();
+	GlobeGPS *globeGps = new GlobeGPS();
 
 	PlannerSettingsWidget *plannerSettings = new PlannerSettingsWidget();
 	DivePlannerWidget *plannerWidget = new DivePlannerWidget();
 	PlannerDetails *plannerDetails = new PlannerDetails();
 
-	registerApplicationState("Default", mainTab, diveListView, profileWidget, globe );
-	registerApplicationState("AddDive", mainTab, diveListView, profileWidget, globe );
+	registerApplicationState("Default", mainTab, diveListView, profileWidget, globeGps );
+	registerApplicationState("AddDive", mainTab, diveListView, profileWidget, globeGps );
 	registerApplicationState("PlanDive", plannerWidget, plannerSettings, profileWidget, plannerDetails );
 
 	ui.multiFilter->hide();
@@ -107,7 +108,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	diveListView->reload(DiveTripModel::TREE);
 	diveListView->reloadHeaderActions();
 	diveListView->setFocus();
-	ui.globe->reload();
+	globe()->reload();
 	diveListView->expand(dive_list()->model()->index(0, 0));
 	diveListView->scrollTo(dive_list()->model()->index(0, 0), QAbstractItemView::PositionAtCenter);
 	ui.divePlannerWidget->settingsChanged();
@@ -116,7 +117,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	ui.globePane->hide();
 	ui.menuView->removeAction(ui.actionViewGlobe);
 #else
-	connect(ui.globe, SIGNAL(coordinatesChanged()), ui.InfoWidget, SLOT(updateGpsCoordinates()));
+	connect(globe(), SIGNAL(coordinatesChanged()), ui.InfoWidget, SLOT(updateGpsCoordinates()));
 #endif
 #ifdef NO_USERMANUAL
 	ui.menuHelp->removeAction(ui.actionUserManual);
@@ -197,7 +198,7 @@ void MainWindow::refreshDisplay(bool doRecreateDiveList)
 	showError(get_error_string());
 	ui.InfoWidget->reload();
 	TankInfoModel::instance()->update();
-	ui.globe->reload();
+	globe()->reload();
 	if (doRecreateDiveList)
 		recreateDiveList();
 	ui.diveListPane->setCurrentIndex(0); // switch to the dive list
@@ -225,7 +226,7 @@ void MainWindow::current_dive_changed(int divenr)
 {
 	if (divenr >= 0) {
 		select_dive(divenr);
-		ui.globe->centerOnCurrentDive();
+		globe()->centerOnCurrentDive();
 	}
 	ui.newProfile->plotDive();
 	ui.InfoWidget->updateDiveInfo();
@@ -282,7 +283,7 @@ void MainWindow::cleanUpEmpty()
 	ui.InfoWidget->updateDiveInfo(true);
 	ui.newProfile->setEmptyState();
 	dive_list()->reload(DiveTripModel::TREE);
-	ui.globe->reload();
+	globe()->reload();
 	if (!existing_filename)
 		setTitle(MWTF_DEFAULT);
 	disableShortcuts();
@@ -1016,7 +1017,7 @@ DiveListView *MainWindow::dive_list()
 
 GlobeGPS *MainWindow::globe()
 {
-	return ui.globe;
+	return qobject_cast<GlobeGPS*>(applicationState["Default"].bottomRight);
 }
 
 MainTab *MainWindow::information()
diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui
index 3b631a4..220a31a 100644
--- a/qt-ui/mainwindow.ui
+++ b/qt-ui/mainwindow.ui
@@ -70,7 +70,7 @@
        </property>
        <widget class="QStackedWidget" name="diveListPane">
         <property name="currentIndex">
-         <number>0</number>
+         <number>1</number>
         </property>
         <widget class="QWidget" name="page_3">
          <layout class="QVBoxLayout" name="diveListLayout"/>
@@ -88,11 +88,7 @@
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
-         <layout class="QVBoxLayout" name="globeLayout">
-          <item>
-           <widget class="GlobeGPS" name="globe" native="true"/>
-          </item>
-         </layout>
+         <layout class="QVBoxLayout" name="globeLayout"/>
         </widget>
         <widget class="QWidget" name="page_5">
          <property name="sizePolicy">
@@ -820,12 +816,6 @@ p, li { white-space: pre-wrap; }
    <container>1</container>
   </customwidget>
   <customwidget>
-   <class>GlobeGPS</class>
-   <extends>QWidget</extends>
-   <header>globe.h</header>
-   <container>1</container>
-  </customwidget>
-  <customwidget>
    <class>DivePlannerWidget</class>
    <extends>QWidget</extends>
    <header>diveplanner.h</header>
diff --git a/qt-ui/subsurfacewebservices.cpp b/qt-ui/subsurfacewebservices.cpp
index 6498f43..de19253 100644
--- a/qt-ui/subsurfacewebservices.cpp
+++ b/qt-ui/subsurfacewebservices.cpp
@@ -3,6 +3,8 @@
 #include "mainwindow.h"
 #include "usersurvey.h"
 #include "divelist.h"
+#include "globe.h"
+
 #include <errno.h>
 
 #include <QDir>
-- 
2.3.0

From 8a3d0ccc998e992ce3c2be9dc126918df37db63c Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 18:58:40 -0200
Subject: [PATCH 14/18] Information Panel removed from mainwindow.ui

Now it's created in the mainwindow.cpp as part of the new
way to configure the interface.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/divelistview.cpp            |  2 ++
 qt-ui/globe.cpp                   |  4 +++
 qt-ui/mainwindow.cpp              | 57 ++++++++++++++++++++-------------------
 qt-ui/mainwindow.ui               |  9 -------
 qt-ui/modeldelegates.cpp          |  2 ++
 qt-ui/profile/diveprofileitem.cpp |  1 +
 qt-ui/profile/profilewidget2.cpp  |  3 +++
 qt-ui/simplewidgets.cpp           |  1 +
 qt-ui/subsurfacewebservices.cpp   |  1 +
 qt-ui/tagwidget.cpp               |  1 +
 10 files changed, 44 insertions(+), 37 deletions(-)

diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp
index ec54af9..af63c4d 100644
--- a/qt-ui/divelistview.cpp
+++ b/qt-ui/divelistview.cpp
@@ -8,7 +8,9 @@
 #include "filtermodels.h"
 #include "modeldelegates.h"
 #include "mainwindow.h"
+#include "divepicturewidget.h"
 #include <QSettings>
+#include <QKeyEvent>
 #include <QFileDialog>
 #include "qthelper.h"
 
diff --git a/qt-ui/globe.cpp b/qt-ui/globe.cpp
index 6bfd987..a8586eb 100644
--- a/qt-ui/globe.cpp
+++ b/qt-ui/globe.cpp
@@ -3,7 +3,11 @@
 #include "mainwindow.h"
 #include "helpers.h"
 #include "divelistview.h"
+#include "maintab.h"
+
 #include <QTimer>
+#include <QContextMenuEvent>
+#include <QMouseEvent>
 
 #include <marble/AbstractFloatItem.h>
 #include <marble/GeoDataPlacemark.h>
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 72b278b..a1f0da8 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -22,6 +22,7 @@
 #include "planner.h"
 #include "filtermodels.h"
 #include "globe.h"
+#include "maintab.h"
 #ifndef NO_PRINTING
 #include <QPrintDialog>
 #include "printdialog.h"
@@ -84,7 +85,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), this, SLOT(readSettings()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), diveListView, SLOT(update()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), diveListView, SLOT(reloadHeaderActions()));
-	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.InfoWidget, SLOT(updateDiveInfo()));
+	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), information(), SLOT(updateDiveInfo()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.divePlannerWidget, SLOT(settingsChanged()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.plannerSettingsWidget, SLOT(settingsChanged()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), TankInfoModel::instance(), SLOT(update()));
@@ -117,7 +118,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	ui.globePane->hide();
 	ui.menuView->removeAction(ui.actionViewGlobe);
 #else
-	connect(globe(), SIGNAL(coordinatesChanged()), ui.InfoWidget, SLOT(updateGpsCoordinates()));
+	connect(globe(), SIGNAL(coordinatesChanged()), information(), SLOT(updateGpsCoordinates()));
 #endif
 #ifdef NO_USERMANUAL
 	ui.menuHelp->removeAction(ui.actionUserManual);
@@ -196,7 +197,7 @@ MainWindow *MainWindow::instance()
 void MainWindow::refreshDisplay(bool doRecreateDiveList)
 {
 	showError(get_error_string());
-	ui.InfoWidget->reload();
+	information()->reload();
 	TankInfoModel::instance()->update();
 	globe()->reload();
 	if (doRecreateDiveList)
@@ -229,7 +230,7 @@ void MainWindow::current_dive_changed(int divenr)
 		globe()->centerOnCurrentDive();
 	}
 	ui.newProfile->plotDive();
-	ui.InfoWidget->updateDiveInfo();
+	information()->updateDiveInfo();
 }
 
 void MainWindow::on_actionNew_triggered()
@@ -277,10 +278,10 @@ ProfileWidget2 *MainWindow::graphics() const
 
 void MainWindow::cleanUpEmpty()
 {
-	ui.InfoWidget->clearStats();
-	ui.InfoWidget->clearInfo();
-	ui.InfoWidget->clearEquipment();
-	ui.InfoWidget->updateDiveInfo(true);
+	information()->clearStats();
+	information()->clearInfo();
+	information()->clearEquipment();
+	information()->updateDiveInfo(true);
 	ui.newProfile->setEmptyState();
 	dive_list()->reload(DiveTripModel::TREE);
 	globe()->reload();
@@ -292,7 +293,7 @@ void MainWindow::cleanUpEmpty()
 bool MainWindow::okToClose(QString message)
 {
 	if (DivePlannerPointsModel::instance()->currentMode() != DivePlannerPointsModel::NOTHING ||
-	    ui.InfoWidget->isEditing()) {
+	    information()->isEditing()) {
 		QMessageBox::warning(this, tr("Warning"), message);
 		return false;
 	}
@@ -391,9 +392,9 @@ void MainWindow::on_actionPreferences_triggered()
 
 void MainWindow::on_actionQuit_triggered()
 {
-	if (ui.InfoWidget->isEditing()) {
-		ui.InfoWidget->rejectChanges();
-		if (ui.InfoWidget->isEditing())
+	if (information()->isEditing()) {
+		information()->rejectChanges();
+		if (information()->isEditing())
 			// didn't discard the edits
 			return;
 	}
@@ -439,7 +440,7 @@ void MainWindow::on_actionEditDeviceNames_triggered()
 bool MainWindow::plannerStateClean()
 {
 	if (DivePlannerPointsModel::instance()->currentMode() != DivePlannerPointsModel::NOTHING ||
-	    ui.InfoWidget->isEditing()) {
+	    information()->isEditing()) {
 		QMessageBox::warning(this, tr("Warning"), tr("Please save or cancel the current dive edit before trying to add a dive."));
 		return false;
 	}
@@ -469,7 +470,7 @@ void MainWindow::planCreated()
 		set_dive_nr_for_current_dive();
 	}
 	// make sure our UI is in a consistent state
-	ui.InfoWidget->updateDiveInfo();
+	information()->updateDiveInfo();
 	showProfile();
 	refreshDisplay();
 }
@@ -575,12 +576,12 @@ void MainWindow::on_actionAddDive_triggered()
 	setupForAddAndPlan("manually added dive"); // don't translate, stored in the XML file
 
 	// now show the mostly empty main tab
-	ui.InfoWidget->updateDiveInfo();
+	information()->updateDiveInfo();
 
 	// show main tab
-	ui.InfoWidget->setCurrentIndex(0);
+	information()->setCurrentIndex(0);
 
-	ui.InfoWidget->addDiveStarted();
+	information()->addDiveStarted();
 	ui.infoPane->setCurrentIndex(MAINTAB);
 
 	ui.newProfile->setAddState();
@@ -741,7 +742,7 @@ void MainWindow::on_actionPreviousDC_triggered()
 	unsigned nrdc = number_of_computers(current_dive);
 	dc_number = (dc_number + nrdc - 1) % nrdc;
 	ui.newProfile->plotDive();
-	ui.InfoWidget->updateDiveInfo();
+	information()->updateDiveInfo();
 }
 
 void MainWindow::on_actionNextDC_triggered()
@@ -749,7 +750,7 @@ void MainWindow::on_actionNextDC_triggered()
 	unsigned nrdc = number_of_computers(current_dive);
 	dc_number = (dc_number + 1) % nrdc;
 	ui.newProfile->plotDive();
-	ui.InfoWidget->updateDiveInfo();
+	information()->updateDiveInfo();
 }
 
 void MainWindow::on_actionFullScreen_triggered(bool checked)
@@ -983,7 +984,7 @@ void MainWindow::writeSettings()
 void MainWindow::closeEvent(QCloseEvent *event)
 {
 	if (DivePlannerPointsModel::instance()->currentMode() != DivePlannerPointsModel::NOTHING ||
-	    ui.InfoWidget->isEditing()) {
+	    information()->isEditing()) {
 		on_actionQuit_triggered();
 		event->ignore();
 		return;
@@ -1022,7 +1023,7 @@ GlobeGPS *MainWindow::globe()
 
 MainTab *MainWindow::information()
 {
-	return ui.InfoWidget;
+	return qobject_cast<MainTab*>(applicationState["Default"].topLeft);
 }
 
 void MainWindow::loadRecentFiles(QSettings *s)
@@ -1197,8 +1198,8 @@ int MainWindow::file_save_as(void)
 	if (filename.isNull() || filename.isEmpty())
 		return report_error("No filename to save into");
 
-	if (ui.InfoWidget->isEditing())
-		ui.InfoWidget->acceptChanges();
+	if (information()->isEditing())
+		information()->acceptChanges();
 
 	if (save_dives(filename.toUtf8().data())) {
 		showError(get_error_string());
@@ -1220,8 +1221,8 @@ int MainWindow::file_save(void)
 	if (!existing_filename)
 		return file_save_as();
 
-	if (ui.InfoWidget->isEditing())
-		ui.InfoWidget->acceptChanges();
+	if (information()->isEditing())
+		information()->acceptChanges();
 
 	current_default = prefs.default_filename;
 	if (strcmp(existing_filename, current_default) == 0) {
@@ -1389,7 +1390,7 @@ void MainWindow::editCurrentDive()
 		ui.newProfile->setAddState();
 		ui.infoPane->setCurrentIndex(MAINTAB);
 		DivePlannerPointsModel::instance()->loadFromDive(d);
-		ui.InfoWidget->enableEdition(MainTab::MANUALLY_ADDED_DIVE);
+		information()->enableEdition(MainTab::MANUALLY_ADDED_DIVE);
 	} else if (defaultDC == "planned dive") {
 		disableShortcuts();
 		DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
@@ -1399,7 +1400,7 @@ void MainWindow::editCurrentDive()
 		//ui.stackedWidget->setCurrentIndex(PLANNERPROFILE); // Planner.
 		ui.infoPane->setCurrentIndex(PLANNERWIDGET);
 		DivePlannerPointsModel::instance()->loadFromDive(d);
-		ui.InfoWidget->enableEdition(MainTab::MANUALLY_ADDED_DIVE);
+		information()->enableEdition(MainTab::MANUALLY_ADDED_DIVE);
 	}
 }
 
@@ -1474,7 +1475,7 @@ void MainWindow::on_paste_triggered()
 {
 	// take the data in our copyPasteDive and apply it to selected dives
 	selective_copy_dive(&copyPasteDive, &displayed_dive, what, false);
-	ui.InfoWidget->showAndTriggerEditSelective(what);
+	information()->showAndTriggerEditSelective(what);
 }
 
 void MainWindow::on_actionFilterTags_triggered()
diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui
index 220a31a..d722dff 100644
--- a/qt-ui/mainwindow.ui
+++ b/qt-ui/mainwindow.ui
@@ -36,9 +36,6 @@
           <property name="spacing">
            <number>0</number>
           </property>
-          <item>
-           <widget class="MainTab" name="InfoWidget" native="true"/>
-          </item>
          </layout>
         </widget>
         <widget class="QWidget" name="page_2">
@@ -810,12 +807,6 @@ p, li { white-space: pre-wrap; }
    <container>1</container>
   </customwidget>
   <customwidget>
-   <class>MainTab</class>
-   <extends>QWidget</extends>
-   <header>qt-ui/maintab.h</header>
-   <container>1</container>
-  </customwidget>
-  <customwidget>
    <class>DivePlannerWidget</class>
    <extends>QWidget</extends>
    <header>diveplanner.h</header>
diff --git a/qt-ui/modeldelegates.cpp b/qt-ui/modeldelegates.cpp
index d60b0ea..415cedb 100644
--- a/qt-ui/modeldelegates.cpp
+++ b/qt-ui/modeldelegates.cpp
@@ -3,8 +3,10 @@
 #include "gettextfromc.h"
 #include "mainwindow.h"
 #include "models.h"
+#include "starwidget.h"
 
 #include <QCompleter>
+#include <QKeyEvent>
 
 QSize DiveListDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
 {
diff --git a/qt-ui/profile/diveprofileitem.cpp b/qt-ui/profile/diveprofileitem.cpp
index c145616..7384e5a 100644
--- a/qt-ui/profile/diveprofileitem.cpp
+++ b/qt-ui/profile/diveprofileitem.cpp
@@ -9,6 +9,7 @@
 #include "helpers.h"
 #include "libdivecomputer/parser.h"
 #include "mainwindow.h"
+#include "maintab.h"
 
 #include <QSettings>
 
diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index 89ab62d..792ec10 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -10,7 +10,9 @@
 #include "ruleritem.h"
 #include "tankitem.h"
 #include "pref.h"
+#include "divepicturewidget.h"
 #include "models.h"
+#include "maintab.h"
 
 #include <libdivecomputer/parser.h>
 #include <QScrollBar>
@@ -18,6 +20,7 @@
 #include <QMessageBox>
 #include <QInputDialog>
 #include <QDebug>
+#include <QWheelEvent>
 
 #ifndef QT_NO_DEBUG
 #include <QTableView>
diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index 42f00fb..6d7ce67 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -5,6 +5,7 @@
 #include <QFileDialog>
 #include <QShortcut>
 #include <QCalendarWidget>
+#include <QKeyEvent>
 
 #include "file.h"
 #include "mainwindow.h"
diff --git a/qt-ui/subsurfacewebservices.cpp b/qt-ui/subsurfacewebservices.cpp
index de19253..04dde3a 100644
--- a/qt-ui/subsurfacewebservices.cpp
+++ b/qt-ui/subsurfacewebservices.cpp
@@ -4,6 +4,7 @@
 #include "usersurvey.h"
 #include "divelist.h"
 #include "globe.h"
+#include "maintab.h"
 
 #include <errno.h>
 
diff --git a/qt-ui/tagwidget.cpp b/qt-ui/tagwidget.cpp
index 8365a2e..3b61b49 100644
--- a/qt-ui/tagwidget.cpp
+++ b/qt-ui/tagwidget.cpp
@@ -1,5 +1,6 @@
 #include "tagwidget.h"
 #include "mainwindow.h"
+#include "maintab.h"
 #include <QCompleter>
 
 TagWidget::TagWidget(QWidget *parent) : GroupedLineEdit(parent), m_completer(NULL), lastFinishedTag(false)
-- 
2.3.0

From 8e7373a235ca1fa127e01ff8db89b2377ceaeed6 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 19:19:10 -0200
Subject: [PATCH 15/18] Removed the PlannerWidget from the mainwindow.ui

Now it uses the states on the mainwindow.cpp and it's finally
starting to worth the hassle of reworking the UI.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/mainwindow.cpp | 37 +++++++++++++++++++------------------
 qt-ui/mainwindow.h   |  2 ++
 qt-ui/mainwindow.ui  | 32 --------------------------------
 3 files changed, 21 insertions(+), 50 deletions(-)

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index a1f0da8..5a0fb78 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -62,7 +62,9 @@ MainWindow::MainWindow() : QMainWindow(),
 
 	registerApplicationState("Default", mainTab, diveListView, profileWidget, globeGps );
 	registerApplicationState("AddDive", mainTab, diveListView, profileWidget, globeGps );
+	registerApplicationState("EditDive", mainTab, diveListView, profileWidget, globeGps );
 	registerApplicationState("PlanDive", plannerWidget, plannerSettings, profileWidget, plannerDetails );
+	registerApplicationState("EditPlannedDive", plannerWidget, diveListView, profileWidget, globeGps );
 
 	ui.multiFilter->hide();
 	// what is a sane order for those icons? we should have the ones the user is
@@ -86,7 +88,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), diveListView, SLOT(update()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), diveListView, SLOT(reloadHeaderActions()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), information(), SLOT(updateDiveInfo()));
-	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.divePlannerWidget, SLOT(settingsChanged()));
+	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), divePlannerWidget(), SLOT(settingsChanged()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.plannerSettingsWidget, SLOT(settingsChanged()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), TankInfoModel::instance(), SLOT(update()));
 	connect(ui.actionRecent1, SIGNAL(triggered(bool)), this, SLOT(recentFileTriggered(bool)));
@@ -96,7 +98,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	connect(information(), SIGNAL(addDiveFinished()), ui.newProfile, SLOT(setProfileState()));
 	connect(DivePlannerPointsModel::instance(), SIGNAL(planCreated()), this, SLOT(planCreated()));
 	connect(DivePlannerPointsModel::instance(), SIGNAL(planCanceled()), this, SLOT(planCanceled()));
-	connect(ui.printPlan, SIGNAL(pressed()), ui.divePlannerWidget, SLOT(printDecoPlan()));
+	connect(ui.printPlan, SIGNAL(pressed()), divePlannerWidget(), SLOT(printDecoPlan()));
 #ifdef NO_PRINTING
 	ui.printPlan->hide();
 	ui.menuFile->removeAction(ui.actionPrint);
@@ -112,7 +114,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	globe()->reload();
 	diveListView->expand(dive_list()->model()->index(0, 0));
 	diveListView->scrollTo(dive_list()->model()->index(0, 0), QAbstractItemView::PositionAtCenter);
-	ui.divePlannerWidget->settingsChanged();
+	divePlannerWidget()->settingsChanged();
 	ui.plannerSettingsWidget->settingsChanged();
 #ifdef NO_MARBLE
 	ui.globePane->hide();
@@ -382,7 +384,7 @@ void MainWindow::showProfile()
 {
 	enableShortcuts();
 	ui.newProfile->setProfileState();
-	ui.infoPane->setCurrentIndex(MAINTAB);
+	setApplicationState("Default");
 }
 
 void MainWindow::on_actionPreferences_triggered()
@@ -524,8 +526,8 @@ void MainWindow::on_actionReplanDive_triggered()
 
 	ui.newProfile->setPlanState();
 	ui.newProfile->clearHandlers();
-	ui.infoPane->setCurrentIndex(PLANNERWIDGET);
-	ui.divePlannerWidget->setReplanButton(true);
+	setApplicationState("PlanDive");
+	divePlannerWidget()->setReplanButton(true);
 	DivePlannerPointsModel::instance()->loadFromDive(current_dive);
 	reset_cylinders(&displayed_dive, true);
 	ui.diveListPane->setCurrentIndex(1); // switch to the plan output
@@ -542,16 +544,16 @@ void MainWindow::on_actionDivePlanner_triggered()
 
 	// put us in PLAN mode
 	DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
+	setApplicationState("PlanDive");
 
 	ui.newProfile->setPlanState();
-	ui.infoPane->setCurrentIndex(PLANNERWIDGET);
 
 	// create a simple starting dive, using the first gas from the just copied cylidners
 	setupForAddAndPlan("planned dive"); // don't translate, stored in XML file
 	DivePlannerPointsModel::instance()->setupStartTime();
 	DivePlannerPointsModel::instance()->createSimpleDive();
 	DivePictureModel::instance()->updateDivePictures();
-	ui.divePlannerWidget->setReplanButton(false);
+	divePlannerWidget()->setReplanButton(false);
 
 	ui.diveListPane->setCurrentIndex(1); // switch to the plan output
 	ui.globePane->setCurrentIndex(1);
@@ -560,6 +562,10 @@ void MainWindow::on_actionDivePlanner_triggered()
 #endif
 }
 
+DivePlannerWidget* MainWindow::divePlannerWidget() {
+	return qobject_cast<DivePlannerWidget*>(applicationState["PlanDive"].topLeft);
+}
+
 void MainWindow::on_actionAddDive_triggered()
 {
 	if (!plannerStateClean())
@@ -570,6 +576,7 @@ void MainWindow::on_actionAddDive_triggered()
 		dive_list()->clearSelection();
 	}
 
+	setApplicationState("AddDive");
 	DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::ADD);
 
 	// setup things so we can later create our starting dive
@@ -582,7 +589,6 @@ void MainWindow::on_actionAddDive_triggered()
 	information()->setCurrentIndex(0);
 
 	information()->addDiveStarted();
-	ui.infoPane->setCurrentIndex(MAINTAB);
 
 	ui.newProfile->setAddState();
 	DivePlannerPointsModel::instance()->createSimpleDive();
@@ -1388,17 +1394,13 @@ void MainWindow::editCurrentDive()
 		disableShortcuts();
 		DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::ADD);
 		ui.newProfile->setAddState();
-		ui.infoPane->setCurrentIndex(MAINTAB);
+		setApplicationState("EditDive");
 		DivePlannerPointsModel::instance()->loadFromDive(d);
 		information()->enableEdition(MainTab::MANUALLY_ADDED_DIVE);
 	} else if (defaultDC == "planned dive") {
 		disableShortcuts();
 		DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
-		//TODO: I BROKE THIS BY COMMENTING THE LINE BELOW
-		// and I'm sleepy now, so I think I should not try to fix right away.
-		// we don't setCurrentIndex anymore, we ->setPlanState() or ->setAddState() on the ProfileView.
-		//ui.stackedWidget->setCurrentIndex(PLANNERPROFILE); // Planner.
-		ui.infoPane->setCurrentIndex(PLANNERWIDGET);
+		setApplicationState("EditPlannedDive");
 		DivePlannerPointsModel::instance()->loadFromDive(d);
 		information()->enableEdition(MainTab::MANUALLY_ADDED_DIVE);
 	}
@@ -1496,16 +1498,15 @@ void MainWindow::setApplicationState(const QByteArray& state) {
 		return;
 
 	// yes, index is zero both times. please don't change it.
-	if (ui.topSplitter->count()) {
+	if (ui.topSplitter->count() >= 2) {
 		ui.topSplitter->widget(0)->setParent(NULL);
 		ui.topSplitter->widget(0)->setParent(NULL);
 	}
-	if (ui.bottomSplitter->count()) {
+	if (ui.bottomSplitter->count() >= 2) {
 		ui.bottomSplitter->widget(0)->setParent(NULL);
 		ui.bottomSplitter->widget(0)->setParent(NULL);
 	}
 
-
 	WidgetForBorder curr = applicationState[state];
 	ui.topSplitter->addWidget(curr.topLeft);
 	ui.topSplitter->addWidget(curr.topRight);
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index f8de798..a8f3b7f 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -30,6 +30,7 @@ class QWebView;
 class QSettings;
 class UpdateManager;
 class UserManual;
+class DivePlannerWidget;
 
 enum MainWindowTitleFormat {
 	MWTF_DEFAULT,
@@ -71,6 +72,7 @@ public:
 	void removeRecentFile(QStringList failedFiles);
 	DiveListView *dive_list();
 	GlobeGPS *globe();
+	DivePlannerWidget *divePlannerWidget();
 	void showError(QString message);
 	void setTitle(enum MainWindowTitleFormat format);
 
diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui
index d722dff..f148448 100644
--- a/qt-ui/mainwindow.ui
+++ b/qt-ui/mainwindow.ui
@@ -27,32 +27,6 @@
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
-       <widget class="QStackedWidget" name="infoPane">
-        <property name="currentIndex">
-         <number>0</number>
-        </property>
-        <widget class="QWidget" name="page">
-         <layout class="QHBoxLayout" name="mainTabOuterLayout">
-          <property name="spacing">
-           <number>0</number>
-          </property>
-         </layout>
-        </widget>
-        <widget class="QWidget" name="page_2">
-         <property name="enabled">
-          <bool>true</bool>
-         </property>
-         <layout class="QHBoxLayout" name="divePlannerLayout">
-          <item>
-           <widget class="DivePlannerWidget" name="divePlannerWidget" native="true">
-            <property name="enabled">
-             <bool>true</bool>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-       </widget>
        <widget class="QWidget" name="ProfileWidget">
         <layout class="QGridLayout" name="profileInnerLayout">
          <item row="0" column="0" rowspan="3">
@@ -807,12 +781,6 @@ p, li { white-space: pre-wrap; }
    <container>1</container>
   </customwidget>
   <customwidget>
-   <class>DivePlannerWidget</class>
-   <extends>QWidget</extends>
-   <header>diveplanner.h</header>
-   <container>1</container>
-  </customwidget>
-  <customwidget>
    <class>ProfileWidget2</class>
    <extends>QGraphicsView</extends>
    <header>qt-ui/profile/profilewidget2.h</header>
-- 
2.3.0

From d15fb5879fe15ac31e4443c43aa3231ddaafb64e Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 19:51:31 -0200
Subject: [PATCH 16/18] Removed ProfileWidget from mainwindow.ui

moved it to mainwindo.cpp

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 main.cpp                              |  1 +
 qt-ui/configuredivecomputerdialog.cpp |  2 ++
 qt-ui/divelistview.cpp                |  1 +
 qt-ui/divelogimportdialog.cpp         |  1 +
 qt-ui/diveplanner.cpp                 |  1 +
 qt-ui/downloadfromdivecomputer.cpp    |  2 ++
 qt-ui/filtermodels.cpp                |  1 +
 qt-ui/globe.cpp                       |  1 +
 qt-ui/maintab.cpp                     |  2 ++
 qt-ui/mainwindow.cpp                  | 49 ++++++++++++++++++-----------------
 qt-ui/mainwindow.h                    |  1 +
 qt-ui/mainwindow.ui                   | 12 ---------
 qt-ui/modeldelegates.cpp              |  1 +
 qt-ui/models.cpp                      |  1 +
 qt-ui/printlayout.cpp                 |  1 +
 qt-ui/profile/divecartesianaxis.cpp   |  2 ++
 qt-ui/profile/diveprofileitem.cpp     |  1 +
 qt-ui/profile/divetextitem.cpp        |  1 +
 qt-ui/profile/ruleritem.cpp           |  2 ++
 qt-ui/simplewidgets.cpp               |  3 ++-
 qt-ui/subsurfacewebservices.cpp       |  2 +-
 21 files changed, 50 insertions(+), 38 deletions(-)

diff --git a/main.cpp b/main.cpp
index 295b9bd..bc74192 100644
--- a/main.cpp
+++ b/main.cpp
@@ -10,6 +10,7 @@
 #include "subsurfacestartup.h"
 #include "qt-ui/mainwindow.h"
 #include "qt-ui/diveplanner.h"
+#include "qt-ui/graphicsview-common.h"
 
 #include <QStringList>
 #include <git2.h>
diff --git a/qt-ui/configuredivecomputerdialog.cpp b/qt-ui/configuredivecomputerdialog.cpp
index 95bc0f8..172a1a4 100644
--- a/qt-ui/configuredivecomputerdialog.cpp
+++ b/qt-ui/configuredivecomputerdialog.cpp
@@ -2,6 +2,8 @@
 
 #include "helpers.h"
 #include "mainwindow.h"
+#include "display.h"
+
 #include <QFileDialog>
 #include <QMessageBox>
 #include <QSettings>
diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp
index af63c4d..8cbdd83 100644
--- a/qt-ui/divelistview.cpp
+++ b/qt-ui/divelistview.cpp
@@ -9,6 +9,7 @@
 #include "modeldelegates.h"
 #include "mainwindow.h"
 #include "divepicturewidget.h"
+#include "display.h"
 #include <QSettings>
 #include <QKeyEvent>
 #include <QFileDialog>
diff --git a/qt-ui/divelogimportdialog.cpp b/qt-ui/divelogimportdialog.cpp
index bb4701c..ce12ef7 100644
--- a/qt-ui/divelogimportdialog.cpp
+++ b/qt-ui/divelogimportdialog.cpp
@@ -1,5 +1,6 @@
 #include "divelogimportdialog.h"
 #include "mainwindow.h"
+#include "color.h"
 #include "ui_divelogimportdialog.h"
 #include <QShortcut>
 #include <QDrag>
diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp
index 6741d9c..f535a6a 100644
--- a/qt-ui/diveplanner.cpp
+++ b/qt-ui/diveplanner.cpp
@@ -4,6 +4,7 @@
 #include "planner.h"
 #include "helpers.h"
 #include "models.h"
+#include "profile/profilewidget2.h"
 
 #include <QGraphicsSceneMouseEvent>
 #include <QMessageBox>
diff --git a/qt-ui/downloadfromdivecomputer.cpp b/qt-ui/downloadfromdivecomputer.cpp
index 14ba7f2..456c7e2 100644
--- a/qt-ui/downloadfromdivecomputer.cpp
+++ b/qt-ui/downloadfromdivecomputer.cpp
@@ -2,6 +2,8 @@
 #include "helpers.h"
 #include "mainwindow.h"
 #include "divelistview.h"
+#include "display.h"
+
 #include <QTimer>
 #include <QFileDialog>
 #include <QMessageBox>
diff --git a/qt-ui/filtermodels.cpp b/qt-ui/filtermodels.cpp
index 3585065..378f467 100644
--- a/qt-ui/filtermodels.cpp
+++ b/qt-ui/filtermodels.cpp
@@ -2,6 +2,7 @@
 #include "mainwindow.h"
 #include "models.h"
 #include "divelistview.h"
+#include "display.h"
 
 #define CREATE_INSTANCE_METHOD( CLASS ) \
 CLASS *CLASS::instance() \
diff --git a/qt-ui/globe.cpp b/qt-ui/globe.cpp
index a8586eb..cda408d 100644
--- a/qt-ui/globe.cpp
+++ b/qt-ui/globe.cpp
@@ -4,6 +4,7 @@
 #include "helpers.h"
 #include "divelistview.h"
 #include "maintab.h"
+#include "display.h"
 
 #include <QTimer>
 #include <QContextMenuEvent>
diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp
index baaa9f8..978e131 100644
--- a/qt-ui/maintab.cpp
+++ b/qt-ui/maintab.cpp
@@ -12,6 +12,8 @@
 #include "modeldelegates.h"
 #include "models.h"
 #include "divelistview.h"
+#include "display.h"
+#include "profile/profilewidget2.h"
 
 #if defined(FBSUPPORT)
 #include "socialnetworks.h"
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 5a0fb78..2f05f13 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -21,6 +21,7 @@
 #include "updatemanager.h"
 #include "planner.h"
 #include "filtermodels.h"
+#include "profile/profilewidget2.h"
 #include "globe.h"
 #include "maintab.h"
 #ifndef NO_PRINTING
@@ -95,7 +96,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	connect(ui.actionRecent2, SIGNAL(triggered(bool)), this, SLOT(recentFileTriggered(bool)));
 	connect(ui.actionRecent3, SIGNAL(triggered(bool)), this, SLOT(recentFileTriggered(bool)));
 	connect(ui.actionRecent4, SIGNAL(triggered(bool)), this, SLOT(recentFileTriggered(bool)));
-	connect(information(), SIGNAL(addDiveFinished()), ui.newProfile, SLOT(setProfileState()));
+	connect(information(), SIGNAL(addDiveFinished()), graphics(), SLOT(setProfileState()));
 	connect(DivePlannerPointsModel::instance(), SIGNAL(planCreated()), this, SLOT(planCreated()));
 	connect(DivePlannerPointsModel::instance(), SIGNAL(planCanceled()), this, SLOT(planCanceled()));
 	connect(ui.printPlan, SIGNAL(pressed()), divePlannerWidget(), SLOT(printDecoPlan()));
@@ -105,7 +106,7 @@ MainWindow::MainWindow() : QMainWindow(),
 #endif
 
 	ui.mainErrorMessage->hide();
-	ui.newProfile->setEmptyState();
+	graphics()->setEmptyState();
 	initialUiSetup();
 	readSettings();
 	diveListView->reload(DiveTripModel::TREE);
@@ -137,9 +138,12 @@ MainWindow::MainWindow() : QMainWindow(),
 	// has no concept of "toolbar" for a non-mainwindow widget (...)
 	// I need to take the current item that's in the toolbar Position
 	// and reposition it alongside the grid layout.
-	QLayoutItem *p = ui.profileInnerLayout->takeAt(0);
-	ui.profileInnerLayout->addWidget(toolBar, 0, 0);
-	ui.profileInnerLayout->addItem(p, 0, 1);
+	// TODO: FIX THIS
+	// QLayoutItem *p = ui.profileInnerLayout->takeAt(0);
+	// ui.profileInnerLayout->addWidget(toolBar, 0, 0);
+	// ui.profileInnerLayout->addItem(p, 0, 1);
+	// ui.profileInnerLayout->setContentsMargins(QMargins(0, 5, 5, 5));
+	// ui.profileInnerLayout->setSpacing(0);
 
 	// and now for some layout hackery
 	// this gets us consistent margins everywhere and a much more balanced look
@@ -166,9 +170,6 @@ MainWindow::MainWindow() : QMainWindow(),
 		else
 			layout->setContentsMargins(margins);
 	}
-	margins = QMargins(0, 5, 5, 5);
-	ui.profileInnerLayout->setContentsMargins(margins);
-	ui.profileInnerLayout->setSpacing(0);
 	toolBar->setContentsMargins(zeroMargins);
 
 	updateManager = new UpdateManager(this);
@@ -231,7 +232,7 @@ void MainWindow::current_dive_changed(int divenr)
 		select_dive(divenr);
 		globe()->centerOnCurrentDive();
 	}
-	ui.newProfile->plotDive();
+	graphics()->plotDive();
 	information()->updateDiveInfo();
 }
 
@@ -275,7 +276,7 @@ void MainWindow::on_actionSaveAs_triggered()
 
 ProfileWidget2 *MainWindow::graphics() const
 {
-	return ui.newProfile;
+	return qobject_cast<ProfileWidget2*>(applicationState["Default"].topRight);
 }
 
 void MainWindow::cleanUpEmpty()
@@ -284,7 +285,7 @@ void MainWindow::cleanUpEmpty()
 	information()->clearInfo();
 	information()->clearEquipment();
 	information()->updateDiveInfo(true);
-	ui.newProfile->setEmptyState();
+	graphics()->setEmptyState();
 	dive_list()->reload(DiveTripModel::TREE);
 	globe()->reload();
 	if (!existing_filename)
@@ -307,7 +308,7 @@ bool MainWindow::okToClose(QString message)
 
 void MainWindow::closeCurrentFile()
 {
-	ui.newProfile->setEmptyState();
+	graphics()->setEmptyState();
 	/* free the dives and trips */
 	clear_git_id();
 	while (dive_table.nr)
@@ -383,7 +384,7 @@ void MainWindow::enableShortcuts()
 void MainWindow::showProfile()
 {
 	enableShortcuts();
-	ui.newProfile->setProfileState();
+	graphics()->setProfileState();
 	setApplicationState("Default");
 }
 
@@ -454,16 +455,16 @@ void MainWindow::planCanceled()
 	// while planning we might have modified the displayed_dive
 	// let's refresh what's shown on the profile
 	showProfile();
-	ui.newProfile->replot();
+	graphics()->replot();
 	refreshDisplay(false);
-	ui.newProfile->plotDive(get_dive(selected_dive));
+	graphics()->plotDive(get_dive(selected_dive));
 	DivePictureModel::instance()->updateDivePictures();
 }
 
 void MainWindow::planCreated()
 {
 	// get the new dive selected and assign a number if reasonable
-	ui.newProfile->setProfileState();
+	graphics()->setProfileState();
 	if (displayed_dive.id == 0) {
 		// we might have added a new dive (so displayed_dive was cleared out by clone_dive()
 		dive_list()->unselectDives();
@@ -524,8 +525,8 @@ void MainWindow::on_actionReplanDive_triggered()
 	DivePlannerPointsModel::instance()->clear();
 	DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
 
-	ui.newProfile->setPlanState();
-	ui.newProfile->clearHandlers();
+	graphics()->setPlanState();
+	graphics()->clearHandlers();
 	setApplicationState("PlanDive");
 	divePlannerWidget()->setReplanButton(true);
 	DivePlannerPointsModel::instance()->loadFromDive(current_dive);
@@ -546,7 +547,7 @@ void MainWindow::on_actionDivePlanner_triggered()
 	DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
 	setApplicationState("PlanDive");
 
-	ui.newProfile->setPlanState();
+	graphics()->setPlanState();
 
 	// create a simple starting dive, using the first gas from the just copied cylidners
 	setupForAddAndPlan("planned dive"); // don't translate, stored in XML file
@@ -590,9 +591,9 @@ void MainWindow::on_actionAddDive_triggered()
 
 	information()->addDiveStarted();
 
-	ui.newProfile->setAddState();
+	graphics()->setAddState();
 	DivePlannerPointsModel::instance()->createSimpleDive();
-	ui.newProfile->plotDive();
+	graphics()->plotDive();
 }
 
 void MainWindow::on_actionRenumber_triggered()
@@ -747,7 +748,7 @@ void MainWindow::on_actionPreviousDC_triggered()
 {
 	unsigned nrdc = number_of_computers(current_dive);
 	dc_number = (dc_number + nrdc - 1) % nrdc;
-	ui.newProfile->plotDive();
+	graphics()->plotDive();
 	information()->updateDiveInfo();
 }
 
@@ -755,7 +756,7 @@ void MainWindow::on_actionNextDC_triggered()
 {
 	unsigned nrdc = number_of_computers(current_dive);
 	dc_number = (dc_number + 1) % nrdc;
-	ui.newProfile->plotDive();
+	graphics()->plotDive();
 	information()->updateDiveInfo();
 }
 
@@ -1393,7 +1394,7 @@ void MainWindow::editCurrentDive()
 	if (defaultDC == "manually added dive") {
 		disableShortcuts();
 		DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::ADD);
-		ui.newProfile->setAddState();
+		graphics()->setAddState();
 		setApplicationState("EditDive");
 		DivePlannerPointsModel::instance()->loadFromDive(d);
 		information()->enableEdition(MainTab::MANUALLY_ADDED_DIVE);
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index a8f3b7f..43a617b 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -31,6 +31,7 @@ class QSettings;
 class UpdateManager;
 class UserManual;
 class DivePlannerWidget;
+class ProfileWidget2;
 
 enum MainWindowTitleFormat {
 	MWTF_DEFAULT,
diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui
index f148448..ef5d10e 100644
--- a/qt-ui/mainwindow.ui
+++ b/qt-ui/mainwindow.ui
@@ -27,13 +27,6 @@
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
-       <widget class="QWidget" name="ProfileWidget">
-        <layout class="QGridLayout" name="profileInnerLayout">
-         <item row="0" column="0" rowspan="3">
-          <widget class="ProfileWidget2" name="newProfile"/>
-         </item>
-        </layout>
-       </widget>
       </widget>
       <widget class="QSplitter" name="bottomSplitter">
        <property name="orientation">
@@ -781,11 +774,6 @@ p, li { white-space: pre-wrap; }
    <container>1</container>
   </customwidget>
   <customwidget>
-   <class>ProfileWidget2</class>
-   <extends>QGraphicsView</extends>
-   <header>qt-ui/profile/profilewidget2.h</header>
-  </customwidget>
-  <customwidget>
    <class>PlannerSettingsWidget</class>
    <extends>QWidget</extends>
    <header>diveplanner.h</header>
diff --git a/qt-ui/modeldelegates.cpp b/qt-ui/modeldelegates.cpp
index 415cedb..d8776d0 100644
--- a/qt-ui/modeldelegates.cpp
+++ b/qt-ui/modeldelegates.cpp
@@ -4,6 +4,7 @@
 #include "mainwindow.h"
 #include "models.h"
 #include "starwidget.h"
+#include "profile/profilewidget2.h"
 
 #include <QCompleter>
 #include <QKeyEvent>
diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
index f0c15d4..ac2f7d8 100644
--- a/qt-ui/models.cpp
+++ b/qt-ui/models.cpp
@@ -14,6 +14,7 @@
 #include "qthelper.h"
 #include "gettextfromc.h"
 #include "display.h"
+#include "color.h"
 
 #include <QCoreApplication>
 #include <QDebug>
diff --git a/qt-ui/printlayout.cpp b/qt-ui/printlayout.cpp
index eef5144..aa3ef95 100644
--- a/qt-ui/printlayout.cpp
+++ b/qt-ui/printlayout.cpp
@@ -9,6 +9,7 @@
 #include "printlayout.h"
 #include "modeldelegates.h"
 #include "models.h"
+#include "profile/profilewidget2.h"
 
 PrintLayout::PrintLayout(PrintDialog *dialogPtr, QPrinter *printerPtr, struct print_options *optionsPtr)
 {
diff --git a/qt-ui/profile/divecartesianaxis.cpp b/qt-ui/profile/divecartesianaxis.cpp
index 467a8b9..41d94a9 100644
--- a/qt-ui/profile/divecartesianaxis.cpp
+++ b/qt-ui/profile/divecartesianaxis.cpp
@@ -5,6 +5,8 @@
 #include "diveplotdatamodel.h"
 #include "animationfunctions.h"
 #include "mainwindow.h"
+#include "divelineitem.h"
+#include "profilewidget2.h"
 
 static QPen gridPen()
 {
diff --git a/qt-ui/profile/diveprofileitem.cpp b/qt-ui/profile/diveprofileitem.cpp
index 7384e5a..2878049 100644
--- a/qt-ui/profile/diveprofileitem.cpp
+++ b/qt-ui/profile/diveprofileitem.cpp
@@ -10,6 +10,7 @@
 #include "libdivecomputer/parser.h"
 #include "mainwindow.h"
 #include "maintab.h"
+#include "profile/profilewidget2.h"
 
 #include <QSettings>
 
diff --git a/qt-ui/profile/divetextitem.cpp b/qt-ui/profile/divetextitem.cpp
index 85e0466..4c01371 100644
--- a/qt-ui/profile/divetextitem.cpp
+++ b/qt-ui/profile/divetextitem.cpp
@@ -1,5 +1,6 @@
 #include "divetextitem.h"
 #include "mainwindow.h"
+#include "profilewidget2.h"
 
 DiveTextItem::DiveTextItem(QGraphicsItem *parent) : QGraphicsItemGroup(parent),
 	internalAlignFlags(Qt::AlignHCenter | Qt::AlignVCenter),
diff --git a/qt-ui/profile/ruleritem.cpp b/qt-ui/profile/ruleritem.cpp
index c88a335..ddd8f46 100644
--- a/qt-ui/profile/ruleritem.cpp
+++ b/qt-ui/profile/ruleritem.cpp
@@ -1,6 +1,8 @@
 #include "ruleritem.h"
 #include "preferences.h"
 #include "mainwindow.h"
+#include "profilewidget2.h"
+#include "display.h"
 
 #include <qgraphicssceneevent.h>
 
diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index 6d7ce67..5c08a3f 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -12,6 +12,8 @@
 #include "helpers.h"
 #include "libdivecomputer/parser.h"
 #include "divelistview.h"
+#include "display.h"
+#include "profile/profilewidget2.h"
 
 class MinMaxAvgWidgetPrivate {
 public:
@@ -170,7 +172,6 @@ void SetpointDialog::buttonClicked(QAbstractButton *button)
 		add_event(dc, time, SAMPLE_EVENT_PO2, 0, (int)(1000.0 * ui.spinbox->value()), "SP change");
 	mark_divelist_changed(true);
 	MainWindow::instance()->graphics()->replot();
-
 }
 
 SetpointDialog::SetpointDialog(QWidget *parent) : QDialog(parent)
diff --git a/qt-ui/subsurfacewebservices.cpp b/qt-ui/subsurfacewebservices.cpp
index 04dde3a..72e7e3d 100644
--- a/qt-ui/subsurfacewebservices.cpp
+++ b/qt-ui/subsurfacewebservices.cpp
@@ -5,7 +5,7 @@
 #include "divelist.h"
 #include "globe.h"
 #include "maintab.h"
-
+#include "display.h"
 #include <errno.h>
 
 #include <QDir>
-- 
2.3.0

From b162f281c4782c9c4ee9f22c456130ad97b9e8ad Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 20:14:08 -0200
Subject: [PATCH 17/18] Moved the Profile out of the mainwindow.ui

And placed it on mainwindow.cpp

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/diveplanner.h  |  3 ++
 qt-ui/mainwindow.cpp | 25 +++++++-------
 qt-ui/mainwindow.h   |  1 +
 qt-ui/mainwindow.ui  | 92 ----------------------------------------------------
 4 files changed, 17 insertions(+), 104 deletions(-)

diff --git a/qt-ui/diveplanner.h b/qt-ui/diveplanner.h
index 49fd43f..196e175 100644
--- a/qt-ui/diveplanner.h
+++ b/qt-ui/diveplanner.h
@@ -192,6 +192,9 @@ class PlannerDetails : public QWidget {
 	Q_OBJECT
 public:
 	explicit PlannerDetails(QWidget *parent = 0);
+	QPushButton *printPlan() const { return ui.printPlan; }
+	QTextEdit *divePlanOutput() const { return ui.divePlanOutput; }
+
 private:
 	Ui::plannerDetails ui;
 };
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 2f05f13..ae6209d 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -66,6 +66,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	registerApplicationState("EditDive", mainTab, diveListView, profileWidget, globeGps );
 	registerApplicationState("PlanDive", plannerWidget, plannerSettings, profileWidget, plannerDetails );
 	registerApplicationState("EditPlannedDive", plannerWidget, diveListView, profileWidget, globeGps );
+	setApplicationState("Default");
 
 	ui.multiFilter->hide();
 	// what is a sane order for those icons? we should have the ones the user is
@@ -99,7 +100,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	connect(information(), SIGNAL(addDiveFinished()), graphics(), SLOT(setProfileState()));
 	connect(DivePlannerPointsModel::instance(), SIGNAL(planCreated()), this, SLOT(planCreated()));
 	connect(DivePlannerPointsModel::instance(), SIGNAL(planCanceled()), this, SLOT(planCanceled()));
-	connect(ui.printPlan, SIGNAL(pressed()), divePlannerWidget(), SLOT(printDecoPlan()));
+	connect(plannerDetails->printPlan(), SIGNAL(pressed()), divePlannerWidget(), SLOT(printDecoPlan()));
 #ifdef NO_PRINTING
 	ui.printPlan->hide();
 	ui.menuFile->removeAction(ui.actionPrint);
@@ -173,7 +174,6 @@ MainWindow::MainWindow() : QMainWindow(),
 	toolBar->setContentsMargins(zeroMargins);
 
 	updateManager = new UpdateManager(this);
-	setApplicationState("Default");
 }
 
 MainWindow::~MainWindow()
@@ -181,6 +181,10 @@ MainWindow::~MainWindow()
 	m_Instance = NULL;
 }
 
+PlannerDetails *MainWindow::plannerDetails() const {
+	return qobject_cast<PlannerDetails*>(applicationState["PlanDive"].bottomRight);
+}
+
 void MainWindow::setLoadedWithFiles(bool f)
 {
 	filesAsArguments = f;
@@ -209,7 +213,8 @@ void MainWindow::refreshDisplay(bool doRecreateDiveList)
 #ifdef NO_MARBLE
 	ui.globePane->hide();
 #endif
-	ui.globePane->setCurrentIndex(0);
+
+	setApplicationState("Default");
 	dive_list()->setEnabled(true);
 	dive_list()->setFocus();
 	WSInfoModel::instance()->updateInfo();
@@ -480,13 +485,13 @@ void MainWindow::planCreated()
 
 void MainWindow::setPlanNotes(const char *notes)
 {
-	ui.divePlanOutput->setHtml(notes);
+	plannerDetails()->divePlanOutput()->setHtml(notes);
 }
 
 void MainWindow::printPlan()
 {
 #ifndef NO_PRINTING
-	QString diveplan = ui.divePlanOutput->toHtml();
+	QString diveplan = plannerDetails()->divePlanOutput()->toHtml();
 	QString withDisclaimer = QString("<img height=50 src=\":subsurface-icon\"> ") + diveplan + QString(disclaimer);
 
 	QPrinter printer;
@@ -495,9 +500,9 @@ void MainWindow::printPlan()
 	if (dialog->exec() != QDialog::Accepted)
 		return;
 
-	ui.divePlanOutput->setHtml(withDisclaimer);
-	ui.divePlanOutput->print(&printer);
-	ui.divePlanOutput->setHtml(diveplan);
+	plannerDetails()->divePlanOutput()->setHtml(withDisclaimer);
+	plannerDetails()->divePlanOutput()->print(&printer);
+	plannerDetails()->divePlanOutput()->setHtml(diveplan);
 #endif
 }
 
@@ -531,8 +536,6 @@ void MainWindow::on_actionReplanDive_triggered()
 	divePlannerWidget()->setReplanButton(true);
 	DivePlannerPointsModel::instance()->loadFromDive(current_dive);
 	reset_cylinders(&displayed_dive, true);
-	ui.diveListPane->setCurrentIndex(1); // switch to the plan output
-	ui.globePane->setCurrentIndex(1);
 #ifdef NO_MARBLE
 	ui.globePane->show();
 #endif
@@ -556,8 +559,6 @@ void MainWindow::on_actionDivePlanner_triggered()
 	DivePictureModel::instance()->updateDivePictures();
 	divePlannerWidget()->setReplanButton(false);
 
-	ui.diveListPane->setCurrentIndex(1); // switch to the plan output
-	ui.globePane->setCurrentIndex(1);
 #ifdef NO_MARBLE
 	ui.globePane->show();
 #endif
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index 43a617b..0b714e8 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -87,6 +87,7 @@ public:
 	void cleanUpEmpty();
 	void setToolButtonsEnabled(bool enabled);
 	ProfileWidget2 *graphics() const;
+	PlannerDetails *plannerDetails() const;
 	void setLoadedWithFiles(bool filesFromCommandLine);
 	bool filesFromCommandLine() const;
 	void setPlanNotes(const char *notes);
diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui
index ef5d10e..6db52b5 100644
--- a/qt-ui/mainwindow.ui
+++ b/qt-ui/mainwindow.ui
@@ -41,98 +41,6 @@
         </widget>
         <widget class="PlannerSettingsWidget" name="plannerSettingsWidget"/>
        </widget>
-       <widget class="QStackedWidget" name="globePane">
-        <property name="currentIndex">
-         <number>0</number>
-        </property>
-        <widget class="QWidget" name="stackedWidgetPage1">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <layout class="QVBoxLayout" name="globeLayout"/>
-        </widget>
-        <widget class="QWidget" name="page_5">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <layout class="QVBoxLayout" name="verticalLayout_3">
-          <item>
-           <layout class="QHBoxLayout" name="divePlanLayout">
-            <item>
-             <widget class="QLabel" name="divePlanOutputLabel">
-              <property name="maximumSize">
-               <size>
-                <width>16777215</width>
-                <height>20</height>
-               </size>
-              </property>
-              <property name="text">
-               <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Dive plan details&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-              </property>
-              <property name="textFormat">
-               <enum>Qt::RichText</enum>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QPushButton" name="printPlan">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="text">
-               <string>Print</string>
-              </property>
-              <property name="autoDefault">
-               <bool>false</bool>
-              </property>
-              <property name="default">
-               <bool>false</bool>
-              </property>
-              <property name="flat">
-               <bool>false</bool>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item>
-           <widget class="QTextEdit" name="divePlanOutput">
-            <property name="enabled">
-             <bool>true</bool>
-            </property>
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-            <property name="styleSheet">
-             <string notr="true">font: 13pt &quot;Courier&quot;;</string>
-            </property>
-            <property name="readOnly">
-             <bool>true</bool>
-            </property>
-            <property name="html">
-             <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Courier'; font-size:13pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'.Curier New';&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-       </widget>
       </widget>
      </widget>
     </item>
-- 
2.3.0

From d124e5f9f75e49b0bdb6b0bd6003ec13c20e9b16 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Mon, 9 Feb 2015 20:37:17 -0200
Subject: [PATCH 18/18] Finished the cleanup of mainwindow.ui

This is the last patch in the series of clearing up the
mainwindo.ui. Now to bugfixing.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/maintab.cpp                 |  1 +
 qt-ui/mainwindow.cpp              | 10 +++++++---
 qt-ui/mainwindow.h                |  4 ++++
 qt-ui/mainwindow.ui               | 15 ---------------
 qt-ui/modeldelegates.cpp          |  1 +
 qt-ui/printlayout.cpp             |  1 +
 qt-ui/profile/diveprofileitem.cpp |  1 +
 qt-ui/profile/profilewidget2.cpp  |  1 +
 8 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp
index 978e131..7e61341 100644
--- a/qt-ui/maintab.cpp
+++ b/qt-ui/maintab.cpp
@@ -14,6 +14,7 @@
 #include "divelistview.h"
 #include "display.h"
 #include "profile/profilewidget2.h"
+#include "diveplanner.h"
 
 #if defined(FBSUPPORT)
 #include "socialnetworks.h"
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index ae6209d..42027aa 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -24,6 +24,7 @@
 #include "profile/profilewidget2.h"
 #include "globe.h"
 #include "maintab.h"
+#include "diveplanner.h"
 #ifndef NO_PRINTING
 #include <QPrintDialog>
 #include "printdialog.h"
@@ -91,7 +92,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), diveListView, SLOT(reloadHeaderActions()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), information(), SLOT(updateDiveInfo()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), divePlannerWidget(), SLOT(settingsChanged()));
-	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.plannerSettingsWidget, SLOT(settingsChanged()));
+	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), divePlannerSettingsWidget(), SLOT(settingsChanged()));
 	connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), TankInfoModel::instance(), SLOT(update()));
 	connect(ui.actionRecent1, SIGNAL(triggered(bool)), this, SLOT(recentFileTriggered(bool)));
 	connect(ui.actionRecent2, SIGNAL(triggered(bool)), this, SLOT(recentFileTriggered(bool)));
@@ -117,7 +118,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	diveListView->expand(dive_list()->model()->index(0, 0));
 	diveListView->scrollTo(dive_list()->model()->index(0, 0), QAbstractItemView::PositionAtCenter);
 	divePlannerWidget()->settingsChanged();
-	ui.plannerSettingsWidget->settingsChanged();
+	divePlannerSettingsWidget()->settingsChanged();
 #ifdef NO_MARBLE
 	ui.globePane->hide();
 	ui.menuView->removeAction(ui.actionViewGlobe);
@@ -185,6 +186,10 @@ PlannerDetails *MainWindow::plannerDetails() const {
 	return qobject_cast<PlannerDetails*>(applicationState["PlanDive"].bottomRight);
 }
 
+PlannerSettingsWidget *MainWindow::divePlannerSettingsWidget() {
+	return qobject_cast<PlannerSettingsWidget*>(applicationState["PlanDive"].bottomLeft);
+}
+
 void MainWindow::setLoadedWithFiles(bool f)
 {
 	filesAsArguments = f;
@@ -209,7 +214,6 @@ void MainWindow::refreshDisplay(bool doRecreateDiveList)
 	globe()->reload();
 	if (doRecreateDiveList)
 		recreateDiveList();
-	ui.diveListPane->setCurrentIndex(0); // switch to the dive list
 #ifdef NO_MARBLE
 	ui.globePane->hide();
 #endif
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index 0b714e8..a4eed1b 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -32,6 +32,8 @@ class UpdateManager;
 class UserManual;
 class DivePlannerWidget;
 class ProfileWidget2;
+class PlannerDetails;
+class PlannerSettingsWidget;
 
 enum MainWindowTitleFormat {
 	MWTF_DEFAULT,
@@ -74,6 +76,8 @@ public:
 	DiveListView *dive_list();
 	GlobeGPS *globe();
 	DivePlannerWidget *divePlannerWidget();
+	PlannerSettingsWidget *divePlannerSettingsWidget();
+
 	void showError(QString message);
 	void setTitle(enum MainWindowTitleFormat format);
 
diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui
index 6db52b5..e345c64 100644
--- a/qt-ui/mainwindow.ui
+++ b/qt-ui/mainwindow.ui
@@ -32,15 +32,6 @@
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
-       <widget class="QStackedWidget" name="diveListPane">
-        <property name="currentIndex">
-         <number>1</number>
-        </property>
-        <widget class="QWidget" name="page_3">
-         <layout class="QVBoxLayout" name="diveListLayout"/>
-        </widget>
-        <widget class="PlannerSettingsWidget" name="plannerSettingsWidget"/>
-       </widget>
       </widget>
      </widget>
     </item>
@@ -682,12 +673,6 @@
    <container>1</container>
   </customwidget>
   <customwidget>
-   <class>PlannerSettingsWidget</class>
-   <extends>QWidget</extends>
-   <header>diveplanner.h</header>
-   <container>1</container>
-  </customwidget>
-  <customwidget>
    <class>MultiFilter</class>
    <extends>QWidget</extends>
    <header>simplewidgets.h</header>
diff --git a/qt-ui/modeldelegates.cpp b/qt-ui/modeldelegates.cpp
index d8776d0..c6c46aa 100644
--- a/qt-ui/modeldelegates.cpp
+++ b/qt-ui/modeldelegates.cpp
@@ -8,6 +8,7 @@
 
 #include <QCompleter>
 #include <QKeyEvent>
+#include <QTextDocument>
 
 QSize DiveListDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
 {
diff --git a/qt-ui/printlayout.cpp b/qt-ui/printlayout.cpp
index aa3ef95..d9752d2 100644
--- a/qt-ui/printlayout.cpp
+++ b/qt-ui/printlayout.cpp
@@ -3,6 +3,7 @@
 #include <QPicture>
 #include <QMessageBox>
 #include <QPointer>
+#include <QTableView>
 
 #include "mainwindow.h"
 #include "printdialog.h"
diff --git a/qt-ui/profile/diveprofileitem.cpp b/qt-ui/profile/diveprofileitem.cpp
index 2878049..cc0d27d 100644
--- a/qt-ui/profile/diveprofileitem.cpp
+++ b/qt-ui/profile/diveprofileitem.cpp
@@ -11,6 +11,7 @@
 #include "mainwindow.h"
 #include "maintab.h"
 #include "profile/profilewidget2.h"
+#include "diveplanner.h"
 
 #include <QSettings>
 
diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index 792ec10..1de45ff 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -13,6 +13,7 @@
 #include "divepicturewidget.h"
 #include "models.h"
 #include "maintab.h"
+#include "diveplanner.h"
 
 #include <libdivecomputer/parser.h>
 #include <QScrollBar>
-- 
2.3.0

_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to