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

Source Code for Module iceprod.client.gtk.GtkDAGRel

  1  #!/bin/env python 
  2  #   copyright  (c) 2005 
  3  #   the icecube collaboration 
  4  #   $Id: $ 
  5  # 
  6  #   @version $Revision: $ 
  7  #   @date $Date: $ 
  8  #   @author Juan Carlos Diaz Velez <juancarlos@icecube.wisc.edu> 
  9  #       @brief icetray connections frame for GtkIcetraConfig application 
 10  ######################################################################### 
 11  import pygtk 
 12  pygtk.require('2.0') 
 13  import gtk 
 14  from iceprod.core.dataclasses import * 
 15  from GtkIPModule import * 
 16  import logging 
 17   
 18  logger = logging.getLogger('GtkDAGRel') 
 19   
20 -class GtkDAGRel(GtkIPModule):
21 22 TARGETS = [ ('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0), ] 23
24 - def on_selection_changed(self,selection):
25 try: 26 model, iter = selection.get_selected() 27 src = model.get_value(iter, 0) 28 outbox = model.get_value(iter, 1) 29 dest = model.get_value(iter, 2) 30 inbox = model.get_value(iter, 3) 31 logger.debug("selected connection: %s@%s => %s@%s" % (outbox,src,inbox,dest)) 32 33 self.tips.disable() 34 src_class = self.iconfig.GetModule(src).GetClass() 35 dest_class = self.iconfig.GetModule(dest).GetClass() 36 self.tips.set_tip(self.tv, "%s <> %s" % (src_class,dest_class)) 37 self.tips.enable() 38 except: 39 None
40 41
42 - def delete_event(self, widget, event, data=None):
43 gtk.main_quit() 44 return False
45
46 - def delete_connection(self, b):
47 sel = self.tv.get_selection() 48 model, iter = sel.get_selected() 49 path = model.get_path(iter) 50 connection_number = model.get_value(iter, 4) 51 #self.iconfig.RemoveConnection(int(connection_number)) 52 self.showconnections()
53
54 - def add_connection(self, b):
55 row = [] 56 #self.iconfig.AddConnection(con) 57 self.showconnections() 58 GtkEditConnection(self,self.iconfig,con)
59 60
61 - def __init__(self,iconfig):
62 self.iconfig = iconfig 63 gtk.VBox.__init__(self) 64 65 self.tips = gtk.Tooltips() 66 self.tips.enable() 67 68 # create a liststore with three int columns 69 self.liststore = gtk.ListStore(str,str,int) 70 71 self.sw = gtk.ScrolledWindow() 72 73 # Set sort column 74 self.tv = gtk.TreeView(self.liststore) 75 self.pack_start(self.sw) 76 self.b0 = gtk.Button('Add Connection') 77 self.b1 = gtk.Button('Delete Connection') 78 self.b0.connect('clicked', self.add_connection) 79 self.b1.connect('clicked', self.delete_connection) 80 81 self.hbbox = gtk.HButtonBox() 82 self.hbbox.pack_start(self.b0, False, False, 1) 83 self.hbbox.pack_start(self.b1, False, False, 1) 84 85 self.pack_start(self.hbbox, False) 86 self.sw.add(self.tv) 87 88 self.tv.column = [None]*3 89 self.tv.column[0] = gtk.TreeViewColumn('From') 90 self.tv.column[1] = gtk.TreeViewColumn('To') 91 92 # self.tv.connect('row-activated', self.edit_connection) 93 94 self.tv.cell = [None]*3 95 96 self.selection = self.tv.get_selection() 97 self.selection.connect('changed', self.on_selection_changed) 98 # ------- 99 # # Allow enable drag and drop of rows including row move 100 # self.tv.enable_model_drag_source( gtk.gdk.BUTTON1_MASK, 101 # self.TARGETS, 102 # gtk.gdk.ACTION_DEFAULT| 103 # gtk.gdk.ACTION_MOVE) 104 # self.tv.enable_model_drag_dest(self.TARGETS, 105 # gtk.gdk.ACTION_DEFAULT) 106 # 107 # self.tv.connect("drag_data_get", self.drag_data_get_data) 108 # self.tv.connect("drag_data_received", self.drag_data_received_data) 109 # ------- 110 111 112 self.tv.cell[0] = gtk.CellRendererText() 113 self.tv.cell[0].set_property( 'editable', False) 114 self.tv.append_column(self.tv.column[0]) 115 self.tv.column[0].set_sort_column_id(0) 116 self.tv.column[0].pack_start(self.tv.cell[0], True) 117 self.tv.column[0].set_attributes(self.tv.cell[0], text=0) 118 119 self.tv.cell[1] = gtk.CellRendererText() 120 self.tv.cell[1].set_property( 'editable', True) 121 self.tv.cell[1].connect( 'edited', self.cell_edit,self.liststore,1) 122 self.tv.append_column(self.tv.column[1]) 123 self.tv.column[1].pack_start(self.tv.cell[1], True) 124 self.tv.column[1].set_attributes(self.tv.cell[1], text=1) 125 126 self.showconnections() 127 self.show_all()
128 129
130 - def reload(self,steering):
131 self.iconfig = steering 132 self.showconnections()
133
134 - def showconnections(self):
135 self.liststore.clear() 136 137 138 for t in self.iconfig.GetTaskDefinitions().values(): 139 c = 0; 140 for child in t.GetChildren(): 141 row = [] 142 row.append(t.GetName()) 143 row.append(child) 144 row.append(c) 145 self.liststore.append(row) 146 c += 1
147 148
149 - def cell_edit( self, cell, path, new_text,model,col ):
150 """ 151 Canges the value of the connection 152 """ 153 logger.debug("Change '%s' to '%s'" % (model[path][col], new_text)) 154 row = model[path] 155 src = row[1] 156 child = row[2] 157 srctsk = self.iconfig.GetTaskDefinitions()[src] 158 srctsk.GetChildren()[child] = new_text
159 160
161 - def drag_data_get_data(self, treeview, context, selection, target_id, etime):
162 treeselection = treeview.get_selection() 163 model, iter = treeselection.get_selected() 164 data = str(model.get_value(iter, 4)) 165 selection.set(selection.target, 8, data)
166
167 - def drag_data_received_data(self, treeview, context, x, y, selection, 168 info, etime):
169 model = treeview.get_model() 170 data = selection.data 171 drop_info = treeview.get_dest_row_at_pos(x, y) 172 if drop_info: 173 path, position = drop_info 174 iter = model.get_iter(path) 175 176 row = [] 177 old_row = int(data) 178 new_row = int(model.get_value(iter, 4)) 179 conn = self.iconfig.RemoveConnection(old_row) 180 self.iconfig.InsertConnection(new_row,conn) 181 row.append(conn.GetOutbox().GetModule()) 182 row.append(conn.GetOutbox().GetBoxName()) 183 row.append(conn.GetInbox().GetModule()) 184 row.append(conn.GetInbox().GetBoxName()) 185 186 if (position == gtk.TREE_VIEW_DROP_BEFORE 187 or position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE): 188 row.append( new_row ) 189 model.insert_before(iter, row) 190 else: 191 row.append( new_row + 1) 192 model.insert_after(iter, row) 193 else: 194 model.append([data]) 195 if context.action == gtk.gdk.ACTION_MOVE: 196 context.finish(True, True, etime) 197 return
198