mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-21 05:37:50 -06:00
Added re-usable expandable component
CURA-5785
This commit is contained in:
parent
88234f7e21
commit
2adb79aa39
1 changed files with 77 additions and 0 deletions
77
resources/qml/ExpandableComponent.qml
Normal file
77
resources/qml/ExpandableComponent.qml
Normal file
|
@ -0,0 +1,77 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.3
|
||||
|
||||
// The expandable component has 3 major sub components:
|
||||
// * The headerItem; Always visible and should hold some info about what happens if the component is expanded
|
||||
// * The popupItem; The content that needs to be shown if the component is expanded.
|
||||
// * The Button; The actual button that expands the popup.
|
||||
Item
|
||||
{
|
||||
// The headerItem holds the QML item that is always displayed.
|
||||
property alias headerItem: headerItemLoader.sourceComponent
|
||||
|
||||
// The popupItem holds the QML item that is shown when the "open" button is pressed
|
||||
property var popupItem
|
||||
|
||||
// The background color of the popup
|
||||
property color popupBackgroundColor: "white"
|
||||
|
||||
// How much spacing is needed around the popupItem
|
||||
property alias padding: popup.padding
|
||||
|
||||
onPopupItemChanged:
|
||||
{
|
||||
// Since we want the size of the popup to be set by the size of the content,
|
||||
// we need to do it like this.
|
||||
popup.width = popupItem.width + 2 * popup.padding
|
||||
popup.height = popupItem.height + 2 * popup.padding
|
||||
popup.contentItem = popupItem
|
||||
}
|
||||
|
||||
implicitHeight: 100
|
||||
implicitWidth: 400
|
||||
|
||||
Loader
|
||||
{
|
||||
id: headerItemLoader
|
||||
anchors
|
||||
{
|
||||
left: parent.left
|
||||
right: collapseButton.left
|
||||
top: parent.top
|
||||
bottom: parent.bottom
|
||||
}
|
||||
}
|
||||
|
||||
Button
|
||||
{
|
||||
id: collapseButton
|
||||
anchors
|
||||
{
|
||||
right: parent.right
|
||||
top: parent.top
|
||||
bottom: parent.bottom
|
||||
}
|
||||
text: popup.visible ? "close" : "open"
|
||||
onClicked: popup.visible ? popup.close() : popup.open()
|
||||
}
|
||||
|
||||
Popup
|
||||
{
|
||||
id: popup
|
||||
|
||||
// Ensure that the popup is located directly below the headerItem
|
||||
y: headerItemLoader.height
|
||||
|
||||
// Make the popup right aligned with the rest.
|
||||
x: -width + collapseButton.width + headerItemLoader.width
|
||||
|
||||
closePolicy: Popup.CloseOnPressOutsideParent
|
||||
|
||||
background: Rectangle
|
||||
{
|
||||
id: background
|
||||
color: popupBackgroundColor
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue