90 lines
2.3 KiB
QML
90 lines
2.3 KiB
QML
import QtQuick 2.15
|
|
import QtQuick.Controls 2.15
|
|
import QtQuick.Controls.Material 2.12
|
|
|
|
Item {
|
|
id: control
|
|
|
|
property alias text: firstLabel.text
|
|
property alias font: firstLabel.font
|
|
property alias verticalAlignment: firstLabel.verticalAlignment
|
|
property int spacing: 30
|
|
|
|
property MovingLabel syncWithLabel
|
|
property int _spacing: syncWithLabel && syncWithLabel._labelWidth > _labelWidth ? (syncWithLabel._labelWidth - _labelWidth + syncWithLabel.spacing) : spacing
|
|
property alias _labelWidth: firstLabel.width
|
|
|
|
signal linkActivated(string link)
|
|
|
|
clip: true
|
|
height: firstLabel.height
|
|
|
|
onTextChanged: {
|
|
_resetScroll()
|
|
if(control.syncWithLabel)
|
|
control.syncWithLabel._resetScroll()
|
|
}
|
|
|
|
function startScroll(triggerSyncedLabel=true) {
|
|
if(control.syncWithLabel && triggerSyncedLabel)
|
|
control.syncWithLabel.startScroll(false)
|
|
if(control.width < firstLabel.width && !scrollAnimation.running)
|
|
scrollAnimation.start()
|
|
}
|
|
|
|
function _resetScroll() {
|
|
scrollAnimation.stop()
|
|
firstLabel.anchors.leftMargin = 0
|
|
}
|
|
|
|
Label {
|
|
id: firstLabel
|
|
|
|
anchors {
|
|
left: parent.left
|
|
verticalCenter: parent.verticalCenter
|
|
}
|
|
|
|
onLinkActivated: control.onLinkActivated(link)
|
|
}
|
|
|
|
Label {
|
|
id: secondLabel
|
|
|
|
anchors {
|
|
left: firstLabel.right
|
|
leftMargin: control._spacing
|
|
verticalCenter: firstLabel.verticalCenter
|
|
}
|
|
|
|
visible: scrollAnimation.running
|
|
|
|
font: firstLabel.font
|
|
text: firstLabel.text
|
|
verticalAlignment: firstLabel.verticalAlignment
|
|
elide: firstLabel.elide
|
|
bottomPadding: firstLabel.bottomPadding
|
|
padding: firstLabel.padding
|
|
|
|
onLinkActivated: control.onLinkActivated(link)
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: control.startScroll()
|
|
}
|
|
|
|
NumberAnimation {
|
|
id: scrollAnimation
|
|
target: firstLabel
|
|
property: "anchors.leftMargin"
|
|
from: 0
|
|
to: -(firstLabel.width + control._spacing)
|
|
duration: (to / -100) * 1500
|
|
|
|
onRunningChanged: {
|
|
if(!running)
|
|
control._resetScroll()
|
|
}
|
|
}
|
|
}
|