3 import sys
, gtk
, gtk
.glade
, gobject
, os
, locale
, gettext
4 from pycoccimodel
import *
5 import vimembed
, vimcom
7 class VimCallback(object):
8 def __init__(self
, app
):
11 def vim_new_serverlist(self
, serverlist
):
12 self
.app
.vimcom
.stop_fetching_serverlist()
13 self
.app
.vimcom
.open_file(self
.app
.vimsock
.get_server_name(), '~/.vimrc')
15 class pycocci(object):
17 self
.local_path
= os
.path
.realpath(os
.path
.dirname(sys
.argv
[0]))
18 self
.initialize_translation()
19 self
.gladefile
= os
.path
.join(self
.local_path
, "coccilib/coccigui/pygui.glade")
20 self
.wTree
= gtk
.glade
.XML(self
.gladefile
, "mainWindow")
21 self
.setup_tree_columns()
22 self
.wTree
.signal_autoconnect(self
)
23 self
.initialise_tree()
24 self
.main_window
= self
.wTree
.get_widget("mainWindow")
26 self
.vimsock
= vimembed
.VimEmbedWidget('gvim', '~/.vimrc')
27 self
.vimsock
.visible
= True
28 self
.vbox1
= self
.wTree
.get_widget("vbox1")
29 self
.vbox1
.pack_end(self
.vimsock
)
33 self
.vimcb
= VimCallback(self
)
34 self
.vimcom
= vimcom
.VimCom(self
.vimcb
)
36 self
.vimsock
.connect('destroy', self
.on_vimsock_destroy
)
38 def on_vimsock_destroy(self
, widget
):
41 def initialise_tree(self
):
43 self
.__column
_dict
= {}
44 self
.bugTreeView
= self
.wTree
.get_widget("bugView")
45 self
.bugTreeView
.set_rules_hint(True)
47 for c
in self
.__tree
_columns
:
48 self
.__column
_dict
[c
.id] = c
49 tree_type_list
.append(c
.type)
52 column
= gtk
.TreeViewColumn(c
.name
, c
.cellrenderer
, text
=c
.pos
)
53 column
.set_resizable(True)
54 column
.set_sort_column_id(c
.pos
)
55 self
.bugTreeView
.append_column(column
)
57 self
.bugTree
= gtk
.TreeStore(*tree_type_list
)
58 self
.bugTreeView
.set_model(self
.bugTree
)
59 self
.bugTreeView
.connect('row-activated', self
.row_activated
)
61 def row_activated(self
, view
, path
, view_column
):
62 it
= view
.get_model().get_iter(path
)
63 obj
, objtype
, bugdesc
, file, line
, col
= view
.get_model().get(it
, 0, 1, 2, 3, 4, 5)
66 server
= self
.vimsock
.get_server_name()
68 self
.vimcom
.open_file(server
, file)
70 self
.vimcom
.send_ex(server
, line
)
73 self
.vimcom
.send_keys(server
, col
+ '|')
75 def setup_tree_columns(self
):
76 self
.__tree
_columns
= [
77 pycoccicolumn(COL_OBJECT
, gobject
.TYPE_PYOBJECT
, "object", 0),
78 pycoccicolumn(COL_OBJECT
, gobject
.TYPE_INT
, "object_type", 1),
79 pycoccicolumn(COL_TITLE
, gobject
.TYPE_STRING
, _("Bug type"), 2, True, gtk
.CellRendererText()),
80 pycoccicolumn(COL_FILE
, gobject
.TYPE_STRING
, _("File"), 3, True, gtk
.CellRendererText()),
81 pycoccicolumn(COL_LINE
, gobject
.TYPE_STRING
, _("Line"), 4, True, gtk
.CellRendererText()),
82 pycoccicolumn(COL_COLUMN
, gobject
.TYPE_STRING
, _("Column"), 5, True, gtk
.CellRendererText())
85 def initialize_translation(self
):
87 lc
, encoding
= locale
.getdefaultlocale()
90 language
= os
.environ
.get('LANGUAGE', None)
92 langs
+= language
.split(':')
94 gettext
.bindtextdomain('pycocci', self
.local_path
)
95 gettext
.textdomain('pycocci')
96 self
.lang
= gettext
.translation('pycocci', self
.local_path
,
97 languages
=langs
, fallback
= True)
98 gettext
.install('pycocci', self
.local_path
)
100 def on_mainWindow_destroy(self
, widget
):
103 def add_result(self
, cocci_file
, l
):
104 root
= self
.bugTreeView
.get_model().get_iter_root()
108 c_cocci_file
= self
.bugTreeView
.get_model().get(root
, 2)[0]
109 if c_cocci_file
== cocci_file
:
113 root
= self
.bugTreeView
.get_model().iter_next(root
)
116 it
= self
.bugTree
.insert_after(None, None, (None, 0, cocci_file
, '', '', ''))
118 description
, file, line
, col
= l
[0]
119 mit
= self
.bugTree
.append(it
, (None, 1, description
, file, line
, col
))
121 for i
in xrange(1, len(l
)):
122 description
, file, line
, col
= l
[i
]
123 self
.bugTree
.append(mit
, (None, 2, description
, file, line
, col
))
125 #if __name__ == '__main__':
127 # app.add_result('Test.cocci', [('Array identified: z', '/home/hstuart/thesis/py-cocci/tests/scripting/array/script4.c', '6', '7'), ('Array use: z', '/home/hstuart/thesis/py-cocci/tests/scripting/array/script4.c', '8', '3')])
128 # app.add_result('Test.cocci', [('Array identified: foo', '/home/hstuart/thesis/py-cocci/tests/scripting/array/script4.c', '12', '17')])