better layout for the filter dialog, I hope.
From bda0fd29f289d3313e1074d19b255b4ae2c707a6 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Sun, 16 Nov 2014 14:04:06 -0200
Subject: [PATCH 1/2] Count the number of Dives Filtered

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

diff --git a/qt-ui/filtermodels.cpp b/qt-ui/filtermodels.cpp
index 5b2553d..5f225a7 100644
--- a/qt-ui/filtermodels.cpp
+++ b/qt-ui/filtermodels.cpp
@@ -379,7 +379,7 @@ bool MultiFilterSortModel::filterAcceptsRow(int source_row, const QModelIndex &s
 		if (!model->doFilter(d, index0, sourceModel()))
 			shouldShow = false;
 	}
-	// if it's a dive, mark it accordingly
+
 	filter_dive(d, shouldShow);
 	return shouldShow;
 }
@@ -390,7 +390,20 @@ void MultiFilterSortModel::myInvalidate()
 	struct dive *d;
 	DiveListView *dlv = MainWindow::instance()->dive_list();
 
+	divesDisplayed = 0;
+	divesFilteredOut = 0;
+
 	invalidate();
+
+	divesFilteredOut = 0;
+	divesDisplayed = 0;
+	for_each_dive(i,d){
+		if (d->hidden_by_filter)
+			divesFilteredOut++;
+		else
+			divesDisplayed++;
+	}
+
 	// 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)
@@ -412,6 +425,7 @@ void MultiFilterSortModel::myInvalidate()
 		}
 		dlv->selectDives(curSelectedDives);
 	}
+	emit filterFinished();
 }
 
 void MultiFilterSortModel::addFilterModel(MultiFilterInterface *model)
diff --git a/qt-ui/filtermodels.h b/qt-ui/filtermodels.h
index b8439bb..c70264b 100644
--- a/qt-ui/filtermodels.h
+++ b/qt-ui/filtermodels.h
@@ -93,11 +93,14 @@ public:
 	virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
 	void addFilterModel(MultiFilterInterface *model);
 	void removeFilterModel(MultiFilterInterface *model);
+	int divesFilteredOut;
+	int divesDisplayed;
 public
 slots:
 	void myInvalidate();
 	void clearFilter();
-
+signals:
+	void filterFinished();
 private:
 	MultiFilterSortModel(QObject *parent = 0);
 	QList<MultiFilterInterface *> models;
-- 
2.1.3

From 673b26ce61354c14cdfea57a7fcdac0416e8a9ac Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Sun, 16 Nov 2014 15:13:30 -0200
Subject: [PATCH 2/2] Addded a min / max layout for the filter, and a filter
 count

But the filter count seems to be broken for some reason and
I really don't know why. it seems to work for tags, but
not for everything else.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/filtermodels.cpp  |  15 +++---
 qt-ui/filterwidget.ui   | 127 ++++++++++++++++++++++++++++++++++++++++++++++++
 qt-ui/simplewidgets.cpp |  54 ++++++++++----------
 qt-ui/simplewidgets.h   |  12 +++--
 subsurface.pro          |   3 +-
 5 files changed, 171 insertions(+), 40 deletions(-)
 create mode 100644 qt-ui/filterwidget.ui

diff --git a/qt-ui/filtermodels.cpp b/qt-ui/filtermodels.cpp
index 5f225a7..5e84127 100644
--- a/qt-ui/filtermodels.cpp
+++ b/qt-ui/filtermodels.cpp
@@ -397,13 +397,6 @@ void MultiFilterSortModel::myInvalidate()
 
 	divesFilteredOut = 0;
 	divesDisplayed = 0;
-	for_each_dive(i,d){
-		if (d->hidden_by_filter)
-			divesFilteredOut++;
-		else
-			divesDisplayed++;
-	}
-
 	// 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)
@@ -425,6 +418,14 @@ void MultiFilterSortModel::myInvalidate()
 		}
 		dlv->selectDives(curSelectedDives);
 	}
+
+	for_each_dive(i,d) {
+		if (d->hidden_by_filter)
+			divesFilteredOut++;
+		else
+			divesDisplayed++;
+	}
+
 	emit filterFinished();
 }
 
diff --git a/qt-ui/filterwidget.ui b/qt-ui/filterwidget.ui
new file mode 100644
index 0000000..4b5f9d9
--- /dev/null
+++ b/qt-ui/filterwidget.ui
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FilterWidget2</class>
+ <widget class="QWidget" name="FilterWidget2">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>594</width>
+    <height>362</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="spacing">
+    <number>0</number>
+   </property>
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="spacing">
+      <number>0</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="filterText">
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QToolButton" name="clear">
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../subsurface.qrc">
+         <normaloff>:/plus</normaloff>:/plus</iconset>
+       </property>
+       <property name="autoRaise">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="maximize">
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../subsurface.qrc">
+         <normaloff>:/average</normaloff>:/average</iconset>
+       </property>
+       <property name="autoRaise">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="close">
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../subsurface.qrc">
+         <normaloff>:/flag</normaloff>:/flag</iconset>
+       </property>
+       <property name="autoRaise">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QScrollArea" name="scrollArea">
+     <property name="frameShape">
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="widgetResizable">
+      <bool>true</bool>
+     </property>
+     <widget class="QWidget" name="scrollAreaWidgetContents">
+      <property name="geometry">
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>594</width>
+        <height>332</height>
+       </rect>
+      </property>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../subsurface.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index 1926827..1020e0e 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -17,6 +17,7 @@
 #include "display.h"
 #include "mainwindow.h"
 #include "helpers.h"
