summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2004-01-03 16:56:29 (UTC)
committer mickeyl <mickeyl>2004-01-03 16:56:29 (UTC)
commit4f7bf49ba4c0466aa9cea618c9317ac965a1118f (patch) (unidiff)
tree79569e70472ef1217bb692866ed33e04a3a097f7
parent6f36ed1520e6d87ee1dfb5e19fba684ce58609c2 (diff)
downloadopie-4f7bf49ba4c0466aa9cea618c9317ac965a1118f.zip
opie-4f7bf49ba4c0466aa9cea618c9317ac965a1118f.tar.gz
opie-4f7bf49ba4c0466aa9cea618c9317ac965a1118f.tar.bz2
add multikeyapplet (+distribution files) by Anton Kachalov <mouse@altlinux.ru>
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/applets/multikeyapplet/.cvsignore3
-rw-r--r--core/applets/multikeyapplet/config.in4
-rw-r--r--core/applets/multikeyapplet/multikey.cpp106
-rw-r--r--core/applets/multikeyapplet/multikey.h38
-rw-r--r--core/applets/multikeyapplet/multikeyapplet.pro13
-rw-r--r--core/applets/multikeyapplet/multikeyappletimpl.cpp57
-rw-r--r--core/applets/multikeyapplet/multikeyappletimpl.h40
-rw-r--r--core/applets/multikeyapplet/opie-multikeyapplet.control9
-rwxr-xr-xcore/applets/multikeyapplet/opie-multikeyapplet.postinst6
-rwxr-xr-xcore/applets/multikeyapplet/opie-multikeyapplet.postrm2
10 files changed, 278 insertions, 0 deletions
diff --git a/core/applets/multikeyapplet/.cvsignore b/core/applets/multikeyapplet/.cvsignore
new file mode 100644
index 0000000..1ee9a27
--- a/dev/null
+++ b/core/applets/multikeyapplet/.cvsignore
@@ -0,0 +1,3 @@
1*.moc
2Makefile*
3moc_*
diff --git a/core/applets/multikeyapplet/config.in b/core/applets/multikeyapplet/config.in
new file mode 100644
index 0000000..f74161e
--- a/dev/null
+++ b/core/applets/multikeyapplet/config.in
@@ -0,0 +1,4 @@
1 config MULTIKEYAPPLET
2 boolean "opie-multikeyapplet (Applet to switch keyboard layout)"
3 default "y"
4 depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE && MULTIKEY
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}
diff --git a/core/applets/multikeyapplet/multikey.h b/core/applets/multikeyapplet/multikey.h
new file mode 100644
index 0000000..2cb7b29
--- a/dev/null
+++ b/core/applets/multikeyapplet/multikey.h
@@ -0,0 +1,38 @@
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#ifndef __MULTIKEY_H__
15#define __MULTIKEY_H__
16
17#include <qlabel.h>
18#include <qstringlist.h>
19#include <qcopchannel_qws.h>
20
21class Multikey : public QLabel
22{
23 Q_OBJECT
24public:
25 Multikey( QWidget *parent );
26
27public slots:
28 void message(const QCString &message, const QByteArray &data);
29
30protected:
31 void mousePressEvent( QMouseEvent * );
32 QStringList sw_maps;
33 QStringList labels;
34 QString current;
35 uint lang;
36};
37
38#endif /* __MULTIKEY_H__ */
diff --git a/core/applets/multikeyapplet/multikeyapplet.pro b/core/applets/multikeyapplet/multikeyapplet.pro
new file mode 100644
index 0000000..4be1f74
--- a/dev/null
+++ b/core/applets/multikeyapplet/multikeyapplet.pro
@@ -0,0 +1,13 @@
1 TEMPLATE= lib
2 CONFIG += qt plugin warn_on release
3 HEADERS= multikey.h multikeyappletimpl.h
4 SOURCES= multikey.cpp multikeyappletimpl.cpp
5 TARGET = multikeyapplet
6 DESTDIR = $(OPIEDIR)/plugins/applets
7INCLUDEPATH += $(OPIEDIR)/include
8DEPENDPATH += ../$(OPIEDIR)/include ..
9LIBS += -lqpe -lopie
10 VERSION = 1.0.0
11
12include ( $(OPIEDIR)/include.pro )
13target.path = $$prefix/plugins/applets
diff --git a/core/applets/multikeyapplet/multikeyappletimpl.cpp b/core/applets/multikeyapplet/multikeyappletimpl.cpp
new file mode 100644
index 0000000..4644556
--- a/dev/null
+++ b/core/applets/multikeyapplet/multikeyappletimpl.cpp
@@ -0,0 +1,57 @@
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#include "multikey.h"
15#include "multikeyappletimpl.h"
16
17MultikeyAppletImpl::MultikeyAppletImpl()
18 : kbd(0), ref(0)
19{
20}
21
22MultikeyAppletImpl::~MultikeyAppletImpl()
23{
24 delete kbd;
25}
26
27QWidget *MultikeyAppletImpl::applet( QWidget *parent )
28{
29 if ( !kbd )
30 kbd = new Multikey(parent);
31 return kbd;
32}
33
34int MultikeyAppletImpl::position() const
35{
36 return 10;
37}
38
39#ifndef QT_NO_COMPONENT
40QRESULT MultikeyAppletImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
41{
42 *iface = 0;
43 if ( uuid == IID_QUnknown )
44 *iface = this;
45 else if ( uuid == IID_TaskbarApplet )
46 *iface = this;
47
48 if ( *iface )
49 (*iface)->addRef();
50 return QS_OK;
51}
52
53Q_EXPORT_INTERFACE()
54{
55 Q_CREATE_INSTANCE( MultikeyAppletImpl )
56}
57#endif
diff --git a/core/applets/multikeyapplet/multikeyappletimpl.h b/core/applets/multikeyapplet/multikeyappletimpl.h
new file mode 100644
index 0000000..c77e347
--- a/dev/null
+++ b/core/applets/multikeyapplet/multikeyappletimpl.h
@@ -0,0 +1,40 @@
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#ifndef __MULTIKEYAPPLETIMPL_H__
15#define __MULTIKEYAPPLETIMPL_H__
16
17#include <qpe/taskbarappletinterface.h>
18
19class Multikey;
20
21class MultikeyAppletImpl : public TaskbarAppletInterface
22{
23public:
24 MultikeyAppletImpl();
25 virtual ~MultikeyAppletImpl();
26
27#ifndef QT_NO_COMPONENT
28 QRESULT queryInterface( const QUuid&, QUnknownInterface** );
29 Q_REFCOUNT
30#endif
31
32 virtual QWidget *applet( QWidget *parent );
33 virtual int position() const;
34
35private:
36 Multikey *kbd;
37 ulong ref;
38};
39
40#endif /* __MULTIKEYAPPLETIMPL_H__ */
diff --git a/core/applets/multikeyapplet/opie-multikeyapplet.control b/core/applets/multikeyapplet/opie-multikeyapplet.control
new file mode 100644
index 0000000..2c27cc7
--- a/dev/null
+++ b/core/applets/multikeyapplet/opie-multikeyapplet.control
@@ -0,0 +1,9 @@
1Package: opie-multikeyapplet
2Files: plugins/applets/libmultikeyapplet.so*
3Priority: optional
4Section: opie/taskbar
5Maintainer: Anton Kachalov <mouse@altlinux.ru>
6Architecture: arm
7Depends: task-opie-minimal
8Description: Multikey Keyboard Layout Switcher Applet
9Version: $QPE_VERSION$EXTRAVERSION
diff --git a/core/applets/multikeyapplet/opie-multikeyapplet.postinst b/core/applets/multikeyapplet/opie-multikeyapplet.postinst
new file mode 100755
index 0000000..a549c30
--- a/dev/null
+++ b/core/applets/multikeyapplet/opie-multikeyapplet.postinst
@@ -0,0 +1,6 @@
1#!/bin/sh
2if pidof -s qpe >/dev/null; then
3 /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
4else
5 exit 0
6fi
diff --git a/core/applets/multikeyapplet/opie-multikeyapplet.postrm b/core/applets/multikeyapplet/opie-multikeyapplet.postrm
new file mode 100755
index 0000000..ba76ffa
--- a/dev/null
+++ b/core/applets/multikeyapplet/opie-multikeyapplet.postrm
@@ -0,0 +1,2 @@
1#!/bin/sh
2/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"