QGIS/python/plugins/GdalTools/tools/widgetPluginBase.py
Juergen E. Fischer 31df84aa6b run 2to3 on source
2016-09-21 23:30:04 +02:00

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)