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

Source Code for Module iceprod.client.GtkIceProdPost

  1  #!/bin/env python 
  2  # 
  3  """ 
  4    Gtk from for displaying and configuring IceProdPost 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 GtkIceProdPostList import GtkIceProdPostList  
 19  from iceprod.core.dataclasses import * 
 20  from GtkIPModule import * 
 21  import logging 
 22   
 23  logger = logging.getLogger('GtkIceProdPost') 
 24   
25 -class GtkIceProdPost(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 = GtkIceProdPostList(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.RemoveIceProdPost(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.GetIceProdPost(name) 58 GtkParameterList(module)
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.GetIceProdPost(mname) 70 if mod: 71 self.iconfig.RemoveIceProdPost(mod.GetName()) 72 mod.SetName(u'%s' % new_text) 73 self.iconfig.AddIceProdPost(mod) 74 row[0] = u'%s' % new_text
75
76 - def __init__(self,iconfig,pdb):
77 self.iconfig = iconfig 78 self.pdb = pdb 79 gtk.VBox.__init__(self) 80 self.printer = None 81 82 # create a liststore with three int columns 83 self.liststore = gtk.ListStore(str,str) 84 self.sw = gtk.ScrolledWindow() 85 self.tv = gtk.TreeView(self.liststore) 86 self.pack_start(self.sw) 87 88 self.b0 = gtk.Button('Add IceProdPost',stock=gtk.STOCK_ADD) 89 self.b0.connect('clicked', self.add_module) 90 self.b1 = gtk.Button('Delete IceProdPost',stock=gtk.STOCK_DELETE) 91 self.b1.connect('clicked', self.delete_module) 92 93 self.hbbox = gtk.HButtonBox() 94 self.hbbox.pack_start(self.b0, False, False, 1) 95 self.hbbox.pack_start(self.b1, False, False, 1) 96 97 self.tv.connect('row-activated', self.configure_module) 98 self.pack_start(self.hbbox, False) 99 self.sw.add(self.tv) 100 101 self.tv.column = [None]*6 102 self.tv.column[0] = gtk.TreeViewColumn('name') 103 self.tv.column[1] = gtk.TreeViewColumn('class') 104 105 self.tv.cell = [None]*6 106 107 self.selection = self.tv.get_selection() 108 self.selection.connect('changed', self.on_selection_changed) 109 110 for i in range(2): 111 self.tv.cell[i] = gtk.CellRendererText() 112 self.tv.append_column(self.tv.column[i]) 113 self.tv.column[i].set_sort_column_id(i) 114 self.tv.column[i].pack_start(self.tv.cell[i], True) 115 self.tv.column[i].set_attributes(self.tv.cell[i], text=i) 116 117 self.tv.cell[0].set_property( 'editable', True) 118 self.tv.cell[0].connect( 'edited', self.col_edited,self.liststore) 119 120 # ------- 121 # Allow enable drag and drop of rows including row move 122 self.tv.enable_model_drag_source( gtk.gdk.BUTTON1_MASK, 123 self.TARGETS, 124 gtk.gdk.ACTION_DEFAULT| 125 gtk.gdk.ACTION_MOVE) 126 self.tv.enable_model_drag_dest(self.TARGETS, 127 gtk.gdk.ACTION_DEFAULT) 128 129 self.tv.connect("drag_data_get", self.drag_data_get_data) 130 self.tv.connect("drag_data_received", self.drag_data_received_data) 131 # ------- 132 self.showmodules() 133 self.show_all()
134
135 - def drag_data_get_data(self, treeview, context, selection, target_id, etime):
136 treeselection = treeview.get_selection() 137 model, iter = treeselection.get_selected() 138 data = model.get_value(iter, 0) 139 selection.set(selection.target, 8, data)
140
141 - def drag_data_received_data(self, treeview, context, x, y, selection, 142 info, etime):
143 model = treeview.get_model() 144 data = selection.data 145 drop_info = treeview.get_dest_row_at_pos(x, y) 146 if drop_info: 147 path, position = drop_info 148 iter = model.get_iter(path) 149 150 row = [] 151 module = self.iconfig.RemoveIceProdPost(data) 152 row.append(module.GetName()) 153 row.append(module.GetClass()) 154 if (position == gtk.TREE_VIEW_DROP_BEFORE 155 or position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE): 156 model.insert_before(iter, row) 157 self.iconfig.InsertIceProdPost(path[0],module) 158 else: 159 model.insert_after(iter, row) 160 self.iconfig.InsertIceProdPost(path[0]+1,module) 161 if context.action == gtk.gdk.ACTION_MOVE: 162 context.finish(True, True, etime) 163 self.reload(self.iconfig) 164 return
165
166 - def SetPrinter(self,printer):
167 self.printer = printer
168
169 - def Print(self,txt):
170 if self.printer: 171 self.printer(txt) 172 else: 173 print txt
174
175 - def reload(self,icetray):
176 self.iconfig = icetray 177 self.showmodules()
178
179 - def showmodules(self):
180 self.liststore.clear() 181 modules = self.iconfig.GetIceProdPosts() 182 for m in modules: 183 row = [] 184 row.append(m.GetName()) 185 row.append(m.GetClass()) 186 i0 = self.liststore.append(row)
187