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
