{-# LANGUAGE MonoLocalBinds #-} module MetaBrush.Action where -- base import Data.Word ( Word32 ) -- gi-gtk import qualified GI.Gtk as GTK -- hashable import Data.Hashable ( Hashable ) -- text import Data.Text ( Text ) -- MetaBrush import Math.Vector2D ( Point2D, Vector2D ) import {-# SOURCE #-} MetaBrush.Context ( UIElements, Variables ) import {-# SOURCE #-} MetaBrush.UI.FileBar ( TabLocation(..) ) import MetaBrush.UI.Viewport ( Ruler(..) ) import MetaBrush.Unique ( Unique ) -------------------------------------------------------------------------------- data ActionName = AppAction { actionSimpleName :: !Text } | WinAction { actionSimpleName :: !Text } instance Eq ActionName instance Ord ActionName instance Show ActionName instance Hashable ActionName class HandleAction action where handleAction :: UIElements -> Variables -> action -> IO () instance HandleAction () data NewFile = NewFile !TabLocation instance HandleAction NewFile data OpenFile = OpenFile !TabLocation instance HandleAction OpenFile data OpenFolder = OpenFolder !TabLocation instance HandleAction OpenFolder data Save = Save instance HandleAction Save data SaveAs = SaveAs instance HandleAction SaveAs data Close = CloseActive | CloseThis { docToClose :: !Unique } instance HandleAction Close data SwitchFromTo = SwitchFromTo { mbPrevActiveDocUnique :: !( Maybe Unique ) , newActiveDocUnique :: !Unique } instance HandleAction SwitchFromTo data Quit = Quit instance HandleAction Quit quitEverything :: GTK.IsWindow window => GTK.Application -> window -> IO () data Undo = Undo instance HandleAction Undo data Redo = Redo instance HandleAction Redo data Cut = Cut instance HandleAction Cut data Copy = Copy instance HandleAction Copy data Paste = Paste instance HandleAction Paste data Duplicate = Duplicate instance HandleAction Duplicate data Delete = Delete instance HandleAction Delete data ToggleGuides = ToggleGuides instance HandleAction ToggleGuides data Confirm = Confirm instance HandleAction Confirm data About = About instance HandleAction About data MouseMove = MouseMove !( Point2D Double ) instance HandleAction MouseMove data ActionOrigin = ViewportOrigin | RulerOrigin !Ruler data MouseClickType = SingleClick | DoubleClick data MouseClick = MouseClick { clickOrigin :: !ActionOrigin , clickType :: !MouseClickType , clickButton :: !Word32 , clickCoords :: !( Point2D Double ) } instance HandleAction MouseClick data MouseRelease = MouseRelease !Word32 !( Point2D Double ) instance HandleAction MouseRelease data Scroll = Scroll !( Maybe ( Point2D Double ) ) !( Vector2D Double ) instance HandleAction Scroll data KeyboardPress = KeyboardPress !Word32 instance HandleAction KeyboardPress data KeyboardRelease = KeyboardRelease !Word32 instance HandleAction KeyboardRelease