forked from mirror/nheko
parent
44cfc8d22a
commit
3f73853e4b
@ -0,0 +1,110 @@ |
|||||||
|
import QtQuick 2.9 |
||||||
|
import QtQuick.Controls 2.3 |
||||||
|
import QtQuick.Layouts 1.2 |
||||||
|
|
||||||
|
import im.nheko 1.0 |
||||||
|
|
||||||
|
Rectangle { |
||||||
|
id: activeCallBar |
||||||
|
visible: timelineManager.callState != WebRTCState.DISCONNECTED |
||||||
|
color: "#2ECC71" |
||||||
|
implicitHeight: rowLayout.height + 8 |
||||||
|
|
||||||
|
RowLayout { |
||||||
|
id: rowLayout |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.verticalCenter: parent.verticalCenter |
||||||
|
anchors.leftMargin: 8 |
||||||
|
|
||||||
|
Avatar { |
||||||
|
width: avatarSize |
||||||
|
height: avatarSize |
||||||
|
|
||||||
|
url: timelineManager.callPartyAvatarUrl.replace("mxc://", "image://MxcImage/") |
||||||
|
displayName: timelineManager.callPartyName |
||||||
|
} |
||||||
|
|
||||||
|
Label { |
||||||
|
font.pointSize: fontMetrics.font.pointSize * 1.1 |
||||||
|
text: " " + timelineManager.callPartyName + " " |
||||||
|
} |
||||||
|
|
||||||
|
Image { |
||||||
|
Layout.preferredWidth: 24 |
||||||
|
Layout.preferredHeight: 24 |
||||||
|
source: "qrc:/icons/icons/ui/place-call.png" |
||||||
|
} |
||||||
|
|
||||||
|
Label { |
||||||
|
id: callStateLabel |
||||||
|
font.pointSize: fontMetrics.font.pointSize * 1.1 |
||||||
|
} |
||||||
|
|
||||||
|
Connections { |
||||||
|
target: timelineManager |
||||||
|
function onCallStateChanged(state) { |
||||||
|
switch (state) { |
||||||
|
case WebRTCState.INITIATING: |
||||||
|
callStateLabel.text = qsTr("Initiating...") |
||||||
|
break; |
||||||
|
case WebRTCState.OFFERSENT: |
||||||
|
callStateLabel.text = qsTr("Calling...") |
||||||
|
break; |
||||||
|
case WebRTCState.CONNECTING: |
||||||
|
callStateLabel.text = qsTr("Connecting...") |
||||||
|
break; |
||||||
|
case WebRTCState.CONNECTED: |
||||||
|
callStateLabel.text = "00:00" |
||||||
|
var d = new Date() |
||||||
|
callTimer.startTime = Math.floor(d.getTime() / 1000) |
||||||
|
break; |
||||||
|
case WebRTCState.DISCONNECTED: |
||||||
|
callStateLabel.text = "" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Timer { |
||||||
|
id: callTimer |
||||||
|
property int startTime |
||||||
|
interval: 1000 |
||||||
|
running: timelineManager.callState == WebRTCState.CONNECTED |
||||||
|
repeat: true |
||||||
|
onTriggered: { |
||||||
|
var d = new Date() |
||||||
|
let seconds = Math.floor(d.getTime() / 1000 - startTime) |
||||||
|
let s = Math.floor(seconds % 60) |
||||||
|
let m = Math.floor(seconds / 60) % 60 |
||||||
|
let h = Math.floor(seconds / 3600) |
||||||
|
callStateLabel.text = (h ? (pad(h) + ":") : "") + pad(m) + ":" + pad(s) |
||||||
|
} |
||||||
|
|
||||||
|
function pad(n) { |
||||||
|
return (n < 10) ? ("0" + n) : n |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Item { |
||||||
|
Layout.fillWidth: true |
||||||
|
} |
||||||
|
|
||||||
|
ImageButton { |
||||||
|
width: 24 |
||||||
|
height: 24 |
||||||
|
src: timelineManager.isMicMuted ? |
||||||
|
"qrc:/icons/icons/ui/microphone-unmute.png" : |
||||||
|
"qrc:/icons/icons/ui/microphone-mute.png" |
||||||
|
|
||||||
|
hoverEnabled: true |
||||||
|
ToolTip.visible: hovered |
||||||
|
ToolTip.text: timelineManager.isMicMuted ? qsTr("Unmute Mic") : qsTr("Mute Mic") |
||||||
|
|
||||||
|
onClicked: timelineManager.toggleMicMute() |
||||||
|
} |
||||||
|
|
||||||
|
Item { |
||||||
|
implicitWidth: 16 |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue