mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-23 00:02:38 -05:00
136 lines
4.9 KiB
Python
136 lines
4.9 KiB
Python
"""Plugin dependencies selection dialog
|
|
|
|
.. note:: 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.
|
|
|
|
"""
|
|
|
|
__author__ = "elpaso@itopen.it"
|
|
__date__ = "2018-09-19"
|
|
__copyright__ = "Copyright 2018, GISCE-TI S.L."
|
|
|
|
import os
|
|
|
|
from pathlib import Path
|
|
|
|
from qgis.PyQt import uic
|
|
from qgis.PyQt import QtWidgets, QtCore
|
|
from qgis.utils import iface
|
|
|
|
Ui_QgsPluginDependenciesDialogBase, _ = uic.loadUiType(
|
|
Path(__file__).parent / "qgsplugindependenciesdialogbase.ui"
|
|
)
|
|
|
|
|
|
class QgsPluginDependenciesDialog(
|
|
QtWidgets.QDialog, Ui_QgsPluginDependenciesDialogBase
|
|
):
|
|
"""A dialog that shows plugin dependencies and offers a way to install or upgrade the
|
|
dependencies.
|
|
"""
|
|
|
|
def __init__(self, plugin_name, to_install, to_upgrade, not_found, parent=None):
|
|
"""Creates the dependencies dialog
|
|
|
|
:param plugin_name: the name of the parent plugin
|
|
:type plugin_name: str
|
|
:param to_install: dict of plugins that need to be installed, keyed by plugin name
|
|
:type to_install: dict
|
|
:param to_upgrade: dict of plugins that need to be upgraded, keyed by plugin name
|
|
:type to_upgrade: dict
|
|
:param not_found: dict of plugins that were not found (unavailable), keyed by plugin name
|
|
:type not_found: dict
|
|
:param parent: parent object, defaults to None
|
|
:param parent: QWidget, optional
|
|
"""
|
|
|
|
super().__init__(parent)
|
|
self.setupUi(self)
|
|
self.setWindowTitle(self.tr("Plugin Dependencies Manager"))
|
|
self.mPluginDependenciesLabel.setText(
|
|
self.tr("Plugin dependencies for <b>%s</b>") % plugin_name
|
|
)
|
|
self.setStyleSheet("QTableView { padding: 20px;}")
|
|
# Name, Version Installed, Version Required, Version Available, Action Checkbox
|
|
self.pluginList.setColumnCount(5)
|
|
self.pluginList.setHorizontalHeaderLabels(
|
|
[
|
|
self.tr("Name"),
|
|
self.tr("Installed"),
|
|
self.tr("Required"),
|
|
self.tr("Available"),
|
|
self.tr("Action"),
|
|
]
|
|
)
|
|
self.pluginList.setRowCount(len(not_found) + len(to_install) + len(to_upgrade))
|
|
self.__actions = {}
|
|
|
|
def _display(txt):
|
|
if txt is None:
|
|
return ""
|
|
return txt
|
|
|
|
def _make_row(data, i, name):
|
|
widget = QtWidgets.QLabel("<b>%s</b>" % name)
|
|
widget.p_id = data["id"]
|
|
widget.action = data["action"]
|
|
widget.use_stable_version = data["use_stable_version"]
|
|
self.pluginList.setCellWidget(i, 0, widget)
|
|
self.pluginList.resizeColumnToContents(0)
|
|
widget = QtWidgets.QTableWidgetItem(_display(data["version_installed"]))
|
|
widget.setTextAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
|
|
self.pluginList.setItem(i, 1, widget)
|
|
widget = QtWidgets.QTableWidgetItem(_display(data["version_required"]))
|
|
widget.setTextAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
|
|
self.pluginList.setItem(i, 2, widget)
|
|
widget = QtWidgets.QTableWidgetItem(_display(data["version_available"]))
|
|
widget.setTextAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
|
|
self.pluginList.setItem(i, 3, widget)
|
|
|
|
i = 0
|
|
for name, data in to_install.items():
|
|
_make_row(data, i, name)
|
|
widget = QtWidgets.QCheckBox(self.tr("Install"))
|
|
widget.setChecked(True)
|
|
self.pluginList.setCellWidget(i, 4, widget)
|
|
i += 1
|
|
|
|
for name, data in to_upgrade.items():
|
|
_make_row(data, i, name)
|
|
widget = QtWidgets.QCheckBox(self.tr("Upgrade"))
|
|
widget.setChecked(True)
|
|
self.pluginList.setCellWidget(i, 4, widget)
|
|
i += 1
|
|
|
|
for name, data in not_found.items():
|
|
_make_row(data, i, name)
|
|
widget = QtWidgets.QLabel(self.tr("Fix manually"))
|
|
self.pluginList.setCellWidget(i, 4, widget)
|
|
i += 1
|
|
|
|
def actions(self):
|
|
"""Returns the list of actions
|
|
|
|
:return: dict of actions
|
|
:rtype: dict
|
|
"""
|
|
|
|
return self.__actions
|
|
|
|
def accept(self):
|
|
self.__actions = {}
|
|
for i in range(self.pluginList.rowCount()):
|
|
try:
|
|
if self.pluginList.cellWidget(i, 4).isChecked():
|
|
self.__actions[self.pluginList.cellWidget(i, 0).p_id] = {
|
|
"action": self.pluginList.cellWidget(i, 0).action,
|
|
"use_stable_version": self.pluginList.cellWidget(
|
|
i, 0
|
|
).use_stable_version,
|
|
}
|
|
except:
|
|
pass
|
|
super().accept()
|