Dirk,

This is a WIP but it's safe to add.
What's missing: The other filters.

But the layout, interaction, etc, is the final one, so I think you guys (
specially you and deivide ) should take a look.

ctrl + f or menu item toggle the filtering.
From 595bb5e4b0d38b887fc30cb972d6d10112eb39e7 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Fri, 31 Oct 2014 13:44:21 -0200
Subject: [PATCH 1/9] Move the Filter to a better position

This patch moves the filter from the collapsable pannel
and puts it in an uncollapsable way above the dive list.

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

diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui
index 8434111..4d1f4b4 100644
--- a/qt-ui/mainwindow.ui
+++ b/qt-ui/mainwindow.ui
@@ -123,29 +123,18 @@
         <property name="currentIndex">
          <number>0</number>
         </property>
-        <widget class="DiveListView" name="ListWidget">
-         <property name="alternatingRowColors">
-          <bool>true</bool>
-         </property>
-         <property name="selectionMode">
-          <enum>QAbstractItemView::ExtendedSelection</enum>
-         </property>
-         <property name="rootIsDecorated">
-          <bool>true</bool>
-         </property>
-         <property name="sortingEnabled">
-          <bool>false</bool>
-         </property>
-         <property name="animated">
-          <bool>true</bool>
-         </property>
-         <property name="allColumnsShowFocus">
-          <bool>true</bool>
-         </property>
+        <widget class="QWidget" name="page_3">
+         <layout class="QVBoxLayout" name="verticalLayout_4">
+          <item>
+           <widget class="TagFilter" name="tagFilter" native="true"/>
+          </item>
+          <item>
+           <widget class="DiveListView" name="ListWidget"/>
+          </item>
+         </layout>
         </widget>
         <widget class="PlannerSettingsWidget" name="plannerSettingsWidget"/>
        </widget>
-       <widget class="TagFilter" name="tagFilter" native="true"/>
        <widget class="QStackedWidget" name="globePane">
         <property name="currentIndex">
          <number>0</number>
@@ -256,7 +245,7 @@ p, li { white-space: pre-wrap; }
      <x>0</x>
      <y>0</y>
      <width>1682</width>
-     <height>22</height>
+     <height>36</height>
     </rect>
    </property>
    <widget class="QMenu" name="menuFile">
@@ -844,7 +833,7 @@ p, li { white-space: pre-wrap; }
   </action>
   <action name="actionFilterTags">
    <property name="text">
-    <string>Filter by Tags</string>
+    <string>&amp;Filter by Tags</string>
    </property>
   </action>
   <action name="profTissues">
-- 
2.1.3

From 24edb0c0428040ad73e8c8bb308ac96f9ea33050 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Fri, 31 Oct 2014 14:00:52 -0200
Subject: [PATCH 2/9] Do not allow to collapse the pannels of the mainwindow

Disable the possibility to collapse the pannel in the
mainwindow when seeing everything.

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

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 1d4b22a..586be85 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -561,8 +561,18 @@ void MainWindow::on_actionYearlyStatistics_triggered()
 }
 
 #define BEHAVIOR QList<int>()
