from PyQt5.QtWidgets import (QCheckBox, QComboBox, QDialog, QDialogButtonBox, QFormLayout, QHBoxLayout, QLabel, QMessageBox, QPushButton) from .data import ppiList, sheetDimensionList class paperDims(QDialog): """ Utility dialog box to adjust the current canvas's dimensions, might return just dimensions later so that sizes do not need to be imported in every other module. """ def __init__(self, parent=None, size='A4', ppi='72', name='Canvas Size', landscape=False): super(paperDims, self).__init__(parent) #store initial values to show currently set value, also updated when changed. these are returned at EOL self.returnCanvasSize = size self.returnCanvasPPI = ppi self.setWindowTitle(name+" :Canvas Size") #Set Window Title #init layout dialogBoxLayout = QFormLayout(self) sizeComboBox = QComboBox() #combo box for paper sizes sizeComboBox.addItems(sheetDimensionList) sizeComboBox.setCurrentIndex(4) sizeComboBox.activated[str].connect(lambda size: setattr(self, "returnCanvasSize", size)) sizeLabel = QLabel("Canvas Size") sizeLabel.setBuddy(sizeComboBox) # label for the above combo box sizeComboBox.setCurrentIndex(sheetDimensionList.index(self.returnCanvasSize)) #set index to current value of canvas dialogBoxLayout.setWidget(0, QFormLayout.LabelRole, sizeLabel) dialogBoxLayout.setWidget(0, QFormLayout.FieldRole, sizeComboBox) ppiComboBox = QComboBox() #combo box for ppis ppiComboBox.addItems(ppiList) ppiComboBox.activated[str].connect(lambda ppi: setattr(self, "returnCanvasPPI", ppi)) ppiLabel = QLabel("Canvas ppi") ppiLabel.setBuddy(ppiComboBox) # label for the above combo box ppiComboBox.setCurrentIndex(ppiList.index(self.returnCanvasPPI)) #set index to current value of canvas dialogBoxLayout.setWidget(1, QFormLayout.LabelRole, ppiLabel) dialogBoxLayout.setWidget(1, QFormLayout.FieldRole, ppiComboBox) self.landscapeCheckBox = QCheckBox('&Landscape Mode') self.landscapeCheckBox.setChecked(landscape) dialogBoxLayout.setWidget(2, QFormLayout.SpanningRole, self.landscapeCheckBox) # add ok and cancel buttons buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self) buttonBox.accepted.connect(self.accept) buttonBox.rejected.connect(self.reject) dialogBoxLayout.addWidget(buttonBox) self.setLayout(dialogBoxLayout) self.resize(300,100) #resize to a certain size def exec_(self): #overload exec_ to add return values and delete itself(currently being tested) super(paperDims, self).exec_() self.deleteLater() #remove from memory #if ok was pressed return value else return None return (self.returnCanvasSize, self.returnCanvasPPI, self.landscapeCheckBox.isChecked()) if self.result() else None class sideViewSwitchDialog(QDialog): """ Custom dialog box to show, all available tabs to set the side view to. Also has accept reject events. Structure is similar to paperDims dialog box. """ def __init__(self, parent=None, tabList = None, initial = None): super(sideViewSwitchDialog, self).__init__(parent=parent) self.tabList = tabList self.returnVal = initial self.initial = initial dialogBoxLayout = QFormLayout(self) tabListComboBox = QComboBox() tabListComboBox.addItems(self.tabList) tabListComboBox.activated[str].connect(lambda x: setattr(self, 'returnVal', self.tabList.index(x))) tabLabel = QLabel("Change Side View") tabLabel.setBuddy(tabListComboBox) # label for the above combo box tabListComboBox.setCurrentIndex(self.returnVal) dialogBoxLayout.setWidget(1, QFormLayout.LabelRole, tabLabel) dialogBoxLayout.setWidget(1, QFormLayout.FieldRole, tabListComboBox) # add ok and cancel buttons buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self) buttonBox.accepted.connect(self.accept) buttonBox.rejected.connect(self.reject) dialogBoxLayout.addWidget(buttonBox) self.setLayout(dialogBoxLayout) self.resize(300,100) #resize to a certain size def exec_(self): #overload exec_ to add return values and delete itself(currently being tested) super(sideViewSwitchDialog, self).exec_() self.deleteLater() #remove from memory #if ok was pressed return value else return None return self.returnVal if self.result() else self.initial def saveEvent(parent = None): #utility function to generate a Qt alert window requesting the user to save the file, returns user intention on window close alert = QMessageBox.question(parent, parent.objectName(), "All unsaved progress will be LOST!", QMessageBox.StandardButtons(QMessageBox.Save|QMessageBox.Ignore|QMessageBox.Cancel), QMessageBox.Save) if alert == QMessageBox.Cancel: return False else: if alert == QMessageBox.Save: if not parent.saveProject(): #the parent's saveProject method is called which returns false if saving was cancelled by the user return False return True def showUndoDialog(undoView, parent): # helper function to show a dialog box containing the undo view dialogBox = QDialog(parent) dialogBox.resize(400, 400) layout = QHBoxLayout(dialogBox) layout.addWidget(undoView) dialogBox.setWindowTitle("Undo Stack") dialogBox.show()