[cl-gtk2-devel] Tictactoe
Timofey Misarenkov
rgo at interzet.ru
Fri Aug 17 11:03:25 UTC 2012
Hi.
I plaing around cl-gtk2, and tried to code tictactoe example from gtk-tutorial. I have some success and below the code showing it. But one question remains: how can I define new signal? In the original code, in tictactoe_class_init function there are lines:
tictactoe_signals[TICTACTOE_SIGNAL] = g_signal_new ("tictactoe",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (TictactoeClass, tictactoe),
NULL,
NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
Is it possible to rewrite this lines on cl-gtk2?
Here the already working code (without signal creation):
(require :cl-gtk2-gtk)
(defclass tictactoe (gtk:table)
((buttons :initform (make-array '(3 3)) :accessor ttt-buttons))
(:metaclass gobject:gobject-class))
(gobject:register-object-type-implementation "tictactoe-class"
tictactoe
"GtkTable"
nil nil)
(defmethod initialize-instance :after ((ttt tictactoe) &rest initargs)
(setf
(gtk:table-n-columns ttt) 3
(gtk:table-n-rows ttt) 3
(gtk:table-homogeneous ttt) t)
(loop
for i from 0 below 3
do (loop
for j from 0 below 3
do (setf (aref (ttt-buttons ttt) i j)
(let ((b (make-instance 'gtk:toggle-button)))
(gtk:table-attach ttt b i (1+ i) j (1+ j))
(gobject:g-signal-connect b "toggled"
#'(lambda (b)
(declare (ignore b))
(format t "Button toggled~%")))
(setf
(gtk:widget-height-request b) 20
(gtk:widget-width-request b) 20)
(gtk:widget-show b)
b)))))
(gtk:within-main-loop
(let ((window (make-instance 'gtk:gtk-window
:type :toplevel
:window-position :center
:title "Tictactoe"))
(ttt (make-instance 'tictactoe)))
(gtk:container-add window ttt)
(gtk:widget-show window)))
--
Timofey Misarenkov <rgo at interzet.ru>
More information about the cl-gtk2-devel
mailing list