1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15   
 16   
 17   
 18   
 19   
 20   
 21   
 22   
 23   
 24  """The main relax menu bar.""" 
 25   
 26   
 27  import sys 
 28  import wx 
 29   
 30   
 31  from graphics import fetch_icon 
 32  from gui.components.menu import build_menu_item 
 33  from gui.uf_objects import build_uf_menus, Uf_storage; uf_store = Uf_storage() 
 34  from status import Status; status = Status() 
 35  from user_functions.data import Uf_info; uf_info = Uf_info() 
 36   
 37   
 39      """The menu bar GUI class.""" 
 40   
 41       
 42      MENU_FILE_NEW = wx.NewId() 
 43      MENU_FILE_CLOSE = wx.NewId() 
 44      MENU_FILE_CLOSE_ALL = wx.NewId() 
 45      MENU_FILE_OPEN = wx.NewId() 
 46      MENU_FILE_SAVE = wx.NewId() 
 47      MENU_FILE_SAVE_AS = wx.NewId() 
 48      MENU_FILE_EXPORT_BMRB = wx.NewId() 
 49      MENU_FILE_EXIT = wx.NewId() 
 50      MENU_VIEW_CONTROLLER = wx.NewId() 
 51      MENU_VIEW_SPIN_VIEW = wx.NewId() 
 52      MENU_VIEW_RESULTS = wx.NewId() 
 53      MENU_VIEW_PIPE_EDIT = wx.NewId() 
 54      MENU_VIEW_PROMPT = wx.NewId() 
 55      MENU_TOOLS_FORMAT = wx.NewId() 
 56      MENU_TOOLS_TEST_SUITE = wx.NewId() 
 57      MENU_TOOLS_TEST_SUITE_ALL = wx.NewId() 
 58      MENU_TOOLS_TEST_SUITE_SYS = wx.NewId() 
 59      MENU_TOOLS_TEST_SUITE_UNIT = wx.NewId() 
 60      MENU_TOOLS_TEST_SUITE_GUI = wx.NewId() 
 61      MENU_TOOLS_SYS_INFO = wx.NewId() 
 62      MENU_HELP_MANUAL = wx.NewId() 
 63      MENU_HELP_MAIL = wx.NewId() 
 64      MENU_HELP_REFS = wx.NewId() 
 65      MENU_HELP_GPL = wx.NewId() 
 66      MENU_HELP_ABOUT = wx.NewId() 
 67   
 69          """Build the menu bar.""" 
 70   
 71           
 72          self.gui = gui 
 73   
 74           
 75          self.menubar = wx.MenuBar() 
 76   
 77           
 78          menu = wx.Menu() 
 79          menu.AppendItem(build_menu_item(menu, id=self.MENU_FILE_NEW, text="&New analysis\tCtrl+N", icon=fetch_icon('oxygen.actions.document-new', "16x16"))) 
 80          menu.AppendItem(build_menu_item(menu, id=self.MENU_FILE_CLOSE, text="&Close analysis", icon=fetch_icon('oxygen.actions.document-close', "16x16"))) 
 81          menu.AppendItem(build_menu_item(menu, id=self.MENU_FILE_CLOSE_ALL, text="&Close all analyses", icon=fetch_icon('oxygen.actions.dialog-close', "16x16"))) 
 82          menu.AppendSeparator() 
 83          menu.AppendItem(build_menu_item(menu, id=self.MENU_FILE_OPEN, text="&Open relax state\tCtrl+O", icon=fetch_icon('oxygen.actions.document-open', "16x16"))) 
 84          menu.AppendItem(build_menu_item(menu, id=self.MENU_FILE_SAVE, text="S&ave relax state\tCtrl+S", icon=fetch_icon('oxygen.actions.document-save', "16x16"))) 
 85          menu.AppendItem(build_menu_item(menu, id=self.MENU_FILE_SAVE_AS, text="Save as...\tCtrl+Shift+S", icon=fetch_icon('oxygen.actions.document-save-as', "16x16"))) 
 86          menu.AppendSeparator() 
 87          menu.AppendItem(build_menu_item(menu, id=self.MENU_FILE_EXPORT_BMRB, text="Export for BMRB deposition", icon=fetch_icon('relax.bmrb'))) 
 88          menu.AppendSeparator() 
 89          menu.AppendItem(build_menu_item(menu, id=self.MENU_FILE_EXIT, text="E&xit\tCtrl+Q", icon=fetch_icon('oxygen.actions.system-shutdown', "16x16"))) 
 90          self.menubar.Append(menu, "&File") 
 91   
 92           
 93          self.gui.Bind(wx.EVT_MENU, self.gui.analysis.menu_new, id=self.MENU_FILE_NEW) 
 94          self.gui.Bind(wx.EVT_MENU, self.gui.analysis.menu_close, id=self.MENU_FILE_CLOSE) 
 95          self.gui.Bind(wx.EVT_MENU, self.gui.analysis.menu_close_all, id=self.MENU_FILE_CLOSE_ALL) 
 96          self.gui.Bind(wx.EVT_MENU, self.gui.state_load, id=self.MENU_FILE_OPEN) 
 97          self.gui.Bind(wx.EVT_MENU, self.gui.action_state_save, id=self.MENU_FILE_SAVE) 
 98          self.gui.Bind(wx.EVT_MENU, self.gui.action_state_save_as, id=self.MENU_FILE_SAVE_AS) 
 99          self.gui.Bind(wx.EVT_MENU, self.gui.action_export_bmrb, id=self.MENU_FILE_EXPORT_BMRB) 
