github.com/secoba/wails/v2@v2.6.4/internal/frontend/desktop/windows/keys.go (about) 1 //go:build windows 2 // +build windows 3 4 package windows 5 6 import ( 7 "github.com/secoba/wails/v2/internal/frontend/desktop/windows/winc" 8 "github.com/secoba/wails/v2/pkg/menu/keys" 9 "strings" 10 ) 11 12 var ModifierMap = map[keys.Modifier]winc.Modifiers{ 13 keys.ShiftKey: winc.ModShift, 14 keys.ControlKey: winc.ModControl, 15 keys.OptionOrAltKey: winc.ModAlt, 16 keys.CmdOrCtrlKey: winc.ModControl, 17 } 18 19 func acceleratorToWincShortcut(accelerator *keys.Accelerator) winc.Shortcut { 20 21 if accelerator == nil { 22 return winc.NoShortcut 23 } 24 inKey := strings.ToUpper(accelerator.Key) 25 key, exists := keyMap[inKey] 26 if !exists { 27 return winc.NoShortcut 28 } 29 var modifiers winc.Modifiers 30 if _, exists := shiftMap[inKey]; exists { 31 modifiers = winc.ModShift 32 } 33 for _, mod := range accelerator.Modifiers { 34 modifiers |= ModifierMap[mod] 35 } 36 return winc.Shortcut{ 37 Modifiers: modifiers, 38 Key: key, 39 } 40 } 41 42 var shiftMap = map[string]struct{}{ 43 "~": {}, 44 ")": {}, 45 "!": {}, 46 "@": {}, 47 "#": {}, 48 "$": {}, 49 "%": {}, 50 "^": {}, 51 "&": {}, 52 "*": {}, 53 "(": {}, 54 "_": {}, 55 "PLUS": {}, 56 "<": {}, 57 ">": {}, 58 "?": {}, 59 ":": {}, 60 `"`: {}, 61 "{": {}, 62 "}": {}, 63 "|": {}, 64 } 65 66 var keyMap = map[string]winc.Key{ 67 "0": winc.Key0, 68 "1": winc.Key1, 69 "2": winc.Key2, 70 "3": winc.Key3, 71 "4": winc.Key4, 72 "5": winc.Key5, 73 "6": winc.Key6, 74 "7": winc.Key7, 75 "8": winc.Key8, 76 "9": winc.Key9, 77 "A": winc.KeyA, 78 "B": winc.KeyB, 79 "C": winc.KeyC, 80 "D": winc.KeyD, 81 "E": winc.KeyE, 82 "F": winc.KeyF, 83 "G": winc.KeyG, 84 "H": winc.KeyH, 85 "I": winc.KeyI, 86 "J": winc.KeyJ, 87 "K": winc.KeyK, 88 "L": winc.KeyL, 89 "M": winc.KeyM, 90 "N": winc.KeyN, 91 "O": winc.KeyO, 92 "P": winc.KeyP, 93 "Q": winc.KeyQ, 94 "R": winc.KeyR, 95 "S": winc.KeyS, 96 "T": winc.KeyT, 97 "U": winc.KeyU, 98 "V": winc.KeyV, 99 "W": winc.KeyW, 100 "X": winc.KeyX, 101 "Y": winc.KeyY, 102 "Z": winc.KeyZ, 103 "F1": winc.KeyF1, 104 "F2": winc.KeyF2, 105 "F3": winc.KeyF3, 106 "F4": winc.KeyF4, 107 "F5": winc.KeyF5, 108 "F6": winc.KeyF6, 109 "F7": winc.KeyF7, 110 "F8": winc.KeyF8, 111 "F9": winc.KeyF9, 112 "F10": winc.KeyF10, 113 "F11": winc.KeyF11, 114 "F12": winc.KeyF12, 115 "F13": winc.KeyF13, 116 "F14": winc.KeyF14, 117 "F15": winc.KeyF15, 118 "F16": winc.KeyF16, 119 "F17": winc.KeyF17, 120 "F18": winc.KeyF18, 121 "F19": winc.KeyF19, 122 "F20": winc.KeyF20, 123 "F21": winc.KeyF21, 124 "F22": winc.KeyF22, 125 "F23": winc.KeyF23, 126 "F24": winc.KeyF24, 127 128 "`": winc.KeyOEM3, 129 ",": winc.KeyOEMComma, 130 ".": winc.KeyOEMPeriod, 131 "/": winc.KeyOEM2, 132 ";": winc.KeyOEM1, 133 "'": winc.KeyOEM7, 134 "[": winc.KeyOEM4, 135 "]": winc.KeyOEM6, 136 `\`: winc.KeyOEM5, 137 138 "~": winc.KeyOEM3, // 139 ")": winc.Key0, 140 "!": winc.Key1, 141 "@": winc.Key2, 142 "#": winc.Key3, 143 "$": winc.Key4, 144 "%": winc.Key5, 145 "^": winc.Key6, 146 "&": winc.Key7, 147 "*": winc.Key8, 148 "(": winc.Key9, 149 "_": winc.KeyOEMMinus, 150 "PLUS": winc.KeyOEMPlus, 151 "<": winc.KeyOEMComma, 152 ">": winc.KeyOEMPeriod, 153 "?": winc.KeyOEM2, 154 ":": winc.KeyOEM1, 155 `"`: winc.KeyOEM7, 156 "{": winc.KeyOEM4, 157 "}": winc.KeyOEM6, 158 "|": winc.KeyOEM5, 159 160 "SPACE": winc.KeySpace, 161 "TAB": winc.KeyTab, 162 "CAPSLOCK": winc.KeyCapital, 163 "NUMLOCK": winc.KeyNumlock, 164 "SCROLLLOCK": winc.KeyScroll, 165 "BACKSPACE": winc.KeyBack, 166 "DELETE": winc.KeyDelete, 167 "INSERT": winc.KeyInsert, 168 "RETURN": winc.KeyReturn, 169 "ENTER": winc.KeyReturn, 170 "UP": winc.KeyUp, 171 "DOWN": winc.KeyDown, 172 "LEFT": winc.KeyLeft, 173 "RIGHT": winc.KeyRight, 174 "HOME": winc.KeyHome, 175 "END": winc.KeyEnd, 176 "PAGEUP": winc.KeyPrior, 177 "PAGEDOWN": winc.KeyNext, 178 "ESCAPE": winc.KeyEscape, 179 "ESC": winc.KeyEscape, 180 "VOLUMEUP": winc.KeyVolumeUp, 181 "VOLUMEDOWN": winc.KeyVolumeDown, 182 "VOLUMEMUTE": winc.KeyVolumeMute, 183 "MEDIANEXTTRACK": winc.KeyMediaNextTrack, 184 "MEDIAPREVIOUSTRACK": winc.KeyMediaPrevTrack, 185 "MEDIASTOP": winc.KeyMediaStop, 186 "MEDIAPLAYPAUSE": winc.KeyMediaPlayPause, 187 "PRINTSCREEN": winc.KeyPrint, 188 "NUM0": winc.KeyNumpad0, 189 "NUM1": winc.KeyNumpad1, 190 "NUM2": winc.KeyNumpad2, 191 "NUM3": winc.KeyNumpad3, 192 "NUM4": winc.KeyNumpad4, 193 "NUM5": winc.KeyNumpad5, 194 "NUM6": winc.KeyNumpad6, 195 "NUM7": winc.KeyNumpad7, 196 "NUM8": winc.KeyNumpad8, 197 "NUM9": winc.KeyNumpad9, 198 "nummult": winc.KeyMultiply, 199 "numadd": winc.KeyAdd, 200 "numsub": winc.KeySubtract, 201 "numdec": winc.KeyDecimal, 202 "numdiv": winc.KeyDivide, 203 }