summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCamil Staps2019-10-23 11:22:15 +0200
committerCamil Staps2019-10-23 11:22:15 +0200
commitd490e14ebbb93b5f23f9f9906acfb5cb51dc77f1 (patch)
tree4244c6f5a2e388fc3c5da4066d08586e290cc363
parentAdd rudimentary shares system (diff)
Add GtkDialog and GtkSpinner functionality
-rw-r--r--src/Gtk/Internal.dcl8
-rw-r--r--src/Gtk/Internal.icl35
-rw-r--r--src/Gtk/Types.dcl4
-rw-r--r--src/Gtk/Widgets.dcl19
-rw-r--r--src/Gtk/Widgets.icl28
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 ()