100          self.gui.Bind(wx.EVT_MENU, self.gui.exit_gui, id=self.MENU_FILE_EXIT) 
101   
102           
103          menu = wx.Menu() 
104          menu.AppendItem(build_menu_item(menu, id=self.MENU_VIEW_CONTROLLER, text="&Controller\tCtrl+Z", icon=fetch_icon('oxygen.apps.preferences-system-performance', "16x16"))) 
105          menu.AppendItem(build_menu_item(menu, id=self.MENU_VIEW_SPIN_VIEW, text="&Spin viewer\tCtrl+T", icon=fetch_icon('relax.spin', "16x16"))) 
106          menu.AppendItem(build_menu_item(menu, id=self.MENU_VIEW_RESULTS, text="&Results viewer\tCtrl+R", icon=fetch_icon('oxygen.actions.view-statistics', "16x16"))) 
107          menu.AppendItem(build_menu_item(menu, id=self.MENU_VIEW_PIPE_EDIT, text="&Data pipe editor\tCtrl+D", icon=fetch_icon('relax.pipe', "16x16"))) 
108          menu.AppendItem(build_menu_item(menu, id=self.MENU_VIEW_PROMPT, text="relax &prompt\tCtrl+P", icon=fetch_icon('oxygen.mimetypes.application-x-executable-script', "16x16"))) 
109          self.menubar.Append(menu, "&View") 
110   
111           
112          self.gui.Bind(wx.EVT_MENU, self.gui.show_controller, id=self.MENU_VIEW_CONTROLLER) 
113          self.gui.Bind(wx.EVT_MENU, self.gui.show_prompt, id=self.MENU_VIEW_PROMPT) 
114          self.gui.Bind(wx.EVT_MENU, self.gui.show_tree, id=self.MENU_VIEW_SPIN_VIEW) 
115          self.gui.Bind(wx.EVT_MENU, self.gui.show_results_viewer, id=self.MENU_VIEW_RESULTS) 
116          self.gui.Bind(wx.EVT_MENU, self.gui.show_pipe_editor, id=self.MENU_VIEW_PIPE_EDIT) 
117   
118           
119          self.menu_uf_ids = build_uf_menus(parent=self.gui, menubar=self.menubar) 
120   
121           
122          menu = wx.Menu() 
123          menu.AppendItem(build_menu_item(menu, id=self.MENU_TOOLS_FORMAT, text="&Free file format settings", icon=fetch_icon('oxygen.actions.document-properties', "16x16"))) 
124          menu.AppendItem(build_menu_item(menu, id=self.MENU_TOOLS_SYS_INFO, text="System &information", icon=fetch_icon('oxygen.actions.help-about', "16x16"))) 
125   
126           
127          test_suite_item = build_menu_item(menu, id=self.MENU_TOOLS_TEST_SUITE, text="&Test suite", icon=fetch_icon('oxygen.mimetypes.application-x-desktop', "16x16")) 
128          sub_menu = wx.Menu() 
129          test_suite_item.SetSubMenu(sub_menu) 
130          sub_menu.AppendItem(build_menu_item(sub_menu, id=self.MENU_TOOLS_TEST_SUITE_ALL, text="&Full test suite", icon=fetch_icon('oxygen.mimetypes.application-x-desktop', "16x16"))) 
131          sub_menu.AppendSeparator() 
132          sub_menu.AppendItem(build_menu_item(sub_menu, id=self.MENU_TOOLS_TEST_SUITE_SYS, text="&System tests", icon=fetch_icon('oxygen.mimetypes.application-x-desktop', "16x16"))) 
133          sub_menu.AppendItem(build_menu_item(sub_menu, id=self.MENU_TOOLS_TEST_SUITE_UNIT, text="&Unit tests", icon=fetch_icon('oxygen.mimetypes.application-x-desktop', "16x16"))) 
134          sub_menu.AppendItem(build_menu_item(sub_menu, id=self.MENU_TOOLS_TEST_SUITE_GUI, text="&GUI tests", icon=fetch_icon('oxygen.mimetypes.application-x-desktop', "16x16"))) 
135          menu.AppendItem(test_suite_item) 
136          self.menubar.Append(menu, "&Tools") 
137   
138           
139          self.gui.Bind(wx.EVT_MENU, self.gui.free_file_format_settings, id=self.MENU_TOOLS_FORMAT) 
140          self.gui.Bind(wx.EVT_MENU, self._sys_info, id=self.MENU_TOOLS_SYS_INFO) 
141          self.gui.Bind(wx.EVT_MENU, self.gui.run_test_suite, id=self.MENU_TOOLS_TEST_SUITE_ALL) 
142          self.gui.Bind(wx.EVT_MENU, self.gui.run_test_suite_sys, id=self.MENU_TOOLS_TEST_SUITE_SYS) 
143          self.gui.Bind(wx.EVT_MENU, self.gui.run_test_suite_unit, id=self.MENU_TOOLS_TEST_SUITE_UNIT) 
144          self.gui.Bind(wx.EVT_MENU, self.gui.run_test_suite_gui, id=self.MENU_TOOLS_TEST_SUITE_GUI) 
145   
146           
147          menu = wx.Menu() 
148          menu.AppendItem(build_menu_item(menu, id=self.MENU_HELP_MANUAL, text="relax user &manual\tF1", icon=fetch_icon('oxygen.mimetypes.application-pdf', "16x16"))) 
149          menu.AppendSeparator() 
150          menu.AppendItem(build_menu_item(menu, id=self.MENU_HELP_MAIL, text="Mailing list &contact (relax-users@gna.org)", icon=fetch_icon('oxygen.actions.mail-mark-unread-new', "16x16"))) 
151          menu.AppendItem(build_menu_item(menu, id=self.MENU_HELP_REFS, text="&References", icon=fetch_icon('oxygen.actions.flag-blue', "16x16"))) 
152          menu.AppendSeparator() 
153          menu.AppendItem(build_menu_item(menu, id=self.MENU_HELP_GPL, text="&Licence", icon=fetch_icon('relax.gnu-head-mini', "16x16"))) 
154          menu.AppendSeparator() 
155          menu.AppendItem(build_menu_item(menu, id=self.MENU_HELP_ABOUT, text="About rela&x", icon=fetch_icon("relax.relax"))) 
156          self.menubar.Append(menu, "&Help") 
157   
158           
159          self.gui.Bind(wx.EVT_MENU, self.gui.relax_manual, id=self.MENU_HELP_MANUAL) 
160          self.gui.Bind(wx.EVT_MENU, self.gui.contact_relax, id=self.MENU_HELP_MAIL) 
161          self.gui.Bind(wx.EVT_MENU, self.gui.references, id=self.MENU_HELP_REFS) 
162          self.gui.Bind(wx.EVT_MENU, self._licence, id=self.MENU_HELP_GPL) 
163          self.gui.Bind(wx.EVT_MENU, self.gui.about_relax, id=self.MENU_HELP_ABOUT) 
164   
165           
166          if status.show_gui: 
167              self.gui.SetMenuBar(self.menubar) 
168   
169           
170          self.gui.Bind(wx.EVT_MENU_OPEN, self.update_menus) 
 171   
