summary refs log tree commit diff stats
path: root/examples/gtk/ex6.nim
diff options
context:
space:
mode:
Diffstat (limited to 'examples/gtk/ex6.nim')
-rw-r--r--examples/gtk/ex6.nim52
1 files changed, 52 insertions, 0 deletions
diff --git a/examples/gtk/ex6.nim b/examples/gtk/ex6.nim
new file mode 100644
index 000000000..5f18786fe
--- /dev/null
+++ b/examples/gtk/ex6.nim
@@ -0,0 +1,52 @@
+
+import 
+  glib2, gtk2
+
+type 
+  TButtonSignalState = record 
+    Obj: PgtkObject
+    SignalID: int32
+    Disable: bool
+
+  PButtonSignalState = ptr TButtonSignalState
+
+proc destroy(widget: pGtkWidget, data: pgpointer){.cdecl.} = 
+  gtk_main_quit()
+
+proc disablesignal(widget: pGtkWidget, data: pgpointer){.cdecl.} = 
+  if PButtonSignalState(Data).Disable: 
+    gtk_signal_handler_block(PButtonSignalState(Data).Obj, SignalID)
+  else: 
+    gtk_signal_handler_unblock(PButtonSignalState(Data).Obj, SignalID)
+  PButtonSignalState(Data).disable = not PButtonSignalState(Data).disable
+
+var 
+  window: PGtkWidget
+  quitbutton: PGtkWidget
+  disablebutton: PGTKWidget
+  windowbox: PGTKWidget
+  quitsignal: guint
+  QuitState: TButtonSignalState
+
+gtk_nimrod_init()
+window = gtk_window_new(GTK_WINDOW_TOPLEVEL)
+quitbutton = gtk_button_new_with_label("Quit program")
+disablebutton = gtk_button_new_with_label("Disable button")
+windowbox = gtk_vbox_new(TRUE, 10)
+gtk_box_pack_start(GTK_BOX(windowbox), disablebutton, True, false, 0)
+gtk_box_pack_start(GTK_BOX(windowbox), quitbutton, True, false, 0)
+gtk_container_set_border_width(GTK_CONTAINER(Window), 10)
+gtk_container_add(GTK_Container(window), windowbox)
+gtk_signal_connect(GTKOBJECT(window), "destroy", 
+                   GTK_SIGNAL_FUNC(destroy), nil)
+QuitState.Obj = GTKObject(QuitButton)
+SignalID = gtk_signal_connect_object(QuitState.Obj, "clicked", GTK_SIGNAL_FUNC(
+              gtk_widget_destroy), GTKOBJECT(window))
+QuitState.Disable = True
+discard gtk_signal_connect(GTKOBJECT(disablebutton), "clicked", 
+                   GTK_SIGNAL_FUNC(disablesignal), addr(QuitState))
+gtk_widget_show(quitbutton)
+gtk_widget_show(disablebutton)
+gtk_widget_show(windowbox)
+gtk_widget_show(window)
+gtk_main()