summaryrefslogtreecommitdiffstats
path: root/desktop-widgets
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2017-12-23 14:17:23 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-12-24 08:24:11 -0800
commit1a4e7ad0dd29b9eeac2016933cb86bff260dadbb (patch)
tree92730f71f4d41207bb86fd81509fc7778f96108f /desktop-widgets
parent603e43f46ece939e732df14c501844e7bd983211 (diff)
downloadsubsurface-1a4e7ad0dd29b9eeac2016933cb86bff260dadbb.tar.gz
Factor out *Filter code into FilterBase base class
The TagFilter, BuddyFilter, SuitFilter and LocationFilter classes all did essentially the same thing. Therefore, factor out common code / objects into a base class FilterBase. The new base class stores a pointer to the filter model. It was felt that this is simpler than introducing virtual methods. The only thing the *Filter classes now do is setting a label and in one case a tooltip. Thus, in principle, they could be removed completely, but let's keep them for now. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets')
-rw-r--r--desktop-widgets/simplewidgets.cpp87
-rw-r--r--desktop-widgets/simplewidgets.h39
2 files changed, 30 insertions, 96 deletions
diff --git a/desktop-widgets/simplewidgets.cpp b/desktop-widgets/simplewidgets.cpp
index fbc0a941d..addbda6af 100644
--- a/desktop-widgets/simplewidgets.cpp
+++ b/desktop-widgets/simplewidgets.cpp
@@ -500,109 +500,52 @@ void DiveComponentSelection::buttonClicked(QAbstractButton *button)
}
}
-TagFilter::TagFilter(QWidget *parent) : QWidget(parent)
+FilterBase::FilterBase(FilterModelBase *model_, QWidget *parent)
+ : QWidget(parent)
+ , model(model_)
{
ui.setupUi(this);
- ui.label->setText(tr("Tags: "));
#if QT_VERSION >= 0x050200
ui.filterInternalList->setClearButtonEnabled(true);
#endif
QSortFilterProxyModel *filter = new QSortFilterProxyModel();
- filter->setSourceModel(TagFilterModel::instance());
+ filter->setSourceModel(model);
filter->setFilterCaseSensitivity(Qt::CaseInsensitive);
connect(ui.filterInternalList, SIGNAL(textChanged(QString)), filter, SLOT(setFilterFixedString(QString)));
ui.filterList->setModel(filter);
}
-void TagFilter::showEvent(QShowEvent *event)
+void FilterBase::showEvent(QShowEvent *event)
{
- MultiFilterSortModel::instance()->addFilterModel(TagFilterModel::instance());
+ MultiFilterSortModel::instance()->addFilterModel(model);
QWidget::showEvent(event);
}
-void TagFilter::hideEvent(QHideEvent *event)
+void FilterBase::hideEvent(QHideEvent *event)
{
- MultiFilterSortModel::instance()->removeFilterModel(TagFilterModel::instance());
+ MultiFilterSortModel::instance()->removeFilterModel(model);
QWidget::hideEvent(event);
}
-BuddyFilter::BuddyFilter(QWidget *parent) : QWidget(parent)
-{
- ui.setupUi(this);
- ui.label->setText(tr("Person: "));
- ui.label->setToolTip(tr("Searches for buddies and divemasters"));
-#if QT_VERSION >= 0x050200
- ui.filterInternalList->setClearButtonEnabled(true);
-#endif
- QSortFilterProxyModel *filter = new QSortFilterProxyModel();
- filter->setSourceModel(BuddyFilterModel::instance());
- filter->setFilterCaseSensitivity(Qt::CaseInsensitive);
- connect(ui.filterInternalList, SIGNAL(textChanged(QString)), filter, SLOT(setFilterFixedString(QString)));
- ui.filterList->setModel(filter);
-}
-
-void BuddyFilter::showEvent(QShowEvent *event)
+TagFilter::TagFilter(QWidget *parent) : FilterBase(TagFilterModel::instance(), parent)
{
- MultiFilterSortModel::instance()->addFilterModel(BuddyFilterModel::instance());
- QWidget::showEvent(event);
+ ui.label->setText(tr("Tags: "));
}
-void BuddyFilter::hideEvent(QHideEvent *event)
+BuddyFilter::BuddyFilter(QWidget *parent) : FilterBase(BuddyFilterModel::instance(), parent)
{
- MultiFilterSortModel::instance()->removeFilterModel(BuddyFilterModel::instance());
- QWidget::hideEvent(event);
+ ui.label->setText(tr("Person: "));
+ ui.label->setToolTip(tr("Searches for buddies and divemasters"));
}
-LocationFilter::LocationFilter(QWidget *parent) : QWidget(parent)
+LocationFilter::LocationFilter(QWidget *parent) : FilterBase(LocationFilterModel::instance(), parent)
{
- ui.setupUi(this);
ui.label->setText(tr("Location: "));
-#if QT_VERSION >= 0x050200
- ui.filterInternalList->setClearButtonEnabled(true);
-#endif
- QSortFilterProxyModel *filter = new QSortFilterProxyModel();
- filter->setSourceModel(LocationFilterModel::instance());
- filter->setFilterCaseSensitivity(Qt::CaseInsensitive);
- connect(ui.filterInternalList, SIGNAL(textChanged(QString)), filter, SLOT(setFilterFixedString(QString)));
- ui.filterList->setModel(filter);
}
-void LocationFilter::showEvent(QShowEvent *event)
+SuitFilter::SuitFilter(QWidget *parent) : FilterBase(SuitsFilterModel::instance(), parent)
{
- MultiFilterSortModel::instance()->addFilterModel(LocationFilterModel::instance());
- QWidget::showEvent(event);
-}
-
-void LocationFilter::hideEvent(QHideEvent *event)
-{
- MultiFilterSortModel::instance()->removeFilterModel(LocationFilterModel::instance());
- QWidget::hideEvent(event);
-}
-
-SuitFilter::SuitFilter(QWidget *parent) : QWidget(parent)
-{
- ui.setupUi(this);
ui.label->setText(tr("Suits: "));
-#if QT_VERSION >= 0x050200
- ui.filterInternalList->setClearButtonEnabled(true);
-#endif
- QSortFilterProxyModel *filter = new QSortFilterProxyModel();
- filter->setSourceModel(SuitsFilterModel::instance());
- filter->setFilterCaseSensitivity(Qt::CaseInsensitive);
- connect(ui.filterInternalList, SIGNAL(textChanged(QString)), filter, SLOT(setFilterFixedString(QString)));
- ui.filterList->setModel(filter);
-}
-
-void SuitFilter::showEvent(QShowEvent *event)
-{
- MultiFilterSortModel::instance()->addFilterModel(SuitsFilterModel::instance());
- QWidget::showEvent(event);
-}
-
-void SuitFilter::hideEvent(QHideEvent *event)
-{
- MultiFilterSortModel::instance()->removeFilterModel(SuitsFilterModel::instance());
- QWidget::hideEvent(event);
}
MultiFilter::MultiFilter(QWidget *parent) : QWidget(parent)
diff --git a/desktop-widgets/simplewidgets.h b/desktop-widgets/simplewidgets.h
index 4f9746d98..22f1ddd62 100644
--- a/desktop-widgets/simplewidgets.h
+++ b/desktop-widgets/simplewidgets.h
@@ -5,6 +5,7 @@
class MinMaxAvgWidgetPrivate;
class QAbstractButton;
class QNetworkReply;
+class FilterModelBase;
#include <QWidget>
#include <QGroupBox>
@@ -165,49 +166,39 @@ public:
Ui::FilterWidget2 ui;
};
-class TagFilter : public QWidget {
- Q_OBJECT
-public:
- TagFilter(QWidget *parent = 0);
+class FilterBase : public QWidget {
+protected:
+ FilterBase(FilterModelBase *model, QWidget *parent = 0);
+ FilterModelBase *model;
+ Ui::FilterWidget ui;
virtual void showEvent(QShowEvent *);
virtual void hideEvent(QHideEvent *);
+ friend class MultiFilter;
+};
-private:
- Ui::FilterWidget ui;
+class TagFilter : public FilterBase {
+ Q_OBJECT
+public:
+ TagFilter(QWidget *parent = 0);
friend class MultiFilter;
};
-class BuddyFilter : public QWidget {
+class BuddyFilter : public FilterBase {
Q_OBJECT
public:
BuddyFilter(QWidget *parent = 0);
- virtual void showEvent(QShowEvent *);
- virtual void hideEvent(QHideEvent *);
-
-private:
- Ui::FilterWidget ui;
};
-class SuitFilter : public QWidget {
+class SuitFilter : public FilterBase {
Q_OBJECT
public:
SuitFilter(QWidget *parent = 0);
- virtual void showEvent(QShowEvent *);
- virtual void hideEvent(QHideEvent *);
-
-private:
- Ui::FilterWidget ui;
};
-class LocationFilter : public QWidget {
+class LocationFilter : public FilterBase {
Q_OBJECT
public:
LocationFilter(QWidget *parent = 0);
- virtual void showEvent(QShowEvent *);
- virtual void hideEvent(QHideEvent *);
-
-private:
- Ui::FilterWidget ui;
};
class TextHyperlinkEventFilter : public QObject {