leksah-0.1: src/IDE/ToolbarPane.hs
{-# OPTIONS_GHC -fglasgow-exts #-}
-----------------------------------------------------------------------------
--
-- Module : IDE.ToolbarPane
-- Copyright : (c) Juergen Nicklisch-Franken (aka Jutaro)
-- License : GNU-GPL
--
-- Maintainer : Juergen Nicklisch-Franken <jnf at arcor.de>
-- Stability : experimental
-- Portability : portable
--
-- | The pane of ide where modules are presented in tree form with their
-- packages and exports
--
-------------------------------------------------------------------------------
module IDE.ToolbarPane (
getToolbar
) where
import Graphics.UI.Gtk hiding (get)
import Data.Maybe
import Control.Monad.Reader
import IDE.Core.State
import IDE.Framework.ViewFrame
instance IDEObject IDEToolbar
instance Pane IDEToolbar
where
primPaneName _ = "Toolbar"
getTopWidget = castToWidget . toolbar
paneId b = "*Toolbar"
makeActive p = throwIDE "don't activate toolbar"
close pane = do
(panePath,_) <- guiPropertiesFromName (paneName pane)
nb <- getNotebook panePath
mbI <- lift $notebookPageNum nb (getTopWidget pane)
case mbI of
Nothing -> lift $ do
sysMessage Normal "notebook page not found: unexpected"
return ()
Just i -> do
deactivatePaneIfActive pane
lift $notebookRemovePage nb i
removePaneAdmin pane
instance RecoverablePane IDEToolbar ToolbarState where
saveState p = do
mbToolbar <- getPane ToolbarCasting
case mbToolbar of
Nothing -> return Nothing
Just p -> lift $ do
return (Just (StateC ToolbarState))
recoverState pp ToolbarState = do
nb <- getNotebook pp
initToolbar pp nb
getToolbar :: IDEM IDEToolbar
getToolbar = do
mbToolbar <- getPane ToolbarCasting
case mbToolbar of
Nothing -> do
prefs <- readIDE prefs
layout <- readIDE layout
let pp = getStandardPanePath (controlPanePath prefs) layout
nb <- getNotebook pp
initToolbar pp nb
mbToolbar <- getPane ToolbarCasting
case mbToolbar of
Nothing -> throwIDE "Can't init control pane"
Just m -> return m
Just m -> return m
initToolbar :: PanePath -> Notebook -> IDEAction
initToolbar panePath nb = do
ideR <- ask
currentInfo <- readIDE currentInfo
res <- triggerEvent ideR (GetToolbar [])
let (tb1,tb2) = case res of
GetToolbar (_:t1:t2:_) -> (t1,t2)
_ -> throwIDE "Failed to build toolbar"
(buf,cids) <- lift $ do
vb <- vBoxNew False 0
boxPackStart vb tb1 PackNatural 0
boxPackStart vb tb2 PackNatural 0
let toolbar' = IDEToolbar vb
notebookInsertOrdered nb vb (paneName toolbar')
widgetShowAll vb
return (toolbar',[])
addPaneAdmin buf (BufConnections [] [] []) panePath
lift $widgetGrabFocus (toolbar buf)