1
2
3
4
5
6
7
8
9
10
11
12 from iceprod.core.dataclasses import *
13 import pygtk
14 pygtk.require('2.0')
15 import gtk, gobject
16 import logging
17 from GtkIPModule import *
18
19 logger = logging.getLogger('GtkProjectEditor')
20 NotConnectedException = 'Not connected'
21
22
24
27
29
30 gtk.VBox.__init__(self)
31 self.icetray= icetray
32 self.mdict = {}
33 self.pdict = {}
34 self.db = db
35
36 self.textbuffer = None
37 self.tree_store = gtk.TreeStore( int,str,str,gobject.TYPE_BOOLEAN )
38 self.metaproject_dict = { }
39
40 if not db.cached and not db.connect():
41 raise NotConnectedException, 'Could not connect to database'
42 self.rownum = 0
43 self.rows = {}
44 for mrow in db.GetMetaProjects():
45 mid = mrow.GetId()
46 mpname = mrow.GetName()
47 mver = mrow.GetVersion()
48 mselected = False
49
50 metaproj = self.get_iconfig().GetMetaProject(mpname)
51 if metaproj and metaproj.GetVersion() == mrow.GetVersion():
52 mselected = not mselected
53
54 metadict = [ mid, mpname, mver, mselected ]
55
56 projdict = {}
57 for prow in db.GetProjects(mid):
58 pid = prow.GetId()
59 pname = prow.GetName()
60 ver = prow.GetVersion()
61 selected = False
62
63 if mselected:
64 proj = self.get_iconfig().GetProject(pname)
65 if proj and proj.GetVersion() == prow.GetVersion():
66 selected = not selected
67 self.pdict[proj.GetName()] = selected
68
69 projdict[pid]=[pid,pname,ver[0],ver[1],ver[2],selected]
70 self.rows[mid] = {
71 'metaproject':metadict,'projects':projdict
72 }
73 if not db.cached: db.disconnect();
74
75 self.sw = gtk.ScrolledWindow()
76
77
78 self.tv = gtk.TreeView(self.tree_store)
79 self.pack_start(self.sw)
80 self.sw.add(self.tv)
81 self.tv.column = [None]*7
82 self.tv.column[0] = gtk.TreeViewColumn('DbID')
83 self.tv.column[1] = gtk.TreeViewColumn('Meta-Project')
84 self.tv.column[2] = gtk.TreeViewColumn('version')
85 self.tv.column[3] = gtk.TreeViewColumn('Selected')
86 self.tv.cell = [None]*7
87
88 self.selection = self.tv.get_selection()
89 self.selection.connect('changed', self.on_selection_changed)
90
91 for i in range(3):
92 self.tv.cell[i] = gtk.CellRendererText()
93 self.tv.append_column(self.tv.column[i])
94 self.tv.column[i].set_sort_column_id(i)
95 self.tv.column[i].pack_start(self.tv.cell[i], True)
96 self.tv.column[i].set_attributes(self.tv.cell[i], text=i)
97
98 self.tv.cell[3] = gtk.CellRendererToggle()
99 self.tv.cell[3].set_property('activatable', True)
100 self.tv.cell[3].connect( 'toggled', self.row_toggled)
101 self.tv.append_column(self.tv.column[3])
102 self.tv.column[3].pack_start(self.tv.cell[3], True)
103 self.tv.column[3].add_attribute( self.tv.cell[3], "active", 3)
104
105 self.show_all()
106
107
108 for m in self.rows.keys():
109 metaproject = self.rows[m]['metaproject']
110 projects = self.rows[m]['projects']
111 parent = self.tree_store.append( None, metaproject )
112
113 - def set_text_buffer(self,textbuffer):
114 self.textbuffer = textbuffer
115
116 - def write_text_buffer(self,text):
117 if self.textbuffer:
118 self.textbuffer.set_text(text)
119 else:
120 print text
121
123 model, iter = selection.get_selected()
124 id = model.get_value(iter, 0)
125 name = model.get_value(iter, 1)
126 version = model.get_value(iter, 2)
127 logger.info("selected(%d): %s.%s" % (id,name,version))
128
138
139
213
214
215 - def do_change(self, model, path, iter,connect=True):
216 if not self.db.cached and \
217 not self.db.connect():
218 return
219
220 if model[path][3]:
221 self.getmetaproject(model,path)
222 self.madd[ model[path][1] ] = True
223
224 else:
225 self.mdelete[ model[path][1] ] = True
226 return
227
229 self.madd = {}
230 self.mdelete = {}
231 model = self.tree_store
232 model.foreach(self.do_change)
233
234
235 for mp in self.mdelete.keys():
236 if not self.madd.has_key(mp):
237 self.get_iconfig().RemoveMetaProject(mp)
238 return
239
241 """
242 Toggle parent (metaproject) and children (individual projects)
243 """
244 path = model.get_path(iter)
245 model[path][3] = bval
246
247 chiter = model.iter_children(iter)
248 while chiter:
249 cpath = model.get_path(chiter)
250 project_name = model[cpath][1]
251 if self.pdict.has_key(model[cpath][1]) and self.pdict[model[cpath][1]]:
252 model[cpath][3] = bval
253 chiter = model.iter_next(chiter)
254
256 """
257 Sets the toggled state on the toggle button to true or false.
258 """
259 model = self.tree_store
260 iter = model.get_iter(path)
261 value_to_set = not model[path][3]
262 if model.iter_has_child(iter):
263
264 checkproj=len(self.get_iconfig().GetProjects())
265 self.toggle_group(model,iter,value_to_set,checkproj)
266 model[path][3] = value_to_set
267 self.pdict[model[path][1]] = value_to_set
268