1
2
3
4
5
6
7
8
9
10
11 import pygtk
12 pygtk.require("2.0")
13 import gtk, gobject
14 from iceprod.core.dataclasses import *
15 import logging
16
17 logger = logging.getLogger('GtkModuleList')
18
20 """ The GUI class is the controller for our application """
21
22 fooname = 'foo'
23 fooclass = 'BarModule'
24 fooproject = 'pippo-project'
25
26 - def __init__(self,iconfig,pdb,gtkmod,title="Available Modules"):
27
28 self.iconfig = iconfig
29 self.pdb = pdb
30 self.gtkmod = gtkmod
31 self.printer = None
32 self.display()
33
34
35 self.root = gtk.Window(type=gtk.WINDOW_TOPLEVEL)
36 self.sw = gtk.ScrolledWindow()
37 self.root.set_title(title)
38 self.root.set_size_request(600, 475)
39
40
41 self.view = self.make_view( self.store )
42
43 b = gtk.Button(stock=gtk.STOCK_APPLY)
44 b.connect('clicked', self.commit_changes)
45 self.hbbox = gtk.HButtonBox()
46 self.hbbox.pack_start(b, False, False, 1)
47
48
49 self.sw.add(self.view)
50
51 self.vbox = gtk.VBox(False,0)
52 self.vbox.pack_start(self.sw,True,True,2)
53 self.vbox.pack_end(self.hbbox,False,False,2)
54 self.root.add(self.vbox)
55 self.root.show_all()
56 return
57
59 self.printer = printer
60
63
65 if self.printer:
66 self.printer(txt)
67 else:
68 print txt
69
70
72 """ Sets up and populates gtk.TreeStore """
73 self.store = gtk.TreeStore( int, str, str, str, gobject.TYPE_BOOLEAN )
74 row = [0,self.fooname,self.fooclass, self.fooproject,False]
75 self.store.append(None, row )
76
77 if not self.pdb.cached and not self.pdb.connect(): return
78 for mp in self.iconfig.GetMetaProjectList():
79 for p in self.pdb.GetProjects(mp.GetId()):
80 pname = p.GetName()
81 pver = p.GetVersion()
82
83 modules = self.pdb.GetModulesP(pname,pver)
84 for m in modules:
85 if not self.iconfig.GetModule(m.GetName()):
86 row = [m.GetId(),m.GetName(), m.GetClass(),pname,False]
87 logger.debug('|'.join(map(str,row)))
88 self.store.append(None, row )
89
90 for p in self.iconfig.GetProjectList():
91 pname = p.GetName()
92 pver = p.GetVersion()
93
94 modules = self.pdb.GetModulesP(pname,pver)
95 for m in modules:
96 if not self.iconfig.GetModule(m.GetName()):
97 row = [m.GetId(),m.GetName(), m.GetClass(),pname,False]
98 logger.debug('|'.join(map(str,row)))
99 self.store.append(None, row )
100
140
142 model = self.store
143 self.mdict = {}
144 if not self.pdb.cached and not self.pdb.connect(): return
145 model.foreach(self.do_change)
146 return
147
148 - def do_change(self, model, path, iter,connect=True):
193
194 - def col_edited( self, cell, path, new_text, model , column):
195 """
196 Canges the name of the module
197 @todo: add type checking for input values
198 @todo: add descriptions
199 """
200 row = model[path]
201 row[column] = u'%s' % new_text
202
203
205 """
206 Sets the toggled state on the toggle button to true or false.
207 """
208 model = self.store
209 model[path][4] = not model[path][4]
210
211 if not model[path][4]:
212 self.renderer[1].set_property('editable', False)
213 self.renderer[2].set_property('editable', False)
214 self.renderer[3].set_property('editable', False)
215 return
216
217 if model[path][3] == self.fooproject:
218 self.renderer[3].set_property('editable', True)
219 self.renderer[3].connect( 'edited', self.col_edited,self.store,3)
220 if model[path][2] == self.fooclass:
221 self.renderer[2].set_property('editable', True)
222 self.renderer[2].connect( 'edited', self.col_edited,self.store,2)
223 if model[path][1] == self.fooname:
224 self.renderer[1].set_property('editable', True)
225 self.renderer[1].connect( 'edited', self.col_edited,self.store,1)
226
227
229 """ Form a view for the Tree Model """
230 self.view = gtk.TreeView( model )
231 self.view.connect('row-activated', self.add_module)
232
233
234
235 self.renderer = [None]*5
236 for i in range(4):
237 self.renderer[i] = gtk.CellRendererText()
238 self.renderer[4] = gtk.CellRendererToggle()
239 self.renderer[4].set_property('activatable', True)
240 self.renderer[4].connect( 'toggled', self.row_toggled)
241
242 self.column = [None]*5
243 self.column[0] = gtk.TreeViewColumn("DbID",self.renderer[0], text=0)
244 self.column[0].set_sort_column_id(0)
245 self.column[1] = gtk.TreeViewColumn("Default Name",self.renderer[1], text=1)
246 self.column[1].set_sort_column_id(1)
247 self.column[2] = gtk.TreeViewColumn("Class",self.renderer[2], text=2)
248 self.column[2].set_sort_column_id(2)
249 self.column[3] = gtk.TreeViewColumn("Project",self.renderer[3],text=3 )
250 self.column[4] = gtk.TreeViewColumn('Selected')
251 self.column[4].pack_start(self.renderer[4], True)
252 self.column[4].add_attribute( self.renderer[4], "active", 4)
253
254 for i in range(5):
255 self.view.append_column( self.column[i] )
256 return self.view
257