From 447070eeb0772b702711a189b5266c26073b4e57 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Tue, 11 Nov 2014 15:24:32 -0200
Subject: [PATCH 1/6] Better layout for the Extra Info panel

The extra info didn't had a Layout set, this makes the
design hard and not resizable. fixed by using a layout.
I also changed a ScrollArea for a GroupBox, since the
Model already has a ScrollArea.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/maintab.ui | 68 +++++++++++++++-----------------------------------------
 1 file changed, 18 insertions(+), 50 deletions(-)

diff --git a/qt-ui/maintab.ui b/qt-ui/maintab.ui
index 72c04ac..63fde03 100644
--- a/qt-ui/maintab.ui
+++ b/qt-ui/maintab.ui
@@ -37,8 +37,8 @@
         <rect>
          <x>0</x>
          <y>0</y>
-         <width>668</width>
-         <height>658</height>
+         <width>670</width>
+         <height>649</height>
         </rect>
        </property>
        <layout class="QGridLayout" name="gridLayout_2">
@@ -416,8 +416,8 @@
         <rect>
          <x>0</x>
          <y>0</y>
-         <width>668</width>
-         <height>658</height>
+         <width>316</width>
+         <height>330</height>
         </rect>
        </property>
        <layout class="QGridLayout" name="gridLayout_6">
@@ -745,8 +745,8 @@
         <rect>
          <x>0</x>
          <y>0</y>
-         <width>342</width>
-         <height>167</height>
+         <width>319</width>
+         <height>188</height>
         </rect>
        </property>
        <layout class="QGridLayout" name="gridLayout_7">
@@ -957,52 +957,20 @@
    <attribute name="title">
     <string>Extra data</string>
    </attribute>
-   <widget class="QLabel" name="label_3">
-    <property name="geometry">
-     <rect>
-      <x>10</x>
-      <y>20</y>
-      <width>341</width>
-      <height>16</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>Additional data from dive computer</string>
-    </property>
-   </widget>
-   <widget class="QScrollArea" name="scrollArea_5">
-    <property name="geometry">
-     <rect>
-      <x>10</x>
-      <y>50</y>
-      <width>661</width>
-      <height>641</height>
-     </rect>
-    </property>
-    <property name="widgetResizable">
-     <bool>true</bool>
-    </property>
-    <widget class="QWidget" name="scrollAreaWidgetContents_5">
-     <property name="geometry">
-      <rect>
-       <x>0</x>
-       <y>0</y>
-       <width>659</width>
-       <height>639</height>
-      </rect>
-     </property>
-     <widget class="QTableView" name="extraData">
-      <property name="geometry">
-       <rect>
-        <x>10</x>
-        <y>10</y>
-        <width>641</width>
-        <height>621</height>
-       </rect>
+   <layout class="QVBoxLayout" name="verticalLayout_3">
+    <item>
+     <widget class="QGroupBox" name="groupBox_16">
+      <property name="title">
+       <string>Aditional data from dive computer</string>
       </property>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QTableView" name="extraData"/>
+       </item>
+      </layout>
      </widget>
-    </widget>
-   </widget>
+    </item>
+   </layout>
   </widget>
  </widget>
  <customwidgets>
-- 
2.1.3

From 722106483aeaa1019b7f4825136efa03837b4019 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Tue, 11 Nov 2014 16:07:45 -0200
Subject: [PATCH 2/6] Better size for the filter

a bit of extra spacing was necessary to get rid of the scrollbar.

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

diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index 522ed30..8af834d 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -531,10 +531,13 @@ void LocationFilter::hideEvent(QHideEvent *event)
 	MultiFilterSortModel::instance()->removeFilterModel(LocationFilterModel::instance());
 	QWidget::hideEvent(event);
 }
+
 MultiFilter::MultiFilter(QWidget *parent) : QScrollArea(parent)
 {
 	QWidget *w = new QWidget();
 	QHBoxLayout *l = new QHBoxLayout();
+	QVBoxLayout *v = new QVBoxLayout();
+
 
 	TagFilter *tagFilter = new TagFilter();
 	int minimumHeight = tagFilter->ui.filterInternalList->height() +
@@ -554,5 +557,5 @@ MultiFilter::MultiFilter(QWidget *parent) : QScrollArea(parent)
 	setWidget(w);
 	w->resize(w->width(), minimumHeight + dummyList->sizeHintForRow(0) * 5 );
 
-	setMinimumHeight(w->height());
+	setMinimumHeight(w->height() + 5);
 }
