From: espen Date: Tue, 5 Sep 2006 13:49:26 +0000 (+0000) Subject: Text demo extended to show cursor position X-Git-Tag: clg-0-93~254 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/clg/commitdiff_plain/b3894ce7d2e8ea213991f530472058e62f151437?ds=sidebyside Text demo extended to show cursor position --- diff --git a/examples/testgtk.lisp b/examples/testgtk.lisp index 57fb735..68342d7 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