diff --git a/cura/Machines/Models/ExtrudersModel.py b/cura/Machines/Models/ExtrudersModel.py index 98865ed37e..e979a1e848 100644 --- a/cura/Machines/Models/ExtrudersModel.py +++ b/cura/Machines/Models/ExtrudersModel.py @@ -53,6 +53,9 @@ class ExtrudersModel(ListModel): EnabledRole = Qt.UserRole + 11 """Is the extruder enabled?""" + MaterialTypeRole = Qt.UserRole + 12 + """The type of the material (e.g. PLA, ABS, PETG, etc.).""" + defaultColors = ["#ffc924", "#86ec21", "#22eeee", "#245bff", "#9124ff", "#ff24c8"] """List of colours to display if there is no material or the material has no known colour. """ @@ -75,6 +78,7 @@ class ExtrudersModel(ListModel): self.addRoleName(self.StackRole, "stack") self.addRoleName(self.MaterialBrandRole, "material_brand") self.addRoleName(self.ColorNameRole, "color_name") + self.addRoleName(self.MaterialTypeRole, "material_type") self._update_extruder_timer = QTimer() self._update_extruder_timer.setInterval(100) self._update_extruder_timer.setSingleShot(True) @@ -193,7 +197,8 @@ class ExtrudersModel(ListModel): "variant": extruder.variant.getName() if extruder.variant else "", # e.g. print core "stack": extruder, "material_brand": material_brand, - "color_name": color_name + "color_name": color_name, + "material_type": extruder.material.getMetaDataEntry("material") if extruder.material else "", } items.append(item) @@ -218,6 +223,7 @@ class ExtrudersModel(ListModel): "stack": None, "material_brand": "", "color_name": "", + "material_type": "", } items.append(item) if self._items != items: diff --git a/cura/UI/WhatsNewPagesModel.py b/cura/UI/WhatsNewPagesModel.py index db0f4b3a74..11320a0ebb 100644 --- a/cura/UI/WhatsNewPagesModel.py +++ b/cura/UI/WhatsNewPagesModel.py @@ -29,7 +29,7 @@ class WhatsNewPagesModel(WelcomePagesModel): for filename in files: basename = os.path.basename(filename) base, ext = os.path.splitext(basename) - if ext not in include or not base.isdigit(): + if ext.lower() not in include or not base.isdigit(): continue page_no = int(base) highest = max(highest, page_no) diff --git a/plugins/PrepareStage/PrepareMenu.qml b/plugins/PrepareStage/PrepareMenu.qml index 93ecb49677..82f61da069 100644 --- a/plugins/PrepareStage/PrepareMenu.qml +++ b/plugins/PrepareStage/PrepareMenu.qml @@ -8,7 +8,6 @@ import QtQuick.Controls 2.3 import UM 1.3 as UM import Cura 1.1 as Cura -import QtGraphicalEffects 1.0 // For the dropshadow Item { @@ -42,42 +41,28 @@ Item anchors.left: openFileButton.right anchors.right: parent.right anchors.leftMargin: UM.Theme.getSize("default_margin").width + property int machineSelectorWidth: Math.round((width - printSetupSelectorItem.width) / 3) height: parent.height - spacing: 0 + // This is a trick to make sure that the borders of the two adjacent buttons' borders overlap. Otherwise + // there will be double border (one from each button) + spacing: -UM.Theme.getSize("default_lining").width Cura.MachineSelector { id: machineSelection headerCornerSide: Cura.RoundedRectangle.Direction.Left - Layout.minimumWidth: UM.Theme.getSize("machine_selector_widget").width - Layout.maximumWidth: UM.Theme.getSize("machine_selector_widget").width + Layout.preferredWidth: parent.machineSelectorWidth Layout.fillWidth: true Layout.fillHeight: true } - // Separator line - Rectangle - { - height: parent.height - width: UM.Theme.getSize("default_lining").width - color: UM.Theme.getColor("lining") - } - Cura.ConfigurationMenu { id: printerSetup Layout.fillHeight: true Layout.fillWidth: true - Layout.preferredWidth: itemRow.width - machineSelection.width - printSetupSelectorItem.width - 2 * UM.Theme.getSize("default_lining").width - } - - // Separator line - Rectangle - { - height: parent.height - width: UM.Theme.getSize("default_lining").width - color: UM.Theme.getColor("lining") + Layout.preferredWidth: parent.machineSelectorWidth * 2 } Item @@ -106,7 +91,7 @@ Item { id: buttonIcon anchors.centerIn: parent - source: UM.Theme.getIcon("Folder") + source: UM.Theme.getIcon("Folder", "medium") width: UM.Theme.getSize("button_icon").width height: UM.Theme.getSize("button_icon").height color: UM.Theme.getColor("icon") @@ -120,24 +105,12 @@ Item id: background height: UM.Theme.getSize("stage_menu").height width: UM.Theme.getSize("stage_menu").height + border.color: UM.Theme.getColor("lining") + border.width: UM.Theme.getSize("default_lining").width radius: UM.Theme.getSize("default_radius").width color: openFileButton.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") } - - DropShadow - { - id: shadow - // Don't blur the shadow - radius: 0 - anchors.fill: background - source: background - verticalOffset: 2 - visible: true - color: UM.Theme.getColor("action_button_shadow") - // Should always be drawn behind the background. - z: background.z - 1 - } } } } diff --git a/plugins/PreviewStage/PreviewMenu.qml b/plugins/PreviewStage/PreviewMenu.qml index ff1ccff75f..e6c4a25c4c 100644 --- a/plugins/PreviewStage/PreviewMenu.qml +++ b/plugins/PreviewStage/PreviewMenu.qml @@ -35,6 +35,9 @@ Item anchors.horizontalCenter: parent.horizontalCenter width: parent.width - 2 * UM.Theme.getSize("wide_margin").width height: parent.height + // This is a trick to make sure that the borders of the two adjacent buttons' borders overlap. Otherwise + // there will be double border (one from each button) + spacing: -UM.Theme.getSize("default_lining").width Cura.ViewsSelector { @@ -44,17 +47,6 @@ Item headerCornerSide: Cura.RoundedRectangle.Direction.Left } - // Separator line - Rectangle - { - height: parent.height - // If there is no viewPanel, we only need a single spacer, so hide this one. - visible: viewPanel.source != "" - width: visible ? UM.Theme.getSize("default_lining").width : 0 - - color: UM.Theme.getColor("lining") - } - // This component will grow freely up to complete the width of the row. Loader { @@ -64,14 +56,6 @@ Item source: UM.Controller.activeView != null && UM.Controller.activeView.stageMenuComponent != null ? UM.Controller.activeView.stageMenuComponent : "" } - // Separator line - Rectangle - { - height: parent.height - width: UM.Theme.getSize("default_lining").width - color: UM.Theme.getColor("lining") - } - Item { id: printSetupSelectorItem diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml index f3002fd25b..0f4aec5424 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml @@ -50,7 +50,7 @@ Item id: buildplateIcon anchors.centerIn: parent color: UM.Theme.getColor("monitor_icon_primary") - height: parent.height + height: UM.Theme.getSize("medium_button_icon").width source: "../svg/icons/Buildplate.svg" width: height visible: buildplate diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml index ac5f588db3..c305c76ac6 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml @@ -37,6 +37,7 @@ Item { id: extruderIcon color: UM.Theme.getColor("monitor_skeleton_loading") + size: UM.Theme.getSize("button_icon").width position: 0 } @@ -46,16 +47,18 @@ Item anchors { left: extruderIcon.right - leftMargin: 12 * screenScaleFactor // TODO: Theme! + leftMargin: UM.Theme.getSize("default_margin").width + verticalCenter: extruderIcon.verticalCenter } color: materialLabel.visible > 0 ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading") - height: 18 * screenScaleFactor // TODO: Theme! + height: childrenRect.height width: Math.max(materialLabel.contentWidth, 60 * screenScaleFactor) // TODO: Theme! radius: 2 * screenScaleFactor // TODO: Theme! Label { id: materialLabel + anchors.top: parent.top color: UM.Theme.getColor("text") elide: Text.ElideRight @@ -63,29 +66,13 @@ Item text: "" visible: text !== "" - // FIXED-LINE-HEIGHT: - height: parent.height - verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering } - } - - Rectangle - { - id: printCoreLabelWrapper - anchors - { - left: materialLabelWrapper.left - bottom: parent.bottom - } - color: printCoreLabel.visible > 0 ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading") - height: 18 * screenScaleFactor // TODO: Theme! - width: Math.max(printCoreLabel.contentWidth, 36 * screenScaleFactor) // TODO: Theme! - radius: 2 * screenScaleFactor // TODO: Theme! Label { id: printCoreLabel + anchors.top: materialLabel.bottom color: UM.Theme.getColor("text") elide: Text.ElideRight @@ -93,9 +80,6 @@ Item text: "" visible: text !== "" - // FIXED-LINE-HEIGHT: - height: parent.height - verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering } } diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml index 79bc0ec25b..ad0e8a6777 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml @@ -38,6 +38,7 @@ Item Label { id: positionLabel + anchors.centerIn: icon font: UM.Theme.getFont("small") color: UM.Theme.getColor("text") height: Math.round(size / 2) @@ -45,8 +46,6 @@ Item text: position + 1 verticalAlignment: Text.AlignVCenter width: Math.round(size / 2) - x: Math.round(size * 0.25) - y: Math.round(size * 0.15625) visible: position >= 0 renderType: Text.NativeRendering } diff --git a/resources/images/whats_new/0.png b/resources/images/whats_new/0.png index 77c7d6cf46..68b06eab10 100644 Binary files a/resources/images/whats_new/0.png and b/resources/images/whats_new/0.png differ diff --git a/resources/images/whats_new/2.png b/resources/images/whats_new/2.png index cfaf962d97..9be5228efb 100644 Binary files a/resources/images/whats_new/2.png and b/resources/images/whats_new/2.png differ diff --git a/resources/images/whats_new/3.PNG b/resources/images/whats_new/3.PNG new file mode 100644 index 0000000000..b37e50d72b Binary files /dev/null and b/resources/images/whats_new/3.PNG differ diff --git a/resources/images/whats_new/4.PNG b/resources/images/whats_new/4.PNG new file mode 100644 index 0000000000..a78b128aff Binary files /dev/null and b/resources/images/whats_new/4.PNG differ diff --git a/resources/qml/Account/AccountWidget.qml b/resources/qml/Account/AccountWidget.qml index 48c05f8a11..ef1622daee 100644 --- a/resources/qml/Account/AccountWidget.qml +++ b/resources/qml/Account/AccountWidget.qml @@ -54,9 +54,10 @@ Item id: accountWidget anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: signInButton.horizontalCenter - implicitHeight: UM.Theme.getSize("main_window_header").height - implicitWidth: UM.Theme.getSize("main_window_header").height + implicitHeight: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) + implicitWidth: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) hoverEnabled: true @@ -68,8 +69,8 @@ Item { id: avatar - width: Math.round(0.8 * accountWidget.width) - height: Math.round(0.8 * accountWidget.height) + width: accountWidget.width + height: accountWidget.height anchors.verticalCenter: accountWidget.verticalCenter anchors.horizontalCenter: accountWidget.horizontalCenter @@ -86,7 +87,7 @@ Item { id: initialCircle anchors.centerIn: parent - width: Math.min(parent.width, parent.height) + width: Math.min(accountWidget.width, accountWidget.height) height: width radius: width color: accountWidget.hovered ? UM.Theme.getColor("primary_text") : "transparent" @@ -141,7 +142,7 @@ Item borderColor: UM.Theme.getColor("lining") borderWidth: UM.Theme.getSize("default_lining").width - target: Qt.point(width - (accountWidget.width / 2), -10) + target: Qt.point(width - (signInButton.width / 2), -10) arrowSize: UM.Theme.getSize("default_arrow").width } diff --git a/resources/qml/Account/UserOperations.qml b/resources/qml/Account/UserOperations.qml index 19e92e0249..f5241596d5 100644 --- a/resources/qml/Account/UserOperations.qml +++ b/resources/qml/Account/UserOperations.qml @@ -9,7 +9,7 @@ import Cura 1.1 as Cura Column { - spacing: UM.Theme.getSize("narrow_margin").height + spacing: UM.Theme.getSize("default_margin").height topPadding: UM.Theme.getSize("default_margin").height bottomPadding: UM.Theme.getSize("default_margin").height width: childrenRect.width @@ -18,7 +18,7 @@ Column { id: accountInfo width: childrenRect.width - height: childrenRect.height + height: accountSyncDetailsColumn.height anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width AvatarImage @@ -56,6 +56,7 @@ Column Column { + id: accountSyncDetailsColumn anchors.left: avatar.right anchors.leftMargin: UM.Theme.getSize("default_margin").width spacing: UM.Theme.getSize("narrow_margin").height diff --git a/resources/qml/ExpandableComponent.qml b/resources/qml/ExpandableComponent.qml index 58719eb1fe..415d994ceb 100644 --- a/resources/qml/ExpandableComponent.qml +++ b/resources/qml/ExpandableComponent.qml @@ -7,8 +7,6 @@ import QtQuick.Controls 2.3 import UM 1.2 as UM import Cura 1.0 as Cura -import QtGraphicalEffects 1.0 // For the dropshadow - // The expandable component has 2 major sub components: // * The headerItem; Always visible and should hold some info about what happens if the component is expanded // * The contentItem; The content that needs to be shown if the component is expanded. @@ -56,6 +54,11 @@ Item // How much padding is needed around the header & button property alias headerPadding: background.padding + property alias headerBackgroundBorder: background.border + + // Whether or not to show the background border + property bool enableHeaderBackgroundBorder: true + // What icon should be displayed on the right. property alias iconSource: collapseButton.source @@ -73,11 +76,7 @@ Item // On what side should the header corners be shown? 1 is down, 2 is left, 3 is up and 4 is right. property alias headerCornerSide: background.cornerSide - property alias headerShadowColor: shadow.color - - property alias enableHeaderShadow: shadow.visible - - property int shadowOffset: 2 + property int popupOffset: 2 // Prefix used for the dragged position preferences. Preferences not used if empty. Don't translate! property string dragPreferencesNamePrefix: "" @@ -120,6 +119,9 @@ Item id: background property real padding: UM.Theme.getSize("default_margin").width + border.width: base.enableHeaderBackgroundBorder ? UM.Theme.getSize("default_lining").width : 0 + border.color: UM.Theme.getColor("lining") + color: base.enabled ? (base.expanded ? headerActiveColor : headerBackgroundColor) : UM.Theme.getColor("disabled") anchors.fill: parent @@ -165,7 +167,7 @@ Item verticalCenter: parent.verticalCenter margins: background.padding } - source: UM.Theme.getIcon("Pen") + source: expanded ? UM.Theme.getIcon("ChevronSingleDown") : UM.Theme.getIcon("ChevronSingleLeft") visible: source != "" width: UM.Theme.getSize("standard_arrow").width height: UM.Theme.getSize("standard_arrow").height @@ -184,20 +186,6 @@ Item } } - DropShadow - { - id: shadow - // Don't blur the shadow - radius: 0 - anchors.fill: background - source: background - verticalOffset: base.shadowOffset - visible: true - color: UM.Theme.getColor("action_button_shadow") - // Should always be drawn behind the background. - z: background.z - 1 - } - Cura.RoundedRectangle { id: contentContainer @@ -209,7 +197,7 @@ Item height: childrenRect.height // Ensure that the content is located directly below the headerItem - y: dragPreferencesNamePrefix === "" ? (background.height + base.shadowOffset + base.contentSpacingY) : UM.Preferences.getValue(dragPreferencesNamePrefix + dragPreferencesNameY) + y: dragPreferencesNamePrefix === "" ? (background.height + base.popupOffset + base.contentSpacingY) : UM.Preferences.getValue(dragPreferencesNamePrefix + dragPreferencesNameY) // Make the content aligned with the rest, using the property contentAlignment to decide whether is right or left. // In case of right alignment, the 3x padding is due to left, right and padding between the button & text. diff --git a/resources/qml/ExpandablePopup.qml b/resources/qml/ExpandablePopup.qml index b490ad5bc4..da56470bfb 100644 --- a/resources/qml/ExpandablePopup.qml +++ b/resources/qml/ExpandablePopup.qml @@ -7,8 +7,6 @@ import QtQuick.Controls 2.3 import UM 1.2 as UM import Cura 1.0 as Cura -import QtGraphicalEffects 1.0 // For the dropshadow - // The expandable component has 2 major sub components: // * The headerItem; Always visible and should hold some info about what happens if the component is expanded // * The contentItem; The content that needs to be shown if the component is expanded. @@ -50,6 +48,11 @@ Item // How much padding is needed around the header & button property alias headerPadding: background.padding + property alias headerBackgroundBorder: background.border + + // Whether or not to show the background border + property bool enableHeaderBackgroundBorder: true + // What icon should be displayed on the right. property alias iconSource: collapseButton.source @@ -72,11 +75,7 @@ Item // Change the contentItem close behaviour property alias contentClosePolicy : content.closePolicy - property alias headerShadowColor: shadow.color - - property alias enableHeaderShadow: shadow.visible - - property int shadowOffset: 2 + property int popupOffset: 2 onEnabledChanged: { @@ -114,6 +113,9 @@ Item id: background property real padding: UM.Theme.getSize("default_margin").width + border.width: base.enableHeaderBackgroundBorder ? UM.Theme.getSize("default_lining").width : 0 + border.color: UM.Theme.getColor("lining") + color: base.enabled ? headerBackgroundColor : UM.Theme.getColor("disabled") anchors.fill: parent @@ -188,26 +190,12 @@ Item } - DropShadow - { - id: shadow - // Don't blur the shadow - radius: 0 - anchors.fill: background - source: background - verticalOffset: base.shadowOffset - visible: true - color: UM.Theme.getColor("action_button_shadow") - // Should always be drawn behind the background. - z: background.z - 1 - } - Popup { id: content // Ensure that the content is located directly below the headerItem - y: background.height + base.shadowOffset + y: background.height + base.popupOffset // Make the content aligned with the rest, using the property contentAlignment to decide whether is right or left. // In case of right alignment, the 3x padding is due to left, right and padding between the button & text. diff --git a/resources/qml/MainWindow/MainWindowHeader.qml b/resources/qml/MainWindow/MainWindowHeader.qml index cb7d5c3d88..c670abb67a 100644 --- a/resources/qml/MainWindow/MainWindowHeader.qml +++ b/resources/qml/MainWindow/MainWindowHeader.qml @@ -62,7 +62,7 @@ Item anchors.verticalCenter: parent.verticalCenter exclusiveGroup: mainWindowHeaderMenuGroup style: UM.Theme.styles.main_window_header_tab - height: UM.Theme.getSize("main_window_header_button").height + height: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) iconSource: model.stage.iconSource property color overlayColor: "transparent" diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml index b088abc830..f55bb0e37c 100644 --- a/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml +++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml @@ -56,51 +56,100 @@ Cura.ExpandablePopup id: extruderIcon materialColor: model.color extruderEnabled: model.enabled - height: parent.height - width: height + width: UM.Theme.getSize("button_icon").width + anchors.verticalCenter: parent.verticalCenter } - // Label for the brand of the material - Label + Item { - id: typeAndBrandNameLabel - - text: model.material_brand + " " + model.material - elide: Text.ElideRight - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - renderType: Text.NativeRendering - opacity: model.enabled ? 1 : 0.4 - anchors - { - top: extruderIcon.top - left: extruderIcon.right - leftMargin: UM.Theme.getSize("default_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("default_margin").width - } - } - // Label that shows the name of the variant - Label - { - id: variantLabel - - visible: Cura.MachineManager.activeMachine ? Cura.MachineManager.activeMachine.hasVariants : false - - text: model.variant - elide: Text.ElideRight - font: UM.Theme.getFont("default_bold") - color: UM.Theme.getColor("text") - renderType: Text.NativeRendering + height: childrenRect.height opacity: model.enabled ? 1 : 0.4 anchors { left: extruderIcon.right leftMargin: UM.Theme.getSize("default_margin").width - top: typeAndBrandNameLabel.bottom + verticalCenter: parent.verticalCenter right: parent.right rightMargin: UM.Theme.getSize("default_margin").width } + // Label for the brand of the material + Label + { + id: materialBrandColorTypeLabel + + text: model.material_brand == model.color_name ? model.color_name + " " + model.material_type : model.material_brand + " " + model.color_name + " " + model.material_type + elide: Text.ElideRight + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + + anchors + { + top: parent.top + left: parent.left + right: parent.right + } + visible: !truncated + } + + Label + { + id: materialColorTypeLabel + + text: model.color_name + " " + model.material_type + elide: Text.ElideRight + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + + anchors + { + top: parent.top + left: parent.left + right: parent.right + } + + visible: !materialBrandColorTypeLabel.visible && !truncated + } + + Label + { + id: materialTypeLabel + + text: model.material_type + elide: Text.ElideRight + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + + anchors + { + top: parent.top + left: parent.left + right: parent.right + } + visible: !materialBrandColorTypeLabel.visible && !materialColorTypeLabel.visible + } + // Label that shows the name of the variant + Label + { + id: variantLabel + + visible: Cura.MachineManager.activeMachine ? Cura.MachineManager.activeMachine.hasVariants : false + + text: model.variant + elide: Text.ElideRight + font: UM.Theme.getFont("default_bold") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + + anchors + { + left: parent.left + top: materialBrandColorTypeLabel.bottom + right: parent.right + } + } } } } diff --git a/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml b/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml index ff9204655f..3b6fc37eb4 100644 --- a/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml +++ b/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml @@ -15,7 +15,8 @@ RowLayout Cura.IconWithText { - source: UM.Theme.getIcon("PrintQuality") + source: UM.Theme.getIcon("Sliders", "medium") + iconSize: UM.Theme.getSize("button_icon").width text: { if (Cura.MachineManager.activeStack) @@ -53,6 +54,7 @@ RowLayout source: UM.Theme.getIcon("Infill1") text: Cura.MachineManager.activeStack ? parseInt(infillDensity.properties.value) + "%" : "0%" font: UM.Theme.getFont("medium") + iconSize: UM.Theme.getSize("medium_button_icon").width UM.SettingPropertyProvider { @@ -68,6 +70,7 @@ RowLayout source: UM.Theme.getIcon("Support") text: supportEnabled.properties.value == "True" ? enabledText : disabledText font: UM.Theme.getFont("medium") + iconSize: UM.Theme.getSize("medium_button_icon").width UM.SettingPropertyProvider { @@ -83,6 +86,7 @@ RowLayout source: UM.Theme.getIcon("Adhesion") text: platformAdhesionType.properties.value != "skirt" && platformAdhesionType.properties.value != "none" ? enabledText : disabledText font: UM.Theme.getFont("medium") + iconSize: UM.Theme.getSize("medium_button_icon").width UM.SettingPropertyProvider { diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml index df2c1bfae6..a3a5047ee9 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml @@ -29,6 +29,7 @@ Item text: catalog.i18nc("@label", "Adhesion") font: UM.Theme.getFont("medium") width: labelColumnWidth + iconSize: UM.Theme.getSize("medium_button_icon").width } Item diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml index 8da97437cf..e79e074883 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml @@ -65,6 +65,7 @@ Item text: catalog.i18nc("@label", "Infill") + " (%)" font: UM.Theme.getFont("medium") width: labelColumnWidth + iconSize: UM.Theme.getSize("medium_button_icon").width } Item @@ -119,6 +120,8 @@ Item implicitWidth: UM.Theme.getSize("print_setup_slider_handle").width implicitHeight: implicitWidth radius: Math.round(implicitWidth / 2) + border.color: defaultItemColor + border.width: UM.Theme.getSize("default_lining").height } tickmarks: Repeater diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml index a8e19c7357..0823b5cb62 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml @@ -52,6 +52,7 @@ Item text: catalog.i18nc("@label", "Profiles") font: UM.Theme.getFont("medium") width: labelColumnWidth + iconSize: UM.Theme.getSize("medium_button_icon").width } UM.SimpleButton { @@ -91,6 +92,7 @@ Item { left: profileLabel.right right: parent.right + verticalCenter: profileLabel.verticalCenter } model: Cura.QualityProfilesDropDownMenuModel diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml index 924dcd5ec4..5fb437b1c2 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml @@ -30,6 +30,7 @@ Item text: catalog.i18nc("@label", "Support") font: UM.Theme.getFont("medium") width: labelColumnWidth + iconSize: UM.Theme.getSize("medium_button_icon").width } Item diff --git a/resources/qml/PrinterSelector/MachineSelector.qml b/resources/qml/PrinterSelector/MachineSelector.qml index 7c74be1605..dfe51df859 100644 --- a/resources/qml/PrinterSelector/MachineSelector.qml +++ b/resources/qml/PrinterSelector/MachineSelector.qml @@ -93,11 +93,11 @@ Cura.ExpandablePopup { if (isGroup) { - return UM.Theme.getIcon("PrinterTriple") + return UM.Theme.getIcon("PrinterTriple", "medium") } else if (isNetworkPrinter || isCloudRegistered) { - return UM.Theme.getIcon("Printer") + return UM.Theme.getIcon("Printer", "medium") } else { @@ -114,8 +114,9 @@ Cura.ExpandablePopup anchors { bottom: parent.bottom + bottomMargin: - height * 1 / 6 left: parent.left - leftMargin: UM.Theme.getSize("thick_margin").width + leftMargin: iconSize - width * 5 / 6 } source: diff --git a/resources/qml/RadioCheckbar.qml b/resources/qml/RadioCheckbar.qml index 0b8709fe7a..5aea771a44 100644 --- a/resources/qml/RadioCheckbar.qml +++ b/resources/qml/RadioCheckbar.qml @@ -146,6 +146,7 @@ Item } radius: Math.round(width / 2) color: activeColor + border.color: defaultItemColor visible: checkbox.checked } } diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml index a42db9cdcb..5beb6e209e 100644 --- a/resources/qml/Settings/SettingCategory.qml +++ b/resources/qml/Settings/SettingCategory.qml @@ -16,10 +16,13 @@ Button anchors.rightMargin: 2 * UM.Theme.getSize("thin_margin").width hoverEnabled: true + height: UM.Theme.getSize("section_icon_column").height + background: Rectangle { id: backgroundRectangle height: UM.Theme.getSize("section").height + anchors.verticalCenter: parent.verticalCenter color: { if (!base.enabled) @@ -107,8 +110,8 @@ Button source: UM.Theme.getIcon(definition.icon) width: UM.Theme.getSize("section_icon").width height: UM.Theme.getSize("section_icon").height - sourceSize.width: width + 15 * screenScaleFactor - sourceSize.height: width + 15 * screenScaleFactor + sourceSize.width: width + sourceSize.height: width } onClicked: @@ -141,8 +144,8 @@ Button id: settingsButton visible: base.hovered || settingsButton.hovered - height: Math.round(base.height * 0.6) - width: Math.round(base.height * 0.6) + height: UM.Theme.getSize("small_button_icon").height + width: height anchors { @@ -184,7 +187,7 @@ Button return false } - height: Math.round(parent.height / 2) + height: UM.Theme.getSize("small_button_icon").height width: height onClicked: diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index a377d08cfc..35172fc799 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -156,7 +156,7 @@ Item { id: settingControls - height: UM.Theme.getSize("section_control").height + height: UM.Theme.getSize("small_button_icon").height spacing: Math.round(UM.Theme.getSize("thick_margin").height / 2) anchors @@ -174,6 +174,7 @@ Item anchors.top: parent.top anchors.bottom: parent.bottom + height: UM.Theme.getSize("small_button_icon").height width: height color: UM.Theme.getColor("setting_control_button") @@ -203,6 +204,7 @@ Item anchors.top: parent.top anchors.bottom: parent.bottom + height: UM.Theme.getSize("small_button_icon").height width: height color: UM.Theme.getColor("setting_control_button") @@ -286,6 +288,7 @@ Item anchors.top: parent.top anchors.bottom: parent.bottom + height: UM.Theme.getSize("small_button_icon").height width: height onClicked: diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index f038d15ca3..fc920a30e7 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -65,7 +65,13 @@ Item anchors.right: clearFilterButton.left anchors.rightMargin: Math.round(UM.Theme.getSize("thick_margin").width) - placeholderText: "" + "
" + catalog.i18nc("@label:textbox", "Search settings") + placeholderText: + { + var imageSize = "width='" + UM.Theme.getSize("small_button_icon").width + "' height='" + UM.Theme.getSize("small_button_icon").height + var imageSource = "' src='"+ UM.Theme.getIcon("Magnifier") + var searchPlaceholder = catalog.i18nc("@label:textbox", "Search settings") + return "" + "
" + searchPlaceholder + } style: TextFieldStyle { @@ -188,8 +194,8 @@ Item { anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height + width: UM.Theme.getSize("medium_button_icon").width + height: UM.Theme.getSize("medium_button_icon").height sourceSize.width: width sourceSize.height: height color: control.hovered ? UM.Theme.getColor("small_button_text_hover") : UM.Theme.getColor("small_button_text") diff --git a/resources/qml/Toolbar.qml b/resources/qml/Toolbar.qml index 89d64b06ad..c948bb8242 100644 --- a/resources/qml/Toolbar.qml +++ b/resources/qml/Toolbar.qml @@ -44,7 +44,6 @@ Item anchors.top: parent.top anchors.right: parent.right - spacing: UM.Theme.getSize("default_lining").height Repeater { @@ -69,7 +68,8 @@ Item source: UM.Theme.getIcon(model.icon) != "" ? UM.Theme.getIcon(model.icon) : "file:///" + model.location + "/" + model.icon color: UM.Theme.getColor("icon") - sourceSize: UM.Theme.getSize("button_icon") + sourceSize.height: Math.round(UM.Theme.getSize("button").height / 2) + sourceSize.width: Math.round(UM.Theme.getSize("button").width / 2) } onCheckedChanged: @@ -131,7 +131,6 @@ Item anchors.topMargin: UM.Theme.getSize("default_margin").height anchors.top: toolButtons.bottom anchors.right: parent.right - spacing: UM.Theme.getSize("default_lining").height Repeater { diff --git a/resources/qml/ToolbarButton.qml b/resources/qml/ToolbarButton.qml index b3f84bba1d..206ab23dc4 100644 --- a/resources/qml/ToolbarButton.qml +++ b/resources/qml/ToolbarButton.qml @@ -25,22 +25,7 @@ Button { implicitWidth: UM.Theme.getSize("button").width implicitHeight: UM.Theme.getSize("button").height - color: - { - if (base.checked && base.hovered) - { - return UM.Theme.getColor("toolbar_button_active_hover") - } - else if (base.checked) - { - return UM.Theme.getColor("toolbar_button_active") - } - else if(base.hovered) - { - return UM.Theme.getColor("toolbar_button_hover") - } - return UM.Theme.getColor("toolbar_background") - } + color: UM.Theme.getColor("toolbar_background") radius: UM.Theme.getSize("default_radius").width Rectangle @@ -84,16 +69,35 @@ Button color: parent.color } } - - contentItem: Item + contentItem: Rectangle { opacity: parent.enabled ? 1.0 : 0.2 + implicitWidth: Math.round(UM.Theme.getSize("button").width * 0.75) + implicitHeight: Math.round(UM.Theme.getSize("button").height * 0.75) + radius: Math.round(width * 0.5) + + color: + { + if (base.checked && base.hovered) + { + return UM.Theme.getColor("toolbar_button_active_hover") + } + else if (base.checked) + { + return UM.Theme.getColor("toolbar_button_active") + } + else if(base.hovered) + { + return UM.Theme.getColor("toolbar_button_hover") + } + return UM.Theme.getColor("toolbar_background") + } Loader { id: contentItemLoader anchors.centerIn: parent - width: UM.Theme.getSize("button_icon").width - height: UM.Theme.getSize("button_icon").height + width: Math.round(UM.Theme.getSize("button").width / 2) + height: Math.round(UM.Theme.getSize("button").height / 2) } } diff --git a/resources/qml/ViewOrientationButton.qml b/resources/qml/ViewOrientationButton.qml index 5d72de9a8d..7040447b29 100644 --- a/resources/qml/ViewOrientationButton.qml +++ b/resources/qml/ViewOrientationButton.qml @@ -11,5 +11,4 @@ UM.SimpleButton height: UM.Theme.getSize("small_button").height hoverColor: UM.Theme.getColor("small_button_text_hover") color: UM.Theme.getColor("small_button_text") - iconMargin: UM.Theme.getSize("thick_lining").width } \ No newline at end of file diff --git a/resources/texts/change_log.txt b/resources/texts/change_log.txt index f9c407e44a..df347ef8aa 100644 --- a/resources/texts/change_log.txt +++ b/resources/texts/change_log.txt @@ -1,5 +1,5 @@ [4.10.0] -BETA +For an overview of the new features in Cura 4.10, please watch our video. *Native CAD import plugin Ultimaker Professional and Excellence subscribers can now directly import native CAD files into Ultimaker Cura. @@ -36,6 +36,8 @@ When double clicking on a file in the open project dialog in Digital Factory it - Fixed a bug when the seam was not placed in sharpest corner. - Fixed the gantry height for S-line printers. - Fixed a bug where a model is partially below build plate if center selected model is used. +- Fixed a bug where a tootip arrow appeared when the "Manage printers" button is hovered. +- Fixed a bug where assemblies were not arranged in the center of the build plate. * Printer definitions, profiles and materials. - Add CC0.4 core and materials for S3 and S5. @@ -51,6 +53,8 @@ When double clicking on a file in the open project dialog in Digital Factory it - Mingda D3, D4 and Rock3, contributed by cataclism. - JGAurora A6, contributed by CrissR. +Please, be aware that after version 4.10 Ultimaker Cura will only be supported on operating systems actively maintained by their software manufacturer or community. This means Windows 7 and MacOS 10.13 will no longer be supported. Technically this means Ultimaker will stop testing and developing for such operating systems. However, even though it is no longer supported, there is still a high likelihood the application keeps functioning. + [4.9.1] * PETG Profile update. Ultimaker PETG profiles have been added. The Generic PETG profile for 2.85mm filaments has been updated as well. diff --git a/resources/texts/whats_new/0.html b/resources/texts/whats_new/0.html index 8bbfb163e0..d0a7459099 100644 --- a/resources/texts/whats_new/0.html +++ b/resources/texts/whats_new/0.html @@ -1,3 +1,3 @@

