Add right-click menu to tables, row-value word
parent
c054c8028a
commit
c09f91da69
|
@ -3,16 +3,18 @@
|
||||||
USING: accessors arrays colors fry io.styles kernel math
|
USING: accessors arrays colors fry io.styles kernel math
|
||||||
math.geometry.rect math.order math.vectors namespaces opengl
|
math.geometry.rect math.order math.vectors namespaces opengl
|
||||||
sequences ui.gadgets ui.gadgets.scrollers ui.gadgets.status-bar
|
sequences ui.gadgets ui.gadgets.scrollers ui.gadgets.status-bar
|
||||||
ui.gadgets.worlds ui.gadgets.theme ui.gestures ui.render models
|
ui.gadgets.worlds ui.gadgets.theme ui.gestures ui.render
|
||||||
math.ranges sequences combinators ;
|
ui.gadgets.menus models math.ranges sequences combinators ;
|
||||||
IN: ui.gadgets.tables
|
IN: ui.gadgets.tables
|
||||||
|
|
||||||
! Row rendererer protocol
|
! Row rendererer protocol
|
||||||
GENERIC: row-columns ( row renderer -- columns )
|
GENERIC: row-columns ( row renderer -- columns )
|
||||||
|
GENERIC: row-value ( row renderer -- object )
|
||||||
|
|
||||||
SINGLETON: trivial-renderer
|
SINGLETON: trivial-renderer
|
||||||
|
|
||||||
M: trivial-renderer row-columns drop ;
|
M: trivial-renderer row-columns drop ;
|
||||||
|
M: object row-value drop ;
|
||||||
|
|
||||||
TUPLE: table < gadget
|
TUPLE: table < gadget
|
||||||
renderer filled-column column-alignment action
|
renderer filled-column column-alignment action
|
||||||
|
@ -172,10 +174,11 @@ M: table pref-dim*
|
||||||
over [ control-value nth ] [ 2drop f ] if ;
|
over [ control-value nth ] [ 2drop f ] if ;
|
||||||
|
|
||||||
: selected-row ( table -- value/f )
|
: selected-row ( table -- value/f )
|
||||||
[ selected-index>> ] keep nth-row ;
|
[ selected-index>> ] keep [ nth-row ] keep
|
||||||
|
over [ renderer>> row-value ] [ drop ] if ;
|
||||||
|
|
||||||
: update-selected-value ( table -- )
|
: update-selected-value ( table -- )
|
||||||
[ selected-row ] keep selected-value>> set-model ;
|
[ selected-row ] [ selected-value>> ] bi set-model ;
|
||||||
|
|
||||||
M: table model-changed
|
M: table model-changed
|
||||||
nip
|
nip
|
||||||
|
@ -228,21 +231,37 @@ M: table model-changed
|
||||||
: hide-mouse-help ( table -- )
|
: hide-mouse-help ( table -- )
|
||||||
f >>mouse-index [ hide-status ] [ relayout-1 ] bi ;
|
f >>mouse-index [ hide-status ] [ relayout-1 ] bi ;
|
||||||
|
|
||||||
|
: valid-row? ( row table -- ? )
|
||||||
|
control-value length 1- 0 swap between? ;
|
||||||
|
|
||||||
|
: show-row-summary ( row table -- )
|
||||||
|
[ renderer>> row-value ] keep show-summary ;
|
||||||
|
|
||||||
|
: if-mouse-row ( table true false -- )
|
||||||
|
[ [ mouse-row ] keep 2dup valid-row? ]
|
||||||
|
[ ] [ '[ nip @ ] ] tri* if ; inline
|
||||||
|
|
||||||
: show-mouse-help ( table -- )
|
: show-mouse-help ( table -- )
|
||||||
[ mouse-row ] keep
|
[
|
||||||
2dup control-value length 1- 0 swap between? [
|
|
||||||
[ swap >>mouse-index relayout-1 ]
|
[ swap >>mouse-index relayout-1 ]
|
||||||
[
|
[
|
||||||
[ nth-row ] keep
|
[ nth-row ] keep
|
||||||
over [ show-summary ] [ 2drop ] if
|
over [ show-row-summary ] [ 2drop ] if
|
||||||
] 2bi
|
] 2bi
|
||||||
] [ nip hide-mouse-help ] if ;
|
] [ hide-mouse-help ] if-mouse-row ;
|
||||||
|
|
||||||
|
: table-operations-menu ( table -- )
|
||||||
|
[
|
||||||
|
[ nth-row ] keep [ renderer>> row-value ] keep
|
||||||
|
swap show-operations-menu
|
||||||
|
] [ drop ] if-mouse-row ;
|
||||||
|
|
||||||
table H{
|
table H{
|
||||||
{ T{ mouse-enter } [ show-mouse-help ] }
|
{ T{ mouse-enter } [ show-mouse-help ] }
|
||||||
{ T{ mouse-leave } [ hide-mouse-help ] }
|
{ T{ mouse-leave } [ hide-mouse-help ] }
|
||||||
{ T{ motion } [ show-mouse-help ] }
|
{ T{ motion } [ show-mouse-help ] }
|
||||||
{ T{ button-down } [ table-button-down ] }
|
{ T{ button-down } [ table-button-down ] }
|
||||||
|
{ T{ button-down f f 3 } [ table-operations-menu ] }
|
||||||
{ T{ button-up } [ table-button-up ] }
|
{ T{ button-up } [ table-button-up ] }
|
||||||
{ T{ gain-focus } [ t >>focused? drop ] }
|
{ T{ gain-focus } [ t >>focused? drop ] }
|
||||||
{ T{ lose-focus } [ f >>focused? drop ] }
|
{ T{ lose-focus } [ f >>focused? drop ] }
|
||||||
|
|
|
@ -21,6 +21,9 @@ SINGLETON: inspector-renderer
|
||||||
M: inspector-renderer row-columns
|
M: inspector-renderer row-columns
|
||||||
drop [ key-string>> ] [ value-string>> ] bi 2array ;
|
drop [ key-string>> ] [ value-string>> ] bi 2array ;
|
||||||
|
|
||||||
|
M: inspector-renderer row-value
|
||||||
|
drop value>> ;
|
||||||
|
|
||||||
: <summary-gadget> ( model -- gadget )
|
: <summary-gadget> ( model -- gadget )
|
||||||
[
|
[
|
||||||
standard-table-style [
|
standard-table-style [
|
||||||
|
@ -52,7 +55,7 @@ DEFER: inspector
|
||||||
|
|
||||||
: <inspector-table> ( model -- table )
|
: <inspector-table> ( model -- table )
|
||||||
[ make-slot-descriptions ] <filter> <table>
|
[ make-slot-descriptions ] <filter> <table>
|
||||||
[ value>> inspector ] >>action
|
[ inspector ] >>action
|
||||||
inspector-renderer >>renderer
|
inspector-renderer >>renderer
|
||||||
monospace-font >>font ;
|
monospace-font >>font ;
|
||||||
|
|
||||||
|
@ -88,5 +91,9 @@ inspector-gadget "toolbar" f {
|
||||||
{ T{ key-down f f "F1" } inspector-help }
|
{ T{ key-down f f "F1" } inspector-help }
|
||||||
} define-command-map
|
} define-command-map
|
||||||
|
|
||||||
|
inspector-gadget "multi-touch" f {
|
||||||
|
{ T{ up-action } com-refresh }
|
||||||
|
} define-command-map
|
||||||
|
|
||||||
: inspector ( obj -- )
|
: inspector ( obj -- )
|
||||||
<inspector-gadget> "Inspector" open-status-window ;
|
<inspector-gadget> "Inspector" open-status-window ;
|
|
@ -1,13 +1,14 @@
|
||||||
! Copyright (C) 2007, 2009 Slava Pestov.
|
! Copyright (C) 2007, 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: ui.tools.browser kernel quotations accessors fry
|
USING: kernel quotations accessors fry
|
||||||
assocs present math.order math.vectors arrays locals
|
assocs present math.order math.vectors arrays locals
|
||||||
models.search models.sort models sequences vocabs
|
models.search models.sort models sequences vocabs
|
||||||
tools.profiler ui ui.commands ui.gadgets ui.gadgets.panes
|
tools.profiler words prettyprint ui ui.commands ui.gadgets
|
||||||
ui.gadgets.scrollers ui.gadgets.tracks ui.gestures
|
ui.gadgets.panes ui.gadgets.scrollers ui.gadgets.tracks ui.gestures
|
||||||
ui.gadgets.buttons ui.gadgets.tables ui.gadgets.search-tables
|
ui.gadgets.buttons ui.gadgets.tables ui.gadgets.search-tables
|
||||||
ui.gadgets.labelled ui.gadgets.buttons ui.gadgets.packs
|
ui.gadgets.labelled ui.gadgets.buttons ui.gadgets.packs
|
||||||
ui.gadgets.labels ui.gadgets.tabbed words prettyprint ;
|
ui.gadgets.labels ui.gadgets.tabbed ui.gadgets.status-bar
|
||||||
|
ui.tools.browser ;
|
||||||
FROM: models.filter => <filter> ;
|
FROM: models.filter => <filter> ;
|
||||||
FROM: models.compose => <compose> ;
|
FROM: models.compose => <compose> ;
|
||||||
IN: ui.tools.profiler
|
IN: ui.tools.profiler
|
||||||
|
@ -25,19 +26,23 @@ SINGLETON: word-renderer
|
||||||
M: word-renderer row-columns
|
M: word-renderer row-columns
|
||||||
drop [ [ present ] map ] [ { "All" "" } ] if* ;
|
drop [ [ present ] map ] [ { "All" "" } ] if* ;
|
||||||
|
|
||||||
|
M: word-renderer row-value drop first ;
|
||||||
|
|
||||||
SINGLETON: method-renderer
|
SINGLETON: method-renderer
|
||||||
|
|
||||||
! Value is a { method-body count } pair
|
! Value is a { method-body count } pair
|
||||||
M: method-renderer row-columns
|
M: method-renderer row-columns
|
||||||
drop [ first synopsis ] [ second present ] bi 2array ;
|
drop [ first synopsis ] [ second present ] bi 2array ;
|
||||||
|
|
||||||
|
M: method-renderer row-value drop first ;
|
||||||
|
|
||||||
: <profiler-model> ( values profiler -- model )
|
: <profiler-model> ( values profiler -- model )
|
||||||
[ [ filter-counts ] <filter> ] [ sort>> ] bi* <sort> ;
|
[ [ filter-counts ] <filter> ] [ sort>> ] bi* <sort> ;
|
||||||
|
|
||||||
: <words-model> ( profiler -- model )
|
: <words-model> ( profiler -- model )
|
||||||
[
|
[
|
||||||
[ words>> ] [ vocab>> ] bi
|
[ words>> ] [ vocab>> ] bi
|
||||||
[ [ [ first vocabulary>> ] [ first ] bi* = ] when* ] <search>
|
[ [ [ first vocabulary>> ] dip = ] when* ] <search>
|
||||||
] keep <profiler-model> ;
|
] keep <profiler-model> ;
|
||||||
|
|
||||||
: match? ( pair/f str -- ? )
|
: match? ( pair/f str -- ? )
|
||||||
|
@ -62,7 +67,7 @@ M: method-renderer row-columns
|
||||||
[ class-counters ] dip <profiler-filter-model> ;
|
[ class-counters ] dip <profiler-filter-model> ;
|
||||||
|
|
||||||
: method-matches? ( method generic class -- ? )
|
: method-matches? ( method generic class -- ? )
|
||||||
[ dup [ first ] when ] tri@
|
[ first ] 2dip
|
||||||
[ drop dup [ subwords memq? ] [ 2drop t ] if ]
|
[ drop dup [ subwords memq? ] [ 2drop t ] if ]
|
||||||
[ nip dup [ swap "method-class" word-prop = ] [ 2drop t ] if ]
|
[ nip dup [ swap "method-class" word-prop = ] [ 2drop t ] if ]
|
||||||
3bi and ;
|
3bi and ;
|
||||||
|
@ -145,6 +150,6 @@ profiler-gadget "toolbar" f {
|
||||||
} define-command-map
|
} define-command-map
|
||||||
|
|
||||||
: profiler-window ( -- )
|
: profiler-window ( -- )
|
||||||
<profiler-gadget> "Profiling results" open-window ;
|
<profiler-gadget> "Profiling results" open-status-window ;
|
||||||
|
|
||||||
MAIN: profiler-window
|
MAIN: profiler-window
|
Loading…
Reference in New Issue