From c8ed5c850bba590c598c4b75c6d6111f68d75bbd Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Tue, 5 Sep 2006 13:49:26 +0000 Subject: [PATCH] Text demo extended to show cursor position Organization: Straylight/Edgeware From: espen --- examples/testgtk.lisp | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/examples/testgtk.lisp b/examples/testgtk.lisp index 24ae111..915bba3 100644 --- a/examples/testgtk.lisp +++ b/examples/testgtk.lisp @@ -26,7 +26,7 @@ ;; Kimball, Josh MacDonald and others. -;; $Id: testgtk.lisp,v 1.35 2006-04-26 14:59:50 espen Exp $ +;; $Id: testgtk.lisp,v 1.36 2006-09-05 13:49:26 espen Exp $ #+sbcl(require :gtk) #+(or cmu clisp)(asdf:oos 'asdf:load-op :gtk) @@ -1617,7 +1617,34 @@ (define-simple-dialog create-text (dialog "Text" :default-width 400 :after t) (container-add dialog (ui-manager-get-widget ui "/ToolBar") :expand nil) - (container-add dialog text-view))))) + (container-add dialog text-view) + + (let ((position (make-instance 'label :visible t))) + (flet ((update-position (line column) + (setf + (label-label position) + (format nil "Cursor Position: ~d,~d" (1+ line) column)))) + (update-position 0 0) + + ;; Callback to display current position when cursor is moved + (signal-connect buffer 'mark-set + #'(lambda (iter mark) + (when (and + (slot-boundp mark 'name) + (string= (text-mark-name mark) "insert")) + (update-position + (text-iter-line iter) (text-iter-line-offset iter))))) + + ;; Callback to display current position after the + ;; buffer has been modified + (signal-connect buffer 'changed + #'(lambda () + (let ((iter (text-buffer-get-iter-at-insert buffer))) + (update-position + (text-iter-line iter) (text-iter-line-offset iter)))) + :after t)) + + (container-add dialog position :expand nil)))))) ;;; Toggle buttons -- [mdw]