;;;; ;;;; E n t r y . s t k -- Entry class definition ;;;; ;;;; Copyright © 1993-1998 Erick Gallesio - I3S-CNRS/ESSI ;;;; ;;;; Permission to use, copy, and/or distribute this software and its ;;;; documentation for any purpose and without fee is hereby granted, provided ;;;; that both the above copyright notice and this permission notice appear in ;;;; all copies and derived works. Fees for distribution or use of this ;;;; software or derived works may only be charged with express written ;;;; permission of the copyright holder. ;;;; This software is provided ``as is'' without express or implied warranty. ;;;; ;;;; $Id: Entry.stklos 1.6 Mon, 27 Apr 1998 13:39:00 +0000 eg $ ;;;; ;;;; Author: Erick Gallesio [eg@unice.fr] ;;;; Creation date: 28-Feb-1994 11:36 ;;;; Last file update: 27-Apr-1998 12:09 (require "Basics") (select-module STklos+Tk) (export bounding-box text-delete text-cursor (setter text-cursor) text-index text-insert text-mark text-drag-to selection-adjust selection-set! selection-to! text-x-view) ;============================================================================= ; ; class ; ;============================================================================= (define-class ( ) ((environment :accessor environment :init-keyword :environment :allocation :tk-virtual) (justify :accessor justify :init-keyword :justify :allocation :tk-virtual) (x-scroll-command :init-keyword :x-scroll-command :accessor x-scroll-command :tk-name xscrollcommand :allocation :tk-virtual) (text-variable :accessor text-variable :init-keyword :text-variable :allocation :tk-virtual :tk-name textvar) (show-chars :accessor show-chars :init-keyword :show-chars :allocation :tk-virtual :tk-name show) (state :accessor state :init-keyword :state :allocation :tk-virtual) (string-value :accessor string-value :init-keyword :string-value :tk-name stringval :allocation :tk-virtual) (width :accessor width :init-keyword :width :allocation :tk-virtual) ;; Fictive slot (value :accessor value :init-keyword :value :allocation :virtual :slot-ref (lambda (o) ((slot-ref o 'Id) 'get)) :slot-set! (lambda (o v) ;; First delete all present chars ((slot-ref o 'Id) 'delete 0 'end) ;; Then insert new text ((slot-ref o 'Id) 'insert 0 v))))) (define-method tk-constructor ((self )) Tk:entry) (define-method initialize ((self ) initargs) (next-method) ;; If a value is specified upon init, set it. (let ((val (get-keyword :value initargs #f))) (when val (initialize-value-slot self val)))) ;;; ;;; bounding-box ;;; (define-method bounding-box ((self ) index) ((slot-ref self 'Id) 'bbox index)) ;;; ;;; Delete ;;; (define-method text-delete ((self ) start) ((slot-ref self 'Id) 'delete start)) (define-method text-delete ((self ) start end) ((slot-ref self 'Id) 'delete start end)) ;;; ;;; Cursor and (setter Cursor) ;;; (define-method text-cursor ((self )) ((slot-ref self 'Id) 'index 'insert)) (define-method (setter text-cursor) ((self ) index) ((slot-ref self 'Id) 'icursor index)) ;;; ;;; Index ;;; (define-method text-index ((self ) index) ((slot-ref self 'Id) 'index index)) ;;; ;;; Insert ;;; (define-method text-insert ((self ) text) ((slot-ref self 'Id) 'insert 'insert text)) (define-method text-insert ((self ) text position) (let ((entry (slot-ref self 'Id))) (entry 'icursor (car position)) (entry 'insert 'insert text))) ;;; ;;; Mark ;;; (define-method text-mark ((self ) pos) ((slot-ref self 'Id) 'scan 'mark pos)) ;;; ;;; Drag-to ;;; (define-method text-drag-to ((self ) pos) ((slot-ref self 'Id) 'scan 'dragto pos)) ;;; ;;; Selection-anchor ;;; (define-method selection-adjust ((self ) index) ((slot-ref self 'Id) 'selection 'adjust index)) ;;; ;;; Selection-clear ;;; (define-method selection-clear ((self )) (apply (slot-ref self 'Id) 'selection 'clear)) ;;; ;;; Selection-present? ;;; (define-method selection-present? ((self )) ((slot-ref self 'Id) 'selection 'present)) ;;; ;;; Selection-set! ;;; (define-method selection-set! ((self ) first last) (let ((Id (slot-ref self 'Id))) (Id 'selection 'clear) (Id 'selection 'from first) (Id 'selection 'to last))) ;;; ;;; Selection-to! ;;; (define-method selection-to! ((self ) index) ((slot-ref self 'Id) 'selection 'set index)) ;;; ;;; X-view ;;; (define-method text-x-view ((self ) . args) (apply (slot-ref self 'Id) 'xview args)) (provide "Entry")