summary refs log tree commit diff stats
path: root/examples
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2010-02-24 01:04:39 +0100
committerAndreas Rumpf <rumpf_a@web.de>2010-02-24 01:04:39 +0100
commitf41bd71e6152174c3b0819c7549fa431e8a01222 (patch)
tree35bec88bad6f84e9551316888744037e8d15e598 /examples
parent6da95ed9ca899db702c6a7b17d2d7db14dbb0de4 (diff)
downloadNim-f41bd71e6152174c3b0819c7549fa431e8a01222.tar.gz
SQLite wrapper
Diffstat (limited to 'examples')
-rw-r--r--examples/cairoex.nim14
-rw-r--r--examples/cgiex.nim15
-rw-r--r--examples/curlex.nim10
-rw-r--r--examples/gtk/ex1.nim14
-rw-r--r--examples/gtk/ex2.nim21
-rw-r--r--examples/gtk/ex3.nim39
-rw-r--r--examples/gtk/ex4.nim31
-rw-r--r--examples/gtk/ex5.nim24
-rw-r--r--examples/gtk/ex6.nim52
-rw-r--r--examples/gtk/ex7.nim43
-rw-r--r--examples/gtk/ex8.nim32
-rw-r--r--examples/gtk/ex9.nim47
-rw-r--r--examples/sdlex.nim26
-rw-r--r--examples/wingui.nim9
-rw-r--r--examples/x11ex.nim71
15 files changed, 448 insertions, 0 deletions
diff --git a/examples/cairoex.nim b/examples/cairoex.nim
new file mode 100644
index 000000000..2c28e1abf
--- /dev/null
+++ b/examples/cairoex.nim
@@ -0,0 +1,14 @@
+import cairo
+
+var surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 240, 80)
+var cr = cairo_create(surface)
+
+cairo_select_font_face(cr, "serif", CAIRO_FONT_SLANT_NORMAL, 
+                                    CAIRO_FONT_WEIGHT_BOLD)
+cairo_set_font_size(cr, 32.0)
+cairo_set_source_rgb(cr, 0.0, 0.0, 1.0)
+cairo_move_to(cr, 10.0, 50.0)
+cairo_show_text(cr, "Hello, world")
+cairo_destroy(cr)
+discard cairo_surface_write_to_png(surface, "hello.png")
+cairo_surface_destroy(surface)
diff --git a/examples/cgiex.nim b/examples/cgiex.nim
new file mode 100644
index 000000000..857caa8ef
--- /dev/null
+++ b/examples/cgiex.nim
@@ -0,0 +1,15 @@
+# Test/show CGI module
+import strtabs, cgi
+
+
+#setTestData("name", "the andreas", "password", "rumpf\t\ttab")
+
+var myData = readData()
+validateData(myData, "name", "password")
+writeContentType()
+
+write(stdout, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n")
+write(stdout, "<html><head><title>Test</title></head><body>\n")
+writeln(stdout, "name: " & myData["name"])
+writeln(stdout, "password: " & myData["password"])
+writeln(stdout, "</body></html>")
diff --git a/examples/curlex.nim b/examples/curlex.nim
new file mode 100644
index 000000000..7f666f775
--- /dev/null
+++ b/examples/curlex.nim
@@ -0,0 +1,10 @@
+import 
+  libcurl
+
+var hCurl = curl_easy_init()
+if hCurl != nil: 
+  discard curl_easy_setopt(hCurl, CURLOPT_VERBOSE, True)
+  discard curl_easy_setopt(hCurl, CURLOPT_URL, "http://force7.de/nimrod")
+  discard curl_easy_perform(hCurl)
+  curl_easy_cleanup(hCurl)
+
diff --git a/examples/gtk/ex1.nim b/examples/gtk/ex1.nim
new file mode 100644
index 000000000..aa3ed2f66
--- /dev/null
+++ b/examples/gtk/ex1.nim
@@ -0,0 +1,14 @@
+import 

+  cairo, glib2, gtk2

+

+proc destroy(widget: pGtkWidget, data: pgpointer) {.cdecl.} =

+  gtk_main_quit()

+

+var

+  window: pGtkWidget

+gtk_nimrod_init()

+window = gtk_window_new(GTK_WINDOW_TOPLEVEL)

+discard gtk_signal_connect(GTKOBJECT(window), "destroy",

+                   GTK_SIGNAL_FUNC(destroy), nil)

+gtk_widget_show(window)

+gtk_main()

diff --git a/examples/gtk/ex2.nim b/examples/gtk/ex2.nim
new file mode 100644
index 000000000..80ff6f104
--- /dev/null
+++ b/examples/gtk/ex2.nim
@@ -0,0 +1,21 @@
+
+import 
+  glib2, gtk2
+
+proc destroy(widget: pGtkWidget, data: pgpointer){.cdecl.} = 
+  gtk_main_quit()
+
+var 
+  window: PGtkWidget
+  button: PGtkWidget
+
+gtk_nimrod_init()
+window = gtk_window_new(GTK_WINDOW_TOPLEVEL)
+button = gtk_button_new_with_label("Click me")
+gtk_container_set_border_width(GTK_CONTAINER(Window), 5)
+gtk_container_add(GTK_Container(window), button)
+discard gtk_signal_connect(GTKOBJECT(window), "destroy", 
+                           GTK_SIGNAL_FUNC(destroy), nil)
+gtk_widget_show(button)
+gtk_widget_show(window)
+gtk_main()
diff --git a/examples/gtk/ex3.nim b/examples/gtk/ex3.nim
new file mode 100644
index 000000000..460b1e4dc
--- /dev/null
+++ b/examples/gtk/ex3.nim
@@ -0,0 +1,39 @@
+
+import 
+  glib2, gtk2
+
+proc newbutton(ALabel: cstring): PGtkWidget = 
+  Result = gtk_button_new_with_label(ALabel)
+  gtk_widget_show(result)
+
+proc destroy(widget: pGtkWidget, data: pgpointer){.cdecl.} = 
+  gtk_main_quit()
+
+var 
+  window, totalbox, hbox, vbox: PgtkWidget
+
+gtk_nimrod_init()
+window = gtk_window_new(GTK_WINDOW_TOPLEVEL) # Box to divide window in 2 halves:
+totalbox = gtk_vbox_new(true, 10)
+gtk_widget_show(totalbox)   # A box for each half of the screen:
+hbox = gtk_hbox_new(false, 5)
+gtk_widget_show(hbox)
+vbox = gtk_vbox_new(true, 5)
+gtk_widget_show(vbox)       # Put boxes in their halves
+gtk_box_pack_start(GTK_BOX(totalbox), hbox, true, true, 0)
+gtk_box_pack_start(GTK_BOX(totalbox), vbox, true, true, 0) # Now fill boxes with buttons.
+                                                           # Horizontal box
+gtk_box_pack_start(GTK_BOX(hbox), newbutton("Button 1"), false, false, 0)
+gtk_box_pack_start(GTK_BOX(hbox), newbutton("Button 2"), false, false, 0)
+gtk_box_pack_start(GTK_BOX(hbox), newbutton("Button 3"), false, false, 0) # 
+                                                                          # Vertical box
+gtk_box_pack_start(GTK_BOX(vbox), newbutton("Button A"), true, true, 0)
+gtk_box_pack_start(GTK_BOX(vbox), newbutton("Button B"), true, true, 0)
+gtk_box_pack_start(GTK_BOX(vbox), newbutton("Button C"), true, true, 0) # Put 
+                                                                        # totalbox in window
+gtk_container_set_border_width(GTK_CONTAINER(Window), 5)
+gtk_container_add(GTK_Container(window), totalbox)
+discard gtk_signal_connect(GTKOBJECT(window), "destroy", 
+                           GTK_SIGNAL_FUNC(destroy), nil)
+gtk_widget_show(window)
+gtk_main()
diff --git a/examples/gtk/ex4.nim b/examples/gtk/ex4.nim
new file mode 100644
index 000000000..a387da972
--- /dev/null
+++ b/examples/gtk/ex4.nim
@@ -0,0 +1,31 @@
+
+import 
+  glib2, gtk2
+
+proc newbutton(ALabel: cstring): PGtkWidget = 
+  Result = gtk_button_new_with_label(ALabel)
+  gtk_widget_show(result)
+
+proc destroy(widget: pGtkWidget, data: pgpointer){.cdecl.} = 
+  gtk_main_quit()
+
+var 
+  window, maintable: PgtkWidget
+
+proc AddToTable(Widget: PGtkWidget, Left, Right, Top, Bottom: guint) = 
+  gtk_table_attach_defaults(GTK_TABLE(MainTable), Widget, Left, right, top, 
+                            bottom)
+
+gtk_nimrod_init()
+window = gtk_window_new(GTK_WINDOW_TOPLEVEL)
+Maintable = gtk_table_new(6, 6, True)
+gtk_widget_show(MainTable)
+AddToTable(newbutton("1,1 At 1,1"), 1, 2, 1, 2)
+AddToTable(newbutton("2,2 At 3,1"), 3, 5, 1, 3)
+AddToTable(newbutton("4,1 At 4,1"), 1, 5, 4, 5) # Put all in window
+gtk_container_set_border_width(GTK_CONTAINER(Window), 5)
+gtk_container_add(GTK_Container(window), maintable)
+discard gtk_signal_connect(GTKOBJECT(window), "destroy", 
+                           GTK_SIGNAL_FUNC(destroy), nil)
+gtk_widget_show(window)
+gtk_main()
diff --git a/examples/gtk/ex5.nim b/examples/gtk/ex5.nim
new file mode 100644
index 000000000..3a5b076c6
--- /dev/null
+++ b/examples/gtk/ex5.nim
@@ -0,0 +1,24 @@
+
+import 
+  glib2, gtk2
+
+proc destroy(widget: pGtkWidget, data: pgpointer){.cdecl.} = 
+  gtk_main_quit()
+
+var 
+  window: PGtkWidget
+  button: PGtkWidget
+
+gtk_nimrod_init()
+window = gtk_window_new(GTK_WINDOW_TOPLEVEL)
+button = gtk_button_new_with_label("Click me")
+gtk_container_set_border_width(GTK_CONTAINER(Window), 5)
+gtk_container_add(GTK_Container(window), button)
+discard gtk_signal_connect(GTKOBJECT(window), "destroy", 
+                           GTK_SIGNAL_FUNC(destroy), nil)
+discard gtk_signal_connect_object(GTKOBJECT(button), "clicked", 
+                                  GTK_SIGNAL_FUNC(gtk_widget_destroy), 
+                                  GTKOBJECT(window))
+gtk_widget_show(button)
+gtk_widget_show(window)
+gtk_main()
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()
diff --git a/examples/gtk/ex7.nim b/examples/gtk/ex7.nim
new file mode 100644
index 000000000..53890d1e1
--- /dev/null
+++ b/examples/gtk/ex7.nim
@@ -0,0 +1,43 @@
+
+import 
+  gdk2, glib2, gtk2
+
+proc destroy(widget: pGtkWidget, data: pgpointer){.cdecl.} = 
+  gtk_main_quit()
+
+const 
+  Inside: cstring = "Mouse is over label"
+  OutSide: cstring = "Mouse is not over label"
+
+var 
+  OverLabel: bool
+  window, box1, box2, stackbox, label1, Label2: PGtkWidget
+
+proc ChangeLabel(P: PGtkWidget, Event: PGdkEventCrossing, 
+                Data: var bool){.cdecl.} = 
+  if not Data: gtk_label_set_text(GTKLABEL(Label2), Inside)
+  else: gtk_label_set_text(GTKLABEL(Label2), Outside)
+  Data = not Data
+
+gtk_nimrod_init()
+window = gtk_window_new(GTK_WINDOW_TOPLEVEL)
+stackbox = gtk_vbox_new(TRUE, 10)
+box1 = gtk_event_box_new()
+label1 = gtk_label_new("Move mouse over label")
+gtk_container_add(GTK_CONTAINER(box1), label1)
+box2 = gtk_event_box_new()
+label2 = gtk_label_new(OutSide)
+gtk_container_add(GTK_CONTAINER(box2), label2)
+gtk_box_pack_start(GTK_BOX(stackbox), box1, TRUE, TRUE, 0)
+gtk_box_pack_start(GTK_BOX(stackbox), box2, TRUE, TRUE, 0)
+gtk_container_set_border_width(GTK_CONTAINER(Window), 5)
+gtk_container_add(GTK_Container(window), stackbox)
+discard gtk_signal_connect(GTKOBJECT(window), "destroy", 
+                   GTK_SIGNAL_FUNC(destroy), nil)
+overlabel = False
+discard gtk_signal_connect(GTKOBJECT(box1), "enter_notify_event", 
+                   GTK_SIGNAL_FUNC(ChangeLabel), addr(Overlabel))
+discard gtk_signal_connect(GTKOBJECT(box1), "leave_notify_event", 
+                   GTK_SIGNAL_FUNC(ChangeLabel), addr(Overlabel))
+gtk_widget_show_all(window)
+gtk_main()
diff --git a/examples/gtk/ex8.nim b/examples/gtk/ex8.nim
new file mode 100644
index 000000000..acbba2258
--- /dev/null
+++ b/examples/gtk/ex8.nim
@@ -0,0 +1,32 @@
+
+import 
+  glib2, gtk2
+
+proc destroy(widget: pGtkWidget, data: pgpointer){.cdecl.} = 
+  gtk_main_quit()
+
+var 
+  window, stackbox, label1, Label2: PGtkWidget
+  labelstyle: pgtkstyle
+
+gtk_nimrod_init()
+window = gtk_window_new(GTK_WINDOW_TOPLEVEL)
+stackbox = gtk_vbox_new(TRUE, 10)
+label1 = gtk_label_new("Red label text")
+labelstyle = gtk_style_copy(gtk_widget_get_style(label1))
+LabelStyle.fg[GTK_STATE_NORMAL].pixel = 0
+LabelStyle.fg[GTK_STATE_NORMAL].red = 0x0000FFFF
+LabelStyle.fg[GTK_STATE_NORMAL].blue = 0
+LabelStyle.fg[GTK_STATE_NORMAL].green = 0
+gtk_widget_set_style(label1, labelstyle) # Uncomment this to see the effect of setting the default style.
+                                         # 
+                                         # gtk_widget_set_default_style(labelstyle)
+label2 = gtk_label_new("Black label text")
+gtk_box_pack_start(GTK_BOX(stackbox), label1, TRUE, TRUE, 0)
+gtk_box_pack_start(GTK_BOX(stackbox), label2, TRUE, TRUE, 0)
+gtk_container_set_border_width(GTK_CONTAINER(Window), 5)
+gtk_container_add(GTK_Container(window), stackbox)
+discard gtk_signal_connect(GTKOBJECT(window), "destroy", 
+                   GTK_SIGNAL_FUNC(destroy), nil)
+gtk_widget_show_all(window)
+gtk_main()
diff --git a/examples/gtk/ex9.nim b/examples/gtk/ex9.nim
new file mode 100644
index 000000000..ce2f73862
--- /dev/null
+++ b/examples/gtk/ex9.nim
@@ -0,0 +1,47 @@
+
+import 
+  gdk2, glib2, gtk2
+
+proc destroy(widget: pGtkWidget, data: pgpointer){.cdecl.} = 
+  gtk_main_quit()
+
+const 
+  Inside: cstring = "Mouse is over label"
+  OutSide: cstring = "Mouse is not over label"
+
+var 
+  window, button1, Button2, Alabel, stackbox: PGtkWidget
+  buttonstyle: pgtkstyle
+  OverButton: bool
+
+proc ChangeLabel(P: PGtkWidget, Event: PGdkEventCrossing, Data: var bool){.cdecl.} = 
+  if Not Data: gtk_label_set_text(GTKLABEL(ALabel), Inside)
+  else: gtk_label_set_text(GTKLABEL(ALabel), Outside)
+  Data = Not Data
+
+gtk_nimrod_init()
+window = gtk_window_new(GTK_WINDOW_TOPLEVEL)
+stackbox = gtk_vbox_new(TRUE, 10)
+button1 = gtk_button_new_with_label("Move mouse over button")
+buttonstyle = gtk_style_copy(gtk_widget_get_style(Button1))
+ButtonStyle.bg[GTK_STATE_PRELIGHT].pixel = 0
+ButtonStyle.bg[GTK_STATE_PRELIGHT].red = 0x0000FFFF'i16
+ButtonStyle.bg[GTK_STATE_PRELIGHT].blue = 0'i16
+ButtonStyle.bg[GTK_STATE_PRELIGHT].green = 0'i16
+gtk_widget_set_style(button1, buttonstyle)
+button2 = gtk_button_new()
+ALabel = gtk_label_new(Outside)
+gtk_container_add(GTK_CONTAINER(button2), ALAbel)
+gtk_box_pack_start(GTK_BOX(stackbox), button1, TRUE, TRUE, 0)
+gtk_box_pack_start(GTK_BOX(stackbox), button2, TRUE, TRUE, 0)
+gtk_container_set_border_width(GTK_CONTAINER(Window), 5)
+gtk_container_add(GTK_Container(window), stackbox)
+discard gtk_signal_connect(GTKOBJECT(window), "destroy", 
+                   GTK_SIGNAL_FUNC(destroy), nil)
+overbutton = False
+discard gtk_signal_connect(GTKOBJECT(button1), "enter_notify_event", 
+                   GTK_SIGNAL_FUNC(ChangeLabel), addr(OverButton))
+discard gtk_signal_connect(GTKOBJECT(button1), "leave_notify_event", 
+                   GTK_SIGNAL_FUNC(ChangeLabel), addr(OverButton))
+gtk_widget_show_all(window)
+gtk_main()
diff --git a/examples/sdlex.nim b/examples/sdlex.nim
new file mode 100644
index 000000000..ae7f1b41e
--- /dev/null
+++ b/examples/sdlex.nim
@@ -0,0 +1,26 @@
+# Test the SDL interface:

+

+import

+  SDL

+

+var

+  screen, greeting: PSDL_Surface

+  r: TSDL_Rect

+

+if SDL_Init(SDL_INIT_VIDEO) == 0:

+  screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE or SDL_ANYFORMAT)

