From 2b64a84d39eeed5681d0ee5068c7d11a01527750 Mon Sep 17 00:00:00 2001 From: alwin Date: Mon, 28 Feb 2005 09:40:30 +0000 Subject: other keymapping tool - not working this moment, I have to check it out - the reason is that the config file is somewhat easier to understand than from zkbapplet and has a nice config tool. Please don't put it into any repositories this moment. --- (limited to 'noncore/applets/keyhelper/keyhelperconf/KHCWidget.cpp') diff --git a/noncore/applets/keyhelper/keyhelperconf/KHCWidget.cpp b/noncore/applets/keyhelper/keyhelperconf/KHCWidget.cpp new file mode 100644 index 0000000..b0767cf --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperconf/KHCWidget.cpp @@ -0,0 +1,307 @@ +#include "KHCWidget.h" + +KHCWidget::KHCWidget(QWidget* parent, const char* name, WFlags fl) + : KHCWidgetBase(parent, name, fl) +{ + m_isEnable = true; + setLayout(); + setHandler(); + + txtOrgKey->installEventFilter(this); + txtMapKey->installEventFilter(this); +} + +KHCWidget::~KHCWidget() +{ +} + +void KHCWidget::setLayout() +{ + QBoxLayout* topLayout = new QVBoxLayout(this, 5); + + QBoxLayout* orgLayout1 = new QHBoxLayout(topLayout); + orgLayout1->addWidget(lblOriginal); + orgLayout1->addWidget(txtOrgKey); + + QBoxLayout* orgLayout2 = new QHBoxLayout(topLayout); + orgLayout2->addWidget(lblOrgK); + orgLayout2->addWidget(lblOrgKeycode); +#if 0 + orgLayout2->addWidget(lblOrgM); + orgLayout2->addWidget(lblOrgModifiers); +#endif + orgLayout2->addWidget(lblOrgU); + orgLayout2->addWidget(lblOrgUnicode); + orgLayout2->addWidget(chkOrgShift); + orgLayout2->addWidget(chkOrgCtrl); + orgLayout2->addWidget(chkOrgAlt); + + QBoxLayout* mapLayout1 = new QHBoxLayout(topLayout); + mapLayout1->addWidget(lblMapping); + mapLayout1->addWidget(txtMapKey); + + QBoxLayout* mapLayout2 = new QHBoxLayout(topLayout); + mapLayout2->addWidget(lblMapK); + mapLayout2->addWidget(lblMapKeycode); +#if 0 + mapLayout2->addWidget(lblMapM); + mapLayout2->addWidget(lblMapModifiers); +#endif + mapLayout2->addWidget(lblMapU); + mapLayout2->addWidget(lblMapUnicode); + mapLayout2->addWidget(chkMapShift); + mapLayout2->addWidget(chkMapCtrl); + mapLayout2->addWidget(chkMapAlt); + + QBoxLayout* btnLayout = new QHBoxLayout(topLayout); + btnLayout->addWidget(btnGen); + btnLayout->addWidget(btnCopy); + btnLayout->addWidget(btnCtrl); + + topLayout->addWidget(mleDefine); +} + +void KHCWidget::setHandler() +{ + connect(btnGen, SIGNAL(clicked()), this, SLOT(onClick_Gen())); + connect(btnCopy, SIGNAL(clicked()), this, SLOT(onClick_Copy())); + connect(btnCtrl, SIGNAL(clicked()), this, SLOT(onClick_Ctrl())); +} + +bool KHCWidget::eventFilter(QObject* o, QEvent* e) +{ + if(::strcmp(o->name(), "txtOrgKey") == 0){ + if(e->type() == QEvent::KeyPress){ + QKeyEvent* ke = (QKeyEvent*)e; + if(ke->isAutoRepeat() == false){ + onPress_Org(ke); + } + return(true); + } + } else if(::strcmp(o->name(), "txtMapKey") == 0){ + if(e->type() == QEvent::KeyPress){ + QKeyEvent* ke = (QKeyEvent*)e; + if(ke->isAutoRepeat() == false){ + onPress_Map(ke); + } + return(true); + } + } + + return QWidget::eventFilter(o, e); +} + +void KHCWidget::onPress_Org(QKeyEvent* ke) +{ + /* keycode */ + const QString& name = KeyNames::getName(ke->key()); + if(name == QString::null){ + lblOrgKeycode->setText(QString::number(ke->key(), 16)); + } else { + lblOrgKeycode->setText(name); + } + /* modifiers */ + chkOrgShift->setChecked(ke->state() & Qt::ShiftButton); + chkOrgCtrl->setChecked(ke->state() & Qt::ControlButton); + chkOrgAlt->setChecked(ke->state() & Qt::AltButton); + + /* unicode */ + if(ke->text()[0].isPrint()){ + lblOrgUnicode->setText(ke->text()); + } else { + lblOrgUnicode->setText(QString::number(ke->ascii(), 16)); + } + m_OrgkeyData.setData(ke); +} + +void KHCWidget::onPress_Map(QKeyEvent* ke) +{ + /* keycode */ + const QString& name = KeyNames::getName(ke->key()); + if(name == QString::null){ + lblMapKeycode->setText(QString::number(ke->key(), 16)); + } else { + lblMapKeycode->setText(name); + } + /* modifiers */ + chkMapShift->setChecked(ke->state() & Qt::ShiftButton); + chkMapCtrl->setChecked(ke->state() & Qt::ControlButton); + chkMapAlt->setChecked(ke->state() & Qt::AltButton); + + /* unicode */ + if(ke->text()[0].isPrint()){ + lblMapUnicode->setText(ke->text()); + } else { + lblMapUnicode->setText(QString::number(ke->ascii(), 16)); + } + m_MapkeyData.setData(ke); +} + +void KHCWidget::onClick_Gen() +{ + mleDefine->clear(); + if(m_OrgkeyData.key == 0 + || m_MapkeyData.key == 0){ + return; + } + /* original key */ + QString line; + const QString& name = KeyNames::getName(m_OrgkeyData.key); + line = ""); + mleDefine->append(line); + + /* original modifiers */ + bool need = false; + line = "isChecked()){ + line.append(" Shift=\"On\""); + need = true; + } + if(chkOrgCtrl->isChecked()){ + line.append(" Control=\"On\""); + need = true; + } + if(chkOrgAlt->isChecked()){ + line.append(" Alt=\"On\""); + need = true; + } + line.append("/>"); + if(need){ + mleDefine->append(line); + } + + /* mapping key */ + const QString& mapname = KeyNames::getName(m_MapkeyData.key); + line = ""); + mleDefine->append(line); + + /* mapping modifiers */ + need = false; + line = "isChecked(); + if(chkOrgShift->isChecked() != on){ + line.append(" Shift=\""); + if(on){ + line.append("On\""); + } else { + line.append("Off\""); + } + need = true; + } + on = chkMapCtrl->isChecked(); + if(chkOrgCtrl->isChecked() != on){ + line.append(" Control=\""); + if(on){ + line.append("On\""); + } else { + line.append("Off\""); + } + need = true; + } + on = chkMapAlt->isChecked(); + if(chkOrgAlt->isChecked() != on){ + line.append(" Alt=\""); + if(on){ + line.append("On\""); + } else { + line.append("Off\""); + } + need = true; + } + line.append("/>"); + if(need){ + mleDefine->append(line); + } + + /* mapping unicode */ + bool found = false; + for(const QWSServer::KeyMap* m = QWSServer::keyMap(); + m->key_code != 0; m++){ + if(m->key_code == m_MapkeyData.key){ + if(m_MapkeyData.state & Qt::ControlButton){ + if(m->ctrl_unicode == m_MapkeyData.ascii){ + found = true; + break; + } + } else if(m_MapkeyData.state & Qt::ShiftButton){ + if(m->shift_unicode == m_MapkeyData.ascii){ + found = true; + break; + } + } else { + if(m->unicode == m_MapkeyData.ascii){ + found = true; + break; + } + } + } + } + if(found == false){ + if(m_MapkeyData.text[0].isPrint()){ + line = ""); + mleDefine->append(line); + } else { + mleDefine->clear(); + mleDefine->append("Not Support"); + return; + } + } + + /* close tag */ + line = ""; + mleDefine->append(line); +} + +void KHCWidget::onClick_Copy() +{ + mleDefine->selectAll(); + mleDefine->copy(); + mleDefine->deselect(); +} + +void KHCWidget::onClick_Ctrl() +{ + if(m_isEnable){ + QCopEnvelope e("QPE/KeyHelper", "disable()"); + btnCtrl->setText(tr("Enable")); + //btnCtrl->update(); + } else { + QCopEnvelope e("QPE/KeyHelper", "enable()"); + btnCtrl->setText(tr("Disable")); + //btnCtrl->update(); + } + m_isEnable = !m_isEnable; +} + +void KHCWidget::closeEvent(QCloseEvent* ce) +{ + qDebug("closeEvent()"); + QCopEnvelope e("QPE/KeyHelper", "enable()"); + ce->accept(); +} + -- cgit v0.9.0.2