internal void SetHotkey(PNHotKey hk) { PNHotKey phk = null; switch (tabHK.SelectedIndex) { case 0: phk = m_KeysMain.FirstOrDefault(h => h.MenuName == hk.MenuName); break; case 1: phk = m_KeysNote.FirstOrDefault(h => h.MenuName == hk.MenuName); break; case 2: phk = m_KeysEdit.FirstOrDefault(h => h.MenuName == hk.MenuName); break; case 3: phk = m_KeysGroups.FirstOrDefault(h => h.MenuName == hk.MenuName); break; } if (phk != null) { phk.CopyFrom(hk); } }
internal bool HotkeyExists(PNHotKey hk) { PNHotKey phk = null; switch (tabHK.SelectedIndex) { case 0: phk = m_KeysMain.FirstOrDefault(h => h.Shortcut == hk.Shortcut && h.ID != hk.ID); break; case 1: phk = m_KeysNote.FirstOrDefault(h => h.Shortcut == hk.Shortcut && h.ID != hk.ID); break; case 2: phk = m_KeysEdit.FirstOrDefault(h => h.Shortcut == hk.Shortcut && h.ID != hk.ID); break; case 3: phk = m_KeysGroups.FirstOrDefault(h => h.Shortcut == hk.Shortcut && h.ID != hk.ID); break; } if (phk != null) { return true; } return false; }
private void txtHotKey_PreviewKeyDown(object sender, KeyEventArgs e) { try { var check = false; var modString = ""; var keyString = ""; var hk = new PNHotKey { Modifiers = HotkeysStatic.GetModifiers(ref modString), VK = HotkeysStatic.GetKey(ref keyString), Shortcut = modString + keyString }; if (hk.Modifiers == HotkeyModifiers.MOD_NONE) { if (hk.VK >= HotkeysStatic.VK_F1 && hk.VK <= HotkeysStatic.VK_F24) { check = true; } } else { if (hk.VK > 0) { check = true; } } if (!check) { return; } string message, caption; if (PNStrings.RestrictedHotkeys.Contains(hk.Shortcut) || PNStatic.HotKeysEdit.Any(h => h.Modifiers == hk.Modifiers && h.VK == hk.VK) || PNStatic.HotKeysGroups.Any(h => h.Modifiers == hk.Modifiers && h.VK == hk.VK) || PNStatic.HotKeysNote.Any(h => h.Modifiers == hk.Modifiers && h.VK == hk.VK) || hk.Modifiers == HotkeyModifiers.MOD_SHIFT && (hk.VK >= HotkeysStatic.VK_A && hk.VK <= HotkeysStatic.VK_Z)) { message = hk.Shortcut + '\n'; message += PNLang.Instance.GetMessageText("hk_registered_1", "This combination of keys is already registered."); message += '\n'; message += PNLang.Instance.GetMessageText("hk_registered_2", "Choose another one, please."); caption = PNLang.Instance.GetCaptionText("restricted_keys", "Invalid keys"); PNMessageBox.Show(message, caption, MessageBoxButton.OK, MessageBoxImage.Exclamation); e.Handled = true; return; } if (HotkeysStatic.RegisterHK(_HwndSource.Handle, hk)) { HotkeysStatic.UnregisterHK(_HwndSource.Handle, hk.ID); } else { message = hk.Shortcut + '\n'; message += PNLang.Instance.GetMessageText("hk_registered_1", "This combination of keys is already registered."); message += '\n'; message += PNLang.Instance.GetMessageText("hk_registered_2", "Choose another one, please."); caption = PNLang.Instance.GetCaptionText("restricted_keys", "Invalid keys"); PNMessageBox.Show(message, caption, MessageBoxButton.OK, MessageBoxImage.Exclamation); e.Handled = true; return; } PNTreeItem tvi = null; PNHotKey hkCurrent = null; switch (tabHK.SelectedIndex) { case 0: tvi = tvwHKMain.SelectedItem as PNTreeItem; if (tvi == null) break; hkCurrent = m_KeysMain.FirstOrDefault(h => h.MenuName == (string)tvi.Tag); setButtonsEnabled(tvi); break; case 1: tvi = tvwHKNote.SelectedItem as PNTreeItem; if (tvi == null) break; hkCurrent = m_KeysNote.FirstOrDefault(h => h.MenuName == (string)tvi.Tag); setButtonsEnabled(tvi); break; case 2: tvi = tvwHKEdit.SelectedItem as PNTreeItem; if (tvi == null) break; hkCurrent = m_KeysEdit.FirstOrDefault(h => h.MenuName == (string)tvi.Tag); setButtonsEnabled(tvi); break; case 3: tvi = tvwHKGroups.SelectedItem as PNTreeItem; if (tvi == null) break; hkCurrent = m_KeysGroups.FirstOrDefault(h => h.MenuName == (string)tvi.Tag); setButtonsEnabled(tvi); break; } if (hkCurrent != null) { hkCurrent.Modifiers = hk.Modifiers; hkCurrent.Shortcut = hk.Shortcut; hkCurrent.VK = hk.VK; setButtonsEnabled(tvi); txtHotKey.Text = hk.Shortcut; var defKey = new DefKey(hkCurrent.ID, hkCurrent.Type, hkCurrent.MenuName) { Icon = isHotkeyInDatabase( tabHK.SelectedIndex == 0 ? PNStatic.HotKeysMain : (tabHK.SelectedIndex == 1 ? PNStatic.HotKeysNote : (tabHK.SelectedIndex == 2 ? PNStatic.HotKeysEdit : PNStatic.HotKeysGroups)), hk) ? (BitmapSource)TryFindResource("check") : null, MenuRange = tabHK.SelectedIndex == 0 ? tbpHKMain.Header.ToString() : (tabHK.SelectedIndex == 1 ? tbpHKNote.Header.ToString() : (tabHK.SelectedIndex == 2 ? tbpHKEdit.Header.ToString() : tbpHKGroups.Header.ToString())), MenuText = tabHK.SelectedIndex < 3 ? PNLang.Instance.GetMenuText( tabHK.SelectedIndex == 0 ? "main_menu" : (tabHK.SelectedIndex == 1 ? "note_menu" : "edit_menu"), hkCurrent.MenuName, hkCurrent.MenuName) : hkCurrent.MenuName, Shortcut = hkCurrent.Shortcut }; if (tabHK.SelectedIndex == 3) { var arr = hkCurrent.MenuName.Split('_'); if (arr.Length == 2) { var gr = PNStatic.Groups.GetGroupByID(Convert.ToInt32(arr[0])); if (gr != null) { var defCap = arr[1] == "show" ? PNLang.Instance.GetCaptionText("show_group", "Show group") : PNLang.Instance.GetCaptionText("hide_group", "Hide group"); defKey.MenuText = gr.Name + "/" + defCap; } } } //remove existing key var existingKey = _DefKeys.FirstOrDefault(k => k.Id == defKey.Id); if (existingKey != null) _DefKeys.Remove(existingKey); _DefKeys.Add(defKey); } } catch (Exception ex) { PNStatic.LogException(ex); } }
private bool isHotkeyInDatabase(List<PNHotKey> keys, PNHotKey hk) { return keys.Any(h => h.ID == hk.ID && h.Shortcut == hk.Shortcut && h.MenuName == hk.MenuName); }
private string createHotKeyDelete(PNHotKey hk) { try { var sb = new StringBuilder(); sb.Append("UPDATE HOT_KEYS SET MODIFIERS = 0, VK = 0, SHORTCUT = ''"); sb.Append(" WHERE MENU_NAME = '"); sb.Append(hk.MenuName); sb.Append("' AND HK_TYPE = "); sb.Append((int)hk.Type); return sb.ToString(); } catch (Exception ex) { PNStatic.LogException(ex); return ""; } }
public object Clone() { var hk = new PNHotKey { _ID = _ID, _MenuName = _MenuName, _Modifiers = _Modifiers, _Shortcut = _Shortcut, _vk = _vk, _Type = _Type }; return hk; }
public bool Equals(PNHotKey hk) { if ((object)hk == null) return false; return (_vk == hk._vk && _Shortcut == hk._Shortcut && _Modifiers == hk._Modifiers && _MenuName == hk._MenuName && _ID == hk._ID && _Type == hk._Type); }
internal void CopyFrom(PNHotKey hk) { _Modifiers = hk.Modifiers; _Shortcut = hk._Shortcut; _vk = hk._vk; }
internal static Keys GetShortcut(PNHotKey hk) { var keys = Keys.None; if ((hk.Modifiers & HotkeyModifiers.MOD_CONTROL) > 0) keys |= Keys.Control; if ((hk.Modifiers & HotkeyModifiers.MOD_ALT) > 0) keys |= Keys.Menu; if ((hk.Modifiers & HotkeyModifiers.MOD_SHIFT) > 0) keys |= Keys.Shift; if ((hk.Modifiers & HotkeyModifiers.MOD_WIN) > 0) keys |= Keys.LWin; switch (hk.VK) { case VK_0: keys |= Keys.D0; break; case VK_1: keys |= Keys.D1; break; case VK_2: keys |= Keys.D2; break; case VK_3: keys |= Keys.D3; break; case VK_4: keys |= Keys.D4; break; case VK_5: keys |= Keys.D5; break; case VK_6: keys |= Keys.D6; break; case VK_7: keys |= Keys.D7; break; case VK_8: keys |= Keys.D8; break; case VK_9: keys |= Keys.D9; break; case VK_F1: keys |= Keys.F1; break; case VK_F2: keys |= Keys.F2; break; case VK_F3: keys |= Keys.F3; break; case VK_F4: keys |= Keys.F4; break; case VK_F5: keys |= Keys.F5; break; case VK_F6: keys |= Keys.F6; break; case VK_F7: keys |= Keys.F7; break; case VK_F8: keys |= Keys.F8; break; case VK_F9: keys |= Keys.F9; break; case VK_F10: keys |= Keys.F10; break; case VK_F11: keys |= Keys.F11; break; case VK_F12: keys |= Keys.F12; break; case VK_F13: keys |= Keys.F13; break; case VK_F14: keys |= Keys.F14; break; case VK_F15: keys |= Keys.F15; break; case VK_F16: keys |= Keys.F16; break; case VK_F17: keys |= Keys.F17; break; case VK_F18: keys |= Keys.F18; break; case VK_F19: keys |= Keys.F19; break; case VK_F20: keys |= Keys.F20; break; case VK_F21: keys |= Keys.F21; break; case VK_F22: keys |= Keys.F22; break; case VK_F23: keys |= Keys.F23; break; case VK_F24: keys |= Keys.F24; break; case VK_NUMPAD0: keys |= Keys.NumPad0; break; case VK_NUMPAD1: keys |= Keys.NumPad1; break; case VK_NUMPAD2: keys |= Keys.NumPad2; break; case VK_NUMPAD3: keys |= Keys.NumPad3; break; case VK_NUMPAD4: keys |= Keys.NumPad4; break; case VK_NUMPAD5: keys |= Keys.NumPad5; break; case VK_NUMPAD6: keys |= Keys.NumPad6; break; case VK_NUMPAD7: keys |= Keys.NumPad7; break; case VK_NUMPAD8: keys |= Keys.NumPad8; break; case VK_NUMPAD9: keys |= Keys.NumPad9; break; case VK_A: keys |= Keys.A; break; case VK_B: keys |= Keys.B; break; case VK_C: keys |= Keys.C; break; case VK_D: keys |= Keys.D; break; case VK_E: keys |= Keys.E; break; case VK_F: keys |= Keys.F; break; case VK_G: keys |= Keys.G; break; case VK_H: keys |= Keys.H; break; case VK_I: keys |= Keys.I; break; case VK_J: keys |= Keys.J; break; case VK_K: keys |= Keys.K; break; case VK_L: keys |= Keys.L; break; case VK_M: keys |= Keys.M; break; case VK_N: keys |= Keys.N; break; case VK_O: keys |= Keys.O; break; case VK_P: keys |= Keys.P; break; case VK_Q: keys |= Keys.Q; break; case VK_R: keys |= Keys.R; break; case VK_S: keys |= Keys.S; break; case VK_T: keys |= Keys.T; break; case VK_U: keys |= Keys.U; break; case VK_V: keys |= Keys.V; break; case VK_W: keys |= Keys.W; break; case VK_X: keys |= Keys.X; break; case VK_Y: keys |= Keys.Y; break; case VK_Z: keys |= Keys.Z; break; case VK_ADD: keys |= Keys.Add; break; case VK_BACK: keys = Keys.Back; break; case VK_DELETE: keys = Keys.Delete; break; case VK_DIVIDE: keys = Keys.Divide; break; case VK_DOWN: keys = Keys.Down; break; case VK_END: keys = Keys.End; break; case VK_ESCAPE: keys = Keys.Escape; break; case VK_HOME: keys = Keys.Home; break; case VK_INSERT: keys = Keys.Insert; break; case VK_LEFT: keys = Keys.Left; break; case VK_MULTIPLY: keys = Keys.Multiply; break; case VK_NEXT: keys = Keys.Next; break; case VK_OEM_1: keys = Keys.Oem1; break; case VK_OEM_2: keys = Keys.Oem2; break; case VK_OEM_3: keys = Keys.Oem3; break; case VK_OEM_4: keys = Keys.Oem4; break; case VK_OEM_5: keys = Keys.Oem5; break; case VK_OEM_6: keys = Keys.Oem6; break; case VK_OEM_7: keys = Keys.Oem7; break; case VK_OEM_8: keys = Keys.Oem8; break; case VK_OEM_COMMA: keys = Keys.Oemcomma; break; case VK_OEM_MINUS: keys = Keys.OemMinus; break; case VK_OEM_PERIOD: keys = Keys.OemPeriod; break; case VK_OEM_PLUS: keys = Keys.Oemplus; break; case VK_PAUSE: keys = Keys.Pause; break; case VK_PRIOR: keys = Keys.Prior; break; case VK_RETURN: keys = Keys.Return; break; case VK_RIGHT: keys = Keys.Right; break; case VK_SCROLL: keys = Keys.Scroll; break; case VK_SPACE: keys = Keys.Space; break; case VK_SUBTRACT: keys = Keys.Subtract; break; case VK_TAB: keys = Keys.Tab; break; case VK_UP: keys = Keys.Up; break; } return keys; }
internal static bool RegisterHK(IntPtr hwnd, PNHotKey hk) { return RegisterHotKey(hwnd, hk.ID, (uint)hk.Modifiers, hk.VK); }