00001 #include "KeyHelper.h"
00002 #include <opie2/okeyfilter.h>
00003 #include <opie2/odebug.h>
00004
00005 KeyHelper::KeyHelper()
00006 {
00007 qDebug("KeyHelper::KeyHelper()");
00008 load();
00009
00010 m_oAction.setKeyModifiers(&m_oModifiers);
00011 m_oAction.setKeyMappings(&m_oMappings);
00012 m_oAction.setKeyExtensions(&m_oExtensions);
00013 m_oAction.setKeyRepeater(&m_oRepeater);
00014 m_oExtensions.setKeyModifiers(&m_oModifiers);
00015 }
00016
00017 KeyHelper::~KeyHelper()
00018 {
00019 unset();
00020 qDebug("KeyHelper::~KeyHelper()");
00021 }
00022
00023 bool KeyHelper::filter(int unicode, int keycode, int modifiers,
00024 bool isPress, bool autoRepeat)
00025 {
00026 odebug << "KeyHelper <<< "<<unicode<<" - "<<keycode<<" - "<<modifiers<<"\n";
00027 m_oAction.setAction(unicode, keycode, modifiers,
00028 isPress, autoRepeat);
00029 return(m_oAction.doAction());
00030 }
00031
00032 void KeyHelper::unset()
00033 {
00034 Opie::Core::OKeyFilter::inst()->remHandler(this);;
00035 }
00036
00037 void KeyHelper::set()
00038 {
00039 Opie::Core::OKeyFilter::inst()->addHandler(this);
00040 m_oModifiers.resetStates();
00041 }
00042
00043 void KeyHelper::enable()
00044 {
00045 m_oAction.enable();
00046 }
00047
00048 void KeyHelper::disable()
00049 {
00050 m_oAction.disable();
00051 m_oRepeater.stop();
00052 }
00053
00054 bool KeyHelper::load(const QString& file)
00055 {
00056 KeycfgReader oReader;
00057 oReader.setKeyModifiers(&m_oModifiers);
00058 oReader.setKeyMappings(&m_oMappings);
00059 oReader.setKeyExtensions(&m_oExtensions);
00060 oReader.setKeyRepeater(&m_oRepeater);
00061
00062 bool success;
00063 if(file.length() == 0){
00064 success = oReader.load();
00065 } else if(file[0] == '/'){
00066 success = oReader.load(file);
00067 } else {
00068
00069 QString filepath = QDir::homeDirPath() + "/Settings/" + file;
00070 success = oReader.load(filepath);
00071 }
00072 if(success == false){
00073 qDebug("config xml load error");
00074 setDefault();
00075 }
00076 return(success);
00077 }
00078
00079 bool KeyHelper::reload(const QString& file)
00080 {
00081 m_oModifiers.reset();
00082 m_oMappings.reset();
00083 m_oExtensions.reset();
00084 m_oRepeater.reset();
00085
00086 return(load(file));
00087 }
00088
00089 void KeyHelper::setDefault()
00090 {
00091
00092 m_oExtensions.assign("switch", Qt::Key_F12,
00093 m_oModifiers.getMask("Shift"), KeyNames::getCode("Shift"));
00094 m_oExtensions.assign("select", Qt::Key_F11,
00095 m_oModifiers.getMask("Shift"), KeyNames::getCode("Shift"));
00096 }
00097
00098 void KeyHelper::statistics()
00099 {
00100 m_oModifiers.statistics();
00101 m_oMappings.statistics();
00102 m_oExtensions.statistics();
00103 m_oRepeater.statistics();
00104 }
00105
00106 void KeyHelper::dumpkeymap()
00107 {
00108 const QWSServer::KeyMap* m = QWSServer::keyMap();
00109 qWarning("KeyHelper::dumpkeymap()");
00110 while(m->key_code != 0){
00111 qWarning(" [%04x][%04x][%04x][%04x]", m->key_code, m->unicode, m->shift_unicode, m->ctrl_unicode);
00112 m++;
00113 }
00114 }