summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore 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 @@
+*.moc
+Makefile*
+moc_*
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 @@
+ config MULTIKEYAPPLET
+ boolean "opie-multikeyapplet (Applet to switch keyboard layout)"
+ default "y"
+ 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 @@
+/**********************************************************************
+** 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);
+ }
+}
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 @@
+/**********************************************************************
+** 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.
+**
+**********************************************************************/
+#ifndef __MULTIKEY_H__
+#define __MULTIKEY_H__
+
+#include <qlabel.h>
+#include <qstringlist.h>
+#include <qcopchannel_qws.h>
+
+class Multikey : public QLabel
+{
+ Q_OBJECT
+public:
+ Multikey( QWidget *parent );
+
+public slots:
+ void message(const QCString &message, const QByteArray &data);
+
+protected:
+ void mousePressEvent( QMouseEvent * );
+ QStringList sw_maps;
+ QStringList labels;
+ QString current;
+ uint lang;
+};
+
+#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 @@
+TEMPLATE = lib
+CONFIG += qt plugin warn_on release
+HEADERS = multikey.h multikeyappletimpl.h
+SOURCES = multikey.cpp multikeyappletimpl.cpp
+TARGET = multikeyapplet
+DESTDIR = $(OPIEDIR)/plugins/applets
+INCLUDEPATH += $(OPIEDIR)/include
+DEPENDPATH += ../$(OPIEDIR)/include ..
+LIBS += -lqpe -lopie
+VERSION = 1.0.0
+
+include ( $(OPIEDIR)/include.pro )
+target.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 @@
+/**********************************************************************
+** 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 "multikeyappletimpl.h"
+
+MultikeyAppletImpl::MultikeyAppletImpl()
+ : kbd(0), ref(0)
+{
+}
+
+MultikeyAppletImpl::~MultikeyAppletImpl()
+{
+ delete kbd;
+}
+
+QWidget *MultikeyAppletImpl::applet( QWidget *parent )
+{
+ if ( !kbd )
+ kbd = new Multikey(parent);
+ return kbd;
+}
+
+int MultikeyAppletImpl::position() const
+{
+ return 10;
+}
+
+#ifndef QT_NO_COMPONENT
+QRESULT MultikeyAppletImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_TaskbarApplet )
+ *iface = this;
+
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( MultikeyAppletImpl )
+}
+#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 @@
+/**********************************************************************
+** 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.
+**
+**********************************************************************/
+#ifndef __MULTIKEYAPPLETIMPL_H__
+#define __MULTIKEYAPPLETIMPL_H__
+
+#include <qpe/taskbarappletinterface.h>
+
+class Multikey;
+
+class MultikeyAppletImpl : public TaskbarAppletInterface
+{
+public:
+ MultikeyAppletImpl();
+ virtual ~MultikeyAppletImpl();
+
+#ifndef QT_NO_COMPONENT
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+#endif
+
+ virtual QWidget *applet( QWidget *parent );
+ virtual int position() const;
+
+private:
+ Multikey *kbd;
+ ulong ref;
+};
+
+#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 @@
+Package: opie-multikeyapplet
+Files: plugins/applets/libmultikeyapplet.so*
+Priority: optional
+Section: opie/taskbar
+Maintainer: Anton Kachalov <mouse@altlinux.ru>
+Architecture: arm
+Depends: task-opie-minimal
+Description: Multikey Keyboard Layout Switcher Applet
+Version: $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 @@
+#!/bin/sh
+if pidof -s qpe >/dev/null; then
+ /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+else
+ exit 0
+fi
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 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"