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

Source Code for Module iceprod.client.gtkmetaprojectlist

  1  #!/bin/env python 
  2  # 
  3   
  4  """ 
  5   Display window for Configuration database 
  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, gobject 
 17  from iceprod.core.dataclasses import * 
 18  import time 
 19  import logging 
 20  import iceprod.core.logger 
 21   
 22  logger = logging.getLogger('GtkMetaProjectList') 
 23   
24 -class GtkMetaProjectList:
25 - def __init__(self,pdb,parent):
26 27 self.store = gtk.ListStore( int, str, str ) 28 self.pdb = pdb 29 self.parent = parent 30 self.resume_action = None 31 self.init()
32
33 - def init(self):
34 if not self.display(): return 35 36 # setup the main window 37 self.root = gtk.Window(type=gtk.WINDOW_TOPLEVEL) 38 self.sw = gtk.ScrolledWindow() 39 self.root.set_title('Available Metaprojects') 40 self.root.set_size_request(500, 375) 41 42 # Get the model and attach it to the view 43 self.view = self.make_view( self.store ) 44 45 self.vbox = gtk.VBox(False,1) 46 47 # Add search field 48 self.entry = gtk.Entry() 49 self.entry.set_max_length(50) 50 self.entry.connect("activate", self.enter_callback, self.entry) 51 self.entry_frame = gtk.Frame('Search keyword') 52 self.entry_frame.add(self.entry) 53 self.vbox.pack_start(self.entry_frame, False, False, 1) 54 self.entry.show() 55 56 # Add view into frame and into main window 57 self.sw.add(self.view) 58 self.view_frame = gtk.Frame('Database entries') 59 self.view_frame.add(self.sw) 60 self.vbox.add(self.view_frame) 61 62 self.root.add(self.vbox) 63 self.root.show_all() 64 return
65
66 - def enter_callback(self, widget, entry):
67 entry_text = entry.get_text() 68 self.display(entry_text)
69
70 - def set_resume_action(self,action):
71 self.resume_action = action
72
73 - def resume_action_callback(self):
74 if self.resume_action: 75 self.resume_action() 76 self.resume_action = None
77
78 - def display(self,search_string=None):
79 """ Populates gtk.TreeStore """ 80 81 self.store.clear() 82 83 self.set_resume_action(self.init) 84 self.pdb.connect() 85 runs = self.pdb.fetch_metaproject_list() 86 for r in runs: 87 row = [ r['metaproject_id'], r['name'], r['versiontxt'] ] 88 logger.debug(','.join(map(str,row))) 89 self.store.append( row ) 90 return True
91
92 - def switcharoo(self, tv, path, viewcol):
93 """ 94 Get config from database server 95 """ 96 sel = tv.get_selection() 97 sel.select_path(path) 98 model, iter = sel.get_selected() 99 id = model.get_value(iter, 0) 100 name = model.get_value(iter, 1) 101 version = model.get_value(iter, 2) 102 103 self.set_resume_action(self.init) 104 self.pdb.connect() 105 steering = self.parent.GetSteering() 106 traylist = steering.GetTrays() 107 for tray in traylist: 108 mp = self.pdb.SwitchMetaProject(tray,id,name,version) 109 tray.AddMetaProject(mp.GetName(),mp) 110 self.parent.ReloadWidgets() 111 self.root.destroy()
112 113
114 - def make_view( self, model ):
115 """ Form a view for the Tree Model """ 116 self.view = gtk.TreeView( model ) 117 self.view.connect('row-activated', self.switcharoo) 118 119 # setup the text cell renderer and allows these 120 # cells to be edited. 121 self.renderer = [None]*5 122 for i in range(5): 123 self.renderer[i] = gtk.CellRendererText() 124 125 self.column = [None]*3 126 self.column[0] = gtk.TreeViewColumn("ID",self.renderer[0], text=0) 127 self.column[1] = gtk.TreeViewColumn("name",self.renderer[1],text=1 ) 128 self.column[2] = gtk.TreeViewColumn("version",self.renderer[2], text=2) 129 130 for i in range(3): 131 self.view.append_column( self.column[i] ) 132 return self.view
133