Listener completion work in progress
parent
fe0c636ffe
commit
46fdfd2d84
|
@ -209,8 +209,7 @@ M: table model-changed
|
||||||
: thin-row-rect ( table row -- rect )
|
: thin-row-rect ( table row -- rect )
|
||||||
row-rect [ { 0 1 } v* ] change-dim ;
|
row-rect [ { 0 1 } v* ] change-dim ;
|
||||||
|
|
||||||
: (select-row) ( table row -- )
|
: (select-row) ( table n -- )
|
||||||
over validate-row
|
|
||||||
[ [ thin-row-rect ] [ drop ] 2bi scroll>rect ]
|
[ [ thin-row-rect ] [ drop ] 2bi scroll>rect ]
|
||||||
[ >>selected-index relayout-1 ]
|
[ >>selected-index relayout-1 ]
|
||||||
2bi ;
|
2bi ;
|
||||||
|
@ -232,8 +231,14 @@ M: table model-changed
|
||||||
hand-click# get 2 =
|
hand-click# get 2 =
|
||||||
[ row-action ] [ update-selected-value ] if ;
|
[ row-action ] [ update-selected-value ] if ;
|
||||||
|
|
||||||
: select-row ( table row -- )
|
: show-row-summary ( row table -- )
|
||||||
[ (select-row) ] [ drop update-selected-value ] 2bi ;
|
[ renderer>> row-value ] keep show-summary ;
|
||||||
|
|
||||||
|
: select-row ( table n -- )
|
||||||
|
over validate-row
|
||||||
|
[ (select-row) ]
|
||||||
|
[ drop update-selected-value ]
|
||||||
|
[ over nth-row drop swap show-row-summary ] 2tri ;
|
||||||
|
|
||||||
: prev-row ( table -- )
|
: prev-row ( table -- )
|
||||||
dup selected-index>> [ 1- ] [ 0 ] if* select-row ;
|
dup selected-index>> [ 1- ] [ 0 ] if* select-row ;
|
||||||
|
@ -253,9 +258,6 @@ M: table model-changed
|
||||||
: valid-row? ( row table -- ? )
|
: valid-row? ( row table -- ? )
|
||||||
control-value length 1- 0 swap between? ;
|
control-value length 1- 0 swap between? ;
|
||||||
|
|
||||||
: show-row-summary ( row table -- )
|
|
||||||
[ renderer>> row-value ] keep show-summary ;
|
|
||||||
|
|
||||||
: if-mouse-row ( table true false -- )
|
: if-mouse-row ( table true false -- )
|
||||||
[ [ mouse-row ] keep 2dup valid-row? ]
|
[ [ mouse-row ] keep 2dup valid-row? ]
|
||||||
[ ] [ '[ nip @ ] ] tri* if ; inline
|
[ ] [ '[ nip @ ] ] tri* if ; inline
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
! Copyright (C) 2005, 2008 Slava Pestov.
|
! Copyright (C) 2005, 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors ui.gadgets kernel ;
|
USING: accessors ui.gadgets kernel ;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ TUPLE: wrapper < gadget ;
|
||||||
|
|
||||||
: new-wrapper ( child class -- wrapper ) new-gadget swap add-gadget ;
|
: new-wrapper ( child class -- wrapper ) new-gadget swap add-gadget ;
|
||||||
|
|
||||||
: <wrapper> ( child -- border ) wrapper new-wrapper ;
|
: <wrapper> ( child -- wrapper ) wrapper new-wrapper ;
|
||||||
|
|
||||||
M: wrapper pref-dim* ( wrapper -- dim ) gadget-child pref-dim ;
|
M: wrapper pref-dim* ( wrapper -- dim ) gadget-child pref-dim ;
|
||||||
|
|
||||||
|
|
|
@ -34,9 +34,11 @@ M: send-gesture send-queued-gesture
|
||||||
|
|
||||||
TUPLE: propagate-gesture gesture gadget ;
|
TUPLE: propagate-gesture gesture gadget ;
|
||||||
|
|
||||||
|
: resend-gesture ( gesture gadget -- ? )
|
||||||
|
[ handle-gesture ] with each-parent ;
|
||||||
|
|
||||||
M: propagate-gesture send-queued-gesture
|
M: propagate-gesture send-queued-gesture
|
||||||
[ gesture>> ] [ gadget>> ] bi
|
[ gesture>> ] [ gadget>> ] bi resend-gesture drop ;
|
||||||
[ handle-gesture ] with each-parent drop ;
|
|
||||||
|
|
||||||
: propagate-gesture ( gesture gadget -- )
|
: propagate-gesture ( gesture gadget -- )
|
||||||
\ propagate-gesture queue-gesture ;
|
\ propagate-gesture queue-gesture ;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2005, 2009 Slava Pestov.
|
! Copyright (C) 2005, 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: inspector help help.markup io io.styles kernel models
|
USING: inspector kernel help help.markup io io.styles models
|
||||||
strings namespaces parser quotations sequences vocabs words
|
strings namespaces parser quotations sequences vocabs words
|
||||||
continuations prettyprint listener debugger threads boxes
|
continuations prettyprint listener debugger threads boxes
|
||||||
concurrency.flags math arrays generic accessors combinators
|
concurrency.flags math arrays generic accessors combinators
|
||||||
|
@ -11,14 +11,15 @@ ui.commands ui.gadgets ui.gadgets.editors ui.gadgets.labelled
|
||||||
ui.gadgets.panes ui.gadgets.buttons ui.gadgets.scrollers
|
ui.gadgets.panes ui.gadgets.buttons ui.gadgets.scrollers
|
||||||
ui.gadgets.packs ui.gadgets.tracks ui.gadgets.borders
|
ui.gadgets.packs ui.gadgets.tracks ui.gadgets.borders
|
||||||
ui.gadgets.frames ui.gadgets.grids ui.gadgets.status-bar
|
ui.gadgets.frames ui.gadgets.grids ui.gadgets.status-bar
|
||||||
ui.gestures ui.operations ui.tools.browser
|
ui.gadgets.wrappers ui.gestures ui.operations ui.tools.browser
|
||||||
ui.tools.debugger ui.tools.inspector ui.tools.common ui ;
|
ui.tools.debugger ui.tools.inspector ui.tools.common ui ;
|
||||||
IN: ui.tools.listener
|
IN: ui.tools.listener
|
||||||
|
|
||||||
! If waiting is t, we're waiting for user input, and invoking
|
! If waiting is t, we're waiting for user input, and invoking
|
||||||
! evaluate-input resumes the thread.
|
! evaluate-input resumes the thread.
|
||||||
TUPLE: interactor < source-editor
|
TUPLE: interactor < source-editor
|
||||||
output history flag mailbox thread waiting help ;
|
output history flag mailbox thread waiting help
|
||||||
|
completion-popup ;
|
||||||
|
|
||||||
: register-self ( interactor -- )
|
: register-self ( interactor -- )
|
||||||
<mailbox> >>mailbox
|
<mailbox> >>mailbox
|
||||||
|
@ -411,4 +412,69 @@ M: listener-gadget graft*
|
||||||
[ call-next-method ] [ restart-listener ] bi ;
|
[ call-next-method ] [ restart-listener ] bi ;
|
||||||
|
|
||||||
M: listener-gadget ungraft*
|
M: listener-gadget ungraft*
|
||||||
[ com-end ] [ call-next-method ] bi ;
|
[ com-end ] [ call-next-method ] bi ;
|
||||||
|
|
||||||
|
! Foo
|
||||||
|
: <summary-gadget> ( model -- gadget )
|
||||||
|
[ summary ] <filter> <label-control> ;
|
||||||
|
|
||||||
|
SINGLETON: completion-renderer
|
||||||
|
M: completion-renderer row-columns drop name>> 1array ;
|
||||||
|
M: completion-renderer row-value drop ;
|
||||||
|
|
||||||
|
: <completion-table> ( interactor quot -- table )
|
||||||
|
[ one-word-elt <element-model> 1/3 seconds <delay> ] dip
|
||||||
|
'[ [ { } ] [ @ keys 20 short head ] if-empty ] <filter>
|
||||||
|
<table> completion-renderer >>renderer ;
|
||||||
|
|
||||||
|
TUPLE: completion-popup < wrapper interactor ;
|
||||||
|
|
||||||
|
: <completion-popup> ( interactor quot -- popup )
|
||||||
|
dupd
|
||||||
|
<completion-table>
|
||||||
|
<limited-scroller>
|
||||||
|
{ 300 300 } >>min-dim
|
||||||
|
{ 300 300 } >>max-dim
|
||||||
|
completion-popup new-wrapper
|
||||||
|
white <solid> >>interior
|
||||||
|
swap >>interactor ;
|
||||||
|
|
||||||
|
: hide-completion-popup ( popup -- )
|
||||||
|
interactor>> f >>completion-popup find-world hide-glass ;
|
||||||
|
|
||||||
|
completion-popup H{
|
||||||
|
{ T{ key-down f f "ESC" } [ hide-completion-popup ] }
|
||||||
|
} set-gestures
|
||||||
|
|
||||||
|
: <word-completion-popup> ( interactor -- table )
|
||||||
|
[ words-matching ] <completion-popup> ;
|
||||||
|
|
||||||
|
: <vocab-completion-popup> ( interactor -- table )
|
||||||
|
[ vocabs-matching ] <completion-popup> ;
|
||||||
|
|
||||||
|
: show-completion-popup ( interactor popup -- )
|
||||||
|
[ >>completion-popup ] keep
|
||||||
|
[ find-world ] dip
|
||||||
|
{ 0 0 } show-glass ;
|
||||||
|
|
||||||
|
: word-completion-popup ( interactor -- )
|
||||||
|
dup <word-completion-popup> show-completion-popup ;
|
||||||
|
|
||||||
|
: pass-to-popup? ( gesture interactor -- ? )
|
||||||
|
[ [ key-down? ] [ key-up? ] bi or ]
|
||||||
|
[ completion-popup>> ]
|
||||||
|
bi* and ;
|
||||||
|
|
||||||
|
M: interactor handle-gesture
|
||||||
|
2dup pass-to-popup? [
|
||||||
|
2dup completion-popup>>
|
||||||
|
focusable-child resend-gesture
|
||||||
|
[ call-next-method ] [ 2drop f ] if
|
||||||
|
] [ call-next-method ] if ;
|
||||||
|
|
||||||
|
: test-it ( interactor -- )
|
||||||
|
dup <word-completion-popup> show-completion-popup ;
|
||||||
|
|
||||||
|
interactor "completion" f {
|
||||||
|
{ T{ key-down f f "TAB" } word-completion-popup }
|
||||||
|
} define-command-map
|
|
@ -22,15 +22,19 @@ generic class ;
|
||||||
|
|
||||||
{ 700 400 } profiler-gadget set-tool-dim
|
{ 700 400 } profiler-gadget set-tool-dim
|
||||||
|
|
||||||
SINGLETON: word-renderer
|
SINGLETONS: word-renderer vocab-renderer ;
|
||||||
|
UNION: profiler-renderer word-renderer vocab-renderer ;
|
||||||
|
|
||||||
! Value is a { word count } pair
|
! Value is a { word count } pair
|
||||||
M: word-renderer row-columns
|
M: profiler-renderer row-columns
|
||||||
drop [ [ present ] map ] [ { "All" "" } ] if* ;
|
drop [ [ present ] map ] [ { "All" "" } ] if* ;
|
||||||
|
|
||||||
M: word-renderer row-value
|
M: profiler-renderer row-value
|
||||||
drop dup [ first ] when ;
|
drop dup [ first ] when ;
|
||||||
|
|
||||||
|
M: vocab-renderer row-value
|
||||||
|
call-next-method dup [ vocab ] when ;
|
||||||
|
|
||||||
SINGLETON: method-renderer
|
SINGLETON: method-renderer
|
||||||
|
|
||||||
! Value is a { method-body count } pair
|
! Value is a { method-body count } pair
|
||||||
|
@ -53,7 +57,6 @@ M: method-renderer row-value drop first ;
|
||||||
|
|
||||||
: <profiler-table> ( model -- table )
|
: <profiler-table> ( model -- table )
|
||||||
[ match? ] <search-table>
|
[ match? ] <search-table>
|
||||||
word-renderer >>renderer
|
|
||||||
{ 0 1 } >>column-alignment
|
{ 0 1 } >>column-alignment
|
||||||
0 >>filled-column ;
|
0 >>filled-column ;
|
||||||
|
|
||||||
|
@ -102,9 +105,11 @@ M: method-renderer row-value drop first ;
|
||||||
{ 1 0 } <track>
|
{ 1 0 } <track>
|
||||||
profiler vocabs>> <profiler-table>
|
profiler vocabs>> <profiler-table>
|
||||||
profiler vocab>> >>selected-value
|
profiler vocab>> >>selected-value
|
||||||
|
vocab-renderer >>renderer
|
||||||
"Vocabularies" <labelled-gadget>
|
"Vocabularies" <labelled-gadget>
|
||||||
1/2 track-add
|
1/2 track-add
|
||||||
profiler <words-model> <profiler-table>
|
profiler <words-model> <profiler-table>
|
||||||
|
word-renderer >>renderer
|
||||||
"Words" <labelled-gadget>
|
"Words" <labelled-gadget>
|
||||||
1/2 track-add ;
|
1/2 track-add ;
|
||||||
|
|
||||||
|
@ -113,10 +118,12 @@ M: method-renderer row-value drop first ;
|
||||||
{ 1 0 } <track>
|
{ 1 0 } <track>
|
||||||
profiler <generic-model> <profiler-table>
|
profiler <generic-model> <profiler-table>
|
||||||
profiler generic>> >>selected-value
|
profiler generic>> >>selected-value
|
||||||
|
word-renderer >>renderer
|
||||||
"Generic words" <labelled-gadget>
|
"Generic words" <labelled-gadget>
|
||||||
1/2 track-add
|
1/2 track-add
|
||||||
profiler <class-model> <profiler-table>
|
profiler <class-model> <profiler-table>
|
||||||
profiler class>> >>selected-value
|
profiler class>> >>selected-value
|
||||||
|
word-renderer >>renderer
|
||||||
"Classes" <labelled-gadget>
|
"Classes" <labelled-gadget>
|
||||||
1/2 track-add
|
1/2 track-add
|
||||||
1/2 track-add
|
1/2 track-add
|
||||||
|
|
Loading…
Reference in New Issue