diff options
Diffstat (limited to 'src/main/python/utils/dialogs.py')
-rw-r--r-- | src/main/python/utils/dialogs.py | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/main/python/utils/dialogs.py b/src/main/python/utils/dialogs.py new file mode 100644 index 0000000..e008aa5 --- /dev/null +++ b/src/main/python/utils/dialogs.py @@ -0,0 +1,102 @@ +from PyQt5.QtWidgets import QDialog, QPushButton, QFormLayout, QComboBox, QLabel, QMessageBox, QDialogButtonBox +from .data import sheetDimensionList, ppiList + +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'): + 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) + + # 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) 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
\ No newline at end of file |