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