Files
status-qml/src/StatusQ/Components/private/statusMessage/StatusSticker.qml
T
Khushboo Mehta ea9556948b feat(StatusMessage): Introducing a new StatusQ Component for Chat Messages
The below mentioned features have been implemented in this component
1. Profile Picture of sender
2. Sender details - name, secondaryName, chatID
3. Text content
4. Image Content
5. Sticker Content
6. Audio Content
7. Reply Component with all the details for the message beinf replied to
8. Pinned component for Pinned message
9. Edit Component to edit the message
10. Loades to load the below -
    a. Link content loader
    b. transaction content
    c. invitation bubble
    d. footer - in this case to show emoji reactions to a message
    e. quick actions loader to show the related quick actions
2022-01-21 11:41:58 +01:00

126 lines
3.4 KiB
QML

import QtQuick 2.3
import QtGraphicalEffects 1.13
import StatusQ.Components 0.1
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
Loader {
id: statusSticker
property bool noHover: false
property bool noMouseArea: false
property StatusImageSettings image: StatusImageSettings {
width: 140
height: 140
}
signal loaded()
signal clicked()
active: visible
sourceComponent: Rectangle {
id: root
color: Theme.palette.baseColor2
radius: 16
width: image.width
height: image.height
function reload() {
// From the documentation (https://doc.qt.io/qt-5/qml-qtquick-image.html#sourceSize-prop)
// Note: Changing this property dynamically causes the image source to
// be reloaded, potentially even from the network, if it is not in the
// disk cache.
const oldSource = sticker.source
sticker.cache = false
sticker.sourceSize.width += 1
sticker.sourceSize.width -= 1
sticker.cache = true
}
Loader {
id: loader
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
}
Image {
id: sticker
anchors.fill: parent
horizontalAlignment: Image.AlignHCenter
verticalAlignment: Image.AlignVCenter
cache: true
source: image.source
onStatusChanged: {
if (status === Image.Ready) {
statusSticker.loaded()
}
}
MouseArea {
enabled: !noMouseArea && (sticker.status === Image.Ready)
cursorShape: noHover ? Qt.ArrowCursor : Qt.PointingHandCursor
anchors.fill: parent
onClicked: statusSticker.clicked()
}
}
Component {
id: loadingIndicator
StatusLoadingIndicator {
width: 24
height: 24
color: Theme.palette.baseColor1
}
}
Component {
id: reload
StatusIcon {
icon: "refresh"
color: Theme.palette.directColor1
mipmap: false
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: root.reload()
}
}
}
states: [
State {
name: "loading"
when: sticker.status === Image.Loading
PropertyChanges {
target: loader
sourceComponent: loadingIndicator
}
},
State {
name: "error"
when: sticker.status === Image.Error
PropertyChanges {
target: loader
sourceComponent: reload
}
},
State {
name: "ready"
when: sticker.status === Image.Ready
PropertyChanges {
target: root
color: "transparent"
}
PropertyChanges {
target: loader
sourceComponent: undefined
}
}
]
}
}