on xenial help sign in
Make sure only one option is selected in check option filter. Some changes to combined filter.
ab1ed52Pawel Stolowski
plugins/Unity/checkoptionfilter.cpp+22
@@ -48,10 +48,32 @@ void CheckOptionFilter::onOptionsChanged(unity::dash::CheckOptionFilter::CheckOp
48 m_options = new FilterOptions(m_unityCheckOptionFilter->options,
48 m_options = new FilterOptions(m_unityCheckOptionFilter->options,
49 m_unityCheckOptionFilter->option_added,
49 m_unityCheckOptionFilter->option_added,
50 m_unityCheckOptionFilter->option_removed);
50 m_unityCheckOptionFilter->option_removed);
51+
52+ Q_FOREACH(FilterOption* option, m_options->rawList()) {
53+ connect(option, SIGNAL(activeChanged(bool)), this, SLOT(onActiveChanged(bool)));
54+ }
55+
51 /* Property change signals */
56 /* Property change signals */
52 m_unityCheckOptionFilter->options.changed.connect(sigc::mem_fun(this, &CheckOptionFilter::onOptionsChanged));
57 m_unityCheckOptionFilter->options.changed.connect(sigc::mem_fun(this, &CheckOptionFilter::onOptionsChanged));
53
58
54 Q_EMIT optionsChanged();
59 Q_EMIT optionsChanged();
55}
60}
56
61
62+void CheckOptionFilter::onActiveChanged(bool state)
63+{
64+ if (state == false)
65+ return;
66+
67+ FilterOption *selected_option = dynamic_cast<FilterOption*>(QObject::sender());
68+ if (selected_option) {
69+ Q_FOREACH(FilterOption* option, m_options->rawList()) {
70+ if (option != selected_option && option->active()) {
71+ option->setActive(false);
72+ // we know only one option can be selected, so break immediately
73+ break;
74+ }
75+ }
76+ }
77+}
78+
57#include "checkoptionfilter.moc"
79#include "checkoptionfilter.moc"
plugins/Unity/checkoptionfilter.h+1
@@ -53,6 +53,7 @@ private:
53 unity::dash::CheckOptionFilter::Ptr m_unityCheckOptionFilter;
53 unity::dash::CheckOptionFilter::Ptr m_unityCheckOptionFilter;
54 FilterOptions* m_options;
54 FilterOptions* m_options;
55
55
56+ void onActiveChanged(bool state);
56 void onOptionsChanged(unity::dash::CheckOptionFilter::CheckOptions);
57 void onOptionsChanged(unity::dash::CheckOptionFilter::CheckOptions);
57};
58};
58
59
plugins/Unity/combinedfilteroption.cpp+9−5
@@ -29,7 +29,9 @@ CombinedFilterOption::CombinedFilterOption(unity::dash::FilterOption::Ptr unityF
29
29
30std::string CombinedFilterOption::getCombinedId() const
30std::string CombinedFilterOption::getCombinedId() const
31{
31{
32+ if (m_unityFilterOption[1] != NULL)
32− return m_unityFilterOption[0]->id() + "-" + m_unityFilterOption[1]->id();
33+ return m_unityFilterOption[0]->id() + "-" + m_unityFilterOption[1]->id();
34+ return m_unityFilterOption[0]->id();
33}
35}
34
36
35std::string CombinedFilterOption::getCombinedName() const
37std::string CombinedFilterOption::getCombinedName() const
@@ -51,17 +53,19 @@ QString CombinedFilterOption::name() const
51
53
52QString CombinedFilterOption::iconHint() const
54QString CombinedFilterOption::iconHint() const
53{
55{
54− return "";
56+ return QString::fromStdString(m_unityFilterOption[0]->icon_hint());
55}
57}
56
58
57bool CombinedFilterOption::active() const
59bool CombinedFilterOption::active() const
58{
60{
61+ if (m_unityFilterOption[1] != NULL)
59− return m_unityFilterOption[0]->active && m_unityFilterOption[1]->active;
62+ return m_unityFilterOption[0]->active && m_unityFilterOption[1]->active;
63+ return m_unityFilterOption[0]->active;
60}
64}
61
65
62void CombinedFilterOption::setActive(bool active)
66void CombinedFilterOption::setActive(bool active)
63{
67{
64− m_active = active;
68+ m_active = active; //???
65 m_unityFilterOption[0]->active;
69 m_unityFilterOption[0]->active;
66 if (m_unityFilterOption[1] != NULL)
70 if (m_unityFilterOption[1] != NULL)
67 m_unityFilterOption[1]->active = active;
71 m_unityFilterOption[1]->active = active;
@@ -93,6 +97,6 @@ void CombinedFilterOption::setUnityFilterOption(unity::dash::FilterOption::Ptr u
93 m_unityFilterOption[i]->id.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::onIdChanged));
97 m_unityFilterOption[i]->id.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::onIdChanged));
94 m_unityFilterOption[i]->name.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::nameChanged));
98 m_unityFilterOption[i]->name.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::nameChanged));
95 m_unityFilterOption[i]->icon_hint.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::iconHintChanged));
99 m_unityFilterOption[i]->icon_hint.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::iconHintChanged));
96− m_unityFilterOption[i]->active.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::activeChanged));
100+ m_unityFilterOption[i]->active.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::onActiveChanged));
97 }
101 }
98}
102}
plugins/Unity/combinedfilteroption.h+2−2
@@ -29,7 +29,7 @@
29class CombinedFilterOption : public AbstractFilterOption
29class CombinedFilterOption : public AbstractFilterOption
30{
30{
31public:
31public:
32− explicit CombinedFilterOption(unity::dash::FilterOption::Ptr unityFilterOption1, unity::dash::FilterOption::Ptr unityFilterOption2, QObject *parent = 0);
32+ explicit CombinedFilterOption(unity::dash::FilterOption::Ptr unityFilterOption1, unity::dash::FilterOption::Ptr unityFilterOption2 = NULL, QObject *parent = 0);
33
33
34 /* getters */
34 /* getters */
35 QString id() const override;
35 QString id() const override;
@@ -49,7 +49,7 @@ private:
49 std::string getCombinedName() const;
49 std::string getCombinedName() const;
50 void setUnityFilterOption(unity::dash::FilterOption::Ptr unityFilterOption1, unity::dash::FilterOption::Ptr unityFilterOption2 = NULL);
50 void setUnityFilterOption(unity::dash::FilterOption::Ptr unityFilterOption1, unity::dash::FilterOption::Ptr unityFilterOption2 = NULL);
51
51
52− bool m_active;
52+ bool m_active; //not needed???
53 unity::dash::FilterOption::Ptr m_unityFilterOption[2];
53 unity::dash::FilterOption::Ptr m_unityFilterOption[2];
54};
54};
55
55
plugins/Unity/combinedfilteroptions.cpp+22−2
@@ -47,6 +47,7 @@ void CombinedFilterOptions::initList(const std::vector<unity::dash::FilterOption
47 sigc::signal<void, unity::dash::FilterOption::Ptr> itemAddedSignal,
47 sigc::signal<void, unity::dash::FilterOption::Ptr> itemAddedSignal,
48 sigc::signal<void, unity::dash::FilterOption::Ptr> itemRemovedSignal)
48 sigc::signal<void, unity::dash::FilterOption::Ptr> itemRemovedSignal)
49{
49{
50+ // combine options, e.g. A, B, C becomes A-B, B-C, C
50 unsigned int i = 0;
51 unsigned int i = 0;
51 while (i < list.size()) {
52 while (i < list.size()) {
52 unity::dash::FilterOption::Ptr option1 = list[i];
53 unity::dash::FilterOption::Ptr option1 = list[i];
@@ -54,17 +55,36 @@ void CombinedFilterOptions::initList(const std::vector<unity::dash::FilterOption
54 if (i < list.size()-1) {
55 if (i < list.size()-1) {
55 option2 = list[i+1];
56 option2 = list[i+1];
56 }
57 }
57− auto co = new CombinedFilterOption(option1, option2);
58+ auto co = new CombinedFilterOption(option1);
59+ connect(co, SIGNAL(activeChanged(bool)), this, SLOT(onActiveChanged(bool)));
60+ addOption(co);
58 ++i;
61 ++i;
59 }
62 }
60 if (list.size() > 1) {
63 if (list.size() > 1) {
61− auto co = new CombinedFilterOption(list[i], NULL);
64+ auto co = new CombinedFilterOption(list[i-1], NULL);
65+ addOption(co);
62 }
66 }
63
67
64 itemAddedSignal.connect(sigc::mem_fun(this, &CombinedFilterOptions::onItemAdded));
68 itemAddedSignal.connect(sigc::mem_fun(this, &CombinedFilterOptions::onItemAdded));
65 itemRemovedSignal.connect(sigc::mem_fun(this, &CombinedFilterOptions::onItemRemoved));
69 itemRemovedSignal.connect(sigc::mem_fun(this, &CombinedFilterOptions::onItemRemoved));
66}
70}
67
71
72+void CombinedFilterOptions::addOption(CombinedFilterOption *option)
73+{
74+ int index = m_list.count();
75+ beginInsertRows(QModelIndex(), index, index);
76+ m_list.insert(index, option);
77+ endInsertRows();
78+}
79+
80+void CombinedFilterOptions::onActiveChanged(bool state)
81+{
82+ CombinedFilterOption *option = dynamic_cast<CombinedFilterOption*>(QObject::sender());
83+ if (option) {
84+ //TODO: de-activate all others?
85+ }
86+}
87+
68void CombinedFilterOptions::onItemAdded(unity::dash::FilterOption::Ptr item)
88void CombinedFilterOptions::onItemAdded(unity::dash::FilterOption::Ptr item)
69{
89{
70}
90}
plugins/Unity/combinedfilteroptions.h+4
@@ -41,10 +41,14 @@ public:
41 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
41 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
42 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
42 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
43
43
44+private Q_SLOTS:
45+ void onActiveChanged(bool state);
46+
44private:
47private:
45 void initList(const std::vector<unity::dash::FilterOption::Ptr>& list,
48 void initList(const std::vector<unity::dash::FilterOption::Ptr>& list,
46 sigc::signal<void, unity::dash::FilterOption::Ptr> itemAddedSignal,
49 sigc::signal<void, unity::dash::FilterOption::Ptr> itemAddedSignal,
47 sigc::signal<void, unity::dash::FilterOption::Ptr> itemRemovedSignal);
50 sigc::signal<void, unity::dash::FilterOption::Ptr> itemRemovedSignal);
51+ void addOption(CombinedFilterOption *option);
48 void onItemAdded(unity::dash::FilterOption::Ptr item);
52 void onItemAdded(unity::dash::FilterOption::Ptr item);
49 void onItemRemoved(unity::dash::FilterOption::Ptr item);
53 void onItemRemoved(unity::dash::FilterOption::Ptr item);
50
54