Merge branch 'CURA--6683_icons_per_object_settings'

This commit is contained in:
Ghostkeeper 2019-09-19 10:48:23 +02:00
commit 8b8429d629
No known key found for this signature in database
GPG Key ID: 86BEF881AE2CF276
10 changed files with 407 additions and 302 deletions

View File

@ -4,22 +4,68 @@
import QtQuick 2.2 import QtQuick 2.2
import QtQuick.Controls 1.2 import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2 import QtQuick.Controls.Styles 1.2
import QtQuick.Window 2.2
import UM 1.2 as UM import UM 1.2 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
import ".." import ".."
Item {
id: base;
UM.I18nCatalog { id: catalog; name: "cura"; } Item
{
width: childrenRect.width; id: base
height: childrenRect.height; width: childrenRect.width
property var all_categories_except_support: [ "machine_settings", "resolution", "shell", "infill", "material", "speed", height: childrenRect.height
property var allCategoriesExceptSupport: [ "machine_settings", "resolution", "shell", "infill", "material", "speed",
"travel", "cooling", "platform_adhesion", "dual", "meshfix", "blackmagic", "experimental"] "travel", "cooling", "platform_adhesion", "dual", "meshfix", "blackmagic", "experimental"]
readonly property string normalMeshType: ""
readonly property string supportMeshType: "support_mesh"
readonly property string cuttingMeshType: "cutting_mesh"
readonly property string infillMeshType: "infill_mesh"
readonly property string antiOverhangMeshType: "anti_overhang_mesh"
property var currentMeshType: UM.ActiveTool.properties.getValue("MeshType")
// Update the view every time the currentMeshType changes
onCurrentMeshTypeChanged:
{
var type = currentMeshType
// set checked state of mesh type buttons
normalButton.checked = type === normalMeshType
supportMeshButton.checked = type === supportMeshType
overhangMeshButton.checked = type === infillMeshType || type === cuttingMeshType
antiOverhangMeshButton.checked = type === antiOverhangMeshType
// update active type label
for (var button in meshTypeButtons.children)
{
if (meshTypeButtons.children[button].checked){
meshTypeLabel.text = catalog.i18nc("@label", "Mesh Type") + ": " + meshTypeButtons.children[button].text
break
}
}
}
function setOverhangsMeshType()
{
if (infillOnlyCheckbox.checked)
{
setMeshType(infillMeshType)
}
else
{
setMeshType(cuttingMeshType)
}
}
function setMeshType(type)
{
UM.ActiveTool.setProperty("MeshType", type)
}
UM.I18nCatalog { id: catalog; name: "uranium"}
Column Column
{ {
id: items id: items
@ -28,123 +74,97 @@ Item {
spacing: UM.Theme.getSize("default_margin").height spacing: UM.Theme.getSize("default_margin").height
Row Row // Mesh type buttons
{ {
id: meshTypeButtons
spacing: UM.Theme.getSize("default_margin").width spacing: UM.Theme.getSize("default_margin").width
Label Button
{ {
text: catalog.i18nc("@label","Mesh Type") id: normalButton
font: UM.Theme.getFont("default") text: catalog.i18nc("@label", "Normal model")
color: UM.Theme.getColor("text") iconSource: UM.Theme.getIcon("pos_normal");
height: UM.Theme.getSize("setting").height property bool needBorder: true
verticalAlignment: Text.AlignVCenter checkable: true
onClicked: setMeshType(normalMeshType);
style: UM.Theme.styles.tool_button;
z: 4
} }
UM.SettingPropertyProvider Button
{ {
id: meshTypePropertyProvider id: supportMeshButton
containerStack: Cura.MachineManager.activeMachine text: catalog.i18nc("@label", "Print as support")
watchedProperties: [ "enabled" ] iconSource: UM.Theme.getIcon("pos_print_as_support");
property bool needBorder: true
checkable:true
onClicked: setMeshType(supportMeshType)
style: UM.Theme.styles.tool_button;
z: 3
} }
ComboBox Button
{ {
id: meshTypeSelection id: overhangMeshButton
style: UM.Theme.styles.combobox text: catalog.i18nc("@label", "Modify settings for overlaps")
onActivated: { iconSource: UM.Theme.getIcon("pos_modify_overlaps");
UM.ActiveTool.setProperty("MeshType", model.get(index).type) property bool needBorder: true
} checkable:true
model: ListModel onClicked: setMeshType(infillMeshType)
{ style: UM.Theme.styles.tool_button;
id: meshTypeModel z: 2
Component.onCompleted: meshTypeSelection.populateModel()
}
function populateModel()
{
meshTypeModel.append({
type: "",
text: catalog.i18nc("@label", "Normal model")
});
meshTypePropertyProvider.key = "support_mesh";
if(meshTypePropertyProvider.properties.enabled == "True")
{
meshTypeModel.append({
type: "support_mesh",
text: catalog.i18nc("@label", "Print as support")
});
}
meshTypePropertyProvider.key = "anti_overhang_mesh";
if(meshTypePropertyProvider.properties.enabled == "True")
{
meshTypeModel.append({
type: "anti_overhang_mesh",
text: catalog.i18nc("@label", "Don't support overlap with other models")
});
}
meshTypePropertyProvider.key = "cutting_mesh";
if(meshTypePropertyProvider.properties.enabled == "True")
{
meshTypeModel.append({
type: "cutting_mesh",
text: catalog.i18nc("@label", "Modify settings for overlap with other models")
});
}
meshTypePropertyProvider.key = "infill_mesh";
if(meshTypePropertyProvider.properties.enabled == "True")
{
meshTypeModel.append({
type: "infill_mesh",
text: catalog.i18nc("@label", "Modify settings for infill of other models")
});
}
meshTypeSelection.updateCurrentIndex();
}
function updateCurrentIndex()
{
var mesh_type = UM.ActiveTool.properties.getValue("MeshType");
meshTypeSelection.currentIndex = -1;
for(var index=0; index < meshTypeSelection.model.count; index++)
{
if(meshTypeSelection.model.get(index).type == mesh_type)
{
meshTypeSelection.currentIndex = index;
return;
}
}
meshTypeSelection.currentIndex = 0;
}
} }
Connections Button
{ {
target: Cura.MachineManager id: antiOverhangMeshButton
onGlobalContainerChanged: text: catalog.i18nc("@label", "Don't support overlaps")
{ iconSource: UM.Theme.getIcon("pos_modify_dont_support_overlap");
meshTypeSelection.model.clear(); property bool needBorder: true
meshTypeSelection.populateModel(); checkable: true
} onClicked: setMeshType(antiOverhangMeshType)
} style: UM.Theme.styles.tool_button;
z: 1
Connections
{
target: UM.Selection
onSelectionChanged: meshTypeSelection.updateCurrentIndex()
} }
} }
Column Label
{
id: meshTypeLabel
font: UM.Theme.getFont("default")
color: UM.Theme.getColor("text")
height: UM.Theme.getSize("setting").height
verticalAlignment: Text.AlignVCenter
}
CheckBox
{
id: infillOnlyCheckbox
text: catalog.i18nc("@action:checkbox", "Infill only");
style: UM.Theme.styles.checkbox;
visible: currentMeshType === infillMeshType || currentMeshType === cuttingMeshType
onClicked: setOverhangsMeshType()
Binding
{
target: infillOnlyCheckbox
property: "checked"
value: currentMeshType === infillMeshType
}
}
Column // Settings Dialog
{ {
// This is to ensure that the panel is first increasing in size up to 200 and then shows a scrollbar. // 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) // It kinda looks ugly otherwise (big panel, no content on it)
id: currentSettings id: currentSettings
property int maximumHeight: 200 * screenScaleFactor property int maximumHeight: 200 * screenScaleFactor
height: Math.min(contents.count * (UM.Theme.getSize("section").height + UM.Theme.getSize("default_lining").height), maximumHeight) height: Math.min(contents.count * (UM.Theme.getSize("section").height + UM.Theme.getSize("default_lining").height), maximumHeight)
visible: meshTypeSelection.model.get(meshTypeSelection.currentIndex).type != "anti_overhang_mesh" visible: currentMeshType != "anti_overhang_mesh"
ScrollView ScrollView
{ {
@ -159,26 +179,26 @@ Item {
model: UM.SettingDefinitionsModel model: UM.SettingDefinitionsModel
{ {
id: addedSettingsModel; id: addedSettingsModel
containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: "" containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: ""
expanded: [ "*" ] expanded: [ "*" ]
filter: filter:
{ {
if (printSequencePropertyProvider.properties.value == "one_at_a_time") if (printSequencePropertyProvider.properties.value == "one_at_a_time")
{ {
return {"settable_per_meshgroup": true}; return {"settable_per_meshgroup": true}
} }
return {"settable_per_mesh": true}; return {"settable_per_mesh": true}
} }
exclude: exclude:
{ {
var excluded_settings = [ "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ]; var excluded_settings = [ "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ]
if(meshTypeSelection.model.get(meshTypeSelection.currentIndex).type == "support_mesh") if (currentMeshType == "support_mesh")
{ {
excluded_settings = excluded_settings.concat(base.all_categories_except_support); excluded_settings = excluded_settings.concat(base.allCategoriesExceptSupport)
} }
return excluded_settings; return excluded_settings
} }
visibilityHandler: Cura.PerObjectSettingVisibilityHandler visibilityHandler: Cura.PerObjectSettingVisibilityHandler
@ -188,8 +208,9 @@ Item {
// For some reason the model object is updated after removing him from the memory and // For some reason the model object is updated after removing him from the memory and
// it happens only on Windows. For this reason, set the destroyed value manually. // it happens only on Windows. For this reason, set the destroyed value manually.
Component.onDestruction: { Component.onDestruction:
setDestroyed(true); {
setDestroyed(true)
} }
} }
@ -213,7 +234,8 @@ Item {
//causing nasty issues when selecting different options. So disable asynchronous loading of enum type completely. //causing nasty issues when selecting different options. So disable asynchronous loading of enum type completely.
asynchronous: model.type != "enum" && model.type != "extruder" asynchronous: model.type != "enum" && model.type != "extruder"
onLoaded: { onLoaded:
{
settingLoader.item.showRevertButton = false settingLoader.item.showRevertButton = false
settingLoader.item.showInheritButton = false settingLoader.item.showInheritButton = false
settingLoader.item.showLinkedSettingIcon = false settingLoader.item.showLinkedSettingIcon = false
@ -299,7 +321,7 @@ Item {
target: inheritStackProvider target: inheritStackProvider
onPropertiesChanged: onPropertiesChanged:
{ {
provider.forcePropertiesChanged(); provider.forcePropertiesChanged()
} }
} }
@ -312,22 +334,22 @@ Item {
// so here we connect to the signal and update the those values. // so here we connect to the signal and update the those values.
if (typeof UM.ActiveTool.properties.getValue("SelectedObjectId") !== "undefined") if (typeof UM.ActiveTool.properties.getValue("SelectedObjectId") !== "undefined")
{ {
const selectedObjectId = UM.ActiveTool.properties.getValue("SelectedObjectId"); const selectedObjectId = UM.ActiveTool.properties.getValue("SelectedObjectId")
if (addedSettingsModel.visibilityHandler.selectedObjectId != selectedObjectId) if (addedSettingsModel.visibilityHandler.selectedObjectId != selectedObjectId)
{ {
addedSettingsModel.visibilityHandler.selectedObjectId = selectedObjectId; addedSettingsModel.visibilityHandler.selectedObjectId = selectedObjectId
} }
} }
if (typeof UM.ActiveTool.properties.getValue("ContainerID") !== "undefined") if (typeof UM.ActiveTool.properties.getValue("ContainerID") !== "undefined")
{ {
const containerId = UM.ActiveTool.properties.getValue("ContainerID"); const containerId = UM.ActiveTool.properties.getValue("ContainerID")
if (provider.containerStackId != containerId) if (provider.containerStackId != containerId)
{ {
provider.containerStackId = containerId; provider.containerStackId = containerId
} }
if (inheritStackProvider.containerStackId != containerId) if (inheritStackProvider.containerStackId != containerId)
{ {
inheritStackProvider.containerStackId = containerId; inheritStackProvider.containerStackId = containerId
} }
} }
} }
@ -337,7 +359,7 @@ Item {
} }
} }
Button Cura.SecondaryButton
{ {
id: customiseSettingsButton; id: customiseSettingsButton;
height: UM.Theme.getSize("setting_control").height; height: UM.Theme.getSize("setting_control").height;
@ -345,33 +367,12 @@ Item {
text: catalog.i18nc("@action:button", "Select settings"); text: catalog.i18nc("@action:button", "Select settings");
style: ButtonStyle
{
background: Rectangle
{
width: control.width;
height: control.height;
border.width: UM.Theme.getSize("default_lining").width;
border.color: control.pressed ? UM.Theme.getColor("action_button_active_border") :
control.hovered ? UM.Theme.getColor("action_button_hovered_border") : UM.Theme.getColor("action_button_border")
color: control.pressed ? UM.Theme.getColor("action_button_active") :
control.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button")
}
label: Label
{
text: control.text;
color: UM.Theme.getColor("setting_control_text");
font: UM.Theme.getFont("default")
anchors.centerIn: parent
}
}
onClicked: onClicked:
{ {
settingPickDialog.visible = true; settingPickDialog.visible = true;
if (meshTypeSelection.model.get(meshTypeSelection.currentIndex).type == "support_mesh") if (currentMeshType == "support_mesh")
{ {
settingPickDialog.additional_excluded_settings = base.all_categories_except_support; settingPickDialog.additional_excluded_settings = base.allCategoriesExceptSupport;
} }
else else
{ {
@ -379,138 +380,12 @@ Item {
} }
} }
} }
} }
SettingPickDialog
UM.Dialog { {
id: settingPickDialog id: settingPickDialog
title: catalog.i18nc("@title:window", "Select Settings to Customize for this model")
width: screenScaleFactor * 360
property var additional_excluded_settings
onVisibilityChanged:
{
// force updating the model to sync it with addedSettingsModel
if(visible)
{
// Set skip setting, it will prevent from resetting selected mesh_type
contents.model.visibilityHandler.addSkipResetSetting(meshTypeSelection.model.get(meshTypeSelection.currentIndex).type)
listview.model.forceUpdate()
updateFilter()
}
}
function updateFilter()
{
var new_filter = {};
new_filter["settable_per_mesh"] = true;
// Don't filter on "settable_per_meshgroup" any more when `printSequencePropertyProvider.properties.value`
// is set to "one_at_a_time", because the current backend architecture isn't ready for that.
if(filterInput.text != "")
{
new_filter["i18n_label"] = "*" + filterInput.text;
}
listview.model.filter = new_filter;
}
TextField {
id: filterInput
anchors {
top: parent.top
left: parent.left
right: toggleShowAll.left
rightMargin: UM.Theme.getSize("default_margin").width
}
placeholderText: catalog.i18nc("@label:textbox", "Filter...");
onTextChanged: settingPickDialog.updateFilter()
}
CheckBox
{
id: toggleShowAll
anchors {
top: parent.top
right: parent.right
}
text: catalog.i18nc("@label:checkbox", "Show all")
checked: listview.model.showAll
onClicked:
{
listview.model.showAll = checked;
}
}
ScrollView
{
id: scrollView
anchors
{
top: filterInput.bottom;
left: parent.left;
right: parent.right;
bottom: parent.bottom;
}
ListView
{
id:listview
model: UM.SettingDefinitionsModel
{
id: definitionsModel;
containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: ""
visibilityHandler: UM.SettingPreferenceVisibilityHandler {}
expanded: [ "*" ]
exclude:
{
var excluded_settings = [ "machine_settings", "command_line_settings", "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ];
excluded_settings = excluded_settings.concat(settingPickDialog.additional_excluded_settings);
return excluded_settings;
}
}
delegate:Loader
{
id: loader
width: parent.width
height: model.type != undefined ? UM.Theme.getSize("section").height : 0;
property var definition: model
property var settingDefinitionsModel: definitionsModel
asynchronous: true
source:
{
switch(model.type)
{
case "category":
return "PerObjectCategory.qml"
default:
return "PerObjectItem.qml"
}
}
}
Component.onCompleted: settingPickDialog.updateFilter()
}
}
rightButtons: [
Button {
text: catalog.i18nc("@action:button", "Close");
onClicked: {
settingPickDialog.visible = false;
}
}
]
} }
UM.SettingPropertyProvider UM.SettingPropertyProvider
@ -533,25 +408,25 @@ Item {
storeIndex: 0 storeIndex: 0
} }
SystemPalette { id: palette; } SystemPalette { id: palette }
Component Component
{ {
id: settingTextField; id: settingTextField
Cura.SettingTextField { } Cura.SettingTextField { }
} }
Component Component
{ {
id: settingComboBox; id: settingComboBox
Cura.SettingComboBox { } Cura.SettingComboBox { }
} }
Component Component
{ {
id: settingExtruder; id: settingExtruder
Cura.SettingExtruder { } Cura.SettingExtruder { }
} }
@ -565,22 +440,23 @@ Item {
Component Component
{ {
id: settingCheckBox; id: settingCheckBox
Cura.SettingCheckBox { } Cura.SettingCheckBox { }
} }
Component Component
{ {
id: settingCategory; id: settingCategory
Cura.SettingCategory { } Cura.SettingCategory { }
} }
Component Component
{ {
id: settingUnknown; id: settingUnknown
Cura.SettingUnknown { } Cura.SettingUnknown { }
} }
} }

View File

@ -1,6 +1,6 @@
# Copyright (c) 2016 Ultimaker B.V. # Copyright (c) 2016 Ultimaker B.V.
# Uranium is released under the terms of the LGPLv3 or higher. # Uranium is released under the terms of the LGPLv3 or higher.
from UM.Logger import Logger
from UM.Tool import Tool from UM.Tool import Tool
from UM.Scene.Selection import Selection from UM.Scene.Selection import Selection
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
@ -20,15 +20,11 @@ class PerObjectSettingsTool(Tool):
self.setExposedProperties("SelectedObjectId", "ContainerID", "SelectedActiveExtruder", "MeshType") self.setExposedProperties("SelectedObjectId", "ContainerID", "SelectedActiveExtruder", "MeshType")
self._advanced_mode = False
self._multi_extrusion = False self._multi_extrusion = False
self._single_model_selected = False self._single_model_selected = False
Selection.selectionChanged.connect(self.propertyChanged) Selection.selectionChanged.connect(self.propertyChanged)
Application.getInstance().getPreferences().preferenceChanged.connect(self._onPreferenceChanged)
self._onPreferenceChanged("cura/active_mode")
Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged)
self._onGlobalContainerChanged() self._onGlobalContainerChanged()
Selection.selectionChanged.connect(self._updateEnabled) Selection.selectionChanged.connect(self._updateEnabled)
@ -70,8 +66,16 @@ class PerObjectSettingsTool(Tool):
selected_object.addDecorator(SettingOverrideDecorator()) selected_object.addDecorator(SettingOverrideDecorator())
selected_object.callDecoration("setActiveExtruder", extruder_stack_id) selected_object.callDecoration("setActiveExtruder", extruder_stack_id)
def setMeshType(self, mesh_type): ## Returns True when the mesh_type was changed, False when current mesh_type == mesh_type
def setMeshType(self, mesh_type: str) -> bool:
if self.getMeshType() == mesh_type:
return False
selected_object = Selection.getSelectedObject(0) selected_object = Selection.getSelectedObject(0)
if selected_object is None:
Logger.log("w", "Tried setting the mesh type of the selected object, but no object was selected")
return False
stack = selected_object.callDecoration("getStack") #Don't try to get the active extruder since it may be None anyway. stack = selected_object.callDecoration("getStack") #Don't try to get the active extruder since it may be None anyway.
if not stack: if not stack:
selected_object.addDecorator(SettingOverrideDecorator()) selected_object.addDecorator(SettingOverrideDecorator())
@ -90,6 +94,9 @@ class PerObjectSettingsTool(Tool):
new_instance.resetState() # Ensure that the state is not seen as a user state. new_instance.resetState() # Ensure that the state is not seen as a user state.
settings.addInstance(new_instance) settings.addInstance(new_instance)
self.propertyChanged.emit()
return True
def getMeshType(self): def getMeshType(self):
selected_object = Selection.getSelectedObject(0) selected_object = Selection.getSelectedObject(0)
stack = selected_object.callDecoration("getStack") #Don't try to get the active extruder since it may be None anyway. stack = selected_object.callDecoration("getStack") #Don't try to get the active extruder since it may be None anyway.
@ -103,11 +110,6 @@ class PerObjectSettingsTool(Tool):
return "" return ""
def _onPreferenceChanged(self, preference):
if preference == "cura/active_mode":
self._advanced_mode = Application.getInstance().getPreferences().getValue(preference) == 1
self._updateEnabled()
def _onGlobalContainerChanged(self): def _onGlobalContainerChanged(self):
global_container_stack = Application.getInstance().getGlobalContainerStack() global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack: if global_container_stack:
@ -140,4 +142,4 @@ class PerObjectSettingsTool(Tool):
self._single_model_selected = False # Group is selected, so tool needs to be disabled self._single_model_selected = False # Group is selected, so tool needs to be disabled
else: else:
self._single_model_selected = True self._single_model_selected = True
Application.getInstance().getController().toolEnabledChanged.emit(self._plugin_id, self._advanced_mode and self._single_model_selected) Application.getInstance().getController().toolEnabledChanged.emit(self._plugin_id, self._single_model_selected)

View File

@ -0,0 +1,139 @@
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import UM 1.2 as UM
import Cura 1.0 as Cura
import ".."
UM.Dialog
{
id: settingPickDialog
title: catalog.i18nc("@title:window", "Select Settings to Customize for this model")
width: screenScaleFactor * 360
property var additional_excluded_settings
onVisibilityChanged:
{
// force updating the model to sync it with addedSettingsModel
if (visible)
{
// Set skip setting, it will prevent from resetting selected mesh_type
contents.model.visibilityHandler.addSkipResetSetting(currentMeshType)
listview.model.forceUpdate()
updateFilter()
}
}
function updateFilter()
{
var new_filter = {}
new_filter["settable_per_mesh"] = true
// Don't filter on "settable_per_meshgroup" any more when `printSequencePropertyProvider.properties.value`
// is set to "one_at_a_time", because the current backend architecture isn't ready for that.
if (filterInput.text != "")
{
new_filter["i18n_label"] = "*" + filterInput.text
}
listview.model.filter = new_filter
}
TextField {
id: filterInput
anchors {
top: parent.top
left: parent.left
right: toggleShowAll.left
rightMargin: UM.Theme.getSize("default_margin").width
}
placeholderText: catalog.i18nc("@label:textbox", "Filter...")
onTextChanged: settingPickDialog.updateFilter()
}
CheckBox
{
id: toggleShowAll
anchors {
top: parent.top
right: parent.right
}
text: catalog.i18nc("@label:checkbox", "Show all")
checked: listview.model.showAll
onClicked:
{
listview.model.showAll = checked
}
}
ScrollView
{
id: scrollView
anchors
{
top: filterInput.bottom
left: parent.left
right: parent.right
bottom: parent.bottom
}
ListView
{
id:listview
model: UM.SettingDefinitionsModel
{
id: definitionsModel
containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: ""
visibilityHandler: UM.SettingPreferenceVisibilityHandler {}
expanded: [ "*" ]
exclude:
{
var excluded_settings = [ "machine_settings", "command_line_settings", "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ]
excluded_settings = excluded_settings.concat(settingPickDialog.additional_excluded_settings)
return excluded_settings
}
}
delegate:Loader
{
id: loader
width: parent.width
height: model.type != undefined ? UM.Theme.getSize("section").height : 0
property var definition: model
property var settingDefinitionsModel: definitionsModel
asynchronous: true
source:
{
switch(model.type)
{
case "category":
return "PerObjectCategory.qml"
default:
return "PerObjectItem.qml"
}
}
}
Component.onCompleted: settingPickDialog.updateFilter()
}
}
rightButtons: [
Button {
text: catalog.i18nc("@action:button", "Close")
onClicked: {
settingPickDialog.visible = false
}
}
]
}

View File

@ -1,3 +1,22 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30"> <?xml version="1.0" encoding="UTF-8"?>
<path d="M30 20L25.1 6.7 27.6 0H12.9l1.6 5H6.4l2.3 6H2.4l2.4 6.2L0 30h19.5l-1.7-4H26l-2.3-6H30zm-12.5 5l-2.8-7.5 2.4-6.5H9.6L7.7 6h14.7L20 12.4l2.9 7.6 2 5h-7.4z"/> <svg width="30px" height="30px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
</svg> <!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
<title>per_model_settings</title>
<desc>Created with Sketch.</desc>
<defs>
<path d="M9.73076923,0 L9.226,1.345 L0.449,11 L0,11 L0.639,9.084 L8.896,0 L9.73076923,0 Z M8.49,3.472 L8.907,4.721 L3.199,11 L1.647,11 L8.49,3.472 Z M9.228,5.685 L9.645,6.935 L5.949,11 L4.397,11 L9.228,5.685 Z M9.966,7.899 L10.382,9.148 L8.699,11 L7.147,11 L9.966,7.899 Z M10.704,10.112 L11,11 L9.896,11 L10.704,10.112 Z M7.698,0 L1.332,7.004 L2.23,4.308 L6.146,0 L7.698,0 Z M4.948,0 L2.344,2.866 L1.89,1.656 L3.396,0 L4.948,0 Z M2.198,0 L1.54,0.724 L1.26923077,0 L2.198,0 Z" id="path-1"></path>
</defs>
<g id="per_model_settings" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Per-model" transform="translate(2.000000, 2.000000)">
<polygon id="Path-Copy-5" fill="#000" points="1.26923077 0 9.73076923 0 8.46153846 3.38461538 11 11 0 11 2.53846154 3.38461538"></polygon>
<polygon id="Path-Copy-8" fill="#000" points="14.2692308 13 22.7307692 13 21.4615385 16.3846154 24 24 13 24 15.5384615 16.3846154"></polygon>
<g id="stripe" transform="translate(13.000000, 0.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Combined-Shape" fill="#000" xlink:href="#path-1"></use>
</g>
<path d="M1.990731,13.5 L3.06878027,16.374798 L0.693712943,23.5 L10.3062871,23.5 L7.93121973,16.374798 L9.009269,13.5 L1.990731,13.5 Z" id="Path-Copy-7" stroke="#000"></path>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 240 B

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1,11 +1,14 @@
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch --> <svg width="30px" height="30px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
<title>support_blocker</title>
<desc>Created with Sketch.</desc> <desc>Created with Sketch.</desc>
<defs></defs> <g id="support_blocker" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="Group-3" transform="translate(3.000000, 2.000000)">
<g id="Cura-Icon" fill="#000000"> <g id="Print-as-support-Copy" fill="#000">
<path d="M19,27 L12,27 L3,27 L3,3 L12,3 L12,11 L19,11 L19,19 L27,19 L27,27 L19,27 Z M4,4 L4,26 L11,26 L11,4 L4,4 Z" id="Combined-Shape"></path> <path d="M0.833,19.65 L0.833,22.342 L0,22.3428571 L0.833,19.65 Z M4.166,8.879 L4.166,22.342 L2.499,22.342 L2.499,14.266 L4.166,8.879 Z M7.5,0.8 L7.5,22.342 L5.833,22.342 L5.833,0.8 L7.5,0.8 Z M10.833,0.8 L10.833,22.342 L9.166,22.342 L9.166,0.8 L10.833,0.8 Z M14.166,0.8 L14.166,14 L12.499,14 L12.499,0.8 L14.166,0.8 Z M15.833,8.879 L17.418,14 L15.833,14 L15.833,8.879 Z M4.166,0.8 L4.166,6.139 L2.499,1.351 L2.499,0.8 L4.166,0.8 Z M17.5,0.8 L17.5,1.351 L15.833,6.139 L15.833,0.8 L17.5,0.8 Z" id="Combined-Shape"></path>
<polygon id="Path" points="10 17.1441441 9.18918919 17.954955 7.52252252 16.3333333 5.85585586 18 5.04504505 17.1891892 6.66666667 15.4774775 5 13.8558559 5.81081081 13.045045 7.52252252 14.6666667 9.18918919 13 10 13.8108108 8.33333333 15.4774775"></polygon> </g>
<path d="M12,14 L22,14 L22,24 L12,24 L12,14 Z" id="Rectangle" stroke="#000" stroke-dasharray="1,1"></path>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 866 B

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
<title>pms_modify_dont_support_overlap</title>
<desc>Created with Sketch.</desc>
<defs>
<circle id="path-1" cx="21.5" cy="6.5" r="6.5"></circle>
<mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="13" height="13" fill="white">
<use xlink:href="#path-1"></use>
</mask>
</defs>
<g id="pms_modify_dont_support_overlap" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Group-4" transform="translate(0.000000, 2.000000)">
<polygon id="4" fill="#000" transform="translate(11.000000, 12.000000) scale(1, -1) translate(-11.000000, -12.000000) " points="2 3.34399175e-13 20 3.34399175e-13 13 17.5384615 22 24 0 24 9 17.5384615"></polygon>
<rect id="Rectangle" fill="#000" x="1" y="0" width="1" height="24"></rect>
<rect id="Rectangle-Copy-9" fill="#000" x="3" y="0" width="1" height="24"></rect>
<rect id="Rectangle-Copy-10" fill="#000" x="5" y="0" width="1" height="24"></rect>
<rect id="Rectangle-Copy-11" fill="#000" x="7" y="0" width="1" height="24"></rect>
<rect id="Rectangle-Copy-24" fill="#000" x="14" y="0" width="1" height="24"></rect>
<rect id="Rectangle-Copy-25" fill="#000" x="16" y="10" width="1" height="14"></rect>
<rect id="Rectangle-Copy-27" fill="#000" x="18" y="12" width="1" height="12"></rect>
<rect id="Rectangle-Copy-28" fill="#000" x="20" y="12" width="1" height="12"></rect>
<use id="Oval" stroke="#000" mask="url(#mask-2)" stroke-width="2" stroke-dasharray="2,2" xlink:href="#path-1"></use>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="28px" height="28px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
<title>pms_modify_overlaps</title>
<desc>Created with Sketch.</desc>
<defs>
<polygon id="path-1" points="1 25 6 9 4 2 18 2 25 2 22 8.27272727 28 25 21 25"></polygon>
<mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="27" height="23" fill="white">
<use xlink:href="#path-1"></use>
</mask>
</defs>
<g id="pms_modify_overlaps" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M10.1109336,2 L12.6179373,9.07692308 L7.60392993,25 L-4.79616347e-14,25 L4.84615385,9.07692308 L2.42307692,2 L10.1109336,2 Z" id="Combined-Shape" fill="#000"></path>
<path d="M17.717,14.213 L18.026,15.23 L9.635,25 L8.453,25 L17.717,14.213 Z M18.427,16.547 L18.737,17.565 L12.351,25 L11.169,25 L18.427,16.547 Z M19.138,18.882 L19.447,19.899 L15.067,25 L13.885,25 L19.138,18.882 Z M19.849,21.218 L20.158,22.234 L17.783,25 L16.601,25 L19.849,21.218 Z M20.559,23.553 L20.869,24.569 L20.499,25 L19.317,25 L20.559,23.553 Z M17.006,11.878 L17.315,12.894 L8,23.743 L8.684,21.57 L17.006,11.878 Z M16.295,9.544 L16.605,10.559 L9.572,18.749 L10.256,16.577 L16.295,9.544 Z M17.594,4.867 L16.81,7.157 L11.144,13.756 L11.828,11.583 L17.594,4.867 Z M18.522,2 L12.567,8.935 L12.222,7.961 L17.341,2 L18.522,2 Z M15.806,2 L11.774,6.696 L11.429,5.722 L14.625,2 L15.806,2 Z M13.091,2 L10.981,4.458 L10.635,3.483 L11.909,2 L13.091,2 Z M10.375,2 L10.188,2.219 L10.1109336,2 L10.375,2 Z" id="Combined-Shape" fill="#000"></path>
<use id="Path-4" stroke="#000" mask="url(#mask-2)" stroke-width="2" stroke-dasharray="2,2" xlink:href="#path-1"></use>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
<title>pms_Normal</title>
<desc>Created with Sketch.</desc>
<g id="pms_Normal" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<polygon id="Path" fill="#000" points="6.30769231 3 21.6923077 3 19.3846154 9.76923077 24 25 4 25 8.61538462 9.76923077"></polygon>
</g>
</svg>

After

Width:  |  Height:  |  Size: 559 B

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 57.1 (83088) - https://sketch.com -->
<title>pms_printassupport</title>
<desc>Created with Sketch.</desc>
<g id="pms_printassupport" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Print-as-support" transform="translate(4.000000, 3.000000)">
<g id="Group">
<path d="M0.833,19.251 L0.833333333,22 L-7.59392549e-14,22 L0.833,19.251 Z M4.166,8.251 L4.16666667,22 L2.5,22 L2.5,13.749 L4.166,8.251 Z M7.5,0 L7.5,22 L5.83333333,22 L5.83333333,0 L7.5,0 Z M10.8333333,0 L10.8333333,22 L9.16666667,22 L9.16666667,0 L10.8333333,0 Z M15.833,8.251 L17.5,13.751 L17.5,22 L15.8333333,22 L15.833,8.251 Z M14.1666667,0 L14.1666667,22 L12.5,22 L12.5,0 L14.1666667,0 Z M19.166,19.248 L20,22 L19.1666667,22 L19.166,19.248 Z M17.5,0 L17.5,0.563 L15.833,5.452 L15.8333333,0 L17.5,0 Z M4.16666667,0 L4.166,5.452 L2.5,0.566 L2.5,0 L4.16666667,0 Z" id="Combined-Shape" fill="#000"></path>
<g transform="translate(0.833333, 0.000000)"></g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -240,7 +240,7 @@ QtObject
} }
Behavior on color { ColorAnimation { duration: 50; } } Behavior on color { ColorAnimation { duration: 50; } }
border.width: (control.hasOwnProperty("needBorder") && control.needBorder) ? (control.checked ? Theme.getSize("thick_lining").width : Theme.getSize("default_lining").width) : 0 border.width: (control.hasOwnProperty("needBorder") && control.needBorder) ? Theme.getSize("default_lining").width : 0
border.color: control.checked ? Theme.getColor("icon") : Theme.getColor("lining") border.color: control.checked ? Theme.getColor("icon") : Theme.getColor("lining")
} }
} }