summaryrefslogtreecommitdiff
path: root/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp
Side-by-side diff
Diffstat (limited to 'noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp
new file mode 100644
index 0000000..4afdc1f
--- a/dev/null
+++ b/noncore/applets/keyhelper/keyhelperapplet/applet/KeyHelper.cpp
@@ -0,0 +1,112 @@
+#include "KeyHelper.h"
+#include <opie2/okeyfilter.h>
+
+KeyHelper::KeyHelper()
+{
+ qDebug("KeyHelper::KeyHelper()");
+ load();
+
+ m_oAction.setKeyModifiers(&m_oModifiers);
+ m_oAction.setKeyMappings(&m_oMappings);
+ m_oAction.setKeyExtensions(&m_oExtensions);
+ m_oAction.setKeyRepeater(&m_oRepeater);
+ m_oExtensions.setKeyModifiers(&m_oModifiers);
+}
+
+KeyHelper::~KeyHelper()
+{
+ unset();
+ qDebug("KeyHelper::~KeyHelper()");
+}
+
+bool KeyHelper::filter(int unicode, int keycode, int modifiers,
+ bool isPress, bool autoRepeat)
+{
+ m_oAction.setAction(unicode, keycode, modifiers,
+ isPress, autoRepeat);
+ return(m_oAction.doAction());
+}
+
+void KeyHelper::unset()
+{
+ Opie::Core::OKeyFilter::inst()->remHandler(this);;
+}
+
+void KeyHelper::set()
+{
+ Opie::Core::OKeyFilter::inst()->addHandler(this);
+ m_oModifiers.resetStates();
+}
+
+void KeyHelper::enable()
+{
+ m_oAction.enable();
+}
+
+void KeyHelper::disable()
+{
+ m_oAction.disable();
+ m_oRepeater.stop();
+}
+
+bool KeyHelper::load(const QString& file)
+{
+ KeycfgReader oReader;
+ oReader.setKeyModifiers(&m_oModifiers);
+ oReader.setKeyMappings(&m_oMappings);
+ oReader.setKeyExtensions(&m_oExtensions);
+ oReader.setKeyRepeater(&m_oRepeater);
+
+ bool success;
+ if(file.length() == 0){
+ success = oReader.load();
+ } else if(file[0] == '/'){
+ success = oReader.load(file);
+ } else {
+ //QString filepath = QString(::getenv("HOME")) + "/Settings/" + file;
+ QString filepath = QDir::homeDirPath() + "/Settings/" + file;
+ success = oReader.load(filepath);
+ }
+ if(success == false){
+ qDebug("config xml load error");
+ setDefault();
+ }
+ return(success);
+}
+
+bool KeyHelper::reload(const QString& file)
+{
+ m_oModifiers.reset();
+ m_oMappings.reset();
+ m_oExtensions.reset();
+ m_oRepeater.reset();
+
+ return(load(file));
+}
+
+void KeyHelper::setDefault()
+{
+ /* default settings */
+ m_oExtensions.assign("switch", Qt::Key_F12,
+ m_oModifiers.getMask("Shift"), KeyNames::getCode("Shift"));
+ m_oExtensions.assign("select", Qt::Key_F11,
+ m_oModifiers.getMask("Shift"), KeyNames::getCode("Shift"));
+}
+
+void KeyHelper::statistics()
+{
+ m_oModifiers.statistics();
+ m_oMappings.statistics();
+ m_oExtensions.statistics();
+ m_oRepeater.statistics();
+}
+
+void KeyHelper::dumpkeymap()
+{
+ const QWSServer::KeyMap* m = QWSServer::keyMap();
+ qWarning("KeyHelper::dumpkeymap()");
+ while(m->key_code != 0){
+ qWarning(" [%04x][%04x][%04x][%04x]", m->key_code, m->unicode, m->shift_unicode, m->ctrl_unicode);
+ m++;
+ }
+}