from PyQt5.QtWidgets import QDialog, QMessageBox, QFileDialog from PyQt5.QtCore import Qt, QSize from ui.settings import Ui_Settings import os class SettingsDialog(QDialog): def __init__(self, parent=None, config=None, initial=False, errors=None): super(SettingsDialog, self).__init__( parent, Qt.WindowSystemMenuHint | Qt.WindowTitleHint | Qt.WindowCloseButtonHint ) self.ui = Ui_Settings() self.ui.setupUi(self) self.set_values(config) self.set_mode(initial, errors) self.set_connections() def set_values(self, config): if config: self.ui.leXMLSchema.setText(config['xmlschema']) self.ui.leCertificate.setText(config['certificate']) def set_mode(self, initial, errors): if initial: self.setWindowTitle('OrdersGuru Signer Initial Settings') elif errors: self.setWindowTitle('OrdersGuru Signer Settings') self.ui.lblWelcomeErrorsHeader.setText('
OrdersGuru Signer detected a problem!
') self.ui.lblWelcomeErrors.setText( 'There is a problem with following ...
' + '
'.join(' ' * 4 + '- ' + err for err in errors) + '
' ) self.toggle_buttons() else: self.ui.lblWelcomeErrorsHeader.setVisible(False) self.ui.lblWelcomeErrors.setText('Settings used for validating and signing XML files.') self.resize(455, 290) self.setMinimumSize(QSize(455, 290)) self.setMaximumSize(QSize(455, 290)) self.toggle_buttons() def set_connections(self): self.ui.btnXMLSchemaBrowse.clicked.connect(self.browse_schema) self.ui.btnCertificateBrowse.clicked.connect(self.browse_certificate) self.ui.btnCancel.clicked.connect(self.close) self.ui.btnOk.clicked.connect(self.validate_fields) self.ui.btnReset.clicked.connect(self.reset_settings) def browse_schema(self): fbrowser = QFileDialog(self) fbrowser.selectFile(self.ui.leXMLSchema.displayText()) fbrowser.setFileMode(QFileDialog.ExistingFile) fbrowser.setNameFilter('XML Schema Definition files (*.xsd)') if fbrowser.exec_(): self.ui.leXMLSchema.setText(fbrowser.selectedFiles()[0]) self.toggle_buttons_fields() def browse_certificate(self): fbrowser = QFileDialog(self) fbrowser.selectFile(self.ui.leCertificate.displayText()) fbrowser.setFileMode(QFileDialog.ExistingFile) fbrowser.setNameFilter('PKCS #12 files (*.p12)') if fbrowser.exec_(): self.ui.leCertificate.setText(fbrowser.selectedFiles()[0]) self.toggle_buttons_fields() def toggle_buttons(self, toggle=True): self.ui.btnReset.setEnabled(toggle) self.ui.btnOk.setEnabled(toggle) def toggle_buttons_fields(self): if self.ui.leXMLSchema.displayText() and self.ui.leCertificate.displayText(): self.toggle_buttons() elif self.ui.leXMLSchema.displayText() or self.ui.leCertificate.displayText(): self.ui.btnReset.setEnabled(True) def reset_settings(self): self.ui.leXMLSchema.setText('') self.ui.leCertificate.setText('') self.toggle_buttons(False) def validate_fields(self): errors = [] if len(self.ui.leXMLSchema.displayText()) == 0: errors.append('XML Schema file path is not set.') elif not os.path.isfile(self.ui.leXMLSchema.displayText()): errors.append('XML Schema file doesn\'t exist.') if len(self.ui.leCertificate.displayText()) == 0: errors.append('Certificate path is not set.') elif not os.path.isfile(self.ui.leCertificate.displayText()): errors.append('Certificate file doesn\'t exist.') if errors: error = QMessageBox(self) error.setIcon(QMessageBox.Critical) error.setWindowTitle('Error') error.setText('Something went wrong with chosen files.') error.setInformativeText('Please correct errors if you want to proceed.') error.setStandardButtons(QMessageBox.Ok) error.setDetailedText('\n'.join(errors)) error.exec_() else: self.accept() @staticmethod def get_data(parent=None, config=None, initial=False, errors=None): settings = SettingsDialog(parent, config, initial, errors) result = settings.exec_() return ({ 'xmlschema': settings.ui.leXMLSchema.displayText(), 'certificate': settings.ui.leCertificate.displayText() }, result == QDialog.Accepted)