1
2
3 """
4 Gtk from for displaying and configuring IceTray 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 GtkModuleList import GtkModuleList
19 from iceprod.core.dataclasses import *
20 from GtkIPModule import *
21 import logging
22
23 logger = logging.getLogger('GtkModules')
24
26
27 TARGETS = [ ('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0), ]
28
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.RemoveModule(name)
50 self.showmodules()
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 mname = row[0]
73 mod = self.iconfig.GetModule(mname)
74 if mod:
75 self.iconfig.RemoveModule(mod.GetName())
76 mod.SetName(u'%s' % new_text)
77 self.iconfig.AddModule(mod)
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 self.dragndrop = False
86
87
88 self.liststore = gtk.ListStore(str,str,str)
89 self.sw = gtk.ScrolledWindow()
90 self.tv = gtk.TreeView(self.liststore)
91 self.pack_start(self.sw)
92
93 self.b0 = gtk.Button('Add Module',stock=gtk.STOCK_ADD)
94 self.b0.connect('clicked', self.add_module)
95 self.b1 = gtk.Button('Delete Module',stock=gtk.STOCK_DELETE)
96 self.b1.connect('clicked', self.delete_module)
97
98 self.hbbox = gtk.HButtonBox()
99 self.hbbox.pack_start(self.b0, False, False, 1)
100 self.hbbox.pack_start(self.b1, False, False, 1)
101
102 self.tv.connect('row-activated', self.configure_module)
103 self.pack_start(self.hbbox, False)
104 self.sw.add(self.tv)
105
106 self.tv.column = [None]*6
107 self.tv.column[0] = gtk.TreeViewColumn('name')
108 self.tv.column[1] = gtk.TreeViewColumn('class')
109 self.tv.column[2] = gtk.TreeViewColumn('project')
110
111 self.tv.cell = [None]*6
112
113 self.selection = self.tv.get_selection()
114 self.selection.connect('changed', self.on_selection_changed)
115
116 for i in range(3):
117 self.tv.cell[i] = gtk.CellRendererText()
118 self.tv.append_column(self.tv.column[i])
119 self.tv.column[i].set_sort_column_id(i)
120 self.tv.column[i].pack_start(self.tv.cell[i], True)
121 self.tv.column[i].set_attributes(self.tv.cell[i], text=i)
122
123 self.tv.cell[0].set_property( 'editable', True)
124 self.tv.cell[0].connect( 'edited', self.col_edited,self.liststore)
125
126 self.showmodules()
127 self.show_all()
128
130 self.dragndrop = value
131 if self.dragndrop:
132
133 self.tv.enable_model_drag_source( gtk.gdk.BUTTON1_MASK,
134 self.TARGETS,
135 gtk.gdk.ACTION_DEFAULT|
136 gtk.gdk.ACTION_MOVE)
137
138 self.tv.enable_model_drag_dest(self.TARGETS,
139 gtk.gdk.ACTION_DEFAULT)
140
141 self.tv.connect("drag_data_get", self.drag_data_get_data)
142 self.tv.connect("drag_data_received", self.drag_data_received_data)
143
144
146 if not self.dragndrop: return
147 treeselection = treeview.get_selection()
148 model, iter = treeselection.get_selected()
149 data = model.get_value(iter, 0)
150 selection.set(selection.target, 8, data)
151
154 if not self.dragndrop: return
155 model = treeview.get_model()
156 data = selection.data
157 drop_info = treeview.get_dest_row_at_pos(x, y)
158 if drop_info:
159 path, position = drop_info
160 iter = model.get_iter(path)
161
162 row = []
163 module = self.iconfig.RemoveModule(data)
164 row.append(module.GetName())
165 row.append(module.GetClass())
166 row.append(','.join([p.GetName() for p in module.GetProjectList()]))
167 if (position == gtk.TREE_VIEW_DROP_BEFORE
168 or position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE):
169 model.insert_before(iter, row)
170 self.iconfig.InsertModule(path[0],module)
171 else:
172 model.insert_after(iter, row)
173 self.iconfig.InsertModule(path[0]+1,module)
174 if context.action == gtk.gdk.ACTION_MOVE:
175 context.finish(True, True, long(0))
176 self.reload(self.iconfig)
177 return
178
180 self.printer = printer
181
183 if self.printer:
184 self.printer(txt)
185 else:
186 print txt
187
191
201