コード例 #1
0
ファイル: test.py プロジェクト: StaticPH/Control-Hub
    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()