Open native CAD files for Ultimaker Professional and Excellence

-

Ultimaker Professional and Excellence subscribers can now directly import native CAD files into Ultimaker Cura. This provides users with an even more effective workflow by boosting productivity and increasing first-time right results.
-Learn more about our enterprise software or download the Native CAD import plugin.

\ No newline at end of file +

Ultimaker Professional and Excellence subscribers can now directly import native CAD files into Ultimaker Cura. This provides users with an even more effective workflow by boosting productivity and increasing first-time right results.
+Learn more about our enterprise plans to access this feature.

\ No newline at end of file diff --git a/resources/texts/whats_new/2.html b/resources/texts/whats_new/2.html index 6b9be5771e..a6f20cb493 100644 --- a/resources/texts/whats_new/2.html +++ b/resources/texts/whats_new/2.html @@ -1,2 +1,2 @@ -

Get more information!

-

Want more information for Ultimaker Cura 4.10 beta and other exciting developments in the Ultimaker platform? Read the blog post, and don't forget to give us your feedback!

\ No newline at end of file +

Ultimaker PETG print profiles are now available for the Ultimaker 3

+

Ultimaker PETG sets the standard for industrial applications and is suitable for a wide range of use cases thanks to its ease of use and versatility. Ultimaker PETG is now fully supported on the Ultimaker 3. Find out more.

