Skip to content
Snippets Groups Projects
MessageDelegate.qml 5.03 KiB
Newer Older
Item {
	// Workaround to have an assignable global property
	Item {
		id: model
		property var data;
Nicolas Werner's avatar
Nicolas Werner committed
		property bool isReply: false
	
	property alias modelData: model.data
Nicolas Werner's avatar
Nicolas Werner committed
	property alias isReply: model.isReply

	height: chooser.childrenRect.height
	property real implicitWidth: (chooser.child && chooser.child.implicitWidth) ? chooser.child.implicitWidth : width

	DelegateChooser {
		id: chooser
		//role: "type" //< not supported in our custom implementation, have to use roleValue
		roleValue: model.data.type
		anchors.fill: parent

		DelegateChoice {
			roleValue: MtxEvent.UnknownMessage
			Placeholder { text: "Unretrieved event" }
		}
		DelegateChoice {
			roleValue: MtxEvent.TextMessage
			TextMessage {}
		DelegateChoice {
			roleValue: MtxEvent.NoticeMessage
			NoticeMessage {}
		DelegateChoice {
			roleValue: MtxEvent.EmoteMessage
			NoticeMessage {
				formatted: TimelineManager.escapeEmoji(modelData.userName) + " " + model.data.formattedBody
Nicolas Werner's avatar
Nicolas Werner committed
				color: TimelineManager.userColor(modelData.userId, colors.window)
		DelegateChoice {
			roleValue: MtxEvent.ImageMessage
			ImageMessage {}
		}
		DelegateChoice {
			roleValue: MtxEvent.Sticker
			ImageMessage {}
		}
		DelegateChoice {
			roleValue: MtxEvent.FileMessage
			FileMessage {}
		}
		DelegateChoice {
			roleValue: MtxEvent.VideoMessage
			PlayableMediaMessage {}
		}
		DelegateChoice {
			roleValue: MtxEvent.AudioMessage
			PlayableMediaMessage {}
		}
		DelegateChoice {
			roleValue: MtxEvent.Redacted
			Pill {
				text: qsTr("redacted")
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.Redaction
			Pill {
				text: qsTr("redacted")
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.Encryption
			Pill {
				text: qsTr("Encryption enabled")
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.Name
			NoticeMessage {
				text: model.data.roomName ? qsTr("room name changed to: %1").arg(model.data.roomName) : qsTr("removed room name")
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.Topic
			NoticeMessage {
				text: model.data.roomTopic ? qsTr("topic changed to: %1").arg(model.data.roomTopic) : qsTr("removed topic")
		DelegateChoice {
			roleValue: MtxEvent.RoomCreate
			NoticeMessage {
				text: qsTr("%1 created and configured room: %2").arg(model.data.userName).arg(model.data.roomId)
			}
		}
trilene's avatar
trilene committed
		DelegateChoice {
			roleValue: MtxEvent.CallInvite
			NoticeMessage {
Nicolas Werner's avatar
Nicolas Werner committed
				text: switch(model.data.callType) {
					case "voice": return qsTr("%1 placed a voice call.").arg(model.data.userName)
					case "video": return qsTr("%1 placed a video call.").arg(model.data.userName)
					default: return qsTr("%1 placed a call.").arg(model.data.userName)
				}
trilene's avatar
trilene committed
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.CallAnswer
			NoticeMessage {
				text: qsTr("%1 answered the call.").arg(model.data.userName)
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.CallHangUp
			NoticeMessage {
				text: qsTr("%1 ended the call.").arg(model.data.userName)
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.CallCandidates
			NoticeMessage {
				text: qsTr("Negotiating call...")
			}
		}
		DelegateChoice {
			// TODO: make a more complex formatter for the power levels.
			roleValue: MtxEvent.PowerLevels
			NoticeMessage {
Nicolas Werner's avatar
Nicolas Werner committed
				text: TimelineManager.timeline.formatPowerLevelEvent(model.data.id)
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.RoomJoinRules
			NoticeMessage {
Nicolas Werner's avatar
Nicolas Werner committed
				text: TimelineManager.timeline.formatJoinRuleEvent(model.data.id)
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.RoomHistoryVisibility
			NoticeMessage {
Nicolas Werner's avatar
Nicolas Werner committed
				text: TimelineManager.timeline.formatHistoryVisibilityEvent(model.data.id)
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.RoomGuestAccess
			NoticeMessage {
Nicolas Werner's avatar
Nicolas Werner committed
				text: TimelineManager.timeline.formatGuestAccessEvent(model.data.id)
		DelegateChoice {
			roleValue: MtxEvent.Member
			NoticeMessage {
Nicolas Werner's avatar
Nicolas Werner committed
				text: TimelineManager.timeline.formatMemberEvent(model.data.id);
		DelegateChoice {
			roleValue: MtxEvent.KeyVerificationRequest
			NoticeMessage {
				text: "KeyVerificationRequest";
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.KeyVerificationStart
			NoticeMessage {
				text: "KeyVerificationStart";
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.KeyVerificationReady
			NoticeMessage {
				text: "KeyVerificationReady";
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.KeyVerificationCancel
			NoticeMessage {
				text: "KeyVerificationCancel";
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.KeyVerificationKey
			NoticeMessage {
				text: "KeyVerificationKey";
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.KeyVerificationMac
			NoticeMessage {
				text: "KeyVerificationMac";
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.KeyVerificationDone
			NoticeMessage {
				text: "KeyVerificationDone";
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.KeyVerificationDone
			NoticeMessage {
				text: "KeyVerificationDone";
			}
		}
		DelegateChoice {
			roleValue: MtxEvent.KeyVerificationAccept
			NoticeMessage {
				text: "KeyVerificationAccept";
			}
		}
		DelegateChoice {
			Placeholder {}