dependencies properly enforced
This commit is contained in:
@@ -282,15 +282,34 @@ class InstallerWizard(QtWidgets.QWizard):
|
|||||||
|
|
||||||
@QtCore.pyqtSlot("QTreeWidgetItem*","int")
|
@QtCore.pyqtSlot("QTreeWidgetItem*","int")
|
||||||
def _enforce_dependencies(self, item, column):
|
def _enforce_dependencies(self, item, column):
|
||||||
#if item is checked, look for dependent items and check them too
|
if column: #ignore everything not in column 0 (the names)
|
||||||
if item.checkState(0) == QtCore.Qt.Checked:
|
return
|
||||||
|
elif item.childCount(): #recurse through child items til no children
|
||||||
|
for child in [item.child(i) for i in range(item.childCount())]:
|
||||||
|
self._enforce_dependencies(child, column)
|
||||||
|
else:
|
||||||
|
#if item is checked, look for dependent items and check them too
|
||||||
tools_by_name = {tool["name"]:tool for tool in self.__tools__}
|
tools_by_name = {tool["name"]:tool for tool in self.__tools__}
|
||||||
try:
|
if item.checkState(0) == QtCore.Qt.Checked:
|
||||||
dependencies = tools_by_name[item.text(0)]["depends on"].split(",")
|
try:
|
||||||
except KeyError:
|
dependencies = tools_by_name[item.text(0)]["depends on"].split(",")
|
||||||
pass
|
except KeyError:
|
||||||
else:
|
pass
|
||||||
for dependency in dependencies:
|
else:
|
||||||
for dependant_item in self.selection_menu.findItems(dependency, QtCore.Qt.MatchFixedString|QtCore.Qt.MatchCaseSensitive|QtCore.Qt.MatchRecursive):
|
for dependency in dependencies:
|
||||||
dependant_item.setCheckState(0, QtCore.Qt.Checked)
|
for dependant_item in self.selection_menu.findItems(dependency, QtCore.Qt.MatchFixedString|QtCore.Qt.MatchCaseSensitive|QtCore.Qt.MatchRecursive):
|
||||||
|
dependant_item.setCheckState(0, QtCore.Qt.Checked)
|
||||||
|
else: #item was unchecked
|
||||||
|
#find all checked items and build a set of their dependencies
|
||||||
|
selected = self._get_selections()
|
||||||
|
dependencies_of_selected = set()
|
||||||
|
for selected_item in selected:
|
||||||
|
try:
|
||||||
|
dependencies_of_selected |= set((tools_by_name[selected_item.text(0)]["depends on"]).split(","))
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
#if the item that was just unchecked is a dependency of another selected item
|
||||||
|
if item.text(0) in dependencies_of_selected:
|
||||||
|
self._display_error(f"Selected items depend on {item.text(0)}")
|
||||||
|
item.setCheckState(0, QtCore.Qt.Checked)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user