+
+#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);
+
 void MainWindow::on_actionViewList_triggered()
 {
+	TOGGLE_COLLAPSABLE( true );
 	beginChangeState(LIST_MAXIMIZED);
 	ui.listGlobeSplitter->setSizes(BEHAVIOR << EXPANDED << COLLAPSED);
 	ui.mainSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
@@ -570,6 +580,7 @@ void MainWindow::on_actionViewList_triggered()
 
 void MainWindow::on_actionViewProfile_triggered()
 {
+	TOGGLE_COLLAPSABLE( true );
 	beginChangeState(PROFILE_MAXIMIZED);
 	ui.infoProfileSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
 	ui.mainSplitter->setSizes(BEHAVIOR << EXPANDED << COLLAPSED);
@@ -577,6 +588,7 @@ void MainWindow::on_actionViewProfile_triggered()
 
 void MainWindow::on_actionViewInfo_triggered()
 {
+	TOGGLE_COLLAPSABLE( true );
 	beginChangeState(INFO_MAXIMIZED);
 	ui.infoProfileSplitter->setSizes(BEHAVIOR << EXPANDED << COLLAPSED);
 	ui.mainSplitter->setSizes(BEHAVIOR << EXPANDED << COLLAPSED);
@@ -584,6 +596,7 @@ void MainWindow::on_actionViewInfo_triggered()
 
 void MainWindow::on_actionViewGlobe_triggered()
 {
+	TOGGLE_COLLAPSABLE( true );
 	beginChangeState(GLOBE_MAXIMIZED);
 	ui.mainSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
 	ui.listGlobeSplitter->setSizes(BEHAVIOR << COLLAPSED << EXPANDED);
@@ -592,6 +605,7 @@ void MainWindow::on_actionViewGlobe_triggered()
 
 void MainWindow::on_actionViewAll_triggered()
 {
+	TOGGLE_COLLAPSABLE( false );
 	beginChangeState(VIEWALL);
 	static QList<int> mainSizes;
 	const int appH = qApp->desktop()->size().height();
@@ -630,8 +644,16 @@ void MainWindow::on_actionViewAll_triggered()
 		ui.infoProfileSplitter->setSizes(infoProfileSizes);
 		ui.listGlobeSplitter->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);
 }
 
+#undef TOGGLE_COLLAPSABLE
+
 void MainWindow::beginChangeState(CurrentState s)
 {
 	if (state == VIEWALL && state != s) {
-- 
2.1.3

From fd3814dfc17a9e08e5c009392d75a2801ce6993f Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Fri, 31 Oct 2014 14:05:52 -0200
Subject: [PATCH 3/9] Make possible to hide the tag filter.

It was impossible to remove the tag filter after opening it.

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

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 586be85..f5794b6 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -1382,5 +1382,5 @@ void MainWindow::on_paste_triggered()
 
 void MainWindow::on_actionFilterTags_triggered()
 {
-	ui.tagFilter->show();
+	ui.tagFilter->setVisible(!ui.tagFilter->isVisible());
 }
-- 
2.1.3

From 684cb2f6f571234b39f62d7299ee33c64cf99923 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Fri, 31 Oct 2014 14:17:01 -0200
Subject: [PATCH 4/9] Ctrl+F now opens the Tag Filter

And old code for the old searchbar removed.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/divelistview.cpp | 28 +---------------------------
 qt-ui/divelistview.h   |  3 ---
 qt-ui/mainwindow.cpp   |  3 ---
 qt-ui/mainwindow.ui    |  3 +++
 4 files changed, 4 insertions(+), 33 deletions(-)

diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp
index 474cb06..6963958 100644
--- a/qt-ui/divelistview.cpp
+++ b/qt-ui/divelistview.cpp
@@ -32,7 +32,7 @@
 static int defaultWidth[] =    {  70, 140, 90,  50,  50,  50,  50,  70,  50,  50,  70,  50,  50, 500};
 
 DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false), sortColumn(0),
-	currentOrder(Qt::DescendingOrder), searchBox(this), dontEmitDiveChangedSignal(false), selectionSaved(false)
+	currentOrder(Qt::DescendingOrder), dontEmitDiveChangedSignal(false), selectionSaved(false)
 {
 	setItemDelegate(new DiveListDelegate(this));
 	setUniformRowHeights(true);
@@ -100,15 +100,6 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec
 
 
 	header()->setStretchLastSection(true);
-	QAction *showSearchBox = new QAction(tr("Show search box"), this);
-	showSearchBox->setShortcut(Qt::CTRL + Qt::Key_F);
-	showSearchBox->setShortcutContext(Qt::WindowShortcut);
-	addAction(showSearchBox);
-
-	searchBox.installEventFilter(this);
-	searchBox.hide();
-//	connect(showSearchBox, SIGNAL(triggered(bool)), this, SLOT(showSearchEdit()));
-//	connect(&searchBox, SIGNAL(textChanged(QString)), model, SLOT(setFilterFixedString(QString)));
 }
 
 DiveListView::~DiveListView()
@@ -322,12 +313,6 @@ void DiveListView::selectDives(const QList<int> &newDiveSelection)
 	return;
 }
 
-void DiveListView::showSearchEdit()
-{
-	searchBox.show();
-	searchBox.setFocus();
-}
-
 bool DiveListView::eventFilter(QObject *, QEvent *event)
 {
 	if (event->type() != QEvent::KeyPress)
@@ -335,11 +320,6 @@ bool DiveListView::eventFilter(QObject *, QEvent *event)
 	QKeyEvent *keyEv = static_cast<QKeyEvent *>(event);
 	if (keyEv->key() != Qt::Key_Escape)
 		return false;
-
-	searchBox.clear();
-	searchBox.hide();
-	QSortFilterProxyModel *m = qobject_cast<QSortFilterProxyModel *>(model());
-	m->setFilterFixedString(QString());
 	return true;
 }
 
@@ -882,9 +862,3 @@ void DiveListView::updateLastImageTimeOffset(const int offset)
 	s.beginGroup("MainWindow");
 	s.setValue("LastImageTimeOffset", offset);
 }
-
-void DiveListView::endSearch()
-{
-	searchBox.clear();
-	searchBox.hide();
-}
diff --git a/qt-ui/divelistview.h b/qt-ui/divelistview.h
index 332c179..a2e33a0 100644
--- a/qt-ui/divelistview.h
+++ b/qt-ui/divelistview.h
@@ -36,7 +36,6 @@ slots:
 	void toggleColumnVisibilityByIndex();
 	void reloadHeaderActions();
 	void headerClicked(int);
-	void showSearchEdit();
 	void removeFromTrip();
 	void deleteDive();
 	void markDiveInvalid();
@@ -52,7 +51,6 @@ slots:
 	void shiftTimes();
 	void loadImages();
 	static QString lastUsedImageDir();
-	void endSearch();
 
 signals:
 	void currentDiveChanged(int divenr);
@@ -63,7 +61,6 @@ private:
 	int sortColumn;
 	Qt::SortOrder currentOrder;
 	DiveTripModel::Layout currentLayout;
-	QLineEdit searchBox;
 	QModelIndex contextMenuIndex;
 	bool dontEmitDiveChangedSignal;
 	bool selectionSaved;
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index f5794b6..a86eb8e 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -457,7 +457,6 @@ void MainWindow::on_actionReplanDive_triggered()
 		qDebug() << "trying to replan a dive that's not a planned dive:" << current_dive->dc.model;
 		return;
 	}
-	ui.ListWidget->endSearch();
 	// put us in PLAN mode
 	DivePlannerPointsModel::instance()->clear();
 	DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
@@ -479,7 +478,6 @@ void MainWindow::on_actionDivePlanner_triggered()
 	if (!plannerStateClean())
 		return;
 
-	ui.ListWidget->endSearch();
 	// put us in PLAN mode
 	DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
 
@@ -509,7 +507,6 @@ void MainWindow::on_actionAddDive_triggered()
 		dive_list()->clearSelection();
 	}
 
