def __init__(self, view):
     DialogBase.__init__(self,
                         "Power",
                         ok=True,
                         apply=True,
                         cancel=True,
                         modal=True,
                         parent=view)
     self.view = view
     self.setWindowTitle(
         "Power - " +
         str(self.view.getCurrentDocument().getURL().getFileName()))
     w = QtGui.QWidget()
     grid = QtGui.QGridLayout(w)
     powerLabel = QtGui.QLabel("Power:")
     grid.addWidget(powerLabel, 0, 0)
     self.power = QtGui.QDoubleSpinBox()
     self.power.setMinimum(0.0)
     self.power.setMaximum(100.0)
     self.power.setValue(1.0)
     self.power.setSingleStep(0.01)
     grid.addWidget(self.power, 0, 1)
     if self.view.getCurrentDocument().getType() == "color_rgb":
         self.chooseColor = ChooseColorRGBLChannel(luminance=False)
         grid.addWidget(self.chooseColor, 1, 0)
     elif self.view.getCurrentDocument().getType() == "color_rgbl":
         self.chooseColor = ChooseColorRGBLChannel(luminance=True)
         grid.addWidget(self.chooseColor, 1, 0)
     self.addWidget(w)
class PowerDialog(DialogBase):
    def __init__(self, view):
        DialogBase.__init__(self,
                            "Power",
                            ok=True,
                            apply=True,
                            cancel=True,
                            modal=True,
                            parent=view)
        self.view = view
        self.setWindowTitle(
            "Power - " +
            str(self.view.getCurrentDocument().getURL().getFileName()))
        w = QtGui.QWidget()
        grid = QtGui.QGridLayout(w)
        powerLabel = QtGui.QLabel("Power:")
        grid.addWidget(powerLabel, 0, 0)
        self.power = QtGui.QDoubleSpinBox()
        self.power.setMinimum(0.0)
        self.power.setMaximum(100.0)
        self.power.setValue(1.0)
        self.power.setSingleStep(0.01)
        grid.addWidget(self.power, 0, 1)
        if self.view.getCurrentDocument().getType() == "color_rgb":
            self.chooseColor = ChooseColorRGBLChannel(luminance=False)
            grid.addWidget(self.chooseColor, 1, 0)
        elif self.view.getCurrentDocument().getType() == "color_rgbl":
            self.chooseColor = ChooseColorRGBLChannel(luminance=True)
            grid.addWidget(self.chooseColor, 1, 0)
        self.addWidget(w)

    def slotApply(self):
        power = self.power.value()
        if (power == 1.):
            return
        self.power.setValue(1.)
        if self.view.getCurrentDocument().getType(
        ) == "color_rgb" or self.view.getCurrentDocument().getType(
        ) == "color_rgbl":
            if len(self.chooseColor.getSelectedChannels()) == 0:
                # XXX: Maybe give a info box explaining you have to pick a color.
                return
            if self.view.getCurrentDocument().getType() == "color_rgb":
                rgb = [None, None, None]
            else:
                # RGBL
                rgb = [None, None, None, None]
            for i in self.chooseColor.getSelectedChannels():
                rgb[i] = imageLib.power(
                    self.view.getCurrentDocument().rgb[i].data, power)
            self.view.getCurrentDocument().replaceData(rgb, "Power")
        else:
            self.view.getCurrentDocument().replaceData(
                imageLib.power(self.view.getCurrentDocument().data, power),
                "Power")
        self.view.getCurrentDocument().refresh(True)

    def slotOk(self):
        self.accept()
        self.slotApply()
 def __init__(self, view):
     DialogBase.__init__(self,
                         "DDP",
                         ok=True,
                         cancel=True,
                         modal=True,
                         parent=view)
     self.view = view
     self.setWindowTitle(
         "DDP - " +
         str(self.view.getCurrentDocument().getURL().getFileName()))
     w = QtGui.QWidget()
     grid = QtGui.QGridLayout(w)
     aValueLabel = QtGui.QLabel("A Value:")
     grid.addWidget(aValueLabel, 0, 0)
     self.a = QtGui.QSpinBox()
     self.a.setValue(1)
     self.a.setMinimum(1)
     self.a.setMaximum(999999)
     grid.addWidget(self.a, 0, 1)
     bValueLabel = QtGui.QLabel("B Value:")
     grid.addWidget(bValueLabel, 2, 0)
     self.b = QtGui.QSpinBox()
     self.b.setMaximum(999999)
     self.b.setMinimum(1)
     self.b.setValue(1)
     grid.addWidget(self.b, 2, 1)
     if self.view.getCurrentDocument().getType() == "color_rgb":
         self.chooseColor = ChooseColorRGBLChannel(luminance=False)
         grid.addWidget(self.chooseColor, 3, 0)
         self.a.setValue(
             int(self.view.getCurrentDocument().rgb[0].background / 2))
         self.b.setValue(
             int(0.10 * self.view.getCurrentDocument().rgb[0].background))
     elif self.view.getCurrentDocument().getType() == "color_rgbl":
         self.chooseColor = ChooseColorRGBLChannel(luminance=True)
         grid.addWidget(self.chooseColor, 3, 0)
         self.a.setValue(
             int(self.view.getCurrentDocument().rgb[0].background / 2))
         self.b.setValue(
             int(0.10 * self.view.getCurrentDocument().rgb[0].background))
     else:
         self.a.setValue(int(self.view.getCurrentDocument().background / 2))
         self.b.setValue(
             int(0.10 * self.view.getCurrentDocument().background))
     self.edgeEmphasis = QtGui.QCheckBox("Edge Emphasis")
     self.edgeEmphasis.setChecked(True)
     grid.addWidget(self.edgeEmphasis, 4, 0)
     self.addWidget(w)
    def __init__(self, view):
        DialogBase.__init__(self,
                            "Shift Image",
                            ok=True,
                            apply=True,
                            cancel=True,
                            modal=True,
                            parent=view)

        self.view = view
        if self.view.getCurrentDocument().getType(
        ) == "color_rgb" or self.view.getCurrentDocument().getType(
        ) == "color_rgbl":
            sizeX = self.view.getCurrentDocument().rgb[0].data.shape[1]
            sizeY = self.view.getCurrentDocument().rgb[0].data.shape[0]
        else:
            sizeX = self.view.getCurrentDocument().data.shape[1]
            sizeY = self.view.getCurrentDocument().data.shape[0]
        self.setWindowTitle(
            "Shift Image - " +
            str(self.view.getCurrentDocument().getURL().getFileName()))
        w = QtGui.QWidget()
        grid = QtGui.QGridLayout()
        w.setLayout(grid)
        shiftXLabel = QtGui.QLabel("Shift X:")
        grid.addWidget(shiftXLabel, 0, 0)
        self.shiftX = QtGui.QDoubleSpinBox()
        self.shiftX.setMinimum(-sizeX)
        self.shiftX.setMaximum(sizeX)
        self.shiftX.setValue(0.0)
        self.shiftX.setSingleStep(0.01)
        grid.addWidget(self.shiftX, 0, 1)

        shiftYLabel = QtGui.QLabel("Shift Y:")
        grid.addWidget(shiftYLabel, 1, 0)
        self.shiftY = QtGui.QDoubleSpinBox()
        self.shiftY.setMinimum(-sizeY)
        self.shiftY.setMaximum(sizeY)
        self.shiftY.setValue(0.0)
        self.shiftY.setSingleStep(0.01)
        grid.addWidget(self.shiftY, 1, 1)

        if self.view.getCurrentDocument().getType() == "color_rgb":
            self.chooseColor = ChooseColorRGBLChannel(luminance=False)
            grid.addWidget(self.chooseColor, 2, 0)
        elif self.view.getCurrentDocument().getType() == "color_rgbl":
            self.chooseColor = ChooseColorRGBLChannel(luminance=True)
            grid.addWidget(self.chooseColor, 2, 0)
        self.addWidget(w)
    def __init__(self, view):
        DialogBase.__init__(self,
                            "Rotate Image",
                            ok=True,
                            apply=True,
                            cancel=True,
                            modal=True,
                            parent=view)

        self.view = view
        self.setWindowTitle(
            "Rotate Image - " +
            str(self.view.getCurrentDocument().getURL().getFileName()))

        w = QtGui.QWidget()
        grid = QtGui.QGridLayout(w)
        rotateLabel = QtGui.QLabel("Rotate:")
        grid.addWidget(rotateLabel, 0, 0)
        self.rotate = QtGui.QDoubleSpinBox()
        self.rotate.setMinimum(-360.0)
        self.rotate.setMaximum(360.0)
        self.rotate.setValue(0.0)
        self.rotate.setSingleStep(0.01)
        grid.addWidget(self.rotate, 0, 1)
        buttonGroup = QtGui.QButtonGroup()
        buttonBox = QtGui.QGroupBox()
        buttonLayout = QtGui.QHBoxLayout()
        buttonBox.setLayout(buttonLayout)
        grid.addWidget(buttonBox, 1, 0, 1, 2)
        self.radians = QtGui.QRadioButton("Radians")
        buttonGroup.addButton(self.radians)
        buttonLayout.addWidget(self.radians)
        self.degrees = QtGui.QRadioButton("Degrees")
        buttonGroup.addButton(self.degrees)
        buttonLayout.addWidget(self.degrees)
        self.radians.toggle()
        if self.view.getCurrentDocument().getType() == "color_rgb":
            self.chooseColor = ChooseColorRGBLChannel(luminance=False)
            grid.addWidget(self.chooseColor, 2, 0, 1, 2)
        elif self.view.getCurrentDocument().getType() == "color_rgbl":
            self.chooseColor = ChooseColorRGBLChannel(luminance=True)
            grid.addWidget(self.chooseColor, 2, 0, 1, 2)
        else:
            self.expandCanvas = QtGui.QCheckBox("Fit Canvas")
            grid.addWidget(self.expandCanvas, 2, 0, 1, 2)
        self.addWidget(w)
