KWin
Loading...
Searching...
No Matches
ruleitem.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2020 Ismael Asensio <isma.af@gmail.com>
3
4 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
5*/
6
7#include "ruleitem.h"
8
9namespace KWin
10{
11
12RuleItem::RuleItem(const QString &key,
13 const RulePolicy::Type policyType,
14 const RuleItem::Type type,
15 const QString &name,
16 const QString &section,
17 const QIcon &icon,
18 const QString &description)
19 : m_key(key)
20 , m_type(type)
21 , m_name(name)
22 , m_section(section)
23 , m_icon(icon)
24 , m_description(description)
25 , m_flags(NoFlags)
26 , m_enabled(false)
27 , m_policy(std::make_unique<RulePolicy>(policyType))
28{
29 reset();
30}
31
33{
35 m_value = typedValue(QVariant());
36 m_suggestedValue = QVariant();
37 m_policy->resetValue();
38 if (m_options) {
39 m_options->resetValue();
40 }
41}
42
43QString RuleItem::key() const
44{
45 return m_key;
46}
47
48QString RuleItem::name() const
49{
50 return m_name;
51}
52
53QString RuleItem::section() const
54{
55 return m_section;
56}
57
58QString RuleItem::iconName() const
59{
60 return m_icon.name();
61}
62
63QIcon RuleItem::icon() const
64{
65 return m_icon;
66}
67
68QString RuleItem::description() const
69{
70 return m_description;
71}
72
74{
75 return m_enabled;
76}
77
78void RuleItem::setEnabled(bool enabled)
79{
80 m_enabled = (enabled && !hasFlag(SuggestionOnly)) || hasFlag(AlwaysEnabled);
81}
82
84{
85 return m_flags.testFlag(flag);
86}
87
88void RuleItem::setFlag(RuleItem::Flags flag, bool active)
89{
90 m_flags.setFlag(flag, active);
91}
92
94{
95 return m_type;
96}
97
98QVariant RuleItem::value() const
99{
100 if (m_options && m_type == Option) {
101 return m_options->value();
102 }
103 return m_value;
104}
105
106void RuleItem::setValue(QVariant value)
107{
108 if (m_options && m_type == Option) {
109 m_options->setValue(value);
110 }
111 m_value = typedValue(value);
112}
113
115{
116 return m_suggestedValue;
117}
118
119void RuleItem::setSuggestedValue(QVariant value)
120{
121 m_suggestedValue = value.isNull() ? QVariant() : typedValue(value);
122}
123
124QVariant RuleItem::options() const
125{
126 if (!m_options) {
127 return QVariant();
128 }
129 return QVariant::fromValue(m_options.get());
130}
131
132void RuleItem::setOptionsData(const QList<OptionsModel::Data> &data)
133{
134 if (m_type != Option && m_type != OptionList && m_type != NetTypes) {
135 return;
136 }
137 if (!m_options) {
138 m_options = std::make_unique<OptionsModel>(QList<OptionsModel::Data>{}, m_type == NetTypes);
139 }
140 m_options->updateModelData(data);
141 m_options->setValue(m_value);
142}
143
145{
146 return m_policy->value();
147}
148
149void RuleItem::setPolicy(int policy)
150{
151 m_policy->setValue(policy);
152}
153
155{
156 return m_policy->type();
157}
158
159QVariant RuleItem::policyModel() const
160{
161 return QVariant::fromValue(m_policy.get());
162}
163
164QString RuleItem::policyKey() const
165{
166 return m_policy->policyKey(m_key);
167}
168
169QVariant RuleItem::typedValue(const QVariant &value) const
170{
171 switch (type()) {
172 case Undefined:
173 case Option:
174 return value;
175 case Boolean:
176 return value.toBool();
177 case Integer:
178 case Percentage:
179 return value.toInt();
180 case NetTypes: {
181 const uint typesMask = m_options ? value.toUInt() & m_options->allOptionsMask() : 0; // filter by the allowed mask in the model
182 if (typesMask == 0 || typesMask == m_options->allOptionsMask()) { // if no types or all of them are selected
183 return 0U - 1; // return an all active mask (NET:AllTypesMask)
184 }
185 return typesMask;
186 }
187 case Point: {
188 const QPoint point = value.toPoint();
189 return (point == invalidPoint) ? QPoint(0, 0) : point;
190 }
191 case Size:
192 return value.toSize();
193 case String:
194 if (value.type() == QVariant::StringList && !value.toStringList().isEmpty()) {
195 return value.toStringList().at(0).trimmed();
196 }
197 return value.toString().trimmed();
198 case Shortcut:
199 return value.toString();
200 case OptionList:
201 return value.toStringList();
202 }
203 return value;
204}
205
206} // namespace
207
208#include "moc_ruleitem.cpp"
RulePolicy::Type policyType() const
Definition ruleitem.cpp:154
QString description() const
Definition ruleitem.cpp:68
QIcon icon() const
Definition ruleitem.cpp:63
QVariant suggestedValue() const
Definition ruleitem.cpp:114
void setOptionsData(const QList< OptionsModel::Data > &data)
Definition ruleitem.cpp:132
void setEnabled(bool enabled)
Definition ruleitem.cpp:78
void setPolicy(int policy)
Definition ruleitem.cpp:149
QString name() const
Definition ruleitem.cpp:48
bool hasFlag(RuleItem::Flags flag) const
Definition ruleitem.cpp:83
void setValue(QVariant value)
Definition ruleitem.cpp:106
QString key() const
Definition ruleitem.cpp:43
bool isEnabled() const
Definition ruleitem.cpp:73
QVariant policyModel() const
Definition ruleitem.cpp:159
int policy() const
Definition ruleitem.cpp:144
QString iconName() const
Definition ruleitem.cpp:58
QString section() const
Definition ruleitem.cpp:53
QString policyKey() const
Definition ruleitem.cpp:164
QVariant options() const
Definition ruleitem.cpp:124
Type type() const
Definition ruleitem.cpp:93
void setFlag(RuleItem::Flags flag, bool active=true)
Definition ruleitem.cpp:88
void setSuggestedValue(QVariant value)
Definition ruleitem.cpp:119
QVariant value() const
Definition ruleitem.cpp:98
Session::Type type
Definition session.cpp:17
const QPoint invalidPoint(INT_MIN, INT_MIN)