module Manatee.Toolkit.Widget.Interactivebar where
import Graphics.UI.Gtk
import Manatee.Toolkit.General.Basic
import Manatee.Toolkit.General.Maybe
import Manatee.Toolkit.Gtk.Box
import Manatee.Toolkit.Gtk.Container
import Manatee.Toolkit.Gtk.Editable
import Manatee.Toolkit.Gtk.Gtk
data Interactivebar =
Interactivebar {interactivebarFrame :: Frame
,interactivebarBox :: HBox
,interactivebarTitleLabel :: Label
,interactivebarEntry :: Entry
}
type InteractivebarTitle = String
type InteractivebarEntryStatus = EditableStatus
type InteractivebarStatus = (InteractivebarTitle, InteractivebarEntryStatus)
interactivebarNew :: IO Interactivebar
interactivebarNew = do
frame <- frameNew
box <- hBoxNew False 0
title <- labelNew $ Just ""
entry <- entryNew
frame `containerAdd` box
boxTryPack box title PackNatural (Just 0) Nothing
boxTryPack box entry PackGrow (Just 1) Nothing
return $ Interactivebar frame box title entry
interactivebarClone :: BoxClass box => box -> Interactivebar -> IO Interactivebar
interactivebarClone box oldBar = do
newBar <- interactivebarNew
interactivebarGetStatus oldBar
>?>= \status -> do
interactivebarSetStatus newBar status
interactivebarShow box newBar
return newBar
interactivebarSetTitle :: Interactivebar -> String -> IO ()
interactivebarSetTitle bar =
labelSetText (interactivebarTitleLabel bar)
interactivebarSetContent :: Interactivebar -> String -> IO ()
interactivebarSetContent bar =
editableSetText (interactivebarEntry bar)
interactivebarShow :: BoxClass box => box -> Interactivebar -> IO ()
interactivebarShow b bar = do
let iFrame = interactivebarFrame bar
boxTryPack (toBox b) iFrame PackNatural (Just 0) Nothing
widgetShowAll iFrame
editableFocus (interactivebarEntry bar)
interactivebarExit :: BoxClass box => box -> Interactivebar -> IO ()
interactivebarExit b =
containerTryRemove (toBox b) . interactivebarFrame
interactivebarIsVisible :: Interactivebar -> IO Bool
interactivebarIsVisible =
widgetHasParent . interactivebarFrame
interactivebarSetStatus :: Interactivebar -> InteractivebarStatus -> IO ()
interactivebarSetStatus bar (title, entryStatus) = do
interactivebarSetTitle bar title
editableSetStatus (interactivebarEntry bar) entryStatus
interactivebarGetStatus :: Interactivebar -> IO (Maybe InteractivebarStatus)
interactivebarGetStatus bar =
ifM (interactivebarIsVisible bar)
(do
title <- labelGetText $ interactivebarTitleLabel bar
entryStatus <- editableGetStatus $ interactivebarEntry bar
return $ Just (title, entryStatus))
(return Nothing)