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 mod.SetName(u'%s' % new_text)
76 row[0] = u'%s' % new_text
77
79 self.iconfig = iconfig
80 self.pdb = pdb
81 gtk.VBox.__init__(self)
82 self.printer = None
83 self.dragndrop = False
84
85
86 self.liststore = gtk.ListStore(str,str,str)
87 self.sw = gtk.ScrolledWindow()
88 self.tv = gtk.TreeView(self.liststore)
89 self.pack_start(self.sw)
90
91 self.b0 = gtk.Button('Add Module',stock=gtk.STOCK_ADD)
92 self.b0.connect('clicked', self.add_module)
93 self.b1 = gtk.Button('Delete Module',stock=gtk.STOCK_DELETE)
94 self.b1.connect('clicked', self.delete_module)
95
96 self.hbbox = gtk.HButtonBox()
97 self.hbbox.pack_start(self.b0, False, False, 1)
98 self.hbbox.pack_start(self.b1, False, False, 1)
99
100 self.tv.connect('row-activated', self.configure_module)
101 self.pack_start(self.hbbox, False)
102 self.sw.add(self.tv)
103
104 self.tv.column = [None]*6
105 self.tv.column[0] = gtk.TreeViewColumn('name')
106 self.tv.column[1] = gtk.TreeViewColumn('class')
107 self.tv.column[2] = gtk.TreeViewColumn('project')
108
109 self.tv.cell = [None]*6
110
111 self.selection = self.tv.get_selection()
112 self.selection.connect('changed', self.on_selection_changed)
113
114 for i in range(3):
115 self.tv.cell[i] = gtk.CellRendererText()
116 self.tv.append_column(self.tv.column[i])
117 self.tv.column[i].set_sort_column_id(i)
118 self.tv.column[i].pack_start(self.tv.cell[i], True)
119 self.tv.column[i].set_attributes(self.tv.cell[i], text=i)
120
121 self.tv.cell[0].set_property( 'editable', True)
122 self.tv.cell[0].connect( 'edited', self.col_edited,self.liststore)
123
124 self.showmodules()
125 self.show_all()
126
128 self.dragndrop = value
129 if self.dragndrop:
130
131 self.tv.enable_model_drag_source( gtk.gdk.BUTTON1_MASK,
132 self.TARGETS,
133 gtk.gdk.ACTION_DEFAULT|
134 gtk.gdk.ACTION_MOVE)
135
136 self.tv.enable_model_drag_dest(self.TARGETS,
137 gtk.gdk.ACTION_DEFAULT)
138
139 self.tv.connect("drag_data_get", self.drag_data_get_data)
140 self.tv.connect("drag_data_received", self.drag_data_received_data)
141
142
144 if not self.dragndrop: return
145 treeselection = treeview.get_selection()
146 model, iter = treeselection.get_selected()
147 data = model.get_value(iter, 0)
148 selection.set(selection.target, 8, data)
149
152 if not self.dragndrop: return
153 model = treeview.get_model()
154 data = selection.data
155 drop_info = treeview.get_dest_row_at_pos(x, y)
156 if drop_info:
157 path, position = drop_info
158 iter = model.get_iter(path)
159
160 row = []
161 module = self.iconfig.RemoveModule(data)
162 row.append(module.GetName())
163 row.append(module.GetClass())
164 row.append(','.join([p.GetName() for p in module.GetProjectList()]))
165 if (position == gtk.TREE_VIEW_DROP_BEFORE
166 or position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE):
167 model.insert_before(iter, row)
168 self.iconfig.InsertModule(path[0],module)
169 else:
170 model.insert_after(iter, row)
171 self.iconfig.InsertModule(path[0]+1,module)
172 if context.action == gtk.gdk.ACTION_MOVE:
173 context.finish(True, True, long(0))
174 self.reload(self.iconfig)
175 return
176
178 self.printer = printer
179
181 if self.printer:
182 self.printer(txt)
183 else:
184 print txt
185
189
199