2 * Copyright (C) 2016 The Qt Company Ltd.
3 * Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH
4 * Copyright (c) 2018,2019 TOYOTA MOTOR CORPORATION
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
19 #include "applicationmodel.h"
22 #include <QtCore/QFile>
23 #include <QtCore/QJsonObject>
24 #include <QtCore/QJsonDocument>
25 #include <QtCore/QJsonArray>
27 #include "hmi-debug.h"
29 class ApplicationModel::Private
34 void addApp(QString icon, QString name, QString id);
35 void removeApp(QString id);
41 QString get_icon_name(QJsonObject const &i)
43 QString icon = i["icon"].toString();
44 fprintf(stderr, "Looking for icon %s\n", icon.toLocal8Bit().data());
45 if ( !QFile::exists(icon) )
51 ApplicationModel::Private::Private()
55 void ApplicationModel::Private::addApp(QString icon, QString name, QString id)
57 HMI_DEBUG("addApp","name: %s icon: %s id: %s.", name.toStdString().c_str(), icon.toStdString().c_str(), id.toStdString().c_str());
58 for(int i = 0; i < this->data.size(); ++i) {
59 if(this->data[i].id() == id)
64 if ( QFile::exists(icon) )
66 _icon = QString("file:%1").arg(icon);
67 fprintf(stderr, "using icon '%s'\n", _icon.toLocal8Bit().data());
75 for (pos = 0; pos < this->data.size(); ++pos) {
76 if (QString::compare(this->data.at(pos).name(), name, Qt::CaseInsensitive) > 0)
79 this->data.insert(pos, AppInfo(_icon, name, id));
82 void ApplicationModel::Private::removeApp(QString id)
84 HMI_DEBUG("removeApp","id: %s.",id.toStdString().c_str());
85 for (int i = 0; i < this->data.size(); ++i) {
86 if (this->data.at(i).id() == id) {
87 this->data.removeAt(i);
93 ApplicationModel::ApplicationModel(QObject *parent)
94 : QAbstractListModel(parent)
99 ApplicationModel::~ApplicationModel()
104 int ApplicationModel::rowCount(const QModelIndex &parent) const
106 if (parent.isValid())
109 return this->d->data.count();
112 QVariant ApplicationModel::data(const QModelIndex &index, int role) const
115 if (!index.isValid())
119 case Qt::DecorationRole:
120 ret = this->d->data[index.row()].iconPath();
122 case Qt::DisplayRole:
123 ret = this->d->data[index.row()].name();
126 ret = this->d->data[index.row()].id();
135 QHash<int, QByteArray> ApplicationModel::roleNames() const
137 QHash<int, QByteArray> roles;
138 roles[Qt::DecorationRole] = "icon";
139 roles[Qt::DisplayRole] = "name";
140 roles[Qt::UserRole] = "id";
144 QString ApplicationModel::id(int i) const
146 return data(index(i), Qt::UserRole).toString();
149 QString ApplicationModel::appid(int i) const
151 QString id = data(index(i), Qt::UserRole).toString();
152 return id.split("@")[0];
155 QString ApplicationModel::name(int i) const
157 return data(index(i), Qt::DisplayRole).toString();
160 void ApplicationModel::move(int from, int to)
163 if (to < 0 || to > rowCount()) return;
165 if (!beginMoveRows(parent, from, from, parent, to + 1)) {
166 HMI_NOTICE("launcher","from : %d, to : %d. false.", from, to);
169 d->data.move(from, to);
171 } else if (from > to) {
172 if (!beginMoveRows(parent, from, from, parent, to)) {
173 HMI_NOTICE("launcher","from : %d, to : %d. false.", from, to);
176 d->data.move(from, to);
179 HMI_NOTICE("launcher","from : %d, to : %d. false.", from, to);
183 void ApplicationModel::updateApplist(QStringList info)
185 QString icon = info.at(0);
186 QString name = info.at(1);
187 QString id = info.at(2);
190 if(icon == "") { // uninstall
195 d->addApp(icon, name, id);
200 void ApplicationModel::initAppList(QString data)
202 HMI_DEBUG("launcher","init application list.");
204 QJsonDocument japps = QJsonDocument::fromJson(data.toUtf8());
205 for (auto const &app : japps.array()) {
206 QJsonObject const &jso = app.toObject();
207 auto const name = jso["name"].toString();
208 auto const id = jso["id"].toString();
209 auto const icon = get_icon_name(jso);
211 d->addApp(icon, name, id);