mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-27 00:33:48 -05:00
211 lines
7.3 KiB
Python
211 lines
7.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
***************************************************************************
|
|
widgetPluginBase.py
|
|
---------------------
|
|
Date : June 2010
|
|
Copyright : (C) 2010 by Giuseppe Sucameli
|
|
Email : brush dot tyler at gmail dot com
|
|
***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************
|
|
"""
|
|
from builtins import object
|
|
|
|
__author__ = 'Giuseppe Sucameli'
|
|
__date__ = 'June 2010'
|
|
__copyright__ = '(C) 2010, Giuseppe Sucameli'
|
|
# This will get replaced with a git SHA1 when you do a git archive
|
|
__revision__ = '$Format:%H$'
|
|
|
|
from qgis.PyQt.QtCore import QFileInfo
|
|
from qgis.PyQt.QtWidgets import QWidget, QMessageBox, QAbstractButton, QGroupBox
|
|
|
|
from .dialogBase import GdalToolsBaseDialog as BaseDialog
|
|
from . import GdalTools_utils as Utils
|
|
|
|
|
|
class GdalToolsBasePluginWidget(object):
|
|
|
|
def __init__(self, iface, commandName):
|
|
self.iface = iface
|
|
self.initialized = False
|
|
self.base = BaseDialog(iface.mainWindow(), iface, self, self.windowTitle(), commandName)
|
|
|
|
self.base.processError.connect(self.onError)
|
|
self.base.processFinished.connect(self.onFinished)
|
|
|
|
self.base.okClicked.connect(self.onRun)
|
|
self.base.closeClicked.connect(self.onClosing)
|
|
self.base.helpClicked.connect(self.onHelp)
|
|
|
|
self.base.finished.connect(self.finished)
|
|
self.base.refreshArgs.connect(self.someValueChanged)
|
|
|
|
def someValueChanged(self):
|
|
if self.initialized:
|
|
self.base.valuesChanged.emit(self.getArguments())
|
|
|
|
def onLayersChanged(self):
|
|
pass
|
|
|
|
def initialize(self):
|
|
if not self.initialized:
|
|
Utils.LayerRegistry.instance().layersChanged.connect(self.onLayersChanged)
|
|
self.onLayersChanged()
|
|
self.initialized = True
|
|
self.someValueChanged()
|
|
|
|
def exec_(self):
|
|
self.initialize()
|
|
return self.base.exec_()
|
|
|
|
def show_(self):
|
|
self.initialize()
|
|
return self.base.show()
|
|
|
|
def setCommandViewerEnabled(self, enable):
|
|
self.base.setCommandViewerEnabled(enable)
|
|
self.someValueChanged()
|
|
|
|
def onRun(self):
|
|
self.base.onRun()
|
|
|
|
def onClosing(self):
|
|
Utils.LayerRegistry.instance().layersChanged.disconnect(self.onLayersChanged)
|
|
self.base.onClosing()
|
|
self.initialized = False
|
|
|
|
def onHelp(self):
|
|
self.base.onHelp()
|
|
|
|
def onFinished(self, exitCode, status):
|
|
self.base.onFinished(exitCode, status)
|
|
|
|
def onError(self, error):
|
|
self.base.onError(error)
|
|
|
|
def getArguments(self):
|
|
pass
|
|
|
|
def getInputFileName(self):
|
|
pass
|
|
|
|
def getOutputFileName(self):
|
|
pass
|
|
|
|
def addLayerIntoCanvas(self, fileInfo):
|
|
pass
|
|
|
|
def finished(self, load):
|
|
outFn = self.getOutputFileName()
|
|
if outFn is None:
|
|
return
|
|
|
|
if outFn == '':
|
|
QMessageBox.warning(self, self.tr("Warning"), self.tr("No output file created."))
|
|
return
|
|
|
|
fileInfo = QFileInfo(outFn)
|
|
if fileInfo.exists():
|
|
if load:
|
|
self.addLayerIntoCanvas(fileInfo)
|
|
QMessageBox.information(self, self.tr("Finished"), self.tr("Processing completed."))
|
|
else:
|
|
#QMessageBox.warning(self, self.tr( "Warning" ), self.tr( "%1 not created." ).arg( outFn ) )
|
|
QMessageBox.warning(self, self.tr("Warning"), self.tr("%s not created.") % outFn)
|
|
|
|
# This method is useful to set up options for the command. It sets for each passed widget:
|
|
# 1. its passed signals to connect to the BasePluginWidget.someValueChanged() slot,
|
|
# 2. its enabler checkbox or enabled status,
|
|
# 3. its status as visible (hide) if the installed gdal version is greater or equal (lesser) then the passed version
|
|
#
|
|
# wdgts_sgnls_chk_ver_list: list of wdgts_sgnls_chk_ver
|
|
# wdgts_sgnls_chk_ver: tuple containing widgets, signals, enabler checkbox or enabled status, required version
|
|
def setParamsStatus(self, wdgts_sgnls_chk_ver_list):
|
|
if isinstance(wdgts_sgnls_chk_ver_list, list):
|
|
for wdgts_sgnls_chk_ver in wdgts_sgnls_chk_ver_list:
|
|
self.setParamsStatus(wdgts_sgnls_chk_ver)
|
|
return
|
|
|
|
wdgts_sgnls_chk_ver = wdgts_sgnls_chk_ver_list
|
|
if not isinstance(wdgts_sgnls_chk_ver, tuple):
|
|
return
|
|
|
|
if len(wdgts_sgnls_chk_ver) > 0:
|
|
wdgts = wdgts_sgnls_chk_ver[0]
|
|
else:
|
|
wdgts = None
|
|
|
|
if len(wdgts_sgnls_chk_ver) > 1:
|
|
sgnls = wdgts_sgnls_chk_ver[1]
|
|
else:
|
|
sgnls = None
|
|
|
|
if len(wdgts_sgnls_chk_ver) > 2:
|
|
chk = wdgts_sgnls_chk_ver[2]
|
|
else:
|
|
chk = None
|
|
|
|
if len(wdgts_sgnls_chk_ver) > 3:
|
|
ver = wdgts_sgnls_chk_ver[3]
|
|
else:
|
|
ver = None
|
|
|
|
if isinstance(wdgts, list):
|
|
for wdgt in wdgts:
|
|
self.setParamsStatus((wdgt, sgnls, chk, ver))
|
|
return
|
|
|
|
wdgt = wdgts
|
|
if not isinstance(wdgt, QWidget):
|
|
return
|
|
|
|
# if check version fails, disable the widget then hide both it and its enabler checkbox
|
|
# new check for gdal 1.10, must update all widgets for this and then remove previous check
|
|
if ver is not None and isinstance(ver, int):
|
|
gdalVerNum = Utils.GdalConfig.versionNum()
|
|
if ver > gdalVerNum:
|
|
wdgt.setVisible(False)
|
|
if isinstance(chk, QWidget):
|
|
chk.setVisible(False)
|
|
chk.setChecked(False)
|
|
sgnls = None
|
|
chk = False
|
|
|
|
elif ver is not None:
|
|
if not isinstance(ver, Utils.Version):
|
|
ver = Utils.Version(ver)
|
|
gdalVer = Utils.GdalConfig.version()
|
|
if ver < Utils.Version("0") or (gdalVer is not None and ver > gdalVer):
|
|
wdgt.setVisible(False)
|
|
if isinstance(chk, QWidget):
|
|
chk.setVisible(False)
|
|
chk.setChecked(False)
|
|
sgnls = None
|
|
chk = False
|
|
|
|
# connects the passed signals to the BasePluginWidget.someValueChanged slot
|
|
if isinstance(sgnls, list):
|
|
for sgnl in sgnls:
|
|
self.setParamsStatus((wdgt, sgnl, chk))
|
|
return
|
|
|
|
sgnl = sgnls
|
|
if sgnl is not None:
|
|
getattr(wdgt, sgnl).connect(self.someValueChanged)
|
|
|
|
# set the passed checkbox as widget enabler
|
|
if isinstance(chk, bool):
|
|
wdgt.setEnabled(chk)
|
|
if (isinstance(chk, QAbstractButton) or isinstance(chk, QGroupBox)) and chk.isCheckable():
|
|
wdgt.setEnabled(chk.isChecked())
|
|
chk.toggled.connect(wdgt.setEnabled)
|
|
chk.toggled.connect(self.someValueChanged)
|