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
38
39 MENU_FILE_NEW = wx.NewId()
40 MENU_FILE_CLOSE = wx.NewId()
41 MENU_FILE_CLOSE_ALL = wx.NewId()
42 MENU_FILE_CWD = wx.NewId()
43 MENU_FILE_OPEN = wx.NewId()
44 MENU_FILE_SAVE = wx.NewId()
45 MENU_FILE_SAVE_AS = wx.NewId()
46 MENU_FILE_EXPORT_BMRB = wx.NewId()
47 MENU_FILE_EXIT = wx.NewId()
48 MENU_VIEW_CONTROLLER = wx.NewId()
49 MENU_VIEW_SPIN_VIEW = wx.NewId()
50 MENU_VIEW_RESULTS = wx.NewId()
51 MENU_VIEW_PIPE_EDIT = wx.NewId()
52 MENU_VIEW_PROMPT = wx.NewId()
53 MENU_TOOLS_FORMAT = wx.NewId()
54 MENU_TOOLS_TEST_SUITE = wx.NewId()
55 MENU_TOOLS_TEST_SUITE_ALL = wx.NewId()
56 MENU_TOOLS_TEST_SUITE_SYS = wx.NewId()
57 MENU_TOOLS_TEST_SUITE_UNIT = wx.NewId()
58 MENU_TOOLS_TEST_SUITE_GUI = wx.NewId()
59 MENU_TOOLS_TEST_SUITE_VERIFICATION = wx.NewId()
60 MENU_TOOLS_SYS_INFO = wx.NewId()
61 MENU_HELP_MANUAL = wx.NewId()
62 MENU_HELP_MAIL = wx.NewId()
63 MENU_HELP_REFS = wx.NewId()
64 MENU_HELP_GPL = wx.NewId()
65 MENU_HELP_ABOUT = wx.NewId()
66
67
69 """The menu bar GUI class."""
70
72 """Build the menu bar."""
73
74
75 self.gui = gui
76
77
78 self.menubar = wx.MenuBar()
79
80
81 menu = wx.Menu()
82 menu.AppendItem(build_menu_item(menu, id=MENU_FILE_NEW, text="&New analysis\tCtrl+N", icon=fetch_icon('oxygen.actions.document-new', "16x16")))
83 menu.AppendItem(build_menu_item(menu, id=MENU_FILE_CLOSE, text="&Close analysis", icon=fetch_icon('oxygen.actions.document-close', "16x16")))
84 menu.AppendItem(build_menu_item(menu, id=MENU_FILE_CLOSE_ALL, text="&Close all analyses", icon=fetch_icon('oxygen.actions.dialog-close', "16x16")))
85 menu.AppendSeparator()
86 menu.AppendItem(build_menu_item(menu, id=MENU_FILE_CWD, text="&Change directory\tCtrl+W", icon=fetch_icon('oxygen.places.folder-favorites', "16x16")))
87 menu.AppendItem(build_menu_item(menu, id=MENU_FILE_OPEN, text="&Open relax state\tCtrl+O", icon=fetch_icon('oxygen.actions.document-open', "16x16")))
88 menu.AppendItem(build_menu_item(menu, id=MENU_FILE_SAVE, text="S&ave relax state\tCtrl+S", icon=fetch_icon('oxygen.actions.document-save', "16x16")))
89 menu.AppendItem(build_menu_item(menu, id=MENU_FILE_SAVE_AS, text="Save as...\tCtrl+Shift+S", icon=fetch_icon('oxygen.actions.document-save-as', "16x16")))
90 menu.AppendSeparator()
91 menu.AppendItem(build_menu_item(menu, id=MENU_FILE_EXPORT_BMRB, text="Export for BMRB deposition", icon=fetch_icon('relax.bmrb')))
92 menu.AppendSeparator()
93 menu.AppendItem(build_menu_item(menu, id=MENU_FILE_EXIT, text="E&xit\tCtrl+Q", icon=fetch_icon('oxygen.actions.system-shutdown', "16x16")))
94 self.menubar.Append(menu, "&File")
95
96
97 self.gui.Bind(wx.EVT_MENU, self.gui.analysis.menu_new, id=MENU_FILE_NEW)
98 self.gui.Bind(wx.EVT_MENU, self.gui.analysis.menu_close, id=MENU_FILE_CLOSE)
99 self.gui.Bind(wx.EVT_MENU, self.gui.analysis.menu_close_all, id=MENU_FILE_CLOSE_ALL)
100 self.gui.Bind(wx.EVT_MENU, self.gui.system_cwd, id=MENU_FILE_CWD)
101 self.gui.Bind(wx.EVT_MENU, self.gui.state_load, id=MENU_FILE_OPEN)
102 self.gui.Bind(wx.EVT_MENU, self.gui.action_state_save, id=MENU_FILE_SAVE)
103 self.gui.Bind(wx.EVT_MENU, self.gui.action_state_save_as, id=MENU_FILE_SAVE_AS)
104 self.gui.Bind(wx.EVT_MENU, self.gui.action_export_bmrb, id=MENU_FILE_EXPORT_BMRB)
105 self.gui.Bind(wx.EVT_MENU, self.gui.exit_gui, id=MENU_FILE_EXIT)
106
107
108 menu = wx.Menu()
109 menu.AppendItem(build_menu_item(menu, id=MENU_VIEW_CONTROLLER, text="&Controller\tCtrl+Z", icon=fetch_icon('oxygen.apps.preferences-system-performance', "16x16")))
110 menu.AppendItem(build_menu_item(menu, id=MENU_VIEW_SPIN_VIEW, text="&Spin viewer\tCtrl+T", icon=fetch_icon('relax.spin', "16x16")))
111 menu.AppendItem(build_menu_item(menu, id=MENU_VIEW_RESULTS, text="&Results viewer\tCtrl+R", icon=fetch_icon('oxygen.actions.view-statistics', "16x16")))
112 menu.AppendItem(build_menu_item(menu, id=MENU_VIEW_PIPE_EDIT, text="&Data pipe editor\tCtrl+D", icon=fetch_icon('relax.pipe', "16x16")))
113 menu.AppendItem(build_menu_item(menu, id=MENU_VIEW_PROMPT, text="relax &prompt\tCtrl+P", icon=fetch_icon('oxygen.mimetypes.application-x-executable-script', "16x16")))
114 self.menubar.Append(menu, "&View")
115
116
117 self.gui.Bind(wx.EVT_MENU, self.gui.show_controller, id=MENU_VIEW_CONTROLLER)
118 self.gui.Bind(wx.EVT_MENU, self.gui.show_prompt, id=MENU_VIEW_PROMPT)
119 self.gui.Bind(wx.EVT_MENU, self.gui.show_tree, id=MENU_VIEW_SPIN_VIEW)
120 self.gui.Bind(wx.EVT_MENU, self.gui.show_results_viewer, id=MENU_VIEW_RESULTS)
121 self.gui.Bind(wx.EVT_MENU, self.gui.show_pipe_editor, id=MENU_VIEW_PIPE_EDIT)
122
123
124 self.menu_uf_ids = build_uf_menus(parent=self.gui, menubar=self.menubar)
125
126
127 menu = wx.Menu()
128 menu.AppendItem(build_menu_item(menu, id=MENU_TOOLS_FORMAT, text="&Free file format settings", icon=fetch_icon('oxygen.actions.document-properties', "16x16")))
129 menu.AppendItem(build_menu_item(menu, id=MENU_TOOLS_SYS_INFO, text="System &information", icon=fetch_icon('oxygen.actions.help-about', "16x16")))
130
131
132 test_suite_item = build_menu_item(menu, id=MENU_TOOLS_TEST_SUITE, text="&Test suite", icon=fetch_icon('oxygen.mimetypes.application-x-desktop', "16x16"))
133 sub_menu = wx.Menu()
134 test_suite_item.SetSubMenu(sub_menu)
135 sub_menu.AppendItem(build_menu_item(sub_menu, id=MENU_TOOLS_TEST_SUITE_ALL, text="&Full test suite", icon=fetch_icon('oxygen.mimetypes.application-x-desktop', "16x16")))
136 sub_menu.AppendSeparator()
137 sub_menu.AppendItem(build_menu_item(sub_menu, id=MENU_TOOLS_TEST_SUITE_SYS, text="&System tests", icon=fetch_icon('oxygen.mimetypes.application-x-desktop', "16x16")))
138 sub_menu.AppendItem(build_menu_item(sub_menu, id=MENU_TOOLS_TEST_SUITE_UNIT, text="&Unit tests", icon=fetch_icon('oxygen.mimetypes.application-x-desktop', "16x16")))
139 sub_menu.AppendItem(build_menu_item(sub_menu, id=MENU_TOOLS_TEST_SUITE_GUI, text="&GUI tests", icon=fetch_icon('oxygen.mimetypes.application-x-desktop', "16x16")))
140 sub_menu.AppendItem(build_menu_item(sub_menu, id=MENU_TOOLS_TEST_SUITE_VERIFICATION, text="&Verification tests", icon=fetch_icon('oxygen.mimetypes.application-x-desktop', "16x16")))
141 menu.AppendItem(test_suite_item)
142 self.menubar.Append(menu, "&Tools")
143
144
145 self.gui.Bind(wx.EVT_MENU, self.gui.free_file_format_settings, id=MENU_TOOLS_FORMAT)
146 self.gui.Bind(wx.EVT_MENU, self._sys_info, id=MENU_TOOLS_SYS_INFO)
147 self.gui.Bind(wx.EVT_MENU, self.gui.run_test_suite, id=MENU_TOOLS_TEST_SUITE_ALL)
148 self.gui.Bind(wx.EVT_MENU, self.gui.run_test_suite_sys, id=MENU_TOOLS_TEST_SUITE_SYS)
149 self.gui.Bind(wx.EVT_MENU, self.gui.run_test_suite_unit, id=MENU_TOOLS_TEST_SUITE_UNIT)
150 self.gui.Bind(wx.EVT_MENU, self.gui.run_test_suite_gui, id=MENU_TOOLS_TEST_SUITE_GUI)
151 self.gui.Bind(wx.EVT_MENU, self.gui.run_test_suite_verification, id=MENU_TOOLS_TEST_SUITE_VERIFICATION)
152
153
154 menu = wx.Menu()
155 menu.AppendItem(build_menu_item(menu, id=MENU_HELP_MANUAL, text="relax user &manual\tF1", icon=fetch_icon('oxygen.mimetypes.application-pdf', "16x16")))
156 menu.AppendSeparator()
157 menu.AppendItem(build_menu_item(menu, id=MENU_HELP_MAIL, text="Mailing list &contact (relax-users@gna.org)", icon=fetch_icon('oxygen.actions.mail-mark-unread-new', "16x16")))
158 menu.AppendItem(build_menu_item(menu, id=MENU_HELP_REFS, text="&References", icon=fetch_icon('oxygen.actions.flag-blue', "16x16")))
159 menu.AppendSeparator()
160 menu.AppendItem(build_menu_item(menu, id=MENU_HELP_GPL, text="&Licence", icon=fetch_icon('relax.gnu-head-mini', "16x16")))
161 menu.AppendSeparator()
162 menu.AppendItem(build_menu_item(menu, id=MENU_HELP_ABOUT, text="About rela&x", icon=fetch_icon("relax.relax")))
163 self.menubar.Append(menu, "&Help")
164
165
166 self.gui.Bind(wx.EVT_MENU, self.gui.relax_manual, id=MENU_HELP_MANUAL)
167 self.gui.Bind(wx.EVT_MENU, self.gui.contact_relax, id=MENU_HELP_MAIL)
168 self.gui.Bind(wx.EVT_MENU, self.gui.references, id=MENU_HELP_REFS)
169 self.gui.Bind(wx.EVT_MENU, self._licence, id=MENU_HELP_GPL)
170 self.gui.Bind(wx.EVT_MENU, self.gui.about_relax, id=MENU_HELP_ABOUT)
171
172
173 if status.show_gui:
174 self.gui.SetMenuBar(self.menubar)
175
176
177 self.gui.Bind(wx.EVT_MENU_OPEN, self.update_menus)
178
179
181 """Build the menu."""
182
183
184 for item in entries:
185
186 menu_item = build_menu_item(menu, id=item[0], text=item[1], icon=item[2])
187
188
189 if len(item[4]):
190
191 sub_menu = wx.Menu()
192
193
194 for sub_item in item[4]:
195
196 sub_menu_item = build_menu_item(sub_menu, id=sub_item[0], text=sub_item[1], icon=sub_item[2])
197 sub_menu.AppendItem(sub_menu_item)
198
199
200 self.gui.Bind(wx.EVT_MENU, sub_item[3], id=sub_item[0])
201
202
203 menu_item.SetSubMenu(sub_menu)
204
205
206 else:
207
208 self.gui.Bind(wx.EVT_MENU, item[3], id=item[0])
209
210
211 menu.AppendItem(menu_item)
212
213
215 """Show the GPL licence.
216
217 @param event: The wx event.
218 @type event: wx event
219 """
220
221
222 file = open('docs/COPYING')
223 for line in file.readlines():
224 sys.stdout.write(line)
225 sys.stdout.flush()
226
227
228 self.gui.show_controller(event)
229
230
232 """Show the full system information using the sys_info user function.
233
234 @param event: The wx event.
235 @type event: wx event
236 """
237
238
239 uf_store['system.sys_info']()
240
241
243 """Update the menus dependent on the relax state.
244
245 @param event: The wx event.
246 @type event: wx event
247 """
248
249
250 status = Status()
251
252
253 enable = False
254 if not status.exec_lock.locked():
255 enable = True
256
257
258 self.menubar.Enable(MENU_FILE_NEW, enable)
259 self.menubar.Enable(MENU_FILE_CLOSE, enable)
260 self.menubar.Enable(MENU_FILE_CLOSE_ALL, enable)
261 self.menubar.Enable(MENU_FILE_CWD, enable)
262 self.menubar.Enable(MENU_FILE_OPEN, enable)
263 self.menubar.Enable(MENU_FILE_SAVE, enable)
264 self.menubar.Enable(MENU_FILE_SAVE_AS, enable)
265 self.menubar.Enable(MENU_FILE_EXPORT_BMRB, enable)
266 self.menubar.Enable(MENU_TOOLS_FORMAT, enable)
267 self.menubar.Enable(MENU_TOOLS_TEST_SUITE, enable)
268 self.menubar.Enable(MENU_TOOLS_SYS_INFO, enable)
269
270
271 self.menubar.Enable(MENU_VIEW_PROMPT, enable)
272
273
274 for id in self.menu_uf_ids:
275
276 menu = self.menubar.GetMenu(id)
277 for item in menu.GetMenuItems():
278
279 item.Enable(enable)
280
281
282 submenu = item.GetSubMenu()
283 if submenu:
284 for subitem in submenu.GetMenuItems():
285 subitem.Enable(enable)
286