From bc219a06fec6141609e6a4bd1530369aaabffbab Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 22 Jun 2017 17:21:11 +0200 Subject: [PATCH] Add MaterialsModel to make material list update upon metadata change This new model inherits from InstanceContainersModel. The only change is that it updates when the metadata of a material container changes. This is needed to make the list of materials update when the material diameter changes. Contributes to issue CURA-2822. --- cura/CuraApplication.py | 2 ++ cura/Settings/MaterialsModel.py | 21 +++++++++++++++++++++ resources/qml/Preferences/MaterialsPage.qml | 2 +- 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 cura/Settings/MaterialsModel.py diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 332b103502..a1f5aaa6de 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -48,6 +48,7 @@ from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.SettingFunction import SettingFunction from cura.Settings.MachineNameValidator import MachineNameValidator from cura.Settings.ProfilesModel import ProfilesModel +from cura.Settings.MaterialsModel import MaterialsModel from cura.Settings.QualityAndUserProfilesModel import QualityAndUserProfilesModel from cura.Settings.SettingInheritanceManager import SettingInheritanceManager from cura.Settings.UserProfilesModel import UserProfilesModel @@ -717,6 +718,7 @@ class CuraApplication(QtApplication): qmlRegisterType(ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel") qmlRegisterSingletonType(ProfilesModel, "Cura", 1, 0, "ProfilesModel", ProfilesModel.createProfilesModel) + qmlRegisterType(MaterialsModel, "Cura", 1, 0, "MaterialsModel") qmlRegisterType(QualityAndUserProfilesModel, "Cura", 1, 0, "QualityAndUserProfilesModel") qmlRegisterType(UserProfilesModel, "Cura", 1, 0, "UserProfilesModel") qmlRegisterType(MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler") diff --git a/cura/Settings/MaterialsModel.py b/cura/Settings/MaterialsModel.py new file mode 100644 index 0000000000..75eeb6c281 --- /dev/null +++ b/cura/Settings/MaterialsModel.py @@ -0,0 +1,21 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +from UM.Settings.ContainerRegistry import ContainerRegistry #To listen for changes to the materials. +from UM.Settings.Models.InstanceContainersModel import InstanceContainersModel #We're extending this class. + +## A model that shows a list of currently valid materials. +class MaterialsModel(InstanceContainersModel): + def __init__(self, parent = None): + super().__init__(parent) + + ContainerRegistry.getInstance().containerMetaDataChanged.connect(self._onContainerMetaDataChanged) + + ## Called when the metadata of the container was changed. + # + # This makes sure that we only update when it was a material that changed. + # + # \param container The container whose metadata was changed. + def _onContainerMetaDataChanged(self, container): + if container.getMetaDataEntry("type") == "material": #Only need to update if a material was changed. + self._update() \ No newline at end of file diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index 0921b8c7c2..e5051dd5d3 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -20,7 +20,7 @@ UM.ManagementPage objectList.positionViewAtBeginning(); } - model: UM.InstanceContainersModel + model: Cura.MaterialsModel { filter: {