summaryrefslogtreecommitdiff
path: root/core/applets/multikeyapplet/multikey.cpp
authormickeyl <mickeyl>2004-01-03 16:56:29 (UTC)
committer mickeyl <mickeyl>2004-01-03 16:56:29 (UTC)
commit4f7bf49ba4c0466aa9cea618c9317ac965a1118f (patch) (unidiff)
tree79569e70472ef1217bb692866ed33e04a3a097f7 /core/applets/multikeyapplet/multikey.cpp
parent6f36ed1520e6d87ee1dfb5e19fba684ce58609c2 (diff)
downloadopie-4f7bf49ba4c0466aa9cea618c9317ac965a1118f.zip
opie-4f7bf49ba4c0466aa9cea618c9317ac965a1118f.tar.gz
opie-4f7bf49ba4c0466aa9cea618c9317ac965a1118f.tar.bz2
add multikeyapplet (+distribution files) by Anton Kachalov <mouse@altlinux.ru>
Diffstat (limited to 'core/applets/multikeyapplet/multikey.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/multikeyapplet/multikey.cpp106
1 files changed, 106 insertions, 0 deletions
diff --git a/core/applets/multikeyapplet/multikey.cpp b/core/applets/multikeyapplet/multikey.cpp
new file mode 100644
index 0000000..0a056b0
--- a/dev/null
+++ b/core/applets/multikeyapplet/multikey.cpp
@@ -0,0 +1,106 @@
1/**********************************************************************
2** Copyright (C) 2004 Anton Kachalov mouse@altlinux.ru
3** All rights reserved.
4**
5** This file may be distributed and/or modified under the terms of the
6** GNU General Public License version 2 as published by the Free Software
7** Foundation and appearing in the file LICENSE.GPL included in the
8** packaging of this file.
9**
10** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
11** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
12**
13**********************************************************************/
14
15#include "multikey.h"
16
17#include <qpe/global.h>
18#include <qpe/config.h>
19#include <qpe/qcopenvelope_qws.h>
20#include <qpe/qpeapplication.h>
21
22#include <qlabel.h>
23#include <qdir.h>
24#include <qfileinfo.h>
25#include <qcopchannel_qws.h>
26
27Multikey::Multikey( QWidget *parent ) : QLabel( parent ), current("EN")
28{
29 QCopChannel* swChannel = new QCopChannel("MultiKey/Switcher", this);
30 connect( swChannel, SIGNAL(received(const QCString &, const QByteArray &)),
31 this, SLOT(message(const QCString &, const QByteArray &)));
32
33 setFont( QFont( "Helvetica", 10, QFont::Normal ) );
34 lang = 0;
35 QCopEnvelope e("MultiKey/Keyboard", "getmultikey()");
36 setText("EN");
37 show();
38}
39
40void Multikey::mousePressEvent( QMouseEvent * )
41{
42 QCopEnvelope e("MultiKey/Keyboard", "setmultikey(QString)");
43 lang = lang < sw_maps.count()-1 ? lang+1 : 0;
44 //qDebug("Lang=%d, count=%d, lab=%s", lang, sw_maps.count(), labels[lang].ascii());
45 e << sw_maps[lang];
46 setText(labels[lang]);
47}
48
49void Multikey::message(const QCString &message, const QByteArray &data)
50{
51 if ( message == "setsw(QString,QString)" ) {
52
53 QDataStream stream(data, IO_ReadOnly);
54 QString maps, current_map;
55 stream >> maps >> current_map;
56 QStringList sw = QStringList::split(QChar('|'), maps);
57 sw.append(current_map);
58
59 QDir map_dir(QPEApplication::qpeDir() + "/share/multikey/", "*.keymap");
60 lang = 0;
61 labels.clear();
62 sw_maps.clear();
63
64 for (uint i = 0; i < sw.count(); ++i) {
65 QString keymap_map;
66 if (sw[i][0] != '/') {
67
68 keymap_map = map_dir.absPath() + "/" + sw[i];
69 } else {
70
71 if ((map_dir.exists(QFileInfo(sw[i]).fileName(), false)
72 && i != sw.count()-1) || !QFile::exists(sw[i])) {
73 continue;
74 }
75 keymap_map = sw[i];
76 }
77
78 QFile map(keymap_map);
79 if (map.open(IO_ReadOnly)) {
80 QString line;
81
82 map.readLine(line, 1024);
83 while (!map.atEnd()) {
84
85 if (line.find(QRegExp("^sw\\s*=\\s*")) != -1) {
86
87 if (i != sw.count()-1) {
88 if (keymap_map == current_map) {
89 lang = i;
90 }
91 sw_maps.append(keymap_map);
92 labels.append(line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace());
93 } else {
94 current = line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace();
95 }
96 break;
97 }
98 map.readLine(line, 1024);
99 }
100 map.close();
101 }
102 }
103
104 setText(current);
105 }
106}