;;; ;;;; B u t t o n . s t k -- Label, Button, Check button and Radio button ;;;; class definitions ;;;; ;;;; Copyright © 1993-1999 Erick Gallesio - I3S-CNRS/ESSI <eg@unice.fr> ;;;; ;;;; Permission to use, copy, modify, distribute,and license this ;;;; software and its documentation for any purpose is hereby granted, ;;;; provided that existing copyright notices are retained in all ;;;; copies and that this notice is included verbatim in any ;;;; distributions. No written agreement, license, or royalty fee is ;;;; required for any of the authorized uses. ;;;; This software is provided ``AS IS'' without express or implied ;;;; warranty. ;;;; ;;;; Author: Erick Gallesio [eg@kaolin.unice.fr] ;;;; Creation date: 30-Mar-1993 15:39 ;;;; Last file update: 3-Sep-1999 20:09 (eg) (require "Basics") (select-module STklos+Tk) (export flash invoke select deselect toggle) ;============================================================================= ; ; <Label> ; ;============================================================================= (define-class <Label>(<Tk-simple-widget> <Tk-simple-text> <Tk-sizeable> <Tk-bitmap>) ()) (define-method tk-constructor ((self <Label>)) Tk:label) ;============================================================================= ; ; <Tk-simple-button> ; ;============================================================================= (define-class <Tk-simple-button> (<Label> <Tk-reactive>) ()) ;;; ;;; Tk-simple-Buttons methods ;;; (define-method flash ((self <Tk-simple-button>)) ((slot-ref self 'Id) 'flash)) (define-method invoke ((self <Tk-simple-button>)) ((slot-ref self 'Id) 'invoke)) ;============================================================================= ; ; <Button> ; ;============================================================================= (define-class <Button> (<Tk-simple-button>) ((default :accessor default :init-keyword :default :allocation :tk-virtual))) (define-method tk-constructor ((self <Button>)) Tk:button) ;============================================================================= ; ; <Tk-complex-button> ; ;============================================================================= (define-class <Tk-complex-button> (<Tk-simple-button>) ((indicator-on :accessor indicator-on :init-keyword :indicator-on :tk-name indicatoron :allocation :tk-virtual) (select-color :accessor select-color :init-keyword :select-color :tk-name selectco :allocation :tk-virtual) (select-image :accessor select-image :init-keyword :select-image :tk-name selectim :allocation :tk-virtual) (string-value :accessor string-value :init-keyword :string-value :tk-name stringval :allocation :tk-virtual) (variable :accessor variable :init-keyword :variable :allocation :tk-virtual))) ;;; ;;; <Tk-complex-button> methods ;;; (define-method select ((self <Tk-complex-button>)) ((slot-ref self 'Id) 'select)) (define-method deselect ((self <Tk-complex-button>)) ((slot-ref self 'Id) 'deselect)) ;============================================================================= ; ; <Check-button> ; ; ; Define a fictive slot ``value''. This slots permits to initialize ; the check button at creation time -- i.e you can do ; (define c (make <Check-button> :text "Test" :value #t)) ;============================================================================= (define-class <Check-button> (<Tk-complex-button>) ((on-value :accessor on-value :init-keyword :on-value :allocation :tk-virtual :tk-name onvalue) (off-value :accessor off-value :init-keyword :off-value :allocation :tk-virtual :tk-name offvalue) ;; fictive slot (value :accessor value :init-keyword :value :allocation :virtual :slot-ref (lambda (o) (eval (string->symbol (slot-ref o 'variable)) (slot-ref o 'environment))) :slot-set! (lambda (o v) (eval `(set! ,(string->symbol (slot-ref o 'variable)) ,v) (slot-ref o 'environment)))))) (define-method tk-constructor ((self <Check-button>)) Tk:checkbutton) ;;; ;;; <Check-button> methods ;;; (define-method initialize ((self <Check-button>) args) (next-method) (let ((val (get-keyword :value args #f))) ;; If a value is specified at init-time init, set it. (when val (slot-set! self 'value val)))) (define-method toggle ((self <Check-button>)) ((slot-ref self 'Id) 'toggle)) ;============================================================================= ; ; <Radio-button> ; ;============================================================================= (define-class <Radio-button> (<Tk-complex-button>) ((value :accessor value :init-keyword :value :allocation :tk-virtual))) (define-method tk-constructor ((self <Radio-button>)) Tk:radiobutton) (provide "Button")