Merge branch 'master' of github.com:Ultimaker/Cura

This commit is contained in:
Jaime van Kessel 2016-06-23 16:39:09 +02:00
commit 85942583b1
7 changed files with 94 additions and 70 deletions

View File

@ -3,36 +3,44 @@ from UM.Application import Application
from UM.Settings.SettingInstance import SettingInstance
from UM.Logger import Logger
import UM.Settings.Models
from cura.SettingOverrideDecorator import SettingOverrideDecorator
## The per object setting visibility handler ensures that only setting defintions that have a matching instance Container
# are returned as visible.
class PerObjectSettingVisibilityHandler(QObject):
class PerObjectSettingVisibilityHandler(UM.Settings.Models.SettingVisibilityHandler):
def __init__(self, parent = None, *args, **kwargs):
super().__init__(parent = parent, *args, **kwargs)
self._selected_object_id = None
visibilityChanged = pyqtSignal()
self._selected_object_id = None
self._node = None
self._stack = None
def setSelectedObjectId(self, id):
self._selected_object_id = id
self.visibilityChanged.emit()
if id != self._selected_object_id:
self._selected_object_id = id
self._node = Application.getInstance().getController().getScene().findObject(self._selected_object_id)
if self._node:
self._stack = self._node.callDecoration("getStack")
self.visibilityChanged.emit()
@pyqtProperty("quint64", fset = setSelectedObjectId)
def selectedObjectId(self):
pass
return self._selected_object_id
def setVisible(self, visible):
node = Application.getInstance().getController().getScene().findObject(self._selected_object_id)
if not node:
if not self._node:
return
stack = node.callDecoration("getStack")
if not stack:
node.addDecorator(SettingOverrideDecorator())
stack = node.callDecoration("getStack")
settings = stack.getTop()
all_instances = settings.findInstances(**{})
if not self._stack:
self._node.addDecorator(SettingOverrideDecorator())
self._stack = self._node.callDecoration("getStack")
settings = self._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
@ -41,13 +49,12 @@ class PerObjectSettingVisibilityHandler(QObject):
settings.removeInstance(instance.definition.key)
visibility_changed = True
# Add all instances that are not added, but are in visiblity list
# Add all instances that are not added, but are in visibility 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))
definition = self._stack.getSettingDefinition(item)
if definition:
settings.addInstance(SettingInstance(definition, 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)
@ -57,20 +64,16 @@ class PerObjectSettingVisibilityHandler(QObject):
def getVisible(self):
visible_settings = set()
node = Application.getInstance().getController().getScene().findObject(self._selected_object_id)
if not node:
if not self._node:
return visible_settings
stack = node.callDecoration("getStack")
if not stack:
if not self._stack:
return visible_settings
settings = stack.getTop()
settings = self._stack.getTop()
if not settings:
return visible_settings
all_instances = settings.findInstances(**{})
for instance in all_instances:
visible_settings.add(instance.definition.key)
visible_settings = set(map(lambda i: i.definition.key, settings.findInstances()))
return visible_settings

View File

@ -153,6 +153,8 @@ Item {
{
id: addedSettingsModel;
containerId: Cura.MachineManager.activeDefinitionId
expanded: [ "*" ]
visibilityHandler: Cura.PerObjectSettingVisibilityHandler
{
selectedObjectId: UM.ActiveTool.properties.getValue("SelectedObjectId")
@ -215,9 +217,8 @@ Item {
style: ButtonStyle
{
background: Rectangle
background: Item
{
color: control.hovered ? control.parent.style.controlHighlightColor : control.parent.style.controlColor;
UM.RecolorImage
{
anchors.verticalCenter: parent.verticalCenter
@ -340,6 +341,8 @@ Item {
"settable_per_mesh": true
}
visibilityHandler: UM.SettingPreferenceVisibilityHandler {}
expanded: [ "*" ]
exclude: [ "machine_settings" ]
}
delegate:Loader
{

View File

@ -92,7 +92,12 @@ class SliceInfo(Extension):
}
for container in global_container_stack.getContainers():
container_id = container.getId()
container_serialized = container.serialize()
try:
container_serialized = container.serialize()
except NotImplementedError:
Logger.log("w", "Container %s could not be serialized!", container_id)
continue
if container_serialized:
submitted_data["settings_%s" %(container_id)] = container_serialized # This can be anything, eg. INI, JSON, etc.
else:

View File

@ -36,13 +36,27 @@ UM.ManagementPage
renameEnabled: base.currentItem != null
activateEnabled: base.currentItem != null && base.currentItem.id != Cura.MachineManager.activeMachineId
Flow
Item
{
anchors.fill: parent;
spacing: UM.Theme.getSize("default_margin").height;
visible: base.currentItem != null
anchors.fill: parent
Label
{
id: machineName
text: base.currentItem && base.currentItem.name ? base.currentItem.name : ""
font: UM.Theme.getFont("large")
width: parent.width
elide: Text.ElideRight
}
Row
{
id: machineActions
anchors.left: parent.left
anchors.top: machineName.bottom
anchors.topMargin: UM.Theme.getSize("default_margin").height
Repeater
{
id: machineActionRepeater
@ -72,16 +86,18 @@ UM.ManagementPage
}
}
Label
Row
{
text: base.currentItem && base.currentItem.name ? base.currentItem.name : ""
font: UM.Theme.getFont("large")
width: parent.width
elide: Text.ElideRight
}
anchors.top: machineActions.visible ? machineActions.bottom : machineActions.anchors.top
anchors.topMargin: UM.Theme.getSize("default_margin").height
anchors.left: parent.left
anchors.right: parent.right
Label { text: catalog.i18nc("@label", "Type"); width: parent.width * 0.2; }
Label { text: base.currentItem && base.currentItem.typeName ? base.currentItem.typeName : ""; width: parent.width * 0.7; }
spacing: UM.Theme.getSize("default_margin").height
Label { text: catalog.i18nc("@label", "Type") }
Label { text: base.currentItem ? base.currentItem.metadata.definition_name : "" }
}
UM.I18nCatalog { id: catalog; name: "uranium"; }

View File

@ -34,34 +34,34 @@ Item {
property string tooltipText:
{
var affects = settingDefinitionsModel.getRequiredBy(definition.key, "value")
var affected_by = settingDefinitionsModel.getRequires(definition.key, "value")
var affects = settingDefinitionsModel.getRequiredBy(definition.key, "value")
var affected_by = settingDefinitionsModel.getRequires(definition.key, "value")
var affected_by_list = ""
for(var i in affected_by)
{
affected_by_list += "<li>%1</li>\n".arg(affected_by[i].label)
}
var affected_by_list = ""
for(var i in affected_by)
{
affected_by_list += "<li>%1</li>\n".arg(affected_by[i].label)
}
var affects_list = ""
for(var i in affects)
{
affects_list += "<li>%1</li>\n".arg(affects[i].label)
}
var affects_list = ""
for(var i in affects)
{
affects_list += "<li>%1</li>\n".arg(affects[i].label)
}
var tooltip = "<b>%1</b>\n<p>%2</p>".arg(definition.label).arg(definition.description)
var tooltip = "<b>%1</b>\n<p>%2</p>".arg(definition.label).arg(definition.description)
if(affects_list != "")
{
tooltip += "<br/><b>%1</b>\n<ul>\n%2</ul>".arg(catalog.i18nc("@label", "Affects")).arg(affects_list)
}
if(affects_list != "")
{
tooltip += "<br/><b>%1</b>\n<ul>\n%2</ul>".arg(catalog.i18nc("@label", "Affects")).arg(affects_list)
}
if(affected_by_list != "")
{
tooltip += "<br/><b>%1</b>\n<ul>\n%2</ul>".arg(catalog.i18nc("@label", "Affected By")).arg(affected_by_list)
}
if(affected_by_list != "")
{
tooltip += "<br/><b>%1</b>\n<ul>\n%2</ul>".arg(catalog.i18nc("@label", "Affected By")).arg(affected_by_list)
}
return tooltip
return tooltip
}
MouseArea
@ -236,7 +236,7 @@ Item {
{
id: controlContainer;
enabled: provider.isValueUsed
enabled: propertyProvider.isValueUsed
anchors.right: parent.right;
anchors.rightMargin: UM.Theme.getSize("default_margin").width

View File

@ -19,11 +19,6 @@ SettingItem
border.width: UM.Theme.getSize("default_lining").width
border.color: !enabled ? UM.Theme.getColor("setting_control_disabled_border") : hovered ? UM.Theme.getColor("setting_control_border_highlight") : UM.Theme.getColor("setting_control_border")
property variant parentValue: value //From parent loader
function notifyReset() {
input.text = format(parentValue)
}
color: {
if (!enabled)
{

View File

@ -29,8 +29,10 @@ ScrollView
model: UM.SettingDefinitionsModel {
id: definitionsModel;
containerId: Cura.MachineManager.activeDefinitionId
exclude: ["machine_settings"]
visibilityHandler: UM.SettingPreferenceVisibilityHandler { }
exclude: ["machine_settings"]
expanded: Printer.expandedCategories
onExpandedChanged: Printer.setExpandedCategories(expanded)
filter:
{