From 4f7bf49ba4c0466aa9cea618c9317ac965a1118f Mon Sep 17 00:00:00 2001 From: mickeyl Date: Sat, 03 Jan 2004 16:56:29 +0000 Subject: add multikeyapplet (+distribution files) by Anton Kachalov --- 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 +#include +#include +#include + +#include +#include +#include +#include + +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 +#include +#include + +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 + +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 +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()" -- cgit v0.9.0.2