{-| Module : Monomer.Widgets.Util.Keyboard Copyright : (c) 2018 Francisco Vallarino License : BSD-3-Clause (see the LICENSE file) Maintainer : fjvallarino@gmail.com Stability : experimental Portability : non-portable Utility functions for widget keyboard handling. -} {-# LANGUAGE Strict #-} module Monomer.Widgets.Util.Keyboard ( isShortCutControl, isKeyboardCopy, isKeyboardPaste, isKeyboardCut, isKeyboardUndo, isKeyboardRedo ) where import Monomer.Core import Monomer.Event.Keyboard import Monomer.Event.Types import Monomer.Event.Util -- | Checks if Ctrl/Cmd, depending on OS, is pressed. isShortCutControl :: WidgetEnv s e -> KeyMod -> Bool isShortCutControl wenv mod = isControl || isCommand where isControl = not (isMacOS wenv) && isCtrlPressed mod isCommand = isMacOS wenv && isGUIPressed mod -- | Checks if a copy shortcut has been pressed. isKeyboardCopy :: WidgetEnv s e -> SystemEvent -> Bool isKeyboardCopy wenv event = checkKeyboard event testFn where testFn mod code motion = isShortCutControl wenv mod && isKeyC code -- | Checks if a paste shortcut has been pressed. isKeyboardPaste :: WidgetEnv s e -> SystemEvent -> Bool isKeyboardPaste wenv event = checkKeyboard event testFn where testFn mod code motion = isShortCutControl wenv mod && isKeyV code -- | Checks if a cut shortcut has been pressed. isKeyboardCut :: WidgetEnv s e -> SystemEvent -> Bool isKeyboardCut wenv event = checkKeyboard event testFn where testFn mod code motion = isShortCutControl wenv mod && isKeyX code -- | Checks if an undo shortcut has been pressed. isKeyboardUndo :: WidgetEnv s e -> SystemEvent -> Bool isKeyboardUndo wenv event = checkKeyboard event testFn where testFn mod code motion = isShortCutControl wenv mod && not (_kmLeftShift mod) && isKeyZ code -- | Checks if a redo shortcut has been pressed. isKeyboardRedo :: WidgetEnv s e -> SystemEvent -> Bool isKeyboardRedo wenv event = checkKeyboard event testFn where testFn mod code motion = isShortCutControl wenv mod && _kmLeftShift mod && isKeyZ code