{-| Module : EventLoop.Input.Mouse Description : Library of all the possible 'Mouse' events in the example implementation. Copyright : (c) Sebastiaan la Fleur, 2014 License : BSD3 Maintainer : sebastiaan.la.fleur@gmail.com Stability : experimental Portability : All This module expresses how the 'Mouse' IO device is modelled in the example implementation. -} module EventLoop.Input.Mouse( Mouse(..), MouseButton(..) ) where import EventLoop.Json import EventLoop.Config import EventLoop.CommonTypes {-| Datatype to express the different 'Mouse' events. The 'EventLoop.CommonTypes.Pos' expresses where on the screen the event happened. The 'Element' expresses on which top element on screen the event happened. The 'Element' value is the name of the 'EventLoop.Output.Graphical.GObject'. -} data Mouse = MouseClick MouseButton Pos Element -- ^ Expresses a complete 'MouseClick' consisting of a 'MouseUp' and a 'MouseDown'. | MouseUp MouseButton Pos Element -- ^ Expresses when a 'MouseButton' moves upward. | MouseDown MouseButton Pos Element -- ^ Expresses when a 'MouseButton' is pushed down. deriving Show -- | The 'MouseButton' on the mouse. data MouseButton = MLeft | MRight | MMiddle deriving Show -- | How to parse a 'Mouse'event from a JSON formatted 'String'. instance FromJSON Mouse where fromJsonMessage (JSONObject ms) | mouseType == mouseclickS = MouseClick button pos element | mouseType == mouseupS = MouseUp button pos element | mouseType == mousedownS = MouseDown button pos element where JSONString mouseType = retrieveError mousetypeS ms JSONFloat x = retrieveError xS ms JSONFloat y = retrieveError yS ms pos = (x, y) JSONString element = retrieveError elementS ms jsonButton = retrieveError buttonS ms button = fromJsonMessage jsonButton -- | How to parse a 'MouseButton' from a JSON formatted 'String'. instance FromJSON MouseButton where fromJsonMessage (JSONString but) | leftS == but = MLeft | middleS == but = MMiddle | rightS == but = MRight | otherwise = error ("Could not create a mouse button from value: " ++ but)