def appPreferences(self): config = self.settings settingsPage = self.preferencesDialog settingsPage.setWindowTitle("Settings") # Refresh field values def getCurrentValues(): for setting in settingsList: if setting.isModified( ): # TODO:Handle different types, consider handling special cases print(setting.cfgName + " has been changed. Refreshing field value.") if type(setting) == QLineEdit: setting.setText(config.value(setting.cfgName)) elif type(setting) == QCheckBox: pass elif type(setting) == QPushButton: pass else: print("Setting \"" + setting.cfgName + "\" matches no handled type. Its type is " + str(type(setting))) # Update config file contents to match field values def updateModifiedValues(): for setting in settingsList: if setting.isModified( ): #TODO:Handle different types, consider handling special cases print(setting.cfgName + " has been modified. Now saving.") if type(setting) == QLineEdit: config.setValue(setting.cfgName, setting.text()) elif type(setting) == QCheckBox: pass elif type(setting) == QPushButton: pass else: print("Setting \"" + setting.cfgName + "\" matches no handled type. Its type is " + str(type(setting))) # settingsPage.update() # self.showEvent, update parentLayout = QVBoxLayout() # something to get the saved preferences responses = QDialogButtonBox(QDialogButtonBox.NoButton, Qt.Horizontal) responses.apply = responses.addButton("Accept Changes", QDialogButtonBox.AcceptRole) responses.good = responses.addButton("Okay", QDialogButtonBox.ActionRole) responses.discard = responses.addButton("Discard Changes", QDialogButtonBox.RejectRole) # Give these actual functions def accResp(): wrapper(testPrint, "Accepting Changes...").call() # Check for and save any changed settings updateModifiedValues() # print(winTitle.text()); #text, textChanged, textEdited, setValidator, setText. setTooltip. QLineEdit,displayText #settingsPage.accept() config.sync() def rejResp(): wrapper(testPrint, "Discarding Changes...").call() getCurrentValues() settingsPage.reject() def good(): # settingsPage.setResult(QDialog.accepted()) # settingsPage.done(QDialog.accepted()) settingsPage.accept() getCurrentValues() print("Leaving Settings") #responses.accepted.connect(good) #responses.accepted.connect(accResp) #responses.rejected.connect(rejResp) #Using this to allow an OK and an Accept button with separate resulting operations def onClicked(): sender = self.sender() if sender.text() == "Accept Changes": accResp() elif sender.text() == "Discard Changes": rejResp() elif sender.text() == "Okay": good() responses.apply.clicked.connect(onClicked) responses.discard.clicked.connect(onClicked) responses.good.clicked.connect(onClicked) # add content to this #DONE: probably need to use a byte array to store current settings on opening preferences window. that would be used to restore discarded changes #TODO: apply doesnt just need to sync, it needs to update too winTitle = QLineEdit(config.value("cfgWindowTitle")) winTitle.cfgName = "cfgWindowTitle" #CRITICAL FOR AUTOMATIC SETTING SAVE labelWinTitle = QLabel("Window Title:") labelWinTitle.setBuddy(winTitle) settingsList = [winTitle] #DONT FORGET TO ADD TO THIS horiz1 = QHBoxLayout() horiz1.addWidget(labelWinTitle) horiz1.addWidget(winTitle) parentLayout.addLayout(horiz1) parentLayout.addWidget(responses) # parentLayout.insertStretch(0) settingsPage.setLayout(parentLayout) settingsPage.show()