Package iceprod :: Package client :: Module GtkProjectList
[hide private]
[frames] | no frames]

Source Code for Module iceprod.client.GtkProjectList

  1  #!/bin/env python 
  2  #   copyright  (c) 2005 
  3  #   the icecube collaboration 
  4  #   $Id: $ 
  5  # 
  6  #   @version $Revision: $ 
  7  #   @date $Date: $ 
  8  #   @author Juan Carlos Diaz Velez <juancarlos@icecube.wisc.edu> 
  9  #       @brief Project display frame for GtkIcetraConfig application 
 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   
19 -class GtkProjectList:
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 # setup the main window 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 # Get the model and attach it to the view 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 # Add our view into the main window 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
54 - def SetPrinter(self,printer):
55 self.printer = printer
56
57 - def SetParent(self,parent):
58 self.parent = parent
59
60 - def Print(self,txt):
61 if self.printer: 62 self.printer(txt) 63 else: 64 print txt
65 66
67 - def display(self):
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
79 - def add_project(self, tv, path, viewcol):
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
98 - def commit_changes(self, widget, data=None):
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):
106 """ 107 Add Project 108 """ 109 if model[path][3]: 110 id = model[path][0] 111 name = model[path][1] 112 version = model[path][2] 113 114 newproj = Project() 115 newproj.SetName(name) 116 newproj.SetVersion(version) 117 118 self.metaproject.AddProject(newproj.GetName(),newproj) 119 self.gtkmod.cancel_edit_projects() 120 self.root.destroy()
121 122
123 - def row_toggled( self,cell, path):
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
136 - def make_view( self, model ):
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 # setup the text cell renderer and allows these 142 # cells to be edited. 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