OSDN Git Service

Remove Clear and rewrite IsPassThrough in CXkeymacsDll.
[xkeymacs/xkeymacs.git] / xkeymacsdll / FunctionDefinition.cpp
1 // FunctionDefinition.cpp: implementation of the CFunctionDefinition class.\r
2 //\r
3 //////////////////////////////////////////////////////////////////////\r
4 \r
5 #include "stdafx.h"\r
6 #include "FunctionDefinition.h"\r
7 #include "Commands.h"\r
8 #include "Utils.h"\r
9 \r
10 CFunctionDefinition::CFunctionDefinition(CString szSymbol, CString szDefinition)\r
11 {\r
12         SetSymbol(szSymbol);\r
13         SetDefinition(szDefinition);\r
14 }\r
15 \r
16 void CFunctionDefinition::SetSymbol(CString szSymbol)\r
17 {\r
18         m_szSymbol = szSymbol;\r
19 }\r
20 \r
21 void CFunctionDefinition::SetDefinition(CString szDefinition)\r
22 {\r
23         m_szDefinition = szDefinition;\r
24 }\r
25 \r
26 CString CFunctionDefinition::GetSymbol()\r
27 {\r
28         return m_szSymbol;\r
29 }\r
30 \r
31 CString CFunctionDefinition::GetDefinition()\r
32 {\r
33         return m_szDefinition;\r
34 }\r
35 \r
36 void CFunctionDefinition::ClearKey(int nAppID)\r
37 {\r
38         if (nAppID < 0 || MAX_APP <= nAppID) {\r
39                 return;\r
40         }\r
41 \r
42         while (!m_oKey[nAppID].IsEmpty()) {\r
43                 KeyBind *pKeyBind = (KeyBind *)m_oKey[nAppID].GetHead();\r
44                 delete pKeyBind;\r
45                 pKeyBind = NULL;\r
46                 m_oKey[nAppID].RemoveHead();\r
47         }\r
48 }\r
49 \r
50 void CFunctionDefinition::SetKey(int nAppID, int nType, int nKey)\r
51 {\r
52         if (nAppID < 0 || MAX_APP <= nAppID) {\r
53                 return;\r
54         }\r
55 \r
56         try {\r
57                 KeyBind *pKeyBind = new KeyBind;\r
58 \r
59                 if (pKeyBind) {\r
60                         pKeyBind->nType = nType;\r
61                         pKeyBind->bVk = (BYTE)nKey;\r
62                         pKeyBind->nControlID = 0;\r
63 \r
64                         m_oKey[nAppID].AddTail((CObject *)pKeyBind);\r
65                 }\r
66         }\r
67         catch (CMemoryException* e) {\r
68                 e->Delete();\r
69 //              CUtils::Log("CFunctionDefinition::SetKey: 'new' threw an exception");\r
70         }\r
71 }\r
72 \r
73 int CFunctionDefinition::GetKeyNumber(int nAppID)\r
74 {\r
75         if (nAppID < 0 || MAX_APP <= nAppID) {\r
76                 return 0;\r
77         }\r
78 \r
79         return m_oKey[nAppID].GetCount();\r
80 }\r
81 \r
82 void CFunctionDefinition::GetKey(int nAppID, int nKeyID, int *pCommandType, int *pKey)\r
83 {\r
84         *pCommandType = 0;\r
85         *pKey = 0;\r
86 \r
87         if (nAppID < 0 || MAX_APP <= nAppID) {\r
88                 return;\r
89         }\r
90         if (nKeyID < 0 || m_oKey[nAppID].GetCount() <= nKeyID) {\r
91                 return;\r
92         }\r
93 \r
94         KeyBind *pKeyBind = (KeyBind *)m_oKey[nAppID].GetAt(m_oKey[nAppID].FindIndex(nKeyID));\r
95         *pCommandType = pKeyBind->nType;\r
96         *pKey = pKeyBind->bVk;\r
97 }\r
98 \r
99 void CFunctionDefinition::RemoveKey(int nAppID, int nType, int nKey)\r
100 {\r
101         if (nAppID < 0 || MAX_APP <= nAppID) {\r
102                 return;\r
103         }\r
104 \r
105         for (POSITION pos = m_oKey[nAppID].GetHeadPosition(); pos; ) {\r
106                 POSITION currentPos = pos;\r
107                 KeyBind *pKeyBind = (KeyBind *)m_oKey[nAppID].GetNext(pos);\r
108                 if (pKeyBind->nType == nType && pKeyBind->bVk == nKey) {\r
109                         delete pKeyBind;\r
110                         pKeyBind = NULL;\r
111                         m_oKey[nAppID].RemoveAt(currentPos);\r
112                         break;\r
113                 }\r
114         }\r
115 }\r