mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-13 10:09:02 +08:00
Merge branch '2.3'
This commit is contained in:
commit
ce868e2865
@ -150,6 +150,7 @@ class PrinterOutputDevice(QObject, OutputDevice):
|
|||||||
@pyqtSlot(int)
|
@pyqtSlot(int)
|
||||||
def setTargetBedTemperature(self, temperature):
|
def setTargetBedTemperature(self, temperature):
|
||||||
self._setTargetBedTemperature(temperature)
|
self._setTargetBedTemperature(temperature)
|
||||||
|
if self._target_bed_temperature != temperature:
|
||||||
self._target_bed_temperature = temperature
|
self._target_bed_temperature = temperature
|
||||||
self.targetBedTemperatureChanged.emit()
|
self.targetBedTemperatureChanged.emit()
|
||||||
|
|
||||||
@ -212,6 +213,7 @@ class PrinterOutputDevice(QObject, OutputDevice):
|
|||||||
# This simply sets the bed temperature, but ensures that a signal is emitted.
|
# This simply sets the bed temperature, but ensures that a signal is emitted.
|
||||||
# /param temperature temperature of the bed.
|
# /param temperature temperature of the bed.
|
||||||
def _setBedTemperature(self, temperature):
|
def _setBedTemperature(self, temperature):
|
||||||
|
if self._bed_temperature != temperature:
|
||||||
self._bed_temperature = temperature
|
self._bed_temperature = temperature
|
||||||
self.bedTemperatureChanged.emit()
|
self.bedTemperatureChanged.emit()
|
||||||
|
|
||||||
@ -228,6 +230,8 @@ class PrinterOutputDevice(QObject, OutputDevice):
|
|||||||
@pyqtSlot(int, int)
|
@pyqtSlot(int, int)
|
||||||
def setTargetHotendTemperature(self, index, temperature):
|
def setTargetHotendTemperature(self, index, temperature):
|
||||||
self._setTargetHotendTemperature(index, temperature)
|
self._setTargetHotendTemperature(index, temperature)
|
||||||
|
|
||||||
|
if self._target_hotend_temperatures[index] != temperature:
|
||||||
self._target_hotend_temperatures[index] = temperature
|
self._target_hotend_temperatures[index] = temperature
|
||||||
self.targetHotendTemperaturesChanged.emit()
|
self.targetHotendTemperaturesChanged.emit()
|
||||||
|
|
||||||
@ -251,6 +255,7 @@ class PrinterOutputDevice(QObject, OutputDevice):
|
|||||||
# /param index Index of the hotend
|
# /param index Index of the hotend
|
||||||
# /param temperature temperature of the hotend (in deg C)
|
# /param temperature temperature of the hotend (in deg C)
|
||||||
def _setHotendTemperature(self, index, temperature):
|
def _setHotendTemperature(self, index, temperature):
|
||||||
|
if self._hotend_temperatures[index] != temperature:
|
||||||
self._hotend_temperatures[index] = temperature
|
self._hotend_temperatures[index] = temperature
|
||||||
self.hotendTemperaturesChanged.emit()
|
self.hotendTemperaturesChanged.emit()
|
||||||
|
|
||||||
@ -267,7 +272,6 @@ class PrinterOutputDevice(QObject, OutputDevice):
|
|||||||
self._material_ids[index] = material_id
|
self._material_ids[index] = material_id
|
||||||
self.materialIdChanged.emit(index, material_id)
|
self.materialIdChanged.emit(index, material_id)
|
||||||
|
|
||||||
|
|
||||||
@pyqtProperty("QVariantList", notify = hotendIdChanged)
|
@pyqtProperty("QVariantList", notify = hotendIdChanged)
|
||||||
def hotendIds(self):
|
def hotendIds(self):
|
||||||
return self._hotend_ids
|
return self._hotend_ids
|
||||||
@ -302,6 +306,7 @@ class PrinterOutputDevice(QObject, OutputDevice):
|
|||||||
## Set the connection state of this output device.
|
## Set the connection state of this output device.
|
||||||
# /param connection_state ConnectionState enum.
|
# /param connection_state ConnectionState enum.
|
||||||
def setConnectionState(self, connection_state):
|
def setConnectionState(self, connection_state):
|
||||||
|
if self._connection_state != connection_state:
|
||||||
self._connection_state = connection_state
|
self._connection_state = connection_state
|
||||||
self.connectionStateChanged.emit(self._id)
|
self.connectionStateChanged.emit(self._id)
|
||||||
|
|
||||||
@ -351,6 +356,7 @@ class PrinterOutputDevice(QObject, OutputDevice):
|
|||||||
if self._head_z != z:
|
if self._head_z != z:
|
||||||
self._head_z = z
|
self._head_z = z
|
||||||
position_changed = True
|
position_changed = True
|
||||||
|
|
||||||
if position_changed:
|
if position_changed:
|
||||||
self.headPositionChanged.emit()
|
self.headPositionChanged.emit()
|
||||||
|
|
||||||
|
@ -610,6 +610,7 @@ class ContainerManager(QObject):
|
|||||||
# are also correctly created.
|
# are also correctly created.
|
||||||
with open(containers[0].getPath(), encoding="utf-8") as f:
|
with open(containers[0].getPath(), encoding="utf-8") as f:
|
||||||
duplicated_container.deserialize(f.read())
|
duplicated_container.deserialize(f.read())
|
||||||
|
duplicated_container.setDirty(True)
|
||||||
self._container_registry.addContainer(duplicated_container)
|
self._container_registry.addContainer(duplicated_container)
|
||||||
|
|
||||||
# Factory function, used by QML
|
# Factory function, used by QML
|
||||||
|
@ -22,35 +22,6 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
|
|||||||
super().__init__(container_id, *args, **kwargs)
|
super().__init__(container_id, *args, **kwargs)
|
||||||
self._inherited_files = []
|
self._inherited_files = []
|
||||||
|
|
||||||
## Overridden from InstanceContainer
|
|
||||||
def duplicate(self, new_id, new_name = None):
|
|
||||||
base_file = self.getMetaDataEntry("base_file", None)
|
|
||||||
|
|
||||||
if base_file != self.id:
|
|
||||||
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = base_file)
|
|
||||||
if containers:
|
|
||||||
new_basefile = containers[0].duplicate(self.getMetaDataEntry("brand") + "_" + new_id, new_name)
|
|
||||||
base_file = new_basefile.id
|
|
||||||
UM.Settings.ContainerRegistry.getInstance().addContainer(new_basefile)
|
|
||||||
|
|
||||||
new_id = self.getMetaDataEntry("brand") + "_" + new_id + "_" + self.getDefinition().getId()
|
|
||||||
variant = self.getMetaDataEntry("variant")
|
|
||||||
if variant:
|
|
||||||
variant_containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = variant)
|
|
||||||
if variant_containers:
|
|
||||||
new_id += "_" + variant_containers[0].getName().replace(" ", "_")
|
|
||||||
has_base_file = True
|
|
||||||
else:
|
|
||||||
has_base_file = False
|
|
||||||
|
|
||||||
new_id = UM.Settings.ContainerRegistry.getInstance().createUniqueName("material", self._id, new_id, "")
|
|
||||||
result = super().duplicate(new_id, new_name)
|
|
||||||
if has_base_file:
|
|
||||||
result.setMetaDataEntry("base_file", base_file)
|
|
||||||
else:
|
|
||||||
result.setMetaDataEntry("base_file", result.id)
|
|
||||||
return result
|
|
||||||
|
|
||||||
def getInheritedFiles(self):
|
def getInheritedFiles(self):
|
||||||
return self._inherited_files
|
return self._inherited_files
|
||||||
|
|
||||||
@ -63,6 +34,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
|
|||||||
container._read_only = read_only # prevent loop instead of calling setReadOnly
|
container._read_only = read_only # prevent loop instead of calling setReadOnly
|
||||||
|
|
||||||
## Overridden from InstanceContainer
|
## Overridden from InstanceContainer
|
||||||
|
# set the meta data for all machine / variant combinations
|
||||||
def setMetaDataEntry(self, key, value):
|
def setMetaDataEntry(self, key, value):
|
||||||
if self.isReadOnly():
|
if self.isReadOnly():
|
||||||
return
|
return
|
||||||
@ -103,10 +75,17 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
|
|||||||
#
|
#
|
||||||
# basefile = self.getMetaDataEntry("base_file", self._id) #if basefile is self.id, this is a basefile.
|
# basefile = self.getMetaDataEntry("base_file", self._id) #if basefile is self.id, this is a basefile.
|
||||||
# for container in UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(base_file = basefile):
|
# for container in UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(base_file = basefile):
|
||||||
# container._dirty = True
|
# if not container.isReadOnly():
|
||||||
|
# container.setDirty(True)
|
||||||
|
|
||||||
## Overridden from InstanceContainer
|
## Overridden from InstanceContainer
|
||||||
|
# base file: global settings + supported machines
|
||||||
|
# machine / variant combination: only changes for itself.
|
||||||
def serialize(self):
|
def serialize(self):
|
||||||
|
if self._read_only:
|
||||||
|
Logger.log("w", "Serializing read-only container [%s], probably a programming error." % self.id)
|
||||||
|
return
|
||||||
|
|
||||||
registry = UM.Settings.ContainerRegistry.getInstance()
|
registry = UM.Settings.ContainerRegistry.getInstance()
|
||||||
|
|
||||||
base_file = self.getMetaDataEntry("base_file", "")
|
base_file = self.getMetaDataEntry("base_file", "")
|
||||||
@ -114,7 +93,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
|
|||||||
# Since we create an instance of XmlMaterialProfile for each machine and nozzle in the profile,
|
# Since we create an instance of XmlMaterialProfile for each machine and nozzle in the profile,
|
||||||
# we should only serialize the "base" material definition, since that can then take care of
|
# we should only serialize the "base" material definition, since that can then take care of
|
||||||
# serializing the machine/nozzle specific profiles.
|
# serializing the machine/nozzle specific profiles.
|
||||||
raise NotImplementedError("Cannot serialize non-root XML materials")
|
raise NotImplementedError("Ignoring serializing non-root XML materials, the data is contained in the base material")
|
||||||
|
|
||||||
builder = ET.TreeBuilder()
|
builder = ET.TreeBuilder()
|
||||||
|
|
||||||
|
@ -129,8 +129,7 @@ UM.ManagementPage
|
|||||||
enabled: base.currentItem != null && base.currentItem.id != Cura.MachineManager.activeMaterialId
|
enabled: base.currentItem != null && base.currentItem.id != Cura.MachineManager.activeMaterialId
|
||||||
onClicked: Cura.MachineManager.setActiveMaterial(base.currentItem.id)
|
onClicked: Cura.MachineManager.setActiveMaterial(base.currentItem.id)
|
||||||
},
|
},
|
||||||
// apparently visible does not work on OS X
|
Button
|
||||||
/*Button
|
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@action:button", "Duplicate");
|
text: catalog.i18nc("@action:button", "Duplicate");
|
||||||
iconName: "list-add";
|
iconName: "list-add";
|
||||||
@ -148,7 +147,6 @@ UM.ManagementPage
|
|||||||
Cura.MachineManager.setActiveMaterial(material_id)
|
Cura.MachineManager.setActiveMaterial(material_id)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
*/
|
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@action:button", "Remove");
|
text: catalog.i18nc("@action:button", "Remove");
|
||||||
@ -156,15 +154,13 @@ UM.ManagementPage
|
|||||||
enabled: base.currentItem != null && !base.currentItem.readOnly && !Cura.ContainerManager.isContainerUsed(base.currentItem.id)
|
enabled: base.currentItem != null && !base.currentItem.readOnly && !Cura.ContainerManager.isContainerUsed(base.currentItem.id)
|
||||||
onClicked: confirmDialog.open()
|
onClicked: confirmDialog.open()
|
||||||
},
|
},
|
||||||
/* // apparently visible does not work on OS X
|
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@action:button", "Import");
|
text: catalog.i18nc("@action:button", "Import");
|
||||||
iconName: "document-import";
|
iconName: "document-import";
|
||||||
onClicked: importDialog.open();
|
onClicked: importDialog.open();
|
||||||
visible: false;
|
visible: true;
|
||||||
},
|
},
|
||||||
*/
|
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@action:button", "Export")
|
text: catalog.i18nc("@action:button", "Export")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user