Package iceprod :: Package client :: Package gtk :: Module GtkIceProdPostList
[hide private]
[frames] | no frames]

Source Code for Module iceprod.client.gtk.GtkIceProdPostList

  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('GtkIceProdPostList') 
 18   
19 -class GtkIceProdPostList:
20 """ The GUI class is the controller for our application """ 21 22 fooname = 'foo' 23 fooclass = 'FOOBAR' 24 fooproject = 'iceprod.modules' 25
26 - def __init__(self,iconfig,pdb,gtkmod,title="Available IceProdPost Modules"):
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
58 - def SetPrinter(self,printer):
59 self.printer = printer
60
61 - def SetParent(self,parent):
62 self.parent = parent
63
64 - def Print(self,txt):
65 if self.printer: 66 self.printer(txt) 67 else: 68 print txt
69 70
71 - def display(self):
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 modules = self.pdb.GetIceProdModules() 79 for m in modules: 80 if not self.iconfig.GetIceProdPost(m.GetName()): 81 row = [m.GetId(),m.GetName(), m.GetClass(),'iceprod.modules',False] 82 logger.debug('|'.join(map(str,row))) 83 self.store.append(None, row )
84
85 - def add_module(self, tv, path, viewcol):
86 """ 87 Add IceProdPost 88 """ 89 sel = tv.get_selection() 90 sel.select_path(path) 91 model, iter = sel.get_selected() 92 id = model.get_value(iter, 0) 93 name = model.get_value(iter, 1) 94 cname = model.get_value(iter, 2) 95 proj_name = "iceprod.modules" 96 97 newmod = IceProdPost() 98 newmod.SetName(name) 99 newmod.SetClass(cname) 100 101 if not self.pdb.cached and not self.pdb.connect(): return 102 parameters = self.pdb.GetParameters(int(id)) 103 for p in parameters: 104 param = Parameter() 105 param.SetName(p.GetName()) 106 param.SetType(p.GetType()) 107 param.SetDescription(p.GetDescription()) 108 param.SetValue(p.GetValue()) 109 newmod.AddParameter(param) 110 111 self.iconfig.AddIceProdPost(newmod) 112 self.gtkmod.showmodules() 113 self.root.destroy()
114
115 - def commit_changes(self, widget, data=None):
116 model = self.store 117 self.mdict = {} 118 if not self.pdb.cached and not self.pdb.connect(): return 119 model.foreach(self.do_change) 120 return
121
122 - def do_change(self, model, path, iter,connect=True):
123 """ 124 Add IceProdPost 125 """ 126 if model[path][4]: 127 id = model[path][0] 128 name = model[path][1] 129 cname = model[path][2] 130 131 proj_name = "iceprod.modules" 132 proj = self.iconfig.GetProject(proj_name) 133 134 newmod = IceProdPost() 135 newmod.SetName(name) 136 newmod.SetClass(cname) 137 138 parameters = self.pdb.GetParameters(int(id)) 139 for p in parameters: 140 param = Parameter() 141 param.SetName(p.GetName()) 142 param.SetType(p.GetType()) 143 param.SetDescription(p.GetDescription()) 144 param.SetValue(p.GetValue()) 145 newmod.AddParameter(param) 146 147 self.iconfig.AddIceProdPost(newmod) 148 self.gtkmod.showmodules() 149 self.root.destroy()
150
151 - def col_edited( self, cell, path, new_text, model , column):
152 """ 153 Canges the name of the module 154 @todo: add type checking for input values 155 @todo: add descriptions 156 """ 157 row = model[path] 158 row[column] = u'%s' % new_text
159 160
161 - def row_toggled( self,cell, path):
162 """ 163 Sets the toggled state on the toggle button to true or false. 164 """ 165 model = self.store 166 model[path][4] = not model[path][4] 167 168 if not model[path][4]: 169 self.renderer[1].set_property('editable', False) 170 self.renderer[2].set_property('editable', False) 171 self.renderer[3].set_property('editable', False) 172 return 173 174 if model[path][3] == self.fooproject: 175 self.renderer[3].set_property('editable', True) 176 self.renderer[3].connect( 'edited', self.col_edited,self.store,3) 177 if model[path][2] == self.fooclass: 178 self.renderer[2].set_property('editable', True) 179 self.renderer[2].connect( 'edited', self.col_edited,self.store,2) 180 if model[path][1] == self.fooname: 181 self.renderer[1].set_property('editable', True) 182 self.renderer[1].connect( 'edited', self.col_edited,self.store,1)
183 184
185 - def make_view( self, model ):
186 """ Form a view for the Tree Model """ 187 self.view = gtk.TreeView( model ) 188 self.view.connect('row-activated', self.add_module) 189 190 # setup the text cell renderer and allows these 191 # cells to be edited. 192 self.renderer = [None]*5 193 for i in range(4): 194 self.renderer[i] = gtk.CellRendererText() 195 self.renderer[4] = gtk.CellRendererToggle() 196 self.renderer[4].set_property('activatable', True) 197 self.renderer[4].connect( 'toggled', self.row_toggled) 198 199 self.column = [None]*5 200 self.column[0] = gtk.TreeViewColumn("DbID",self.renderer[0], text=0) 201 self.column[0].set_sort_column_id(0) 202 self.column[1] = gtk.TreeViewColumn("Default Name",self.renderer[1], text=1) 203 self.column[1].set_sort_column_id(1) 204 self.column[2] = gtk.TreeViewColumn("Class",self.renderer[2], text=2) 205 self.column[2].set_sort_column_id(2) 206 self.column[3] = gtk.TreeViewColumn("Project",self.renderer[3],text=3 ) 207 self.column[4] = gtk.TreeViewColumn('Selected') 208 self.column[4].pack_start(self.renderer[4], True) 209 self.column[4].add_attribute( self.renderer[4], "active", 4) 210 211 for i in range(5): 212 self.view.append_column( self.column[i] ) 213 return self.view
214