Annotation of truecrypt/main/hotkey.cpp, revision 1.1

1.1     ! root        1: /*
        !             2:  Copyright (c) 2008 TrueCrypt Foundation. All rights reserved.
        !             3: 
        !             4:  Governed by the TrueCrypt License 2.4 the full text of which is contained
        !             5:  in the file License.txt included in TrueCrypt binary and source code
        !             6:  distribution packages.
        !             7: */
        !             8: 
        !             9: #include "System.h"
        !            10: #include "Application.h"
        !            11: #include "LanguageStrings.h"
        !            12: #include "GraphicUserInterface.h"
        !            13: #include "Hotkey.h"
        !            14: #include "Xml.h"
        !            15: 
        !            16: namespace TrueCrypt
        !            17: {
        !            18:        HotkeyList Hotkey::GetAvailableHotkeys ()
        !            19:        {
        !            20:                HotkeyList hotkeys;
        !            21: #ifdef TC_WINDOWS
        !            22: 
        !            23: #define TC_HOTKEY(ID,LANG) hotkeys.push_back (shared_ptr <Hotkey> (new Hotkey (Id::##ID, L###ID, LangString[LANG])))
        !            24: 
        !            25:                TC_HOTKEY (DismountAll, "HK_DISMOUNT_ALL");
        !            26:                TC_HOTKEY (ForceDismountAllWipeCache, "HK_FORCE_DISMOUNT_ALL_AND_WIPE");
        !            27:                TC_HOTKEY (ForceDismountAllWipeCacheExit, "HK_FORCE_DISMOUNT_ALL_AND_WIPE_AND_EXIT");
        !            28:                TC_HOTKEY (MountAllDevices, "HK_AUTOMOUNT_DEVICES");
        !            29:                TC_HOTKEY (MountAllFavorites, "HK_MOUNT_FAVORITE_VOLUMES");
        !            30:                TC_HOTKEY (ShowHideApplication, "HK_SHOW_HIDE_MAIN_WINDOW");
        !            31:                TC_HOTKEY (WipeCache, "HK_WIPE_CACHE");
        !            32: 
        !            33: #endif
        !            34:                return hotkeys;
        !            35:        }
        !            36: 
        !            37:        wxString Hotkey::GetShortcutString () const
        !            38:        {
        !            39:                wxString keyStr = Hotkey::GetVirtualKeyCodeString (VirtualKeyCode);
        !            40:                if (keyStr.empty())
        !            41:                        return L"";
        !            42: 
        !            43:                wxString str;
        !            44: 
        !            45:                if (VirtualKeyModifiers & wxMOD_SHIFT)
        !            46:                        str += LangString["VK_SHIFT"] + L"+";
        !            47:                
        !            48:                if (VirtualKeyModifiers & wxMOD_CONTROL)
        !            49:                        str += LangString["VK_CONTROL"] + L"+";
        !            50:                
        !            51:                if (VirtualKeyModifiers & wxMOD_ALT)
        !            52:                        str += LangString["VK_ALT"] + L"+";
        !            53:                
        !            54:                if (VirtualKeyModifiers & wxMOD_WIN )
        !            55:                        str += LangString["VK_WIN"] + L"+";
        !            56: 
        !            57:                return str + keyStr;
        !            58:        }
        !            59: 
        !            60:        wxString Hotkey::GetVirtualKeyCodeString (int virtualKeyCode)
        !            61:        {
        !            62: #ifdef TC_WINDOWS
        !            63:                // ASCII characters
        !            64:                if (virtualKeyCode >= 0x30 && virtualKeyCode <= 0x5a)   
        !            65:                        return StringFormatter (L"{0}", char (virtualKeyCode));
        !            66: 
        !            67:                // OEM-specific
        !            68:                if (virtualKeyCode >= 0xE9 && virtualKeyCode <= 0xF5)   
        !            69:                        return StringFormatter (L"OEM-{0}", virtualKeyCode);
        !            70: 
        !            71:                // F1-F24
        !            72:                if (virtualKeyCode >= VK_F1 && virtualKeyCode <= VK_F24)
        !            73:                        return StringFormatter (L"F{0}", virtualKeyCode - VK_F1 + 1);
        !            74: 
        !            75:                // Numpad numbers
        !            76:                if (virtualKeyCode >= VK_NUMPAD0 && virtualKeyCode <= VK_NUMPAD9)
        !            77:                        return StringFormatter (L"{0} {1}", LangString["VK_NUMPAD"], virtualKeyCode - VK_NUMPAD0);
        !            78: 
        !            79:                switch (virtualKeyCode)
        !            80:                {
        !            81:                case VK_MULTIPLY:       return LangString["VK_NUMPAD"] + L" *";
        !            82:                case VK_ADD:            return LangString["VK_NUMPAD"] + L" +";
        !            83:                case VK_SEPARATOR:      return LangString["VK_NUMPAD"] + L" Separator";
        !            84:                case VK_SUBTRACT:       return LangString["VK_NUMPAD"] + L" -";
        !            85:                case VK_DECIMAL:        return LangString["VK_NUMPAD"] + L" .";
        !            86:                case VK_DIVIDE:         return LangString["VK_NUMPAD"] + L" /";
        !            87:                case VK_OEM_1:          return L"OEM 1 (';')";
        !            88:                case VK_OEM_PLUS:       return L"+";
        !            89:                case VK_OEM_COMMA:      return L",";
        !            90:                case VK_OEM_MINUS:      return L"-";
        !            91:                case VK_OEM_PERIOD:     return L".";
        !            92:                case VK_OEM_2:          return L"OEM 2 ('/')";
        !            93:                case VK_OEM_3:          return L"OEM 3 (`)";
        !            94:                case VK_OEM_4:          return L"OEM 4 ('[')";
        !            95:                case VK_OEM_5:          return L"OEM 5 ('\\')";
        !            96:                case VK_OEM_6:          return L"OEM 6 (']')";
        !            97:                case VK_OEM_7:          return L"OEM 7 (')";
        !            98:                case VK_OEM_8:          return L"OEM 8";
        !            99:                case VK_OEM_AX:         return L"OEM AX";
        !           100:                case VK_OEM_102:        return L"OEM 102";
        !           101:                case VK_ICO_HELP:       return L"ICO_HELP";
        !           102:                case VK_ICO_00:         return L"ICO_00";
        !           103:                case VK_ICO_CLEAR:      return L"ICO_CLEAR";
        !           104:                case VK_ATTN:           return L"Attn";
        !           105:                case VK_CRSEL:          return L"CrSel";
        !           106:                case VK_EXSEL:          return L"ExSel";
        !           107:                case VK_EREOF:          return L"Erase EOF";
        !           108:                case VK_PA1:            return L"PA1";
        !           109:                case VK_OEM_CLEAR:      return L"OEM Clear";
        !           110: 
        !           111:                case 0:
        !           112:                case 1:
        !           113:                case 0xFF:
        !           114:                        break;
        !           115: 
        !           116:                default:
        !           117:                        {
        !           118:                                string langStrId = StringConverter::ToSingle (wstring (wxString::Format (L"VKEY_%02X", virtualKeyCode)));
        !           119:                                if (LangString.Exists (langStrId))
        !           120:                                        return LangString[langStrId];
        !           121:                        }
        !           122:                }
        !           123: #endif // TC_WINDOWS
        !           124:                return L"";
        !           125:        }
        !           126: 
        !           127:        HotkeyList Hotkey::LoadList ()
        !           128:        {
        !           129:                HotkeyList hotkeys = GetAvailableHotkeys();
        !           130: 
        !           131:                FilePath path = Application::GetConfigFilePath (GetFileName());
        !           132:                if (path.IsFile())
        !           133:                {
        !           134:                        foreach (XmlNode node, XmlParser (path).GetNodes (L"hotkey"))
        !           135:                        {
        !           136:                                wstring keyName (node.Attributes[L"name"]);
        !           137: 
        !           138:                                foreach (shared_ptr <Hotkey> hotkey, hotkeys)
        !           139:                                {
        !           140:                                        if (hotkey->Name == keyName)
        !           141:                                        {
        !           142:                                                hotkey->VirtualKeyCode = StringConverter::ToUInt32 (wstring (node.Attributes[L"vkeycode"]));
        !           143:                                                hotkey->VirtualKeyModifiers = 0;
        !           144:                                                
        !           145:                                                if (node.Attributes[L"modshift"] == L"1")
        !           146:                                                        hotkey->VirtualKeyModifiers |= wxMOD_SHIFT;
        !           147: 
        !           148:                                                if (node.Attributes[L"modcontrol"] == L"1")
        !           149:                                                        hotkey->VirtualKeyModifiers |= wxMOD_CONTROL;
        !           150: 
        !           151:                                                if (node.Attributes[L"modalt"] == L"1")
        !           152:                                                        hotkey->VirtualKeyModifiers |= wxMOD_ALT;
        !           153: 
        !           154:                                                if (node.Attributes[L"modwin"] == L"1")
        !           155:                                                        hotkey->VirtualKeyModifiers |= wxMOD_WIN;
        !           156: 
        !           157:                                                break;
        !           158:                                        }
        !           159:                                }
        !           160:                        }
        !           161:                }
        !           162: 
        !           163:                return hotkeys;
        !           164:        }
        !           165: 
        !           166:        void Hotkey::RegisterList (wxWindow *handler, const HotkeyList &hotkeys)
        !           167:        {
        !           168: #ifdef TC_WINDOWS
        !           169:                bool res = true;
        !           170:                foreach (shared_ptr <Hotkey> hotkey, hotkeys)
        !           171:                {
        !           172:                        if (hotkey->VirtualKeyCode != 0)
        !           173:                        {
        !           174:                                if (!handler->RegisterHotKey (hotkey->Id, hotkey->VirtualKeyModifiers, hotkey->VirtualKeyCode))
        !           175:                                        res = false;
        !           176:                        }
        !           177:                }
        !           178: 
        !           179:                if (!res)
        !           180:                        Gui->ShowWarning ("HOTKEY_REGISTRATION_ERROR");
        !           181: #endif
        !           182:        }
        !           183: 
        !           184:        void Hotkey::SaveList (const HotkeyList &hotkeys)
        !           185:        {
        !           186:                FilePath hotkeysCfgPath = Application::GetConfigFilePath (GetFileName(), true);
        !           187: 
        !           188:                bool noHotkey = true;
        !           189:                XmlNode hotkeysXml (L"hotkeys");
        !           190:                foreach_ref (const Hotkey &hotkey, hotkeys)
        !           191:                {
        !           192:                        if (hotkey.VirtualKeyCode == 0)
        !           193:                                continue;
        !           194: 
        !           195:                        noHotkey = false;
        !           196:                        XmlNode node (L"hotkey");
        !           197:                        node.Attributes[L"name"] = wstring (hotkey.Name);
        !           198: 
        !           199:                        node.Attributes[L"vkeycode"] = StringConverter::FromNumber (hotkey.VirtualKeyCode);
        !           200: 
        !           201:                        if (hotkey.VirtualKeyModifiers & wxMOD_SHIFT)
        !           202:                                node.Attributes[L"modshift"] = L"1";
        !           203: 
        !           204:                        if (hotkey.VirtualKeyModifiers & wxMOD_CONTROL)
        !           205:                                node.Attributes[L"modcontrol"] = L"1";
        !           206: 
        !           207:                        if (hotkey.VirtualKeyModifiers & wxMOD_ALT)
        !           208:                                node.Attributes[L"modalt"] = L"1";
        !           209: 
        !           210:                        if (hotkey.VirtualKeyModifiers & wxMOD_WIN )
        !           211:                                node.Attributes[L"modwin"] = L"1";
        !           212: 
        !           213:                        hotkeysXml.InnerNodes.push_back (node);
        !           214:                }
        !           215: 
        !           216:                if (noHotkey)
        !           217:                {
        !           218:                        if (hotkeysCfgPath.IsFile())
        !           219:                                hotkeysCfgPath.Delete();
        !           220:                }
        !           221:                else
        !           222:                {
        !           223:                        XmlWriter hotkeysWriter (hotkeysCfgPath);
        !           224:                        hotkeysWriter.WriteNode (hotkeysXml);
        !           225:                        hotkeysWriter.Close();
        !           226:                }
        !           227:        }
        !           228: 
        !           229:        void Hotkey::UnregisterList (wxWindow *handler, const HotkeyList &hotkeys)
        !           230:        {
        !           231: #ifdef TC_WINDOWS
        !           232:                foreach (shared_ptr <Hotkey> hotkey, hotkeys)
        !           233:                {
        !           234:                        if (hotkey->VirtualKeyCode != 0)
        !           235:                                handler->UnregisterHotKey (hotkey->Id);
        !           236:                }
        !           237: #endif
        !           238:        }
        !           239: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.