Changeset b95d748 in sasview for src/sas/qtgui/MainWindow


Ignore:
Timestamp:
Oct 17, 2018 8:00:00 AM (6 years ago)
Author:
Piotr Rozyczko <piotr.rozyczko@…>
Branches:
ESS_GUI, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc
Children:
10d57f6
Parents:
345b3b3 (diff), dd545d1 (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.
Message:

Merge branch 'ESS_GUI' into ESS_GUI_project_save

Location:
src/sas/qtgui/MainWindow
Files:
4 edited

Legend:

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

    re258c53 refaf022  
    136136        self.logDockWidget = QDockWidget("Log Explorer", self._workspace) 
    137137        self.logDockWidget.setObjectName("LogDockWidget") 
     138        self.logDockWidget.visibilityChanged.connect(self.updateLogContextMenus) 
     139 
    138140 
    139141        self.listWidget = QTextBrowser() 
     
    178180            logger.error("%s: could not load SasView models") 
    179181            logger.error(traceback.format_exc()) 
     182 
     183    def updateLogContextMenus(self, visible=False): 
     184        """ 
     185        Modify the View/Data Explorer menu item text on widget visibility 
     186        """ 
     187        if visible: 
     188            self._workspace.actionHide_LogExplorer.setText("Hide Log Explorer") 
     189        else: 
     190            self._workspace.actionHide_LogExplorer.setText("Show Log Explorer") 
    180191 
    181192    def updateContextMenus(self, visible=False): 
     
    433444        """ 
    434445        # disable not yet fully implemented actions 
    435         self._workspace.actionOpen_Analysis.setEnabled(False) 
    436         self._workspace.actionUndo.setEnabled(False) 
    437         self._workspace.actionRedo.setEnabled(False) 
    438         self._workspace.actionReset.setEnabled(False) 
    439         self._workspace.actionStartup_Settings.setEnabled(False) 
    440         self._workspace.actionImage_Viewer.setEnabled(False) 
    441         self._workspace.actionCombine_Batch_Fit.setEnabled(False) 
    442         self._workspace.actionFit_Results.setEnabled(False) 
     446        self._workspace.actionOpen_Analysis.setVisible(False) 
     447        self._workspace.actionUndo.setVisible(False) 
     448        self._workspace.actionRedo.setVisible(False) 
     449        self._workspace.actionReset.setVisible(False) 
     450        self._workspace.actionStartup_Settings.setVisible(False) 
     451        self._workspace.actionImage_Viewer.setVisible(False) 
     452        self._workspace.actionCombine_Batch_Fit.setVisible(False) 
     453        self._workspace.actionFit_Results.setVisible(False) 
    443454        # orientation viewer set to invisible SASVIEW-1132 
    444455        self._workspace.actionOrientation_Viewer.setVisible(False) 
     
    467478        self._workspace.actionCategory_Manager.triggered.connect(self.actionCategory_Manager) 
    468479        self._workspace.actionHide_DataExplorer.triggered.connect(self.actionHide_DataExplorer) 
     480        self._workspace.actionHide_LogExplorer.triggered.connect(self.actionHide_LogExplorer) 
    469481        # Tools 
    470482        self._workspace.actionData_Operation.triggered.connect(self.actionData_Operation) 
     
    654666        """ 
    655667        if self.dockedFilesWidget.isVisible(): 
    656             #self._workspace.actionHide_DataExplorer.setText("Show Data Explorer") 
    657668            self.dockedFilesWidget.setVisible(False) 
    658669        else: 
    659             #self._workspace.actionHide_DataExplorer.setText("Hide Data Explorer") 
    660670            self.dockedFilesWidget.setVisible(True) 
     671        pass 
     672 
     673    def actionHide_LogExplorer(self): 
     674        """ 
     675        Toggle Data Explorer vsibility 
     676        """ 
     677        if self.logDockWidget.isVisible(): 
     678            self.logDockWidget.setVisible(False) 
     679        else: 
     680            self.logDockWidget.setVisible(True) 
    661681        pass 
    662682 
  • src/sas/qtgui/MainWindow/UI/MainWindowUI.ui

    rfc5d2d7f refaf022  
    2525     <y>0</y> 
    2626     <width>915</width> 
    27      <height>26</height> 
     27     <height>21</height> 
    2828    </rect> 
    2929   </property> 
     
    7575    <addaction name="actionHide_Toolbar"/> 
    7676    <addaction name="actionHide_DataExplorer"/> 
     77    <addaction name="actionHide_LogExplorer"/> 
    7778    <addaction name="separator"/> 
    7879    <addaction name="actionStartup_Settings"/> 
     
    565566   </property> 
    566567  </action> 
     568  <action name="actionHide_LogExplorer"> 
     569   <property name="text"> 
     570    <string>Hide Log Explorer</string> 
     571   </property> 
     572  </action> 
    567573 </widget> 
    568574 <resources/> 
  • src/sas/qtgui/MainWindow/DataExplorer.py

    r3b95b3b r345b3b3  
    233233        filename = QtWidgets.QFileDialog.getOpenFileName(**kwargs)[0] 
    234234        if filename: 
    235             load_thread = threads.deferToThread(self.readProject, filename) 
    236             load_thread.addCallback(self.readProjectComplete) 
    237             load_thread.addErrback(self.readProjectFailed) 
    238  
    239     def loadFailed(self, reason): 
    240         """ 
    241         """ 
    242         print("file load FAILED: ", reason) 
    243         pass 
    244  
    245     def readProjectFailed(self, reason): 
    246         """ 
    247         """ 
    248         print("readProjectFailed FAILED: ", reason) 
    249         pass 
    250  
    251     def readProject(self, filename): 
    252         self.communicator.statusBarUpdateSignal.emit("Loading Project... %s" % os.path.basename(filename)) 
    253         try: 
    254             manager = DataManager() 
    255             with open(filename, 'r') as infile: 
    256                 manager.load_from_readable(infile) 
    257  
    258             self.communicator.statusBarUpdateSignal.emit("Loaded Project: %s" % os.path.basename(filename)) 
    259             return manager 
    260  
    261         except: 
    262             self.communicator.statusBarUpdateSignal.emit("Failed: %s" % os.path.basename(filename)) 
    263             raise 
    264  
    265     def readProjectComplete(self, manager): 
    266         self.model.clear() 
    267  
    268         self.manager.assign(manager) 
    269         self.model.beginResetModel() 
    270         for id, item in self.manager.get_all_data().items(): 
    271             self.updateModel(item.data, item.path) 
    272  
    273         self.model.endResetModel() 
     235            self.readProject(filename) 
    274236 
    275237    def saveProject(self): 
     
    285247        name_tuple = QtWidgets.QFileDialog.getSaveFileName(**kwargs) 
    286248        filename = name_tuple[0] 
    287         if filename: 
    288             _, extension = os.path.splitext(filename) 
    289             if not extension: 
    290                 filename = '.'.join((filename, 'json')) 
    291             self.communicator.statusBarUpdateSignal.emit("Saving Project... %s\n" % os.path.basename(filename)) 
    292             with open(filename, 'w') as outfile: 
    293                 self.manager.save_to_writable(outfile) 
     249        if not filename: 
     250            return 
     251        _, extension = os.path.splitext(filename) 
     252        if not extension: 
     253            filename = '.'.join((filename, 'json')) 
     254        self.communicator.statusBarUpdateSignal.emit("Saving Project... %s\n" % os.path.basename(filename)) 
     255 
     256        with open(filename, 'w') as outfile: 
     257            self.saveDataToFile(outfile) 
     258 
     259    def allDataForModel(self, model): 
     260        # data model 
     261        all_data = {} 
     262        for i in range(model.rowCount()): 
     263            properties = {} 
     264            item = model.item(i) 
     265            data = GuiUtils.dataFromItem(item) 
     266            if data is None: continue 
     267            # Now, all plots under this item 
     268            filename = data.filename 
     269            is_checked = item.checkState() 
     270            properties['checked'] = is_checked 
     271            other_datas = GuiUtils.plotsFromFilename(filename, model) 
     272            # skip the main plot 
     273            other_datas = list(other_datas.values())[1:] 
     274            all_data[data.id] = [data, properties, other_datas] 
     275        return all_data 
     276 
     277    def saveDataToFile(self, outfile): 
     278        """ 
     279        Save every dataset to a json file 
     280        """ 
     281        data = self.allDataForModel(self.model) 
     282        theory = self.allDataForModel(self.theory_model) 
     283 
     284        all_data = {} 
     285        for key, value in data.items(): 
     286            all_data[key] = value 
     287        for key, value in theory.items(): 
     288            if key in all_data: 
     289                raise ValueError("Inconsistent data in Project file.") 
     290            all_data[key] = value 
     291 
     292        # perspectives 
     293        current_perspective = self._perspective() 
     294        try: 
     295            perspective_dump = current_perspective.getCurrentStateAsXml() 
     296        except Exception: 
     297            ex = "State of " + current_perspective.windowTitle() + \ 
     298                " cannot be saved." 
     299            logging.error(ex) 
     300        if perspective_dump is not None: 
     301            assert(isinstance(perspective_dump, dict)) 
     302            all_data['perspective'] = perspective_dump 
     303        # save datas 
     304        GuiUtils.saveData(outfile, all_data) 
     305        return 
     306 
     307    def readProject(self, filename): 
     308        """ 
     309        Read out datasets and fitpages from file 
     310        """ 
     311        with open(filename, 'r') as infile: 
     312            all_data = GuiUtils.readDataFromFile(infile) 
     313        # clear the model 
     314        self.model.clear() 
     315 
     316        #self.model.beginResetModel() 
     317        for key, value in all_data.items(): 
     318            # key - cardinal number of dataset 
     319            # value - main dataset, [dependant filesets] 
     320            # add the main index 
     321            new_data = value[0] 
     322            assert isinstance(new_data, (Data1D, Data2D)) 
     323            properties = value[1] 
     324            is_checked = properties['checked'] 
     325            new_item = GuiUtils.createModelItemWithPlot(new_data, new_data.filename) 
     326            new_item.setCheckState(is_checked) 
     327            model = self.theory_model 
     328            if new_data.is_data: 
     329                model = self.model 
     330            model.appendRow(new_item) 
     331            self.manager.add_data(data_list={new_data.id:new_data}) 
     332 
     333            # Add the underlying data 
     334            if not value[2]: 
     335                continue 
     336            for plot in value[2]: 
     337                assert isinstance(plot, (Data1D, Data2D)) 
     338                GuiUtils.updateModelItemWithPlot(new_item, plot, plot.name) 
    294339 
    295340    def deleteFile(self, event): 
     
    13941439        checkbox_item.setCheckable(True) 
    13951440        checkbox_item.setCheckState(QtCore.Qt.Checked) 
    1396         checkbox_item.setText(os.path.basename(p_file)) 
     1441        if p_file is not None: 
     1442            checkbox_item.setText(os.path.basename(p_file)) 
    13971443 
    13981444        # Add the actual Data1D/Data2D object 
  • src/sas/qtgui/MainWindow/DataManager.py

    re2e5f3d r345b3b3  
    2929from sas.qtgui.Plotting.PlotterData import Data1D 
    3030from sas.qtgui.Plotting.PlotterData import Data2D 
    31 from sas.qtgui.Plotting.Plottables import Plottable 
    3231from sas.qtgui.Plotting.Plottables import PlottableTheory1D 
    3332from sas.qtgui.Plotting.Plottables import PlottableFit1D 
Note: See TracChangeset for help on using the changeset viewer.