Changeset 38eb433 in sasview for src/sas/qtgui


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

Location:
src/sas/qtgui
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src/sas/qtgui/MainWindow/DataExplorer.py

    ree18d33 r38eb433  
    279279        ind = -1 
    280280        # Use 'while' so the row count is forced at every iteration 
     281        deleted_indices = [] 
    281282        while ind < self.model.rowCount(): 
    282283            ind += 1 
     
    284285            if item and item.isCheckable() and item.checkState() == QtCore.Qt.Checked: 
    285286                # Delete these rows from the model 
     287                deleted_indices.append(item) 
    286288                self.model.removeRow(ind) 
    287289                # Decrement index since we just deleted it 
    288290                ind -= 1 
    289291 
    290         # pass temporarily kept as a breakpoint anchor 
    291         pass 
     292        # Let others know we deleted data 
     293        self.communicator.dataDeletedSignal.emit(deleted_indices) 
    292294 
    293295    def deleteTheory(self, event): 
  • 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) 
  • src/sas/qtgui/Perspectives/Fitting/FittingWidget.py

    ree18d33 r38eb433  
    311311                self.cbFileNames.addItem(filename) 
    312312            self.cbFileNames.setVisible(True) 
     313            # This panel is not designed to view individual fits, so disable plotting 
     314            self.cmdPlot.setVisible(False) 
    313315        # Similarly on other tabs 
    314316        self.options_widget.setEnablementOnDataLoad() 
  • src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui

    ree18d33 r38eb433  
    3434       <item row="0" column="0"> 
    3535        <widget class="QComboBox" name="cbFileNames"> 
     36         <property name="toolTip"> 
     37          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Choose a file to set initial fit parameters.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> 
     38         </property> 
    3639         <property name="sizeAdjustPolicy"> 
    3740          <enum>QComboBox::AdjustToContents</enum> 
  • src/sas/qtgui/Utilities/GuiUtils.py

    r985ad94 r38eb433  
    245245    # Current perspective changed 
    246246    perspectiveChangedSignal = QtCore.pyqtSignal(str) 
     247 
     248    # File/dataset got deleted 
     249    dataDeletedSignal = QtCore.pyqtSignal(list) 
    247250 
    248251 
Note: See TracChangeset for help on using the changeset viewer.