\begindata{text,538607584} \textdsversion{12} \template{default} \define{global

\begindata{text,538607584}
\textdsversion{12}
\template{default}
\define{global
}
\majorheading{Adew Reference Manual
}
\italic{\center{For Adew version 5.0
Release of October, 1991}
}
\center{\italic{Thomas Neuendorffer
Information Technology Center
Carnegie Mellon University
5000 Forbes Ave.
Pittsburgh, Pa. 15213
(412) 268-6108
tpn@andrew.cmu.edu}}
Adew provides a way for programmers to write ATK applications without the
large learning curve involved in writing new insets. It does this by
providing the \italic{Arbcon} to allow a programmer to create
applications by
pasting together a number of existing insets into an application, and
Createcon to write a prototype controller in C which can then be modified
to
'glue' the separate pieces into an application. The basic procedure
involved
is described in two other documents ( \italic{ADEW,A Multimedia Interface
Builder for Andrew} and \italic{Tutorial on ADEW, The Andrew Development
Environment Workbench}).
The purpose of this document is provide more details of the Adew system
and to
outline some of the object methods that a programmer can call from a
createcon
created controller, to aid in gluing together an application. A main goal
of
Adew is to allow the casual programmer to piece together complex
applications
out of some basic building blocks provided by the system. This paper will
discuss the use of these blocks.
This document accompanies the version of Adew that is being shipped with
the
X11 R5 tape. It includes documentation of many new Adew features
includeing:
\indent{The interactive creation of Atk insets.
Support for permenant application-specific data.
New style buttons, switches etc.
Color support.
Support for different style on different display types.
The automatic updateing of old Adew applications to support new
features.}
In regard to the later, it should be noted that old Adew applications
will get
an automatic 'facelift' when compiled and run using the latest code. It
is
hoped that most people will prefer the new motif-style interface. For
those
who prefer the old style buttons and switches, they are included on the
tape
in atk/value/value.R4 and may be used to replace the new value directory
if
desired. Because of the name conflicts, you need to chose one or the
other to
compile.
\begindata{bp,539644360}
\enddata{bp,539644360}
\view{bpv,539644360,1388,0,0}
\chapter{1 The Arbcon}
\center{\
\begindata{raster,539697032}
2 0 68266 68266 0 0 502 304
bits 539697032 502 304
ZZZHfc |
d5/55/55/55,55
5c |
ea/aa/aa/aa,aa
ac |
d5/55/55/55,55
efZZZG8c |
d7ZZZG8c |
efZZZG8c |
d7ZZZG8c |
efZZZG8c |
d7ZZZG8c |
efZZZG8c |
d7ZZZG8c |
efZZZG8c |
d7ZZZG8c |
efJe783c0999f
c3Gfe7fGefbfK
d7Jc399cf999f
Gfe7fG!dfK8c |
eff860Hdb9ccf
Gf0e1!930cccH
d7f33cH999ccf
Ge64c939264cc
eff339H999cc0
cc99326649H99
d7f03bH819ccf
c099320649H81
ef!f3H3c9ccfe6
9c727e49H3c39
d7f327H3c99cf
Ge64c9c726733
eff860H3c83c0
Gf0e19ef30f33
d7ZGf3LcfXfdS
efZGf3KfccfXf9
d7ZGf3Kfe1fXf3
efZZZG8c |
d7ZZZG8c |
efZZZG8c |
d7ZZZG8c |
efZZZG8c |
d7ZZZG8c |
efZZZG8c |
d0zzzg0c |
e0zzzg0c |
c0zzzg0c |
e0o03ZZfep1c |
e2(222380zy0e
e0(888780zy0e
ea(222b80zy0e
e0(888780zy0e
e2(222b80t078c
e0(888780t0cc4
ea(222b80t0844
e0(888780t1027
e2(222b80t1024
e0(888780t1024
ea(222b80t0844
4c |
Ge013Hfe0fI3f
8c |
Ge7f3Hfce7I3f
983fGc9H03L9f
f3Je7f9K9f3fG
939fGc9H39L9f
Kc3f9K9f3fG99
999fGe7930fGfc
db213870c9H8e
d9bfGe79267Gfe
H99g932644H8e
c93fGe09267H8c
1993e64cH8432
c93fGe79207Hc4
3993e64cH9532
7fGe7927fGfce4
93e64cH9138G3e
e67fGe79267Gfc
H3c3893264cH9b
e67fGe7930fGfe
H3c393870ccH9b
8c |
S8c |
S8c |
e61c324327b392
27!3f0c927fGef
3cc990191338f1
273f3e64047fG
cf919f333e3326
7f3fe4667fGea
0c139f337f1320
7f3f04e67fGdf
f9939f33739327
64e67fGeabbaf
e4c99399327391
38G9864e47fGdd
0e1c43c3327832
3cGc310f27fGef
70c9H390e4c3f
baeeafI8c |
2649H3864899f
d7577577I8c |
49H03e4c99fGe7
bbabbbI8c |
49H3f04c81fGe7
d77757I8c |
c9H3e64c9He7cf
bfI8c |
2649H3e64899f
d7"777fG8c |
70c9H3f124c3f
baefafbbbfG8c |
)223c |
08(88dc |
a2(223c |
08(88dc |
10h01c740w0e)22
j82x0e08(88dc |
h40g44x0ea2(22
3186f01844c676
92494060284924
93c84180284f35
92084060384815
3c |
3c |
d8u0e08(88dc |
86u0e)223c |
8180t0e08(88dc |
06u0ea2(223c |
e0(888780t0cc4
93294018104c9a
18u0e08(88dc |
e2(222b80t0787
11c630g10e712
v0e)223c |
e0(888780v10zh
0e08(88dc |
ea(222b80v10zh
0ea2(223c |
e0(888780v20zh
0e08(88dc |
e2(222b80zy0e
)223c |
e0(8887ZZfe08
(88dc |
ea(222bZZfea2
(223c |
e0(8887zz0608
(88dc |
e2(222b/22/22'22 2e)223c |
e0(888708/88/88&88
9608(88dc |
ea(222ba2!222a
/aa/aa#aaaea2
(223c |
e0(888708!88d5
/55/55#551608
(88dc |
e2(222b"2220zv
2e)223c |
e0(888708!88c0
zv1608(88dc |
ea!2274222362
26!222ba2!2220
zvaea2!222724
e0!888c888928
8a!888708!88c0
zv1608!888a08
e2!22a42223#22
2b2a!aa20zv2e
)223c |
e0!8868eb312b
0e!8887155554
c0zv1608!888a
ea!223a964b24
b2!222baa22!20
zvaea2"222492
e0!888c84c92f
92!888710!88c0
zv1608!888a8c
e2!22!a44b2432
!222b2a!2220i
18h08he380zk2e
e0!88cc94c92e
d2!888710!88c0
i08k41zl1608!88
ea!22b86e33f3
8d!222baa22!20
i08k22zlaea2!22
e0!88g!80h0888
8710!88c0g0199
8b630798cb0c22
dc |
e2(222b2a!2220
h924924824924
9214zl2e)223c |
e0(888710!88c0
hb1c9278248e4
9214zl1608(88
ea(222baa22!20
ha24924024924
921czlaea2(22
e0(888710!88c0
h624926424924
9208zl1608(88
e2(222b2a!2220
h41bcd3839cde
cc08zl2e)223c |
e0(888710!88c0
k02zp1608(88dc |
ea(222baa22!20
k02zpaea2(223c |
e0(888710!88c0
k07zp1608(88dc |
e2(222b2a!2220
zv2e)223c |
e0(888710!88c0
zv1608(88dc |
ea(222baa22!20
zvaea2(223c |
e0(888710!88c0
i18i08g38e0zk
1608(88dc |
e2(222b2a!2220
i08k1040zk2e)22 3c |
e0(888710!88c0
i08h08h0880zk
1608(88dc |
ea(222baa22!20
g01998b6301df
7ac3c880zkaea2
e0(888710!88c0
h9249248248c9
2485zl1608(88
e2(222b2a!2220
hb1c927830889
2485zl2e)223c |
e0(888710!88c0
ha24924gc88927
07zl1608(88dc |
ea(222baa22!20
h624926424889
2202zlaea2(22
e0(888710!88c0
h41bcd38387df
b382zl1608(88
e2(222b2a!2220
n0440zl2e)223c |
e0(888710!88c0
n0440zl1608(88
dc |
ea(222baa22!20
n0380zlaea2(22
3c |
e0(888710!88c0
zv1608(88dc |
e2(222b2a!2220
zv2e)223c |
e5(555710!88c0
zv16)555c |
ea(aaabaa22!20
i18l071czjae)aa bc |
f5(555710hc0i
08l0208zj17)55
5c |
26#223c |
8a#88dc |
8d6ac8"88dc |
82"223c |
9308"88dc |
#2224b2a2"223c |
8aac9248"88dc |
27efda62"223c |
zl1608"88h#88
dc |
3c |
dc |
(223c |
dc |
3c |
dc |
ea(aaab2a222a
20i08i20g0201
f0(8883108890
c0g01998b6301
ea(222ba82228
20h9249248249
f0(8883109590
c0hb1c92783c9
ea(2223"2a20h
a2492402092208
f0(888310!90c0
h624926432923
ea(222ba8!2820
h41bcd381dd99
f0(8883108890
c0zv1708(889c |
ea(22232a222a
20zv2ea2(223c |
f0(8883115550
c0zv1708(889c |
ea(222b!aaa820
zvaea2(221c |
f0(888310!88c0
zv1708(889c |
ea(22232a!2220
zv2ea2(223c |
f0(888310!88c0
i18m038ezi1708
ea(222baa22!20
i08m0104ziaea2
f0(888310!88c0
i08j10g01g88zi
ea(22232a!2220
g01998b6305b0
f0(888310!88c0
h924924824924
ea(222baa22!20
hb1c9278249e4
f0(888310!88c0
ha24924024904
ea(22232a!2220
h624926424994
f0(888310!88c0
h41bcd3876cee
ea(222baa22!20
zvaea2(221c |
f0(888310!88c0
zv1708(889c |
ea(22232a!2220
zv2ea2(223c |
f0(888310!88c0
zv1708(889c |
ea!2232e2!222c
!222baa22!20zv
f0!889848!8884
!888310!88c0zv
ea!223a42!2224
!22232a!2220i
$223c |
f0!8894ceddb0
cc!888310!88c0
119db0"889c |
ea!223249324b
24!222baa22!20
b249#221c |
f0!8892c922c8
ec!888310!88c0
08!888c93cd68
"889c |
ea!22314b224b
24!22232a!2220
!2224520542"22 3c |
f0!8890c92ac9
2c!888310!88c0
!888cb32e#889c |
ea!223a46776c
de!222baa22!20
!222e11c4a2"22 1c |
f0!88808880h!88 8310!88c0h6249
"889c |
ea(22232a!2220
h41bcd381bf32
f0(888310!88c0
zv1708(889c |
ea(222baa22!20
zvaea2(221c |
f0(888310!88c0
zv1708(889c |
ea(22232a!2220
zv2ea2(223c |
f0(888310!88c0
zv1708(889c |
ea(222baa22!20
zvaea2(221c |
f0(888310!88c0
i18h03zo1708(88
ea(22232a!2220
i08h01zo2ea2(22
f0(888310!88c0
i08h01g11zm17
10zj2e)aabc |
96799677d910zj
224c9230a0zjae
23c8c220a0zj17
3220e0zj2ea2(22
28922040zj1708
dce1f040zjaea2
1708(889c |
a2(221c |
08(889c |
3c |
(889c |
(221c |
(889c |
(221c |
1708(889c |
cb3ccb3bec88zi
9126491850zi17
91e4611050ziae
9104191070zi17
9194491020zi2e
ccee70f820zi17
2ea2(223c |
08(889c |
a2(221c |
08(889c |
a2(223c |
08(889c |
aea2!222c3a$22
1708!888690$88
18h320619g1c70
1c |
9c |
zj2ea2!222632
i08h100208g08
20zj1708!888d
i08h100208g84
40zjaea2!2224
g01998b630196
324b1de440zj17
h92492482524a
89248280zj2ea2
hb1c927821243
09308280zj1708
ha24924021242
890c8380zjaea2
2642524a492481
zk1708!88!80!08
7fb861zk2ea2(22
3c |
9c |
3c |
08(889c |
ea(222baa22!20
g01998b6305b1
f0(888310!88c0
h924924824924
ea(22232a!2220
hb1c927824924
f0(888310!88c0
ha24924024924
ea(222baa22!20
h624926424924
f0(888310!88c0
h41bcd3876dc3
ea(22232a!2220
zv2ea2(223c |
f0(888310!88c0
zv1708(889c |
ea(222ba8!8820
zvaea2(221c |
f0(888310hc0zv
1708(889c |
ea(2223"2220zv
2ea2(223c |
f0(888308!88c0
zv1708(889c |
ea(222ba2!2220
zvaea2(221c |
f0(888308!88c0
zv1708(889c |
ea(2223/22/22'22 2ea2(223c |
f0o0308!88c0zv
17p1c |
e8(888ba2/22/22&22
2e)889c |
e0o0315/55/55&55 56p1c |
Q2a/aa/aa&aaaf
Pfc |
ZZZHfc |
e8(888b/88/88/88"88
8c |
e0o07zzq1c |
e2(222b/22/22/22"22
2c |
e0(888708!88d5
/55/55.551c |
ea(222ba2!222a
/aa/aa.aaac |
e0(888708!88c0
zzm1c |
e2(222b"2220zzm 2c |
e0(888708!88c0
zzm1c |
ea(222ba2!2220
zzmac |
e0(8887155554
c0zzm1c |
e2(222b2a!aa20
zzm2c |
e0(888710!88c0
zzm1c |
ea(222baa22!20
zzmac |
e0(888710!88c0
i1cnf38fi01ce
e2(222b2a!2220
i0cj20h806106
e0(888710hc0i
0cj60g01806206
ea(222ba8!8820
g039bcfb3c007
7833316c6004z
ac |
e0(8887108890
c0g01966db660
b6cc1249249004 z1c |
e2(222b2a222a
20hd1edb7e7cf
fc163924f004z
2c |
e0(8887108890
c0hf66db6g0c1b
1449248004z1c |
ea(222ba82228
20h666df7200e
e40c4924c804z
ac |
e0"888fa8#8887
108890c0h63be
c477b77808379a 700ez1c |
e2"222c622a"22
2b2a222a20zm40
e0"8898a8#8887
108890c0zme0y
ea"22322cde"22
2ba8222820zk07
e0"88908448"88
87108890c0zl03
e2"2232244a"22
2b2a222a20zl03
e0"88908cc8"88
87108890c0zzm
cdbfccb330zjae
91124920zj1708
91124960zj2ea2
91124940zj1708
911248c0zjaea2
4cccec80zj1708
a2(221c |
(889c |
(223c |
(889c |
(221c |
(889c |
j03h04z1c |
h04ge4j01h0cz
h0cge4j01h14z
bef3db3ff63206
2c |
1c |
f8f3degb47b6c
0cdb666d659a32
066d966cgb4cd
db67ec79981c06
6de7ecg9c3db6
660c3d981c066c
f60cg9ccdb6c0
5b672c4d980806
6d372c608ccdb6
dbc007bbb3de78
fc080fefe3c661
y2c |
1c |
e1f0yac |
f8y1c |
b8y2c |
1c |
ea"223a244a"22
2ba83b2820i03
e0"888ccec8"88
87109490c0h02
e2"22278366"22
2b2a222a20h06
e0#88!08"8887
108090c0hGdf!f8
ea(222ba82228
20g01966b6d90
e0(8887108890
c0g01e6636d90
e2(222b2a222a
20hf6636de07b
e0(8887108890
c0g0136636cc0
ea(222ba82228
20g01e3f7eef0
e0(8887108890
c0j0198g08zy1c |
e2(222b2a222a
20j0198g38zy2c |
e0(8887108890
c0kf0g30zy1c |
ea(222ba82228
20zzmac |
e0(8887108890
c0zzm1c |
e2(222b2a222a
20zzm2c |
e0(8887108890
c0i03g01c0g38
ea(222ba82228
20h0203hc0g18
e0(8887108890
c0h06ic0g18j18
e2(222b2a222a
20hGdf!f8f1e3
e0(8887108890
c0g01966b6d90
1c |
ea(222ba82228
20g01e6636d90
e0(8887108890
c0hf6636de0db
e2(222b2a222a
20g0136636cc0
e0(8887108890
c0g01e3f7eef0
ea(aaaba82228
20j0198i33zwac |
e5(5557108890
c0j0198i33zw1c |
e0o032a222a20
kf0i1ezw2c |
Q108890c0zzm1c |
Qa8222820zzmac |
e0o03108890c0
zzm1c |
e2(22232a222a
20i03h70k01c0
e0(8887108890
c0h0203hd0lc0
ea(222ba82228
20h06ic0lc0hc0
e0(8887108890
c0hGdff8f9e7b6
e2(222b2a222a
20g01966b6d90
e0(8887115550
c0g01e6636d90
ea(222b!aaa820
hf6636de0ccd8
e0(888710!88c0
g0136636cc0cc
e2(222b2a!2220
g01e3f7eef1e7
e0(888710!88c0
j0198h0198zw1c |
ea(222baa22!20
j0198h0198zwac |
e0(888710!88c0
kf0if0zw1c |
e2(222b2a!2220
zzm2c |
e0(888710!88c0
zzm1c |
ea(222baa22!20
zzmac |
e0(888710!88c0
g0380g01c001c0
e2(222b2a!2220
g0180hc0gc068
e0(888710!88c0
g0180hc0gc060
ea(222baa22!20
g019e!f8f1e3d9
e0(888710!88c0
g01b36d90db36
e2(222b2a!2220
g01b36d90db36
e0"88f4$888710
!88c0g01b36de0
ea!22238c$222b
aa22!20g01b36c
i01c00380zvac |
03h01gc00440zv
1c |
i03gc0g40zv2c |
7fb3cfg40zv1c |
cb32d9!80zvac |
f332df81zw1c |
1ad802zw2c |
9b1cdc8440zv1c |
f18def07c0zvac |
j38h38zp1c |
j18h18zpac |
h18zp1c |
d99fb3ddfc7801
db365b32d66db6
e799ed80zn2c |
d8032cdb3680zn
d8f61e32c66db6
361b3cc66db6d8
db375998c66fb6
b1dbb9dfe3c6f7
d9f30cdb36zoac |
030cdb36zo1c |
d803acdb36zo2c |
6c01c7bdefzo1c |
g01c0zp2c |
hc0zp1c |
zpac |
78fd9eefe3c00f
ccdacd96b36db6
ccd8fd96336db6
c1e6336db6c018
d8e4c6337db6c0
bc78G1e37bb60
3ccf6czo1c |
c01966d9b4zo2c |
cf9866d9b0zo1c |
66d9b0zoac |
1d66d9b0zo1c |
0e3def78zo2c |
38i0ch40c0zp1c |
g10g0chc3zq2c |
g30i0142zq1c |
f3df7801fdf3c0
d9666db0032d36
d9666db1f3cc67
db36cd666db001
c0db36ce666db0
4780zpac |
6044c0zp1c |
e04440zp2c |
ecc6g4440zp1c |
026d97204640zp
ac |
e0!888b04$8887
10!88c0g03deee
1c |
e2"2224736772
!222b2a!2220i
e0!888a88d9b2
20!888710!88c0
ea#228b12"222b
a8!8820jf0h18
e0!888a888911
48!888710hc0zzm
e2!222324ab33
42!222b"2220zzm
e0!888988d9b0
"888708!88c0zzm
ea"22f27363a2
!222ba2!2220zzm
e0"88g810908!88 8708!88c0zzm1c |
e2#222325"222b
/22/22/22"222c |
e0#888b8e08!88
8708!88c0zzm1c |
ea#22!20"222b
a2/22/22/22!22
e0(888715/55/55/55!55 5c |
e2(222b2a/aa/aa/aa!aa ac |
e0(8887ZZQfc |
ea(222b/88/88/88"88
9c |
e0(888780zzp1c |
e2(222ba2/22/22/22!22 3c |
e0(8887/88'88
f4/88)88dc |
ea(222b82/22&22 cc/22)223c |
e0(8887/88'88
84/88)88dc |
e2(222ba2/22&22 c073bbc2/22&22
e0(8887/88'88
70c91228/88&88
ea(222b82/22&22 1a1b33e2/22&22
e0(8887/88'88
84e8a208/88&88
e2(222ba2/22&22 a48aa2/22'223c |
e0(8887/88'88
ccc84b10/88&88
ea(222b82/22&22 b87441e2/22&22
e0(8887/88'88
g808808/88&88
e2(222ba2/22/22/22!22 3c |
e5(555795/55/55/55!55 5c |
ea(aaab/aa/aa/aa"aa
bc |
e0o0380zzp1c |
ZZZHfc |
ZZZHfc |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
c0zzzg0c |
f0b1e366f3ddd8
0198h04zy2c |
i0198h1czy1c |
zyac |
1c |
2c |
1c |
ac |
2c |
3c
dc
3c
dc
|
|
|
|
dc |
3c |
dc |
03dff3c0e380zp
c0zzzg0c |
c0zzzg0c |
ZZZHfc |
ZZZHfc |
\enddata{raster, 539697032}
\view{rasterview,539697032,1389,0,0}}
\center{
}This is an approxamation of the look of the arbcon. Depending on your
scrollbar preferences, your menu preferences, etc. what you see may be
somewhat different, but the functionality will be the same.
As stated in the Overview document, the Arbcon serves several functions.
\indent{1. It is an inset generator that can place an instance of any
type of
inset into the cut-buffer.
2. It is as an editor for inset attributes.
3. It can cut or copy insets from existing ADEW applications or
templates.
4. It can copy links to existing insets, allowing the user to paste in
new
views on existing data objects.
}
\section{1.1
Creating the Arbcon}
There are two basic ways to bring up Arbcon.
program.
One is to run the arb
\bold{arb filename}
This will bring up an Arbcon and the named file (the filename is
optional).
The second is to add the following lines in your .ezinit file.
\bold{addmenu arbcon-Create "Arbcon,Arbcon" textview
addmenu arbcon-Create "Arbcon,Arbcon" lsetview
}
This would provide a menu option to add an Arbcon at any time when you
are
editing text or lset files.
\section{1.2
Arbcon Functions
}
The use of most of the following is outlined in the Tutorial document,
which
should be referred to for examples.
\subsection{1.2.1 Creating an application window}
\paragraph{1.2.1.1
New Window}
In addition to using the arb command described above, one can click on
the
desired object or object view pair in the Object <View> list, and then
chose
the\italic{ New Window} option on the Arbcon menu. One will then be
prompted
for the file name to open. If the named file does not already exist, a
new
file will be created of the type of the desired object.
\subsection{1.2.2 Adding a new child object to an application
}A click on a desired object or object view pair in the Object <View>
list
will place a cel initialized to that object into the cut-buffer. This
object
may then be pasted into the desired application using the applications
paste
command.
\subsection{1.2.3 Adding a child object with it's application layer
}After clicking on the desired object, a click on the Application/Normal
switch will add this information to the cel in the cut buffer. The
application
layer refers to additional views that a view may deem useful when it is
being
used as an application. Typically, it refers to the addition of one or
more
scroll bars.
\subsection{1.2.4 Selecting a child object
}When an object is pasted into an application, it also becomes the
selected
object whose attributes are displayed in the editing window of the
Arbcon.
Clicking on an existing object will also cause it to become the selected
object. Note however, this applies only to objects inserted with an
arbcon in
the first place. This is because the arbcon inserts objects surrounded
with a
cel/celview inset that allows the arbcon to function.
\paragraph{1.2.4.1
Show Cels
}Alternately, the \italic{Show Cels} menu option will display a list of
all of
the cels in the same namespace as the current cel. Clicking on a cel name
in
this list will cause it to become the current child object.
\subsection{1.2.5 Creating a new link to a child object
}With a child selected, a click on the Link/New switch will place a link
to
that object into the cut-buffer. This may then be pasted into the
application.
Links can not span windows, however.
\subsection{1.2.6 Creating a new link with as different view type}
After selecting a child and clicking on the Link/New switch, a click on a
Object <View> pair, with the same dataobject as the child, will modify
the
viewtype of the link in the cut buffer.
\subsection{1.2.7 Editing the child's attributes
}The attributes of the current child may be edited in the arbcon edit
window.
The attribute names are displayed in bold, while their values are in
plain
type. One can move from on attribute to the next via the enter key. After
the
last attribute, the enter key will prompt for confirmation of the
changes.
Another enter will confirm the changes and modify the child. Alternately,
clicking on the \bold{Save} button at the bottom of the edit window will
save
the current attributes. See Values below.
\subsection{1.2.8 Removing a child object
}The Cut button (displaying scissors) can be used to cut the selected
child
from an application. Alternately, the Cut menu option on the Arbcon menu
will
do the same thing.
\subsection{1.2.9 Moving a child object
}When a child object is cut, a copy of it is placed in the cut buffer. It
can
then be moved by a cut, followed by a paste in the desired location.
\subsection{1.2.10
Copying a child object
}The Copy button will place a copy of an object into the cut-buffer. At
this
point it can then be pasted into another location.
\subsection{1.2.11
Changing the current directory
}The Adew menu card has a Change Directory menu option. It will prompt
for a
new directory.
\subsection{1.2.12
Creating a controller object
}A dummy controller object may be created via the Create Controller
option on
the Adew menu card. Alternately, the createcon program may be run. This
controller is a template from which new application may be easily
created. For
details, see the next section on Createcon.
\subsection{1.2.13
Adding a new object to the view list
}The Add Object menu on the Arbcon menu will prompt for a new object to
add.
If an object/view pair is desired (where the view is not the default view
for
that object), both the object and the view names should be specified,
separated be a space.
Also , see the preference options below.
\subsection{1.2.14
The Value Window
}The \italic{Init Value Window} menu option will bring up a window
containing
examples of the currently available valueview objects (switches, buttons,
etc.). These may then be copied into an application with the copy button.
Also , see the preference options below.
\subsection{1.2.15
Preference options
}The following preferences may be set in the Arbcon users preference
file.
\paragraph{1.2.15.1
ValueFile:filename
}Allows the specification of an alternate file to be displayed by the
\italic{Init Value Window} menu option. Any Arbcon created file may be
used.
The default is $ANDREWDIR/lib/arbiters/vallist.
\paragraph{1.2.15.2
ObViewList: <list of object>
}Allows the specification of an alternate list of objects and views for
inclusion in the Object <View> list, i.e. the list of objects that can be
created with the arbcon.
\paragraph{1.2.15.3
ObViewFile: <filename>
} Like above, this option allows the specification of an alternate list
of
objects and views for inclusion in the Object <View> list. The above
provides
the list directly, while this specifies a filename to read the list from.
The
default list is currently included in ANDREWDIR/lib/arbiters/viewlist.
\paragraph{1.2.15.4
IgnoreDefaultViewlist:<TRUE or FALSE>
}If true, only the user specified ObViewList above will be used. If
false, the
objects in the ObViewList will be added to those shown by default. The
default
is FALSE.
\begindata{bp,539670984}
\enddata{bp,539670984}
\view{bpv,539670984,1390,0,0}
\chapter{2 Values}
Values are simple dataobjects designed to hold a long integer, a
string
and/or string array, and support a variety of observers, each of which
may
provide a routine to be called when the value's data changes. In general,
interaction with the valueviews are all done with the value methods.
\section{2.1
Programmer interface}
\subsection{2.1.1 Basic Routines }
\bold{long value_GetValue}(self)
\bold{value_SetValue}(self,long rock)
\indent{Gets or sets the value primary value}
\bold{char *value_GetString}(self)
\bold{value_SetString}(self,char *rock)
\indent{Gets or sets a string pointer. Note, value does not copy this
data,
rock must be a NULL terminated string in static memory.
}
\bold{char **value_GetStringArray}(self)
\bold{value_SetStringArray}(self,char **rock)
\indent{Gets or sets an array or string pointer. Note, value does not
copy
this data, rock must be a pointer to an array of NULL terminated strings
in
static memory.}
\bold{long value_GetArraySize}(self)
\bold{value_SetArraySize}(self,long rock)
\indent{Gets or sets the array size parameter to rock. Notes how many
entries
are in the string array.}
\bold{value_SetStrArrayAndSize}(self,char **rock,size)
\leftindent{Sets both the string array and it's size w/ one call and
producing
only one call back.}
\subsection{2.1.2 Advanced Routines }
\bold{value_AddCallBackObserver}(self, struct basicobject * observer,
procedure callBack, long rock );
\indent{Sets up a call back procedure. When a value's contents changes,
the
procedure \italic{callBack} will be called, with the following arguments
callBack(observer,self (the value object), rock, flag)
where flag is one of the values defined in value.h.
Controller objects created by createcon use this call to set up the call
back
procedures automatically.
}
\bold{value_RemoveCallBackObserver}(self, struct basicobject * observer
);
\indent{Removes the call back.
}
\bold{value_SetNotify}(self,boolean val)
\indent{Sets a flag to indicate if observers will be notified when one of
the
above set methods are called. Can be used to turn off notification
temporarily
when changing several of the above parameters at once. Care should be
taken,
however to make sure that val is reset to TRUE.
}
\begindata{bp,539671048}
\enddata{bp,539671048}
\view{bpv,539671048,1391,0,0}
\chapter{3 Valueviews
}
Valueviews are a collection of views that may be associated with
the value
object and will display them in a variety of ways. They prompt up the
view
tree for a set of attributes for detailed information on how they should
display their values (i.e. the range of a bargraph or the label on a
button).
Currently, the cel is responsible for maintaining this information, which
may
be edited and saved via the Arbcon. Some valueviews allow the input of
new
values, others are readonly. By convention, valueview names end in a
capitol
V. Valueviews that allow input are, in general, up-click sensitive. By
down-clicking and moving the slider switch, one will see its displayed
value
change, but it is only on the up-click that this change is reflected in
the
value object and observers are notified.
The latest release of many of these objects have been based on the
new
sbutton object, that provides a variety of look and feel options, while
retaining the same attributes and interface specs as previous versions.
The
setting of color is also now supported on color displays.
\section{3.1
Attributes
}
The following section will provide an overview of the attributes that are
settable for the various valueviews. Note that most attributes are
applicable
to multiple valueviews, though only the applicable attributes are setable
for
any given valueview. Attributes are settable via the arbcon when the
application is being created, for details on this , see the Adew tutorial
paper.
\subsection{3.1.1 Style}\center{
}The buttonv mbuttonv, controlv, onoffv, and fourwayv views now call
common
code to pesent buttons on the screen in various configurations. These
buttons
may be drawn in a variety of styles as illustrated by the mbuttonv views
in
the Buttons section below. The style is controlled by the \italic{style}
attribute which, like other attributes, may be set by the application
author
via the arbcon when the application is being created. The default style
is the
motif-ish style 4. Because the stipiling that occurs on a monochrome
screen
when using the styles two and four can make the text less readable, it is
possible to set the monochrome screen seperately. To do this, prefix the
style
attribute with a 'C' to indicate the style for color displays, and an M
to
indicate style for monochrome displays.
example:\bold{
[string] style:} C=4 M=3
will result in displaying style 4 on color displays and style 3 on
monochrome.
The bargraphv and sliderv views currently support a more limitted set of
styles, whose numbers correspond roughly with the button styles. Styles 1
and
3 may be preferable on monochrome displays.
\subsection{3.1.2 Colors}
The buttonv mbuttonv, controlv, onoffv, fourwayv, stringv, checkv, and
thumbv
views all support the setting of \italic{foreground-color} and
\italic{background-color} attributes, where the foreground is the normal
color
for displaying the text, the background is the normal color for the
button and
shading is derived from the two. Simmilarly, the sliderv and bargraphv
views
support \italic{colors} and\italic{ shade-color} attributes, to indicate
the
color of the bars, and the color to use for shadeing.
\paragraph{3.1.2.1
Important Note 1}:
Best results (particularly for the motif-button style views) are usually
achieved when the foreground is a light color and the background is dark.
\paragraph{3.1.2.2
Important Note 2}:
The color attributes for the button objects will be ignored on monochrome
display's. This avoids the problems of unreadable stippled text. The
color
attributes of the bargraph and slider objects will be provide different
stipple patterns for styles 2 and 4, and will be ignored for other
styles,
again to improve visibility.
\subsection{3.1.3 Min - max values
}
Bargraphv, sliderv, and thumbwheelv all support min_value and max_value
attributes to note the range of numbers each can handle.
\subsection{3.1.4 Immediate update}\section{
}
By default, the bargraph, slider, and thumbwheel views only update the
underlieing value object when they are released. By setting the
\italic{immediate-update} attribute to \italic{TRUE} , the application
creator
can specify that the controlled value should be updated immediatly while
the
control is being thumbed.
\subsection{3.1.5 Read Only
}
Most valueviews allow interactive manipulation by the user of the
application.
The stringv view is always read-only. The slider and bargraph views have
a
setable \italic{readonly} attribute to indicate if they are for display
only,
or can be manipulated by the user. By default, the slider is not
readonly,
while the bargraph is readonly.
\subsection{3.1.6 Fonts
}
The font for displaying labels is set by the \italic{bodyfont} and
\italic{bodyfont-size} attributes. The default bodyfont is andytype and
the
default bodyfont size is 10.
\subsection{3.1.7 Labels}
The \italic{label} attribute provides the string to be displayed as a
label
for the object. The special cases are as follows.
\paragraph{3.1.7.1
onoffv}
The onoffv view has seperate \italic{top-label} and \italic{bottom-label}
attributes.
\paragraph{3.1.7.2
mbuttonv}
The mbuttonv determines the number of buttons to display by the number of
colon (:) seperated labels found in its \italic{label} attribute. Colons
can
be included in a label by prepending a '\\' (ie \\:).
\paragraph{3.1.7.3
fourwayv and pianov
}Like mbuttonv, the fourwayv and pianov labels buttons according to colon
seperated labels. For backward compatibility, these are stored in the
\italic{':' separated labels} attribute. The pianov labels the notes on
the
keyboard.
\paragraph{3.1.7.4
stringv}
The stringv normally displays the string portion of it's value object.
Only if
this is NULL is the \italic{label} attribute is displayed.
\subsection{3.1.8 Placement
}
Specific to the mbuttonv view, this attribute specifies how the buttons
are to
be layed out. To specify a fixed number of columns or rows, on can
specify a
digit (1-9) followed by a 'C' or an 'R' for columns and rows
respectively. If
there are more labels than can fit in the specified number of columns or
rows,
then the additional buttons will be added in the opposite direction.
I.E., if
2C was specified, and there are 6 labels, then the buttons will appear in
2
columns and 3 rows. A 'C' or an 'R' can be specified but not both. The
other
possible flag is either a 'T' or a 'B' A 'T' will indicate that that
buttons
will be filled topdown, a 'B' indicates a bottom-up arrangement.
\subsection{3.1.9 Function, Class, and
Auto-init
}There attributes are specific to the controlv view, which will attempt
to
load the specified \italic{class} and call \italic{class}\italic{function}
from its proctable when it's button is clicked and released. If
\italic{auto-init} is TRUE, it will attempt to call the function the
first
time the view is displayed. This functionality was critical to earlier
versions of Adew, as it provided a link between a set of views and a
controlling application. See the other Adew documents and above for
details.
\subsection{3.1.10
Increment
}Specific to the thumbwheel views, this attribute indicates how much to
increment the value with each movement.
\section{3.2
Button and Switch Views}
\center{\
\begindata{raster,539697288}
2 0 102302 102302 0 0 418 103
bits 539697288 418 103
zzs |
zzs |
zzs |
zzs |
zzs |
zzs |
zzs |
0fS01Rc07fPfc
07Pf0g |
08l3fL01+22!40
j01Kf406$aa$88
0bLa0k0301$88
89$8889405fJfd
0bLa0k0301+22
405fJfdk1406)22
0bLa0k0301$88
8f$888f405fJfd
0bLa3Ke3012a#aa a52a#aaa5405f
0bc0j07a2k2301
85#555f85#555f
0bc0j07a2k2301
2a$aa2a$aa405f
0bc0j07a2k2301
85#555f85#555f
0bc0j07a2k2301
2a#aaa52a#aaa5
0bc0j07a2k2301
85#555f85#555f
0bc0j07a2k2301
2a$aa2a$aa405f
0bc0j07a2k2301
85#555f85#555f
0bc0j07a2k2301
2a#aaa52a#aaa5
0bc0j07a2k2301
85#555f85#555f
0bc0j07a2k2301
2a$aa2aab2a"aa
0bc0j07a2g04i
23018554!1055
g0fbb9cg140588 b970e888089f77
0bc0j07a2g04i
23012aa8h2aa5
041122g140622
44cb1220a22822
0bc0ge5c38007
a2g0fbb9cg2301
feedd83ffdg04
1522g140588cc
0bc00113244007
a2g041122g2301
feeddbGfdg0415 22g14062244ab
0bc0011227c007
a2g041522g2301
feeddbbffdg04
4a22g140588cc
0bc0011224g07
a2g041522g2301
G18cc7ffdg038a 1cg14062239cc
0bc00112244007
a2g044a22g2301
Jfdk14058880g
08880888g8088
0bc0ge7338007
a2g038a1cg2301
g |
0bc0j07a2k2301
85#555f85#555f
90g |
k1405#5554k50
90g |
k1405$8808#88
Jfdk1406#2220
405fJfdk1405$88
Jfdk1406)2290
405fJfdk1405$88
405fJfdk1406#22
405fJfdk1405$88
Jfdk1406)2290
405fJfdk1405$88
405fJfdk1406#22
405fJfdg04i14
405fJfdg04i14
5f8557eee7555f
388850g |
2aa90448aaa540
442290g |
85544010155f85
89f0880888aacc
2aa888802aaa2a
02!22!2a442290
85544111155f85
891088088894cc
2aa8g802aa52a
e220a227343822
855410g555f85
50g |
2a$aa2a$aa405f
405fJfdk1405$88
g |
50g |
a2#2290g |
08#8850g |
g |
08#8850g |
20a2#2290g |
08#8850g |
g |
08#8850g |
20a2#2290g |
05$8808#8850g |
06%222a"2290g |
405fG1a3c7ffd
5ffeecdbbffdg
!5559955f405f
8850g |
ab2d4a!aa405f
g |
555299955f405f
8850g |
aae2a72aa5405f
90g |
550410555f405f
Jfdk1406)2290
08#8850g |
0bc0j07a2k2301
0bc0j07a2k2301
0bc0j07a2k2301
0bc0j07a2k2301
0bc0j07a2k2301
0bc0j07a2k2301
0bc0j07a2k2301
0bLa3Ke30185#55
0bLa0k030125$55
0bLa0k03019fK
0bLa0k03012a$aa
08l3fL01R!40j
0fS01+22407fP
0cl60k0301$88
0cl60k0301+22
0cl60k0301$88
0c7fJfc63Ke301
0c40j0462k2301
0c40j0462k2301
0c40j0462k2301
0c40j0462k2301
0c40j0462k2301
0c40j0462k2301
0c40j0462k2301
0c40j0462k2301
a272"2290g |
0c40j0462k2301
890880"8850g |
0c4003i0462g38
a2"2290g |
0c4041i0462g40
03gf8e665c014
0c4041i0462g40
83g411222g1404
0c40f962e38704
60411107cf83g
0c404191044884
040803g411222
0c40411107cf84
4511044883g41
0c404111040804
3bbbc38703gf0
0c404511044884
140480h0809"08
0c403bbbc38704
90g |
0c40j0462k2301
0c40j0462k2301
0c40j0462k2301
0c40j0462k2301
0c40j0462k2301
0c40j0462k2301
0c40j0462k2301
0c40j0462k2301
2a#aaa52a#aaa5
85#555f85#555f
2a$aa2a$aa405f
85#555f85#555f
2a#aaa52a#aaa5
85#555f85#555f
2a$aa2a$aa405f
5f85#555f405f
25$55405fJfdk
9fK405fJfdk14
2a$aa405fJfdk
01Kf404k$5550
f404)8890g |
89$88894060j03
4060j03k1406)22
8f$888f4060j03
2a#aaa52a#aaa5
85#555f85#555f
2a$aa2a$aa4060
85#555f85#555f
2a#aaa52a#aaa5
85#555f85#555f
2a$aa2a$aa4060
85#555f85#555f
2aae"aaa52aae
405fJfdk1406#22
405fJfdk1405$88
Jfdk1406)2290
405fJfdk1405$88
405fJfdk1406#22
405fJfdk1405$88
Jfdk1406)2290
Jfdk1405$8808
1406#2220a2#22
05$8808#8850g |
1406$222a#aa90
g |
20a2#2290g |
08#8850g |
g |
08#8850g |
20a2#2290g |
08#8850g |
g |
#8850g |
90g |
k1404j01k50g |
90g |
k1404#888908#88
4060j03k1404$22
4060j03k1404#88
j03k1406)2290
4060j03k1404#88
4060j03k1404$22
4060j03k1404#88
j03k1406)2290
4060j03k1404#88
"aaa5406003i03
50g |
a2#2290g |
8908#8850g |
g |
8908#8850g |
a2#2290g |
8908#8850g |
g |
8908#8850g |
g38i140422c2"22
8592"555f8550
"555f406041i03
g40i14049048!88
i23012a$aa2ab2
#aa406041i03g
40i14063242#22
i230185f6d5d7
04bed8b8e9c909
i23012a832a08
1064431222a282
62gf8e665c023
411222g140490
62g411222g2301
g1406324443!02
62g411222g2301
1222g1404914c
62g411222g2301
e1d78014042eee
62g411222g2301
g0850g |
62gf0e1d78023
5e5f857e799975
f1cccb8850g |
b1252a90c4aa82
24442290g |
018596665f9f5f
ccc9f3e9088aac
2a!aaa830!2ab2
22a224442290g |
859a6659955f85
c912a9088aaccc
2a!77a72e252a
f2e1c2a3e1c3af
85h10505f85!41
5f4060f962e387
012a$aa2a$aa40
60j03k1406)22
85#555f85#555f
2a#aaa52a#aaa5
85#555f85#555f
2a$aa2a$aa4060
85#555f85#555f
2a#aaa52a#aaa5
85#555f85#555f
2a$aa2a$aa4060
4060j03k1404#88
4060j03k1404$22
4060j03k1404#88
j03k1406)2290
4060j03k1404#88
4060j03k1404$22
4060j03k1404#88
j03k1406)2290
8908#8850g
a2#2290g |
8908#8850g
g |
8908#8850g
a2#2290g |
8908#8850g
g |
g |
a5406041910448
85!5599955f40
cc8850g |
cc"aa40604111
!5599955f4060
8850g |
bcb875eaa54060
2290g |
g055f4060j03k
|
|
|
|
0c7fJfc63Ke301
85#555f85#555f
4060j03k1404#88
0cl60k030125$55 25$554060j03k
1404$22a2#2290
0cl60k03019fK
9fK4060j03k14
04#888908#8850
0cl60k03012a$aa 2a$aa4060j03k
1406$aa2a#aa90
0fS01R407fPf4
05)5550g |
08r!01r!40p!04
p10g |
0fS01Rc07fPfc
07Pf0g |
zzs |
zzs |
zzs |
zzs |
zzs |
l02h10p02h70o
08g01c0n04h60
j |
k2002h10o2002
h88n8008g0220
m4004ha0j |
k2002h30o2002
g0104n8008g04
10m4004ha0j |
j3c7c121cg50n
3c7c121c0104m
f1f048700410l
j42241222g10n
42241222g04l01
08904888g20l84
j42!2241g10n42
!2241g08l0108
88890401c0l84
j60!2241g10n60
!2241g10l0180
888904g20lc0!44
j1821427fg10n
1821427fg60m60
8509fcg10l3042
j06214240g10n
06214240g80m18
8509g0410l0c42
j4221c241g10n
4221c24101m01
088709!0410l84
j42208222g10n
4220822201m01
088208880220l
j3c18821cg10n
3c18821c01fcm
f062087001c0l
k01s01r04q02n |
k01s01r04q02n |
k06s06r18q0cn |
zzs |
\enddata{raster, 539697288}
\view{rasterview,539697288,1392,0,0}}
8908#8850g |
g |
g |
g |
78f824380120j |
4824440120j |
!44820220j |
820220j |
84fe0420j |
848007f8j |
438482g20j |
84410444g20j |
78310438g20j |
The following objects are all composed of one or more buttons, providing
a
variety of interfaces. For descriptions of the attributes listed below,
see
the Attributes section above.
\subsection{
3.2.1 The button view - buttonV
}An SPST switch, that increments the value's primary value by one.
[string] <foreground-color> ()
[string] <background-color> ()
[long] <bodyfont-size> ()
[string] <bodyfont> ()
[string] <label> (Button)
[string]<style>()
\subsection{3.2.2 The multiple button view - mbuttonV
}
A single object that can support a series of buttons in a radio button
mode
(i.e. only one button may be pushed at a time).
[string] <foreground-color> ()
[string] <background-color> ()
[long] <bodyfont-size> ()
[string] <bodyfont> ()
[string] <label> (one:two:three:four)
[string] <placement> (1C)
[string]<style>()
\subsection{3.2.3 The control button view - controlV
}
A subclass of buttonV, this valueview supports two special attributes
\italic{class} and \italic{function}. Valid attributes are
[string] <Auto-Init> ()
[string] <function> ()
[string] <class> ()
[string] <foreground-color> ()
[string] <background-color> ()
[long] <bodyfont-size> ()
[string] <bodyfont> ()
[string] <label> (Button)
[string]<style>()
\subsection{3.2.4 The fourway switch view - fourwayV
}This is a fourway switch, that sets the value's primary value to 0,1,2,
or 3,
starting with the upper left corner and going clockwise. Its attributes
are
[string] <foreground-color> ()
[string] <background-color> ()
[long] <bodyfont-size> ()
[string] <bodyfont> ()
[string] <':' separated labels> (Four:way)
[string]<style>()
\subsection{3.2.5 The on-off switch view - onoffV
}A two-way switch, which sets a value's primary value to 0 for down and 1
for
up. its attributes are
[string] <foreground-color> ()
[string] <background-color> ()
[long] <bodyfont-size> ()
[string] <bodyfont> ()
[string] <top label> (switch)
[string] <bottom label> (switch)
[string]<style>()
\section{3.3
Range Views -
bargraphs thumbwheels and sliders.
}The following views can be used for the entry and display numeric data.
\section{\subsection{3.3.1
}\center{\
\begindata{raster,539697544}
2 0 72621 72621 0 0 333 152
bits 539697544 333 152
The slider switch view - sliderV
}
zzh |
zzh |
zzh |
zzh |
zzh |
zzh |
zzh |
03O80Oe03fNf8
02o!80n!20n!08
02o!80n!20n!08
02o!80n!20n!08
02o!80n!20n!08
02o!80n!20n!08
02o!80n!20n!08
02o!80n!20n!08
02o!80n!20n!08
02i03c6j!80if1
02i0209j!80i82
02i0209j!80i82
02i0389j!80ie2
02j49j!80i1240
02j49j!80i1240
02i0386j!80ie1
02o!80n!20n!08
02i7fGfci!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
0fNfeg |
n02g |
n02g |
n02g |
n02g |
n02g |
n02g |
n02g |
n02g |
80i!20i3c60i!08
40i!20i2090i!08
40i!20i2090i!08
40i!20i3890i!08
i!20i0490i!08
i!20i0490i!08
80i!20i3860i!08
n02g |
0a!aai!20h07H
1fGfci!20h04h
155554i!20h04
1fGf0i!20h04h
0b5544i!20h04
1eaab0i!20h04
155544i!20h04
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
155544i!20h04
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
155544i!20h04
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
155544i!20h04
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
155544i!20h04
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
155544i!20h04
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
i0f18i02g
i0824i02g
i0824i02g
i0e24i02g
i0124i02g
i0124i02g
i0e18i02g
|
|
|
|
|
|
|
c0h!08h01!5540
40h!08i!aa80h
h40h!08h01!44
40h!08i9111i02
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h02g |
02g |
40h02g
g |
i02g |
02g |
40h02g
02g |
i02g |
02g |
40h02g
02g |
i02g |
02g |
40h02g
02g |
i02g |
02g |
40h02g
02g |
i02g |
02g |
40h02g
02g |
i02g |
02g |
40h02g
02g |
i02g |
02g |
|
|
|
|
|
|
|
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i5fGf4i!80h
02i5fGf4i!80h
02i58g34i!80h
02i58g34i!80h
02i58g34i!80h
02i58g34i!80h
02i58g34i!80h
02i58g34i!80h
02i58g34i!80h
02i58g34i!80h
02i58g34i!80h
02i58g34i!80h
02i58g34i!80h
02i58g34i!80h
02i58g34i!80h
02i5fGf4i!80h
02i5fGf4i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
02i40g04i!80h
155544i!20h04
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
155544i!20h05
1eaab0i!20h05
0aaaa4i!20h05
1fGd0i!20h05H
155544i!20h05
1fG10i!20h05H
0ab444i!20h05
1feb10i!20h05
155444i!20h05
1feb10i!20h05
0aa444i!20h05
1fd110i!20h05
15!44i!20h05H
1f1110i!20h05
0b5544i!20h05
1eaab0i!20h05
155544i!20h05
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
155544i!20h04
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
155544i!20h04
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
155544i!20h04
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
155544i!20h04
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
155544i!20h04
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
155544i!20h04
1eaab0i!20h04
0b5544i!20h04
1eaab0i!20h04
155544i!20h04
1eaab0i!20h04
0a!44i!20h04h
1d1110i!20h04
14!44i!20h04h
!1110i!20h04h
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
H40h!08h01!44
H40h!08i80g80
H40h!08h010445
40h!08i911080
H40h!08h014445
40h!08i911080
H40h!08h010445
H40h!08i911080
H40h!08h014445
H40h!08i911080
H40h!08h010445
H40h!08i911080
40h!08h014445
H40h!08i911080
H40h!08h011555
H40h!08i!aa80
H40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
h40h!08h01!44
h40h!08i9111i
40h!08h01!44i
h40h!08i80j02
40h!08h01!4440
40h!08n02g |
40h02g
02g |
i02g |
02g |
40h02g
h02g |
i02g |
h02g |
40h02g
h02g |
i02g |
h02g |
40h02g
h02g |
i02g |
h02g |
40h02g
h02g |
i02g |
h02g |
40h02g
02g |
i02g |
02g |
40h02g
02g |
i02g |
02g |
40h02g
02g |
i02g |
02g |
40h02g
02g |
i02g |
02g |
40h02g
02g |
i02g |
02g |
40h02g
02g |
i02g |
02g |
40h02g
02g |
i02g |
02g |
40h02g
02g |
02g |
g |
h02g |
|
|
|
|
|
|
|
|
|
|
|
|
|
02i40g04i!80n
!20h07Hc0h!08
n02g |
02i7fGfci!80n
!20n!08n02g |
02o!80n!20n!08
n02g |
02o!80n!20n!08
n02g |
02o!80n!20n!08
n02g |
02o!80n!20n!08
n02g |
02o!80n!20n!08
n02g |
02o!80n!20n!08
i1808i02g |
02o!80h01!80i
!20i6020i!08i
08j02g |
02i0602j!80i80
j!20i20j!08i0e
18i02g |
02i02k!80ie180
i!20i3860i!08
i0908i02g |
02i0386j!80i90
80i!20i2420i!08 i0908i02g |
02i0242j!80i90
80i!20i2420i!08 i0908i02g |
02i0242j!80i90
80i!20i2420i!08 i1dbei02g |
02i0242j!80h01
dbe0i!20i76f8
i!08n02g |
02i076f80i!80
n!20n!08n02g |
02o!80n!20n08
0fNfeg |
02o80Oe03fNf8
q |
03O80zq |
zzh |
zzh |
zzh |
zzh |
zzh |
k20g01l01h38m
40g0en800180i |
i02g20g01k1001
h44k04g40g11l
08g800280i |
i02g20g03k1001
h82k04g40g2080
k08g800280i |
h03c7c121c005
j1e3e090eg82j
078f8243802080
i |
h042241222001
j21120911g02j
084482444001k
h04!22241001j
21!11208004j08
!4448200ek10!88
h060222241001
j30!11208008j
0c0444482001k
h01821427f001
j0c10a13f8030
j0304284fe0g80
i |
i621424g01j03
10a120g40kc428
48g2080j018850
h04221c241001
j2110e120!80j
08443848!2080
i |
h042208222001
j21104111g80j
084410444011k
h03c18821c001
j1e0c410egfej
07831043800ek
j10o80o20p40l |
j10o80o20p40l |
j60n03pc0o0180
l |
zzh |
zzh |
zzh |
zzh |
zw08j |
\enddata{raster, 539697544}
\view{rasterview,539697544,1393,337,0}
Slider options
j0f1f04870480
108904888480i |
904880i |
180888904880i |
j0608509fd080
901fe0i |
j108870904080
10882088!80i |
0f062087g80i |
}
Used to set and display a value's primary value. Its attributes are
[string] <foreground-color> ()
[string] <background-color> ()
[string] <immediate-update> ()
[string] <read-only> ()
[string] <color> ()
[string] <shade-color> ()
[long] <min_value> ()
[long] <max_value> ()
[long] <bodyfont-size> ()
[string] <bodyfont> ()
[string] <label> (slider)
[string]<style>()
\subsection{
3.3.2 The string display slider switch view - sliderstrV
}
A subclass of sliderV, this object will, by default, display in the same
manner. However, if an external object has provided a string array to the
value object., and the current value is between 0 and the array size,
this
slider will display that string instead on an integer at the top.
Attributes
are the same as sliderV.
\subsection{3.3.3 The bargraph view - bargraphV}
\center{\
\begindata{raster,539697800}
2 0 65536 65536 0 0 167 126
bits 539697800 167 126
zg |
zg |
zg |
zg |
zg |
zg |
07O01Oc0 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04i078ci!01j47
04i0412i!01jc4
04i0412i!01i01
04i0712i!01i02
04j92i!01i03e1
04j92i!01j42j
04i070ci!01j42
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04h3fIe0g!01o
04h20i30g!01o
04h20i28g!01o
04h20i3cg!01o
04h20i36g!01h
04h20i3eg!01h
04h20i2ag!01h
04h20i3eg!01h
04h20i36g!01h
80i40 |
80i40 |
4080i40 |
41j40 |
j40 |
40 |
j40 |
40 |
40 |
40 |
40 |
04"4440h40 |
01"1118h40 |
04#44h40 |
01"1118h40 |
04#44h40 |
04h20i3eg!01h
04h20i2ag!01h
04h20i3eg!01h
04h20i36g!01h
04h20i3eg!01h
04h20i2ag!01h
04h20i3eg!01h
04h20i36g!01h
04h20i3eg!01h
04h20i2ag!01h
04h20i3eg!01h
04h20i36g!01h
04h20i3eg!01h
04h20i2ag!01h
04h20i3eg!01h
04h20i36g!01h
04h20i3eg!01h
04h20i2ag!01h
04h20i3eg!01h
04h20i36g!01h
04h3fIfeg!01h
04h15"555ag!01
04h0a"aaaeg!01
04h05"5556g!01
04h03Ifeg!01o
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04n!01o40 |
04i60j!01i18k
04i20j!01i08k
04i39b180h!01
04i249240h!01
04i249380h!01
04i2492i!01i09
04i7861c0h!01
04j40i!01j10j
04i0180i!01j60
07O01Oc0 |
zg |
zg |
zg |
zg |
zg |
k40g02l02h30i |
i04g40g02k2002
i04g40g06k2002
h078f8243800a
h084482444002
h08!44482002j
h0c0444482002
01"1118h40 |
04#44h40 |
01"1118h40 |
04#44h40 |
01"1118h40 |
04#44h40 |
01"1118h40 |
04#44h40 |
01"1118h40 |
04#44h40 |
01"1118h40 |
04#44h40 |
01"1118h40 |
04#44h40 |
01"1118h40 |
04#44h40 |
01"1118h40 |
04#44h40 |
01"1118h40 |
04#44h40 |
01"1118h40 |
h04#44h40 |
h0a"aaa8h40 |
h05"5554h40 |
40 |
40 |
40 |
i0e6c60i40
i092490i40
i0924e0i40
2480i40 |
i1e1870i40
40 |
j40 |
|
|
|
|
h50i |
h50i |
j3c7c121cg90i |
j42241222g90i |
42!22410110i |
j60!22410110i |
h0304284fe002
j1821427f0210
i |
ic42848g02j06
21424003fci |
h084438482002
j4221c241g10i |
h084410444002
j42208222g10i |
h078310438002
j3c18821cg10i |
j20n01m |
j20n01m |
jc0n06m |
zg |
zg |
\enddata{raster, 539697800}
\view{rasterview,539697800,1394,0,0}
Bargraph options
}
A view for displaying integers as a bargraph. It displays and edits the
values
primary value. Supports the following attributes.
[string] <immediate-update> ()
[string] <read-only> ()
[string] <color> ()
[string] <shade-color> ()
[long] <min_value> ()
[long] <max_value> ()
[long] <bodyfont-size> ()
[string] <bodyfont> ()
[string] <label> (bargraph)
\subsection{3.3.4 The thumbwheel view - thumbV
\begindata{raster,539698056}
2 0 136879 136879 0 0 79 78
bits 539698056 79 78
p |
p |
3fNf8 |
20n08 |
20n08 |
20n08 |
20n08 |
20i03j08 |
20i0480i08 |
20i0480i08 |
}\center{
20i0480i08 |
20i0480i08 |
20i0480i08 |
20i03j08 |
20n08 |
20n08 |
20n08 |
20n08 |
20n08 |
20h7fHfch08 |
20h60h0ch08 |
20h5fHf4h08 |
20h4d!5564h08 |
20h4a!aaa4h08 |
20h4d400164h08 |
20h4a8ffea4h08 |
20h4d580d64h08 |
20h4a9ffea4h08 |
20h4d301d64h08 |
20h4a3ffea4h08 |
20h4d603d64h08 |
20h4a7ffea4h08 |
20h4cGfd64h08 |
20h48807ea4h08 |
20h4dGfd64h08 |
20h49g7ea4h08 |
20h4dGfd64h08 |
20h49g7ea4h08 |
20h4dGfd64h08 |
20h49Gfea4h08 |
20h4dg7d64h08 |
20h49Gfea4h08 |
20h4dg7d64h08 |
20h49Gfea4h08 |
20h4dg7d64h08 |
20h49Gfea4h08 |
20h4cGfd64h08 |
20h4a803ea4h08 |
20h4cGfd64h08 |
20h4a401ea4h08 |
20h4d7ffd64h08 |
20h4a300ea4h08 |
20h4d1ffd64h08 |
20h4a9ffea4h08 |
20h4d4ffd64h08 |
20h4aa002a4h08 |
20h4d!5564h08 |
20h4fHe4h08 |
20h50h14h08 |
20h70h1ch08 |
20h60h0ch08 |
20h7fHfch08 |
20n08 |
20n08 |
20n08 |
20n08 |
20n08 |
200180g6006h60
08 |
207c80g2002h20
08 |
2054e6da395b86
182008 |
20109255255249
242008 |
2010925525524e
382008 |
2010925524a248
!2008 |
2039d9b5f8a767
1cf808 |
20n08 |
20n08 |
3fNf8 |
p |
\enddata{raster, 539698056}
\view{rasterview,539698056,1395,0,0}
The Thumbwheel}
Similar to the sliderV, the thumbwheel differs in that, 1. when it gets
to the
maximum value, it will cycle back to the minimum value and 2. It has an
additional attribute to indicate what increment should be added to the
number
with each movement.
[string] <foreground-color> ()
[string] <background-color> ()
[long] <increment> (10)
[long] <min_value> (0)
[long] <max_value> (100)
[long] <bodyfont-size> (10)
[string] <bodyfont> (andy)
[string] <label> (Thumbwheel)
\subsection{3.3.5 The string display thumbwheel view - thumbstrV
}
Like sliderstrV above, can display string values instead of numbers. See
sliderstrV above for details. attributes are the the same as thumbV.
\section{3.4
Views for text manipulation.
}The following views provide for the entry and display if textual data.
\subsection{
3.4.1 The string entry view - enterstrV
}\center{
\begindata{raster,539698312}
2 0 65536 65536 0 0 233 92
bits 539698312 233 92
zp |
zp |
zp |
zp |
zp |
zp |
zp |
zp |
ga2*2223ga2+22
h |
g80q01g80q06h |
g8a*aaabg+888a
h |
g95+55g82*2226
h |
ga8q03ga8*888a
h |
g90q05g82*2226
h |
g88q0bg+888ah |
g90q05g82*2226
h |
ga8q03ga8*888a
h |
g90G80l03h05g
82*2226h |
g891280l01h0b
g+888ah |
g9011i10g02g02
h05g82*2226h |
ga821c3019679
96efbc8386b803
g902124824922
49244482494805
g882129048924
8884450251200b
g90424e071247
10488504921005
ga842588452d4
512a8604b2c803
g90e267039323
91c48404cd7005
g88q0bg#88feb9
8ce1b8"888ah |
g90q05g82"22c2
33ac7fb2"2226
ga8q03ga8"88c8
b18ce030"888a
g90q05g82"22c2
33ac6232"2226
g88q0bg#88c931
8cf0b0"888ah |
g90q05g82"22c3
33aebb32"2226
ga8g0180c00cl
03ga8!8889G79
g90h804004l05
g82"22g02g2002
g88h!8004l0bg
+888ah |
g9161811ae188
l05g82*2226h |
ga89241249248
l03ga8*888ah |
g909441451488
l05g82*2226h |
g892442491710
l0bg+888ah |
g912c82cb2454
l05g82*2226h |
ga9330135c388
l03ga8*888ah |
g90q05g82*2226
h |
g88q0bg+888ah |
g90q05g82*2226
h |
ga8!8889G08%88
g82"22c3&2226
g#88c9088c$88
g82"22c2222c$22
ga8"88c8f31f1e
g82"22c237ac33
h |
h |
h |
h |
c71e78"888ah |
"2226h |
8ah |
h |
8ah |
26h |
f6"888ah |
36"2226h |
ga8q03g,aah |
g90q05g95*5546
h |
g88q0bg88q0ah |
g90q05g90q06h |
ga8q03ga8q2ah |
g90q05g90q06h |
g88q0bg88q0ah |
g90q05g90G82j
60j06h |
ga8q03ga91280
j20j2ah |
g90q05g9011k20
j06h |
g88q0bg8821c6
7032c301c618e0
h0ah
g90q05g902122
90492482492520
h06h
ga8q03ga82124
40892904514880
h2ah
g90q05g904244
208a4e04917040
h06h
g88q0bg884259
90925884b24520
h0ah
g90q05g90e266
e06267034c39c0
h06h
ga8q03ga8n08h
2ah |
g90q05g90n1ch
06h |
g88q0bg88n3eh
0ah |
g90q05g90n7fh
06h |
ga8q03ga8n77h
2ah |
g90q05g90q06h |
g88q0bg88q0ah |
g90q05g90q06h |
ga8q03ga8q2ah |
g90q05g90q06h |
g88q0bg88q0ah |
g90q05g90q06h |
ga8q03ga8q2ah |
g90q05g90q06h |
g88q0bg88q0ah |
g90q05g90q06h |
ga8q03gaa*222a
h |
g90q05g90q06h |
g+888bg+888ah |
g95+55g95*5556
h |
g+aaabg,aah |
g80q01g80q02h |
gSgRfeh |
zp |
zp |
zp |
zp |
zp |
zp |
zp |
zp |
zp |
\enddata{raster, 539698312}
\view{rasterview,539698312,1396,0,0}
The enterstrv object, style 4.
}
|
|
|
|
|
|
This is a combination of a value object and a special sub-class of text.
It is
useful for allowing the user to input text on numbers. The
value_SetString()
function may be used to set the contents of the text area under the
label. If
the user wants to change the value, he may do so by clicking in that area
and
typing, backspacing, cutting, or pasting. Any change to the value string
will
cause it to be displayed in italic until the change is entered and
confirmed
by the user hitting the return key. Only then will the value's string
value be
set and observers notified. Other keystrokes that may be used by the user
are
^U to clear out (but not change) the current contents, and ^G to
redisplay the
actual value. Valid attributes are
[string] <foreground-color> ()
[string] <background-color> ()
[long] <bodyfont-size> ()
[string] <bodyfont> ()
[string] <label> (Enter)
[string]<style>()
\section{
3.5
The string display view - stringV
\center{\
\begindata{raster,539698568}
2 0 65536 65536 0 0 178 85
bits 539698568 178 85
zi |
zi |
zi |
zi |
zi |
0fZfeg |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
}
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08k38ge0g70h30
08k18g60g30h30
08k18g60g3002
08k18g60g3006
08k18786e1e31
08k18cc77!3366
08k18cc6361b3
08k181c637fb3
08k186c636031
08k18cc636030
08k18cc6370b2
08k18fc763b33
08k3c663c1e7a
08t83k02g |
08tc1k02g |
08te2k02g |
08t7ck02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
m02g |
m02g |
o02g |
o02g |
afbb73983ek02
1b31bccck02g |
261c31ccc4k02
8618318cc4k02
c618318ccck02
e618318c78k02
6618318c40k02
6758318c7ck02
c3bc7bce7fk02
g |
g
g
g
g
g
g
g
|
|
|
|
|
|
|
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
08z02g |
0fZfeg |
zi |
zi |
zi |
zi |
zi |
\enddata{raster, 539698568}
\view{rasterview,539698568,1397,0,0}}
An output-only valueview for displaying an externally set string. If
value_GetString() returns NULL, but value_GetStringArray() does not, it
will
index the array by value_GetValue() to find the string. If that also
fails to
produce a string, it will display the label attribute string. attributes
are
[long] <bodyfont-size> (10)
[string] <bodyfont> (andy)
[string] <label> (label string)
[string] <foreground-color> ()
[string] <background-color> ()
\section{
3.6
The click to enter strings view - clicklistV}
\center{\
\begindata{raster,539698824}
2 0 65536 65536 0 0 354 161
bits 539698824 354 161
7fZZIc0 |
f0zzi40 |
70zzi40 |
f0zzi40 |
70zzi40 |
f0v078c10h01c7
40y40 |
70v0cc4j82z40 |
f0v0844h40g44
70v10273186f0
f0v1024924940
70v102493c841
f0v0844920840
70v0cc4932940
f0v078711c630
70x10zj40 |
f0x10zj40 |
70x20zj40 |
f0zzi40 |
7fZZIc0 |
ZZJc0 |
60zzj |
e2/22/22*22g |
60/88/88*8840 |
ea!222a/aa/aa'aa
60!8885/55/55&55
e2!2228zy0280 |
60h44zz40 |
e8!22a8zz80 |
60!8844zz40 |
e2!22a8zy0280 |
60!8844zz40 |
e822a2a8zz80 |
608d4844zz40 |
e2!22a8i03h01
608c0844i01k08
e8!22a8i01k04
60!8844h33316c
e2!22a8h124924
60!8844h163924
e8!aaa8h144924
61!5544h0c4924
e2!2228h08379a
60!8884l40zs40 |
ea!2228l40zs80 |
60!8884le0zs40 |
e2!aaa8zy0280 |
61!5504zz40 |
ea!22a8zz80 |
61!8804i03i01
e2!2228i01k02
61!8804i01h01
ea!22a8h33316c
61!8804h124924
e2!2228h163924
61!8804h144924
ea!22a8h0c4924
61!8804h08379a
e2!2228o88zo02
61!8804o88zp40 |
ea!22a8o70zp80 |
61!8804zz40 |
z40 |
1844c676d8w40
6028492486w40
80284f358180v
6038481506w40
18104c9a18w40
g10e712x40 |
|
|
40 |
|
|
80 |
5440 |
h1c70zn0280 |
20zo40 |
40zo80 |
60f319618440zo
40 |
904924924280zn
0280 |
f0491c924280zo
40 |
804924924380zo
80 |
c849249241zp40 |
70739bd981zo02
80 |
g071czo40 |
08zn0280 |
h0110zo40 |
603bef587910zo
9049192490a0zo
f061112490a0zn
80191124!e0zo
c8491124!40zo
!70fbf67040zo
80 |
80 |
40 |
0280 |
40 |
80 |
40 |
e2!2228zy0280 |
61!8804zz40 |
ea!22a8i03me3
61!8804i01m41
e2!2228i01i04
61!8804h33316c
ea!22a8h124924
61!8804h163924
e2!2228h144924
61!8804h0c4924
ea!22a8h08379a
61!8804zz40 |
e2!2228zy0280 |
61!8804zz40 |
ea!22a8zz80 |
61!8804zz40 |
e2!2228zy0280 |
61g0104i03n71
eaa222a8i01n20
61088904i01j02
62!2228h33316c
61088904h1249
eaa222a8h1639
610d4904h1449
6222a228h0c49
610c0904h0837
eaa082a8zz80 |
61088904zz40 |
62!2228zy0280 |
61088904zz40 |
eaa222a8zz80 |
61088904zz40 |
622aaa28i03h06
61!5504i01h02
ea!22a8i01h02
61!8804h33316c
62!2228h124924
61!8804h163924
ea!22a8h144924
61!8804h0c4924
62!2228h08379a
61!8804zz40 |
ea!22a8zz80 |
61!8804zz40 |
62!2228zy0280 |
61!8804zz40 |
ea!22a8zz80 |
61!8804i03i60
62!2228i01i20
61!8804i01i20
ea!22a8h33316c
61!8804h124924
62!2228h163924
61!8804h144924
80zm80 |
zn40 |
h4022zm0280 |
6032cf32cefb22
90492449924614
f0792479184414
8041244106441c
c8652465124408
703bb33b9c3e08
zn40 |
zn80 |
zn40 |
zm0280 |
zn40 |
zn80 |
c0zl40 |
80zl80 |
h2011zm40 |
60b6196799677d
249049249224c9
24f0493c923c8c
24804920922083
24c84932923289
9a70ed9dd99dce
91zl0280 |
230azm40 |
220azm80 |
220ezm40 |
2204zl0280 |
1f04zm40 |
40c320038ezm02
g41g0104zn40 |
g41g1088zn80 |
6032c64963bc88
904a4951249050
f0424861261050
80424851219070
c84a!49249020
7037e64ff70c20
zr40 |
zq0280 |
0220zp40 |
60b639b7f99666
90492492224924
f049249222492c
80492492224928
80 |
zn40 |
zm0280 |
zn40 |
zn80 |
zn40 |
zm0280 |
zn80 |
zn40 |
zm0280 |
zn40 |
ea!22a8h0c4924
c8492492224918
zn80 |
61!8804h08379a
70edb869999d90
zn40 |
62!2228zy0280 |
61!8804zz40 |
ea!22a8zz80 |
61!8804zz40 |
62!2228zy0280 |
61!8804zz40 |
ea!22a8i0c10zu
80 |
61!8804i04zv40 |
62!2228i0402zt
0280 |
61!8804h0cb737
9960zs40 |
ea!22a8h126492
24c0zs80 |
61!8804h0e4492
3c80zs40 |
62!2228h124492
2080zr0280 |
61!8804h124492
3280zs40 |
ea!22a8h0de739
9dc0zs80 |
61!8804zz40 |
62!2228zy0280 |
61!8804zz40 |
ea!88a8zz80 |
60h04zz40 |
62!2228zy0280 |
60!8884zz40 |
ea!2228zz80 |
60!8884h10g10
zu40 |
62!2228h3cc6fc
zt0280 |
60h44h112290zu
40 |
e8!22a8h11e110
zu80 |
60!8844h110110
zu40 |
62!22a8h119290
zt0280 |
60!8844h0ce6cc
zu40 |
e822a2a8zz80 |
608d4844zz40 |
62!22a8zy0280 |
608c0844zz40 |
e8!22a8zz80 |
60!8844zz40 |
62!22a8zy0280 |
60!8844zz40 |
e8!aaa8zz80 |
61!5544zz40 |
62!222a/22/22'22 80 |
60!8880zz40 |
ea/22/22*2280 |
65/55/55*5540 |
\enddata{raster, 539698824}
\view{rasterview,539698824,1398,0,0}}
This is a specialized valueview for presenting a list of strings to the
user ,
and getting a callback when the user clicks on one of them.
To use, set the string array of the value object to a string array of the
desired choices ( this array must be in permanent storage) . When the
user
clicks on on of them, the string pointer will be set accordingly.
So to set :
...
static char vwlist[2];
vwlist[0] = "first";
vwlist[1] = "second";
value_SetStringArrayAndSize(valueob,vwlist,2);
...
This will place the strings 'first' and 'second' on separate lines
in the
clicklist text area. When the user clicks on on of them , the string
value of
the value object will be set to the clicked on item . So in the call back
routine, the code will be:
result = value_GetString(valueob);
Attributes are the same as stringV.
\section{
3.7
The multiple string entry view - menterstrV}\center{
}\center{
\begindata{raster,539699080}
2 0 65536 65536 0 0 447 146
bits 539699080 447 146
d5/55/55*557f
Pfe |
ZZUfe |
d1/11/11/11%11
10 |
c0zzt02 |
c4/44/44/44&44 |
c1!110a/aa/aa/aa"aa
a2 |
d4!44/55/55/55#55 54 |
c1!1108zzq02 |
c4!4450zzq04 |
c1!1108zzq02 |
d4!4450zzq14 |
c2!aa88zzq02 |
c5!5550zzq04 |
c3111008zzq02 |
d4444550zzq14 |
c3111008i07n3c
c4!4450i03j08
c2h08i03j18h60
d5!1150he6f3ec
01zj14 |
c2111208h659b
2401zj02 |
c4!4450h347b6d
01zj04 |
c2111208h3d9b
2001zj02 |
d5444550h199b
3201zj14 |
c2111208h18ef
9c0380zi02 |
c4!4450zm10zi
c2111208zm38zi
d5444550zk01f8
c2111208zmfezi
c4!4450zmeezi
c2111208zzq02 |
d5444550jc0i70
c2111208i80c0
c4!4450h0180i
c2111208h3ff7
d5444550h659a
c2111208h7998
c4454450h3d98
c21b9208h4d98
d5450550h78fd
c2181208k66g02
c4!4450k66g0e
c2111208k3cg0c
d5444550zzq14 |
c2111208zzq02 |
c4!4450zzq04 |
c2111208jc0g70
d5444550i80c0
c2111208h0180
c4!4450h3ff7fe
c2111208h659a
d5444550h7998
c2111208h3d98
c4!4450h4d98db
c2111208h78fd
d5444550k66i0c
c2111208k66i0c
c4!4450k3ci07
c2111208zzq02 |
d5444550zzq14 |
c2111208zzq02 |
c4!4450jc0g1c
e3c0i7380jc0g
h20184180g01g
188180g03g39k
f001efbcf6cffd
01zj02 |
39k40g03zj04 |
40g05zj02 |
8c81be3cf7802d
1edb1e0ccc5b18
6d980336d99b59
668c819b659bg
2d336db3049249
f9f3f6d9fb1e66
07019b79fbg27
0f6dbf058e493c
6d800306d9830f
6607019b3d83g
27336db0051249
7dc80396d9cb13
6602019b4dcb18
23336db9031249
b6f001eeecf79e
3f0203fbf8f198
711dedde020de6
04 |
02 |
7czi14 |
02 |
04 |
ge0zz14 |
h40300110zz02 |
c030g10zz04 |
fe3e1fecf3c010
db6432ccb66020
db643cccb7e040
db781ec6b6g80
db3026c7372110
fbbc3c637bc1f0
zzi02 |
zzi04 |
zzi02 |
g0ej0eh0ezt02 |
g30g06j06h06zt
h30g06j06h06zt
3e3c78f667ecf7
db6436cd96ccb5
db64363d878cb1
db7836cd86cf31
3036cdd666319b
fbbc2c76ee77f8
c0zz14 |
c0zz02 |
80zz04 |
l70h70zt04 |
zz02
zz14
zz02
zz04
zz02
zz14
|
|
|
|
|
|
14 |
02 |
7f1eg79e67b60
9b6db6gcb36cd
9b6db67cc336cd
9b6db6gc336cd
edb6geb36cd80
f1bddbg71ef7b
zr04 |
a0zr02
80zr14
80zr02
zr04 |
c0zr02
|
|
|
|
c2111208i80c0
d5444550h0180
c2111208h3ff7
c4!4450h659adb
c2111208h7998
d5444550h3d98
c2111208h4d98
c4!4450h78fdfb
c2111208k66i66
d5444550k66i66
c2111208k3ci3c
c4!4450zzq04 |
c2111208zzq02 |
d5444550zzq14 |
c2111208he0h70
c4!4450h60h30
c2111208h60h30
d5444550h67be
c2111208h6cdb
c4!4450h6cdb64
c2111208h6cdb
d5444550h6cdb
c2111208hf7bb
c4!4450j66h01
c2111208j66h07
d5444550j3ch06
c2111208zzq02 |
c4!4450zzq04 |
c2111208zzq02 |
d5444550jc0g70
c2111208i80c0
c4!4450h0180h
c2111208h3ff7
d5444550h659a
c2111208h7998
c4!4450h3d98db
c2111208h4d98
d5444550h78fd
c22aaa08k66h01
c4555450k66h07
c3111008k3ch06
d4444550zzq14 |
c3111008zzq02 |
c4!4450zzq04 |
c3111008zzq02 |
d4444550zzq14 |
c3111008zzq02 |
c4!4450zzq04 |
c3111008zzq02 |
d4444550zzq14 |
c3111008zzq02 |
c4!4450zzq04 |
c3111008zzq02 |
d5!1150zzq14 |
g34l30h30zt02 |
h30l30h30zt14 |
fe3e79ed9e3f67
643336b365acdb
db6433363f658c
db78333630798c
db30333639318c
bc79ef1e3fc78d
zzg02 |
zzg14 |
zzg02 |
g700ei03h1030
g301ag04g03h30
g3018g0cj5080
3e3c78f67cf7de
6436cdb6599b6c
36cdb6599b6c7c
7836cdb3599b6c
3036cdb3999b6c
bc2c78d9bcf776
zzi04 |
zzi02 |
zzi14 |
g700ej30zv14 |
g30g301ag04h10
30g3018g0ch10
fe3e3c78f67cf7
db6436cdb6599b
db6436cdb6599b
7836cdb3599b6c
db3036cdb3999b
fbbc2c78d9bcf7
k01zv02 |
k02zv04 |
k06zv02 |
bbf8f003cf33db
6db00659b66dzs
db6db3e619b66c
db6db00619b66c
df6db00759b66c
eed8038f7bdezs
zs02
04 |
zs02
zs14
zs02
04 |
zt02 |
c0zt04 |
zt02 |
g7f7cf011e0zt
14 |
gcb4d981130zt
02 |
f319f81110zt04 |
g7b31801110zt
02 |
g9b65c81190zt
14 |
gf7fcf038e0zt
02 |
zv02 |
zv04 |
de06587660zu02
6c09249240zu14
6c072492c0zu02
09249280zu04 |
6c09249180zu02
7606f669zv14 |
|
|
|
|
|
|
|
|
c0h08zzq02 |
c4!4450zzq04 |
c1!1108zzq02 |
d4!4450zzq14 |
c1!1108zzq02 |
c4!4454/44/44/44#44 |
c1!11zzr02 |
d4/44/44/44&44 |
ca/aa/aa/aa&aa |
d5/55/55/55%55
54 |
ZZUfe |
f1/11/11/11%11
12 |
e0zzt02 |
e4/44/44/44%44
46 |
e1/11(111e91/11*11
1a |
f4/44(445984/44*44
46 |
e1/11(111091/11*11
1a |
e4/44(44580e77
78/44(4446 |
e1/11(110e1922
45/11(111a |
f4/44(44!4366
7c/44(4446 |
e1/11(11109d14
41/11(111a |
e4/44(44549154
/44)4446 |
e1/11(11199909
62/11(111a |
f4/44(44570e88
3c/44(4446 |
e1/11(11g1011
01/11(111a |
e4/44/44/44%44
46 |
e2/aa/aa/aa&aa |
f5/55/55/55%55
56 |
e0zzt02 |
ZZUfe |
ZZUfe |
\enddata{raster, 539699080}
\view{rasterview,539699080,1399,0,0}}
The menterstrV (for multiple enter string view) is a specialized
object for
displaying a list of strings and allowing the user to enter a response to
each. When first displayed, this object will place the caret next to the
end
of the first item in the list, where the user can enter their response.
List
items will be in bold, user entries will not. Each time the user types
'return', the caret moves down to the end of the next item. After the
last
item, the user will be prompted to confirm the entries. When confirmed,
the
value callback routines will be called, with the string array set to the
user
responses. The user can also confirm an entry by clicking on the button
at the
bottom of the list.
To use, the client sets the value string to a string, with the
elements
separated by newlines( '\\n' s).
So to set :
/* first clear the array, so the call back routine will know that
nothing
has been entered yet */
value_SetArraySize(val,0);
/* Now zero the string as a signal to the object to clear out any
current
entries */
value_SetString(val,"");
/* set the string with the two prompts */
value_SetString(val,"question 1\\nquestion 2\\n");
and in the callback
char **foo,*resp1, *resp2;
int size;
size = value_GetArraySize(self->menterob);
foo = value_GetStringArray(self->menterob) ;
if(size == 2)\{
resp1 = foo[0];
resp2 = foo[1];
\}
It is also possible to set default answers. This is done by
inserting them in
the prompt string following an '@'. So if one wanted to have default
answers
'ans 1' and 'ans 2' in the above example, the value_SetString call would
look
like
value_SetString(val,"question 1@ans 1\\nquestion 2@ans 2\\n");
these default answers will show up to the user in plain text and will be
editable.
An example of the menterstrV can be seen in the arbcon itself , where it
is
used for editing object resources. The illustration above was taken from
an
Arbcon.
Attributes are the same as buttonV.
\section{3.8
Misc views
}\subsection{3.8.1
The piano keyboard view - pianoV
}\center{\
\begindata{raster,539699336}
2 0 136533 136533 0 0 81 82
bits 539699336 81 82
q |
q |
q |
q |
1fNfcg |
1fNfcg |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
18204408102048
110204g |
183fc7f8103fcf
f1fe04g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1802g801004g80
2004g |
1fNfcg |
q |
q |
q |
\enddata{raster, 539699336}
\view{rasterview,539699336,1400,87,0}
}This is a somewhat specialized valueview for displaying one octave on a
piano
keyboard. Any number of keys may be depressed at a given time. The value
is
used as a bitmap to indicated depressed keys.
Its attributes are
[long] <bodyfont-size> (10)
[string] <bodyfont> (andy)
[string] <':' separated labels> (:c:#:d:#:e:f:#:g:#:a:#:b)
\begindata{bp,539671752}
\enddata{bp,539671752}
\view{bpv,539671752,1401,0,0}
\chapter{4 Substrates}
In order to create an application, it is necessary to arrange the insets
into
one or more substrates, i.e. insets that can contain other insets. Adew
support the use on any Atk inset with this capability as a substrate.
This
chapter provides a short overviews of some of the substrates available.
\section{4.1
The Text inset
}
Adew makes it easy to create and get a handle on the basic objects of ATK
(text , table, etc.) . The text object can be particularly useful, for
presenting information to the user, as a generalized storage object for
data,
or as a substrate for containing other objects. Below I briefly list some
useful text and textview methods. For more details, see the Atk
documentation.
\subsection{4.1.1 Text}
The following deal with reading and writing
a text object.
text_Read(struct text *self,FILE *file, long id)
returns long;
text_Write(struct text *self,File *file, long writeid, int level)
returns long;
The following deal with inserting and deleting characters in text.
text_Clear(struct text *self,);
text_InsertCharacters(struct text *self,long pos, char *str, long
len)
returns boolean;
/* FALSE if read-only */
text_AlwaysInsertCharacters(struct text *self,long position, char
*string,
long size);
text_AddInCharacter(struct text *self,long pos, char c);
not
modify marks */
/* Does
text_DeleteCharacters(struct text *self,long pos, long len)
returns boolean;
/* FALSE if read-only */
text_AlwaysDeleteCharacters(struct text *self,long position, long
size);
text_ReplaceCharacters(struct text *self,long pos, long len, char
*repStr,
long repLen)
returns boolean;
/* FALSE if read-only */
text_AlwaysReplaceCharacters(struct text *self,long pos, long len,
char
*repStr, long repLen);
text_GetLength(struct text *self,)
returns long;
text_GetChar(struct text *self,long pos)
returns long;
The following attempt to provide the functionality of the C strings
package
for text
text_CopyText(struct text *self,long pos, struct text *srctext, long
srcpos, long len)
returns boolean;
/* FALSE if read-only */
text_AlwaysCopyText(struct text *self,long pos, struct text *srctext,
long
srcpos, len);
text_Index(struct text *self,long pos, char c, long len)
returns long; /* functions like the unix index() , but works on
text in
a range and returns -1 on failure*/
text_Strncmp(struct text *self,long pos, char *str, long len)
returns int;
text_Textncmp(struct text *self,long pos, struct text *text, long
pos2,
long len)
returns int;
The following functions deal with the read-only area of the text
text_GetFence(struct text *self) mark_GetLength((self)->fence);
text_SetFence(struct text *self,pos) mark_SetLength((self)->fence,
pos);
text_ClearFence(struct text *self) mark_SetLength((self)->fence, 0L);
The following will insert a file into a text object
text_AlwaysInsertFile(struct text *self,FILE * file,char *filename,
long
position) returns long;
text_InsertFile(struct text *self,FILE * file,char *filename, long
position) returns long;
The following insert objects into text.
text_InsertObject(struct text *self,long pos, char
*dataobject_name,char
*view_name) returns struct viewref *;
text_AddView(struct text *self,long pos, char *viewtype, struct
dataobject
*dataobject) returns struct environment *;
\subsection{4.1.2 Textview
}
The following deal with the current text selection.
textview_SetDotPosition(struct text *self,long newPosition);
textview_SetDotLength(struct text *self,long newLength);
textview_GetDotPosition(struct text *self,) returns long;
textview_GetDotLength(struct text *self,) returns long;
The following deal with the visibility of the current text
selection.
textview_Visible(struct text *self,long pos) returns boolean;
textview_FrameDot(struct text *self,long pos);
\section{4.2
The Page Inset
}
The page inset was recently added to provide a general mechanism
for allowing
an application to switch between whole sections of switches, text, etc.
under
program control. Loosely based on code from Nathanial Borenstein's book
\italic{The Andrew Toolkit, An Introduction}, the page object may contain
any
number of pasted in insets, and can switch between them under either user
or
program control. Since each inset can contain other insets, complex
applications can be built up.
\subsection{4.2.1 Inserting pages
}
Like other insets, pages may be inserted by pasting them in with
the arbcon.
When inserted , a new page will display with the phrase <No Objects>. The
page
menu (labeled \bold{Flip}, so as to not be confused with the text Page
menus)
will contain a paste option, and other objects (lset, text, etc.) may be
copied from the arbcon and pasted in the page object. The \bold{Flip}
menu is
persistent, so that even when a subobject is active on a page, the
application
creator can paste in new objects, each of which will be added as a
follow-on
to it's predecessor.
As new objects are added, the page menu grows, to contain the
logical names
of each of the subobjects that aren't currently being displayed. The user
may
bring up any of the hidden objects choosing the object name on the menu.
The
logical name of any object may set from the Arbcon, see the
\italic{Tutorial
on ADEW} for details. The objects may also be visited in order by using
the
\bold{Flip Page} menu option.
\subsection{4.2.2 Programmer interface to page
}
The following methods and macromethods are defined by the page
object. The
methods below that take a position parameter, may either be given a
positive
long integer indicating which object (numbered 1 - n) , or one of the
following macros
\typewriter{macro
page_CURRENT
meaning
The current object being displayed
page_AFTERCURRENT The next object
page_BEFORECURRENT
The previous object
page_ATEND
The last object in the list
page_ATBEGINING
The first object in the list
}
\bold{page_GetPostMenus(self,)
page_SetPostMenus(self,val)
}
The page object maintains a flag indicating whether or not it's
view should
be posting the menus described above. For many applications, it may be
desirable to turn off the pages menus by calling
page_SetPostMenus(self,FALSE);
\bold{page_AddObject(self,struct dataobject *d, char *label, char
*viewname,long position) returns boolean;
}\leftindent{Adds a new object to the list of pages. Arguments are
struct dataobject *d
\leftindent{the dataobject itself;
}char *label
\leftindent{A label to be associated with the object. If the object is a
cel,
then this label should be an empty string as the page object will use the
cel
reference name. This name may be set via the Arbcon, or with the
cel_SetRefName method. See below.}
char *viewname
\leftindent{Name of the type of view to be associated with the object. If
NULL, the objects default view will be used.
}long position
\leftindent{Indicates what page to insert the object as. Typically, this
will
be one of the macros listed above. Future pages will Not be reserved.
i.e. if
an object is inserted as the 100th page in an inset that currently has
only
two pages, it will be inserted as the last (third) page.
}}
\bold{page_DeleteObject(self,struct dataobject *d) returns boolean;
}
Removes the page containing the given dataobject.
\bold{page GetNowPlaying() returns struct dataobject *;
}
Gets a pointer to the current object.
\bold{page_GetNowPlayingName(self) returns char *;
}
Gets the name of the current object
\bold{page_SetNowPlaying(self,struct dataobject *d) returns boolean;}
Given a dataobject, sets the current page.
\bold{page_SetNowPlayingByName(self,char *name) returns boolean;
}
Given a reference name (i.e. label), sets the current page.
\bold{page_SetNowPlayingByPosition(self,long position) returns boolean;
}
Given a position (or one of the macros above), sets the current
page.
\bold{page_GetPositionOfObject(self,struct dataobject *d) returns long;
}
Returns the position of a given object. (0 if not found).
\bold{page_GetNameOfObject(self,struct dataobject *d) returns char *;
}
Returns the name of a given object. (NULL if not found).
\bold{page_GetObjectAtPosition(self,long position) returns struct
dataobject
*;}
Given a position (or one of the macros above), returns the object
at that
position.
\bold{page_GetObjectByName(self,char *name) returns struct dataobject *;
}
Given a reference name (i.e. label), returns the object.
\bold{page_GetObjectCount(self,) returns long;
}
Returns the number of pages in the inset.
\section{
4.3
Lset
}
Lset is a tool for building up a tree of views. It allows the user to
start
with an empty window and split it, either horizontally or vertically into
two
separate views, each of which may either be made to contain an inset , or
split again. It is particularly adapted for use in creating applications
with
the cel and Arbcon objects. (It is, in fact, the object used to create
the
Arbcon. See the Arbcon documentation for details.)
The lset indicates that it has the input focus by blacking out its
rectangle.
At that time, the following menu options become active for that
rectangle.
\subsection{4.3.1 Menu options.
}
\paragraph{4.3.1.1
split horizontal
split vertical
}\indent{Changes the cursor to horizontal bars (or vertical bars) and
sets the
mode to split the lset into two lsets at the position of the next hit. It
is
possible to change from vertical to horizontal mode before splitting the
window. Clicking outside of the black rectangle will cause it to lose the
input focus and exit this mode. Once split, the division between two
lsets may
be moved by clicking and dragging the mouse when one of the bar cursors
appears.
}
\paragraph{4.3.1.2
Unsplit Lset
}
\indent{Undoes the split operation. Any object that may have been
inserted in
the other half of the split will be maintained.
}
\paragraph{4.3.1.3
Set cel
}
\indent{Inserts a cel inset in the lset, the cel is responsible for
determining its own child, usually via an Arbcon (see Arbcon
documentation).}\indent{
}\paragraph{4.3.1.4
Set Object
}
\indent{Can be used to set objects other than a cel in the lset, the name
of
the object will be prompted for.}
\paragraph{4.3.1.5
Paste
}
\indent{Creates a child object and inserts the contents of the cut
buffer.
}
\subsection{4.3.2 Notes.
}
It is not possible to split an lset that contains an inset. However, if
one is
using cels and the Arbcon to create the child insets, this effect may be
achieved by selecting the child inset as the current celview, clicking on
the
cut button in the Arbcon to cut the cel, splitting the now empty lset as
desired, and then using the paste operation to reinsert the cut cel in
the
desired location.
Similarly, when creating applications, it is often useful to have one or
two
spare blank lsets that can be used as holding areas for previously
created
cels. Thus, if one wishes to exchange the location of two cels, one can
cut
out one of the cels, paste it in the holding area, cut the other and
paste it
in the old location of the first one, and finally cut the first one from
the
holding area to the old location of the second one.
\subsection{4.3.3 Programmer interface
}
See the lpair documentation.
\section{4.4
Layout
}
From the layout help file
\indent{
\italic{Layout} and its companion \italic{layoutview} provide a way to
lay out
a combination of ATK objects in a single rectangle with arbitrary
positions
and sizes. Each object is given a fixed size and position. Overlapping
objects will generally work, although there are a few cases of advanced
graphic operations which are not properly handled.
}
To use layout to create an Adew application, you will want to use
the\italic{
paste on create} authoring option. The mode of creation will then be to
select
the object in the Arbcon, and then create the rectangle in layout where
that
object is to be placed. Layout will then automatically paste the desired
object in. It will be necessary to exit the Authoring mode in layout in
order
to click on created objects and enable the setting of the application
attributes. For more information, see the layout help file.
\begindata{bp,539690184}
\enddata{bp,539690184}
\view{bpv,539690184,1402,0,0}
\chapter{5 Createcon - Creating Controllers}
Once an application is prototyped by pasting together various
insets,
Createcon can be used to generate a controller class that can tie the
different pieces into an application. Createcon generates C source code
and a
.ch file for the Class preprocessor. The object that is created will have
pointers to all of the dataobjects and views in the application, callback
procedures for all of the value objects, and observer links to all of the
other objects. The generated code takes responsibility for making sure
that
these pointer and links are all established at run time. With this taken
care
of , the application programmer can often easily add code to get the
objects
to interact together as an application. Refer to the Tutorial document
for a
simple detailed example.
An alternative to createcon is the use of the interactive Ness
language, that
allows the controller information to be embedded in the document itself.
Please refer to the NESS documentation for further information.
Createcon allow for changes to be made in the application. If the
user
decides to add another button, or change a slider to a thumbwheel,
another run
of createcon will update any existing controller source code and make it
compatible with the new collection of objects. The generated source code
contains many comments of the form.
\example{/* user code begins here for outputCallBack */
/* user code ends here for outputCallBack */
}
The application programmer should insure that all of his/her code
is placed
in the framework of these comments, as this allows Createcon to preserve
this
code in future versions.
In addition to the needed .c and .ch files, Createcon will also
generate a
shell script called makefoo, where \bold{foo} is the name of the new
application class to be generated or modified, and an Imakefile for
generating
the application. Running makefoo is usually all that needs to be done to
generate the makefile and compile and build the dynamic object.
Normally, the name of the class to generate is learned from an
embedded
controller button embedded in the application. Createcon can also take
this
information on it's command line. Applications without controller
buttons,
however, can only be run as stand-alone applications using
\bold{Runadew}
(see below). Adew applications with control buttons can be included in
other
objects, sent as mail message , etc.
\section{5.1
Eliminating control buttons
}
Some early Adew users have complained about the necessity of
including a
control button in their application. The reason for this restriction was
that
the control button provides a link between the file containing the pieces
of
an application, and the controller class. This was particularly important
where the application was included in a document that could contain
numerous
other applications, each of which could contain objects with conflicting
names. In this case, the control button linked the controller in with the
proper namespace.
None the less, it was seen that in the common case of using Adew to
create a
stand-alone application, something could be done to eliminate the control
button. This was accomplished by adding some new arguments to createcon,
and
creating runadew, a new application class that could replace ez for
running
Adew applications to provide the same facilities normally provided by the
control button.
\section{5.2
Creating Insets
}
The latest release of Adew also supports the dynamic creation of insets
by
createcon. In this case the resulting application consists of data-object
and
view code, rather than an object template, saved as a data stream, and an
external controller. Application thus created can then be inserted in a
text
of other ATK substrate via the normal object insertion methods, rather
then
via a paste or insert-file. They may also be added to the list of objects
insertable with the arbcon. They may also read and write object specific
data,
the code for doing so may be automatically generated (see below). In
short,
they are first class ATK objects. The -I flag to createcon will cause it
to
generate inset code (i.e. .c and .ch files for both a dataobject and a
view),
rather than controller code. In this case, the callback procedures and
pointers will become part of the created view. In most cases, createcon
will
support the conversion of old application to insets. (see below).
\section{
5.3
Arguments
}
The current arguments to createcon are
\italic{-O file
}\indent{When given this argument, createcon will also output a shell
script
for running the application within runadew.
}
\italic{-T "title"
}\indent{Only appropriate with the -O flag, this title will be added to
the
created shellscript and passed on to runadew for display in the title bar
of
the finished application.
}
\italic{-C class(:oldclassname)
}\indent{Specifies the class to create. This must be provided if no
control
button is included in the source file, from which createcon normally gets
this
information.If an old classname is given, it will merge in the
information
from that file
}
\italic{-V Viewname(:oldviewname)
}\indent{If -I is specified, -V can be used to specify the name of the
view to
create. By default, a 'v' will be appended to the dataobject name. If an
old
viewname is given, it will merge in the information from that file
}\indent{
}\italic{-F function (defaults to 'go')
}\indent{Specifies the class name of the initialization function to
create in
the class If a -C argument is present with no -F, 'go' is used as the
default
function name. If used w/ -I, classname_FunctionName will be used as the
initialization method, which will default to classname_InitApp.
}\italic{-I }
\indent{Creates an inset rather than a controller. The callbacks and
pointers
will be placed in the view. The -C argument will specify the name of
the dataobject to create. Control buttons are supported but unnecessary.
}
-W
\indent{If -I is specified, -W will indicate that the datastream
describing
the object will be written when the file containing the object is saved.
This
is mainly for backward compatibility with applications that save
information
within their subobject's datatstream. }
\italic{-M }
\indent{Forces the creation of a new Imakefile, even if one already
exists.
The old Imakefile is moved to Imakefile.old
}
\italic{-Help
}\indent{Prints help message.
}\section{5.4
View / Controller methods
}The following methods are created by createcon as part of the
controllers or
views it creates. The name foov will be replaced by the view or
controller
name.
\bold{foov__ObservedChanged(self,observed,status)
}Called whenever a child view is changed. Usefull for applications that
need
to react to characters typed in a text object, or other changes to a nonvalue
object child.
\bold{foov__InitializeClass(ClassID)
}Class procedure called only once when class is initialized
\bold{foov__FinalizeObject(ClassID,self)
}Class procedure called when self is destroyed . Applications should free
any
malloced data here.
\bold{
}\bold{foov__InitializeObject(classID, self)}
Code to initialize self should be included here.
\bold{FindSelf(v)}
This static function will take any view pointer and return a pointer to
the
adew created controller/view.
\bold{XXXCallBack(self,val,r1,r2)
}One of these function calls is created for each uniquely named value
object
included in the application. It is called when the value named XXX
changes.
\italic{val} is a pointer to the value object. If there are multiple
objects
with the name XXX followed by an underscore and a number (ex. XXX_3),
only one
callback is set up for all of them. The int \italic{r1 }is set to number
following the underscore. This simplifies programming multiple switches
with
similar functions. The r2 argument is a flag that the generated code
checks
for an Objects Destroyed notification.
\subsection{5.4.1 Additional View
methods}
In addition to the above, the following methods are created by createcon
as
part of the views it creates. The name foov will be replaced by the view
name.
\bold{foov__GetApplicationLayer(self)
}Tells child to produce application layer if it is requested of this
layer.
Probably not useful to the application programmer.
\bold{foov__go(self) }
Place for user code to be called when all child views have been
initialized .
\bold{foov__InitCell(self,cv)
}This code is called each time a child view is initialized. Usefull if
the
application needs to call view methods on a view that doesn't show up
when the
application is started.
\section{
5.5
Dataobject methods
}The following methods are created by createcon as part of the dataobject
it
creates. The name foo will be replaced by the dataobject name.
\bold{foo__ViewName(self)}
Returns the name of default view. There is probably no reason for the
application developer to deal with this method.
\bold{foo__ReadObjects(self)}
This method is called when all child dataobjects have been read and may
be
accessed. The application developer may want to include application
initiation
code here. See following methods.
\bold{*foo__FindChildObjectByName(self,char *name)}
Returns the child object with the given name. This call may be useful for
getting a pointer to an embedded object. One of the problems of earlier
versions of Adew was that the embedded dataobjects could not be accessed
until
it's corresponding view had been displayed on the screen. This
restriction has
been eliminated for adew created insets.
\bold{*foo__FindChildCelByName(self,char *name)}
Returns the child cel with the given name, useful when one wishes to
change a
child's attributes. See the Cel methods described later in this document.
\bold{foo__ReadSup(self, file, id)}
\bold{foo__WriteSup(self,file ,writeid,level)}
Reads and Writes the object specific data. See below.
\section{
5.6
Support for object specific data
}
Another new feature of Adew is the ability to specify application
specific
data that will be stored along with the Adew inset, and then restored
when the
object is read back in. The code that reads, writes and initializes this
data
is computer generated and is both upward and backward compatible. So if
at
some point you need to add additional data to your application, another
pass
with createcon will make the change in such a way that new versions of
the
code will be able to read old versions of the datastream, and old
versions of
the code will not be confused by new versions of the datastream. The only
restriction is that no old data is removed from newer versions.
To specify the data that one wants associated with the adew created
dataobject, one needs so create a .dcl file whose prefix is the same as
the
dataobject name. Thus, if you are creating the class foo, the
declarations
would be included in foo.dcl. The form of a dcl file is as follows.
\example{DECLARE <name> <typename> <size> <size>
}where \italic{typename} is one of the following
\example{long | string | float | longarray | stringarray
}
An example .dcl file is as follows.
\example{
DECLARE
fl
long
DECLARE
fs
string
DECLARE
ff
float
DECLARE
fly
longarray
DECLARE
fy
stringarray 24
80
100
80
}This will result in new instance variables being declared, so in your
dataobject you will have access to a long (self->fl), a string array
(self->fs), etc. Only longs, floats, and static arrays are currently
supported.
NOTE: when adding new declarations to an existing object, they should
always
be added to the end of the .dcl file.
\section{
5.7
Createcon Examples
}
If one had a control-buttonless application file names
\italic{switches},
wanted to create a controller class named \italic{switchcon}, and wanted
the
final application to be called \italic{doswitch}, with the title\italic{
"switch controller"}. Createcon could be called as follows.
createcon -O doswitch -T "switch controller" -C switchcon switches
The program would output the following
\leftindent{Creating a controller for switches. Please wait...
running cat /tmp/adew0.tmp switches | /usr/andy//lib/arbiters/conpros.awk
Creating switchcon.ch
Creating switchcon.c
Creating Imakefile
Creating makeswitchcon shellscript
Creating doswitch shellscript
Done
}
and the doswitch shellscript would look like
\leftindent{runadew -C"switchcon" -F"go" -T"switch controller" S"switches" $*
}
This shellscript will pass it's arguments on to runadew, which can the
pass
them on to the controller class. It is possible for the application
programmer
to edit this shell script to pass additional arguments to runadew, either
for
passing on, or to change the application colors. See the runadew
documentation
below for details.
\subsection{5.7.1 Converting old applications to insets
}
If you have an old adew application (myapp), that you wish to update to
an
inset(newapp), this can usually be accomplished with the following
command.
createcon -I -C newapp -V newappv:myapp -M
This will move the application specific code in myapp.c to the view
newappv.c.
\section{5.8
Notes}
It is possible to create two source files, one with a control
button and one
without. The latter for use in stand alone mode, and the former for
inclusion
in other files. If there are no other changes, a single controller class
can
be used for either file.
\section{5.9
Running createcon from the arbcon menu
}
Createcon can also be run from the Arbcon. When the \bold{Create
Controller}
option is chosen from the ADEW menu, it is the same as running createcon
on
the file containing the current object. The output from createcon will be
placed in one of the arbcon's windows. No other arguments can be sent to
createcon in this mode, so it will only work on files containing a
controller
button and cannot be used to create insets.
\begindata{bp,538930120}
\enddata{bp,538930120}
\view{bpv,538930120,1403,0,0}
\chapter{6 Runadew
}
Runadew is an alternate environment for running Adew applications.
Similar to
\bold{ez}, runadew provides some additional facilities, while at the same
time, limiting the user options to those provided by the application
creator.
Any Adew application may be run in runadew; those without control buttons
can
only be run in runadew.
\section{6.1
Arguments}
Runadew recognizes the following flags, that are normally set by a
shellscript created by createcon. See above for details.
\italic{-S file
}\indent{This is the atk file that runadew displays in it's window.
Runadew
must be given this argument.
}
\italic{-T "title"
}\indent{Runadew will place the given string in the title bar of the
application (when running under window managers that provide title bars).
}
\italic{-C class
-F function (defaults to 'go')}
\indent{When given these arguments, runadew will load the given class,
lookup
the given function in that classes' proctable, and execute that function,
passing it the frame as the argument. This is the mechanism that takes
the
place of control buttons.
}\italic{-I Insetname}
\indent{For Adew created inset.
}
\subsection{6.1.1 Argument passing
}All of the other arguments to runadew (except for the standard ones
handled
by runapp, ie -bg background-color and -fg foreground-color) are saved
and may
be passed on the the controller class.
\bold{runadewapp_GetArguments(argp)
}returns a char ** with the remaining arguments. Argp is pointer to an
int,
whose contents will be set to the number of these arguments. If there are
no
arguments, only argv[0] (usually 'runadew') is passed on. If the
application
is not being run from runadew, NULL will be returned.
\section{6.2
}
the
Other features
When users run applications in runadew, they are not presented with
normal ez menus and keystroke commands for switching files, printing,
creating
new windows, etc.. Runadew does not try to checkpoint the file, or make
sure
that the file hasn't changed before exiting. This fits in better with the
normal user model of a stand alone application.
\begindata{bp,538269640}
\enddata{bp,538269640}
\view{bpv,538269640,1404,0,0}
\chapter{7 Advanced topics - Cels, Celviews and the Arbiterview.
}
Cels and Celviews make up a wrapper inset that allow the Arbcon to
do its
work. Since each parent view implements its own ways of inserting
children,
the celview was created as an intermediary view that could be inserted in
any
parent and would provide a consistent way for creating its child which
the
Arbcon could control. When the arbcon is used to create a new object, it
does
this by creating a cel, telling the cel what kind of inset it should
contain,
and then writing the cel into the cut-buffer. The cel also provides the
conventions for naming it's child and storing the attributes for the
value
objects.
The Arbiterview is a sub-class of the celview. In addition to
working like a
celview, it also provides the namespace that all of the celviews interact
with
to ensure that there is no name collision. It also provides
classprocedures
for locating named cels within the namespace.
The typical Adew programmer can ignore these objects, since the
createcon
created C program does all of the necessary interfacing. However they can
be
used to provide more flexibility for those doing more advanced
applications.
The purpose of this section is to explain the methods and classprocedures
available.
\section{7.1
}
Accessing the cel and celview related to an inset.
The cels and celviews associated with a given view may be easily
accessed.
Note that since cels contain view-specific information, that they can't
be
accessed from a data-object alone.
\bold{struct celview *celview_GetCelviewFromView(view)}
This class procedure takes a pointer to any view and returns the
celview
associated with it, or NULL if there is no celview associated with it .
All
views created with the arbcon within an Adew application should have
celviews.
\bold{struct cel *celview_GetCel(self)}
\leftindent{This macro returns the cel associated with a celview.
}
\bold{struct view *GetTrueChild(self)
}\leftindent{This macro returns the celview's main child view.
}
\bold{struct view *GetApplication(self)
}\leftindent{This macro returns the celview's immediate child, which may
be
the true child, as returned above, or it may be the application layer
associated with the child (usually it's scrollbar), if these is one. }
\section{7.2
Dynamically changing valueview attributes
}
Normally, the attributes associated with a valueview are set
interactively
from the arbcon, though sometimes it is desirable to change them
dynamically
while the program is running. The follow methods provide this capability.
\subsection{7.2.1 Cel Methods for dealing with attributes
}
\bold{long cel_GetLongAtt(self,attname)}
struct cel *self;
char *attname;
This method takes a cel and an attribute name and returns the
current value
of that attribute. If the attribute value has never been defined,
cel_UNDEFINEDVALUE will be returned.
\bold{void cel_SetLongAtt(self,attname,val)
}
struct cel *self;
char *attname;
long val;
This method takes a cel and an attribute name and sets the current
value of
that attribute. If val == cel_UNDEFINEDVALUE, the value will be unset.
\bold{char * cel_GetStringAtt(self,attname,buf,buflen)
}
struct cel *self;
char *attname,*buf;
long buflen;
This method takes a cel, an attribute name, a buffer , and the
length of the
buffer. The value of the attribute is written into the buffer and the
buffer
pointer is returned. . If the attribute value has never been defined,
NULL
will be returned.
\bold{void cel_SetStringAtt(self,attname,attval)
}struct cel *self;
char *attname,*attval;
This method takes a cel, an attribute name and a string. It sets
the current
value of that attribute to the value of the string. If attval == NULL,
the
value will be unset.
\subsection{7.2.2 Examples
}example 1.
To change the maximum value of a slider switch named self>sliderview to 50:
struct cel *cl;
cl = celview_GetCel(celview_GetCelviewFromView(self->sliderview));
if(cel_GetLongAtt(cl,"max_value") != 50)
cel_SetLongAtt(cl,"max_value", 50);
example 2.
To change the label of a button named self->buttonview to "push
me".
struct cel *cl;
char buf[256],*res;
cl = celview_GetCel(celview_GetCelviewFromView(self->buttonview));
res = cel_GetStringAtt(cl,"label",buf,buflen);
if(res == NULL || strcmp(buf,"push me") != 0)
cel_SetStringAtt(cl,"label","push me");
\section{7.3
Dynamically creating new cel objects}
It is sometimes useful for applications to create new objects on
the fly. The
following cel methods can support this.
\bold{boolean cel_SetChildObject(self,struct dataobject *newobject,char
*viewName);
}\indent{Places an object in the cel. viewName is the name of the type of
view
to apply to the dataobject. If NULL, cel will use the default view for
that
dataobject.
}
\bold{char *cel_GetRefName(self);}\bold{
}
Returns the cel's logical name.
\bold{void cel_SetRefName(self,char *refname) returns char *;}
This method sets the cel's logical name.
\bold{void cel_SetApplication(self,int app)
}\leftindent{Can be set to cel_NORMAL, cel_APPLICATION to indicate if the
child should be displayed with it's application layer, (usually w/ one or
more
scroll bars ).
}
\subsection{7.3.1 Example
}\indent{ To place a buttonv with the label "mybutton" in the existing
text
object, self->text, instead of placing it directly.
struct cel *cc;
struct value *val;
val = value_New();
cc = cel_New();
cel_SetChildObject(cc,val,"buttonv");
cel_SetRefName(cc,"NewButton");
cel_SetLongAtt(cc,"bodyfont-size",16);
cel_SetStringAtt(cc,"bodyfont","andy");
cel_SetStringAtt(cc,"label","mybutton");
text_AddView(self->text,0,"celv",cc);
text_NotifyObservers(self->text,0);
}
\section{7.4
Additional Cel Methods
}
The following are some additional methods and macro methods
provided by cels.
\bold{boolean cel_SetObjectByName(self,char *dataname)
}\leftindent{Sets the child of a cel by giving it the name of an object.
The
cel will create the object.
}
\bold{struct dataobject * cel_GetObject(self)
}\leftindent{Gets a pointer to the object contained in the cel.
}
\bold{cel_SetViewName(self,char *viewname,boolean UseDefault)
}\leftindent{Sets the name of the view that will be created. If
UseDefault is
TRUE, the default name will be used if viewname is NULL, or can't be
created.
}
\bold{char *cel_SetRefName(self,char *refname)
}\leftindent{Sets the cel's logical name.
}
\bold{cel_UnsetRefName(self)
}\leftindent{Unsets the cel's logical name.
}
\bold{cel_SetVisible(self)
cel_SetInvisible(self)
}\leftindent{Attempts to make the cel and it's child visible/invisible.
When
invisible, a cel requests to be shrunk to 0 size, and won't send updates
to
child.
}
\bold{boolean cel_Visible(self)
}\leftindent{returns TRUE if the cel is not currently invisible.
}
\bold{cel_SetLinkName(self,char *linkname)
}\leftindent{Used to set the name of a related cel. When the celview goes
to
create a new child view, It will attempt to find (self,via the
arbiterview)
the related cel, and create a new view on the object contained in that
cel.
}
\bold{long cel_WriteLink (self,FILE *file, long writeid, int level)
}\leftindent{Used by the Arbcon to write a cel that will be a link to the
current cel onto the given file descriptor.
}
\bold{char * cel_GetViewName(self)
}\leftindent{returns the view type
}
\bold{char *cel_GetObjectName(self)
}\leftindent{returns the dataobject type.
}
\bold{char *cel_GetLinkName(self)
}\leftindent{returns the name of the source cel that this cel is a link
to.
}
\bold{int cel_GetApplication(self)
}\leftindent{returns cel_NORMAL, cel_APPLICATION or cel_VALUE
}
\bold{cel_SetNoSave(self,val)
}\leftindent{Sets a flag to indicate if the child's GetModified flag
should be
passed on to the parent. If val is set to TRUE, any modification to the
child
object will not be sent up to the parent, and therefor will not trigger
the
writing of any checkpoint file. This flag does not effect the writing of
the
child to any file (checkpoint or otherwise).
}
\section{7.5
Internal or Obsolete Cel Methods
}
The following cel methods are either internal or obsolete. They should
not be
called by external objects.
\bold{cel_InsertObject (self,struct dataobject *newobject,char
*dataname,char
*viewname,int usedefaultview)
}\bold{cel_GetRefAtom(self)
cel_GetViewAtom(self)
cel_GetObjectAtom(self)
cel_GetLinkAtom(self)
cel_GetScript(self)
cel_SetVisibilityBit(self,boolean mode)
cel_SetObjectName(self,char *dataname)
}\bold{cel_SetObject(self,struct dataobject *newobject)
}
\section{7.6
Adding menus and keystrokes
}
The celview has support for external objects to post keymaps and
menulists,
to be posted on addition to the child views menus and keymaps. This
offers the
advanced programmer the opportunity to add new menu entry and keystroke
commands to any child of a celview. In the case of conflict, the childs
menus
and keystrokes will be superseded by those posted to the celview. The
calls to
do this are
celview_SetKeymap(self,struct celview *celv,
struct keymap *km);
celview_SetMenulist(self,struct celview *celv,
struct menulist *ml);
For more information on keymaps and menulists, see the ATK documentation.
\section{7.7
Dealing with Mouse Hits
}
The celview has support for external objects to intersect the mouse
hits
being sent to a child view. The call to do this is.
\bold{celview_SetHitfunc(self, procedure MouseProc, long rock);}
Once this method is called, the celview(self) will react to mouse hits
by
calling the MouseProc procedure with itself as the first argument, all of
the
standard hit arguments (see the view documentation) and lastly, the rock
that
it was passed in the SetHitfunc method. The x and y arguments will have
already been scaled to the child objects coordinates. The MouseProc
procedure
should return a pointer to a view. The controller program then has
several
options for dealing with this hit.
1. If, after dealing with the mouse hit, the controller wants the hit
sent on
the child object, it can return NULL to signal the celview to continue
processing the hit normally, by passing it down to it's child.
2. If the controller wants to block the passing of the hit, it should
return
the celview pointer that it received as it's first argument.
3. If the controller wants to pass the hit to the child itself, so it can
perform actions after the hit, it can have something like the following
as
it's MouseProc.
struct view *\bold{MouseProc}(cv, action, x, y, numberofclicks, rock)
struct celview *cv;
/* the celview */
enum view_MouseAction action;
long x, y, numberofclicks;
long rock;
\{
struct view *vw;
vw = view_Hit(celview_GetApplication(cv),action, x, y,
numberofclicks)
/* code deal with the hit goes here */
...
return vw;
\}
This (or option 1) insures that the proper view (the one that took the
hit) is
returned up the view tree. For additional information on dealing with
mouse
hits, see the ATK documentation.
\section{7.8
Experimental celview overlay code
}
Most of the other celview methods are for internal use only. There
is
currently some experimental code in celview for overlaying other views on
top
of a celview. The adventurous may want to to experiment with the
following,
though they should not be considered a supported part of the system.
\bold{void celview_PushOverlay(self,struct view *view,struct rectangle
*rect,long flags);
}
\leftindent{Takes a view, a pointer to a struct rectangle. and a flags
argument. The rectangle should give the top,left, width, and height in
reference to where the view should be in relation to the parent celview.
If
the celview gets resized, the overlayed view will be resized in
proportion.
The flags argument is not currently supported, and should be 0L.
}
\bold{struct view *PopOverlay(self,struct view *view) ;
}\leftindent{Pops the view off of the overlay stack.
}
\section{7.9
The Arbiterview
}
As mentioned above, the arbiterview provides a namespace for those
objects
below it. Arbiterviews may be inserted at various levels in an
application to
provide nested namespaces. If no explicit arbiterview is placed in an
application, a phantom one will be created, one per frame, to deal with
the
namespace for that frame. This 'phantom' arbiterview becomes associated
with
the frame, but is never actually placed in the view tree. By making the
default namespace equivalent to the views under a frame, we avoid name
collisions when the user brings up a second window on a view tree, since
this
action creates a new frame.
When Adew insets are created, the dataobject created is a subclass
of
arbiter,and the view a subclass of arbiterview. This provides several
benefits, most importantly is the fact that namespaces can't collide if
several instances of the application are included within the same parent.
The following class procedures are available for general use.
\bold{struct dataobject *arbiterview_GetNamedObject(struct view *vw,char
*ObjectName)
}\leftindent{Given any view (vw) and an objects reference name (as set by
the
arbcon, or with celview_SetRefName()), this class procedure returns a
pointer
to the object with that name that is within the same name space as the
given
view.
}
\bold{struct view *arbiterview_GetNamedView(struct view *vw,char
*ViewName)
}\leftindent{Given any view (vw) and an objects reference name (as set by
the
arbcon, or with celview_SetRefName()), this class procedure returns a
pointer
to the view with that name that is within the same name space as the
given
view.
}
\bold{struct celview *arbiterview_GetNamedCelview(struct view *vw,char
*ViewName)
}\leftindent{Given any view (vw) and an objects reference name (as set by
the
arbcon, or with celview_SetRefName()), this class procedure returns a
pointer
to the celview with that name that is within the same name space as the
given
view.
}
Note that, given the celview, it is easy, given the methods above, the
get the
related views and dataobjects. The GetNamedView and GetNamedObject
procedures
are just provided as a convenience.
In all of the above class procedures, the application programmer may
alternately pass a NULL view, and instead provide an explicit arbiterview
name
prepended to the viewname string and separated from the viewname with
':'s.
This allows the application programmer to get a handle on objects in
other
namespaces in the same process. So to get the celview named "bar" under
the
arbiterview named "foo", one would call
arbiterview_GetNamedCelview(NULL,"foo:bar"). Since arbiterviews may also
be
nested, one might also want to get the celview named "bar" under the
arbiterview named "foo" under the arbiterview "sis". For this, one would
call
arbiterview_GetNamedCelview(NULL,"sis:foo:bar"). The phantom arbiterview
that
gets associated with a buffer inherits the buffers name.
\bold{arbiterview_SetIgnoreUpdates(struct view *vw,boolean val);
}\leftindent{Given any view (vw) , this procedure will inform the
namespace,
and it's associated buffer, that changes to the state of the objects in
the
namespace do not indicate that the application should be checkpointed or
saved
before the user exits. This gets around the peculiarity of running
applications from within a generic editor. See the Adew tutorial for more
information.
}
The other Arbiterview methods are for interaction with the cels and the
arbcon, and should not be called by other objects.
\section{7.10
Some notes on nesting of arbiters.
}
The current createcon code for generating applications in not
designed for
dealing with nested arbiters. In general, in creating a single
application,
there is no need for dealing with multiple namespaces. However, if one
has say
three applications, each developed with Adew and createcon, that one
desires
to combine into a single application, it would be reasonable to create a
window with Adew, inset arbiter objects within the application, and then
read
each of the three applications into the arbiters. They can then each
operate
without fear of a namespace collision. Alternately, one could just look
at the
applications and insure that no names are common between them , and then
even
this use of the arbiters would be unnecessary.
\section{7.11
Location of Sources
}
Under the Andrew directory in the x11 R5 sources , the values and
valueviews
are located in the atk/value directory, and all of the remaining code is
in
the atk/adew directory. Example objects, (the calculator, the piano,
etc), are
in the atk/controllers directory.
\begindata{bp,537558784}
\enddata{bp,537558784}
\view{bpv,537558784,1406,0,0}
Copyright 1992 Carnegie Mellon University and IBM.
All rights reserved.
\smaller{\smaller{$Disclaimer:
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted, provided
that the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the name of IBM not be used in advertising or
publicity pertaining to distribution of the software without specific,
written prior permission.
THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD
TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ANY COPYRIGHT
HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$
}}\enddata{text,538607584}