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

Source Code for Module iceprod.client.GtkServices

  1  #!/bin/env python 
  2   
  3   
  4  """ 
  5    Gtk from for displaying and configuring IceTray Services  
  6    in GtkIcetraConfig application 
  7   
  8    copyright  (c) 2005 the icecube collaboration 
  9   
 10    @version: $Revision: $ 
 11    @date: $Date:  $ 
 12    @author: Juan Carlos Diaz Velez <juancarlos@icecube.wisc.edu> 
 13  """ 
 14   
 15  import pygtk 
 16  pygtk.require('2.0') 
 17  import gtk 
 18  from GtkParameterList import GtkParameterList 
 19  from GtkServiceList import GtkServiceList  
 20  from iceprod.core.dataclasses import * 
 21  from GtkIPModule import * 
 22  import logging 
 23   
 24  logger = logging.getLogger('GtkServices') 
 25   
26 -class GtkServices(GtkIPModule):
27 28 TARGETS = [ ('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0), ] 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_service(self, b):
39 self.mlist = GtkServiceList(self.iconfig,self.pdb,self) 40 self.mlist.SetPrinter(self.printer)
41
42 - def delete_service(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.RemoveService(name) 50 self.showservices() 51 logger.debug("deleted: %s %s %s" % (name,cname,dep))
52
53 - def configure_service(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 service = self.iconfig.GetService(name) 62 GtkParameterList(service)
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 sname = row[0] 73 serv = self.iconfig.GetService(sname) 74 if serv: 75 self.iconfig.RemoveService(serv.GetName()) 76 serv.SetName(u'%s' % new_text) 77 self.iconfig.AddService(serv) 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 86 # create a liststore with three int columns 87 self.liststore = gtk.ListStore(str,str,str) 88 self.sw = gtk.ScrolledWindow() 89 self.tv = gtk.TreeView(self.liststore) 90 self.pack_start(self.sw) 91 92 self.b0 = gtk.Button('Add Service',stock=gtk.STOCK_ADD) 93 self.b0.connect('clicked', self.add_service) 94 self.b1 = gtk.Button('Delete Service',stock=gtk.STOCK_DELETE) 95 self.b1.connect('clicked', self.delete_service) 96 97 self.hbbox = gtk.HButtonBox() 98 self.hbbox.pack_start(self.b0, False, False, 1) 99 self.hbbox.pack_start(self.b1, False, False, 1) 100 101 self.tv.connect('row-activated', self.configure_service) 102 self.pack_start(self.hbbox, False) 103 self.sw.add(self.tv) 104 105 self.tv.column = [None]*6 106 self.tv.column[0] = gtk.TreeViewColumn('name') 107 self.tv.column[1] = gtk.TreeViewColumn('class') 108 self.tv.column[2] = gtk.TreeViewColumn('project') 109 110 self.tv.cell = [None]*6 111 112 self.selection = self.tv.get_selection() 113 self.selection.connect('changed', self.on_selection_changed) 114 115 for i in range(3): 116 self.tv.cell[i] = gtk.CellRendererText() 117 self.tv.append_column(self.tv.column[i]) 118 self.tv.column[i].set_sort_column_id(i) 119 self.tv.column[i].pack_start(self.tv.cell[i], True) 120 self.tv.column[i].set_attributes(self.tv.cell[i], text=i) 121 122 self.tv.cell[0].set_property( 'editable', True) 123 self.tv.cell[0].connect( 'edited', self.col_edited,self.liststore) 124 125 self.showservices() 126 self.show_all()
127
128 - def set_drag_n_drop(self, value=True):
129 # Allow enable drag and drop of rows including row move 130 self.tv.enable_model_drag_source( gtk.gdk.BUTTON1_MASK, 131 self.TARGETS, 132 gtk.gdk.ACTION_DEFAULT| 133 gtk.gdk.ACTION_MOVE) 134 self.tv.enable_model_drag_dest(self.TARGETS, 135 gtk.gdk.ACTION_DEFAULT) 136 137 self.tv.connect("drag_data_get", self.drag_data_get_data) 138 self.tv.connect("drag_data_received", self.drag_data_received_data)
139 140
141 - def drag_data_get_data(self, treeview, context, selection, target_id, etime):
142 treeselection = treeview.get_selection() 143 model, iter = treeselection.get_selected() 144 data = model.get_value(iter, 0) 145 selection.set(selection.target, 8, data)
146
147 - def drag_data_received_data(self, treeview, context, x, y, selection, 148 info, etime):
149 model = treeview.get_model() 150 data = selection.data 151 drop_info = treeview.get_dest_row_at_pos(x, y) 152 if drop_info: 153 path, position = drop_info 154 iter = model.get_iter(path) 155 156 row = [] 157 service = self.iconfig.RemoveService(data) 158 row.append(service.GetName()) 159 row.append(service.GetClass()) 160 row.append(','.join([p.GetName() for p in service.GetProjectList()])) 161 if (position == gtk.TREE_VIEW_DROP_BEFORE 162 or position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE): 163 model.insert_before(iter, row) 164 self.iconfig.InsertService(path[0],service) 165 else: 166 model.insert_after(iter, row) 167 self.iconfig.InsertService(path[0]+1,service) 168 if context.action == gtk.gdk.ACTION_MOVE: 169 context.finish(True, True, 0) 170 #context.finish(True, True, etime) 171 self.reload(self.iconfig) 172 return
173
174 - def SetPrinter(self,printer):
175 self.printer = printer
176
177 - def Print(self,txt):
178 if self.printer: 179 self.printer(txt) 180 else: 181 print txt
182
183 - def reload(self,icetray):
184 self.iconfig = icetray 185 self.showservices()
186
187 - def showservices(self):
188 self.liststore.clear() 189 services = self.iconfig.GetServices() 190 for s in services: 191 row = [] 192 row.append(s.GetName()) 193 row.append(s.GetClass()) 194 row.append(','.join([p.GetName() for p in s.GetProjectList()])) 195 i0 = self.liststore.append(row)
196