Update of /project/cells/cvsroot/Celtk
In directory clnet:/tmp/cvs-serv25230
Modified Files:
gears.lisp
Added Files:
multichoice.lisp run.lisp scroll.lisp text-item.lisp
timer.lisp tk-interp.lisp tk-object.lisp togl.lisp widget.lisp
Log Message:
Missing pieces from last night's incomplete update.
--- /project/cells/cvsroot/Celtk/gears.lisp 2006/05/02 06:57:22 1.1
+++ /project/cells/cvsroot/Celtk/gears.lisp 2006/05/02 12:48:05 1.2
@@ -1,6 +1,68 @@
(in-package :celtk)
+(in-package :celtk)
+
+(defparameter *startx* nil)
+(defparameter *starty* nil)
+(defparameter *xangle0* nil)
+(defparameter *yangle0* nil)
+(defparameter *xangle* 0.0)
+(defparameter *yangle* 0.0)
+
+(defparameter *vTime* 100)
+
+(defun gears () ;; ACL project manager needs a zero-argument function, in project package
+ (test-window 'gears-demo))
+
+
+(defmodel gears-demo (window)
+ ((gear-ct :initform (c-in 1) :accessor gear-ct :initarg :gear-ct)
+ (scale :initform (c-in 1) :accessor scale :initarg :scale))
+ (:default-initargs
+ :title$ "Rotating Gear Widget Test"
+ :kids (c? (the-kids
+ (mk-stack (:packing (c?pack-self))
+ (mk-label :text "Click and drag to rotate image")
+ #+tki (mk-row ()
+ (mk-button-ex (" Add " (incf (gear-ct .tkw))))
+ (mk-button-ex ("Remove" (when (plusp (gear-ct .tkw))
+ (decf (gear-ct .tkw)))))
+ (mk-entry :id :vtime
+ :md-value (c-in "100"))
+ (mk-button-ex (" Quit " (progn))))
+ (make-instance 'gears
+ :fm-parent *parent*
+ :width 400
+ :height 400
+ :timer-interval nil #+tki (c? (or .cache ;; comment out just ".cache" for some fun
+ (eko ("vtime is")
+ (md-value (fm-other :vtime)))))
+ :double "yes"
+ :bindings nil #+wait (c? (list
+ (list "<Button-1>"
+ (lambda (event)
+ (RotStart self
+ (event-root-x event)
+ (event-root-y event))))
+ (list "<B1-Motion>"
+ (lambda (event)
+ (RotMove self
+ (event-root-x event)
+ (event-root-y event))) )))))))))
+
+(defun RotStart (self x y)
+ (setf *startx* x)
+ (setf *starty* y)
+ (let ((vPos (tk-eval-list "~a position" (^path)))) ;; this fails for me -- command not recognized, it seems
+ (trc "got vpos" vpos)
+ (setf *xangle0* (read-from-string (nth 0 vpos)))
+ (setf *yangle0* (read-from-string (nth 1 vpos)))))
+
+(defun RotMove (self x y)
+ (setf *xangle* (+ *xangle0* (- x *startx*)))
+ (setf *yangle* (+ *yangle0* (- y *starty*)))
+ (tk-format-now "~a rotate ~a ~a" (^path) *xangle* *yangle*))
(defconstant +pif+ (coerce pi 'single-float))
(defmodel gears (togl)
--- /project/cells/cvsroot/Celtk/multichoice.lisp 2006/05/02 12:48:05 NONE
+++ /project/cells/cvsroot/Celtk/multichoice.lisp 2006/05/02 12:48:05 1.1
;; -*- mode: Lisp; Syntax: Common-Lisp; Package: celtk; -*-
;;;
;;; Copyright (c) 2006 by Kenneth William Tilton.
;;;
;;; Permission is hereby granted, free of charge, to any person obtaining a copy
;;; of this software and associated documentation files (the "Software"), to deal
;;; in the Software without restriction, including without limitation the rights
;;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
;;; copies of the Software, and to permit persons to whom the Software is furnished
;;; to do so, subject to the following conditions:
;;;
;;; The above copyright notice and this permission notice shall be included in
;;; all copies or substantial portions of the Software.
;;;
;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
;;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
;;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
;;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
;;; IN THE SOFTWARE.
; --- scale ----------------------------------------------
(in-package :Celtk)
(deftk scale (commander widget)
()
(:tk-spec scale
-activestyle -background -borderwidth -cursor
-font -foreground
-highlightbackground -highlightcolor -highlightthickness
-relief -state
-takefocus -troughcolor -width -xscrollcommand -yscrollcommand
-orient -repeatdelay
-repeatinterval
-bigincrement -command -digits -from
(-tk-label -label) (-tk-length -length) -resolution
-showvalue -sliderlength -sliderrelief
-tickinterval -to (-tk-variable nil))
(:default-initargs
:id (gentemp "SCL")
:md-value (c-in nil)
:tk-variable nil ;;(c? (^path))
:xscrollcommand (c-in nil)
:yscrollcommand (c-in nil)
:on-command (lambda (self value)
(setf (^md-value) value))))
(defmethod make-tk-instance :after ((self scale))
"Still necessary?"
(when (^md-value)
(tk-format `(:variable ,self) "~a set ~a" (^path) (^md-value))))
; --- listbox --------------------------------------------------------------
(deftk listbox (widget)
()
(:tk-spec listbox
-activestyle -background -borderwidth -cursor
-disabledforeground -exportselection -font -foreground
-height -highlightbackground -highlightcolor -highlightthickness
-listvariable -relief -selectmode -selectbackground
-selectborderwidth -selectforeground -setgrid -state
-takefocus -width -xscrollcommand -yscrollcommand)
(:default-initargs
:id (gentemp "LBX")
:xscrollcommand (c-in nil)
:yscrollcommand (c-in nil)
:bindings (c? (assert (selector self))
(when (selector self) ;; if not? Figure out how listbox tracks own selection
(list (list "<<ListboxSelect>>"
(format nil "{callbackval ~~a [~a curselection]}" (^path))
(lambda (selection)
(trc nil "listbox callback firing" self selection)
(setf (selection (selector self))
(md-value (elt (^kids) selection))))))))))
(defmodel listbox-item (tk-object)
((item-text :initarg :item-text :accessor item-text
:initform (c? (format nil "~a" (^md-value))))))
(defmethod make-tk-instance ((self listbox-item))
(tk-format `(:post-make-tk ,self) "~A insert end ~s" (path .parent) (^item-text)))
(defobserver .kids ((self listbox))
(when old-value
(tk-format `(:destroy ,self) "~A delete ~a ~a"
(^path)
0 (1- (length old-value)))))
; --- spinbox ---------------------------------------------
(deftk spinbox (widget)
((initial-value :initform nil :initarg :initial-value :reader initial-value))
(:tk-spec spinbox
-activebackground -background -borderwidth -cursor
-buttonbackground -buttoncursor -buttondownrelief -buttonuprelief
-disabledforeground -disabledbackground -exportselection
-font (spin-format -format) -foreground -from
-command -invalidcommand -increment
-highlightbackground -highlightcolor -highlightthickness
-insertbackground -insertborderwidth -insertofftime -insertontime
-insertwidth -jump -justify -orient
-padx -pady -relief -repeatdelay
-repeatinterval -selectbackground -selectborderwidth -selectforeground
-readonlybackground -state -to
-takefocus -text -textvariable
-troughcolor -underline -xscrollcommand
-validate -validatecommand (tk-values -values) -width -wrap)
(:default-initargs
:md-value (c-in nil)
:id (gentemp "SPN")
:textVariable (c? (^path))
:xscrollcommand (c-in nil)
:on-command (lambda (self text)
(eko (nil "variable mirror command fired !!!!!!!" text)
(setf (^md-value) text)))))
(defobserver .md-value ((self spinbox))
(when new-value
(tk-format `(:variable ,self) "set ~a ~a" (^path) (tk-send-value new-value))))
(defobserver initial-value ((self spinbox))
(when new-value
(with-integrity (:change)
(trc "spinbox intializing from initvalue !!!!!!!!!!!!" self new-value)
(setf (^md-value) new-value))))
--- /project/cells/cvsroot/Celtk/run.lisp 2006/05/02 12:48:05 NONE
+++ /project/cells/cvsroot/Celtk/run.lisp 2006/05/02 12:48:05 1.1
;; -*- mode: Lisp; Syntax: Common-Lisp; Package: celtk; -*-
;;;
;;; Copyright (c) 2006 by Kenneth William Tilton.
;;;
;;; Permission is hereby granted, free of charge, to any person obtaining a copy
;;; of this software and associated documentation files (the "Software"), to deal
;;; in the Software without restriction, including without limitation the rights
;;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
;;; copies of the Software, and to permit persons to whom the Software is furnished
;;; to do so, subject to the following conditions:
;;;
;;; The above copyright notice and this permission notice shall be included in
;;; all copies or substantial portions of the Software.
;;;
;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
;;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
;;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
;;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
;;; IN THE SOFTWARE.
(in-package :Celtk)
;;; --- running a Celtk application (window class, actually) --------------------------------------
(eval-when (compile load eval)
(export '(tk-scaling run-window test-window)))
(defun run-window (root-class)
(declare (ignorable root-class))
(setf *tkw* nil)
(cells-reset 'tk-user-queue-handler)
(tk-interp-init-ensure)
(setf *tki* (Tcl_CreateInterp))
(tk-app-init *tki*)
(tk-togl-init *tki*)
#+soon (tk-format-now "proc trc2 {cb n1 n2 op} {puts \"(:callback \\\"$cb\\\" :name1 $n1 :name2 \\\"$n2\\\" :op $op)\"}")
(tk-format-now "set tk-events {}")
(tk-format-now "proc call-back {w args} {
global tk-events
lappend tk-events [concat do-on-command $w $args]}")
;; deadly (takes down ACL) -> (tk-format-now "bind . <Escape> exit")
(with-integrity ()
(setf *tkw* (make-instance root-class)))
(tk-format `(:fini) "wm deiconify .")
;; one or the other of...
;; hangs on win close now, but probably easy to fix, just needs to know when
;; to stop looping: -> (tcl-do-one-event-loop)
(tcl-do-one-event-loop)
)
;; Our own event loop ! - Use this if it is desirable to do something
;; else between events
(defun tcl-do-one-event-loop ()
(loop with start-time = (get-internal-real-time)
while (> 10 (floor (- (get-internal-real-time) start-time) internal-time-units-per-second))
do
(bif (events (prog1
(tk-eval-list "set tk-events")
(tk-eval "set tk-events {}")))
(loop ;; with x = (trc "no events")
for e in events
do (setf start-time (get-internal-real-time))
(tk-process-event e))
(sleep .05)) ;;*event-loop-delay*))
(loop until (zerop (Tcl_DoOneEvent 2)))))
(defun tk-process-event (event)
(trc "event string:" event)
(destructuring-bind (fn w-name &rest args)
(read-from-string (conc$ "(" event ")"))
(let ((id (symbol-name w-name)))
(bif (w (gethash id (dictionary *tkw*)))
(progn (trc "funcalling" fn w)
(apply fn w args))
(progn
(loop for k being the hash-keys of (dictionary *tkw*)
do (trc "known key" k (type-of k)))
(break "bad id ~a in event ~a" id event))))))
(defmethod do-on-command :around (self &rest args)
(trc "on command!!!" self)
(bwhen (ocb (on-command self))
(apply ocb self args)))
(defun test-window (root-class)
"nails existing window as a convenience in iterative development"
(declare (ignorable root-class))
#+tki (when (and *tkw* (open-stream-p *tkw*))
(format *tkw* "wm withdraw .~%")
(force-output *tkw*)
(format *tkw* "destroy .%")
(force-output *tkw*)
(setf *tkw* nil))
(run-window root-class))--- /project/cells/cvsroot/Celtk/scroll.lisp 2006/05/02 12:48:05 NONE
+++ /project/cells/cvsroot/Celtk/scroll.lisp 2006/05/02 12:48:05 1.1
;; -*- mode: Lisp; Syntax: Common-Lisp; Package: celtk; -*-
;;;
;;; Copyright (c) 2006 by Kenneth William Tilton.
;;;
;;; Permission is hereby granted, free of charge, to any person obtaining a copy
;;; of this software and associated documentation files (the "Software"), to deal
;;; in the Software without restriction, including without limitation the rights
;;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
;;; copies of the Software, and to permit persons to whom the Software is furnished
;;; to do so, subject to the following conditions:
;;;
;;; The above copyright notice and this permission notice shall be included in
;;; all copies or substantial portions of the Software.
;;;
;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
;;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
;;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
;;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
;;; IN THE SOFTWARE.
(in-package :Celtk)
; --- scroll bars ----------------------------------------
(deftk scrollbar (widget)
()
(:tk-spec scrollbar
-activebackground -activerelief
-background -borderwidth -command -cursor
-elementborderwidth
-highlightbackground -highlightcolor -highlightthickness
-jump -orient -relief -repeatdelay
-repeatinterval -takefocus
-troughcolor -width)
(:default-initargs
:id (gentemp "SBAR")))
(deftk scrolled-list (row-mixin frame-selector)
((list-item-keys :initarg :list-item-keys :accessor list-item-keys :initform nil)
(list-item-factory :initarg :list-item-factory :accessor list-item-factory :initform nil)
(list-height :initarg :list-height :accessor list-height :initform nil))
(:default-initargs
:list-height (c? (max 1 (length (^list-item-keys))))
:kids-packing nil
:kids (c? (the-kids
(mk-listbox :id :list-me
:kids (c? (the-kids
(mapcar (list-item-factory .parent)
(list-item-keys .parent))))
:font '(courier 9)
:state (c? (if (enabled .parent) 'normal 'disabled))
:takefocus (c? (if (enabled .parent) 1 0))
:height (c? (list-height .parent))
:packing (c? (format nil "pack ~a -side left -fill both -expand 1" (^path)))
:yscrollcommand (c? (when (enabled .parent)
(format nil "~a set" (path (nsib))))))
(mk-scrollbar :id :vscroll
:packing (c?pack-self "-side right -fill y")
:command (c? (format nil "~a yview" (path (psib)))))))))
(defmethod tk-output-selection :after ((self scrolled-list) new-value old-value old-value-boundp)
(declare (ignorable old-value old-value-boundp))
(trc nil "scrolled-list selection output" self new-value)
(when new-value
(let ((lb (car (^kids)))
(item-no (position new-value (^list-item-keys) :test 'equal)))
(if item-no
(tk-format `(:selection ,self) "~(~a~) selection set ~a" (path lb) item-no)
(break "~&scrolled-list ~a selection ~a not found in item keys ~a" self new-value (^list-item-keys))))))
;--- scroller (of canvas; need to generalize this) ----------
(defmodel scroller (grid-manager frame)
((canvas :initarg :canvas :accessor canvas :initform nil))
(:default-initargs
:id :cv-scroller
:kids-packing nil
:gridding '(:columns ("-weight {1}" "-weight {0}")
:rows ("-weight {1}" "-weight {0}"))
:kids (c? (the-kids
(^canvas)
(mk-scrollbar :id :hscroll
:orient "horizontal"
:gridding "-row 1 -column 0 -sticky we"
:command (c? (format nil "~a xview" (path (kid1 .parent)))))
[19 lines skipped]
--- /project/cells/cvsroot/Celtk/text-item.lisp 2006/05/02 12:48:05 NONE
+++ /project/cells/cvsroot/Celtk/text-item.lisp 2006/05/02 12:48:05 1.1
[65 lines skipped]
--- /project/cells/cvsroot/Celtk/timer.lisp 2006/05/02 12:48:05 NONE
+++ /project/cells/cvsroot/Celtk/timer.lisp 2006/05/02 12:48:05 1.1
[170 lines skipped]
--- /project/cells/cvsroot/Celtk/tk-interp.lisp 2006/05/02 12:48:05 NONE
+++ /project/cells/cvsroot/Celtk/tk-interp.lisp 2006/05/02 12:48:05 1.1
[666 lines skipped]
--- /project/cells/cvsroot/Celtk/tk-object.lisp 2006/05/02 12:48:05 NONE
+++ /project/cells/cvsroot/Celtk/tk-object.lisp 2006/05/02 12:48:05 1.1
[774 lines skipped]
--- /project/cells/cvsroot/Celtk/togl.lisp 2006/05/02 12:48:05 NONE
+++ /project/cells/cvsroot/Celtk/togl.lisp 2006/05/02 12:48:05 1.1
[922 lines skipped]
--- /project/cells/cvsroot/Celtk/widget.lisp 2006/05/02 12:48:05 NONE
+++ /project/cells/cvsroot/Celtk/widget.lisp 2006/05/02 12:48:05 1.1
[1155 lines skipped]