module Hbro.Types where
import Control.Monad.Reader
import Data.Dynamic
import Data.IORef
import Data.Map
import Graphics.UI.Gtk.Builder
import Graphics.UI.Gtk.Display.Label
import Graphics.UI.Gtk.Entry.Entry
import Graphics.UI.Gtk.General.General
import Graphics.UI.Gtk.Gdk.EventM
import Graphics.UI.Gtk.Layout.HBox
import Graphics.UI.Gtk.Scrolling.ScrolledWindow
import Graphics.UI.Gtk.WebKit.WebPolicyDecision
import Graphics.UI.Gtk.WebKit.WebSettings
import Graphics.UI.Gtk.WebKit.WebView
import Graphics.UI.Gtk.Windows.Window
import Network.URI
import System.Console.CmdArgs
import System.Glib.Attributes hiding(get)
import System.ZMQ
type K = KT IO
newtype KT m a = KT (ReaderT Environment m a)
deriving (Functor, Monad, MonadFix, MonadIO, MonadReader Environment, MonadTrans)
data Environment = Environment {
mState :: IORef (Map String Dynamic),
mOptions :: CliOptions,
mConfig :: Config,
mGUI :: GUI,
mContext :: Context
}
data CliOptions = CliOptions {
mURI :: Maybe String,
mVanilla :: Bool,
mRecompile :: Bool,
mDenyReconf :: Bool,
mForceReconf :: Bool,
mDyreDebug :: Bool,
mMasterBinary :: Maybe String
} deriving (Data, Typeable, Show, Eq)
data Config = Config {
mSocketDir :: RefDirs -> FilePath,
mUIFile :: RefDirs -> FilePath,
mHomePage :: String,
mWebSettings :: [AttrOp WebSettings],
mCommands :: CommandsList,
mHooks :: Hooks
}
type Config' = Either String Config
data Hooks = Hooks {
mBackForward :: URI -> WebPolicyDecision -> K (),
mDownload :: URI -> String -> Int -> K (),
mFormResubmitted :: URI -> WebPolicyDecision -> K(),
mFormSubmitted :: URI -> WebPolicyDecision -> K (),
mKeyPressed :: String -> K (),
mLinkClicked :: Button -> URI -> WebPolicyDecision -> K (),
mLoadFinished :: K (),
mMIMEDisposition :: URI -> String -> WebPolicyDecision -> K (),
mNewWindow :: URI -> K (),
mOtherNavigation :: URI -> WebPolicyDecision -> K (),
mReload :: URI -> WebPolicyDecision -> K (),
mStartUp :: K (),
mTitleChanged :: String -> K ()
}
data GUI = GUI {
mWindow :: Window,
mInspectorWindow :: Window,
mScrollWindow :: ScrolledWindow,
mWebView :: WebView,
mPromptBar :: PromptBar,
mStatusBar :: HBox,
mNotificationBar :: NotificationBar,
mBuilder :: Builder
}
data PromptBar = PromptBar {
mBox :: HBox,
mDescription :: Label,
mEntry :: Entry,
mCallbackRef :: IORef (String -> K ()),
mIncrementalCallbackRef :: IORef (String -> K ())
}
data NotificationBar = NotificationBar {
mLabel :: Label,
mTimer :: IORef (Maybe HandlerId)
}
data RefDirs = RefDirs {
mHome :: FilePath,
mTemporary :: FilePath,
mConfiguration :: FilePath,
mData :: FilePath
}
type PortableFilePath = RefDirs -> FilePath
type KeysList = [(String, K ())]
type KeysMap = Map String (K ())
type KeyEventCallback = [Modifier] -> String -> IO Bool
type CommandsList = [(String, ([String] -> K String))]
type CommandsMap = Map String ([String] -> K String)
data Button = ButtonL | ButtonM | ButtonR
data CaseSensitivity = CaseSensitive | CaseInsensitive
data Direction = Forward | Backward
data Wrap = Wrap | NoWrap