-rw-r--r-- | noncore/applets/zkbapplet/zkbwidget.cpp | 235 | ||||
-rw-r--r-- | noncore/applets/zkbapplet/zkbwidget.h | 32 | ||||
-rw-r--r-- | noncore/apps/keyz-cfg/zkb.cpp | 3 |
3 files changed, 140 insertions, 130 deletions
diff --git a/noncore/applets/zkbapplet/zkbwidget.cpp b/noncore/applets/zkbapplet/zkbwidget.cpp index 38bfba9..8499500 100644 --- a/noncore/applets/zkbapplet/zkbwidget.cpp +++ b/noncore/applets/zkbapplet/zkbwidget.cpp @@ -1,4 +1,5 @@ #include <opie2/otaskbarapplet.h> +#include <opie2/okeyfilter.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/applnk.h> #include <qpe/qpeapplication.h> @@ -9,84 +10,92 @@ #include "zkbcfg.h" using namespace Opie::Ui; -ZkbWidget::ZkbWidget(QWidget* parent):QLabel(parent),keymap(0), - disabled(Resource::loadPixmap("zkb-disabled")) { - labels = new QPopupMenu(); - connect(labels, SIGNAL(activated(int)), this, - SLOT(labelChanged(int))); +ZkbWidget::ZkbWidget(QWidget* parent) + :QLabel(parent),keymap(0),disabled(Resource::loadPixmap("zkb-disabled")) { - loadKeymap(); + labels = new QPopupMenu(); + connect(labels, SIGNAL(activated(int)), this, + SLOT(labelChanged(int))); - channel = new QCopChannel("QPE/zkb", this); - connect(channel, SIGNAL(received(const QCString&,const QByteArray&)), - this, SLOT(signalReceived(const QCString&,const QByteArray&))); + loadKeymap(); + + channel = new QCopChannel("QPE/zkb", this); + connect(channel, SIGNAL(received(const QCString&,const QByteArray&)), + this, SLOT(signalReceived(const QCString&,const QByteArray&))); setFixedWidth ( AppLnk::smallIconSize() ); setFixedHeight ( AppLnk::smallIconSize() ); } -ZkbWidget::~ZkbWidget() { +ZkbWidget::~ZkbWidget() +{ + if (keymap != 0) { + delete keymap; + keymap = 0; + } } int ZkbWidget::position() { - return 8; + return 8; } bool ZkbWidget::loadKeymap() { - ZkbConfig c(QPEApplication::qpeDir()+"/share/zkb"); - QFontMetrics fm(font()); - - if (keymap != 0) { - delete keymap; - keymap = 0; - } - - Keymap* km = new Keymap(); - - if (!c.load("zkb.xml", *km, "")) { - delete km; - setPixmap(disabled); - return false; - } - - connect(km, SIGNAL(stateChanged(const QString&)), - this, SLOT(stateChanged(const QString&))); - - qwsServer->setKeyboardFilter(km); - - Keymap* oldkm = keymap; - keymap = km; - - if (oldkm != 0) { - delete oldkm; - } - - setText(keymap->getCurrentLabel()); - - labels->clear(); - QStringList l = keymap->listLabels(); - labels->insertItem(disabled, 0, 0); - int n = 1; - w = 0; - for(QStringList::Iterator it = l.begin(); it != l.end(); - ++it, n++) { - -// printf("label: %s\n", (const char*) (*it).utf8()); - - labels->insertItem(*it, n, n); - int lw = fm.width(*it); - if (lw > w) { - w = lw; - } - } - - if (w == 0) { - hide(); - } else { - show(); - } - return true; + ZkbConfig c(QPEApplication::qpeDir()+"/share/zkb"); + QFontMetrics fm(font()); + + if (keymap != 0) { + delete keymap; + keymap = 0; + } + + Keymap* km = new Keymap(); + + if (!c.load("zkb.xml", *km, "")) { + delete km; + setPixmap(disabled); + return false; + } + + connect(km, SIGNAL(stateChanged(const QString&)), + this, SLOT(stateChanged(const QString&))); + + Opie::Core::OKeyFilter::inst()->addHandler(km); + + Keymap* oldkm = keymap; + keymap = km; + + if (oldkm != 0) { + delete oldkm; + } + + QString ltext = keymap->getCurrentLabel(); + if (ltext.length()==0) ltext = "??"; + setText(ltext); + + labels->clear(); + QStringList l = keymap->listLabels(); + labels->insertItem(disabled, 0, 0); + int n = 1; + w = 0; + for(QStringList::Iterator it = l.begin(); it != l.end(); + ++it, n++) { + +// printf("label: %s\n", (const char*) (*it).utf8()); + + labels->insertItem(*it, n, n); + int lw = fm.width(*it); + if (lw > w) { + w = lw; + } + } + + if (w == 0) { + hide(); + } else { + show(); + } + return true; } QSize ZkbWidget::sizeHint() const { @@ -94,68 +103,66 @@ QSize ZkbWidget::sizeHint() const { } void ZkbWidget::stateChanged(const QString& s) { -// odebug << "stateChanged: " << s.utf8() << "\n" << oendl; - setText(s); +// odebug << "stateChanged: " << s.utf8() << "\n" << oendl; + setText(s); } void ZkbWidget::labelChanged(int id) { - if (id == 0) { - keymap->disable(); - setPixmap(disabled); - return; - } - - keymap->enable(); - - QStringList l = keymap->listLabels(); - QString lbl = l[id-1]; - -// printf("labelChanged: %s\n", (const char*) lbl.utf8()); - State* state = keymap->getStateByLabel(lbl); - if (state != 0) { - keymap->setCurrentState(state); - setText(lbl); - } + if (id == 0) { + keymap->disable(); + setPixmap(disabled); + return; + } + + keymap->enable(); + + QStringList l = keymap->listLabels(); + QString lbl = l[id-1]; + +// printf("labelChanged: %s\n", (const char*) lbl.utf8()); + State* state = keymap->getStateByLabel(lbl); + if (state != 0) { + keymap->setCurrentState(state); + setText(lbl); + } } void ZkbWidget::mouseReleaseEvent(QMouseEvent*) { - QSize sh = labels->sizeHint(); - QPoint p = mapToGlobal(QPoint((width()-sh.width())/2,-sh.height())); - labels->exec(p); + QSize sh = labels->sizeHint(); + QPoint p = mapToGlobal(QPoint((width()-sh.width())/2,-sh.height())); + labels->exec(p); } void ZkbWidget::signalReceived(const QCString& msg, const QByteArray& data) { - QDataStream stream(data, IO_ReadOnly); - - if (msg == "enable()") { - keymap->enable(); - } else if (msg == "disable()") { - keymap->disable(); - } else if (msg == "reload()") { - QCopEnvelope("QPE/System", "busy()"); - QTimer::singleShot(0, this, SLOT(reload())); - } else if (msg == "switch(QString)") { - QString lbl; - stream >> lbl; - - if (keymap != 0) { - State* state = keymap->getStateByLabel(lbl); - if (state != 0) { - keymap->setCurrentState(state); - setText(lbl); - } - } - } else if (msg == "debug(QString)") { - QString flag; - stream >> flag; - } + QDataStream stream(data, IO_ReadOnly); + + if (msg == "enable()") { + keymap->enable(); + } else if (msg == "disable()") { + keymap->disable(); + } else if (msg == "reload()") { + QCopEnvelope("QPE/System", "busy()"); + QTimer::singleShot(0, this, SLOT(reload())); + } else if (msg == "switch(QString)") { + QString lbl; + stream >> lbl; + + if (keymap != 0) { + State* state = keymap->getStateByLabel(lbl); + if (state != 0) { + keymap->setCurrentState(state); + setText(lbl); + } + } + } else if (msg == "debug(QString)") { + QString flag; + stream >> flag; + } } void ZkbWidget::reload() { - loadKeymap(); - QCopEnvelope("QPE/System", "notBusy()"); + loadKeymap(); + QCopEnvelope("QPE/System", "notBusy()"); } EXPORT_OPIE_APPLET_v1( ZkbWidget ) - - diff --git a/noncore/applets/zkbapplet/zkbwidget.h b/noncore/applets/zkbapplet/zkbwidget.h index 7c67794..9bce85a 100644 --- a/noncore/applets/zkbapplet/zkbwidget.h +++ b/noncore/applets/zkbapplet/zkbwidget.h @@ -13,27 +13,27 @@ class ZkbWidget : public QLabel { Q_OBJECT public: - ZkbWidget(QWidget* parent); - ~ZkbWidget(); - static int position(); + ZkbWidget(QWidget* parent); + ~ZkbWidget(); + static int position(); - QSize sizeHint() const; + QSize sizeHint() const; protected: - QLabel* label; - Keymap* keymap; - QPopupMenu* labels; - QCopChannel* channel; - int w, h; - QPixmap disabled; + QLabel* label; + Keymap* keymap; + QPopupMenu* labels; + QCopChannel* channel; + int w, h; + QPixmap disabled; - bool loadKeymap(); - void mouseReleaseEvent(QMouseEvent*); + bool loadKeymap(); + void mouseReleaseEvent(QMouseEvent*); protected slots: - void stateChanged(const QString&); - void labelChanged(int id); - void signalReceived(const QCString& msg, const QByteArray& data); - void reload(); + void stateChanged(const QString&); + void labelChanged(int id); + void signalReceived(const QCString& msg, const QByteArray& data); + void reload(); }; #endif diff --git a/noncore/apps/keyz-cfg/zkb.cpp b/noncore/apps/keyz-cfg/zkb.cpp index c9e1dc5..a357b88 100644 --- a/noncore/apps/keyz-cfg/zkb.cpp +++ b/noncore/apps/keyz-cfg/zkb.cpp @@ -2,6 +2,7 @@ /* OPIE */ #include <opie2/odebug.h> +#include <opie2/okeyfilter.h> #include <stdio.h> @@ -246,6 +247,8 @@ Keymap::Keymap():enabled(true), currentState(0), autoRepeatAction(0), repeater(t } Keymap::~Keymap() { + odebug << "removing keyboard filter for zkb"<<oendl; + Opie::Core::OKeyFilter::inst()->remHandler(this); QMap<QString, State*>::Iterator it; for(it = states.begin(); it != states.end(); ++it) { delete it.data(); |