~ubuntu-branches/ubuntu/vivid/muon/vivid-proposed

« back to all changes in this revision

Viewing changes to installer/LaunchListModel.cpp

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2015-03-24 23:06:35 UTC
  • mto: This revision was merged to the branch mainline in revision 88.
  • Revision ID: package-import@ubuntu.com-20150324230635-nvt7aq7kqvaxq36e
Tags: upstream-5.2.2-1
Import upstream version 5.2.2-1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***************************************************************************
 
2
 *   Copyright © 2010 Jonathan Thomas <echidnaman@kubuntu.org>             *
 
3
 *   Copyright © 2012 Aleix Pol Gonzalez <aleixpol@blue-systems.com>       *
 
4
 *                                                                         *
 
5
 *   This program is free software; you can redistribute it and/or         *
 
6
 *   modify it under the terms of the GNU General Public License as        *
 
7
 *   published by the Free Software Foundation; either version 2 of        *
 
8
 *   the License or (at your option) version 3 or any later version        *
 
9
 *   accepted by the membership of KDE e.V. (or its successor approved     *
 
10
 *   by the membership of KDE e.V.), which shall act as a proxy            *
 
11
 *   defined in Section 14 of version 3 of the license.                    *
 
12
 *                                                                         *
 
13
 *   This program is distributed in the hope that it will be useful,       *
 
14
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 
15
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 
16
 *   GNU General Public License for more details.                          *
 
17
 *                                                                         *
 
18
 *   You should have received a copy of the GNU General Public License     *
 
19
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
 
20
 ***************************************************************************/
 
21
 
 
22
#include "LaunchListModel.h"
 
23
 
 
24
// Qt includes
 
25
#include <QStringBuilder>
 
26
 
 
27
// KDE includes
 
28
#include <KService>
 
29
#include <KToolInvocation>
 
30
 
 
31
// Libmuon includes
 
32
#include "Transaction/TransactionModel.h"
 
33
#include "resources/AbstractResource.h"
 
34
 
 
35
LaunchListModel::LaunchListModel(QObject* parent)
 
36
    : QStandardItemModel(parent)
 
37
{
 
38
    connect(TransactionModel::global(), SIGNAL(transactionAdded(Transaction*)),
 
39
            this, SLOT(watchTransaction(Transaction*)));
 
40
}
 
41
 
 
42
void LaunchListModel::watchTransaction(Transaction *trans)
 
43
{
 
44
    connect(trans, SIGNAL(statusChanged(Transaction::Status)),
 
45
            this, SLOT(transactionStatusChanged(Transaction::Status)));
 
46
}
 
47
 
 
48
void LaunchListModel::transactionStatusChanged(Transaction::Status status)
 
49
{
 
50
    Transaction *trans = qobject_cast<Transaction *>(sender());
 
51
 
 
52
    if (status == Transaction::DoneStatus)
 
53
        transactionFinished(trans);
 
54
}
 
55
 
 
56
void LaunchListModel::transactionFinished(Transaction* trans)
 
57
{
 
58
    bool doneInstall = trans->status() == Transaction::DoneStatus &&
 
59
                       trans->role() == Transaction::InstallRole;
 
60
 
 
61
    if(trans->resource()->canExecute() && doneInstall)
 
62
        addApplication(trans->resource());
 
63
}
 
64
 
 
65
void LaunchListModel::addApplication(AbstractResource* app)
 
66
{
 
67
    QList<QStandardItem*> items;
 
68
    QStringList execs = app->executables();
 
69
 
 
70
    for (const QString& exec : execs) {
 
71
        KService::Ptr service = KService::serviceByStorageId(exec);
 
72
 
 
73
        QString name = service->property("Name").toString();
 
74
        if (!service->genericName().isEmpty())
 
75
            name += QLatin1String(" - ") % service->genericName();
 
76
 
 
77
        QStandardItem *item = new QStandardItem(name);
 
78
        item->setIcon(QIcon::fromTheme(service->icon()));
 
79
        item->setData(service->desktopEntryPath(), Qt::UserRole);
 
80
        items += item;
 
81
    }
 
82
    if(!items.isEmpty())
 
83
        invisibleRootItem()->appendRows(items);
 
84
}
 
85
 
 
86
void LaunchListModel::invokeApplication(const QModelIndex &idx) const
 
87
{
 
88
    KToolInvocation::startServiceByDesktopPath(idx.data(Qt::UserRole).toString());
 
89
}
 
90
 
 
91
void LaunchListModel::invokeApplication(int row) const
 
92
{
 
93
    invokeApplication(index(row, 0));
 
94
}