2021-07-06 17:58:19 +00:00
|
|
|
import QtQuick 2.13
|
|
|
|
import QtQuick.Controls 2.13
|
2022-07-14 11:03:36 +00:00
|
|
|
|
|
|
|
import StatusQ.Core 0.1
|
|
|
|
import StatusQ.Core.Theme 0.1
|
2022-05-20 12:53:40 +00:00
|
|
|
import StatusQ.Components 0.1
|
2022-07-14 11:03:36 +00:00
|
|
|
|
2021-10-27 21:27:49 +00:00
|
|
|
import shared 1.0
|
|
|
|
import shared.panels 1.0
|
|
|
|
import shared.status 1.0
|
2022-02-23 17:08:01 +00:00
|
|
|
import utils 1.0
|
|
|
|
|
2021-10-01 15:58:36 +00:00
|
|
|
import "../controls"
|
|
|
|
|
2022-07-21 09:03:51 +00:00
|
|
|
import SortFilterProxyModel 0.2
|
|
|
|
|
2021-07-22 14:53:19 +00:00
|
|
|
Item {
|
|
|
|
id: root
|
|
|
|
anchors.fill: parent
|
2021-11-30 14:49:45 +00:00
|
|
|
|
|
|
|
// Important:
|
2021-12-09 12:53:40 +00:00
|
|
|
// Each chat/channel has its own ChatContentModule and each ChatContentModule has a single usersModule
|
2021-11-30 14:49:45 +00:00
|
|
|
// usersModule on the backend contains everything needed for this component
|
|
|
|
property var usersModule
|
2021-09-01 17:38:39 +00:00
|
|
|
property var messageContextMenu
|
2022-02-23 17:08:01 +00:00
|
|
|
property string label
|
2021-07-06 17:58:19 +00:00
|
|
|
|
2022-03-09 10:27:32 +00:00
|
|
|
property var rootStore
|
|
|
|
|
2022-02-23 17:08:01 +00:00
|
|
|
StatusBaseText {
|
2021-07-22 14:53:19 +00:00
|
|
|
id: titleText
|
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.topMargin: Style.current.padding
|
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.leftMargin: Style.current.padding
|
2021-08-26 12:04:47 +00:00
|
|
|
opacity: (root.width > 58) ? 1.0 : 0.0
|
2021-07-22 14:53:19 +00:00
|
|
|
visible: (opacity > 0.1)
|
|
|
|
font.pixelSize: Style.current.primaryTextFontSize
|
2022-02-23 17:08:01 +00:00
|
|
|
font.weight: Font.Medium
|
|
|
|
color: Theme.palette.directColor1
|
|
|
|
text: root.label
|
2021-07-22 14:53:19 +00:00
|
|
|
}
|
2021-07-06 22:41:26 +00:00
|
|
|
|
2022-07-14 11:03:36 +00:00
|
|
|
StatusListView {
|
2021-07-06 22:41:26 +00:00
|
|
|
id: userListView
|
2022-07-20 12:14:50 +00:00
|
|
|
objectName: "userListPanel"
|
2022-09-12 16:00:30 +00:00
|
|
|
|
2021-07-22 14:53:19 +00:00
|
|
|
anchors {
|
|
|
|
top: titleText.bottom
|
|
|
|
topMargin: Style.current.padding
|
2021-11-30 12:27:08 +00:00
|
|
|
left: parent.left
|
2022-09-12 16:00:30 +00:00
|
|
|
leftMargin: Style.current.halfPadding
|
2021-07-22 14:53:19 +00:00
|
|
|
right: parent.right
|
2022-09-12 16:00:30 +00:00
|
|
|
rightMargin: Style.current.halfPadding
|
2021-07-22 14:53:19 +00:00
|
|
|
bottom: parent.bottom
|
|
|
|
bottomMargin: Style.current.bigPadding
|
|
|
|
}
|
2022-07-14 11:03:36 +00:00
|
|
|
|
2022-07-21 09:03:51 +00:00
|
|
|
model: SortFilterProxyModel {
|
|
|
|
sourceModel: usersModule.model
|
2022-07-21 10:30:56 +00:00
|
|
|
sorters: [
|
|
|
|
RoleSorter {
|
|
|
|
roleName: "onlineStatus"
|
|
|
|
sortOrder: Qt.DescendingOrder
|
|
|
|
},
|
|
|
|
StringSorter {
|
|
|
|
roleName: "displayName"
|
|
|
|
caseSensitivity: Qt.CaseInsensitive
|
|
|
|
}
|
|
|
|
]
|
2022-07-21 09:03:51 +00:00
|
|
|
}
|
2022-02-23 17:08:01 +00:00
|
|
|
section.property: "onlineStatus"
|
|
|
|
section.delegate: (root.width > 58) ? sectionDelegateComponent : null
|
2022-05-20 12:53:40 +00:00
|
|
|
delegate: StatusMemberListItem {
|
2022-09-12 16:00:30 +00:00
|
|
|
width: ListView.view.width
|
2022-05-20 12:53:40 +00:00
|
|
|
nickName: model.localNickname
|
2022-09-09 07:40:21 +00:00
|
|
|
userName: model.displayName !== "" ? model.displayName : model.alias
|
2022-06-10 10:34:46 +00:00
|
|
|
pubKey: Utils.getCompressedPk(model.pubKey)
|
2022-06-03 13:24:49 +00:00
|
|
|
isContact: model.isContact
|
|
|
|
isVerified: model.isVerified
|
|
|
|
isUntrustworthy: model.isUntrustworthy
|
2022-05-30 10:00:53 +00:00
|
|
|
isAdmin: model.isAdmin
|
2022-08-11 11:55:08 +00:00
|
|
|
asset.name: {
|
2022-09-16 12:03:26 +00:00
|
|
|
const isCurrentUser = model.pubKey === root.rootStore.getPubkey()
|
|
|
|
const visibility = Global.privacyModuleInst.profilePicturesVisibility
|
|
|
|
|
|
|
|
if (isCurrentUser
|
|
|
|
|| visibility === Constants.profilePicturesVisibility.everyone
|
|
|
|
|| (visibility === Constants.profilePicturesVisibility.contactsOnly && model.isContact))
|
|
|
|
return model.icon
|
|
|
|
|
|
|
|
return ""
|
2022-05-20 12:53:40 +00:00
|
|
|
}
|
2022-08-11 11:55:08 +00:00
|
|
|
asset.isImage: (asset.name !== "")
|
|
|
|
asset.isLetterIdenticon: (asset.name === "")
|
2022-09-12 16:00:30 +00:00
|
|
|
asset.color: Utils.colorForColorId(model.colorId)
|
2022-06-03 13:24:49 +00:00
|
|
|
status: model.onlineStatus
|
|
|
|
ringSettings.ringSpecModel: Utils.getColorHashAsJson(model.pubKey) // FIXME: use model.colorHash
|
2022-05-20 12:53:40 +00:00
|
|
|
onClicked: {
|
|
|
|
if (mouse.button === Qt.RightButton) {
|
|
|
|
// Set parent, X & Y positions for the messageContextMenu
|
|
|
|
messageContextMenu.parent = this
|
|
|
|
messageContextMenu.isProfile = true
|
|
|
|
messageContextMenu.myPublicKey = userProfile.pubKey
|
2022-06-03 13:24:49 +00:00
|
|
|
messageContextMenu.selectedUserPublicKey = model.pubKey
|
|
|
|
messageContextMenu.selectedUserDisplayName = model.displayName
|
2022-09-08 10:28:22 +00:00
|
|
|
messageContextMenu.selectedUserIcon = model.icon
|
2022-07-05 10:12:27 +00:00
|
|
|
messageContextMenu.popup(4, 4)
|
2022-05-20 12:53:40 +00:00
|
|
|
} else if (mouse.button === Qt.LeftButton && !!messageContextMenu) {
|
2022-06-03 13:24:49 +00:00
|
|
|
Global.openProfilePopup(model.pubKey);
|
2022-05-20 12:53:40 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-02-23 17:08:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Component {
|
|
|
|
id: sectionDelegateComponent
|
|
|
|
Item {
|
|
|
|
width: parent.width
|
|
|
|
height: 24
|
|
|
|
StyledText {
|
|
|
|
anchors.fill: parent
|
|
|
|
anchors.leftMargin: Style.current.padding
|
|
|
|
verticalAlignment: Text.AlignVCenter
|
|
|
|
font.pixelSize: Style.current.additionalTextSize
|
|
|
|
color: Theme.palette.baseColor1
|
|
|
|
text: {
|
|
|
|
switch(parseInt(section)) {
|
2022-06-10 09:01:31 +00:00
|
|
|
case Constants.onlineStatus.online:
|
|
|
|
return qsTr("Online")
|
|
|
|
default:
|
2022-09-12 16:00:30 +00:00
|
|
|
return qsTr("Inactive")
|
2022-02-23 17:08:01 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-07-06 22:41:26 +00:00
|
|
|
}
|
2021-07-22 14:53:19 +00:00
|
|
|
}
|