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 GtkExtern import GtkExtern
35 from GtkSteerBatchOpt import GtkSteerBatchOpt
36 from GtkSteerDepend import GtkSteerDepend
37 from GtkInput import GtkInput
38 from gtkrunlist import GtkRunList
39 from gtkmetaprojectlist import GtkMetaProjectList
40 from iceprod.core.xmlwriter import IceTrayXMLWriter
41 from iceprod.core.xmlparser import IceTrayXMLParser
42 from iceprod.core.dataclasses import *
43 from iceprod.core.paramdb import *
44 from iceprod.core.configuration import Config
45 from soaptrayclient import i3SOAPClient
46
47 logger = logging.getLogger('gtkicetray')
48
49
50 instances = 0
51
52
54
55 _paramuser = None
56 _parampasswd = None
57 _produser = None
58 _prodpasswd = None
59 resume_action = None
60
63
65
66 if not self.url:
67 if self.cfg.GetValue('URL'):
68 self.url = self.cfg.GetValue('URL').split(',')
69 else:
70 self.url = ['https://condor.icecube.wisc.edu:9080']
71 return self.url
72
79
86
91
96
99
103
105 if not self.pdb_server:
106 self.pdb_server = self.cfg.GetValue('ParameterDatabaseServer')
107 return self.pdb_server
108
110 self.pdb_server = server
111 self.cfg.SetValue('ParameterDatabaseServer',server)
112 return self.pdb_server
113
115 if not self.cdb_server:
116 self.cdb_server = self.parent.cfg.GetValue('ConfigDatabaseServer')
117 return self.cdb_server
118
119
121 self.cdb_server = server
122 self.cfg.SetValue('ConfigDatabaseServer',server)
123 return self.cdb_server
124
125
127 if not self.pdb_name:
128 self.pdb_name = self.cfg.GetValue('ParameterDatabase')
129 return self.pdb_name
130
132 self.pdb_name=db
133 self.cfg.SetValue('ParameterDatabase',db)
134 return self.pdb_name
135
137 if not self.cdb_name:
138 self.cdb_name = self.cfg.GetValue('ConfigDatabase')
139 return self.cdb_name
140
142 self.cdb_name=db
143 self.cfg.SetValue('ConfigDatabase',db)
144 return self.cdb_name
145
146
153
158
163
167
170
175
177 """
178 This method rotates the position of the tabs
179 """
180
181 notebook.set_tab_pos((notebook.get_tab_pos()+1) %4)
182 return
183
185 """
186 Add/Remove the page tabs and the borders
187 """
188
189 tval = False
190 bval = False
191 if self.show_tabs == False:
192 tval = True
193 if self.show_border == False:
194 bval = True
195
196 notebook.set_show_tabs(tval)
197 self.show_tabs = tval
198 notebook.set_show_border(bval)
199 self.show_border = bval
200 return
201
203 """
204 Remove a page from the notebook
205 """
206 page = notebook.get_current_page()
207 notebook.remove_page(page)
208
209
210 notebook.queue_draw_area(0,0,-1,-1)
211
212 - def delete(self, widget, event=None):
220
228
229
231 """
232 menu item - Save configuration to file and prompt for filename
233 """
234 self.savefilechooser = GtkSaveFileChooser(self)
235
236
237 - def savefile(self,widget,configfile=None):
238 """
239 menu item - Save configuration to file
240 @param widget: gtk widget
241 @param configfile: current name of file
242 """
243 if not configfile:
244 configfile = self.configfile
245 for tray in self.trays:
246 tray.GetEvents()
247 tray.GetIterations()
248 self.GetPathPrefix()
249 writer = IceTrayXMLWriter(self.steering)
250 writer.write_to_file(configfile)
251
258
259
261 """
262 menu item - delete IceTrayConfig object
263 """
264
265 page = self.notebook.get_current_page()
266 print page
267 if page > 0:
268 self.steering.RemoveTray(page-1)
269 del self.trays[page-1]
270 self.notebook.remove_page(page)
271 self.ReloadWidgets()
272 else:
273 self.PrintText("No IceTray selected.")
274
282
290
292 """
293 menu item - delete OfflineFilter object
294 """
295 if self.steering.GetOF():
296 self.steering.SetOF(None)
297 self.ReloadWidgets()
298 page = self.steernote.get_current_page()
299 page = self.steernote.get_nth_page(4)
300 self.steernote.remove_page(4)
301 else:
302 self.PrintText("Nothing to remove.")
303
310
321
322 - def open(self,widget):
323 """
324 menu item - Display Filechooser dialog to load configuration file
325 """
326 self.openfilechooser = GtkOpenFileChooser(self,self.configfile)
327
329 """
330 menu item - remove config file
331 """
332 self.CloseConfig()
333
334 - def new(self,widget):
345
346
347 - def PrintText(self,text,append=True):
348 """
349 Write text to console window and automatically scroll to end
350 @param text: Text to append to message area
351 """
352
353 buffer = self.consoletv.get_buffer()
354 if append:
355 try:
356 buffer.insert(buffer.get_end_iter(),text+'\n')
357 self.consoletv.scroll_mark_onscreen(buffer.get_insert())
358 except Exception,e :
359 logger.error(str(e))
360 else:
361 try:
362 buffer.set_text(text+'\n')
363 self.consoletv.scroll_mark_onscreen(buffer.get_insert())
364 except Exception,e :
365 logger.error(str(e))
366
367 return True
368
369
385
393
394
411
412
414
415 auth_func = lambda x: (
416 (i3SOAPClient(geturl=self.geturl).authenticate(
417 self._setproduser(username_entry.get_text()),
418 self._setprodpass(password_entry.get_text())) \
419 and (func(), auth_dialog.destroy() )
420 or error_label.set_text("Failed..")))
421
422 auth_dialog = gtk.Dialog(title='authentication', parent=None, flags=0 );
423 error_label = gtk.Label()
424 error_label.show()
425
426 username_label = gtk.Label("Username:")
427 username_label.show()
428
429 username_entry = gtk.Entry()
430 username_entry.set_text(self._getproduser())
431 username_entry.show()
432
433 password_label = gtk.Label("Password:")
434 password_label.show()
435
436 password_entry = gtk.Entry()
437 password_entry.set_visibility(False)
438 if self._hasprodpass():
439 password_entry.set_text(self._getprodpass())
440 password_entry.show()
441 password_entry.connect("activate", auth_func)
442
443 cancel_button = gtk.Button('Cancel')
444 cancel_button.show()
445 cancel_button.connect("clicked", lambda widget: \
446 self.PrintText("cancelled.") and auth_dialog.destroy())
447
448 submit_button = gtk.Button('Submit')
449 submit_button.show()
450 submit_button.connect("clicked", auth_func)
451
452 auth_dialog.vbox.pack_start(error_label, True, True, 0)
453 auth_dialog.vbox.pack_start(username_label, True, True, 0)
454 auth_dialog.vbox.pack_start(username_entry, True, True, 0)
455 auth_dialog.vbox.pack_start(password_label, True, True, 0)
456 auth_dialog.vbox.pack_start(password_entry, True, True, 0)
457 auth_dialog.action_area.pack_start(cancel_button, True, True, 0)
458 auth_dialog.action_area.pack_start(submit_button, True, True, 0)
459 auth_dialog.show()
460
461
462 - def pdbauth(self,db,onfailure=None,args=()):
463
464 auth_dialog = gtk.Dialog(title='authentication', parent=None, flags=0 );
465
466 username_label = gtk.Label("Username:")
467 username_label.show()
468
469 username_entry = gtk.Entry()
470 username_entry.set_text(self._getparamuser())
471 username_entry.show()
472
473 password_label = gtk.Label("Password:")
474 password_label.show()
475
476 password_entry = gtk.Entry()
477 password_entry.set_visibility(False)
478 password_entry.show()
479
480 server_label = gtk.Label("Server:")
481 server_entry = gtk.Entry()
482 if self._getparamserver():
483 server_entry.set_text(self._getparamserver())
484 server_label.show()
485 server_entry.show()
486
487 database_label = gtk.Label("Database:")
488 database_entry = gtk.Entry()
489 if self._getparamdb():
490 database_entry.set_text(self._getparamdb())
491 database_label.show()
492 database_entry.show()
493
494 cancel_button = gtk.Button('Cancel')
495 cancel_button.show()
496 cancel_button.connect("clicked", lambda widget: auth_dialog.destroy())
497
498 submit_button = gtk.Button('OK')
499 submit_button.show()
500
501 authfunc = lambda x: (db.authenticate(
502 self._setparamserver(server_entry.get_text()),
503 self._setparamuser(username_entry.get_text()),
504 self._setparampass(password_entry.get_text()),
505 self._setparamdb(database_entry.get_text()),
506 True) ,
507 auth_dialog.destroy(),
508 self.resume_action_callback(),
509 onfailure and apply(onfailure,args))
510
511 username_entry.connect("activate", authfunc)
512 password_entry.connect("activate", authfunc)
513 server_entry.connect("activate", authfunc)
514 database_entry.connect("activate", authfunc)
515 submit_button.connect("clicked", authfunc)
516
517
518 auth_dialog.vbox.pack_start(username_label, True, True, 0)
519 auth_dialog.vbox.pack_start(username_entry, True, True, 0)
520 auth_dialog.vbox.pack_start(password_label, True, True, 0)
521 auth_dialog.vbox.pack_start(password_entry, True, True, 0)
522 auth_dialog.vbox.pack_start(server_label, True, True, 0)
523 auth_dialog.vbox.pack_start(server_entry, True, True, 0)
524 auth_dialog.vbox.pack_start(database_label, True, True, 0)
525 auth_dialog.vbox.pack_start(database_entry, True, True, 0)
526 auth_dialog.action_area.pack_start(cancel_button, True, True, 0)
527 auth_dialog.action_area.pack_start(submit_button, True, True, 0)
528 auth_dialog.show()
529
531 jobs_item = gtk.MenuItem("Run " + str(job.GetClusterId()))
532 new_job_menu = gtk.Menu()
533 jobs_item.set_submenu(new_job_menu)
534
535 check_job_item = gtk.MenuItem("Check status")
536 check_job_item.connect("activate",self.check_job,job)
537 new_job_menu.append(check_job_item)
538 check_job_item.show()
539
540 terminate_job_item = gtk.MenuItem("Terminate")
541 terminate_job_item.connect("activate",self.remove_job,job)
542 new_job_menu.append(terminate_job_item)
543 terminate_job_item.show()
544
545 clear_job_item = gtk.MenuItem("Clear job")
546 clear_job_item.connect("activate",self.clear_job,job)
547 new_job_menu.append(clear_job_item)
548 clear_job_item.show()
549
550 jobs_item.show()
551 self.jobs_menu.prepend(jobs_item)
552 self.job_q_list.append((job,jobs_item))
553
554
555 - def run(self,widget,data=None):
556 """
557 Run job on local computer (where client is running). This
558 requires that your I3_WORK environment is set.
559 """
560 self.PrintText('Running IceTray on local computer in %s' % os.getenv('I3_WORK') )
561 self.PrintText('Output is printed to stdout (for now)')
562 self.PrintText('-'*40)
563 threading.Thread(target=self.run_thread).start()
564
566 IceTrayXMLWriter(self.GetSteering()).write_to_file('.tmp.xml')
567 path = expandvars('$I3_BUILD/bin/runconfig.py')
568 cmd = '%s .tmp.xml 2>&1' % path
569 print cmd
570 cout = os.popen(cmd,'r')
571 eline = cout.readline()
572 line = 0
573 buff = ""
574 while eline:
575 if line%30 == 0:
576 self.PrintText(buff)
577 buff = ""
578 buff += "\n" + eline.strip()
579 eline = cout.readline()
580 line += 1
581 cout.close()
582 return
583
584
586 for job in self.job_q_list:
587 self.jobs_menu.remove(job[1])
588 del job
589 self.job_q_list = []
590
608
621
623
624 for j in range(len(self.job_q_list)):
625 if self.job_q_list[j][0].GetClusterId() == job.GetClusterId():
626 self.jobs_menu.remove(self.job_q_list[j][1])
627 del self.job_q_list[j]
628 return
629
630
631
632
644
649
657
658 - def docupage(self,widget):
659 try:
660 import webbrowser
661 webbrowser.open("http://wiki.icecube.wisc.edu/index.php/IceProd")
662 except Exception,e:
663 logger.debug(e)
664 pass
665
675
677 self.configfile = cfile
678
680 return self.configfile
681
684
685
688
691
694
716
717
718
729
731 try:
732 jobs = [job for job,job_entry in self.job_q_list]
733 cfile = open(cfg,'w');
734 cPickle.dump(jobs,cfile)
735 except Exception,e:
736 logger.warn("could not save cookies: %s" % e)
737
739 try:
740 self.pdb.savefile(expandvars("$HOME/.gtktray-paramdb"))
741 except Exception,e:
742 logger.warn("could not save parameter db: %s" % e)
743
772
774 """
775 Create menubar and add menu items
776 """
777
778 menu_bar = gtk.MenuBar()
779
780 file_menu = gtk.Menu()
781 file_menu.show()
782
783 file_menu_item = gtk.MenuItem("_File")
784 file_menu_item.show()
785 file_menu_item.set_submenu(file_menu)
786 menu_bar.append(file_menu_item)
787
788 edit_menu = gtk.Menu()
789 edit_menu.show()
790 self.edit_menu = edit_menu
791
792 edit_menu_item = gtk.MenuItem("_Edit")
793 edit_menu_item.show()
794 edit_menu_item.set_submenu(edit_menu)
795 menu_bar.append(edit_menu_item)
796
797 addtray_item = gtk.MenuItem("add tray")
798 addtray_item.connect("activate",self.addtray)
799 addtray_item.show()
800 edit_menu.append(addtray_item)
801
802 deltray_item = gtk.MenuItem("remove tray")
803 deltray_item.connect("activate",self.deltray)
804 deltray_item.show()
805 edit_menu.append(deltray_item)
806
807 addof_item = gtk.MenuItem("add filter description")
808 addof_item.connect("activate",self.addof)
809 addof_item.show()
810 edit_menu.append(addof_item)
811
812 delof_item = gtk.MenuItem("remove filter description")
813 delof_item.connect("activate",self.delof)
814 delof_item.show()
815 edit_menu.append(delof_item)
816
817 jobs_menu = gtk.Menu()
818 jobs_menu.show()
819 self.jobs_menu = jobs_menu
820
821 jobs_menu_item = gtk.MenuItem("_Jobs")
822 jobs_menu_item.show()
823 jobs_menu_item.set_submenu(jobs_menu)
824 menu_bar.append(jobs_menu_item)
825 self.LoadCookies()
826
827 tools_menu = gtk.Menu()
828 tools_menu.show()
829 self.tools_menu = tools_menu
830
831 tools_menu_item = gtk.MenuItem("_Tools")
832 tools_menu_item.show()
833 tools_menu_item.set_submenu(tools_menu)
834 menu_bar.append(tools_menu_item)
835
836 help_menu = gtk.Menu()
837 help_menu.show()
838 self.help_menu = help_menu
839
840 help_menu_item = gtk.MenuItem("_Help")
841 help_menu_item.show()
842 help_menu_item.set_submenu(help_menu)
843 menu_bar.append(help_menu_item)
844
845 documentation_item = gtk.MenuItem("IceProd _Documentation")
846 documentation_item.connect("activate",self.docupage)
847 documentation_item.show()
848 help_menu.append(documentation_item)
849
850 open_item = gtk.MenuItem("_Open...")
851 open_item.connect("activate",self.open)
852 open_item.show()
853 file_menu.append(open_item)
854
855 new_item = gtk.MenuItem("_New")
856 new_item.connect("activate",self.new)
857 new_item.show()
858 file_menu.append(new_item)
859
860 close_item = gtk.MenuItem("_Close")
861 close_item.connect("activate",self.close)
862 close_item.show()
863 file_menu.append(close_item)
864
865 download_item = gtk.MenuItem("_Download...")
866 download_item.connect("activate",self.download)
867 download_item.show()
868 file_menu.append(download_item)
869
870 save_item = gtk.MenuItem("_Save")
871 save_item.connect("activate",self.savefile)
872 save_item.show()
873 file_menu.append(save_item)
874
875 saveas_item = gtk.MenuItem("Save _As...")
876 saveas_item.connect("activate",self.saveas)
877 saveas_item.show()
878 file_menu.append(saveas_item)
879
880 submit_item = gtk.MenuItem("Submit _Dataset")
881 submit_item.connect("activate",self.submit_form)
882 submit_item.show()
883 file_menu.append(submit_item)
884
885 run_item = gtk.MenuItem("_Run (local)")
886 run_item.connect("activate",self.run)
887 run_item.show()
888 file_menu.append(run_item)
889
890 quit_item = gtk.MenuItem("_Quit")
891 quit_item.connect("activate",self.delete)
892 quit_item.show()
893 file_menu.append(quit_item)
894
895 clear_jobs_item = gtk.MenuItem("_Clear jobs")
896 clear_jobs_item.connect("activate",self.clear_jobs)
897 clear_jobs_item.show()
898 jobs_menu.append(clear_jobs_item)
899
900 updatedb_item = gtk.MenuItem("_Download Parameter DB...")
901 updatedb_item.connect("activate",self.updatedb)
902 updatedb_item.show()
903 tools_menu.append(updatedb_item)
904
905 loadpdb_item = gtk.MenuItem("_Load Parameter DB File...")
906 loadpdb_item.connect("activate",self.loadpdbfile)
907 loadpdb_item.show()
908 tools_menu.append(loadpdb_item)
909
910 upgrade_item = gtk.MenuItem("_Upgrade Metaprojects...")
911 upgrade_item.connect("activate",self.switchversion)
912 upgrade_item.show()
913 tools_menu.append(upgrade_item)
914
915 drag_item = gtk.CheckMenuItem("_Enable drag & drop")
916 drag_item.connect("activate",self.enable_dragndrop)
917 drag_item.show()
918 tools_menu.append(drag_item)
919
920 return menu_bar
921
924
927
928 - def __init__(self, user=None,prod=False,auth=True):
929 self.steering = None
930 self.dragndrop = False
931 self.configfile = "newconfig.xml"
932 self.host = None
933 self.url = []
934 self.job_q_list = []
935 self._user = user
936 self.prodflag = prod
937 self.test = False
938 self.trays = []
939 self.child_pid = 0
940 self.validatexml = True
941 gtk.gdk.threads_init()
942
943 self.cfg = Config(os.path.join(os.getenv('HOME'),".gtkicetrayrc"))
944 try:
945 self.cfg.Read()
946 except Exception,e:
947 print >> sys.stderr, "Could not find configuration"
948
949 if self.cfg.GetValue('URL'):
950 self.url = self.cfg.GetValue('URL').split(',')
951 else:
952 self.url = []
953 self.pdb = RPCParamDB(geturl=self.geturl)
954 self.pdb.SetPrinter(self.PrintText)
955 self.mywidgets = []
956
957 self.consoletv = gtk.TextView()
958 self.consoletv.set_cursor_visible(False)
959 self.consoletv.set_wrap_mode(gtk.WRAP_NONE)
960 self.consoletv.set_editable(False)
961
962 table = gtk.Table(3,6,False)
963 consolesw = gtk.ScrolledWindow()
964 self.vbox = gtk.VBox(False,0)
965 self.vpane = gtk.VPaned()
966 menu_bar = self.MakeMenu()
967 menu_bar.show()
968 self.vbox.pack_start(menu_bar,False,False,2)
969
970 hbox = gtk.HBox(False,1)
971 self.url_entry = gtk.combo_box_entry_new_text()
972 urlframe = gtk.Frame("URL")
973 for url in self._getprodurl():
974 self.url_entry.append_text(url)
975 self.url_entry.set_active(0)
976
977 urlframe.add(self.url_entry)
978 urlframe.show()
979
980 run_icon = gtk.Image()
981 pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(logo.xpm_image_data)
982 run_icon.set_from_stock(gtk.STOCK_EXECUTE,gtk.ICON_SIZE_SMALL_TOOLBAR)
983
984 run_icon.show()
985 run_button = gtk.Button('',stock=gtk.STOCK_NETWORK)
986
987 run_button.show()
988 run_button.connect("clicked", self.check_server)
989 hbox.pack_start(urlframe,True,True,2)
990 hbox.pack_start(run_button,False,False,2)
991 hbox.show()
992
993 self.url_entry.show()
994 self.vbox.pack_start(hbox,False,False,2)
995
996 self.vbox.pack_end(self.vpane,True,True,2)
997 self.vpane.pack1(table,True,True)
998 self.vpane.pack2(consolesw,True,True)
999 self.vbox.show()
1000 self.vpane.show()
1001
1002 consolesw.set_size_request(100, 140)
1003 consolesw.add(self.consoletv)
1004 consolesw.show()
1005 self.consoletv.show()
1006
1007 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
1008 global instances
1009 instances += 1
1010 window = self.window
1011 window.connect("delete_event", self.delete)
1012 window.set_border_width(10)
1013 window.set_size_request(750, 750)
1014 window.add(self.vbox)
1015 window.set_resizable(True)
1016 window.set_position(gtk.WIN_POS_CENTER_ALWAYS)
1017 window.show()
1018 icon = window.render_icon(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_BUTTON)
1019 pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(logo.xpm_image_data)
1020 window.set_icon(pixbuf)
1021 window.show()
1022
1023
1024 self.notebook = gtk.Notebook()
1025 self.notebook.set_tab_pos(gtk.POS_TOP)
1026 table.attach(self.notebook, 0,6,0,1)
1027 self.notebook.show()
1028 self.show_tabs = True
1029 self.show_border = True
1030 table.show()
1031
1033 self.steering = None
1034 for w in self.mywidgets: del w
1035 self.mywidgets = []
1036 self.trays = []
1037 while self.notebook.get_current_page() >= 0:
1038 self.notebook.remove_page(self.notebook.get_current_page())
1039
1041
1042 self.CloseConfig()
1043 self.steering = steering
1044 label = gtk.Label("Steering")
1045 self.steernote = gtk.Notebook()
1046 self.steernote.show()
1047 self.notebook.append_page(self.steernote, label)
1048
1049 frame = gtk.Frame("Steering")
1050 frame.set_border_width(10)
1051 frame.set_size_request(400, 365)
1052 frame.show()
1053
1054 label = gtk.Label("Parameters")
1055 label.show()
1056 gtksteering = GtkSteering(self.steering)
1057 frame.add(gtksteering)
1058 self.mywidgets.append(gtksteering)
1059 self.steernote.append_page(frame, label)
1060
1061
1062 frame = gtk.Frame("Archive Dependencies")
1063 frame.set_border_width(10)
1064 frame.set_size_request(400, 365)
1065 frame.show()
1066
1067 label = gtk.Label("Dependencies")
1068 label.show()
1069 gtksteerdepend = GtkSteerDepend(self.steering)
1070 frame.add(gtksteerdepend)
1071 self.mywidgets.append(gtksteerdepend)
1072 self.steernote.append_page(frame, label)
1073
1074
1075 frame = gtk.Frame("Batch System Options")
1076 frame.set_border_width(10)
1077 frame.set_size_request(400, 365)
1078 frame.show()
1079
1080 label = gtk.Label("BatchOpts")
1081 label.show()
1082 gtkbatchopts = GtkSteerBatchOpt(self.steering)
1083 frame.add(gtkbatchopts)
1084 self.mywidgets.append(gtkbatchopts)
1085 self.steernote.append_page(frame, label)
1086
1087
1088 frame = gtk.Frame("Externals")
1089 frame.set_border_width(10)
1090 frame.set_size_request(400, 365)
1091 frame.show()
1092 label = gtk.Label("Externals")
1093 label.show()
1094 gtkextern = GtkExtern(self.steering)
1095 frame.add(gtkextern)
1096 self.mywidgets.append(gtkextern)
1097 self.steernote.append_page(frame, label)
1098
1099 if self.steering.GetOF():
1100 self.AddFilterTab(self.steering)
1101
1102 for tray in self.steering.GetTrays():
1103 self.AddTrayTab(tray)
1104
1105
1106 self.notebook.set_current_page(0)
1107
1108
1109 button = gtk.Button("close")
1110 button.connect("clicked", self.delete)
1111 button.show()
1112
1113
1115 """
1116 Add a new icetray configuration tab
1117 @param tray: the new IceTrayConfig object
1118 """
1119
1120 gtktray = GtkIceTray(tray,self.pdb)
1121 gtktray.SetPrinter(self.PrintText)
1122 gtktray.show()
1123 label = gtk.Label()
1124 self.notebook.append_page(gtktray, label)
1125 label.set_text("IceTray[%d]" % len(self.trays) )
1126 label.show()
1127 self.trays.append(gtktray)
1128
1155
1156
1157
1159
1167
1170
1172 for widget in self.mywidgets:
1173 widget.SetPrinter(printer)
1174
1178
1182
1184 gtk.VBox.__init__(self)
1185 self.tray = tray
1186 self.pdb = database
1187 self.mywidgets = []
1188 hbox = gtk.HBox()
1189 self.evententry=EventEntry()
1190 self.evententry.set_text(str(self.tray.GetEvents()))
1191 self.evententry.show()
1192 self.iterentry=EventEntry("Iterations")
1193 self.iterentry.set_reload_function(IceTrayConfig.GetIterations)
1194 self.iterentry.set_text(str(self.tray.GetIterations()))
1195 self.iterentry.show()
1196 hbox.pack_start(self.evententry,False,False,2)
1197 hbox.pack_start(self.iterentry,False,False,2)
1198 hbox.show()
1199
1200 self.pack_start(hbox,False,False,2)
1201
1202 self.notebook = gtk.Notebook()
1203
1204
1205 frame = gtk.Frame("IceProdPre")
1206 frame.set_border_width(10)
1207 frame.set_size_request(400, 365)
1208 frame.show()
1209
1210 label = gtk.Label("IceProdPre")
1211 label.show()
1212 gtkpres = GtkIceProdPre(self.tray,self.pdb)
1213 frame.add(gtkpres)
1214 self.mywidgets.append(gtkpres)
1215 self.notebook.append_page(frame, label)
1216
1217
1218 frame = gtk.Frame("Modules")
1219 frame.set_border_width(10)
1220 frame.set_size_request(400, 365)
1221 frame.show()
1222
1223 label = gtk.Label("Modules")
1224 label.show()
1225 gtkmodules = GtkModules(self.tray,self.pdb)
1226 frame.add(gtkmodules)
1227 self.mywidgets.append(gtkmodules)
1228 self.notebook.append_page(frame, label)
1229
1230
1231 frame = gtk.Frame("Services")
1232 frame.set_border_width(10)
1233 frame.set_size_request(400, 365)
1234 frame.show()
1235
1236 label = gtk.Label("Services")
1237 label.show()
1238 gtkservices = GtkServices(self.tray,self.pdb)
1239 frame.add(gtkservices)
1240 self.mywidgets.append(gtkservices)
1241 self.notebook.append_page(frame, label)
1242
1243
1244 frame = gtk.Frame("IceProdPost")
1245 frame.set_border_width(10)
1246 frame.set_size_request(400, 365)
1247 frame.show()
1248
1249 label = gtk.Label("IceProdPost")
1250 label.show()
1251 gtkposts = GtkIceProdPost(self.tray,self.pdb)
1252 frame.add(gtkposts)
1253 self.mywidgets.append(gtkposts)
1254 self.notebook.append_page(frame, label)
1255
1256
1257
1258 vbox = gtk.VBox()
1259 frame = gtk.Frame()
1260 frame.set_border_width(10)
1261 frame.set_size_request(500, 365)
1262 frame.show()
1263
1264 gtkprojects = GtkProjects(tray,self.pdb)
1265 self.mywidgets.append(gtkprojects)
1266
1267 tab = gtkTab("Projects")
1268 tab.connect('button_press_event',self.reload_widget,gtkprojects)
1269 tab.show()
1270 self.notebook.append_page(gtkprojects, tab)
1271 self.pack_start(self.notebook,False,False,2)
1272 self.notebook.show()
1273
1274 self.notebook.set_current_page(1)
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1293
1295 gtk.EventBox.__init__(self)
1296 self.set_events(gtk.gdk.BUTTON_PRESS_MASK)
1297 self.label = gtk.Label(label_text)
1298 self.add(self.label)
1299
1303
1304
1305 -class EventEntry(gtk.Frame):
1306
1307 - def __init__(self,title="Events"):
1308 gtk.Frame.__init__(self,title)
1309 self.evententry = gtk.Entry()
1310 self.add(self.evententry)
1311 self.reload_func = IceTrayConfig.GetEvents
1312
1313 - def set_reload_function(self,func):
1314 self.reload_func = func
1315
1316 - def reload(self,tray):
1317 self.evententry.set_text(str(self.reload_func(tray)))
1318
1320 gtk.Frame.show(self)
1321 self.evententry.show()
1322
1323 - def get_text(self):
1324 return self.evententry.get_text()
1325
1326 - def set_text(self,txt):
1327 self.evententry.set_text(str(txt))
1328
1330 GtkConfig()
1331 return 0
1332
1333 if __name__ == "__main__":
1334 main()
1335