示例#1
0
    def __init__(self, parent, mapCanvas):
        QDialog.__init__(self)
        # Set up the user interface from Designer. 
        self.ui = Ui_MapSizer()
        self.ui.setupUi(self)
        self.parent = parent
        self.mapCanvas = mapCanvas
        # on diffent OS's there seems to be different offsets to be taken into account
        self.offset = 0
        if platform.system() == "Linux":
            self.offset=self.LINUX_OFFSET
        elif platform.system() == "Windows":
            self.offset=self.WINDOWS_OFFSET
        self.ui.spinBoxImageWidth.setValue(self.mapCanvas.width()-self.offset)
        self.ui.spinBoxImageHeight.setValue(self.mapCanvas.height()-self.offset)
        extent = self.mapCanvas.extent()
        self.ui.txtMinX.setText('%.6f'%(extent.xMinimum()))
        self.ui.txtMinY.setText('%.6f'%(extent.yMinimum()))
        self.ui.txtMaxX.setText('%.6f'%(extent.xMaximum()))
        self.ui.txtMaxY.setText('%.6f'%(extent.yMaximum()))

        QObject.connect(self.mapCanvas, SIGNAL("renderComplete(QPainter *)"), self.mapCanvasResize)
示例#2
0
class MapSizerDialog(QDialog):

    MSG_BOX_TITLE = "QGis"
    LINUX_OFFSET = 0
    WINDOWS_OFFSET = 0

    def __init__(self, parent, mapCanvas):
        QDialog.__init__(self)
        # Set up the user interface from Designer. 
        self.ui = Ui_MapSizer()
        self.ui.setupUi(self)
        self.parent = parent
        self.mapCanvas = mapCanvas
        # on diffent OS's there seems to be different offsets to be taken into account
        self.offset = 0
        if platform.system() == "Linux":
            self.offset=self.LINUX_OFFSET
        elif platform.system() == "Windows":
            self.offset=self.WINDOWS_OFFSET
        self.ui.spinBoxImageWidth.setValue(self.mapCanvas.width()-self.offset)
        self.ui.spinBoxImageHeight.setValue(self.mapCanvas.height()-self.offset)
        extent = self.mapCanvas.extent()
        self.ui.txtMinX.setText('%.6f'%(extent.xMinimum()))
        self.ui.txtMinY.setText('%.6f'%(extent.yMinimum()))
        self.ui.txtMaxX.setText('%.6f'%(extent.xMaximum()))
        self.ui.txtMaxY.setText('%.6f'%(extent.yMaximum()))

        QObject.connect(self.mapCanvas, SIGNAL("renderComplete(QPainter *)"), self.mapCanvasResize)

    @pyqtSignature("on_btnSetImageSize_clicked()")
    def on_btnSetImageSize_clicked(self):
        self.setMapCanvasSize(self.ui.spinBoxImageWidth.value(), self.ui.spinBoxImageHeight.value())

    @pyqtSignature("on_btnSetExtent_clicked()")
    def on_btnSetExtent_clicked(self):
        self.setMapCanvasExtent()

    def on_buttonBox_accepted(self):
        # not very generic, but we want the SimpleSvgDialog back...
        self.hide()
        self.parent.show()

    def on_buttonBox_rejected(self):
        # not very generic, but we want the SimpleSvgDialog back...
        self.hide()
        self.parent.show()

    def setMapCanvasExtent(self):
        #print 'SET EXTENT'
        self.mapCanvas.setExtent(QgsRectangle(float(self.ui.txtMinX.text()), float(self.ui.txtMinY.text()), float(self.ui.txtMaxX.text()), float(self.ui.txtMaxY.text())))
        self.mapCanvas.refresh()

    def mapCanvasResize(self):
        self.ui.spinBoxImageWidth.setValue(self.mapCanvas.width()-self.offset)
        self.ui.spinBoxImageHeight.setValue(self.mapCanvas.height()-self.offset)
        extent = self.mapCanvas.extent()
        self.ui.txtMinX.setText('%.6f'%(extent.xMinimum()))
        self.ui.txtMinY.setText('%.6f'%(extent.yMinimum()))
        self.ui.txtMaxX.setText('%.6f'%(extent.xMaximum()))
        self.ui.txtMaxY.setText('%.6f'%(extent.yMaximum()))

    def setMapCanvasSize(self, newWidth, newHeight):
        if QGis.QGIS_VERSION_INT < 10900:
            # on QGIS 1.8 the parent of mapCanvas == QMainWindow
            parent=self.mapCanvas.parentWidget()
        else:
            # on QGIS>2.0 there is another widget in between
            parent=self.mapCanvas.parentWidget().parentWidget()
        mapCanvas=self.mapCanvas
        # some QT magic for me, coming from maximized force a minimal layout change first
        if(parent.isMaximized()):
            QMessageBox.warning(parent, self.MSG_BOX_TITLE, ("Maximized QGIS window..\n" "QGIS window is maximized, plugin will try to de-maximize the window.\n" "If image size is still not exact what you asked for,\ntry starting plugin with non maximized window."), QMessageBox.Ok, QMessageBox.Ok)
            parent.showNormal()
        newWidth=newWidth+self.offset
        newHeight=newHeight+self.offset
        diffWidth=mapCanvas.size().width()-newWidth
        diffHeight=mapCanvas.size().height()-newHeight
        mapCanvas.resize(newWidth, newHeight)
        parent.resize(parent.size().width()-diffWidth, parent.size().height()-diffHeight)
        # HACK: there are cases where after maximizing and here demaximizing the size of the parent is not
        # in sync with the actual size, giving a small error in the size setting
        # we do the resizing again, this fixes this small error then ....
        if newWidth <> mapCanvas.size().width() or newHeight <> mapCanvas.size().height():
            diffWidth=mapCanvas.size().width()-newWidth
            diffHeight=mapCanvas.size().height()-newHeight
            mapCanvas.resize(newWidth, newHeight)
            parent.resize(parent.size().width()-diffWidth, parent.size().height()-diffHeight)