Example #1
0
class RectAlignSettingsWidget(QtGui.QWidget):
    def __init__(self, parent, model):
        super(RectAlignSettingsWidget, self).__init__()
        self._parent = parent
        self.model = model

        layout = QtGui.QFormLayout()
        self.setLayout(layout)

        dims_gb = QtGui.QGroupBox("Scale")
        dims_gb_layout = QtGui.QFormLayout()
        dims_gb.setLayout(dims_gb_layout)
        layout.addWidget(dims_gb)

        self.dims_locked_cb = QtGui.QCheckBox()
        self.dims_locked_cb.clicked.connect(self.set_dims_locked)
        self.dims_1 = UnitLineEdit(UNIT_GROUP_MM)
        self.dims_2 = UnitLineEdit(UNIT_GROUP_MM)

        self.dims_1.edited.connect(self.changed_dim)
        self.dims_2.edited.connect(self.changed_dim)


        dims_gb_layout.addRow("Dims on perimeter", self.dims_locked_cb)
        dims_gb_layout.addRow("Dimension 1", self.dims_1)
        dims_gb_layout.addRow("Dimension 2", self.dims_2)

        origin_gb = QtGui.QGroupBox("Origin")
        origin_gb_layout = QtGui.QFormLayout()
        origin_gb.setLayout(origin_gb_layout)
        layout.addWidget(origin_gb)

        self.origin_ref = QtGui.QComboBox()
        self.origin_ref.addItem("Lower-left")
        self.origin_ref.addItem("Lower-right")
        self.origin_ref.addItem("Upper-left")
        self.origin_ref.addItem("Upper-right")
        origin_gb_layout.addRow(self.origin_ref)
        self.origin_ref.currentIndexChanged.connect(self.ref_changed)

        self.origin_x = PLineEdit()
        self.origin_y = PLineEdit()

        self.origin_x.editingFinished.connect(self.changed_dim)
        self.origin_y.editingFinished.connect(self.changed_dim)

        origin_gb_layout.addRow("Offset X:", self.origin_x)
        origin_gb_layout.addRow("Offset Y:", self.origin_y)

        layout.addWidget(origin_gb)

        fr_gb = QtGui.QGroupBox("Flip/Rotate")
        fr_gb_layout = QtGui.QHBoxLayout()
        fr_gb.setLayout(fr_gb_layout)

        self.flip_x_btn = QtGui.QPushButton("Flip X")
        self.flip_x_btn.setCheckable(True)
        fr_gb_layout.addWidget(self.flip_x_btn)

        self.flip_y_btn = QtGui.QPushButton("Flip Y")
        self.flip_y_btn.setCheckable(True)
        fr_gb_layout.addWidget(self.flip_y_btn)

        fr_gb_layout.addStretch()
        fr_gb_layout.addWidget(QtGui.QLabel("Rotate:"))
        self.theta_le = ThetaLineEdit()
        fr_gb_layout.addWidget(self.theta_le)
        fr_gb_layout.addWidget(QtGui.QLabel("\u00b0"))

        self.flip_x_btn.clicked.connect(self.rotate_changed)
        self.flip_y_btn.clicked.connect(self.rotate_changed)
        self.theta_le.editingFinished.connect(self.rotate_changed)

        layout.addWidget(fr_gb)

        self.model.changed.connect(self.update_controls_ra)
        self.model.update_matricies()
        self.update_controls_ra()

    def update_controls_ra(self):
        self.dims_1.setPlaceholderText("%f" % self.model.placeholder_dim_values[0])
        self.dims_2.setPlaceholderText("%f" % self.model.placeholder_dim_values[1])

        self.dims_1.setValue(self.model.dim_values[0])
        self.dims_2.setValue(self.model.dim_values[1])

        self.dims_locked_cb.setChecked(self.model.dims_locked)

        self.origin_x.setText("%f" % self.model.translate_x)
        self.origin_y.setText("%f" % self.model.translate_y)

        # Updated the box index without forcing a retrigger
        self.origin_ref.blockSignals(True)
        self.origin_ref.setCurrentIndex(self.model.origin_idx)
        self.origin_ref.blockSignals(False)


        self.flip_x_btn.setChecked(self.model.flip_x)
        self.flip_y_btn.setChecked(self.model.flip_y)
        self.theta_le.setText("%4.1f" % math.degrees(self.model.rotate_theta))


    def rotate_changed(self):
        theta = math.radians(float(self.theta_le.text()))
        cmd = cmd_set_rotate(self.model, theta, self.flip_x_btn.isChecked(), self.flip_y_btn.isChecked())
        self._parent.undoStack.push(cmd)

    def set_dims_locked(self):
        cmd = cmd_set_dimensions_locked(self.model, self.dims_locked_cb.isChecked())
        self._parent.undoStack.push(cmd)

    def changed_dim(self):
        dim_a = self.dims_1.getValue()
        dim_b = self.dims_2.getValue()

        translate_x = float(self.origin_x.text())
        translate_y = float(self.origin_y.text())
        if dim_a != self.model.dim_values[0] or dim_b != self.model.dim_values[1] or \
                        translate_x != self.model.translate_x or translate_y != self.model.translate_y:
            cmd = cmd_set_dimensions(self.model, dim_a, dim_b, translate_x, translate_y)
            self._parent.undoStack.push(cmd)


    def ref_changed(self, idx):
        # Ordering in the combo box isn't pure counterclockwise. Map ordering to CCW
        if idx == 2:
            idx = 3
        elif idx == 3:
            idx = 2

        cmd = cmd_set_origin_reference(self.model, idx)
        self._parent.undoStack.push(cmd)