Instead of having a seperate tooltip for the checkbox and the text area, the two have been combined into one tooltip.

The reason for this is that hovering the mouse between the checkbox and text was causing some strange behaviour where sometimes the tooltip would not appear.

The effect of the changes in RecommendedSupportSelector.qml are the same as RecommendedAdhesionSelector.qml. It just required a bit of refactoring to have the checkbox and the textlabel in the same component.

CURA-8849
This commit is contained in:
j.delarago 2022-06-21 11:59:03 +02:00
parent 4ee4a781f4
commit cde897ff1e
2 changed files with 218 additions and 210 deletions

View File

@ -28,7 +28,6 @@ Item
font: UM.Theme.getFont("medium") font: UM.Theme.getFont("medium")
width: labelColumnWidth width: labelColumnWidth
iconSize: UM.Theme.getSize("medium_button_icon").width iconSize: UM.Theme.getSize("medium_button_icon").width
tooltipText: catalog.i18nc("@label", "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards.")
} }
Item Item
@ -48,8 +47,6 @@ Item
id: enableAdhesionCheckBox id: enableAdhesionCheckBox
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
property alias _hovered: adhesionMouseArea.containsMouse
//: Setting enable printing build-plate adhesion helper checkbox //: Setting enable printing build-plate adhesion helper checkbox
enabled: recommendedPrintSetup.settingsEnabled enabled: recommendedPrintSetup.settingsEnabled
@ -61,22 +58,25 @@ Item
id: adhesionMouseArea id: adhesionMouseArea
anchors.fill: parent anchors.fill: parent
hoverEnabled: true hoverEnabled: true
// propagateComposedEvents used on adhesionTooltipMouseArea does not work with Controls Components.
onClicked: // It only works with other MouseAreas, so this is required
{ onClicked: curaRecommendedMode.setAdhesion(!parent.checked)
curaRecommendedMode.setAdhesion(!parent.checked)
}
onEntered:
{
base.showTooltip(enableAdhesionCheckBox, Qt.point(-enableAdhesionContainer.x - UM.Theme.getSize("thick_margin").width, 0),
catalog.i18nc("@label", "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards."));
}
onExited: base.hideTooltip()
} }
} }
} }
MouseArea
{
id: adhesionTooltipMouseArea
anchors.fill: parent
propagateComposedEvents: true
hoverEnabled: true
onEntered:base.showTooltip(enableAdhesionCheckBox, Qt.point(-enableAdhesionContainer.x - UM.Theme.getSize("thick_margin").width, 0),
catalog.i18nc("@label", "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards."));
onExited: base.hideTooltip()
}
UM.SettingPropertyProvider UM.SettingPropertyProvider
{ {
id: platformAdhesionType id: platformAdhesionType

View File

@ -18,36 +18,39 @@ Item
property real labelColumnWidth: Math.round(width / 3) property real labelColumnWidth: Math.round(width / 3)
Cura.IconWithText
{
id: enableSupportRowTitle
anchors.top: parent.top
anchors.left: parent.left
visible: enableSupportCheckBox.visible
source: UM.Theme.getIcon("Support")
text: catalog.i18nc("@label", "Support")
font: UM.Theme.getFont("medium")
width: labelColumnWidth
iconSize: UM.Theme.getSize("medium_button_icon").width
tooltipText: catalog.i18nc("@label", "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.")
}
Item Item
{ {
id: enableSupportContainer id: enableSupportContainer
height: enableSupportCheckBox.height height: enableSupportCheckBox
width: childrenRect.width
anchors anchors
{ {
left: enableSupportRowTitle.right left: parent.left
right: parent.right top: parent.top
verticalCenter: enableSupportRowTitle.verticalCenter bottom: parent.bottom
rightMargin: UM.Theme.getSize("thick_margin").width
verticalCenter: parent.verticalCenter
}
Cura.IconWithText
{
id: enableSupportRowTitle
anchors.left: parent.left
visible: enableSupportCheckBox.visible
source: UM.Theme.getIcon("Support")
text: catalog.i18nc("@label", "Support")
font: UM.Theme.getFont("medium")
width: labelColumnWidth
iconSize: UM.Theme.getSize("medium_button_icon").width
tooltipText: catalog.i18nc("@label", "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.")
} }
UM.CheckBox UM.CheckBox
{ {
id: enableSupportCheckBox id: enableSupportCheckBox
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.left: enableSupportRowTitle.right
property alias _hovered: enableSupportMouseArea.containsMouse property alias _hovered: enableSupportMouseArea.containsMouse
@ -61,158 +64,220 @@ Item
id: enableSupportMouseArea id: enableSupportMouseArea
anchors.fill: parent anchors.fill: parent
hoverEnabled: true hoverEnabled: true
// propagateComposedEvents used on supportToolTipMouseArea does not work with Controls Components.
// It only works with other MouseAreas, so this is required
onClicked: supportEnabled.setPropertyValue("value", supportEnabled.properties.value != "True") onClicked: supportEnabled.setPropertyValue("value", supportEnabled.properties.value != "True")
onEntered:
{
base.showTooltip(enableSupportCheckBox, Qt.point(-enableSupportContainer.x - UM.Theme.getSize("thick_margin").width, 0),
catalog.i18nc("@label", "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing."))
}
onExited: base.hideTooltip()
} }
} }
ComboBox MouseArea
{ {
id: supportExtruderCombobox id: supportToolTipMouseArea
anchors.fill: parent
propagateComposedEvents: true
hoverEnabled: true
onEntered: base.showTooltip(enableSupportContainer, Qt.point(-enableSupportContainer.x - UM.Theme.getSize("thick_margin").width, 0),
catalog.i18nc("@label", "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing."))
onExited: base.hideTooltip()
}
}
height: UM.Theme.getSize("print_setup_big_item").height ComboBox
anchors {
id: supportExtruderCombobox
height: UM.Theme.getSize("print_setup_big_item").height
anchors
{
left: enableSupportContainer.right
right: parent.right
leftMargin: UM.Theme.getSize("default_margin").width
rightMargin: UM.Theme.getSize("thick_margin").width
verticalCenter: parent.verticalCenter
}
enabled: recommendedPrintSetup.settingsEnabled
visible: enableSupportCheckBox.visible && (supportEnabled.properties.value == "True") && (extrudersEnabledCount.properties.value > 1)
textRole: "name" // this solves that the combobox isn't populated in the first time Cura is started
model: extruderModel
// knowing the extruder position, try to find the item index in the model
function getIndexByPosition(position)
{
var itemIndex = -1 // if position is not found, return -1
for (var item_index in model.items)
{ {
left: enableSupportCheckBox.right var item = model.getItem(item_index)
right: parent.right if (item.index == position)
leftMargin: UM.Theme.getSize("thick_margin").width
rightMargin: UM.Theme.getSize("thick_margin").width
verticalCenter: parent.verticalCenter
}
enabled: recommendedPrintSetup.settingsEnabled
visible: enableSupportCheckBox.visible && (supportEnabled.properties.value == "True") && (extrudersEnabledCount.properties.value > 1)
textRole: "name" // this solves that the combobox isn't populated in the first time Cura is started
model: extruderModel
// knowing the extruder position, try to find the item index in the model
function getIndexByPosition(position)
{
var itemIndex = -1 // if position is not found, return -1
for (var item_index in model.items)
{ {
var item = model.getItem(item_index) itemIndex = item_index
if (item.index == position) break
{
itemIndex = item_index
break
}
}
return itemIndex
}
onActivated:
{
if (model.getItem(index).enabled)
{
forceActiveFocus();
supportExtruderNr.setPropertyValue("value", model.getItem(index).index);
} else
{
currentIndex = supportExtruderNr.properties.value; // keep the old value
} }
} }
return itemIndex
}
currentIndex: (supportExtruderNr.properties.value !== undefined) ? supportExtruderNr.properties.value : 0 onActivated:
{
property string color: "#fff" if (model.getItem(index).enabled)
Connections
{ {
target: extruderModel forceActiveFocus();
function onModelChanged() supportExtruderNr.setPropertyValue("value", model.getItem(index).index);
{ } else
var maybeColor = supportExtruderCombobox.model.getItem(supportExtruderCombobox.currentIndex).color {
if (maybeColor) currentIndex = supportExtruderNr.properties.value; // keep the old value
{
supportExtruderCombobox.color = maybeColor
}
}
} }
onCurrentIndexChanged: }
currentIndex: (supportExtruderNr.properties.value !== undefined) ? supportExtruderNr.properties.value : 0
property string color: "#fff"
Connections
{
target: extruderModel
function onModelChanged()
{ {
var maybeColor = supportExtruderCombobox.model.getItem(supportExtruderCombobox.currentIndex).color var maybeColor = supportExtruderCombobox.model.getItem(supportExtruderCombobox.currentIndex).color
if(maybeColor) if (maybeColor)
{ {
supportExtruderCombobox.color = maybeColor supportExtruderCombobox.color = maybeColor
} }
} }
}
Binding onCurrentIndexChanged:
{
var maybeColor = supportExtruderCombobox.model.getItem(supportExtruderCombobox.currentIndex).color
if(maybeColor)
{ {
target: supportExtruderCombobox supportExtruderCombobox.color = maybeColor
property: "currentIndex"
value: supportExtruderCombobox.getIndexByPosition(supportExtruderNr.properties.value)
// Sometimes when the value is already changed, the model is still being built.
// The when clause ensures that the current index is not updated when this happens.
when: supportExtruderCombobox.model.count > 0
} }
}
indicator: UM.ColorImage Binding
{
target: supportExtruderCombobox
property: "currentIndex"
value: supportExtruderCombobox.getIndexByPosition(supportExtruderNr.properties.value)
// Sometimes when the value is already changed, the model is still being built.
// The when clause ensures that the current index is not updated when this happens.
when: supportExtruderCombobox.model.count > 0
}
indicator: UM.ColorImage
{
id: downArrow
x: supportExtruderCombobox.width - width - supportExtruderCombobox.rightPadding
y: supportExtruderCombobox.topPadding + Math.round((supportExtruderCombobox.availableHeight - height) / 2)
source: UM.Theme.getIcon("ChevronSingleDown")
width: UM.Theme.getSize("standard_arrow").width
height: UM.Theme.getSize("standard_arrow").height
color: UM.Theme.getColor("setting_control_button")
}
background: Rectangle
{
color:
{ {
id: downArrow if (!enabled)
x: supportExtruderCombobox.width - width - supportExtruderCombobox.rightPadding {
y: supportExtruderCombobox.topPadding + Math.round((supportExtruderCombobox.availableHeight - height) / 2) return UM.Theme.getColor("setting_control_disabled")
}
if (supportExtruderCombobox.hovered || base.activeFocus)
{
return UM.Theme.getColor("setting_control_highlight")
}
return UM.Theme.getColor("setting_control")
}
radius: UM.Theme.getSize("setting_control_radius").width
border.width: UM.Theme.getSize("default_lining").width
border.color:
{
if (!enabled)
{
return UM.Theme.getColor("setting_control_disabled_border")
}
if (supportExtruderCombobox.hovered || supportExtruderCombobox.activeFocus)
{
return UM.Theme.getColor("setting_control_border_highlight")
}
return UM.Theme.getColor("setting_control_border")
}
}
source: UM.Theme.getIcon("ChevronSingleDown") contentItem: UM.Label
width: UM.Theme.getSize("standard_arrow").width {
height: UM.Theme.getSize("standard_arrow").height anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: UM.Theme.getSize("setting_unit_margin").width
anchors.right: downArrow.left
rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width
color: UM.Theme.getColor("setting_control_button") text: supportExtruderCombobox.currentText
textFormat: Text.PlainText
color: enabled ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text")
elide: Text.ElideLeft
background: Rectangle
{
id: swatch
height: Math.round(parent.height / 2)
width: height
radius: Math.round(width / 2)
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
anchors.rightMargin: UM.Theme.getSize("thin_margin").width
color: supportExtruderCombobox.color
}
}
popup: Popup
{
y: supportExtruderCombobox.height - UM.Theme.getSize("default_lining").height
width: supportExtruderCombobox.width
implicitHeight: contentItem.implicitHeight + 2 * UM.Theme.getSize("default_lining").width
padding: UM.Theme.getSize("default_lining").width
contentItem: ListView
{
implicitHeight: contentHeight
ScrollBar.vertical: UM.ScrollBar {}
clip: true
model: supportExtruderCombobox.popup.visible ? supportExtruderCombobox.delegateModel : null
currentIndex: supportExtruderCombobox.highlightedIndex
} }
background: Rectangle background: Rectangle
{ {
color: color: UM.Theme.getColor("setting_control")
{ border.color: UM.Theme.getColor("setting_control_border")
if (!enabled)
{
return UM.Theme.getColor("setting_control_disabled")
}
if (supportExtruderCombobox.hovered || base.activeFocus)
{
return UM.Theme.getColor("setting_control_highlight")
}
return UM.Theme.getColor("setting_control")
}
radius: UM.Theme.getSize("setting_control_radius").width
border.width: UM.Theme.getSize("default_lining").width
border.color:
{
if (!enabled)
{
return UM.Theme.getColor("setting_control_disabled_border")
}
if (supportExtruderCombobox.hovered || supportExtruderCombobox.activeFocus)
{
return UM.Theme.getColor("setting_control_border_highlight")
}
return UM.Theme.getColor("setting_control_border")
}
} }
}
delegate: ItemDelegate
{
width: supportExtruderCombobox.width - 2 * UM.Theme.getSize("default_lining").width
height: supportExtruderCombobox.height
highlighted: supportExtruderCombobox.highlightedIndex == index
contentItem: UM.Label contentItem: UM.Label
{ {
anchors.verticalCenter: parent.verticalCenter anchors.fill: parent
anchors.left: parent.left
anchors.leftMargin: UM.Theme.getSize("setting_unit_margin").width anchors.leftMargin: UM.Theme.getSize("setting_unit_margin").width
anchors.right: downArrow.left anchors.rightMargin: UM.Theme.getSize("setting_unit_margin").width
text: model.name
color: model.enabled ? UM.Theme.getColor("setting_control_text"): UM.Theme.getColor("action_button_disabled_text")
elide: Text.ElideRight
rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width
text: supportExtruderCombobox.currentText
textFormat: Text.PlainText
color: enabled ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text")
elide: Text.ElideLeft
background: Rectangle background: Rectangle
{ {
id: swatch id: swatch
@ -223,71 +288,14 @@ Item
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.rightMargin: UM.Theme.getSize("thin_margin").width anchors.rightMargin: UM.Theme.getSize("thin_margin").width
color: supportExtruderCombobox.color color: supportExtruderCombobox.model.getItem(index).color
} }
} }
popup: Popup background: Rectangle
{ {
y: supportExtruderCombobox.height - UM.Theme.getSize("default_lining").height color: parent.highlighted ? UM.Theme.getColor("setting_control_highlight") : "transparent"
width: supportExtruderCombobox.width border.color: parent.highlighted ? UM.Theme.getColor("setting_control_border_highlight") : "transparent"
implicitHeight: contentItem.implicitHeight + 2 * UM.Theme.getSize("default_lining").width
padding: UM.Theme.getSize("default_lining").width
contentItem: ListView
{
implicitHeight: contentHeight
ScrollBar.vertical: UM.ScrollBar {}
clip: true
model: supportExtruderCombobox.popup.visible ? supportExtruderCombobox.delegateModel : null
currentIndex: supportExtruderCombobox.highlightedIndex
}
background: Rectangle
{
color: UM.Theme.getColor("setting_control")
border.color: UM.Theme.getColor("setting_control_border")
}
}
delegate: ItemDelegate
{
width: supportExtruderCombobox.width - 2 * UM.Theme.getSize("default_lining").width
height: supportExtruderCombobox.height
highlighted: supportExtruderCombobox.highlightedIndex == index
contentItem: UM.Label
{
anchors.fill: parent
anchors.leftMargin: UM.Theme.getSize("setting_unit_margin").width
anchors.rightMargin: UM.Theme.getSize("setting_unit_margin").width
text: model.name
color: model.enabled ? UM.Theme.getColor("setting_control_text"): UM.Theme.getColor("action_button_disabled_text")
elide: Text.ElideRight
rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width
background: Rectangle
{
id: swatch
height: Math.round(parent.height / 2)
width: height
radius: Math.round(width / 2)
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
anchors.rightMargin: UM.Theme.getSize("thin_margin").width
color: supportExtruderCombobox.model.getItem(index).color
}
}
background: Rectangle
{
color: parent.highlighted ? UM.Theme.getColor("setting_control_highlight") : "transparent"
border.color: parent.highlighted ? UM.Theme.getColor("setting_control_border_highlight") : "transparent"
}
} }
} }
} }