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

Source Code for Module iceprod.client.gtk.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 mod.SetName(u'%s' % new_text) 76 row[0] = u'%s' % new_text
77
78 - def __init__(self,iconfig,pdb):
79 self.iconfig = iconfig 80 self.pdb = pdb 81 gtk.VBox.__init__(self) 82 self.printer = None 83 self.dragndrop = False 84 85 # create a liststore with three int columns 86 self.liststore = gtk.ListStore(str,str,str) 87 self.sw = gtk.ScrolledWindow() 88 self.tv = gtk.TreeView(self.liststore) 89 self.pack_start(self.sw) 90 91 self.b0 = gtk.Button('Add Module',stock=gtk.STOCK_ADD) 92 self.b0.connect('clicked', self.add_module) 93 self.b1 = gtk.Button('Delete Module',stock=gtk.STOCK_DELETE) 94 self.b1.connect('clicked', self.delete_module) 95 96 self.hbbox = gtk.HButtonBox() 97 self.hbbox.pack_start(self.b0, False, False, 1) 98 self.hbbox.pack_start(self.b1, False, False, 1) 99 100 self.tv.connect('row-activated', self.configure_module) 101 self.pack_start(self.hbbox, False) 102 self.sw.add(self.tv) 103 104 self.tv.column = [None]*6 105 self.tv.column[0] = gtk.TreeViewColumn('name') 106 self.tv.column[1] = gtk.TreeViewColumn('class') 107 self.tv.column[2] = gtk.TreeViewColumn('project') 108 109 self.tv.cell = [None]*6 110 111 self.selection = self.tv.get_selection() 112 self.selection.connect('changed', self.on_selection_changed) 113 114 for i in range(3): 115 self.tv.cell[i] = gtk.CellRendererText() 116 self.tv.append_column(self.tv.column[i]) 117 self.tv.column[i].set_sort_column_id(i) 118 self.tv.column[i].pack_start(self.tv.cell[i], True) 119 self.tv.column[i].set_attributes(self.tv.cell[i], text=i) 120 121 self.tv.cell[0].set_property( 'editable', True) 122 self.tv.cell[0].connect( 'edited', self.col_edited,self.liststore) 123 124 self.showmodules() 125 self.show_all()
126
127 - def SetDragNDrop(self,value):
128 self.dragndrop = value 129 if self.dragndrop: 130 # Allow enable drag and drop of rows including row move 131 self.tv.enable_model_drag_source( gtk.gdk.BUTTON1_MASK, 132 self.TARGETS, 133 gtk.gdk.ACTION_DEFAULT| 134 gtk.gdk.ACTION_MOVE) 135 #gtk.gdk.ACTION_ASK) 136 self.tv.enable_model_drag_dest(self.TARGETS, 137 gtk.gdk.ACTION_DEFAULT) 138 139 self.tv.connect("drag_data_get", self.drag_data_get_data) 140 self.tv.connect("drag_data_received", self.drag_data_received_data) 141 142
143 - def drag_data_get_data(self, treeview, context, selection, target_id, etime):
144 if not self.dragndrop: return 145 treeselection = treeview.get_selection() 146 model, iter = treeselection.get_selected() 147 data = model.get_value(iter, 0) 148 selection.set(selection.target, 8, data)
149
150 - def drag_data_received_data(self, treeview, context, x, y, selection, 151 info, etime):
152 if not self.dragndrop: return 153 model = treeview.get_model() 154 data = selection.data 155 drop_info = treeview.get_dest_row_at_pos(x, y) 156 if drop_info: 157 path, position = drop_info 158 iter = model.get_iter(path) 159 160 row = [] 161 module = self.iconfig.RemoveModule(data) 162 row.append(module.GetName()) 163 row.append(module.GetClass()) 164 row.append(','.join([p.GetName() for p in module.GetProjectList()])) 165 if (position == gtk.TREE_VIEW_DROP_BEFORE 166 or position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE): 167 model.insert_before(iter, row) 168 self.iconfig.InsertModule(path[0],module) 169 else: 170 model.insert_after(iter, row) 171 self.iconfig.InsertModule(path[0]+1,module) 172 if context.action == gtk.gdk.ACTION_MOVE: 173 context.finish(True, True, long(0)) 174 self.reload(self.iconfig) 175 return
176
177 - def SetPrinter(self,printer):
178 self.printer = printer
179
180 - def Print(self,txt):
181 if self.printer: 182 self.printer(txt) 183 else: 184 print txt
185
186 - def reload(self,icetray):
187 self.iconfig = icetray 188 self.showmodules()
189
190 - def showmodules(self):
191 self.liststore.clear() 192 modules = self.iconfig.GetModules() 193 for m in modules: 194 row = [] 195 row.append(m.GetName()) 196 row.append(m.GetClass()) 197 row.append(','.join([p.GetName() for p in m.GetProjectList()])) 198 i0 = self.liststore.append(row)
199