summaryrefslogtreecommitdiffstats
path: root/tdelirc/tdelirc/profileserver.h
blob: 0d9bc59b3700b68de414b0e86f40fefb30bba4a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
//
//
// C++ Interface: $MODULE$
//
// Description:
//
//
// Author: Gav Wood <gav@kde.org>, (C) 2003
//
// Copyright: See COPYING file that comes with this distribution
//
//
#ifndef PROFILESERVER_H
#define PROFILESERVER_H

#include <tqpair.h>
#include <tqstring.h>
#include <tqvaluelist.h>
#include <tqmap.h>
#include <tqxml.h>
#include <tqdict.h>

/**
@author Gav Wood
*/

enum IfMulti {IM_DONTSEND, IM_SENDTOALL, IM_SENDTOTOP, IM_SENDTOBOTTOM};

typedef TQPair<int,int> Range;

class ProfileAction;
class Profile;

class ProfileActionArgument
{
	TQString theComment, theType;
	Range theRange;
	TQString theDefault;		// should be TQVariant?
	const ProfileAction *parent;

	friend class Profile;
public:
	const TQString &comment() const { return theComment; }
	void setComment(const TQString &a) { theComment = a; }
	const TQString &type() const { return theType; }
	void setType(const TQString &a) { theType = a; }
	const TQString &getDefault() const { return theDefault; }
	void setDefault(const TQString &a) { theDefault = a; }
	const Range &range() const { return theRange; }
	void setRange(const Range &a) { theRange = a; }

	const ProfileAction *action() const { return parent; }
	void setAction(const ProfileAction *a) { parent = a; }
};

class ProfileAction
{
	TQString theObjId, thePrototype, theName, theComment, theClass;
	float theMultiplier;
	const Profile *parent;
	bool theRepeat, theAutoStart;
	TQValueList<ProfileActionArgument> theArguments;

	friend class Profile;
public:
	const TQString &objId() const { return theObjId; }
	void setObjId(const TQString &a) { theObjId = a; }
	const TQString &prototype() const { return thePrototype; }
	void setPrototype(const TQString &a) { thePrototype = a; }
	const TQString &name() const { return theName; }
	void setName(const TQString &a) { theName = a; }
	const TQString &comment() const { return theComment; }
	void setComment(const TQString &a) { theComment = a; }
	const TQString &getClass() const { return theClass; }
	void setClass(const TQString &a) { theClass = a; }
	const float multiplier() const { return theMultiplier; }
	void setMultiplier(const float a) { theMultiplier = a; }
	bool repeat() const { return theRepeat; }
	void setRepeat(bool a) { theRepeat = a; }
	bool autoStart() const { return theAutoStart; }
	void setAutoStart(bool a) { theAutoStart = a; }
	const TQValueList<ProfileActionArgument> &arguments() const { return theArguments; }

	const Profile *profile() const { return parent; }
	void setProfile(const Profile *a) { parent = a; }
};

class Profile : public TQXmlDefaultHandler
{
	TQString theId, theName, theAuthor, theServiceName;
	IfMulti theIfMulti;
	bool theUnique;
	TQString charBuffer;

	ProfileAction *curPA;
	ProfileActionArgument *curPAA;
	TQDict<ProfileAction> theActions;		// objid+"::"+prototype => ProfileAction

	friend class ProfileServer;
public:
	bool characters(const TQString &data);
	bool startElement(const TQString &, const TQString &, const TQString &name, const TQXmlAttributes &attributes);
	bool endElement(const TQString &, const TQString &, const TQString &name);

	const TQString &id() const { return theId; }
	void setId(const TQString &a) { theId = a; }
	const TQString &name() const { return theName; }
	void setName(const TQString &a) { theName = a; }
	const TQString &author() const { return theAuthor; }
	void setAuthor(const TQString &a) { theAuthor = a; }
	const bool unique() const { return theUnique; }
	void setUnique(const bool a) { theUnique = a; }
	const IfMulti ifMulti() const { return theIfMulti; }
	void setIfMulti(const IfMulti a) { theIfMulti = a; }
	const TQString &serviceName() const { if(theServiceName != TQString()) return theServiceName; return theName; }
	void setServiceName(const TQString &a) { theServiceName = a; }
	const TQDict<ProfileAction> &actions() const { return theActions; }
	const ProfileAction *searchClass(const TQString &c) const;

	void loadFromFile(const TQString &fileName);

	Profile();
};

class ProfileServer
{
	static ProfileServer *theInstance;
	void loadProfiles();
	TQDict<Profile> theProfiles;			// id => Profile

public:
	static ProfileServer *profileServer() { if(!theInstance) theInstance = new ProfileServer(); return theInstance; }
	const TQDict<Profile> profiles() const { return theProfiles; }
	const ProfileAction *getAction(const TQString &appId, const TQString &objId, const TQString &prototype) const;
	const ProfileAction *getAction(const TQString &appId, const TQString &actionId) const;
	const TQString &getServiceName(const TQString &appId) const;

	ProfileServer();
	~ProfileServer();
};

#endif