- Timestamp:
- Apr 28, 2015 11:28:12 AM (10 years ago)
- Branches:
- master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- f85875a
- Parents:
- b78707b0 (diff), 5265420 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Location:
- src/sas
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/data_util/calcthread.py
r79492222 r373d4ee 84 84 should be implemented vary from framework to framework. 85 85 86 For wx, something like the following is needed: ::86 For wx, something like the following is needed:: 87 87 88 88 import wx, wx.lib.newevent -
src/sas/guiframe/plugin_base.py
r0fa825c r373d4ee 13 13 ################################################################################ 14 14 15 class PluginBase :15 class PluginBase(object): 16 16 """ 17 17 This class defines the interface for a Plugin class … … 36 36 def __init__(self, name="Test_plugin", standalone=True): 37 37 """ 38 38 Abstract class for gui_manager Plugins. 39 39 """ 40 40 # Define if the plugin is local to Viewerframe and always active -
src/sas/perspectives/fitting/basepage.py
racf8e4a5 r373d4ee 398 398 batch_menu.Enable(self.batch_on and flag) 399 399 400 class ModelTextCtrl(wx.TextCtrl):401 """402 Text control for model and fit parameters.403 Binds the appropriate events for user interactions.404 Default callback methods can be overwritten on initialization405 406 :param kill_focus_callback: callback method for EVT_KILL_FOCUS event407 :param set_focus_callback: callback method for EVT_SET_FOCUS event408 :param mouse_up_callback: callback method for EVT_LEFT_UP event409 :param text_enter_callback: callback method for EVT_TEXT_ENTER event410 411 """412 ## Set to True when the mouse is clicked while whole string is selected413 full_selection = False414 ## Call back for EVT_SET_FOCUS events415 _on_set_focus_callback = None416 417 def __init__(self, parent, id=-1,418 value=wx.EmptyString,419 pos=wx.DefaultPosition,420 size=wx.DefaultSize,421 style=0,422 validator=wx.DefaultValidator,423 name=wx.TextCtrlNameStr,424 kill_focus_callback=None,425 set_focus_callback=None,426 mouse_up_callback=None,427 text_enter_callback=None):428 429 wx.TextCtrl.__init__(self, parent, id, value, pos,430 size, style, validator, name)431 432 # Bind appropriate events433 self._on_set_focus_callback = parent.onSetFocus \434 if set_focus_callback is None else set_focus_callback435 self.Bind(wx.EVT_SET_FOCUS, self._on_set_focus)436 self.Bind(wx.EVT_KILL_FOCUS, self._silent_kill_focus \437 if kill_focus_callback is None else kill_focus_callback)438 self.Bind(wx.EVT_TEXT_ENTER, parent._onparamEnter \439 if text_enter_callback is None else text_enter_callback)440 if not ON_MAC:441 self.Bind(wx.EVT_LEFT_UP, self._highlight_text \442 if mouse_up_callback is None else mouse_up_callback)443 444 def _on_set_focus(self, event):445 """446 Catch when the text control is set in focus to highlight the whole447 text if necessary448 449 :param event: mouse event450 451 """452 event.Skip()453 self.full_selection = True454 return self._on_set_focus_callback(event)455 456 def _highlight_text(self, event):457 """458 Highlight text of a TextCtrl only of no text has be selected459 460 :param event: mouse event461 462 """463 # Make sure the mouse event is available to other listeners464 event.Skip()465 control = event.GetEventObject()466 if self.full_selection:467 self.full_selection = False468 # Check that we have a TextCtrl469 if issubclass(control.__class__, wx.TextCtrl):470 # Check whether text has been selected,471 # if not, select the whole string472 (start, end) = control.GetSelection()473 if start == end:474 control.SetSelection(-1, -1)475 476 def _silent_kill_focus(self, event):477 """478 Save the state of the page479 """480 481 event.Skip()482 #pass483 484 400 def set_page_info(self, page_info): 485 401 """ … … 1680 1596 draw=False) 1681 1597 elif not self._is_2D(): 1598 enable_smearer = not self.disable_smearer.GetValue() 1682 1599 self._manager.set_smearer(smearer=temp_smearer, 1683 1600 qmin=float(self.qmin_x), … … 1685 1602 fid=self.data.id, 1686 1603 qmax=float(self.qmax_x), 1687 enable_smearer=not self.disable_smearer.GetValue(),1688 1604 enable_smearer=enable_smearer, 1605 draw=False) 1689 1606 if self.data != None: 1690 1607 index_data = ((self.qmin_x <= self.data.x) & \ … … 3774 3691 toggle view of model from 1D to 2D or 2D from 1D if implemented 3775 3692 """ 3693 3694 class ModelTextCtrl(wx.TextCtrl): 3695 """ 3696 Text control for model and fit parameters. 3697 Binds the appropriate events for user interactions. 3698 Default callback methods can be overwritten on initialization 3699 3700 :param kill_focus_callback: callback method for EVT_KILL_FOCUS event 3701 :param set_focus_callback: callback method for EVT_SET_FOCUS event 3702 :param mouse_up_callback: callback method for EVT_LEFT_UP event 3703 :param text_enter_callback: callback method for EVT_TEXT_ENTER event 3704 3705 """ 3706 ## Set to True when the mouse is clicked while whole string is selected 3707 full_selection = False 3708 ## Call back for EVT_SET_FOCUS events 3709 _on_set_focus_callback = None 3710 3711 def __init__(self, parent, id=-1, 3712 value=wx.EmptyString, 3713 pos=wx.DefaultPosition, 3714 size=wx.DefaultSize, 3715 style=0, 3716 validator=wx.DefaultValidator, 3717 name=wx.TextCtrlNameStr, 3718 kill_focus_callback=None, 3719 set_focus_callback=None, 3720 mouse_up_callback=None, 3721 text_enter_callback=None): 3722 3723 wx.TextCtrl.__init__(self, parent, id, value, pos, 3724 size, style, validator, name) 3725 3726 # Bind appropriate events 3727 self._on_set_focus_callback = parent.onSetFocus \ 3728 if set_focus_callback is None else set_focus_callback 3729 self.Bind(wx.EVT_SET_FOCUS, self._on_set_focus) 3730 self.Bind(wx.EVT_KILL_FOCUS, self._silent_kill_focus \ 3731 if kill_focus_callback is None else kill_focus_callback) 3732 self.Bind(wx.EVT_TEXT_ENTER, parent._onparamEnter \ 3733 if text_enter_callback is None else text_enter_callback) 3734 if not ON_MAC: 3735 self.Bind(wx.EVT_LEFT_UP, self._highlight_text \ 3736 if mouse_up_callback is None else mouse_up_callback) 3737 3738 def _on_set_focus(self, event): 3739 """ 3740 Catch when the text control is set in focus to highlight the whole 3741 text if necessary 3742 3743 :param event: mouse event 3744 3745 """ 3746 event.Skip() 3747 self.full_selection = True 3748 return self._on_set_focus_callback(event) 3749 3750 def _highlight_text(self, event): 3751 """ 3752 Highlight text of a TextCtrl only of no text has be selected 3753 3754 :param event: mouse event 3755 3756 """ 3757 # Make sure the mouse event is available to other listeners 3758 event.Skip() 3759 control = event.GetEventObject() 3760 if self.full_selection: 3761 self.full_selection = False 3762 # Check that we have a TextCtrl 3763 if issubclass(control.__class__, wx.TextCtrl): 3764 # Check whether text has been selected, 3765 # if not, select the whole string 3766 (start, end) = control.GetSelection() 3767 if start == end: 3768 control.SetSelection(-1, -1) 3769 3770 def _silent_kill_focus(self, event): 3771 """ 3772 Save the state of the page 3773 """ 3774 3775 event.Skip() 3776 #pass 3777 -
src/sas/perspectives/fitting/batchfitpage.py
r2f4b430 r373d4ee 122 122 # self.sizer5.Clear(True) 123 123 # 124 # self.qmin = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),124 # self.qmin = ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20), 125 125 # style=wx.TE_PROCESS_ENTER, 126 126 # text_enter_callback = self._onQrangeEnter) … … 128 128 # self.qmin.SetToolTipString("Minimun value of Q in linear scale.") 129 129 # 130 # self.qmax = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),130 # self.qmax = ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20), 131 131 # style=wx.TE_PROCESS_ENTER, 132 132 # text_enter_callback=self._onQrangeEnter) -
src/sas/perspectives/fitting/fitpage.py
r85ccd3a r5265420 26 26 from sas.perspectives.fitting.basepage import PageInfoEvent as PageInfoEvent 27 27 from sas.models.qsmearing import smear_selection 28 from .basepage import ModelTextCtrl 28 29 29 30 … … 284 285 285 286 #textcntrl for custom resolution 286 self.smear_pinhole_max = self.ModelTextCtrl(self, -1,287 self.smear_pinhole_max = ModelTextCtrl(self, -1, 287 288 size=(_BOX_WIDTH - 25, 20), 288 289 style=wx.TE_PROCESS_ENTER, 289 290 text_enter_callback=self.onPinholeSmear) 290 self.smear_pinhole_min = self.ModelTextCtrl(self, -1,291 self.smear_pinhole_min = ModelTextCtrl(self, -1, 291 292 size=(_BOX_WIDTH - 25, 20), 292 293 style=wx.TE_PROCESS_ENTER, 293 294 text_enter_callback=self.onPinholeSmear) 294 self.smear_slit_height = self.ModelTextCtrl(self, -1,295 self.smear_slit_height = ModelTextCtrl(self, -1, 295 296 size=(_BOX_WIDTH - 25, 20), 296 297 style=wx.TE_PROCESS_ENTER, 297 298 text_enter_callback=self.onSlitSmear) 298 self.smear_slit_width = self.ModelTextCtrl(self, -1,299 self.smear_slit_width = ModelTextCtrl(self, -1, 299 300 size=(_BOX_WIDTH - 25, 20), 300 301 style=wx.TE_PROCESS_ENTER, … … 303 304 ## smear 304 305 self.smear_data_left = BGTextCtrl(self, -1, 305 size=(_BOX_WIDTH - 25, 20), style=0)306 size=(_BOX_WIDTH - 25, 20), style=0) 306 307 self.smear_data_left.SetValue(str(self.dq_l)) 307 308 self.smear_data_right = BGTextCtrl(self, -1, 308 size=(_BOX_WIDTH - 25, 20), style=0)309 size=(_BOX_WIDTH - 25, 20), style=0) 309 310 self.smear_data_right.SetValue(str(self.dq_r)) 310 311 … … 355 356 self.Npts_fit.SetToolTipString(\ 356 357 " Npts : number of points selected for fitting") 357 self.Npts_total = self.ModelTextCtrl(self, -1,358 size=(_BOX_WIDTH, 20),359 style=wx.TE_PROCESS_ENTER,360 text_enter_callback=self._onQrangeEnter)358 self.Npts_total = ModelTextCtrl(self, -1, 359 size=(_BOX_WIDTH, 20), 360 style=wx.TE_PROCESS_ENTER, 361 text_enter_callback=self._onQrangeEnter) 361 362 self.Npts_total.SetValue(format_number(self.npts_x)) 362 363 self.Npts_total.SetToolTipString(\ … … 515 516 self.sizer5.Clear(True) 516 517 517 self.qmin = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),518 519 520 521 518 self.qmin = ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20), 519 style=wx.TE_PROCESS_ENTER, 520 set_focus_callback=self.qrang_set_focus, 521 text_enter_callback=self._onQrangeEnter, 522 name='qmin') 522 523 self.qmin.SetValue(str(self.qmin_x)) 523 524 q_tip = "Click outside of the axes\n to remove the lines." … … 526 527 self.qmin.SetToolTipString(qmin_tip) 527 528 528 self.qmax = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),529 530 531 532 529 self.qmax = ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20), 530 style=wx.TE_PROCESS_ENTER, 531 set_focus_callback=self.qrang_set_focus, 532 text_enter_callback=self._onQrangeEnter, 533 name='qmax') 533 534 self.qmax.SetValue(str(self.qmax_x)) 534 535 qmax_tip = "Maximum value of Q.\n" … … 686 687 ix = 1 687 688 value = self.model.getParam(name1) 688 ctl1 = self.ModelTextCtrl(self, -1,689 690 689 ctl1 = ModelTextCtrl(self, -1, 690 size=(_BOX_WIDTH / 1.3, 20), 691 style=wx.TE_PROCESS_ENTER) 691 692 ctl1.SetLabel('PD[ratio]') 692 693 poly_text = "Polydispersity (STD/mean) of %s\n" % item … … 715 716 716 717 ix = 4 717 ctl3 = self.ModelTextCtrl(self, -1,718 719 720 718 ctl3 = ModelTextCtrl(self, -1, 719 size=(_BOX_WIDTH / 2, 20), 720 style=wx.TE_PROCESS_ENTER, 721 text_enter_callback=self._onparamRangeEnter) 721 722 722 723 self.sizer4_4.Add(ctl3, (iy, ix), (1, 1), … … 724 725 725 726 ix = 5 726 ctl4 = self.ModelTextCtrl(self, -1,727 728 727 ctl4 = ModelTextCtrl(self, -1, 728 size=(_BOX_WIDTH / 2, 20), 729 style=wx.TE_PROCESS_ENTER, 729 730 text_enter_callback=self._onparamRangeEnter) 730 731 … … 738 739 ix = 6 739 740 value = self.model.getParam(name2) 740 Tctl = self.ModelTextCtrl(self, -1,741 742 741 Tctl = ModelTextCtrl(self, -1, 742 size=(_BOX_WIDTH / 2.2, 20), 743 style=wx.TE_PROCESS_ENTER) 743 744 744 745 Tctl.SetValue(str(format_number(value))) … … 750 751 ix = 7 751 752 value = self.model.getParam(name3) 752 Tct2 = self.ModelTextCtrl(self, -1,753 754 753 Tct2 = ModelTextCtrl(self, -1, 754 size=(_BOX_WIDTH / 2.2, 20), 755 style=wx.TE_PROCESS_ENTER) 755 756 756 757 Tct2.SetValue(str(format_number(value))) … … 811 812 ix = 1 812 813 value = self.model.getParam(name1) 813 ctl1 = self.ModelTextCtrl(self, -1,814 815 814 ctl1 = ModelTextCtrl(self, -1, 815 size=(_BOX_WIDTH / 1.3, 20), 816 style=wx.TE_PROCESS_ENTER) 816 817 poly_tip = "Absolute Sigma for %s." % item 817 818 ctl1.SetToolTipString(poly_tip) … … 859 860 860 861 ix = 4 861 ctl3 = self.ModelTextCtrl(self, -1,862 863 862 ctl3 = ModelTextCtrl(self, -1, 863 size=(_BOX_WIDTH / 2, 20), 864 style=wx.TE_PROCESS_ENTER, 864 865 text_enter_callback=self._onparamRangeEnter) 865 866 … … 870 871 871 872 ix = 5 872 ctl4 = self.ModelTextCtrl(self, -1,873 size=(_BOX_WIDTH / 2, 20),874 style=wx.TE_PROCESS_ENTER,873 ctl4 = ModelTextCtrl(self, -1, 874 size=(_BOX_WIDTH / 2, 20), 875 style=wx.TE_PROCESS_ENTER, 875 876 text_enter_callback=self._onparamRangeEnter) 876 877 self.sizer4_4.Add(ctl4, (iy, ix), (1, 1), … … 886 887 ix = 6 887 888 value = self.model.getParam(name2) 888 Tctl = self.ModelTextCtrl(self, -1,889 890 889 Tctl = ModelTextCtrl(self, -1, 890 size=(_BOX_WIDTH / 2.2, 20), 891 style=wx.TE_PROCESS_ENTER) 891 892 892 893 Tctl.SetValue(str(format_number(value))) … … 906 907 ix = 7 907 908 value = self.model.getParam(name3) 908 Tct2 = self.ModelTextCtrl(self, -1,909 910 909 Tct2 = ModelTextCtrl(self, -1, 910 size=(_BOX_WIDTH / 2.2, 20), 911 style=wx.TE_PROCESS_ENTER) 911 912 912 913 Tct2.SetValue(str(format_number(value))) … … 1061 1062 label = "Fit" 1062 1063 color = "black" 1063 self.btFit.Enable(False)1064 #self.btFit.Enable(False) 1064 1065 self.btFit.SetLabel(label) 1065 1066 self.btFit.SetForegroundColour(color) … … 1140 1141 self.state.formfactorcombobox = self.formfactorbox.GetLabel() 1141 1142 self.enable_fit_button() 1142 if self.model !=None:1143 if self.model is not None: 1143 1144 self.m_name = self.model.name 1144 1145 self.state.m_name = self.m_name … … 1152 1153 self._keep.Enable(not self.batch_on) 1153 1154 self._set_save_flag(True) 1154 # Reset smearer, model and data1155 if not copy_flag:1156 self.disable_smearer.SetValue(True)1157 self.enable_smearer.SetValue(False)1158 1155 1159 1156 # more disables for 2D … … 1162 1159 try: 1163 1160 # update smearer sizer 1164 #if not self.enable_smearer.GetValue():1165 # self.disable_smearer.SetValue(True)1166 1161 self.onSmear(None) 1167 1162 temp_smear = None … … 1268 1263 elif self.data.__class__.__name__ != "Data2D" and \ 1269 1264 not self.enable2D: 1265 enable_smearer = not self.disable_smearer.GetValue() 1270 1266 self._manager.set_smearer(smearer=temp_smearer, 1271 1267 fid=self.data.id, … … 1273 1269 qmin=float(self.qmin_x), 1274 1270 qmax=float(self.qmax_x), 1275 enable_smearer=not self.disable_smearer.GetValue(),1276 draw=True)1271 enable_smearer=enable_smearer, 1272 draw=True) 1277 1273 if flag: 1278 1274 #self.compute_chisqr(smearer= temp_smearer) … … 1772 1768 self.current_smearer = smear_selection(data, self.model) 1773 1769 flag = self.disable_smearer.GetValue() 1774 self.disable_smearer.SetValue(flag) 1775 if self.current_smearer == None: 1770 if self.current_smearer is None: 1776 1771 self.enable_smearer.Disable() 1777 1772 else: … … 1959 1954 if flag: 1960 1955 #set model view button 1961 if not self.enable_smearer.GetValue():1962 self.disable_smearer.SetValue(True)1963 1956 self.onSmear(None) 1964 1957 … … 2132 2125 if numpy.isfinite(float(cov[ind])): 2133 2126 val_err = format_number(cov[ind], True) 2134 if not self.is_mac: 2135 item[3].Show(True) 2136 item[4].Show(True) 2137 item[4].SetForegroundColour(wx.BLACK) 2138 item[4].SetValue(val_err) 2139 has_error = True 2140 else: 2141 val_err = 'NaN' 2142 if not self.is_mac: 2143 item[3].Show(True) 2144 item[4].Show(True) 2145 item[4].SetForegroundColour(wx.RED) 2146 item[4].SetValue(val_err) 2147 has_error = True 2127 else: 2128 val_err = 'NaN' 2129 if not self.is_mac: 2130 item[3].Show(True) 2131 item[4].Show(True) 2132 item[4].SetForegroundColour(wx.RED) 2133 item[4].SetValue(val_err) 2134 has_error = True 2148 2135 i += 1 2149 2136 else: … … 2196 2183 2197 2184 """ 2198 if self.model == None:2199 self.disable_smearer.SetValue(True)2200 if event == None:2201 return2202 msg = "Please select a Model first..."2203 wx.MessageBox(msg, 'Info')2204 wx.PostEvent(self._manager.parent,2205 StatusEvent(status="Smear: %s" % msg))2206 return2207 2208 2185 # Need update param values 2209 2186 self._update_paramv_on_fit() … … 2345 2322 ## set smearing value whether or not the data contain the smearing info 2346 2323 2324 enable_smearer = not self.disable_smearer.GetValue() 2347 2325 self._manager.set_smearer(smearer=self.current_smearer, 2348 fid=self.data.id,2349 qmin=float(self.qmin_x),2350 qmax=float(self.qmax_x),2351 enable_smearer=not self.disable_smearer.GetValue(),2352 uid=self.uid)2326 fid=self.data.id, 2327 qmin=float(self.qmin_x), 2328 qmax=float(self.qmax_x), 2329 enable_smearer=enable_smearer, 2330 uid=self.uid) 2353 2331 return msg 2354 2332 … … 2378 2356 are compute when fitting 2379 2357 """ 2380 if self.model == None:2381 self.disable_smearer.SetValue(True)2382 if event == None:2383 return2384 msg = "Please select a Model first..."2385 wx.MessageBox(msg, 'Info')2386 wx.PostEvent(self._manager.parent,2387 StatusEvent(status="Smear: %s" % msg))2388 return2389 2390 2358 # Need update param values 2391 2359 self._update_paramv_on_fit() … … 2475 2443 of the values entered for slit smear 2476 2444 """ 2477 if self.data.__class__.__name__ == "Data2D" or \ 2478 self.enable2D: 2445 if self.data.__class__.__name__ == "Data2D" or self.enable2D: 2479 2446 return 2480 2447 # make sure once more if it is smearer … … 2513 2480 self.current_smearer = smear_selection(data, self.model) 2514 2481 ## set smearing value whether or not the data contain the smearing info 2482 enable_smearer = not self.disable_smearer.GetValue() 2515 2483 self._manager.set_smearer(smearer=self.current_smearer, 2516 fid=self.data.id,2517 qmin=float(self.qmin_x),2518 qmax=float(self.qmax_x),2519 enable_smearer=not self.disable_smearer.GetValue(),2520 uid=self.uid)2484 fid=self.data.id, 2485 qmin=float(self.qmin_x), 2486 qmax=float(self.qmax_x), 2487 enable_smearer=enable_smearer, 2488 uid=self.uid) 2521 2489 return msg 2522 2490 … … 2552 2520 return 2553 2521 2554 if self.model == None:2555 self.disable_smearer.SetValue(True)2556 if event == None:2557 return2558 msg = "Please select a Model first..."2559 wx.MessageBox(msg, 'Info')2560 wx.PostEvent(self._manager.parent,2561 StatusEvent(status="Smear: %s" % msg))2562 return2563 2522 # Need update param values 2564 2523 self._update_paramv_on_fit() 2565 if self.model !=None:2524 if self.model is not None: 2566 2525 if self.data.is_data: 2567 2526 self._manager.page_finder[self.uid].add_data(data=self.data) … … 2573 2532 2574 2533 ## set smearing value whether or not the data contain the smearing info 2534 enable_smearer = not self.disable_smearer.GetValue() 2575 2535 wx.CallAfter(self._manager.set_smearer, uid=self.uid, 2576 2536 smearer=temp_smearer, … … 2578 2538 qmin=float(self.qmin_x), 2579 2539 qmax=float(self.qmax_x), 2580 enable_smearer= not self.disable_smearer.GetValue(),2540 enable_smearer=enable_smearer, 2581 2541 draw=True) 2582 2542 … … 2594 2554 self._get_smear_info() 2595 2555 #renew smear sizer 2596 if self.smear_type !=None:2556 if self.smear_type is not None: 2597 2557 self.smear_description_smear_type.SetValue(str(self.smear_type)) 2598 2558 self.smear_data_left.SetValue(str(self.dq_l)) … … 2607 2567 self.current_smearer = temp_smearer 2608 2568 if self.enable_smearer.GetValue(): 2609 if self.current_smearer ==None:2569 if self.current_smearer is None: 2610 2570 wx.PostEvent(self._manager.parent, 2611 2571 StatusEvent(status="Data contains no smearing information")) … … 2953 2913 wx.EVT_COMBOBOX(fun_box, -1, self._on_fun_box) 2954 2914 else: 2955 fun_box = self.ModelTextCtrl(self, -1,2956 2915 fun_box = ModelTextCtrl(self, -1, 2916 size=(_BOX_WIDTH, 20), 2957 2917 style=wx.TE_PROCESS_ENTER, name='%s' % item) 2958 2918 fun_box.SetToolTipString(\ … … 2977 2937 ix += 1 2978 2938 value = self.model.getParam(item) 2979 ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),2980 style=wx.TE_PROCESS_ENTER)2939 ctl1 = ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20), 2940 style=wx.TE_PROCESS_ENTER) 2981 2941 ctl1.SetToolTipString(\ 2982 2942 "Hit 'Enter' after typing to update the plot.") … … 2999 2959 3000 2960 ix += 1 3001 ctl3 = self.ModelTextCtrl(self, -1,3002 3003 2961 ctl3 = ModelTextCtrl(self, -1, 2962 size=(_BOX_WIDTH / 1.9, 20), 2963 style=wx.TE_PROCESS_ENTER, 3004 2964 text_enter_callback=self._onparamRangeEnter) 3005 2965 min_bound = self.model.details[item][1] … … 3011 2971 3012 2972 ix += 1 3013 ctl4 = self.ModelTextCtrl(self, -1,3014 3015 2973 ctl4 = ModelTextCtrl(self, -1, 2974 size=(_BOX_WIDTH / 1.9, 20), 2975 style=wx.TE_PROCESS_ENTER, 3016 2976 text_enter_callback=self._onparamRangeEnter) 3017 2977 max_bound = self.model.details[item][2] … … 3115 3075 ix += 1 3116 3076 value = self.model.getParam(item) 3117 ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20),3118 style=wx.TE_PROCESS_ENTER)3077 ctl1 = ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 20), 3078 style=wx.TE_PROCESS_ENTER) 3119 3079 ctl1.SetToolTipString(\ 3120 3080 "Hit 'Enter' after typing to update the plot.") … … 3142 3102 3143 3103 ix += 1 3144 ctl3 = self.ModelTextCtrl(self, -1,3145 3146 3104 ctl3 = ModelTextCtrl(self, -1, 3105 size=(_BOX_WIDTH / 1.8, 20), 3106 style=wx.TE_PROCESS_ENTER, 3147 3107 text_enter_callback=self._onparamRangeEnter) 3148 3108 … … 3152 3112 3153 3113 ix += 1 3154 ctl4 = self.ModelTextCtrl(self, -1,3155 3156 3114 ctl4 = ModelTextCtrl(self, -1, 3115 size=(_BOX_WIDTH / 1.8, 20), 3116 style=wx.TE_PROCESS_ENTER, 3157 3117 text_enter_callback=self._onparamRangeEnter) 3158 3118 sizer.Add(ctl4, (iy, ix), (1, 1), -
src/sas/perspectives/fitting/fitting.py
racf8e4a5 r373d4ee 1211 1211 del self.fit_thread_list[uid] 1212 1212 1213 self._update_fit_button(page_id)1213 wx.CallAfter(self._update_fit_button, page_id) 1214 1214 t1 = time.time() 1215 1215 str_time = time.strftime("%a, %d %b %Y %H:%M:%S ", time.localtime(t1)) … … 1450 1450 type="stop")) 1451 1451 wx.PostEvent(self.result_panel, PlotResultEvent(result=result)) 1452 self._update_fit_button(page_id)1452 wx.CallAfter(self._update_fit_button, page_id) 1453 1453 result = result[0] 1454 1454 self.fit_thread_list = {} … … 1470 1470 info="warning", 1471 1471 type="stop")) 1472 self._update_fit_button(page_id)1472 wx.CallAfter(self._update_fit_button, page_id) 1473 1473 else: 1474 1474 #set the panel when fit result are float not list -
src/sas/guiframe/media/data_explorer_help.rst
r2bf5e3b raa352c8 17 17 Remove_Data_ 18 18 19 Create_New_Plot_ 20 19 21 Append_Plot_to_Graph_ 20 21 Create_New_Plot_22 22 23 23 Freeze_Theory_ … … 40 40 41 41 *NOTE! When* Data Explorer *is hidden, all data loaded will be sent directly 42 to the current active a pplication, if possible. When* Data Explorer *is42 to the current active analysis perspective, if possible. When* Data Explorer *is 43 43 shown, data go first to the* Data Explorer. 44 44 … … 50 50 --------- 51 51 52 To load data, click the button *Load Data*, then select one or more (by holding 53 the Ctrl key) files to load into the application. The name of each selected 54 file will be listed. 52 To load data, do one of the following: 55 53 56 Clicking the *+* symbol will display any available metadata. 54 Select File -> Load Data File(s), and navigate to your data; 55 56 Select File -> Load Data Folder, which will attempt to load all the data in the 57 specified folder; 58 59 Or, in the *Data Explorer* click the button *Load Data*, then select one or more 60 (by holding down the Ctrl key) files to load into SasView. 61 62 The name of each loaded file will be listed in the *Data Explorer*. Clicking the 63 *+* symbol alongside will display any available metadata read from the file. 57 64 58 65 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 64 71 65 72 Right-clicking on a loaded dataset (or model calculation, what SasView calls a 66 theory) brings up a *Handy Menu* from which it is possible to access Datainfo, 67 Save the data/theory, or Plotthe data/theory.73 'theory') brings up a *Handy Menu* from which it is possible to access *Data Info*, 74 *Save* the data/theory, or *Plot* the data/theory. 68 75 69 76 .. image:: hand_menu.png … … 77 84 78 85 To interact with data it must be activated. This is accomplished by checking 79 the box next to the data label. A green tick will appear.86 the box next to the file name in the *Data Explorer*. A green tick will appear. 80 87 81 Unchecking/unticking the box deactivates adata set.88 Unchecking/unticking a box deactivates that data set. 82 89 83 90 There is also a combo box labeled *Selection Options* from which you can 84 activate or deactivate multiple data sets .91 activate or deactivate multiple data sets in one go. 85 92 86 93 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 94 101 selected data sets.* 95 102 96 *Remove Data* removes all reference to selected data from the application. 103 *Remove Data* removes all references to selected data from SasView. 104 105 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 106 107 .. _Create_New_Plot: 108 109 Create New Plot 110 --------------- 111 112 Click on the *New Plot* button to create a new plot panel where the currently 113 selected data will be plotted. 97 114 98 115 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 103 120 -------------------- 104 121 105 This operation can only be performed on 1D data and plot panels currently122 This operation can currently only be performed on 1D data and plot panels 106 123 containing 1D data. 107 124 108 Click on the button *Append To* to add selected data to a plot panel. Next to109 t he button is a combo box containing the names of available plot panels.125 Click on the button *Append Plot To* to add selected data to a plot panel. Next 126 to the button is a combo box containing the names of available plot panels. 110 127 Selecting a name from this combo box will move that plot into focus. 111 128 … … 114 131 115 132 2D Data cannot be appended to any plot panels. 116 117 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ118 119 .. _Create_New_Plot:120 121 Create New Plot122 ---------------123 124 Click on the *New Plot* button to create a new plot panel where the currently125 selected data will be plotted.126 133 127 134 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 134 141 The *Freeze Theory* button generates data from the selected theory. 135 142 136 *NOTE! This operation can only be performed when theory labels are selected.* 143 *NOTE! This operation can only be performed when theory labels are selected in* 144 *the Data panel.* 137 145 138 146 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 143 151 ------------------- 144 152 145 Click on the button *Send To* button to send the currently selected data to146 a perspective(for *Fitting*, *P(r) Inversion*, or *Invariant* calculation).153 Click on the *Send To* button to send the currently selected data to one of the 154 perspectives (for *Fitting*, *P(r) Inversion*, or *Invariant* calculation). 147 155 148 156 The *Single*/*Batch* mode radio buttons only apply to the *Fitting* perspective. … … 155 163 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 156 164 157 .. note:: This help document was last changed by Steve King, 18Feb2015165 .. note:: This help document was last changed by Steve King, 26Apr2015
Note: See TracChangeset
for help on using the changeset viewer.