public static void Save(IEnumerable <KeyValuePair <string, AccelKey> > changedShortcuts) { AccelMap.Foreach(IntPtr.Zero, (pointer, accelPath, key, modifierType, changed) => AccelMap.ChangeEntry(accelPath, 0, 0, true)); AccelMap.Load(StoragePaths.KeyMapFile); foreach (KeyValuePair <string, AccelKey> shortcut in changedShortcuts) { AccelMap.ChangeEntry(shortcut.Key, (uint)shortcut.Value.Key, shortcut.Value.AccelMods, true); } AccelMap.Save(StoragePaths.KeyMapFile); Load(); }
protected void Clear_Clicked(object o, EventArgs args) { string title = Translator.GetString("Warning!"); string message = Translator.GetString("This action will reset all key shortcuts to their default values. Are you sure you want to continue?"); if (Message.ShowDialog(title, string.Empty, message, "Icons.Question32.png", MessageButtons.YesNo) != ResponseType.Yes) { return; } // Load the default key map string temp = Path.GetTempFileName(); File.WriteAllText(temp, DataHelper.GetDefaultKeyMap()); AccelMap.Load(temp); File.Delete(temp); // Get the key shortcuts in a dictionary Dictionary <string, AccelKey> shortcuts = new Dictionary <string, AccelKey> (); ResponseType choice = ResponseType.None; AccelMap.Foreach(IntPtr.Zero, (data, accelPath, accelKey, accelMods, changed) => { string key = KeyShortcuts.KeyToString((Key)accelKey, accelMods); string name = accelPath.Substring(accelPath.IndexOf('/') + 1); long itemId; if (long.TryParse(name, out itemId)) { return; } if (!BusinessDomain.QuickItems.ContainsKey(key) || (menu.FindMenuItem(name) == null && name != KeyShortcuts.CHOOSE_KEY && name != KeyShortcuts.HELP_KEY)) { return; } switch (choice) { case ResponseType.None: using (Message messageBox = GetInUseQuickItemMessage(key)) { messageBox.Buttons = MessageButtons.YesNo | MessageButtons.Cancel | MessageButtons.Remember; ResponseType responseType = messageBox.Run(); switch (responseType) { case ResponseType.Yes: RemoveQuickItem(key, shortcuts); if (messageBox.RememberChoice) { choice = responseType; } break; case ResponseType.No: shortcuts.Add(accelPath, AccelKey.Zero); if (messageBox.RememberChoice) { choice = responseType; } break; case ResponseType.DeleteEvent: case ResponseType.Cancel: choice = ResponseType.Cancel; break; } } break; case ResponseType.Yes: RemoveQuickItem(key, shortcuts); break; case ResponseType.No: shortcuts.Add(accelPath, AccelKey.Zero); break; } }); if (choice == ResponseType.Cancel) { LoadTreeView(); return; } File.Delete(StoragePaths.KeyMapFile); bool quickGoods = false; AccelMap.Foreach(IntPtr.Zero, (data, path, key, mods, changed) => { string wholeKey = KeyShortcuts.KeyToString((Key)key, mods); if (!BusinessDomain.QuickItems.ContainsKey(wholeKey)) { return; } AccelMap.ChangeEntry(path, key, KeyShortcuts.GetAllowedModifier(mods), true); quickGoods = true; }); if (quickGoods) { AccelMap.Save(StoragePaths.KeyMapFile); } AccelMap.Foreach(IntPtr.Zero, (data, accelPath, accelKey, accelMods, changed) => { if (!shortcuts.ContainsKey(accelPath)) { return; } AccelKey key = shortcuts [accelPath]; AccelMap.ChangeEntry(accelPath, (uint)key.Key, KeyShortcuts.GetAllowedModifier(key.AccelMods), true); }); foreach (ICustomKeyShortcut shortcut in KeyShortcuts.CustomKeyShortcuts) { AccelMap.ChangeEntry(KeyShortcuts.GetAccelPath(shortcut.Path), (uint)shortcut.DefaultKey, KeyShortcuts.GetAllowedModifier(shortcut.DefaultModifier), true); } LoadTreeView(); }