From 511895337394992ad9d4fa293b98cc1c9eed1a1f Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 21 Feb 2019 18:30:23 +0100 Subject: [PATCH 1/5] Put a change timer on the globalStacks model This decreases the time that a first thing is shown on the main screen (as the creation of the global stack model doesn't block the UI anymore) --- cura/GlobalStacksModel.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/cura/GlobalStacksModel.py b/cura/GlobalStacksModel.py index ea8a9c7961..d67d283a1c 100644 --- a/cura/GlobalStacksModel.py +++ b/cura/GlobalStacksModel.py @@ -3,7 +3,7 @@ from UM.Qt.ListModel import ListModel -from PyQt5.QtCore import pyqtProperty, Qt, pyqtSignal +from PyQt5.QtCore import pyqtProperty, Qt, pyqtSignal, QTimer from cura.PrinterOutputDevice import ConnectionType from cura.Settings.CuraContainerRegistry import CuraContainerRegistry @@ -26,18 +26,26 @@ class GlobalStacksModel(ListModel): self.addRoleName(self.MetaDataRole, "metadata") self._container_stacks = [] + self._change_timer = QTimer() + self._change_timer.setInterval(200) + self._change_timer.setSingleShot(True) + self._change_timer.timeout.connect(self._update) + # Listen to changes CuraContainerRegistry.getInstance().containerAdded.connect(self._onContainerChanged) CuraContainerRegistry.getInstance().containerMetaDataChanged.connect(self._onContainerChanged) CuraContainerRegistry.getInstance().containerRemoved.connect(self._onContainerChanged) self._filter_dict = {} - self._update() + self._updateDelayed() ## Handler for container added/removed events from registry def _onContainerChanged(self, container): # We only need to update when the added / removed container GlobalStack if isinstance(container, GlobalStack): - self._update() + self._updateDelayed() + + def _updateDelayed(self): + self._change_timer.start() def _update(self) -> None: items = [] From fc11286c6cbfa416d69df1e3fd15dd7fe34df8e8 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 21 Feb 2019 18:38:51 +0100 Subject: [PATCH 2/5] Also ensure that the QualtiyProfilesModel is on a changeTimer on create --- cura/Machines/Models/QualityProfilesDropDownMenuModel.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py index 7ccc886bfe..deabb6e9ba 100644 --- a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py +++ b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py @@ -10,6 +10,7 @@ from UM.Settings.SettingFunction import SettingFunction from cura.Machines.QualityManager import QualityGroup + # # QML Model for all built-in quality profiles. This model is used for the drop-down quality menu. # @@ -51,7 +52,7 @@ class QualityProfilesDropDownMenuModel(ListModel): self._update_timer.setSingleShot(True) self._update_timer.timeout.connect(self._update) - self._update() + self._onChange() def _onChange(self) -> None: self._update_timer.start() From 8409d7d6455517624d88f267b314a6649fb51059 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 21 Feb 2019 18:42:06 +0100 Subject: [PATCH 3/5] Remove another unneeded catalog --- resources/qml/Settings/SettingCategory.qml | 2 -- 1 file changed, 2 deletions(-) diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml index 1e88867889..18c5820832 100644 --- a/resources/qml/Settings/SettingCategory.qml +++ b/resources/qml/Settings/SettingCategory.qml @@ -237,7 +237,5 @@ Button onEntered: base.showTooltip(catalog.i18nc("@label","Some hidden settings use values different from their normal calculated value.\n\nClick to make these settings visible.")) onExited: base.hideTooltip() - - UM.I18nCatalog { id: catalog; name: "cura" } } } From 7221b23457568507cf061b412eff3c48f0d9dda0 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 21 Feb 2019 20:47:38 +0100 Subject: [PATCH 4/5] Add a property to temporarily disable the material models from updating. This allows the QMl to stop the updating when it's not even visible --- cura/Machines/Models/BaseMaterialsModel.py | 16 +++++++++++++++- .../ConfigurationMenu/CustomConfiguration.qml | 1 + resources/qml/Menus/MaterialMenu.qml | 4 ++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 212e4fcf1e..01960683a7 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -16,6 +16,7 @@ from cura.Machines.MaterialNode import MaterialNode class BaseMaterialsModel(ListModel): extruderPositionChanged = pyqtSignal() + enabledChanged = pyqtSignal() def __init__(self, parent = None): super().__init__(parent) @@ -60,6 +61,7 @@ class BaseMaterialsModel(ListModel): self._available_materials = None # type: Optional[Dict[str, MaterialNode]] self._favorite_ids = set() # type: Set[str] + self._enabled = True def _updateExtruderStack(self): global_stack = self._machine_manager.activeMachine @@ -86,6 +88,18 @@ class BaseMaterialsModel(ListModel): def extruderPosition(self) -> int: return self._extruder_position + def setEnabled(self, enabled): + if self._enabled != enabled: + self._enabled = enabled + if self._enabled: + # ensure the data is there again. + self._update() + self.enabledChanged.emit() + + @pyqtProperty(bool, fset=setEnabled, notify=enabledChanged) + def enabled(self): + return self._enabled + ## This is an abstract method that needs to be implemented by the specific # models themselves. def _update(self): @@ -97,7 +111,7 @@ class BaseMaterialsModel(ListModel): def _canUpdate(self): global_stack = self._machine_manager.activeMachine - if global_stack is None: + if global_stack is None or not self._enabled: return False extruder_position = str(self._extruder_position) diff --git a/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml index 29e9cd6353..d05ef09c92 100644 --- a/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml +++ b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml @@ -254,6 +254,7 @@ Item menu: Cura.MaterialMenu { extruderIndex: Cura.ExtruderManager.activeExtruderIndex + updateModels: materialSelection.visible } } } diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index 0116169ed6..ba35a160ba 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -15,22 +15,26 @@ Menu property int extruderIndex: 0 property string currentRootMaterialId: Cura.MachineManager.currentRootMaterialId[extruderIndex] property string activeMaterialId: Cura.MachineManager.allActiveMaterialIds[Cura.ExtruderManager.extruderIds[extruderIndex]] + property bool updateModels: true Cura.FavoriteMaterialsModel { id: favoriteMaterialsModel extruderPosition: menu.extruderIndex + enabled: updateModels } Cura.GenericMaterialsModel { id: genericMaterialsModel extruderPosition: menu.extruderIndex + enabled: updateModels } Cura.MaterialBrandsModel { id: brandModel extruderPosition: menu.extruderIndex + enabled: updateModels } MenuItem From 69d3813f987ae9c50b0e4fb02aa921c02784e952 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 22 Feb 2019 11:19:16 +0100 Subject: [PATCH 5/5] No longer disable viewMenu when user loaded presliced g-code --- resources/qml/Menus/ViewMenu.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/qml/Menus/ViewMenu.qml b/resources/qml/Menus/ViewMenu.qml index 217975c803..59e6dd24d0 100644 --- a/resources/qml/Menus/ViewMenu.qml +++ b/resources/qml/Menus/ViewMenu.qml @@ -11,7 +11,6 @@ Menu { title: catalog.i18nc("@title:menu menubar:toplevel", "&View") id: base - enabled: !PrintInformation.preSliced property var multiBuildPlateModel: CuraApplication.getMultiBuildPlateModel()