126 lines
3.1 KiB
Plaintext
126 lines
3.1 KiB
Plaintext
|
|
STklos version 2.1
|
|
------------------
|
|
|
|
|
|
What is STklos?
|
|
---------------
|
|
|
|
STklos is an extension of STk which provides a` la CLOS objets to STk.
|
|
This implementation takes its inspiration from the version 1.3 of the
|
|
Tiny-clos package defined by Gregor Kickzales
|
|
(available at parcftp.xerox.com:/pub/mop/*).
|
|
|
|
Compiling STklos
|
|
----------------
|
|
STklos is compiled during the interpreter construction. Normally, You don't
|
|
have to do something in this directory.
|
|
|
|
Simple test of STklos
|
|
---------------------
|
|
|
|
STklos needs some files to run properly. Until you have installed it in its
|
|
definitive place, you have to:
|
|
1. set your default directory to STklos
|
|
2. use the the shell script test-stklos to run the interpreter
|
|
|
|
So, you just have to type
|
|
|
|
$ cd STklos; test-stklos
|
|
|
|
To test, that everything is OK, you can try:
|
|
(let ()
|
|
(define-class A () ((a :initform 10) b))
|
|
(define inst (make A))
|
|
(slot-set! inst 'b 20)
|
|
(+ (slot-ref inst 'a) (slot-ref inst 'b)))
|
|
|
|
which should yield 30 if everything is correct.
|
|
|
|
Using STklos with TK
|
|
--------------------
|
|
|
|
A set of classes have been defined to use Tk with object flavor. All the Tk
|
|
commands have been re-written using STklos.
|
|
|
|
Following example creates a three buttons panel (button 1 & 2 being on top of
|
|
button 3).
|
|
|
|
(require "Frame")
|
|
(require "Button")
|
|
(define f (make <Frame>))
|
|
(define b1 (make <Button> :text "Button 1" :parent f))
|
|
(define b2 (make <Button> :text "Button 2" :parent f))
|
|
(define b3 (make <Button> :text "Button 3"))
|
|
(pack b1 b2 :side "left")
|
|
(pack f b3 :fill "both" :expand #t)
|
|
|
|
Note usage of Scheme names in the two preceding pack calls instead of dotted
|
|
Tcl/Tk names.
|
|
|
|
Tk options can be seen as slot in the STklos world. So getting the font of
|
|
button 3 can be done with
|
|
|
|
(font b3)
|
|
|
|
and changing its value can be done with
|
|
|
|
(set! (font b3) "fixed")
|
|
|
|
and associating a callback to button 1 can be done with the following expression
|
|
|
|
(set! (command b1) '(format #t "You have typed on \"Button1\"\n"))
|
|
|
|
The desribe function permits to see all the slots value of a given object. For
|
|
instance,
|
|
|
|
(describe b2)
|
|
|
|
would give something like:
|
|
|
|
#[<button> 122e44] is an instance of class <button>
|
|
Slots are:
|
|
id = #[Tk-command .v1.v3]
|
|
eid = #[Tk-command .v1.v3]
|
|
parent = #[<frame> f09d8]
|
|
bitmap = ""
|
|
width = 0
|
|
height = 0
|
|
anchor = "center"
|
|
font = "-Adobe-Helvetica-Bold-R-Normal--*-120-*"
|
|
foreground = "Black"
|
|
pad-x = 1
|
|
pad-y = 1
|
|
text = "Button 2"
|
|
text-variable = ""
|
|
background = "#cccccc"
|
|
border-width = 2
|
|
cursor = ""
|
|
relief = "raised"
|
|
active-background = "#999999"
|
|
active-foreground = "Black"
|
|
command = ""
|
|
disabled-foreground = "#b0b0b0"
|
|
state = "normal"
|
|
|
|
|
|
Destruction of a button can be obtained with the destroy-widget generic function
|
|
as in
|
|
|
|
(destroy b2)
|
|
|
|
Examples
|
|
--------
|
|
|
|
Some examples are available in the Examples directory. What those
|
|
examples do is not interesting but rather how they are written. Note:
|
|
There are not enough examples. Send me programs if you have intersting
|
|
pieces of code to make this directory growing.
|
|
Thanks
|
|
|
|
|
|
|
|
Have fun
|
|
|
|
|