created an interable subclass of non-iterable qtreewidgetiterator
This commit is contained in:
@@ -20,6 +20,7 @@ except ImportError:
|
|||||||
raise #require win32api and win32file on windows
|
raise #require win32api and win32file on windows
|
||||||
|
|
||||||
from validators.location_validator import Location_Validator
|
from validators.location_validator import Location_Validator
|
||||||
|
from .menu_iterator import MenuIterator
|
||||||
|
|
||||||
class InstallerWizard(QtWidgets.QWizard):
|
class InstallerWizard(QtWidgets.QWizard):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
@@ -162,14 +163,15 @@ class InstallerWizard(QtWidgets.QWizard):
|
|||||||
placement = [level.capitalize().strip() for level in info["category"].split(".") if level] + [name]
|
placement = [level.capitalize().strip() for level in info["category"].split(".") if level] + [name]
|
||||||
|
|
||||||
root = self.selection_menu.invisibleRootItem()
|
root = self.selection_menu.invisibleRootItem()
|
||||||
children = [root.child(i) for i in range(root.childCount())]
|
#children = [root.child(i) for i in range(root.childCount())]
|
||||||
|
children = list(MenuIterator(root, QtWidgets.QTreeWidgetItemIterator.All))
|
||||||
while placement:
|
while placement:
|
||||||
current_level = placement.pop()
|
current_level = placement.pop()
|
||||||
|
|
||||||
if current_level in [child.text(0) for child in children]:
|
if current_level in [child.text(0) for child in children]:
|
||||||
root = list(filter(lambda child: child.text(0) == current_level, children)).pop()
|
root = list(filter(lambda child: child.text(0) == current_level, children)).pop()
|
||||||
else:
|
else:
|
||||||
new_item = QtWidgets.QTreeWidgetItem(root)
|
new_item = QtWidgets.QTreeWidgetItem(root, QtWidgets.QTreeWidgetItem.Type)
|
||||||
new_item.setText(0, current_level)
|
new_item.setText(0, current_level)
|
||||||
new_item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsUserCheckable|QtCore.Qt.ItemIsEnabled)
|
new_item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsUserCheckable|QtCore.Qt.ItemIsEnabled)
|
||||||
new_item.setCheckState(0, QtCore.Qt.Unchecked)
|
new_item.setCheckState(0, QtCore.Qt.Unchecked)
|
||||||
@@ -187,7 +189,6 @@ class InstallerWizard(QtWidgets.QWizard):
|
|||||||
new_item.setCheckState(0, QtCore.Qt.Checked)
|
new_item.setCheckState(0, QtCore.Qt.Checked)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
info["widget"] = new_item
|
|
||||||
else:
|
else:
|
||||||
new_item.setFlags(new_item.flags()|QtCore.Qt.ItemIsAutoTristate)
|
new_item.setFlags(new_item.flags()|QtCore.Qt.ItemIsAutoTristate)
|
||||||
|
|
||||||
@@ -223,7 +224,7 @@ class InstallerWizard(QtWidgets.QWizard):
|
|||||||
"""
|
"""
|
||||||
if not icon_url:
|
if not icon_url:
|
||||||
icon_url = QtCore.QUrl(f"http://www.google.com/s2/favicons?domain={QtCore.QUrl(tree_item.data(1, QtCore.Qt.ToolTipRole)).toString()}")
|
icon_url = QtCore.QUrl(f"http://www.google.com/s2/favicons?domain={QtCore.QUrl(tree_item.data(1, QtCore.Qt.ToolTipRole)).toString()}")
|
||||||
icon_request = self._network_manager.get(QtNetwork.QNetworkRequest(icon_url))
|
icon_request = self._network_manager.get(QtNetwork.QNetworkRequest(QtCore.QUrl(icon_url)))
|
||||||
#when download is complete, validates request returned without error and sets icon
|
#when download is complete, validates request returned without error and sets icon
|
||||||
icon_request.finished.connect(lambda: self._set_icon(tree_item, icon_request))
|
icon_request.finished.connect(lambda: self._set_icon(tree_item, icon_request))
|
||||||
|
|
||||||
@@ -239,3 +240,12 @@ class InstallerWizard(QtWidgets.QWizard):
|
|||||||
pixmap.loadFromData(request.readAll())
|
pixmap.loadFromData(request.readAll())
|
||||||
tree_item.setIcon(0, QtGui.QIcon(pixmap))
|
tree_item.setIcon(0, QtGui.QIcon(pixmap))
|
||||||
|
|
||||||
|
def _get_selections(self):
|
||||||
|
"""Returns a subset of the supported tools whose corresponding item was selected by the user.
|
||||||
|
"""
|
||||||
|
selected_iterator = MenuIterator(self.selection_menu, QtWidgets.QTreeWidgetItemIterator.Checked|QtWidgets.QTreeWidgetItemIterator.NoChildren)
|
||||||
|
try:
|
||||||
|
selected_tools = {item.text(0):self.__tools__[item.text(0)] for item in selected_iterator}
|
||||||
|
except KeyError as e:
|
||||||
|
self._display_error(f"Unknown tool selected.", e)
|
||||||
|
return selected_tools
|
||||||
|
|||||||
17
portable_computing_toolkit_installer/ui/menu_iterator.py
Normal file
17
portable_computing_toolkit_installer/ui/menu_iterator.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
from PyQt5 import QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class MenuIterator(QtWidgets.QTreeWidgetItemIterator):
|
||||||
|
def __init__(self, *args):
|
||||||
|
super().__init__(*args)
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __next__(self):
|
||||||
|
value = self.value()
|
||||||
|
if not value:
|
||||||
|
raise StopIteration
|
||||||
|
else:
|
||||||
|
self += 1
|
||||||
|
return value
|
||||||
Reference in New Issue
Block a user