Changes in src/sas/sasgui/perspectives/fitting/basepage.py [55db501:c8e1996] in sasview
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sasgui/perspectives/fitting/basepage.py
r55db501 rc8e1996 19 19 20 20 from sas.sasgui.guiframe.panel_base import PanelBase 21 from sas.sasgui.guiframe.utils import format_number, check_float, IdList, check_int 21 from sas.sasgui.guiframe.utils import format_number, check_float, IdList, \ 22 check_int 22 23 from sas.sasgui.guiframe.events import PanelOnFocusEvent 23 24 from sas.sasgui.guiframe.events import StatusEvent … … 42 43 _QMAX_DEFAULT = 0.5 43 44 _NPTS_DEFAULT = 50 44 # Control panel width45 # Control panel width 45 46 if sys.platform.count("win32") > 0: 46 47 PANEL_WIDTH = 450 … … 57 58 This class provide general structure of fitpanel page 58 59 """ 59 # #Internal name for the AUI manager60 # Internal name for the AUI manager 60 61 window_name = "Fit Page" 61 # #Title to appear on top of the window62 # Title to appear on top of the window 62 63 window_caption = "Fit Page " 63 64 … … 75 76 PanelBase.__init__(self, parent) 76 77 self.SetupScrolling() 77 # Set window's font size78 # Set window's font size 78 79 self.SetWindowVariant(variant=FONT_VARIANT) 79 80 self.SetBackgroundColour(color) 80 81 81 82 self._ids = iter(self._id_pool) 82 # #parent of the page83 # parent of the page 83 84 self.parent = parent 84 # #manager is the fitting plugin85 # #owner of the page (fitting plugin)85 # manager is the fitting plugin 86 # owner of the page (fitting plugin) 86 87 self.event_owner = None 87 # #current model88 # current model 88 89 self.model = None 89 90 self.m_name = None 90 91 self.index_model = None 91 92 self.panel = None 92 # #data93 # data 93 94 self.data = None 94 # list of available data95 # list of available data 95 96 self.data_list = [] 96 97 self.mask = None 97 98 self.uid = wx.NewId() 98 99 self.graph_id = None 99 # Q range for data set100 # Q range for data set 100 101 self.qmin_data_set = numpy.inf 101 102 self.qmax_data_set = None 102 103 self.npts_data_set = 0 103 # #Q range104 # Q range 104 105 self.qmin = None 105 106 self.qmax = None … … 107 108 self.qmin_x = _QMIN_DEFAULT 108 109 self.npts_x = _NPTS_DEFAULT 109 # #total number of point: float110 # total number of point: float 110 111 self.npts = None 111 112 self.num_points = None 112 # #smear default113 # smear default 113 114 self.current_smearer = None 114 # #2D smear accuracy default115 # 2D smear accuracy default 115 116 self.smear2d_accuracy = 'Low' 116 # #slit smear:117 # slit smear: 117 118 self.dxl = None 118 119 self.dxw = None 119 # #pinhole smear120 # pinhole smear 120 121 self.dx_min = None 121 122 self.dx_max = None 122 # #semar attrbs123 # smear attrbs 123 124 self.enable_smearer = None 124 125 self.disable_smearer = None 125 126 self.pinhole_smearer = None 126 127 self.slit_smearer = None 127 # #weigthattrbs128 # weight attrbs 128 129 self.dI_noweight = None 129 130 self.dI_didata = None 130 131 self.dI_sqrdata = None 131 132 self.dI_idata = None 132 # #other attrbs133 # other attrbs 133 134 self.dq_l = None 134 135 self.dq_r = None … … 142 143 self.theory_qmin_x = None 143 144 self.theory_qmax_x = None 144 self.cb1 = None145 145 self.btEditMask = None 146 146 self.btFit = None … … 150 150 self.disp_cb_dict = {} 151 151 152 # self.state = PageState(parent=parent)153 # #dictionary containing list of models152 # self.state = PageState(parent=parent) 153 # dictionary containing list of models 154 154 self.model_list_box = {} 155 155 156 # #Data member to store the dispersion object created156 # Data member to store the dispersion object created 157 157 self._disp_obj_dict = {} 158 # #selected parameters to apply dispersion158 # selected parameters to apply dispersion 159 159 self.disp_cb_dict = {} 160 # #smearer object160 # smearer object 161 161 self.enable2D = False 162 162 self._has_magnetic = False … … 166 166 self.structurebox = None 167 167 self.categorybox = None 168 # #list of model parameters. each item must have same length169 # #each item related to a given parameters170 # #[cb state, name, value, "+/-", error of fit, min, max , units]168 # list of model parameters. each item must have same length 169 # each item related to a given parameters 170 # [cb state, name, value, "+/-", error of fit, min, max , units] 171 171 self.parameters = [] 172 172 # non-fittable parameter whose value is astring 173 173 self.str_parameters = [] 174 # #list of parameters to fit , must be like self.parameters174 # list of parameters to fit , must be like self.parameters 175 175 self.param_toFit = [] 176 # #list of looking like parameters but with non fittable parameters info176 # list of looking like parameters but with non fittable parameters info 177 177 self.fixed_param = [] 178 # #list of looking like parameters but with fittable parameters info178 # list of looking like parameters but with fittable parameters info 179 179 self.fittable_param = [] 180 # #list of dispersion parameters180 # list of dispersion parameters 181 181 self.disp_list = [] 182 182 self.disp_name = "" 183 183 184 # #list of orientation parameters184 # list of orientation parameters 185 185 self.orientation_params = [] 186 186 self.orientation_params_disp = [] … … 189 189 # and this - commenting out on 4/8/2014 by PDB. Remove once clear 190 190 # it is pointless. 191 # if self.model !=None:191 # if self.model is not None: 192 192 # self.disp_list = self.model.getDispParamList() 193 193 self.temp_multi_functional = False 194 # #enable model 2D draw194 # enable model 2D draw 195 195 self.enable2D = False 196 # #check that the fit range is correct to plot the model again196 # check that the fit range is correct to plot the model again 197 197 self.fitrange = True 198 # #Create memento to save the current state198 # Create memento to save the current state 199 199 self.state = PageState(parent=self.parent, 200 200 model=self.model, data=self.data) 201 # #flag to determine if state has change201 # flag to determine if state has change 202 202 self.state_change = False 203 # #save customized array203 # save customized array 204 204 self.values = {} # type: Dict[str, List[float, ...]] 205 205 self.weights = {} # type: Dict[str, List[float, ...]] 206 # #retrieve saved state206 # retrieve saved state 207 207 self.number_saved_state = 0 208 # #dictionary of saved state208 # dictionary of saved state 209 209 self.saved_states = {} 210 # #Create context menu for page210 # Create context menu for page 211 211 self.popUpMenu = wx.Menu() 212 212 … … 221 221 self.popUpMenu.AppendSeparator() 222 222 223 # #Default locations223 # Default locations 224 224 self._default_save_location = os.getcwd() 225 # #save initial state on context menu226 # self.onSave(event=None)225 # save initial state on context menu 226 # self.onSave(event=None) 227 227 self.Bind(wx.EVT_CONTEXT_MENU, self.onContextMenu) 228 228 … … 230 230 self.Bind(wx.EVT_LEFT_DOWN, self.on_left_down) 231 231 232 # #create the basic structure of the panel with empty sizer232 # create the basic structure of the panel with empty sizer 233 233 self.define_page_structure() 234 # #drawing Initial dispersion parameters sizer234 # drawing Initial dispersion parameters sizer 235 235 self.set_dispers_sizer() 236 236 237 # #layout237 # layout 238 238 self.set_layout() 239 239 … … 261 261 self._create_default_1d_data() 262 262 263 if self.model !=None:263 if self.model is not None: 264 264 if not self.data.is_data: 265 self._manager.page_finder[self.uid].set_fit_data( data=\266 265 self._manager.page_finder[self.uid].set_fit_data( 266 data=[self.data]) 267 267 self.on_smear_helper(update=True) 268 268 self.state.enable_smearer = self.enable_smearer.GetValue() … … 281 281 num=self.npts_x, endpoint=True) 282 282 self.data = Data1D(x=x) 283 #self.data.xaxis('\\rm{Q}', "A^{-1}") 284 self.data.xaxis('\\rm{X}', "") 285 #self.data.yaxis('\\rm{Intensity}', "cm^{-1}") 286 self.data.yaxis('\\rm{Y}', "") 283 self.data.xaxis('\\rm{Q}', "A^{-1}") 284 self.data.yaxis('\\rm{Intensity}', "cm^{-1}") 287 285 self.data.is_data = False 288 286 self.data.id = str(self.uid) + " data" … … 309 307 num=self.npts_x, endpoint=True, base=10.0) 310 308 self.data = Data1D(x=x) 311 #self.data.xaxis('\\rm{Q}', "A^{-1}") 312 #self.data.yaxis('\\rm{Intensity}', "cm^{-1}") 313 self.data.xaxis('\\rm{X}', "") 314 self.data.yaxis('\\rm{Y}', "") 309 self.data.xaxis('\\rm{Q}', "A^{-1}") 310 self.data.yaxis('\\rm{Intensity}', "cm^{-1}") 315 311 self.data.is_data = False 316 312 self.data.id = str(self.uid) + " data" … … 330 326 self.data.id = str(self.uid) + " data" 331 327 self.data.group_id = str(self.uid) + " Model2D" 332 # #Default values328 # Default values 333 329 self.data.detector.append(Detector()) 334 330 index = len(self.data.detector) - 1 … … 347 343 x = numpy.linspace(start=xmin, stop=xmax, num=qstep, endpoint=True) 348 344 y = numpy.linspace(start=ymin, stop=ymax, num=qstep, endpoint=True) 349 # #use data info instead345 # use data info instead 350 346 new_x = numpy.tile(x, (len(y), 1)) 351 347 new_y = numpy.tile(y, (len(x), 1)) … … 388 384 Update menu1 on cliking the page tap 389 385 """ 390 if self._manager.menu1 !=None:391 chain_menu = self._manager.menu1.FindItemById( \386 if self._manager.menu1 is not None: 387 chain_menu = self._manager.menu1.FindItemById( 392 388 self._manager.id_reset_flag) 393 389 chain_menu.Enable(self.batch_on) 394 390 sim_menu = self._manager.menu1.FindItemById(self._manager.id_simfit) 395 391 flag = self.data.is_data\ 396 and (self.model !=None)392 and (self.model is not None) 397 393 sim_menu.Enable(not self.batch_on and flag) 398 394 batch_menu = \ … … 535 531 fill sizer containing dispersity info 536 532 """ 537 # print "==== entering set_dispers_sizer ==="533 # print "==== entering set_dispers_sizer ===" 538 534 self.sizer4.Clear(True) 539 535 name = "Polydispersity and Orientational Distribution" … … 541 537 box_description.SetForegroundColour(wx.BLUE) 542 538 boxsizer1 = wx.StaticBoxSizer(box_description, wx.VERTICAL) 543 # ----------------------------------------------------539 # ---------------------------------------------------- 544 540 self.disable_disp = wx.RadioButton(self, wx.ID_ANY, 'Off', (10, 10), 545 541 style=wx.RB_GROUP) … … 561 557 self.Bind(wx.EVT_RADIOBUTTON, self._set_dipers_Param, 562 558 id=self.enable_disp.GetId()) 563 # MAC needs SetValue559 # MAC needs SetValue 564 560 self.disable_disp.SetValue(True) 565 561 sizer_dispersion = wx.BoxSizer(wx.HORIZONTAL) … … 573 569 sizer_dispersion.Add(self.disp_help_bt) 574 570 575 # #fill a sizer for dispersion571 # fill a sizer for dispersion 576 572 boxsizer1.Add(sizer_dispersion, 0, 577 573 wx.TOP|wx.BOTTOM|wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, … … 580 576 581 577 boxsizer1.Add(self.sizer4_4) 582 # -----------------------------------------------------578 # ----------------------------------------------------- 583 579 self.sizer4.Add(boxsizer1, 0, wx.EXPAND | wx.ALL, 10) 584 580 self.sizer4_4.Layout() … … 587 583 588 584 self.Refresh() 589 # #saving the state of enable dispersity button585 # saving the state of enable dispersity button 590 586 self.state.enable_disp = self.enable_disp.GetValue() 591 587 self.state.disable_disp = self.disable_disp.GetValue() … … 597 593 """ 598 594 menu = event.GetEventObject() 599 # #post help message for the selected model595 # post help message for the selected model 600 596 msg = menu.GetHelpString(event.GetId()) 601 597 msg += " reloaded" … … 604 600 name = menu.GetLabel(event.GetId()) 605 601 self._on_select_model_helper() 606 if self.model !=None:602 if self.model is not None: 607 603 self.m_name = self.model.name 608 604 if name in self.saved_states.keys(): 609 605 previous_state = self.saved_states[name] 610 # #reset state of checkbox,textcrtl and regular parameters value606 # reset state of checkbox,textcrtl and regular parameters value 611 607 612 608 self.reset_page(previous_state) … … 631 627 # Ask the user the location of the file to write to. 632 628 path = None 633 if self.parent !=None:629 if self.parent is not None: 634 630 self._default_save_location = \ 635 631 self._manager.parent._default_save_location … … 641 637 self._default_save_location = os.path.dirname(path) 642 638 self._manager.parent._default_save_location = \ 643 639 self._default_save_location 644 640 else: 645 641 return None … … 648 644 # Make sure the ext included in the file name 649 645 fName = os.path.splitext(path)[0] + extens 650 # the manager write the state into file646 # the manager write the state into file 651 647 self._manager.save_fit_state(filepath=fName, fitstate=new_state) 652 648 return new_state … … 656 652 Copy Parameter values to the clipboad 657 653 """ 658 if event !=None:654 if event is not None: 659 655 event.Skip() 660 656 # It seems MAC needs wxCallAfter … … 672 668 Paste Parameter values to the panel if possible 673 669 """ 674 # if event !=None:670 # if event is not None: 675 671 # event.Skip() 676 672 # It seems MAC needs wxCallAfter for the setvalues … … 678 674 wx.CallAfter(self.get_paste) 679 675 # messages depending on the flag 680 # self._copy_info(True)676 # self._copy_info(True) 681 677 682 678 def _copy_info(self, flag): … … 687 683 """ 688 684 # messages depending on the flag 689 if flag ==None:685 if flag is None: 690 686 msg = " Parameter values are copied to the clipboard..." 691 687 infor = 'warning' … … 715 711 save history of the data and model 716 712 """ 717 if self.model ==None:713 if self.model is None: 718 714 msg = "Can not bookmark; Please select Data and Model first..." 719 715 wx.MessageBox(msg, 'Info') … … 721 717 self.save_current_state() 722 718 new_state = self.state.clone() 723 # #Add model state on context menu719 # Add model state on context menu 724 720 self.number_saved_state += 1 725 721 current_time, current_date = self._get_time_stamp() 726 # name= self.model.name+"[%g]"%self.number_saved_state722 # name= self.model.name+"[%g]"%self.number_saved_state 727 723 name = "Fitting: %g]" % self.number_saved_state 728 724 name += self.model.__class__.__name__ … … 730 726 self.saved_states[name] = new_state 731 727 732 # #Add item in the context menu728 # Add item in the context menu 733 729 msg = "Model saved at %s on %s" % (current_time, current_date) 734 # #post help message for the selected model730 # post help message for the selected model 735 731 msg += " Saved! right click on this page to retrieve this model" 736 732 wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) … … 766 762 """ 767 763 try: 768 if path ==None:764 if path is None: 769 765 status = " Selected Distribution was not loaded: %s" % path 770 766 wx.PostEvent(self._manager.parent, … … 801 797 Store current state 802 798 """ 803 # #save model option804 if self.model !=None:799 # save model option 800 if self.model is not None: 805 801 self.disp_list = self.model.getDispParamList() 806 802 self.state.disp_list = copy.deepcopy(self.disp_list) 807 803 self.state.model = self.model.clone() 808 804 809 # model combobox: complex code because of mac's silent error810 if self.structurebox !=None:805 # model combobox: complex code because of mac's silent error 806 if self.structurebox is not None: 811 807 if self.structurebox.IsShown(): 812 808 self.state.structurecombobox = 'None' 813 809 s_select = self.structurebox.GetSelection() 814 810 if s_select > 0: 815 self.state.structurecombobox = self.structurebox.\816 GetString(s_select)817 if self.formfactorbox !=None:811 self.state.structurecombobox = \ 812 self.structurebox.GetString(s_select) 813 if self.formfactorbox is not None: 818 814 f_select = self.formfactorbox.GetSelection() 819 815 if f_select > 0: 820 self.state.formfactorcombobox = self.formfactorbox.\821 GetString(f_select)822 if self.categorybox !=None:816 self.state.formfactorcombobox = \ 817 self.formfactorbox.GetString(f_select) 818 if self.categorybox is not None: 823 819 cb_select = self.categorybox.GetSelection() 824 820 if cb_select > 0: 825 self.state.categorycombobox = self.categorybox.\826 GetString(cb_select)821 self.state.categorycombobox = \ 822 self.categorybox.GetString(cb_select) 827 823 828 824 self.state.enable2D = copy.deepcopy(self.enable2D) 829 825 self.state.values = copy.deepcopy(self.values) 830 826 self.state.weights = copy.deepcopy(self.weights) 831 # #save data827 # save data 832 828 self.state.data = copy.deepcopy(self.data) 833 829 self.state.qmax_x = self.qmax_x … … 864 860 self.state.values = copy.deepcopy(self.values) 865 861 self.state.weights = copy.deepcopy(self.weights) 866 # #save plotting range862 # save plotting range 867 863 self._save_plotting_range() 868 864 … … 874 870 self.state.str_parameters = [] 875 871 876 # #save checkbutton state and txtcrtl values872 # save checkbutton state and txtcrtl values 877 873 self._copy_parameters_state(self.str_parameters, 878 874 self.state.str_parameters) … … 886 882 self.state.fittable_param) 887 883 self._copy_parameters_state(self.fixed_param, self.state.fixed_param) 888 # save chisqr884 # save chisqr 889 885 self.state.tcChi = self.tcChi.GetValue() 890 886 … … 893 889 Store current state for fit_page 894 890 """ 895 # #save model option896 if self.model !=None:891 # save model option 892 if self.model is not None: 897 893 self.disp_list = self.model.getDispParamList() 898 894 self.state.disp_list = copy.deepcopy(self.disp_list) … … 902 898 self.state.values = copy.deepcopy(self.values) 903 899 self.state.weights = copy.deepcopy(self.weights) 904 # #save data900 # save data 905 901 self.state.data = copy.deepcopy(self.data) 906 902 … … 923 919 self.state.dI_sqrdata = copy.deepcopy(self.dI_sqrdata.GetValue()) 924 920 self.state.dI_idata = copy.deepcopy(self.dI_idata.GetValue()) 925 if hasattr(self, "disp_box") and self.disp_box !=None:921 if hasattr(self, "disp_box") and self.disp_box is not None: 926 922 self.state.disp_box = self.disp_box.GetCurrentSelection() 927 923 928 924 if len(self.disp_cb_dict) > 0: 929 925 for k, v in self.disp_cb_dict.iteritems(): 930 if v ==None:926 if v is None: 931 927 self.state.disp_cb_dict[k] = v 932 928 else: … … 942 938 self.state.weights = copy.deepcopy(self.weights) 943 939 944 # #save plotting range940 # save plotting range 945 941 self._save_plotting_range() 946 942 947 # #save checkbutton state and txtcrtl values943 # save checkbutton state and txtcrtl values 948 944 self._copy_parameters_state(self.orientation_params, 949 945 self.state.orientation_params) … … 964 960 msg = "Please load Data and select Model to start..." 965 961 wx.MessageBox(msg, 'Info') 966 return 962 return True 967 963 968 964 def set_model_state(self, state): … … 973 969 self.disp_list = state.disp_list 974 970 975 # #fill model combobox971 # fill model combobox 976 972 self._show_combox_helper() 977 # select the current model973 # select the current model 978 974 try: 979 975 # to support older version … … 1014 1010 self.structurebox.SetSelection(structfactor_pos) 1015 1011 1016 if state.multi_factor !=None:1012 if state.multi_factor is not None: 1017 1013 self.multifactorbox.SetSelection(state.multi_factor) 1018 1014 1019 # #reset state of checkbox,textcrtl and regular parameters value1015 # reset state of checkbox,textcrtl and regular parameters value 1020 1016 self._reset_parameters_state(self.orientation_params_disp, 1021 1017 state.orientation_params_disp) … … 1025 1021 state.str_parameters) 1026 1022 self._reset_parameters_state(self.parameters, state.parameters) 1027 # #display dispersion info layer1023 # display dispersion info layer 1028 1024 self.enable_disp.SetValue(state.enable_disp) 1029 1025 self.disable_disp.SetValue(state.disable_disp) 1030 1026 1031 if hasattr(self, "disp_box") and self.disp_box !=None:1027 if hasattr(self, "disp_box") and self.disp_box is not None: 1032 1028 self.disp_box.SetSelection(state.disp_box) 1033 1029 n = self.disp_box.GetCurrentSelection() … … 1041 1037 1042 1038 if hasattr(self.disp_cb_dict[item], "SetValue"): 1043 self.disp_cb_dict[item].SetValue( \1039 self.disp_cb_dict[item].SetValue( 1044 1040 state.disp_cb_dict[item]) 1045 1041 # Create the dispersion objects 1046 1042 disp_model = POLYDISPERSITY_MODELS['array']() 1047 1043 if hasattr(state, "values") and \ 1048 self.disp_cb_dict[item].GetValue() ==True:1044 self.disp_cb_dict[item].GetValue() is True: 1049 1045 if len(state.values) > 0: 1050 1046 self.values = state.values … … 1057 1053 self._disp_obj_dict[item] = disp_model 1058 1054 # Set the new model as the dispersion object 1059 # for the selected parameter1055 # for the selected parameter 1060 1056 self.model.set_dispersion(item, disp_model) 1061 1057 … … 1067 1063 for item in keys: 1068 1064 if item in self.disp_list and \ 1069 not itemin self.model.details:1065 item not in self.model.details: 1070 1066 self.model.details[item] = ["", None, None] 1071 1067 self.disp_cb_dict = copy.deepcopy(state.disp_cb_dict) 1072 1068 self.state.disp_cb_dict = copy.deepcopy(state.disp_cb_dict) 1073 # #smearing info restore1069 # smearing info restore 1074 1070 if hasattr(self, "enable_smearer"): 1075 # #set smearing value whether or not the data1076 # contain the smearing info1071 # set smearing value whether or not the data 1072 # contain the smearing info 1077 1073 self.enable_smearer.SetValue(state.enable_smearer) 1078 1074 self.disable_smearer.SetValue(state.disable_smearer) … … 1086 1082 self.dI_idata.SetValue(state.dI_idata) 1087 1083 1088 # #we have two more options for smearing1084 # we have two more options for smearing 1089 1085 if self.pinhole_smearer.GetValue(): 1090 1086 self.onPinholeSmear(event=None) … … 1092 1088 self.onSlitSmear(event=None) 1093 1089 1094 # #reset state of checkbox,textcrtl and dispersity parameters value1090 # reset state of checkbox,textcrtl and dispersity parameters value 1095 1091 self._reset_parameters_state(self.fittable_param, state.fittable_param) 1096 1092 self._reset_parameters_state(self.fixed_param, state.fixed_param) 1097 1093 1098 # #draw the model with previous parameters value1094 # draw the model with previous parameters value 1099 1095 self._onparamEnter_helper() 1100 1096 self.select_param(event=None) 1101 # Save state_fit1097 # Save state_fit 1102 1098 self.save_current_state_fit() 1103 1099 self._lay_out() … … 1113 1109 if state.formfactorcombobox in list_item: 1114 1110 return self.categorybox.Items.index(key) 1111 return 0 1115 1112 1116 1113 def reset_page_helper(self, state): … … 1123 1120 state of the graphic interface 1124 1121 """ 1125 if state ==None:1122 if state is None: 1126 1123 return 1127 1124 # set data, etc. from the state 1128 1125 # reset page between theory and fitting from bookmarking 1129 #if state.data == None:1130 # data = None1131 #else:1132 1126 data = state.data 1133 1127 1134 if data ==None:1128 if data is None: 1135 1129 data_min = state.qmin 1136 1130 data_max = state.qmax … … 1156 1150 self.disp_list = state.disp_list 1157 1151 1158 ## set the state of the radio box 1159 #self.shape_rbutton.SetValue(state.shape_rbutton) 1160 #self.shape_indep_rbutton.SetValue(state.shape_indep_rbutton) 1161 #self.struct_rbutton.SetValue(state.struct_rbutton) 1162 #self.plugin_rbutton.SetValue(state.plugin_rbutton) 1163 1164 ## fill model combobox 1152 # fill model combobox 1165 1153 self._show_combox_helper() 1166 # select the current model1154 # select the current model 1167 1155 try: 1168 1156 # to support older version 1169 1157 category_pos = int(state.categorycombobox) 1170 1158 except: 1171 state.formfactorcombobox = unicode(state.formfactorcombobox.lower()) 1159 state.formfactorcombobox = state.formfactorcombobox.lower() 1160 state.formfactorcombobox = \ 1161 state.formfactorcombobox.replace('model', '') 1162 state.formfactorcombobox = unicode(state.formfactorcombobox) 1172 1163 state.categorycombobox = unicode(state.categorycombobox) 1173 category_pos = 01174 1164 if state.categorycombobox in self.categorybox.Items: 1175 1165 category_pos = self.categorybox.Items.index( … … 1194 1184 self.formfactorbox.Select(formfactor_pos) 1195 1185 1186 structfactor_pos = 0 1196 1187 try: 1197 1188 # to support older version … … 1199 1190 except: 1200 1191 if state.structurecombobox is not None: 1201 structfactor_pos = 01202 1192 state.structurecombobox = unicode(state.structurecombobox) 1203 1193 for ind_struct in range(self.structurebox.GetCount()): 1204 1194 if self.structurebox.GetString(ind_struct) == \ 1205 1195 (state.structurecombobox): 1206 1196 structfactor_pos = int(ind_struct) 1207 1197 break … … 1209 1199 self.structurebox.SetSelection(structfactor_pos) 1210 1200 1211 if state.multi_factor !=None:1201 if state.multi_factor is not None: 1212 1202 self.multifactorbox.SetSelection(state.multi_factor) 1213 1203 1214 # draw the panel according to the new model parameter1204 # draw the panel according to the new model parameter 1215 1205 self._on_select_model(event=None) 1216 1206 1217 1207 # take care of 2D button 1218 if data ==None and self.model_view.IsEnabled():1208 if data is None and self.model_view.IsEnabled(): 1219 1209 if self.enable2D: 1220 1210 self.model_view.SetLabel("2D Mode") … … 1222 1212 self.model_view.SetLabel("1D Mode") 1223 1213 1224 ## set the select all check box to the a given state 1225 self.cb1.SetValue(state.cb1) 1226 1227 ## reset state of checkbox,textcrtl and regular parameters value 1214 # reset state of checkbox,textcrtl and regular parameters value 1228 1215 self._reset_parameters_state(self.orientation_params_disp, 1229 1216 state.orientation_params_disp) … … 1233 1220 state.str_parameters) 1234 1221 self._reset_parameters_state(self.parameters, state.parameters) 1235 # #display dispersion info layer1222 # display dispersion info layer 1236 1223 self.enable_disp.SetValue(state.enable_disp) 1237 1224 self.disable_disp.SetValue(state.disable_disp) … … 1241 1228 self._set_dipers_Param(event=None) 1242 1229 self._reset_page_disp_helper(state) 1243 # #plotting range restore1230 # plotting range restore 1244 1231 self._reset_plotting_range(state) 1245 # #smearing info restore1232 # smearing info restore 1246 1233 if hasattr(self, "enable_smearer"): 1247 # #set smearing value whether or not the data1248 # contain the smearing info1234 # set smearing value whether or not the data 1235 # contain the smearing info 1249 1236 self.enable_smearer.SetValue(state.enable_smearer) 1250 1237 self.disable_smearer.SetValue(state.disable_smearer) … … 1264 1251 self.dI_idata.SetValue(False) 1265 1252 1266 # #we have two more options for smearing1253 # we have two more options for smearing 1267 1254 if self.pinhole_smearer.GetValue(): 1268 1255 self.dx_min = state.dx_min 1269 1256 self.dx_max = state.dx_max 1270 if self.dx_min !=None:1257 if self.dx_min is not None: 1271 1258 self.smear_pinhole_min.SetValue(str(self.dx_min)) 1272 if self.dx_max !=None:1259 if self.dx_max is not None: 1273 1260 self.smear_pinhole_max.SetValue(str(self.dx_max)) 1274 1261 self.onPinholeSmear(event=None) … … 1276 1263 self.dxl = state.dxl 1277 1264 self.dxw = state.dxw 1278 if self.dxl !=None:1265 if self.dxl is not None: 1279 1266 self.smear_slit_height.SetValue(str(self.dxl)) 1280 if self.dxw !=None:1267 if self.dxw is not None: 1281 1268 self.smear_slit_width.SetValue(str(self.dxw)) 1282 1269 else: … … 1284 1271 self.onSlitSmear(event=None) 1285 1272 1286 # #reset state of checkbox,textcrtl and dispersity parameters value1273 # reset state of checkbox,textcrtl and dispersity parameters value 1287 1274 self._reset_parameters_state(self.fittable_param, state.fittable_param) 1288 1275 self._reset_parameters_state(self.fixed_param, state.fixed_param) 1289 1276 1290 # #draw the model with previous parameters value1277 # draw the model with previous parameters value 1291 1278 self._onparamEnter_helper() 1292 # reset the value of chisqr when not consistent with the value computed1279 # reset the value of chisqr when not consistent with the value computed 1293 1280 self.tcChi.SetValue(str(self.state.tcChi)) 1294 # #reset context menu items1281 # reset context menu items 1295 1282 self._reset_context_menu() 1296 1283 1297 # #set the value of the current state to the state given as parameter1284 # set the value of the current state to the state given as parameter 1298 1285 self.state = state.clone() 1299 1286 self.state.m_name = self.m_name … … 1306 1293 for item in keys: 1307 1294 if item in self.disp_list and \ 1308 not itemin self.model.details:1295 item not in self.model.details: 1309 1296 self.model.details[item] = ["", None, None] 1310 # for k,v in self.state.disp_cb_dict.iteritems():1297 # for k,v in self.state.disp_cb_dict.iteritems(): 1311 1298 self.disp_cb_dict = copy.deepcopy(state.disp_cb_dict) 1312 1299 self.state.disp_cb_dict = copy.deepcopy(state.disp_cb_dict) … … 1315 1302 1316 1303 for key, disp_type in state._disp_obj_dict.iteritems(): 1317 # disp_model = disp1304 # disp_model = disp 1318 1305 disp_model = POLYDISPERSITY_MODELS[disp_type]() 1319 1306 self._disp_obj_dict[key] = disp_model … … 1324 1311 self.model.set_dispersion(param_name, disp_model) 1325 1312 self.model._persistency_dict[key] = \ 1326 1313 [state.values, state.weights] 1327 1314 except Exception: 1328 1315 logging.error(traceback.format_exc()) 1329 1316 selection = self._find_polyfunc_selection(disp_model) 1330 1317 for list in self.fittable_param: 1331 if list[1] == key and list[7] !=None:1318 if list[1] == key and list[7] is not None: 1332 1319 list[7].SetSelection(selection) 1333 1320 # For the array disp_model, set the values and weights … … 1354 1341 logging.error(traceback.format_exc()) 1355 1342 1356 # Make sure the check box updated when all checked1357 if self.cb1.GetValue():1358 self.select_all_param(None)1359 1360 1343 def _selectDlg(self): 1361 1344 """ 1362 1345 open a dialog file to selected the customized dispersity 1363 1346 """ 1364 if self.parent !=None:1347 if self.parent is not None: 1365 1348 self._default_save_location = \ 1366 1349 self._manager.parent.get_save_location() … … 1381 1364 for name, _ in self.state.saved_states.iteritems(): 1382 1365 self.number_saved_state += 1 1383 # #Add item in the context menu1366 # Add item in the context menu 1384 1367 wx_id = ids.next() 1385 1368 msg = 'Save model and state %g' % self.number_saved_state … … 1398 1381 save radiobutton containing the type model that can be selected 1399 1382 """ 1400 # self.state.shape_rbutton = self.shape_rbutton.GetValue()1401 # self.state.shape_indep_rbutton = self.shape_indep_rbutton.GetValue()1402 # self.state.struct_rbutton = self.struct_rbutton.GetValue()1403 # self.state.plugin_rbutton = self.plugin_rbutton.GetValue()1383 # self.state.shape_rbutton = self.shape_rbutton.GetValue() 1384 # self.state.shape_indep_rbutton = self.shape_indep_rbutton.GetValue() 1385 # self.state.struct_rbutton = self.struct_rbutton.GetValue() 1386 # self.state.plugin_rbutton = self.plugin_rbutton.GetValue() 1404 1387 self.state.structurecombobox = self.structurebox.GetLabel() 1405 1388 self.state.formfactorcombobox = self.formfactorbox.GetLabel() 1406 1389 self.state.categorycombobox = self.categorybox.GetLabel() 1407 1390 1408 # #post state to fit panel1391 # post state to fit panel 1409 1392 event = PageInfoEvent(page=self) 1410 1393 wx.PostEvent(self.parent, event) … … 1418 1401 self.state.npts = self.npts_x 1419 1402 1420 def _onparamEnter_helper(self, is_modified =False):1403 def _onparamEnter_helper(self, is_modified=False): 1421 1404 """ 1422 1405 check if values entered by the user are changed and valid to replot … … 1424 1407 """ 1425 1408 # Flag to register when a parameter has changed. 1426 # is_modified = False1409 # is_modified = False 1427 1410 self.fitrange = True 1428 1411 is_2Ddata = False 1429 # self._undo.Enable(True)1412 # self._undo.Enable(True) 1430 1413 # check if 2d data 1431 1414 if self.data.__class__.__name__ == "Data2D": 1432 1415 is_2Ddata = True 1433 if self.model !=None:1434 # Either we get a is_modified = True passed in because1435 # _update_paramv_on_fit() has been called already or1416 if self.model is not None: 1417 # Either we get a is_modified = True passed in because 1418 # _update_paramv_on_fit() has been called already or 1436 1419 # we need to check here ourselves. 1437 1420 if not is_modified: … … 1460 1443 self.fitrange = False 1461 1444 1462 if not self.data.is_data: 1463 is_modified = True 1464 1465 ## if any value is modify draw model with new value 1445 # if any value is modify draw model with new value 1466 1446 if not self.fitrange: 1467 # self.btFit.Disable()1447 # self.btFit.Disable() 1468 1448 if is_2Ddata: 1469 1449 self.btEditMask.Disable() … … 1478 1458 self._draw_model() 1479 1459 self.Refresh() 1460 1461 # logging.info("is_modified flag set to %g",is_modified) 1480 1462 return is_modified 1481 1463 … … 1484 1466 make sure that update param values just before the fitting 1485 1467 """ 1486 # flag for qmin qmax check values1468 # flag for qmin qmax check values 1487 1469 flag = True 1488 1470 self.fitrange = True 1489 1471 is_modified = False 1490 1472 1491 # wx.PostEvent(self._manager.parent, StatusEvent(status=" \1492 # updating ... ",type="update"))1493 1494 # #So make sure that update param values on_Fit.1495 # self._undo.Enable(True)1496 if self.model !=None:1473 # wx.PostEvent(self._manager.parent, StatusEvent(status=" \ 1474 # updating ... ",type="update")) 1475 1476 # So make sure that update param values on_Fit. 1477 # self._undo.Enable(True) 1478 if self.model is not None: 1497 1479 if self.Npts_total.GetValue() != self.Npts_fit.GetValue(): 1498 1480 if not self.data.is_data: 1499 self._manager.page_finder[self.uid].set_fit_data( data=\1500 1501 # #Check the values1481 self._manager.page_finder[self.uid].set_fit_data( 1482 data=[self.data]) 1483 # Check the values 1502 1484 is_modified = (self._check_value_enter(self.fittable_param) 1503 1504 1485 or self._check_value_enter(self.fixed_param) 1486 or self._check_value_enter(self.parameters)) 1505 1487 1506 1488 # If qmin and qmax have been modified, update qmin and qmax and … … 1543 1525 enable_smearer=enable_smearer, 1544 1526 draw=False) 1545 if self.data !=None:1546 index_data = ((self.qmin_x <= self.data.x) & \1527 if self.data is not None: 1528 index_data = ((self.qmin_x <= self.data.x) & 1547 1529 (self.data.x <= self.qmax_x)) 1548 val = str(len(self.data.x[index_data ==True]))1530 val = str(len(self.data.x[index_data is True])) 1549 1531 self.Npts_fit.SetValue(val) 1550 1532 else: … … 1566 1548 flag = False 1567 1549 1568 # For invalid q range, disable the mask editor and fit button, vs.1550 # For invalid q range, disable the mask editor and fit button, vs. 1569 1551 if not self.fitrange: 1570 1552 if self._is_2D(): 1571 1553 self.btEditMask.Disable() 1572 1554 else: 1573 if self._is_2D() and 1555 if self._is_2D() and self.data.is_data and not self.batch_on: 1574 1556 self.btEditMask.Enable(True) 1575 1557 … … 1584 1566 logging.error(traceback.format_exc()) 1585 1567 1586 return flag, is_modified1568 return flag, is_modified 1587 1569 1588 1570 def _reset_parameters_state(self, listtorestore, statelist): … … 1598 1580 item_page = listtorestore[j] 1599 1581 item_page_info = statelist[j] 1600 # #change the state of the check box for simple parameters1601 if item_page[0] !=None:1582 # change the state of the check box for simple parameters 1583 if item_page[0] is not None: 1602 1584 item_page[0].SetValue(item_page_info[0]) 1603 if item_page[2] !=None:1585 if item_page[2] is not None: 1604 1586 item_page[2].SetValue(item_page_info[2]) 1605 1587 if item_page[2].__class__.__name__ == "ComboBox": … … 1607 1589 fun_val = self.model.fun_list[item_page_info[2]] 1608 1590 self.model.setParam(item_page_info[1], fun_val) 1609 if item_page[3] !=None:1610 # #show or hide text +/-1591 if item_page[3] is not None: 1592 # show or hide text +/- 1611 1593 if item_page_info[2]: 1612 1594 item_page[3].Show(True) 1613 1595 else: 1614 1596 item_page[3].Hide() 1615 if item_page[4] !=None:1616 # #show of hide the text crtl for fitting error1597 if item_page[4] is not None: 1598 # show of hide the text crtl for fitting error 1617 1599 if item_page_info[4][0]: 1618 1600 item_page[4].Show(True) … … 1620 1602 else: 1621 1603 item_page[3].Hide() 1622 if item_page[5] !=None:1623 # #show of hide the text crtl for fitting error1604 if item_page[5] is not None: 1605 # show of hide the text crtl for fitting error 1624 1606 item_page[5].Show(item_page_info[5][0]) 1625 1607 item_page[5].SetValue(item_page_info[5][1]) 1626 1608 1627 if item_page[6] !=None:1628 # #show of hide the text crtl for fitting error1609 if item_page[6] is not None: 1610 # show of hide the text crtl for fitting error 1629 1611 item_page[6].Show(item_page_info[6][0]) 1630 1612 item_page[6].SetValue(item_page_info[6][1]) … … 1642 1624 item_page = listtorestore[j] 1643 1625 item_page_info = statelist[j] 1644 # #change the state of the check box for simple parameters1645 1646 if item_page[0] !=None:1626 # change the state of the check box for simple parameters 1627 1628 if item_page[0] is not None: 1647 1629 item_page[0].SetValue(format_number(item_page_info[0], True)) 1648 1630 1649 if item_page[2] !=None:1631 if item_page[2] is not None: 1650 1632 param_name = item_page_info[1] 1651 1633 value = item_page_info[2] … … 1670 1652 1671 1653 checkbox_state = None 1672 if item[0] !=None:1654 if item[0] is not None: 1673 1655 checkbox_state = item[0].GetValue() 1674 1656 parameter_name = item[1] 1675 1657 parameter_value = None 1676 if item[2] !=None:1658 if item[2] is not None: 1677 1659 parameter_value = item[2].GetValue() 1678 1660 static_text = None 1679 if item[3] !=None:1661 if item[3] is not None: 1680 1662 static_text = item[3].IsShown() 1681 1663 error_value = None 1682 1664 error_state = None 1683 if item[4] !=None:1665 if item[4] is not None: 1684 1666 error_value = item[4].GetValue() 1685 1667 error_state = item[4].IsShown() … … 1687 1669 min_value = None 1688 1670 min_state = None 1689 if item[5] !=None:1671 if item[5] is not None: 1690 1672 min_value = item[5].GetValue() 1691 1673 min_state = item[5].IsShown() … … 1693 1675 max_value = None 1694 1676 max_state = None 1695 if item[6] !=None:1677 if item[6] is not None: 1696 1678 max_value = item[6].GetValue() 1697 1679 max_state = item[6].IsShown() 1698 1680 unit = None 1699 if item[7] !=None:1681 if item[7] is not None: 1700 1682 unit = item[7].GetLabel() 1701 1683 … … 1705 1687 [max_state, max_value], unit]) 1706 1688 1707 1708 1689 def _draw_model(self, update_chisqr=True, source='model'): 1709 1690 """ … … 1724 1705 :param chisqr: update chisqr value [bool] 1725 1706 """ 1726 # if self.check_invalid_panel():1707 # if self.check_invalid_panel(): 1727 1708 # return 1728 if self.model !=None:1709 if self.model is not None: 1729 1710 temp_smear = None 1730 1711 if hasattr(self, "enable_smearer"): … … 1738 1719 is_2d = self._is_2D() 1739 1720 self._manager.draw_model(self.model, 1740 data=self.data,1741 smearer=temp_smear,1742 qmin=float(self.qmin_x),1743 qmax=float(self.qmax_x),1744 page_id=self.uid,1745 toggle_mode_on=toggle_mode_on,1746 state=self.state,1747 enable2D=is_2d,1748 update_chisqr=update_chisqr,1749 source='model',1750 weight=weight)1721 data=self.data, 1722 smearer=temp_smear, 1723 qmin=float(self.qmin_x), 1724 qmax=float(self.qmax_x), 1725 page_id=self.uid, 1726 toggle_mode_on=toggle_mode_on, 1727 state=self.state, 1728 enable2D=is_2d, 1729 update_chisqr=update_chisqr, 1730 source='model', 1731 weight=weight) 1751 1732 1752 1733 def _on_show_sld(self, event=None): … … 1758 1739 1759 1740 from sas.sasgui.plottools import Data1D as pf_data1d 1760 # from sas.sasgui.perspectives.theory.profile_dialog import SLDPanel1741 # from sas.sasgui.perspectives.theory.profile_dialog import SLDPanel 1761 1742 from sas.sasgui.guiframe.local_perspectives.plotting.profile_dialog \ 1762 import SLDPanel1743 import SLDPanel 1763 1744 sld_data = pf_data1d(x, y) 1764 1745 sld_data.name = 'SLD' … … 1813 1794 self.structurebox.Disable() 1814 1795 self.formfactorbox.Clear() 1815 if mod_cat ==None:1796 if mod_cat is None: 1816 1797 return 1817 1798 m_list = [] … … 1875 1856 """ 1876 1857 tcrtl = event.GetEventObject() 1877 # Clear msg if previously shown.1858 # Clear msg if previously shown. 1878 1859 msg = "" 1879 1860 wx.PostEvent(self.parent, StatusEvent(status=msg)) … … 1894 1875 tcrtl.SetBackgroundColour("pink") 1895 1876 msg = "Model Error: wrong value entered: %s" % \ 1896 1877 sys.exc_info()[1] 1897 1878 wx.PostEvent(self.parent, StatusEvent(status=msg)) 1898 1879 return … … 1902 1883 wx.PostEvent(self.parent, StatusEvent(status=msg)) 1903 1884 return 1904 # Check if # of points for theory model are valid(>0).1905 if self.npts !=None:1885 # Check if # of points for theory model are valid(>0). 1886 if self.npts is not None: 1906 1887 if check_float(self.npts): 1907 1888 temp_npts = float(self.npts.GetValue()) … … 1919 1900 wx.PostEvent(self.parent, event) 1920 1901 self.state_change = False 1921 # Draw the model for a different range1902 # Draw the model for a different range 1922 1903 if not self.data.is_data: 1923 1904 self.create_default_data() … … 1930 1911 1931 1912 tcrtl = event.GetEventObject() 1932 # Clear msg if previously shown.1913 # Clear msg if previously shown. 1933 1914 msg = "" 1934 1915 wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) … … 1951 1932 tcrtl.SetBackgroundColour("pink") 1952 1933 msg = "Model Error: wrong value entered: %s" % \ 1953 1934 sys.exc_info()[1] 1954 1935 wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 1955 1936 return … … 1959 1940 wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 1960 1941 return 1961 # Check if # of points for theory model are valid(>0).1942 # Check if # of points for theory model are valid(>0). 1962 1943 if self.Npts_total.IsEditable(): 1963 1944 if check_float(self.Npts_total): … … 1977 1958 wx.PostEvent(self.parent, event) 1978 1959 self.state_change = False 1979 # Draw the model for a different range1960 # Draw the model for a different range 1980 1961 self.create_default_data() 1981 1962 self._draw_model() … … 1985 1966 call back for model selection 1986 1967 """ 1987 # #reset dictionary containing reference to dispersion1968 # reset dictionary containing reference to dispersion 1988 1969 self._disp_obj_dict = {} 1989 1970 self.disp_cb_dict = {} 1990 1971 self.temp_multi_functional = False 1991 1972 f_id = self.formfactorbox.GetCurrentSelection() 1992 # For MAC1973 # For MAC 1993 1974 form_factor = None 1994 1975 if f_id >= 0: … … 1997 1978 if form_factor is None or \ 1998 1979 not hasattr(form_factor, 'is_form_factor') or \ 1999 not form_factor.is_form_factor:1980 not form_factor.is_form_factor: 2000 1981 self.structurebox.Hide() 2001 1982 self.text2.Hide() … … 2009 1990 self.text2.Enable() 2010 1991 2011 if form_factor !=None:1992 if form_factor is not None: 2012 1993 # set multifactor for Mutifunctional models 2013 1994 if form_factor.is_multiplicity_model: … … 2017 1998 self._set_multfactor_combobox(multiplicity) 2018 1999 self._show_multfactor_combobox() 2019 # ToDo:this info should be called directly from the model2000 # ToDo: this info should be called directly from the model 2020 2001 text = form_factor.multiplicity_info[1] # 'No. of Shells: ' 2021 2002 … … 2026 2007 2027 2008 self.multi_factor = self.multifactorbox.GetClientData(m_id) 2028 if self.multi_factor ==None:2009 if self.multi_factor is None: 2029 2010 self.multi_factor = 0 2030 2011 self.multifactorbox.SetSelection(m_id) … … 2032 2013 text = '' 2033 2014 if form_factor.multiplicity_info[0] == \ 2034 2015 len(form_factor.multiplicity_info[2]): 2035 2016 text = form_factor.multiplicity_info[2][self.multi_factor] 2036 2017 self.mutifactor_text1.SetLabel(text) … … 2053 2034 struct_factor = self.structurebox.GetClientData(s_id) 2054 2035 2055 if struct_factor !=None:2056 from sas .sascalc.fit.MultiplicationModel import MultiplicationModel2036 if struct_factor is not None: 2037 from sasmodels.sasview_model import MultiplicationModel 2057 2038 self.model = MultiplicationModel(form_factor(self.multi_factor), 2058 2039 struct_factor()) … … 2060 2041 if len(form_factor.non_fittable) > 0: 2061 2042 self.temp_multi_functional = True 2062 elif form_factor !=None:2043 elif form_factor is not None: 2063 2044 if self.multi_factor is not None: 2064 2045 self.model = form_factor(self.multi_factor) … … 2075 2056 else: 2076 2057 self._has_magnetic = False 2077 # #post state to fit panel2058 # post state to fit panel 2078 2059 self.state.parameters = [] 2079 2060 self.state.model = self.model … … 2085 2066 self.Layout() 2086 2067 2087 2088 2068 def _validate_qrange(self, qmin_ctrl, qmax_ctrl): 2089 2069 """ … … 2105 2085 qmax = float(qmax_ctrl.GetValue()) 2106 2086 if qmin < qmax: 2107 # Make sure to set both colours white.2087 # Make sure to set both colours white. 2108 2088 qmin_ctrl.SetBackgroundColour(wx.WHITE) 2109 2089 qmin_ctrl.Refresh() … … 2125 2105 If valid, setvalues Npts_fit otherwise post msg. 2126 2106 """ 2127 # default flag2107 # default flag 2128 2108 flag = True 2129 2109 # Theory 2130 if self.data ==None and self.enable2D:2110 if self.data is None and self.enable2D: 2131 2111 return flag 2132 2112 for data in self.data_list: … … 2134 2114 radius = numpy.sqrt(data.qx_data * data.qx_data + 2135 2115 data.qy_data * data.qy_data) 2136 # get unmasked index2116 # get unmasked index 2137 2117 index_data = (float(self.qmin.GetValue()) <= radius) & \ 2138 2118 (radius <= float(self.qmax.GetValue())) 2139 2119 index_data = (index_data) & (data.mask) 2140 2120 index_data = (index_data) & (numpy.isfinite(data.data)) … … 2152 2132 flag = False 2153 2133 else: 2154 self.Npts_fit.SetValue(str(len(index_data[index_data ==True])))2134 self.Npts_fit.SetValue(str(len(index_data[index_data is True]))) 2155 2135 self.fitrange = True 2156 2136 … … 2162 2142 If valid, setvalues Npts_fit otherwise post msg. 2163 2143 """ 2164 # default flag2144 # default flag 2165 2145 flag = True 2166 2146 # Theory 2167 if self.data ==None:2147 if self.data is None: 2168 2148 return flag 2169 2149 for data in self.data_list: 2170 2150 # q value from qx and qy 2171 2151 radius = data.x 2172 # get unmasked index2152 # get unmasked index 2173 2153 index_data = (float(self.qmin.GetValue()) <= radius) & \ 2174 2154 (radius <= float(self.qmax.GetValue())) 2175 2155 index_data = (index_data) & (numpy.isfinite(data.y)) 2176 2156 … … 2187 2167 flag = False 2188 2168 else: 2189 self.Npts_fit.SetValue(str(len(index_data[index_data ==True])))2169 self.Npts_fit.SetValue(str(len(index_data[index_data is True]))) 2190 2170 self.fitrange = True 2191 2171 … … 2207 2187 is_modified = False 2208 2188 for item in list: 2209 # skip angle parameters for 1D2189 # skip angle parameters for 1D 2210 2190 if not self.enable2D and item in self.orientation_params: 2211 2191 continue … … 2252 2232 max_ctrl.SetBackgroundColour("pink") 2253 2233 max_ctrl.Refresh() 2254 #msg = "Invalid fit range for %s: min must be smaller than max"%name 2255 #wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 2234 # msg = "Invalid fit range for %s: min must be smaller 2235 # than max"%name 2236 # wx.PostEvent(self._manager.parent, 2237 # StatusEvent(status=msg)) 2256 2238 continue 2257 2239 … … 2271 2253 # The configuration has changed but it won't change the 2272 2254 # computed curve so no need to set is_modified to True 2273 # is_modified = True2255 # is_modified = True 2274 2256 self.model.details[name][1:3] = low, high 2275 2257 … … 2289 2271 Redraw the model with the default dispersity (Gaussian) 2290 2272 """ 2291 # #On selction if no model exists.2292 if self.model ==None:2273 # On selction if no model exists. 2274 if self.model is None: 2293 2275 self.disable_disp.SetValue(True) 2294 2276 msg = "Please select a Model first..." … … 2300 2282 self._reset_dispersity() 2301 2283 2302 if self.model ==None:2284 if self.model is None: 2303 2285 self.model_disp.Hide() 2304 2286 self.sizer4_4.Clear(True) … … 2306 2288 2307 2289 if self.enable_disp.GetValue(): 2308 # #layout for model containing no dispersity parameters2290 # layout for model containing no dispersity parameters 2309 2291 2310 2292 self.disp_list = self.model.getDispParamList() … … 2313 2295 self._layout_sizer_noDipers() 2314 2296 else: 2315 # #set gaussian sizer2297 # set gaussian sizer 2316 2298 self._on_select_Disp(event=None) 2317 2299 else: 2318 2300 self.sizer4_4.Clear(True) 2319 2301 2320 # #post state to fit panel2302 # post state to fit panel 2321 2303 self.save_current_state() 2322 if event !=None:2304 if event is not None: 2323 2305 event = PageInfoEvent(page=self) 2324 2306 wx.PostEvent(self.parent, event) 2325 # draw the model with the current dispersity2326 2327 # Wojtek P, Oct 8, 2016: Calling draw_model seems to be unessecary.2328 # By comenting it we save an extra Iq calculation2329 # self._draw_model()2330 2331 # #Need to use FitInside again here to replace the next four lines.2332 # #Otherwised polydispersity off does not resize the scrollwindow.2333 # #PDB Nov 28, 20152307 # draw the model with the current dispersity 2308 2309 # Wojtek P, Oct 8, 2016: Calling draw_model seems to be unessecary. 2310 # By comenting it we save an extra Iq calculation 2311 # self._draw_model() 2312 2313 # Need to use FitInside again here to replace the next four lines. 2314 # Otherwised polydispersity off does not resize the scrollwindow. 2315 # PDB Nov 28, 2015 2334 2316 self.FitInside() 2335 2317 # self.sizer4_4.Layout() … … 2375 2357 self.weights = {} 2376 2358 2377 # from sas.models.dispersion_models import GaussianDispersion2359 # from sas.models.dispersion_models import GaussianDispersion 2378 2360 from sasmodels.weights import GaussianDispersion 2379 2361 if len(self.disp_cb_dict) == 0: … … 2396 2378 logging.error(traceback.format_exc()) 2397 2379 2398 # #save state into2380 # save state into 2399 2381 self.save_current_state() 2400 2382 self.Layout() … … 2408 2390 self._set_sizer_dispersion() 2409 2391 2410 # #Redraw the model2392 # Redraw the model 2411 2393 self._draw_model() 2412 # self._undo.Enable(True)2394 # self._undo.Enable(True) 2413 2395 event = PageInfoEvent(page=self) 2414 2396 wx.PostEvent(self.parent, event) … … 2425 2407 """ 2426 2408 # get ready for new event 2427 if event !=None:2409 if event is not None: 2428 2410 event.Skip() 2429 2411 # Get event object … … 2438 2420 dispersity = disp_box.GetClientData(selection) 2439 2421 2440 # disp_model = GaussianDispersion()2422 # disp_model = GaussianDispersion() 2441 2423 disp_model = dispersity() 2442 2424 # Get param names to reset the values of the param … … 2451 2433 else: 2452 2434 self._del_array_values(name1) 2453 # self._reset_array_disp(param_name)2435 # self._reset_array_disp(param_name) 2454 2436 self._disp_obj_dict[name1] = disp_model 2455 2437 self.model.set_dispersion(param_name, disp_model) … … 2499 2481 item[2].Enable() 2500 2482 2501 # Make sure the check box updated when all checked 2502 if self.cb1.GetValue(): 2503 #self.select_all_param(None) 2504 self.get_all_checked_params() 2483 # Make sure the check box updated 2484 self.get_all_checked_params() 2505 2485 2506 2486 # update params … … 2537 2517 if path is None: 2538 2518 self.disp_cb_dict[name].SetValue(False) 2539 # self.noDisper_rbox.SetValue(True)2519 # self.noDisper_rbox.SetValue(True) 2540 2520 return 2541 2521 self._default_save_location = os.path.dirname(path) 2542 if self._manager !=None:2522 if self._manager is not None: 2543 2523 self._manager.parent._default_save_location = \ 2544 2524 self._default_save_location … … 2557 2537 wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 2558 2538 self._set_array_disp_model(name=name, disp=disp, 2559 2539 values=values, weights=weights) 2560 2540 return basename 2561 2541 … … 2576 2556 # Store the object to make it persist outside the 2577 2557 # scope of this method 2578 # TODO: refactor model to clean this up?2558 # TODO: refactor model to clean this up? 2579 2559 self.state.values = {} 2580 2560 self.state.weights = {} … … 2583 2563 2584 2564 # Set the new model as the dispersion object for the 2585 # selected parameter2586 # self.model.set_dispersion(p, disp_model)2565 # selected parameter 2566 # self.model.set_dispersion(p, disp_model) 2587 2567 # Store a reference to the weights in the model object 2588 # so that2568 # so that 2589 2569 # it's not lost when we use the model within another thread. 2590 2570 self.state.model = self.model.clone() 2591 2571 self.model._persistency_dict[name.split('.')[0]] = \ 2592 2572 [values, weights] 2593 2573 self.state.model._persistency_dict[name.split('.')[0]] = \ 2594 2574 [values, weights] 2595 2575 2596 2576 def _del_array_values(self, name=None): … … 2630 2610 Layout after self._draw_model 2631 2611 """ 2632 if ON_MAC ==True:2612 if ON_MAC is True: 2633 2613 time.sleep(1) 2634 2614 … … 2652 2632 """ 2653 2633 flag = True 2654 # #For 3 different cases: Data2D, Data1D, and theory2655 if self.model ==None:2634 # For 3 different cases: Data2D, Data1D, and theory 2635 if self.model is None: 2656 2636 msg = "Please select a model first..." 2657 2637 wx.MessageBox(msg, 'Info') … … 2665 2645 self.qmin_x = data_min 2666 2646 self.qmax_x = math.sqrt(x * x + y * y) 2667 # self.data.mask = numpy.ones(len(self.data.data),dtype=bool)2647 # self.data.mask = numpy.ones(len(self.data.data),dtype=bool) 2668 2648 # check smearing 2669 2649 if not self.disable_smearer.GetValue(): 2670 # #set smearing value whether or2650 # set smearing value whether or 2671 2651 # not the data contain the smearing info 2672 2652 if self.pinhole_smearer.GetValue(): … … 2675 2655 flag = True 2676 2656 2677 elif self.data ==None:2657 elif self.data is None: 2678 2658 self.qmin_x = _QMIN_DEFAULT 2679 2659 self.qmax_x = _QMAX_DEFAULT … … 2686 2666 # check smearing 2687 2667 if not self.disable_smearer.GetValue(): 2688 # #set smearing value whether or2668 # set smearing value whether or 2689 2669 # not the data contain the smearing info 2690 2670 if self.slit_smearer.GetValue(): … … 2697 2677 flag = False 2698 2678 2699 if flag ==False:2679 if flag is False: 2700 2680 msg = "Cannot Plot :Must enter a number!!! " 2701 2681 wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) … … 2714 2694 self.state.qmax = self.qmax_x 2715 2695 2716 # reset the q range values2696 # reset the q range values 2717 2697 self._reset_plotting_range(self.state) 2718 2698 self._draw_model() … … 2755 2735 logging.error(traceback.format_exc()) 2756 2736 # Make sure the resduals plot goes to the last 2757 if res_item !=None:2737 if res_item is not None: 2758 2738 graphs.append(res_item[0]) 2759 2739 canvases.append(res_item[1]) … … 2774 2754 the # to the browser. 2775 2755 2776 :param ev t: on Help Button pressed event2777 """ 2778 2779 if self.model !=None:2756 :param event: on Help Button pressed event 2757 """ 2758 2759 if self.model is not None: 2780 2760 name = self.formfactorbox.GetValue() 2781 _TreeLocation = 'user/models/' + name.lower()+'.html'2761 _TreeLocation = 'user/models/' + name.lower()+'.html' 2782 2762 _doc_viewer = DocumentationWindow(self, wx.ID_ANY, _TreeLocation, 2783 2763 "", name + " Help") … … 2786 2766 _doc_viewer = DocumentationWindow(self, wx.ID_ANY, _TreeLocation, 2787 2767 "", "General Model Help") 2788 2789 2768 2790 2769 def on_model_help_clicked(self, event): … … 2798 2777 give the message that none is available. 2799 2778 2800 :param ev t: on Description Button pressed event2801 """ 2802 2803 if self.model ==None:2779 :param event: on Description Button pressed event 2780 """ 2781 2782 if self.model is None: 2804 2783 name = 'index.html' 2805 2784 else: … … 2808 2787 msg = 'Model description:\n' 2809 2788 info = "Info" 2810 if self.model !=None:2811 #frame.Destroy()2789 if self.model is not None: 2790 # frame.Destroy() 2812 2791 if str(self.model.description).rstrip().lstrip() == '': 2813 2792 msg += "Sorry, no information is available for this model." … … 2878 2857 for key in self.model.magnetic_params: 2879 2858 if key.count('M0') > 0: 2880 # reset mag value to zero fo safety2859 # reset mag value to zero fo safety 2881 2860 self.model.setParam(key, 0.0) 2882 2861 2883 2862 self.Show(False) 2884 2863 self.set_model_param_sizer(self.model) 2885 # self._set_sizer_dispersion()2864 # self._set_sizer_dispersion() 2886 2865 self.state.magnetic_on = self.magnetic_on 2887 2866 self.SetupScrolling() … … 2898 2877 running "file:///...." 2899 2878 2900 :param ev t: Triggers on clicking ? in polydispersity box2879 :param event: Triggers on clicking ? in polydispersity box 2901 2880 """ 2902 2881 … … 2936 2915 content = 'sasview_parameter_values:' 2937 2916 # Do it if params exist 2938 if self.parameters != []:2917 if self.parameters: 2939 2918 2940 2919 # go through the parameters … … 2980 2959 2981 2960 # Do it if params exist 2982 if self.parameters != []:2961 if self.parameters: 2983 2962 2984 2963 for param in self.parameters: 2985 content += param[1] #parameter name2964 content += param[1] # parameter name 2986 2965 content += tab 2987 2966 content += param[1] + "_err" … … 2990 2969 content += crlf 2991 2970 2992 # row of values and errors...2971 # row of values and errors... 2993 2972 for param in self.parameters: 2994 content += param[2].GetValue() #value2973 content += param[2].GetValue() # value 2995 2974 content += tab 2996 content += param[4].GetValue() #error2975 content += param[4].GetValue() # error 2997 2976 content += tab 2998 2977 … … 3000 2979 else: 3001 2980 return False 3002 3003 2981 3004 2982 def get_copy_latex(self): … … 3022 3000 3023 3001 # Do it if params exist 3024 if self.parameters != []:3002 if self.parameters: 3025 3003 3026 3004 content += '{|' … … 3031 3009 3032 3010 for index, param in enumerate(self.parameters): 3033 content += param[1].replace('_', '\_') #parameter name3011 content += param[1].replace('_', '\_') # parameter name 3034 3012 content += ' & ' 3035 3013 content += param[1].replace('_', '\_') + "\_err" … … 3039 3017 content += crlf 3040 3018 3041 # row of values and errors...3019 # row of values and errors... 3042 3020 for index, param in enumerate(self.parameters): 3043 content += param[2].GetValue() #parameter value3021 content += param[2].GetValue() # parameter value 3044 3022 content += ' & ' 3045 content += param[4].GetValue() #parameter error3023 content += param[4].GetValue() # parameter error 3046 3024 if index < len(self.parameters) - 1: 3047 3025 content += ' & ' … … 3054 3032 else: 3055 3033 return False 3056 3057 3034 3058 3035 def set_clipboard(self, content=None): … … 3101 3078 # 1D 3102 3079 else: 3103 # #for 1D all parameters except orientation3080 # for 1D all parameters except orientation 3104 3081 if not item[1] in orient_param: 3105 3082 try: … … 3133 3110 except Exception: 3134 3111 logging.error(traceback.format_exc()) 3135 content += name + ',' + str(check) + ',' +\ 3136 value + disfunc + ',' + bound_lo + ',' +\ 3137 bound_hi + ':' 3112 content += name + ',' + str(check) + ',' + value + disfunc + ',' + \ 3113 bound_lo + ',' + bound_hi + ':' 3138 3114 3139 3115 return content … … 3213 3189 3214 3190 # Do it if params exist 3215 if self.parameters != []:3191 if self.parameters: 3216 3192 # go through the parameters 3217 3193 self._get_paste_helper(self.parameters, … … 3261 3237 pd = int(pd) 3262 3238 except Exception: 3263 # continue3239 # continue 3264 3240 if not pd and pd != '': 3265 3241 continue … … 3289 3265 else: 3290 3266 is_true = None 3291 if is_true !=None:3267 if is_true is not None: 3292 3268 item[0].SetValue(is_true) 3293 3269 # 1D 3294 3270 else: 3295 # #for 1D all parameters except orientation3271 # for 1D all parameters except orientation 3296 3272 if not item[1] in orient_param: 3297 3273 name = item[1] … … 3302 3278 pd = value[0] 3303 3279 if name.count('.') > 0: 3304 # If this is parameter.width, then pd may be a floating 3305 # point value or it may be an array distribution. 3306 # Nothing to do for parameter.npts or parameter.nsigmas. 3280 # If this is parameter.width, then pd may be a 3281 # floating point value or it may be an array 3282 # distribution. Nothing to do for parameter.npts or 3283 # parameter.nsigmas. 3307 3284 try: 3308 3285 pd = float(pd) … … 3310 3287 pd = int(pd) 3311 3288 except: 3312 # continue3289 # continue 3313 3290 if not pd and pd != '': 3314 3291 continue … … 3338 3315 else: 3339 3316 is_true = None 3340 if is_true !=None:3317 if is_true is not None: 3341 3318 item[0].SetValue(is_true) 3319 3320 self.select_param(event=None) 3321 self.Refresh() 3342 3322 3343 3323 def _paste_poly_help(self, item, value): … … 3402 3382 logging.error(traceback.format_exc()) 3403 3383 print "Error in BasePage._paste_poly_help: %s" % \ 3404 3384 sys.exc_info()[1] 3405 3385 3406 3386 def _set_disp_cb(self, isarray, item): … … 3468 3448 self.categorybox.Clear() 3469 3449 cat_list = sorted(self.master_category_dict.keys()) 3470 if not uncat_strin cat_list:3450 if uncat_str not in cat_list: 3471 3451 cat_list.append(uncat_str) 3472 3452 … … 3478 3458 self.categorybox.SetSelection(0) 3479 3459 else: 3480 self.categorybox.SetSelection( \3460 self.categorybox.SetSelection( 3481 3461 self.categorybox.GetSelection()) 3482 # self._on_change_cat(None)3462 # self._on_change_cat(None) 3483 3463 3484 3464 def _on_change_cat(self, event): … … 3488 3468 self.model_name = None 3489 3469 category = self.categorybox.GetStringSelection() 3490 if category ==None:3470 if category is None: 3491 3471 return 3492 3472 self.model_box.Clear() … … 3499 3479 else: 3500 3480 for (model, enabled) in sorted(self.master_category_dict[category], 3501 key=lambda name: name[0]):3481 key=lambda name: name[0]): 3502 3482 if(enabled): 3503 3483 self.model_box.Append(model) … … 3508 3488 """ 3509 3489 # This should only be called once per fit tab 3510 # print "==== Entering _fill_model_sizer"3511 # #Add model function Details button in fitpanel.3512 # #The following 3 lines are for Mac. Let JHC know before modifying...3490 # print "==== Entering _fill_model_sizer" 3491 # Add model function Details button in fitpanel. 3492 # The following 3 lines are for Mac. Let JHC know before modifying... 3513 3493 title = "Model" 3514 3494 self.formfactorbox = None … … 3542 3522 self._populate_listbox() 3543 3523 wx.EVT_COMBOBOX(self.categorybox, wx.ID_ANY, self._show_combox) 3544 # self.shape_rbutton = wx.RadioButton(self, wx.ID_ANY, 'Shapes',3524 # self.shape_rbutton = wx.RadioButton(self, wx.ID_ANY, 'Shapes', 3545 3525 # style=wx.RB_GROUP) 3546 # self.shape_indep_rbutton = wx.RadioButton(self, wx.ID_ANY,3526 # self.shape_indep_rbutton = wx.RadioButton(self, wx.ID_ANY, 3547 3527 # "Shape-Independent") 3548 # self.struct_rbutton = wx.RadioButton(self, wx.ID_ANY,3528 # self.struct_rbutton = wx.RadioButton(self, wx.ID_ANY, 3549 3529 # "Structure Factor ") 3550 # self.plugin_rbutton = wx.RadioButton(self, wx.ID_ANY,3530 # self.plugin_rbutton = wx.RadioButton(self, wx.ID_ANY, 3551 3531 # "Uncategorized") 3552 3532 3553 # self.Bind(wx.EVT_RADIOBUTTON, self._show_combox,3533 # self.Bind(wx.EVT_RADIOBUTTON, self._show_combox, 3554 3534 # id=self.shape_rbutton.GetId()) 3555 # self.Bind(wx.EVT_RADIOBUTTON, self._show_combox,3535 # self.Bind(wx.EVT_RADIOBUTTON, self._show_combox, 3556 3536 # id=self.shape_indep_rbutton.GetId()) 3557 # self.Bind(wx.EVT_RADIOBUTTON, self._show_combox,3537 # self.Bind(wx.EVT_RADIOBUTTON, self._show_combox, 3558 3538 # id=self.struct_rbutton.GetId()) 3559 # self.Bind(wx.EVT_RADIOBUTTON, self._show_combox,3539 # self.Bind(wx.EVT_RADIOBUTTON, self._show_combox, 3560 3540 # id=self.plugin_rbutton.GetId()) 3561 # MAC needs SetValue3541 # MAC needs SetValue 3562 3542 3563 3543 show_cat_button = wx.Button(self, wx.ID_ANY, "Modify") 3564 3544 cat_tip = "Modify model categories \n" 3565 3545 cat_tip += "(also accessible from the menu bar)." 3566 show_cat_button.SetToolTip( wx.ToolTip(cat_tip))3546 show_cat_button.SetToolTip(wx.ToolTip(cat_tip)) 3567 3547 show_cat_button.Bind(wx.EVT_BUTTON, self._on_modify_cat) 3568 3548 sizer_cat_box.Add(self.categorybox, 1, wx.RIGHT, 3) 3569 sizer_cat_box.Add((10, 10))3549 sizer_cat_box.Add((10, 10)) 3570 3550 sizer_cat_box.Add(show_cat_button) 3571 # self.shape_rbutton.SetValue(True)3551 # self.shape_rbutton.SetValue(True) 3572 3552 3573 3553 sizer_radiobutton = wx.GridSizer(2, 2, 5, 5) 3574 # sizer_radiobutton.Add(self.shape_rbutton)3575 # sizer_radiobutton.Add(self.shape_indep_rbutton)3576 sizer_radiobutton.Add((5, 5))3554 # sizer_radiobutton.Add(self.shape_rbutton) 3555 # sizer_radiobutton.Add(self.shape_indep_rbutton) 3556 sizer_radiobutton.Add((5, 5)) 3577 3557 sizer_radiobutton.Add(self.model_view, 1, wx.RIGHT, 5) 3578 # sizer_radiobutton.Add(self.plugin_rbutton)3579 # sizer_radiobutton.Add(self.struct_rbutton)3580 #sizer_radiobutton.Add((5,5))3558 # sizer_radiobutton.Add(self.plugin_rbutton) 3559 # sizer_radiobutton.Add(self.struct_rbutton) 3560 # sizer_radiobutton.Add((5,5)) 3581 3561 sizer_radiobutton.Add(self.model_help, 1, wx.RIGHT | wx.LEFT, 5) 3582 #sizer_radiobutton.Add((5,5))3562 # sizer_radiobutton.Add((5,5)) 3583 3563 sizer_radiobutton.Add(self.model_func, 1, wx.RIGHT, 5) 3584 3564 sizer_cat.Add(sizer_cat_box, 1, wx.LEFT, 2.5) … … 3596 3576 self.formfactorbox = wx.ComboBox(self, wx.ID_ANY, style=wx.CB_READONLY) 3597 3577 self.formfactorbox.SetToolTip(wx.ToolTip("Select a Model")) 3598 if self.model !=None:3578 if self.model is not None: 3599 3579 self.formfactorbox.SetValue(self.model.name) 3600 3580 self.structurebox = wx.ComboBox(self, wx.ID_ANY, style=wx.CB_READONLY) … … 3605 3585 wx.EVT_COMBOBOX(self.structurebox, wx.ID_ANY, self._on_select_model) 3606 3586 wx.EVT_COMBOBOX(self.multifactorbox, wx.ID_ANY, self._on_select_model) 3607 # #check model type to show sizer3608 if self.model !=None:3587 # check model type to show sizer 3588 if self.model is not None: 3609 3589 print "_set_model_sizer_selection: disabled." 3610 # self._set_model_sizer_selection(self.model)3590 # self._set_model_sizer_selection(self.model) 3611 3591 3612 3592 sizer_selection.Add(self.text1) … … 3681 3661 call back for model selection if implemented 3682 3662 """ 3683 def select_all_param(self, event):3684 """3685 set to true or false all checkBox if implemented3686 """3687 3663 def get_weight_flag(self): 3688 3664 """ … … 3706 3682 toggle view of model from 1D to 2D or 2D from 1D if implemented 3707 3683 """ 3684 3708 3685 3709 3686 class ModelTextCtrl(wx.TextCtrl): … … 3719 3696 3720 3697 """ 3721 # #Set to True when the mouse is clicked while whole string is selected3698 # Set to True when the mouse is clicked while whole string is selected 3722 3699 full_selection = False 3723 # #Call back for EVT_SET_FOCUS events3700 # Call back for EVT_SET_FOCUS events 3724 3701 _on_set_focus_callback = None 3725 3702 … … 3743 3720 if set_focus_callback is None else set_focus_callback 3744 3721 self.Bind(wx.EVT_SET_FOCUS, self._on_set_focus) 3745 self.Bind(wx.EVT_KILL_FOCUS, self._silent_kill_focus \3746 3747 self.Bind(wx.EVT_TEXT_ENTER, parent._onparamEnter \3748 3722 self.Bind(wx.EVT_KILL_FOCUS, self._silent_kill_focus 3723 if kill_focus_callback is None else kill_focus_callback) 3724 self.Bind(wx.EVT_TEXT_ENTER, parent._onparamEnter 3725 if text_enter_callback is None else text_enter_callback) 3749 3726 if not ON_MAC: 3750 self.Bind(wx.EVT_LEFT_UP, self._highlight_text \3751 3727 self.Bind(wx.EVT_LEFT_UP, self._highlight_text 3728 if mouse_up_callback is None else mouse_up_callback) 3752 3729 3753 3730 def _on_set_focus(self, event): … … 3789 3766 3790 3767 event.Skip() 3791 # pass3768 # pass
Note: See TracChangeset
for help on using the changeset viewer.