Browse Source

Merge branch 'qml_speed_improvements'

Ghostkeeper 5 years ago
parent
commit
2beeca0687

+ 5 - 1
cura/CuraApplication.py

@@ -224,7 +224,7 @@ class CuraApplication(QtApplication):
         self._quality_management_model = None
 
         self._discovered_printer_model = DiscoveredPrintersModel(self, parent = self)
-        self._first_start_machine_actions_model = FirstStartMachineActionsModel(self, parent = self)
+        self._first_start_machine_actions_model = None
         self._welcome_pages_model = WelcomePagesModel(self, parent = self)
         self._add_printer_pages_model = AddPrinterPagesModel(self, parent = self)
         self._whats_new_pages_model = WhatsNewPagesModel(self, parent = self)
@@ -878,6 +878,10 @@ class CuraApplication(QtApplication):
 
     @pyqtSlot(result = QObject)
     def getFirstStartMachineActionsModel(self, *args) -> "FirstStartMachineActionsModel":
+        if self._first_start_machine_actions_model is None:
+            self._first_start_machine_actions_model = FirstStartMachineActionsModel(self, parent = self)
+            if self.started:
+                self._first_start_machine_actions_model.initialize()
         return self._first_start_machine_actions_model
 
     @pyqtSlot(result = QObject)

+ 2 - 2
cura/Machines/Models/FirstStartMachineActionsModel.py

@@ -33,11 +33,11 @@ class FirstStartMachineActionsModel(ListModel):
         self._current_action_index = 0
 
         self._application = application
-        self._application.initializationFinished.connect(self._initialize)
+        self._application.initializationFinished.connect(self.initialize)
 
         self._previous_global_stack = None
 
-    def _initialize(self) -> None:
+    def initialize(self) -> None:
         self._application.getMachineManager().globalContainerChanged.connect(self._update)
         self._update()
 

+ 10 - 2
cura/Machines/Models/IntentCategoryModel.py

@@ -1,7 +1,7 @@
 #Copyright (c) 2019 Ultimaker B.V.
 #Cura is released under the terms of the LGPLv3 or higher.
 
-from PyQt5.QtCore import Qt
+from PyQt5.QtCore import Qt, QTimer
 import collections
 from typing import TYPE_CHECKING, Optional, Dict
 
@@ -69,6 +69,11 @@ class IntentCategoryModel(ListModel):
         extruder_manager = application.getExtruderManager()
         extruder_manager.extrudersChanged.connect(self.update)
 
+        self._update_timer = QTimer()
+        self._update_timer.setInterval(500)
+        self._update_timer.setSingleShot(True)
+        self._update_timer.timeout.connect(self._update)
+
         self.update()
 
     ##  Updates the list of intents if an intent profile was added or removed.
@@ -76,8 +81,11 @@ class IntentCategoryModel(ListModel):
         if container.getMetaDataEntry("type") == "intent":
             self.update()
 
+    def update(self):
+        self._update_timer.start()
+
     ##  Updates the list of intents.
-    def update(self) -> None:
+    def _update(self) -> None:
         available_categories = IntentManager.getInstance().currentAvailableIntentCategories()
         result = []
         for category in available_categories:

+ 2 - 2
cura/Settings/SettingInheritanceManager.py

@@ -88,8 +88,8 @@ class SettingInheritanceManager(QObject):
             self.settingsWithIntheritanceChanged.emit()
 
     @pyqtSlot()
-    def forceUpdate(self) -> None:
-        self._update()
+    def scheduleUpdate(self) -> None:
+        self._update_timer.start()
 
     def _onActiveExtruderChanged(self) -> None:
         new_active_stack = ExtruderManager.getInstance().getActiveExtruderStack()

+ 1 - 1
resources/i18n/nl_NL/cura.po

@@ -2795,7 +2795,7 @@ msgstr "Selecteer eventuele upgrades die op deze Ultimaker Original zijn uitgevo
 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:41
 msgctxt "@label"
 msgid "Heated Build Plate (official kit or self-built)"
-msgstr "Verwarmd Platform (officiële kit of eigenbouw)"
+msgstr "Verwarmd Platform (officiële kit of zelf gebouwd)"
 
 #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:119
 msgctxt "@label:MonitorStatus"

+ 0 - 6
resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml

@@ -19,12 +19,6 @@ Item
     property bool settingsEnabled: Cura.ExtruderManager.activeExtruderStackId || extrudersEnabledCount.properties.value == 1
     property real padding: UM.Theme.getSize("thick_margin").width
 
