mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-14 04:18:03 +08:00
Merge branch 'master' of https://github.com/Ultimaker/Cura
This commit is contained in:
commit
545678e18b
@ -14,8 +14,8 @@ from UM.Application import Application
|
|||||||
class SettingOverrideDecorator(SceneNodeDecorator):
|
class SettingOverrideDecorator(SceneNodeDecorator):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._stack = ContainerStack(id = "SettingOverrideStack")
|
self._stack = ContainerStack(stack_id = "SettingOverrideStack")
|
||||||
self._instance = InstanceContainer(id = "SettingOverrideInstanceContainer")
|
self._instance = InstanceContainer(container_id = "SettingOverrideInstanceContainer")
|
||||||
self._stack.addContainer(self._instance)
|
self._stack.addContainer(self._instance)
|
||||||
|
|
||||||
Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerStackChanged)
|
Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerStackChanged)
|
||||||
|
@ -16,13 +16,13 @@ UM.TooltipArea
|
|||||||
width: childrenRect.width;
|
width: childrenRect.width;
|
||||||
height: childrenRect.height;
|
height: childrenRect.height;
|
||||||
|
|
||||||
Button
|
CheckBox
|
||||||
{
|
{
|
||||||
id: check
|
id: check
|
||||||
|
|
||||||
text: definition.label
|
text: definition.label
|
||||||
|
|
||||||
//onClicked: delegateItem.settingsModel.setSettingVisible(model.key, checked);
|
onClicked: addedSettingsModel.setVisible(model.key, checked);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,76 @@
|
|||||||
|
from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal
|
||||||
|
from UM.Application import Application
|
||||||
|
from UM.Settings.SettingInstance import SettingInstance
|
||||||
|
from UM.Logger import Logger
|
||||||
|
|
||||||
|
from cura.SettingOverrideDecorator import SettingOverrideDecorator
|
||||||
|
|
||||||
|
|
||||||
|
class PerObjectSettingVisibilityHandler(QObject):
|
||||||
|
def __init__(self, parent = None, *args, **kwargs):
|
||||||
|
super().__init__(parent = parent, *args, **kwargs)
|
||||||
|
self._selected_object_id = None
|
||||||
|
|
||||||
|
visibilityChanged = pyqtSignal()
|
||||||
|
|
||||||
|
def setSelectedObjectId(self, id):
|
||||||
|
self._selected_object_id = id
|
||||||
|
self.visibilityChanged.emit()
|
||||||
|
|
||||||
|
@pyqtProperty("quint64", fset = setSelectedObjectId)
|
||||||
|
def selectedObjectId(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def setVisible(self, visible):
|
||||||
|
node = Application.getInstance().getController().getScene().findObject(self._selected_object_id)
|
||||||
|
if not node:
|
||||||
|
return
|
||||||
|
stack = node.callDecoration("getStack")
|
||||||
|
if not stack:
|
||||||
|
node.addDecorator(SettingOverrideDecorator())
|
||||||
|
stack = node.callDecoration("getStack")
|
||||||
|
|
||||||
|
settings = stack.getTop()
|
||||||
|
all_instances = settings.findInstances(**{})
|
||||||
|
visibility_changed = False # Flag to check if at the end the signal needs to be emitted
|
||||||
|
|
||||||
|
# Remove all instances that are not in visibility list
|
||||||
|
for instance in all_instances:
|
||||||
|
if instance.definition.key not in visible:
|
||||||
|
settings.removeInstance(instance.definition.key)
|
||||||
|
visibility_changed = True
|
||||||
|
|
||||||
|
# Add all instances that are not added, but are in visiblity list
|
||||||
|
for item in visible:
|
||||||
|
if not settings.getInstance(item):
|
||||||
|
definition_container = Application.getInstance().getGlobalContainerStack().getBottom()
|
||||||
|
definitions = definition_container.findDefinitions(key = item)
|
||||||
|
if definitions:
|
||||||
|
settings.addInstance(SettingInstance(definitions[0], settings))
|
||||||
|
visibility_changed = True
|
||||||
|
else:
|
||||||
|
Logger.log("w", "Unable to add instance (%s) to perobject visibility because we couldn't find the matching definition", item)
|
||||||
|
|
||||||
|
if visibility_changed:
|
||||||
|
self.visibilityChanged.emit()
|
||||||
|
#settings.addInstance(SettingInstance())
|
||||||
|
|
||||||
|
def getVisible(self):
|
||||||
|
visible_settings = set()
|
||||||
|
node = Application.getInstance().getController().getScene().findObject(self._selected_object_id)
|
||||||
|
if not node:
|
||||||
|
return visible_settings
|
||||||
|
|
||||||
|
stack = node.callDecoration("getStack")
|
||||||
|
if not stack:
|
||||||
|
return visible_settings
|
||||||
|
|
||||||
|
settings = stack.getTop()
|
||||||
|
if not settings:
|
||||||
|
return visible_settings
|
||||||
|
|
||||||
|
all_instances = settings.findInstances(**{})
|
||||||
|
for instance in all_instances:
|
||||||
|
visible_settings.add(instance.definition.key)
|
||||||
|
return visible_settings
|
||||||
|
|
@ -13,21 +13,14 @@ from UM.Scene.SceneNode import SceneNode
|
|||||||
from . import SettingOverrideModel
|
from . import SettingOverrideModel
|
||||||
|
|
||||||
class PerObjectSettingsModel(ListModel):
|
class PerObjectSettingsModel(ListModel):
|
||||||
IdRole = Qt.UserRole + 1
|
IdRole = Qt.UserRole + 1 # ID of the node
|
||||||
XRole = Qt.UserRole + 2
|
|
||||||
YRole = Qt.UserRole + 3
|
|
||||||
MaterialRole = Qt.UserRole + 4
|
|
||||||
ProfileRole = Qt.UserRole + 5
|
|
||||||
SettingsRole = Qt.UserRole + 6
|
|
||||||
|
|
||||||
def __init__(self, parent = None):
|
def __init__(self, parent = None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self._scene = Application.getInstance().getController().getScene()
|
self._scene = Application.getInstance().getController().getScene()
|
||||||
self._root = self._scene.getRoot()
|
self._root = self._scene.getRoot()
|
||||||
self.addRoleName(self.IdRole,"id")
|
self.addRoleName(self.IdRole,"id")
|
||||||
self.addRoleName(self.MaterialRole, "material")
|
|
||||||
self.addRoleName(self.ProfileRole, "profile")
|
|
||||||
self.addRoleName(self.SettingsRole, "settings")
|
|
||||||
self._updateModel()
|
self._updateModel()
|
||||||
|
|
||||||
@pyqtSlot("quint64", str)
|
@pyqtSlot("quint64", str)
|
||||||
@ -48,7 +41,7 @@ class PerObjectSettingsModel(ListModel):
|
|||||||
node.removeDecorator(ProfileOverrideDecorator)'''
|
node.removeDecorator(ProfileOverrideDecorator)'''
|
||||||
|
|
||||||
@pyqtSlot("quint64", str)
|
@pyqtSlot("quint64", str)
|
||||||
def addSettingOverride(self, object_id, key):
|
def addOverride(self, object_id, key):
|
||||||
machine = Application.getInstance().getMachineManager().getActiveMachineInstance()
|
machine = Application.getInstance().getMachineManager().getActiveMachineInstance()
|
||||||
if not machine:
|
if not machine:
|
||||||
return
|
return
|
||||||
@ -60,7 +53,7 @@ class PerObjectSettingsModel(ListModel):
|
|||||||
node.callDecoration("addSetting", key)
|
node.callDecoration("addSetting", key)
|
||||||
|
|
||||||
@pyqtSlot("quint64", str)
|
@pyqtSlot("quint64", str)
|
||||||
def removeSettingOverride(self, object_id, key):
|
def removerOverride(self, object_id, key):
|
||||||
node = self._scene.findObject(object_id)
|
node = self._scene.findObject(object_id)
|
||||||
node.callDecoration("removeSetting", key)
|
node.callDecoration("removeSetting", key)
|
||||||
|
|
||||||
@ -69,18 +62,14 @@ class PerObjectSettingsModel(ListModel):
|
|||||||
|
|
||||||
def _updateModel(self):
|
def _updateModel(self):
|
||||||
self.clear()
|
self.clear()
|
||||||
|
|
||||||
for node in BreadthFirstIterator(self._root):
|
for node in BreadthFirstIterator(self._root):
|
||||||
if type(node) is not SceneNode or not node.isSelectable():
|
if type(node) is not SceneNode or not node.isSelectable():
|
||||||
continue
|
continue
|
||||||
node_profile = node.callDecoration("getProfile")
|
|
||||||
if not node_profile:
|
|
||||||
node_profile = "global"
|
|
||||||
else:
|
|
||||||
node_profile = node_profile.getName()
|
|
||||||
|
|
||||||
self.appendItem({
|
node_stack = node.callDecoration("getStack")
|
||||||
"id": id(node),
|
|
||||||
"material": "",
|
if not node_stack:
|
||||||
"profile": node_profile,
|
self.appendItem({
|
||||||
"settings": SettingOverrideModel.SettingOverrideModel(node)
|
"id": id(node)
|
||||||
})
|
})
|
||||||
|
@ -20,73 +20,38 @@ Item {
|
|||||||
width: childrenRect.width;
|
width: childrenRect.width;
|
||||||
height: childrenRect.height;
|
height: childrenRect.height;
|
||||||
|
|
||||||
Column {
|
Column
|
||||||
|
{
|
||||||
id: items
|
id: items
|
||||||
anchors.top: parent.top;
|
anchors.top: parent.top;
|
||||||
anchors.left: parent.left;
|
anchors.left: parent.left;
|
||||||
|
|
||||||
spacing: UM.Theme.getSize("default_margin").height;
|
spacing: UM.Theme.getSize("default_margin").height;
|
||||||
|
height: childrenRect.height;
|
||||||
Column {
|
ListView
|
||||||
id: customisedSettings
|
{
|
||||||
|
id: contents
|
||||||
spacing: UM.Theme.getSize("default_lining").height;
|
spacing: UM.Theme.getSize("default_lining").height;
|
||||||
width: UM.Theme.getSize("setting").width + UM.Theme.getSize("setting").height/2;
|
height: childrenRect.height;
|
||||||
|
|
||||||
Repeater {
|
model: UM.SettingDefinitionsModel {
|
||||||
id: settings;
|
id: addedSettingsModel;
|
||||||
|
containerId: Cura.MachineManager.activeDefinitionId
|
||||||
model: UM.ActiveTool.properties.getValue("Model").getItem(base.currentIndex).settings
|
visibilityHandler: Cura.PerObjectSettingVisibilityHandler {
|
||||||
|
selectedObjectId: UM.ActiveTool.properties.getValue("Model").getItem(base.currentIndex).id
|
||||||
UM.SettingItem {
|
|
||||||
width: UM.Theme.getSize("setting").width;
|
|
||||||
height: UM.Theme.getSize("setting").height;
|
|
||||||
|
|
||||||
name: model.label;
|
|
||||||
type: model.type;
|
|
||||||
value: model.value;
|
|
||||||
description: model.description;
|
|
||||||
unit: model.unit;
|
|
||||||
valid: model.valid;
|
|
||||||
visible: !model.global_only
|
|
||||||
options: model.options
|
|
||||||
indent: false
|
|
||||||
|
|
||||||
style: UM.Theme.styles.setting_item;
|
|
||||||
|
|
||||||
onItemValueChanged: {
|
|
||||||
settings.model.setSettingValue(model.key, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
Button
|
|
||||||
{
|
|
||||||
anchors.left: parent.right;
|
|
||||||
|
|
||||||
width: UM.Theme.getSize("setting").height;
|
|
||||||
height: UM.Theme.getSize("setting").height;
|
|
||||||
|
|
||||||
onClicked: UM.ActiveTool.properties.getValue("Model").removeSettingOverride(UM.ActiveTool.properties.getValue("Model").getItem(base.currentIndex).id, model.key)
|
|
||||||
|
|
||||||
style: ButtonStyle
|
|
||||||
{
|
|
||||||
background: Rectangle
|
|
||||||
{
|
|
||||||
color: control.hovered ? control.parent.style.controlHighlightColor : control.parent.style.controlColor;
|
|
||||||
UM.RecolorImage
|
|
||||||
{
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
width: parent.width/2
|
|
||||||
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("cross1")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delegate:Button
|
||||||
|
{
|
||||||
|
anchors.left: parent.right;
|
||||||
|
|
||||||
|
width: 150
|
||||||
|
height:50
|
||||||
|
|
||||||
|
text: model.label
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Button
|
Button
|
||||||
@ -184,6 +149,7 @@ Item {
|
|||||||
{
|
{
|
||||||
"global_only": false
|
"global_only": false
|
||||||
}
|
}
|
||||||
|
visibilityHandler: UM.SettingPreferenceVisibilityHandler {}
|
||||||
}
|
}
|
||||||
delegate:Loader
|
delegate:Loader
|
||||||
{
|
{
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
# Uranium is released under the terms of the AGPLv3 or higher.
|
# Uranium is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
from . import PerObjectSettingsTool
|
from . import PerObjectSettingsTool
|
||||||
|
from . import PerObjectSettingVisibilityHandler
|
||||||
|
from PyQt5.QtQml import qmlRegisterType
|
||||||
|
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
i18n_catalog = i18nCatalog("cura")
|
i18n_catalog = i18nCatalog("cura")
|
||||||
@ -25,4 +27,6 @@ def getMetaData():
|
|||||||
}
|
}
|
||||||
|
|
||||||
def register(app):
|
def register(app):
|
||||||
|
qmlRegisterType(PerObjectSettingVisibilityHandler.PerObjectSettingVisibilityHandler, "Cura", 1, 0,
|
||||||
|
"PerObjectSettingVisibilityHandler")
|
||||||
return { "tool": PerObjectSettingsTool.PerObjectSettingsTool() }
|
return { "tool": PerObjectSettingsTool.PerObjectSettingsTool() }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user