1/***************************************************************************
2 * Copyright (C) 2009 by Ben Cooksley <ben@eclipse.endoftheinternet.org> *
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; either version 2 of the License, or *
7 * (at your option) any later version. *
8 * *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
13 * *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA *
18 ***************************************************************************/
19
20#ifndef ACTION_ITEM_H
21#define ACTION_ITEM_H
22
23#include <QObject>
24#include <QMap>
25
26#include <Solid/Predicate>
27
28class QString;
29
30class KDesktopFile;
31class KConfigGroup;
32
33class ActionItem: public QObject
34{
35 Q_OBJECT
36
37public:
38 ActionItem(const QString& pathToDesktop, const QString& action, QObject *parent = 0);
39 ~ActionItem();
40
41 bool isUserSupplied();
42
43 QString icon();
44 QString exec();
45 QString name();
46 Solid::Predicate predicate() const;
47 QString involvedTypes() const;
48 void setIcon( const QString& nameOfIcon );
49 void setName( const QString& nameOfAction );
50 void setExec( const QString& execUrl );
51 void setPredicate( const QString& newPredicate );
52
53 QString desktopMasterPath;
54 QString desktopWritePath;
55 QString actionName;
56
57private:
58 enum DesktopAction { DesktopRead = 0, DesktopWrite = 1 };
59 enum GroupType { GroupDesktop = 0, GroupAction = 1 };
60
61 QString readKey(GroupType keyGroup, const QString& keyName, const QString& defaultValue);
62 void setKey(GroupType keyGroup, const QString& keyName, const QString& keyContents);
63 bool hasKey(GroupType keyGroup, const QString& keyName);
64 KConfigGroup * configItem(DesktopAction actionType, GroupType keyGroup, const QString& keyName = QString());
65
66 KDesktopFile * desktopFileMaster;
67 KDesktopFile * desktopFileWrite;
68 QMultiMap<GroupType, KConfigGroup*> actionGroups;
69 QList<KConfigGroup> configGroups;
70 Solid::Predicate predicateItem;
71
72};
73
74Q_DECLARE_METATYPE( ActionItem * )
75
76#endif
77