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

Source Code for Module iceprod.client.GtkModules

  1  #!/bin/env python 
  2  # 
  3  """ 
  4    Gtk from for displaying and configuring IceTray Modules in  
  5    GtkIcetraConfig application 
  6   
  7    copyright  (c) 2005 the icecube collaboration 
  8   
  9    @version: $Revision: $ 
 10    @date: $Date:  $ 
 11    @author: Juan Carlos Diaz Velez <juancarlos@icecube.wisc.edu> 
 12  """ 
 13   
 14  import pygtk 
 15  pygtk.require('2.0') 
 16  import gtk 
 17  from GtkParameterList import GtkParameterList 
 18  from GtkModuleList import GtkModuleList  
 19  from iceprod.core.dataclasses import * 
 20  from GtkIPModule import * 
 21  import logging 
 22   
 23  logger = logging.getLogger('GtkModules') 
 24   
25 -class GtkModules(GtkIPModule):
26 27 TARGETS = [ ('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0), ] 28 29
30 - def on_selection_changed(self,selection):
31 model, iter = selection.get_selected() 32 if iter: 33 name = model.get_value(iter, 0) 34 cname = model.get_value(iter, 1) 35 dep = model.get_value(iter, 2) 36 logger.debug("selected: %s %s %s" % (name,cname,dep))
37
38 - def add_module(self, b):
39 self.mlist = GtkModuleList(self.iconfig,self.pdb,self) 40 self.mlist.SetPrinter(self.printer)
41
42 - def delete_module(self, b):
43 sel = self.tv.get_selection() 44 model, iter = sel.get_selected() 45 name = model.get_value(iter, 0) 46 cname = model.get_value(iter, 1) 47 dep = model.get_value(iter, 2) 48 path = model.get_path(iter) 49 self.iconfig.RemoveModule(name) 50 self.showmodules() 51 logger.debug("deleted: %s %s %s" % (name,cname,dep))
52
53 - def configure_module(self, tv, path, viewcol):
54 sel = self.tv.get_selection() 55 sel.select_path(path) 56 model, iter = sel.get_selected() 57 name = model.get_value(iter, 0) 58 cname = model.get_value(iter, 1) 59 dep = model.get_value(iter, 2) 60 logger.debug("clicked on: %s %s %s" % (name,cname,dep)) 61 module = self.iconfig.GetModule(name) 62 GtkParameterList(module)
63
64 - def col_edited( self, cell, path, new_text, model ):
65 """ 66 Canges the name of the module 67 @todo: add type checking for input values 68 @todo: add descriptions 69 """ 70 logger.debug("Change '%s' to '%s'" % (model[path][0], new_text)) 71 row = model[path] 72 mname = row[0] 73 mod = self.iconfig.GetModule(mname) 74 if mod: 75 self.iconfig.RemoveModule(mod.GetName()) 76 mod.SetName(u'%s' % new_text) 77 self.iconfig.AddModule(mod) 78 row[0] = u'%s' % new_text
79
80 - def __init__(self,iconfig,pdb):
81 self.iconfig = iconfig 82 self.pdb = pdb 83 gtk.VBox.__init__(self) 84 self.printer = None 85 self.dragndrop = False 86 87 # create a liststore with three int columns 88 self.liststore = gtk.ListStore(str,str,str) 89 self.sw = gtk.ScrolledWindow() 90 self.tv = gtk.TreeView(self.liststore) 91 self.pack_start(self.sw) 92 93 self.b0 = gtk.Button('Add Module',stock=gtk.STOCK_ADD) 94 self.b0.connect('clicked', self.add_module) 95 self.b1 = gtk.Button('Delete Module',stock=gtk.STOCK_DELETE) 96 self.b1.connect('clicked', self.delete_module) 97 98 self.hbbox = gtk.HButtonBox() 99 self.hbbox.pack_start(self.b0, False, False, 1) 100 self.hbbox.pack_start(self.b1, False, False, 1) 101 102 self.tv.connect('row-activated', self.configure_module) 103 self.pack_start(self.hbbox, False) 104 self.sw.add(self.tv) 105 106 self.tv.column = [None]*6 107 self.tv.column[0] = gtk.TreeViewColumn('name') 108 self.tv.column[1] = gtk.TreeViewColumn('class') 109 self.tv.column[2] = gtk.TreeViewColumn('project') 110 111 self.tv.cell = [None]*6 112 113 self.selection = self.tv.get_selection() 114 self.selection.connect('changed', self.on_selection_changed) 115 116 for i in range(3): 117 self.tv.cell[i] = gtk.CellRendererText() 118 self.tv.append_column(self.tv.column[i]) 119 self.tv.column[i].set_sort_column_id(i) 120 self.tv.column[i].pack_start(self.tv.cell[i], True) 121 self.tv.column[i].set_attributes(self.tv.cell[i], text=i) 122 123 self.tv.cell[0].set_property( 'editable', True) 124 self.tv.cell[0].connect( 'edited', self.col_edited,self.liststore) 125 126 self.showmodules() 127 self.show_all()
128
129 - def SetDragNDrop(self,value):
130 self.dragndrop = value 131 if self.dragndrop: 132 # Allow enable drag and drop of rows including row move 133 self.tv.enable_model_drag_source( gtk.gdk.BUTTON1_MASK, 134 self.TARGETS, 135 gtk.gdk.ACTION_DEFAULT| 136 gtk.gdk.ACTION_MOVE) 137 #gtk.gdk.ACTION_ASK) 138 self.tv.enable_model_drag_dest(self.TARGETS, 139 gtk.gdk.ACTION_DEFAULT) 140 141 self.tv.connect("drag_data_get", self.drag_data_get_data) 142 self.tv.connect("drag_data_received", self.drag_data_received_data) 143 144
145 - def drag_data_get_data(self, treeview, context, selection, target_id, etime):
146 if not self.dragndrop: return 147 treeselection = treeview.get_selection() 148 model, iter = treeselection.get_selected() 149 data = model.get_value(iter, 0) 150 selection.set(selection.target, 8, data)
151
152 - def drag_data_received_data(self, treeview, context, x, y, selection, 153 info, etime):
154 if not self.dragndrop: return 155 model = treeview.get_model() 156 data = selection.data 157 drop_info = treeview.get_dest_row_at_pos(x, y) 158 if drop_info: 159 path, position = drop_info 160 iter = model.get_iter(path) 161 162 row = [] 163 module = self.iconfig.RemoveModule(data) 164 row.append(module.GetName()) 165 row.append(module.GetClass()) 166 row.append(','.join([p.GetName() for p in module.GetProjectList()])) 167 if (position == gtk.TREE_VIEW_DROP_BEFORE 168 or position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE): 169 model.insert_before(iter, row) 170 self.iconfig.InsertModule(path[0],module) 171 else: 172 model.insert_after(iter, row) 173 self.iconfig.InsertModule(path[0]+1,module) 174 if context.action == gtk.gdk.ACTION_MOVE: 175 context.finish(True, True, long(0)) 176 self.reload(self.iconfig) 177 return
178
179 - def SetPrinter(self,printer):
180 self.printer = printer
181
182 - def Print(self,txt):
183 if self.printer: 184 self.printer(txt) 185 else: 186 print txt
187
188 - def reload(self,icetray):
189 self.iconfig = icetray 190 self.showmodules()
191
192 - def showmodules(self):
193 self.liststore.clear() 194 modules = self.iconfig.GetModules() 195 for m in modules: 196 row = [] 197 row.append(m.GetName()) 198 row.append(m.GetClass()) 199 row.append(','.join([p.GetName() for p in m.GetProjectList()])) 200 i0 = self.liststore.append(row)
201