class DDPDialog(DialogBase):
    def __init__(self, view):
        DialogBase.__init__(self,
                            "DDP",
                            ok=True,
                            cancel=True,
                            modal=True,
                            parent=view)
        self.view = view
        self.setWindowTitle(
            "DDP - " +
            str(self.view.getCurrentDocument().getURL().getFileName()))
        w = QtGui.QWidget()
        grid = QtGui.QGridLayout(w)
        aValueLabel = QtGui.QLabel("A Value:")
        grid.addWidget(aValueLabel, 0, 0)
        self.a = QtGui.QSpinBox()
        self.a.setValue(1)
        self.a.setMinimum(1)
        self.a.setMaximum(999999)
        grid.addWidget(self.a, 0, 1)
        bValueLabel = QtGui.QLabel("B Value:")
        grid.addWidget(bValueLabel, 2, 0)
        self.b = QtGui.QSpinBox()
        self.b.setMaximum(999999)
        self.b.setMinimum(1)
        self.b.setValue(1)
        grid.addWidget(self.b, 2, 1)
        if self.view.getCurrentDocument().getType() == "color_rgb":
            self.chooseColor = ChooseColorRGBLChannel(luminance=False)
            grid.addWidget(self.chooseColor, 3, 0)
            self.a.setValue(
                int(self.view.getCurrentDocument().rgb[0].background / 2))
            self.b.setValue(
                int(0.10 * self.view.getCurrentDocument().rgb[0].background))
        elif self.view.getCurrentDocument().getType() == "color_rgbl":
            self.chooseColor = ChooseColorRGBLChannel(luminance=True)
            grid.addWidget(self.chooseColor, 3, 0)
            self.a.setValue(
                int(self.view.getCurrentDocument().rgb[0].background / 2))
            self.b.setValue(
                int(0.10 * self.view.getCurrentDocument().rgb[0].background))
        else:
            self.a.setValue(int(self.view.getCurrentDocument().background / 2))
            self.b.setValue(
                int(0.10 * self.view.getCurrentDocument().background))
        self.edgeEmphasis = QtGui.QCheckBox("Edge Emphasis")
        self.edgeEmphasis.setChecked(True)
        grid.addWidget(self.edgeEmphasis, 4, 0)
        self.addWidget(w)

    def slotApply(self):
        aValue = self.a.value()
        bValue = self.b.value()
        if aValue == 0 or bValue == 0:
            return
        if self.view.getCurrentDocument().getType(
        ) == "color_rgb" or self.view.getCurrentDocument().getType(
        ) == "color_rgbl":
            if len(self.chooseColor.getSelectedChannels()) == 0:
                # XXX: Maybe give a info box explaining you have to pick a color.
                return
            if self.view.getCurrentDocument().getType() == "color_rgb":
                rgb = [None, None, None]
            else:
                # RGBL
                rgb = [None, None, None, None]
            for i in self.chooseColor.getSelectedChannels():
                rgb[i] = imageLib.DDP(
                    self.view.getCurrentDocument().rgb[i].data, aValue, bValue,
                    self.edgeEmphasis.isChecked())
            self.view.getCurrentDocument().replaceData(rgb, "DDP")
        else:
            self.view.getCurrentDocument().replaceData(
                imageLib.DDP(self.view.getCurrentDocument().data, aValue,
                             bValue, self.edgeEmphasis.isChecked()), "DDP")
        self.view.getCurrentDocument().refresh(True)

    def slotOk(self):
        self.accept()
        self.slotApply()
