def loadPredictionSettings(self, file=None): if file is None: file = self.settingsFile predictionSettings = loadSetting(file, 'predictionSettings') if not predictionSettings is None: if isinstance(predictionSettings, str): print( 'Please save a new gui state to comply with the new version' ) return self.predictionSettings = predictionSettings
def loadGuiSettings(self, file=None): if file is None: file = self.settingsFile guiSettings = loadSetting(file, 'guiSettings') boxStates = guiSettings['boxStates'] if not boxStates is None: for box, value in zip(self.boxContainers, boxStates): try: if box.state != value: box.on_pressed() except AttributeError: pass
def loadCheckBoxes(self,file=None): if file is None: file = self.settingsFile checkBoxString = loadSetting(file,'checkBoxes') if not checkBoxString is None: if isinstance(checkBoxString,str): print('Please save a new gui state to comply with the new version') return for item,value in checkBoxString.items(): try: getattr(self.ui,item).setChecked(value) except AttributeError: pass
def loadLineEdits(self,file=None): if file is None: file = self.settingsFile lineEditValueString = loadSetting(file,'lineEdits') if not lineEditValueString is None: if isinstance(lineEditValueString,str): print('Please save a new gui state to comply with the new version') return for item,value in lineEditValueString.items(): try: getattr(self.ui,item).setText(value) except AttributeError: pass
def __init__(self, AppContext): super(MJOLNIRMainWindow, self).__init__() self.ui = Ui_MainWindow() self.AppContext = AppContext self.version = self.AppContext.build_settings['version'] ### Settings saved in .MJOLNIRGuiSettings self.settingsFile = path.join(home, '.MJOLNIRGuiSettings') self.views = [] guiSettings = loadSetting(self.settingsFile, 'guiSettings') #if guiSettings is None: # self.theme = 'light' #else: # if not 'theme' in guiSettings: # self.theme = 'light' # else: # self.theme = guiSettings['theme'] self.ui.setupUi(self) self.update() icon = QtGui.QIcon() icon.addPixmap( QtGui.QPixmap( self.AppContext.get_resource('Icons/Own/MJOLNIR.png'))) self.setWindowIcon(icon) # List to hold all views that need to be setup self.views = [] ## Set up DataSetManager self.ui.dataSetManager = DataSetManager(self.ui.fixedOpen, self) self.update() self.views.append(self.ui.dataSetManager) # Lists of views in shown order self.nameList = [ 'View3D', 'QE line', 'Q plane', '1D cuts', '1D raw data', 'Masking' ] # 'Normalization' self.viewClasses = [ View3DManager, QELineManager, QPlaneManager, Cut1DManager, Raw1DManager ] #[View3D,View3D,View3D,Cut1D,Raw1D] # NormalizationManager self.startState = [True, False, False, False, True, False] # If not collapsed #False # Find correct layout to insert views vlay = QtWidgets.QVBoxLayout(self.ui.collapsibleContainer) # Insert all views self.boxContainers = [] for name, Type, state in zip(self.nameList, self.viewClasses, self.startState): self.update() box = CollapsibleBox(name, startState=state) self.boxContainers.append(box) vlay.addWidget(box) lay = QtWidgets.QVBoxLayout() widget = Type(guiWindow=self) #if Type == NormalizationManager: # Get a reference to the sample manager directly in self # self.normalizationManager = widget self.views.append(widget) lay.addWidget(widget) box.setContentLayout(lay) vlay.addStretch() self.maskingManager = MaskManager(self) self.windows = [] # Holder for generated plotting windows self.dataSets = [] self.current_timer = None self.blockItems = [ getattr(self.ui, item) for item in self.ui.__dict__ if '_button' in item[-7:] ] # Collect all items to block on calls self.blockItems.append(self.ui.DataSet_binning_comboBox) self.lineEdits = [ getattr(self.ui, item) for item in self.ui.__dict__ if '_lineEdit' in item[-9:] ] # Collect all lineedits self.radioButtons = [ getattr(self.ui, item) for item in self.ui.__dict__ if '_radioButton' in item ] # Collect all radiobuttons self.spinBoxes = [ getattr(self.ui, item) for item in self.ui.__dict__ if '_spinBox' in item[-8:] ] # Collect all spinboxes self.checkBoxes = [ getattr(self.ui, item) for item in self.ui.__dict__ if '_checkBox' in item[-9:] ] # Collect all checkboxes self.update() initGenerateScript(self) for view in self.views: # Run through all views to set them up view.setup() setupGenerateScript(self) self.update() self.setupMenu() self.update() self.setupStateMachine() self.update() self.stateMachine.run() self.update() self.loadFolder() # Load last folder as default self.loadedGuiSettings = None self.ui.menubar.setNativeMenuBar(False) if sys.platform.lower() == 'darwin': ## Update image of arrows to correct style on mac correctedArrows = """QToolButton::down-arrow { image: url(""" + self.AppContext.get_resource('down.png') + """); } QToolButton::right-arrow { image: url(""" + self.AppContext.get_resource('right.png') + """); }""" self.setStyleSheet(self.styleSheet() + correctedArrows)
def loadGui(self, presetFileLocation=None): # Load saveFile if not hasattr(self, 'loadedSettingsFolder'): folder = home else: folder = self.loadedSettingsFolder if presetFileLocation is None: # When no file is provided, open file dialogue settingsFile, _ = QtWidgets.QFileDialog.getOpenFileName( self, "Open GUI settings file", folder, "Setting (*.MJOLNIRGuiSettings);;All Files (*)") else: settingsFile = presetFileLocation self.update() self.loadedSettingsFolder = os.path.dirname(settingsFile) self.loadedSettingsFile = settingsFile if settingsFile is None or settingsFile == '': return False self.setProgressBarLabelText('Deleating Old Data Sets and Files') while self.DataSetModel.rowCount(None) > 0: self.DataSetModel.delete( self.DataSetModel.getCurrentDatasetIndex()) else: self.DataSetModel.layoutChanged.emit() self.DataFileModel.updateCurrentDataSetIndex() self.update() dataSetString = loadSetting(settingsFile, 'dataSet') totalFiles = np.sum([ len(dsDict['files']) + np.sum(1 - np.array([d is None for d in dsDict['binning']])) + 1 for dsDict in dataSetString ]) + 1 # Get estimate of total number of data files self.setProgressBarMaximum(totalFiles) counter = 0 for dsDict in dataSetString: self.setProgressBarLabelText('Loading Data Set') DSName = dsDict['name'] files = dsDict['files'] dfs = None if len(files) != 0: # If files in dataset, continue dfs = [] for dfLocation in files: df = GuiDataFile(dfLocation) self.update() dfs.append(df) counter += 1 self.setProgressBarValue(counter) if DSName == '': continue ds = GuiDataSet(name=DSName, dataFiles=dfs) if 'binning' in dsDict: if not np.any([b is None for b in dsDict['binning']]): binnings = dsDict['binning'] for df, binning in zip(ds, binnings): df.binning = binning self.setProgressBarLabelText('Converting Data Set') ds.convertDataFile(guiWindow=self, setProgressBarMaximum=False) self.update() self.DataSetModel.append(ds) self.DataSetModel.layoutChanged.emit() self.update() counter += 1 self.setProgressBarValue(counter) DataFileListInfos = loadSetting(settingsFile, 'infos') if not DataFileListInfos is None: self.DataFileInfoModel.infos = DataFileListInfos self.loadGuiSettings(file=settingsFile) self.loadLineEdits(file=settingsFile) self.loadRadioButtons(file=settingsFile) # self.loadSpinBoxes(file=settingsFile) # self.loadCheckBoxes(file=settingsFile) self.DataSetModel.layoutChanged.emit() self.DataFileInfoModel.layoutChanged.emit() self.DataFileModel.updateCurrentDataSetIndex() self.update() self.loadedGuiSettings = self.generateCurrentGuiSettings() return True
def loadFolder(self): fileDir = loadSetting(self.settingsFile, 'fileDir') if not fileDir is None: self.setCurrentDirectory(fileDir)
def loadGui(self, presetFileLocation=None): # Load saveFile if not hasattr(self, 'loadedSettingsFolder'): folder = home else: folder = self.loadedSettingsFolder if presetFileLocation is None: # When no file is provided, open file dialogue settingsFile, _ = QtWidgets.QFileDialog.getOpenFileName( self, "Open GUI settings file", folder, "Setting (*.MJOLNIRGuiSettings);;All Files (*)") else: settingsFile = presetFileLocation self.update() self.loadedSettingsFolder = os.path.dirname(settingsFile) self.loadedSettingsFile = settingsFile if settingsFile is None or settingsFile == '': return False self.setProgressBarLabelText('Deleating Old Data Sets and Files') while self.DataSetModel.rowCount(None) > 0: self.DataSetModel.delete( self.DataSetModel.getCurrentDatasetIndex()) else: self.DataSetModel.layoutChanged.emit() self.DataFileModel.updateCurrentDataSetIndex() self.update() dataSetString = loadSetting(settingsFile, 'dataSet') totalFiles = np.sum([ len(dsDict['files']) + np.sum(1 - np.array([d is None for d in dsDict['binning']])) + 1 for dsDict in dataSetString ]) + 1 # Get estimate of total number of data files self.setProgressBarMaximum(totalFiles) self.setProgressBarValue(0) for dsDict in dataSetString: DSName = dsDict['name'] self.setProgressBarLabelText('Loading Data Set \'' + DSName + '\'') files = dsDict['files'] # data or foreground data if 'background' in dsDict: # Data set is a subtracted set! background = dsDict['background'] if len(files) != 0: # If files in dataset, continue dfs = [] for dfLocation in files: df = GuiDataFile(dfLocation) self.update() dfs.append(df) self.addProgressBarValue(0.5) dfsBG = [] for dfLocation in background: df = GuiDataFile(dfLocation) self.update() dfsBG.append(df) self.addProgressBarValue(0.5) foreground_ds = GuiDataSet(name='fg', dataFiles=dfs) background_ds = GuiDataSet(name='bg', dataFiles=dfsBG) binnings = dsDict['binning'] if dsDict['convertBeforeSubtract']: self.setProgressBarLabelText('Converting Data Set \'' + DSName + '\'') for df, binning in zip( foreground_ds, binnings): # Give the correct binning df.binning = binning foreground_ds.convertDataFile( guiWindow=self, setProgressBarMaximum=False, progressUpdate=0.5, printFunction=self.writeToStatus) self.update() for df, binning in zip( background_ds, binnings ): # Assume binning is the same across data sets df.binning = binning background_ds.convertDataFile( guiWindow=self, setProgressBarMaximum=False, progressUpdate=0.5, printFunction=self.writeToStatus) self.update() temp = foreground_ds - background_ds ds = GuiDataSet(name=DSName, dataSet=temp) ds.background = background ds.convertBeforeSubtract = dsDict['convertBeforeSubtract'] if not ds.convertBeforeSubtract: # Convert after subtraction if needed if not np.any([b is None for b in dsDict['binning']]): self.setProgressBarLabelText( 'Converting Data Set \'' + DSName + '\'') ds.convertDataFile( guiWindow=self, setProgressBarMaximum=False, printFunction=self.writeToStatus) self.update() else: # Regular dataset dfs = None if len(files) != 0: # If files in dataset, continue dfs = [] for dfLocation in files: df = GuiDataFile(dfLocation) self.update() dfs.append(df) self.addProgressBarValue(1) ds = GuiDataSet(name=DSName, dataFiles=dfs) if 'binning' in dsDict: if not np.any([b is None for b in dsDict['binning']]): binnings = dsDict['binning'] for df, binning in zip(ds, binnings): df.binning = binning self.setProgressBarLabelText('Converting Data Set \'' + DSName + '\'') ds.convertDataFile(guiWindow=self, setProgressBarMaximum=False, printFunction=self.writeToStatus) self.update() self.DataSetModel.append(ds) self.DataSetModel.layoutChanged.emit() self.update() self.addProgressBarValue(1) DataFileListInfos = loadSetting(settingsFile, 'infos') if not DataFileListInfos is None: self.DataFileInfoModel.infos = DataFileListInfos self.loadGuiSettings(file=settingsFile) self.loadLineEdits(file=settingsFile) self.loadRadioButtons(file=settingsFile) # self.loadSpinBoxes(file=settingsFile) # self.loadCheckBoxes(file=settingsFile) self.loadPredictionSettings(file=settingsFile) self.DataSetModel.layoutChanged.emit() self.DataFileInfoModel.layoutChanged.emit() self.DataFileModel.updateCurrentDataSetIndex() self.update() self.loadedGuiSettings = self.generateCurrentGuiSettings() return True