//------------------------------------------------------------------------------ // Unassign code from any key definition existing in the set // NOTE: The key is unassigned from the current set only //------------------------------------------------------------------------------ CKeyDefinition *CKeyMap::UnAssign(int cde,CKeyDefinition *kdf) { CKeySet *set = FindKeySetById(kdf->GetSet()); CKeyDefinition *kpv = set->GetKeyByCode(cde); if (0 == kpv) return 0; kdf->SetCode(0); // remove code from actual kpv->SetCode(0); // remove code from previous set->ClearCode(cde); return kpv; }
//------------------------------------------------------------------------------ // Locate a key definition by keyboard code only //------------------------------------------------------------------------------ CKeyDefinition* CKeyMap::FindKeyDefinitionByCode (int iCode, Tag &setTagOut) { setTagOut = 0; std::map<Tag,CKeySet*>::iterator i; for (i=kset.begin(); i!=kset.end(); i++) { CKeySet *set = i->second; CKeyDefinition *kdf = set->GetKeyByCode(iCode); if (0 == kdf) continue; setTagOut = set->GetTag(); return kdf; } return 0; }
//------------------------------------------------------------------------------ // Keyboard Key pressed //------------------------------------------------------------------------------ void CKeyMap::KeyPress (U_INT key, EKeyboardModifiers mod) { // Translate key and modifier into keycode int code = (mod << 16) + key; bool handled = false; //--- special detection mode ------------------------------ if(m_bKeyDetect && m_fKeyCallback) { /// \todo unbind if this key code is already asigned if (m_fKeyCallback(m_winID, code)) return; } //---Standard key ----------------------------------------- for (U_INT k=0; (k<oset.size()); k++) { CKeySet *ks = oset[k]; CKeyDefinition *kdf = ks->GetKeyByCode(code); if (0 == kdf) continue; //---Call the redirected group key callback ----------- Tag ngp = kdf->GetSet(); ks = FindKeySetById (ngp); KeyGroupCB cb = ks->GetCB(); handled = (cb)(kdf,code); if (handled) return; } return; }