[go: up one dir, main page]

Menu

[390b88]: / ui / dotview.py  Maximize  Restore  History

Download this file

83 lines (56 with data), 1.8 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
'''View graphs in dot-language.'''
import gtk
import gtk.gdk
import ir.cfg
import dot
from ui import xdot
from ui import view
class DotView(xdot.DotWindow, view.View):
def __init__(self, model):
xdot.DotWindow.__init__(self)
view.View.__init__(self, model)
model.connect('notify::term', self.on_term_update)
self.connect('destroy', self.on_window_destroy)
if model.get_term() is not None:
self.on_term_update(model.term)
def get_name(self, name):
return 'Dot View'
def set_graph(self, graph):
dotcode = dot.stringify(graph)
self.set_dotcode(dotcode)
def on_term_update(self, term):
pass
def on_window_destroy(self, event):
model = self.model
model.disconnect('notify::term', self.on_term_update)
def on_url_clicked(self, url, event):
model = self.model
term = model.get_term()
factory = term.factory
path = factory.parse(url)
return self.on_path_clicked(path, event)
def on_path_clicked(self, path, event):
if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1:
self.model.set_selection((path, path))
if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:
self.model.set_selection((path, path))
from ui.menus import PopupMenu
popupmenu = PopupMenu(self.model)
popupmenu.popup( None, None, None, event.button, event.time)
return True
class CfgView(DotView):
def __init__(self, model):
DotView.__init__(self, model)
self.set_title('Control Flow Graph')
def on_term_update(self, term):
graph = ir.cfg.render(term)
self.set_graph(graph)
class CfgViewFactory(view.ViewFactory):
def get_name(self):
return 'Control Flow Graph'
def can_create(self, model):
return True
def create(self, model):
return CfgView(model)
if __name__ == '__main__':
view.main(CfgView)