00001 #include "KeyExtensions.h"
00002
00003 KeyExtensions::KeyExtensions()
00004 {
00005 qDebug("KeyExtensions::KeyExtensions()");
00006 m_cancelcode = 0;
00007 }
00008
00009 KeyExtensions::~KeyExtensions()
00010 {
00011 qDebug("KeyExtensions::~KeyExtensions()");
00012 clear();
00013 }
00014
00015 void KeyExtensions::assign(const QString& kind, int keycode,
00016 int keymask, const QValueList<int>& modcodes)
00017 {
00018 ExtensionInterface* ext;
00019 #if 0
00020 ext = m_oExtFactory.createInstance(kind);
00021 if(ext != NULL){
00022 ext->setKeycode(keycode);
00023 ext->setKeymask(keymask);
00024 ext->setModcodes(modcodes);
00025 }
00026 #else
00027 ext = m_oExtFactory.createInstance(kind, keycode, keymask);
00028 if(ext != NULL){
00029 ext->setModcodes(modcodes);
00030 }
00031 #endif
00032 }
00033
00034 void KeyExtensions::assign(const QString& kind, int keycode,
00035 int keymask, int modcode)
00036 {
00037 QValueList<int> modcodes;
00038 modcodes.append(modcode);
00039 assign(kind, keycode, keymask, modcodes);
00040 }
00041
00042 bool KeyExtensions::doKey(int keycode, int keymask, bool isPress)
00043 {
00044 bool fCancel = false;
00045 ExtensionList& list = m_oExtFactory.getList();
00046 for(ExtensionList::Iterator it=list.begin();
00047 it!=list.end(); ++it){
00048 if(isPress){
00049 int code = (*it)->getKeycode();
00050 if((*it)->getKeymask() == keymask
00051 && (code == 0 || code == keycode)){
00052 if((*it)->onKeyPress(keycode)){
00053 fCancel = true;
00054 }
00055 qWarning("ext:onKeyPress[%s][%x][%d]",
00056 (*it)->kind().latin1(),
00057 (*it)->getKeycode(),
00058 fCancel);
00059 }
00060 } else {
00061 if(keycode == m_cancelcode){
00062 fCancel = true;
00063 }
00064 const QValueList<int>& rlist = (*it)->getModcodes();
00065 if(rlist.contains(keycode)){
00066 if((*it)->onModRelease(keycode)){
00067 m_pModifiers->resetToggles();
00068 }
00069 qWarning("ext:onModRelease[%s][%x]",
00070 (*it)->kind().latin1(),
00071 keycode);
00072 }
00073 }
00074 }
00075 if(isPress && fCancel){
00076 m_cancelcode = keycode;
00077 } else {
00078 m_cancelcode = 0;
00079 }
00080 return(fCancel);
00081 }
00082
00083 void KeyExtensions::clear()
00084 {
00085 m_oExtFactory.clear();
00086 }
00087
00088 void KeyExtensions::reset()
00089 {
00090
00091 m_oExtFactory.reset();
00092 }
00093
00094 void KeyExtensions::init()
00095 {
00096 m_oExtFactory.sweep();
00097 }
00098
00099 void KeyExtensions::statistics()
00100 {
00101 qWarning("KeyExtensions::statistics()");
00102 ExtensionList& list = m_oExtFactory.getList();
00103 for(ExtensionList::Iterator it=list.begin();
00104 it!=list.end(); ++it){
00105 qWarning(" [%s][%x][%x]",
00106 (*it)->kind().latin1(),
00107 (*it)->getKeycode(),
00108 (*it)->getKeymask());
00109 }
00110 }
00111