summaryrefslogtreecommitdiff
path: root/noncore/apps/keyz-cfg/cfgfile.h
blob: 975990026ca70115bddef52fde973674a094340d (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
#ifndef CFGFILE_H
#define CFGFILE_H

#include <qlist.h>
#include "zkbxml.h"

class CfgEntry {
public:
	CfgEntry();	
	CfgEntry(const QString& file, const QString& label);

	const QString& getFile() const;
	void setFile(const QString& f);
	const QString& getLabel() const;
	void setLabel(const QString& l);

protected:
	QString file;
	QString label;
};

class CfgFile {
public:
	CfgFile();
	~CfgFile();

	QList<CfgEntry>& getEntries();
	bool replaceEntry(const QString& file, const QString& label, 
		int index = -1);
	bool deleteEntry(const QString& file);

	int getAutorepeatDelay() const;
	void setAutorepeatDelay(int);
	int getAutorepeatPeriod() const;
	void setAutorepeatPeriod(int);

protected:
	QList<CfgEntry> entries;
	int ardelay;
	int arperiod;
};

class CfgParser : public QXmlErrorHandler {
public:
	CfgParser();
	virtual ~CfgParser();

	bool load(QString file, CfgFile& cfg);
	bool save(QString file, CfgFile& cfg);

	void addLabel(const QString& name, const QString& state);
	void addFile(const QString& file, const QString& prefix);

	int getAutorepeatDelay() const;
	void setAutorepeatDelay(int);
	int getAutorepeatPeriod() const;
	void setAutorepeatPeriod(int);

	virtual bool warning(const QXmlParseException& e);
	virtual bool error(const QXmlParseException& e);
	virtual bool fatalError(const QXmlParseException& e);
	virtual QString errorString();

	QString getError();

protected:
	QString err;
	QMap<QString, QString> labels;
	QMap<QString, QString> includes;
	QList<QString> labelList;
	QList<QString> includeList;
	int ardelay;
	int arperiod;
};

class CfgHandler : public ZkbXmlHandler {
public:
	CfgHandler(CfgParser &);
	virtual ~CfgHandler();

protected:
	CfgParser& cfg;

	virtual bool startKeymapElement(int ardelay, int arperiod, 
		const QString& author);
	virtual bool startIncludeElement(const QString& file, 
		const QString& prfix);
	virtual bool startLabelElement(const QString& label, 
		const QString& state);
	virtual bool startStateElement(const QString& name, 
		const QString& parent, bool dflt);
	virtual bool startMapElement(int key, bool pressed);
	virtual bool startEventElement(int keycode, int unicode, int modifiers,
		bool pressed, bool autorepeat);
	virtual bool startNextStateElement(const QString& state);

	virtual bool endKeymapElement();
	virtual bool endIncludeElement();
	virtual bool endLabelElement();
	virtual bool endStateElement();
	virtual bool endMapElement();
	virtual bool endEventElement();
	virtual bool endNextStateElement();
};

#endif