packages feed

grapefruit-ui-gtk-0.0.0.0: src/Graphics/UI/Grapefruit/GTK/Backend/Std.hs

module Graphics.UI.Grapefruit.GTK.Backend.Std () where

    -- FRP.Grapefruit
    import FRP.Grapefruit.Record         as Record
    import FRP.Grapefruit.Record.Context as ContextRecord

    -- Graphics.UI.Grapefruit
    import Graphics.UI.Grapefruit.Backend.Std as StdUIBackend

    -- 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.Connector as GTKConnector
    import                Graphics.UI.Grapefruit.GTK.Item      as GTKUIItem
    import                Graphics.UI.Grapefruit.GTK.Backend   as GTKUIBackend

    instance StdUIBackend GTK where

        label = widgetBrick (Gtk.labelNew Nothing)
                            (X :& Text ::~~ attrConsumer Gtk.labelLabel)
                            X

        pushButton = widgetBrick Gtk.buttonNew
                                 (X :& Text ::~~ attrConsumer Gtk.buttonLabel)
                                 (X :& Push ::~~ eventProducer Gtk.onPressed)

        box orientation = widgetBox (case orientation of
                                         Horizontal -> newGtkBox Gtk.hBoxNew
                                         Vertical   -> newGtkBox Gtk.vBoxNew)
                                    Gtk.containerAdd
                                    X
                                    X where

            newGtkBox rawNewGtkBox = fmap Gtk.toBox (rawNewGtkBox False 0)

        window = windowBox Gtk.windowNew
                           Gtk.containerAdd
                           (X :& Title   ::~~ attrConsumer Gtk.windowTitle)
                           (X :& Closure ::~~ eventProducer Gtk.onDestroy)