From fc7876a4cf659824a1a6d040b12b9e769f8bc99e Mon Sep 17 00:00:00 2001 From: Dmitry Kalyanov Date: Wed, 22 Apr 2009 18:46:23 +0400 Subject: [PATCH] more work on tutorial --- doc/lisp_ide.png | Bin 0 -> 28735 bytes doc/tutorial.xml | 22 +++++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 doc/lisp_ide.png diff --git a/doc/lisp_ide.png b/doc/lisp_ide.png new file mode 100644 index 0000000000000000000000000000000000000000..561ca78a134181cfc67443a179eb98da6866df5b GIT binary patch literal 28735 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 Kalyanov + Kalyanov.Dmitry@gmail.com
@@ -18,12 +19,30 @@
Installation + CL-GTK2 is in alpha stage and is unstable and not feature-complete. It is being developed on x86-64 gentoo linux with SBCL. It should, in general, work with other lisp compilers and on other platforms. CL-GTK2 requires some features not present in the Common Lisp Standard, namely it requires CFFI support with callbacks and long-long support (most modern lisp implementations are supported, including clisp) and it requires CLOS MOP (MetaObject Protocol) which is also is present (or is being added to) most modern lisp implementations. + If you have any difficulties installing or using CL-GTK2, contact me (the author of this tutorial and of CL-GTK2) via email Kalyanov.Dmitry@gmail.com or via jabber mo3r@jabber.ru. + First, install CL-GTK2 dependcies. CL-GTK2 has the following dependencies: + + CFFI + Trivial-Garbage + Metabang-Bind + Iterate + Anaphora + Bordeaux-Threads + Closer-MOP + + Currently, CL-GTK2 is only available in Git repository at http://repo.or.cz/w/cl-gtk2.git. If you do not want or can not to use Git, download the snapshot from http://repo.or.cz/w/cl-gtk2.git?a=snapshot;h=HEAD;sf=tgz. Unpack the CL-GTK2 sources, and add them to asdf:*central-registry*: (push "/path/to/cl-gtk2/glib/" asdf:*central-registry*) (push "/path/to/cl-gtk2/gdk/" asdf:*central-registry*) (push "/path/to/cl-gtk2/gtk/" asdf:*central-registry*) + Now you should be able to load the CL-GTK2: + (asdf:oos 'asdf:load-op :gtk) + When the system is loaded, run (gtk-demo:demo-text-editor). A text editor window should pop up: + + This is a very simple text editor written in CL-GTK2. Apart from editing the text, it can evaluate expressions: select expression and press the "execute" button. Expression will be evaluated and its result will be put into text view.
"Hello world" example @@ -69,7 +88,8 @@ Let's analyze the example step by step. CL-GTK2 runs the Gtk main loop in background thread. This is done so you could have your application running and interacting with the Lisp system through the REPL. To execute some code and ensure that Gtk+ main loop is started, WITH-MAIN-LOOP macro is used. It runs the body of code within the Gtk+ main loop. Because all calls to Gtk+ functions require locking, it is neccessary to run this code from th main loop. Because we are running the code in another thread, its dynamic bindings (including *standard-output*) will be lost. To be able to print at REPL, we save reference to the standard output stream in the closure. - Gtk+ objects are created with make-instance and are properly garbage-collected. Some properties (slots) of objects are constructor-only properties and can only be set at object construction time. For example, "type" property of GtkWindow can only be set during its creation. + Gtk+ objects are created with make-instance and are properly garbage-collected. + Object have properties, which are represented as slots in CL-GTK2. Some properties (slots) of objects are constructor-only properties and can only be set at object construction time. For example, "type" property of GtkWindow can only be set during its creation. To access properties, you may use slot-value function or slot accessor methods. For property Y declared on class X, method X-Y returns the value of the property. Properties are setfable (with exception of read-only and constructor-only properties). Call to container-add puts button as a child widget into window, and widget-show shows all widgets of window. In Gtk+, objects have "signals", to which handlers can be attached. When something happens that results in "emitting" the signal (e.g., button being clicked emits "clicked" signal), all handlers of this signal are called. Handler of GtkButton's "clicked" signal has only one argument - the button that was clicked. CL-GTK2 allows attaching any function (including closures) as signal handlers and ensures that closure is freed properly.
-- 1.7.10.4