class RotateDialog(DialogBase):
    def __init__(self, view):
        DialogBase.__init__(self,
                            "Rotate Image",
                            ok=True,
                            apply=True,
                            cancel=True,
                            modal=True,
                            parent=view)

        self.view = view
        self.setWindowTitle(
            "Rotate Image - " +
            str(self.view.getCurrentDocument().getURL().getFileName()))

        w = QtGui.QWidget()
        grid = QtGui.QGridLayout(w)
        rotateLabel = QtGui.QLabel("Rotate:")
        grid.addWidget(rotateLabel, 0, 0)
        self.rotate = QtGui.QDoubleSpinBox()
        self.rotate.setMinimum(-360.0)
        self.rotate.setMaximum(360.0)
        self.rotate.setValue(0.0)
        self.rotate.setSingleStep(0.01)
        grid.addWidget(self.rotate, 0, 1)
        buttonGroup = QtGui.QButtonGroup()
        buttonBox = QtGui.QGroupBox()
        buttonLayout = QtGui.QHBoxLayout()
        buttonBox.setLayout(buttonLayout)
        grid.addWidget(buttonBox, 1, 0, 1, 2)
        self.radians = QtGui.QRadioButton("Radians")
        buttonGroup.addButton(self.radians)
        buttonLayout.addWidget(self.radians)
        self.degrees = QtGui.QRadioButton("Degrees")
        buttonGroup.addButton(self.degrees)
        buttonLayout.addWidget(self.degrees)
        self.radians.toggle()
        if self.view.getCurrentDocument().getType() == "color_rgb":
            self.chooseColor = ChooseColorRGBLChannel(luminance=False)
            grid.addWidget(self.chooseColor, 2, 0, 1, 2)
        elif self.view.getCurrentDocument().getType() == "color_rgbl":
            self.chooseColor = ChooseColorRGBLChannel(luminance=True)
            grid.addWidget(self.chooseColor, 2, 0, 1, 2)
        else:
            self.expandCanvas = QtGui.QCheckBox("Fit Canvas")
            grid.addWidget(self.expandCanvas, 2, 0, 1, 2)
        self.addWidget(w)

    def slotApply(self):
        rot = self.rotate.value()
        if rot == 0.:
            return
        self.rotate.setValue(0.)
        if self.degrees.isChecked():
            print rot
            rot = rot * math.pi / 180
        if self.view.getCurrentDocument().getType(
        ) == "color_rgb" or self.view.getCurrentDocument().getType(
        ) == "color_rgbl":
            if len(self.chooseColor.getSelectedChannels()) == 0:
                # XXX: Maybe give a info box explaining you have to pick a color.
                return
            if self.view.getCurrentDocument().getType() == "color_rgb":
                rgb = [None, None, None]
            else:
                # RGBL
                rgb = [None, None, None, None]
            for i in self.chooseColor.getSelectedChannels():
                rgb[i] = imageLib.rotate(
                    self.view.getCurrentDocument().rgb[i].data, rot, False)
            self.view.getCurrentDocument().replaceData(rgb, "Rotate")
        else:
            self.view.getCurrentDocument().replaceData(
                imageLib.rotate(self.view.getCurrentDocument().data, rot,
                                self.expandCanvas.isChecked()), "Rotate")
        self.view.getCurrentDocument().refresh(True)

    def slotOk(self):
        self.slotApply()
        self.accept()
