mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-01 08:14:22 +08:00
Merge branch 'custom_menuitems_in_sidebar' into CURA-5595_add_custom_button_to_menu
This commit is contained in:
commit
40c51249f5
@ -104,6 +104,7 @@ from cura.Settings.UserChangesModel import UserChangesModel
|
||||
from cura.Settings.ExtrudersModel import ExtrudersModel
|
||||
from cura.Settings.MaterialSettingsVisibilityHandler import MaterialSettingsVisibilityHandler
|
||||
from cura.Settings.ContainerManager import ContainerManager
|
||||
from cura.Settings.SidebarCustomMenuItemsModel import SidebarCustomMenuItemsModel
|
||||
|
||||
from cura.ObjectsModel import ObjectsModel
|
||||
|
||||
@ -226,6 +227,8 @@ class CuraApplication(QtApplication):
|
||||
|
||||
self._need_to_show_user_agreement = True
|
||||
|
||||
self._sidebar_custom_menu_items = [] # type: list # Keeps list of custom menu items for the side bar
|
||||
|
||||
# Backups
|
||||
self._auto_save = None
|
||||
self._save_data_enabled = True
|
||||
@ -942,6 +945,7 @@ class CuraApplication(QtApplication):
|
||||
qmlRegisterType(MachineNameValidator, "Cura", 1, 0, "MachineNameValidator")
|
||||
qmlRegisterType(UserChangesModel, "Cura", 1, 0, "UserChangesModel")
|
||||
qmlRegisterSingletonType(ContainerManager, "Cura", 1, 0, "ContainerManager", ContainerManager.getInstance)
|
||||
qmlRegisterType(SidebarCustomMenuItemsModel, "Cura", 1, 0, "SidebarCustomMenuItemsModel")
|
||||
|
||||
# As of Qt5.7, it is necessary to get rid of any ".." in the path for the singleton to work.
|
||||
actions_url = QUrl.fromLocalFile(os.path.abspath(Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, "Actions.qml")))
|
||||
@ -1730,3 +1734,11 @@ class CuraApplication(QtApplication):
|
||||
@pyqtSlot()
|
||||
def showMoreInformationDialogForAnonymousDataCollection(self):
|
||||
cast(SliceInfo, self._plugin_registry.getPluginObject("SliceInfoPlugin")).showMoreInfoDialog()
|
||||
|
||||
|
||||
def addSidebarCustomMenuItem(self, menu_item: list) -> None:
|
||||
self._sidebar_custom_menu_items.append(menu_item)
|
||||
|
||||
def getSidebarCustomMenuItems(self) -> list:
|
||||
return self._sidebar_custom_menu_items
|
||||
|
||||
|
35
cura/Settings/SidebarCustomMenuItemsModel.py
Normal file
35
cura/Settings/SidebarCustomMenuItemsModel.py
Normal file
@ -0,0 +1,35 @@
|
||||
from UM.Qt.ListModel import ListModel
|
||||
from PyQt5.QtCore import pyqtSlot, Qt
|
||||
|
||||
class SidebarCustomMenuItemsModel(ListModel):
|
||||
NameRole = Qt.UserRole + 1
|
||||
ActionsRole = Qt.UserRole + 2
|
||||
MenuItemRole = Qt.UserRole + 3
|
||||
MenuItemIconNameRole = Qt.UserRole + 5
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.addRoleName(self.NameRole, "name")
|
||||
self.addRoleName(self.ActionsRole, "actions")
|
||||
self.addRoleName(self.MenuItemRole, "menu_item")
|
||||
self.addRoleName(self.MenuItemIconNameRole, "iconName")
|
||||
self._updateExtensionList()
|
||||
|
||||
def _updateExtensionList(self)-> None:
|
||||
from cura.CuraApplication import CuraApplication
|
||||
for menu_item in CuraApplication.getInstance().getSidebarCustomMenuItems():
|
||||
|
||||
self.appendItem({
|
||||
"name": menu_item["name"],
|
||||
"iconName": menu_item["iconName"],
|
||||
"actions": menu_item["actions"],
|
||||
"menu_item": menu_item["menu_item"]
|
||||
})
|
||||
|
||||
@pyqtSlot(str, "QVariantList", "QVariantMap")
|
||||
def callMenuItemMethod(self, menu_item_name: str, menu_item_actions: list, kwargs)-> None:
|
||||
for item in self._items:
|
||||
if menu_item_name == item["name"]:
|
||||
for method in menu_item_actions:
|
||||
getattr(item["menu_item"], method)(kwargs)
|
||||
break
|
@ -561,6 +561,28 @@ Item
|
||||
visible: machineExtruderCount.properties.value > 1
|
||||
}
|
||||
|
||||
Instantiator
|
||||
{
|
||||
id: customMenuItems
|
||||
model: Cura.SidebarCustomMenuItemsModel { }
|
||||
MenuItem
|
||||
{
|
||||
text: model.name
|
||||
iconName: model.iconName
|
||||
onTriggered:
|
||||
{
|
||||
customMenuItems.model.callMenuItemMethod(name, model.actions, {"key": contextMenu.key})
|
||||
}
|
||||
}
|
||||
onObjectAdded: contextMenu.insertItem(index, object)
|
||||
onObjectRemoved: contextMenu.removeItem(object)
|
||||
}
|
||||
|
||||
MenuSeparator
|
||||
{
|
||||
visible: customMenuItems.count > 0
|
||||
}
|
||||
|
||||
MenuItem
|
||||
{
|
||||
//: Settings context menu action
|
||||
|
Loading…
x
Reference in New Issue
Block a user