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 value user function GUI elements."""
25
26
27 from os import sep
28
29
30 from generic_fns import pipes
31 from relax_errors import RelaxError, RelaxImplementError, RelaxNoPipeError
32 import specific_fns
33
34
35 from base import UF_base, UF_page
36 from gui.errors import gui_raise
37 from gui.misc import gui_to_str, str_to_gui
38 from gui.paths import WIZARD_IMAGE_PATH
39
40
41
43 """The container class for holding all GUI elements."""
44
45 - def set(self, param=None):
46 """The value.set user function.
47
48 @keyword param: The starting parameter.
49 @type param: str
50 """
51
52
53 wizard, page = self.create_wizard(size_x=1000, size_y=800, name='value.set', uf_page=Set_page, return_page=True)
54
55
56 page.set_param(param)
57
58
59 wizard.run()
60
61
62
63 -class Set_page(UF_page):
64 """The value.set() user function page."""
65
66
67 image_path = WIZARD_IMAGE_PATH + 'value' + sep + 'value.png'
68 uf_path = ['value', 'set']
69 height_desc = 400
70
71 - def add_contents(self, sizer):
72 """Add the sequence specific GUI elements.
73
74 @param sizer: A sizer object.
75 @type sizer: wx.Sizer instance
76 """
77
78
79 self.param = self.combo_box(sizer, "The parameter:", tooltip=self.uf._doc_args_dict['param'], evt_fn=self.set_default_value)
80 self.update_parameters()
81
82
83 self.val = self.input_field(sizer, "The value:", tooltip=self.uf._doc_args_dict['val'])
84
85
86 self.spin_id = self.spin_id_element(sizer, "Restrict value setting to certain spins:")
87
88
89 - def on_execute(self):
90 """Execute the user function."""
91
92
93 param = self.param.GetClientData(self.param.GetSelection())
94
95
96 val_str = gui_to_str(self.val.GetValue())
97 val_type = self.data_type(param)
98
99
100 if val_type in [float, int]:
101 fn = eval
102 else:
103 fn = val_type
104
105
106 try:
107 val = fn(val_str)
108 except (ValueError, NameError):
109 gui_raise(RelaxError("The value '%s' should be of the type %s." % (val_str, val_type)), raise_flag=False)
110 return
111
112
113 spin_id = gui_to_str(self.spin_id.GetValue())
114
115
116 self.execute('value.set', val=val, param=param, spin_id=spin_id)
117
118
119 - def set_default_value(self, event=None):
120 """Set the value to the default once a parameter is selected.
121
122 @param event: The wx event.
123 @type event: wx event
124 """
125
126
127 param = self.param.GetClientData(self.param.GetSelection())
128
129
130 self.val.Clear()
131
132
133 if param == '':
134 return
135
136
137 default_value = specific_fns.setup.get_specific_fn('default_value', cdp.pipe_type, raise_error=False)
138 value = default_value(param)
139
140
141 if value != None:
142 self.val.SetValue(str_to_gui(str(value)))
143
144
145 - def set_param(self, param):
146 """Set the selection to the given parameter.
147
148 @keyword param: The starting parameter.
149 @type param: str
150 """
151
152
153 if param == None:
154 return
155
156
157 for i in range(self.param.GetCount()):
158 if param == self.param.GetClientData(i):
159 self.param.SetSelection(i)
160
161
162 self.set_default_value()
163
164
166 """Fill out the list of parameters and their descriptions."""
167
168
169 if cdp == None:
170 gui_raise(RelaxNoPipeError())
171 self.setup_fail = True
172 return
173
174
175 data_names = specific_fns.setup.get_specific_fn('data_names', cdp.pipe_type, raise_error=False)
176 self.data_type = specific_fns.setup.get_specific_fn('data_type', cdp.pipe_type, raise_error=False)
177 return_data_desc = specific_fns.setup.get_specific_fn('return_data_desc', cdp.pipe_type, raise_error=False)
178
179
180 try:
181 names = data_names(set='params')
182 except RelaxImplementError:
183 gui_raise(RelaxImplementError())
184 self.setup_fail = True
185 return
186
187
188 self.param.Clear()
189
190
191 for name in (data_names(set='params') + data_names(set='generic')):
192
193 desc = return_data_desc(name)
194
195
196 if not desc:
197 text = name
198
199
200 else:
201 text = "'%s': %s" % (name, desc)
202
203
204 self.param.Append(str_to_gui(text), name)
205