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) (side-by-side diff)
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 @@
+/**********************************************************************
+** Copyright (C) 2004 Anton Kachalov mouse@altlinux.ru
+** All rights reserved.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+**********************************************************************/
+
+#include "multikey.h"
+
+#include <qpe/global.h>
+#include <qpe/config.h>
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/qpeapplication.h>
+
+#include <qlabel.h>
+#include <qdir.h>
+#include <qfileinfo.h>
+#include <qcopchannel_qws.h>
+
+Multikey::Multikey( QWidget *parent ) : QLabel( parent ), current("EN")
+{
+ QCopChannel* swChannel = new QCopChannel("MultiKey/Switcher", this);
+ connect( swChannel, SIGNAL(received(const QCString &, const QByteArray &)),
+ this, SLOT(message(const QCString &, const QByteArray &)));
+
+ setFont( QFont( "Helvetica", 10, QFont::Normal ) );
+ lang = 0;
+ QCopEnvelope e("MultiKey/Keyboard", "getmultikey()");
+ setText("EN");
+ show();
+}
+
+void Multikey::mousePressEvent( QMouseEvent * )
+{
+ QCopEnvelope e("MultiKey/Keyboard", "setmultikey(QString)");
+ lang = lang < sw_maps.count()-1 ? lang+1 : 0;
+ //qDebug("Lang=%d, count=%d, lab=%s", lang, sw_maps.count(), labels[lang].ascii());
+ e << sw_maps[lang];
+ setText(labels[lang]);
+}
+
+void Multikey::message(const QCString &message, const QByteArray &data)
+{
+ if ( message == "setsw(QString,QString)" ) {
+
+ QDataStream stream(data, IO_ReadOnly);
+ QString maps, current_map;
+ stream >> maps >> current_map;
+ QStringList sw = QStringList::split(QChar('|'), maps);
+ sw.append(current_map);
+
+ QDir map_dir(QPEApplication::qpeDir() + "/share/multikey/", "*.keymap");
+ lang = 0;
+ labels.clear();
+ sw_maps.clear();
+
+ for (uint i = 0; i < sw.count(); ++i) {
+ QString keymap_map;
+ if (sw[i][0] != '/') {
+
+ keymap_map = map_dir.absPath() + "/" + sw[i];
+ } else {
+
+ if ((map_dir.exists(QFileInfo(sw[i]).fileName(), false)
+ && i != sw.count()-1) || !QFile::exists(sw[i])) {
+ continue;
+ }
+ keymap_map = sw[i];
+ }
+
+ QFile map(keymap_map);
+ if (map.open(IO_ReadOnly)) {
+ QString line;
+
+ map.readLine(line, 1024);
+ while (!map.atEnd()) {
+
+ if (line.find(QRegExp("^sw\\s*=\\s*")) != -1) {
+
+ if (i != sw.count()-1) {
+ if (keymap_map == current_map) {
+ lang = i;
+ }
+ sw_maps.append(keymap_map);
+ labels.append(line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace());
+ } else {
+ current = line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace();
+ }
+ break;
+ }
+ map.readLine(line, 1024);
+ }
+ map.close();
+ }
+ }
+
+ setText(current);
+ }
+}