153 lines
5.0 KiB
QML
153 lines
5.0 KiB
QML
import QtGraphicalEffects 1.0
|
|
import QtQuick 2.7
|
|
import QtQuick.Controls 2.4
|
|
import QtQuick.Controls.Material 2.0
|
|
import QtQuick.Layouts 1.3
|
|
import CustomQmlTypes 1.0
|
|
import QtQuick.Controls 1.4
|
|
import QtQuick.Controls.Styles 1.4
|
|
|
|
import "../opaque" as Opaque
|
|
import "../opaque/styles"
|
|
import "../opaque/theme"
|
|
import "../const"
|
|
import "../utils.js" as Utils
|
|
|
|
Opaque.PortraitRow {
|
|
property int status: Const.state_disconnected
|
|
property int badge
|
|
property bool loading
|
|
property string authorization
|
|
|
|
property bool blocked
|
|
|
|
badgeColor: Theme.portraitOnlineBadgeColor
|
|
badgeVisible: (Utils.isGroup(handle) && status == Const.state_synced) || (Utils.isPeer(handle) && status == Const.state_authenticated)
|
|
|
|
ProgressBar { // LOADING ?
|
|
id: loadingProgress
|
|
property bool running
|
|
running: loading
|
|
visible: loading
|
|
|
|
anchors.right: parent.right
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.leftMargin: 1 * gcd.themeScale
|
|
anchors.rightMargin: 25 * gcd.themeScale
|
|
|
|
height: parent.height * .1
|
|
width: 100 * gcd.themeScale
|
|
|
|
indeterminate: true
|
|
|
|
style: ProgressBarStyle {
|
|
progress: CwtchProgress { running: loadingProgress.running}
|
|
}
|
|
}
|
|
|
|
Opaque.Badge {
|
|
id: unreadBadge
|
|
visible: badge > 0
|
|
color: Theme.portraitContactBadgeColor
|
|
size: parent.height/4
|
|
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: 25 * gcd.themeScale
|
|
anchors.leftMargin: 1 * gcd.themeScale
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
content: Label {
|
|
id: lblUnread
|
|
color: Theme.portraitContactBadgeTextColor
|
|
font.pixelSize: Theme.badgeTextSize * gcd.themeScale
|
|
font.weight: Font.Bold
|
|
text: badge > 99 ? "99+" : badge
|
|
}
|
|
}
|
|
|
|
Column {
|
|
visible: authorization == Const.auth_unknown
|
|
anchors.right: parent.right
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.leftMargin: 1 * gcd.themeScale
|
|
anchors.rightMargin: 25 * gcd.themeScale
|
|
spacing: 16 * gcd.themeScale
|
|
|
|
Opaque.Icon {
|
|
source: gcd.assetPath + "core/favorite-24px.svg"
|
|
iconColor: Theme.toolbarIconColor
|
|
backgroundColor: rowColor
|
|
height: 18 * gcd.themeScale
|
|
width: 18 * gcd.themeScale
|
|
|
|
onClicked: { gcd.setPeerAuthorization(handle, Const.auth_approved)}
|
|
}
|
|
|
|
Opaque.Icon {
|
|
source: gcd.assetPath + "core/delete-24px.svg"
|
|
iconColor: Theme.toolbarIconColor
|
|
backgroundColor: rowColor
|
|
height: 18 * gcd.themeScale
|
|
width: 18 * gcd.themeScale
|
|
|
|
onClicked: { console.log("approve"); gcd.setPeerAuthorization(handle, Const.auth_blocked)}
|
|
}
|
|
}
|
|
|
|
onClicked: function() {
|
|
gcd.broadcast("ResetMessagePane")
|
|
isActive = true
|
|
theStack.pane = theStack.messagePane
|
|
mm.setHandle(handle)
|
|
gcd.loadMessagesPane(handle)
|
|
badge = 0
|
|
}
|
|
|
|
Component.onCompleted: { setColors(status) }
|
|
|
|
onStatusChanged: { setColors(status) }
|
|
|
|
function setColors(status) {
|
|
//-2:WtfCodeError,-1:Error,0:Disconnected,1:Connecting,2:Connected,3:Authenticated,4:Synced,5:Failed,6:Killed
|
|
|
|
if (authorization == Const.auth_blocked) {
|
|
portraitBorderColor = Theme.portraitBlockedBorderColor
|
|
portraitColor = Theme.portraitBlockedBackgroundColor
|
|
nameColor = Theme.portraitBlockedTextColor
|
|
onionColor = Theme.portraitBlockedTextColor
|
|
} else if (status == Const.state_synced || status == Const.state_authenticated) {
|
|
portraitBorderColor = Theme.portraitOnlineBorderColor
|
|
portraitColor = Theme.portraitOnlineBackgroundColor
|
|
nameColor = Theme.portraitOnlineTextColor
|
|
onionColor = Theme.portraitOnlineTextColor
|
|
} else if (status == Const.state_connected || status == Const.state_connecting) {
|
|
portraitBorderColor = Theme.portraitConnectingBorderColor
|
|
portraitColor = Theme.portraitConnectingBackgroundColor
|
|
nameColor = Theme.portraitConnectingTextColor
|
|
onionColor = Theme.portraitConnectingTextColor
|
|
} else {
|
|
portraitBorderColor = Theme.portraitOfflineBorderColor
|
|
portraitColor = Theme.portraitOfflineBackgroundColor
|
|
nameColor = Theme.portraitOfflineTextColor
|
|
onionColor = Theme.portraitOfflineTextColor
|
|
}
|
|
}
|
|
|
|
Connections { // UPDATE UNREAD MESSAGES COUNTER
|
|
target: gcd
|
|
|
|
onUpdateContactStatus: function(_handle, _status, _loading) {
|
|
if (handle == _handle) {
|
|
status = _status
|
|
loadingProgress.visible = loadingProgress.running = loading = _loading
|
|
}
|
|
}
|
|
|
|
onIncContactUnreadCount: function(handle) {
|
|
if (handle == _handle && gcd.selectedConversation != handle) {
|
|
badge++
|
|
}
|
|
}
|
|
}
|
|
}
|