-	ui.ListWidget->endSearch();
 	DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::ADD);
 
 	// setup things so we can later create our starting dive
diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui
index 4d1f4b4..4e9c94a 100644
--- a/qt-ui/mainwindow.ui
+++ b/qt-ui/mainwindow.ui
@@ -835,6 +835,9 @@ p, li { white-space: pre-wrap; }
    <property name="text">
     <string>&amp;Filter by Tags</string>
    </property>
+   <property name="shortcut">
+    <string>Ctrl+F</string>
+   </property>
   </action>
   <action name="profTissues">
    <property name="checkable">
-- 
2.1.3

From af8f1fc8d1cfc0016c6fde62e5c454066709aea4 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Fri, 31 Oct 2014 15:22:21 -0200
Subject: [PATCH 5/9] Added  a 'MultiFilter' widget.

The multifilter widget is a container with all the filter
widgets inside of it. currently there's just one.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/mainwindow.cpp    |  4 ++--
 qt-ui/mainwindow.ui     |  4 ++--
 qt-ui/simplewidgets.cpp | 12 ++++++++++++
 qt-ui/simplewidgets.h   |  6 ++++++
 4 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index a86eb8e..c052867 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -69,7 +69,7 @@ MainWindow::MainWindow() : QMainWindow(),
 	Q_ASSERT_X(m_Instance == NULL, "MainWindow", "MainWindow recreated!");
 	m_Instance = this;
 	ui.setupUi(this);
