grapefruit-ui-gtk-0.0.0.0: src/Graphics/UI/Grapefruit/GTK/Item.hs
-- |This module provides convenience functions for creating GTK+-based bricks and boxes.
module Graphics.UI.Grapefruit.GTK.Item (
widgetBrick,
windowBrick,
widgetBox,
windowBox
) where
-- FRP.Grapefruit
import FRP.Grapefruit.Signal.Segmented as SSignal
import FRP.Grapefruit.Record as Record
import FRP.Grapefruit.Record.Optionality as OptionalityRecord
import FRP.Grapefruit.Record.Context as ContextRecord
-- Graphics.UI.Grapefruit
import Graphics.UI.Grapefruit.Comp as UIComp
import Graphics.UI.Grapefruit.Item as UIItem
import qualified Graphics.UI.Grapefruit.Item as UIItem
import Graphics.UI.Grapefruit.Backend as UIBackend
-- Graphics.UI.Gtk
import qualified Graphics.UI.Gtk as Gtk
-- Graphics.UI.Grapefruit.GTK
import {-# SOURCE #-} Graphics.UI.Grapefruit.GTK as GTK
import Graphics.UI.Grapefruit.GTK.Backend as GTKUIBackend
-- |Constructs a GTK+-based widget brick.
widgetBrick :: (Gtk.WidgetClass gtkWidget, OptRecord iOptRecord, Record oRecord)
=> IO gtkWidget
-- ^an action which creates a Gtk2Hs widget
-> ContextConsumerRecord gtkWidget (All iOptRecord)
-- ^consumers of those inputs which are specific to this brick
-> ContextProducerRecord gtkWidget oRecord
-- ^producers of those outputs which are specific to this brick
-> Brick Widget GTK iOptRecord oRecord
widgetBrick = brick commonWidgetConsumerRecord commonWidgetProducerRecord Gtk.widgetShow .
newWidget
-- |Constructs a GTK+-based window brick.
windowBrick :: (Gtk.WindowClass gtkWindow, OptRecord iOptRecord, Record oRecord)
=> IO gtkWindow
-- ^an action which creates a Gtk2Hs window
-> ContextConsumerRecord gtkWindow (All iOptRecord)
-- ^consumers of those inputs which are specific to this brick
-> ContextProducerRecord gtkWindow oRecord
-- ^producers of those outputs which are specific to this brick
-> Brick Window GTK iOptRecord oRecord
windowBrick = brick commonWindowConsumerRecord commonWindowProducerRecord Gtk.widgetShow .
newWindow
-- |Constructs a GTK+-based widget box.
widgetBox :: (Gtk.WidgetClass gtkWidget,
UIComp innerUIComp,
OptRecord iOptRecord,
Record oRecord)
=> IO gtkWidget
-- ^an action which creates a Gtk2Hs widget
-> (gtkWidget -> Placement innerItem GTK)
-- ^conversion from a Gtk2Hs widget into the placement for its inner items
-> ContextConsumerRecord gtkWidget (All iOptRecord)
-- ^consumers of those inputs which are specific to this box
-> ContextProducerRecord gtkWidget oRecord
-- ^producers of those outputs which are specific to this box
-> Box innerUIComp innerItem Widget GTK iOptRecord oRecord
widgetBox = box commonWidgetConsumerRecord commonWidgetProducerRecord Gtk.widgetShow . newWidget
-- |Constructs a GTK+-based window box.
windowBox :: (Gtk.WindowClass gtkWindow,
UIComp innerUIComp,
OptRecord iOptRecord,
Record oRecord)
=> IO gtkWindow
-- ^an action which creates a Gtk2Hs window
-> (gtkWindow -> Placement innerItem GTK)
-- ^conversion from a Gtk2Hs window into the placement for its inner items
-> ContextConsumerRecord gtkWindow (All iOptRecord)
-- ^consumers of those inputs which are specific to this box
-> ContextProducerRecord gtkWindow oRecord
-- ^producers of those outputs which are specific to this box
-> Box innerUIComp innerItem Window GTK iOptRecord oRecord
windowBox = box commonWindowConsumerRecord commonWindowProducerRecord Gtk.widgetShow . newWindow
newWidget :: (Gtk.WidgetClass gtkWidget)
=> IO gtkWidget
-> Placement Widget GTK
-> IO gtkWidget
newWidget = newItem Gtk.toWidget
newWindow :: (Gtk.WindowClass gtkWindow)
=> IO gtkWindow
-> Placement Window GTK
-> IO gtkWindow
newWindow = newItem Gtk.toWindow
newItem :: (specificItem -> genericItem)
-> IO specificItem
-> (genericItem -> IO ())
-> IO specificItem
newItem genericItem newSpecificItem placement = do
specificItem <- newSpecificItem
placement (genericItem specificItem)
return specificItem
commonWidgetConsumerRecord :: (Gtk.WidgetClass gtkWidget)
=> ContextConsumerRecord gtkWidget
(All (CommonInputOptRecord Widget))
commonWidgetConsumerRecord = X :& IsEnabled ::~~ SSignal.consumer . Gtk.widgetSetSensitivity
commonWidgetProducerRecord :: (Gtk.WidgetClass gtkWidget)
=> ContextProducerRecord gtkWidget (CommonOutputRecord Window)
commonWidgetProducerRecord = X
commonWindowConsumerRecord :: (Gtk.WindowClass gtkWindow)
=> ContextConsumerRecord gtkWindow
(All (CommonInputOptRecord Window))
commonWindowConsumerRecord = X
commonWindowProducerRecord :: (Gtk.WindowClass gtkWindow)
=> ContextProducerRecord gtkWindow (CommonOutputRecord Window)
commonWindowProducerRecord = X