module Manatee.Types where
import Control.Applicative hiding (empty)
import Control.Concurrent.MVar
import Control.Concurrent.STM
import DBus.Client hiding (Signal)
import Data.Function
import Data.Map (Map)
import Data.Ord
import Data.Sequence (Seq)
import Data.Set
import Data.Text.Lazy (Text)
import Graphics.UI.Gtk hiding (on, get, Action, Statusbar, statusbarNew, Window, Frame, frameNew, Plug, Tooltip)
import Manatee.Core.Types
import Manatee.Toolkit.Data.ListZipper
import Manatee.Toolkit.Data.SetList
import Manatee.Toolkit.Widget.Interactivebar
import Manatee.Toolkit.Widget.NotebookTab
import Manatee.Toolkit.Widget.Outputbar
import Manatee.Toolkit.Widget.PopupWindow
import Manatee.Toolkit.Widget.Statusbar
import Manatee.Toolkit.Widget.Tooltip
import Manatee.UI.FocusNotifier
import Manatee.UI.Frame
import System.Posix.Types (ProcessID)
import Text.Printf
import qualified Graphics.UI.Gtk as Gtk
data Environment =
Environment {envFrame :: Frame
,envDaemonClient :: Client
,envWindowList :: TVar WindowList
,envWindowNodeList :: TVar WindowNodeList
,envTabbar :: TVar Tabbar
,envBufferList :: TVar BufferList
,envSignalBoxList :: TVar SignalBoxList
,envPageIdCounter :: TVar PageId
,envSignalBoxIdCounter :: TVar SignalBoxId
,envFocusNotifierList :: TVar FocusNotifierList
,envInitBox :: VBox
,envInitInteractivebar :: Interactivebar
,envAnythingPopupWindow :: PopupWindow
,envAnythingProcessId :: TVar ProcessID
,envAnythingKeyPressId :: TVar AnythingKeyPressId
,envTooltipCounter :: TVar Int
,envTooltipSet :: TVar (Set Tooltip)
,envLocalInteractiveLock :: MVar (Either Text [String])
,envLocalInteractiveTrack :: TVar [(String, String)]
,envLocalInteractiveReturn :: TVar [String]
,envGlobalInteractiveLock :: MVar (Either Text [String])
,envGlobalInteractiveTrack :: TVar [(String, String)]
,envGlobalInteractiveReturn:: TVar [String]
,envTabCloseHistory :: TVar TabCloseHistory
,envBufferHistory :: TVar [BufferHistory]
}
data TabCloseHistory =
TabCloseHistory [(PageModeName, PageType, PagePath)]
deriving Show
type Keymap = Map Text Action
data Action = forall a b . (ActionInputArgs a, ActionOutputArgs b) =>
Action {actionFun :: a -> IO b}
class ActionInputArgs a where
envGet :: Environment -> IO a
class ActionOutputArgs b where
envPut :: Environment -> b -> IO ()
instance ActionInputArgs () where
envGet _ = return ()
instance (ActionInputArgs a, ActionInputArgs b) => ActionInputArgs (a, b) where
envGet env = liftA2 (,) (envGet env) (envGet env)
instance ActionOutputArgs () where
envPut _ _ = return ()
instance (ActionOutputArgs a, ActionOutputArgs b) => ActionOutputArgs (a, b) where
envPut env (a,b) = envPut env a >> envPut env b
data SignalBox =
SignalBox {signalBoxId :: SignalBoxId
,signalBoxUIFrame :: UIFrame
,signalBoxWindowId :: WindowId
}
instance Eq SignalBox where
(==) = (==) `on` signalBoxId
instance Ord SignalBox where
compare = comparing signalBoxId
type SignalBoxList = Set SignalBox
data WindowNode =
WindowNode {windowNodeId :: WindowNodeId
,windowNodePaned :: Paned
,windowNodeParentId :: TVar (Maybe WindowNodeId)
,windowNodeChildLeftId :: TVar (Maybe WindowNodeId)
,windowNodeChildRightId :: TVar (Maybe WindowNodeId)
,windowNodeType :: TVar WindowNodeType
,windowNodeDirection :: WindowNodeDirection}
type WindowNodeId = Int
data WindowNodeType = TNodeLeft
| TNodeRight
| TNodeRoot
deriving (Eq, Show, Read)
data WindowNodeDirection = DVertical
| DHortizontal
deriving (Eq, Show, Read)
data ZoomDirection = ZUp
| ZDown
| ZLeft
| ZRight
deriving (Eq, Show, Read)
instance Eq WindowNode where
(==) = (==) `on` windowNodeId
instance Ord WindowNode where
compare = comparing windowNodeId
type WindowNodeList = SetList WindowNode
data Window =
Window {windowNode :: WindowNode
,windowNotebook :: Notebook}
instance Eq Window where
(==) = (==) `on` windowNode
instance Ord Window where
compare = comparing windowNode
instance Show Window where
show = printf "<#Window %s>" . show . windowNodeId . windowNode
type WindowList = ListZipper Window
data WindowListSelectDirection = VLeft
| VRight
deriving (Eq, Show, Read)
type WindowId = WindowNodeId
type WindowListTuple = (WindowList, WindowNodeList)
type WindowNodeArgs = (WindowNodeList, Container)
type WindowArgs = (WindowList, WindowNodeList, Container)
type WindowNodeAttr = (Maybe WindowNodeId
,Maybe WindowNodeId
,Maybe WindowNodeId
,Maybe WindowNodeId
,WindowNodeType
,WindowNodeDirection)
newtype Tabbar =
Tabbar (Map (WindowId, PageModeName) (Seq Tab))
deriving Show
data Tab =
Tab {tabProcessId :: ProcessID
,tabPageId :: PageId
,tabSocketId :: PageSocketId
,tabPlugId :: PagePlugId
,tabUIFrame :: UIFrame}
deriving Show
data UIFrame =
UIFrame {uiFrameBox :: VBox
,uiFrameInteractivebar :: Interactivebar
,uiFrameFrame :: Gtk.Frame
,uiFrameOutputbar :: Outputbar
,uiFrameStatusbar :: Statusbar
,uiFrameNotebookTab :: NotebookTab
}
instance Show UIFrame where
show _ = "UIFrame"
data FocusStatus = FocusInitInteractivebar
| FocusLocalInteractivebar
| FocusWindow
deriving (Eq, Show, Read, Ord)
data AnythingStartupFun = AnythingStartupFun (IO ())