diff options
author | Camil Staps | 2019-11-08 14:59:13 +0100 |
---|---|---|
committer | Camil Staps | 2019-11-08 16:06:43 +0100 |
commit | 8ed51dca15aca92313350a18107536aeb1d2dd51 (patch) | |
tree | 7a4ebaecac2e52fb70b11116463d90af6ce976fe | |
parent | Cleanup and add documentation (diff) |
Use abstract newtypes to hide pointers
-rw-r--r-- | src/Gtk/Signal.icl | 2 | ||||
-rw-r--r-- | src/Gtk/Widgets.dcl | 71 | ||||
-rw-r--r-- | src/Gtk/Widgets.icl | 71 | ||||
-rw-r--r-- | src/Gtk/Widgets/Sheet.dcl | 2 | ||||
-rw-r--r-- | src/Gtk/Widgets/Sheet.icl | 6 |
5 files changed, 111 insertions, 41 deletions
diff --git a/src/Gtk/Signal.icl b/src/Gtk/Signal.icl index 543c7a2..be019b5 100644 --- a/src/Gtk/Signal.icl +++ b/src/Gtk/Signal.icl @@ -49,7 +49,7 @@ installSignalHandler handler widget = & signal_handlers = 'Data.Map'.put (st.signal_counter+1) handler_internal st.signal_handlers , signal_counter = st.signal_counter+1 }) >>= \{signal_counter=id} -> - let (GtkWidget w) = gtkWidget widget in + let w = toPtr widget in toState (g_signal_connect w (signalName handler) (callback handler_internal) id) >>| pure widget where diff --git a/src/Gtk/Widgets.dcl b/src/Gtk/Widgets.dcl index 957838b..bc1e0af 100644 --- a/src/Gtk/Widgets.dcl +++ b/src/Gtk/Widgets.dcl @@ -12,12 +12,6 @@ definition module Gtk.Widgets * example, all subclasses of `GtkWidget` implement the `gtkWidget` class, and * common methods of the `GtkWidget` class correspond to overloaded functions * in Clean. - * - * NB: The types of widgets are exported here because (1) newtypes cannot be - * abstract and (2) they must be able to implement `TC` so that they can be - * shared (see `Gtk.Shares`). When the compiler supports abstract newtypes and - * `TC` instantiation of hidden types, the implementation of these types may - * be removed from the definition module; do not rely on it! */ from StdMaybe import :: Maybe @@ -41,7 +35,7 @@ from Gtk.Types import * A `GtkAccelGroup` is needed for a `GtkAccelerator`. 'Accelerator' is Gtk's * term for what most people call shortcuts, i.e. `Ctrl`-`S`, etc. */ -:: GtkAccelGroup =: GtkAccelGroup Pointer +:: GtkAccelGroup (=: GtkAccelGroup Pointer) newAccelGroup :: !w -> GtkM GtkAccelGroup | gtkWindow w @@ -54,7 +48,7 @@ newAccelGroup :: !w -> GtkM GtkAccelGroup | gtkWindow w :: GtkAccelerator = Accelerator !GtkAccelGroup !String ![GdkModifier] //* An action bar typically holds a number of buttons. -:: GtkActionBar =: GtkActionBar Pointer +:: GtkActionBar (=: GtkActionBar Pointer) instance gtkWidget GtkActionBar newActionBar :: GtkM GtkActionBar @@ -63,7 +57,7 @@ newActionBar :: GtkM GtkActionBar packActionBar :: !GtkActionBar !GtkDirection !w -> GtkM w | gtkWidget w //* A box holds a number of child widgets in some direction with spacing. -:: GtkBox =: GtkBox Pointer +:: GtkBox (=: GtkBox Pointer) instance gtkWidget GtkBox instance gtkContainer GtkBox instance gtkOrientable GtkBox @@ -79,7 +73,7 @@ packBox :: !GtkBox !GtkDirection !GtkExpand !w -> GtkM w | gtkWidget w instance tune GtkBox GtkSpacing -:: GtkButton =: GtkButton Pointer +:: GtkButton (=: GtkButton Pointer) instance gtkWidget GtkButton /** @@ -90,17 +84,19 @@ instance gtkWidget GtkButton */ newButtonFromIconName :: !String -> GtkM GtkButton -:: GtkContainer =: GtkContainer Pointer +:: GtkContainer (=: GtkContainer Pointer) class gtkContainer a :: !a -> GtkContainer instance gtkWidget GtkContainer instance gtkContainer GtkContainer +unsafeToContainer :: !Pointer -> GtkContainer + addToContainer :: !c !w -> GtkM w | gtkWidget w & gtkContainer c //* A dialog is a popup window. -:: GtkDialog =: GtkDialog Pointer +:: GtkDialog (=: GtkDialog Pointer) class gtkDialog a :: !a -> GtkDialog @@ -142,13 +138,15 @@ newMessageDialog :: !GtkWindow !GtkMessageType !GtkButtonsType !String -> GtkM G getFileWithDialog :: !GtkWindow !GtkFileChooserAction !(Maybe String) -> GtkM (Maybe FilePath) //* An entry is a simple text field. Subclasses allow more advanced input. -:: GtkEntry =: GtkEntry Pointer +:: GtkEntry (=: GtkEntry Pointer) class gtkEntry a :: !a -> GtkEntry instance gtkWidget GtkEntry instance gtkEntry GtkEntry +unsafeToEntry :: !Pointer -> GtkEntry + newEntry :: GtkM GtkEntry getText :: !e -> GtkM String | gtkEntry e @@ -163,7 +161,7 @@ instance tune GtkEntry GtkEntryCompletion * `GtkListStore` that is filtered with the default match function. It is * possible to tune the completion method with a `GtkCompletionMode`, however. */ -:: GtkEntryCompletion =: GtkEntryCompletion Pointer +:: GtkEntryCompletion (=: GtkEntryCompletion Pointer) newEntryCompletion :: GtkM GtkEntryCompletion @@ -174,7 +172,7 @@ instance tune GtkEntryCompletion GtkListStore instance tune GtkEntryCompletion GtkCompletionMode //* A frame holds a single child, with a border and an optional title. -:: GtkFrame =: GtkFrame Pointer +:: GtkFrame (=: GtkFrame Pointer) instance gtkWidget GtkFrame instance gtkContainer GtkFrame @@ -187,7 +185,7 @@ framed :: !GtkTitle !(GtkM w) -> GtkM (w, GtkFrame) | gtkWidget w * A grid is a generalized table, allowing outlining child widget positions to * each other. */ -:: GtkGrid =: GtkGrid Pointer +:: GtkGrid (=: GtkGrid Pointer) instance gtkWidget GtkGrid newGrid :: GtkM GtkGrid @@ -200,7 +198,7 @@ newGrid :: GtkM GtkGrid attachGrid :: !GtkGrid !(!Int,!Int) !(!Int,!Int) !w -> GtkM w | gtkWidget w //* A label is used to display a small or medium amount of text. -:: GtkLabel =: GtkLabel Pointer +:: GtkLabel (=: GtkLabel Pointer) instance gtkWidget GtkLabel newLabel :: GtkM GtkLabel @@ -210,7 +208,7 @@ instance tune GtkLabel GtkText * A list store holds values in a list. It is used in several places, like for * `GtkEntryCompletion` and `GtkTreeView`. */ -:: GtkListStore =: GtkListStore Pointer +:: GtkListStore (=: GtkListStore Pointer) //* Create a new list store where rows are lists of values of the given types. newListStore :: ![GType] -> GtkM GtkListStore @@ -228,7 +226,7 @@ swapItems :: !Int !Int !GtkListStore -> GtkM Bool * A menu provides actions to the user. `GtkMenu` by itself is useful to create * sub-menus (see `setSubMenu`). For a top-level menu, see `GtkMenuBar`. */ -:: GtkMenu =: GtkMenu Pointer +:: GtkMenu (=: GtkMenu Pointer) instance gtkWidget GtkMenu newMenu :: GtkM GtkMenu @@ -237,7 +235,7 @@ newMenu :: GtkM GtkMenu * A menu bar is usually placed at the top of a window, providing actions to * the user. */ -:: GtkMenuBar =: GtkMenuBar Pointer +:: GtkMenuBar (=: GtkMenuBar Pointer) instance gtkWidget GtkMenuBar newMenuBar :: GtkM GtkMenuBar @@ -246,7 +244,7 @@ newMenuBar :: GtkM GtkMenuBar * A menu item is an item in a menu. Attach an `ActivateHandler` or set a * sub-menu with `setSubMenu`. */ -:: GtkMenuItem =: GtkMenuItem Pointer +:: GtkMenuItem (=: GtkMenuItem Pointer) class gtkMenuItem a :: !a -> GtkMenuItem @@ -259,7 +257,7 @@ newMenuItem :: !String -> GtkM GtkMenuItem setSubMenu :: !mi !GtkMenu -> GtkM GtkMenu | gtkMenuItem mi //* A check menu item is a menu item with a checkbox. -:: GtkCheckMenuItem =: GtkCheckMenuItem Pointer +:: GtkCheckMenuItem (=: GtkCheckMenuItem Pointer) instance gtkWidget GtkCheckMenuItem instance gtkMenuItem GtkCheckMenuItem @@ -272,14 +270,14 @@ isActive :: !GtkCheckMenuItem -> GtkM Bool setActive :: !Bool !GtkCheckMenuItem -> GtkM GtkCheckMenuItem //* A separator menu item draws as a simple line to group other items together. -:: GtkSeparatorMenuItem =: GtkSeparatorMenuItem Pointer +:: GtkSeparatorMenuItem (=: GtkSeparatorMenuItem Pointer) instance gtkWidget GtkSeparatorMenuItem instance gtkMenuItem GtkSeparatorMenuItem newSeparatorMenuItem :: GtkM GtkSeparatorMenuItem //* This is an interface for widgets that hold a collection of menu items. -:: GtkMenuShell =: GtkMenuShell Pointer +:: GtkMenuShell (=: GtkMenuShell Pointer) instance gtkWidget GtkMenuShell class gtkMenuShell a :: !a -> GtkMenuShell @@ -288,14 +286,14 @@ instance gtkMenuShell GtkMenu, GtkMenuBar, GtkMenuShell appendToMenuShell :: !s !mi -> GtkM mi | gtkMenuShell s & gtkMenuItem mi //* This is an interface for widgets of which the children can be oriented. -:: GtkOrientable =: GtkOrientable Pointer +:: GtkOrientable (=: GtkOrientable Pointer) class gtkOrientable a :: !a -> GtkOrientable instance tune o GtkOrientation | gtkOrientable o //* A paned holds two children, with a (usually moveable) handle in between. -:: GtkPaned =: GtkPaned Pointer +:: GtkPaned (=: GtkPaned Pointer) instance gtkWidget GtkPaned instance gtkContainer GtkPaned @@ -307,7 +305,7 @@ packPane2 :: !GtkPaned !GtkResize !GtkShrink !w -> GtkM w | gtkWidget w * A scrolled window holds a single child and uses a scrollbar if it does not * fit in the outer dimensions. */ -:: GtkScrolledWindow =: GtkScrolledWindow Pointer +:: GtkScrolledWindow (=: GtkScrolledWindow Pointer) instance gtkWidget GtkScrolledWindow instance gtkContainer GtkScrolledWindow @@ -317,20 +315,20 @@ instance tune GtkScrolledWindow (GtkScrollbarPolicy, GtkScrollbarPolicy) where tune :: !(!GtkScrollbarPolicy, !GtkScrollbarPolicy) !GtkScrolledWindow -> GtkM GtkScrolledWindow //* A search entry is a special entry with a search icon and clear button. -:: GtkSearchEntry =: GtkSearchEntry Pointer +:: GtkSearchEntry (=: GtkSearchEntry Pointer) instance gtkWidget GtkSearchEntry instance gtkEntry GtkSearchEntry newSearchEntry :: GtkM GtkSearchEntry //* A separator is a simple line, allowing for separation between widgets. -:: GtkSeparator =: GtkSeparator Pointer +:: GtkSeparator (=: GtkSeparator Pointer) instance gtkWidget GtkSeparator newSeparator :: !GtkOrientation -> GtkM GtkSeparator //* A spinner is an animated widget signaling indefinite progress. -:: GtkSpinner =: GtkSpinner Pointer +:: GtkSpinner (=: GtkSpinner Pointer) instance gtkWidget GtkSpinner newSpinner :: GtkM GtkSpinner @@ -338,14 +336,14 @@ startSpinner :: !GtkSpinner -> GtkM GtkSpinner stopSpinner :: !GtkSpinner -> GtkM GtkSpinner //* A text buffer is viewed by a `GtkTextView`; updates occur on this type. -:: GtkTextBuffer =: GtkTextBuffer Pointer +:: GtkTextBuffer (=: GtkTextBuffer Pointer) instance tune GtkTextBuffer GtkText instance tune GtkTextBuffer GtkMarkup insertAtCursor :: !String !GtkTextBuffer -> GtkM GtkTextBuffer //* A text view holds a larger amount of text than a `GtkLabel`. -:: GtkTextView =: GtkTextView Pointer +:: GtkTextView (=: GtkTextView Pointer) instance gtkWidget GtkTextView instance gtkContainer GtkTextView @@ -355,7 +353,7 @@ getTextBuffer :: !GtkTextView -> GtkTextBuffer instance tune GtkTextView GtkWrapMode //* A tree view is a view on a `GtkListStore` with customizable columns. -:: GtkTreeView =: GtkTreeView Pointer +:: GtkTreeView (=: GtkTreeView Pointer) instance gtkWidget GtkTreeView newTreeView :: !GtkListStore -> GtkM GtkTreeView @@ -381,12 +379,15 @@ getPathToSelection :: !GtkTreeView -> GtkM (Maybe [Int]) selectPath :: ![Int] !GtkTreeView -> GtkM Bool //* This is an abstract class; every GUI element is a widget. -:: GtkWidget =: GtkWidget Pointer +:: GtkWidget (=: GtkWidget Pointer) class gtkWidget a :: !a -> GtkWidget instance gtkWidget GtkWidget +toPtr :: !w -> Pointer | gtkWidget w +unsafeToWidget :: !Pointer -> GtkWidget + show :: !w -> GtkM w | gtkWidget w hide :: !w -> GtkM w | gtkWidget w @@ -412,7 +413,7 @@ instance tune w GtkAccelerator | gtkWidget w instance tune w GtkSizeRequest | gtkWidget w //* A window is a top-level element, holding a single child widget. -:: GtkWindow =: GtkWindow Pointer +:: GtkWindow (=: GtkWindow Pointer) class gtkWindow a :: !a -> GtkWindow diff --git a/src/Gtk/Widgets.icl b/src/Gtk/Widgets.icl index 702ea0e..41aadab 100644 --- a/src/Gtk/Widgets.icl +++ b/src/Gtk/Widgets.icl @@ -15,6 +15,8 @@ import Gtk import Gdk.Internal import Gtk.Internal +:: GtkAccelGroup =: GtkAccelGroup Pointer + newAccelGroup :: !w -> GtkM GtkAccelGroup | gtkWindow w newAccelGroup window = let (GtkWindow w) = gtkWindow window in @@ -22,6 +24,8 @@ newAccelGroup window = toState (gtk_window_add_accel_group w ag) >>| pure (GtkAccelGroup ag) +:: GtkActionBar =: GtkActionBar Pointer + instance gtkWidget GtkActionBar where gtkWidget (GtkActionBar ab) = GtkWidget ab newActionBar :: GtkM GtkActionBar @@ -38,6 +42,8 @@ packActionBar (GtkActionBar b) dir widget = w) >>| pure widget +:: GtkBox =: GtkBox Pointer + instance gtkWidget GtkBox where gtkWidget (GtkBox b) = GtkWidget b instance gtkContainer GtkBox where gtkContainer (GtkBox b) = GtkContainer b instance gtkOrientable GtkBox where gtkOrientable (GtkBox b) = GtkOrientable b @@ -60,6 +66,8 @@ where toState (gtk_box_set_spacing b s) >>| pure box +:: GtkButton =: GtkButton Pointer + instance gtkWidget GtkButton where gtkWidget (GtkButton b) = GtkWidget b newButtonFromIconName :: !String -> GtkM GtkButton @@ -67,9 +75,14 @@ newButtonFromIconName icon = toStateR (gtk_button_new_from_icon_name icon (toInt ButtonIconSize)) >>= \b -> show (GtkButton b) +:: GtkContainer =: GtkContainer Pointer + instance gtkWidget GtkContainer where gtkWidget (GtkContainer c) = GtkWidget c instance gtkContainer GtkContainer where gtkContainer c = c +unsafeToContainer :: !Pointer -> GtkContainer +unsafeToContainer c = GtkContainer c + addToContainer :: !c !w -> GtkM w | gtkWidget w & gtkContainer c addToContainer container widget = let @@ -79,6 +92,8 @@ addToContainer container widget = toState (gtk_container_add c w) >>| pure widget +:: GtkDialog =: GtkDialog Pointer + instance gtkWidget GtkDialog where gtkWidget (GtkDialog d) = GtkWidget d instance gtkContainer GtkDialog where gtkContainer (GtkDialog d) = GtkContainer d instance gtkWindow GtkDialog where gtkWindow (GtkDialog d) = GtkWindow d @@ -146,9 +161,14 @@ where destroy dialog >>| pure Nothing +:: GtkEntry =: GtkEntry Pointer + instance gtkWidget GtkEntry where gtkWidget (GtkEntry e) = GtkWidget e instance gtkEntry GtkEntry where gtkEntry e = e +unsafeToEntry :: !Pointer -> GtkEntry +unsafeToEntry e = GtkEntry e + newEntry :: GtkM GtkEntry newEntry = toStateR gtk_entry_new >>= \e -> @@ -166,6 +186,8 @@ where toState (gtk_entry_set_text e text) >>| pure entry +:: GtkEntryCompletion =: GtkEntryCompletion Pointer + instance tune GtkEntry GtkEntryCompletion where tune (GtkEntryCompletion ec) entry=:(GtkEntry e) = @@ -175,7 +197,6 @@ where newEntryCompletion :: GtkM GtkEntryCompletion newEntryCompletion = toStateR gtk_entry_completion_new >>= \ec -> - toState (gtk_entry_completion_set_inline_selection ec True) >>| // TODO pure (GtkEntryCompletion ec) setTextColumn :: !Int !GtkEntryCompletion -> GtkM GtkEntryCompletion @@ -199,6 +220,8 @@ where InlineSelection -> gtk_entry_completion_set_inline_selection ec True NoInlineSelection -> gtk_entry_completion_set_inline_selection ec False +:: GtkFrame =: GtkFrame Pointer + instance gtkWidget GtkFrame where gtkWidget (GtkFrame f) = GtkWidget f instance gtkContainer GtkFrame where gtkContainer (GtkFrame f) = GtkContainer f @@ -217,6 +240,8 @@ framed title widgetf = widgetf >>= \widget -> tuple widget <$> newFrame title widget +:: GtkGrid =: GtkGrid Pointer + instance gtkWidget GtkGrid where gtkWidget (GtkGrid g) = GtkWidget g newGrid :: GtkM GtkGrid @@ -230,6 +255,8 @@ attachGrid (GtkGrid g) (left,top) (width,height) widget = toState (gtk_grid_attach g w left top width height) >>| pure widget +:: GtkLabel =: GtkLabel Pointer + instance gtkWidget GtkLabel where gtkWidget (GtkLabel l) = GtkWidget l newLabel :: GtkM GtkLabel @@ -243,6 +270,8 @@ where toState (gtk_label_set_markup l text) >>| pure label +:: GtkListStore =: GtkListStore Pointer + newListStore :: ![GType] -> GtkM GtkListStore newListStore types = toStateR (gtk_list_store_newv {toInt t \\ t <- types}) >>= \s -> @@ -279,6 +308,8 @@ swapItems a b (GtkListStore s) = (toState (gtk_list_store_swap s iter_a iter_b) >>| pure True) (pure False) +:: GtkMenu =: GtkMenu Pointer + instance gtkWidget GtkMenu where gtkWidget (GtkMenu m) = GtkWidget m newMenu :: GtkM GtkMenu @@ -286,6 +317,8 @@ newMenu = toStateR gtk_menu_new >>= \m -> show (GtkMenu m) +:: GtkMenuBar =: GtkMenuBar Pointer + instance gtkWidget GtkMenuBar where gtkWidget (GtkMenuBar mb) = GtkWidget mb newMenuBar :: GtkM GtkMenuBar @@ -293,6 +326,8 @@ newMenuBar = toStateR gtk_menu_bar_new >>= \mb -> show (GtkMenuBar mb) +:: GtkMenuItem =: GtkMenuItem Pointer + instance gtkWidget GtkMenuItem where gtkWidget (GtkMenuItem mi) = GtkWidget mi instance gtkMenuItem GtkMenuItem where gtkMenuItem mi = mi @@ -309,6 +344,8 @@ setSubMenu item menu=:(GtkMenu m) = toState (gtk_menu_item_set_submenu mi m) >>| pure menu +:: GtkCheckMenuItem =: GtkCheckMenuItem Pointer + instance gtkWidget GtkCheckMenuItem where gtkWidget (GtkCheckMenuItem cmi) = GtkWidget cmi instance gtkMenuItem GtkCheckMenuItem where gtkMenuItem (GtkCheckMenuItem cmi) = GtkMenuItem cmi @@ -327,6 +364,8 @@ setActive active item=:(GtkCheckMenuItem cmi) = toState (gtk_check_menu_item_set_active cmi active) >>| pure item +:: GtkSeparatorMenuItem =: GtkSeparatorMenuItem Pointer + instance gtkWidget GtkSeparatorMenuItem where gtkWidget (GtkSeparatorMenuItem smi) = GtkWidget smi instance gtkMenuItem GtkSeparatorMenuItem where gtkMenuItem (GtkSeparatorMenuItem smi) = GtkMenuItem smi @@ -335,6 +374,8 @@ newSeparatorMenuItem = toStateR gtk_separator_menu_item_new >>= \smi -> show (GtkSeparatorMenuItem smi) +:: GtkMenuShell =: GtkMenuShell Pointer + instance gtkWidget GtkMenuShell where gtkWidget (GtkMenuShell ms) = GtkWidget ms instance gtkMenuShell GtkMenu where gtkMenuShell (GtkMenu m) = GtkMenuShell m @@ -350,6 +391,8 @@ appendToMenuShell shell item = toState (gtk_menu_shell_append ms mi) >>| pure item +:: GtkOrientable =: GtkOrientable Pointer + instance tune o GtkOrientation | gtkOrientable o where tune orientation orientable = @@ -357,6 +400,8 @@ where toState (gtk_orientable_set_orientation o orientation=:Vertical) >>| pure orientable +:: GtkPaned =: GtkPaned Pointer + instance gtkWidget GtkPaned where gtkWidget (GtkPaned p) = GtkWidget p instance gtkContainer GtkPaned where gtkContainer (GtkPaned p) = GtkContainer p @@ -378,6 +423,8 @@ packPane2 (GtkPaned p) resize shrink widget = toState (gtk_paned_pack2 p w resize=:Resize shrink=:Shrink) >>| pure widget +:: GtkScrolledWindow =: GtkScrolledWindow Pointer + instance gtkWidget GtkScrolledWindow where gtkWidget (GtkScrolledWindow sw) = GtkWidget sw instance gtkContainer GtkScrolledWindow where gtkContainer (GtkScrolledWindow sw) = GtkContainer sw @@ -393,6 +440,8 @@ where toState (gtk_scrolled_window_set_policy sw (toInt hp) (toInt vp)) >>| pure window +:: GtkSearchEntry =: GtkSearchEntry Pointer + instance gtkWidget GtkSearchEntry where gtkWidget (GtkSearchEntry se) = GtkWidget se instance gtkEntry GtkSearchEntry where gtkEntry (GtkSearchEntry se) = GtkEntry se @@ -401,6 +450,8 @@ newSearchEntry = toStateR gtk_search_entry_new >>= \se -> show (GtkSearchEntry se) +:: GtkSeparator =: GtkSeparator Pointer + instance gtkWidget GtkSeparator where gtkWidget (GtkSeparator s) = GtkWidget s newSeparator :: !GtkOrientation -> GtkM GtkSeparator @@ -408,6 +459,8 @@ newSeparator orientation = toStateR (gtk_separator_new orientation=:Vertical) >>= \s -> show (GtkSeparator s) +:: GtkSpinner =: GtkSpinner Pointer + instance gtkWidget GtkSpinner where gtkWidget (GtkSpinner s) = GtkWidget s newSpinner :: GtkM GtkSpinner @@ -425,6 +478,8 @@ stopSpinner spinner=:(GtkSpinner s) = toState (gtk_spinner_stop s) >>| pure spinner +:: GtkTextBuffer =: GtkTextBuffer Pointer + instance tune GtkTextBuffer GtkText where tune (Text s) buffer=:(GtkTextBuffer b) = @@ -446,6 +501,8 @@ insertAtCursor s buffer=:(GtkTextBuffer b) = toState (gtk_text_buffer_insert_at_cursor b s (size s)) >>| pure buffer +:: GtkTextView =: GtkTextView Pointer + instance gtkWidget GtkTextView where gtkWidget (GtkTextView tv) = GtkWidget tv instance gtkContainer GtkTextView where gtkContainer (GtkTextView tv) = GtkContainer tv @@ -464,6 +521,8 @@ where toState (gtk_text_view_set_wrap_mode tv (toInt mode)) >>| pure view +:: GtkTreeView =: GtkTreeView Pointer + instance gtkWidget GtkTreeView where gtkWidget (GtkTreeView tv) = GtkWidget tv newTreeView :: !GtkListStore -> GtkM GtkTreeView @@ -512,8 +571,16 @@ selectPath path (GtkTreeView tv) = (toState (gtk_tree_selection_select_iter selection iter) >>| pure True) (pure False) +:: GtkWidget =: GtkWidget Pointer + instance gtkWidget GtkWidget where gtkWidget w = w +toPtr :: !w -> Pointer | gtkWidget w +toPtr widget = let (GtkWidget w) = gtkWidget widget in w + +unsafeToWidget :: !Pointer -> GtkWidget +unsafeToWidget w = GtkWidget w + show :: !w -> GtkM w | gtkWidget w show widget = let (GtkWidget w) = gtkWidget widget in @@ -605,6 +672,8 @@ where toState (gtk_widget_set_size_request w width height) >>| pure widget +:: GtkWindow =: GtkWindow Pointer + instance gtkWidget GtkWindow where gtkWidget (GtkWindow w) = GtkWidget w instance gtkContainer GtkWindow where gtkContainer (GtkWindow w) = GtkContainer w instance gtkWindow GtkWindow where gtkWindow w = w diff --git a/src/Gtk/Widgets/Sheet.dcl b/src/Gtk/Widgets/Sheet.dcl index 0f365d2..5a4191d 100644 --- a/src/Gtk/Widgets/Sheet.dcl +++ b/src/Gtk/Widgets/Sheet.dcl @@ -22,7 +22,7 @@ from Gtk.Widgets import import Gtk.Widgets.Sheet.Signal -:: GtkSheet =: GtkSheet Pointer +:: GtkSheet (=: GtkSheet Pointer) instance gtkWidget GtkSheet instance gtkContainer GtkSheet diff --git a/src/Gtk/Widgets/Sheet.icl b/src/Gtk/Widgets/Sheet.icl index 36d0b4d..c28816f 100644 --- a/src/Gtk/Widgets/Sheet.icl +++ b/src/Gtk/Widgets/Sheet.icl @@ -11,8 +11,8 @@ import Gtk.Widgets.Sheet.Internal :: GtkSheet =: GtkSheet Pointer -instance gtkWidget GtkSheet where gtkWidget (GtkSheet s) = GtkWidget s -instance gtkContainer GtkSheet where gtkContainer (GtkSheet s) = GtkContainer s +instance gtkWidget GtkSheet where gtkWidget (GtkSheet s) = unsafeToWidget s +instance gtkContainer GtkSheet where gtkContainer (GtkSheet s) = unsafeToContainer s newSheet :: !Int !Int !String -> GtkM GtkSheet newSheet nrows ncols title = @@ -105,7 +105,7 @@ setActiveCell row col sheet=:(GtkSheet s) = getEntry :: !GtkSheet -> GtkM GtkEntry getEntry (GtkSheet s) = toStateR (gtk_sheet_get_entry s) >>= \e -> - pure (GtkEntry e) + pure (unsafeToEntry e) instance tune GtkSheet GtkSheetColumnResizability where |