1
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
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
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
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