def __init__(self, iface, parent=None): super(PreVesperDialog, self).__init__(iface.mainWindow()) # Set up the user interface from Designer. self.setupUi(self) # The qgis interface self.iface = iface self.DISP_TEMP_LAYERS = read_setting( PLUGIN_NAME + '/DISP_TEMP_LAYERS', bool) self.DEBUG = config.get_debug_mode() # Catch and redirect python errors directed at the log messages python # error tab. QgsMessageLog.instance().messageReceived.connect(errorCatcher) if not os.path.exists(TEMPDIR): os.mkdir(TEMPDIR) # Setup for validation messagebar on gui----------------------------- self.setWindowIcon(QtGui.QIcon( ':/plugins/pat/icons/icon_vesperKriging.svg')) self.validationLayout = QtGui.QFormLayout(self) # source: https://nathanw.net/2013/08/02/death-to-the-message-box-use-the-qgis-messagebar/ # Add the error messages to top of form via a message bar. # leave this message bar for bailouts self.messageBar = QgsMessageBar(self) if isinstance(self.layout(), (QtGui.QFormLayout, QtGui.QGridLayout)): # create a validation layout so multiple messages can be added and # cleaned up. self.layout().insertRow(0, self.validationLayout) self.layout().insertRow(0, self.messageBar) else: # for use with Vertical/horizontal layout box self.layout().insertWidget(0, self.messageBar) # Set Class default variables ------------------------------------- self.vesp_dict = None self.in_qgscrs = None self.dfCSV = None # this is a validation flag self.OverwriteCtrlFile = False self.cboMethod.addItems( ['High Density Kriging', 'Low Density Kriging (Advanced)']) # To allow only integers for the min number of pts. self.onlyInt = QIntValidator() self.lneMinPoint.setValidator(self.onlyInt) self.vesper_exe = check_vesper_dependency() if self.vesper_exe is None or self.vesper_exe == '': self.gbRunVesper.setTitle( 'WARNING:Vesper not found please configure using the about dialog.') self.gbRunVesper.setChecked(False) self.gbRunVesper.setCheckable(False) self.gbRunVesper.setEnabled(False)
def run_settings(self): """Run method for the about dialog""" dlgSettings = SettingsDialog() if dlgSettings.exec_(): self.vesper_exe = dlgSettings.vesper_exe self.DEBUG = config.get_debug_mode() dlgSettings.deleteLater()
def __init__(self, iface, parent=None): super(tTestAnalysisDialog, self).__init__(parent) # Set up the user interface from Designer. self.setupUi(self) self.iface = iface self.DISP_TEMP_LAYERS = read_setting(PLUGIN_NAME + '/DISP_TEMP_LAYERS', bool) self.DEBUG = config.get_debug_mode() # Catch and redirect python errors directed at the log messages python error tab. QgsApplication.messageLog().messageReceived.connect(errorCatcher) if not os.path.exists(TEMPDIR): os.mkdir(TEMPDIR) # Setup for validation messagebar on gui----------------------------- self.messageBar = QgsMessageBar( self) # leave this message bar for bailouts self.validationLayout = QtWidgets.QFormLayout( self) # new layout to gui self.raster_filter_message = self.lblLayerFilter.text() self.pixel_size = ['0', 'm', ''] self.layer_table = build_layer_table() if isinstance(self.layout(), (QtWidgets.QFormLayout, QtWidgets.QGridLayout)): # create a validation layout so multiple messages can be added and cleaned up. self.layout().insertRow(0, self.validationLayout) self.layout().insertRow(0, self.messageBar) else: # for use with Vertical/horizontal layout box self.layout().insertWidget(0, self.messageBar) for cbo in [ self.mcboRasterLayer, self.mcboCtrlRasterLayer, self.mcboZoneRasterLyr ]: cbo.setFilters(QgsMapLayerProxyModel.RasterLayer) cbo.setExcludedProviders(['wms']) cbo.setAllowEmptyLayer(True) cbo.setCurrentIndex(0) self.mcboPointsLayer.setFilters(QgsMapLayerProxyModel.PointLayer) self.mcboPointsLayer.setExcludedProviders(['wms']) self.mcboPointsLayer.setAllowEmptyLayer(True) self.mcboPointsLayer.setCurrentIndex(0) self.setMapLayers() self.updateUseSelected() # GUI Runtime Customisation ----------------------------------------------- self.setWindowIcon(QtGui.QIcon(':/plugins/pat/icons/icon_t-test.svg'))
def __init__(self, iface, parent=None): super(GridExtractDialog, self).__init__(parent) # Set up the user interface from Designer. self.setupUi(self) self.iface = iface self.DISP_TEMP_LAYERS = read_setting(PLUGIN_NAME + '/DISP_TEMP_LAYERS', bool) self.DEBUG = config.get_debug_mode() # Catch and redirect python errors directed at the log messages python error tab. QgsMessageLog.instance().messageReceived.connect(errorCatcher) if not os.path.exists(TEMPDIR): os.mkdir(TEMPDIR) # Setup for validation messagebar on gui----------------------------- self.messageBar = QgsMessageBar( self) # leave this message bar for bailouts self.validationLayout = QtGui.QFormLayout(self) # new layout to gui if isinstance(self.layout(), QtGui.QFormLayout): # create a validation layout so multiple messages can be added and cleaned up. self.layout().insertRow(0, self.validationLayout) self.layout().insertRow(0, self.messageBar) else: self.layout().insertWidget( 0, self.messageBar) # for use with Vertical/horizontal layout box # GUI Runtime Customisation ----------------------------------------------- self.setWindowIcon( QtGui.QIcon(':/plugins/pat/icons/icon_gridExtract.svg')) self.chkgrpStatistics.setExclusive(False) self.tabList.setColumnCount(2) self.tabList.setHorizontalHeaderItem(0, QTableWidgetItem("ID")) self.tabList.setHorizontalHeaderItem(1, QTableWidgetItem("0 Raster(s)")) self.tabList.horizontalHeader().setResizeMode( QtGui.QHeaderView.Stretch) self.tabList.hideColumn(0) # don't need to display the unique layer ID self.pixel_size = 0 self.lblPixelFilter.setText( 'Only process rasters with one pixel size. Adding the first raster layer will set this pixel size' ) self.statsMapping = { 'mean': np.nanmean, 'minimum': np.nanmin, 'maximum': np.nanmax, 'standard deviation': np.nanstd, 'coefficient of variation': raster_ops.nancv, 'pixel count': raster_ops.pixelcount, }
def __init__(self, iface, parent=None): super(KMeansClusterDialog, self).__init__(parent) # Set up the user interface from Designer. self.setupUi(self) self.iface = iface self.DISP_TEMP_LAYERS = read_setting(PLUGIN_NAME + '/DISP_TEMP_LAYERS', bool) self.DEBUG = config.get_debug_mode() self.layers_df = None self.pixel_size = ['0', '', ''] # Catch and redirect python errors directed at the log messages python error tab. QgsApplication.messageLog().messageReceived.connect(errorCatcher) if not os.path.exists(TEMPDIR): os.mkdir(TEMPDIR) # Setup for validation messagebar on gui----------------------------- self.messageBar = QgsMessageBar( self) # leave this message bar for bailouts self.validationLayout = QtWidgets.QFormLayout( self) # new layout to gui if isinstance(self.layout(), QtWidgets.QFormLayout): # create a validation layout so multiple messages can be added and cleaned up. self.layout().insertRow(0, self.validationLayout) self.layout().insertRow(0, self.messageBar) else: self.layout().insertWidget( 0, self.messageBar) # for use with Vertical/horizontal layout box # GUI Runtime Customisation ----------------------------------------------- self.mcboRasterLayer.setFilters(QgsMapLayerProxyModel.RasterLayer) self.mcboRasterLayer.setExcludedProviders(['wms']) # self.setMapLayers() self.setWindowIcon( QtGui.QIcon(':/plugins/pat/icons/icon_kMeansCluster.svg')) self.tabList.setColumnCount(2) self.tabList.setHorizontalHeaderItem(0, QTableWidgetItem("ID")) self.tabList.setHorizontalHeaderItem(1, QTableWidgetItem("0 Raster(s)")) self.tabList.horizontalHeader().setSectionResizeMode( QtWidgets.QHeaderView.Stretch) self.tabList.hideColumn(0) # don't need to display the unique layer ID
def __init__(self, iface, parent=None): super(PointTrailToPolygonDialog, self).__init__(parent) # Set up the user interface from Designer. self.setupUi(self) # The qgis interface self.iface = iface # The qgis interface self.DISP_TEMP_LAYERS = read_setting(PLUGIN_NAME + '/DISP_TEMP_LAYERS', bool) self.DEBUG = config.get_debug_mode() self.source_file = None if not os.path.exists(TEMPDIR): os.mkdir(TEMPDIR) # Catch and redirect python errors directed at the log messages python error tab. QgsApplication.messageLog().messageReceived.connect(errorCatcher) # Setup for validation messagebar on gui----------------------------- ''' source: https://nathanw.net/2013/08/02/death-to-the-message-box-use-the-qgis-messagebar/ Add the error messages to top of form via a message bar. ''' self.messageBar = QgsMessageBar(self) # leave this message bar for bailouts self.validationLayout = QtWidgets.QFormLayout(self) if isinstance(self.layout(), QtWidgets.QFormLayout): # create a validation layout so multiple messages can be added and cleaned up. self.layout().insertRow(0, self.validationLayout) self.layout().insertRow(0, self.messageBar) else: self.layout().insertWidget(0, self.messageBar) # for use with Vertical/horizontal layout box # #save default values so they can be easily reset when a new file is selected. self.default_vals = {} for name, obj in inspect.getmembers(self): if isinstance(obj, QSpinBox): self.default_vals[obj.objectName()] = obj.value() self.stackedWidget.setCurrentIndex(0) self.stackedWidget.currentChanged.connect(self.update_prev_next_buttons) self.button_box.button(QDialogButtonBox.Ok).setVisible(False) self.mcboTargetLayer.setFilters(QgsMapLayerProxyModel.PointLayer) if hasattr(self.mcboTargetLayer, "setAllowEmptyLayer"): self.mcboTargetLayer.setAllowEmptyLayer(True) self.mcboTargetLayer.setShowCrs(True) self.mcboTargetLayer.setLayer(None) # set default to empty layer
def __init__(self, iface, parent=None): super(CalculateImageIndicesDialog, self).__init__(parent) # Set up the user interface from Designer. self.setupUi(self) self.iface = iface self.DISP_TEMP_LAYERS = read_setting(PLUGIN_NAME + '/DISP_TEMP_LAYERS', bool) self.DEBUG = config.get_debug_mode() # Catch and redirect python errors directed at the log messages python error tab. QgsApplication.messageLog().messageReceived.connect(errorCatcher) if not os.path.exists(TEMPDIR): os.mkdir(TEMPDIR) # Setup for validation messagebar on gui----------------------------- self.messageBar = QgsMessageBar(self) # leave this message bar for bailouts self.validationLayout = QtWidgets.QFormLayout(self) # new layout to gui if isinstance(self.layout(), (QtWidgets.QFormLayout, QtWidgets.QGridLayout)): # create a validation layout so multiple messages can be added and cleaned up. self.layout().insertRow(0, self.validationLayout) self.layout().insertRow(0, self.messageBar) else: self.layout().insertWidget(0, self.messageBar) # for use with Vertical/horizontal layout box self.band_mapping = BandMapping() # GUI Runtime Customisation ----------------------------------------------- self.mcboPolygonLayer.setFilters(QgsMapLayerProxyModel.PolygonLayer) self.mcboPolygonLayer.setExcludedProviders(['wms']) self.mcboPolygonLayer.setLayer(None) self.mcboRasterLayer.setFilters(QgsMapLayerProxyModel.RasterLayer) self.mcboRasterLayer.setExcludedProviders(['wms']) rastlyrs_df = build_layer_table([self.mcboRasterLayer.layer(i) for i in range(self.mcboRasterLayer.count())]) if self.mcboRasterLayer.count() > 0: exc_lyrs = rastlyrs_df[rastlyrs_df['bandcount']<=1] self.mcboRasterLayer.setExceptedLayerList(exc_lyrs['layer'].tolist()) self.updateRaster() # self.chkAddToDisplay.setChecked(False) # self.chkAddToDisplay.hide() self.chkgrpIndices.setExclusive(False) # allow for multi selection self.setWindowIcon(QtGui.QIcon(':/plugins/pat/icons/icon_calcImgIndices.svg'))
def __init__(self, iface, parent=None): super(CalculateImageIndicesDialog, self).__init__(parent) # Set up the user interface from Designer. self.setupUi(self) self.iface = iface self.DISP_TEMP_LAYERS = read_setting(PLUGIN_NAME + '/DISP_TEMP_LAYERS', bool) self.DEBUG = config.get_debug_mode() # Catch and redirect python errors directed at the log messages python error tab. QgsMessageLog.instance().messageReceived.connect(errorCatcher) if not os.path.exists(TEMPDIR): os.mkdir(TEMPDIR) # Setup for validation messagebar on gui----------------------------- self.messageBar = QgsMessageBar( self) # leave this message bar for bailouts self.validationLayout = QtGui.QFormLayout(self) # new layout to gui if isinstance(self.layout(), (QtGui.QFormLayout, QtGui.QGridLayout)): # create a validation layout so multiple messages can be added and cleaned up. self.layout().insertRow(0, self.validationLayout) self.layout().insertRow(0, self.messageBar) else: self.layout().insertWidget( 0, self.messageBar) # for use with Vertical/horizontal layout box self.band_mapping = BandMapping() self.outQgsCRS = None self.chkgrpIndices.setExclusive(False) # allow for multi selection self.exclude_map_layers() self.updateRaster() self.updateUseSelected() self.autoSetCoordinateSystem() # GUI Runtime Customisation ----------------------------------------------- self.chkAddToDisplay.setChecked(False) # self.chkAddToDisplay.hide() self.add_blank_field_to_cbo() self.setWindowIcon( QtGui.QIcon(':/plugins/pat/icons/icon_calcImgIndices.svg'))
def __init__(self, iface, parent=None): super(StripTrialPointsDialog, self).__init__(parent) # Set up the user interface from Designer. self.setupUi(self) self.iface = iface self.DISP_TEMP_LAYERS = read_setting(PLUGIN_NAME + '/DISP_TEMP_LAYERS', bool) self.DEBUG = config.get_debug_mode() # Catch and redirect python errors directed at the log messages python error tab. QgsApplication.messageLog().messageReceived.connect(errorCatcher) if not os.path.exists(TEMPDIR): os.mkdir(TEMPDIR) # Setup for validation messagebar on gui----------------------------- self.messageBar = QgsMessageBar( self) # leave this message bar for bailouts self.validationLayout = QtWidgets.QFormLayout( self) # new layout to gui if isinstance(self.layout(), (QtWidgets.QFormLayout, QtWidgets.QGridLayout)): # create a validation layout so multiple messages can be added and cleaned up. self.layout().insertRow(0, self.validationLayout) self.layout().insertRow(0, self.messageBar) else: self.layout().insertWidget( 0, self.messageBar) # for use with Vertical/horizontal layout box # GUI Runtime Customisation ----------------------------------------------- self.mcboLineLayer.setFilters(QgsMapLayerProxyModel.LineLayer) self.mcboLineLayer.setExcludedProviders(['wms']) if self.mcboLineLayer.count() > 0: self.mcboLineLayer.setCurrentIndex(0) self.setWindowIcon( QtGui.QIcon(':/plugins/pat/icons/icon_stripTrialPoints.svg')) self.chkUseSelected.setChecked(False) self.chkUseSelected.hide()
def __init__(self, iface, parent=None): super(ResampleImageToBlockDialog, self).__init__(parent) # Set up the user interface from Designer. self.setupUi(self) self.iface = iface self.DISP_TEMP_LAYERS = read_setting(PLUGIN_NAME + '/DISP_TEMP_LAYERS', bool) self.DEBUG = config.get_debug_mode() # Catch and redirect python errors directed at the log messages python error tab. QgsApplication.messageLog().messageReceived.connect(errorCatcher) if not os.path.exists(TEMPDIR): os.mkdir(TEMPDIR) # Setup for validation messagebar on gui----------------------------- self.messageBar = QgsMessageBar(self) # leave this message bar for bailouts self.validationLayout = QtWidgets.QFormLayout(self) # new layout to gui if isinstance(self.layout(), (QtWidgets.QFormLayout, QtWidgets.QGridLayout)): # create a validation layout so multiple messages can be added and cleaned up. self.layout().insertRow(0, self.validationLayout) self.layout().insertRow(0, self.messageBar) else: self.layout().insertWidget(0, self.messageBar) # for use with Vertical/horizontal layout box # GUI Runtime Customisation ----------------------------------------------- self.mcboPolygonLayer.setFilters(QgsMapLayerProxyModel.PolygonLayer) self.mcboPolygonLayer.setExcludedProviders(['wms']) self.mcboPolygonLayer.setLayer(None) self.mcboRasterLayer.setFilters(QgsMapLayerProxyModel.RasterLayer) self.mcboRasterLayer.setExcludedProviders(['wms']) self.updateRaster() #https://stackoverflow.com/questions/13422995/set-qlineedit-to-accept-only-numbers #https://stackoverflow.com/questions/12643009/regular-expression-for-floating-point-numbers regex_validator = QtGui.QRegExpValidator(QtCore.QRegExp("[-+]?([0-9]*[.])?[0-9]+([eE][-+]?\d+)?")) self.lneNoDataVal.setValidator(regex_validator) self.setWindowIcon(QtGui.QIcon(':/plugins/pat/icons/icon_resampleToBlock.svg'))
def __init__(self, iface, parent=None): super(PostVesperDialog, self).__init__(iface.mainWindow()) # Set up the user interface from Designer. self.setupUi(self) # The qgis interface self.iface = iface self.DISP_TEMP_LAYERS = read_setting(PLUGIN_NAME + '/DISP_TEMP_LAYERS', bool) self.DEBUG = config.get_debug_mode() # Catch and redirect python errors directed at the log messages python error tab. QgsApplication.messageLog().messageReceived.connect(errorCatcher) if not os.path.exists(TEMPDIR): os.mkdir(TEMPDIR) # Setup for validation messagebar on gui----------------------------- self.setWindowIcon(QtGui.QIcon(':/plugins/pat/icons/icon_importVesperKriging.svg')) self.validationLayout = QtWidgets.QFormLayout(self) # source: https://nathanw.net/2013/08/02/death-to-the-message-box-use-the-qgis-messagebar/ # Add the error messages to top of form via a message bar. self.messageBar = QgsMessageBar(self) # leave this message bar for bailouts if isinstance(self.layout(), (QtWidgets.QFormLayout, QtWidgets.QGridLayout)): # create a validation layout so multiple messages can be added and cleaned up. self.layout().insertRow(0, self.validationLayout) self.layout().insertRow(0, self.messageBar) else: self.layout().insertWidget(0, self.messageBar) # for use with Vertical/horizontal layout box # Set Class default variables ------------------------------------- self.vesper_qgscrs = None self.vesp_dict = None self.dfCSV = None self.chkRunVesper.hide()
# -*- coding: utf-8 -*-
def on_chkDebug_stateChanged(self, state): if config.get_debug_mode() != self.chkDebug.isChecked(): write_setting(PLUGIN_NAME + '/DEBUG', self.chkDebug.isChecked()) config.set_debug_mode( self.chkDebug.isChecked())
def __init__(self, iface, parent=None): super(PersistorDialog, self).__init__(parent) # Set up the user interface from Designer. self.setupUi(self) self.iface = iface self.DISP_TEMP_LAYERS = read_setting(PLUGIN_NAME + '/DISP_TEMP_LAYERS', bool) self.DEBUG = config.get_debug_mode() self.pixel_size = 0 # Catch and redirect python errors directed at the log messages python # error tab. QgsMessageLog.instance().messageReceived.connect(errorCatcher) if not os.path.exists(TEMPDIR): os.mkdir(TEMPDIR) # Setup for validation messagebar on gui----------------------------- # leave this message bar for bailouts self.messageBar = QgsMessageBar(self) self.validationLayout = QtGui.QFormLayout(self) # new layout to gui if isinstance(self.layout(), QtGui.QFormLayout): # create a validation layout so multiple messages can be added and # cleaned up. self.layout().insertRow(0, self.validationLayout) self.layout().insertRow(0, self.messageBar) else: # for use with Vertical/horizontal layout box self.layout().insertWidget(0, self.messageBar) # GUI Runtime Customisation ------------------------------------------- self.setWindowIcon( QtGui.QIcon(':/plugins/pat/icons/icon_persistor.svg')) self.cboMethod.addItems( ['Target Probability', 'Target Over All Years']) self.cboMethod.setCurrentIndex(1) for ea_cbo in [ self.cboAllYearTargetPerc, self.cboUpperPerc, self.cboLowerPerc ]: ea_cbo.addItems(['{}%'.format(ea) for ea in range(50, -55, -5)]) ea_cbo.setCurrentIndex( ea_cbo.findText('10%', QtCore.Qt.MatchFixedString)) self.cboLowerPerc.setCurrentIndex( self.cboLowerPerc.findText('-10%', QtCore.Qt.MatchFixedString)) for ea_tab in [self.tabUpper, self.tabLower]: ea_tab.setColumnCount(2) ea_tab.hideColumn(0) # don't need to display the unique layer ID ea_tab.setHorizontalHeaderItem(0, QTableWidgetItem("ID")) ea_tab.setHorizontalHeaderItem(1, QTableWidgetItem("0 Raster(s)")) ea_tab.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch) ea_tab.hideColumn(0) # don't need to display the unique layer ID self.lblPixelFilter.setText( 'Only process rasters with one pixel size. ' 'Adding the first raster layer will set this pixel size')
def __init__(self, iface): """Constructor. Args: iface (QgsInterface): An interface instance that will be passed to this class which provides the hook by which you can manipulate the QGIS application at run time. """ # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = os.path.dirname(__file__) # initialize locale locale = QSettings().value('locale/userLocale')[0:2] locale_path = os.path.join(self.plugin_dir, 'i18n', 'pat_plugin_{}.qm'.format(locale)) if os.path.exists(locale_path): self.translator = QTranslator() self.translator.load(locale_path) if qVersion() > '4.3.3': QCoreApplication.installTranslator(self.translator) self.actions = [] # Look for the existing menu self.menuPrecAg = self.iface.mainWindow().findChild(QMenu, 'm{}Menu'.format(PLUGIN_SHORT)) # If the menu does not exist, create it! if not self.menuPrecAg: self.menuPrecAg = QMenu('{}'.format(PLUGIN_SHORT), self.iface.mainWindow().menuBar()) self.menuPrecAg.setObjectName('m{}Menu'.format(PLUGIN_SHORT)) actions = self.iface.mainWindow().menuBar().actions() lastAction = actions[-1] self.iface.mainWindow().menuBar().insertMenu(lastAction, self.menuPrecAg) # create a toolbar self.toolbar = self.iface.addToolBar(u'{} Toolbar'.format(PLUGIN_SHORT)) self.toolbar.setObjectName(u'm{}ToolBar'.format(PLUGIN_SHORT)) # Load Defaults settings for First time... for eaKey in ['BASE_IN_FOLDER', 'BASE_OUT_FOLDER']: sFolder = read_setting(PLUGIN_NAME + '/' + eaKey) if sFolder is None or not os.path.exists(sFolder): sFolder = os.path.join(os.path.expanduser('~'), PLUGIN_NAME) if not os.path.exists(sFolder): os.mkdir(sFolder) write_setting(PLUGIN_NAME + '/' + eaKey, os.path.join(os.path.expanduser('~'), PLUGIN_NAME)) self.DEBUG = config.get_debug_mode() self.vesper_queue = [] self.vesper_queue_showing = False self.processVesper = None self.vesper_exe = check_vesper_dependency(iface) if not os.path.exists(TEMPDIR): os.mkdir(TEMPDIR)