New ui.gadgets.tabbed vocab, working on 'Methods' tab in profiler tool
parent
c1f50f0ad6
commit
a39a644362
|
@ -9,8 +9,11 @@ IN: tools.profiler
|
||||||
: profile ( quot -- )
|
: profile ( quot -- )
|
||||||
[ t profiling call ] [ f profiling ] [ ] cleanup ;
|
[ t profiling call ] [ f profiling ] [ ] cleanup ;
|
||||||
|
|
||||||
|
: filter-counts ( alist -- alist' )
|
||||||
|
[ second 0 > ] filter ;
|
||||||
|
|
||||||
: counters ( words -- alist )
|
: counters ( words -- alist )
|
||||||
[ dup counter>> ] { } map>assoc [ second 0 > ] filter ;
|
[ dup counter>> ] { } map>assoc filter-counts ;
|
||||||
|
|
||||||
: vocab-counters ( -- alist )
|
: vocab-counters ( -- alist )
|
||||||
vocabs [
|
vocabs [
|
||||||
|
|
|
@ -8,11 +8,17 @@ $nl
|
||||||
|
|
||||||
HELP: <book>
|
HELP: <book>
|
||||||
{ $values { "pages" "a sequence of gadgets" } { "model" model } { "book" book } }
|
{ $values { "pages" "a sequence of gadgets" } { "model" model } { "book" book } }
|
||||||
{ $description "Creates a " { $link book } " control, which contains the gadgets in " { $snippet "pages" } ". A book shows one child at a time, determined by the value of the model, which must be an integer " } ;
|
{ $description "Creates a " { $link book } " control, which contains the gadgets in " { $snippet "pages" } "." } ;
|
||||||
|
|
||||||
|
HELP: <empty-book>
|
||||||
|
{ $values { "model" model } { "book" book } }
|
||||||
|
{ $description "Creates a " { $link book } " control with no children." }
|
||||||
|
{ $notes "Children must be added to the book before it is grafted, otherwise an error will be thrown." } ;
|
||||||
|
|
||||||
ARTICLE: "ui-book-layout" "Book layouts"
|
ARTICLE: "ui-book-layout" "Book layouts"
|
||||||
"Books can contain any number of children, and display one child at a time."
|
"Books can contain any number of children, and display one child at a time. The currently visible child is determined by the value of the model, which must be an integer."
|
||||||
{ $subsection book }
|
{ $subsection book }
|
||||||
{ $subsection <book> } ;
|
{ $subsection <book> }
|
||||||
|
{ $subsection <empty-book> } ;
|
||||||
|
|
||||||
ABOUT: "ui-book-layout"
|
ABOUT: "ui-book-layout"
|
||||||
|
|
|
@ -16,12 +16,15 @@ M: book model-changed ( model book -- )
|
||||||
dup current-page show-gadget
|
dup current-page show-gadget
|
||||||
relayout ;
|
relayout ;
|
||||||
|
|
||||||
: new-book ( pages model class -- book )
|
: new-book ( model class -- book )
|
||||||
new-gadget
|
new-gadget
|
||||||
swap >>model
|
swap >>model ; inline
|
||||||
swap add-gadgets ; inline
|
|
||||||
|
|
||||||
: <book> ( pages model -- book ) book new-book ;
|
: <book> ( pages model -- book )
|
||||||
|
book new-book swap add-gadgets ;
|
||||||
|
|
||||||
|
: <empty-book> ( model -- book )
|
||||||
|
book new-book ;
|
||||||
|
|
||||||
M: book pref-dim* ( book -- dim ) children>> pref-dims max-dim ;
|
M: book pref-dim* ( book -- dim ) children>> pref-dims max-dim ;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
! Copyright (C) 2008 Slava Pestov.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: ui.gadgets.tracks ui.gadgets.buttons ui.gadgets.books
|
||||||
|
ui.gadgets.packs ui.gadgets sequences models accessors kernel ;
|
||||||
|
IN: ui.gadgets.tabbed
|
||||||
|
|
||||||
|
TUPLE: tabbed-gadget < track tabs book ;
|
||||||
|
|
||||||
|
: <tabbed-gadget> ( -- gadget )
|
||||||
|
{ 0 1 } tabbed-gadget new-track
|
||||||
|
0 <model> >>model
|
||||||
|
<shelf> >>tabs
|
||||||
|
dup tabs>> f track-add
|
||||||
|
dup model>> <empty-book> >>book
|
||||||
|
dup book>> 1 track-add ;
|
||||||
|
|
||||||
|
: add-tab/book ( tabbed child -- tabbed )
|
||||||
|
[ dup book>> ] dip add-gadget drop ;
|
||||||
|
|
||||||
|
: add-tab/button ( tabbed label -- tabbed )
|
||||||
|
[ [ dup tabs>> dup children>> length ] [ model>> ] bi ] dip
|
||||||
|
<toggle-button> add-gadget drop ;
|
||||||
|
|
||||||
|
: add-tab ( tabbed child label -- tabbed )
|
||||||
|
[ add-tab/book ] [ add-tab/button ] bi* ;
|
|
@ -1,13 +1,13 @@
|
||||||
! Copyright (C) 2007, 2008 Slava Pestov.
|
! Copyright (C) 2007, 2008 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: ui.tools.workspace kernel quotations accessors fry
|
USING: ui.tools.workspace kernel quotations accessors fry
|
||||||
assocs present math math.order math.vectors arrays
|
assocs present math 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 ui ui.commands ui.gadgets ui.gadgets.panes
|
||||||
ui.gadgets.scrollers ui.gadgets.tracks ui.gestures
|
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.labels ui.gadgets.tabbed ;
|
||||||
FROM: models.filter => <filter> ;
|
FROM: models.filter => <filter> ;
|
||||||
FROM: models.compose => <compose> ;
|
FROM: models.compose => <compose> ;
|
||||||
IN: ui.tools.profiler
|
IN: ui.tools.profiler
|
||||||
|
@ -21,7 +21,7 @@ M: profile-renderer row-columns
|
||||||
drop [ [ present ] map ] [ { "All" "" } ] if* ;
|
drop [ [ present ] map ] [ { "All" "" } ] if* ;
|
||||||
|
|
||||||
: <profiler-model> ( values profiler -- model )
|
: <profiler-model> ( values profiler -- model )
|
||||||
[ [ [ second 0 > ] filter ] <filter> ] [ sort>> ] bi* <sort> ;
|
[ [ filter-counts ] <filter> ] [ sort>> ] bi* <sort> ;
|
||||||
|
|
||||||
: <words-model> ( profiler -- model )
|
: <words-model> ( profiler -- model )
|
||||||
[
|
[
|
||||||
|
@ -29,9 +29,11 @@ M: profile-renderer row-columns
|
||||||
[ [ [ first vocabulary>> ] [ first ] bi* = ] when* ] <search>
|
[ [ [ first vocabulary>> ] [ first ] bi* = ] when* ] <search>
|
||||||
] keep <profiler-model> ;
|
] keep <profiler-model> ;
|
||||||
|
|
||||||
|
: match? ( pair/f str -- ? )
|
||||||
|
swap dup [ first present subseq? ] [ 2drop t ] if ;
|
||||||
|
|
||||||
: <profiler-table> ( model -- table )
|
: <profiler-table> ( model -- table )
|
||||||
[ swap dup [ first present subseq? ] [ 2drop t ] if ] <search-table>
|
[ match? ] <search-table> profile-renderer >>renderer ;
|
||||||
profile-renderer >>renderer ;
|
|
||||||
|
|
||||||
: <vocab-model> ( profiler -- model )
|
: <vocab-model> ( profiler -- model )
|
||||||
[ vocab-counters <model> ] dip
|
[ vocab-counters <model> ] dip
|
||||||
|
@ -43,12 +45,33 @@ M: profile-renderer row-columns
|
||||||
{ [ [ second ] compare invert-comparison ] "by call count" }
|
{ [ [ second ] compare invert-comparison ] "by call count" }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
: <sort-options> ( model -- gadget )
|
||||||
|
sort-options <radio-buttons> { 1 0 } >>orientation ;
|
||||||
|
|
||||||
: <profiler-tool-bar> ( profiler -- gadget )
|
: <profiler-tool-bar> ( profiler -- gadget )
|
||||||
<shelf>
|
<shelf>
|
||||||
{ 5 5 } >>gap
|
{ 5 5 } >>gap
|
||||||
over <toolbar> add-gadget
|
over <toolbar> add-gadget
|
||||||
"Sort by:" <label> add-gadget
|
"Sort by:" <label> add-gadget
|
||||||
swap sort>> sort-options <radio-buttons> { 1 0 } >>orientation add-gadget ;
|
swap sort>> <sort-options> add-gadget ;
|
||||||
|
|
||||||
|
:: <words-tab> ( profiler -- gadget )
|
||||||
|
{ 1 0 } <track>
|
||||||
|
profiler vocabs>> <profiler-table>
|
||||||
|
profiler vocab>> >>selected-value
|
||||||
|
"Vocabularies" <labelled-gadget>
|
||||||
|
1/2 track-add
|
||||||
|
profiler <words-model> <profiler-table>
|
||||||
|
"Words" <labelled-gadget>
|
||||||
|
1/2 track-add ;
|
||||||
|
|
||||||
|
:: <methods-tab> ( profiler -- gadget )
|
||||||
|
{ 0 1 } <track>
|
||||||
|
{ 1 0 } <track>
|
||||||
|
f <model> <profiler-table> "Generic words" <labelled-gadget> 1/2 track-add
|
||||||
|
f <model> <profiler-table> "Classes" <labelled-gadget> 1/2 track-add
|
||||||
|
1/2 track-add
|
||||||
|
f <model> <profiler-table> "Methods" <labelled-gadget> 1/2 track-add ;
|
||||||
|
|
||||||
: <profiler-gadget> ( -- profiler )
|
: <profiler-gadget> ( -- profiler )
|
||||||
{ 0 1 } profiler-gadget new-track
|
{ 0 1 } profiler-gadget new-track
|
||||||
|
@ -57,14 +80,9 @@ M: profile-renderer row-columns
|
||||||
dup <vocab-model> >>vocabs
|
dup <vocab-model> >>vocabs
|
||||||
{ f 0 } <model> >>vocab
|
{ f 0 } <model> >>vocab
|
||||||
dup <profiler-tool-bar> f track-add
|
dup <profiler-tool-bar> f track-add
|
||||||
{ 1 0 } <track>
|
<tabbed-gadget>
|
||||||
over vocabs>> <profiler-table>
|
over <words-tab> "Words" add-tab
|
||||||
pick vocab>> >>selected-value
|
over <methods-tab> "Methods" add-tab
|
||||||
"Vocabularies" <labelled-gadget>
|
|
||||||
1/2 track-add
|
|
||||||
over <words-model> <profiler-table>
|
|
||||||
"Words" <labelled-gadget>
|
|
||||||
1/2 track-add
|
|
||||||
1 track-add ;
|
1 track-add ;
|
||||||
|
|
||||||
M: profiler-gadget pref-dim* call-next-method { 700 400 } vmax ;
|
M: profiler-gadget pref-dim* call-next-method { 700 400 } vmax ;
|
||||||
|
@ -78,6 +96,6 @@ profiler-gadget "toolbar" f {
|
||||||
} define-command-map
|
} define-command-map
|
||||||
|
|
||||||
: profiler-window ( -- )
|
: profiler-window ( -- )
|
||||||
<profiler-gadget> "Profiler" open-window ;
|
<profiler-gadget> "Profiling results" open-window ;
|
||||||
|
|
||||||
MAIN: profiler-window
|
MAIN: profiler-window
|
Loading…
Reference in New Issue