| Home | Trees | Indices | Help |
|---|
|
|
1 #!/bin/env python
2 # copyright (c) 2005
3 # the icecube collaboration
4 # $Id: $
5 #
6 # @version $Revision: $
7 # @date $Date: $
8 # @author Juan Carlos Diaz Velez <juancarlos@icecube.wisc.edu>
9 # @brief Project display frame for GtkIcetraConfig application
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
27
28 self.iconfig = iconfig
29 self.pdb = pdb
30 self.gtkmod = gtkmod
31 self.printer = None
32 self.display()
33
34 # setup the main window
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 # Get the model and attach it to the view
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 # Add our view into the main window
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
60
63
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
102 """
103 Add Module
104 """
105 sel = tv.get_selection()
106 sel.select_path(path)
107 model, iter = sel.get_selected()
108 id = model.get_value(iter, 0)
109 name = model.get_value(iter, 1)
110 cname = model.get_value(iter, 2)
111 proj_name = model.get_value(iter, 3)
112
113 newmod = Module()
114 newmod.SetName(name)
115 newmod.SetClass(cname)
116
117 if not self.pdb.cached and not self.pdb.connect(): return
118 proj = self.iconfig.GetProject(proj_name)
119 if not proj:
120 for mp in self.iconfig.GetMetaProjectList():
121 for p in self.pdb.GetProjectsMM(newmod,mp):
122 mp.AddProject(p.GetName(),p)
123 if p.GetName() == proj_name: proj = p
124 if not proj:
125 raise Exception, "Could not find project for '%s'"% newmod.GetName()
126 newmod.AddProject(proj_name,proj)
127
128 parameters = self.pdb.GetParameters(int(id))
129 for p in parameters:
130 param = Parameter()
131 param.SetName(p.GetName())
132 param.SetType(p.GetType())
133 param.SetDescription(p.GetDescription())
134 param.SetValue(p.GetValue())
135 newmod.AddParameter(param)
136
137 self.iconfig.AddModule(newmod)
138 self.gtkmod.showmodules()
139 self.root.destroy()
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
149 """
150 Add Module
151 """
152 if model[path][4]:
153 id = model[path][0]
154 name = model[path][1]
155 cname = model[path][2]
156
157 proj_name = model[path][3]
158 proj = self.iconfig.GetProject(proj_name)
159
160 newmod = Module()
161 newmod.SetName(name)
162 newmod.SetClass(cname)
163
164 proj = self.iconfig.GetProject(proj_name)
165 if not proj:
166 for mp in self.iconfig.GetMetaProjectList():
167 for p in self.pdb.GetProjectsMM(newmod,mp):
168 mp.AddProject(p.GetName(),p)
169 if p.GetName() == proj_name: proj = p
170
171 if not proj: # search all projects in mp to match name
172 for p in self.pdb.GetProjects(mp.GetId()):
173 if p.GetName() == proj_name:
174 mp.AddProject(p.GetName(),p)
175 proj = p
176 break
177 if not proj:
178 raise Exception, "Could not find project for '%s'"% newmod.GetName()
179 newmod.AddProject(proj_name,proj)
180
181 parameters = self.pdb.GetParameters(int(id))
182 for p in parameters:
183 param = Parameter()
184 param.SetName(p.GetName())
185 param.SetType(p.GetType())
186 param.SetDescription(p.GetDescription())
187 param.SetValue(p.GetValue())
188 newmod.AddParameter(param)
189
190 self.iconfig.AddModule(newmod)
191 self.gtkmod.showmodules()
192 self.root.destroy()
193
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 # setup the text cell renderer and allows these
234 # cells to be edited.
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
| Home | Trees | Indices | Help |
|---|
| Generated by Epydoc 3.0.1 on Fri Jan 4 16:45:19 2013 | http://epydoc.sourceforge.net |