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