]> gitweb.factorcode.org Git - factor.git/blob - basis/ui/tools/traceback/traceback.factor
ui.theme: updates to color scheme.
[factor.git] / basis / ui / tools / traceback / traceback.factor
1 ! Copyright (C) 2006, 2010 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays colors.constants continuations fonts fry inspector
4 kernel models models.arrow prettyprint sequences ui.commands
5 ui.gadgets ui.gadgets.borders ui.gadgets.buttons
6 ui.gadgets.labeled ui.gadgets.panes ui.gadgets.scrollers
7 ui.gadgets.status-bar ui.gadgets.tables ui.gadgets.toolbar
8 ui.theme ui.gadgets.theme ui.gadgets.tracks
9 ui.gestures ui.tools.common ;
10 QUALIFIED-WITH: ui.tools.inspector i
11 IN: ui.tools.traceback
12
13 TUPLE: stack-entry object string ;
14
15 : <stack-entry> ( object -- stack-entry )
16     dup [ unparse-short ] [ drop error-in-pprint ] recover
17     stack-entry boa ;
18
19 SINGLETON: stack-entry-renderer
20
21 M: stack-entry-renderer row-columns drop string>> 1array ;
22
23 M: stack-entry-renderer row-value drop object>> ;
24
25 : <stack-table> ( model -- table )
26     [ [ <stack-entry> ] map ] <arrow> stack-entry-renderer <table>
27         10 >>min-rows
28         10 >>max-rows
29         40 >>min-cols
30         40 >>max-cols
31         monospace-font >>font theme-font-colors
32         [ i:inspector ] >>action
33         t >>single-click? ;
34
35 : <stack-display> ( model quot title color -- gadget )
36     [ '[ dup _ when ] <arrow> <stack-table> margins <scroller> white-interior ] 2dip
37     <labeled> ;
38
39 : <callstack-display> ( model -- gadget )
40     [ [ call>> callstack. ] when* ]
41     <pane-control> t >>scrolls? margins <scroller> white-interior
42     "Call stack" call-stack-color <labeled> ;
43
44 : <datastack-display> ( model -- gadget )
45     [ data>> ] "Data stack" data-stack-color <stack-display> ;
46
47 : <retainstack-display> ( model -- gadget )
48     [ retain>> ] "Retain stack" retain-stack-color <stack-display> ;
49
50 TUPLE: traceback-gadget < tool ;
51
52 : <traceback-gadget> ( model -- gadget )
53     [
54         vertical traceback-gadget new-track
55         with-lines
56     ] dip
57     [ >>model ]
58     [
59         [ vertical <track> with-lines ] dip
60         [
61             [ horizontal <track> with-lines ] dip
62             [ <datastack-display> 1/2 track-add ]
63             [ <retainstack-display> 1/2 track-add ] bi
64             1/3 track-add
65         ]
66         [ <callstack-display> 2/3 track-add ] bi
67          1 track-add
68     ] bi
69     add-toolbar ;
70
71 : variables ( traceback -- )
72     model>> [ dup [ name>> vars-in-scope ] when ] <arrow> i:inspect-model ;
73
74 : traceback-window ( continuation -- )
75     <model> <traceback-gadget> "Traceback" open-status-window ;
76
77 : inspect-continuation ( traceback -- )
78     control-value i:inspector ;
79
80 traceback-gadget "toolbar" f {
81     { T{ key-down f f "v" } variables }
82     { T{ key-down f f "n" } inspect-continuation }
83 } define-command-map