Ignore:
Timestamp:
Aug 14, 2017 4:33:18 AM (7 years ago)
Author:
Piotr Rozyczko <rozyczko@…>
Branches:
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
Children:
377ade1
Parents:
ee18d33
Message:

SASVIEW-644: mapping between datasets and fit tabs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py

    ree18d33 r38eb433  
    3232        self.currentTab = 0 
    3333 
    34         # The current optimizer 
     34        # The default optimizer 
    3535        self.optimizer = 'Levenberg-Marquardt' 
     36 
     37        # Dataset inde -> Fitting tab mapping 
     38        self.dataToFitTab = {} 
    3639 
    3740        # The tabs need to be closeable 
     
    4548        # Deal with signals 
    4649        self.tabCloseRequested.connect(self.tabCloses) 
     50        self.communicate.dataDeletedSignal.connect(self.dataDeleted) 
    4751 
    4852        # Perspective window not allowed to close by default 
     
    104108        tab.is_batch_fitting = is_batch 
    105109        # Add this tab to the object library so it can be retrieved by scripting/jupyter 
    106         ObjectLibrary.addObject(self.tabName(), tab) 
     110        tab_name = self.tabName(is_batch=is_batch) 
     111        ObjectLibrary.addObject(tab_name, tab) 
    107112        self.tabs.append(tab) 
     113        if data: 
     114            self.updateFitDict(data, tab_name) 
    108115        self.maxIndex += 1 
    109         self.addTab(tab, self.tabName()) 
    110  
    111     def tabName(self): 
     116        self.addTab(tab, tab_name) 
     117 
     118    def updateFitDict(self, item_key, tab_name): 
     119        """ 
     120        Create a list if none exists and append if there's already a list 
     121        """ 
     122        if item_key in self.dataToFitTab.keys(): 
     123            self.dataToFitTab[item_key].append(tab_name) 
     124        else: 
     125            self.dataToFitTab[item_key] = [tab_name] 
     126 
     127        #print "CURRENT dict: ", self.dataToFitTab 
     128 
     129    def tabName(self, is_batch=False): 
    112130        """ 
    113131        Get the new tab name, based on the number of fitting tabs so far 
    114132        """ 
    115         page_name = "FitPage" + str(self.maxIndex) 
     133        page_name = "BatchPage" if is_batch else "FitPage" 
     134        page_name = page_name + str(self.maxIndex) 
    116135        return page_name 
    117136 
     137    def resetTab(self, index): 
     138        """ 
     139        Adds a new tab and removes the last tab 
     140        as a way of resetting the fit tabs 
     141        """ 
     142        # If data on tab empty - do nothing 
     143        if not self.tabs[index].data: 
     144            return 
     145        # Add a new, empy tab 
     146        self.addFit(None) 
     147        # Remove the previous last tab 
     148        self.tabCloses(index) 
     149 
    118150    def tabCloses(self, index): 
    119151        """ 
    120152        Update local bookkeeping on tab close 
    121153        """ 
    122         assert len(self.tabs) >= index 
     154        #assert len(self.tabs) >= index 
    123155        # don't remove the last tab 
    124156        if len(self.tabs) <= 1: 
     157            self.resetTab(index) 
    125158            return 
    126         ObjectLibrary.deleteObjectByRef(self.tabs[index]) 
    127         del self.tabs[index] 
    128         self.removeTab(index) 
     159        try: 
     160            ObjectLibrary.deleteObjectByRef(self.tabs[index]) 
     161            self.removeTab(index) 
     162            del self.tabs[index] 
     163        except IndexError: 
     164            # The tab might have already been deleted previously 
     165            pass 
     166 
     167    def closeTabByName(self, tab_name): 
     168        """ 
     169        Given name of the fitting tab - close it 
     170        """ 
     171        for tab_index in xrange(len(self.tabs)): 
     172            if self.tabText(tab_index) == tab_name: 
     173                self.tabCloses(tab_index) 
     174        pass # debug hook 
     175 
     176    def dataDeleted(self, index_list): 
     177        """ 
     178        Delete fit tabs referencing given data 
     179        """ 
     180        if not index_list or not self.dataToFitTab: 
     181            return 
     182        for index_to_delete in index_list: 
     183            if index_to_delete in self.dataToFitTab.keys(): 
     184                for tab_name in self.dataToFitTab[index_to_delete]: 
     185                    # delete tab #index after corresponding data got removed 
     186                    self.closeTabByName(tab_name) 
     187                self.dataToFitTab.pop(index_to_delete) 
     188 
     189        #print "CURRENT dict: ", self.dataToFitTab 
    129190 
    130191    def allowBatch(self): 
     
    158219 
    159220            if numpy.any(available_tabs): 
    160                 self.tabs[available_tabs.index(True)].data = data 
     221                first_good_tab = available_tabs.index(True) 
     222                self.tabs[first_good_tab].data = data 
     223                tab_name = str(self.tabText(first_good_tab)) 
     224                self.updateFitDict(data, tab_name) 
    161225            else: 
    162226                self.addFit(data, is_batch=is_batch) 
Note: See TracChangeset for help on using the changeset viewer.