From ea324eadc03eaedfdcb0af7ada2d6d7983d81e92 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 22 Aug 2016 15:14:10 +0200 Subject: [PATCH] Added scroll bar to per object panel If there are too many per object settings a scrollbar is now displayed CURA-2131 --- .../CuraEngineBackend/CuraEngineBackend.py | 2 +- .../PerObjectSettingsPanel.qml | 179 +++++++++--------- 2 files changed, 94 insertions(+), 87 deletions(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 93f7aa3002..b37814f28b 100644 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -195,7 +195,7 @@ class CuraEngineBackend(Backend): self.slicingCancelled.emit() self.processingProgress.emit(0) Logger.log("d", "Attempting to kill the engine process") - self._createSocket() # Ensure that we have a fresh socket. + self._createSocket() # Ensure that we have a fresh socket. if Application.getInstance().getCommandLineOption("external-backend", False): return diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index 72b5b7da95..ab78818d89 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -154,107 +154,114 @@ Item { Column { spacing: UM.Theme.getSize("default_lining").height - - Repeater + // This is to ensure that the panel is first increasing in size up to 200 and then shows a scrollbar. + // It kinda looks ugly otherwise (big panel, no content on it) + height: contents.count * UM.Theme.getSize("section").height < 200 ? contents.count * UM.Theme.getSize("section").height : 200 + ScrollView { - id: contents - height: childrenRect.height; - - model: UM.SettingDefinitionsModel + height: parent.height + width: UM.Theme.getSize("setting").width + style: UM.Theme.styles.scrollview + ListView { - id: addedSettingsModel; - containerId: Cura.MachineManager.activeDefinitionId - expanded: [ "*" ] + id: contents - visibilityHandler: Cura.PerObjectSettingVisibilityHandler + model: UM.SettingDefinitionsModel { - selectedObjectId: UM.ActiveTool.properties.getValue("SelectedObjectId") - } - } + id: addedSettingsModel; + containerId: Cura.MachineManager.activeDefinitionId + expanded: [ "*" ] - delegate: Row - { - Loader - { - id: settingLoader - width: UM.Theme.getSize("setting").width - height: UM.Theme.getSize("section").height - - property var definition: model - property var settingDefinitionsModel: addedSettingsModel - property var propertyProvider: provider - - //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" - - onLoaded: { - settingLoader.item.showRevertButton = false - settingLoader.item.showInheritButton = false - settingLoader.item.showLinkedSettingIcon = false - settingLoader.item.doDepthIndentation = false - settingLoader.item.doQualityUserSettingEmphasis = false - } - - sourceComponent: + visibilityHandler: Cura.PerObjectSettingVisibilityHandler { - switch(model.type) - { - case "int": - return settingTextField - case "float": - return settingTextField - case "enum": - return settingComboBox - case "extruder": - return settingExtruder - case "bool": - return settingCheckBox - case "str": - return settingTextField - case "category": - return settingCategory - default: - return settingUnknown + selectedObjectId: UM.ActiveTool.properties.getValue("SelectedObjectId") + } + } + + delegate: Row + { + Loader + { + id: settingLoader + width: UM.Theme.getSize("setting").width + height: UM.Theme.getSize("section").height + + property var definition: model + property var settingDefinitionsModel: addedSettingsModel + property var propertyProvider: provider + + //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" + + onLoaded: { + settingLoader.item.showRevertButton = false + settingLoader.item.showInheritButton = false + settingLoader.item.showLinkedSettingIcon = false + settingLoader.item.doDepthIndentation = false + settingLoader.item.doQualityUserSettingEmphasis = false } - } - } - Button - { - width: UM.Theme.getSize("setting").height / 2; - height: UM.Theme.getSize("setting").height; - - onClicked: addedSettingsModel.setVisible(model.key, false); - - style: ButtonStyle - { - background: Item + sourceComponent: { - UM.RecolorImage + switch(model.type) { - anchors.verticalCenter: parent.verticalCenter - width: parent.width - height: parent.height / 2 - sourceSize.width: width - sourceSize.height: width - color: control.hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button") - source: UM.Theme.getIcon("minus") + case "int": + return settingTextField + case "float": + return settingTextField + case "enum": + return settingComboBox + case "extruder": + return settingExtruder + case "bool": + return settingCheckBox + case "str": + return settingTextField + case "category": + return settingCategory + default: + return settingUnknown } } } - } - UM.SettingPropertyProvider - { - id: provider + Button + { + width: UM.Theme.getSize("setting").height / 2; + height: UM.Theme.getSize("setting").height; - containerStackId: UM.ActiveTool.properties.getValue("ContainerID") - key: model.key - watchedProperties: [ "value", "enabled", "validationState" ] - storeIndex: 0 - removeUnusedValue: false + onClicked: addedSettingsModel.setVisible(model.key, false); + + style: ButtonStyle + { + background: Item + { + UM.RecolorImage + { + anchors.verticalCenter: parent.verticalCenter + width: parent.width + height: parent.height / 2 + sourceSize.width: width + sourceSize.height: width + color: control.hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button") + source: UM.Theme.getIcon("minus") + } + } + } + } + + UM.SettingPropertyProvider + { + id: provider + + containerStackId: UM.ActiveTool.properties.getValue("ContainerID") + key: model.key + watchedProperties: [ "value", "enabled", "validationState" ] + storeIndex: 0 + removeUnusedValue: false + } } } }