-	ui.tagFilter->hide();
+	ui.multiFilter->hide();
 	profileToolbarActions << ui.profCalcAllTissues << ui.profCalcCeiling << ui.profDcCeiling << ui.profEad <<
 		    ui.profHR << ui.profIncrement3m << ui.profMod << ui.profNdl_tts << ui.profNdl_tts <<
 		    ui.profPhe << ui.profPn2 << ui.profPO2 << ui.profRuler << ui.profSAC << ui.profScaled <<
@@ -1379,5 +1379,5 @@ void MainWindow::on_paste_triggered()
 
 void MainWindow::on_actionFilterTags_triggered()
 {
-	ui.tagFilter->setVisible(!ui.tagFilter->isVisible());
+	ui.multiFilter->setVisible(!ui.multiFilter->isVisible());
 }
diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui
index 4e9c94a..926e815 100644
--- a/qt-ui/mainwindow.ui
+++ b/qt-ui/mainwindow.ui
@@ -126,7 +126,7 @@
         <widget class="QWidget" name="page_3">
          <layout class="QVBoxLayout" name="verticalLayout_4">
           <item>
-           <widget class="TagFilter" name="tagFilter" native="true"/>
+           <widget class="MultiFilter" name="multiFilter" native="true"/>
           </item>
           <item>
            <widget class="DiveListView" name="ListWidget"/>
@@ -897,7 +897,7 @@ p, li { white-space: pre-wrap; }
    <container>1</container>
   </customwidget>
   <customwidget>
-   <class>TagFilter</class>
+   <class>MultiFilter</class>
    <extends>QWidget</extends>
    <header>simplewidgets.h</header>
    <container>1</container>
diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index b312615..47952c3 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -476,3 +476,15 @@ void TagFilter::hideEvent(QHideEvent *event)
 	TagFilterSortModel::instance()->removeFilterModel(TagFilterModel::instance());
 	QWidget::hideEvent(event);
 }
+
+MultiFilter::MultiFilter(QWidget *parent): QScrollArea(parent)
+{
+	QWidget *w = new QWidget();
+	QHBoxLayout *l = new QHBoxLayout();
+
+	l->addWidget(new TagFilter());
+
+	w->setLayout(l);
+	w->setMinimumSize(l->count() * 150, 200);
+	setWidget(w);
+}
diff --git a/qt-ui/simplewidgets.h b/qt-ui/simplewidgets.h
index d3e27c0..48a5749 100644
--- a/qt-ui/simplewidgets.h
+++ b/qt-ui/simplewidgets.h
@@ -140,6 +140,12 @@ private:
 	Ui::TagFilter ui;
 };
 
+class MultiFilter : public QScrollArea {
+	Q_OBJECT
+public:
+	MultiFilter(QWidget *parent);
+};
+
 bool isGnome3Session();
 QImage grayImage(const QImage &coloredImg);
 
-- 
2.1.3

From 3a73997a09b110896c835e25d383d84946bc7c15 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Fri, 31 Oct 2014 15:27:33 -0200
Subject: [PATCH 6/9] TagFilter -> MultiFilter

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

diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp
index 6963958..9868119 100644
--- a/qt-ui/divelistview.cpp
+++ b/qt-ui/divelistview.cpp
@@ -37,7 +37,7 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec
 	setItemDelegate(new DiveListDelegate(this));
 	setUniformRowHeights(true);
 	setItemDelegateForColumn(DiveTripModel::RATING, new StarWidgetsDelegate(this));
-	TagFilterSortModel *model = TagFilterSortModel::instance();
+	MultiFilterSortModel *model = MultiFilterSortModel::instance();
 	model->setSortRole(DiveTripModel::SORT_ROLE);
 	model->setFilterKeyColumn(-1); // filter all columns
 	model->setFilterCaseSensitivity(Qt::CaseInsensitive);
diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
index 4b86605..e4df205 100644
--- a/qt-ui/models.cpp
+++ b/qt-ui/models.cpp
@@ -2351,17 +2351,17 @@ bool TagFilterModel::filterRow(int source_row, const QModelIndex &source_parent,
 	return false;
 }
 
-TagFilterSortModel *TagFilterSortModel::instance()
+MultiFilterSortModel *MultiFilterSortModel::instance()
 {
-	static TagFilterSortModel *self = new TagFilterSortModel();
+	static MultiFilterSortModel *self = new MultiFilterSortModel();
 	return self;
 }
 
-TagFilterSortModel::TagFilterSortModel(QObject *parent) : QSortFilterProxyModel(parent)
+MultiFilterSortModel::MultiFilterSortModel(QObject *parent) : QSortFilterProxyModel(parent)
 {
 }
 
