diff options
author | Camil Staps | 2019-10-23 11:22:15 +0200 |
---|---|---|
committer | Camil Staps | 2019-10-23 11:22:15 +0200 |
commit | d490e14ebbb93b5f23f9f9906acfb5cb51dc77f1 (patch) | |
tree | 4244c6f5a2e388fc3c5da4066d08586e290cc363 | |
parent | Add rudimentary shares system (diff) |
Add GtkDialog and GtkSpinner functionality
-rw-r--r-- | src/Gtk/Internal.dcl | 8 | ||||
-rw-r--r-- | src/Gtk/Internal.icl | 35 | ||||
-rw-r--r-- | src/Gtk/Types.dcl | 4 | ||||
-rw-r--r-- | src/Gtk/Widgets.dcl | 19 | ||||
-rw-r--r-- | src/Gtk/Widgets.icl | 28 |
5 files changed, 91 insertions, 3 deletions
diff --git a/src/Gtk/Internal.dcl b/src/Gtk/Internal.dcl index b4d72b3..fd0bbf5 100644 --- a/src/Gtk/Internal.dcl +++ b/src/Gtk/Internal.dcl @@ -19,8 +19,11 @@ gtk_container_add :: !Pointer !Pointer !.a -> .a gtk_css_provider_new :: !.a -> (!Pointer, !.a) gtk_css_provider_load_from_path :: !Pointer !String !Pointer !.a -> (!Bool, !.a) +gtk_dialog_get_content_area :: !Pointer -> Pointer +gtk_dialog_new :: !.a -> (!Pointer, !.a) gtk_dialog_run :: !Pointer !.a -> (!Int, !.a) gtk_dialog_set_default_response :: !Pointer !Int !.a -> .a +gtk_dialog_set_modal :: !Pointer !Bool !.a -> .a gtk_file_chooser_add_filter :: !Pointer !Pointer !.a -> .a gtk_file_chooser_dialog_new :: !(Maybe String) !Pointer !Int ![(String,Int)] !.a -> (!Pointer, !.a) @@ -55,6 +58,10 @@ gtk_paned_set_wide_handle :: !Pointer !Bool !.a -> .a gtk_scrolled_window_new :: !Pointer !Pointer !.a -> (!Pointer, !.a) +gtk_spinner_new :: !.a -> (!Pointer, !.a) +gtk_spinner_start :: !Pointer !.a -> .a +gtk_spinner_stop :: !Pointer !.a -> .a + gtk_style_context_add_class :: !Pointer !String !.a -> .a gtk_style_context_add_provider :: !Pointer !Pointer !Int !.a -> .a gtk_style_context_add_provider_for_screen :: !Pointer !Pointer !Int !.a -> .a @@ -79,3 +86,4 @@ gtk_widget_show :: !Pointer !.a -> .a gtk_window_new :: !Bool !.a -> (!Pointer, !.a) gtk_window_set_title :: !Pointer !String !.a -> .a +gtk_window_set_transient_for :: !Pointer !Pointer !.a -> .a diff --git a/src/Gtk/Internal.icl b/src/Gtk/Internal.icl index 4be7f70..c6809d1 100644 --- a/src/Gtk/Internal.icl +++ b/src/Gtk/Internal.icl @@ -61,6 +61,16 @@ where ccall gtk_css_provider_load_from_path "psp:I:A" } +gtk_dialog_get_content_area :: !Pointer -> Pointer +gtk_dialog_get_content_area dialog = code { + ccall gtk_dialog_get_content_area "p:p" +} + +gtk_dialog_new :: !.a -> (!Pointer, !.a) +gtk_dialog_new env = code { + ccall gtk_dialog_new ":p:A" +} + gtk_dialog_run :: !Pointer !.a -> (!Int, !.a) gtk_dialog_run dialog env = code { ccall gtk_dialog_run "p:I:A" @@ -71,6 +81,11 @@ gtk_dialog_set_default_response dialog response env = code { ccall gtk_dialog_set_default_response "pI:V:A" } +gtk_dialog_set_modal :: !Pointer !Bool !.a -> .a +gtk_dialog_set_modal dialog setting env = code { + ccall gtk_dialog_set_modal "pI:V:A" +} + gtk_file_chooser_add_filter :: !Pointer !Pointer !.a -> .a gtk_file_chooser_add_filter chooser filter env = code { ccall gtk_file_chooser_add_filter "pp:V:A" @@ -236,6 +251,21 @@ gtk_scrolled_window_new hadjust vadjust env = code { ccall gtk_scrolled_window_new "pp:p:A" } +gtk_spinner_new :: !.a -> (!Pointer, !.a) +gtk_spinner_new env = code { + ccall gtk_spinner_new ":p:A" +} + +gtk_spinner_start :: !Pointer !.a -> .a +gtk_spinner_start spinner env = code { + ccall gtk_spinner_start "p:V:A" +} + +gtk_spinner_stop :: !Pointer !.a -> .a +gtk_spinner_stop spinner env = code { + ccall gtk_spinner_stop "p:V:A" +} + gtk_style_context_add_class :: !Pointer !String !.a -> .a gtk_style_context_add_class context cls env = add context (packString cls) env where @@ -344,3 +374,8 @@ where set _ _ _ = code { ccall gtk_window_set_title "ps:V:A" } + +gtk_window_set_transient_for :: !Pointer !Pointer !.a -> .a +gtk_window_set_transient_for window parent env = code { + ccall gtk_window_set_transient_for "pp:V:A" +} diff --git a/src/Gtk/Types.dcl b/src/Gtk/Types.dcl index 836bdaa..b1231c6 100644 --- a/src/Gtk/Types.dcl +++ b/src/Gtk/Types.dcl @@ -34,6 +34,10 @@ instance toInt GtkFileChooserAction margin :: !Int -> GtkMargins +:: GtkModal + = Modal + | NotModal + :: GtkOrientation = Horizontal | Vertical diff --git a/src/Gtk/Widgets.dcl b/src/Gtk/Widgets.dcl index 0335874..eb6c2d0 100644 --- a/src/Gtk/Widgets.dcl +++ b/src/Gtk/Widgets.dcl @@ -6,10 +6,11 @@ from System.FilePath import :: FilePath from System._Pointer import :: Pointer from Gtk.State import :: GtkM +from Gtk.Tune import class tune from Gtk.Types import :: GtkCSSClass, :: GtkDirection, :: GtkExpand, - :: GtkFileChooserAction, :: GtkLabel, :: GtkMargins, :: GtkOrientation, - :: GtkPanedHandleWidth, :: GtkResize, :: GtkResponse, :: GtkShrink, - :: GtkStylePriority + :: GtkFileChooserAction, :: GtkLabel, :: GtkMargins, :: GtkModal, + :: GtkOrientation, :: GtkPanedHandleWidth, :: GtkResize, :: GtkResponse, + :: GtkShrink, :: GtkStylePriority class ptr a where @@ -42,8 +43,13 @@ instance gtkContainer GtkDialog instance gtkDialog GtkDialog instance ptr GtkDialog +instance tune d GtkModal | gtkDialog d + +newDialog :: !GtkWindow -> GtkM GtkDialog runDialog :: !d -> GtkM GtkResponse | gtkDialog d +getContentArea :: !d -> GtkBox | gtkDialog d + getFileWithDialog :: !GtkWindow !GtkFileChooserAction !(Maybe String) -> GtkM (Maybe FilePath) :: GtkFrame @@ -91,6 +97,13 @@ instance gtkContainer GtkScrolledWindow newScrolledWindow :: GtkM GtkScrolledWindow +:: GtkSpinner :== Pointer +instance gtkWidget GtkSpinner + +newSpinner :: GtkM GtkSpinner +startSpinner :: !GtkSpinner -> GtkM GtkSpinner +stopSpinner :: !GtkSpinner -> GtkM GtkSpinner + :: GtkTextBuffer insertAtCursor :: !String !GtkTextBuffer -> GtkM () diff --git a/src/Gtk/Widgets.icl b/src/Gtk/Widgets.icl index 5be2cea..a2a0349 100644 --- a/src/Gtk/Widgets.icl +++ b/src/Gtk/Widgets.icl @@ -54,9 +54,24 @@ where toPtr d = d fromPtr d = d +instance tune d GtkModal | gtkDialog d +where + tune setting dialog = + toState (gtk_dialog_set_modal (gtkDialog dialog) setting=:Modal) >>| + pure dialog + +newDialog :: !GtkWindow -> GtkM GtkDialog +newDialog window = + toStateR gtk_dialog_new >>= \dialog -> + toState (gtk_window_set_transient_for dialog window) >>| + pure dialog + runDialog :: !d -> GtkM GtkResponse | gtkDialog d runDialog dialog = fromInt <$> toStateR (gtk_dialog_run (gtkDialog dialog)) +getContentArea :: !d -> GtkBox | gtkDialog d +getContentArea dialog = gtk_dialog_get_content_area (gtkDialog dialog) + getFileWithDialog :: !GtkWindow !GtkFileChooserAction !(Maybe String) -> GtkM (Maybe FilePath) getFileWithDialog window action title = toStateR (gtk_file_chooser_dialog_new title window (toInt action) buttons) >>= \dialog -> @@ -170,6 +185,19 @@ instance gtkContainer GtkScrolledWindow where gtkContainer sw = sw newScrolledWindow :: GtkM GtkScrolledWindow newScrolledWindow = toStateR (gtk_scrolled_window_new 0 0) >>= show +:: GtkSpinner :== Pointer + +instance gtkWidget GtkSpinner where gtkWidget s = s + +newSpinner :: GtkM GtkSpinner +newSpinner = toStateR gtk_spinner_new >>= show + +startSpinner :: !GtkSpinner -> GtkM GtkSpinner +startSpinner spinner = toState (gtk_spinner_start spinner) >>| pure spinner + +stopSpinner :: !GtkSpinner -> GtkM GtkSpinner +stopSpinner spinner = toState (gtk_spinner_stop spinner) >>| pure spinner + :: GtkTextBuffer :== Pointer insertAtCursor :: !String !GtkTextBuffer -> GtkM () |