def ItemsToRepopulate(self) -> List: if self.dataType is DataType.VALVE: return AppGlobals.Chip().valves if self.dataType is DataType.PROGRAM: return AppGlobals.Chip().programs if self.dataType is DataType.PROGRAM_PRESET: return AppGlobals.Chip().programPresets
def Duplicate(self) -> 'ChipItem': newValve = Valve() newValve.position = QPointF(self._valve.position) newValve.name = self._valve.name newValve.solenoidNumber = AppGlobals.Chip().NextSolenoidNumber() AppGlobals.Chip().valves.append(newValve) AppGlobals.Instance().onChipModified.emit() return ValveChipItem(newValve)
def SyncInstances(self): for program in AppGlobals.Chip().programs: if program not in self._instances: self._instances[program] = ProgramInstance(program) for program in self._instances.copy(): if program not in AppGlobals.Chip().programs: del self._instances[program] else: self._instances[program].SyncParameters() self.RefreshList()
def UpdateTitle(self): title = AppGlobals.Chip().path if title: title = title.stem else: title = "New Chip" if AppGlobals.Chip().modified: title += "*" title += " - uChip" self.setWindowTitle(title)
def LoadChip(self): self.viewer.RemoveAll() for valve in AppGlobals.Chip().valves: self.viewer.AddItem(ValveChipItem(valve)) for image in AppGlobals.Chip().images: self.viewer.AddItem(ImageChipItem(image)) for preset in AppGlobals.Chip().programPresets: self.viewer.AddItem(ProgramPresetItem(preset)) self.viewer.Recenter() self.SetEditing(AppGlobals.Chip().editingMode)
def SaveChip(self, saveAs=False) -> bool: if saveAs or not AppGlobals.Chip().HasBeenSaved(): filename, filterType = QFileDialog.getSaveFileName( self, "Save Chip", filter="uChip Project File (*.ucc)") if filename: AppGlobals.Chip().SaveToFile(Path(filename)) AppGlobals.Instance().onChipSaved.emit() return True return False else: AppGlobals.Chip().SaveToFile(AppGlobals.Chip().path) AppGlobals.Instance().onChipSaved.emit() return True
def CloseChip(self) -> bool: if AppGlobals.ProgramRunner().runningPrograms: status = QMessageBox.question( self, "Confirm", "There is a program running. Are you sure you want to stop?") if status is not QMessageBox.Yes: return False AppGlobals.ProgramRunner().StopAll() if self._editorWindow.isVisible(): if not self._editorWindow.RequestCloseAll(): return False if AppGlobals.Chip().modified: ret = QMessageBox.warning( self, "Confirm", "The current chip project has been modified.\nDo you want to save changes?", QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel, QMessageBox.Save) if ret is QMessageBox.Save: if not self.SaveChip(): return False elif ret is QMessageBox.Cancel: return False return True
def SelectProgramPreset(self): if not AppGlobals.Chip().programs: return presetSelection, confirmed = QInputDialog.getItem( self, "Program Preset", "Program", [program.name for program in AppGlobals.Chip().programs], 0, False) if confirmed: selected = [ program for program in AppGlobals.Chip().programs if program.name == presetSelection ][0] newPreset = ProgramPreset(selected) AppGlobals.Chip().programPresets.append(newPreset) AppGlobals.Instance().onChipModified.emit() self.viewer.CenterItem( self.viewer.AddItem(ProgramPresetItem(newPreset)))
def RefreshList(self): self._programsList.blockSignals(True) self._programsList.clear() for program in AppGlobals.Chip().programs: self._programsList.addItem( ProgramListItem(program, self._instances[program])) self._programsList.blockSignals(False)
def Duplicate(self) -> 'ChipItem': newPreset = ProgramPreset(self._preset.instance.program) newPreset.instance = self._preset.instance.Clone() newPreset.position = QPointF(self._preset.position) newPreset.name = self._preset.name AppGlobals.Chip().programPresets.append(newPreset) AppGlobals.Instance().onChipModified.emit() return ProgramPresetItem(newPreset)
def SetEditing(self, editing): self.viewer.SetEditing(editing) self._lockButton.setVisible(editing) self._plusButton.setVisible(editing) self._editButton.setVisible(not editing) AppGlobals.Chip().editingMode = editing self.FloatWidgets()
def BrowseForImage(self): filename, filterType = QFileDialog.getOpenFileName( self, "Browse for Image", filter="Images (*.png *.bmp *.jpg *.jpeg *.tif *.tiff)") if filename: newImage = Image(Path(filename)) AppGlobals.Chip().images.append(newImage) AppGlobals.Instance().onChipModified.emit() self.viewer.CenterItem(self.viewer.AddItem( ImageChipItem(newImage)))
def NewProgram(self): newProgram = Program() AppGlobals.Chip().programs.append(newProgram) AppGlobals.Instance().onChipModified.emit() for item in [ self._programsList.item(row) for row in range(self._programsList.count()) ]: if item.program is newProgram: self._programsList.setCurrentItem(item) self.onProgramEditRequest.emit(newProgram) return
def CheckPrograms(self): modified = False for tab in self.tabs(): title = tab.program.name if tab.modified: modified = True title += "*" self._tabWidget.setTabText(self._tabWidget.indexOf(tab), title) if tab.program not in AppGlobals.Chip().programs: self.deleteLater() current: ProgramEditorTab = self._tabWidget.currentWidget() if current: title = current.program.name if modified: title += " *" title += " | uChip Program Editor" self.setWindowTitle(title)
def DeleteProgram(self, program: Program): if QMessageBox.question( self, "Confirm Deletion", "Are you sure you want to delete " + program.name + "?") is QMessageBox.Yes: AppGlobals.Chip().programs.remove(program) AppGlobals.Instance().onChipModified.emit()
def AddValve(self): newValve = Valve() newValve.solenoidNumber = AppGlobals.Chip().NextSolenoidNumber() AppGlobals.Chip().valves.append(newValve) AppGlobals.Instance().onChipModified.emit() self.viewer.CenterItem(self.viewer.AddItem(ValveChipItem(newValve)))
def CheckForProgram(self): if self.program not in AppGlobals.Chip().programs: self.deleteLater()
def RequestDelete(self): super().RequestDelete() AppGlobals.Chip().programPresets.remove(self._preset) AppGlobals.Instance().onChipModified.emit()
def RequestDelete(self): AppGlobals.Chip().valves.remove(self._valve) AppGlobals.Instance().onChipModified.emit()
def CheckForValve(self): if self._valve not in AppGlobals.Chip().valves: self.RemoveItem()
def CheckForPreset(self): if self._preset not in AppGlobals.Chip().programPresets: self.RemoveItem()