-- 
2.1.3

From 2b6a6f38c1cf6b1ecc3c8f3faa521f75e0f65e51 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Tue, 11 Nov 2014 17:06:28 -0200
Subject: [PATCH 3/6] Added buttons to control the multi filter

Buttons to close, minimize and clear were added. We need better icons.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/simplewidgets.cpp | 34 ++++++++++++++++++++++++++++------
 qt-ui/simplewidgets.h   |  2 ++
 subsurface.qrc          |  2 +-
 3 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index 8af834d..1a23c31 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -8,6 +8,8 @@
 #include <QShortcut>
 #include <QCalendarWidget>
 #include <QSortFilterProxyModel>
+#include <QToolButton>
+#include <QToolBar>
 #include "exif.h"
 #include "dive.h"
 #include "file.h"
@@ -534,9 +536,8 @@ void LocationFilter::hideEvent(QHideEvent *event)
 
 MultiFilter::MultiFilter(QWidget *parent) : QScrollArea(parent)
 {
-	QWidget *w = new QWidget();
+	QWidget *expandedWidget = new QWidget();
 	QHBoxLayout *l = new QHBoxLayout();
-	QVBoxLayout *v = new QVBoxLayout();
 
 
 	TagFilter *tagFilter = new TagFilter();
@@ -547,15 +548,36 @@ MultiFilter::MultiFilter(QWidget *parent) : QScrollArea(parent)
 	QStringListModel *dummy = new QStringListModel(QStringList() << "Dummy Text");
 	dummyList->setModel(dummy);
 
+	// Buttons to Clear/Minimize/Close
+	QToolBar *tb = new QToolBar();
+	QToolButton *clearBtn = new QToolButton();
+	clearBtn->setToolTip(tr("Clear the filters"));
+	clearBtn->setIcon(QIcon(":/trash"));
+	clearBtn->setAutoRaise(true);
+	QToolButton *closeBtn = new QToolButton();
+	closeBtn->setToolTip(tr("Close this window and reset the filters"));
+	closeBtn->setIcon(QIcon(":/close"));
+	closeBtn->setAutoRaise(true);
+	QToolButton *minimize = new QToolButton();
+	minimize->setToolTip(tr("Minimize this window"));
+	minimize->setIcon(QIcon(":/arrow_up"));
+	minimize->setAutoRaise(true);
+
+	tb->setOrientation(Qt::Vertical);
+	tb->addWidget(clearBtn);
+	tb->addWidget(minimize);
+	tb->addWidget(closeBtn);
+
+	l->addWidget(tb);
 	l->addWidget(tagFilter);
 	l->addWidget(new BuddyFilter());
 	l->addWidget(new LocationFilter());
 	l->setContentsMargins(0, 0, 0, 0);
 	l->setSpacing(0);
 
-	w->setLayout(l);
-	setWidget(w);
-	w->resize(w->width(), minimumHeight + dummyList->sizeHintForRow(0) * 5 );
+	expandedWidget->setLayout(l);
+	setWidget(expandedWidget);
+	expandedWidget->resize(expandedWidget->width(), minimumHeight + dummyList->sizeHintForRow(0) * 5 );
 
-	setMinimumHeight(w->height() + 5);
+	setMinimumHeight(expandedWidget->height() + 5);
 }
