1
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
27
28 TARGETS = [ ('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0), ]
29
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
41
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
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
81 self.iconfig = iconfig
82 self.pdb = pdb
83 gtk.VBox.__init__(self)
84 self.printer = None
85
86
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
139
140
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
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
171 self.reload(self.iconfig)
172 return
173
175 self.printer = printer
176
178 if self.printer:
179 self.printer(txt)
180 else:
181 print txt
182
186
196