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 _windowminwidth = 750
62 _windowminheight = 600
63 _windowmaxwidth = 1150
64 _windowmaxheight = 1000
65 _trayminwidth = 400
66 _trayminheight = 250
67 _traymaxwidth = 800
68 _traymaxheight = 650
69
72
74
75 if not self.url:
76 if self.cfg.GetValue('URL'):
77 self.url = self.cfg.GetValue('URL').split(',')
78 else:
79 self.url = ['https://condor.icecube.wisc.edu:9080']
80 return self.url
81
89
96
101
106
109
113
115 if not self.pdb_server:
116 self.pdb_server = self.cfg.GetValue('ParameterDatabaseServer')
117 return self.pdb_server
118
120 self.pdb_server = server
121 self.cfg.SetValue('ParameterDatabaseServer',server)
122 return self.pdb_server
123
125 if not self.cdb_server:
126 self.cdb_server = self.parent.cfg.GetValue('ConfigDatabaseServer')
127 return self.cdb_server
128
129
131 self.cdb_server = server
132 self.cfg.SetValue('ConfigDatabaseServer',server)
133 return self.cdb_server
134
135
137 if not self.pdb_name:
138 self.pdb_name = self.cfg.GetValue('ParameterDatabase')
139 return self.pdb_name
140
142 self.pdb_name=db
143 self.cfg.SetValue('ParameterDatabase',db)
144 return self.pdb_name
145
147 if not self.cdb_name:
148 self.cdb_name = self.cfg.GetValue('ConfigDatabase')
149 return self.cdb_name
150
152 self.cdb_name=db
153 self.cfg.SetValue('ConfigDatabase',db)
154 return self.cdb_name
155
156
163
168
173
177
180
185
187 """
188 This method rotates the position of the tabs
189 """
190
191 notebook.set_tab_pos((notebook.get_tab_pos()+1) %4)
192 return
193
195 """
196 Add/Remove the page tabs and the borders
197 """
198
199 tval = False
200 bval = False
201 if self.show_tabs == False:
202 tval = True
203 if self.show_border == False:
204 bval = True
205
206 notebook.set_show_tabs(tval)
207 self.show_tabs = tval
208 notebook.set_show_border(bval)
209 self.show_border = bval
210 return
211
213 """
214 Remove a page from the notebook
215 """
216 page = notebook.get_current_page()
217 notebook.remove_page(page)
218
219
220 notebook.queue_draw_area(0,0,-1,-1)
221
222 - def delete(self, widget, event=None):
230
238
239
241 """
242 menu item - Save configuration to file and prompt for filename
243 """
244 self.savefilechooser = GtkSaveFileChooser(self)
245
246
247 - def savefile(self,widget,configfile=None):
248 """
249 menu item - Save configuration to file
250 @param widget: gtk widget
251 @param configfile: current name of file
252 """
253 if not configfile:
254 configfile = self.configfile
255 for tray in self.trays:
256 tray.GetEvents()
257 tray.GetIterations()
258 self.GetPathPrefix()
259 writer = IceTrayXMLWriter(self.steering,add_descriptions=self.showdefaults)
260 writer.write_to_file(configfile)
261
268
269
271 """
272 menu item - delete IceTrayConfig object
273 """
274
275 page = self.notebook.get_current_page()
276 print page
277 if page > 0:
278 self.steering.RemoveTray(page-1)
279 del self.trays[page-1]
280 self.notebook.remove_page(page)
281 self.ReloadWidgets()
282 else:
283 self.PrintText("No IceTray selected.")
284
292
300
302 """
303 menu item - delete OfflineFilter object
304 """
305 if self.steering.GetOF():
306 self.steering.SetOF(None)
307 self.ReloadWidgets()
308 page = self.steernote.get_current_page()
309 page = self.steernote.get_nth_page(4)
310 self.steernote.remove_page(4)
311 else:
312 self.PrintText("Nothing to remove.")
313
320
322 self.showdefaults = not self.showdefaults
323
324
335
336 - def open(self,widget):
337 """
338 menu item - Display Filechooser dialog to load configuration file
339 """
340 self.openfilechooser = GtkOpenFileChooser(self,self.configfile)
341
343 """
344 menu item - remove config file
345 """
346 self.CloseConfig()
347
348 - def new(self,widget):
359
360
361 - def PrintText(self,text,append=True):
362 """
363 Write text to console window and automatically scroll to end
364 @param text: Text to append to message area
365 """
366
367 buffer = self.consoletv.get_buffer()
368 if append:
369 try:
370 buffer.insert(buffer.get_end_iter(),text+'\n')
371 self.consoletv.scroll_mark_onscreen(buffer.get_insert())
372 except Exception,e :
373 logger.error(str(e))
374 else:
375 try:
376 buffer.set_text(text+'\n')
377 self.consoletv.scroll_mark_onscreen(buffer.get_insert())
378 except Exception,e :
379 logger.error(str(e))
380
381 return True
382
383
399
407
408
425
426
428
429 auth_func = lambda x: (
430 (i3SOAPClient(geturl=self.geturl).authenticate(
431 self._setproduser(username_entry.get_text()),
432 self._setprodpass(password_entry.get_text())) \
433 and (func(), auth_dialog.destroy() )
434 or error_label.set_text("Failed..")))
435
436 auth_dialog = gtk.Dialog(title='authentication', parent=None, flags=0 );
437 error_label = gtk.Label()
438 error_label.show()
439
440 username_label = gtk.Label("Username:")
441 username_label.show()
442
443 username_entry = gtk.Entry()
444 username_entry.set_text(self._getproduser())
445 username_entry.show()
446
447 password_label = gtk.Label("Password:")
448 password_label.show()
449
450 password_entry = gtk.Entry()
451 password_entry.set_visibility(False)
452 if self._hasprodpass():
453 password_entry.set_text(self._getprodpass())
454 password_entry.show()
455 password_entry.connect("activate", auth_func)
456
457 cancel_button = gtk.Button('Cancel')
458 cancel_button.show()
459 cancel_button.connect("clicked", lambda widget: \
460 self.PrintText("cancelled.") and auth_dialog.destroy())
461
462 submit_button = gtk.Button('Submit')
463 submit_button.show()
464 submit_button.connect("clicked", auth_func)
465
466 auth_dialog.vbox.pack_start(error_label, True, True, 0)
467 auth_dialog.vbox.pack_start(username_label, True, True, 0)
468 auth_dialog.vbox.pack_start(username_entry, True, True, 0)
469 auth_dialog.vbox.pack_start(password_label, True, True, 0)
470 auth_dialog.vbox.pack_start(password_entry, True, True, 0)
471 auth_dialog.action_area.pack_start(cancel_button, True, True, 0)
472 auth_dialog.action_area.pack_start(submit_button, True, True, 0)
473 auth_dialog.show()
474
475
476 - def pdbauth(self,db,onfailure=None,args=()):
477
478 auth_dialog = gtk.Dialog(title='authentication', parent=None, flags=0 );
479
480 username_label = gtk.Label("Username:")
481 username_label.show()
482
483 username_entry = gtk.Entry()
484 username_entry.set_text(self._getparamuser())
485 username_entry.show()
486
487 password_label = gtk.Label("Password:")
488 password_label.show()
489
490 password_entry = gtk.Entry()
491 password_entry.set_visibility(False)
492 password_entry.show()
493
494 server_label = gtk.Label("Server:")
495 server_entry = gtk.Entry()
496 if self._getparamserver():
497 server_entry.set_text(self._getparamserver())
498 server_label.show()
499 server_entry.show()
500
501 database_label = gtk.Label("Database:")
502 database_entry = gtk.Entry()
503 if self._getparamdb():
504 database_entry.set_text(self._getparamdb())
505 database_label.show()
506 database_entry.show()
507
508 cancel_button = gtk.Button('Cancel')
509 cancel_button.show()
510 cancel_button.connect("clicked", lambda widget: auth_dialog.destroy())
511
512 submit_button = gtk.Button('OK')
513 submit_button.show()
514
515 authfunc = lambda x: (db.authenticate(
516 self._setparamserver(server_entry.get_text()),
517 self._setparamuser(username_entry.get_text()),
518 self._setparampass(password_entry.get_text()),
519 self._setparamdb(database_entry.get_text()),
520 True) ,
521 auth_dialog.destroy(),
522 self.resume_action_callback(),
523 onfailure and apply(onfailure,args))
524
525 username_entry.connect("activate", authfunc)
526 password_entry.connect("activate", authfunc)
527 server_entry.connect("activate", authfunc)
528 database_entry.connect("activate", authfunc)
529 submit_button.connect("clicked", authfunc)
530
531
532 auth_dialog.vbox.pack_start(username_label, True, True, 0)
533 auth_dialog.vbox.pack_start(username_entry, True, True, 0)
534 auth_dialog.vbox.pack_start(password_label, True, True, 0)
535 auth_dialog.vbox.pack_start(password_entry, True, True, 0)
536 auth_dialog.vbox.pack_start(server_label, True, True, 0)
537 auth_dialog.vbox.pack_start(server_entry, True, True, 0)
538 auth_dialog.vbox.pack_start(database_label, True, True, 0)
539 auth_dialog.vbox.pack_start(database_entry, True, True, 0)
540 auth_dialog.action_area.pack_start(cancel_button, True, True, 0)
541 auth_dialog.action_area.pack_start(submit_button, True, True, 0)
542 auth_dialog.show()
543
545 jobs_item = gtk.MenuItem("Run " + str(job.GetClusterId()))
546 new_job_menu = gtk.Menu()
547 jobs_item.set_submenu(new_job_menu)
548
549 check_job_item = gtk.MenuItem("Check status")
550 check_job_item.connect("activate",self.check_job,job)
551 new_job_menu.append(check_job_item)
552 check_job_item.show()
553
554 terminate_job_item = gtk.MenuItem("Terminate")
555 terminate_job_item.connect("activate",self.remove_job,job)
556 new_job_menu.append(terminate_job_item)
557 terminate_job_item.show()
558
559 clear_job_item = gtk.MenuItem("Clear job")
560 clear_job_item.connect("activate",self.clear_job,job)
561 new_job_menu.append(clear_job_item)
562 clear_job_item.show()
563
564 jobs_item.show()
565 self.jobs_menu.prepend(jobs_item)
566 self.job_q_list.append((job,jobs_item))
567
568
569 - def run(self,widget,data=None):
570 """
571 Run job on local computer (where client is running). This
572 requires that your I3_WORK environment is set.
573 """
574 self.PrintText('Running IceTray on local computer in %s' % os.getenv('I3_WORK') )
575 self.PrintText('Output is printed to stdout (for now)')
576 self.PrintText('-'*40)
577 threading.Thread(target=self.run_thread).start()
578
580 IceTrayXMLWriter(self.GetSteering()).write_to_file('.tmp.xml')
581 path = expandvars('$I3_BUILD/bin/runconfig.py')
582 cmd = '%s .tmp.xml 2>&1' % path
583 print cmd
584 cout = os.popen(cmd,'r')
585 eline = cout.readline()
586 line = 0
587 buff = ""
588 while eline:
589 if line%30 == 0:
590 self.PrintText(buff)
591 buff = ""
592 buff += "\n" + eline.strip()
593 eline = cout.readline()
594 line += 1
595 cout.close()
596 return
597
598
600 for job in self.job_q_list:
601 self.jobs_menu.remove(job[1])
602 del job
603 self.job_q_list = []
604
622
635
637
638 for j in range(len(self.job_q_list)):
639 if self.job_q_list[j][0].GetClusterId() == job.GetClusterId():
640 self.jobs_menu.remove(self.job_q_list[j][1])
641 del self.job_q_list[j]
642 return
643
644
645
646
658
663
671
672 - def docupage(self,widget):
673 try:
674 import webbrowser
675 webbrowser.open("http://wiki.icecube.wisc.edu/index.php/IceProd")
676 except Exception,e:
677 logger.debug(e)
678 pass
679
689
691 self.configfile = cfile
692
694 return self.configfile
695
698
699
702
705
708
730
731
732
743
745 try:
746 jobs = [job for job,job_entry in self.job_q_list]
747 cfile = open(cfg,'w');
748 cPickle.dump(jobs,cfile)
749 except Exception,e:
750 logger.warn("could not save cookies: %s" % e)
751
753 try:
754 self.pdb.savefile(expandvars("$HOME/.gtktray-paramdb"))
755 except Exception,e:
756 logger.warn("could not save parameter db: %s" % e)
757
786
788 """
789 Create menubar and add menu items
790 """
791
792 menu_bar = gtk.MenuBar()
793
794 file_menu = gtk.Menu()
795 file_menu.show()
796
797 file_menu_item = gtk.MenuItem("_File")
798 file_menu_item.show()
799 file_menu_item.set_submenu(file_menu)
800 menu_bar.append(file_menu_item)
801
802 edit_menu = gtk.Menu()
803 edit_menu.show()
804 self.edit_menu = edit_menu
805
806 edit_menu_item = gtk.MenuItem("_Edit")
807 edit_menu_item.show()
808 edit_menu_item.set_submenu(edit_menu)
809 menu_bar.append(edit_menu_item)
810
811 addtray_item = gtk.MenuItem("add tray")
812 addtray_item.connect("activate",self.addtray)
813 addtray_item.show()
814 edit_menu.append(addtray_item)
815
816 deltray_item = gtk.MenuItem("remove tray")
817 deltray_item.connect("activate",self.deltray)
818 deltray_item.show()
819 edit_menu.append(deltray_item)
820
821 addof_item = gtk.MenuItem("add filter description")
822 addof_item.connect("activate",self.addof)
823 addof_item.show()
824 edit_menu.append(addof_item)
825
826 delof_item = gtk.MenuItem("remove filter description")
827 delof_item.connect("activate",self.delof)
828 delof_item.show()
829 edit_menu.append(delof_item)
830
831 jobs_menu = gtk.Menu()
832 jobs_menu.show()
833 self.jobs_menu = jobs_menu
834
835 jobs_menu_item = gtk.MenuItem("_Jobs")
836 jobs_menu_item.show()
837 jobs_menu_item.set_submenu(jobs_menu)
838 menu_bar.append(jobs_menu_item)
839 self.LoadCookies()
840
841 tools_menu = gtk.Menu()
842 tools_menu.show()
843 self.tools_menu = tools_menu
844
845 tools_menu_item = gtk.MenuItem("_Tools")
846 tools_menu_item.show()
847 tools_menu_item.set_submenu(tools_menu)
848 menu_bar.append(tools_menu_item)
849
850 help_menu = gtk.Menu()
851 help_menu.show()
852 self.help_menu = help_menu
853
854 help_menu_item = gtk.MenuItem("_Help")
855 help_menu_item.show()
856 help_menu_item.set_submenu(help_menu)
857 menu_bar.append(help_menu_item)
858
859 documentation_item = gtk.MenuItem("IceProd _Documentation")
860 documentation_item.connect("activate",self.docupage)
861 documentation_item.show()
862 help_menu.append(documentation_item)
863
864 open_item = gtk.MenuItem("_Open...")
865 open_item.connect("activate",self.open)
866 open_item.show()
867 file_menu.append(open_item)
868
869 new_item = gtk.MenuItem("_New")
870 new_item.connect("activate",self.new)
871 new_item.show()
872 file_menu.append(new_item)
873
874 close_item = gtk.MenuItem("_Close")
875 close_item.connect("activate",self.close)
876 close_item.show()
877 file_menu.append(close_item)
878
879 download_item = gtk.MenuItem("_Download...")
880 download_item.connect("activate",self.download)
881 download_item.show()
882 file_menu.append(download_item)
883
884 save_item = gtk.MenuItem("_Save")
885 save_item.connect("activate",self.savefile)
886 save_item.show()
887 file_menu.append(save_item)
888
889 saveas_item = gtk.MenuItem("Save _As...")
890 saveas_item.connect("activate",self.saveas)
891 saveas_item.show()
892 file_menu.append(saveas_item)
893
894 submit_item = gtk.MenuItem("Submit _Dataset")
895 submit_item.connect("activate",self.submit_form)
896 submit_item.show()
897 file_menu.append(submit_item)
898
899 run_item = gtk.MenuItem("_Run (local)")
900 run_item.connect("activate",self.run)
901 run_item.show()
902 file_menu.append(run_item)
903
904 quit_item = gtk.MenuItem("_Quit")
905 quit_item.connect("activate",self.delete)
906 quit_item.show()
907 file_menu.append(quit_item)
908
909 clear_jobs_item = gtk.MenuItem("_Clear jobs")
910 clear_jobs_item.connect("activate",self.clear_jobs)
911 clear_jobs_item.show()
912 jobs_menu.append(clear_jobs_item)
913
914 updatedb_item = gtk.MenuItem("_Download Parameter DB...")
915 updatedb_item.connect("activate",self.updatedb)
916 updatedb_item.show()
917 tools_menu.append(updatedb_item)
918
919 loadpdb_item = gtk.MenuItem("_Load Parameter DB File...")
920 loadpdb_item.connect("activate",self.loadpdbfile)
921 loadpdb_item.show()
922 tools_menu.append(loadpdb_item)
923
924 upgrade_item = gtk.MenuItem("_Upgrade Metaprojects...")
925 upgrade_item.connect("activate",self.switchversion)
926 upgrade_item.show()
927 tools_menu.append(upgrade_item)
928
929 drag_item = gtk.CheckMenuItem("_Enable drag & drop")
930 drag_item.connect("activate",self.enable_dragndrop)
931 drag_item.show()
932 tools_menu.append(drag_item)
933
934 desc_item = gtk.CheckMenuItem("_Enable Defaults")
935 desc_item.connect("activate",self.enable_defaults)
936 desc_item.show()
937 tools_menu.append(desc_item)
938
939 return menu_bar
940
943
946
947 - def __init__(self, user=None,prod=False,auth=True):
948 self.steering = None
949 self.dragndrop = False
950 self.showdefaults = False
951 self.configfile = "newconfig.xml"
952 self.host = None
953 self.url = []
954 self.job_q_list = []
955 self._user = user
956 self.prodflag = prod
957 self.templateflag= False
958 self.test = False
959 self.trays = []
960 self.child_pid = 0
961 self.validatexml = True
962 gtk.gdk.threads_init()
963
964 self.cfg = Config(os.path.join(os.getenv('HOME'),".gtkicetrayrc"))
965 try:
966 self.cfg.Read()
967 except Exception,e:
968 print >> sys.stderr, "Could not find configuration"
969
970 if self.cfg.GetValue('URL'):
971 self.url = self.cfg.GetValue('URL').split(',')
972 else:
973 self.url = []
974 self.pdb = RPCParamDB(geturl=self.geturl)
975 self.pdb.SetPrinter(self.PrintText)
976 self.mywidgets = []
977
978 self.consoletv = gtk.TextView()
979 self.consoletv.set_cursor_visible(False)
980 self.consoletv.set_wrap_mode(gtk.WRAP_NONE)
981 self.consoletv.set_editable(False)
982
983 table = gtk.Table(3,6,False)
984 consolesw = gtk.ScrolledWindow()
985 self.vbox = gtk.VBox(False,0)
986 self.vpane = gtk.VPaned()
987 menu_bar = self.MakeMenu()
988 menu_bar.show()
989 self.vbox.pack_start(menu_bar,False,False,2)
990
991 hbox = gtk.HBox(False,1)
992 self.url_entry = gtk.combo_box_entry_new_text()
993 urlframe = gtk.Frame("URL")
994 for url in self._getprodurl():
995 self.url_entry.append_text(url)
996 self.url_entry.set_active(0)
997
998 urlframe.add(self.url_entry)
999 urlframe.show()
1000
1001 run_icon = gtk.Image()
1002 pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(logo.xpm_image_data)
1003 run_icon.set_from_stock(gtk.STOCK_EXECUTE,gtk.ICON_SIZE_SMALL_TOOLBAR)
1004
1005 run_icon.show()
1006 run_button = gtk.Button('',stock=gtk.STOCK_NETWORK)
1007
1008 run_button.show()
1009 run_button.connect("clicked", self.check_server)
1010 hbox.pack_start(urlframe,True,True,2)
1011 hbox.pack_start(run_button,False,False,2)
1012 hbox.show()
1013
1014 self.url_entry.show()
1015 self.vbox.pack_start(hbox,False,False,2)
1016
1017 self.vbox.pack_end(self.vpane,True,True,2)
1018 self.vpane.pack1(table,True,True)
1019 self.vpane.pack2(consolesw,True,True)
1020 self.vbox.show()
1021 self.vpane.show()
1022
1023
1024 consolesw.add(self.consoletv)
1025 consolesw.show()
1026 self.consoletv.show()
1027
1028 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
1029 global instances
1030 instances += 1
1031 window = self.window
1032
1033
1034 screen = window.get_screen()
1035 screenwidth = screen.get_width()
1036 screenheight = screen.get_height()
1037 if (screenwidth > self._windowmaxwidth+200):
1038 self.windowwidth = self._windowmaxwidth
1039 elif (screenwidth < self._windowminwidth+200):
1040 self.windowwidth = self._windowminwidth
1041 else:
1042 self.windowwidth = screenwidth-200
1043 if (screenheight > self._windowmaxheight+200):
1044 self.windowheight = self._windowmaxheight
1045 elif (screenheight < self._windowminheight+200):
1046 self.windowheight = self._windowminheight
1047 else:
1048 self.windowheight = screenheight-200
1049 self.traywidth = self.windowwidth-350
1050 self.trayheight = self.windowheight-350
1051
1052
1053 window.connect("delete_event", self.delete)
1054 window.set_border_width(10)
1055 window.set_default_size(self.windowwidth, self.windowheight)
1056 window.add(self.vbox)
1057 window.set_resizable(True)
1058 window.set_position(gtk.WIN_POS_CENTER_ALWAYS)
1059 window.show()
1060 icon = window.render_icon(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_BUTTON)
1061 pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(logo.xpm_image_data)
1062 window.set_icon(pixbuf)
1063 window.show()
1064
1065
1066 self.notebook = gtk.Notebook()
1067 self.notebook.set_tab_pos(gtk.POS_TOP)
1068 table.attach(self.notebook, 0,6,0,1)
1069 self.notebook.show()
1070 self.show_tabs = True
1071 self.show_border = True
1072 table.show()
1073
1075 self.steering = None
1076 for w in self.mywidgets: del w
1077 self.mywidgets = []
1078 self.trays = []
1079 while self.notebook.get_current_page() >= 0:
1080 self.notebook.remove_page(self.notebook.get_current_page())
1081
1083
1084 self.CloseConfig()
1085 self.steering = steering
1086 label = gtk.Label("Steering")
1087 self.steernote = gtk.Notebook()
1088 self.steernote.show()
1089 self.notebook.append_page(self.steernote, label)
1090
1091 frame = gtk.Frame("Steering")
1092 frame.set_border_width(10)
1093
1094 frame.show()
1095
1096 label = gtk.Label("Parameters")
1097 label.show()
1098 gtksteering = GtkSteering(self.steering)
1099 frame.add(gtksteering)
1100 self.mywidgets.append(gtksteering)
1101 self.steernote.append_page(frame, label)
1102
1103
1104 frame = gtk.Frame("Archive Dependencies")
1105 frame.set_border_width(10)
1106
1107 frame.show()
1108
1109 label = gtk.Label("Dependencies")
1110 label.show()
1111 gtksteerdepend = GtkSteerDepend(self.steering)
1112 frame.add(gtksteerdepend)
1113 self.mywidgets.append(gtksteerdepend)
1114 self.steernote.append_page(frame, label)
1115
1116
1117 frame = gtk.Frame("Batch System Options")
1118 frame.set_border_width(10)
1119
1120 frame.show()
1121
1122 label = gtk.Label("BatchOpts")
1123 label.show()
1124 gtkbatchopts = GtkSteerBatchOpt(self.steering)
1125 frame.add(gtkbatchopts)
1126 self.mywidgets.append(gtkbatchopts)
1127 self.steernote.append_page(frame, label)
1128
1129
1130 frame = gtk.Frame("Externals")
1131 frame.set_border_width(10)
1132
1133 frame.show()
1134 label = gtk.Label("Externals")
1135 label.show()
1136 gtkextern = GtkExtern(self.steering)
1137 frame.add(gtkextern)
1138 self.mywidgets.append(gtkextern)
1139 self.steernote.append_page(frame, label)
1140
1141 if self.steering.GetOF():
1142 self.AddFilterTab(self.steering)
1143
1144 for tray in self.steering.GetTrays():
1145 self.AddTrayTab(tray)
1146
1147
1148
1149
1150
1151 self.notebook.set_current_page(0)
1152
1153
1154 button = gtk.Button("close")
1155 button.connect("clicked", self.delete)
1156 button.show()
1157
1158
1160 """
1161 Add a new icetray configuration tab
1162 @param tray: the new IceTrayConfig object
1163 """
1164
1165 gtktray = GtkIceTray(tray,self.pdb,self.traywidth,
1166 self.trayheight,self.windowwidth-100,
1167 self.windowheight-100)
1168 gtktray.SetPrinter(self.PrintText)
1169 gtktray.show()
1170 label = gtk.Label()
1171 self.notebook.append_page(gtktray, label)
1172 label.set_text("IceTray[%d]" % len(self.trays) )
1173 label.show()
1174 self.trays.append(gtktray)
1175
1202
1204 fbox = gtk.VBox()
1205 frame = gtk.Frame("TaskRel")
1206 frame.set_border_width(10)
1207
1208 frame.show()
1209 fbox.pack_start(frame)
1210 fbox.show()
1211
1212 label = gtk.Label("TaskRel")
1213 label.show()
1214 gtk_tasks = GtkDAGRel(steering)
1215 frame.add(gtk_tasks)
1216 self.mywidgets.append(gtk_tasks)
1217 self.steernote.append_page(fbox, label)
1218
1219
1220
1222
1223 _traywidth = 400
1224 _trayheight = 250
1225
1233
1236
1238 for widget in self.mywidgets:
1239 widget.SetPrinter(printer)
1240
1244
1248
1251 gtk.VBox.__init__(self)
1252 self.tray = tray
1253 self.pdb = database
1254 self.mywidgets = []
1255 hbox = gtk.HBox()
1256 self.evententry=EventEntry()
1257 self.evententry.set_text(str(self.tray.GetEvents()))
1258 self.evententry.show()
1259 self.iterentry=EventEntry("Iterations")
1260 self.iterentry.set_reload_function(IceTrayConfig.GetIterations)
1261 self.iterentry.set_text(str(self.tray.GetIterations()))
1262 self.iterentry.show()
1263 hbox.pack_start(self.evententry,False,False,2)
1264 hbox.pack_start(self.iterentry,False,False,2)
1265 hbox.show()
1266
1267 self.pack_start(hbox,False,False,2)
1268
1269 self.notebook = gtk.Notebook()
1270
1271
1272 frame = gtk.Frame("IceProdPre")
1273 frame.set_border_width(10)
1274
1275 frame.show()
1276
1277 label = gtk.Label("IceProdPre")
1278 label.show()
1279 gtkpres = GtkIceProdPre(self.tray,self.pdb,
1280 windowwidth,windowheight)
1281 frame.add(gtkpres)
1282 self.mywidgets.append(gtkpres)
1283 self.notebook.append_page(frame, label)
1284
1285
1286 frame = gtk.Frame("Modules")
1287 frame.set_border_width(10)
1288
1289 frame.show()
1290
1291 label = gtk.Label("Modules")
1292 label.show()
1293 gtkmodules = GtkModules(self.tray,self.pdb)
1294 frame.add(gtkmodules)
1295 self.mywidgets.append(gtkmodules)
1296 self.notebook.append_page(frame, label)
1297
1298
1299 frame = gtk.Frame("Services")
1300 frame.set_border_width(10)
1301
1302 frame.show()
1303
1304 label = gtk.Label("Services")
1305 label.show()
1306 gtkservices = GtkServices(self.tray,self.pdb)
1307 frame.add(gtkservices)
1308 self.mywidgets.append(gtkservices)
1309 self.notebook.append_page(frame, label)
1310
1311
1312 frame = gtk.Frame("IceProdPost")
1313 frame.set_border_width(10)
1314
1315 frame.show()
1316
1317 label = gtk.Label("IceProdPost")
1318 label.show()
1319 gtkposts = GtkIceProdPost(self.tray,self.pdb)
1320 frame.add(gtkposts)
1321 self.mywidgets.append(gtkposts)
1322 self.notebook.append_page(frame, label)
1323
1324
1325
1326 vbox = gtk.VBox()
1327 frame = gtk.Frame()
1328 frame.set_border_width(10)
1329
1330 frame.show()
1331
1332 gtkprojects = GtkProjects(tray,self.pdb)
1333 self.mywidgets.append(gtkprojects)
1334
1335 tab = gtkTab("Projects")
1336 tab.connect('button_press_event',self.reload_widget,gtkprojects)
1337 tab.show()
1338 self.notebook.append_page(gtkprojects, tab)
1339 self.pack_start(self.notebook,True,True,2)
1340 self.notebook.show()
1341
1342 self.notebook.set_current_page(1)
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1361
1363 gtk.EventBox.__init__(self)
1364 self.set_events(gtk.gdk.BUTTON_PRESS_MASK)
1365 self.label = gtk.Label(label_text)
1366 self.add(self.label)
1367
1371
1372
1373 -class EventEntry(gtk.Frame):
1374
1375 - def __init__(self,title="Events"):
1376 gtk.Frame.__init__(self,title)
1377 self.evententry = gtk.Entry()
1378 self.add(self.evententry)
1379 self.reload_func = IceTrayConfig.GetEvents
1380
1381 - def set_reload_function(self,func):
1382 self.reload_func = func
1383
1384 - def reload(self,tray):
1385 self.evententry.set_text(str(self.reload_func(tray)))
1386
1388 gtk.Frame.show(self)
1389 self.evententry.show()
1390
1391 - def get_text(self):
1392 return self.evententry.get_text()
1393
1394 - def set_text(self,txt):
1395 self.evententry.set_text(str(txt))
1396
1398 GtkConfig()
1399 return 0
1400
1401 if __name__ == "__main__":
1402 main()
1403