diff --git a/qt-ui/simplewidgets.h b/qt-ui/simplewidgets.h
index b33dd8f..385ce08 100644
--- a/qt-ui/simplewidgets.h
+++ b/qt-ui/simplewidgets.h
@@ -134,6 +134,8 @@ class MultiFilter : public QScrollArea {
 	Q_OBJECT
 public:
 	MultiFilter(QWidget *parent);
+	QWidget *expandedWidget;
+	QWidget *minimizedWidget;
 };
 
 class TagFilter : public QWidget {
diff --git a/subsurface.qrc b/subsurface.qrc
index 13fdc3e..76875a7 100644
--- a/subsurface.qrc
+++ b/subsurface.qrc
@@ -64,7 +64,7 @@
         <file>icons/subsurface/index.theme</file>
         <file>icons/subsurface/32x32/actions/go-down.png</file>
         <file>icons/subsurface/32x32/actions/go-up.png</file>
-        <file>icons/subsurface/32x32/actions/window-close.png</file>
+        <file alias="close">icons/subsurface/32x32/actions/window-close.png</file>
         <file>icons/ostc2n.png</file>
         <file>icons/ostc3.png</file>
         <file>icons/suunto_vyper.png</file>
-- 
2.1.3

From 8420db04949704f80d78b2ac987c40ac58ee3bbb Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Tue, 11 Nov 2014 17:07:48 -0200
Subject: [PATCH 4/6] Make the close button work

clicking on the close button will close the widget.

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

diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index 1a23c31..a46a22c 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -568,6 +568,8 @@ MultiFilter::MultiFilter(QWidget *parent) : QScrollArea(parent)
 	tb->addWidget(minimize);
 	tb->addWidget(closeBtn);
 
+	connect(closeBtn, SIGNAL(clicked(bool)), this, SLOT(hide()));
+
 	l->addWidget(tb);
 	l->addWidget(tagFilter);
 	l->addWidget(new BuddyFilter());
-- 
2.1.3

From 8b02dca12bafce43dc6989df6668cc72fcff9502 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Tue, 11 Nov 2014 17:28:52 -0200
Subject: [PATCH 5/6] A bit of code cleanup.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/models.cpp        | 6 +++---
 qt-ui/models.h          | 9 +++------
 qt-ui/simplewidgets.cpp | 2 +-
 3 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
index 7c0b35c..199a9c0 100644
--- a/qt-ui/models.cpp
+++ b/qt-ui/models.cpp
@@ -2253,7 +2253,7 @@ int LanguageModel::rowCount(const QModelIndex &parent) const
 }
 
 
-TagFilterModel::TagFilterModel(QObject *parent) : QStringListModel(parent), checkState(NULL)
+TagFilterModel::TagFilterModel(QObject *parent) : QStringListModel(parent)
 {
 }
 
@@ -2366,7 +2366,7 @@ bool TagFilterModel::filterRow(int source_row, const QModelIndex &source_parent,
 	return false;
 }
 
-BuddyFilterModel::BuddyFilterModel(QObject *parent) : QStringListModel(parent), checkState(NULL)
+BuddyFilterModel::BuddyFilterModel(QObject *parent) : QStringListModel(parent)
 {
 }
 
@@ -2482,7 +2482,7 @@ bool BuddyFilterModel::setData(const QModelIndex &index, const QVariant &value,
 	return false;
 }
 
-LocationFilterModel::LocationFilterModel(QObject *parent) : QStringListModel(parent), checkState(NULL)
+LocationFilterModel::LocationFilterModel(QObject *parent) : QStringListModel(parent)
 {
 }
 
diff --git a/qt-ui/models.h b/qt-ui/models.h
index 8750492..0d385ba 100644
--- a/qt-ui/models.h
+++ b/qt-ui/models.h
@@ -440,7 +440,10 @@ private:
 
 class MultiFilterInterface {
 public:
+	MultiFilterInterface() : checkState(NULL){};
 	virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const = 0;
+	bool *checkState;
+	bool anyChecked;
 };
 
 class TagFilterModel : public QStringListModel, public MultiFilterInterface{
@@ -451,8 +454,6 @@ public:
 	virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
 	virtual Qt::ItemFlags flags(const QModelIndex &index) const;
 	virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const;
-	bool *checkState;
-	bool anyChecked;
 public
 slots:
 	void repopulate();
@@ -469,8 +470,6 @@ public:
 	virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
 	virtual Qt::ItemFlags flags(const QModelIndex &index) const;
 	virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const;
-	bool *checkState;
-	bool anyChecked;
 public
 slots:
 	void repopulate();
@@ -487,8 +486,6 @@ public:
 	virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
 	virtual Qt::ItemFlags flags(const QModelIndex &index) const;
 	virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const;
-	bool *checkState;
-	bool anyChecked;
 public
 slots:
 	void repopulate();
diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index a46a22c..850bdcf 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -569,7 +569,7 @@ MultiFilter::MultiFilter(QWidget *parent) : QScrollArea(parent)
 	tb->addWidget(closeBtn);
 
 	connect(closeBtn, SIGNAL(clicked(bool)), this, SLOT(hide()));
-
+	connect(clearBtn, SIGNAL(clicked(bool)), MultiFilterSortModel::instance(), SLOT(clearFilter()));
 	l->addWidget(tb);
 	l->addWidget(tagFilter);
 	l->addWidget(new BuddyFilter());
-- 
2.1.3

From 1f31d6b37123dc4db0a0bf5e29f9cb22bc646723 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Tue, 11 Nov 2014 18:43:02 -0200
Subject: [PATCH 6/6] Clean Filters

Code to clean the filters. Maybe I'll also need to call this upon
closing the dialog?

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/models.cpp | 41 ++++++++++++++++++++++++++++++++++++-----
 qt-ui/models.h   |  6 ++++++
 2 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
index 199a9c0..0461197 100644
--- a/qt-ui/models.cpp
+++ b/qt-ui/models.cpp
@@ -2600,15 +2600,14 @@ MultiFilterSortModel *MultiFilterSortModel::instance()
 	return self;
 }
 
