def createWidget(self): if self.dialogType == DIALOG_STANDARD: return self._panel() else: w = QgsDoubleSpinBox() w.setShowClearButton(False) w.setMinimum(0) w.setMaximum(99999999999) w.setDecimals(6) w.setToolTip(self.tr('Resolution of each pixel in output raster, in layer units')) return w
def createWidget(self): if self.dialogType == DIALOG_STANDARD: return self._panel() else: w = QgsDoubleSpinBox() w.setShowClearButton(False) w.setMinimum(0) w.setMaximum(99999999999) w.setDecimals(6) w.setToolTip(self.tr('Resolution of each pixel in output raster, in layer units')) return w
class Ui_QgsCompositionWidgetBase(QtGui.QWidget): def __init__(self, parent): QtGui.QWidget.__init__(self, parent) self.setObjectName(_fromUtf8("QgsCompositionWidgetBase")) self.resize(345, 506) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth()) self.setSizePolicy(sizePolicy) self.verticalLayout = QtGui.QVBoxLayout(self) self.verticalLayout.setSpacing(0) self.verticalLayout.setMargin(0) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.scrollArea = QtGui.QScrollArea(self) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.scrollArea.sizePolicy().hasHeightForWidth()) self.scrollArea.setSizePolicy(sizePolicy) self.scrollArea.setFocusPolicy(QtCore.Qt.WheelFocus) self.scrollArea.setFrameShape(QtGui.QFrame.StyledPanel) self.scrollArea.setFrameShadow(QtGui.QFrame.Plain) self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName(_fromUtf8("scrollArea")) self.scrollAreaWidgetContents = QtGui.QWidget() self.scrollAreaWidgetContents.setGeometry(QtCore.QRect( 0, 0, 327, 1085)) self.scrollAreaWidgetContents.setObjectName( _fromUtf8("scrollAreaWidgetContents")) self.verticalLayout_2 = QtGui.QVBoxLayout( self.scrollAreaWidgetContents) self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) self.groupBox = QgsCollapsibleGroupBoxBasic( self.scrollAreaWidgetContents) self.groupBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.groupBox.setProperty("syncGroup", _fromUtf8("composeritem")) self.groupBox.setProperty("collapsed", False) self.groupBox.setObjectName(_fromUtf8("groupBox")) self.gridLayout = QtGui.QGridLayout(self.groupBox) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.textLabel7 = QtGui.QLabel(self.groupBox) self.textLabel7.setWordWrap(True) self.textLabel7.setObjectName(_fromUtf8("textLabel7")) self.gridLayout.addWidget(self.textLabel7, 4, 0, 1, 1) self.label_2 = QtGui.QLabel(self.groupBox) self.label_2.setWordWrap(True) self.label_2.setObjectName(_fromUtf8("label_2")) self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1) self.mPaperUnitsComboBox = QtGui.QComboBox(self.groupBox) self.mPaperUnitsComboBox.setEnabled(True) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mPaperUnitsComboBox.sizePolicy().hasHeightForWidth()) self.mPaperUnitsComboBox.setSizePolicy(sizePolicy) self.mPaperUnitsComboBox.setObjectName( _fromUtf8("mPaperUnitsComboBox")) self.gridLayout.addWidget(self.mPaperUnitsComboBox, 3, 1, 1, 1) self.label_3 = QtGui.QLabel(self.groupBox) self.label_3.setWordWrap(True) self.label_3.setObjectName(_fromUtf8("label_3")) self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1) self.textLabel3 = QtGui.QLabel(self.groupBox) self.textLabel3.setWordWrap(True) self.textLabel3.setObjectName(_fromUtf8("textLabel3")) self.gridLayout.addWidget(self.textLabel3, 0, 0, 1, 1) self.horizontalLayout_3 = QtGui.QHBoxLayout() self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3")) self.mPaperHeightDoubleSpinBox = QgsDoubleSpinBox(self.groupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mPaperHeightDoubleSpinBox.sizePolicy().hasHeightForWidth()) self.mPaperHeightDoubleSpinBox.setSizePolicy(sizePolicy) self.mPaperHeightDoubleSpinBox.setPrefix(_fromUtf8("")) self.mPaperHeightDoubleSpinBox.setSuffix(_fromUtf8("")) self.mPaperHeightDoubleSpinBox.setMaximum(99999.0) self.mPaperHeightDoubleSpinBox.setProperty("showClearButton", False) self.mPaperHeightDoubleSpinBox.setObjectName( _fromUtf8("mPaperHeightDoubleSpinBox")) self.horizontalLayout_3.addWidget(self.mPaperHeightDoubleSpinBox) self.mPaperHeightDDBtn = QgsDataDefinedButton(self.groupBox) self.mPaperHeightDDBtn.setObjectName(_fromUtf8("mPaperHeightDDBtn")) self.horizontalLayout_3.addWidget(self.mPaperHeightDDBtn) self.gridLayout.addLayout(self.horizontalLayout_3, 2, 1, 1, 1) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) self.mPaperWidthDoubleSpinBox = QgsDoubleSpinBox(self.groupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mPaperWidthDoubleSpinBox.sizePolicy().hasHeightForWidth()) self.mPaperWidthDoubleSpinBox.setSizePolicy(sizePolicy) self.mPaperWidthDoubleSpinBox.setPrefix(_fromUtf8("")) self.mPaperWidthDoubleSpinBox.setSuffix(_fromUtf8("")) self.mPaperWidthDoubleSpinBox.setMaximum(99999.0) self.mPaperWidthDoubleSpinBox.setProperty("showClearButton", False) self.mPaperWidthDoubleSpinBox.setObjectName( _fromUtf8("mPaperWidthDoubleSpinBox")) self.horizontalLayout_2.addWidget(self.mPaperWidthDoubleSpinBox) self.mPaperWidthDDBtn = QgsDataDefinedButton(self.groupBox) self.mPaperWidthDDBtn.setObjectName(_fromUtf8("mPaperWidthDDBtn")) self.horizontalLayout_2.addWidget(self.mPaperWidthDDBtn) self.gridLayout.addLayout(self.horizontalLayout_2, 1, 1, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.mPaperSizeComboBox = QtGui.QComboBox(self.groupBox) self.mPaperSizeComboBox.setEnabled(True) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mPaperSizeComboBox.sizePolicy().hasHeightForWidth()) self.mPaperSizeComboBox.setSizePolicy(sizePolicy) self.mPaperSizeComboBox.setObjectName(_fromUtf8("mPaperSizeComboBox")) self.horizontalLayout.addWidget(self.mPaperSizeComboBox) self.mPaperSizeDDBtn = QgsDataDefinedButton(self.groupBox) self.mPaperSizeDDBtn.setObjectName(_fromUtf8("mPaperSizeDDBtn")) self.horizontalLayout.addWidget(self.mPaperSizeDDBtn) self.gridLayout.addLayout(self.horizontalLayout, 0, 1, 1, 1) self.label = QtGui.QLabel(self.groupBox) self.label.setWordWrap(True) self.label.setObjectName(_fromUtf8("label")) self.gridLayout.addWidget(self.label, 1, 0, 1, 1) self.horizontalLayout_5 = QtGui.QHBoxLayout() self.horizontalLayout_5.setObjectName(_fromUtf8("horizontalLayout_5")) self.mPaperOrientationComboBox = QtGui.QComboBox(self.groupBox) self.mPaperOrientationComboBox.setEnabled(True) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mPaperOrientationComboBox.sizePolicy().hasHeightForWidth()) self.mPaperOrientationComboBox.setSizePolicy(sizePolicy) self.mPaperOrientationComboBox.setObjectName( _fromUtf8("mPaperOrientationComboBox")) self.horizontalLayout_5.addWidget(self.mPaperOrientationComboBox) self.mPaperOrientationDDBtn = QgsDataDefinedButton(self.groupBox) self.mPaperOrientationDDBtn.setObjectName( _fromUtf8("mPaperOrientationDDBtn")) self.horizontalLayout_5.addWidget(self.mPaperOrientationDDBtn) self.gridLayout.addLayout(self.horizontalLayout_5, 4, 1, 1, 1) self.verticalLayout_2.addWidget(self.groupBox) self.groupBox_5 = QgsCollapsibleGroupBoxBasic( self.scrollAreaWidgetContents) self.groupBox_5.setObjectName(_fromUtf8("groupBox_5")) self.verticalLayout_5 = QtGui.QVBoxLayout(self.groupBox_5) self.verticalLayout_5.setObjectName(_fromUtf8("verticalLayout_5")) self.gridLayout_5 = QtGui.QGridLayout() self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5")) self.label_4 = QtGui.QLabel(self.groupBox_5) self.label_4.setObjectName(_fromUtf8("label_4")) self.gridLayout_5.addWidget(self.label_4, 0, 1, 1, 1) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout_5.addItem(spacerItem, 0, 0, 1, 1) spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.gridLayout_5.addItem(spacerItem1, 0, 3, 1, 1) self.mTopMarginSpinBox = QgsDoubleSpinBox(self.groupBox_5) self.mTopMarginSpinBox.setSingleStep(0.1) self.mTopMarginSpinBox.setObjectName(_fromUtf8("mTopMarginSpinBox")) self.gridLayout_5.addWidget(self.mTopMarginSpinBox, 0, 2, 1, 1) self.horizontalLayout_7 = QtGui.QHBoxLayout() self.horizontalLayout_7.setObjectName(_fromUtf8("horizontalLayout_7")) self.label_5 = QtGui.QLabel(self.groupBox_5) self.label_5.setObjectName(_fromUtf8("label_5")) self.horizontalLayout_7.addWidget(self.label_5) self.mLeftMarginSpinBox = QgsDoubleSpinBox(self.groupBox_5) self.mLeftMarginSpinBox.setSingleStep(0.1) self.mLeftMarginSpinBox.setObjectName(_fromUtf8("mLeftMarginSpinBox")) self.horizontalLayout_7.addWidget(self.mLeftMarginSpinBox) self.label_11 = QtGui.QLabel(self.groupBox_5) self.label_11.setObjectName(_fromUtf8("label_11")) self.horizontalLayout_7.addWidget(self.label_11) self.mRightMarginSpinBox = QgsDoubleSpinBox(self.groupBox_5) self.mRightMarginSpinBox.setSingleStep(0.1) self.mRightMarginSpinBox.setObjectName( _fromUtf8("mRightMarginSpinBox")) self.horizontalLayout_7.addWidget(self.mRightMarginSpinBox) self.gridLayout_5.addLayout(self.horizontalLayout_7, 1, 0, 1, 4) self.label_12 = QtGui.QLabel(self.groupBox_5) self.label_12.setObjectName(_fromUtf8("label_12")) self.gridLayout_5.addWidget(self.label_12, 2, 1, 1, 1) self.mBottomMarginSpinBox = QgsDoubleSpinBox(self.groupBox_5) self.mBottomMarginSpinBox.setSingleStep(0.1) self.mBottomMarginSpinBox.setObjectName( _fromUtf8("mBottomMarginSpinBox")) self.gridLayout_5.addWidget(self.mBottomMarginSpinBox, 2, 2, 1, 1) self.mResizePageButton = QtGui.QPushButton(self.groupBox_5) self.mResizePageButton.setObjectName(_fromUtf8("mResizePageButton")) self.gridLayout_5.addWidget(self.mResizePageButton, 3, 1, 1, 2) self.verticalLayout_5.addLayout(self.gridLayout_5) self.verticalLayout_2.addWidget(self.groupBox_5) self.groupBox_4 = QgsCollapsibleGroupBoxBasic( self.scrollAreaWidgetContents) self.groupBox_4.setObjectName(_fromUtf8("groupBox_4")) self.gridLayout_4 = QtGui.QGridLayout(self.groupBox_4) self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4")) self.mNumPagesLabel = QtGui.QLabel(self.groupBox_4) self.mNumPagesLabel.setWordWrap(True) self.mNumPagesLabel.setObjectName(_fromUtf8("mNumPagesLabel")) self.gridLayout_4.addWidget(self.mNumPagesLabel, 0, 0, 1, 1) self.horizontalLayout_4 = QtGui.QHBoxLayout() self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4")) self.mNumPagesSpinBox = QgsSpinBox(self.groupBox_4) self.mNumPagesSpinBox.setMinimum(1) self.mNumPagesSpinBox.setProperty("showClearButton", False) self.mNumPagesSpinBox.setObjectName(_fromUtf8("mNumPagesSpinBox")) self.horizontalLayout_4.addWidget(self.mNumPagesSpinBox) self.mNumPagesDDBtn = QgsDataDefinedButton(self.groupBox_4) self.mNumPagesDDBtn.setObjectName(_fromUtf8("mNumPagesDDBtn")) self.horizontalLayout_4.addWidget(self.mNumPagesDDBtn) self.gridLayout_4.addLayout(self.horizontalLayout_4, 0, 1, 1, 1) self.label_10 = QtGui.QLabel(self.groupBox_4) self.label_10.setObjectName(_fromUtf8("label_10")) self.gridLayout_4.addWidget(self.label_10, 1, 0, 1, 1) self.mPageStyleButton = QtGui.QPushButton(self.groupBox_4) self.mPageStyleButton.setObjectName(_fromUtf8("mPageStyleButton")) self.gridLayout_4.addWidget(self.mPageStyleButton, 1, 1, 1, 1) self.verticalLayout_2.addWidget(self.groupBox_4) self.groupBox_3 = QgsCollapsibleGroupBoxBasic( self.scrollAreaWidgetContents) self.groupBox_3.setObjectName(_fromUtf8("groupBox_3")) self.gridLayout_3 = QtGui.QGridLayout(self.groupBox_3) self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) self.mResolutionSpinBox = QgsSpinBox(self.groupBox_3) self.mResolutionSpinBox.setPrefix(_fromUtf8("")) self.mResolutionSpinBox.setMaximum(3000) self.mResolutionSpinBox.setProperty("showClearButton", False) self.mResolutionSpinBox.setObjectName(_fromUtf8("mResolutionSpinBox")) self.gridLayout_3.addWidget(self.mResolutionSpinBox, 1, 1, 1, 1) self.mPrintAsRasterCheckBox = QtGui.QCheckBox(self.groupBox_3) self.mPrintAsRasterCheckBox.setCheckable(True) self.mPrintAsRasterCheckBox.setChecked(False) self.mPrintAsRasterCheckBox.setObjectName( _fromUtf8("mPrintAsRasterCheckBox")) self.gridLayout_3.addWidget(self.mPrintAsRasterCheckBox, 2, 0, 1, 1) self.mWorldFileMapComboBox = QtGui.QComboBox(self.groupBox_3) self.mWorldFileMapComboBox.setEnabled(False) self.mWorldFileMapComboBox.setEditable(False) self.mWorldFileMapComboBox.setObjectName( _fromUtf8("mWorldFileMapComboBox")) self.gridLayout_3.addWidget(self.mWorldFileMapComboBox, 3, 1, 1, 1) self.mGenerateWorldFileCheckBox = QtGui.QCheckBox(self.groupBox_3) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mGenerateWorldFileCheckBox.sizePolicy().hasHeightForWidth()) self.mGenerateWorldFileCheckBox.setSizePolicy(sizePolicy) self.mGenerateWorldFileCheckBox.setObjectName( _fromUtf8("mGenerateWorldFileCheckBox")) self.gridLayout_3.addWidget(self.mGenerateWorldFileCheckBox, 3, 0, 1, 1) self.label_9 = QtGui.QLabel(self.groupBox_3) self.label_9.setObjectName(_fromUtf8("label_9")) self.gridLayout_3.addWidget(self.label_9, 1, 0, 1, 1) self.verticalLayout_2.addWidget(self.groupBox_3) self.mSnapToGridGroupCheckBox = QgsCollapsibleGroupBoxBasic( self.scrollAreaWidgetContents) self.mSnapToGridGroupCheckBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.mSnapToGridGroupCheckBox.setCheckable(False) self.mSnapToGridGroupCheckBox.setChecked(False) self.mSnapToGridGroupCheckBox.setProperty("syncGroup", _fromUtf8("composeritem")) self.mSnapToGridGroupCheckBox.setProperty("collapsed", True) self.mSnapToGridGroupCheckBox.setObjectName( _fromUtf8("mSnapToGridGroupCheckBox")) self.gridLayout_2 = QtGui.QGridLayout(self.mSnapToGridGroupCheckBox) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.label_8 = QtGui.QLabel(self.mSnapToGridGroupCheckBox) self.label_8.setWordWrap(True) self.label_8.setObjectName(_fromUtf8("label_8")) self.gridLayout_2.addWidget(self.label_8, 0, 0, 1, 1) self.mGridResolutionSpinBox = QgsDoubleSpinBox( self.mSnapToGridGroupCheckBox) self.mGridResolutionSpinBox.setPrefix(_fromUtf8("")) self.mGridResolutionSpinBox.setMinimum(0.5) self.mGridResolutionSpinBox.setMaximum(9999.0) self.mGridResolutionSpinBox.setProperty("showClearButton", False) self.mGridResolutionSpinBox.setObjectName( _fromUtf8("mGridResolutionSpinBox")) self.gridLayout_2.addWidget(self.mGridResolutionSpinBox, 0, 1, 1, 1) self.label_6 = QtGui.QLabel(self.mSnapToGridGroupCheckBox) self.label_6.setWordWrap(True) self.label_6.setObjectName(_fromUtf8("label_6")) self.gridLayout_2.addWidget(self.label_6, 1, 0, 1, 1) self.verticalLayout_3 = QtGui.QVBoxLayout() self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3")) self.mOffsetXSpinBox = QgsDoubleSpinBox(self.mSnapToGridGroupCheckBox) self.mOffsetXSpinBox.setMaximum(9999.0) self.mOffsetXSpinBox.setObjectName(_fromUtf8("mOffsetXSpinBox")) self.verticalLayout_3.addWidget(self.mOffsetXSpinBox) self.mOffsetYSpinBox = QgsDoubleSpinBox(self.mSnapToGridGroupCheckBox) self.mOffsetYSpinBox.setMaximum(9999.0) self.mOffsetYSpinBox.setObjectName(_fromUtf8("mOffsetYSpinBox")) self.verticalLayout_3.addWidget(self.mOffsetYSpinBox) self.gridLayout_2.addLayout(self.verticalLayout_3, 1, 1, 1, 1) self.label_7 = QtGui.QLabel(self.mSnapToGridGroupCheckBox) self.label_7.setObjectName(_fromUtf8("label_7")) self.gridLayout_2.addWidget(self.label_7, 2, 0, 1, 1) self.mSnapToleranceSpinBox = QgsSpinBox(self.mSnapToGridGroupCheckBox) self.mSnapToleranceSpinBox.setMaximum(200) self.mSnapToleranceSpinBox.setProperty("showClearButton", False) self.mSnapToleranceSpinBox.setObjectName( _fromUtf8("mSnapToleranceSpinBox")) self.gridLayout_2.addWidget(self.mSnapToleranceSpinBox, 2, 1, 1, 1) self.gridLayout_2.setColumnStretch(1, 1) self.verticalLayout_2.addWidget(self.mSnapToGridGroupCheckBox) self.groupBox_2 = QgsCollapsibleGroupBox(self.scrollAreaWidgetContents) self.groupBox_2.setObjectName(_fromUtf8("groupBox_2")) self.verticalLayout_4 = QtGui.QVBoxLayout(self.groupBox_2) self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4")) self.mVariableEditor = QgsVariableEditorWidget(self.groupBox_2) self.mVariableEditor.setMinimumSize(QtCore.QSize(0, 200)) self.mVariableEditor.setObjectName(_fromUtf8("mVariableEditor")) self.verticalLayout_4.addWidget(self.mVariableEditor) self.verticalLayout_2.addWidget(self.groupBox_2) spacerItem2 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout_2.addItem(spacerItem2) self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.verticalLayout.addWidget(self.scrollArea) self.textLabel7.setBuddy(self.mPaperOrientationComboBox) self.textLabel3.setBuddy(self.mPaperSizeComboBox) self.retranslateUi() QtCore.QMetaObject.connectSlotsByName(self) self.setTabOrder(self.scrollArea, self.groupBox) self.setTabOrder(self.groupBox, self.mPaperSizeComboBox) self.setTabOrder(self.mPaperSizeComboBox, self.mPaperSizeDDBtn) self.setTabOrder(self.mPaperSizeDDBtn, self.mPaperWidthDoubleSpinBox) self.setTabOrder(self.mPaperWidthDoubleSpinBox, self.mPaperWidthDDBtn) self.setTabOrder(self.mPaperWidthDDBtn, self.mPaperHeightDoubleSpinBox) self.setTabOrder(self.mPaperHeightDoubleSpinBox, self.mPaperHeightDDBtn) self.setTabOrder(self.mPaperHeightDDBtn, self.mPaperUnitsComboBox) self.setTabOrder(self.mPaperUnitsComboBox, self.mPaperOrientationComboBox) self.setTabOrder(self.mPaperOrientationComboBox, self.mPaperOrientationDDBtn) self.setTabOrder(self.mPaperOrientationDDBtn, self.mTopMarginSpinBox) self.setTabOrder(self.mTopMarginSpinBox, self.mLeftMarginSpinBox) self.setTabOrder(self.mLeftMarginSpinBox, self.mRightMarginSpinBox) self.setTabOrder(self.mRightMarginSpinBox, self.mBottomMarginSpinBox) self.setTabOrder(self.mBottomMarginSpinBox, self.mResizePageButton) self.setTabOrder(self.mResizePageButton, self.mNumPagesSpinBox) self.setTabOrder(self.mNumPagesSpinBox, self.mNumPagesDDBtn) self.setTabOrder(self.mNumPagesDDBtn, self.mPageStyleButton) self.setTabOrder(self.mPageStyleButton, self.mResolutionSpinBox) self.setTabOrder(self.mResolutionSpinBox, self.mPrintAsRasterCheckBox) self.setTabOrder(self.mPrintAsRasterCheckBox, self.mGenerateWorldFileCheckBox) self.setTabOrder(self.mGenerateWorldFileCheckBox, self.mWorldFileMapComboBox) self.setTabOrder(self.mWorldFileMapComboBox, self.mSnapToGridGroupCheckBox) self.setTabOrder(self.mSnapToGridGroupCheckBox, self.mGridResolutionSpinBox) self.setTabOrder(self.mGridResolutionSpinBox, self.mOffsetXSpinBox) self.setTabOrder(self.mOffsetXSpinBox, self.mOffsetYSpinBox) self.setTabOrder(self.mOffsetYSpinBox, self.mSnapToleranceSpinBox) self.groupBox_2.setVisible(False) self.groupBox.setVisible(False) self.groupBox_5.setVisible(False) def retranslateUi(self): self.setWindowTitle( _translate("QgsCompositionWidgetBase", "Composition", None)) self.groupBox.setTitle( _translate("QgsCompositionWidgetBase", "Page size", None)) self.textLabel7.setText( _translate("QgsCompositionWidgetBase", "Orientation", None)) self.label_2.setText( _translate("QgsCompositionWidgetBase", "Height", None)) self.label_3.setText( _translate("QgsCompositionWidgetBase", "Units", None)) self.textLabel3.setText( _translate("QgsCompositionWidgetBase", "Presets", None)) self.mPaperHeightDDBtn.setText( _translate("QgsCompositionWidgetBase", "...", None)) self.mPaperWidthDDBtn.setText( _translate("QgsCompositionWidgetBase", "...", None)) self.mPaperSizeDDBtn.setText( _translate("QgsCompositionWidgetBase", "...", None)) self.label.setText( _translate("QgsCompositionWidgetBase", "Width", None)) self.mPaperOrientationDDBtn.setText( _translate("QgsCompositionWidgetBase", "...", None)) self.groupBox_5.setTitle( _translate("QgsCompositionWidgetBase", "Resize page to content", None)) self.label_4.setText( _translate("QgsCompositionWidgetBase", "Top margin (mm)", None)) self.label_5.setText( _translate("QgsCompositionWidgetBase", "Left", None)) self.label_11.setText( _translate("QgsCompositionWidgetBase", "Right", None)) self.label_12.setText( _translate("QgsCompositionWidgetBase", "Bottom", None)) self.mResizePageButton.setText( _translate("QgsCompositionWidgetBase", "Resize page", None)) self.groupBox_4.setTitle( _translate("QgsCompositionWidgetBase", "Page settings", None)) self.mNumPagesLabel.setText( _translate("QgsCompositionWidgetBase", "Number of pages", None)) self.mNumPagesDDBtn.setText( _translate("QgsCompositionWidgetBase", "...", None)) self.label_10.setText( _translate("QgsCompositionWidgetBase", "Page background", None)) self.mPageStyleButton.setText( _translate("QgsCompositionWidgetBase", "Change...", None)) self.groupBox_3.setTitle( _translate("QgsCompositionWidgetBase", "Export settings", None)) self.mResolutionSpinBox.setSuffix( _translate("QgsCompositionWidgetBase", " dpi", None)) self.mPrintAsRasterCheckBox.setText( _translate("QgsCompositionWidgetBase", "Print as raster", None)) self.mGenerateWorldFileCheckBox.setText( _translate("QgsCompositionWidgetBase", "World file on", None)) self.label_9.setText( _translate("QgsCompositionWidgetBase", "Export resolution", None)) self.mSnapToGridGroupCheckBox.setTitle( _translate("QgsCompositionWidgetBase", "Guides and Grid", None)) self.label_8.setText( _translate("QgsCompositionWidgetBase", "Grid spacing", None)) self.mGridResolutionSpinBox.setSuffix( _translate("QgsCompositionWidgetBase", " mm", None)) self.label_6.setText( _translate("QgsCompositionWidgetBase", "Grid offset", None)) self.mOffsetXSpinBox.setPrefix( _translate("QgsCompositionWidgetBase", "x: ", None)) self.mOffsetXSpinBox.setSuffix( _translate("QgsCompositionWidgetBase", " mm", None)) self.mOffsetYSpinBox.setPrefix( _translate("QgsCompositionWidgetBase", "y: ", None)) self.mOffsetYSpinBox.setSuffix( _translate("QgsCompositionWidgetBase", " mm", None)) self.label_7.setText( _translate("QgsCompositionWidgetBase", "Snap tolerance", None)) self.mSnapToleranceSpinBox.setSuffix( _translate("QgsCompositionWidgetBase", " px", None)) self.groupBox_2.setTitle( _translate("QgsCompositionWidgetBase", "Variables", None))
class Ui_QgsComposerItemWidgetBase(QtGui.QWidget): def __init__(self, parent, composerObject): QtGui.QWidget.__init__(self, parent) self.mComposerObject = composerObject self.setObjectName(_fromUtf8("QgsComposerItemWidgetBase")) self.resize(290, 847) self.verticalLayout_2 = QtGui.QVBoxLayout(self) self.verticalLayout_2.setMargin(0) self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) self.mGeneralOptionsGroupBox = QgsCollapsibleGroupBoxBasic(self) self.mGeneralOptionsGroupBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.mGeneralOptionsGroupBox.setProperty("syncGroup", _fromUtf8("composeritem")) self.mGeneralOptionsGroupBox.setProperty("collapsed", True) self.mGeneralOptionsGroupBox.setObjectName( _fromUtf8("mGeneralOptionsGroupBox")) self.verticalLayout = QtGui.QVBoxLayout(self.mGeneralOptionsGroupBox) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.gridLayout_3 = QtGui.QGridLayout() self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) self.mWidthLabel = QtGui.QLabel(self.mGeneralOptionsGroupBox) self.mWidthLabel.setObjectName(_fromUtf8("mWidthLabel")) self.gridLayout_3.addWidget(self.mWidthLabel, 3, 0, 1, 1) self.mXLabel = QtGui.QLabel(self.mGeneralOptionsGroupBox) self.mXLabel.setObjectName(_fromUtf8("mXLabel")) self.gridLayout_3.addWidget(self.mXLabel, 1, 0, 1, 1) self.mHeightLabel = QtGui.QLabel(self.mGeneralOptionsGroupBox) self.mHeightLabel.setObjectName(_fromUtf8("mHeightLabel")) self.gridLayout_3.addWidget(self.mHeightLabel, 4, 0, 1, 1) self.mYLabel = QtGui.QLabel(self.mGeneralOptionsGroupBox) self.mYLabel.setObjectName(_fromUtf8("mYLabel")) self.gridLayout_3.addWidget(self.mYLabel, 2, 0, 1, 1) self.mPageLabel = QtGui.QLabel(self.mGeneralOptionsGroupBox) self.mPageLabel.setObjectName(_fromUtf8("mPageLabel")) self.gridLayout_3.addWidget(self.mPageLabel, 0, 0, 1, 1) self.mXPositionDDBtn = QgsDataDefinedButton( self.mGeneralOptionsGroupBox) self.mXPositionDDBtn.setObjectName(_fromUtf8("mXPositionDDBtn")) self.gridLayout_3.addWidget(self.mXPositionDDBtn, 1, 3, 1, 1) self.mYPositionDDBtn = QgsDataDefinedButton( self.mGeneralOptionsGroupBox) self.mYPositionDDBtn.setObjectName(_fromUtf8("mYPositionDDBtn")) self.gridLayout_3.addWidget(self.mYPositionDDBtn, 2, 3, 1, 1) self.mWidthDDBtn = QgsDataDefinedButton(self.mGeneralOptionsGroupBox) self.mWidthDDBtn.setObjectName(_fromUtf8("mWidthDDBtn")) self.gridLayout_3.addWidget(self.mWidthDDBtn, 3, 3, 1, 1) self.mHeightDDBtn = QgsDataDefinedButton(self.mGeneralOptionsGroupBox) self.mHeightDDBtn.setObjectName(_fromUtf8("mHeightDDBtn")) self.gridLayout_3.addWidget(self.mHeightDDBtn, 4, 3, 1, 1) self.mPageSpinBox = QgsSpinBox(self.mGeneralOptionsGroupBox) self.mPageSpinBox.setMinimum(1) self.mPageSpinBox.setProperty("showClearButton", False) self.mPageSpinBox.setObjectName(_fromUtf8("mPageSpinBox")) self.gridLayout_3.addWidget(self.mPageSpinBox, 0, 1, 1, 3) self.mWidthSpin = QgsDoubleSpinBox(self.mGeneralOptionsGroupBox) self.mWidthSpin.setDecimals(3) self.mWidthSpin.setMaximum(9999999.0) self.mWidthSpin.setProperty("showClearButton", False) self.mWidthSpin.setObjectName(_fromUtf8("mWidthSpin")) self.gridLayout_3.addWidget(self.mWidthSpin, 3, 1, 1, 2) self.mHeightSpin = QgsDoubleSpinBox(self.mGeneralOptionsGroupBox) self.mHeightSpin.setDecimals(3) self.mHeightSpin.setMaximum(9999999.0) self.mHeightSpin.setProperty("showClearButton", False) self.mHeightSpin.setObjectName(_fromUtf8("mHeightSpin")) self.gridLayout_3.addWidget(self.mHeightSpin, 4, 1, 1, 2) self.mYPosSpin = QgsDoubleSpinBox(self.mGeneralOptionsGroupBox) self.mYPosSpin.setDecimals(3) self.mYPosSpin.setMinimum(-9999999.0) self.mYPosSpin.setMaximum(9999999.0) self.mYPosSpin.setProperty("showClearButton", False) self.mYPosSpin.setObjectName(_fromUtf8("mYPosSpin")) self.gridLayout_3.addWidget(self.mYPosSpin, 2, 1, 1, 2) self.mXPosSpin = QgsDoubleSpinBox(self.mGeneralOptionsGroupBox) self.mXPosSpin.setDecimals(3) self.mXPosSpin.setMinimum(-9999999.0) self.mXPosSpin.setMaximum(9999999.0) self.mXPosSpin.setProperty("showClearButton", False) self.mXPosSpin.setObjectName(_fromUtf8("mXPosSpin")) self.gridLayout_3.addWidget(self.mXPosSpin, 1, 1, 1, 2) self.gridLayout_3.setColumnStretch(1, 1) self.gridLayout_3.setColumnStretch(2, 1) self.gridLayout_3.setColumnStretch(3, 1) self.verticalLayout.addLayout(self.gridLayout_3) self.horizontalLayout_7 = QtGui.QHBoxLayout() self.horizontalLayout_7.setObjectName(_fromUtf8("horizontalLayout_7")) self.label_2 = QtGui.QLabel(self.mGeneralOptionsGroupBox) self.label_2.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.label_2.setObjectName(_fromUtf8("label_2")) self.horizontalLayout_7.addWidget(self.label_2) self.gridLayout = QtGui.QGridLayout() self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.mUpperMiddleCheckBox = QtGui.QCheckBox( self.mGeneralOptionsGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mUpperMiddleCheckBox.sizePolicy().hasHeightForWidth()) self.mUpperMiddleCheckBox.setSizePolicy(sizePolicy) self.mUpperMiddleCheckBox.setText(_fromUtf8("")) self.mUpperMiddleCheckBox.setObjectName( _fromUtf8("mUpperMiddleCheckBox")) self.gridLayout.addWidget(self.mUpperMiddleCheckBox, 0, 1, 1, 1) self.mMiddleRightCheckBox = QtGui.QCheckBox( self.mGeneralOptionsGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mMiddleRightCheckBox.sizePolicy().hasHeightForWidth()) self.mMiddleRightCheckBox.setSizePolicy(sizePolicy) self.mMiddleRightCheckBox.setText(_fromUtf8("")) self.mMiddleRightCheckBox.setObjectName( _fromUtf8("mMiddleRightCheckBox")) self.gridLayout.addWidget(self.mMiddleRightCheckBox, 1, 2, 1, 1) self.mMiddleCheckBox = QtGui.QCheckBox(self.mGeneralOptionsGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mMiddleCheckBox.sizePolicy().hasHeightForWidth()) self.mMiddleCheckBox.setSizePolicy(sizePolicy) self.mMiddleCheckBox.setText(_fromUtf8("")) self.mMiddleCheckBox.setObjectName(_fromUtf8("mMiddleCheckBox")) self.gridLayout.addWidget(self.mMiddleCheckBox, 1, 1, 1, 1) self.mUpperRightCheckBox = QtGui.QCheckBox( self.mGeneralOptionsGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mUpperRightCheckBox.sizePolicy().hasHeightForWidth()) self.mUpperRightCheckBox.setSizePolicy(sizePolicy) self.mUpperRightCheckBox.setText(_fromUtf8("")) self.mUpperRightCheckBox.setObjectName( _fromUtf8("mUpperRightCheckBox")) self.gridLayout.addWidget(self.mUpperRightCheckBox, 0, 2, 1, 1) self.mLowerMiddleCheckBox = QtGui.QCheckBox( self.mGeneralOptionsGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mLowerMiddleCheckBox.sizePolicy().hasHeightForWidth()) self.mLowerMiddleCheckBox.setSizePolicy(sizePolicy) self.mLowerMiddleCheckBox.setText(_fromUtf8("")) self.mLowerMiddleCheckBox.setObjectName( _fromUtf8("mLowerMiddleCheckBox")) self.gridLayout.addWidget(self.mLowerMiddleCheckBox, 2, 1, 1, 1) self.mLowerRightCheckBox = QtGui.QCheckBox( self.mGeneralOptionsGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mLowerRightCheckBox.sizePolicy().hasHeightForWidth()) self.mLowerRightCheckBox.setSizePolicy(sizePolicy) self.mLowerRightCheckBox.setText(_fromUtf8("")) self.mLowerRightCheckBox.setObjectName( _fromUtf8("mLowerRightCheckBox")) self.gridLayout.addWidget(self.mLowerRightCheckBox, 2, 2, 1, 1) self.mUpperLeftCheckBox = QtGui.QCheckBox(self.mGeneralOptionsGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mUpperLeftCheckBox.sizePolicy().hasHeightForWidth()) self.mUpperLeftCheckBox.setSizePolicy(sizePolicy) self.mUpperLeftCheckBox.setText(_fromUtf8("")) self.mUpperLeftCheckBox.setObjectName(_fromUtf8("mUpperLeftCheckBox")) self.gridLayout.addWidget(self.mUpperLeftCheckBox, 0, 0, 1, 1) self.mLowerLeftCheckBox = QtGui.QCheckBox(self.mGeneralOptionsGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mLowerLeftCheckBox.sizePolicy().hasHeightForWidth()) self.mLowerLeftCheckBox.setSizePolicy(sizePolicy) self.mLowerLeftCheckBox.setText(_fromUtf8("")) self.mLowerLeftCheckBox.setObjectName(_fromUtf8("mLowerLeftCheckBox")) self.gridLayout.addWidget(self.mLowerLeftCheckBox, 2, 0, 1, 1) self.mMiddleLeftCheckBox = QtGui.QCheckBox( self.mGeneralOptionsGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mMiddleLeftCheckBox.sizePolicy().hasHeightForWidth()) self.mMiddleLeftCheckBox.setSizePolicy(sizePolicy) self.mMiddleLeftCheckBox.setText(_fromUtf8("")) self.mMiddleLeftCheckBox.setObjectName( _fromUtf8("mMiddleLeftCheckBox")) self.gridLayout.addWidget(self.mMiddleLeftCheckBox, 1, 0, 1, 1) self.horizontalLayout_7.addLayout(self.gridLayout) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_7.addItem(spacerItem) self.verticalLayout.addLayout(self.horizontalLayout_7) self.verticalLayout_2.addWidget(self.mGeneralOptionsGroupBox) self.mTransformsGroupBox = QgsCollapsibleGroupBoxBasic(self) self.mTransformsGroupBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.mTransformsGroupBox.setProperty("syncGroup", _fromUtf8("composeritem")) self.mTransformsGroupBox.setProperty("collapsed", True) self.mTransformsGroupBox.setObjectName( _fromUtf8("mTransformsGroupBox")) self.gridLayout_5 = QtGui.QGridLayout(self.mTransformsGroupBox) self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5")) self.label = QtGui.QLabel(self.mTransformsGroupBox) self.label.setObjectName(_fromUtf8("label")) self.gridLayout_5.addWidget(self.label, 0, 0, 1, 1) self.horizontalLayout_4 = QtGui.QHBoxLayout() self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4")) self.mItemRotationSpinBox = QgsDoubleSpinBox(self.mTransformsGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mItemRotationSpinBox.sizePolicy().hasHeightForWidth()) self.mItemRotationSpinBox.setSizePolicy(sizePolicy) self.mItemRotationSpinBox.setMaximum(360.0) self.mItemRotationSpinBox.setObjectName( _fromUtf8("mItemRotationSpinBox")) self.horizontalLayout_4.addWidget(self.mItemRotationSpinBox) self.mItemRotationDDBtn = QgsDataDefinedButton( self.mTransformsGroupBox) self.mItemRotationDDBtn.setObjectName(_fromUtf8("mItemRotationDDBtn")) self.horizontalLayout_4.addWidget(self.mItemRotationDDBtn) self.gridLayout_5.addLayout(self.horizontalLayout_4, 0, 1, 1, 1) self.gridLayout_5.setColumnStretch(1, 1) self.verticalLayout_2.addWidget(self.mTransformsGroupBox) self.mFrameGroupBox = QgsCollapsibleGroupBoxBasic(self) self.mFrameGroupBox.setCheckable(True) self.mFrameGroupBox.setProperty("syncGroup", _fromUtf8("composeritem")) self.mFrameGroupBox.setProperty("collapsed", True) self.mFrameGroupBox.setObjectName(_fromUtf8("mFrameGroupBox")) self.gridLayout_6 = QtGui.QGridLayout(self.mFrameGroupBox) self.gridLayout_6.setObjectName(_fromUtf8("gridLayout_6")) self.label_3 = QtGui.QLabel(self.mFrameGroupBox) self.label_3.setObjectName(_fromUtf8("label_3")) self.gridLayout_6.addWidget(self.label_3, 0, 0, 1, 1) self.horizontalLayout_6 = QtGui.QHBoxLayout() self.horizontalLayout_6.setObjectName(_fromUtf8("horizontalLayout_6")) self.mFrameColorButton = QgsColorButtonV2(self.mFrameGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mFrameColorButton.sizePolicy().hasHeightForWidth()) self.mFrameColorButton.setSizePolicy(sizePolicy) self.mFrameColorButton.setMinimumSize(QtCore.QSize(120, 0)) self.mFrameColorButton.setMaximumSize(QtCore.QSize(120, 16777215)) self.mFrameColorButton.setText(_fromUtf8("")) self.mFrameColorButton.setObjectName(_fromUtf8("mFrameColorButton")) self.horizontalLayout_6.addWidget(self.mFrameColorButton) spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_6.addItem(spacerItem1) self.gridLayout_6.addLayout(self.horizontalLayout_6, 0, 1, 1, 1) self.mOutlineWidthLabel = QtGui.QLabel(self.mFrameGroupBox) self.mOutlineWidthLabel.setWordWrap(True) self.mOutlineWidthLabel.setObjectName(_fromUtf8("mOutlineWidthLabel")) self.gridLayout_6.addWidget(self.mOutlineWidthLabel, 1, 0, 1, 1) self.mOutlineWidthSpinBox = QgsDoubleSpinBox(self.mFrameGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mOutlineWidthSpinBox.sizePolicy().hasHeightForWidth()) self.mOutlineWidthSpinBox.setSizePolicy(sizePolicy) self.mOutlineWidthSpinBox.setSingleStep(0.1) self.mOutlineWidthSpinBox.setProperty("showClearButton", False) self.mOutlineWidthSpinBox.setObjectName( _fromUtf8("mOutlineWidthSpinBox")) self.gridLayout_6.addWidget(self.mOutlineWidthSpinBox, 1, 1, 1, 1) self.label_8 = QtGui.QLabel(self.mFrameGroupBox) self.label_8.setObjectName(_fromUtf8("label_8")) self.gridLayout_6.addWidget(self.label_8, 2, 0, 1, 1) self.mFrameJoinStyleCombo = QgsPenJoinStyleComboBox( self.mFrameGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mFrameJoinStyleCombo.sizePolicy().hasHeightForWidth()) self.mFrameJoinStyleCombo.setSizePolicy(sizePolicy) self.mFrameJoinStyleCombo.setObjectName( _fromUtf8("mFrameJoinStyleCombo")) self.gridLayout_6.addWidget(self.mFrameJoinStyleCombo, 2, 1, 1, 1) self.verticalLayout_2.addWidget(self.mFrameGroupBox) self.mBackgroundGroupBox = QgsCollapsibleGroupBoxBasic(self) self.mBackgroundGroupBox.setCheckable(True) self.mBackgroundGroupBox.setChecked(True) self.mBackgroundGroupBox.setProperty("syncGroup", _fromUtf8("composeritem")) self.mBackgroundGroupBox.setProperty("collapsed", True) self.mBackgroundGroupBox.setObjectName( _fromUtf8("mBackgroundGroupBox")) self.gridLayout_7 = QtGui.QGridLayout(self.mBackgroundGroupBox) self.gridLayout_7.setObjectName(_fromUtf8("gridLayout_7")) self.label_4 = QtGui.QLabel(self.mBackgroundGroupBox) self.label_4.setObjectName(_fromUtf8("label_4")) self.gridLayout_7.addWidget(self.label_4, 0, 0, 1, 1) self.horizontalLayout_5 = QtGui.QHBoxLayout() self.horizontalLayout_5.setObjectName(_fromUtf8("horizontalLayout_5")) self.mBackgroundColorButton = QgsColorButtonV2( self.mBackgroundGroupBox) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mBackgroundColorButton.sizePolicy().hasHeightForWidth()) self.mBackgroundColorButton.setSizePolicy(sizePolicy) self.mBackgroundColorButton.setMinimumSize(QtCore.QSize(120, 0)) self.mBackgroundColorButton.setMaximumSize(QtCore.QSize(120, 16777215)) self.mBackgroundColorButton.setText(_fromUtf8("")) self.mBackgroundColorButton.setObjectName( _fromUtf8("mBackgroundColorButton")) self.horizontalLayout_5.addWidget(self.mBackgroundColorButton) spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem2) self.gridLayout_7.addLayout(self.horizontalLayout_5, 0, 1, 1, 1) self.verticalLayout_2.addWidget(self.mBackgroundGroupBox) self.groupBox = QgsCollapsibleGroupBoxBasic(self) self.groupBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.groupBox.setProperty("syncGroup", _fromUtf8("composeritem")) self.groupBox.setProperty("collapsed", True) self.groupBox.setObjectName(_fromUtf8("groupBox")) self.gridLayout_8 = QtGui.QGridLayout(self.groupBox) self.gridLayout_8.setObjectName(_fromUtf8("gridLayout_8")) self.mItemIdLabel = QtGui.QLabel(self.groupBox) self.mItemIdLabel.setObjectName(_fromUtf8("mItemIdLabel")) self.gridLayout_8.addWidget(self.mItemIdLabel, 0, 0, 1, 1) self.mItemIdLineEdit = QtGui.QLineEdit(self.groupBox) self.mItemIdLineEdit.setObjectName(_fromUtf8("mItemIdLineEdit")) self.gridLayout_8.addWidget(self.mItemIdLineEdit, 0, 1, 1, 1) self.verticalLayout_2.addWidget(self.groupBox) self.groupRendering = QgsCollapsibleGroupBoxBasic(self) self.groupRendering.setFocusPolicy(QtCore.Qt.StrongFocus) self.groupRendering.setProperty("collapsed", True) self.groupRendering.setProperty("syncGroup", _fromUtf8("composeritem")) self.groupRendering.setObjectName(_fromUtf8("groupRendering")) self.gridLayout_4 = QtGui.QGridLayout(self.groupRendering) self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4")) self.labelBlendMode = QtGui.QLabel(self.groupRendering) self.labelBlendMode.setObjectName(_fromUtf8("labelBlendMode")) self.gridLayout_4.addWidget(self.labelBlendMode, 0, 0, 1, 1) self.horizontalLayout_3 = QtGui.QHBoxLayout() self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3")) self.mBlendModeCombo = QgsBlendModeComboBox(self.groupRendering) self.mBlendModeCombo.setObjectName(_fromUtf8("mBlendModeCombo")) self.horizontalLayout_3.addWidget(self.mBlendModeCombo) self.mBlendModeDDBtn = QgsDataDefinedButton(self.groupRendering) self.mBlendModeDDBtn.setObjectName(_fromUtf8("mBlendModeDDBtn")) self.horizontalLayout_3.addWidget(self.mBlendModeDDBtn) self.gridLayout_4.addLayout(self.horizontalLayout_3, 0, 1, 1, 1) self.labelTransparency = QtGui.QLabel(self.groupRendering) self.labelTransparency.setObjectName(_fromUtf8("labelTransparency")) self.gridLayout_4.addWidget(self.labelTransparency, 1, 0, 1, 1) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) self.mTransparencySlider = QtGui.QSlider(self.groupRendering) self.mTransparencySlider.setMaximum(100) self.mTransparencySlider.setOrientation(QtCore.Qt.Horizontal) self.mTransparencySlider.setObjectName( _fromUtf8("mTransparencySlider")) self.horizontalLayout_2.addWidget(self.mTransparencySlider) self.mTransparencySpnBx = QgsSpinBox(self.groupRendering) self.mTransparencySpnBx.setMinimumSize(QtCore.QSize(80, 25)) self.mTransparencySpnBx.setMaximum(100) self.mTransparencySpnBx.setObjectName(_fromUtf8("mTransparencySpnBx")) self.horizontalLayout_2.addWidget(self.mTransparencySpnBx) self.mTransparencyDDBtn = QgsDataDefinedButton(self.groupRendering) self.mTransparencyDDBtn.setObjectName(_fromUtf8("mTransparencyDDBtn")) self.horizontalLayout_2.addWidget(self.mTransparencyDDBtn) self.gridLayout_4.addLayout(self.horizontalLayout_2, 1, 1, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.mExcludeFromPrintsCheckBox = QtGui.QCheckBox(self.groupRendering) self.mExcludeFromPrintsCheckBox.setObjectName( _fromUtf8("mExcludeFromPrintsCheckBox")) self.horizontalLayout.addWidget(self.mExcludeFromPrintsCheckBox) self.mExcludePrintsDDBtn = QgsDataDefinedButton(self.groupRendering) self.mExcludePrintsDDBtn.setObjectName( _fromUtf8("mExcludePrintsDDBtn")) self.horizontalLayout.addWidget(self.mExcludePrintsDDBtn) self.gridLayout_4.addLayout(self.horizontalLayout, 2, 0, 1, 2) self.verticalLayout_2.addWidget(self.groupRendering) self.groupBox_3 = QgsCollapsibleGroupBox(self) self.groupBox_3.setObjectName(_fromUtf8("groupBox_3")) self.verticalLayout_4 = QtGui.QVBoxLayout(self.groupBox_3) self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4")) self.mVariableEditor = QgsVariableEditorWidget(self.groupBox_3) self.mVariableEditor.setMinimumSize(QtCore.QSize(0, 200)) self.mVariableEditor.setObjectName(_fromUtf8("mVariableEditor")) self.verticalLayout_4.addWidget(self.mVariableEditor) self.verticalLayout_2.addWidget(self.groupBox_3) spacerItem3 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.MinimumExpanding) self.verticalLayout_2.addItem(spacerItem3) self.mOutlineWidthLabel.setBuddy(self.mOutlineWidthSpinBox) self.retranslateUi() QtCore.QMetaObject.connectSlotsByName(self) self.setTabOrder(self.mGeneralOptionsGroupBox, self.mPageSpinBox) self.setTabOrder(self.mPageSpinBox, self.mXPosSpin) self.setTabOrder(self.mXPosSpin, self.mXPositionDDBtn) self.setTabOrder(self.mXPositionDDBtn, self.mYPosSpin) self.setTabOrder(self.mYPosSpin, self.mYPositionDDBtn) self.setTabOrder(self.mYPositionDDBtn, self.mWidthSpin) self.setTabOrder(self.mWidthSpin, self.mWidthDDBtn) self.setTabOrder(self.mWidthDDBtn, self.mHeightSpin) self.setTabOrder(self.mHeightSpin, self.mHeightDDBtn) self.setTabOrder(self.mHeightDDBtn, self.mUpperLeftCheckBox) self.setTabOrder(self.mUpperLeftCheckBox, self.mUpperMiddleCheckBox) self.setTabOrder(self.mUpperMiddleCheckBox, self.mUpperRightCheckBox) self.setTabOrder(self.mUpperRightCheckBox, self.mMiddleLeftCheckBox) self.setTabOrder(self.mMiddleLeftCheckBox, self.mMiddleCheckBox) self.setTabOrder(self.mMiddleCheckBox, self.mMiddleRightCheckBox) self.setTabOrder(self.mMiddleRightCheckBox, self.mLowerLeftCheckBox) self.setTabOrder(self.mLowerLeftCheckBox, self.mLowerMiddleCheckBox) self.setTabOrder(self.mLowerMiddleCheckBox, self.mLowerRightCheckBox) self.setTabOrder(self.mLowerRightCheckBox, self.mTransformsGroupBox) self.setTabOrder(self.mTransformsGroupBox, self.mItemRotationSpinBox) self.setTabOrder(self.mItemRotationSpinBox, self.mItemRotationDDBtn) self.setTabOrder(self.mItemRotationDDBtn, self.mFrameGroupBox) self.setTabOrder(self.mFrameGroupBox, self.mFrameColorButton) self.setTabOrder(self.mFrameColorButton, self.mOutlineWidthSpinBox) self.setTabOrder(self.mOutlineWidthSpinBox, self.mFrameJoinStyleCombo) self.setTabOrder(self.mFrameJoinStyleCombo, self.mBackgroundGroupBox) self.setTabOrder(self.mBackgroundGroupBox, self.mBackgroundColorButton) self.setTabOrder(self.mBackgroundColorButton, self.groupBox) self.setTabOrder(self.groupBox, self.mItemIdLineEdit) self.setTabOrder(self.mItemIdLineEdit, self.groupRendering) self.setTabOrder(self.groupRendering, self.mBlendModeCombo) self.setTabOrder(self.mBlendModeCombo, self.mBlendModeDDBtn) self.setTabOrder(self.mBlendModeDDBtn, self.mTransparencySlider) self.setTabOrder(self.mTransparencySlider, self.mTransparencySpnBx) self.setTabOrder(self.mTransparencySpnBx, self.mTransparencyDDBtn) self.setTabOrder(self.mTransparencyDDBtn, self.mExcludeFromPrintsCheckBox) self.setTabOrder(self.mExcludeFromPrintsCheckBox, self.mExcludePrintsDDBtn) # self.mComposerObject = None self.groupBox_3.setVisible(False) def retranslateUi(self): self.setWindowTitle( _translate("QgsComposerItemWidgetBase", "Global Options", None)) self.mGeneralOptionsGroupBox.setTitle( _translate("QgsComposerItemWidgetBase", "Position and size", None)) self.mWidthLabel.setText( _translate("QgsComposerItemWidgetBase", "Width", None)) self.mXLabel.setText(_translate("QgsComposerItemWidgetBase", "X", None)) self.mHeightLabel.setText( _translate("QgsComposerItemWidgetBase", "Height", None)) self.mYLabel.setText(_translate("QgsComposerItemWidgetBase", "Y", None)) self.mPageLabel.setText( _translate("QgsComposerItemWidgetBase", "Page", None)) self.mXPositionDDBtn.setText( _translate("QgsComposerItemWidgetBase", "...", None)) self.mYPositionDDBtn.setText( _translate("QgsComposerItemWidgetBase", "...", None)) self.mWidthDDBtn.setText( _translate("QgsComposerItemWidgetBase", "...", None)) self.mHeightDDBtn.setText( _translate("QgsComposerItemWidgetBase", "...", None)) self.mWidthSpin.setSuffix( _translate("QgsComposerItemWidgetBase", " mm", None)) self.mHeightSpin.setSuffix( _translate("QgsComposerItemWidgetBase", " mm", None)) self.mYPosSpin.setSuffix( _translate("QgsComposerItemWidgetBase", " mm", None)) self.mXPosSpin.setSuffix( _translate("QgsComposerItemWidgetBase", " mm", None)) self.label_2.setText( _translate("QgsComposerItemWidgetBase", "Reference point", None)) self.mTransformsGroupBox.setTitle( _translate("QgsComposerItemWidgetBase", "Rotation", None)) self.label.setText( _translate("QgsComposerItemWidgetBase", "Rotation", None)) self.mItemRotationSpinBox.setSuffix( _translate("QgsComposerItemWidgetBase", " °", None)) self.mItemRotationDDBtn.setText( _translate("QgsComposerItemWidgetBase", "...", None)) self.mFrameGroupBox.setTitle( _translate("QgsComposerItemWidgetBase", "Frame", None)) self.label_3.setText( _translate("QgsComposerItemWidgetBase", "Frame color", None)) self.mOutlineWidthLabel.setText( _translate("QgsComposerItemWidgetBase", "Thickness", None)) self.mOutlineWidthSpinBox.setSuffix( _translate("QgsComposerItemWidgetBase", " mm", None)) self.label_8.setText( _translate("QgsComposerItemWidgetBase", "Join style", None)) self.mBackgroundGroupBox.setTitle( _translate("QgsComposerItemWidgetBase", "Background", None)) self.label_4.setText( _translate("QgsComposerItemWidgetBase", "Background color", None)) self.groupBox.setTitle( _translate("QgsComposerItemWidgetBase", "Item ID", None)) self.mItemIdLabel.setText( _translate("QgsComposerItemWidgetBase", "Id", None)) self.groupRendering.setTitle( _translate("QgsComposerItemWidgetBase", "Rendering", None)) self.labelBlendMode.setText( _translate("QgsComposerItemWidgetBase", "Blending mode", None)) self.mBlendModeDDBtn.setText( _translate("QgsComposerItemWidgetBase", "...", None)) self.labelTransparency.setText( _translate("QgsComposerItemWidgetBase", "Transparency", None)) self.mTransparencyDDBtn.setText( _translate("QgsComposerItemWidgetBase", "...", None)) self.mExcludeFromPrintsCheckBox.setText( _translate("QgsComposerItemWidgetBase", "Exclude item from exports", None)) self.mExcludePrintsDDBtn.setText( _translate("QgsComposerItemWidgetBase", "...", None)) self.groupBox_3.setTitle( _translate("QgsComposerItemWidgetBase", "Variables", None)) def ddPropertyForWidget(self, widget): # Q_UNUSED( widget ); # //base implementation, return no property return QgsComposerObject.NoProperty def updateDataDefinedProperty(self): #match data defined button to item's data defined property ddButton = self.sender() ddButton._class_ = QgsDataDefinedButton if (not isinstance(ddButton, QgsDataDefinedButton)): return property = self.ddPropertyForWidget(ddButton) if (property == QgsComposerObject.NoProperty): return #set the data defined property and refresh the item self.setDataDefinedProperty(ddButton, property) self.mComposerObject.refreshDataDefinedProperty(property) def setDataDefinedProperty(self, ddBtn, p): if (not self.mComposerObject): return map = ddBtn.definedProperty() self.mComposerObject.setDataDefinedProperty( p, map.value("active").toInt(), map.value("useexpr").toInt(), map.value("expression"), map.value("field")) def atlasComposition(self): if (not self.mComposerObject): return None composition = self.mComposerObject.composition() if (not composition): return None return composition.atlasComposition() def atlasCoverageLayer(self): atlasMap = self.atlasComposition() if (atlasMap and atlasMap.enabled()): return atlasMap.coverageLayer() return None
class Ui_QgsComposerLabelWidgetBase(QtGui.QWidget): def __init__(self, parent, QgsComposerLabelWidgetBase): QtGui.QWidget.__init__(self, parent) self.setObjectName(_fromUtf8("self")) self.resize(304, 705) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth()) self.setSizePolicy(sizePolicy) self._2 = QtGui.QVBoxLayout(self) self._2.setSpacing(0) self._2.setMargin(0) self._2.setObjectName(_fromUtf8("_2")) self.label = QtGui.QLabel(self) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.label.sizePolicy().hasHeightForWidth()) self.label.setSizePolicy(sizePolicy) self.label.setStyleSheet( _fromUtf8( "padding: 2px; font-weight: bold; background-color: rgb(200, 200, 200);" )) self.label.setObjectName(_fromUtf8("label")) self._2.addWidget(self.label) self.scrollArea = QtGui.QScrollArea(self) self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName(_fromUtf8("scrollArea")) self.scrollAreaWidgetContents = QtGui.QWidget() self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 302, 682)) self.scrollAreaWidgetContents.setObjectName( _fromUtf8("scrollAreaWidgetContents")) self.mainLayout = QtGui.QVBoxLayout(self.scrollAreaWidgetContents) self.mainLayout.setObjectName(_fromUtf8("mainLayout")) self.mTextGroupBox = QgsCollapsibleGroupBoxBasic( self.scrollAreaWidgetContents) self.mTextGroupBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.mTextGroupBox.setCheckable(False) self.mTextGroupBox.setProperty("syncGroup", _fromUtf8("composeritem")) self.mTextGroupBox.setProperty("collapsed", False) self.mTextGroupBox.setObjectName(_fromUtf8("mTextGroupBox")) self.gridLayout_2 = QtGui.QGridLayout(self.mTextGroupBox) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) self.mTextEdit = QtGui.QPlainTextEdit(self.mTextGroupBox) self.mTextEdit.setTabStopWidth(10) self.mTextEdit.setObjectName(_fromUtf8("mTextEdit")) self.gridLayout_2.addWidget(self.mTextEdit, 0, 0, 1, 1) self.mHtmlCheckBox = QtGui.QCheckBox(self.mTextGroupBox) self.mHtmlCheckBox.setObjectName(_fromUtf8("mHtmlCheckBox")) self.gridLayout_2.addWidget(self.mHtmlCheckBox, 1, 0, 1, 1) self.mInsertExpressionButton = QtGui.QPushButton(self.mTextGroupBox) self.mInsertExpressionButton.setObjectName( _fromUtf8("mInsertExpressionButton")) self.gridLayout_2.addWidget(self.mInsertExpressionButton, 2, 0, 1, 1) self.mainLayout.addWidget(self.mTextGroupBox) self.mAppearanceGroup = QgsCollapsibleGroupBoxBasic( self.scrollAreaWidgetContents) self.mAppearanceGroup.setFocusPolicy(QtCore.Qt.StrongFocus) self.mAppearanceGroup.setCheckable(False) self.mAppearanceGroup.setProperty("syncGroup", _fromUtf8("composeritem")) self.mAppearanceGroup.setProperty("collapsed", False) self.mAppearanceGroup.setObjectName(_fromUtf8("mAppearanceGroup")) self.gridLayout = QtGui.QGridLayout(self.mAppearanceGroup) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) self.label_2 = QtGui.QLabel(self.mAppearanceGroup) self.label_2.setObjectName(_fromUtf8("label_2")) self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1) self.horizontalLayout_6 = QtGui.QHBoxLayout() self.horizontalLayout_6.setObjectName(_fromUtf8("horizontalLayout_6")) self.mTopRadioButton = QtGui.QRadioButton(self.mAppearanceGroup) self.mTopRadioButton.setObjectName(_fromUtf8("mTopRadioButton")) self.buttonGroup = QtGui.QButtonGroup(self) self.buttonGroup.setObjectName(_fromUtf8("buttonGroup")) self.buttonGroup.addButton(self.mTopRadioButton) self.horizontalLayout_6.addWidget(self.mTopRadioButton) self.mMiddleRadioButton = QtGui.QRadioButton(self.mAppearanceGroup) self.mMiddleRadioButton.setObjectName(_fromUtf8("mMiddleRadioButton")) self.buttonGroup.addButton(self.mMiddleRadioButton) self.horizontalLayout_6.addWidget(self.mMiddleRadioButton) self.mBottomRadioButton = QtGui.QRadioButton(self.mAppearanceGroup) self.mBottomRadioButton.setObjectName(_fromUtf8("mBottomRadioButton")) self.buttonGroup.addButton(self.mBottomRadioButton) self.horizontalLayout_6.addWidget(self.mBottomRadioButton) spacerItem = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_6.addItem(spacerItem) self.gridLayout.addLayout(self.horizontalLayout_6, 7, 0, 1, 2) self.mMarginXDoubleSpinBox = QgsDoubleSpinBox(self.mAppearanceGroup) self.mMarginXDoubleSpinBox.setPrefix(_fromUtf8("")) self.mMarginXDoubleSpinBox.setMinimum(-99.99) self.mMarginXDoubleSpinBox.setObjectName( _fromUtf8("mMarginXDoubleSpinBox")) self.gridLayout.addWidget(self.mMarginXDoubleSpinBox, 2, 1, 1, 1) self.horizontalLayout_5 = QtGui.QHBoxLayout() self.horizontalLayout_5.setObjectName(_fromUtf8("horizontalLayout_5")) self.mLeftRadioButton = QtGui.QRadioButton(self.mAppearanceGroup) self.mLeftRadioButton.setObjectName(_fromUtf8("mLeftRadioButton")) self.buttonGroup_2 = QtGui.QButtonGroup(self) self.buttonGroup_2.setObjectName(_fromUtf8("buttonGroup_2")) self.buttonGroup_2.addButton(self.mLeftRadioButton) self.horizontalLayout_5.addWidget(self.mLeftRadioButton) self.mCenterRadioButton = QtGui.QRadioButton(self.mAppearanceGroup) self.mCenterRadioButton.setObjectName(_fromUtf8("mCenterRadioButton")) self.buttonGroup_2.addButton(self.mCenterRadioButton) self.horizontalLayout_5.addWidget(self.mCenterRadioButton) self.mRightRadioButton = QtGui.QRadioButton(self.mAppearanceGroup) self.mRightRadioButton.setObjectName(_fromUtf8("mRightRadioButton")) self.buttonGroup_2.addButton(self.mRightRadioButton) self.horizontalLayout_5.addWidget(self.mRightRadioButton) spacerItem1 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem1) self.gridLayout.addLayout(self.horizontalLayout_5, 5, 0, 1, 2) self.mHorizontalAlignementLabel = QtGui.QLabel(self.mAppearanceGroup) self.mHorizontalAlignementLabel.setObjectName( _fromUtf8("mHorizontalAlignementLabel")) self.gridLayout.addWidget(self.mHorizontalAlignementLabel, 4, 0, 1, 2) self.mVerticalAlignementLabel = QtGui.QLabel(self.mAppearanceGroup) self.mVerticalAlignementLabel.setObjectName( _fromUtf8("mVerticalAlignementLabel")) self.gridLayout.addWidget(self.mVerticalAlignementLabel, 6, 0, 1, 2) self.mFontButton = QtGui.QPushButton(self.mAppearanceGroup) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.mFontButton.sizePolicy().hasHeightForWidth()) self.mFontButton.setSizePolicy(sizePolicy) self.mFontButton.setObjectName(_fromUtf8("mFontButton")) self.gridLayout.addWidget(self.mFontButton, 0, 0, 1, 2) self.mMarginXLabel = QtGui.QLabel(self.mAppearanceGroup) self.mMarginXLabel.setObjectName(_fromUtf8("mMarginXLabel")) self.gridLayout.addWidget(self.mMarginXLabel, 2, 0, 1, 1) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.mFontColorButton = QgsColorButtonV2(self.mAppearanceGroup) self.mFontColorButton.setMinimumSize(QtCore.QSize(120, 0)) self.mFontColorButton.setMaximumSize(QtCore.QSize(120, 16777215)) self.mFontColorButton.setText(_fromUtf8("")) self.mFontColorButton.setObjectName(_fromUtf8("mFontColorButton")) self.horizontalLayout.addWidget(self.mFontColorButton) spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem2) self.gridLayout.addLayout(self.horizontalLayout, 1, 1, 1, 1) self.mMarginYDoubleSpinBox = QgsDoubleSpinBox(self.mAppearanceGroup) self.mMarginYDoubleSpinBox.setMinimum(-99.99) self.mMarginYDoubleSpinBox.setObjectName( _fromUtf8("mMarginYDoubleSpinBox")) self.gridLayout.addWidget(self.mMarginYDoubleSpinBox, 3, 1, 1, 1) self.mMarginYLabel = QtGui.QLabel(self.mAppearanceGroup) self.mMarginYLabel.setObjectName(_fromUtf8("mMarginYLabel")) self.gridLayout.addWidget(self.mMarginYLabel, 3, 0, 1, 1) self.mainLayout.addWidget(self.mAppearanceGroup) self.scrollArea.setWidget(self.scrollAreaWidgetContents) self._2.addWidget(self.scrollArea) self.retranslateUi() QtCore.QMetaObject.connectSlotsByName(self) self.setTabOrder(self.scrollArea, self.mTextGroupBox) self.setTabOrder(self.mTextGroupBox, self.mTextEdit) self.setTabOrder(self.mTextEdit, self.mHtmlCheckBox) self.setTabOrder(self.mHtmlCheckBox, self.mInsertExpressionButton) self.setTabOrder(self.mInsertExpressionButton, self.mAppearanceGroup) self.setTabOrder(self.mAppearanceGroup, self.mFontButton) self.setTabOrder(self.mFontButton, self.mFontColorButton) self.setTabOrder(self.mFontColorButton, self.mMarginXDoubleSpinBox) self.setTabOrder(self.mMarginXDoubleSpinBox, self.mMarginYDoubleSpinBox) self.setTabOrder(self.mMarginYDoubleSpinBox, self.mLeftRadioButton) self.setTabOrder(self.mLeftRadioButton, self.mCenterRadioButton) self.setTabOrder(self.mCenterRadioButton, self.mRightRadioButton) self.setTabOrder(self.mRightRadioButton, self.mTopRadioButton) self.setTabOrder(self.mTopRadioButton, self.mMiddleRadioButton) self.setTabOrder(self.mMiddleRadioButton, self.mBottomRadioButton) def retranslateUi(self): self.setWindowTitle( _translate("QgsComposerLabelWidgetBase", "Label Options", None)) self.label.setText( _translate("QgsComposerLabelWidgetBase", "Label", None)) self.mTextGroupBox.setTitle( _translate("QgsComposerLabelWidgetBase", "Main properties", None)) self.mHtmlCheckBox.setText( _translate("QgsComposerLabelWidgetBase", "Render as HTML", None)) self.mInsertExpressionButton.setText( _translate("QgsComposerLabelWidgetBase", "Insert an expression...", None)) self.mAppearanceGroup.setTitle( _translate("QgsComposerLabelWidgetBase", "Appearance", None)) self.label_2.setText( _translate("QgsComposerLabelWidgetBase", "Font color", None)) self.mTopRadioButton.setText( _translate("QgsComposerLabelWidgetBase", "Top", None)) self.mMiddleRadioButton.setText( _translate("QgsComposerLabelWidgetBase", "Middle", None)) self.mBottomRadioButton.setText( _translate("QgsComposerLabelWidgetBase", "Bottom", None)) self.mMarginXDoubleSpinBox.setSuffix( _translate("QgsComposerLabelWidgetBase", " mm", None)) self.mLeftRadioButton.setText( _translate("QgsComposerLabelWidgetBase", "Left", None)) self.mCenterRadioButton.setText( _translate("QgsComposerLabelWidgetBase", "Center", None)) self.mRightRadioButton.setText( _translate("QgsComposerLabelWidgetBase", "Right", None)) self.mHorizontalAlignementLabel.setText( _translate("QgsComposerLabelWidgetBase", "Horizontal alignment", None)) self.mVerticalAlignementLabel.setText( _translate("QgsComposerLabelWidgetBase", "Vertical alignment", None)) self.mFontButton.setText( _translate("QgsComposerLabelWidgetBase", "Font...", None)) self.mMarginXLabel.setText( _translate("QgsComposerLabelWidgetBase", "Horizontal margin", None)) self.mMarginYDoubleSpinBox.setSuffix( _translate("QgsComposerLabelWidgetBase", " mm", None)) self.mMarginYLabel.setText( _translate("QgsComposerLabelWidgetBase", "Vertical margin", None))
class DistanceWidget(QWidget): """ Widget used to manually edit the selection radius""" distanceChanged = pyqtSignal(float) distanceEditingFinished = pyqtSignal(Qt.KeyboardModifiers) distanceEditingCanceled = pyqtSignal() def __init__(self, label, parent=None): super().__init__(parent) layout = QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.setAlignment(Qt.AlignLeft) if label: self.label = QLabel(label, self) self.label.setAlignment(Qt.AlignRight | Qt.AlignCenter) layout.addWidget(self.label) self.spinbox = QgsDoubleSpinBox(self) self.spinbox.setSingleStep(1) self.spinbox.setValue(0) self.spinbox.setMinimum(0) self.spinbox.setMaximum(1000000000) self.spinbox.setDecimals(6) self.spinbox.setShowClearButton(False) self.spinbox.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred) layout.addWidget(self.spinbox) # connect signals self.spinbox.installEventFilter(self) self.spinbox.valueChanged.connect(self.distanceChanged.emit) # config focus self.setFocusProxy(self.spinbox) def set_distance(self, distance): """ set the selection radius """ self.spinbox.setValue(distance) self.spinbox.selectAll() def distance(self): """ return he selection radius """ return self.spinbox.value() def eventFilter(self, obj, event): """ Intercept key press event to emit our own custom signals """ # pylint: disable=invalid-name if obj is self.spinbox and event.type() == QEvent.KeyPress: if event.key() == Qt.Key_Escape: self.distanceEditingCanceled.emit() return True if event.key() in (Qt.Key_Enter, Qt.Key_Return): # Emit the editing finished signal with modifier to handle remove # from selection and add to selection self.distanceEditingFinished.emit(event.modifiers()) return True return False
class Serval(object): LINE_SELECTION = "line" POLYGON_SELECTION = "polygon" RGB = "RGB" SINGLE_BAND = "Single band" def __init__(self, iface): self.iface = iface self.canvas = self.iface.mapCanvas() self.plugin_dir = os.path.dirname(__file__) self.uc = UserCommunication(iface, 'Serval') self.load_settings() self.raster = None self.handler = None self.spin_boxes = None self.exp_dlg = None self.exp_builder = None self.block_pts_layer = None self.px, self.py = [0, 0] self.last_point = QgsPointXY(0, 0) self.rbounds = None self.changes = dict() # dict with rasters changes {raster_id: RasterChanges instance} self.project = QgsProject.instance() self.crs_transform = None self.all_touched = None self.selection_mode = None self.spatial_index_time = dict() # {layer_id: creation time} self.spatial_index = dict() # {layer_id: spatial index} self.selection_layers_count = 1 self.debug = DEBUG self.logger = get_logger() if self.debug else None self.menu = u'Serval' self.actions = [] self.actions_always_on = [] self.toolbar = self.iface.addToolBar(u'Serval Main Toolbar') self.toolbar.setObjectName(u'Serval Main Toolbar') self.toolbar.setToolTip(u'Serval Main Toolbar') self.sel_toolbar = self.iface.addToolBar(u'Serval Selection Toolbar') self.sel_toolbar.setObjectName(u'Serval Selection Toolbar') self.sel_toolbar.setToolTip(u'Serval Selection Toolbar') # Map tools self.probe_tool = QgsMapToolEmitPoint(self.canvas) self.probe_tool.setObjectName('ServalProbeTool') self.probe_tool.setCursor(QCursor(QPixmap(icon_path('probe_tool.svg')), hotX=2, hotY=22)) self.probe_tool.canvasClicked.connect(self.point_clicked) self.draw_tool = QgsMapToolEmitPoint(self.canvas) self.draw_tool.setObjectName('ServalDrawTool') self.draw_tool.setCursor(QCursor(QPixmap(icon_path('draw_tool.svg')), hotX=2, hotY=22)) self.draw_tool.canvasClicked.connect(self.point_clicked) self.selection_tool = RasterCellSelectionMapTool(self.iface, self.uc, self.raster, debug=self.debug) self.selection_tool.setObjectName('RasterSelectionTool') self.map_tool_btn = dict() # {map tool: button activating the tool} self.iface.currentLayerChanged.connect(self.set_active_raster) self.project.layersAdded.connect(self.set_active_raster) self.canvas.mapToolSet.connect(self.check_active_tool) self.register_exp_functions() def load_settings(self): """Return plugin settings dict - default values are overriden by user prefered values from QSettings.""" self.default_settings = { "undo_steps": {"value": 3, "vtype": int}, } self.settings = dict() s = QSettings() s.beginGroup("serval") for k, v in self.default_settings.items(): user_val = s.value(k, v["value"], v["vtype"]) self.settings[k] = user_val def edit_settings(self): """Open dialog with plugin settings.""" s = QSettings() s.beginGroup("serval") k = "undo_steps" cur_val = self.settings[k] val_type = self.default_settings[k]["vtype"] cur_steps = s.value(k, cur_val, val_type) label = 'Nr of Undo/Redo steps:' steps, ok = QInputDialog.getInt(None, "Serval Settings", label, cur_steps) if not ok: return if steps >= 0: s.setValue("undo_steps", steps) self.load_settings() self.uc.show_info("Some new settings may require QGIS restart.") def initGui(self): _ = self.add_action( 'serval_icon.svg', text=u'Show Serval Toolbars', add_to_menu=True, callback=self.show_toolbar, always_on=True, ) _ = self.add_action( 'serval_icon.svg', text=u'Hide Serval Toolbars', add_to_menu=True, callback=self.hide_toolbar, always_on=True, ) self.probe_btn = self.add_action( 'probe.svg', text="Probe raster", callback=self.activate_probing, add_to_toolbar=self.toolbar, checkable=True, ) self.map_tool_btn[self.probe_tool] = self.probe_btn self.color_btn = QgsColorButton() self.color_btn.setColor(Qt.gray) self.color_btn.setMinimumSize(QSize(40, 24)) self.color_btn.setMaximumSize(QSize(40, 24)) self.toolbar.addWidget(self.color_btn) self.color_picker_connection(connect=True) self.color_btn.setDisabled(True) self.toolbar.addWidget(QLabel("Band:")) self.bands_cbo = QComboBox() self.bands_cbo.addItem("1", 1) self.toolbar.addWidget(self.bands_cbo) self.bands_cbo.currentIndexChanged.connect(self.update_active_bands) self.bands_cbo.setDisabled(True) self.spin_boxes = BandBoxes() self.toolbar.addWidget(self.spin_boxes) self.spin_boxes.enter_hit.connect(self.apply_spin_box_values) self.draw_btn = self.add_action( 'draw.svg', text="Apply Value(s) To Single Cell", callback=self.activate_drawing, add_to_toolbar=self.toolbar, checkable=True, ) self.map_tool_btn[self.draw_tool] = self.draw_btn self.apply_spin_box_values_btn = self.add_action( 'apply_const_value.svg', text="Apply Value(s) to Selection", callback=self.apply_spin_box_values, add_to_toolbar=self.toolbar, ) self.gom_btn = self.add_action( 'apply_nodata_value.svg', text="Apply NoData to Selection", callback=self.apply_nodata_value, add_to_toolbar=self.toolbar, ) self.exp_dlg_btn = self.add_action( 'apply_expression_value.svg', text="Apply Expression Value To Selection", callback=self.define_expression, add_to_toolbar=self.toolbar, checkable=False, ) self.low_pass_filter_btn = self.add_action( 'apply_low_pass_filter.svg', text="Apply Low-Pass 3x3 Filter To Selection", callback=self.apply_low_pass_filter, add_to_toolbar=self.toolbar, checkable=False, ) self.undo_btn = self.add_action( 'undo.svg', text="Undo", callback=self.undo, add_to_toolbar=self.toolbar, ) self.redo_btn = self.add_action( 'redo.svg', text="Redo", callback=self.redo, add_to_toolbar=self.toolbar, ) self.set_nodata_btn = self.add_action( 'set_nodata.svg', text="Edit Raster NoData Values", callback=self.set_nodata, add_to_toolbar=self.toolbar, ) self.settings_btn = self.add_action( 'edit_settings.svg', text="Serval Settings", callback=self.edit_settings, add_to_toolbar=self.toolbar, always_on=True, ) self.show_help = self.add_action( 'help.svg', text="Help", add_to_menu=True, callback=self.show_website, add_to_toolbar=self.toolbar, always_on=True, ) # Selection Toolbar line_width_icon = QIcon(icon_path("line_width.svg")) line_width_lab = QLabel() line_width_lab.setPixmap(line_width_icon.pixmap(22, 12)) self.sel_toolbar.addWidget(line_width_lab) self.line_width_sbox = QgsDoubleSpinBox() self.line_width_sbox.setMinimumSize(QSize(50, 24)) self.line_width_sbox.setMaximumSize(QSize(50, 24)) # self.line_width_sbox.setButtonSymbols(QAbstractSpinBox.NoButtons) self.line_width_sbox.setValue(1) self.line_width_sbox.setMinimum(0.01) self.line_width_sbox.setShowClearButton(False) self.line_width_sbox.setToolTip("Selection Line Width") self.line_width_sbox.valueChanged.connect(self.update_selection_tool) self.width_unit_cbo = QComboBox() self.width_units = ("map units", "pixel width", "pixel height", "hairline",) for u in self.width_units: self.width_unit_cbo.addItem(u) self.width_unit_cbo.setToolTip("Selection Line Width Unit") self.sel_toolbar.addWidget(self.line_width_sbox) self.sel_toolbar.addWidget(self.width_unit_cbo) self.width_unit_cbo.currentIndexChanged.connect(self.update_selection_tool) self.line_select_btn = self.add_action( 'select_line.svg', text="Select Raster Cells by Line", callback=self.activate_line_selection, add_to_toolbar=self.sel_toolbar, checkable=True, ) self.polygon_select_btn = self.add_action( 'select_polygon.svg', text="Select Raster Cells by Polygon", callback=self.activate_polygon_selection, add_to_toolbar=self.sel_toolbar, checkable=True, ) self.selection_from_layer_btn = self.add_action( 'select_from_layer.svg', text="Create Selection From Layer", callback=self.selection_from_layer, add_to_toolbar=self.sel_toolbar, ) self.selection_to_layer_btn = self.add_action( 'selection_to_layer.svg', text="Create Memory Layer From Selection", callback=self.selection_to_layer, add_to_toolbar=self.sel_toolbar, ) self.clear_selection_btn = self.add_action( 'clear_selection.svg', text="Clear selection", callback=self.clear_selection, add_to_toolbar=self.sel_toolbar, ) self.toggle_all_touched_btn = self.add_action( 'all_touched.svg', text="Toggle All Touched Get Selected", callback=self.toggle_all_touched, checkable=True, checked=True, add_to_toolbar=self.sel_toolbar, ) self.all_touched = True self.enable_toolbar_actions(enable=False) self.check_undo_redo_btns() def add_action(self, icon_name, callback=None, text="", enabled_flag=True, add_to_menu=False, add_to_toolbar=None, status_tip=None, whats_this=None, checkable=False, checked=False, always_on=False): icon = QIcon(icon_path(icon_name)) action = QAction(icon, text, self.iface.mainWindow()) action.triggered.connect(callback) action.setEnabled(enabled_flag) action.setCheckable(checkable) action.setChecked(checked) if status_tip is not None: action.setStatusTip(status_tip) if whats_this is not None: action.setWhatsThis(whats_this) if add_to_toolbar is not None: add_to_toolbar.addAction(action) if add_to_menu: self.iface.addPluginToMenu(self.menu, action) self.actions.append(action) if always_on: self.actions_always_on.append(action) return action def unload(self): self.changes = None if self.selection_tool: self.selection_tool.reset() if self.spin_boxes is not None: self.spin_boxes.remove_spinboxes() for action in self.actions: self.iface.removePluginMenu('Serval', action) self.iface.removeToolBarIcon(action) del self.toolbar del self.sel_toolbar self.iface.actionPan().trigger() self.unregister_exp_functions() def show_toolbar(self): if self.toolbar: self.toolbar.show() self.sel_toolbar.show() def hide_toolbar(self): if self.toolbar: self.toolbar.hide() self.sel_toolbar.hide() @staticmethod def register_exp_functions(): QgsExpression.registerFunction(nearest_feature_attr_value) QgsExpression.registerFunction(nearest_pt_on_line_interpolate_z) QgsExpression.registerFunction(intersecting_features_attr_average) QgsExpression.registerFunction(interpolate_from_mesh) @staticmethod def unregister_exp_functions(): QgsExpression.unregisterFunction('nearest_feature_attr_value') QgsExpression.unregisterFunction('nearest_pt_on_line_interpolate_z') QgsExpression.unregisterFunction('intersecting_features_attr_average') QgsExpression.unregisterFunction('interpolate_from_mesh') def uncheck_all_btns(self): self.probe_btn.setChecked(False) self.draw_btn.setChecked(False) self.gom_btn.setChecked(False) self.line_select_btn.setChecked(False) self.polygon_select_btn.setChecked(False) def check_active_tool(self, cur_tool): self.uncheck_all_btns() if cur_tool in self.map_tool_btn: self.map_tool_btn[cur_tool].setChecked(True) if cur_tool == self.selection_tool: if self.selection_mode == self.LINE_SELECTION: self.line_select_btn.setChecked(True) else: self.polygon_select_btn.setChecked(True) def activate_probing(self): self.mode = 'probe' self.canvas.setMapTool(self.probe_tool) def define_expression(self): if not self.selection_tool.selected_geometries: self.uc.bar_warn("No selection for raster layer. Select some cells and retry...") return self.handler.select(self.selection_tool.selected_geometries, all_touched_cells=self.all_touched) self.handler.create_cell_pts_layer() if self.handler.cell_pts_layer.featureCount() == 0: self.uc.bar_warn("No selection for raster layer. Select some cells and retry...") return self.exp_dlg = QgsExpressionBuilderDialog(self.handler.cell_pts_layer) self.exp_builder = self.exp_dlg.expressionBuilder() self.exp_dlg.accepted.connect(self.apply_exp_value) self.exp_dlg.show() def apply_exp_value(self): if not self.exp_dlg.expressionText() or not self.exp_builder.isExpressionValid(): return QApplication.setOverrideCursor(Qt.WaitCursor) exp = self.exp_dlg.expressionText() idx = self.handler.cell_pts_layer.addExpressionField(exp, QgsField('exp_val', QVariant.Double)) self.handler.exp_field_idx = idx self.handler.write_block() QApplication.restoreOverrideCursor() self.raster.triggerRepaint() def activate_drawing(self): self.mode = 'draw' self.canvas.setMapTool(self.draw_tool) def get_cur_line_width(self): width_coef = { "map units": 1., "pixel width": self.raster.rasterUnitsPerPixelX(), "pixel height": self.raster.rasterUnitsPerPixelY(), "hairline": 0.000001, } return self.line_width_sbox.value() * width_coef[self.width_unit_cbo.currentText()] def set_selection_tool(self, mode): if self.raster is None: self.uc.bar_warn("Select a raster layer") return self.selection_mode = mode self.selection_tool.init_tool(self.raster, mode=self.selection_mode, line_width=self.get_cur_line_width()) self.selection_tool.set_prev_tool(self.canvas.mapTool()) self.canvas.setMapTool(self.selection_tool) def activate_line_selection(self): self.set_selection_tool(self.LINE_SELECTION) def activate_polygon_selection(self): self.set_selection_tool(self.POLYGON_SELECTION) def update_selection_tool(self): """Reactivate the selection tool with updated line width and units.""" if self.selection_mode == self.LINE_SELECTION: self.activate_line_selection() elif self.selection_mode == self.POLYGON_SELECTION: self.activate_polygon_selection() else: pass def apply_values(self, new_values): QApplication.setOverrideCursor(Qt.WaitCursor) self.handler.select(self.selection_tool.selected_geometries, all_touched_cells=self.all_touched) self.handler.write_block(new_values) QApplication.restoreOverrideCursor() self.raster.triggerRepaint() def apply_values_single_cell(self, new_vals): """Create single cell selection and apply the new values.""" cp = self.last_point if self.logger: self.logger.debug(f"Changing single cell for pt {cp}") col, row = self.handler.point_to_index([cp.x(), cp.y()]) px, py = self.handler.index_to_point(row, col, upper_left=False) d = 0.001 bbox = QgsRectangle(px - d, py - d, px + d, py + d) if self.logger: self.logger.debug(f"Changing single cell in {bbox}") QApplication.setOverrideCursor(Qt.WaitCursor) self.handler.select([QgsGeometry.fromRect(bbox)], all_touched_cells=False, transform=False) self.handler.write_block(new_vals) QApplication.restoreOverrideCursor() self.raster.triggerRepaint() def apply_spin_box_values(self): if not self.selection_tool.selected_geometries: return self.apply_values(self.spin_boxes.get_values()) def apply_nodata_value(self): if not self.selection_tool.selected_geometries: return self.apply_values(self.handler.nodata_values) def apply_low_pass_filter(self): QApplication.setOverrideCursor(Qt.WaitCursor) self.handler.select(self.selection_tool.selected_geometries, all_touched_cells=self.all_touched) self.handler.write_block(low_pass_filter=True) QApplication.restoreOverrideCursor() self.raster.triggerRepaint() def clear_selection(self): if self.selection_tool: self.selection_tool.clear_all_selections() def selection_from_layer(self): """Create a new selection from layer.""" self.selection_tool.init_tool(self.raster, mode=self.POLYGON_SELECTION, line_width=self.get_cur_line_width()) dlg = LayerSelectDialog() if not dlg.exec_(): return cur_layer = dlg.cbo.currentLayer() if not cur_layer.type() == QgsMapLayerType.VectorLayer: return self.selection_tool.selection_from_layer(cur_layer) def selection_to_layer(self): """Create a memory layer from current selection""" geoms = self.selection_tool.selected_geometries if geoms is None or not self.raster: return crs_str = self.raster.crs().toProj() nr = self.selection_layers_count self.selection_layers_count += 1 mlayer = QgsVectorLayer(f"Polygon?crs={crs_str}&field=fid:int", f"Raster selection {nr}", "memory") fields = mlayer.dataProvider().fields() features = [] for i, geom in enumerate(geoms): feat = QgsFeature(fields) feat["fid"] = i + 1 feat.setGeometry(geom) features.append(feat) mlayer.dataProvider().addFeatures(features) self.project.addMapLayer(mlayer) def toggle_all_touched(self): """Toggle selection mode.""" # button is toggled automatically when clicked, just update the attribute self.all_touched = self.toggle_all_touched_btn.isChecked() def point_clicked(self, point=None, button=None): if self.raster is None: self.uc.bar_warn("Choose a raster to work with...", dur=3) return if self.logger: self.logger.debug(f"Clicked point in canvas CRS: {point if point else self.last_point}") if point is None: ptxy_in_src_crs = self.last_point else: if self.crs_transform: if self.logger: self.logger.debug(f"Transforming clicked point {point}") try: ptxy_in_src_crs = self.crs_transform.transform(point) except QgsCsException as err: self.uc.show_warn( "Point coordinates transformation failed! Check the raster projection:\n\n{}".format(repr(err))) return else: ptxy_in_src_crs = QgsPointXY(point.x(), point.y()) if self.logger: self.logger.debug(f"Clicked point in raster CRS: {ptxy_in_src_crs}") self.last_point = ptxy_in_src_crs ident_vals = self.handler.provider.identify(ptxy_in_src_crs, QgsRaster.IdentifyFormatValue).results() cur_vals = list(ident_vals.values()) # check if the point is within active raster extent if not self.rbounds[0] <= ptxy_in_src_crs.x() <= self.rbounds[2]: self.uc.bar_info("Out of x bounds", dur=3) return if not self.rbounds[1] <= ptxy_in_src_crs.y() <= self.rbounds[3]: self.uc.bar_info("Out of y bounds", dur=3) return if self.mode == 'draw': new_vals = self.spin_boxes.get_values() if self.logger: self.logger.debug(f"Applying const value {new_vals}") self.apply_values_single_cell(new_vals) else: self.spin_boxes.set_values(cur_vals) if 2 < self.handler.bands_nr < 5: self.color_picker_connection(connect=False) self.color_btn.setColor(QColor(*self.spin_boxes.get_values()[:4])) self.color_picker_connection(connect=True) def set_values_from_picker(self, c): """Set bands spinboxes values after color change in the color picker""" values = None if self.handler.bands_nr > 2: values = [c.red(), c.green(), c.blue()] if self.handler.bands_nr == 4: values.append(c.alpha()) if values: self.spin_boxes.set_values(values) def set_nodata(self): """Set NoData value(s) for each band of current raster.""" if not self.raster: self.uc.bar_warn('Select a raster layer to define/change NoData value!') return if self.handler.provider.userNoDataValues(1): note = '\nNote: there is a user defined NODATA value.\nCheck the raster properties (Transparency).' else: note = '' dt = self.handler.provider.dataType(1) # current NODATA value if self.handler.provider.sourceHasNoDataValue(1): cur_nodata = self.handler.provider.sourceNoDataValue(1) if dt < 6: cur_nodata = '{0:d}'.format(int(float(cur_nodata))) else: cur_nodata = '' label = 'Define/change raster NODATA value.\n\n' label += 'Raster src_data type: {}.{}'.format(dtypes[dt]['name'], note) nd, ok = QInputDialog.getText(None, "Define NODATA Value", label, QLineEdit.Normal, str(cur_nodata)) if not ok: return if not is_number(nd): self.uc.show_warn('Wrong NODATA value!') return new_nodata = int(nd) if dt < 6 else float(nd) # set the NODATA value for each band res = [] for nr in self.handler.bands_range: res.append(self.handler.provider.setNoDataValue(nr, new_nodata)) self.handler.provider.sourceHasNoDataValue(nr) if False in res: self.uc.show_warn('Setting new NODATA value failed!') else: self.uc.bar_info('Successful setting new NODATA values!', dur=2) self.set_active_raster() self.raster.triggerRepaint() def check_undo_redo_btns(self): """Enable/Disable undo and redo buttons based on availability of undo/redo for current raster.""" self.undo_btn.setDisabled(True) self.redo_btn.setDisabled(True) if self.raster is None or self.raster.id() not in self.changes: return changes = self.changes[self.raster.id()] if changes.nr_undos() > 0: self.undo_btn.setEnabled(True) if changes.nr_redos() > 0: self.redo_btn.setEnabled(True) def enable_toolbar_actions(self, enable=True): """Enable / disable all toolbar actions but Help (for vectors and unsupported rasters)""" for widget in self.actions + [self.width_unit_cbo, self.line_width_sbox]: widget.setEnabled(enable) if widget in self.actions_always_on: widget.setEnabled(True) self.spin_boxes.enable(enable) @staticmethod def check_layer(layer): """Check if we can work with the raster""" if layer is None: return False if layer.type() != QgsMapLayerType.RasterLayer: return False if layer.providerType() != 'gdal': return False if all([ layer.isValid(), layer.crs() is not None, check_gdal_driver_create_option(layer), # GDAL driver has CREATE option os.path.isfile(layer.dataProvider().dataSourceUri()), # is it a local file? ]): return True else: return False def set_bands_cbo(self): self.bands_cbo.currentIndexChanged.disconnect(self.update_active_bands) self.bands_cbo.clear() for band in self.handler.bands_range: self.bands_cbo.addItem(f"{band}", [band]) if self.handler.bands_nr > 1: self.bands_cbo.addItem(self.RGB, [1, 2, 3]) self.bands_cbo.setCurrentIndex(0) self.bands_cbo.currentIndexChanged.connect(self.update_active_bands) def update_active_bands(self, idx): bands = self.bands_cbo.currentData() self.handler.active_bands = bands self.spin_boxes.create_spinboxes(bands, self.handler.data_types, self.handler.nodata_values) self.color_btn.setEnabled(len(bands) > 1) self.exp_dlg_btn.setEnabled(len(bands) == 1) def set_active_raster(self): """Active layer has changed - check if it is a raster layer and prepare it for the plugin""" old_spin_boxes_values = self.spin_boxes.get_values() self.crs_transform = None layer = self.iface.activeLayer() if self.check_layer(layer): self.raster = layer self.crs_transform = None if self.project.crs() == self.raster.crs() else \ QgsCoordinateTransform(self.project.crs(), self.raster.crs(), self.project) self.handler = RasterHandler(self.raster, self.uc, self.debug) supported, unsupported_type = self.handler.write_supported() if supported: self.enable_toolbar_actions() self.set_bands_cbo() self.spin_boxes.create_spinboxes(self.handler.active_bands, self.handler.data_types, self.handler.nodata_values) if self.handler.bands_nr == len(old_spin_boxes_values): self.spin_boxes.set_values(old_spin_boxes_values) self.bands_cbo.setEnabled(self.handler.bands_nr > 1) self.color_btn.setEnabled(len(self.handler.active_bands) > 1) self.rbounds = self.raster.extent().toRectF().getCoords() self.handler.raster_changed.connect(self.add_to_undo) if self.raster.id() not in self.changes: self.changes[self.raster.id()] = RasterChanges(nr_to_keep=self.settings["undo_steps"]) else: msg = f"The raster has unsupported src_data type: {unsupported_type}" msg += "\nServal can't work with it, sorry..." self.uc.show_warn(msg) self.enable_toolbar_actions(enable=False) self.reset_raster() else: # unsupported raster self.enable_toolbar_actions(enable=False) self.reset_raster() self.check_undo_redo_btns() def add_to_undo(self, change): """Add the old and new blocks to undo stack.""" self.changes[self.raster.id()].add_change(change) self.check_undo_redo_btns() if self.logger: self.logger.debug(self.get_undo_redo_values()) def get_undo_redo_values(self): changes = self.changes[self.raster.id()] return f"nr undos: {changes.nr_undos()}, redos: {changes.nr_redos()}" def undo(self): undo_data = self.changes[self.raster.id()].undo() self.handler.write_block_undo(undo_data) self.raster.triggerRepaint() self.check_undo_redo_btns() def redo(self): redo_data = self.changes[self.raster.id()].redo() self.handler.write_block_undo(redo_data) self.raster.triggerRepaint() self.check_undo_redo_btns() def reset_raster(self): self.raster = None self.color_btn.setDisabled(True) def color_picker_connection(self, connect=True): if connect: self.color_btn.colorChanged.connect(self.set_values_from_picker) else: self.color_btn.colorChanged.disconnect(self.set_values_from_picker) @staticmethod def show_website(): QDesktopServices.openUrl(QUrl("https://github.com/lutraconsulting/serval/blob/master/Serval/docs/user_manual.md")) def recreate_spatial_index(self, layer): """Check if spatial index exists for the layer and if it is relatively old and eventually recreate it.""" ctime = self.spatial_index_time[layer.id()] if layer.id() in self.spatial_index_time else None if ctime is None or datetime.now() - ctime > timedelta(seconds=30): self.spatial_index = QgsSpatialIndex(layer.getFeatures(), None, QgsSpatialIndex.FlagStoreFeatureGeometries) self.spatial_index_time[layer.id()] = datetime.now() def get_nearest_feature(self, pt_feat, vlayer_id): """Given the point feature, return nearest feature from vlayer.""" vlayer = self.project.mapLayer(vlayer_id) self.recreate_spatial_index(vlayer) ptxy = pt_feat.geometry().asPoint() near_fid = self.spatial_index.nearestNeighbor(ptxy)[0] return vlayer.getFeature(near_fid) def nearest_feature_attr_value(self, pt_feat, vlayer_id, attr_name): """Find nearest feature to pt_feat and return its attr_name attribute value.""" near_feat = self.get_nearest_feature(pt_feat, vlayer_id) return near_feat[attr_name] def nearest_pt_on_line_interpolate_z(self, pt_feat, vlayer_id): """Find nearest line feature to pt_feat and interpolate z value from vertices.""" near_feat = self.get_nearest_feature(pt_feat, vlayer_id) near_geom = near_feat.geometry() closest_pt_dist = near_geom.lineLocatePoint(pt_feat.geometry()) closest_pt = near_geom.interpolate(closest_pt_dist) return closest_pt.get().z() def intersecting_features_attr_average(self, pt_feat, vlayer_id, attr_name, only_center): """ Find all features intersecting current feature (cell center, or raster cell polygon) and calculate average value of their attr_name attribute. """ vlayer = self.project.mapLayer(vlayer_id) self.recreate_spatial_index(vlayer) ptxy = pt_feat.geometry().asPoint() pt_x, pt_y = ptxy.x(), ptxy.y() dxy = 0.001 half_pix_x = self.handler.pixel_size_x / 2. half_pix_y = self.handler.pixel_size_y / 2. if only_center: cell = QgsRectangle(pt_x, pt_y, pt_x + dxy, pt_y + dxy) else: cell = QgsRectangle(pt_x - half_pix_x, pt_y - half_pix_y, pt_x + half_pix_x, pt_y + half_pix_y) inter_fids = self.spatial_index.intersects(cell) values = [] for fid in inter_fids: feat = vlayer.getFeature(fid) if not feat.geometry().intersects(cell): continue val = feat[attr_name] if not is_number(val): continue values.append(val) if len(values) == 0: return None return sum(values) / float(len(values)) def interpolate_from_mesh(self, pt_feat, mesh_layer_id, group, dataset, above_existing): """Interpolate from mesh.""" mesh_layer = self.project.mapLayer(mesh_layer_id) ptxy = pt_feat.geometry().asPoint() dataset_val = mesh_layer.datasetValue(QgsMeshDatasetIndex(group, dataset), ptxy) val = dataset_val.scalar() if math.isnan(val): return val if above_existing: ident_vals = self.handler.provider.identify(ptxy, QgsRaster.IdentifyFormatValue).results() org_val = list(ident_vals.values())[0] if org_val == self.handler.nodata_values[0]: return val return max(org_val, val) else: return val