172   
174          """Build the menu.""" 
175   
176           
177          for item in entries: 
178               
179              menu_item = build_menu_item(menu, id=item[0], text=item[1], icon=item[2]) 
180   
181               
182              if len(item[4]): 
183                   
184                  sub_menu = wx.Menu() 
185   
186                   
187                  for sub_item in item[4]: 
188                       
189                      sub_menu_item = build_menu_item(sub_menu, id=sub_item[0], text=sub_item[1], icon=sub_item[2]) 
190                      sub_menu.AppendItem(sub_menu_item) 
191   
192                       
193                      self.gui.Bind(wx.EVT_MENU, sub_item[3], id=sub_item[0]) 
194   
195                   
196                  menu_item.SetSubMenu(sub_menu) 
197   
198               
199              else: 
200                   
201                  self.gui.Bind(wx.EVT_MENU, item[3], id=item[0]) 
202   
203               
204              menu.AppendItem(menu_item) 
 205   
206   
208          """Show the GPL licence. 
209   
210          @param event:   The wx event. 
211          @type event:    wx event 
212          """ 
213   
214           
215          file = open('docs/COPYING') 
216          for line in file.readlines(): 
217              sys.stdout.write(line) 
218   
219           
220          self.gui.show_controller(event) 
 221   
222   
224          """Show the full system information using the sys_info user function. 
225   
226          @param event:   The wx event. 
227          @type event:    wx event 
228          """ 
229   
230           
231          uf_store['sys_info']() 
 232   
233   
 273