status-desktop/ui/shared/status/StatusExpandableAddress.qml

102 lines
2.9 KiB
QML

import QtQuick 2.13
import QtQuick.Controls 2.13
import utils 1.0
import "../"
import "../controls"
// TODO: replace with StatusQ components
Item {
id: root
height: control.height
width: control.width + copyToClipBoardBtn.width + Style.current.smallPadding
property bool hovered: false
property string address: ""
property bool expanded: false
property int addressWidth
property int originalButtonWidth
Button {
id: control
width: root.addressWidth
leftPadding: 8
rightPadding: 8
contentItem: StyledText {
id: addressText
text: root.address
font.pixelSize: 13
font.family: Style.current.fontHexRegular.name
color: Style.current.secondaryText
elide: Text.ElideMiddle
horizontalAlignment: Text.AlignHCenter
}
background: Rectangle {
color: root.hovered ? Style.current.backgroundHover : "transparent"
radius: Style.current.radius
}
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
if (root.expanded) {
control.width = root.originalButtonWidth
this.width = control.width
} else {
root.originalButtonWidth = root.addressWidth
control.width = control.maxWidth > 0 ?
Math.min(addressText.implicitWidth, control.maxWidth) :
addressText.implicitWidth + control.leftPadding + control.rightPadding
}
this.width = control.width
root.expanded = !root.expanded
}
}
}
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
propagateComposedEvents: true
onPressed: mouse.accepted = false
onEntered: {
if (!root.hovered) {
root.hovered = true
}
}
onExited: {
if (root.hovered) {
root.hovered = false
}
}
}
CopyToClipBoardButton {
id: copyToClipBoardBtn
visible: root.hovered
anchors.left: control.right
anchors.leftMargin: Style.current.smallPadding
anchors.verticalCenter: parent.verticalCenter
textToCopy: root.address
MouseArea {
anchors.fill: parent
propagateComposedEvents: true
onPressed: mouse.accepted = false
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onEntered: {
if (!root.hovered) {
root.hovered = true
}
}
onExited: {
if (root.hovered) {
root.hovered = false
}
}
}
}
}