+#include "ui_filterwidget.h"
 
 class MinMaxAvgWidgetPrivate {
 public:
@@ -560,55 +561,50 @@ void SuitFilter::hideEvent(QHideEvent *event)
 	QWidget::hideEvent(event);
 }
 
-MultiFilter::MultiFilter(QWidget *parent) : QScrollArea(parent)
+MultiFilter::MultiFilter(QWidget *parent) : QWidget(parent)
 {
+	ui = new Ui::FilterWidget2();
+	ui->setupUi(this);
+
 	QWidget *expandedWidget = new QWidget();
 	QHBoxLayout *l = new QHBoxLayout();
 
-
 	TagFilter *tagFilter = new TagFilter();
 	int minimumHeight = tagFilter->ui.filterInternalList->height() +
-		tagFilter->ui.verticalLayout->spacing() * tagFilter->ui.verticalLayout->count();
+			tagFilter->ui.verticalLayout->spacing() * tagFilter->ui.verticalLayout->count();
 
 	QListView *dummyList = new QListView();
 	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("Reset 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);
-
-	connect(closeBtn, SIGNAL(clicked(bool)), this, SLOT(closeFilter()));
-	connect(clearBtn, SIGNAL(clicked(bool)), MultiFilterSortModel::instance(), SLOT(clearFilter()));
-	l->addWidget(tb);
+	connect(ui->close, SIGNAL(clicked(bool)), this, SLOT(closeFilter()));
+	connect(ui->clear, SIGNAL(clicked(bool)), MultiFilterSortModel::instance(), SLOT(clearFilter()));
+	connect(ui->maximize, SIGNAL(clicked(bool)), this, SLOT(adjustHeight()));
+
 	l->addWidget(tagFilter);
 	l->addWidget(new BuddyFilter());
 	l->addWidget(new LocationFilter());
 	l->addWidget(new SuitFilter());
 	l->setContentsMargins(0, 0, 0, 0);
 	l->setSpacing(0);
-
 	expandedWidget->setLayout(l);
-	setWidget(expandedWidget);
+
+	ui->scrollArea->setWidget(expandedWidget);
 	expandedWidget->resize(expandedWidget->width(), minimumHeight + dummyList->sizeHintForRow(0) * 5 );
+	ui->scrollArea->setMinimumHeight(expandedWidget->height() + 5);
 
-	setMinimumHeight(expandedWidget->height() + 5);
+	connect(MultiFilterSortModel::instance(), SIGNAL(filterFinished()), this, SLOT(filterFinished()));
+}
+
+void MultiFilter::filterFinished()
+{
+	ui->filterText->setText(tr("Dives filtered out: ") + QString::number(MultiFilterSortModel::instance()->divesFilteredOut)
+		+ tr("Dives being shown: ") + QString::number(MultiFilterSortModel::instance()->divesDisplayed));
+}
+
+void MultiFilter::adjustHeight()
+{
+	ui->scrollArea->setVisible(!ui->scrollArea->isVisible());
 }
 
 void MultiFilter::closeFilter()
diff --git a/qt-ui/simplewidgets.h b/qt-ui/simplewidgets.h
index 6873545..00992d6 100644
--- a/qt-ui/simplewidgets.h
+++ b/qt-ui/simplewidgets.h
@@ -130,15 +130,21 @@ private:
 	struct dive_components *what;
 };
 
-class MultiFilter : public QScrollArea {
+namespace Ui{
+	class FilterWidget2;
+};
+
+class MultiFilter : public QWidget {
 	Q_OBJECT
 public
 slots:
 	void closeFilter();
+	void adjustHeight();
+	void filterFinished();
+
 public:
 	MultiFilter(QWidget *parent);
-	QWidget *expandedWidget;
-	QWidget *minimizedWidget;
+	Ui::FilterWidget2 *ui;
 };
 
 class TagFilter : public QWidget {
diff --git a/subsurface.pro b/subsurface.pro
index 94245fc..182490e 100644
--- a/subsurface.pro
+++ b/subsurface.pro
@@ -232,7 +232,8 @@ FORMS = \
 	qt-ui/divecomponentselection.ui \
 	qt-ui/configuredivecomputerdialog.ui \
 	qt-ui/listfilter.ui \
-	qt-ui/diveshareexportdialog.ui
+	qt-ui/diveshareexportdialog.ui \
+	qt-ui/filterwidget.ui
 
 # Nether usermanual or printing is supported on android right now
 android: FORMS -= qt-ui/printoptions.ui
-- 
2.1.3

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

Reply via email to