[Haskell-cafe] How to write Manatee application?
Andy Stewart
lazycat.manatee at gmail.com
Sun Jan 2 18:09:39 CET 2011
Hi all,
How to write Manatee extension? Now have answer:
Please look http://www.flickr.com/photos/48809572@N02/5031811365/lightbox/ to understand framework before continue.
Template code at http://hackage.haskell.org/package/manatee-template
First, i explain Manatee package hierarchy:
manatee-core contain DBus protocol detail and toolkit use in other manatee packages.
manatee-anything is multi-task search interface for user input.
manatee contain daemon process,
Daemon process is root process to manage other manatee processes:
such as render application process' graphics for sandbox protected, window manage ... etc.
Daemon process just do manage job and don't running any special application code in it.
Other manatee-* package, such as manatee-editor, manatee-browser...etc running in
it's own process, you can write any code to implement your application,
just need follow some interface:
class Typeable a => PageBuffer a where
-- Get buffer name.
pageBufferGetName :: a -> IO String
-- Set buffer name.
pageBufferSetName :: a -> String -> IO ()
-- DBus client to handle DBus signal
pageBufferClient :: a -> Client
-- How to create view with buffer for MVC design.
pageBufferCreateView :: a -> PagePlugId -> IO PageViewWrap
-- Page buffer mode.
pageBufferMode :: a -> PageMode
-- Get package name to update user's configure.
pageBufferPackageName :: a -> IO String
class Typeable a => PageView a where
-- Buffer for view.
pageViewBuffer :: a -> PageBufferWrap
-- GtkPlug id to send DBus signal to other process.
pageViewPlugId :: a -> TVar PagePlugId
-- How to handle key action from daemon process.
pageViewHandleKeyAction :: a -> Text -> SerializedEvent -> IO ()
-- How to do when manatee framework focus on current application.
pageViewFocus :: a -> IO ()
-- Scrolled window to contain application widget.
pageViewScrolledWindow :: a -> ScrolledWindow
-- How to handle cut action, can ignore.
pageViewCut :: a -> IO Bool
-- How to handle copy action, can ignore.
pageViewCopy :: a -> IO Bool
-- How to handle paste action, can ignore.
pageViewPaste :: a -> IO Bool
-- How to scroll top postion, can ignore.
pageViewScrollToTop :: a -> IO ()
-- How to scroll bottom postion, can ignore.
pageViewScrollToBottom :: a -> IO ()
-- How to scroll vertical page, can ignore.
pageViewScrollVerticalPage :: Bool -> a -> IO ()
-- How to scroll vertical step, can ignore.
pageViewScrollVerticalStep :: Bool -> a -> IO ()
-- How to scroll to left side, can ignore.
pageViewScrollToLeft :: a -> IO ()
-- How to scroll to right side, can ignore.
pageViewScrollToRight :: a -> IO ()
-- How to scroll horizontal page, can ignore.
pageViewScrollHorizontalPage:: Bool -> a -> IO ()
-- How to scroll horizontal step, can ignore.
pageViewScrollHorizontalStep:: Bool -> a -> IO ()
If you have any question, feel free to ask me (lazycat.manatee at gmail.com)
-- Andy
More information about the Haskell-Cafe
mailing list