Fix some minor UI bugs

db4
Slava Pestov 2009-04-03 19:30:07 -05:00
parent cbb50fb2b9
commit 3137d12f12
3 changed files with 15 additions and 14 deletions

View File

@ -30,6 +30,9 @@ M: line-gadget line-height font>> font-metrics height>> ceiling ;
: validate-line ( m gadget -- n )
control-value [ drop f ] [ length 1- min 0 max ] if-empty ;
: valid-line? ( n gadget -- ? )
control-value length 1- 0 swap between? ;
: visible-line ( gadget quot -- n )
'[
[ clip get @ origin get [ second ] bi@ - ] dip

View File

@ -58,6 +58,7 @@ M: viewport pref-dim* gadget-child pref-viewport-dim ;
{
[ scroller-value vneg offset-rect ]
[ viewport>> dim>> rect-min ]
[ viewport>> loc>> offset-rect ]
[ viewport>> [ v- { 0 0 } vmin ] [ v- { 0 0 } vmax ] with-rect-extents v+ ]
[ scroller-value v+ ]
[ scroll ]

View File

@ -261,19 +261,20 @@ M: table model-changed
row-rect [ { 0 1 } v* ] change-dim ;
: (select-row) ( table n -- )
[ dup [ [ thin-row-rect ] [ drop ] 2bi scroll>rect ] [ 2drop ] if ]
[ dup [ [ thin-row-rect dup unparse show ] [ drop ] 2bi scroll>rect ] [ 2drop ] if ]
[ >>selected-index relayout-1 ]
2bi ;
: mouse-row ( table -- n )
[ hand-rel second ] keep y>line ;
: if-mouse-row ( table true: ( table mouse-index -- ) false: ( table -- ) -- )
[ [ mouse-row ] keep 2dup valid-line? ]
[ ] [ '[ nip @ ] ] tri* if ; inline
: table-button-down ( table -- )
dup takes-focus?>> [ dup request-focus ] when
dup control-value empty? [ drop ] [
dup [ mouse-row ] keep validate-line
[ >>mouse-index ] [ (select-row) ] bi
] if ;
[ swap [ >>mouse-index ] [ (select-row) ] bi ] [ drop ] if-mouse-row ;
PRIVATE>
@ -283,11 +284,14 @@ PRIVATE>
[ 2drop ]
if ;
: row-action? ( table -- ? )
[ [ mouse-row ] keep valid-line? ]
[ single-click?>> hand-click# get 2 = or ] bi and ;
<PRIVATE
: table-button-up ( table -- )
dup single-click?>> hand-click# get 2 = or
[ row-action ] [ update-selected-value ] if ;
dup row-action? [ row-action ] [ update-selected-value ] if ;
: select-row ( table n -- )
over validate-line
@ -320,13 +324,6 @@ PRIVATE>
: next-page ( table -- )
1 prev/next-page ;
: valid-row? ( row table -- ? )
control-value length 1- 0 swap between? ;
: if-mouse-row ( table true false -- )
[ [ mouse-row ] keep 2dup valid-row? ]
[ ] [ '[ nip @ ] ] tri* if ; inline
: show-mouse-help ( table -- )
[
swap