mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-09 05:52:41 +00:00
feat(StatusModal): Add edit avatar button
Part of https://github.com/status-im/status-desktop/issues/3734
This commit is contained in:
parent
a065abf01b
commit
a0d97fb464
@ -53,6 +53,11 @@ Column {
|
|||||||
onClicked: modalWithIdenticon.open()
|
onClicked: modalWithIdenticon.open()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StatusButton {
|
||||||
|
text: "Modal with editable identicon"
|
||||||
|
onClicked: modalWithEditableIdenticon.open()
|
||||||
|
}
|
||||||
|
|
||||||
StatusButton {
|
StatusButton {
|
||||||
text: "Modal with long titles"
|
text: "Modal with long titles"
|
||||||
onClicked: modalWithLongTitles.open()
|
onClicked: modalWithLongTitles.open()
|
||||||
@ -259,6 +264,33 @@ CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2I
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StatusModal {
|
||||||
|
id: modalWithEditableIdenticon
|
||||||
|
anchors.centerIn: parent
|
||||||
|
header.title: "Header"
|
||||||
|
header.subTitle: "SubTitle"
|
||||||
|
header.headerImageEditable: true
|
||||||
|
header.image.source: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAlklEQVR4nOzW0QmDQBAG4SSkl7SUQlJGCrElq9F3QdjjVhh/5nv3cFhY9vUIYQiNITSG0Bh
|
||||||
|
CExPynn1gWf9bx498P7/nzPcxEzGExhBdJGYihtAYQlO+tUZvqrPbqeudo5iJGEJjCE15a3VtodH3q2ImYgiNITTlTdG1nUZ5a92VITQxITFiJmIIjSE0htAYQrMHAAD//+wwFVpz+yqXAAAAAElFTkSuQmCC"
|
||||||
|
header.image.isIdenticon: true
|
||||||
|
|
||||||
|
contentItem: StatusBaseText {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: "Some text content"
|
||||||
|
font.pixelSize: 15
|
||||||
|
color: Theme.palette.directColor1
|
||||||
|
}
|
||||||
|
|
||||||
|
rightButtons: [
|
||||||
|
StatusButton {
|
||||||
|
text: "Change text"
|
||||||
|
onClicked: {
|
||||||
|
modalWithIdenticon.contentItem.text = "Changed!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
StatusModal {
|
StatusModal {
|
||||||
id: modalWithLongTitles
|
id: modalWithLongTitles
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
|
@ -5,6 +5,7 @@ QtObject {
|
|||||||
property string subTitle
|
property string subTitle
|
||||||
property int titleElide: Text.ElideRight
|
property int titleElide: Text.ElideRight
|
||||||
property int subTitleElide: Text.ElideRight
|
property int subTitleElide: Text.ElideRight
|
||||||
|
property bool headerImageEditable: false
|
||||||
property Component popupMenu
|
property Component popupMenu
|
||||||
property StatusImageSettings image: StatusImageSettings {
|
property StatusImageSettings image: StatusImageSettings {
|
||||||
width: 40
|
width: 40
|
||||||
|
@ -20,6 +20,7 @@ QC.Popup {
|
|||||||
property bool showFooter: true
|
property bool showFooter: true
|
||||||
|
|
||||||
signal editButtonClicked()
|
signal editButtonClicked()
|
||||||
|
signal headerImageClicked()
|
||||||
|
|
||||||
parent: QC.Overlay.overlay
|
parent: QC.Overlay.overlay
|
||||||
|
|
||||||
@ -54,8 +55,10 @@ QC.Popup {
|
|||||||
image: header.image
|
image: header.image
|
||||||
icon: header.icon
|
icon: header.icon
|
||||||
popupMenu: header.popupMenu
|
popupMenu: header.popupMenu
|
||||||
|
headerImageEditable: header.headerImageEditable
|
||||||
|
|
||||||
onEditButtonClicked: statusModal.editButtonClicked()
|
onEditButtonClicked: statusModal.editButtonClicked()
|
||||||
|
onHeaderImageClicked: statusModal.headerImageClicked()
|
||||||
onClose: statusModal.close()
|
onClose: statusModal.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,8 +12,10 @@ Row {
|
|||||||
property int titleElide: Text.ElideRight
|
property int titleElide: Text.ElideRight
|
||||||
property int subTitleElide: Text.ElideRight
|
property int subTitleElide: Text.ElideRight
|
||||||
property bool editable: false
|
property bool editable: false
|
||||||
|
property bool headerImageEditable: false
|
||||||
|
|
||||||
signal editButtonClicked
|
signal editButtonClicked
|
||||||
|
signal headerImageClicked
|
||||||
|
|
||||||
property StatusImageSettings image: StatusImageSettings {
|
property StatusImageSettings image: StatusImageSettings {
|
||||||
width: 40
|
width: 40
|
||||||
@ -39,7 +41,7 @@ Row {
|
|||||||
}
|
}
|
||||||
return statusRoundedImageCmp
|
return statusRoundedImageCmp
|
||||||
}
|
}
|
||||||
active: statusImageWithTitle.icon.isLetterIdenticon ||
|
active: statusImageWithTitle.icon.isLetterIdenticon ||
|
||||||
!!statusImageWithTitle.image.source.toString()
|
!!statusImageWithTitle.image.source.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,12 +66,51 @@ Row {
|
|||||||
width: statusImageWithTitle.image.width
|
width: statusImageWithTitle.image.width
|
||||||
height: statusImageWithTitle.image.height
|
height: statusImageWithTitle.image.height
|
||||||
color: statusImageWithTitle.image.isIdenticon ?
|
color: statusImageWithTitle.image.isIdenticon ?
|
||||||
Theme.palette.statusRoundedImage.backgroundColor :
|
Theme.palette.statusRoundedImage.backgroundColor :
|
||||||
"transparent"
|
"transparent"
|
||||||
border.width: statusImageWithTitle.image.isIdenticon ? 1 : 0
|
border.width: statusImageWithTitle.image.isIdenticon ? 1 : 0
|
||||||
border.color: Theme.palette.directColor7
|
border.color: Theme.palette.directColor7
|
||||||
showLoadingIndicator: true
|
showLoadingIndicator: true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: editAvatarIcon
|
||||||
|
|
||||||
|
objectName: "editAvatarImage"
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.bottomMargin: -3
|
||||||
|
anchors.rightMargin: -2
|
||||||
|
width: 18
|
||||||
|
height: 18
|
||||||
|
radius: width / 2
|
||||||
|
|
||||||
|
visible: statusImageWithTitle.headerImageEditable
|
||||||
|
|
||||||
|
color: Theme.palette.primaryColor1;
|
||||||
|
border.color: Theme.palette.indirectColor1
|
||||||
|
border.width: Theme.palette.name === "light" ? 1 : 0
|
||||||
|
|
||||||
|
StatusIcon {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
width: 11
|
||||||
|
color: Theme.palette.indirectColor1
|
||||||
|
icon: "tiny/edit"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
cursorShape: enabled ? Qt.PointingHandCursor
|
||||||
|
: Qt.ArrowCursor
|
||||||
|
enabled: statusImageWithTitle.headerImageEditable
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
statusImageWithTitle.headerImageClicked()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
sourceComponent: statusLetterIdenticon
|
sourceComponent: statusLetterIdenticon
|
||||||
active: statusRoundedImage.image.status === Image.Error
|
active: statusRoundedImage.image.status === Image.Error
|
||||||
@ -80,7 +121,7 @@ Row {
|
|||||||
Column {
|
Column {
|
||||||
id: textLayout
|
id: textLayout
|
||||||
width: !iconOrImage.active ? parent.width :
|
width: !iconOrImage.active ? parent.width :
|
||||||
parent.width - iconOrImage.width - parent.spacing
|
parent.width - iconOrImage.width - parent.spacing
|
||||||
Row {
|
Row {
|
||||||
id: headerTitleRow
|
id: headerTitleRow
|
||||||
width: parent.width
|
width: parent.width
|
||||||
@ -92,11 +133,12 @@ Row {
|
|||||||
font.bold: true
|
font.bold: true
|
||||||
elide: statusImageWithTitle.titleElide
|
elide: statusImageWithTitle.titleElide
|
||||||
color: Theme.palette.directColor1
|
color: Theme.palette.directColor1
|
||||||
width: !editButton.visible ? parent.width :
|
width: !editButton.visible ? parent.width :
|
||||||
parent.width - editButton.width - parent.spacing
|
parent.width - editButton.width - parent.spacing
|
||||||
}
|
}
|
||||||
StatusFlatRoundButton {
|
StatusFlatRoundButton {
|
||||||
id: editButton
|
id: editButton
|
||||||
|
objectName: "editAvatarbButton"
|
||||||
visible: statusImageWithTitle.editable
|
visible: statusImageWithTitle.editable
|
||||||
anchors.bottom: headerTitle.bottom
|
anchors.bottom: headerTitle.bottom
|
||||||
anchors.bottomMargin: -1
|
anchors.bottomMargin: -1
|
||||||
|
@ -18,9 +18,11 @@ Rectangle {
|
|||||||
property alias image: imageWithTitle.image
|
property alias image: imageWithTitle.image
|
||||||
property alias icon: imageWithTitle.icon
|
property alias icon: imageWithTitle.icon
|
||||||
property bool editable: false
|
property bool editable: false
|
||||||
|
property alias headerImageEditable: imageWithTitle.headerImageEditable
|
||||||
property Component popupMenu
|
property Component popupMenu
|
||||||
|
|
||||||
signal editButtonClicked
|
signal editButtonClicked
|
||||||
|
signal headerImageClicked
|
||||||
signal close
|
signal close
|
||||||
|
|
||||||
implicitHeight: visible? Math.max(closeButton.height, imageWithTitle.implicitHeight) + 32 : 0
|
implicitHeight: visible? Math.max(closeButton.height, imageWithTitle.implicitHeight) + 32 : 0
|
||||||
@ -36,6 +38,18 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
width: parent.width
|
||||||
|
height: parent.radius
|
||||||
|
color: parent.color
|
||||||
|
|
||||||
|
StatusModalDivider {
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
width: parent.width
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
StatusImageWithTitle {
|
StatusImageWithTitle {
|
||||||
id: imageWithTitle
|
id: imageWithTitle
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
@ -46,7 +60,7 @@ Rectangle {
|
|||||||
editable: statusModalHeader.editable
|
editable: statusModalHeader.editable
|
||||||
titleElide: statusModalHeader.titleElide
|
titleElide: statusModalHeader.titleElide
|
||||||
subTitleElide: statusModalHeader.subTitleElide
|
subTitleElide: statusModalHeader.subTitleElide
|
||||||
onEditButtonClicked: statusModalHeader.editButtonClicked()
|
onHeaderImageClicked: statusModalHeader.headerImageClicked()
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
@ -83,18 +97,6 @@ Rectangle {
|
|||||||
onClicked: statusModalHeader.close()
|
onClicked: statusModalHeader.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
width: parent.width
|
|
||||||
height: parent.radius
|
|
||||||
color: parent.color
|
|
||||||
|
|
||||||
StatusModalDivider {
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
width: parent.width
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
id: popupMenuSlot
|
id: popupMenuSlot
|
||||||
active: !!statusModalHeader.popupMenu
|
active: !!statusModalHeader.popupMenu
|
||||||
|
@ -270,5 +270,44 @@
|
|||||||
<file>src/assets/img/icons/snt.svg</file>
|
<file>src/assets/img/icons/snt.svg</file>
|
||||||
<file>src/StatusQ/Popups/StatusSpellcheckingMenuItems.qml</file>
|
<file>src/StatusQ/Popups/StatusSpellcheckingMenuItems.qml</file>
|
||||||
<file>src/StatusQ/Controls/StatusSelectableText.qml</file>
|
<file>src/StatusQ/Controls/StatusSelectableText.qml</file>
|
||||||
|
<file>src/assets/img/icons/tiny/add.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/arrow-down.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/channel-white.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/channel.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/chat.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/chatbot.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/checkmark.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/chevron-down.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/chevron-left.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/chevron-right.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/chevron-up.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/clear.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/community-1.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/community.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/contact.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/double-checkmark.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/edit.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/external.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/group-white.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/group.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/more.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/message/delivered.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/message/pending.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/message/sent.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/message/warning.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/muted-white.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/muted.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/not-secure.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/pending.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/pin.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/public-chat-white.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/public-chat.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/reply.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/secure.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/settings.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/SNT.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/time.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/tribute-to-talk.svg</file>
|
||||||
|
<file>src/assets/img/icons/tiny/warning.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user