\ No newline at end of file diff --git a/resources/texts/whats_new/3.html b/resources/texts/whats_new/3.html new file mode 100644 index 0000000000..a433453bde --- /dev/null +++ b/resources/texts/whats_new/3.html @@ -0,0 +1,2 @@ +

Flow rate

+

Thanks to Khani3s, we have now added the volumetric flow rate (in mm³/s) to the preview mode color schemes. In addition, we tweaked the minimum/maximum color values, making it easier to optimize your print strategy displayed as the flow, layer thickness, line width and speed.

\ No newline at end of file diff --git a/resources/texts/whats_new/4.html b/resources/texts/whats_new/4.html new file mode 100644 index 0000000000..5997ce2408 --- /dev/null +++ b/resources/texts/whats_new/4.html @@ -0,0 +1,2 @@ +

Learn more!

+

Want more information for Ultimaker Cura 4.10? Read the blog post or watch the video, and don't forget to give us your feedback!

\ No newline at end of file diff --git a/resources/themes/cura-light/icons/medium/Folder.svg b/resources/themes/cura-light/icons/medium/Folder.svg new file mode 100644 index 0000000000..8dc9b5ea9f --- /dev/null +++ b/resources/themes/cura-light/icons/medium/Folder.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/resources/themes/cura-light/icons/medium/Printer.svg b/resources/themes/cura-light/icons/medium/Printer.svg new file mode 100644 index 0000000000..ef67996d48 --- /dev/null +++ b/resources/themes/cura-light/icons/medium/Printer.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + diff --git a/resources/themes/cura-light/icons/medium/Sliders.svg b/resources/themes/cura-light/icons/medium/Sliders.svg new file mode 100644 index 0000000000..91bd9ae0fd --- /dev/null +++ b/resources/themes/cura-light/icons/medium/Sliders.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + diff --git a/resources/themes/cura-light/styles.qml b/resources/themes/cura-light/styles.qml index de15866f1a..1320b54f37 100755 --- a/resources/themes/cura-light/styles.qml +++ b/resources/themes/cura-light/styles.qml @@ -252,11 +252,11 @@ QtObject anchors.centerIn: parent opacity: control.enabled ? 1.0 : 0.2 source: control.iconSource - width: UM.Theme.getSize("button_icon").width - height: UM.Theme.getSize("button_icon").height + width: UM.Theme.getSize("medium_button_icon").width + height: UM.Theme.getSize("medium_button_icon").height color: UM.Theme.getColor("icon") - sourceSize: UM.Theme.getSize("button_icon") + sourceSize: UM.Theme.getSize("medium_button_icon") } } } diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index 5245d21455..c45eb00c9e 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -482,7 +482,7 @@ "machine_selector_widget": [20.0, 4.0], "machine_selector_widget_content": [25.0, 32.0], - "machine_selector_icon": [2.66, 2.66], + "machine_selector_icon": [2.5, 2.5], "views_selector": [23.0, 4.0], @@ -507,8 +507,8 @@ "section": [0.0, 2], "section_control": [0, 1], - "section_icon": [1.6, 1.6], - "section_icon_column": [2.8, 0.0], + "section_icon": [2, 2], + "section_icon_column": [2.5, 2.5], "rating_star": [1.0, 1.0], "setting": [25.0, 1.8], @@ -537,6 +537,9 @@ "small_button": [2, 2], "small_button_icon": [1.5, 1.5], + "medium_button": [2.5, 2.5], + "medium_button_icon": [2, 2], + "favorites_row": [2, 2], "favorites_button": [2, 2], "favorites_button_icon": [1.2, 1.2],