From d14fba5b98fe36b82f8b5a7f8577d063e77e14d1 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 17 Feb 2009 08:23:46 -0600 Subject: [PATCH] Icons in profiler tool, update for search models change --- basis/ui/tools/profiler/profiler.factor | 74 ++++++++++++++++--------- 1 file changed, 49 insertions(+), 25 deletions(-) diff --git a/basis/ui/tools/profiler/profiler.factor b/basis/ui/tools/profiler/profiler.factor index 86a7538b3a..f99cb6b368 100644 --- a/basis/ui/tools/profiler/profiler.factor +++ b/basis/ui/tools/profiler/profiler.factor @@ -1,14 +1,15 @@ ! Copyright (C) 2007, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: kernel quotations accessors fry assocs present math.order -math.vectors arrays locals models.search models.sort models -sequences vocabs tools.profiler words prettyprint ui ui.commands -ui.gadgets ui.gadgets.panes ui.gadgets.scrollers -ui.gadgets.tracks ui.gestures ui.gadgets.buttons +math.vectors arrays locals models.search models.sort models sequences +vocabs tools.profiler words prettyprint combinators.smart +definitions.icons ui ui.commands ui.gadgets ui.gadgets.panes +ui.gadgets.scrollers ui.gadgets.tracks ui.gestures ui.gadgets.buttons ui.gadgets.tables ui.gadgets.search-tables ui.gadgets.labeled ui.gadgets.buttons ui.gadgets.packs ui.gadgets.labels ui.gadgets.tabbed ui.gadgets.status-bar ui.gadgets.borders -ui.tools.browser ui.tools.common ui.baseline-alignment ; +ui.tools.browser ui.tools.common ui.baseline-alignment +ui.operations ui.images ; FROM: models.filter => ; FROM: models.compose => ; IN: ui.tools.profiler @@ -23,34 +24,52 @@ generic class ; SINGLETONS: word-renderer vocab-renderer ; UNION: profiler-renderer word-renderer vocab-renderer ; +array ; inline + +PRIVATE> + ! Value is a { word count } pair M: profiler-renderer row-columns - drop [ [ present ] map ] [ { "All" "" } ] if* ; + drop + [ + [ + [ [ definition-icon ] [ present ] bi ] + [ present ] + bi* + ] with-datastack* + ] [ { "" "All" "" } ] if* ; + +M: profiler-renderer prototype-row + drop \ = definition-icon "" "" 3array ; M: profiler-renderer row-value drop dup [ first ] when ; -M: vocab-renderer row-value - call-next-method dup [ vocab ] when ; +M: profiler-renderer column-alignment drop { 0 0 1 } ; +M: profiler-renderer filled-column drop 1 ; -M: profiler-renderer column-alignment drop { 0 1 } ; -M: profiler-renderer filled-column drop 0 ; - -M: word-renderer column-titles drop { "Word" "Count" } ; -M: vocab-renderer column-titles drop { "Vocabulary" "Count" } ; +M: word-renderer column-titles drop { "" "Word" "Count" } ; +M: vocab-renderer column-titles drop { "" "Vocabulary" "Count" } ; SINGLETON: method-renderer -M: method-renderer column-alignment drop { 0 1 } ; -M: method-renderer filled-column drop 0 ; +M: method-renderer column-alignment drop { 0 0 1 } ; +M: method-renderer filled-column drop 1 ; ! Value is a { method-body count } pair M: method-renderer row-columns - drop [ first synopsis ] [ second present ] bi 2array ; + drop [ + [ [ definition-icon ] [ synopsis ] bi ] + [ present ] + bi* + ] with-datastack* ; M: method-renderer row-value drop first ; -M: method-renderer column-titles drop { "Method" "Count" } ; +M: method-renderer column-titles drop { "" "Method" "Count" } ; : ( values profiler -- model ) [ [ filter-counts ] ] [ sort>> ] bi* ; @@ -67,17 +86,16 @@ M: method-renderer column-titles drop { "Method" "Count" } ; ] ] keep ; -: match? ( pair/f str -- ? ) - swap dup [ first present subseq? ] [ 2drop t ] if ; - : ( model renderer -- table ) - [ match? ] ; + [ first present ] + [ invoke-primary-operation ] >>action ; : ( counts profiler -- model' ) [ ] dip [ f prefix ] ; : ( profiler -- model ) - [ vocab-counters ] dip ; + [ vocab-counters [ [ vocab ] dip ] assoc-map ] dip + ; : ( profiler -- model ) [ generic-counters ] dip ; @@ -98,10 +116,16 @@ M: method-renderer column-titles drop { "Method" "Count" } ; [ first3 '[ _ _ method-matches? ] filter ] ] keep ; +: sort-by-name ( obj1 obj2 -- <=> ) + [ first name>> ] compare ; + +: sort-by-call-count ( obj1 obj2 -- <=> ) + [ second ] compare invert-comparison ; + : sort-options ( -- alist ) { - { [ [ first ] compare ] "by name" } - { [ [ second ] compare invert-comparison ] "by call count" } + { [ sort-by-name ] "by name" } + { [ sort-by-call-count ] "by call count" } } ; : ( model -- gadget ) @@ -160,7 +184,7 @@ M: method-renderer column-titles drop { "Method" "Count" } ; : ( -- profiler ) vertical profiler-gadget new-track { 5 5 } >>gap - [ [ first ] compare ] >>sort + [ sort-by-name ] >>sort all-words counters >>words >>vocab dup >>vocabs