Changeset 345b3b3 in sasview for src/sas/qtgui/MainWindow/DataExplorer.py
- Timestamp:
- Oct 9, 2018 2:08:54 PM (5 years ago)
- 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:
- b95d748
- Parents:
- f20ea3f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/qtgui/MainWindow/DataExplorer.py
r3b95b3b r345b3b3 233 233 filename = QtWidgets.QFileDialog.getOpenFileName(**kwargs)[0] 234 234 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) 274 236 275 237 def saveProject(self): … … 285 247 name_tuple = QtWidgets.QFileDialog.getSaveFileName(**kwargs) 286 248 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) 294 339 295 340 def deleteFile(self, event): … … 1394 1439 checkbox_item.setCheckable(True) 1395 1440 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)) 1397 1443 1398 1444 # Add the actual Data1D/Data2D object
Note: See TracChangeset
for help on using the changeset viewer.