class ShiftDialog(DialogBase):
    def __init__(self, view):
        DialogBase.__init__(self,
                            "Shift Image",
                            ok=True,
                            apply=True,
                            cancel=True,
                            modal=True,
                            parent=view)

        self.view = view
        if self.view.getCurrentDocument().getType(
        ) == "color_rgb" or self.view.getCurrentDocument().getType(
        ) == "color_rgbl":
            sizeX = self.view.getCurrentDocument().rgb[0].data.shape[1]
            sizeY = self.view.getCurrentDocument().rgb[0].data.shape[0]
        else:
            sizeX = self.view.getCurrentDocument().data.shape[1]
            sizeY = self.view.getCurrentDocument().data.shape[0]
        self.setWindowTitle(
            "Shift Image - " +
            str(self.view.getCurrentDocument().getURL().getFileName()))
        w = QtGui.QWidget()
        grid = QtGui.QGridLayout()
        w.setLayout(grid)
        shiftXLabel = QtGui.QLabel("Shift X:")
        grid.addWidget(shiftXLabel, 0, 0)
        self.shiftX = QtGui.QDoubleSpinBox()
        self.shiftX.setMinimum(-sizeX)
        self.shiftX.setMaximum(sizeX)
        self.shiftX.setValue(0.0)
        self.shiftX.setSingleStep(0.01)
        grid.addWidget(self.shiftX, 0, 1)

        shiftYLabel = QtGui.QLabel("Shift Y:")
        grid.addWidget(shiftYLabel, 1, 0)
        self.shiftY = QtGui.QDoubleSpinBox()
        self.shiftY.setMinimum(-sizeY)
        self.shiftY.setMaximum(sizeY)
        self.shiftY.setValue(0.0)
        self.shiftY.setSingleStep(0.01)
        grid.addWidget(self.shiftY, 1, 1)

        if self.view.getCurrentDocument().getType() == "color_rgb":
            self.chooseColor = ChooseColorRGBLChannel(luminance=False)
            grid.addWidget(self.chooseColor, 2, 0)
        elif self.view.getCurrentDocument().getType() == "color_rgbl":
            self.chooseColor = ChooseColorRGBLChannel(luminance=True)
            grid.addWidget(self.chooseColor, 2, 0)
        self.addWidget(w)

    def slotApply(self):
        shiftXValue = self.shiftX.value()
        shiftYValue = self.shiftY.value()
        if shiftYValue == 0. and shiftXValue == 0.:
            return
        self.shiftX.setValue(0.)
        self.shiftY.setValue(0.)
        if self.view.getCurrentDocument().getType(
        ) == "color_rgb" or self.view.getCurrentDocument().getType(
        ) == "color_rgbl":
            if len(self.chooseColor.getSelectedChannels()) == 0:
                # XXX: Maybe give a info box explaining you have to pick a color.
                return
            if self.view.getCurrentDocument().getType() == "color_rgb":
                rgb = [None, None, None]
            else:
                # RGBL
                rgb = [None, None, None, None]
            for i in self.chooseColor.getSelectedChannels():
                rgb[i] = imageLib.shift(
                    self.view.getCurrentDocument().rgb[i].data, shiftXValue,
                    shiftYValue)
            self.view.getCurrentDocument().replaceData(rgb, "Shift")
        else:
            self.view.getCurrentDocument().replaceData(
                imageLib.shift(self.view.getCurrentDocument().data,
                               shiftXValue, shiftYValue), "Shift")
        self.view.getCurrentDocument().refresh(True)

    def slotOk(self):
        self.accept()
        self.slotApply()
    def __init__(self, view):
        DialogBase.__init__(self,
                            "Scale Image",
                            ok=True,
                            apply=True,
                            cancel=True,
                            modal=True,
                            parent=view)

        self.view = view

        w = QtGui.QWidget()
        grid = QtGui.QGridLayout(w)

        self.setWindowTitle(
            "Scale Image - " +
            str(self.view.getCurrentDocument().getURL().getFileName()))
        self.shape = self.view.getCurrentDocument().getShape()
        scaleXLabel = QtGui.QLabel("Scale X:")
        grid.addWidget(scaleXLabel, 0, 0)
        self.scaleX = QtGui.QDoubleSpinBox()
        self.scaleX.setMinimum(0.0)
        self.scaleX.setMaximum(100.0)
        self.scaleX.setValue(1.0)
        self.scaleX.setSingleStep(0.01)
        self.scaleX.valueChanged.connect(self.slotScaleXChange)
        grid.addWidget(self.scaleX, 0, 1)

        sizeScaleXLabel = QtGui.QLabel(" Size Scale X:")
        grid.addWidget(sizeScaleXLabel, 1, 0)
        self.sizeScaleX = QtGui.QSpinBox()
        self.sizeScaleX.setMaximum(999999)
        self.sizeScaleX.setMinimum(0)
        self.sizeScaleX.setValue(self.shape[1])
        self.sizeScaleX.valueChanged.connect(self.slotSizeScaleXChange)
        grid.addWidget(self.sizeScaleX, 1, 1)

        scaleYLabel = QtGui.QLabel("Scale Y:")
        grid.addWidget(scaleYLabel, 2, 0)
        self.scaleY = QtGui.QDoubleSpinBox()
        self.scaleY.setMinimum(0.0)
        self.scaleY.setMaximum(100.0)
        self.scaleY.setValue(1.0)
        self.scaleY.setSingleStep(0.01)
        self.scaleY.valueChanged.connect(self.slotScaleYChange)
        grid.addWidget(self.scaleY, 2, 1)

        sizeScaleYLabel = QtGui.QLabel(" Size Scale Y:")
        grid.addWidget(sizeScaleYLabel, 3, 0)
        self.sizeScaleY = QtGui.QSpinBox()
        self.sizeScaleY.setMaximum(999999)
        self.sizeScaleY.setMinimum(0)
        self.sizeScaleY.setValue(self.shape[0])
        self.sizeScaleY.valueChanged.connect(self.slotSizeScaleYChange)
        grid.addWidget(self.sizeScaleY, 3, 1)

        if self.view.getCurrentDocument().getType() == "color_rgb":
            self.chooseColor = ChooseColorRGBLChannel(luminance=False)
            grid.addWidget(self.chooseColor, 4, 0)
        elif self.view.getCurrentDocument().getType() == "color_rgbl":
            self.chooseColor = ChooseColorRGBLChannel(luminance=True)
            grid.addWidget(self.chooseColor, 4, 0)
        else:
            self.expandCanvas = QtGui.QCheckBox("Fit Canvas")
            grid.addWidget(self.expandCanvas, 4, 0)
        self.addWidget(w)
