summaryrefslogtreecommitdiff
authorzecke <zecke>2004-12-20 22:17:40 (UTC)
committer zecke <zecke>2004-12-20 22:17:40 (UTC)
commitb15930cd03acafd9770bca26f3388817f1a4dcbf (patch) (unidiff)
tree7f86e31793c1bacb0882e7abb88a3847333f5c4a
parenta50334dddaa542fd63726a639e852c30036f53a0 (diff)
downloadopie-b15930cd03acafd9770bca26f3388817f1a4dcbf.zip
opie-b15930cd03acafd9770bca26f3388817f1a4dcbf.tar.gz
opie-b15930cd03acafd9770bca26f3388817f1a4dcbf.tar.bz2
-Fix for 1483
"ZKB should keep user settings in $HOME/Settings instead of $OPIEDIR/share/zkb" Now by default it loads and saves to $HOME/Applications/zkb but falls back to $OPIEDIR/share/zkb to find the included files
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/applets/zkbapplet/applet/zkbwidget.cpp18
-rw-r--r--noncore/applets/zkbapplet/applet/zkbwidget.h2
-rw-r--r--noncore/applets/zkbapplet/keyzcfg/cfgdlg.cpp2
-rw-r--r--noncore/applets/zkbapplet/keyzcfg/main.cpp4
-rw-r--r--noncore/applets/zkbapplet/keyzcfg/zkbcfg.cpp67
5 files changed, 47 insertions, 46 deletions
diff --git a/noncore/applets/zkbapplet/applet/zkbwidget.cpp b/noncore/applets/zkbapplet/applet/zkbwidget.cpp
index 13729ea..55c08b3 100644
--- a/noncore/applets/zkbapplet/applet/zkbwidget.cpp
+++ b/noncore/applets/zkbapplet/applet/zkbwidget.cpp
@@ -20,43 +20,39 @@ ZkbWidget::ZkbWidget(QWidget* parent)
20 20
21 loadKeymap(); 21 loadKeymap();
22 22
23 channel = new QCopChannel("QPE/zkb", this); 23 channel = new QCopChannel("QPE/zkb", this);
24 connect(channel, SIGNAL(received(const QCString&,const QByteArray&)), 24 connect(channel, SIGNAL(received(const QCString&,const QByteArray&)),
25 this, SLOT(signalReceived(const QCString&,const QByteArray&))); 25 this, SLOT(signalReceived(const QCString&,const QByteArray&)));
26 setFixedWidth ( AppLnk::smallIconSize() ); 26 setFixedWidth ( AppLnk::smallIconSize() );
27 setFixedHeight ( AppLnk::smallIconSize() ); 27 setFixedHeight ( AppLnk::smallIconSize() );
28} 28}
29 29
30ZkbWidget::~ZkbWidget() 30ZkbWidget::~ZkbWidget()
31{ 31{
32 if (keymap != 0) { 32 delete keymap;
33 delete keymap; 33 keymap = 0;
34 keymap = 0;
35 }
36} 34}
37 35
38int ZkbWidget::position() 36int ZkbWidget::position()
39{ 37{
40 return 8; 38 return 8;
41} 39}
42 40
43bool ZkbWidget::loadKeymap() { 41bool ZkbWidget::loadKeymap() {
44 ZkbConfig c(QPEApplication::qpeDir()+"share/zkb"); 42 ZkbConfig c(Global::applicationFileName("zkb", QString::null) );
45 QFontMetrics fm(font()); 43 QFontMetrics fm(font());
46 44
47 if (keymap != 0) { 45 delete keymap;
48 delete keymap; 46 keymap = 0;
49 keymap = 0;
50 }
51 47
52 Keymap* km = new Keymap(); 48 Keymap* km = new Keymap();
53 49
54 if (!c.load("zkb.xml", *km, "")) { 50 if (!c.load("zkb.xml", *km, "")) {
55 delete km; 51 delete km;
56 setPixmap(disabled); 52 setPixmap(disabled);
57 return false; 53 return false;
58 } 54 }
59 55
60 connect(km, SIGNAL(stateChanged(const QString&)), 56 connect(km, SIGNAL(stateChanged(const QString&)),
61 this, SLOT(stateChanged(const QString&))); 57 this, SLOT(stateChanged(const QString&)));
62 58
@@ -89,28 +85,24 @@ bool ZkbWidget::loadKeymap() {
89 w = lw; 85 w = lw;
90 } 86 }
91 } 87 }
92 88
93 if (w == 0) { 89 if (w == 0) {
94 hide(); 90 hide();
95 } else { 91 } else {
96 show(); 92 show();
97 } 93 }
98 return true; 94 return true;
99} 95}
100 96
101QSize ZkbWidget::sizeHint() const {
102 return QSize(AppLnk::smallIconSize(),AppLnk::smallIconSize());
103}
104
105void ZkbWidget::stateChanged(const QString& s) { 97void ZkbWidget::stateChanged(const QString& s) {
106// odebug << "stateChanged: " << s.utf8() << "\n" << oendl; 98// odebug << "stateChanged: " << s.utf8() << "\n" << oendl;
107 setText(s); 99 setText(s);
108} 100}
109 101
110void ZkbWidget::labelChanged(int id) { 102void ZkbWidget::labelChanged(int id) {
111 if (id == 0) { 103 if (id == 0) {
112 keymap->disable(); 104 keymap->disable();
113 setPixmap(disabled); 105 setPixmap(disabled);
114 return; 106 return;
115 } 107 }
116 108
diff --git a/noncore/applets/zkbapplet/applet/zkbwidget.h b/noncore/applets/zkbapplet/applet/zkbwidget.h
index 9bce85a..13906c0 100644
--- a/noncore/applets/zkbapplet/applet/zkbwidget.h
+++ b/noncore/applets/zkbapplet/applet/zkbwidget.h
@@ -8,26 +8,24 @@
8#include <qcopchannel_qws.h> 8#include <qcopchannel_qws.h>
9 9
10#include "zkb.h" 10#include "zkb.h"
11 11
12class ZkbWidget : public QLabel { 12class ZkbWidget : public QLabel {
13Q_OBJECT 13Q_OBJECT
14 14
15public: 15public:
16 ZkbWidget(QWidget* parent); 16 ZkbWidget(QWidget* parent);
17 ~ZkbWidget(); 17 ~ZkbWidget();
18 static int position(); 18 static int position();
19 19
20 QSize sizeHint() const;
21
22protected: 20protected:
23 QLabel* label; 21 QLabel* label;
24 Keymap* keymap; 22 Keymap* keymap;
25 QPopupMenu* labels; 23 QPopupMenu* labels;
26 QCopChannel* channel; 24 QCopChannel* channel;
27 int w, h; 25 int w, h;
28 QPixmap disabled; 26 QPixmap disabled;
29 27
30 bool loadKeymap(); 28 bool loadKeymap();
31 void mouseReleaseEvent(QMouseEvent*); 29 void mouseReleaseEvent(QMouseEvent*);
32 30
33protected slots: 31protected slots:
diff --git a/noncore/applets/zkbapplet/keyzcfg/cfgdlg.cpp b/noncore/applets/zkbapplet/keyzcfg/cfgdlg.cpp
index 4190a9e..6f24ea0 100644
--- a/noncore/applets/zkbapplet/keyzcfg/cfgdlg.cpp
+++ b/noncore/applets/zkbapplet/keyzcfg/cfgdlg.cpp
@@ -115,18 +115,18 @@ void CfgDlg::setLabel() {
115} 115}
116 116
117void CfgDlg::keymapHighlighted(const QString&text) { 117void CfgDlg::keymapHighlighted(const QString&text) {
118 label->setText(*m.find(text)); 118 label->setText(*m.find(text));
119} 119}
120 120
121 121
122void CfgDlg::accept() { 122void CfgDlg::accept() {
123 cfile->setAutorepeatDelay(ad->value()); 123 cfile->setAutorepeatDelay(ad->value());
124 cfile->setAutorepeatPeriod(ap->value()); 124 cfile->setAutorepeatPeriod(ap->value());
125 125
126 CfgParser p; 126 CfgParser p;
127 p.save(QPEApplication::qpeDir()+"share/zkb/zkb.xml", *cfile); 127 p.save(Global::applicationFileName("zkb", "zkb.xml" ), *cfile);
128 QCopEnvelope("QPE/zkb", "reload()"); 128 QCopEnvelope("QPE/zkb", "reload()");
129 129
130 QDialog::accept(); 130 QDialog::accept();
131} 131}
132 132
diff --git a/noncore/applets/zkbapplet/keyzcfg/main.cpp b/noncore/applets/zkbapplet/keyzcfg/main.cpp
index afd0f6a..d7926f0 100644
--- a/noncore/applets/zkbapplet/keyzcfg/main.cpp
+++ b/noncore/applets/zkbapplet/keyzcfg/main.cpp
@@ -1,22 +1,24 @@
1#include <stdio.h> 1#include <stdio.h>
2#include <qpe/qpeapplication.h> 2#include <qpe/qpeapplication.h>
3#include <qpe/global.h>
4
3#include <qlayout.h> 5#include <qlayout.h>
4#include <qmainwindow.h> 6#include <qmainwindow.h>
5 7
6#include "cfgdlg.h" 8#include "cfgdlg.h"
7 9
8int main( int argc, char **argv ) { 10int main( int argc, char **argv ) {
9 QPEApplication app(argc, argv); 11 QPEApplication app(argc, argv);
10 CfgFile cfile; 12 CfgFile cfile;
11 CfgParser cp; 13 CfgParser cp;
12 cp.load(QPEApplication::qpeDir()+"share/zkb/zkb.xml", cfile); 14 cp.load(Global::applicationFileName("zkb", "zkb.xml"), cfile);
13 15
14 16
15 CfgDlg c(0, &cfile, &app, true); 17 CfgDlg c(0, &cfile, &app, true);
16 18
17 19
18 app.showMainWidget(&c); 20 app.showMainWidget(&c);
19 int ret = QPEApplication::execDialog(&c); 21 int ret = QPEApplication::execDialog(&c);
20 22
21 return ret; 23 return ret;
22} 24}
diff --git a/noncore/applets/zkbapplet/keyzcfg/zkbcfg.cpp b/noncore/applets/zkbapplet/keyzcfg/zkbcfg.cpp
index 24bd897..6f3b9bf 100644
--- a/noncore/applets/zkbapplet/keyzcfg/zkbcfg.cpp
+++ b/noncore/applets/zkbapplet/keyzcfg/zkbcfg.cpp
@@ -1,147 +1,156 @@
1#include "zkbcfg.h" 1#include "zkbcfg.h"
2 2
3/* OPIE */ 3/* OPIE */
4#include <opie2/odebug.h> 4#include <opie2/odebug.h>
5#include <opie2/oapplication.h>
5using namespace Opie::Core; 6using namespace Opie::Core;
6 7
7/* QT */ 8/* QT */
8#include <qfileinfo.h> 9#include <qfileinfo.h>
9 10
10// Implementation of XkbConfig class 11// Implementation of XkbConfig class
11ZkbConfig::ZkbConfig(const QString& dir):path(dir) { 12ZkbConfig::ZkbConfig(const QString& dir):path(dir) {
12} 13}
13 14
14ZkbConfig::~ZkbConfig() { 15ZkbConfig::~ZkbConfig() {
15} 16}
16 17
17bool ZkbConfig::load(const QString& file, Keymap& keymap, const QString& prefix) { 18bool ZkbConfig::load(const QString& file, Keymap& keymap, const QString& prefix) {
18 bool ret; 19 bool ret;
19 QFile f(path+"/"+file); 20 QFile *f = new QFile(path+"/"+file);
20 QFileInfo fi(f); 21 QFileInfo fi(*f);
21 22
22 odebug << "start loading file=" << file.utf8() << "\n" << oendl; 23 /* Try */
23 if (includedFiles.find(fi.absFilePath()) != includedFiles.end()) { 24 if ( !fi.exists() && !path.contains( QPEApplication::qpeDir()) ) {
24 return false; 25 delete f;
25 } 26 f = new QFile( QPEApplication::qpeDir() + "share/zkb/" + file );
27 fi = QFileInfo( *f );
28 }
26 29
27 includedFiles.insert(fi.absFilePath(), 1); 30 odebug << "start loading file=" << file << "\n" << oendl;
28 QXmlInputSource is(f); 31 if (includedFiles.find(fi.absFilePath()) != includedFiles.end()) {
29 QXmlSimpleReader reader; 32 return false;
30 ZkbHandler h(*this, keymap, prefix); 33 }
31 34
32 reader.setContentHandler(&h); 35 includedFiles.insert(fi.absFilePath(), 1);
33 reader.setErrorHandler(this); 36 QXmlInputSource is(*f);
34 ret = reader.parse(is); 37 QXmlSimpleReader reader;
35 includedFiles.remove(fi.absFilePath()); 38 ZkbHandler h(*this, keymap, prefix);
36 39
37 odebug << "end loading file=" << file.utf8() << ": status=" << err.utf8() << oendl; 40 reader.setContentHandler(&h);
38 return ret; 41 reader.setErrorHandler(this);
42 ret = reader.parse(is);
43 includedFiles.remove(fi.absFilePath());
44
45 odebug << "end loading file=" << file << ": status=" << err << oendl;
46 delete f;
47 return ret;
39} 48}
40 49
41bool ZkbConfig::warning(const QXmlParseException& e) { 50bool ZkbConfig::warning(const QXmlParseException& e) {
42 QString tmp; 51 QString tmp;
43 52
44 tmp.sprintf("%d: warning: %s\n", e.lineNumber(), 53 tmp.sprintf("%d: warning: %s\n", e.lineNumber(),
45 (const char*) e.message().utf8()); 54 (const char*) e.message().utf8());
46 55
47 err += tmp; 56 err += tmp;
48 57
49 return true; 58 return true;
50} 59}
51 60
52bool ZkbConfig::error(const QXmlParseException& e) { 61bool ZkbConfig::error(const QXmlParseException& e) {
53 QString tmp; 62 QString tmp;
54 63
55 tmp.sprintf("%d: error: %s\n", e.lineNumber(), 64 tmp.sprintf("%d: error: %s\n", e.lineNumber(),
56 (const char*) e.message().utf8()); 65 (const char*) e.message().utf8());
57 66
58 err += tmp; 67 err += tmp;
59 68
60 return true; 69 return true;
61} 70}
62 71
63bool ZkbConfig::fatalError(const QXmlParseException& e) { 72bool ZkbConfig::fatalError(const QXmlParseException& e) {
64 QString tmp; 73 QString tmp;
65 74
66 tmp.sprintf("%d: fatal error: %s\n", e.lineNumber(), 75 tmp.sprintf("%d: fatal error: %s\n", e.lineNumber(),
67 (const char*) e.message().utf8()); 76 (const char*) e.message().utf8());
68 77
69 err += tmp; 78 err += tmp;
70 79
71 return false; 80 return false;
72} 81}
73 82
74QString ZkbConfig::errorString() { 83QString ZkbConfig::errorString() {
75 return err; 84 return err;
76} 85}
77 86
78// Implementation of ZkbHandler 87// Implementation of ZkbHandler
79ZkbHandler::ZkbHandler(ZkbConfig& z, Keymap& k, const QString& p):zkc(z), keymap(k), 88ZkbHandler::ZkbHandler(ZkbConfig& z, Keymap& k, const QString& p):zkc(z), keymap(k),
80 prefix(p), ardelay(-1), arperiod(-1), currentState(0), currentAction(0) { 89 prefix(p), ardelay(-1), arperiod(-1), currentState(0), currentAction(0) {
81} 90}
82 91
83ZkbHandler::~ZkbHandler() { 92ZkbHandler::~ZkbHandler() {
84} 93}
85 94
86bool ZkbHandler::startKeymapElement(int ard, int arp, const QString&) { 95bool ZkbHandler::startKeymapElement(int ard, int arp, const QString&) {
87 ardelay = ard; 96 ardelay = ard;
88 arperiod = arp; 97 arperiod = arp;
89 98
90 return true; 99 return true;
91} 100}
92 101
93bool ZkbHandler::startIncludeElement(const QString& file, 102bool ZkbHandler::startIncludeElement(const QString& file,
94 const QString& pref) { 103 const QString& pref) {
95 104
96 QString p = prefix; 105 QString p = prefix;
97 106
98 if (!pref.isNull()) { 107 if (!pref.isNull()) {
99 p += pref + ":"; 108 p += pref + ":";
100 } 109 }
101 110
102 111
103 bool ret = zkc.load(file, keymap, p); 112 bool ret = zkc.load(file, keymap, p);
104 if (!ret) { 113 if (!ret) {
105 setError("Error including file: " + file); 114 setError("Error including file: " + file);
106 } 115 }
107 116
108 return ret; 117 return ret;
109} 118}
110 119
111bool ZkbHandler::startLabelElement(const QString& label, 120bool ZkbHandler::startLabelElement(const QString& label,
112 const QString& state) { 121 const QString& state) {
113 122
114 if (!keymap.addLabel(label, prefix + state)) { 123 if (!keymap.addLabel(label, prefix + state)) {
115 err = "label " + label + " already defined"; 124 err = "label " + label + " already defined";
116 return false; 125 return false;
117 } 126 }
118 127
119 return true; 128 return true;
120} 129}
121 130
122bool ZkbHandler::startStateElement(const QString& name, 131bool ZkbHandler::startStateElement(const QString& name,
123 const QString& parentName, bool dflt) { 132 const QString& parentName, bool dflt) {
124 133
125 currentStateName = prefix + name; 134 currentStateName = prefix + name;
126 currentState = keymap.getStateByName(currentStateName); 135 currentState = keymap.getStateByName(currentStateName);
127 136
128 //odebug << "state name=" << currentStateName.utf8() << "\n" << oendl; 137 //odebug << "state name=" << currentStateName.utf8() << "\n" << oendl;
129 138
130 State* parent = 0; 139 State* parent = 0;
131 if (!parentName.isEmpty()) { 140 if (!parentName.isEmpty()) {
132 QString pn = prefix + parentName; 141 QString pn = prefix + parentName;
133 parent = keymap.getStateByName(pn); 142 parent = keymap.getStateByName(pn);
134 if (parent == 0) { 143 if (parent == 0) {
135 err = currentStateName + 144 err = currentStateName +
136 ": undefined parent state: " + pn; 145 ": undefined parent state: " + pn;
137 return false; 146 return false;
138 } 147 }
139 } 148 }
140 149
141 if (currentState == 0) { 150 if (currentState == 0) {
142 currentState = new State(parent); 151 currentState = new State(parent);
143 keymap.addState(currentStateName, currentState); 152 keymap.addState(currentStateName, currentState);
144 } else { 153 } else {
145 if (parent!=0) { 154 if (parent!=0) {
146 currentState->setParent(parent); 155 currentState->setParent(parent);
147 } 156 }
@@ -158,25 +167,25 @@ bool ZkbHandler::startMapElement(int keycode, bool pressed) {
158 currentAction = currentState->get(keycode, pressed); 167 currentAction = currentState->get(keycode, pressed);
159 if (currentAction == 0) { 168 if (currentAction == 0) {
160 setError("keycode " + QString::number(keycode) + " not supported"); 169 setError("keycode " + QString::number(keycode) + " not supported");
161 return false; 170 return false;
162 } 171 }
163 172
164 currentAction->setEvent(false); 173 currentAction->setEvent(false);
165 currentAction->setState(0); 174 currentAction->setState(0);
166 175
167 return true; 176 return true;
168} 177}
169 178
170bool ZkbHandler::startEventElement(int keycode, int unicode, int modifiers, 179bool ZkbHandler::startEventElement(int keycode, int unicode, int modifiers,
171 bool pressed, bool autorepeat) { 180 bool pressed, bool autorepeat) {
172 181
173 currentAction->setEvent(true); 182 currentAction->setEvent(true);
174 currentAction->setKeycode(keycode); 183 currentAction->setKeycode(keycode);
175 currentAction->setUnicode(unicode); 184 currentAction->setUnicode(unicode);
176 currentAction->setModifiers(modifiers); 185 currentAction->setModifiers(modifiers);
177 currentAction->setPressed(pressed); 186 currentAction->setPressed(pressed);
178 currentAction->setAutorepeat(autorepeat); 187 currentAction->setAutorepeat(autorepeat);
179 188
180 return true; 189 return true;
181} 190}
182 191
@@ -191,25 +200,25 @@ bool ZkbHandler::startNextStateElement(const QString& state) {
191 return true; 200 return true;
192} 201}
193 202
194 203
195bool ZkbHandler::endKeymapElement() { 204bool ZkbHandler::endKeymapElement() {
196 if (ardelay > 0) { 205 if (ardelay > 0) {
197 keymap.setAutorepeatDelay(ardelay); 206 keymap.setAutorepeatDelay(ardelay);
198 } 207 }
199 208
200 if (arperiod > 0) { 209 if (arperiod > 0) {
201 keymap.setAutorepeatPeriod(arperiod); 210 keymap.setAutorepeatPeriod(arperiod);
202 } 211 }
203 212
204 return true; 213 return true;
205} 214}
206 215
207bool ZkbHandler::endIncludeElement() { 216bool ZkbHandler::endIncludeElement() {
208 return true; 217 return true;
209} 218}
210 219
211bool ZkbHandler::endLabelElement() { 220bool ZkbHandler::endLabelElement() {
212 return true; 221 return true;
213} 222}
214 223
215bool ZkbHandler::endStateElement() { 224bool ZkbHandler::endStateElement() {