on 174fe91 help sign in
unity8/plugins/Unity/combinedfilteroption.cpp
139 lines 4.8 kB history raw
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * Authors:
5 * Pawel Stolowski <pawel.stolowski@canonical.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; version 3.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
20#include "combinedfilteroption.h"
22#include <libintl.h>
24CombinedFilterOption::CombinedFilterOption(unity::dash::FilterOption::Ptr unityFilterOption1, unity::dash::FilterOption::Ptr unityFilterOption2, QObject *parent)
25 : AbstractFilterOption(parent),
26 m_active(false),
27 m_requestedActive(false),
28 m_unityFilterOption {nullptr, nullptr}
30 setUnityFilterOption(unityFilterOption1, unityFilterOption2);
33QString CombinedFilterOption::getCombinedId() const
35 if (m_unityFilterOption[1] != nullptr)
36 return QString::fromStdString(m_unityFilterOption[0]->id() + "-" + m_unityFilterOption[1]->id());
37 return QString::fromStdString(m_unityFilterOption[0]->id());
40QString CombinedFilterOption::getCombinedName() const
42 if (m_unityFilterOption[1] != nullptr) {
43 // TRANSLATORS: this joins two names from a Range filter
44 return QString::fromStdString(gettext("%1 - %2"))
45 .arg(QString::fromStdString(m_unityFilterOption[0]->name()))
46 .arg(QString::fromStdString(m_unityFilterOption[1]->name()));
47 }
48 return QString::fromStdString(m_unityFilterOption[0]->name());
51QString CombinedFilterOption::id() const
53 return getCombinedId();
56QString CombinedFilterOption::name() const
58 return getCombinedName();
61QString CombinedFilterOption::iconHint() const
63 return QString::fromStdString(m_unityFilterOption[0]->icon_hint());
66bool CombinedFilterOption::active() const
68 if (m_unityFilterOption[1] != nullptr)
69 return m_unityFilterOption[0]->active && m_unityFilterOption[1]->active && m_requestedActive;
70 return m_unityFilterOption[0]->active && m_requestedActive;
73void CombinedFilterOption::setActive(bool active)
75 m_requestedActive = active;
76 m_unityFilterOption[0]->active = active;
77 if (m_unityFilterOption[1] != nullptr)
78 m_unityFilterOption[1]->active = active;
81void CombinedFilterOption::setInactive(const CombinedFilterOption &otherFilter)
83 // de-activate underlying unity filter options as long as they don't belong
84 // to otherFilter.
85 if (this != &otherFilter) {
86 m_requestedActive = false;
87 for (int i = 0; i<2; i++) {
88 if (m_unityFilterOption[i] != nullptr) {
89 if (m_unityFilterOption[i]->active &&
90 m_unityFilterOption[i] != otherFilter.m_unityFilterOption[0] &&
91 m_unityFilterOption[i] != otherFilter.m_unityFilterOption[1]) {
92 m_unityFilterOption[i]->active = false;
93 }
94 }
95 }
96 }
99void CombinedFilterOption::onIdChanged(const std::string &/* id */)
101 Q_EMIT idChanged(getCombinedId());
104void CombinedFilterOption::onNameChanged(const std::string &/* name */)
106 Q_EMIT nameChanged(getCombinedName());
109void CombinedFilterOption::onIconHintChanged(const std::string &/* iconHint */)
111 Q_EMIT iconHintChanged(iconHint());
114void CombinedFilterOption::onActiveChanged(bool /*active*/)
116 bool combinedState = CombinedFilterOption::active();
117 if (m_active != combinedState) {
118 m_active = combinedState;
119 Q_EMIT activeChanged(m_active);
120 }
123void CombinedFilterOption::setUnityFilterOption(unity::dash::FilterOption::Ptr unityFilterOption1, unity::dash::FilterOption::Ptr unityFilterOption2)
125 m_signals.disconnectAll();
127 m_unityFilterOption[0] = unityFilterOption1;
128 m_unityFilterOption[1] = unityFilterOption2;
130 /* Property change signals */
131 for (int i=0; i<2; i++) {
132 if (m_unityFilterOption[i] != nullptr) {
133 m_signals << m_unityFilterOption[i]->id.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::onIdChanged))
134 << m_unityFilterOption[i]->name.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::onNameChanged))
135 << m_unityFilterOption[i]->icon_hint.changed.connect(sigc::mem_fun(this,&CombinedFilterOption::onIconHintChanged))
136 << m_unityFilterOption[i]->active.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::onActiveChanged));
137 }
138 }