-    UM.I18nCatalog
-    {
-        id: catalog
-        name: "cura"
-    }
-
     Column
     {
         spacing: UM.Theme.getSize("wide_margin").height

+ 23 - 20
resources/qml/Settings/SettingItem.qml

@@ -23,17 +23,16 @@ Item
     property alias contents: controlContainer.children
     property alias hovered: mouse.containsMouse
 
-    property var showRevertButton: true
-    property var showInheritButton: true
-    property var showLinkedSettingIcon: true
-    property var doDepthIndentation: true
-    property var doQualityUserSettingEmphasis: true
+    property bool showRevertButton: true
+    property bool showInheritButton: true
+    property bool showLinkedSettingIcon: true
+    property bool doDepthIndentation: true
+    property bool doQualityUserSettingEmphasis: true
     property var settingKey: definition.key //Used to detect each individual setting more easily in Squish GUI tests.
 
     // Create properties to put property provider stuff in (bindings break in qt 5.5.1 otherwise)
     property var state: propertyProvider.properties.state
-    // There is no resolve property if there is only one stack.
-    property var resolve: Cura.MachineManager.activeStackId !== Cura.MachineManager.activeMachine.id ? propertyProvider.properties.resolve : "None"
+    property var resolve: propertyProvider.properties.resolve
     property var stackLevels: propertyProvider.stackLevels
     property var stackLevel: stackLevels[0]
     // A list of stack levels that will trigger to show the revert button
@@ -57,7 +56,8 @@ Item
     signal showTooltip(string text)
     signal hideTooltip()
     signal showAllHiddenInheritedSettings(string category_id)
-    property string tooltipText:
+
+    function createTooltipText()
     {
         var affects = settingDefinitionsModel.getRequiredBy(definition.key, "value")
         var affected_by = settingDefinitionsModel.getRequires(definition.key, "value")
@@ -128,7 +128,7 @@ Item
 
             onTriggered:
             {
-                base.showTooltip(base.tooltipText)
+                base.showTooltip(base.createTooltipText())
             }
         }
 
@@ -149,7 +149,7 @@ Item
             color: UM.Theme.getColor("setting_control_text")
             opacity: (definition.visible) ? 1 : 0.5
             // emphasize the setting if it has a value in the user or quality profile
-            font: base.doQualityUserSettingEmphasis && base.stackLevel != undefined && base.stackLevel <= 1 ? UM.Theme.getFont("default_italic") : UM.Theme.getFont("default")
+            font: base.doQualityUserSettingEmphasis && base.stackLevel !== undefined && base.stackLevel <= 1 ? UM.Theme.getFont("default_italic") : UM.Theme.getFont("default")
         }
 
         Row
@@ -170,10 +170,11 @@ Item
             {
                 id: linkedSettingIcon;
 
-                visible: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine && (!definition.settable_per_extruder || String(globalPropertyProvider.properties.limit_to_extruder) != "-1") && base.showLinkedSettingIcon
+                visible: (!definition.settable_per_extruder || String(globalPropertyProvider.properties.limit_to_extruder) != "-1") && base.showLinkedSettingIcon
 
-                height: parent.height;
-                width: height;
+                anchors.top: parent.top
+                anchors.bottom: parent.bottom
+                width: height
 
                 color: UM.Theme.getColor("setting_control_button")
                 hoverColor: UM.Theme.getColor("setting_control_button")
@@ -184,14 +185,14 @@ Item
                 {
                     hoverTimer.stop()
                     var tooltipText = catalog.i18nc("@label", "This setting is always shared between all extruders. Changing it here will change the value for all extruders.")
-                    if ((resolve != "None") && (stackLevel != 0))
+                    if ((resolve !== "None") && (stackLevel !== 0))
                     {
                         // We come here if a setting has a resolve and the setting is not manually edited.
                         tooltipText += " " + catalog.i18nc("@label", "The value is resolved from per-extruder values ") + "[" + Cura.ExtruderManager.getInstanceExtruderValues(definition.key) + "]."
                     }
                     base.showTooltip(tooltipText)
                 }
-                onExited: base.showTooltip(base.tooltipText)
+                onExited: base.showTooltip(base.createTooltipText())
             }
 
             UM.SimpleButton
@@ -200,7 +201,8 @@ Item
 
                 visible: base.resetButtonVisible
 
