/* * Copyright (C) 2013 Canonical, Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ // Self #include "fake_scope.h" #include #include "paths.h" static DeeModel* create_categories_model(unsigned category_count); static DeeModel* create_results_model(unsigned category_count, unsigned result_count); // TODO: Implement remaining pieces Scope::Scope(QObject* parent) : QObject(parent), m_visible(false), m_categories(new Categories(this)), m_results(new DeeListModel(this)) { m_categories->setModel(create_categories_model(4)); m_results->setModel(create_results_model(4, 30)); m_categories->setResultModel(m_results); } Scope::Scope(QString const& id, QString const& name, bool visible, QObject* parent) : QObject(parent), m_id(id), m_name(name), m_visible(visible), m_categories(new Categories(this)), m_results(new DeeListModel(this)) { m_categories->setModel(create_categories_model(4)); m_results->setModel(create_results_model(4, 30)); m_categories->setResultModel(m_results); } QString Scope::id() const { return m_id; } QString Scope::name() const { return m_name; } QString Scope::searchQuery() const { return m_searchQuery; } void Scope::setName(const QString &str) { if (str != m_name) { m_name = str; Q_EMIT nameChanged(m_name); } } void Scope::setSearchQuery(const QString &str) { if (str != m_searchQuery) { m_searchQuery = str; Q_EMIT searchQueryChanged(m_searchQuery); } } bool Scope::visible() const { return m_visible; } Categories* Scope::categories() const { return m_categories; } static const gchar * categories_model_schema[] = { "s", //ID "s", // DISPLAY_NAME "s", // ICON_HINT "s", // RENDERER_NAME "a{sv}" // HINTS }; DeeModel* create_categories_model(unsigned category_count) { DeeModel* category_model = dee_sequence_model_new(); dee_model_set_schema_full(category_model, categories_model_schema, G_N_ELEMENTS(categories_model_schema)); GVariantBuilder b; g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}")); GVariant *hints = g_variant_builder_end(&b); for(unsigned i = 0; i < category_count; ++i) { dee_model_append(category_model, std::to_string(i).c_str(), ("Category "+std::to_string(i)).c_str(), "gtk-apply", "grid", hints); } g_variant_unref(hints); return category_model; } /* Schema that is used in the DeeModel representing the results */ static const gchar * results_model_schema[] = { "s", // URI "s", // ICON_HINT "u", // CATEGORY "u", // RESULT_TYPE "s", // MIMETYPE "s", // TITLE "s", // COMMENT "s", // DND_URI "a{sv}" // METADATA }; static const gchar * icons[] = { "Applications.png", "Home.png", "Music.png", "People.png", "Videos.png", }; DeeModel* create_results_model(unsigned category_count, unsigned result_count) { DeeModel* results_model = dee_sequence_model_new(); dee_model_set_schema_full(results_model, results_model_schema, G_N_ELEMENTS(results_model_schema)); GVariantBuilder b; g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}")); GVariant *hints = g_variant_builder_end(&b); for(unsigned i = 0; i < result_count; ++i) { unsigned category = i % category_count; dee_model_append(results_model, ("uri://result."+std::to_string(i)).c_str(), (shellAppDirectory() + "Dash/graphics/scopeIcons/" + (icons[i%G_N_ELEMENTS(icons)])).toLatin1().data(), category, 0, "application/x-desktop", ("Title."+std::to_string(i)).c_str(), ("Comment."+std::to_string(i)).c_str(), ("uri://result."+std::to_string(i)).c_str(), hints); } g_variant_unref(hints); return results_model; }