Пример #1
0
class EnvEdit(QWidget):
    def __init__(self, path):
        super().__init__()
        self.env = laravel_env(path)
        self.env_dict = self.env.get_values()
        self.dialog = None
        self.init_ui()

    def init_ui(self):
        horizontal = QHBoxLayout()
        save_button = QPushButton("Save")
        save_button.clicked.connect(self.save)
        new_button = QPushButton("New Key")
        new_button.clicked.connect(self.new)
        horizontal.addWidget(save_button)
        horizontal.addWidget(new_button)

        self.formLayout = QFormLayout()
        self.formLayout.setFieldGrowthPolicy(
            self.formLayout.ExpandingFieldsGrow)
        self.formLayout.addRow(horizontal)
        for key, val in self.env_dict.items():
            edit = QLineEdit(val)
            edit.setObjectName(key)
            self.formLayout.addRow(QLabel(key), edit)
        self.setLayout(self.formLayout)

    def add_to_form(self, key, val):
        edit = QLineEdit(val)
        edit.setObjectName(key)
        self.formLayout.addRow(QLabel(key), edit)

    def delete_from_form(self, key):
        # we need a button or something for this
        row_item = self.findChild(QLineEdit, key)
        idx = self.formLayout.indexOf(row_item)
        row = self.formLayout.getItemPosition(idx)
        self.formLayout.removeRow(row[0])
        del self.env_dict[key]
        self.env.edit(self.env_dict)

    def new(self):
        self.dialog = QDialog(self)
        formLayout = QFormLayout(self.dialog)
        key_edit = QLineEdit(None)
        key_edit.setObjectName('Key')
        key_edit.textEdited.connect(self.convert_key_uppercase)
        val_edit = QLineEdit(None)
        val_edit.setObjectName('Val')
        formLayout.addRow(QLabel('Key'), key_edit)
        formLayout.addRow(QLabel('Val'), val_edit)

        button_box = QDialogButtonBox(
            QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal,
            self.dialog)
        button_box.accepted.connect(self.dialog.accept)
        button_box.rejected.connect(self.dialog.reject)
        formLayout.addRow(button_box)

        if self.dialog.exec() == self.dialog.Accepted:
            key = key_edit.text()
            value = val_edit.text()
            self.env.new_key(key, value)
            self.env_dict[key] = value
            self.add_to_form(key, value)

    def convert_key_uppercase(self, val):
        self.dialog.findChild(QLineEdit, 'Key').setText(val.upper())

    def save(self):
        for key in self.env_dict.keys():
            new_val = self.findChild(QLineEdit, key).text()
            self.env_dict[key] = new_val
        self.env.edit(self.env_dict)