diff --git a/ui/StatusQ/sandbox/controls/ListItems.qml b/ui/StatusQ/sandbox/controls/ListItems.qml index 8e6ee0e075..8cbe855636 100644 --- a/ui/StatusQ/sandbox/controls/ListItems.qml +++ b/ui/StatusQ/sandbox/controls/ListItems.qml @@ -351,7 +351,7 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I nickName: "This is an example" userName: "annabelle" chatKey: "0x043a7ed0e8752236a4688563652fd0296453cef00a5dcddbe252dc74f72cc1caa97a2b65e4a1a52d9c30a84c9966beaaaf6b333d659cbdd2e486b443ed1012cf04" - trustIndicator: StatusMemberListItem.TrustedType.Verified + trustIndicator: StatusContactVerificationIcons.TrustedType.Verified isMutualContact: true image.source: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAlklEQVR4nOzW0QmDQBAG4SSkl7SUQlJGCrElq9F3QdjjVhh/5nv3cFhY9vUIYQiNITSG0BhCExPynn1gWf9bx498P7/ nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2ImYgiNITTlTdG1nUZ5a92VITQxITFiJmIIjSE0htAYQrMHAAD//+wwFVpz+yqXAAAAAElFTkSuQmCC" @@ -362,7 +362,7 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I StatusMemberListItem { nickName: "carmen.eth" isOnline: false - trustIndicator: StatusMemberListItem.TrustedType.Untrustworthy + trustIndicator: StatusContactVerificationIcons.TrustedType.Untrustworthy } StatusMemberListItem { diff --git a/ui/StatusQ/sandbox/demoapp/ChatChannelView.qml b/ui/StatusQ/sandbox/demoapp/ChatChannelView.qml index 25f41203cd..1ac163a0df 100644 --- a/ui/StatusQ/sandbox/demoapp/ChatChannelView.qml +++ b/ui/StatusQ/sandbox/demoapp/ChatChannelView.qml @@ -41,7 +41,8 @@ ListView { } messageText: model.message hasMention: model.hasMention - contactType: model.contactType + isMutualContact: model.isMutualContact + trustIndicator: model.trustIndicator isPinned: model.isPinned pinnedBy: model.pinnedBy hasExpired: model.hasExpired diff --git a/ui/StatusQ/sandbox/demoapp/data/Models.qml b/ui/StatusQ/sandbox/demoapp/data/Models.qml index 2ee36abae5..09689de93a 100644 --- a/ui/StatusQ/sandbox/demoapp/data/Models.qml +++ b/ui/StatusQ/sandbox/demoapp/data/Models.qml @@ -497,7 +497,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2ImYgiNITTlTdG1nUZ5a92VITQxITFiJmIIjSE0htAYQrMHAAD//+wwFVpz+yqXAAAAAElFTkSuQmCC" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f5789" - contactType: 2 + isMutualContact: true + trustIndicator: StatusContactVerificationIcons.TrustedType.None hasMention: false editMode: false isReply: false @@ -525,7 +526,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2ImYgiNITTlTdG1nUZ5a92VITQxITFiJmIIjSE0htAYQrMHAAD//+wwFVpz+yqXAAAAAElFTkSuQmCC" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f2333" - contactType: 3 + isMutualContact: true + trustIndicator: StatusContactVerificationIcons.TrustedType.Verified hasMention: false editMode: false isReply: false @@ -552,7 +554,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I profileImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAkUlEQVR4nOzYwQmDQBQG4SSkl3SQyizDyuzAavTi0cPK8sPwM9/Rw8rw4KH7eZUwhMYQGkNoDKGpCfmmDl63/bh7vvx/78T7aiZiCI0hNMMbJL2FZs+vmYghNIbQTG+cp9smtf1qJmIIjSEKqZmIITSG0Azfa6W/qfxDvBhCY4hCaiZiCI0hNIbQGEJzBgAA///3pSBjX42sYAAAAABJRU5ErkJggg==" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f2333" - contactType: 3 + isMutualContact: true + trustIndicator: StatusContactVerificationIcons.TrustedType.Verified hasMention: false editMode: false isReply: false @@ -579,7 +582,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I profileImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiElEQVR4nOzXUQpAQBRGYWQvLNAyLJDV8C5qpiGnv/M9al5Ot27X0IUwhMYQGkNoDKGJCRlLH67bftx9X+ap/+P9VcxEDKExhKZ4a9Uq3TZviZmIITSG0DRvlqcbqVbrlouZiCE0htD4h0hjCI0hNN5aNIbQGKKPxEzEEBpDaAyhMYTmDAAA//+gYCErzmCpCQAAAABJRU5ErkJggg=" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f6789" - contactType: 4 + isMutualContact: false + trustIndicator: StatusContactVerificationIcons.TrustedType.Untrustworthy hasMention: false editMode: false isReply: false @@ -607,7 +611,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I profileImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiElEQVR4nOzXUQpAQBRGYWQvLNAyLJDV8C5qpiGnv/M9al5Ot27X0IUwhMYQGkNoDKGJCRlLH67bftx9X+ap/+P9VcxEDKExhKZ4a9Uq3TZviZmIITSG0DRvlqcbqVbrlouZiCE0htD4h0hjCI0hNN5aNIbQGKKPxEzEEBpDaAyhMYTmDAAA//+gYCErzmCpCQAAAABJRU5ErkJggg==" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f1234" - contactType: 0 + isMutualContact: true + trustIndicator: StatusContactVerificationIcons.TrustedType.None hasMention: false editMode: false isReply: false @@ -635,7 +640,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I profileImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiElEQVR4nOzXUQpAQBRGYWQvLNAyLJDV8C5qpiGnv/M9al5Ot27X0IUwhMYQGkNoDKGJCRlLH67bftx9X+ap/+P9VcxEDKExhKZ4a9Uq3TZviZmIITSG0DRvlqcbqVbrlouZiCE0htD4h0hjCI0hNN5aNIbQGKKPxEzEEBpDaAyhMYTmDAAA//+gYCErzmCpCQAAAABJRU5ErkJggg==" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f1234" - contactType: 0 + isMutualContact: false + trustIndicator: StatusContactVerificationIcons.TrustedType.Untrustworthy hasMention: false editMode: false isReply: false @@ -663,7 +669,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I profileImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiElEQVR4nOzXUQpAQBRGYWQvLNAyLJDV8C5qpiGnv/M9al5Ot27X0IUwhMYQGkNoDKGJCRlLH67bftx9X+ap/+P9VcxEDKExhKZ4a9Uq3TZviZmIITSG0DRvlqcbqVbrlouZiCE0htD4h0hjCI0hNN5aNIbQGKKPxEzEEBpDaAyhMYTmDAAA//+gYCErzmCpCQAAAABJRU5ErkJggg==" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f1234" - contactType: 0 + isMutualContact: false + trustIndicator: StatusContactVerificationIcons.TrustedType.Untrustworthy hasMention: true editMode: false isReply: false @@ -692,7 +699,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I profileImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiElEQVR4nOzXUQpAQBRGYWQvLNAyLJDV8C5qpiGnv/M9al5Ot27X0IUwhMYQGkNoDKGJCRlLH67bftx9X+ap/+P9VcxEDKExhKZ4a9Uq3TZviZmIITSG0DRvlqcbqVbrlouZiCE0htD4h0hjCI0hNN5aNIbQGKKPxEzEEBpDaAyhMYTmDAAA//+gYCErzmCpCQAAAABJRU5ErkJggg==" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f1234" - contactType: 0 + isMutualContact: false + trustIndicator: StatusContactVerificationIcons.TrustedType.Untrustworthy hasMention: false editMode: false isReply: true @@ -721,7 +729,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I profileImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiElEQVR4nOzXUQpAQBRGYWQvLNAyLJDV8C5qpiGnv/M9al5Ot27X0IUwhMYQGkNoDKGJCRlLH67bftx9X+ap/+P9VcxEDKExhKZ4a9Uq3TZviZmIITSG0DRvlqcbqVbrlouZiCE0htD4h0hjCI0hNN5aNIbQGKKPxEzEEBpDaAyhMYTmDAAA//+gYCErzmCpCQAAAABJRU5ErkJggg==" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f1234" - contactType: 0 + isMutualContact: false + trustIndicator: StatusContactVerificationIcons.TrustedType.Untrustworthy hasMention: false editMode: false isReply: true @@ -750,7 +759,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I profileImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiElEQVR4nOzXUQpAQBRGYWQvLNAyLJDV8C5qpiGnv/M9al5Ot27X0IUwhMYQGkNoDKGJCRlLH67bftx9X+ap/+P9VcxEDKExhKZ4a9Uq3TZviZmIITSG0DRvlqcbqVbrlouZiCE0htD4h0hjCI0hNN5aNIbQGKKPxEzEEBpDaAyhMYTmDAAA//+gYCErzmCpCQAAAABJRU5ErkJggg==" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f1234" - contactType: 0 + isMutualContact: false + trustIndicator: StatusContactVerificationIcons.TrustedType.Untrustworthy hasMention: false editMode: false isReply: true @@ -779,7 +789,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I profileImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiElEQVR4nOzXUQpAQBRGYWQvLNAyLJDV8C5qpiGnv/M9al5Ot27X0IUwhMYQGkNoDKGJCRlLH67bftx9X+ap/+P9VcxEDKExhKZ4a9Uq3TZviZmIITSG0DRvlqcbqVbrlouZiCE0htD4h0hjCI0hNN5aNIbQGKKPxEzEEBpDaAyhMYTmDAAA//+gYCErzmCpCQAAAABJRU5ErkJggg==" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f1234" - contactType: 0 + isMutualContact: false + trustIndicator: StatusContactVerificationIcons.TrustedType.Untrustworthy hasMention: false editMode: false isReply: true @@ -807,7 +818,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I profileImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiElEQVR4nOzXUQpAQBRGYWQvLNAyLJDV8C5qpiGnv/M9al5Ot27X0IUwhMYQGkNoDKGJCRlLH67bftx9X+ap/+P9VcxEDKExhKZ4a9Uq3TZviZmIITSG0DRvlqcbqVbrlouZiCE0htD4h0hjCI0hNN5aNIbQGKKPxEzEEBpDaAyhMYTmDAAA//+gYCErzmCpCQAAAABJRU5ErkJggg==" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f1234" - contactType: 0 + isMutualContact: false + trustIndicator: StatusContactVerificationIcons.TrustedType.Verified hasMention: false editMode: false isReply: false @@ -834,7 +846,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I profileImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiElEQVR4nOzXUQpAQBRGYWQvLNAyLJDV8C5qpiGnv/M9al5Ot27X0IUwhMYQGkNoDKGJCRlLH67bftx9X+ap/+P9VcxEDKExhKZ4a9Uq3TZviZmIITSG0DRvlqcbqVbrlouZiCE0htD4h0hjCI0hNN5aNIbQGKKPxEzEEBpDaAyhMYTmDAAA//+gYCErzmCpCQAAAABJRU5ErkJggg==" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f1234" - contactType: 0 + isMutualContact: true + trustIndicator: StatusContactVerificationIcons.TrustedType.None hasMention: false editMode: false isReply: false @@ -861,7 +874,8 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I profileImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiElEQVR4nOzXUQpAQBRGYWQvLNAyLJDV8C5qpiGnv/M9al5Ot27X0IUwhMYQGkNoDKGJCRlLH67bftx9X+ap/+P9VcxEDKExhKZ4a9Uq3TZviZmIITSG0DRvlqcbqVbrlouZiCE0htD4h0hjCI0hNN5aNIbQGKKPxEzEEBpDaAyhMYTmDAAA//+gYCErzmCpCQAAAABJRU5ErkJggg==" isIdenticon: true chatKey: "0x04d1bed19c523299cbd07ddec7b8949ad7dd923819a68e0b733c9c0bc38cde276bd256f098e755f8f028395c2c91f438a22adaff6caded060b7cc0ef3f470f1234" - contactType: 0 + isMutualContact: true + trustIndicator: StatusContactVerificationIcons.TrustedType.None hasMention: false editMode: false isReply: false @@ -883,7 +897,7 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I nickName: "This is an example" userName: "annabelle" chatKey: "0x043a7ed0e8752236a4688563652fd0296453cef00a5dcddbe252dc74f72cc1caa97a2b65e4a1a52d9c30a84c9966beaaaf6b333d659cbdd2e486b443ed1012cf04" - trustIndicator: StatusMemberListItem.TrustedType.Verified + trustIndicator: StatusContactVerificationIcons.TrustedType.Verified isMutualContact: true isOnline: true source: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAlklEQVR4nOzW0QmDQBAG4SSkl7SUQlJGCrElq9F3QdjjVhh/5nv3cFhY9vUIYQiNITSG0BhCExPynn1gWf9bx498P7/ @@ -894,7 +908,7 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I nickName: "carmen.eth" userName: "" chatKey: "" - trustIndicator: StatusMemberListItem.TrustedType.Untrustworthy + trustIndicator: StatusContactVerificationIcons.TrustedType.Untrustworthy isMutualContact: false isOnline: false source: "" @@ -904,7 +918,7 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I nickName: "This girl I know from work" userName: "annabelle" chatKey: "" - trustIndicator: StatusMemberListItem.TrustedType.None + trustIndicator: StatusContactVerificationIcons.TrustedType.None isMutualContact: false isOnline: true source: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiElEQVR4nOzXUQpAQBRGYWQvLNAyLJDV8C5qpiGnv/M9al5Ot27X0IUwhMYQGkNoDKGJCRlLH67bftx9X+ap/+P9VcxEDK @@ -915,7 +929,7 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I nickName: "Mark Cuban" userName: "annabelle" chatKey: "0x043a7ed0e8752236a4688563652fd0296453cef00a5dcddbe252dc74f72cc1caa97a2b65e4a1a52d9c30a84c9966beaaaf6b333d659cbdd2e486b443ed1012cf04" - trustIndicator: StatusMemberListItem.TrustedType.Untrustworthy + trustIndicator: StatusContactVerificationIcons.TrustedType.Untrustworthy isMutualContact: true isOnline: false source: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAlklEQVR4nOzW0QmDQBAG4SSkl7SUQlJGCrElq9F3QdjjVhh/5nv3cFhY9vUIYQiNITSG0BhCExPynn1gWf9bx498P7/ diff --git a/ui/StatusQ/src/StatusQ/Components/StatusContactVerificationIcons.qml b/ui/StatusQ/src/StatusQ/Components/StatusContactVerificationIcons.qml new file mode 100644 index 0000000000..2541853120 --- /dev/null +++ b/ui/StatusQ/src/StatusQ/Components/StatusContactVerificationIcons.qml @@ -0,0 +1,79 @@ +import QtQuick 2.0 + +import StatusQ.Core 0.1 +import StatusQ.Core.Theme 0.1 + +Row { + id: root + + property bool isMutualContact: false + property var trustIndicator: StatusContactVerificationIcons.TrustedType.None + + property StatusIconSettings mutualConnectionIcon: StatusIconSettings { + name: "tiny/tiny-contact" + color: Theme.palette.indirectColor1 + width: dummyImage.width + height: dummyImage.height + background: StatusIconBackgroundSettings { + width: 10 + height: 10 + color: Theme.palette.primaryColor1 + } + // Only used to get implicit width and height from the actual image + property Image dummyImage: Image { + source: mutualConnectionIcon.name ? "../../assets/img/icons/" + mutualConnectionIcon.name + ".svg": "" + visible: false + } + } + + property StatusIconSettings trustContactIcon: StatusIconSettings { + // None and Untrustworthy types, same aspect (Icon will not be visible in case of None type): + name: root.trustIndicator === StatusContactVerificationIcons.TrustedType.Verified ? "tiny/tiny-checkmark" : "tiny/subtract" + color: Theme.palette.indirectColor1 + width: dummyImage.width + height: dummyImage.height + background: StatusIconBackgroundSettings { + width: 10 + height: 10 + color: root.trustIndicator === StatusContactVerificationIcons.TrustedType.Verified ? Theme.palette.primaryColor1 : Theme.palette.dangerColor1 + } + // Only used to get implicit width and height from the actual image + property Image dummyImage: Image { + source: trustContactIcon.name ? "../../assets/img/icons/" + trustContactIcon.name + ".svg": "" + visible: false + } + } + + enum TrustedType { + None, //0 + Verified, //1 + Untrustworthy //2 + } + + spacing: 4 + visible: root.isMutualContact || (root.trustIndicator !== StatusContactVerificationIcons.TrustedType.None) + + StatusRoundIcon { + visible: root.isMutualContact + icon.name: root.mutualConnectionIcon.name + icon.width: root.mutualConnectionIcon.width + icon.height: root.mutualConnectionIcon.height + icon.rotation: root.mutualConnectionIcon.rotation + icon.color: root.mutualConnectionIcon.color + icon.background.color: root.mutualConnectionIcon.background.color + icon.background.width: root.mutualConnectionIcon.background.width + icon.background.height: root.mutualConnectionIcon.background.height + } + + StatusRoundIcon { + visible: root.trustIndicator !== StatusContactVerificationIcons.TrustedType.None + icon.name: root.trustContactIcon.name + icon.width: root.trustContactIcon.width + icon.height: root.trustContactIcon.height + icon.rotation: root.trustContactIcon.rotation + icon.color: root.trustContactIcon.color + icon.background.color: root.trustContactIcon.background.color + icon.background.width: root.trustContactIcon.background.width + icon.background.height: root.trustContactIcon.background.height + } + } diff --git a/ui/StatusQ/src/StatusQ/Components/StatusListItem.qml b/ui/StatusQ/src/StatusQ/Components/StatusListItem.qml index f5358ef0a4..5788b66c9e 100644 --- a/ui/StatusQ/src/StatusQ/Components/StatusListItem.qml +++ b/ui/StatusQ/src/StatusQ/Components/StatusListItem.qml @@ -13,8 +13,6 @@ Rectangle { property string titleId: "" property string title: "" property string titleAsideText: "" - property bool titleIcon1Visible - property bool titleIcon2Visible property string subTitle: "" property string tertiaryTitle: "" property string label: "" @@ -52,38 +50,13 @@ Rectangle { height: 40 isIdenticon: false } - property StatusIconSettings titleIcon1: StatusIconSettings { - width: dummyImage.width - height: dummyImage.height - background: StatusIconBackgroundSettings { - width: 10 - height: 10 - } - // Only used to get implicit width and height from the actual image - property Image dummyImage: Image { - source: titleIcon1.name ? "../../assets/img/icons/" + titleIcon1.name + ".svg": "" - visible: false - } - } - property StatusIconSettings titleIcon2: StatusIconSettings { - width: dummyImage.width - height: dummyImage.height - background: StatusIconBackgroundSettings { - width: 10 - height: 10 - } - // Only used to get implicit width and height from the actual image - property Image dummyImage: Image { - source: titleIcon2.name ? "../../assets/img/icons/" + titleIcon2.name + ".svg": "" - visible: false - } - } property alias sensor: sensor property alias badge: statusListItemBadge property alias statusListItemIcon: iconOrImage property alias statusListItemTitle: statusListItemTitle property alias statusListItemTitleAside: statusListItemTitleAsideText + property alias statusListItemTitleIcons: titleIconsRow property alias statusListItemTitleArea: statusListItemTitleArea property alias statusListItemSubTitle: statusListItemSubTitle property alias statusListItemTertiaryTitle: statusListItemTertiaryTitle @@ -154,9 +127,17 @@ Rectangle { Item { id: statusListItemTitleArea + + function getStatusListItemTitleAnchorsRight() { + let isIconsRowVisible = false + if(titleIconsRow.item) { + isIconsRowVisible = true//titleIconsRow.item.visible + } + return !statusListItem.titleAsideText && !isIconsRowVisible ? statusListItemTitleArea.right : undefined + } + anchors.left: iconOrImage.active ? iconOrImage.right : parent.left - anchors.right: statusListItemLabel.visible ? - statusListItemLabel.left : statusListItemComponentsSlot.left + anchors.right: statusListItemLabel.visible ? statusListItemLabel.left : statusListItemComponentsSlot.left anchors.leftMargin: statusListItem.leftPadding anchors.rightMargin: statusListItem.rightPadding anchors.verticalCenter: parent.verticalCenter @@ -169,8 +150,7 @@ Rectangle { height: visible ? contentHeight : 0 wrapMode: Text.WrapAtWordBoundaryOrAnywhere anchors.left: parent.left - anchors.right: !statusListItem.titleAsideText && !statusListItem.titleIcon1Visible && !statusListItem.titleIcon2Visible - ? parent.right : undefined + anchors.right: !statusListItem.titleAsideText && !titleIconsRow.sourceComponent ? parent.right : undefined color: { if (!statusListItem.enabled) { return Theme.palette.baseColor1 @@ -208,37 +188,12 @@ Rectangle { visible: !!statusListItem.titleAsideText } - Row { + Loader { id: titleIconsRow - spacing: 4 anchors.left: !statusListItem.titleAsideText ? statusListItemTitle.right : statusListItemTitleAsideText.right anchors.verticalCenter: statusListItemTitle.verticalCenter - anchors.leftMargin: titleIconsRow.spacing - - StatusRoundIcon { - visible: statusListItem.titleIcon1Visible - icon.name: statusListItem.titleIcon1.name - icon.width: statusListItem.titleIcon1.width - icon.height: statusListItem.titleIcon1.height - icon.rotation: statusListItem.titleIcon1.rotation - icon.color: statusListItem.titleIcon1.color - icon.background.color: statusListItem.titleIcon1.background.color - icon.background.width: statusListItem.titleIcon1.background.width - icon.background.height: statusListItem.titleIcon1.background.height - } - - StatusRoundIcon { - visible: statusListItem.titleIcon2Visible - icon.name: statusListItem.titleIcon2.name - icon.width: statusListItem.titleIcon2.width - icon.height: statusListItem.titleIcon2.height - icon.rotation: statusListItem.titleIcon2.rotation - icon.color: statusListItem.titleIcon2.color - icon.background.color: statusListItem.titleIcon2.background.color - icon.background.width: statusListItem.titleIcon2.background.width - icon.background.height: statusListItem.titleIcon2.background.height - } - } + anchors.leftMargin: 4 + } StatusBaseText { id: statusListItemSubTitle @@ -284,7 +239,6 @@ Rectangle { visible: !!statusListItem.label } - Row { id: statusListItemComponentsSlot anchors.right: parent.right diff --git a/ui/StatusQ/src/StatusQ/Components/StatusMemberListItem.qml b/ui/StatusQ/src/StatusQ/Components/StatusMemberListItem.qml index 8111ba410c..38e9f01b3d 100644 --- a/ui/StatusQ/src/StatusQ/Components/StatusMemberListItem.qml +++ b/ui/StatusQ/src/StatusQ/Components/StatusMemberListItem.qml @@ -10,15 +10,9 @@ StatusListItem { property string userName: "" property string chatKey: "" property bool isMutualContact: false - property var trustIndicator: StatusMemberListItem.TrustedType.None + property var trustIndicator: StatusContactVerificationIcons.TrustedType.None property bool isOnline: false - enum TrustedType { - None, //0 - Verified, //1 - Untrustworthy //2 - } - // Subtitle composition: function composeSubtitile() { var compose = "" @@ -42,8 +36,10 @@ StatusListItem { // root object settings: title: root.nickName - titleIcon1Visible: root.isMutualContact - titleIcon2Visible: root.trustIndicator !== StatusMemberListItem.TrustedType.None + statusListItemTitleIcons.sourceComponent: StatusContactVerificationIcons { + isMutualContact: root.isMutualContact + trustIndicator: root.trustIndicator + } subTitle: composeSubtitile() statusListItemSubTitle.font.pixelSize: 10 icon.isLetterIdenticon: !root.image.source.toString() @@ -51,7 +47,7 @@ StatusListItem { statusListItemIcon.badge.color: root.isOnline ? Theme.palette.successColor1 : Theme.palette.baseColor1 color: sensor.containsMouse ? Theme.palette.baseColor2 : Theme.palette.baseColor4 - // Default sizes/positions by design + // Default sizes / positions by design implicitWidth: 256 implicitHeight: Math.max(56, statusListItemTitleArea.height + leftPadding) leftPadding: 8 @@ -64,13 +60,4 @@ StatusListItem { statusListItemIcon.badge.border.width: 2 statusListItemIcon.badge.implicitHeight: 12 // 8 px + 2 px * 2 borders statusListItemIcon.badge.implicitWidth: 12 // 8 px + 2 px * 2 borders - - // Trusted type icons definition: - titleIcon1.name: "tiny/tiny-contact" - titleIcon1.color: Theme.palette.indirectColor1 - titleIcon1.background.color: Theme.palette.primaryColor1 - // None and Untrustworthy types, same aspect (Icon will not be visible in case of None type): - titleIcon2.name: trustIndicator === StatusMemberListItem.TrustedType.Verified ? "tiny/tiny-checkmark" : "tiny/subtract" - titleIcon2.color: Theme.palette.indirectColor1 - titleIcon2.background.color: trustIndicator === StatusMemberListItem.TrustedType.Verified ? Theme.palette.primaryColor1 : Theme.palette.dangerColor1 } diff --git a/ui/StatusQ/src/StatusQ/Components/StatusMessage.qml b/ui/StatusQ/src/StatusQ/Components/StatusMessage.qml index a8be9dc870..c9ba376950 100644 --- a/ui/StatusQ/src/StatusQ/Components/StatusMessage.qml +++ b/ui/StatusQ/src/StatusQ/Components/StatusMessage.qml @@ -21,14 +21,6 @@ Rectangle { Invitation = 7 } - enum ContactType { - STANDARD = 0, - RENAME = 1, - CONTACT = 2, - VERIFIED = 3, - UNTRUSTWORTHY = 4 - } - property alias messageHeader: messageHeader property alias quickActions:quickActionsPanel.quickActions property alias statusChatInput: editComponent.inputComponent @@ -108,11 +100,8 @@ Rectangle { displayName: messageDetails.displayName secondaryName: messageDetails.secondaryName tertiaryDetail: messageDetails.chatID - icon1.name: messageDetails.contactType === StatusMessage.ContactType.CONTACT ? "tiny/tiny-contact" : "" - icon2.name: messageDetails.contactType === StatusMessage.ContactType.VERIFIED ? "tiny/tiny-checkmark" : - messageDetails.contactType === StatusMessage.ContactType.UNTRUSTWORTHY ? "tiny/subtract": "" - icon2.background.color: messageDetails.contactType === StatusMessage.ContactType.UNTRUSTWORTHY ? Theme.palette.dangerColor1 : Theme.palette.primaryColor1 - icon2.color: Theme.palette.indirectColor1 + isMutualContact: messageDetails.isMutualContact + trustIndicator: messageDetails.trustIndicator resendText: statusMessage.resendText showResendButton: messageDetails.hasExpired && messageDetails.amISender onClicked: statusMessage.senderNameClicked() diff --git a/ui/StatusQ/src/StatusQ/Components/StatusMessageDetails.qml b/ui/StatusQ/src/StatusQ/Components/StatusMessageDetails.qml index a53c257424..0dca0d2bf6 100644 --- a/ui/StatusQ/src/StatusQ/Components/StatusMessageDetails.qml +++ b/ui/StatusQ/src/StatusQ/Components/StatusMessageDetails.qml @@ -17,12 +17,13 @@ QtObject { property string messageText: "" property int contentType: 0 property string messageContent: "" - property int contactType: 0 + property bool isMutualContact: false + property var trustIndicator: StatusContactVerificationIcons.TrustedType.None property bool hasMention: false property bool isPinned: false property string pinnedBy: "" property bool hasExpired: false - property string timestamp: "" + property string timestamp: "" } diff --git a/ui/StatusQ/src/StatusQ/Components/private/statusMessage/StatusMessageHeader.qml b/ui/StatusQ/src/StatusQ/Components/private/statusMessage/StatusMessageHeader.qml index 8ecd5235f5..76c573f263 100644 --- a/ui/StatusQ/src/StatusQ/Components/private/statusMessage/StatusMessageHeader.qml +++ b/ui/StatusQ/src/StatusQ/Components/private/statusMessage/StatusMessageHeader.qml @@ -19,38 +19,8 @@ Item { property string tertiaryDetail: "" property string resendText: "" property bool showResendButton: false - property StatusIconSettings icon1: StatusIconSettings { - width: dummyImage.width - height: dummyImage.height - rotation: 0 - color: Theme.palette.indirectColor1 - background: StatusIconBackgroundSettings { - width: 10 - height: 10 - color: Theme.palette.primaryColor1 - } - // only used to get implicit width and height from the actual image - property Image dummyImage: Image { - source: icon1.name ? "../../../../assets/img/icons/" + icon1.name + ".svg": "" - visible: false - } - } - property StatusIconSettings icon2: StatusIconSettings { - width: dummyImage.width - height: dummyImage.height - rotation: 0 - color: Theme.palette.primaryColor1 - background: StatusIconBackgroundSettings { - width: 10 - height: 10 - color: Theme.palette.indirectColor1 - } - // only used to get implicit width and height from the actual image - property Image dummyImage: Image { - source: icon2.name ? "../../../../assets/img/icons/" + icon2.name + ".svg": "" - visible: false - } - } + property bool isMutualContact: false + property var trustIndicator: StatusContactVerificationIcons.TrustedType.None signal clicked() signal resendClicked() @@ -83,28 +53,10 @@ Item { } } Layout.alignment: Qt.AlignBottom - } - StatusRoundIcon { - icon.background.width: icon1.background.width - icon.background.height: icon1.background.height - icon.background.color: icon1.background.color - icon.width: icon1.width - icon.height: icon1.height - icon.name: icon1.name - icon.rotation: icon1.rotation - icon.color: icon1.color - visible: !!icon.name - } - StatusRoundIcon { - icon.background.width: icon2.background.width - icon.background.height: icon2.background.height - icon.background.color: icon2.background.color - icon.width: icon2.width - icon.height: icon2.height - icon.name: icon2.name - icon.rotation: icon2.rotation - icon.color: icon2.color - visible: !!icon.name + } + StatusContactVerificationIcons { + isMutualContact: statusMessageHeader.isMutualContact + trustIndicator: statusMessageHeader.trustIndicator } StatusBaseText { id: secondaryDisplayName diff --git a/ui/StatusQ/src/StatusQ/Components/qmldir b/ui/StatusQ/src/StatusQ/Components/qmldir index e220f4b466..dfcf6b68c3 100644 --- a/ui/StatusQ/src/StatusQ/Components/qmldir +++ b/ui/StatusQ/src/StatusQ/Components/qmldir @@ -10,6 +10,7 @@ StatusChatListCategoryItem 0.1 StatusChatListCategoryItem.qml StatusChatListAndCategories 0.1 StatusChatListAndCategories.qml StatusChatToolBar 0.1 StatusChatToolBar.qml StatusContactRequestsIndicatorListItem 0.1 StatusContactRequestsIndicatorListItem.qml +StatusContactVerificationIcons 0.1 StatusContactVerificationIcons.qml StatusDescriptionListItem 0.1 StatusDescriptionListItem.qml StatusLetterIdenticon 0.1 StatusLetterIdenticon.qml StatusListItem 0.1 StatusListItem.qml diff --git a/ui/StatusQ/statusq.qrc b/ui/StatusQ/statusq.qrc index f8cb7bc7fe..e549085d92 100644 --- a/ui/StatusQ/statusq.qrc +++ b/ui/StatusQ/statusq.qrc @@ -323,5 +323,6 @@ src/StatusQ/Components/StatusTagSelector.qml src/StatusQ/Components/StatusToastMessage.qml src/StatusQ/Components/StatusWizardStepper.qml + src/StatusQ/Components/StatusContactVerificationIcons.qml