diff --git a/packaging/MacOS/cura_background_dmg.png b/packaging/MacOS/cura_background_dmg.png index 8f2fb50b05..a293d94bd2 100644 Binary files a/packaging/MacOS/cura_background_dmg.png and b/packaging/MacOS/cura_background_dmg.png differ diff --git a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py index 1bc1432b67..e89af5c70a 100644 --- a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py +++ b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py @@ -40,7 +40,9 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): # Indicate that the 3mf mesh writer should not close the archive just yet (we still need to add stuff to it). mesh_writer.setStoreArchive(True) - mesh_writer.write(stream, nodes, mode) + if not mesh_writer.write(stream, nodes, mode): + self.setInformation(mesh_writer.getInformation()) + return False archive = mesh_writer.getArchive() if archive is None: # This happens if there was no mesh data to write. @@ -98,7 +100,7 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): Logger.error("No permission to write workspace to this stream.") return False except EnvironmentError as e: - self.setInformation(catalog.i18nc("@error:zip", "The operating system does not allow saving a project file to this location or with this file name.")) + self.setInformation(catalog.i18nc("@error:zip", str(e))) Logger.error("EnvironmentError when writing workspace to this stream: {err}".format(err = str(e))) return False mesh_writer.setStoreArchive(False) diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py index 3e25dcbfc0..ae790b4f63 100644 --- a/plugins/3MFWriter/ThreeMFWriter.py +++ b/plugins/3MFWriter/ThreeMFWriter.py @@ -241,9 +241,9 @@ class ThreeMFWriter(MeshWriter): archive.writestr(model_file, scene_string) archive.writestr(content_types_file, b' \n' + ET.tostring(content_types)) archive.writestr(relations_file, b' \n' + ET.tostring(relations_element)) - except Exception as e: + except Exception as error: Logger.logException("e", "Error writing zip file") - self.setInformation(catalog.i18nc("@error:zip", "Error writing 3mf file.")) + self.setInformation(str(error)) return False finally: if not self._store_archive: diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 40d1eb3b1c..680dd3b6f8 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -5514,7 +5514,9 @@ "unit": "mm", "type": "float", "default_value": 0.0, - "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')", + "maximum_value": "extruderValue(support_extruder_nr, 'support_offset') if support_structure == 'normal' else None", + "minimum_value_warning": "-1 * machine_nozzle_size", + "maximum_value_warning": "10 * machine_nozzle_size", "limit_to_extruder": "support_interface_extruder_nr", "enabled": "support_interface_enable and (support_enable or support_meshes_present)", "settable_per_mesh": false, @@ -5529,7 +5531,9 @@ "type": "float", "default_value": 0.0, "value": "extruderValue(support_roof_extruder_nr, 'support_interface_offset')", - "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')", + "maximum_value": "extruderValue(support_extruder_nr, 'support_offset') if support_structure == 'normal' else None", + "minimum_value_warning": "-1 * machine_nozzle_size", + "maximum_value_warning": "10 * machine_nozzle_size", "limit_to_extruder": "support_roof_extruder_nr", "enabled": "support_roof_enable and (support_enable or support_meshes_present)", "settable_per_mesh": false, @@ -5543,7 +5547,9 @@ "type": "float", "default_value": 0.0, "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_offset')", - "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')", + "maximum_value": "extruderValue(support_extruder_nr, 'support_offset') if support_structure == 'normal' else None", + "minimum_value_warning": "-1 * machine_nozzle_size", + "maximum_value_warning": "10 * machine_nozzle_size", "limit_to_extruder": "support_bottom_extruder_nr", "enabled": "support_bottom_enable and (support_enable or support_meshes_present)", "settable_per_mesh": false, diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 31066f8f46..4983363946 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -822,12 +822,26 @@ UM.MainWindow } } - Cura.WizardDialog + property var wizardDialog + Component { - id: addMachineDialog - title: catalog.i18nc("@title:window", "Add Printer") - model: CuraApplication.getAddPrinterPagesModel() - progressBarVisible: false + id: addMachineDialogLoader + + Cura.WizardDialog + { + title: catalog.i18nc("@title:window", "Add Printer") + maximumWidth: Screen.width * 2 + maximumHeight: Screen.height * 2 + model: CuraApplication.getAddPrinterPagesModel() + progressBarVisible: false + onVisibleChanged: + { + if(!visible) + { + wizardDialog = null + } + } + } } Cura.WizardDialog @@ -852,9 +866,8 @@ UM.MainWindow target: Cura.Actions.addMachine function onTriggered() { - // Make sure to show from the first page when the dialog shows up. - addMachineDialog.resetModelState() - addMachineDialog.show() + wizardDialog = addMachineDialogLoader.createObject() + wizardDialog.show() } } diff --git a/resources/qml/MachineSettings/GcodeTextArea.qml b/resources/qml/MachineSettings/GcodeTextArea.qml index d4bc58cdc4..2538cd9f65 100644 --- a/resources/qml/MachineSettings/GcodeTextArea.qml +++ b/resources/qml/MachineSettings/GcodeTextArea.qml @@ -55,6 +55,7 @@ UM.TooltipArea } ScrollBar.vertical: UM.ScrollBar {} + clip: true TextArea.flickable: TextArea { @@ -70,6 +71,7 @@ UM.TooltipArea selectionColor: UM.Theme.getColor("text_selection") selectedTextColor: UM.Theme.getColor("text") wrapMode: TextEdit.NoWrap + padding: UM.Theme.getSize("narrow_margin").height + backgroundRectangle.border.width onActiveFocusChanged: { @@ -81,8 +83,9 @@ UM.TooltipArea background: Rectangle { + id: backgroundRectangle + anchors.fill: parent - anchors.margins: -border.width //Wrap the border around the parent. color: UM.Theme.getColor("detail_background") border.color: diff --git a/resources/qml/Preferences/SettingVisibilityItem.qml b/resources/qml/Preferences/SettingVisibilityItem.qml index 8905c15124..07255306a5 100644 --- a/resources/qml/Preferences/SettingVisibilityItem.qml +++ b/resources/qml/Preferences/SettingVisibilityItem.qml @@ -20,6 +20,7 @@ Item width: childrenRect.width; height: childrenRect.height; id: checkboxTooltipArea + x: check.height UM.CheckBox { id: check @@ -40,7 +41,7 @@ Item { width: height height: check.height - anchors.left: checkboxTooltipArea.right + anchors.right: checkboxTooltipArea.left anchors.leftMargin: 2 * screenScaleFactor text: @@ -82,7 +83,7 @@ Item source: UM.Theme.getIcon("Information") - color: UM.Theme.getColor("primary_button_text") + color: UM.Theme.getColor("small_button_text") } visible: provider.properties.enabled == "False" diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 934e19030d..c5fed795d5 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -40,7 +40,7 @@ Item Cura.TextField { id: filter - height: parent.height + implicitHeight: parent.height anchors.left: parent.left anchors.right: parent.right topPadding: height / 4 @@ -337,7 +337,7 @@ Item } function onShowTooltip(text) { base.showTooltip(delegate, Qt.point(-settingsView.x - UM.Theme.getSize("default_margin").width, 0), text) } function onHideTooltip() { base.hideTooltip() } - function onShowAllHiddenInheritedSettings() + function onShowAllHiddenInheritedSettings(category_id) { var children_with_override = Cura.SettingInheritanceManager.getChildrenKeysWithOverride(category_id) for(var i = 0; i < children_with_override.length; i++) diff --git a/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml b/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml index 3d138e3d2e..d65bd63550 100644 --- a/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml +++ b/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml @@ -3,6 +3,7 @@ import QtQuick 2.10 import QtQuick.Controls 2.3 +import QtQuick.Layouts 2.3 import UM 1.5 as UM import Cura 1.1 as Cura @@ -15,9 +16,7 @@ import Cura 1.1 as Cura Item { id: base - height: networkPrinterInfo.height + controlsRectangle.height - property alias maxItemCountAtOnce: networkPrinterListView.maxItemCountAtOnce property var currentItem: (networkPrinterListView.currentIndex >= 0) ? networkPrinterListView.model[networkPrinterListView.currentIndex] : null @@ -29,35 +28,32 @@ Item Item { id: networkPrinterInfo - height: networkPrinterListView.visible ? networkPrinterListView.height : noPrinterLabel.height anchors.left: parent.left anchors.right: parent.right anchors.top: parent.top + anchors.bottom: separator.top UM.Label { id: noPrinterLabel height: UM.Theme.getSize("setting_control").height + UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.fill: parent + anchors.margins: UM.Theme.getSize("default_margin").width text: catalog.i18nc("@label", "There is no printer found over your network.") visible: networkPrinterListView.count == 0 // Do not show if there are discovered devices. + verticalAlignment: Text.AlignTop } ListView { id: networkPrinterListView - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right - height: Math.min(contentHeight, (maxItemCountAtOnce * UM.Theme.getSize("action_button").height) - UM.Theme.getSize("default_margin").height) + anchors.fill: parent ScrollBar.vertical: UM.ScrollBar { id: networkPrinterScrollBar } clip: true - property int maxItemCountAtOnce: 8 // show at max 8 items at once, otherwise you need to scroll. visible: networkPrinterListView.count > 0 model: contentLoader.enabled ? CuraApplication.getDiscoveredPrintersModel().discoveredPrinters: undefined @@ -138,7 +134,7 @@ Item { id: separator anchors.left: parent.left - anchors.top: networkPrinterInfo.bottom + anchors.bottom: controlsRectangle.top anchors.right: parent.right height: UM.Theme.getSize("default_lining").height color: UM.Theme.getColor("lining") @@ -149,7 +145,7 @@ Item id: controlsRectangle anchors.left: parent.left anchors.right: parent.right - anchors.top: separator.bottom + anchors.bottom: parent.bottom height: UM.Theme.getSize("message_action_button").height + UM.Theme.getSize("default_margin").height diff --git a/resources/qml/WelcomePages/AddThirdPartyPrinter.qml b/resources/qml/WelcomePages/AddThirdPartyPrinter.qml index 2c6c3a19bf..9229715db0 100644 --- a/resources/qml/WelcomePages/AddThirdPartyPrinter.qml +++ b/resources/qml/WelcomePages/AddThirdPartyPrinter.qml @@ -3,6 +3,7 @@ import QtQuick 2.10 import QtQuick.Controls 2.3 +import QtQuick.Layouts 2.3 import UM 1.5 as UM import Cura 1.1 as Cura @@ -17,79 +18,84 @@ Item property var goToUltimakerPrinter - DropDownWidget + ColumnLayout { - id: addNetworkPrinterDropDown - anchors.top: parent.top + anchors.topMargin: UM.Theme.getSize("wide_margin").height + anchors.bottom: backButton.top + anchors.bottomMargin: UM.Theme.getSize("default_margin").height anchors.left: parent.left anchors.right: parent.right - anchors.topMargin: UM.Theme.getSize("wide_margin").height - title: catalog.i18nc("@label", "Add a networked printer") - contentShown: true // by default expand the network printer list + spacing: UM.Theme.getSize("default_margin").height - onClicked: + DropDownWidget { - addLocalPrinterDropDown.contentShown = !contentShown - } + id: addNetworkPrinterDropDown - contentComponent: networkPrinterListComponent - Component - { - id: networkPrinterListComponent - AddNetworkPrinterScrollView + Layout.fillWidth: true + Layout.fillHeight: contentShown + + title: catalog.i18nc("@label", "Add a networked printer") + contentShown: true // by default expand the network printer list + + onClicked: { - id: networkPrinterScrollView + addLocalPrinterDropDown.contentShown = !contentShown + } - maxItemCountAtOnce: 9 // show at max 9 items at once, otherwise you need to scroll. - - onRefreshButtonClicked: + contentComponent: networkPrinterListComponent + Component + { + id: networkPrinterListComponent + AddNetworkPrinterScrollView { - UM.OutputDeviceManager.startDiscovery() - } + id: networkPrinterScrollView - onAddByIpButtonClicked: - { - base.goToPage("add_printer_by_ip") - } - - onAddCloudPrinterButtonClicked: - { - base.goToPage("add_cloud_printers") - if (!Cura.API.account.isLoggedIn) + onRefreshButtonClicked: { - Cura.API.account.login() + UM.OutputDeviceManager.startDiscovery() + } + + onAddByIpButtonClicked: + { + base.goToPage("add_printer_by_ip") + } + + onAddCloudPrinterButtonClicked: + { + base.goToPage("add_cloud_printers") + if (!Cura.API.account.isLoggedIn) + { + Cura.API.account.login() + } } } } } - } - DropDownWidget - { - id: addLocalPrinterDropDown - - anchors.top: addNetworkPrinterDropDown.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.topMargin: UM.Theme.getSize("default_margin").height - - title: catalog.i18nc("@label", "Add a non-networked printer") - - onClicked: + DropDownWidget { - addNetworkPrinterDropDown.contentShown = !contentShown - } + id: addLocalPrinterDropDown - contentComponent: localPrinterListComponent - Component - { - id: localPrinterListComponent - AddLocalPrinterScrollView + Layout.fillWidth: true + Layout.fillHeight: contentShown + + title: catalog.i18nc("@label", "Add a non-networked printer") + + onClicked: { - id: localPrinterView - height: backButton.y - addLocalPrinterDropDown.y - UM.Theme.getSize("expandable_component_content_header").height - UM.Theme.getSize("default_margin").height + addNetworkPrinterDropDown.contentShown = !contentShown + } + + contentComponent: localPrinterListComponent + Component + { + id: localPrinterListComponent + AddLocalPrinterScrollView + { + id: localPrinterView + } } } } diff --git a/resources/qml/WelcomePages/DropDownWidget.qml b/resources/qml/WelcomePages/DropDownWidget.qml index 90e1900d35..3db9ae4bf3 100644 --- a/resources/qml/WelcomePages/DropDownWidget.qml +++ b/resources/qml/WelcomePages/DropDownWidget.qml @@ -22,7 +22,7 @@ Item id: base implicitWidth: 200 * screenScaleFactor - height: header.contentShown ? (header.height + contentRectangle.height) : header.height + implicitHeight: contentShown ? (header.height + contentRectangle.implicitHeight) : header.height property var contentComponent: null property alias contentItem: contentLoader.item @@ -56,12 +56,14 @@ Item Cura.RoundedRectangle { id: contentRectangle + anchors.top: header.bottom // Move up a bit (exactly the width of the border) to avoid double line - y: header.height - UM.Theme.getSize("default_lining").width + anchors.topMargin: -UM.Theme.getSize("default_lining").width anchors.left: header.left anchors.right: header.right + anchors.bottom: parent.bottom // Add 2x lining, because it needs a bit of space on the top and the bottom. - height: contentLoader.item ? contentLoader.item.height + 2 * UM.Theme.getSize("thick_lining").height : 0 + anchors.bottomMargin: UM.Theme.getSize("thick_lining").height border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("lining") @@ -73,9 +75,7 @@ Item Loader { id: contentLoader - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right + anchors.fill: parent // Keep a small margin with the Rectangle container so its content will not overlap with the Rectangle // border. anchors.margins: UM.Theme.getSize("default_lining").width diff --git a/resources/qml/WelcomePages/WizardDialog.qml b/resources/qml/WelcomePages/WizardDialog.qml index 8629f47115..387289052b 100644 --- a/resources/qml/WelcomePages/WizardDialog.qml +++ b/resources/qml/WelcomePages/WizardDialog.qml @@ -32,11 +32,6 @@ Window property var model: null // Needs to be set by whoever is using this dialog. property alias progressBarVisible: wizardPanel.progressBarVisible - function resetModelState() - { - model.resetState() - } - WizardPanel { id: wizardPanel