-                height: parent.height
+                anchors.top: parent.top
+                anchors.bottom: parent.bottom
                 width: height
 
                 color: UM.Theme.getColor("setting_control_button")
@@ -227,7 +229,7 @@ Item
                     hoverTimer.stop()
                     base.showTooltip(catalog.i18nc("@label", "This setting has a value that is different from the profile.\n\nClick to restore the value of the profile."))
                 }
-                onExited: base.showTooltip(base.tooltipText)
+                onExited: base.showTooltip(base.createTooltipText())
             }
 
             UM.SimpleButton
@@ -278,7 +280,8 @@ Item
                     return Cura.SettingInheritanceManager.getOverridesForExtruder(definition.key, String(globalPropertyProvider.properties.limit_to_extruder)).indexOf(definition.key) >= 0
                 }
 
-                height: parent.height
+                anchors.top: parent.top
+                anchors.bottom: parent.bottom
                 width: height
 
                 onClicked:
@@ -296,7 +299,7 @@ Item
                             break
                         }
                     }
-                    if ((last_entry == 4 || last_entry == 11) && base.stackLevel == 0 && base.stackLevels.length == 2)
+                    if ((last_entry === 4 || last_entry === 11) && base.stackLevel === 0 && base.stackLevels.length === 2)
                     {
                         // Special case of the inherit reset. If only the definition (4th or 11th) container) and the first
                         // entry (user container) are set, we can simply remove the container.
@@ -320,7 +323,7 @@ Item
                 iconSource: UM.Theme.getIcon("formula")
 
                 onEntered: { hoverTimer.stop(); base.showTooltip(catalog.i18nc("@label", "This setting is normally calculated, but it currently has an absolute value set.\n\nClick to restore the calculated value.")) }
-                onExited: base.showTooltip(base.tooltipText)
+                onExited: base.showTooltip(base.createTooltipText())
             }
         }
 

+ 20 - 24
resources/qml/Settings/SettingView.qml

@@ -228,7 +228,7 @@ Item
             model: UM.SettingDefinitionsModel
             {
                 id: definitionsModel
-                containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: ""
+                containerId: Cura.MachineManager.activeMachine !== null ? Cura.MachineManager.activeMachine.definition.id: ""
                 visibilityHandler: UM.SettingPreferenceVisibilityHandler { }
                 exclude: ["machine_settings", "command_line_settings", "infill_mesh", "infill_mesh_order", "cutting_mesh", "support_mesh", "anti_overhang_mesh"] // TODO: infill_mesh settigns are excluded hardcoded, but should be based on the fact that settable_globally, settable_per_meshgroup and settable_per_extruder are false.
                 expanded: CuraApplication.expandedCategories
@@ -241,43 +241,41 @@ Item
                         CuraApplication.setExpandedCategories(expanded)
                     }
                 }
-                onVisibilityChanged: Cura.SettingInheritanceManager.forceUpdate()
+                onVisibilityChanged: Cura.SettingInheritanceManager.scheduleUpdate()
             }
 