class ScaleDialog(DialogBase):
    def __init__(self, view):
        DialogBase.__init__(self,
                            "Scale Image",
                            ok=True,
                            apply=True,
                            cancel=True,
                            modal=True,
                            parent=view)

        self.view = view

        w = QtGui.QWidget()
        grid = QtGui.QGridLayout(w)

        self.setWindowTitle(
            "Scale Image - " +
            str(self.view.getCurrentDocument().getURL().getFileName()))
        self.shape = self.view.getCurrentDocument().getShape()
        scaleXLabel = QtGui.QLabel("Scale X:")
        grid.addWidget(scaleXLabel, 0, 0)
        self.scaleX = QtGui.QDoubleSpinBox()
        self.scaleX.setMinimum(0.0)
        self.scaleX.setMaximum(100.0)
        self.scaleX.setValue(1.0)
        self.scaleX.setSingleStep(0.01)
        self.scaleX.valueChanged.connect(self.slotScaleXChange)
        grid.addWidget(self.scaleX, 0, 1)

        sizeScaleXLabel = QtGui.QLabel(" Size Scale X:")
        grid.addWidget(sizeScaleXLabel, 1, 0)
        self.sizeScaleX = QtGui.QSpinBox()
        self.sizeScaleX.setMaximum(999999)
        self.sizeScaleX.setMinimum(0)
        self.sizeScaleX.setValue(self.shape[1])
        self.sizeScaleX.valueChanged.connect(self.slotSizeScaleXChange)
        grid.addWidget(self.sizeScaleX, 1, 1)

        scaleYLabel = QtGui.QLabel("Scale Y:")
        grid.addWidget(scaleYLabel, 2, 0)
        self.scaleY = QtGui.QDoubleSpinBox()
        self.scaleY.setMinimum(0.0)
        self.scaleY.setMaximum(100.0)
        self.scaleY.setValue(1.0)
        self.scaleY.setSingleStep(0.01)
        self.scaleY.valueChanged.connect(self.slotScaleYChange)
        grid.addWidget(self.scaleY, 2, 1)

        sizeScaleYLabel = QtGui.QLabel(" Size Scale Y:")
        grid.addWidget(sizeScaleYLabel, 3, 0)
        self.sizeScaleY = QtGui.QSpinBox()
        self.sizeScaleY.setMaximum(999999)
        self.sizeScaleY.setMinimum(0)
        self.sizeScaleY.setValue(self.shape[0])
        self.sizeScaleY.valueChanged.connect(self.slotSizeScaleYChange)
        grid.addWidget(self.sizeScaleY, 3, 1)

        if self.view.getCurrentDocument().getType() == "color_rgb":
            self.chooseColor = ChooseColorRGBLChannel(luminance=False)
            grid.addWidget(self.chooseColor, 4, 0)
        elif self.view.getCurrentDocument().getType() == "color_rgbl":
            self.chooseColor = ChooseColorRGBLChannel(luminance=True)
            grid.addWidget(self.chooseColor, 4, 0)
        else:
            self.expandCanvas = QtGui.QCheckBox("Fit Canvas")
            grid.addWidget(self.expandCanvas, 4, 0)
        self.addWidget(w)

    def slotScaleXChange(self, value):
        self.sizeScaleX.setValue(int(value * self.shape[1]))

    def slotScaleYChange(self, value):
        self.sizeScaleY.setValue(int(value * self.shape[0]))

    def slotSizeScaleXChange(self, value):
        self.scaleX.setValue(float(value) / float(self.shape[1]))

    def slotSizeScaleYChange(self, value):
        self.scaleY.setValue(float(value) / float(self.shape[0]))

    def slotApply(self):
        scaleXValue = self.scaleX.value()
        scaleYValue = self.scaleY.value()
        if scaleXValue == 1. and scaleYValue == 1.:
            return
        self.scaleX.setValue(1.)
        self.scaleY.setValue(1.)
        if self.view.getCurrentDocument().getType(
        ) == "color_rgb" or self.view.getCurrentDocument().getType(
        ) == "color_rgbl":
            if len(self.chooseColor.getSelectedChannels()) == 0:
                # XXX: Maybe give a info box explaining you have to pick a color.
                return
            if self.view.getCurrentDocument().getType() == "color_rgb":
                rgb = [None, None, None]
            else:
                # RGBL
                rgb = [None, None, None, None]
            for i in self.chooseColor.getSelectedChannels():
                rgb[i] = imageLib.scale(
                    self.view.getCurrentDocument().rgb[i].data, scaleXValue,
                    scaleYValue, False)
            self.view.getCurrentDocument().replaceData(rgb, "Scale")
        else:
            self.view.getCurrentDocument().replaceData(
                imageLib.scale(self.view.getCurrentDocument().data,
                               scaleXValue, scaleYValue,
                               self.expandCanvas.isChecked()), "Scale")
        self.view.getCurrentDocument().refresh(True)

    def slotOk(self):
        self.accept()
        self.slotApply()