-bool TagFilterSortModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
+bool MultiFilterSortModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
 {
 	if (models.isEmpty()) {
 		return true;
@@ -2376,12 +2376,12 @@ bool TagFilterSortModel::filterAcceptsRow(int source_row, const QModelIndex &sou
 	return false;
 }
 
-void TagFilterSortModel::myInvalidate()
+void MultiFilterSortModel::myInvalidate()
 {
 	invalidate();
 }
 
-void TagFilterSortModel::addFilterModel(MultiFilterInterface *model)
+void MultiFilterSortModel::addFilterModel(MultiFilterInterface *model)
 {
 	QAbstractItemModel *itemModel = dynamic_cast<QAbstractItemModel *>(model);
 	Q_ASSERT(itemModel);
@@ -2389,7 +2389,7 @@ void TagFilterSortModel::addFilterModel(MultiFilterInterface *model)
 	connect(itemModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SLOT(myInvalidate()));
 }
 
-void TagFilterSortModel::removeFilterModel(MultiFilterInterface *model)
+void MultiFilterSortModel::removeFilterModel(MultiFilterInterface *model)
 {
 	QAbstractItemModel *itemModel = dynamic_cast<QAbstractItemModel *>(model);
 	Q_ASSERT(itemModel);
diff --git a/qt-ui/models.h b/qt-ui/models.h
index a0b2565..032edc5 100644
--- a/qt-ui/models.h
+++ b/qt-ui/models.h
@@ -443,17 +443,17 @@ private:
 	explicit TagFilterModel(QObject *parent = 0);
 };
 
-class TagFilterSortModel : public QSortFilterProxyModel {
+class MultiFilterSortModel : public QSortFilterProxyModel {
 	Q_OBJECT
 public:
-	static TagFilterSortModel *instance();
+	static MultiFilterSortModel *instance();
 	virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
 	void addFilterModel(MultiFilterInterface *model);
 	void removeFilterModel(MultiFilterInterface *model);
 public slots:
 	void myInvalidate();
 private:
-	TagFilterSortModel(QObject *parent = 0);
+	MultiFilterSortModel(QObject *parent = 0);
 	QList<MultiFilterInterface*> models;
 };
 #endif // MODELS_H
diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index 47952c3..d00fab8 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -467,13 +467,13 @@ TagFilter::TagFilter(QWidget *parent) : QWidget(parent)
 
 void TagFilter::showEvent(QShowEvent *event)
 {
-	TagFilterSortModel::instance()->addFilterModel(TagFilterModel::instance());
+	MultiFilterSortModel::instance()->addFilterModel(TagFilterModel::instance());
 	QWidget::showEvent(event);
 }
 
 void TagFilter::hideEvent(QHideEvent *event)
 {
-	TagFilterSortModel::instance()->removeFilterModel(TagFilterModel::instance());
+	MultiFilterSortModel::instance()->removeFilterModel(TagFilterModel::instance());
 	QWidget::hideEvent(event);
 }
 
-- 
2.1.3

From 04c729f487a0cbf109ad33d8513eb87ce39c1eb3 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Fri, 31 Oct 2014 15:40:57 -0200
Subject: [PATCH 7/9] tagfilter.ui -> filterwidget.ui

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/listfilter.ui     | 34 ++++++++++++++++++++++++++++++++++
 qt-ui/simplewidgets.cpp |  5 +++--
 qt-ui/simplewidgets.h   |  2 +-
 qt-ui/tagfilter.ui      | 27 ---------------------------
 subsurface.pro          |  2 +-
 5 files changed, 39 insertions(+), 31 deletions(-)
 create mode 100644 qt-ui/listfilter.ui
 delete mode 100644 qt-ui/tagfilter.ui

diff --git a/qt-ui/listfilter.ui b/qt-ui/listfilter.ui
new file mode 100644
index 0000000..41a8dfa
--- /dev/null
+++ b/qt-ui/listfilter.ui
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TagFilter</class>
+ <widget class="QWidget" name="TagFilter">
+  <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>
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>TextLabel</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLineEdit" name="filterTag"/>
+   </item>
+   <item>
+    <widget class="QListView" name="tagView"/>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index d00fab8..a5ad499 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -459,10 +459,11 @@ void DiveComponentSelection::buttonClicked(QAbstractButton *button)
 TagFilter::TagFilter(QWidget *parent) : QWidget(parent)
 {
 	ui.setupUi(this);
+	ui.label->setText(tr("Tags: "));
 	QSortFilterProxyModel *filter = new QSortFilterProxyModel();
 	filter->setSourceModel(TagFilterModel::instance());
-	connect(ui.filterTag, SIGNAL(textChanged(QString)), filter, SLOT(setFilterFixedString(QString)));
-	ui.tagView->setModel(filter);
+	connect(ui.filterInternalList, SIGNAL(textChanged(QString)), filter, SLOT(setFilterFixedString(QString)));
+	ui.filterList->setModel(filter);
 }
 
 void TagFilter::showEvent(QShowEvent *event)
diff --git a/qt-ui/simplewidgets.h b/qt-ui/simplewidgets.h
index 48a5749..d4eece8 100644
--- a/qt-ui/simplewidgets.h
+++ b/qt-ui/simplewidgets.h
@@ -137,7 +137,7 @@ public:
 	virtual void showEvent(QShowEvent *);
 	virtual void hideEvent(QHideEvent *);
 private:
-	Ui::TagFilter ui;
+	Ui::FilterWidget ui;
 };
 
 class MultiFilter : public QScrollArea {
diff --git a/qt-ui/tagfilter.ui b/qt-ui/tagfilter.ui
deleted file mode 100644
index 91078ed..0000000
--- a/qt-ui/tagfilter.ui
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>TagFilter</class>
- <widget class="QWidget" name="TagFilter">
-  <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>
-    <widget class="QLineEdit" name="filterTag"/>
-   </item>
-   <item>
-    <widget class="QListView" name="tagView"/>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/subsurface.pro b/subsurface.pro
index b7e5ec9..7b38fd6 100644
--- a/subsurface.pro
+++ b/subsurface.pro
@@ -228,7 +228,7 @@ FORMS = \
 	qt-ui/usersurvey.ui \
 	qt-ui/divecomponentselection.ui \
 	qt-ui/configuredivecomputerdialog.ui \
-	qt-ui/tagfilter.ui \
+	qt-ui/listfilter.ui \
 	qt-ui/diveshareexportdialog.ui
 
 # Nether usermanual or printing is supported on android right now
-- 
2.1.3

From 9ffdc1a0f0ddef382132b76ff255a7a92eeac434 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Fri, 31 Oct 2014 15:46:58 -0200
Subject: [PATCH 8/9] Fix spacing in the layout of the MultiFilter

default is 8, setted to zero.

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

diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index a5ad499..710d0c3 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -484,7 +484,8 @@ MultiFilter::MultiFilter(QWidget *parent): QScrollArea(parent)
 	QHBoxLayout *l = new QHBoxLayout();
 
 	l->addWidget(new TagFilter());
-
+	l->setContentsMargins(0,0,0,0);
+	l->setSpacing(1);
 	w->setLayout(l);
 	w->setMinimumSize(l->count() * 150, 200);
 	setWidget(w);
-- 
2.1.3

From 2d33de7f7df1eb09d6bcf27ca501e537e48543af Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Fri, 31 Oct 2014 16:01:28 -0200
Subject: [PATCH 9/9] Better layout for the filtering widget

Fix the layout size, moved some stuff around.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 qt-ui/listfilter.ui     | 33 ++++++++++++++++++++++-----------
 qt-ui/simplewidgets.cpp |  3 +++
 qt-ui/simplewidgets.h   |  2 +-
 3 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/qt-ui/listfilter.ui b/qt-ui/listfilter.ui
index 41a8dfa..016b776 100644
--- a/qt-ui/listfilter.ui
+++ b/qt-ui/listfilter.ui
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0">
- <class>TagFilter</class>
- <widget class="QWidget" name="TagFilter">
+ <class>FilterWidget</class>
+ <widget class="QWidget" name="FilterWidget">
   <property name="geometry">
    <rect>
     <x>0</x>
@@ -15,17 +15,28 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QLabel" name="label">
-     <property name="text">
-      <string>TextLabel</string>
-     </property>
-    </widget>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="filterInternalList">
+       <property name="alignment">
+        <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+       </property>
+       <property name="placeholderText">
+        <string>Filter this list</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
    </item>
    <item>
-    <widget class="QLineEdit" name="filterTag"/>
-   </item>
-   <item>
-    <widget class="QListView" name="tagView"/>
+    <widget class="QListView" name="filterList"/>
    </item>
   </layout>
  </widget>
diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp
index 710d0c3..40f92c8 100644
--- a/qt-ui/simplewidgets.cpp
+++ b/qt-ui/simplewidgets.cpp
@@ -460,6 +460,9 @@ TagFilter::TagFilter(QWidget *parent) : QWidget(parent)
 {
 	ui.setupUi(this);
 	ui.label->setText(tr("Tags: "));
+	#if QT_VERSION >= 0x050000
+		ui.label->setClearButtonEnabled(true);
+	#endif
 	QSortFilterProxyModel *filter = new QSortFilterProxyModel();
 	filter->setSourceModel(TagFilterModel::instance());
 	connect(ui.filterInternalList, SIGNAL(textChanged(QString)), filter, SLOT(setFilterFixedString(QString)));
diff --git a/qt-ui/simplewidgets.h b/qt-ui/simplewidgets.h
index d4eece8..f90e547 100644
--- a/qt-ui/simplewidgets.h
+++ b/qt-ui/simplewidgets.h
@@ -12,7 +12,7 @@ class QAbstractButton;
 #include "ui_shifttimes.h"
 #include "ui_shiftimagetimes.h"
 #include "ui_divecomponentselection.h"
-#include "ui_tagfilter.h"
+#include "ui_listfilter.h"
 #include "exif.h"
 
 class MinMaxAvgWidget : public QWidget {
-- 
2.1.3

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

Reply via email to