+  if screen == nil:

+    write(stdout, "screen is nil!\n")

+  else:

+    greeting = SDL_LoadBmp("backgrnd.bmp")

+    if greeting == nil:

+      write(stdout, "greeting is nil!")

+    r.x = 0'i16

+    r.y = 0'i16

+    discard SDL_blitSurface(greeting, nil, screen, addr(r))

+    discard SDL_flip(screen)

+    SDL_Delay(3000)

+else:

+  write(stdout, "SDL_Init failed!\n")

+

+SDL_Quit()

diff --git a/examples/wingui.nim b/examples/wingui.nim
new file mode 100644
index 000000000..f4941bcc7
--- /dev/null
+++ b/examples/wingui.nim
@@ -0,0 +1,9 @@
+# test a Windows GUI application
+
+import
+  windows, shellapi, nb30, mmsystem, shfolder
+
+#proc MessageBox(hWnd: int, lpText, lpCaption: CString, uType: uint): int
+#  {stdcall, import: "MessageBox", header: "<windows.h>"}
+
+discard MessageBox(0, "Hallo World!", "Nimrod GUI application", 0)
diff --git a/examples/x11ex.nim b/examples/x11ex.nim
new file mode 100644
index 000000000..db51df2e0
--- /dev/null
+++ b/examples/x11ex.nim
@@ -0,0 +1,71 @@
+import xlib, xutil, x, keysym
+
+const
+  WINDOW_WIDTH = 400
+  WINDOW_HEIGHT = 300
+  
+var
+  width, height: int
+  display: PDisplay
+  screen: cint
+  depth: int
+  win: TWindow
+  sizeHints: TXSizeHints
+
+proc create_window = 
+  width = WINDOW_WIDTH
+  height = WINDOW_HEIGHT
+
+  display = XOpenDisplay(nil)
+  if display == nil:
+    echo("Verbindung zum X-Server fehlgeschlagen")
+    quit(1)
+
+  screen = XDefaultScreen(display)
+  depth = XDefaultDepth(display, screen)
+  var rootwin = XRootWindow(display, screen)
+  win = XCreateSimpleWindow(display, rootwin, 100, 10,
+                            width, height, 5,
+                            XBlackPixel(display, screen),
+                            XWhitePixel(display, screen))
+  size_hints.flags = PSize or PMinSize or PMaxSize
+  size_hints.min_width =  width
+  size_hints.max_width =  width
+  size_hints.min_height = height
+  size_hints.max_height = height
+  discard XSetStandardProperties(display, win, "Simple Window", "window",
+                         0, nil, 0, addr(size_hints))
+  discard XSelectInput(display, win, ButtonPressMask or KeyPressMask or 
+                                     PointerMotionMask)
+  discard XMapWindow(display, win)
+
+proc close_window =
+  discard XDestroyWindow(display, win)
+  discard XCloseDisplay(display)
+    
+var
+  xev: TXEvent
+
+proc process_event =
+  var key: TKeySym
+  case int(xev.theType)
+  of KeyPress:
+    key = XLookupKeysym(cast[ptr TXKeyEvent](addr(xev)), 0)
+    if key != 0:
+      echo("keyboard event")
+  of ButtonPressMask, PointerMotionMask:
+    Echo("Mouse event")
+  else: nil
+
+proc eventloop =
+  discard XFlush(display)
+  var num_events = int(XPending(display))
+  while num_events != 0:
+    dec(num_events)
+    discard XNextEvent(display, addr(xev))
+    process_event()
+
+create_window()
+while true:
+  eventloop()
+close_window()