mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-18 04:07:57 -06:00

The lining at the bottom of a tile was anchored to the bottom but part of the tile and part of its childrenRect. This caused a binding loop because the childrenRect is dependent on the positioning of this lining (and its height) and the positioning of the lining was dependent on the height of the tile. Contributes to issue CURA-5035.
246 lines
7.8 KiB
QML
246 lines
7.8 KiB
QML
// Copyright (c) 2018 Ultimaker B.V.
|
|
// Toolbox is released under the terms of the LGPLv3 or higher.
|
|
|
|
import QtQuick 2.2
|
|
import QtQuick.Controls 1.4
|
|
import QtQuick.Controls.Styles 1.4
|
|
import UM 1.1 as UM
|
|
|
|
Item
|
|
{
|
|
id: tile
|
|
property bool installed: toolbox.isInstalled(model.id)
|
|
width: detailList.width - UM.Theme.getSize("wide_margin").width
|
|
height: Math.max(UM.Theme.getSize("toolbox_detail_tile").height, childrenRect.height + UM.Theme.getSize("default_margin").height)
|
|
Item
|
|
{
|
|
id: normalData
|
|
height: childrenRect.height
|
|
anchors
|
|
{
|
|
left: parent.left
|
|
right: controls.left
|
|
rightMargin: UM.Theme.getSize("default_margin").width
|
|
top: parent.top
|
|
}
|
|
Label
|
|
{
|
|
id: packageName
|
|
width: parent.width
|
|
height: UM.Theme.getSize("toolbox_property_label").height
|
|
text: model.name
|
|
wrapMode: Text.WordWrap
|
|
color: UM.Theme.getColor("text")
|
|
font: UM.Theme.getFont("medium_bold")
|
|
}
|
|
Label
|
|
{
|
|
anchors.top: packageName.bottom
|
|
width: parent.width
|
|
text: model.description
|
|
maximumLineCount: 3
|
|
elide: Text.ElideRight
|
|
wrapMode: Text.WordWrap
|
|
color: UM.Theme.getColor("text")
|
|
font: UM.Theme.getFont("default")
|
|
}
|
|
}
|
|
Item
|
|
{
|
|
id: controls
|
|
anchors.right: tile.right
|
|
anchors.top: tile.top
|
|
width: childrenRect.width
|
|
height: childrenRect.height
|
|
Button
|
|
{
|
|
id: installButton
|
|
text:
|
|
{
|
|
if (installed)
|
|
{
|
|
return catalog.i18nc("@action:button", "Installed")
|
|
}
|
|
else
|
|
{
|
|
if (toolbox.isDownloading && toolbox.activePackage == model)
|
|
{
|
|
return catalog.i18nc("@action:button", "Cancel")
|
|
}
|
|
else
|
|
{
|
|
return catalog.i18nc("@action:button", "Install")
|
|
}
|
|
}
|
|
}
|
|
enabled: installed || !(toolbox.isDownloading && toolbox.activePackage != model) //Don't allow installing while another download is running.
|
|
opacity: enabled ? 1.0 : 0.5
|
|
style: ButtonStyle
|
|
{
|
|
background: Rectangle
|
|
{
|
|
implicitWidth: 96
|
|
implicitHeight: 30
|
|
color:
|
|
{
|
|
if (installed)
|
|
{
|
|
return UM.Theme.getColor("action_button_disabled")
|
|
}
|
|
else
|
|
{
|
|
if ( control.hovered )
|
|
{
|
|
return UM.Theme.getColor("primary_hover")
|
|
}
|
|
else
|
|
{
|
|
return UM.Theme.getColor("primary")
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
label: Label
|
|
{
|
|
text: control.text
|
|
color:
|
|
{
|
|
if (installed)
|
|
{
|
|
return UM.Theme.getColor("action_button_disabled_text")
|
|
}
|
|
else
|
|
{
|
|
if ( control.hovered )
|
|
{
|
|
return UM.Theme.getColor("button_text_hover")
|
|
}
|
|
else
|
|
{
|
|
return UM.Theme.getColor("button_text")
|
|
}
|
|
}
|
|
}
|
|
verticalAlignment: Text.AlignVCenter
|
|
horizontalAlignment: Text.AlignHCenter
|
|
font: UM.Theme.getFont("default_bold")
|
|
}
|
|
}
|
|
onClicked:
|
|
{
|
|
if (installed)
|
|
{
|
|
toolbox.viewCategory = "installed"
|
|
}
|
|
else
|
|
{
|
|
// if ( toolbox.isDownloading && toolbox.activePackage == model )
|
|
if ( toolbox.isDownloading )
|
|
{
|
|
toolbox.cancelDownload();
|
|
}
|
|
else
|
|
{
|
|
toolbox.activePackage = model
|
|
// toolbox.activePackage = model;
|
|
if ( model.can_upgrade )
|
|
{
|
|
// toolbox.downloadAndInstallPlugin( model.update_url );
|
|
}
|
|
else
|
|
{
|
|
toolbox.startDownload( model.download_url );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Item
|
|
{
|
|
id: supportedConfigsChart
|
|
anchors.top: normalData.bottom
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
height: visible ? childrenRect.height : 0
|
|
width: normalData.width
|
|
visible: model.type == "material" && model.supported_configs.length > 0
|
|
Label
|
|
{
|
|
id: compatibilityHeading
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
width: parent.width
|
|
text: catalog.i18nc("@label", "Compatibility")
|
|
wrapMode: Text.WordWrap
|
|
color: UM.Theme.getColor("text_medium")
|
|
font: UM.Theme.getFont("default")
|
|
}
|
|
Column
|
|
{
|
|
id: compatibilityLabels
|
|
anchors
|
|
{
|
|
top: compatibilityHeading.bottom
|
|
topMargin: UM.Theme.getSize("default_margin").height
|
|
bottomMargin: UM.Theme.getSize("default_margin").height
|
|
}
|
|
width: childrenRect.width
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@label", "Machines") + ":"
|
|
font: UM.Theme.getFont("small")
|
|
}
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@label", "Print Cores") + ":"
|
|
font: UM.Theme.getFont("small")
|
|
}
|
|
Label
|
|
{
|
|
text: catalog.i18nc("@label", "Quality Profiles") + ":"
|
|
font: UM.Theme.getFont("small")
|
|
}
|
|
}
|
|
Column
|
|
{
|
|
id: compatibilityValues
|
|
anchors
|
|
{
|
|
left: compatibilityLabels.right
|
|
leftMargin: UM.Theme.getSize("default_margin").height
|
|
top: compatibilityLabels.top
|
|
bottom: compatibilityLabels.bottom
|
|
}
|
|
Label
|
|
{
|
|
text: "Thingy"
|
|
font: UM.Theme.getFont("very_small")
|
|
}
|
|
Label
|
|
{
|
|
text: "Thingy"
|
|
font: UM.Theme.getFont("very_small")
|
|
}
|
|
Label
|
|
{
|
|
text: "Thingy"
|
|
font: UM.Theme.getFont("very_small")
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle
|
|
{
|
|
color: UM.Theme.getColor("lining")
|
|
width: tile.width
|
|
height: UM.Theme.getSize("default_lining").height
|
|
anchors.top: supportedConfigsChart.bottom
|
|
anchors.topMargin: UM.Theme.getSize("default_margin").height + UM.Theme.getSize("wide_margin").height //Normal margin for spacing after chart, wide margin between items.
|
|
}
|
|
Connections
|
|
{
|
|
target: toolbox
|
|
onInstallChanged: installed = toolbox.isInstalled(model.id)
|
|
}
|
|
}
|