Thanks bill,
I thought more about the logic of an error part way through the update
&. drw process and you were right, the way the program was written it
could leave the global setting of 9!:6 changed when an error was
caught. I solved this by adding the reset of 9!:7 to the catch option
and thus an error will still trigger a reset. I don't think I would
have spotted this on my own, so thank you again.
I tried your 'bind' suggestion but because I'm checking it each time I
show the display, I think the compile time nature of the binding would
be an issue (especially if the display were left up for any length of
time)
I also added a 'display_cancel=: display_close' line for Brian Schott
(sorry I didn't respond sooner). Addition of this line allows me to
close the window by pressing ESC on my Mac and I didn't see any
downside to this functionality. I welcome any opinions to the contrary.
Cheers, bob
Here is the current code (excuse the line wraps, I'm not sure how I
get around that)
NB
.=
=======================================================================
coerase<'rgtVisual' NB. debug - clear traces of globals
coclass 'rgtVisual'
NB. ---------------------------------------------------------
NB. This script creates a form that takes tacit sentences
NB. entered by the user in a text box and displays the
NB. selected format in a listbox.
NB. ---------------------------------------------------------
DISPLAY=: 0 : 0
pc display dialog;pn "Tacit Display";
xywh 9 156 216 22;cc box edit topmove rightmove bottommove;
xywh 248 24 60 11;cc cbFormatBox checkbox leftmove rightmove;cn "Box
Format";
xywh 248 40 60 11;cc cbFormatTree checkbox leftmove rightmove group;cn
"Tree Format";
xywh 248 56 60 11;cc cbFormatLinear checkbox leftmove rightmove
group;cn "Linear Format";
xywh 248 72 60 11;cc cbFormatParens checkbox leftmove rightmove
group;cn "Parens Format";
xywh 240 12 95 80;cc format groupbox leftmove rightmove;cn "Display
Style";
xywh 0 0 225 150;cc tdisp editm ws_hscroll ws_vscroll es_readonly
rightmove bottommove;
xywh 248 114 60 11;cc rbDAscii radiobutton leftmove rightmove;cn
"Ascii";
xywh 248 131 60 11;cc rbDLine radiobutton leftmove rightmove group;cn
"Line";
xywh 240 103 95 47;cc gbDrawStyle groupbox leftmove rightmove;cn
"Drawing Style";
pas 6 6;pcenter;
rem form end;
)
CBFORMAT=: 'cbFormat'&,each ;:'Box Tree Linear Parens'
RBD=: 'rbD'&,each ;:'Ascii Line'
LINEDRAW =: (16+i.11) { a.
ASCIIDRAW=: '+++++++++|-'
rbDstate =: 3 : '>((9!:6 '''') -: ASCIIDRAW){;:''rbDLine rbDAscii'''
display_run=: 3 : 0
wd DISPLAY
wd 'set box *',y
wd 'setfont box ',FIXFONT,'; setfocus box;'
wd 'setfont tdisp ',FIXFONT,'; setenable tdisp 1;'
wd 'set ',(0{::CBFORMAT),' 1;'
wd 'set ',(rbDstate ''),' 1;'
box=: y
update ''
wd 'pshow;'
)
display_resume=: 3 : 0
wd 'psel display'
wd 'set ',(rbDstate ''),' 1;'
wd 'set box *',box=: y
update''
)
display_close=: 3 : 0
wd'pclose'
)
styles=: (4 : 0)"0 _
".'zzz=. ' , y
res=. 5!: x <'zzz'
<LF,~ , ,&l...@ucpboxdraw_jijs_"1 ": res
)
stD=: 3 : 0
UDRAW=: 9!:6 ''
9!:7 (". >({.RBD) wdget wd 'qd'){ LINEDRAW ,: ASCIIDRAW
y
)
rstD=: 3 : '9!:7 UDRAW'
drw=: stD :. rstD
update=: 3 : 0
try.
(3 : 'wd ''set tdisp *'', utf8 ; (2 4 5 6#~ 99".> CBFORMAT wdget wd
''qd'') styles y') &. drw box
catch.
wd 'set tdisp *',13!:12 ''
rstD ''
end.
)
display_box_button=: update
('display_'&,each RBD,each<'_button')=: update
('display_'&,each CBFORMAT,each<'_button')=: update
display=: display_run`display_res...@.((<'display') e. {."1...@wdforms)
display_z_=: display_rgtVisual_
display_cancel=: display_close
display '+/ % #'
NB
.=
=======================================================================
On -May15-2009, at -May15-200911:07 PM, bill lam wrote:
> Your logic should work but what if some error occur after setting that
> prevent the code to run into completion and jump to the `catch'
> branch? Will it also restore old setting there?
>
> A word of caution for using bind is that it bind the noun at `compile'
> time. However it should be ok for this particular application.
>
> On Fri, 15 May 2009, bob therriault wrote:
>> Thank you bill,
>>
>> I was unaware of 'bind'. One advantage of having so many eyes on my
>> code is the depth of experience everyone brings.
>>
>> The method I used to set the drawing box was to set the global code
>> using 9!:7 according to the radio button pressed, display with those
>> characters and then reset to the viewer's original setting so that
>> the
>> global code is only different during the use of update and does not
>> leave the viewers session in a different format. By using 9!:6 to
>> check the status in both display_run and display_resume, the form
>> will
>> initialize correctly to the user's current choices. I would welcome
>> any advice you have on better ways to do this. My choice works, but
>> is
>> not elegant (although I did enjoy using &. for the set/reset with
>> update).
>>
>> Cheers, bob
>>
>> On -May15-2009, at -May15-20098:58 PM, bill lam wrote:
>>
>>> Hi Bob,
>>>
>>> Will it reset global drawing box inside the catch codes? Btw you
>>> may
>>> use the conjunction `bind' to construct a verb that igore its
>>> argument. eg. (untested)
>>>
>>> rstD=: 9!:7 bind UDRAW
>>>
>>> --
>>> regards,
>>> ====================================================
>>> GPG key 1024D/4434BAB3 2008-08-24
>>> gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
>>> 唐詩260 李益 江南曲
>>> 嫁得瞿塘賈 朝朝誤妾期 早知潮有信 嫁與弄潮兒
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/
>> forums.htm
> --
> regards,
> ====================================================
> GPG key 1024D/4434BAB3 2008-08-24
> gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
> 唐詩177 岑參 奉和中書舍人賈至早朝大明宮
> 雞鳴紫陌曙光寒 鶯囀皇州春色闌 金闕曉鐘開萬
> 戶 玉階仙仗擁千官
> 花迎劍珮星初落 柳拂旌旗露未乾 獨有鳳凰池上
> 客 陽春一曲和皆難
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm