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
|
||||
|
||||
from validators.location_validator import Location_Validator
|
||||
from .menu_iterator import MenuIterator
|
||||
|
||||
class InstallerWizard(QtWidgets.QWizard):
|
||||
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]
|
||||
|
||||
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:
|
||||
current_level = placement.pop()
|
||||
|
||||
if current_level in [child.text(0) for child in children]:
|
||||
root = list(filter(lambda child: child.text(0) == current_level, children)).pop()
|
||||
else:
|
||||
new_item = QtWidgets.QTreeWidgetItem(root)
|
||||
new_item = QtWidgets.QTreeWidgetItem(root, QtWidgets.QTreeWidgetItem.Type)
|
||||
new_item.setText(0, current_level)
|
||||
new_item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsUserCheckable|QtCore.Qt.ItemIsEnabled)
|
||||
new_item.setCheckState(0, QtCore.Qt.Unchecked)
|
||||
@@ -187,7 +189,6 @@ class InstallerWizard(QtWidgets.QWizard):
|
||||
new_item.setCheckState(0, QtCore.Qt.Checked)
|
||||
except KeyError:
|
||||
pass
|
||||
info["widget"] = new_item
|
||||
else:
|
||||
new_item.setFlags(new_item.flags()|QtCore.Qt.ItemIsAutoTristate)
|
||||
|
||||
@@ -223,7 +224,7 @@ class InstallerWizard(QtWidgets.QWizard):
|
||||
"""
|
||||
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_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
|
||||
icon_request.finished.connect(lambda: self._set_icon(tree_item, icon_request))
|
||||
|
||||
@@ -239,3 +240,12 @@ class InstallerWizard(QtWidgets.QWizard):
|
||||
pixmap.loadFromData(request.readAll())
|
||||
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