Re: Selfmade Controls

gruntz@oberon.ch
Fri, 10 May 1996 11:04:40 +0200

> Today I wanted to add a few new controls to a dialog I was working on. I
> started out with the ObxButtons and experienced a few problems that somebody
> of you probably already has solved...
>
> 1. Problems with linked commands:
> When linking the command 'StdCmds.CloseDialog' to an ObxButtons button the
> command traps when executed. I assume there's a problem with the focus, i.e.
> 'StdCmds.CloseDialog' is not able to determine the dialog to close.
> I didn't try out other commands but I think this problem will also occur
> with some other commands.
> How does one have to modify ObxButtons that such commands work ?

StdCmds.CloseDialog can only be called in interaction with a control,
so you have to assign your control to Controls.par before calling
Dialog.Call:

p := Controls.par; Controls.par := v;
Dialog.Call(v.link, "", res) (* interpret and execute the string in v.link *)
Controls.par := p;

> 2. How to set cancel/default button:
> I expanded ObxButtons by cancel and default flags and the appropriate
> properties messages to set/get the state of them. Even though the properties
> are set correctly the button does not react to default/cancel keys.
> How does one have to modify ObxButtons to make these flags work ?

you have to answer the Properties.ControlPref message in order to
get the controller messages, i.e.

WITH msg: Properties.ControlPref DO
msg.accepts := (msg.char = 0DX) & v.default
OR (msg.char = 01BX) & v.cancel

Then, a line or esc character is sent to the control's HandleCtrlMsg handler
and has to be handled there.

> 3. Notifier and guard procedures:
> Same problem as with the cancel/default problem. I expanded the sample to
> support notifiers as well as guards but I don't have any idea how to take
> advantage e.g. of a guard that sets the readOnly flag since I have no idea
> how to check if a control is read-only or not - there is no property message
> that reports those non-persistant states.
> How does one support notifiers and guard procedures in selfmade controls ?

There is the question, whether the selfmade controls should behave like the
internal controls or not. You can burn in the Guard and call it directly whenever
the Views.Notify message is sent, i.e.

PROCEDURE (v: View) HandleViewMsg (f: Views.Frame; VAR msg: Views.Message);
CONST guardCheck = 4;
VAR dpar: Dialog.Par;
BEGIN
WITH msg: Views.NotifyMsg DO
IF guardCheck IN msg.opts THEN
(* set up default *)
dpar.disabled := FALSE; dpar.undef := FALSE;
dpar.readOnly := FALSE; dpar.checked := FALSE;
dpar.string := "";

(* call the guard *)

IF (* any value changed *) THEN
Views.Update(v, Views.rebuildFrames)
END
END
ELSE
END
END HandleViewMsg;

The constant guardCheck should habe been exported from module Controls or Dialog.

Now, if you want to construct a control which behaves like a standard Cntrol,
then you have to read the string, set up a Meta.Item, and call the procedure.
These procedures are implemented in module Controls, but are not exported.
However, below I send you the necessary code which implements a control
which reacts as Default or Cancel button and which calls a Guard whenever
necessary.

Hope, this helps.

- Dominik

