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

Source Code for Module iceprod.client.gtk.GtkIceProdPre

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