home *** CD-ROM | disk | FTP | other *** search
- (in-package :oou)
- (oou-provide :te-view)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; te-view.lisp
- ;;
- ;; Copyright ⌐ 1992 Northwestern University Institute for the Learning Sciences
- ;; All Rights Reserved
- ;;
- ;; author: Cliff Chaput
- ;;
- ;; View containing te-di and scrollbars
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (oou-dependencies :te-dim
- :draggable-svm
- :frame-svm)
-
- (export '(te-view
- te-set-font te-selection te-set-selection
- te-set-text-rsrc te-save-text-rsrc te-string
- ))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defclass te-item (te-dim dialog-item) ())
-
- (defclass te-view (frame-svm view)
- ((te-item :accessor te-item)
- (te-v-scroll-bar :accessor te-v-scroll-bar)
- (te-h-scroll-bar :accessor te-h-scroll-bar)
- (te-v-scroll-bar-p :initarg :te-v-scroll-bar-p
- :accessor te-v-scroll-bar-p)
- (te-h-scroll-bar-p :initarg :te-h-scroll-bar-p
- :accessor te-h-scroll-bar-p)
- (te-scroll-bar-width :accessor te-scroll-bar-width
- :initarg :te-scroll-bar-width)
- (te-init-string :initarg :te-init-string
- :initarg :dialog-item-text
- :accessor te-init-string)
- (te-init-rsrc :initarg :te-init-rsrc
- :accessor te-init-rsrc)
- (te-word-wrap-p :accessor te-word-wrap-p
- :initarg :te-word-wrap-p)
- (te-read-only-p :accessor te-read-only-p
- :initarg :te-read-only-p)
- (te-h-margin :accessor te-h-margin
- :initarg :te-h-margin))
- (:default-initargs
- :te-init-string "The horror╔"
- :te-word-wrap-p t
- :te-read-only-p nil
- :te-v-scroll-bar-p t
- :te-h-scroll-bar-p nil
- :te-scroll-bar-width 16
- :te-h-margin 1
- ))
-
-
- (defmethod initialize-instance :after ((self te-view) &rest initargs)
- (declare (ignore initargs))
- (when (te-v-scroll-bar-p self)
- (multiple-value-bind (pos width length) (v-scroll-dimensions self)
- (setf (te-v-scroll-bar self)
- (make-instance 'scroll-bar-dialog-item
- :view-container self
- :view-position pos
- :width width
- :length length
- :view-nick-name :te-item-v-scroll))))
-
- (when (te-h-scroll-bar-p self)
- (multiple-value-bind (pos width length) (h-scroll-dimensions self)
- (setf (te-h-scroll-bar self)
- (make-instance 'scroll-bar-dialog-item
- :direction :horizontal
- :view-container self
- :view-position pos
- :width length
- :length width
- :view-nick-name :te-item-h-scroll))))
-
- (setf (te-item self) (create-te-item self)))
-
-
- (defmethod set-view-size :after ((self te-view) h &optional v)
- (declare (ignore h v))
-
- (set-view-size (te-item self) (te-item-size self))
-
- (when (slot-boundp self 'te-v-scroll-bar)
- (multiple-value-bind (pos width length) (v-scroll-dimensions self)
- (set-view-position (te-v-scroll-bar self) pos)
- (set-scroll-bar-width (te-v-scroll-bar self) width)
- (set-scroll-bar-length (te-v-scroll-bar self) length)))
-
- (when (slot-boundp self 'te-h-scroll-bar)
- (multiple-value-bind (pos width length) (h-scroll-dimensions self)
- (set-view-position (te-h-scroll-bar self) pos)
- (set-scroll-bar-width (te-h-scroll-bar self) length)
- (set-scroll-bar-length (te-h-scroll-bar self) width))))
-
-
- (defmethod v-scroll-dimensions ((self te-view))
- (values
- (make-point (- (point-h (view-size self)) (te-scroll-bar-width self)) 0)
- (te-scroll-bar-width self)
- (if (te-h-scroll-bar-p self)
- (- (point-v (view-size self)) (te-scroll-bar-width self) -1)
- (point-v (view-size self)))))
-
-
- (defmethod h-scroll-dimensions ((self te-view))
- (values
- (make-point 0 (- (point-v (view-size self)) (te-scroll-bar-width self)))
- (if (te-v-scroll-bar-p self)
- (- (point-h (view-size self)) (te-scroll-bar-width self) -1)
- (point-h (view-size self)))
- (te-scroll-bar-width self)))
-
-
- (defmethod create-te-item ((self te-view))
- (let* ((h-scroll-bar (when (te-h-scroll-bar-p self)
- (list :te-h-scroll-bar :te-item-h-scroll)))
- (v-scroll-bar (when (te-v-scroll-bar-p self)
- (list :te-v-scroll-bar :te-item-v-scroll)))
- (init-rsrc (when (slot-boundp self 'te-init-rsrc)
- (list :te-init-rsrc (te-init-rsrc self))))
- (final-args `(,@h-scroll-bar ,@v-scroll-bar ,@init-rsrc)))
-
- (apply #'make-instance 'te-item
- :te-init-string (te-init-string self)
- :allow-returns t
- :te-word-wrap-p (te-word-wrap-p self)
- :te-read-only-p (te-read-only-p self)
- :view-container self
- :view-position (make-point (te-h-margin self) 1)
- :view-size (te-item-size self)
- :view-nick-name :te-item
- final-args)))
-
-
- (defmethod te-item-size ((self te-view))
- (subtract-points (view-size self)
- (make-point
- (+ (if (te-v-scroll-bar-p self) (te-scroll-bar-width self) 0) (* 2 (te-h-margin self)))
- (+ (if (te-h-scroll-bar-p self) (te-scroll-bar-width self) 1) 1))))
-
-
- ;;;Duplicated methods that just call the same methods on the te-item
-
- (defmethod te-save-text-rsrc ((self te-view) &key rsrc-id rsrc-name)
- (te-save-text-rsrc (te-item self) :rsrc-id rsrc-id :rsrc-name rsrc-name))
-
- (defmethod te-set-text-rsrc ((self te-view) rsrc-id-or-name)
- (te-set-text-rsrc (te-item self) rsrc-id-or-name))
-
- (defmethod te-set-font ((self te-view) font-spec &key (font-color *black-color*) (mode #$doAll))
- (te-set-font (te-item self) font-spec :font-color font-color :mode mode))
-
- (defmethod te-selection ((self te-view))
- (te-selection (te-item self)))
-
- (defmethod te-set-selection ((self te-view) sel-start sel-end)
- (te-set-selection (te-item self) sel-start sel-end))
-
- (defmethod te-string ((self te-view))
- (te-string (te-item self)))
-
- (defmethod (setf te-string) (string (self te-view))
- (setf (te-string (te-item self)) string))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- #|
-
- (open-res-file "oou:examples;examples.rsrc")
- ;(close-res-file "oou:examples;examples.rsrc")
-
- (defparameter *test-w* (make-instance 'window
- :view-size #@(410 200)
- :window-title "te-view test"
- :color-p t
- :view-subviews
- (list
- (make-instance 'te-view
- :view-position #@(5 5)
- :view-size #@(230 175)
- :view-nick-name :te
- :te-init-rsrc "example style text"
- :te-v-scroll-bar-p t
- ;:te-h-scroll-bar-p t
- :te-h-margin 5
- )
- (make-instance 'pop-up-menu
- :view-position #@(240 5)
- :view-size #@(160 20)
- :auto-update-default nil
- :menu-items (font-menu-items))
- (make-instance 'pop-up-menu
- :view-position #@(240 30)
- :view-size #@(160 20)
- :auto-update-default nil
- :menu-items (size-menu-items))
- (make-instance 'pop-up-menu
- :view-position #@(240 55)
- :view-size #@(160 20)
- :auto-update-default nil
- :menu-items (style-menu-items))
- (make-instance 'pop-up-menu
- :view-position #@(240 80)
- :view-size #@(160 20)
- :auto-update-default nil
- :menu-colors '(:menu-background 5592405)
- :menu-items (color-menu-items)
- ))))
-
- (defun font-menu-items ()
- `(,(make-instance 'menu-item :menu-item-title "Da Font")
- ,(make-instance 'menu-item :menu-item-title "-" :disabled t)
- ,@(mapcar #'(lambda (font-name)
- (make-instance 'menu-item
- :menu-item-title font-name
- :menu-item-action #'(lambda () (te-set-font (view-named :te *test-w*)
- (list font-name)
- :mode #$doFont))))
- *font-list*)))
-
- (defun size-menu-items ()
- `(,(make-instance 'menu-item :menu-item-title "Da Size")
- ,(make-instance 'menu-item :menu-item-title "-" :disabled t)
- ,@(mapcar #'(lambda (font-size)
- (make-instance 'menu-item
- :menu-item-title (format nil "~D" font-size)
- :menu-item-action #'(lambda () (te-set-font (view-named :te *test-w*)
- (list font-size)
- :mode #$doSize))))
- '(1 7 19 37 53 71 89 107 131 151 173 193 223 239))
- ,(make-instance 'menu-item :menu-item-title "-" :disabled t)
- ,(make-instance 'menu-item
- :menu-item-title "Smaller"
- :menu-item-action #'(lambda () (te-set-font (view-named :te *test-w*)
- '(-1)
- :mode #$addSize)))
- ,(make-instance 'menu-item
- :menu-item-title "Larger"
- :menu-item-action #'(lambda () (te-set-font (view-named :te *test-w*)
- '(1)
- :mode #$addSize)))))
-
-
- (defun style-menu-items ()
- `(,(make-instance 'menu-item :menu-item-title "De Style")
- ,(make-instance 'menu-item :menu-item-title "-" :disabled t)
- ,@(mapcar #'(lambda (style)
- (make-instance 'menu-item
- :menu-item-title (string-capitalize style)
- :style style
- :menu-item-action #'(lambda () (te-set-font (view-named :te *test-w*)
- (list style)
- :mode #$doFace))))
- (mapcar #'car *style-alist*))))
-
- (defun color-menu-items ()
- `(,(make-instance 'menu-item :menu-item-title "De Color")
- ,(make-instance 'menu-item :menu-item-title "-" :disabled t)
- ,@(mapcar #'(lambda (color)
- (make-instance 'menu-item
- :menu-item-title "≡≡≡≡≡≡≡"
- :menu-item-colors (list :item-title color)
- :menu-item-action #'(lambda () (te-set-font (view-named :te *test-w*)
- nil
- :font-color (eval color)
- :mode #$doColor))))
- '(720865 16741646 659455 16713464 16713989 524040 16776970))
- ,(make-instance 'menu-item
- :menu-item-title "-"
- :disabled t)
- ,(make-instance 'menu-item
- :menu-item-title "Pick a color"
- :menu-item-action #'(lambda () (te-set-font (view-named :te *test-w*)
- nil
- :font-color (user-pick-color)
- :mode #$doColor)))))
-
- |#