Changeset 95eef00 in sasview for src/sas/sasgui/perspectives/fitting/fitpanel.py
- Timestamp:
- Oct 7, 2016 2:05:57 PM (8 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, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- b61bd57
- Parents:
- e6de6b8 (diff), 48b8f6d (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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sasgui/perspectives/fitting/fitpanel.py
r05228b0 re6de6b8 10 10 11 11 from sas.sasgui.guiframe.panel_base import PanelBase 12 from sas.sasgui.guiframe.events import PanelOnFocusEvent 13 from sas.sasgui.guiframe.events import StatusEvent 12 from sas.sasgui.guiframe.events import PanelOnFocusEvent, StatusEvent 14 13 from sas.sasgui.guiframe.dataFitting import check_data_validity 14 from sas.sasgui.perspectives.fitting.simfitpage import SimultaneousFitPage 15 15 16 16 import basepage … … 18 18 _BOX_WIDTH = 80 19 19 20 20 21 class FitPanel(nb, PanelBase): 21 22 """ … … 26 27 27 28 """ 28 # #Internal name for the AUI manager29 # Internal name for the AUI manager 29 30 window_name = "Fit panel" 30 # #Title to appear on top of the window31 # Title to appear on top of the window 31 32 window_caption = "Fit Panel " 32 33 CENTER_PANE = True … … 40 41 wx.CLIP_CHILDREN) 41 42 PanelBase.__init__(self, parent) 42 # self.SetWindowStyleFlag(style=nb.FNB_FANCY_TABS)43 # self.SetWindowStyleFlag(style=nb.FNB_FANCY_TABS) 43 44 self._manager = manager 44 45 self.parent = parent 45 46 self.event_owner = None 46 # dictionary of miodel {model class name, model class}47 # dictionary of miodel {model class name, model class} 47 48 self.menu_mng = models.ModelManager() 48 49 self.model_list_box = self.menu_mng.get_model_list() 49 # pageClosedEvent = nb.EVT_FLATNOTEBOOK_PAGE_CLOSING50 # pageClosedEvent = nb.EVT_FLATNOTEBOOK_PAGE_CLOSING 50 51 self.model_dictionary = self.menu_mng.get_model_dictionary() 51 52 self.pageClosedEvent = wx.aui.EVT_AUINOTEBOOK_PAGE_CLOSE 52 53 53 54 self.Bind(self.pageClosedEvent, self.on_close_page) 54 # #save the title of the last page tab added55 # save the title of the last page tab added 55 56 self.fit_page_name = {} 56 # #list of existing fit page57 # list of existing fit page 57 58 self.opened_pages = {} 58 # index of fit page59 # index of fit page 59 60 self.fit_page_index = 0 60 # index of batch page61 # index of batch page 61 62 self.batch_page_index = 0 62 # page of simultaneous fit63 # page of simultaneous fit 63 64 self.sim_page = None 64 65 self.batch_page = None 65 # #get the state of a page66 # get the state of a page 66 67 self.Bind(basepage.EVT_PAGE_INFO, self._onGetstate) 67 68 self.Bind(basepage.EVT_PREVIOUS_STATE, self._onUndo) … … 80 81 """ 81 82 return an xml node containing state of the panel 82 that guiframe can write to file 83 """ 84 msg = "" 83 that guiframe can write to file 84 """ 85 # Iterate through all pages and check for batch fitting 86 batch_state = None 87 if self.sim_page is not None: 88 batch_state = self.sim_page.set_state() 89 85 90 for uid, page in self.opened_pages.iteritems(): 86 if page.batch_on: 87 pos = self.GetPageIndex(page) 88 if pos != -1 and page not in [self.sim_page, self.batch_page]: 89 msg += "%s .\n" % str(self.GetPageText(pos)) 90 else: 91 data = page.get_data() 92 # state must be cloned 93 state = page.get_state().clone() 94 if data is not None and page.model is not None: 95 new_doc = self._manager.state_reader.write_toXML(data, 96 state) 97 if doc != None and hasattr(doc, "firstChild"): 98 child = new_doc.firstChild.firstChild 99 doc.firstChild.appendChild(child) 100 else: 101 doc = new_doc 102 if msg.strip() != "": 103 temp = "Save Project is not supported for Batch page.\n" 104 temp += "The following pages will not be save:\n" 105 message = temp + msg 106 wx.PostEvent(self._manager.parent, StatusEvent(status=message, 107 info="warning")) 91 data = page.get_data() 92 # state must be cloned 93 state = page.get_state().clone() 94 if data is not None or page.model is not None: 95 new_doc = self._manager.state_reader.write_toXML(data, 96 state, 97 batch_state) 98 if doc is not None and hasattr(doc, "firstChild"): 99 child = new_doc.firstChild.firstChild 100 doc.firstChild.appendChild(child) 101 else: 102 doc = new_doc 103 108 104 return doc 109 105 … … 179 175 def get_state(self): 180 176 """ 181 177 return the state of the current selected page 182 178 """ 183 179 pos = self.GetSelection() … … 191 187 """ 192 188 193 # get number of pages189 # get number of pages 194 190 nop = self.GetPageCount() 195 # use while-loop, for-loop will not do the job well.191 # use while-loop, for-loop will not do the job well. 196 192 while (nop > 0): 197 # delete the first page until no page exists193 # delete the first page until no page exists 198 194 page = self.GetPage(0) 199 195 if self._manager.parent.panel_on_focus == page: … … 201 197 self._close_helper(selected_page=page) 202 198 self.DeletePage(0) 203 nop = nop - 1 204 205 ## save the title of the last page tab added 199 nop = self.GetPageCount() 200 # Clear list of names 206 201 self.fit_page_name = {} 207 # # list of existing fit page202 # Clear list of opened pages 208 203 self.opened_pages = {} 204 self.fit_page_index = 0 205 self.batch_page_index = 0 209 206 210 207 def set_state(self, state): … … 215 212 if state is not None: 216 213 for uid, panel in self.opened_pages.iteritems(): 217 # Don't return any panel is the exact same page is created214 # Don't return any panel is the exact same page is created 218 215 if uid == panel.uid and panel.data == state.data: 219 216 # the page is still opened … … 223 220 if not page_is_opened: 224 221 if state.data.__class__.__name__ != 'list': 225 # To support older state file format222 # To support older state file format 226 223 list_data = [state.data] 227 224 else: 228 # Todo: need new file format for the list225 # Todo: need new file format for the list 229 226 list_data = state.data 230 227 panel = self._manager.add_fit_page(data=list_data) … … 241 238 Clear and close all panels, used by guimanager 242 239 """ 243 244 #close all panels only when svs file opened 240 # close all panels only when svs file opened 245 241 self.close_all() 246 242 self._manager.mypanels = [] 243 self.sim_page = None 244 self.batch_page = None 247 245 248 246 def on_close_page(self, event=None): … … 253 251 selected_page = self.GetPage(self.GetSelection()) 254 252 if nbr_page == 1: 255 if selected_page.get_data() ==None:253 if selected_page.get_data() is not None: 256 254 if event is not None: 257 255 event.Veto() … … 271 269 272 270 if data is None: 273 # the fitpanel exists and only the initial fit page is open274 # with no selected data271 # the fitpanel exists and only the initial fit page is open 272 # with no selected data 275 273 return 276 274 if data.id == deleted_data.id: … … 284 282 285 283 :param manager: instance of plugin fitting 286 287 284 """ 288 285 self._manager = manager … … 333 330 else: 334 331 self.batch_page = SimultaneousFitPage(self, batch_on=True, 335 332 page_finder=page_finder) 336 333 self.batch_page.window_caption = caption 337 334 self.batch_page.window_name = caption … … 346 343 add an empty page 347 344 """ 348 """349 345 if self.batch_on: 350 346 from batchfitpage import BatchFitPage 351 panel = BatchFitPage(parent=self)352 #Increment index of batch page353 self.batch_page_index += 1354 index = self.batch_page_index355 else:356 """357 from fitpage import FitPage358 from batchfitpage import BatchFitPage359 if self.batch_on:360 347 panel = BatchFitPage(parent=self) 361 348 self.batch_page_index += 1 … … 363 350 panel.set_index_model(self.batch_page_index) 364 351 else: 365 #Increment index of fit page 352 # Increment index of fit page 353 from fitpage import FitPage 366 354 panel = FitPage(parent=self) 367 355 self.fit_page_index += 1 … … 441 429 page = None 442 430 for p in self.opened_pages.values(): 443 # check if there is an empty page to fill up431 # check if there is an empty page to fill up 444 432 if not check_data_validity(p.get_data()) and p.batch_on: 445 433 446 # make sure data get placed in 1D empty tab if data is 1D447 # else data get place on 2D tab empty tab434 # make sure data get placed in 1D empty tab if data is 1D 435 # else data get place on 2D tab empty tab 448 436 enable2D = p.get_view_mode() 449 437 if (data.__class__.__name__ == "Data2D" and enable2D)\ … … 458 446 data_type = dlg.get_data() 459 447 dlg.Destroy() 460 if page 448 if page is None: 461 449 page = self.add_empty_page() 462 450 if data_type == 1: 463 # user has selected only data1D451 # user has selected only data1D 464 452 page.fill_data_combobox(data_1d_list) 465 453 elif data_type == 2: 466 454 page.fill_data_combobox(data_2d_list) 467 455 else: 468 # the batch analysis is canceled456 # the batch analysis is canceled 469 457 dlg.Destroy() 470 458 return None … … 503 491 try: 504 492 data = data_list[0] 505 except :493 except Exception: 506 494 # for 'fitv' files 507 495 data_list = [data] … … 511 499 return None 512 500 for page in self.opened_pages.values(): 513 # check if the selected data existing in the fitpanel501 # check if the selected data existing in the fitpanel 514 502 pos = self.GetPageIndex(page) 515 503 if not check_data_validity(page.get_data()) and not page.batch_on: 516 # make sure data get placed in 1D empty tab if data is 1D517 # else data get place on 2D tab empty tab504 # make sure data get placed in 1D empty tab if data is 1D 505 # else data get place on 2D tab empty tab 518 506 enable2D = page.get_view_mode() 519 507 if (data.__class__.__name__ == "Data2D" and enable2D)\ 520 or (data.__class__.__name__ == "Data1D" and not enable2D):508 or (data.__class__.__name__ == "Data1D" and not enable2D): 521 509 page.batch_on = self.batch_on 522 510 page._set_save_flag(not page.batch_on) 523 511 page.fill_data_combobox(data_list) 524 # caption = "FitPage" + str(self.fit_page_index)512 # caption = "FitPage" + str(self.fit_page_index) 525 513 self.SetPageText(pos, page.window_caption) 526 514 self.SetSelection(pos) 527 515 return page 528 # create new page and add data516 # create new page and add data 529 517 page = self.add_empty_page() 530 518 pos = self.GetPageIndex(page) … … 574 562 Delete the given page from the notebook 575 563 """ 576 # remove hint page577 # if selected_page == self.hint_page:564 # remove hint page 565 # if selected_page == self.hint_page: 578 566 # return 579 # #removing sim_page567 # removing sim_page 580 568 if selected_page == self.sim_page: 581 569 self._manager.sim_page = None … … 584 572 self._manager.batch_page = None 585 573 return 586 """ 587 # The below is not working when delete #5 and still have #6. 588 if selected_page.__class__.__name__ == "FitPage": 589 self.fit_page_index -= 1 590 else: 591 self.batch_page_index -= 1 592 """ 593 ## closing other pages 574 # closing other pages 594 575 state = selected_page.createMemento() 595 576 page_finder = self._manager.get_page_finder() 596 # #removing fit page577 # removing fit page 597 578 data = selected_page.get_data() 598 # Don' t remove plot for 2D579 # Don' t remove plot for 2D 599 580 flag = True 600 581 if data.__class__.__name__ == 'Data2D': 601 582 flag = False 602 583 if selected_page in page_finder: 603 # Delete the name of the page into the list of open page584 # Delete the name of the page into the list of open page 604 585 for uid, list in self.opened_pages.iteritems(): 605 #Don't return any panel is the exact same page is created 606 586 # Don't return any panel is the exact same page is created 607 587 if flag and selected_page.uid == uid: 608 588 self._manager.remove_plot(uid, theory=False) … … 610 590 del page_finder[selected_page] 611 591 612 # Delete the name of the page into the list of open page592 # Delete the name of the page into the list of open page 613 593 for uid, list in self.opened_pages.iteritems(): 614 # Don't return any panel is the exact same page is created594 # Don't return any panel is the exact same page is created 615 595 if selected_page.uid == uid: 616 596 del self.opened_pages[selected_page.uid] 617 597 break 618 # #remove the check box link to the model name of this page (selected_page)598 # remove the check box link to the model name of the selected_page 619 599 try: 620 600 self.sim_page.draw_page() 621 601 except: 622 # #that page is already deleted no need to remove check box on623 # #non existing page602 # that page is already deleted no need to remove check box on 603 # non existing page 624 604 pass 625 605 try: 626 606 self.batch_page.draw_page() 627 607 except: 628 # #that page is already deleted no need to remove check box on629 # #non existing page608 # that page is already deleted no need to remove check box on 609 # non existing page 630 610 pass
Note: See TracChangeset
for help on using the changeset viewer.