-            property var indexWithFocus: -1
-
+            property int indexWithFocus: -1
+            property string activeMachineId: Cura.MachineManager.activeMachine !== null ? Cura.MachineManager.activeMachine.id : ""
             delegate: Loader
             {
                 id: delegate
 
                 width: scrollView.width
-                height: provider.properties.enabled == "True" ? UM.Theme.getSize("section").height : - contents.spacing
+                height: provider.properties.enabled === "True" ? UM.Theme.getSize("section").height : - contents.spacing
                 Behavior on height { NumberAnimation { duration: 100 } }
-                opacity: provider.properties.enabled == "True" ? 1 : 0
+                opacity: provider.properties.enabled === "True" ? 1 : 0
                 Behavior on opacity { NumberAnimation { duration: 100 } }
                 enabled:
                 {
                     if (!Cura.ExtruderManager.activeExtruderStackId && machineExtruderCount.properties.value > 1)
                     {
                         // disable all controls on the global tab, except categories
-                        return model.type == "category"
+                        return model.type === "category"
                     }
-                    return provider.properties.enabled == "True"
+                    return provider.properties.enabled === "True"
                 }
 
                 property var definition: model
                 property var settingDefinitionsModel: definitionsModel
                 property var propertyProvider: provider
                 property var globalPropertyProvider: inheritStackProvider
-                property var externalResetHandler: false
-
-                property string activeMachineId: Cura.MachineManager.activeMachine !== null ? Cura.MachineManager.activeMachine.id : ""
+                property bool externalResetHandler: false
 
                 //Qt5.4.2 and earlier has a bug where this causes a crash: https://bugreports.qt.io/browse/QTBUG-35989
                 //In addition, while it works for 5.5 and higher, the ordering of the actual combo box drop down changes,
                 //causing nasty issues when selecting different options. So disable asynchronous loading of enum type completely.
-                asynchronous: model.type != "enum" && model.type != "extruder" && model.type != "optional_extruder"
-                active: model.type != undefined
+                asynchronous: model.type !== "enum" && model.type !== "extruder" && model.type !== "optional_extruder"
+                active: model.type !== undefined
 
                 source:
                 {
@@ -313,7 +311,7 @@ Item
                 {
                     target: provider
                     property: "containerStackId"
-                    when: model.settable_per_extruder || (inheritStackProvider.properties.limit_to_extruder != null && inheritStackProvider.properties.limit_to_extruder >= 0);
+                    when: model.settable_per_extruder || (inheritStackProvider.properties.limit_to_extruder !== null && inheritStackProvider.properties.limit_to_extruder >= 0);
                     value:
                     {
                         // Associate this binding with Cura.MachineManager.activeMachine.id in the beginning so this
@@ -324,9 +322,9 @@ Item
                         if (!model.settable_per_extruder)
                         {
                             //Not settable per extruder or there only is global, so we must pick global.
-                            return delegate.activeMachineId
+                            return contents.activeMachineId
                         }
-                        if (inheritStackProvider.properties.limit_to_extruder != null && inheritStackProvider.properties.limit_to_extruder >= 0)
+                        if (inheritStackProvider.properties.limit_to_extruder !== null && inheritStackProvider.properties.limit_to_extruder >= 0)
                         {
                             //We have limit_to_extruder, so pick that stack.
                             return Cura.ExtruderManager.extruderIds[String(inheritStackProvider.properties.limit_to_extruder)];
@@ -337,7 +335,7 @@ Item
                             return Cura.ExtruderManager.activeExtruderStackId;
                         }
                         //No extruder tab is selected. Pick the global stack. Shouldn't happen any more since we removed the global tab.
-                        return delegate.activeMachineId
+                        return contents.activeMachineId
                     }
                 }
 
@@ -346,7 +344,7 @@ Item
                 UM.SettingPropertyProvider
                 {
                     id: inheritStackProvider
-                    containerStackId: Cura.MachineManager.activeMachine !== null ? Cura.MachineManager.activeMachine.id: ""
+                    containerStackId: contents.activeMachineId
                     key: model.key
                     watchedProperties: [ "limit_to_extruder" ]
                 }
@@ -355,11 +353,11 @@ Item
                 {
                     id: provider
 
-                    containerStackId: delegate.activeMachineId
+                    containerStackId: contents.activeMachineId
                     key: model.key ? model.key : ""
                     watchedProperties: [ "value", "enabled", "state", "validationState", "settable_per_extruder", "resolve" ]
                     storeIndex: 0
-                    removeUnusedValue: model.resolve == undefined
+                    removeUnusedValue: model.resolve === undefined
                 }
 
                 Connections
@@ -421,8 +419,6 @@ Item
                 }
             }
 
-            UM.I18nCatalog { id: catalog; name: "cura"; }
-
             NumberAnimation {
                 id: animateContentY
                 target: contents
@@ -465,7 +461,7 @@ Item
                     //: Settings context menu action
                     text: catalog.i18nc("@action:menu", "Copy value to all extruders")
                     visible: machineExtruderCount.properties.value > 1
-                    enabled: contextMenu.provider != undefined && contextMenu.provider.properties.settable_per_extruder != "False"
+                    enabled: contextMenu.provider !== undefined && contextMenu.provider.properties.settable_per_extruder !== "False"
                     onTriggered: Cura.MachineManager.copyValueToExtruders(contextMenu.key)
                 }
 
@@ -474,7 +470,7 @@ Item
                     //: Settings context menu action
                     text: catalog.i18nc("@action:menu", "Copy all changed values to all extruders")
                     visible: machineExtruderCount.properties.value > 1
-                    enabled: contextMenu.provider != undefined
+                    enabled: contextMenu.provider !== undefined
                     onTriggered: Cura.MachineManager.copyAllValuesToExtruders()
                 }