1
2
3
4 """
5 Main window for GtkIcetraConfig application
6
7 copyright (c) 2005 the icecube collaboration
8
9 @version: $Revision: $
10 @date: 2006-02-07T13:17:44
11 @author: Juan Carlos Diaz Velez <juancarlos@icecube.wisc.edu>
12 """
13
14 import sys,os
15 import pygtk
16 pygtk.require('2.0')
17 import gtk
18 import gtk.gdk
19 import getpass
20 import getopt
21 import logging
22 import cPickle
23 import threading
24 import logo
25 from os.path import expandvars
26 from GtkProjects import GtkProjects
27 from GtkServices import GtkServices
28 from GtkModules import GtkModules
29 from GtkIceProdPre import GtkIceProdPre
30 from GtkIceProdPost import GtkIceProdPost
31 from GtkFileChooser import *
32 from GtkSteering import GtkSteering
33 from GtkOFilter import GtkOFilter
34 from GtkDAGRel import GtkDAGRel
35 from GtkExtern import GtkExtern
36 from GtkSteerBatchOpt import GtkSteerBatchOpt
37 from GtkSteerDepend import GtkSteerDepend
38 from GtkInput import GtkInput
39 from gtkrunlist import GtkRunList
40 from gtkmetaprojectlist import GtkMetaProjectList
41 from iceprod.core.xmlwriter import IceTrayXMLWriter
42 from iceprod.core.xmlparser import IceTrayXMLParser
43 from iceprod.core.dataclasses import *
44 from iceprod.core.paramdb import *
45 from iceprod.core.configuration import Config
46 from iceprod.client.soaptrayclient import i3SOAPClient
47
48 logger = logging.getLogger('gtkicetray')
49
50
51 instances = 0
52
53
55
56 _paramuser = None
57 _parampasswd = None
58 _produser = None
59 _prodpasswd = None
60 resume_action = None
61
64
66
67 if not self.url:
68 if self.cfg.GetValue('URL'):
69 self.url = self.cfg.GetValue('URL').split(',')
70 else:
71 self.url = ['https://condor.icecube.wisc.edu:9080']
72 return self.url
73
75 while len(self.url) > 10: self.url.pop()
76 if url in self.url:
77 self.url.pop(self.url.index(url))
78 self.url.insert(0,url)
79 self.cfg.SetValue('URL',','.join(self.url))
80 return url
81
88
93
98
101
105
107 if not self.pdb_server:
108 self.pdb_server = self.cfg.GetValue('ParameterDatabaseServer')
109 return self.pdb_server
110
112 self.pdb_server = server
113 self.cfg.SetValue('ParameterDatabaseServer',server)
114 return self.pdb_server
115
117 if not self.cdb_server:
118 self.cdb_server = self.parent.cfg.GetValue('ConfigDatabaseServer')
119 return self.cdb_server
120
121
123 self.cdb_server = server
124 self.cfg.SetValue('ConfigDatabaseServer',server)
125 return self.cdb_server
126
127
129 if not self.pdb_name:
130 self.pdb_name = self.cfg.GetValue('ParameterDatabase')
131 return self.pdb_name
132
134 self.pdb_name=db
135 self.cfg.SetValue('ParameterDatabase',db)
136 return self.pdb_name
137
139 if not self.cdb_name:
140 self.cdb_name = self.cfg.GetValue('ConfigDatabase')
141 return self.cdb_name
142
144 self.cdb_name=db
145 self.cfg.SetValue('ConfigDatabase',db)
146 return self.cdb_name
147
148
155
160
165
169
172
177
179 """
180 This method rotates the position of the tabs
181 """
182
183 notebook.set_tab_pos((notebook.get_tab_pos()+1) %4)
184 return
185
187 """
188 Add/Remove the page tabs and the borders
189 """
190
191 tval = False
192 bval = False
193 if self.show_tabs == False:
194 tval = True
195 if self.show_border == False:
196 bval = True
197
198 notebook.set_show_tabs(tval)
199 self.show_tabs = tval
200 notebook.set_show_border(bval)
201 self.show_border = bval
202 return
203
205 """
206 Remove a page from the notebook
207 """
208 page = notebook.get_current_page()
209 notebook.remove_page(page)
210
211
212 notebook.queue_draw_area(0,0,-1,-1)
213
214 - def delete(self, widget, event=None):
222
230
231
233 """
234 menu item - Save configuration to file and prompt for filename
235 """
236 self.savefilechooser = GtkSaveFileChooser(self)
237
238
239 - def savefile(self,widget,configfile=None):
240 """
241 menu item - Save configuration to file
242 @param widget: gtk widget
243 @param configfile: current name of file
244 """
245 if not configfile:
246 configfile = self.configfile
247 for tray in self.trays:
248 tray.GetEvents()
249 tray.GetIterations()
250 self.GetPathPrefix()
251 writer = IceTrayXMLWriter(self.steering,add_descriptions=self.showdefaults)
252 writer.write_to_file(configfile)
253
260
261
263 """
264 menu item - delete IceTrayConfig object
265 """
266
267 page = self.notebook.get_current_page()
268 print page
269 if page > 0:
270 self.steering.RemoveTray(page-1)
271 del self.trays[page-1]
272 self.notebook.remove_page(page)
273 self.ReloadWidgets()
274 else:
275 self.PrintText("No IceTray selected.")
276
284
292
294 """
295 menu item - delete OfflineFilter object
296 """
297 if self.steering.GetOF():
298 self.steering.SetOF(None)
299 self.ReloadWidgets()
300 page = self.steernote.get_current_page()
301 page = self.steernote.get_nth_page(4)
302 self.steernote.remove_page(4)
303 else:
304 self.PrintText("Nothing to remove.")
305
312
314 self.showdefaults = not self.showdefaults
315
316
327
328 - def open(self,widget):
329 """
330 menu item - Display Filechooser dialog to load configuration file
331 """
332 self.openfilechooser = GtkOpenFileChooser(self,self.configfile)
333
335 """
336 menu item - remove config file
337 """
338 self.CloseConfig()
339
340 - def new(self,widget):
351
352
353 - def PrintText(self,text,append=True):
354 """
355 Write text to console window and automatically scroll to end
356 @param text: Text to append to message area
357 """
358
359 buffer = self.consoletv.get_buffer()
360 if append:
361 try:
362 buffer.insert(buffer.get_end_iter(),text+'\n')
363 self.consoletv.scroll_mark_onscreen(buffer.get_insert())
364 except Exception,e :
365 logger.error(str(e))
366 else:
367 try:
368 buffer.set_text(text+'\n')
369 self.consoletv.scroll_mark_onscreen(buffer.get_insert())
370 except Exception,e :
371 logger.error(str(e))
372
373 return True
374
375
391
399
400
417
418
420
421 auth_func = lambda x: (
422 (i3SOAPClient(geturl=self.geturl).authenticate(
423 self._setproduser(username_entry.get_text()),
424 self._setprodpass(password_entry.get_text())) \
425 and (func(), auth_dialog.destroy() )
426 or error_label.set_text("Failed..")))
427
428 auth_dialog = gtk.Dialog(title='authentication', parent=None, flags=0 );
429 error_label = gtk.Label()
430 error_label.show()
431
432 username_label = gtk.Label("Username:")
433 username_label.show()
434
435 username_entry = gtk.Entry()
436 username_entry.set_text(self._getproduser())
437 username_entry.show()
438
439 password_label = gtk.Label("Password:")
440 password_label.show()
441
442 password_entry = gtk.Entry()
443 password_entry.set_visibility(False)
444 if self._hasprodpass():
445 password_entry.set_text(self._getprodpass())
446 password_entry.show()
447 password_entry.connect("activate", auth_func)
448
449 cancel_button = gtk.Button('Cancel')
450 cancel_button.show()
451 cancel_button.connect("clicked", lambda widget: \
452 self.PrintText("cancelled.") and auth_dialog.destroy())
453
454 submit_button = gtk.Button('Submit')
455 submit_button.show()
456 submit_button.connect("clicked", auth_func)
457
458 auth_dialog.vbox.pack_start(error_label, True, True, 0)
459 auth_dialog.vbox.pack_start(username_label, True, True, 0)
460 auth_dialog.vbox.pack_start(username_entry, True, True, 0)
461 auth_dialog.vbox.pack_start(password_label, True, True, 0)
462 auth_dialog.vbox.pack_start(password_entry, True, True, 0)
463 auth_dialog.action_area.pack_start(cancel_button, True, True, 0)
464 auth_dialog.action_area.pack_start(submit_button, True, True, 0)
465 auth_dialog.show()
466
467
468 - def pdbauth(self,db,onfailure=None,args=()):
469
470 auth_dialog = gtk.Dialog(title='authentication', parent=None, flags=0 );
471
472 username_label = gtk.Label("Username:")
473 username_label.show()
474
475 username_entry = gtk.Entry()
476 username_entry.set_text(self._getparamuser())
477 username_entry.show()
478
479 password_label = gtk.Label("Password:")
480 password_label.show()
481
482 password_entry = gtk.Entry()
483 password_entry.set_visibility(False)
484 password_entry.show()
485
486 server_label = gtk.Label("Server:")
487 server_entry = gtk.Entry()
488 if self._getparamserver():
489 server_entry.set_text(self._getparamserver())
490 server_label.show()
491 server_entry.show()
492
493 database_label = gtk.Label("Database:")
494 database_entry = gtk.Entry()
495 if self._getparamdb():
496 database_entry.set_text(self._getparamdb())
497 database_label.show()
498 database_entry.show()
499
500 cancel_button = gtk.Button('Cancel')
501 cancel_button.show()
502 cancel_button.connect("clicked", lambda widget: auth_dialog.destroy())
503
504 submit_button = gtk.Button('OK')
505 submit_button.show()
506
507 authfunc = lambda x: (db.authenticate(
508 self._setparamserver(server_entry.get_text()),
509 self._setparamuser(username_entry.get_text()),
510 self._setparampass(password_entry.get_text()),
511 self._setparamdb(database_entry.get_text()),
512 True) ,
513 auth_dialog.destroy(),
514 self.resume_action_callback(),
515 onfailure and apply(onfailure,args))
516
517 username_entry.connect("activate", authfunc)
518 password_entry.connect("activate", authfunc)
519 server_entry.connect("activate", authfunc)
520 database_entry.connect("activate", authfunc)
521 submit_button.connect("clicked", authfunc)
522
523
524 auth_dialog.vbox.pack_start(username_label, True, True, 0)
525 auth_dialog.vbox.pack_start(username_entry, True, True, 0)
526 auth_dialog.vbox.pack_start(password_label, True, True, 0)
527 auth_dialog.vbox.pack_start(password_entry, True, True, 0)
528 auth_dialog.vbox.pack_start(server_label, True, True, 0)
529 auth_dialog.vbox.pack_start(server_entry, True, True, 0)
530 auth_dialog.vbox.pack_start(database_label, True, True, 0)
531 auth_dialog.vbox.pack_start(database_entry, True, True, 0)
532 auth_dialog.action_area.pack_start(cancel_button, True, True, 0)
533 auth_dialog.action_area.pack_start(submit_button, True, True, 0)
534 auth_dialog.show()
535
537 jobs_item = gtk.MenuItem("Run " + str(job.GetClusterId()))
538 new_job_menu = gtk.Menu()
539 jobs_item.set_submenu(new_job_menu)
540
541 check_job_item = gtk.MenuItem("Check status")
542 check_job_item.connect("activate",self.check_job,job)
543 new_job_menu.append(check_job_item)
544 check_job_item.show()
545
546 terminate_job_item = gtk.MenuItem("Terminate")
547 terminate_job_item.connect("activate",self.remove_job,job)
548 new_job_menu.append(terminate_job_item)
549 terminate_job_item.show()
550
551 clear_job_item = gtk.MenuItem("Clear job")
552 clear_job_item.connect("activate",self.clear_job,job)
553 new_job_menu.append(clear_job_item)
554 clear_job_item.show()
555
556 jobs_item.show()
557 self.jobs_menu.prepend(jobs_item)
558 self.job_q_list.append((job,jobs_item))
559
560
561 - def run(self,widget,data=None):
562 """
563 Run job on local computer (where client is running). This
564 requires that your I3_WORK environment is set.
565 """
566 self.PrintText('Running IceTray on local computer in %s' % os.getenv('I3_WORK') )
567 self.PrintText('Output is printed to stdout (for now)')
568 self.PrintText('-'*40)
569 threading.Thread(target=self.run_thread).start()
570
572 IceTrayXMLWriter(self.GetSteering()).write_to_file('.tmp.xml')
573 path = expandvars('$I3_BUILD/bin/runconfig.py')
574 cmd = '%s .tmp.xml 2>&1' % path
575 print cmd
576 cout = os.popen(cmd,'r')
577 eline = cout.readline()
578 line = 0
579 buff = ""
580 while eline:
581 if line%30 == 0:
582 self.PrintText(buff)
583 buff = ""
584 buff += "\n" + eline.strip()
585 eline = cout.readline()
586 line += 1
587 cout.close()
588 return
589
590
592 for job in self.job_q_list:
593 self.jobs_menu.remove(job[1])
594 del job
595 self.job_q_list = []
596
614
627
629
630 for j in range(len(self.job_q_list)):
631 if self.job_q_list[j][0].GetClusterId() == job.GetClusterId():
632 self.jobs_menu.remove(self.job_q_list[j][1])
633 del self.job_q_list[j]
634 return
635
636
637
638
650
655
663
664 - def docupage(self,widget):
665 try:
666 import webbrowser
667 webbrowser.open("http://wiki.icecube.wisc.edu/index.php/IceProd")
668 except Exception,e:
669 logger.debug(e)
670 pass
671
681
683 self.configfile = cfile
684
686 return self.configfile
687
689 self.steering = steering
690
691
694
697
700
722
723
724
735
737 try:
738 jobs = [job for job,job_entry in self.job_q_list]
739 cfile = open(cfg,'w');
740 cPickle.dump(jobs,cfile)
741 except Exception,e:
742 logger.warn("could not save cookies: %s" % e)
743
745 try:
746 self.pdb.savefile(expandvars("$HOME/.gtktray-paramdb"))
747 except Exception,e:
748 logger.warn("could not save parameter db: %s" % e)
749
778
780 """
781 Create menubar and add menu items
782 """
783
784 menu_bar = gtk.MenuBar()
785
786 file_menu = gtk.Menu()
787 file_menu.show()
788
789 file_menu_item = gtk.MenuItem("_File")
790 file_menu_item.show()
791 file_menu_item.set_submenu(file_menu)
792 menu_bar.append(file_menu_item)
793
794 edit_menu = gtk.Menu()
795 edit_menu.show()
796 self.edit_menu = edit_menu
797
798 edit_menu_item = gtk.MenuItem("_Edit")
799 edit_menu_item.show()
800 edit_menu_item.set_submenu(edit_menu)
801 menu_bar.append(edit_menu_item)
802
803 addtray_item = gtk.MenuItem("add tray")
804 addtray_item.connect("activate",self.addtray)
805 addtray_item.show()
806 edit_menu.append(addtray_item)
807
808 deltray_item = gtk.MenuItem("remove tray")
809 deltray_item.connect("activate",self.deltray)
810 deltray_item.show()
811 edit_menu.append(deltray_item)
812
813 addof_item = gtk.MenuItem("add filter description")
814 addof_item.connect("activate",self.addof)
815 addof_item.show()
816 edit_menu.append(addof_item)
817
818 delof_item = gtk.MenuItem("remove filter description")
819 delof_item.connect("activate",self.delof)
820 delof_item.show()
821 edit_menu.append(delof_item)
822
823 jobs_menu = gtk.Menu()
824 jobs_menu.show()
825 self.jobs_menu = jobs_menu
826
827 jobs_menu_item = gtk.MenuItem("_Jobs")
828 jobs_menu_item.show()
829 jobs_menu_item.set_submenu(jobs_menu)
830 menu_bar.append(jobs_menu_item)
831 self.LoadCookies()
832
833 tools_menu = gtk.Menu()
834 tools_menu.show()
835 self.tools_menu = tools_menu
836
837 tools_menu_item = gtk.MenuItem("_Tools")
838 tools_menu_item.show()
839 tools_menu_item.set_submenu(tools_menu)
840 menu_bar.append(tools_menu_item)
841
842 help_menu = gtk.Menu()
843 help_menu.show()
844 self.help_menu = help_menu
845
846 help_menu_item = gtk.MenuItem("_Help")
847 help_menu_item.show()
848 help_menu_item.set_submenu(help_menu)
849 menu_bar.append(help_menu_item)
850
851 documentation_item = gtk.MenuItem("IceProd _Documentation")
852 documentation_item.connect("activate",self.docupage)
853 documentation_item.show()
854 help_menu.append(documentation_item)
855
856 open_item = gtk.MenuItem("_Open...")
857 open_item.connect("activate",self.open)
858 open_item.show()
859 file_menu.append(open_item)
860
861 new_item = gtk.MenuItem("_New")
862 new_item.connect("activate",self.new)
863 new_item.show()
864 file_menu.append(new_item)
865
866 close_item = gtk.MenuItem("_Close")
867 close_item.connect("activate",self.close)
868 close_item.show()
869 file_menu.append(close_item)
870
871 download_item = gtk.MenuItem("_Download...")
872 download_item.connect("activate",self.download)
873 download_item.show()
874 file_menu.append(download_item)
875
876 save_item = gtk.MenuItem("_Save")
877 save_item.connect("activate",self.savefile)
878 save_item.show()
879 file_menu.append(save_item)
880
881 saveas_item = gtk.MenuItem("Save _As...")
882 saveas_item.connect("activate",self.saveas)
883 saveas_item.show()
884 file_menu.append(saveas_item)
885
886 submit_item = gtk.MenuItem("Submit _Dataset")
887 submit_item.connect("activate",self.submit_form)
888 submit_item.show()
889 file_menu.append(submit_item)
890
891 run_item = gtk.MenuItem("_Run (local)")
892 run_item.connect("activate",self.run)
893 run_item.show()
894 file_menu.append(run_item)
895
896 quit_item = gtk.MenuItem("_Quit")
897 quit_item.connect("activate",self.delete)
898 quit_item.show()
899 file_menu.append(quit_item)
900
901 clear_jobs_item = gtk.MenuItem("_Clear jobs")
902 clear_jobs_item.connect("activate",self.clear_jobs)
903 clear_jobs_item.show()
904 jobs_menu.append(clear_jobs_item)
905
906 updatedb_item = gtk.MenuItem("_Download Parameter DB...")
907 updatedb_item.connect("activate",self.updatedb)
908 updatedb_item.show()
909 tools_menu.append(updatedb_item)
910
911 loadpdb_item = gtk.MenuItem("_Load Parameter DB File...")
912 loadpdb_item.connect("activate",self.loadpdbfile)
913 loadpdb_item.show()
914 tools_menu.append(loadpdb_item)
915
916 upgrade_item = gtk.MenuItem("_Upgrade Metaprojects...")
917 upgrade_item.connect("activate",self.switchversion)
918 upgrade_item.show()
919 tools_menu.append(upgrade_item)
920
921 drag_item = gtk.CheckMenuItem("_Enable drag & drop")
922 drag_item.connect("activate",self.enable_dragndrop)
923 drag_item.show()
924 tools_menu.append(drag_item)
925
926 desc_item = gtk.CheckMenuItem("_Enable Defaults")
927 desc_item.connect("activate",self.enable_defaults)
928 desc_item.show()
929 tools_menu.append(desc_item)
930
931 return menu_bar
932
935
938
939 - def __init__(self, user=None,prod=False,auth=True):
940 self.steering = None
941 self.dragndrop = False
942 self.showdefaults = False
943 self.configfile = "newconfig.xml"
944 self.host = None
945 self.url = []
946 self.job_q_list = []
947 self._user = user
948 self.prodflag = prod
949 self.test = False
950 self.trays = []
951 self.child_pid = 0
952 self.validatexml = True
953 gtk.gdk.threads_init()
954
955 self.cfg = Config(os.path.join(os.getenv('HOME'),".gtkicetrayrc"))
956 try:
957 self.cfg.Read()
958 except Exception,e:
959 print >> sys.stderr, "Could not find configuration"
960
961 if self.cfg.GetValue('URL'):
962 self.url = self.cfg.GetValue('URL').split(',')
963 else:
964 self.url = []
965 self.pdb = RPCParamDB(geturl=self.geturl)
966 self.pdb.SetPrinter(self.PrintText)
967 self.mywidgets = []
968
969 self.consoletv = gtk.TextView()
970 self.consoletv.set_cursor_visible(False)
971 self.consoletv.set_wrap_mode(gtk.WRAP_NONE)
972 self.consoletv.set_editable(False)
973
974 table = gtk.Table(3,6,False)
975 consolesw = gtk.ScrolledWindow()
976 self.vbox = gtk.VBox(False,0)
977 self.vpane = gtk.VPaned()
978 menu_bar = self.MakeMenu()
979 menu_bar.show()
980 self.vbox.pack_start(menu_bar,False,False,2)
981
982 hbox = gtk.HBox(False,1)
983 self.url_entry = gtk.combo_box_entry_new_text()
984 urlframe = gtk.Frame("URL")
985 for url in self._getprodurl():
986 self.url_entry.append_text(url)
987 self.url_entry.set_active(0)
988
989 urlframe.add(self.url_entry)
990 urlframe.show()
991
992 run_icon = gtk.Image()
993 pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(logo.xpm_image_data)
994 run_icon.set_from_stock(gtk.STOCK_EXECUTE,gtk.ICON_SIZE_SMALL_TOOLBAR)
995
996 run_icon.show()
997 run_button = gtk.Button('',stock=gtk.STOCK_NETWORK)
998
999 run_button.show()
1000 run_button.connect("clicked", self.check_server)
1001 hbox.pack_start(urlframe,True,True,2)
1002 hbox.pack_start(run_button,False,False,2)
1003 hbox.show()
1004
1005 self.url_entry.show()
1006 self.vbox.pack_start(hbox,False,False,2)
1007
1008 self.vbox.pack_end(self.vpane,True,True,2)
1009 self.vpane.pack1(table,True,True)
1010 self.vpane.pack2(consolesw,True,True)
1011 self.vbox.show()
1012 self.vpane.show()
1013
1014 consolesw.set_size_request(100, 140)
1015 consolesw.add(self.consoletv)
1016 consolesw.show()
1017 self.consoletv.show()
1018
1019 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
1020 global instances
1021 instances += 1
1022 window = self.window
1023 window.connect("delete_event", self.delete)
1024 window.set_border_width(10)
1025 window.set_size_request(750, 750)
1026 window.add(self.vbox)
1027 window.set_resizable(True)
1028 window.set_position(gtk.WIN_POS_CENTER_ALWAYS)
1029 window.show()
1030 icon = window.render_icon(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_BUTTON)
1031 pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(logo.xpm_image_data)
1032 window.set_icon(pixbuf)
1033 window.show()
1034
1035
1036 self.notebook = gtk.Notebook()
1037 self.notebook.set_tab_pos(gtk.POS_TOP)
1038 table.attach(self.notebook, 0,6,0,1)
1039 self.notebook.show()
1040 self.show_tabs = True
1041 self.show_border = True
1042 table.show()
1043
1045 self.steering = None
1046 for w in self.mywidgets: del w
1047 self.mywidgets = []
1048 self.trays = []
1049 while self.notebook.get_current_page() >= 0:
1050 self.notebook.remove_page(self.notebook.get_current_page())
1051
1053
1054 self.CloseConfig()
1055 self.steering = steering
1056 label = gtk.Label("Steering")
1057 self.steernote = gtk.Notebook()
1058 self.steernote.show()
1059 self.notebook.append_page(self.steernote, label)
1060
1061 frame = gtk.Frame("Steering")
1062 frame.set_border_width(10)
1063 frame.set_size_request(400, 365)
1064 frame.show()
1065
1066 label = gtk.Label("Parameters")
1067 label.show()
1068 gtksteering = GtkSteering(self.steering)
1069 frame.add(gtksteering)
1070 self.mywidgets.append(gtksteering)
1071 self.steernote.append_page(frame, label)
1072
1073
1074 frame = gtk.Frame("Archive Dependencies")
1075 frame.set_border_width(10)
1076 frame.set_size_request(400, 365)
1077 frame.show()
1078
1079 label = gtk.Label("Dependencies")
1080 label.show()
1081 gtksteerdepend = GtkSteerDepend(self.steering)
1082 frame.add(gtksteerdepend)
1083 self.mywidgets.append(gtksteerdepend)
1084 self.steernote.append_page(frame, label)
1085
1086
1087 frame = gtk.Frame("Batch System Options")
1088 frame.set_border_width(10)
1089 frame.set_size_request(400, 365)
1090 frame.show()
1091
1092 label = gtk.Label("BatchOpts")
1093 label.show()
1094 gtkbatchopts = GtkSteerBatchOpt(self.steering)
1095 frame.add(gtkbatchopts)
1096 self.mywidgets.append(gtkbatchopts)
1097 self.steernote.append_page(frame, label)
1098
1099
1100 frame = gtk.Frame("Externals")
1101 frame.set_border_width(10)
1102 frame.set_size_request(400, 365)
1103 frame.show()
1104 label = gtk.Label("Externals")
1105 label.show()
1106 gtkextern = GtkExtern(self.steering)
1107 frame.add(gtkextern)
1108 self.mywidgets.append(gtkextern)
1109 self.steernote.append_page(frame, label)
1110
1111 if self.steering.GetOF():
1112 self.AddFilterTab(self.steering)
1113
1114 for tray in self.steering.GetTrays():
1115 self.AddTrayTab(tray)
1116
1117
1118
1119
1120
1121 self.notebook.set_current_page(0)
1122
1123
1124 button = gtk.Button("close")
1125 button.connect("clicked", self.delete)
1126 button.show()
1127
1128
1130 """
1131 Add a new icetray configuration tab
1132 @param tray: the new IceTrayConfig object
1133 """
1134
1135 gtktray = GtkIceTray(tray,self.pdb)
1136 gtktray.SetPrinter(self.PrintText)
1137 gtktray.show()
1138 label = gtk.Label()
1139 self.notebook.append_page(gtktray, label)
1140 label.set_text("IceTray[%d]" % len(self.trays) )
1141 label.show()
1142 self.trays.append(gtktray)
1143
1145 hbox = gtk.HBox()
1146 fbox = gtk.VBox()
1147 self.prefixentry = EventEntry("Prefix")
1148 label = gtk.Label("Prefix")
1149 self.prefixentry.set_reload_function(steering.GetOF().GetPrefix)
1150 self.prefixentry.set_text(str(steering.GetOF().GetPrefix()))
1151 self.prefixentry.show()
1152 hbox.pack_start(self.prefixentry,False,False,2)
1153 fbox.pack_start(hbox)
1154 hbox.show()
1155
1156 frame = gtk.Frame("OfflineFilter")
1157 frame.set_border_width(10)
1158 frame.set_size_request(400, 365)
1159 frame.show()
1160 fbox.pack_start(frame)
1161 fbox.show()
1162
1163 if not steering.GetOF(): steering.SetOF(OfflineFilter())
1164 label = gtk.Label("OfflineFilter")
1165 label.show()
1166 gtkof = GtkOFilter(steering)
1167 frame.add(gtkof)
1168 self.mywidgets.append(gtkof)
1169 self.steernote.append_page(fbox, label)
1170
1172 fbox = gtk.VBox()
1173 frame = gtk.Frame("TaskRel")
1174 frame.set_border_width(10)
1175 frame.set_size_request(400, 365)
1176 frame.show()
1177 fbox.pack_start(frame)
1178 fbox.show()
1179
1180 label = gtk.Label("TaskRel")
1181 label.show()
1182 gtk_tasks = GtkDAGRel(steering)
1183 frame.add(gtk_tasks)
1184 self.mywidgets.append(gtk_tasks)
1185 self.steernote.append_page(fbox, label)
1186
1187
1188
1190
1198
1201
1203 for widget in self.mywidgets:
1204 widget.SetPrinter(printer)
1205
1209
1213
1215 gtk.VBox.__init__(self)
1216 self.tray = tray
1217 self.pdb = database
1218 self.mywidgets = []
1219 hbox = gtk.HBox()
1220 self.evententry=EventEntry()
1221 self.evententry.set_text(str(self.tray.GetEvents()))
1222 self.evententry.show()
1223 self.iterentry=EventEntry("Iterations")
1224 self.iterentry.set_reload_function(IceTrayConfig.GetIterations)
1225 self.iterentry.set_text(str(self.tray.GetIterations()))
1226 self.iterentry.show()
1227 hbox.pack_start(self.evententry,False,False,2)
1228 hbox.pack_start(self.iterentry,False,False,2)
1229 hbox.show()
1230
1231 self.pack_start(hbox,False,False,2)
1232
1233 self.notebook = gtk.Notebook()
1234
1235
1236 frame = gtk.Frame("IceProdPre")
1237 frame.set_border_width(10)
1238 frame.set_size_request(400, 365)
1239 frame.show()
1240
1241 label = gtk.Label("IceProdPre")
1242 label.show()
1243 gtkpres = GtkIceProdPre(self.tray,self.pdb)
1244 frame.add(gtkpres)
1245 self.mywidgets.append(gtkpres)
1246 self.notebook.append_page(frame, label)
1247
1248
1249 frame = gtk.Frame("Modules")
1250 frame.set_border_width(10)
1251 frame.set_size_request(400, 365)
1252 frame.show()
1253
1254 label = gtk.Label("Modules")
1255 label.show()
1256 gtkmodules = GtkModules(self.tray,self.pdb)
1257 frame.add(gtkmodules)
1258 self.mywidgets.append(gtkmodules)
1259 self.notebook.append_page(frame, label)
1260
1261
1262 frame = gtk.Frame("Services")
1263 frame.set_border_width(10)
1264 frame.set_size_request(400, 365)
1265 frame.show()
1266
1267 label = gtk.Label("Services")
1268 label.show()
1269 gtkservices = GtkServices(self.tray,self.pdb)
1270 frame.add(gtkservices)
1271 self.mywidgets.append(gtkservices)
1272 self.notebook.append_page(frame, label)
1273
1274
1275 frame = gtk.Frame("IceProdPost")
1276 frame.set_border_width(10)
1277 frame.set_size_request(400, 365)
1278 frame.show()
1279
1280 label = gtk.Label("IceProdPost")
1281 label.show()
1282 gtkposts = GtkIceProdPost(self.tray,self.pdb)
1283 frame.add(gtkposts)
1284 self.mywidgets.append(gtkposts)
1285 self.notebook.append_page(frame, label)
1286
1287
1288
1289 vbox = gtk.VBox()
1290 frame = gtk.Frame()
1291 frame.set_border_width(10)
1292 frame.set_size_request(500, 365)
1293 frame.show()
1294
1295 gtkprojects = GtkProjects(tray,self.pdb)
1296 self.mywidgets.append(gtkprojects)
1297
1298 tab = gtkTab("Projects")
1299 tab.connect('button_press_event',self.reload_widget,gtkprojects)
1300 tab.show()
1301 self.notebook.append_page(gtkprojects, tab)
1302 self.pack_start(self.notebook,False,False,2)
1303 self.notebook.show()
1304
1305 self.notebook.set_current_page(1)
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1324
1326 gtk.EventBox.__init__(self)
1327 self.set_events(gtk.gdk.BUTTON_PRESS_MASK)
1328 self.label = gtk.Label(label_text)
1329 self.add(self.label)
1330
1334
1335
1336 -class EventEntry(gtk.Frame):
1337
1338 - def __init__(self,title="Events"):
1339 gtk.Frame.__init__(self,title)
1340 self.evententry = gtk.Entry()
1341 self.add(self.evententry)
1342 self.reload_func = IceTrayConfig.GetEvents
1343
1344 - def set_reload_function(self,func):
1345 self.reload_func = func
1346
1347 - def reload(self,tray):
1348 self.evententry.set_text(str(self.reload_func(tray)))
1349
1351 gtk.Frame.show(self)
1352 self.evententry.show()
1353
1354 - def get_text(self):
1355 return self.evententry.get_text()
1356
1357 - def set_text(self,txt):
1358 self.evententry.set_text(str(txt))
1359
1361 GtkConfig()
1362 return 0
1363
1364 if __name__ == "__main__":
1365 main()
1366