/* Copyright 2009 Michael Leupold This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License or (at your option) version 3 or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 14 of version 3 of the license. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include "kmodifierkeyinfo.h" template class Triple { public: Triple() {} Triple(const A _first, const B _second, const C _third) : first(_first), second(_second), third(_third) {}; A first; B second; C third; }; class TestWidget : public QWidget { Q_OBJECT public: TestWidget(); protected slots: void keyPressed(Qt::Key key, bool state); void keyLatched(Qt::Key key, bool state); void keyLocked(Qt::Key key, bool state); void mouseButtonPressed(Qt::MouseButton button, bool state); void latch(); void lock(); void keyAdded(Qt::Key) { kDebug() << "Key added"; } void keyRemoved(Qt::Key) { kDebug() << "Key removed"; } private: KModifierKeyInfo m_lock; QMap > m_leds; QMap m_mouseLeds; }; TestWidget::TestWidget() : QWidget(0), m_lock(this) { QMap mods; mods.insert(Qt::Key_Shift, "Shift"); mods.insert(Qt::Key_Control, "Ctrl"); mods.insert(Qt::Key_Alt, "Alt"); mods.insert(Qt::Key_Meta, "Meta"); mods.insert(Qt::Key_Super_L, "Super"); mods.insert(Qt::Key_Hyper_L, "Hyper"); mods.insert(Qt::Key_AltGr, "AltGr"); mods.insert(Qt::Key_NumLock, "NumLock"); mods.insert(Qt::Key_CapsLock, "CapsLock"); mods.insert(Qt::Key_ScrollLock, "ScrollLock"); QMap buttons; buttons.insert(Qt::LeftButton, "Left Button"); buttons.insert(Qt::RightButton, "Right Button"); buttons.insert(Qt::MiddleButton, "Middle Button"); QVBoxLayout *layout = new QVBoxLayout(this); QMap::const_iterator it; QMap::const_iterator end = mods.constEnd(); for (it = mods.constBegin(); it != end; ++it) { if (m_lock.knowsKey(it.key())) { QHBoxLayout *hlayout = new QHBoxLayout; KLed *pressed = new KLed(this); KLed *latched = new KLed(this); KLed *locked = new KLed(this); QPushButton *latch = new QPushButton("latch", this); latch->setProperty("modifier", it.key()); connect(latch, SIGNAL(clicked()), SLOT(latch())); QPushButton *lock = new QPushButton("lock", this); lock->setProperty("modifier", it.key()); connect(lock, SIGNAL(clicked()), SLOT(lock())); pressed->setState(m_lock.isKeyPressed(it.key()) ? KLed::On : KLed::Off); latched->setState(m_lock.isKeyLatched(it.key()) ? KLed::On : KLed::Off); locked->setState(m_lock.isKeyLocked(it.key()) ? KLed::On : KLed:: Off); m_leds.insert(it.key(), Triple(pressed, latched, locked)); hlayout->addWidget(pressed); hlayout->addWidget(latched); hlayout->addWidget(locked); hlayout->addWidget(new QLabel(it.value())); hlayout->addWidget(latch); hlayout->addWidget(lock); layout->addLayout(hlayout); } } QMap::const_iterator it2; QMap::const_iterator end2 = buttons.constEnd(); for (it2 = buttons.constBegin(); it2 != end2; ++it2) { QHBoxLayout *hlayout = new QHBoxLayout; KLed *pressed = new KLed(this); pressed->setState(m_lock.isButtonPressed(it2.key()) ? KLed::On : KLed::Off); m_mouseLeds.insert(it2.key(), pressed); hlayout->addWidget(pressed); hlayout->addWidget(new QLabel(it2.value())); layout->addLayout(hlayout); } setLayout(layout); connect(&m_lock, SIGNAL(keyPressed(Qt::Key,bool)), SLOT(keyPressed(Qt::Key,bool))); connect(&m_lock, SIGNAL(keyLatched(Qt::Key,bool)), SLOT(keyLatched(Qt::Key,bool))); connect(&m_lock, SIGNAL(keyLocked(Qt::Key,bool)), SLOT(keyLocked(Qt::Key,bool))); connect(&m_lock, SIGNAL(buttonPressed(Qt::MouseButton,bool)), SLOT(mouseButtonPressed(Qt::MouseButton,bool))); connect(&m_lock, SIGNAL(keyAdded(Qt::Key)), SLOT(keyAdded(Qt::Key))); connect(&m_lock, SIGNAL(keyRemoved(Qt::Key)), SLOT(keyRemoved(Qt::Key))); } void TestWidget::keyPressed(Qt::Key key, bool pressed) { if (m_leds.contains(key)) { m_leds[key].first->setState(pressed ? KLed::On : KLed::Off); } } void TestWidget::keyLatched(Qt::Key key, bool latched) { if (m_leds.contains(key)) { m_leds[key].second->setState(latched ? KLed::On : KLed::Off); } } void TestWidget::keyLocked(Qt::Key key, bool locked) { if (m_leds.contains(key)) { m_leds[key].third->setState(locked ? KLed::On : KLed::Off); } } void TestWidget::mouseButtonPressed(Qt::MouseButton button, bool pressed) { if (m_mouseLeds.contains(button)) { m_mouseLeds[button]->setState(pressed ? KLed::On : KLed::Off); } } void TestWidget::latch() { Qt::Key key = (Qt::Key)sender()->property("modifier").toInt(); m_lock.setKeyLatched(key, !m_lock.isKeyLatched(key)); } void TestWidget::lock() { Qt::Key key = (Qt::Key)sender()->property("modifier").toInt(); m_lock.setKeyLocked(key, !m_lock.isKeyLocked(key)); } int main(int argc, char *argv[]) { KAboutData about("simple", "simple", ki18n("simple"), "0.0.1"); KCmdLineArgs::init(argc, argv, &about); KApplication app; TestWidget mainWidget; mainWidget.show(); return app.exec(); } #include "kmodifierkeyinfotest.moc"