getting menu to display properly in-progress

This commit is contained in:
Brennen Raimer
2019-04-27 19:43:28 -04:00
parent 9a3987ff55
commit 9d7a092f38

View File

@@ -7,7 +7,6 @@ import zipfile
from pathlib import Path from pathlib import Path
from queue import Queue from queue import Queue
import json import json
from operator import itemgetter
import psutil import psutil
from PyQt5 import QtCore, QtGui, QtNetwork, QtWebEngineWidgets, QtWidgets from PyQt5 import QtCore, QtGui, QtNetwork, QtWebEngineWidgets, QtWidgets
@@ -159,30 +158,31 @@ class InstallerWizard(QtWidgets.QWizard):
def _populate_menu(self): def _populate_menu(self):
"""Populates the selection menu with items loaded from supported_tools.json """Populates the selection menu with items loaded from supported_tools.json
""" """
for name, info in self.__tools__.items(): for tool in sorted(self.__tools__, key = lambda x: x["category"] + f".{x['name']}"):
placement = [level.capitalize().strip() for level in info["category"].split(".") if level] + [name] placement = [level.capitalize().strip() for level in tool["category"].split(".") if level] + [tool["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())]
while placement: while placement:
current_level = placement.pop() current_level = placement.pop()
if current_level in [child.text(0) for child in children]: if self.selection_menu.findItem(current_level, QtCore.Qt.MatchFixedString|QtCore.Qt.MatchCaseSensitive) 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()
children = [child for child in MenuIterator(root) if child in [root.child(i) for i in range(root.childCount())]]
else: else:
new_item = QtWidgets.QTreeWidgetItem(root, QtWidgets.QTreeWidgetItem.Type) 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)
if current_level == name: if current_level == tool["name"]:
new_item.setFlags(new_item.flags()|QtCore.Qt.ItemNeverHasChildren) new_item.setFlags(new_item.flags()|QtCore.Qt.ItemNeverHasChildren)
new_item.setData(1, QtCore.Qt.DecorationRole, QtGui.QIcon(str(Path(__file__).parent.parent/"resources/icons/internet-web-browser-4.png"))) new_item.setData(1, QtCore.Qt.DecorationRole, QtGui.QIcon(str(Path(__file__).parent.parent/"resources/icons/internet-web-browser-4.png")))
new_item.setData(1, QtCore.Qt.ToolTipRole, info["homepage"]) new_item.setData(1, QtCore.Qt.ToolTipRole, tool["homepage"])
try: try:
self._get_icon(new_item, info["icon url"]) self._get_icon(new_item, tool["icon url"])
except KeyError: except KeyError:
self._get_icon(new_item) self._get_icon(new_item)
try: try:
if info["depends on"] == current_level: #tool depends on itself makes it mandatory if tool["depends on"] == current_level: #tool depends on itself makes it mandatory
new_item.setFlags(new_item.flags()^QtCore.Qt.ItemIsUserCheckable) new_item.setFlags(new_item.flags()^QtCore.Qt.ItemIsUserCheckable)
new_item.setCheckState(0, QtCore.Qt.Checked) new_item.setCheckState(0, QtCore.Qt.Checked)
except KeyError: except KeyError:
@@ -195,11 +195,6 @@ class InstallerWizard(QtWidgets.QWizard):
self.selection_menu.resizeColumnToContents(0) self.selection_menu.resizeColumnToContents(0)
self.selection_menu.resizeColumnToContents(1) self.selection_menu.resizeColumnToContents(1)
def _create_placements(self):
placements = [[level.capitalize().strip() for level in info["category"].split(".") if info["category"]] + [name] for name, info in self.__tools__.items()]
for menu_placement in placements:
self.__tools__[menu_placement[-1]]["placement"] = menu_placement
@QtCore.pyqtSlot("QTreeWidgetItem*", "int") @QtCore.pyqtSlot("QTreeWidgetItem*", "int")
def _open_homepage(self, item, column): def _open_homepage(self, item, column):
"""Receives the itemClicked signal from the selection_menu QTreeWidget and if the user has clicked a homepage, opens it in a new browser tab. """Receives the itemClicked signal from the selection_menu QTreeWidget and if the user has clicked a homepage, opens it in a new browser tab.