Diffstat (limited to 'noncore/applets/keyhelper/keyhelperapplet/applet') (more/less context) (ignore whitespace changes)
8 files changed, 1064 insertions, 0 deletions
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp new file mode 100644 index 0000000..4afdc1f --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp | |||
@@ -0,0 +1,112 @@ | |||
1 | #include "KeyHelper.h" | ||
2 | #include <opie2/okeyfilter.h> | ||
3 | |||
4 | KeyHelper::KeyHelper() | ||
5 | { | ||
6 | qDebug("KeyHelper::KeyHelper()"); | ||
7 | load(); | ||
8 | |||
9 | m_oAction.setKeyModifiers(&m_oModifiers); | ||
10 | m_oAction.setKeyMappings(&m_oMappings); | ||
11 | m_oAction.setKeyExtensions(&m_oExtensions); | ||
12 | m_oAction.setKeyRepeater(&m_oRepeater); | ||
13 | m_oExtensions.setKeyModifiers(&m_oModifiers); | ||
14 | } | ||
15 | |||
16 | KeyHelper::~KeyHelper() | ||
17 | { | ||
18 | unset(); | ||
19 | qDebug("KeyHelper::~KeyHelper()"); | ||
20 | } | ||
21 | |||
22 | bool KeyHelper::filter(int unicode, int keycode, int modifiers, | ||
23 | bool isPress, bool autoRepeat) | ||
24 | { | ||
25 | m_oAction.setAction(unicode, keycode, modifiers, | ||
26 | isPress, autoRepeat); | ||
27 | return(m_oAction.doAction()); | ||
28 | } | ||
29 | |||
30 | void KeyHelper::unset() | ||
31 | { | ||
32 | Opie::Core::OKeyFilter::inst()->remHandler(this);; | ||
33 | } | ||
34 | |||
35 | void KeyHelper::set() | ||
36 | { | ||
37 | Opie::Core::OKeyFilter::inst()->addHandler(this); | ||
38 | m_oModifiers.resetStates(); | ||
39 | } | ||
40 | |||
41 | void KeyHelper::enable() | ||
42 | { | ||
43 | m_oAction.enable(); | ||
44 | } | ||
45 | |||
46 | void KeyHelper::disable() | ||
47 | { | ||
48 | m_oAction.disable(); | ||
49 | m_oRepeater.stop(); | ||
50 | } | ||
51 | |||
52 | bool KeyHelper::load(const QString& file) | ||
53 | { | ||
54 | KeycfgReader oReader; | ||
55 | oReader.setKeyModifiers(&m_oModifiers); | ||
56 | oReader.setKeyMappings(&m_oMappings); | ||
57 | oReader.setKeyExtensions(&m_oExtensions); | ||
58 | oReader.setKeyRepeater(&m_oRepeater); | ||
59 | |||
60 | bool success; | ||
61 | if(file.length() == 0){ | ||
62 | success = oReader.load(); | ||
63 | } else if(file[0] == '/'){ | ||
64 | success = oReader.load(file); | ||
65 | } else { | ||
66 | //QString filepath = QString(::getenv("HOME")) + "/Settings/" + file; | ||
67 | QString filepath = QDir::homeDirPath() + "/Settings/" + file; | ||
68 | success = oReader.load(filepath); | ||
69 | } | ||
70 | if(success == false){ | ||
71 | qDebug("config xml load error"); | ||
72 | setDefault(); | ||
73 | } | ||
74 | return(success); | ||
75 | } | ||
76 | |||
77 | bool KeyHelper::reload(const QString& file) | ||
78 | { | ||
79 | m_oModifiers.reset(); | ||
80 | m_oMappings.reset(); | ||
81 | m_oExtensions.reset(); | ||
82 | m_oRepeater.reset(); | ||
83 | |||
84 | return(load(file)); | ||
85 | } | ||
86 | |||
87 | void KeyHelper::setDefault() | ||
88 | { | ||
89 | /* default settings */ | ||
90 | m_oExtensions.assign("switch", Qt::Key_F12, | ||
91 | m_oModifiers.getMask("Shift"), KeyNames::getCode("Shift")); | ||
92 | m_oExtensions.assign("select", Qt::Key_F11, | ||
93 | m_oModifiers.getMask("Shift"), KeyNames::getCode("Shift")); | ||
94 | } | ||
95 | |||
96 | void KeyHelper::statistics() | ||
97 | { | ||
98 | m_oModifiers.statistics(); | ||
99 | m_oMappings.statistics(); | ||
100 | m_oExtensions.statistics(); | ||
101 | m_oRepeater.statistics(); | ||
102 | } | ||
103 | |||
104 | void KeyHelper::dumpkeymap() | ||
105 | { | ||
106 | const QWSServer::KeyMap* m = QWSServer::keyMap(); | ||
107 | qWarning("KeyHelper::dumpkeymap()"); | ||
108 | while(m->key_code != 0){ | ||
109 | qWarning(" [%04x][%04x][%04x][%04x]", m->key_code, m->unicode, m->shift_unicode, m->ctrl_unicode); | ||
110 | m++; | ||
111 | } | ||
112 | } | ||
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.h b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.h new file mode 100644 index 0000000..aabb6eb --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.h | |||
@@ -0,0 +1,42 @@ | |||
1 | #ifndef _KEY_HELPER_H_ | ||
2 | #define _KEY_HELPER_H_ | ||
3 | |||
4 | #include <qdir.h> | ||
5 | #include <qwindowsystem_qws.h> | ||
6 | #include "KeyNames.h" | ||
7 | #include "KeyMappings.h" | ||
8 | #include "KeyModifiers.h" | ||
9 | #include "KeyExtensions.h" | ||
10 | #include "KeyRepeater.h" | ||
11 | #include "KeyAction.h" | ||
12 | #include "KeycfgReader.h" | ||
13 | |||
14 | class KeyHelper : public QWSServer::KeyboardFilter | ||
15 | { | ||
16 | public: | ||
17 | KeyHelper(); | ||
18 | virtual ~KeyHelper(); | ||
19 | bool filter(int unicode, int keycode, int modifiers, | ||
20 | bool isPress, bool autoRepeat); | ||
21 | |||
22 | void enable(); | ||
23 | void disable(); | ||
24 | void set(); | ||
25 | void unset(); | ||
26 | void statistics(); | ||
27 | void dumpkeymap(); | ||
28 | bool reload(const QString& file=QString::null); | ||
29 | private: | ||
30 | friend class KeyHelperWidget; | ||
31 | |||
32 | bool load(const QString& file=QString::null); | ||
33 | void setDefault(); | ||
34 | |||
35 | KeyAction m_oAction; | ||
36 | KeyMappings m_oMappings; | ||
37 | KeyModifiers m_oModifiers; | ||
38 | KeyExtensions m_oExtensions; | ||
39 | KeyRepeater m_oRepeater; | ||
40 | }; | ||
41 | |||
42 | #endif /* _KEY_HELPER_H_ */ | ||
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.cpp b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.cpp new file mode 100644 index 0000000..28304d7 --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.cpp | |||
@@ -0,0 +1,65 @@ | |||
1 | #include "KeyHelperApplet.h" | ||
2 | #include "KeyHelperWidget.h" | ||
3 | |||
4 | #if 0 | ||
5 | KeyHelperApplet::KeyHelperApplet() | ||
6 | : widget(0), ref(0) | ||
7 | { | ||
8 | qDebug("KeyHelperApplet::KeyHelperApplet()"); | ||
9 | } | ||
10 | |||
11 | KeyHelperApplet::~KeyHelperApplet() | ||
12 | { | ||
13 | qDebug("KeyHelperApplet::~KeyHelperApplet()"); | ||
14 | delete widget; | ||
15 | } | ||
16 | |||
17 | QWidget* KeyHelperApplet::applet(QWidget* parent) | ||
18 | { | ||
19 | if(!widget){ | ||
20 | widget = new KeyHelperWidget(parent); | ||
21 | } | ||
22 | return(widget); | ||
23 | } | ||
24 | |||
25 | int KeyHelperApplet::position() const | ||
26 | { | ||
27 | return(6); | ||
28 | } | ||
29 | |||
30 | QRESULT KeyHelperApplet::queryInterface(const QUuid& uuid, | ||
31 | QUnknownInterface** iface) | ||
32 | { | ||
33 | *iface = 0; | ||
34 | |||
35 | if(QFile::exists("/tmp/disable-keyhelper") | ||
36 | || QFile::exists("/mnt/card/disable-keyhelper") | ||
37 | || QFile::exists("/mnt/cf/disable-keyhelper")){ | ||
38 | return QS_FALSE; | ||
39 | } | ||
40 | |||
41 | if(uuid == IID_QUnknown){ | ||
42 | *iface = this; | ||
43 | } else if(uuid == IID_TaskbarApplet){ | ||
44 | *iface = this; | ||
45 | } | ||
46 | |||
47 | if(*iface){ | ||
48 | (*iface)->addRef(); | ||
49 | } | ||
50 | return QS_OK; | ||
51 | } | ||
52 | |||
53 | Q_EXPORT_INTERFACE() | ||
54 | { | ||
55 | Q_CREATE_INSTANCE(KeyHelperApplet) | ||
56 | } | ||
57 | |||
58 | #else | ||
59 | #include <opie2/otaskbarapplet.h> | ||
60 | |||
61 | using namespace Opie::Ui; | ||
62 | |||
63 | EXPORT_OPIE_APPLET_v1( KeyHelperWidget ) | ||
64 | |||
65 | #endif | ||
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.h b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.h new file mode 100644 index 0000000..ef164dc --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperApplet.h | |||
@@ -0,0 +1,26 @@ | |||
1 | #ifndef _KEY_HELPER_APPLET_H_ | ||
2 | #define _KEY_HELPER_APPLET_H_ | ||
3 | |||
4 | #if 0 | ||
5 | #include <qpe/taskbarappletinterface.h> | ||
6 | #include "KeyHelperWidget.h" | ||
7 | |||
8 | class KeyHelperApplet : public TaskbarAppletInterface | ||
9 | { | ||
10 | public: | ||
11 | KeyHelperApplet(); | ||
12 | virtual ~KeyHelperApplet(); | ||
13 | |||
14 | QRESULT queryInterface(const QUuid&, QUnknownInterface**); | ||
15 | Q_REFCOUNT | ||
16 | |||
17 | virtual QWidget* applet(QWidget* parent); | ||
18 | virtual int position() const; | ||
19 | private: | ||
20 | KeyHelperWidget* widget; | ||
21 | ulong ref; | ||
22 | }; | ||
23 | |||
24 | #endif | ||
25 | |||
26 | #endif /* _KEY_HELPER_APPLET_H_ */ | ||
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.cpp b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.cpp new file mode 100644 index 0000000..7beb511 --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.cpp | |||
@@ -0,0 +1,490 @@ | |||
1 | #include "KeyHelperWidget.h" | ||
2 | #include "QSafeDataStream.h" | ||
3 | #include "KHUtil.h" | ||
4 | |||
5 | QWidget* g_Widget = NULL; | ||
6 | int g_level = 0; | ||
7 | |||
8 | static const char* _version_ = "1.2.2"; | ||
9 | |||
10 | KeyHelperWidget::KeyHelperWidget(QWidget* parent, const char* name) | ||
11 | : QLabel(parent, name),disabled(Resource::loadPixmap("zkb-disabled")) | ||
12 | { | ||
13 | qDebug("KeyHelperWidget::KeyHelperWidget()"); | ||
14 | g_Widget = this; | ||
15 | m_defHandler = NULL; | ||
16 | //m_reset = false; | ||
17 | m_reset = true; | ||
18 | m_useFilter = false; | ||
19 | m_pHelper = NULL; | ||
20 | m_status = false; | ||
21 | |||
22 | //unset(); | ||
23 | initDebugLevel(); | ||
24 | |||
25 | m_pHelper = new KeyHelper(); | ||
26 | |||
27 | //qApp->installEventFilter(this); | ||
28 | |||
29 | connect(qwsServer, | ||
30 | SIGNAL(windowEvent(QWSWindow*, QWSServer::WindowEvent)), | ||
31 | this, | ||
32 | SLOT(windowEvent(QWSWindow*, QWSServer::WindowEvent))); | ||
33 | |||
34 | m_pChannel = new QCopChannel("QPE/KeyHelper", this); | ||
35 | connect(m_pChannel, SIGNAL(received(const QCString&, const QByteArray&)), | ||
36 | this, SLOT(receiveMessage(const QCString&, const QByteArray&))); | ||
37 | m_pSysChannel = new QCopChannel("QPE/System", this); | ||
38 | connect(m_pSysChannel, SIGNAL(received(const QCString&, const QByteArray&)), | ||
39 | this, SLOT(sysMessage(const QCString&, const QByteArray&))); | ||
40 | |||
41 | //AppLnkManager::init(); | ||
42 | setFixedWidth ( AppLnk::smallIconSize() ); | ||
43 | setFixedHeight ( AppLnk::smallIconSize() ); | ||
44 | setPixmap(disabled); | ||
45 | init(); | ||
46 | } | ||
47 | |||
48 | KeyHelperWidget::~KeyHelperWidget() | ||
49 | { | ||
50 | qDebug("KeyHelperWidget::~KeyHelperWidget()"); | ||
51 | disconnect(qwsServer, | ||
52 | SIGNAL(windowEvent(QWSWindow*, QWSServer::WindowEvent)), | ||
53 | this, | ||
54 | SLOT(windowEvent(QWSWindow*, QWSServer::WindowEvent))); | ||
55 | disconnect(m_pChannel, SIGNAL(received(const QCString&, const QByteArray&)), | ||
56 | this, SLOT(receiveMessage(const QCString&, const QByteArray&))); | ||
57 | unset(); | ||
58 | if (m_pHelper) delete m_pHelper; | ||
59 | if (m_pChannel) delete m_pChannel; | ||
60 | if (m_pSysChannel) delete m_pSysChannel; | ||
61 | m_pHelper = NULL; | ||
62 | setDebugLevel(0); | ||
63 | } | ||
64 | |||
65 | void KeyHelperWidget::mouseReleaseEvent(QMouseEvent*) | ||
66 | { | ||
67 | ConfigEx::getInstance("keyhelper").setConfig("keyhelper"); | ||
68 | } | ||
69 | |||
70 | void KeyHelperWidget::receiveMessage( | ||
71 | const QCString& msg, const QByteArray& data) | ||
72 | { | ||
73 | if(m_pHelper == NULL){ | ||
74 | return; | ||
75 | } | ||
76 | QSafeDataStream stream(data, IO_ReadOnly); | ||
77 | if(msg == "event(int,int,int,int,int)"){ | ||
78 | int unicode; | ||
79 | int keycode; | ||
80 | int modifiers; | ||
81 | int isPress; | ||
82 | int autoRepeat; | ||
83 | stream >> unicode >> keycode >> modifiers >> isPress >> autoRepeat; | ||
84 | doEvent(unicode, keycode, modifiers, isPress, autoRepeat); | ||
85 | } else if(msg == "event(QString,int)"){ | ||
86 | QString key; | ||
87 | int isPress; | ||
88 | stream >> key >> isPress; | ||
89 | doEvent(key, isPress); | ||
90 | } else if(msg == "enable()"){ | ||
91 | enable(); | ||
92 | } else if(msg == "disable()"){ | ||
93 | disable(); | ||
94 | } else if(msg == "pause()"){ | ||
95 | pause(); | ||
96 | } else if(msg == "restart()"){ | ||
97 | restart(); | ||
98 | } else if(msg == "reload()"){ | ||
99 | m_xmlfile = QString::null; | ||
100 | doReload(); | ||
101 | } else if(msg == "reload(QString)"){ | ||
102 | stream >> m_xmlfile; | ||
103 | doReload(false); | ||
104 | } else if(msg == "version()"){ | ||
105 | version(); | ||
106 | } else if(msg == "repeater(int)"){ | ||
107 | int mode; | ||
108 | stream >> mode; | ||
109 | m_pHelper->m_oRepeater.setMode(mode); | ||
110 | } else if(msg == "hook(QString)"){ | ||
111 | QString s; | ||
112 | stream >> s; | ||
113 | m_pHelper->m_oAction.setHook(s.local8Bit()); | ||
114 | } else if(msg == "unhook()"){ | ||
115 | m_pHelper->m_oAction.setHook(""); | ||
116 | } else if(msg == "config()"){ | ||
117 | ConfigEx::getInstance("keyhelper").setConfig("keyhelper"); | ||
118 | } else if(msg == "config(QString)"){ | ||
119 | QString name; | ||
120 | stream >> name; | ||
121 | if(name == QString::null){ | ||
122 | ConfigEx::getInstance("keyhelper").setConfig("keyhelper"); | ||
123 | } else { | ||
124 | ConfigEx::getInstance("keyhelper").setConfig(name); | ||
125 | } | ||
126 | } else if(msg == "capture(int)"){ | ||
127 | int enable; | ||
128 | stream >> enable; | ||
129 | m_pHelper->m_oAction.setCapture(enable); | ||
130 | } else if(msg == "statistics()"){ | ||
131 | int level = g_level; | ||
132 | if(level == 0){ | ||
133 | setDebugLevel(1); | ||
134 | } | ||
135 | m_pHelper->statistics(); | ||
136 | if(level == 0){ | ||
137 | setDebugLevel(0); | ||
138 | } | ||
139 | } else if(msg == "dumpkeymap()"){ | ||
140 | int level = g_level; | ||
141 | if(level == 0){ | ||
142 | setDebugLevel(1); | ||
143 | } | ||
144 | m_pHelper->dumpkeymap(); | ||
145 | if(level == 0){ | ||
146 | setDebugLevel(0); | ||
147 | } | ||
148 | } else if(msg == "debug(int)"){ | ||
149 | int level; | ||
150 | stream >> level; | ||
151 | setDebugLevel(level); | ||
152 | } | ||
153 | } | ||
154 | |||
155 | void KeyHelperWidget::doReload(bool showstatus) | ||
156 | { | ||
157 | ConfigEx& cfg = ConfigEx::getInstance("keyhelper"); | ||
158 | QString oldgroup = cfg.getGroup(); | ||
159 | cfg.setGroup("Global"); | ||
160 | m_status = false; | ||
161 | if(showstatus && (cfg.readNumEntry("ShowStatusOnReload", 1) == 1)){ | ||
162 | m_status = true; | ||
163 | version(); | ||
164 | QCopEnvelope("QPE/System", "busy()"); | ||
165 | } | ||
166 | cfg.setGroup(oldgroup); | ||
167 | QTimer::singleShot(0, this, SLOT(reload())); | ||
168 | } | ||
169 | |||
170 | void KeyHelperWidget::doEvent(int unicode, int keycode, int modifiers, int isPress, int autoRepeat) | ||
171 | { | ||
172 | if(isPress == 0 || isPress == 1){ | ||
173 | m_pHelper->m_oAction.setAction(unicode, keycode, modifiers, isPress, autoRepeat); | ||
174 | m_pHelper->m_oAction.doAction(); | ||
175 | } else { | ||
176 | /* press & release */ | ||
177 | m_pHelper->m_oAction.setAction(unicode, keycode, modifiers, 1, autoRepeat); | ||
178 | m_pHelper->m_oAction.doAction(); | ||
179 | m_pHelper->m_oAction.setAction(unicode, keycode, modifiers, 0, autoRepeat); | ||
180 | m_pHelper->m_oAction.doAction(); | ||
181 | } | ||
182 | } | ||
183 | |||
184 | void KeyHelperWidget::doEvent(const QString& key, int isPress) | ||
185 | { | ||
186 | int unicode,keycode; | ||
187 | int modifiers = 0; | ||
188 | int pos; | ||
189 | QString keyname = key; | ||
190 | pos = keyname.find("+SHIFT", 0, FALSE); | ||
191 | if(pos > 0){ | ||
192 | modifiers |= Qt::ShiftButton; | ||
193 | keyname.remove(pos, 6); | ||
194 | } | ||
195 | pos = keyname.find("+CTRL", 0, FALSE); | ||
196 | if(pos > 0){ | ||
197 | modifiers |= Qt::ControlButton; | ||
198 | keyname.remove(pos, 5); | ||
199 | } | ||
200 | pos = keyname.find("+ALT", 0, FALSE); | ||
201 | if(pos > 0){ | ||
202 | modifiers |= Qt::AltButton; | ||
203 | keyname.remove(pos, 4); | ||
204 | } | ||
205 | if(keyname.length() > 1){ | ||
206 | unicode = 0xffff; | ||
207 | keycode = KeyNames::getCode(keyname); | ||
208 | /* get unicode */ | ||
209 | const QWSServer::KeyMap* m; | ||
210 | for(m=QWSServer::keyMap(); m->key_code != 0; m++){ | ||
211 | if(m->key_code == keycode){ | ||
212 | if(modifiers & Qt::ControlButton){ | ||
213 | unicode = m->ctrl_unicode; | ||
214 | } else if(modifiers & Qt::ShiftButton){ | ||
215 | unicode = m->shift_unicode; | ||
216 | } else { | ||
217 | unicode = m->unicode; | ||
218 | } | ||
219 | break; | ||
220 | } | ||
221 | } | ||
222 | } else { | ||
223 | const QWSServer::KeyMap* m; | ||
224 | keycode = 0; | ||
225 | unicode = keyname[0].unicode(); | ||
226 | /* check unicode */ | ||
227 | for(m=QWSServer::keyMap(); keycode == 0 && m->key_code != 0; m++){ | ||
228 | if(m->unicode == unicode){ | ||
229 | keycode = m->key_code; | ||
230 | break; | ||
231 | } | ||
232 | } | ||
233 | /* check shift_unicode */ | ||
234 | for(m=QWSServer::keyMap(); keycode == 0 && m->key_code != 0; m++){ | ||
235 | if(m->shift_unicode == unicode){ | ||
236 | keycode = m->key_code; | ||
237 | modifiers |= Qt::ShiftButton; | ||
238 | break; | ||
239 | } | ||
240 | } | ||
241 | /* check ctrl_unicode */ | ||
242 | for(m=QWSServer::keyMap(); keycode == 0 && m->key_code != 0; m++){ | ||
243 | if(m->ctrl_unicode == unicode){ | ||
244 | keycode = m->key_code; | ||
245 | modifiers |= Qt::ControlButton; | ||
246 | break; | ||
247 | } | ||
248 | } | ||
249 | } | ||
250 | doEvent(unicode, keycode, modifiers, isPress, 0); | ||
251 | } | ||
252 | |||
253 | void KeyHelperWidget::sysMessage( | ||
254 | const QCString& msg, const QByteArray& data) | ||
255 | { | ||
256 | QSafeDataStream stream(data, IO_ReadOnly); | ||
257 | if(msg == "linkChanged(QString)"){ | ||
258 | ConfigEx& cfg = ConfigEx::getInstance("keyhelper"); | ||
259 | QString oldgroup = cfg.getGroup(); | ||
260 | if(cfg.readNumEntry("DetectLinkChange", 1) == 1){ | ||
261 | AppLnkManager::init(true); | ||
262 | reload(); | ||
263 | } | ||
264 | cfg.setGroup(oldgroup); | ||
265 | } | ||
266 | } | ||
267 | |||
268 | void MsgHandler(QtMsgType type, const char* msg) | ||
269 | { | ||
270 | switch(type){ | ||
271 | case QtDebugMsg: | ||
272 | if(g_level >= 2){ | ||
273 | syslog(LOG_LOCAL5|LOG_DEBUG, | ||
274 | "<2>%s", msg); | ||
275 | } | ||
276 | break; | ||
277 | case QtWarningMsg: | ||
278 | if(g_level >= 1){ | ||
279 | syslog(LOG_LOCAL5|LOG_DEBUG, | ||
280 | "<1>%s", msg); | ||
281 | } | ||
282 | break; | ||
283 | default: | ||
284 | break; | ||
285 | } | ||
286 | } | ||
287 | |||
288 | void KeyHelperWidget::initDebugLevel() | ||
289 | { | ||
290 | ConfigEx& cfg = ConfigEx::getInstance("keyhelper"); | ||
291 | cfg.setGroup("Global"); | ||
292 | |||
293 | int level = cfg.readNumEntry("DebugLevel", 0); | ||
294 | setDebugLevel(level); | ||
295 | } | ||
296 | |||
297 | void KeyHelperWidget::setDebugLevel(int level) | ||
298 | { | ||
299 | #ifdef QT_QWS_EBX | ||
300 | static bool noDebug = true; | ||
301 | g_level = level; | ||
302 | if(g_level > 0){ | ||
303 | if(noDebug){ | ||
304 | m_defHandler = qInstallMsgHandler(MsgHandler); | ||
305 | noDebug = false; | ||
306 | } | ||
307 | } else { | ||
308 | qInstallMsgHandler(m_defHandler); | ||
309 | noDebug = true; | ||
310 | } | ||
311 | #endif | ||
312 | } | ||
313 | |||
314 | void KeyHelperWidget::enable() | ||
315 | { | ||
316 | m_enable = true; | ||
317 | m_pHelper->enable(); | ||
318 | //set(); | ||
319 | QTimer::singleShot(0, this, SLOT(set())); | ||
320 | } | ||
321 | |||
322 | void KeyHelperWidget::disable() | ||
323 | { | ||
324 | m_enable = false; | ||
325 | m_pHelper->disable(); | ||
326 | unset(); | ||
327 | } | ||
328 | |||
329 | void KeyHelperWidget::pause() | ||
330 | { | ||
331 | m_saved = m_enable; | ||
332 | disable(); | ||
333 | } | ||
334 | |||
335 | void KeyHelperWidget::restart() | ||
336 | { | ||
337 | if(m_saved){ | ||
338 | enable(); | ||
339 | } | ||
340 | } | ||
341 | |||
342 | void KeyHelperWidget::reload() | ||
343 | { | ||
344 | disable(); | ||
345 | ConfigEx& cfg = ConfigEx::getInstance("keyhelper"); | ||
346 | cfg.reload(); | ||
347 | if(m_pHelper->reload(m_xmlfile) == false){ | ||
348 | if(m_status){ | ||
349 | Global::statusMessage("KeyHelper: Load Error"); | ||
350 | } | ||
351 | } | ||
352 | init(); | ||
353 | if(m_status){ | ||
354 | QCopEnvelope e("QPE/System", "notBusy(QString)"); | ||
355 | const QString app = KHUtil::currentApp(); | ||
356 | e << app; | ||
357 | m_status = false; | ||
358 | } | ||
359 | } | ||
360 | |||
361 | void KeyHelperWidget::version() | ||
362 | { | ||
363 | QString ver = "KeyHelper "; | ||
364 | ver.append(_version_); | ||
365 | Global::statusMessage(ver); | ||
366 | } | ||
367 | |||
368 | void KeyHelperWidget::init() | ||
369 | { | ||
370 | AppLnkManager::init(); | ||
371 | #if 0 | ||
372 | if(m_pHelper == NULL){ | ||
373 | m_pHelper = new KeyHelper(); | ||
374 | } | ||
375 | #endif | ||
376 | loadUseFilterApps(); | ||
377 | enable(); | ||
378 | } | ||
379 | |||
380 | void KeyHelperWidget::set() | ||
381 | { | ||
382 | if(m_pHelper != NULL && m_enable == true && m_useFilter == false){ | ||
383 | qWarning("KeyHelperWidget::set()"); | ||
384 | m_pHelper->set(); | ||
385 | } | ||
386 | } | ||
387 | |||
388 | void KeyHelperWidget::unset() | ||
389 | { | ||
390 | m_pHelper->unset(); | ||
391 | } | ||
392 | |||
393 | void KeyHelperWidget::loadUseFilterApps() | ||
394 | { | ||
395 | ConfigEx& cfg = ConfigEx::getInstance("keyhelper"); | ||
396 | |||
397 | cfg.setGroup("Global"); | ||
398 | m_apps = cfg.readListEntry("UseFilterApps", ','); | ||
399 | |||
400 | if(m_apps.isEmpty()){ | ||
401 | /* default */ | ||
402 | m_apps.append("CRIM"); | ||
403 | m_apps.append("Jpn50Pad"); | ||
404 | m_apps.append("JpnKtnPad"); | ||
405 | m_apps.append("JpnNumPad"); | ||
406 | m_apps.append("JpnSymPad"); | ||
407 | m_apps.append("Keyboard"); | ||
408 | m_apps.append("IMWidget"); /* IMKit */ | ||
409 | m_apps.append("POBox"); /* QPOBox */ | ||
410 | } | ||
411 | } | ||
412 | |||
413 | #if 0 | ||
414 | void KeyHelperWidget::windowEvent(QWSWindow* w, QWSServer::WindowEvent e) | ||
415 | { | ||
416 | if(m_apps.contains(w->name())){ | ||
417 | switch(e){ | ||
418 | case QWSServer::Hide: | ||
419 | case QWSServer::Destroy: | ||
420 | m_useFilter = false; | ||
421 | //m_reset = true; | ||
422 | QTimer::singleShot(0, this, SLOT(set())); | ||
423 | break; | ||
424 | case QWSServer::Create: | ||
425 | case QWSServer::Raise: | ||
426 | case QWSServer::Show: | ||
427 | m_useFilter = true; | ||
428 | //m_reset = false; | ||
429 | m_reset = true; | ||
430 | break; | ||
431 | default: | ||
432 | break; | ||
433 | } | ||
434 | } else if(w->client()->identity() != NULL && w->name() != NULL){ | ||
435 | switch(e){ | ||
436 | #if 0 | ||
437 | case QWSServer::Create: | ||
438 | case QWSServer::Hide: | ||
439 | if(m_useFilter == false && m_reset){ | ||
440 | m_reset = false; | ||
441 | set(); | ||
442 | //QTimer::singleShot(0, this, SLOT(set())); | ||
443 | } | ||
444 | break; | ||
445 | #else | ||
446 | case QWSServer::Hide: | ||
447 | case QWSServer::Destroy: | ||
448 | //if(m_useFilter == false && m_reset){ | ||
449 | if(m_reset){ | ||
450 | m_reset = false; | ||
451 | set(); | ||
452 | //QTimer::singleShot(0, this, SLOT(set())); | ||
453 | } | ||
454 | break; | ||
455 | case QWSServer::Create: | ||
456 | case QWSServer::Raise: | ||
457 | case QWSServer::Show: | ||
458 | m_reset = true; | ||
459 | break; | ||
460 | #endif | ||
461 | default: | ||
462 | #if 0 | ||
463 | if(m_reset == true){ | ||
464 | m_reset = false; | ||
465 | set(); | ||
466 | } | ||
467 | #endif | ||
468 | break; | ||
469 | } | ||
470 | } | ||
471 | if(w->name() != NULL){ | ||
472 | qWarning("[%s][%s][%x][%s]", | ||
473 | w->name().latin1(), | ||
474 | w->caption().latin1(), | ||
475 | e, | ||
476 | w->client()->identity().latin1()); | ||
477 | } | ||
478 | } | ||
479 | |||
480 | #endif | ||
481 | |||
482 | bool KeyHelperWidget::eventFilter(QObject* o, QEvent* e) | ||
483 | { | ||
484 | return QWidget::eventFilter(o, e); | ||
485 | } | ||
486 | |||
487 | int KeyHelperWidget::position() | ||
488 | { | ||
489 | return 3; | ||
490 | } | ||
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.h b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.h new file mode 100644 index 0000000..4798c5c --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelperWidget.h | |||
@@ -0,0 +1,75 @@ | |||
1 | #ifndef _KEY_HELPER_WIDGET_H_ | ||
2 | #define _KEY_HELPER_WIDGET_H_ | ||
3 | |||
4 | #include <qwidget.h> | ||
5 | #include <qlabel.h> | ||
6 | #include <qpixmap.h> | ||
7 | #include <qtimer.h> | ||
8 | #include <qaccel.h> | ||
9 | #include <opie2/otaskbarapplet.h> | ||
10 | #include <opie2/okeyfilter.h> | ||
11 | |||
12 | #include <qpe/qcopenvelope_qws.h> | ||
13 | #include <qpe/qpeapplication.h> | ||
14 | #include <qpe/global.h> | ||
15 | #include <qpe/resource.h> | ||
16 | #include "KeyHelper.h" | ||
17 | #include "AppLnkManager.h" | ||
18 | #include "ConfigEx.h" | ||
19 | |||
20 | #include <syslog.h> | ||
21 | |||
22 | Q_EXPORT void MsgHandler(QtMsgType type, const char* msg); | ||
23 | |||
24 | class KeyHelperWidget : public QLabel | ||
25 | { | ||
26 | Q_OBJECT | ||
27 | public: | ||
28 | KeyHelperWidget(QWidget* parent = 0, const char* name=0); | ||
29 | ~KeyHelperWidget(); | ||
30 | static int position(); | ||
31 | |||
32 | virtual bool eventFilter(QObject* o, QEvent* e); | ||
33 | |||
34 | public slots: | ||
35 | //void windowEvent(QWSWindow* w, QWSServer::WindowEvent e); | ||
36 | protected: | ||
37 | QCopChannel* m_pChannel; | ||
38 | QCopChannel* m_pSysChannel; | ||
39 | QPixmap disabled; | ||
40 | |||
41 | protected slots: | ||
42 | void receiveMessage(const QCString& msg, const QByteArray& data); | ||
43 | void sysMessage(const QCString& msg, const QByteArray& data); | ||
44 | void reload(); | ||
45 | void set(); | ||
46 | void unset(); | ||
47 | void init(); | ||
48 | void mouseReleaseEvent(QMouseEvent*); | ||
49 | |||
50 | private: | ||
51 | void loadUseFilterApps(); | ||
52 | void enable(); | ||
53 | void disable(); | ||
54 | void pause(); | ||
55 | void restart(); | ||
56 | void version(); | ||
57 | void setDebugLevel(int level); | ||
58 | void initDebugLevel(); | ||
59 | |||
60 | bool m_reset; | ||
61 | bool m_useFilter; | ||
62 | bool m_status; | ||
63 | QString m_xmlfile; | ||
64 | msg_handler m_defHandler; | ||
65 | bool m_enable; | ||
66 | bool m_saved; | ||
67 | QStringList m_apps; | ||
68 | KeyHelper* m_pHelper; | ||
69 | private slots: | ||
70 | void doReload(bool showstatus=true); | ||
71 | void doEvent(int,int,int,int,int); | ||
72 | void doEvent(const QString&, int); | ||
73 | }; | ||
74 | |||
75 | #endif /* _KEY_HELPER_WIDGET_H_ */ | ||
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.cpp b/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.cpp new file mode 100644 index 0000000..69ba562 --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.cpp | |||
@@ -0,0 +1,203 @@ | |||
1 | #include "QSafeDataStream.h" | ||
2 | |||
3 | #include <qstring.h> | ||
4 | #include <qstringlist.h> | ||
5 | #include <qdatetime.h> | ||
6 | |||
7 | QSafeDataStream &QSafeDataStream::operator>>( Q_INT8 &i ) | ||
8 | { | ||
9 | if(atEnd()){ | ||
10 | i = 0; | ||
11 | return *this; | ||
12 | } else { | ||
13 | return (QSafeDataStream&)QDataStream::operator>>(i); | ||
14 | } | ||
15 | } | ||
16 | |||
17 | QSafeDataStream &QSafeDataStream::operator>>( Q_UINT8 &i ) | ||
18 | { | ||
19 | if(atEnd()){ | ||
20 | i = 0; | ||
21 | return *this; | ||
22 | } else { | ||
23 | return (QSafeDataStream&)QDataStream::operator>>(i); | ||
24 | } | ||
25 | } | ||
26 | |||
27 | QSafeDataStream &QSafeDataStream::operator>>( Q_INT16 &i ) | ||
28 | { | ||
29 | if(atEnd()){ | ||
30 | i = 0; | ||
31 | return *this; | ||
32 | } else { | ||
33 | return (QSafeDataStream&)QDataStream::operator>>(i); | ||
34 | } | ||
35 | } | ||
36 | |||
37 | QSafeDataStream &QSafeDataStream::operator>>( Q_UINT16 &i ) | ||
38 | { | ||
39 | if(atEnd()){ | ||
40 | i = 0; | ||
41 | return *this; | ||
42 | } else { | ||
43 | return (QSafeDataStream&)QDataStream::operator>>(i); | ||
44 | } | ||
45 | } | ||
46 | |||
47 | QSafeDataStream &QSafeDataStream::operator>>( Q_INT32 &i ) | ||
48 | { | ||
49 | if(atEnd()){ | ||
50 | i = 0; | ||
51 | return *this; | ||
52 | } else { | ||
53 | return (QSafeDataStream&)QDataStream::operator>>(i); | ||
54 | } | ||
55 | } | ||
56 | |||
57 | QSafeDataStream &QSafeDataStream::operator>>( Q_UINT32 &i ) | ||
58 | { | ||
59 | if(atEnd()){ | ||
60 | i = 0; | ||
61 | return *this; | ||
62 | } else { | ||
63 | return (QSafeDataStream&)QDataStream::operator>>(i); | ||
64 | } | ||
65 | } | ||
66 | |||
67 | QSafeDataStream &QSafeDataStream::operator>>( Q_INT64 &i ) | ||
68 | { | ||
69 | if(atEnd()){ | ||
70 | i = 0; | ||
71 | return *this; | ||
72 | } else { | ||
73 | return (QSafeDataStream&)QDataStream::operator>>(i); | ||
74 | } | ||
75 | } | ||
76 | |||
77 | QSafeDataStream &QSafeDataStream::operator>>( Q_UINT64 &i ) | ||
78 | { | ||
79 | if(atEnd()){ | ||
80 | i = 0; | ||
81 | return *this; | ||
82 | } else { | ||
83 | return (QSafeDataStream&)QDataStream::operator>>(i); | ||
84 | } | ||
85 | } | ||
86 | |||
87 | |||
88 | QSafeDataStream &QSafeDataStream::operator>>( float &f ) | ||
89 | { | ||
90 | if(atEnd()){ | ||
91 | f = 0; | ||
92 | return *this; | ||
93 | } else { | ||
94 | return (QSafeDataStream&)QDataStream::operator>>(f); | ||
95 | } | ||
96 | } | ||
97 | |||
98 | QSafeDataStream &QSafeDataStream::operator>>( double &f ) | ||
99 | { | ||
100 | if(atEnd()){ | ||
101 | f = 0; | ||
102 | return *this; | ||
103 | } else { | ||
104 | return (QSafeDataStream&)QDataStream::operator>>(f); | ||
105 | } | ||
106 | } | ||
107 | |||
108 | QSafeDataStream &QSafeDataStream::operator>>( char *&str ) | ||
109 | { | ||
110 | if(atEnd()){ | ||
111 | str = 0; | ||
112 | return *this; | ||
113 | } else { | ||
114 | return (QSafeDataStream&)QDataStream::operator>>(str); | ||
115 | } | ||
116 | } | ||
117 | |||
118 | QSafeDataStream &QSafeDataStream::readBytes( char *&s, uint &len ) | ||
119 | { | ||
120 | if(atEnd()){ | ||
121 | s = 0; | ||
122 | len = 0; | ||
123 | return *this; | ||
124 | } else { | ||
125 | return (QSafeDataStream&)QDataStream::readBytes(s, len); | ||
126 | } | ||
127 | } | ||
128 | |||
129 | QSafeDataStream &QSafeDataStream::readRawBytes( char *s, uint len ) | ||
130 | { | ||
131 | if(atEnd()){ | ||
132 | return *this; | ||
133 | } else { | ||
134 | return (QSafeDataStream&)QDataStream::readRawBytes(s, len); | ||
135 | } | ||
136 | } | ||
137 | |||
138 | QSafeDataStream &QSafeDataStream::operator>>( QString& s ) | ||
139 | { | ||
140 | if(atEnd()){ | ||
141 | s = QString::null; | ||
142 | return *this; | ||
143 | } else { | ||
144 | return (QSafeDataStream&)(*((QDataStream*)this) >> s); | ||
145 | } | ||
146 | } | ||
147 | |||
148 | QSafeDataStream &QSafeDataStream::operator>>( QStringList& list ) | ||
149 | { | ||
150 | if(atEnd()){ | ||
151 | list.clear(); | ||
152 | return *this; | ||
153 | } else { | ||
154 | return (QSafeDataStream&)(*((QDataStream*)this) >> list); | ||
155 | } | ||
156 | } | ||
157 | |||
158 | QSafeDataStream &QSafeDataStream::operator>>( QByteArray& a ) | ||
159 | { | ||
160 | if(atEnd()){ | ||
161 | a.resize(0); | ||
162 | return *this; | ||
163 | } else { | ||
164 | return (QSafeDataStream&)(*((QDataStream*)this) >> a); | ||
165 | } | ||
166 | } | ||
167 | |||
168 | QSafeDataStream &QSafeDataStream::operator>>( QCString& s ) | ||
169 | { | ||
170 | if(atEnd()){ | ||
171 | s.resize(0); | ||
172 | return *this; | ||
173 | } else { | ||
174 | return (QSafeDataStream&)(*((QDataStream*)this) >> s); | ||
175 | } | ||
176 | } | ||
177 | |||
178 | QSafeDataStream &QSafeDataStream::operator>>( QDate& d ) | ||
179 | { | ||
180 | if(atEnd()){ | ||
181 | return *this; | ||
182 | } else { | ||
183 | return (QSafeDataStream&)(*((QDataStream*)this) >> d); | ||
184 | } | ||
185 | } | ||
186 | |||
187 | QSafeDataStream &QSafeDataStream::operator>>( QTime& t ) | ||
188 | { | ||
189 | if(atEnd()){ | ||
190 | return *this; | ||
191 | } else { | ||
192 | return (QSafeDataStream&)(*((QDataStream*)this) >> t); | ||
193 | } | ||
194 | } | ||
195 | |||
196 | QSafeDataStream &QSafeDataStream::operator>>( QDateTime& dt ) | ||
197 | { | ||
198 | if(atEnd()){ | ||
199 | return *this; | ||
200 | } else { | ||
201 | return (QSafeDataStream&)(*((QDataStream*)this) >> dt); | ||
202 | } | ||
203 | } | ||
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.h b/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.h new file mode 100644 index 0000000..2152b23 --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/applet/QSafeDataStream.h | |||
@@ -0,0 +1,51 @@ | |||
1 | #ifndef _QSAFEDATASTREAM_H_ | ||
2 | #define _QSAFEDATASTREAM_H_ | ||
3 | |||
4 | #include <qdatastream.h> | ||
5 | |||
6 | class QString; | ||
7 | class QStringList; | ||
8 | class QCString; | ||
9 | class QDate; | ||
10 | class QTime; | ||
11 | class QDateTime; | ||
12 | |||
13 | class QSafeDataStream : public QDataStream | ||
14 | { | ||
15 | public: | ||
16 | /* constructors */ | ||
17 | QSafeDataStream() | ||
18 | : QDataStream() {} | ||
19 | QSafeDataStream(QIODevice* d) | ||
20 | : QDataStream(d) {} | ||
21 | QSafeDataStream(QByteArray a, int mode) | ||
22 | : QDataStream(a, mode) {} | ||
23 | |||
24 | /* read functions */ | ||
25 | QSafeDataStream &operator>>( Q_INT8 &i ); | ||
26 | QSafeDataStream &operator>>( Q_UINT8 &i ); | ||
27 | QSafeDataStream &operator>>( Q_INT16 &i ); | ||
28 | QSafeDataStream &operator>>( Q_UINT16 &i ); | ||
29 | QSafeDataStream &operator>>( Q_INT32 &i ); | ||
30 | QSafeDataStream &operator>>( Q_UINT32 &i ); | ||
31 | QSafeDataStream &operator>>( Q_INT64 &i ); | ||
32 | QSafeDataStream &operator>>( Q_UINT64 &i ); | ||
33 | |||
34 | QSafeDataStream &operator>>( float &f ); | ||
35 | QSafeDataStream &operator>>( double &f ); | ||
36 | QSafeDataStream &operator>>( char *&str ); | ||
37 | |||
38 | QSafeDataStream &readBytes( char *&, uint &len ); | ||
39 | QSafeDataStream &readRawBytes( char *, uint len ); | ||
40 | |||
41 | QSafeDataStream &operator>>( QString& s ); | ||
42 | QSafeDataStream &operator>>( QStringList& list ); | ||
43 | QSafeDataStream &operator>>( QByteArray& a ); | ||
44 | QSafeDataStream &operator>>( QCString& s ); | ||
45 | QSafeDataStream &operator>>( QDate& d ); | ||
46 | QSafeDataStream &operator>>( QTime& t ); | ||
47 | QSafeDataStream &operator>>( QDateTime& dt ); | ||
48 | |||
49 | }; | ||
50 | |||
51 | #endif /* _QSAFEDATASTREAM_H_ */ | ||