StdCoder.Decode ..,, ..QJ0...3Qw7uP5PRPPNR9Rbf9b8R79FTvMf1GomCrlAy2xhX,Cb2x
hXhC6FU1xhiZiVBhihgmRiioedhgrZcZRiXFfaqmSrtuGfa4700zdGrr8rmCLLCJuyKtYcZRiX
7.2.s,Ms7,,k,5TWyql.bnayKmKKqGomC5XzET1.PuP.MHT9N9ntumaU2,CJuyKtQC98P9PP7O
NbXmb.2.wZYk2kHG0,6.cUGpmWLuOpoKqvCbHZiYpedhA704TeKKw.bHfEWUmL.6..D.Xy66.,
sUGpmWbBxhYhAbndMHT9NY6Mw.sQq2Y6cwB.0.bS6w,QtVE.0E.EB8.86.QC18RdfQHfMf9R9v
Q7ONb17.,.T7.2U.EFE.0.4.2dZZhqhgoBhXBAtfj1.0E65.oy3k.8Mtr.2.u62.802.A.6G..
4.072Up.t.1MB,.L,1MAE45.1c5Ewk.a,YAAUG.x11s86.H31cB6.3M.AUq.D7.AUQU.Yj,E,8
Mtr.0E.ckE.c6E.k.0U.6G..0E.2UwK.c,EAG.1MDkQk.a00ECl.q1Ah,k.a1g7AUVU.Yt,k.m
00kFUcU.2DAUgU.w4s46.dP,IU1.F,1M4kvE,O.A1IU5U.A60E.0.mS09UoCY0cUXDF9fR5uPP
PP1fP7PNZvQRtIdHf.2UlbcZpC.c9h0E.8z,U...B.0UJUdUzjdDZcJZd33YDJgsJcpZioxhiR
ivgVBAV7hdExdGZeUgdZZiVZZUYcdBggxhbZZUQeoxBYZUocjphoRig2YExhmZinZ3hOO9ntmG
ECoruKu8rrmKqKKtCLK0Gc8rr0rm8LuaqmCLK0mV.CrRqk4QcDpdHZeBAV7ghdphKhgmRidxhi
3Yx2YkQbUghV3jKhgmRC.qk2aknKrk8LmCIoKqliKEqHEGnRqk4aEeaJcKo4ak2OpoKaUgbU2e
DBdCZe3JeUYeD3YGhc1xdGZcU2ZKBhZtQR,G2am4ak2aEnyKrGLR0GXyKrQiiocjphoRbBA,Hs
MT9PTfQp76NuHRuFHeHduCPM0YhdphfZZUwgpBgmdC,7FHPMc9b8RZPORvNrN1HM0AgWhggJbU
AcGJe,BfUYak2YDpcUQc6BcGRbBAV7sM1fP5PNN99,7N9fN1PRN9Rp763uHT8H9OERuCPM0ggi
BgWZhZZgg2YpphYhgaZZUIiZBgYxdiZhtJbUIcD,U3pd2RbBg,HsFfPMZHc8rrCKf4Kq0mS0Gd
KoV.PONdHLOpkmquKqI0GseGR0GWa4sFfPM.,NFR8FrVBAVEJeDRc3ZcJJe33Ycoiu2YKBhZN8
,NFl9R9fQRPMNPOpPN,78hOEZ86jfQp76b8RT1RtJZPOdPNZP8rN1HcE9uFHeHPM0HcRRNFl9R
91EjWmv8rIin4AVrJiiwemBBOpm8rtEIqqkW5UdQbBEfktwemV4xhiZicwimZZUoiiogjpBHtC
,tRZf9j0moYuKuWGvumlyKqyadQbUwC.b8RZPO2ZqpZgBhiRhdQbUwC..sNfPMZnIiHEqk2akv
..UgBgWhggBZvgV7sR.8oryKqWGvuWVphXlIiHES5..7PNBPMM8PM09eH0mWWLu.sCPM1H6I..
UdMGR9R9fQR122EtGKR0mdG5cI9PMKKta0oe,JeUoiZJCcC,tIFuHZ8JHeHduCI6.AdiZiZ,cL
8LmamRq.HeF,dTZ9NRtM1fP6P99N,7JFOFRO1Hk28LmuGdKqkoeZJC68aKrO3EK0mq4Kw.EvKK
tUd.HMG....HcJHXndI9X4xhi78Z9NN76hf9kIcQ7f9Z0NOGR9RFVXxBUm,QeoJid,ABL1Z1..
D166PU7AVm,.UgBAk4k285EVyqrm4AAM80Gt..YA.AV7g6qk2akWU3p7,NGR9R91kR...kIQcj
3itpcmxhh3YcQijhimRgZJbUoedlto8AZvgV7Ic3,oC5uPVPSwBx88bvPf1HtCPM0HsJH8JF86
bvPf1p,2Y2xdBAV7AVqdNTXUIbx2YnxhpViogjlR0Gvumly40GRqHE.QgjZBiHEOLLmqo66pND
,,EqaKrQbUoiiMM66pND.MM3XBAV7UB.,tET9QUvgVB...M8,dI9vQdvPZHEWGneHEO3Cb4JiV
hhZRbUYhg2YoZZUIig2YWJbUY7UdQbBEf42j99,7ON76l99,NSp76NuHUvU3V72Ze2YmhgnZCc
RHPN0mkGLEmqm4qtGLEaKr0GtKqlGrkuqnmqm0GImKK00Ud2YeAZBAV7oC5vPRnmWLuumXKKuC
poermWmvmGEAZvAVcIZUYichgUQgjphoBAIiUQgjpB9XUghVBhiZiVBBb96d9O9Hva4DtQ,tQH
fS996JN8cNR7FZPMjfI9vMd98V79,7AN76j99,FKogiYgjZig2YqtMm4Hl2W0Bf97XUAhn3YXZ
hjRiZ3YoxhUwhihgU2ijBhiZig2YdpZZpZUAajwam2YdphX3hUIZdg,WLEenS2Zr3Yh2YqpZaV
iQeoJCwedZgo3hcoiiYBM8H767OGh86ZtC,NS,dCv76F967OGhWUQZU2ZqpZa,1vQ596L76hHn
UYRiXBZUYc7lNin4aUa,CJu8ro68l99,FK0Gvu069,FLm4YZUoCB1HN1HMFcI9vQy4rN1.90cR
.HFY4KrGKqKqVGLtmqaCrn0GIOKR.b1UKBcGNPbvNp765uPRHt6Pc9PONbvQ1vN9vC,dJcNTvM
fvQp76hOOEfkIi1O3WLK00SLKUmhgnJbUYdD,2YhxhYBhaBhZJinJbUQe3Zev2YdphnBhYhgg2
YdRi2xhrphu2Y0x7kR0GseHEOposQkvin4I6M1w8MPbvN..YemBgXRhBRib3Y2xd72ZeMPTPRb
PN,dMf9RdXUwiVRiU2imhgnRiZZgUIZdU7.Rnmc9.W0A3PU7oAPOMZvOZON5124S5mWExhmZCR
dNH9PN99,7IUdphqhgmZig2YE,CLoyqvamR0mou42Yug5deIfOFrN1HUGhcEhc,Ze72Ze22UoJ
iVlouqn0Gqyqr0LEemIU7oAHePVPRd98l99,,PvP718bgMOb1amRU7A7aKrC5QYU2Zs3YygbU2
ad2Ya2YcAjUobx22Us3Yw2YrBZUoYUMSmHEWqI0GeWoWAVcEuyqnSKqKKECLu4KuKKEemIU7MO
RvQH1pVyBhiRidlR0Gnuma44.24S5.cN.Ud,2YdphnVdgV7A,HMFg,HM0feHdOGN86xPOb9FTv
Rin4kY.66d8G.P1wiVRCZPNNPN1vQ99N,NOR1YichA51ZXUIZd.HcNq2.6AwC.En..H1Ec.FPO
7PNHtCP.HMGoiiYhdtO,t6,d6376d8G9m4M0HEs0GRqX1xhi,bf9VPMZvC,tET1.0GRqXqRbBA
,aU2BhVZBQcVZhg3ZqpZgVg2YWIYg2YmlIin2W0HfPdXkJiZZiUAgiZgUggshgXhiohgUYCQCZ
1,NOR96hf9EEemIq.aU1xhi,.6QPM0Hk2K2.Ey0mqC5.YBMF7POdPHbvNM1MGghnd9T9Q,ND,t
ET1.0rkCLuKqVWqk8LEG3U7A7WGvu0s6M8,d7PM0Hk2WGIqqtSaX3hVJCv76GIgaGEyId0GIqq
t.EE0nM8IgamI0GeW2k22CsE.b1ZvC..0GRcRU76F..Ug.........EEe0M0C2..05ak2K2.kW
modKo2WGJ0WbphjJiZ3YjZichgm3Yhhgn,b96JN8MFR09WU2dVpBN1UvgVB.50sF99Rb8R79IZ
vPV96FdRp,AZu2YEJijNNGbZd9VeQT9QMSrN1o82imxBp76VeQgAa4CZY38QbBA,.uoWSJI0Lt
yadQbBEs8rr0LLCqrm4RdR19P,dCoiiQANXv6QZvPYit3iZpgVRgZ3Yug5oAoZoBDUv.ktaKxo
ZqBgg,.CrosC,7QZ1GrwmqmuGv44.UoVvgV7.wiZBhb3hopZqBgg,.SrmUvg,H.oiVNO796pND
iLc8rrgAUXxhgFLuGc8rr.sR9POMTr76V1RtORvPjfP,dCvFs8rrcRkRq.ZGeKJduIE0LtM1HM
FsF99R.iXBA,.sI99Rb066.QbU2imFR.91sI.H,O3Grw0rmUu2Y4xBCbIBjk,iHECrocC,7H.Q
ioBjgdC,tI98JrlvKqoS4p76HeHdOFDOFZuCPEV.A703K4klUUAdC3YkJCu066d0,dRRtMUu.s
MELO5,NFR8FA,dPSVPNEEEv.R7R.i166pND.QidlRQioBD0GR.UoVv2YrhA66p,.j1QbBkY.K4
EuaLs.,NGR86ELO5H1Eua5UuEsUo,kWuIW..91sQHfS0mYu2c9h1.Croe5p,kta4R,,,.UZ,6R
nXUAdC,uGvMO.YitVu.sQd1R,,,.UZ,wCEEaIb00oZqlo.wiZBBcC.S5c966.ObaVUIbxcFTfP
CbYBhmpZI3hdRicYit3CEK0mtaKxYZUQioBDmGESrma4amRak2qk2K2CpmG5Uv..68.aGE.0Jt
yKsqotSKEWGf42PXu6IZXZ,gdZ,amRkVy20GmK4fXLBhYZC,ND,dAV76J76VuPZ1PPPr767PNB
1WomaqnWaUgbUwaUIZU28.qk2o82iu2Y1xB.VeQQbU2imFR00gAUE,ADI6.j0.85MOsETfPEc8
rmOKEGobq.HMPbHL4qlCqm0LuCLEenS2ZhRCRtMkS242YacRR7N.PM0HM0HsHZ86F,.MA3WUo2
QgVtM9n4aUw,p,.9X4xhXFc8rmO4a.4KE8qu.HvQ,NM,d6FvPd96BvP5XWYZUAhiUYxhZRiUoh
jZiUIiZhhVBhi3YaxBggYd8k2q4WqrGLXyqlKbUIbx6JM1HM0t1Et.kdaKx2emhga,cQGru8Lr
0GuW47PNB10mta4,tPB96196.emIq.HMGBmqc9j96v76hOO9ntgiiZgZNORPN796d0qqtUug57
PNUL,KIb..2hUgbUo8....e1.W2kWuYBM0Uu..2ejZhghdnxA7m2..sQ4KrGqk8Lm0GnyKrYZU
QgjZhj794Kr2YXxhi,,7QZvP.0GJ.R0amRqU76QR7PHfPI5ObgVv6QRtNfPM2Yug5wAsC,tET8
In88hf9NPMYhg6QR7P1fMAZvg,kl442Yu.51QbBA,6N9fN11,dCEm.in4.hPMa4pVvRcjphoVn
7PHfPmW1dP.DPR1Xg2Y1xB.NPM3XgsE.YgZpA69,tE.QgVpBgjvg,kpu4UkpZqBAQ56IZvP.um
YuqtKKtGLIqqtoZkJCmGE0rIi1.91...NlXK4.FdRHN8PM0H6TER.91sI99RPuQ.QiZZiUYich
Ab144O4UgVUwhm3YXxBEE.UU.aEs85,dCvlqCrnu0QbBA,SJYaIaKIE0Lt66576ROGN867uHP.
HsJH0VfQI550sQ030GWyo2UoBAUXdPEEUZ,.A,hOOEVKqnaKrqorG4CqkGroyKrWGvamRqU7M0
a25uPUn7PHXUAdC32ZXioC66d0ObgBhiFR6QZ1NPOQ59eHi1A,H0.wA66HeH.h1.sNUu.sNf1K
Ib.aU7,.mqkEEaIb.O5.QcD380Lty4NPM69ObgBAAZUgcC,A,H0.QAgA,NG.O5.oC51cC.Cqk.
90k2A7wB.7166H0Ev..G4Uu.6N91MF.aUK,KIrGqayKma4..A,h0gekZgVZCFdRN76hOOkpKqm
0LX8rkqanBZ72ZesM1PRbPNb961HmKKq4qwKKm0GtKKm8rkSrouqnwha3Yo3BO5j96JN8k2mbk
JCeXEJCK4c9G566.b1UaVUAgi76YB0Gs85912Ye.aUKVndEcP..EECpmG5Uc69,7QM80Gfaqmk
W...qU7M0O3MJG4UK,i4..51.....EE.akWm2PM0Hk2KIbQ5M0V1,dC.RdP99SdP1Hk2K2PU3Z
7a.a4Uo,.Cbe.9eHMF2Y6Vg,q2r,.835OMN9PDOR11FtMp76h0HtCcJ1WjRhu2Y0x7N0rFm0rk
8LR0GWa46I1fQrFseHEO3CbKVvcRp76DOR1XEtP5fJQbUAhu2YBhgolYGrmqqRqU0,sMRNNRPM
31,dCQgiYhdFEC0in4ak2CappB9HEenSoc,ZdHhcvgV7AV7llummu4EH0GICKLSquEECGE8Wd2
YI37q.HMH99R1Hayqriqu0bVZic3ZXp3EKAhdQbUg,akY68Hf9TfMJ96v76PONdXkJCyIleqI0
mb83H1.cR1fQTeMJP8OGEWmoYit3iUgbUg76Q6Jn9QH76d0k20LEkVoBUklRQ6R1.,dCQgvgV7
AV7AVBAV7AV723CrmMRV967PN.J,AVY3iVJiiYgdRiVJgghAe1B02YY3CgiiZA.UBU7YAcQ9PM
7vHRXUI5.00sMFPNggY3Yu.k4k2G4QioJidVug53d6r,ak4k2W05Hq2YbhC2YeA3M0Hf9DONdf
J19PFdRNlriqIiHEaIX0mriKEGJYKYUEsWGm0rkAZUgcC,AVBU7QA91.uLm0rk8LLG4Uvg,AVX
NR.YgkBAK5QbBU7Ad47NVPMIC.G3QgiIC11cCY822.akY.QCUX220GeU2BBka4KsCJu85WGm0r
k.69,tMR7P1Xg,.HM1aU7Qcj,.Esq.K2HM0HM1g6q.2Y1BggtFkRqk2qk203.W0O3aGE.OpoKa
BRib3YcoAUndFkRoe,lqcCO3MH91A3aUKVZphVJAY3f1mGE8bV,eX0,Eq8KqeHE4IdEEG1.EV.
w8MPS4.RuPdPOBPSPuQD967m4M0HeFSqu44500mYuYhFLyaoRiUYe6l4M0HMN4KlEEEvggiBAs
C,NRR9N22kuu4iXmhgV,00cQ91sC,tET0h1Yhg6P39PHtCP.HsE19PN12ZqBZv.HMG2ZqNN.,t
6,NNRPMkI0mbEvgC66576ffPM8PM0ak2y2FVm,66576ZPN.H76TeIEqUUQYUYhWFEG3U7cJH1K
3.O3cQ8quaKqGKX8rksQqk2aU7g6qU7.MFNWBM09eHMF2Y6,UBRCrl2qUE,UChgrJZU2ZdIbUo
8QCh0rN1HM0hOEoiu22.30aUeEtKqkGrm0mk0GrKqv0GlKLu.EbEvamR0GvumlyKqy4pVExhmV
YlkkVyKqsC,dRO4IbxcFTXnlo6F9fNEIamR0GvYhdVuEF66hnnUUI5.mqkUu.qU7I8UqhV7gcC
FbKqvin4q..6F99QTvQH9RJtCPM030q.hOOQC7ONVvP68RONj98HN8PM0907ONV1in4qkWuIWw
dW3Df1CLLqk48EE8mb8Kw82U2hAUUQeoZg1hhYRii2eVRiodJHXWgV0CyIhgstETfPEqK4CJuQ
coJigZcZRiX3Ulb8l1.c95uP.YcZRiX3.501XZtQR,85...CLL.U2V.Iy2U.UIU.U76.,6.,..
1cUXDJcIf9P9fQbf9bWGhigFWE.4Te.sQRdIf9P9HWE.8z,2.,6.QJw.QI2U.sU6S.bf9bWHZi
tZB7ONbvM,Mw.ELMS.,cwDU.6..FU.I90U.E,,.RNEdXdVZ7F9X.6,6..UY2.0k.0.0.0mFfZ.
2.,64VT.WnlM.M.6.,U0KyB6.2..c6E.k.U67PYCU,.,6Y1.0.UUbl,6sNQ.0EMmZUDrvob0Cy
2xBqqmU1xB..8F.E..U6U..HE.6yrsQmrw9e.az86UtbUynZ7ztzZ0.6n0...
--- end of encoding ---