on 55aeee2 help sign in
unity8/tests/mocks/Unity/fake_scope.cpp
250 lines 6.8 kB history raw
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
17// Self
18#include "fake_scope.h"
20#include <dee.h>
21#include "paths.h"
23#include "fake_preview.h"
25static DeeModel* create_categories_model(unsigned category_count);
26static DeeModel* create_results_model(unsigned category_count, unsigned result_count);
28// TODO: Implement remaining pieces
30Scope::Scope(QObject* parent)
31 : QObject(parent)
32 , m_visible(false)
33 , m_searching(false)
34 , m_isActive(false)
35 , m_categories(new Categories(this))
36 , m_results(new DeeListModel(this))
38 DeeModel* results_model = create_results_model(4, 30);
39 m_categories->setResultModel(results_model);
40 m_categories->setModel(create_categories_model(4));
41 m_results->setModel(results_model);
44Scope::Scope(QString const& id, QString const& name, bool visible, QObject* parent)
45 : QObject(parent)
46 , m_id(id)
47 , m_name(name)
48 , m_visible(visible)
49 , m_searching(false)
50 , m_isActive(false)
51 , m_categories(new Categories(this))
52 , m_results(new DeeListModel(this))
54 DeeModel* results_model = create_results_model(4, 30);
55 m_categories->setResultModel(results_model);
56 m_categories->setModel(create_categories_model(4));
57 m_results->setModel(results_model);
60QString Scope::id() const {
61 return m_id;
64QString Scope::name() const {
65 return m_name;
68QString Scope::searchQuery() const {
69 return m_searchQuery;
72QString Scope::iconHint() const {
73 return m_iconHint;
76QString Scope::description() const {
77 return m_description;
80QString Scope::searchHint() const {
81 return QString("");
84QString Scope::shortcut() const {
85 return QString("");
88bool Scope::connected() const {
89 return true;
92bool Scope::searchInProgress() const {
93 return m_searching;
96Categories* Scope::categories() const {
97 return m_categories;
100QString Scope::noResultsHint() const {
101 return m_noResultsHint;
104QString Scope::formFactor() const {
105 return m_formFactor;
108bool Scope::visible() const {
109 return m_visible;
112bool Scope::isActive() const {
113 return m_isActive;
116void Scope::setName(const QString &str) {
117 if (str != m_name) {
118 m_name = str;
119 Q_EMIT nameChanged(m_name);
120 }
123void Scope::setSearchQuery(const QString &str) {
124 if (str != m_searchQuery) {
125 m_searchQuery = str;
126 Q_EMIT searchQueryChanged();
127 }
130void Scope::setFormFactor(const QString &str) {
131 if (str != m_formFactor) {
132 m_formFactor = str;
133 Q_EMIT formFactorChanged();
134 }
137void Scope::setActive(const bool active) {
138 if (active != m_isActive) {
139 m_isActive = active;
140 Q_EMIT isActiveChanged();
141 }
144void Scope::setSearchInProgress(const bool inProg) {
145 if (inProg != m_searching) {
146 m_searching = inProg;
147 Q_EMIT searchInProgressChanged();
148 }
151void Scope::setNoResultsHint(const QString& str) {
152 if (str != m_noResultsHint) {
153 m_noResultsHint = str;
154 Q_EMIT noResultsHintChanged();
155 }
158void Scope::activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
159 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
160 const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata)
162 Q_UNUSED(uri);
163 Q_UNUSED(icon_hint);
164 Q_UNUSED(category);
165 Q_UNUSED(result_type);
166 Q_UNUSED(mimetype);
167 Q_UNUSED(title);
168 Q_UNUSED(comment);
169 Q_UNUSED(dnd_uri);
170 Q_UNUSED(metadata);
173void Scope::preview(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
174 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
175 const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata)
177 Q_UNUSED(uri);
178 Q_UNUSED(icon_hint);
179 Q_UNUSED(category);
180 Q_UNUSED(result_type);
181 Q_UNUSED(mimetype);
182 Q_UNUSED(title);
183 Q_UNUSED(comment);
184 Q_UNUSED(dnd_uri);
185 Q_UNUSED(metadata);
188static const gchar * categories_model_schema[] = {
189 "s", //ID
190 "s", // DISPLAY_NAME
191 "s", // ICON_HINT
192 "s", // RENDERER_NAME
193 "a{sv}" // HINTS
194};
197DeeModel* create_categories_model(unsigned category_count) {
198 DeeModel* category_model = dee_sequence_model_new();
199 dee_model_set_schema_full(category_model, categories_model_schema, G_N_ELEMENTS(categories_model_schema));
200 GVariant* hints = g_variant_new_array(g_variant_type_element(G_VARIANT_TYPE_VARDICT), NULL, 0);
202 for(unsigned i = 0; i < category_count; ++i)
203 {
204 dee_model_append(category_model,
205 std::to_string(i).c_str(),
206 ("Category "+std::to_string(i)).c_str(),
207 "gtk-apply",
208 "grid",
209 hints);
210 }
211 return category_model;
215/* Schema that is used in the DeeModel representing
216 the results */
217static const gchar * results_model_schema[] = {
218 "s", // URI
219 "s", // ICON_HINT
220 "u", // CATEGORY
221 "u", // RESULT_TYPE
222 "s", // MIMETYPE
223 "s", // TITLE
224 "s", // COMMENT
225 "s", // DND_URI
226 "a{sv}" // METADATA
227};
229DeeModel* create_results_model(unsigned category_count, unsigned result_count) {
230 DeeModel* results_model = dee_sequence_model_new();
231 dee_model_set_schema_full(results_model, results_model_schema, G_N_ELEMENTS(results_model_schema));
232 GVariant* hints = g_variant_new_array(g_variant_type_element(G_VARIANT_TYPE_VARDICT), NULL, 0);
234 for(unsigned i = 0; i < result_count; ++i)
235 {
236 unsigned category = i % category_count;
238 dee_model_append(results_model,
239 ("uri://result."+std::to_string(i)).c_str(),
240 (shellAppDirectory() + "graphics/applicationIcons/dash.png").toLatin1().data(),
241 category,
242 0,
243 "application/x-desktop",
244 ("Title."+std::to_string(i)).c_str(),
245 ("Comment."+std::to_string(i)).c_str(),
246 ("uri://result."+std::to_string(i)).c_str(),
247 hints);
248 }
249 return results_model;