gi-gtk-declarative 0.4.0 → 0.4.1
raw patch · 5 files changed
+26/−49 lines, 5 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- GI.Gtk.Declarative.Bin: class BinChild bin (child :: * -> *) | bin -> child
- GI.Gtk.Declarative.Bin: instance (GI.Gtk.Declarative.Bin.BinChild parent child, GI.Gtk.Declarative.EventSource.EventSource child) => GI.Gtk.Declarative.EventSource.EventSource (GI.Gtk.Declarative.Bin.Bin parent child)
- GI.Gtk.Declarative.Bin: instance (GI.Gtk.Declarative.Bin.BinChild parent child, GI.Gtk.Declarative.Patch.Patchable child) => GI.Gtk.Declarative.Patch.Patchable (GI.Gtk.Declarative.Bin.Bin parent child)
- GI.Gtk.Declarative.Bin: instance (GI.Gtk.Declarative.Bin.BinChild widget child, GI.Gtk.Declarative.Patch.Patchable child, GI.Gtk.Declarative.EventSource.EventSource child) => GI.Gtk.Declarative.Widget.FromWidget (GI.Gtk.Declarative.Bin.Bin widget child) GI.Gtk.Declarative.Widget.Widget
- GI.Gtk.Declarative.Bin: instance (a Data.Type.Equality.~ b, c Data.Type.Equality.~ d) => GI.Gtk.Declarative.Widget.FromWidget (GI.Gtk.Declarative.Bin.Bin a c) (GI.Gtk.Declarative.Bin.Bin b d)
- GI.Gtk.Declarative.Bin: instance GHC.Base.Functor (GI.Gtk.Declarative.Bin.Bin widget child)
- GI.Gtk.Declarative.Bin: instance GI.Gtk.Declarative.Bin.BinChild GI.Gtk.Objects.ApplicationWindow.ApplicationWindow GI.Gtk.Declarative.Widget.Widget
- GI.Gtk.Declarative.Bin: instance GI.Gtk.Declarative.Bin.BinChild GI.Gtk.Objects.Dialog.Dialog GI.Gtk.Declarative.Widget.Widget
- GI.Gtk.Declarative.Bin: instance GI.Gtk.Declarative.Bin.BinChild GI.Gtk.Objects.ListBoxRow.ListBoxRow GI.Gtk.Declarative.Widget.Widget
- GI.Gtk.Declarative.Bin: instance GI.Gtk.Declarative.Bin.BinChild GI.Gtk.Objects.MenuItem.MenuItem GI.Gtk.Declarative.Widget.Widget
- GI.Gtk.Declarative.Bin: instance GI.Gtk.Declarative.Bin.BinChild GI.Gtk.Objects.ScrolledWindow.ScrolledWindow GI.Gtk.Declarative.Widget.Widget
- GI.Gtk.Declarative.Bin: instance GI.Gtk.Declarative.Bin.BinChild GI.Gtk.Objects.Window.Window GI.Gtk.Declarative.Widget.Widget
- GI.Gtk.Declarative.Container.ListBox: instance GI.Gtk.Declarative.Container.Class.ToChildren GI.Gtk.Objects.ListBox.ListBox Data.Vector.Vector (GI.Gtk.Declarative.Bin.Bin GI.Gtk.Objects.ListBoxRow.ListBoxRow GI.Gtk.Declarative.Widget.Widget)
- GI.Gtk.Declarative.Container.Patch: instance GI.Gtk.Declarative.Container.Class.IsContainer GI.Gtk.Objects.ListBox.ListBox (GI.Gtk.Declarative.Bin.Bin GI.Gtk.Objects.ListBoxRow.ListBoxRow GI.Gtk.Declarative.Widget.Widget)
+ GI.Gtk.Declarative.Bin: instance (a Data.Type.Equality.~ b) => GI.Gtk.Declarative.Widget.FromWidget (GI.Gtk.Declarative.Bin.Bin a) (GI.Gtk.Declarative.Bin.Bin b)
+ GI.Gtk.Declarative.Bin: instance GHC.Base.Functor (GI.Gtk.Declarative.Bin.Bin widget)
+ GI.Gtk.Declarative.Bin: instance GI.Gtk.Objects.Bin.IsBin parent => GI.Gtk.Declarative.EventSource.EventSource (GI.Gtk.Declarative.Bin.Bin parent)
+ GI.Gtk.Declarative.Bin: instance GI.Gtk.Objects.Bin.IsBin parent => GI.Gtk.Declarative.Patch.Patchable (GI.Gtk.Declarative.Bin.Bin parent)
+ GI.Gtk.Declarative.Container.ListBox: instance GI.Gtk.Declarative.Container.Class.ToChildren GI.Gtk.Objects.ListBox.ListBox Data.Vector.Vector (GI.Gtk.Declarative.Bin.Bin GI.Gtk.Objects.ListBoxRow.ListBoxRow)
+ GI.Gtk.Declarative.Container.Patch: instance GI.Gtk.Declarative.Container.Class.IsContainer GI.Gtk.Objects.ListBox.ListBox (GI.Gtk.Declarative.Bin.Bin GI.Gtk.Objects.ListBoxRow.ListBoxRow)
- GI.Gtk.Declarative: bin :: (Patchable (Bin widget child), Typeable widget, Typeable child, Typeable event, Functor child, IsContainer widget, IsBin widget, IsWidget widget, FromWidget (Bin widget child) target) => (ManagedPtr widget -> widget) -> Vector (Attribute widget event) -> child event -> target event
+ GI.Gtk.Declarative: bin :: (Patchable (Bin widget), Typeable widget, Typeable event, IsContainer widget, IsBin widget, IsWidget widget, FromWidget (Bin widget) target) => (ManagedPtr widget -> widget) -> Vector (Attribute widget event) -> Widget event -> target event
- GI.Gtk.Declarative: data Bin widget child event
+ GI.Gtk.Declarative: data Bin widget event
- GI.Gtk.Declarative: menuItem :: (IsMenuItem item, Typeable event, BinChild item Widget, Typeable item, IsContainer item, IsBin item, IsWidget item) => (ManagedPtr item -> item) -> Vector (Attribute item event) -> Widget event -> MenuItem event
+ GI.Gtk.Declarative: menuItem :: (IsMenuItem item, Typeable event, Typeable item, IsContainer item, IsBin item, IsWidget item) => (ManagedPtr item -> item) -> Vector (Attribute item event) -> Widget event -> MenuItem event
- GI.Gtk.Declarative.Bin: [Bin] :: (Typeable widget, IsContainer widget, IsBin widget, IsWidget widget, Functor child) => (ManagedPtr widget -> widget) -> Vector (Attribute widget event) -> child event -> Bin widget child event
+ GI.Gtk.Declarative.Bin: [Bin] :: (Typeable widget, IsContainer widget, IsBin widget, IsWidget widget) => (ManagedPtr widget -> widget) -> Vector (Attribute widget event) -> Widget event -> Bin widget event
- GI.Gtk.Declarative.Bin: bin :: (Patchable (Bin widget child), Typeable widget, Typeable child, Typeable event, Functor child, IsContainer widget, IsBin widget, IsWidget widget, FromWidget (Bin widget child) target) => (ManagedPtr widget -> widget) -> Vector (Attribute widget event) -> child event -> target event
+ GI.Gtk.Declarative.Bin: bin :: (Patchable (Bin widget), Typeable widget, Typeable event, IsContainer widget, IsBin widget, IsWidget widget, FromWidget (Bin widget) target) => (ManagedPtr widget -> widget) -> Vector (Attribute widget event) -> Widget event -> target event
- GI.Gtk.Declarative.Bin: data Bin widget child event
+ GI.Gtk.Declarative.Bin: data Bin widget event
- GI.Gtk.Declarative.Container.MenuItem: menuItem :: (IsMenuItem item, Typeable event, BinChild item Widget, Typeable item, IsContainer item, IsBin item, IsWidget item) => (ManagedPtr item -> item) -> Vector (Attribute item event) -> Widget event -> MenuItem event
+ GI.Gtk.Declarative.Container.MenuItem: menuItem :: (IsMenuItem item, Typeable event, Typeable item, IsContainer item, IsBin item, IsWidget item) => (ManagedPtr item -> item) -> Vector (Attribute item event) -> Widget event -> MenuItem event
Files
- gi-gtk-declarative.cabal +1/−1
- src/GI/Gtk/Declarative/Bin.hs +20/−40
- src/GI/Gtk/Declarative/Container/ListBox.hs +1/−2
- src/GI/Gtk/Declarative/Container/MenuItem.hs +3/−4
- src/GI/Gtk/Declarative/Container/Patch.hs +1/−2
gi-gtk-declarative.cabal view
@@ -1,5 +1,5 @@ name: gi-gtk-declarative-version: 0.4.0+version: 0.4.1 synopsis: Declarative GTK+ programming in Haskell description: A declarative programming model for GTK+ user interfaces, implementing support for various widgets
src/GI/Gtk/Declarative/Bin.hs view
@@ -1,21 +1,19 @@ {-# OPTIONS_GHC -fno-warn-unticked-promoted-constructors #-}-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverloadedLabels #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeApplications #-}-{-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedLabels #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-} -- | A declarative representation of 'Gtk.Bin' in GTK. module GI.Gtk.Declarative.Bin ( Bin(..) , bin- , BinChild ) where @@ -32,50 +30,37 @@ import GI.Gtk.Declarative.Widget --- | Supported 'Gtk.Bin's.-class BinChild bin (child :: * -> *) | bin -> child--instance BinChild Gtk.ScrolledWindow Widget where-instance BinChild Gtk.ListBoxRow Widget where-instance BinChild Gtk.Window Widget where-instance BinChild Gtk.ApplicationWindow Widget where-instance BinChild Gtk.Dialog Widget where-instance BinChild Gtk.MenuItem Widget where- -- | Declarative version of a /bin/ widget, i.e. a widget with exactly one -- child.-data Bin widget child event where+data Bin widget event where Bin :: ( Typeable widget , Gtk.IsContainer widget , Gtk.IsBin widget , Gtk.IsWidget widget- , Functor child ) => (Gtk.ManagedPtr widget -> widget) -> Vector (Attribute widget event)- -> child event- -> Bin widget child event+ -> Widget event+ -> Bin widget event -instance Functor (Bin widget child) where+instance Functor (Bin widget) where fmap f (Bin ctor attrs child) = Bin ctor (fmap f <$> attrs) (fmap f child) -- | Construct a /bin/ widget, i.e. a widget with exactly one child. bin- :: ( Patchable (Bin widget child)+ :: ( Patchable (Bin widget) , Typeable widget- , Typeable child , Typeable event- , Functor child , Gtk.IsContainer widget , Gtk.IsBin widget , Gtk.IsWidget widget- , FromWidget (Bin widget child) target+ , FromWidget (Bin widget) target ) => (Gtk.ManagedPtr widget -> widget) -- ^ A bin widget constructor from the underlying gi-gtk library. -> Vector (Attribute widget event) -- ^ List of 'Attribute's.- -> child event -- ^ The bin's child widget, whose type is decided by the 'BinChild' instance.+ -> Widget event -- ^ The bin's child widget -> target event -- ^ The target, whose type is decided by 'FromWidget'. bin ctor attrs = fromWidget . Bin ctor attrs @@ -83,7 +68,7 @@ -- Patchable -- -instance (BinChild parent child, Patchable child) => Patchable (Bin parent child) where+instance Gtk.IsBin parent => Patchable (Bin parent) where create (Bin ctor attrs child) = do let collected = collectAttributes attrs widget' <- Gtk.new ctor (constructProperties collected)@@ -128,8 +113,7 @@ -- EventSource -- -instance (BinChild parent child, EventSource child) =>- EventSource (Bin parent child) where+instance Gtk.IsBin parent => EventSource (Bin parent) where subscribe (Bin ctor props child) (SomeState st) cb = case st of StateTreeBin top childState -> do@@ -138,9 +122,5 @@ (<> handlers') <$> subscribe child childState cb _ -> error "Cannot subscribe to Bin events with a non-bin state tree." -instance (a ~ b, c ~ d) => FromWidget (Bin a c) (Bin b d) where+instance a ~ b => FromWidget (Bin a) (Bin b) where fromWidget = id--instance (BinChild widget child, Patchable child, EventSource child)- => FromWidget (Bin widget child) Widget where- fromWidget = Widget
src/GI/Gtk/Declarative/Container/ListBox.hs view
@@ -10,6 +10,5 @@ import GI.Gtk.Declarative.Bin import GI.Gtk.Declarative.Container.Class-import GI.Gtk.Declarative.Widget -instance ToChildren Gtk.ListBox Vector (Bin Gtk.ListBoxRow Widget)+instance ToChildren Gtk.ListBox Vector (Bin Gtk.ListBoxRow)
src/GI/Gtk/Declarative/Container/MenuItem.hs view
@@ -36,8 +36,8 @@ data MenuItem event where -- | A single menu item in a 'Gtk.Menu'. MenuItem- :: (Gtk.IsMenuItem item, BinChild item Widget, Typeable item)- => Bin item Widget event+ :: (Gtk.IsMenuItem item, Gtk.IsBin item, Typeable item)+ => Bin item event -> MenuItem event -- | A sub menu in a 'Gtk.Menu', with a text label and the list of -- child menu items.@@ -56,7 +56,6 @@ menuItem :: ( Gtk.IsMenuItem item , Typeable event- , BinChild item Widget , Typeable item , Gtk.IsContainer item , Gtk.IsBin item@@ -98,7 +97,7 @@ \case MenuItem item -> create item SubMenu label subMenu' -> newSubMenuItem label (create subMenu')- patch state (MenuItem (c1 :: Bin i1 Widget e1)) (MenuItem (c2 :: Bin i2 Widget e2)) =+ patch state (MenuItem (c1 :: Bin i1 e1)) (MenuItem (c2 :: Bin i2 e2)) = case eqT @i1 @i2 of Just Refl -> patch state c1 c2 Nothing -> Replace (create c2)
src/GI/Gtk/Declarative/Container/Patch.hs view
@@ -31,7 +31,6 @@ import GI.Gtk.Declarative.Container.Class import GI.Gtk.Declarative.Patch import GI.Gtk.Declarative.State-import GI.Gtk.Declarative.Widget -- | Patch all children in a container. This does not feature any ID checking, -- as seen in React, so reordering children in a container can produce many@@ -116,7 +115,7 @@ padMaybes :: Int -> Vector a -> Vector (Maybe a) padMaybes len xs = Vector.generate len (xs !?) -instance IsContainer Gtk.ListBox (Bin Gtk.ListBoxRow Widget) where+instance IsContainer Gtk.ListBox (Bin Gtk.ListBoxRow) where appendChild box _ widget' = Gtk.listBoxInsert box widget' (-1) replaceChild box _ i old new = do