mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-02 16:54:23 +08:00
262 lines
8.8 KiB
QML
262 lines
8.8 KiB
QML
// Copyright (c) 2018 Ultimaker B.V.
|
|
// Cura is released under the terms of the LGPLv3 or higher.
|
|
|
|
import QtQuick 2.7
|
|
import QtQuick.Controls 2.0
|
|
import QtQuick.Layouts 1.3
|
|
|
|
import UM 1.2 as UM
|
|
import Cura 1.0 as Cura
|
|
import "Menus"
|
|
import "Menus/ConfigurationMenu"
|
|
|
|
Cura.ExpandableComponent
|
|
{
|
|
id: base
|
|
|
|
property int currentModeIndex: -1
|
|
property bool hideSettings: PrintInformation.preSliced
|
|
|
|
property string enabledText: catalog.i18nc("@label:Should be short", "On")
|
|
property string disabledText: catalog.i18nc("@label:Should be short", "Off")
|
|
|
|
// This widget doesn't show tooltips by itself. Instead it emits signals so others can do something with it.
|
|
signal showTooltip(Item item, point location, string text)
|
|
signal hideTooltip()
|
|
|
|
implicitWidth: 200 * screenScaleFactor
|
|
height: childrenRect.height
|
|
iconSource: UM.Theme.getIcon("pencil")
|
|
|
|
onCurrentModeIndexChanged: UM.Preferences.setValue("cura/active_mode", currentModeIndex)
|
|
|
|
UM.I18nCatalog
|
|
{
|
|
id: catalog
|
|
name: "cura"
|
|
}
|
|
|
|
Timer
|
|
{
|
|
id: tooltipDelayTimer
|
|
interval: 500
|
|
repeat: false
|
|
property var item
|
|
property string text
|
|
|
|
onTriggered: base.showTooltip(base, {x: 0, y: item.y}, text)
|
|
}
|
|
|
|
headerItem: RowLayout
|
|
{
|
|
anchors.fill: parent
|
|
|
|
IconWithText
|
|
{
|
|
source: UM.Theme.getIcon("category_layer_height")
|
|
text: Cura.MachineManager.activeStack ? Cura.MachineManager.activeQualityOrQualityChangesName + " " + layerHeight.properties.value + "mm" : ""
|
|
|
|
UM.SettingPropertyProvider
|
|
{
|
|
id: layerHeight
|
|
containerStack: Cura.MachineManager.activeStack
|
|
key: "layer_height"
|
|
watchedProperties: ["value"]
|
|
}
|
|
}
|
|
|
|
IconWithText
|
|
{
|
|
source: UM.Theme.getIcon("category_infill")
|
|
text: Cura.MachineManager.activeStack ? parseInt(infillDensity.properties.value) + "%" : "0%"
|
|
|
|
UM.SettingPropertyProvider
|
|
{
|
|
id: infillDensity
|
|
containerStack: Cura.MachineManager.activeStack
|
|
key: "infill_sparse_density"
|
|
watchedProperties: ["value"]
|
|
}
|
|
}
|
|
|
|
IconWithText
|
|
{
|
|
source: UM.Theme.getIcon("category_support")
|
|
text: supportEnabled.properties.value == "True" ? enabledText : disabledText
|
|
|
|
|
|
UM.SettingPropertyProvider
|
|
{
|
|
id: supportEnabled
|
|
containerStack: Cura.MachineManager.activeMachine
|
|
key: "support_enable"
|
|
watchedProperties: ["value"]
|
|
}
|
|
}
|
|
|
|
IconWithText
|
|
{
|
|
source: UM.Theme.getIcon("category_adhesion")
|
|
text: platformAdhesionType.properties.value != "skirt" && platformAdhesionType.properties.value != "none" ? enabledText : disabledText
|
|
|
|
UM.SettingPropertyProvider
|
|
{
|
|
id: platformAdhesionType
|
|
containerStack: Cura.MachineManager.activeMachine
|
|
key: "adhesion_type"
|
|
watchedProperties: [ "value"]
|
|
}
|
|
}
|
|
}
|
|
|
|
popupItem: Item
|
|
{
|
|
height: settingsModeSelection.height + sidebarContents.height + 2 * UM.Theme.getSize("default_margin").height
|
|
width: UM.Theme.getSize("print_setup_widget").width
|
|
ListView
|
|
{
|
|
// Settings mode selection toggle
|
|
id: settingsModeSelection
|
|
model: modesListModel
|
|
height: UM.Theme.getSize("print_setup_mode_toggle").height
|
|
visible: !hideSettings
|
|
|
|
anchors
|
|
{
|
|
right: parent.right
|
|
left: parent.left
|
|
margins: UM.Theme.getSize("thick_margin").width
|
|
}
|
|
|
|
ButtonGroup
|
|
{
|
|
id: modeMenuGroup
|
|
}
|
|
|
|
delegate: Button
|
|
{
|
|
id: control
|
|
|
|
height: settingsModeSelection.height
|
|
width: Math.round(parent.width / 2)
|
|
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: model.index * Math.round(settingsModeSelection.width / 2)
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
ButtonGroup.group: modeMenuGroup
|
|
|
|
checkable: true
|
|
checked: base.currentModeIndex == index
|
|
onClicked: base.currentModeIndex = index
|
|
|
|
onHoveredChanged:
|
|
{
|
|
if (hovered)
|
|
{
|
|
tooltipDelayTimer.item = settingsModeSelection
|
|
tooltipDelayTimer.text = model.tooltipText
|
|
tooltipDelayTimer.start()
|
|
}
|
|
else
|
|
{
|
|
tooltipDelayTimer.stop()
|
|
base.hideTooltip()
|
|
}
|
|
}
|
|
|
|
background: Rectangle
|
|
{
|
|
border.width: control.checked ? UM.Theme.getSize("default_lining").width * 2 : UM.Theme.getSize("default_lining").width
|
|
border.color: (control.checked || control.pressed) ? UM.Theme.getColor("action_button_active_border") : control.hovered ? UM.Theme.getColor("action_button_hovered_border") : UM.Theme.getColor("action_button_border")
|
|
|
|
// For some reason, QtQuick decided to use the color of the background property as text color for the contentItem, so here it is
|
|
color: (control.checked || control.pressed) ? UM.Theme.getColor("action_button_active") : control.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button")
|
|
}
|
|
|
|
contentItem: Label
|
|
{
|
|
text: model.text
|
|
font: UM.Theme.getFont("default")
|
|
horizontalAlignment: Text.AlignHCenter
|
|
verticalAlignment: Text.AlignVCenter
|
|
renderType: Text.NativeRendering
|
|
elide: Text.ElideRight
|
|
|
|
color:
|
|
{
|
|
if(control.pressed)
|
|
{
|
|
return UM.Theme.getColor("action_button_active_text")
|
|
}
|
|
else if(control.hovered)
|
|
{
|
|
return UM.Theme.getColor("action_button_hovered_text")
|
|
}
|
|
return UM.Theme.getColor("action_button_text")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Item
|
|
{
|
|
id: sidebarContents
|
|
anchors.top: settingsModeSelection.bottom
|
|
anchors.topMargin: UM.Theme.getSize("thick_margin").height
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
height: UM.Theme.getSize("print_setup_widget").height
|
|
|
|
visible: !hideSettings
|
|
|
|
// We load both of them at once (instead of using a loader) because the advanced sidebar can take
|
|
// quite some time to load. So in this case we sacrifice memory for speed.
|
|
SidebarAdvanced
|
|
{
|
|
anchors.fill: parent
|
|
visible: currentModeIndex == 1
|
|
onShowTooltip: base.showTooltip(item, location, text)
|
|
onHideTooltip: base.hideTooltip()
|
|
}
|
|
|
|
SidebarSimple
|
|
{
|
|
anchors.fill: parent
|
|
visible: currentModeIndex != 1
|
|
onShowTooltip: base.showTooltip(item, location, text)
|
|
onHideTooltip: base.hideTooltip()
|
|
}
|
|
}
|
|
|
|
// Setting mode: Recommended or Custom
|
|
ListModel
|
|
{
|
|
id: modesListModel
|
|
}
|
|
|
|
Component.onCompleted:
|
|
{
|
|
modesListModel.append({
|
|
text: catalog.i18nc("@title:tab", "Recommended"),
|
|
tooltipText: "<b>%1</b><br/><br/>%2".arg(catalog.i18nc("@tooltip:title", "Recommended Print Setup")).arg(catalog.i18nc("@tooltip", "Print with the recommended settings for the selected printer, material and quality."))
|
|
})
|
|
modesListModel.append({
|
|
text: catalog.i18nc("@title:tab", "Custom"),
|
|
tooltipText: "<b>%1</b><br/><br/>%2".arg(catalog.i18nc("@tooltip:title", "Custom Print Setup")).arg(catalog.i18nc("@tooltip", "Print with finegrained control over every last bit of the slicing process."))
|
|
})
|
|
|
|
var index = Math.round(UM.Preferences.getValue("cura/active_mode"))
|
|
|
|
if(index != null && !isNaN(index))
|
|
{
|
|
currentModeIndex = index
|
|
}
|
|
else
|
|
{
|
|
currentModeIndex = 0
|
|
}
|
|
}
|
|
}
|
|
}
|