-MultiFilterSortModel::MultiFilterSortModel(QObject *parent) : QSortFilterProxyModel(parent)
+MultiFilterSortModel::MultiFilterSortModel(QObject *parent) : QSortFilterProxyModel(parent), justCleared(false)
 {
 }
 
 bool MultiFilterSortModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
 {
-	if (models.isEmpty()) {
+	if (justCleared || models.isEmpty())
 		return true;
-	}
 
 	bool shouldShow = true;
 	Q_FOREACH (MultiFilterInterface *model, models) {
@@ -2616,7 +2615,6 @@ bool MultiFilterSortModel::filterAcceptsRow(int source_row, const QModelIndex &s
 			shouldShow = false;
 		}
 	}
-
 	return shouldShow;
 }
 
@@ -2627,7 +2625,6 @@ void MultiFilterSortModel::myInvalidate()
 	DiveListView *dlv = MainWindow::instance()->dive_list();
 
 	invalidate();
-
 	// first make sure the trips are no longer shown as selected
 	// (but without updating the selection state of the dives... this just cleans
 	//  up an oddity in the filter handling)
@@ -2664,6 +2661,40 @@ void MultiFilterSortModel::removeFilterModel(MultiFilterInterface *model)
 	disconnect(itemModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SLOT(myInvalidate()));
 }
 
+void MultiFilterSortModel::clearFilter()
+{
+	justCleared = true;
+	Q_FOREACH(MultiFilterInterface *iface, models){
+		iface->clearFilter();
+	}
+	justCleared = false;
+	myInvalidate();
+}
+
+void BuddyFilterModel::clearFilter()
+{
+	memset(checkState, false, rowCount());
+	checkState[rowCount() - 1] = false;
+	anyChecked = false;
+	emit dataChanged(createIndex(0,0), createIndex(rowCount()-1, 0));
+}
+
+void LocationFilterModel::clearFilter()
+{
+	memset(checkState, false, rowCount());
+	checkState[rowCount() - 1] = false;
+	anyChecked = false;
+	emit dataChanged(createIndex(0,0), createIndex(rowCount()-1, 0));
+}
+
+void TagFilterModel::clearFilter()
+{
+	memset(checkState, false, rowCount());
+	checkState[rowCount() - 1] = false;
+	anyChecked = false;
+	emit dataChanged(createIndex(0,0), createIndex(rowCount()-1, 0));
+}
+
 ExtraDataModel::ExtraDataModel(QObject *parent) : CleanerTableModel(parent),
 	rows(0)
 {
diff --git a/qt-ui/models.h b/qt-ui/models.h
index 0d385ba..470cf5f 100644
--- a/qt-ui/models.h
+++ b/qt-ui/models.h
@@ -442,6 +442,7 @@ class MultiFilterInterface {
 public:
 	MultiFilterInterface() : checkState(NULL){};
 	virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const = 0;
+	virtual void clearFilter() = 0;
 	bool *checkState;
 	bool anyChecked;
 };
@@ -454,6 +455,7 @@ public:
 	virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
 	virtual Qt::ItemFlags flags(const QModelIndex &index) const;
 	virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const;
+	void clearFilter();
 public
 slots:
 	void repopulate();
@@ -470,6 +472,7 @@ public:
 	virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
 	virtual Qt::ItemFlags flags(const QModelIndex &index) const;
 	virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const;
+	void clearFilter();
 public
 slots:
 	void repopulate();
@@ -486,6 +489,7 @@ public:
 	virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
 	virtual Qt::ItemFlags flags(const QModelIndex &index) const;
 	virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const;
+	void clearFilter();
 public
 slots:
 	void repopulate();
@@ -504,8 +508,10 @@ public:
 	void removeFilterModel(MultiFilterInterface *model);
 public slots:
 	void myInvalidate();
+	void clearFilter();
 private:
 	MultiFilterSortModel(QObject *parent = 0);
 	QList<MultiFilterInterface*> models;
+	bool justCleared;
 };
 #endif // MODELS_H
-- 
2.1.3

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

Reply via email to