Mercurial > vba-clojure
view src/win32/CmdAccelOb.cpp @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
line wrap: on
line source
1 ////////////////////////////////////////////////////////////////////////////////2 // Copyright (C) 1998 by Thierry Maurel3 // All rights reserved4 //5 // Distribute freely, except: don't remove my name from the source or6 // documentation (don't take credit for my work), mark your changes (don't7 // get me blamed for your possible bugs), don't alter or remove this8 // notice.9 // No warrantee of any kind, express or implied, is included with this10 // software; use at your own risk, responsibility for damages (if any) to11 // anyone resulting from the use of this software rests entirely with the12 // user.13 //14 // Send bug reports, bug fixes, enhancements, requests, flames, etc., and15 // I'll try to keep a version up to date. I can be reached as follows:16 // tmaurel@caramail.com (or tmaurel@hol.fr)17 //18 ////////////////////////////////////////////////////////////////////////////////19 // File : CmdAccelOb.cpp20 // Project : AccelsEditor21 ////////////////////////////////////////////////////////////////////////////////22 // Version : 1.0 * Author : T.Maurel23 // Date : 17.08.9824 //25 // Remarks :26 //27 ////////////////////////////////////////////////////////////////////////////////28 // modified by the VBA-rr team30 #include "stdafx.h"31 #include "CmdAccelOb.h"33 ////////////////////////////////////////////////////////////////////////34 //35 //36 MAPVIRTKEYS mapVirtKeys[] = {37 { VK_LBUTTON, "LBUTTON" },38 { VK_RBUTTON, "RBUTTON" },39 { VK_CANCEL, "Cancel" },40 { VK_MBUTTON, "MBUTTON" },41 { VK_BACK, "Backspace" },42 { VK_TAB, "Tab" },43 { VK_CLEAR, "Clear" },44 { VK_RETURN, "Enter" },45 { VK_SHIFT, "Shift" },46 { VK_LSHIFT, "LShift" },47 { VK_RSHIFT, "RShift" },48 { VK_CONTROL, "Control" },49 { VK_LCONTROL, "LControl" },50 { VK_RCONTROL, "RControl" },51 { VK_MENU, "Alt" },52 { VK_LMENU, "LAlt" },53 { VK_RMENU, "RAlt" },54 { VK_PAUSE, "Pause" },55 { VK_CAPITAL, "Caps Lock" },56 { VK_ESCAPE, "Escape" },57 { VK_SPACE, "Space" },58 { VK_PRIOR, "Prior" },59 { VK_NEXT, "Next" },60 { VK_END, "End" },61 { VK_HOME, "Home" },62 { VK_LEFT, "Left" },63 { VK_UP, "Up" },64 { VK_RIGHT, "Right" },65 { VK_DOWN, "Down" },66 { VK_SELECT, "Select" },67 { VK_PRINT, "Print" },68 { VK_EXECUTE, "Execute" },69 { VK_SNAPSHOT, "Snapshot" },70 { VK_INSERT, "Insert" },71 { VK_DELETE, "Delete" },72 { VK_HELP, "Help" },73 { WORD('0'), "0" },74 { WORD('1'), "1" },75 { WORD('2'), "2" },76 { WORD('3'), "3" },77 { WORD('4'), "4" },78 { WORD('5'), "5" },79 { WORD('6'), "6" },80 { WORD('7'), "7" },81 { WORD('8'), "8" },82 { WORD('9'), "9" },83 { WORD('A'), "A" },84 { WORD('B'), "B" },85 { WORD('C'), "C" },86 { WORD('D'), "D" },87 { WORD('E'), "E" },88 { WORD('F'), "F" },89 { WORD('G'), "G" },90 { WORD('H'), "H" },91 { WORD('I'), "I" },92 { WORD('J'), "J" },93 { WORD('K'), "K" },94 { WORD('L'), "L" },95 { WORD('M'), "M" },96 { WORD('N'), "N" },97 { WORD('O'), "O" },98 { WORD('P'), "P" },99 { WORD('Q'), "Q" },100 { WORD('R'), "R" },101 { WORD('S'), "S" },102 { WORD('T'), "T" },103 { WORD('U'), "U" },104 { WORD('V'), "V" },105 { WORD('W'), "W" },106 { WORD('X'), "X" },107 { WORD('Y'), "Y" },108 { WORD('Z'), "Z" },109 { VK_LWIN, "LWIN" },110 { VK_RWIN, "RWIN" },111 { VK_APPS, "APPS" },112 { VK_NUMPAD0, "NumPad0" },113 { VK_NUMPAD1, "NumPad1" },114 { VK_NUMPAD2, "NumPad2" },115 { VK_NUMPAD3, "NumPad3" },116 { VK_NUMPAD4, "NumPad4" },117 { VK_NUMPAD5, "NumPad5" },118 { VK_NUMPAD6, "NumPad6" },119 { VK_NUMPAD7, "NumPad7" },120 { VK_NUMPAD8, "NumPad8" },121 { VK_NUMPAD9, "NumPad9" },122 { VK_MULTIPLY, "NumpadMultiply" },123 { VK_ADD, "NumpadAdd" },124 { VK_SEPARATOR, "Separator" },125 { VK_SUBTRACT, "NumpadSubtract" },126 { VK_DECIMAL, "NumpadDecimal" },127 { VK_DIVIDE, "NumpadDivide" },128 { VK_F1, "F1" },129 { VK_F2, "F2" },130 { VK_F3, "F3" },131 { VK_F4, "F4" },132 { VK_F5, "F5" },133 { VK_F6, "F6" },134 { VK_F7, "F7" },135 { VK_F8, "F8" },136 { VK_F9, "F9" },137 { VK_F10, "F10" },138 { VK_F11, "F11" },139 { VK_F12, "F12" },140 { VK_F13, "F13" },141 { VK_F14, "F14" },142 { VK_F15, "F15" },143 { VK_F16, "F16" },144 { VK_F17, "F17" },145 { VK_F18, "F18" },146 { VK_F19, "F19" },147 { VK_F20, "F20" },148 { VK_F21, "F21" },149 { VK_F22, "F22" },150 { VK_F23, "F23" },151 { VK_F24, "F24" },152 { VK_NUMLOCK, "Num Lock" },153 { VK_SCROLL, "Scroll Lock" },154 { VK_ATTN, "Attention" },155 { VK_CRSEL, "CRSEL" },156 { VK_EXSEL, "EXSEL" },157 { VK_EREOF, "EREOF" },158 { VK_PLAY, "Play" },159 { VK_ZOOM, "Zoom" },160 { VK_NONAME, "No Name" },161 { VK_PA1, "PA1" },162 { VK_OEM_CLEAR, "Clear2" },163 { VK_OEM_1, "Semicolon;" },164 { VK_OEM_2, "Slash/" },165 { VK_OEM_3, "Tilde~" },166 { VK_OEM_4, "LBracket[" },167 { VK_OEM_5, "Backslash\\" },168 { VK_OEM_6, "RBracket]" },169 { VK_OEM_7, "Apostrophe'" },170 { VK_OEM_8, "OEM8" },171 { VK_OEM_PLUS, "Plus+" },172 { VK_OEM_MINUS, "Minus-" },173 { VK_OEM_COMMA, "Comma," },174 { VK_OEM_PERIOD, "Period." },175 { VK_OEM_AX, "Apostrophe`" },176 { VK_OEM_102, "<> or \\|" },177 { VK_ICO_HELP, "ICO Help" },178 { VK_ICO_00, "ICO 00" },179 { VK_OEM_FJ_JISHO, "JISHO" },180 { VK_OEM_FJ_MASSHOU, "MASSHOU" },181 { VK_OEM_FJ_TOUROKU, "TOUROKU" },182 { VK_OEM_FJ_LOYA, "LOYA" },183 { VK_OEM_FJ_ROYA, "ROYA" },184 { VK_OEM_NEC_EQUAL, "Numpad Equals" },185 };187 ////////////////////////////////////////////////////////////////////////188 //189 //190 MAPVIRTKEYS mapVirtSysKeys[] = {191 { FCONTROL, "Ctrl" },192 { FALT, "Alt" },193 { FSHIFT, "Shift" },194 };196 ////////////////////////////////////////////////////////////////////////197 // helper fct for external access198 ////////////////////////////////////////////////////////////////////////199 //200 //201 TCHAR *mapVirtKeysStringFromWORD(WORD wKey)202 {203 for (int index = 0; index < sizeof(mapVirtKeys) / sizeof(mapVirtKeys[0]); index++)204 {205 if (mapVirtKeys[index].wKey == wKey)206 return mapVirtKeys[index].szKey;207 }208 return NULL;209 }211 ////////////////////////////////////////////////////////////////////////212 //213 #define DEFAULT_ACCEL 0x01214 #define USER_ACCEL 0x02216 ////////////////////////////////////////////////////////////////////////217 //218 ////////////////////////////////////////////////////////////////////////219 //220 //221 CAccelsOb::CAccelsOb()222 {223 m_cVirt = 0;224 m_wKey = 0;225 m_bLocked = false;226 }228 ////////////////////////////////////////////////////////////////////////229 //230 //231 CAccelsOb::CAccelsOb(CAccelsOb *pFrom)232 {233 ASSERT(pFrom != NULL);235 m_cVirt = pFrom->m_cVirt;236 m_wKey = pFrom->m_wKey;237 m_bLocked = pFrom->m_bLocked;238 }240 ////////////////////////////////////////////////////////////////////////241 //242 //243 CAccelsOb::CAccelsOb(BYTE cVirt, WORD wKey, bool bLocked)244 {245 m_cVirt = cVirt;246 m_wKey = wKey;247 m_bLocked = bLocked;248 }250 ////////////////////////////////////////////////////////////////////////251 //252 //253 CAccelsOb::CAccelsOb(LPACCEL pACCEL)254 {255 ASSERT(pACCEL != NULL);257 m_cVirt = pACCEL->fVirt;258 m_wKey = pACCEL->key;259 m_bLocked = false;260 }262 ////////////////////////////////////////////////////////////////////////263 //264 //265 CAccelsOb & CAccelsOb::operator=(const CAccelsOb &from)266 {267 m_cVirt = from.m_cVirt;268 m_wKey = from.m_wKey;269 m_bLocked = from.m_bLocked;271 return *this;272 }274 ////////////////////////////////////////////////////////////////////////275 //276 ////////////////////////////////////////////////////////////////////////277 //278 //279 void CAccelsOb::GetString(CString &szBuffer)280 {281 szBuffer = "";283 // modifiers part284 for (int i = 0; i < sizetable(mapVirtSysKeys); i++)285 {286 if (m_cVirt & mapVirtSysKeys[i].wKey)287 {288 szBuffer += mapVirtSysKeys[i].szKey;289 if (m_wKey)290 szBuffer += "+";291 }292 }294 // in case of the object is not assigned, we avoid error messages295 if (m_wKey == 0)296 return;298 // and virtual key part299 for (int i = 0; i < sizetable(mapVirtKeys); i++)300 {301 if (m_wKey == mapVirtKeys[i].wKey)302 {303 szBuffer += mapVirtKeys[i].szKey;304 return;305 }306 }308 AfxMessageBox("Internal error : (CAccelsOb::GetString) m_wKey invalid");309 }311 ////////////////////////////////////////////////////////////////////////312 //313 //314 bool CAccelsOb::IsEqual(WORD wKey, bool bCtrl, bool bAlt, bool bShift)315 {316 bool m_bCtrl = (m_cVirt & FCONTROL) ? true : false;317 bool m_bAlt = (m_cVirt & FALT) ? true : false;318 bool m_bShift = (m_cVirt & FSHIFT) ? true : false;320 bool bRet = (bCtrl == m_bCtrl) && (bAlt == m_bAlt) && (bShift == m_bShift) && (m_wKey == wKey);322 return bRet;323 }325 ////////////////////////////////////////////////////////////////////////326 //327 //328 DWORD CAccelsOb::GetData()329 {330 BYTE cLocalCodes = 0;331 if (m_bLocked)332 cLocalCodes = DEFAULT_ACCEL;333 else334 cLocalCodes = USER_ACCEL;336 WORD bCodes = MAKEWORD(m_cVirt, cLocalCodes);337 return MAKELONG(m_wKey, bCodes);338 }340 ////////////////////////////////////////////////////////////////////////341 //342 //343 bool CAccelsOb::SetData(DWORD dwDatas)344 {345 m_wKey = LOWORD(dwDatas);347 WORD bCodes = HIWORD(dwDatas);348 m_cVirt = LOBYTE(bCodes);350 BYTE cLocalCodes = HIBYTE(bCodes);351 m_bLocked = (cLocalCodes == DEFAULT_ACCEL);353 return true;354 }356 ////////////////////////////////////////////////////////////////////////357 //358 #ifdef _DEBUG359 ////////////////////////////////////////////////////////////////////////360 //361 //362 void CAccelsOb::AssertValid() const363 {364 CObject::AssertValid();365 }367 ////////////////////////////////////////////////////////////////////////368 //369 //370 void CAccelsOb::Dump(CDumpContext &dc) const371 {372 dc << "\t\t";373 CObject::Dump(dc);374 dc << "\t\tlocked=" << m_bLocked << ", cVirt=" << m_cVirt << ", wKey=" << m_wKey << "\n\n";375 }377 #endif379 ////////////////////////////////////////////////////////////////////////380 //381 ////////////////////////////////////////////////////////////////////////382 //383 //384 CCmdAccelOb::CCmdAccelOb()385 {}387 ////////////////////////////////////////////////////////////////////////388 //389 //390 CCmdAccelOb::CCmdAccelOb(WORD wIDCommand, LPCTSTR szCommand)391 {392 ASSERT(szCommand != NULL);394 m_wIDCommand = wIDCommand;395 m_szCommand = szCommand;396 }398 ////////////////////////////////////////////////////////////////////////399 //400 //401 CCmdAccelOb::CCmdAccelOb(BYTE cVirt, WORD wIDCommand, WORD wKey, LPCTSTR szCommand, bool bLocked)402 {403 ASSERT(szCommand != NULL);405 m_wIDCommand = wIDCommand;406 m_szCommand = szCommand;408 CAccelsOb *pAccel = new CAccelsOb(cVirt, wKey, bLocked);409 ASSERT(pAccel != NULL);410 m_Accels.AddTail(pAccel);411 }413 ////////////////////////////////////////////////////////////////////////414 //415 //416 CCmdAccelOb::~CCmdAccelOb()417 {418 POSITION pos = m_Accels.GetHeadPosition();419 while (pos != NULL)420 delete m_Accels.GetNext(pos);421 m_Accels.RemoveAll();422 }424 ////////////////////////////////////////////////////////////////////////425 //426 ////////////////////////////////////////////////////////////////////////427 //428 //429 void CCmdAccelOb::Add(BYTE cVirt, WORD wKey, bool bLocked)430 {431 CAccelsOb *pAccel = new CAccelsOb(cVirt, wKey, bLocked);432 ASSERT(pAccel != NULL);433 m_Accels.AddTail(pAccel);434 }436 ////////////////////////////////////////////////////////////////////////437 //438 //439 void CCmdAccelOb::Add(CAccelsOb *pAccel)440 {441 ASSERT(pAccel != NULL);442 m_Accels.AddTail(pAccel);443 }445 ////////////////////////////////////////////////////////////////////////446 //447 //448 CCmdAccelOb & CCmdAccelOb::operator=(const CCmdAccelOb &from)449 {450 Reset();452 m_wIDCommand = from.m_wIDCommand;453 m_szCommand = from.m_szCommand;455 CAccelsOb *pAccel;456 POSITION pos = from.m_Accels.GetHeadPosition();457 while (pos != NULL)458 {459 pAccel = new CAccelsOb(from.m_Accels.GetNext(pos));460 ASSERT(pAccel != NULL);461 m_Accels.AddTail(pAccel);462 }463 return *this;464 }466 ////////////////////////////////////////////////////////////////////////467 //468 //469 void CCmdAccelOb::DeleteUserAccels()470 {471 CAccelsOb *pAccel;472 POSITION prevPos;473 POSITION pos = m_Accels.GetHeadPosition();474 while (pos != NULL)475 {476 prevPos = pos;477 pAccel = m_Accels.GetNext(pos);478 if (!pAccel->m_bLocked)479 {480 delete pAccel;481 m_Accels.RemoveAt(prevPos);482 }483 }484 }486 ////////////////////////////////////////////////////////////////////////487 //488 //489 void CCmdAccelOb::Reset()490 {491 m_wIDCommand = 0;492 m_szCommand = "Empty command";494 CAccelsOb *pAccel;495 POSITION pos = m_Accels.GetHeadPosition();496 while (pos != NULL)497 {498 pAccel = m_Accels.GetNext(pos);499 delete pAccel;500 }501 }503 ////////////////////////////////////////////////////////////////////////504 //505 #ifdef _DEBUG506 ////////////////////////////////////////////////////////////////////////507 //508 //509 void CCmdAccelOb::AssertValid() const510 {511 // call base class function first512 CObject::AssertValid();513 }515 ////////////////////////////////////////////////////////////////////////516 //517 //518 void CCmdAccelOb::Dump(CDumpContext &dc) const519 {520 // call base class function first521 dc << "\t";522 CObject::Dump(dc);524 // now do the stuff for our specific class525 dc << "\tIDCommand = " << m_wIDCommand;526 dc << "\n\tszCommand = " << m_szCommand;527 dc << "\n\tAccelerators = {\n";529 CAccelsOb *pAccel;530 POSITION pos = m_Accels.GetHeadPosition();531 while (pos != NULL)532 {533 pAccel = m_Accels.GetNext(pos);534 dc << pAccel;535 }536 dc << "\t}\n";537 }539 #endif