/*
* 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 .
*
* Author: Nick Dedekind
*/
// self
#include "fake_categories.h"
#include "fake_resultsmodel.h"
Categories::Categories(int category_count, QObject* parent)
: unity::shell::scopes::CategoriesInterface(parent)
, m_category_count(category_count)
{
}
int Categories::rowCount(const QModelIndex& /*parent*/) const
{
return m_category_count;
}
bool Categories::overrideCategoryJson(QString const& /* categoryId */, QString const& /* json */)
{
qFatal("Using un-implemented Categories::overrideCategoryJson");
}
QVariant
Categories::data(const QModelIndex& index, int role) const
{
if (!index.isValid()) {
return QVariant();
}
ResultsModel *resultsModel = resultModel(index.row());
switch (role) {
case RoleCategoryId:
if (index.row() == 6) {
return QString("predefined");
} else if (index.row() == 8) {
return QString("local");
} else {
return QString("%1").arg(index.row());
}
case RoleName:
return QString("Category %1").arg(index.row());
case RoleIcon:
return "gtk-apply";
case RoleRawRendererTemplate:
qFatal("Using un-implemented RoleRawRendererTemplate Categories role");
return QVariant();
case RoleRenderer:
{
QVariantMap map;
if (index.row() % 2 == 0) {
map["category-layout"] = "grid";
} else {
map["category-layout"] = "carousel";
}
if (index.row() == 16) {
map["expandable"] = false;
map["collapsed-rows"] = 1;
}
if (index.row() == 18) {
map["category-layout"] = "horizontal-list";
}
if (index.row() == 19) {
map["category-layout"] = "grid";
map["collapsed-rows"] = 0;
}
map["card-size"] = "small";
map["category-layout"] = m_layouts.value(index.row(), map["category-layout"].toString());
if (map["category-layout"] == "carousel") {
map["overlay"] = true;
}
return map;
}
case RoleComponents:
{
QVariantMap map, artMap, attributeMap, socialActionMap;
if (index.row() % 2 != 0) {
artMap["aspect-ratio"] = QString("1.%1").arg(index.row());
} else {
artMap["aspect-ratio"] = "1.0";
}
artMap["field"] = "art";
map["art"] = artMap;
map["title"] = "HOLA";
map["subtitle"] = "HOLA";
attributeMap["field"] = "attribute";
socialActionMap["icon"] = "icon";
socialActionMap["id"] = "socialHola";
map["socialActions"] = socialActionMap;
map["attributes"] = attributeMap;
return map;
}
case RoleHeaderLink:
{
QString res;
if (index.row() == 1 || index.row() == 4) {
res = QString("scope://query/1");
}
res = m_headerLinks.value(index.row(), res);
return res;
}
case RoleResults:
return QVariant::fromValue(resultsModel);
case RoleCount:
return resultsModel->rowCount();
default:
qFatal("Using un-implemented Categories role");
return QVariant();
}
}
QVariant
Categories::data(int row, int role) const
{
return data(index(row, 0), role);
}
void Categories::setCount(int count)
{
if (m_category_count != count) {
beginResetModel(); // This is just for test setup so we can be lazy and reset
m_category_count = count;
endResetModel();
}
}
ResultsModel* Categories::resultModel(int row) const
{
ResultsModel *result = m_resultsModels[row];
if (!result) {
Categories *that = const_cast(this);
result = new ResultsModel(25, row, that);
m_resultsModels[row] = result;
}
return result;
}
void Categories::setLayout(int row, const QString &layout)
{
m_layouts[row] = layout;
}
void Categories::setHeaderLink(int row, const QString &headerLink)
{
m_headerLinks[row] = headerLink;
}