The code below is a useless program.
It's only purpose is to show my question.
By pressing INSERT I add new nodes until the scroller appears.
By using ← or → I can see the scroller work.
Pressing INSERT triggers the content of the filled-cell of
"dialog < frame" to be overwritten by "draw".
"draw" triggers "node-gadget => model-changed" which calls
"scroll>gadget".
But scrolling doesn't work after INSERT.
I guess that rendering happens after "scroll>gadget".
How can I make scrolling work in this case ?
-----------------------------------------------------
USING:
accessors colors.constants kernel
math math.parser models namespaces sequences
ui ui.gadgets ui.gadgets.borders ui.gadgets.frames
ui.gadgets.grids ui.gadgets.labels ui.gadgets.packs
ui.gadgets.scrollers
ui.gestures ui.pens.solid
;
IN: test-script
SYMBOL: nodes
: add-node ( -- n )
nodes get dup length [ suffix nodes set ] keep
;
TUPLE: node-gadget < border
number
;
M: node-gadget model-changed
swap value>> over number>> =
[ dup scroll>gadget COLOR: black <solid> ] [ f ] if
>>boundary relayout-1
;
: <node-gadget> ( n model -- gadget )
swap [ number>string <label> node-gadget new-border ] keep
>>number { 22 22 } >>size dup rot add-connection
;
TUPLE: dialog < frame
;
CONSTANT: chart-cell { 0 1 }
: draw ( dialog n -- dialog' )
swap dup model>> <shelf>
nodes get [ pick <node-gadget> ] map add-gadgets nip
<scroller> chart-cell grid-add [ set-control-value ] keep
;
: go ( dialog offset -- )
over control-value + nodes get length rem
swap set-control-value
;
dialog
H{
{ T{ key-down { sym "INSERT" } } [ add-node draw drop ] }
{ T{ key-down { sym "LEFT" } } [ -1 go ] }
{ T{ key-down { sym "RIGHT" } } [ 1 go ] }
}
set-gestures
: <dialog> ( -- gadget )
1 2 dialog new-frame chart-cell >>filled-cell
"Press ← or → to navigate. Press INSERT to add a number."
<label> { 5 9 } <border> { 0 0 } grid-add
0 [ <model> >>model ] keep draw
;
5 [ add-node drop ] times [ <dialog> "dialog" open-window ] with-ui
------------------------------------------------------------------------------
_______________________________________________
Factor-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/factor-talk