Exemplo n.º 1
0
class ToolGui(QtGui.QWidget):
    def __init__(self, parent, ClientObj):
        QtGui.QWidget.__init__(self, parent)
        self.user_config = ClientObj.user_config
        self._parent = parent

        self.grid = QtGui.QGridLayout(self)

        self.grid.setContentsMargins(2, 2, 2, 2)
        self.grid.setSpacing(2)
        self.grid.setColumnStretch(0, 3)
        self.grid.setColumnStretch(1, 5)
        #        self.grid.setAlignment(QtCore.Qt.AlignLeft)

        # add height image in grid
        self.h_image_lbl = LabelWordWrap(_("Image height"), self)
        self.h_image_lbl.setMaximumWidth(self.h_image_lbl.sizeHint().width())

        self.h_image_lineedit = QtGui.QLineEdit(self)
        self.h_image_lineedit.setToolTip(_("Set a fixed height image for " "actions") + " " + _("0: hide images"))

        self.h_image_lineedit.setText(str(ClientObj.height_image))

        self.grid.addWidget(self.h_image_lbl, 0, 0)
        self.grid.addWidget(self.h_image_lineedit, 0, 1)

        # add expers view result in grid
        self.expert_lbl = LabelWordWrap(_("Expert view"), self)
        self.expert_checkbox = QtGui.QCheckBox(self)
        self.expert_checkbox.setChecked(ClientObj.expert)
        self.expert_lbl.setToolTip(_("View results in expert mode"))
        self.expert_checkbox.setToolTip(_("View results in expert mode"))

        self.grid.addWidget(self.expert_lbl, 1, 0)
        self.grid.addWidget(self.expert_checkbox, 1, 1, 1, 2)

        # add count item in result table in grid
        self.count_row_lbl = LabelWordWrap(_("Rows in Table"), self)
        self.count_row_lbl.setMaximumWidth(self.count_row_lbl.sizeHint().width())

        self.count_row_lineedit = QtGui.QLineEdit(self)

        self.count_row_lineedit.setText(str(ClientObj.count_row_res_table))

        self.grid.addWidget(self.count_row_lbl, 2, 0)
        self.grid.addWidget(self.count_row_lineedit, 2, 1)

        # add spacer
        self.grid.addItem(QtGui.QSpacerItem(0, 0, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding), 3, 0, 1, 2)

        # connect all with change value slot
        self.h_image_lineedit.textChanged.connect(self.changed_val)
        self.expert_checkbox.clicked.connect(self.changed_val)
        self.count_row_lineedit.textChanged.connect(self.changed_val)

    def changed_val(self):
        self._parent.changed_flag = True

    def set_opacity_lbl(self, val):
        self.opacity_lbl.setText(self.opacity_lbl_text + str(val))

    def check_cfg(self, flag, config, part, param, value):
        # if param not exists in config
        if not flag:
            part_flag = False
            temp_cfg = []
            for line in config:
                temp_cfg.append(line)
                # add new line in config
                if line.startswith(part):
                    temp_cfg.append("%s = %s\n" % (param, value))
                    part_flag = True

            config = temp_cfg
            # if part not exists
            if not part_flag:
                config.append("\n")
                config.append("%s\n" % part)
                config.append("%s = %s\n" % (param, value))
        return config

    def save_changes(self, ClientObj):
        def wrapper():
            if not os.path.isfile(self.user_config):
                f = open(self.user_config, "w")
                f.close()

            fc = open(self.user_config, "r")
            config = fc.readlines()
            fc.close()
            new_config = []

            #            bg_color_flag = False
            count_row_flag = False
            expert_flag = False
            count_row_flag = False
            h_image_flag = False

            for line in config:
                if line.startswith("height_image "):
                    h_image_flag = True
                    try:
                        height_image = int(self.h_image_lineedit.text())
                    except ValueError:
                        height_image = ClientObj.height_image
                    if height_image < 0 or height_image > 512:
                        height_image = ClientObj.height_image
                    new_config.append("height_image = %d\n" % height_image)
                elif line.startswith("expert "):
                    expert_flag = True
                    if self.expert_checkbox.isChecked():
                        expert = 1
                    else:
                        expert = 0
                    new_config.append("expert = %d\n" % expert)
                elif line.startswith("count_row "):
                    count_row_flag = True
                    try:
                        count_row = int(self.count_row_lineedit.text())
                        if count_row < 2:
                            count_row = 2
                    except ValueError:
                        count_row = ClientObj.count_row_res_table
                    new_config.append("count_row = %d\n" % count_row)
                else:
                    new_config.append(line)

            if self.expert_checkbox.isChecked():
                expert = 1
            else:
                expert = 0
            new_config = self.check_cfg(expert_flag, new_config, "[gui]", "expert", expert)

            try:
                count_row = int(self.count_row_lineedit.text())
                if count_row < 2:
                    count_row = 2
            except ValueError:
                count_row = ClientObj.count_row_res_table
            new_config = self.check_cfg(count_row_flag, new_config, "[gui]", "count_row", count_row)

            try:
                height_image = int(self.h_image_lineedit.text())
            except ValueError:
                height_image = ClientObj.height_image
            if height_image < 0 or height_image > 512:
                height_image = ClientObj.height_image
            new_config = self.check_cfg(h_image_flag, new_config, "[gui]", "height_image", height_image)

            fnc = open(self.user_config, "w")
            for line in new_config:
                fnc.write(line)
            fnc.close()

            # read config for changed parameters
            ClientObj.create_user_config()
            ClientObj.read_user_config(ClientObj.user_config)

            # reset unsaved changes flag
            self._parent.changed_flag = False

        return wrapper