diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index c51207862e..bc4378feff 100644
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -203,7 +203,7 @@ class CuraApplication(QtApplication):
"dialog_profile_path",
"dialog_material_path"]:
- Preferences.getInstance().addPreference("local_file/%s" % key, "~/")
+ Preferences.getInstance().addPreference("local_file/%s" % key, os.path.expanduser("~/"))
Preferences.getInstance().setDefault("local_file/last_used_type", "text/x-gcode")
@@ -896,4 +896,4 @@ class CuraApplication(QtApplication):
self._additional_components[area_id] = []
self._additional_components[area_id].append(component)
- self.additionalComponentsChanged.emit(area_id)
\ No newline at end of file
+ self.additionalComponentsChanged.emit(area_id)
diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py
index 9184db109a..82be7c480f 100644
--- a/cura/Settings/ContainerManager.py
+++ b/cura/Settings/ContainerManager.py
@@ -244,6 +244,7 @@ class ContainerManager(QObject):
if not type_name or entry["type"] == type_name:
filters.append(filter_string)
+ filters.append("All Files (*)")
return filters
## Export a container to a file
@@ -280,6 +281,9 @@ class ContainerManager(QObject):
return { "status": "error", "message": "Container not found"}
container = containers[0]
+ if UM.Platform.isOSX() and "." in file_url:
+ file_url = file_url[:file_url.rfind(".")]
+
for suffix in mime_type.suffixes:
if file_url.endswith(suffix):
break
@@ -301,7 +305,7 @@ class ContainerManager(QObject):
with UM.SaveFile(file_url, "w") as f:
f.write(contents)
- return { "status": "success", "message": "Succesfully exported container"}
+ return { "status": "success", "message": "Succesfully exported container", "path": file_url}
## Imports a profile from a file
#
@@ -371,11 +375,20 @@ class ContainerManager(QObject):
"container": container_type
}
- suffix_list = "*." + mime_type.preferredSuffix
+ suffix = mime_type.preferredSuffix
+ if UM.Platform.isOSX() and "." in suffix:
+ # OSX's File dialog is stupid and does not allow selecting files with a . in its name
+ suffix = suffix[suffix.index(".") + 1:]
+
+ suffix_list = "*." + suffix
for suffix in mime_type.suffixes:
if suffix == mime_type.preferredSuffix:
continue
+ if UM.Platform.isOSX() and "." in suffix:
+ # OSX's File dialog is stupid and does not allow selecting files with a . in its name
+ suffix = suffix[suffix.index("."):]
+
suffix_list += ", *." + suffix
name_filter = "{0} ({1})".format(mime_type.comment, suffix_list)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 669d0bcef2..e7445b6061 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -150,6 +150,8 @@
"label": "Number extruders",
"description": "Number of extruder trains. An extruder train is the combination of a feeder, bowden tube, and nozzle.",
"default_value": 1,
+ "minimum_value": "1",
+ "maximum_value": "16",
"type": "int",
"settable_per_mesh": false,
"settable_per_extruder": false,
@@ -1236,30 +1238,28 @@
"default_value": false,
"enabled": "retraction_enable",
"settable_per_mesh": false,
- "settable_per_extruder": true,
- "children": {
- "retraction_hop_only_when_collides": {
- "label": "Z Hop Only Over Printed Parts",
- "description": "Only perform a Z Hop when moving over printed parts which cannot be avoided by horizontal motion by Avoid Printed Parts when Traveling.",
- "type": "bool",
- "default_value": false,
- "enabled": "retraction_enable and retraction_hop_enabled and travel_avoid_other_parts",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- },
- "retraction_hop": {
- "label": "Z Hop Height",
- "description": "The height difference when performing a Z Hop.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "minimum_value_warning": "-0.0001",
- "maximum_value_warning": "10",
- "enabled": "retraction_enable and retraction_hop_enabled",
- "settable_per_mesh": false,
- "settable_per_extruder": true
- }
- }
+ "settable_per_extruder": true
+ },
+ "retraction_hop_only_when_collides": {
+ "label": "Z Hop Only Over Printed Parts",
+ "description": "Only perform a Z Hop when moving over printed parts which cannot be avoided by horizontal motion by Avoid Printed Parts when Traveling.",
+ "type": "bool",
+ "default_value": false,
+ "enabled": "retraction_enable and retraction_hop_enabled and travel_avoid_other_parts",
+ "settable_per_mesh": false,
+ "settable_per_extruder": true
+ },
+ "retraction_hop": {
+ "label": "Z Hop Height",
+ "description": "The height difference when performing a Z Hop.",
+ "unit": "mm",
+ "type": "float",
+ "default_value": 1,
+ "minimum_value_warning": "-0.0001",
+ "maximum_value_warning": "10",
+ "enabled": "retraction_enable and retraction_hop_enabled",
+ "settable_per_mesh": false,
+ "settable_per_extruder": true
},
"material_standby_temperature":
{
@@ -1511,14 +1511,44 @@
},
"speed_layer_0": {
"label": "Initial Layer Speed",
- "description": "The print speed for the initial layer. A lower value is advised to improve adhesion to the build plate.",
+ "description": "The speed for the initial layer. A lower value is advised to improve adhesion to the build plate.",
"unit": "mm/s",
"type": "float",
"default_value": 30,
"minimum_value": "0.1",
"maximum_value": "299792458000",
"maximum_value_warning": "300",
- "settable_per_mesh": true
+ "settable_per_mesh": true,
+ "children":
+ {
+ "speed_print_layer_0":
+ {
+ "label": "Initial Layer Print Speed",
+ "description": "The speed of printing for the initial layer. A lower value is advised to improve adhesion to the build plate.",
+ "unit": "mm/s",
+ "type": "float",
+ "default_value": 30,
+ "value": "speed_layer_0",
+ "minimum_value": "0.1",
+ "maximum_value": "299792458000",
+ "maximum_value_warning": "300",
+ "settable_per_mesh": true
+ },
+ "speed_travel_layer_0":
+ {
+ "label": "Initial Layer Travel Speed",
+ "description": "The speed of travel moves in the initial layer. A lower value is advised to prevent pulling previously printed parts away from the build plate.",
+ "unit": "mm/s",
+ "type": "float",
+ "default_value": 60,
+ "value": "speed_layer_0 * speed_travel / speed_print",
+ "minimum_value": "0.1",
+ "maximum_value": "299792458000",
+ "maximum_value_warning": "300",
+ "settable_per_mesh": true,
+ "settable_per_extruder": true
+ }
+ }
},
"skirt_brim_speed": {
"label": "Skirt/Brim Speed",
@@ -1546,8 +1576,8 @@
"settable_per_mesh": false,
"settable_per_extruder": false
},
-
-
+
+
"acceleration_enabled": {
"label": "Enable Acceleration Control",
"description": "Enables adjusting the print head acceleration. Increasing the accelerations can reduce printing time at the cost of print quality.",
@@ -1734,8 +1764,8 @@
"settable_per_mesh": false
},
-
-
+
+
"jerk_enabled": {
"label": "Enable Jerk Control",
"description": "Enables adjusting the jerk of print head when the velocity in the X or Y axis changes. Increasing the jerk can reduce printing time at the cost of print quality.",
diff --git a/resources/qml/MonitorButton.qml b/resources/qml/MonitorButton.qml
index 7a87eb4f60..4a33b347d3 100644
--- a/resources/qml/MonitorButton.qml
+++ b/resources/qml/MonitorButton.qml
@@ -30,6 +30,8 @@ Rectangle
return UM.Theme.getColor("status_paused")
else if (Cura.MachineManager.printerOutputDevices[0].jobState == "error")
return UM.Theme.getColor("status_stopped")
+ else if (Cura.MachineManager.printerOutputDevices[0].jobState == "offline")
+ return UM.Theme.getColor("status_offline")
else
return UM.Theme.getColor("text")
}
@@ -41,7 +43,10 @@ Rectangle
{
if(!printerConnected)
{
- return catalog.i18nc("@label:", "Please check your printer connections")
+ return catalog.i18nc("@label:", "Not connected to a printer")
+ } else if(Cura.MachineManager.printerOutputDevices[0].jobState == "offline")
+ {
+ return catalog.i18nc("@label:", "Lost connection with the printer")
} else if(Cura.MachineManager.printerOutputDevices[0].jobState == "printing")
{
return catalog.i18nc("@label:", "Printing...")
diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml
index 9da5522762..f4a8df1dcf 100644
--- a/resources/qml/Preferences/MaterialsPage.qml
+++ b/resources/qml/Preferences/MaterialsPage.qml
@@ -255,7 +255,7 @@ UM.ManagementPage
else if(result.status == "success")
{
messageDialog.icon = StandardIcon.Information
- messageDialog.text = catalog.i18nc("@info:status", "Successfully exported material to %1").arg(fileUrl)
+ messageDialog.text = catalog.i18nc("@info:status", "Successfully exported material to %1").arg(result.path)
messageDialog.open()
}
CuraApplication.setDefaultPath("dialog_material_path", folder)
diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml
index 1542e24f5d..8ab776af6a 100644
--- a/resources/qml/Sidebar.qml
+++ b/resources/qml/Sidebar.qml
@@ -116,6 +116,8 @@ Rectangle
return UM.Theme.getIcon("tab_monitor_paused")
else if (Cura.MachineManager.printerOutputDevices[0].jobState == "error")
return UM.Theme.getIcon("tab_monitor_stopped")
+ else if (Cura.MachineManager.printerOutputDevices[0].jobState == "offline")
+ return UM.Theme.getIcon("tab_monitor_offline")
else
return UM.Theme.getIcon("tab_monitor")
}