1
2
3
4
5
6
7
8
9
10
11 import pygtk
12 pygtk.require("2.0")
13 import gtk, gobject
14 from iceprod.core.dataclasses import *
15 import logging
16
17 logger = logging.getLogger('GtkProjectList')
18
20 """ The GUI class is the controller for our application """
21
22 - def __init__(self,metaproject,pdb,gtkmod,title="Available Projects"):
23
24 self.metaproject = metaproject
25 self.pdb = pdb
26 self.gtkmod = gtkmod
27 self.printer = None
28 self.display()
29
30
31 self.root = gtk.Window(type=gtk.WINDOW_TOPLEVEL)
32 self.sw = gtk.ScrolledWindow()
33 self.root.set_title(title)
34 self.root.set_size_request(600, 475)
35
36
37 self.view = self.make_view( self.store )
38
39 b = gtk.Button(stock=gtk.STOCK_APPLY)
40 b.connect('clicked', self.commit_changes)
41 self.hbbox = gtk.HButtonBox()
42 self.hbbox.pack_start(b, False, False, 1)
43
44
45 self.sw.add(self.view)
46
47 self.vbox = gtk.VBox(False,0)
48 self.vbox.pack_start(self.sw,True,True,2)
49 self.vbox.pack_end(self.hbbox,False,False,2)
50 self.root.add(self.vbox)
51 self.root.show_all()
52 return
53
55 self.printer = printer
56
59
61 if self.printer:
62 self.printer(txt)
63 else:
64 print txt
65
66
68 """ Sets up and populates gtk.TreeStore """
69 self.store = gtk.TreeStore( int, str, str, gobject.TYPE_BOOLEAN )
70
71 if not self.pdb.cached and not self.pdb.connect(): return
72 for p in self.pdb.GetProjects(self.metaproject.GetId()):
73 pname = p.GetName()
74 pver = p.GetVersion()
75
76 row = [p.GetId(),pname, pver,False]
77 self.store.append(None, row )
78
80 """
81 Add Project
82 """
83 sel = tv.get_selection()
84 sel.select_path(path)
85 model, iter = sel.get_selected()
86 id = model.get_value(iter, 0)
87 name = model.get_value(iter, 1)
88 version = model.get_value(iter, 2)
89
90 newproj = Project()
91 newproj.SetName(name)
92 newproj.SetVersion(version)
93
94 self.metaproject.AddProject(newproj.GetName(),newproj)
95 self.gtkmod.cancel_edit_projects()
96 self.root.destroy()
97
99 model = self.store
100 self.mdict = {}
101 if not self.pdb.cached and not self.pdb.connect(): return
102 model.foreach(self.do_change)
103 return
104
105 - def do_change(self, model, path, iter,connect=True):
121
122
124 """
125 Sets the toggled state on the toggle button to true or false.
126 """
127 model = self.store
128 model[path][3] = not model[path][3]
129
130 if not model[path][3]:
131 self.renderer[1].set_property('editable', False)
132 self.renderer[2].set_property('editable', False)
133 return
134
135
137 """ Form a view for the Tree Model """
138 self.view = gtk.TreeView( model )
139 self.view.connect('row-activated', self.add_project)
140
141
142
143 self.renderer = [None]*4
144 for i in range(3):
145 self.renderer[i] = gtk.CellRendererText()
146 self.renderer[3] = gtk.CellRendererToggle()
147 self.renderer[3].set_property('activatable', True)
148 self.renderer[3].connect( 'toggled', self.row_toggled)
149
150 self.column = [None]*6
151 self.column[0] = gtk.TreeViewColumn("DbID",self.renderer[0], text=0)
152 self.column[0].set_sort_column_id(0)
153 self.column[1] = gtk.TreeViewColumn("Name",self.renderer[1], text=1)
154 self.column[1].set_sort_column_id(1)
155 self.column[2] = gtk.TreeViewColumn("version",self.renderer[2], text=2)
156 self.column[2].set_sort_column_id(2)
157 self.column[3] = gtk.TreeViewColumn('Selected')
158 self.column[3].pack_start(self.renderer[3], True)
159 self.column[3].add_attribute( self.renderer[3], "active", 3)
160
161 for i in range(4):
162 self.view.append_column( self.column[i] )
163 return self.view
164