mirror of
https://gitlab.com/sheaf/metabrush.git
synced 2024-11-05 23:03:38 +00:00
137 lines
2.8 KiB
Haskell
137 lines
2.8 KiB
Haskell
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.Linear
|
||
( ℝ(..), T(..) )
|
||
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 !( ℝ 2 )
|
||
instance HandleAction MouseMove
|
||
|
||
data ActionOrigin
|
||
= ViewportOrigin
|
||
| RulerOrigin !Ruler
|
||
data MouseClickType
|
||
= SingleClick
|
||
| DoubleClick
|
||
data MouseClick =
|
||
MouseClick
|
||
{ clickOrigin :: !ActionOrigin
|
||
, clickType :: !MouseClickType
|
||
, clickButton :: !Word32
|
||
, clickCoords :: !( ℝ 2 )
|
||
}
|
||
instance HandleAction MouseClick
|
||
|
||
data MouseRelease = MouseRelease !Word32 !( ℝ 2 )
|
||
instance HandleAction MouseRelease
|
||
|
||
data Scroll = Scroll !( Maybe ( ℝ 2 ) ) !( T ( ℝ 2 ) )
|
||
instance HandleAction Scroll
|
||
|
||
data KeyboardPress = KeyboardPress !Word32
|
||
instance HandleAction KeyboardPress
|
||
|
||
data KeyboardRelease = KeyboardRelease !Word32
|
||
instance HandleAction KeyboardRelease
|