1 ! Copyright (C) 2006, 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors continuations kernel models namespaces arrays
4 fry prettyprint ui ui.commands ui.gadgets ui.gadgets.labelled assocs
5 ui.gadgets.tracks ui.gadgets.buttons ui.gadgets.panes
6 ui.gadgets.status-bar ui.gadgets.scrollers
7 ui.gadgets.tables ui.gestures sequences inspector
9 QUALIFIED-WITH: ui.tools.inspector i
10 IN: ui.tools.traceback
12 TUPLE: stack-entry object string ;
14 : <stack-entry> ( object -- stack-entry )
15 dup unparse-short stack-entry boa ;
17 SINGLETON: stack-entry-renderer
19 M: stack-entry-renderer row-columns drop string>> 1array ;
21 M: stack-entry-renderer row-value drop object>> ;
23 : <stack-table> ( model -- table )
24 [ [ <stack-entry> ] map ] <filter> <table>
25 [ i:inspector ] >>action
26 stack-entry-renderer >>renderer
29 : <stack-display> ( model quot title -- gadget )
30 [ '[ dup _ when ] <filter> <stack-table> <scroller> ] dip
33 : <callstack-display> ( model -- gadget )
34 [ [ call>> callstack. ] when* ]
35 t "Call stack" <labelled-pane> ;
37 : <datastack-display> ( model -- gadget )
38 [ data>> ] "Data stack" <stack-display> ;
40 : <retainstack-display> ( model -- gadget )
41 [ retain>> ] "Retain stack" <stack-display> ;
43 TUPLE: traceback-gadget < track ;
45 M: traceback-gadget pref-dim* drop { 550 600 } ;
47 : <traceback-gadget> ( model -- gadget )
48 [ vertical traceback-gadget new-track ] dip
51 [ horizontal <track> ] dip
52 [ <datastack-display> 1/2 track-add ]
53 [ <retainstack-display> 1/2 track-add ] bi
56 [ <callstack-display> 2/3 track-add ] tri
59 : variables ( traceback -- )
60 model>> [ dup [ name>> vars-in-scope ] when ] <filter> i:inspect-model ;
62 : traceback-window ( continuation -- )
63 <model> <traceback-gadget> "Traceback" open-status-window ;
65 : inspect-continuation ( traceback -- )
66 control-value i:inspector ;
68 traceback-gadget "toolbar" f {
69 { T{ key-down f f "v" } variables }
70 { T{ key-down f f "n" } inspect-continuation }