on xenial help sign in
Make sure only one option is selected in check option filter. Some changes to combined filter.
commitab1ed52cb55e4db21f04da1e50651551aac56dd9 authorPawel Stolowski <pawel.stolowski@canonical.com> dateThu 20 Jun 2013, 13:25 (13 years ago) parent1c851d6
6 files changed+60−9
plugins/Unity/checkoptionfilter.cpp+22 plugins/Unity/checkoptionfilter.h+1 plugins/Unity/combinedfilteroption.cpp+9−5 plugins/Unity/combinedfilteroption.h+2−2 plugins/Unity/combinedfilteroptions.cpp+22−2 plugins/Unity/combinedfilteroptions.h+4
plugins/Unity/checkoptionfilter.cpp+22
@@ -48,10 +48,32 @@ void CheckOptionFilter::onOptionsChanged(unity::dash::CheckOptionFilter::CheckOp
4848 m_options = new FilterOptions(m_unityCheckOptionFilter->options,
4949 m_unityCheckOptionFilter->option_added,
5050 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+
5156 /* Property change signals */
5257 m_unityCheckOptionFilter->options.changed.connect(sigc::mem_fun(this, &CheckOptionFilter::onOptionsChanged));
5358
5459 Q_EMIT optionsChanged();
5560}
5661
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+
5779#include "checkoptionfilter.moc"
plugins/Unity/checkoptionfilter.h+1
@@ -53,6 +53,7 @@ private:
5353 unity::dash::CheckOptionFilter::Ptr m_unityCheckOptionFilter;
5454 FilterOptions* m_options;
5555
56+ void onActiveChanged(bool state);
5657 void onOptionsChanged(unity::dash::CheckOptionFilter::CheckOptions);
5758};
5859
plugins/Unity/combinedfilteroption.cpp+9−5
@@ -29,7 +29,9 @@ CombinedFilterOption::CombinedFilterOption(unity::dash::FilterOption::Ptr unityF
2929
3030std::string CombinedFilterOption::getCombinedId() const
3131{
32− return m_unityFilterOption[0]->id() + "-" + m_unityFilterOption[1]->id();
32+ if (m_unityFilterOption[1] != NULL)
33+ return m_unityFilterOption[0]->id() + "-" + m_unityFilterOption[1]->id();
34+ return m_unityFilterOption[0]->id();
3335}
3436
3537std::string CombinedFilterOption::getCombinedName() const
@@ -51,17 +53,19 @@ QString CombinedFilterOption::name() const
5153
5254QString CombinedFilterOption::iconHint() const
5355{
54− return "";
56+ return QString::fromStdString(m_unityFilterOption[0]->icon_hint());
5557}
5658
5759bool CombinedFilterOption::active() const
5860{
59− return m_unityFilterOption[0]->active && m_unityFilterOption[1]->active;
61+ if (m_unityFilterOption[1] != NULL)
62+ return m_unityFilterOption[0]->active && m_unityFilterOption[1]->active;
63+ return m_unityFilterOption[0]->active;
6064}
6165
6266void CombinedFilterOption::setActive(bool active)
6367{
64− m_active = active;
68+ m_active = active; //???
6569 m_unityFilterOption[0]->active;
6670 if (m_unityFilterOption[1] != NULL)
6771 m_unityFilterOption[1]->active = active;
@@ -93,6 +97,6 @@ void CombinedFilterOption::setUnityFilterOption(unity::dash::FilterOption::Ptr u
9397 m_unityFilterOption[i]->id.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::onIdChanged));
9498 m_unityFilterOption[i]->name.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::nameChanged));
9599 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));
97101 }
98102}
plugins/Unity/combinedfilteroption.h+2−2
@@ -29,7 +29,7 @@
2929class CombinedFilterOption : public AbstractFilterOption
3030{
3131public:
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);
3333
3434 /* getters */
3535 QString id() const override;
@@ -49,7 +49,7 @@ private:
4949 std::string getCombinedName() const;
5050 void setUnityFilterOption(unity::dash::FilterOption::Ptr unityFilterOption1, unity::dash::FilterOption::Ptr unityFilterOption2 = NULL);
5151
52− bool m_active;
52+ bool m_active; //not needed???
5353 unity::dash::FilterOption::Ptr m_unityFilterOption[2];
5454};
5555
plugins/Unity/combinedfilteroptions.cpp+22−2
@@ -47,6 +47,7 @@ void CombinedFilterOptions::initList(const std::vector<unity::dash::FilterOption
4747 sigc::signal<void, unity::dash::FilterOption::Ptr> itemAddedSignal,
4848 sigc::signal<void, unity::dash::FilterOption::Ptr> itemRemovedSignal)
4949{
50+ // combine options, e.g. A, B, C becomes A-B, B-C, C
5051 unsigned int i = 0;
5152 while (i < list.size()) {
5253 unity::dash::FilterOption::Ptr option1 = list[i];
@@ -54,17 +55,36 @@ void CombinedFilterOptions::initList(const std::vector<unity::dash::FilterOption
5455 if (i < list.size()-1) {
5556 option2 = list[i+1];
5657 }
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);
5861 ++i;
5962 }
6063 if (list.size() > 1) {
61− auto co = new CombinedFilterOption(list[i], NULL);
64+ auto co = new CombinedFilterOption(list[i-1], NULL);
65+ addOption(co);
6266 }
6367
6468 itemAddedSignal.connect(sigc::mem_fun(this, &CombinedFilterOptions::onItemAdded));
6569 itemRemovedSignal.connect(sigc::mem_fun(this, &CombinedFilterOptions::onItemRemoved));
6670}
6771
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+
6888void CombinedFilterOptions::onItemAdded(unity::dash::FilterOption::Ptr item)
6989{
7090}
plugins/Unity/combinedfilteroptions.h+4
@@ -41,10 +41,14 @@ public:
4141 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
4242 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
4343
44+private Q_SLOTS:
45+ void onActiveChanged(bool state);
46+
4447private:
4548 void initList(const std::vector<unity::dash::FilterOption::Ptr>& list,
4649 sigc::signal<void, unity::dash::FilterOption::Ptr> itemAddedSignal,
4750 sigc::signal<void, unity::dash::FilterOption::Ptr> itemRemovedSignal);
51+ void addOption(CombinedFilterOption *option);
4852 void onItemAdded(unity::dash::FilterOption::Ptr item);
4953 void onItemRemoved(unity::dash::FilterOption::Ptr item);
5054