status-desktop/ui/app/AppLayouts/Profile/controls/ShowcaseDelegate.qml

137 lines
4.4 KiB
QML

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtGraphicalEffects 1.15
import QtQml 2.15
import StatusQ.Controls 0.1
import StatusQ.Components 0.1
import StatusQ.Popups 0.1
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import AppLayouts.Wallet.controls 1.0
import utils 1.0
import shared.controls 1.0
StatusDraggableListItem {
id: root
property alias actionComponent: additionalActionsLoader.sourceComponent
property int showcaseVisibility: Constants.ShowcaseVisibility.NoOne
property int showcaseMaxVisibility: Constants.ShowcaseVisibility.Everyone
property bool blurState: false
property bool contextMenuEnabled: true
property string tooltipTextWhenContextMenuDisabled
signal showcaseVisibilityRequested(int value)
component ShowcaseVisibilityAction: StatusMenuItem {
id: menuItem
required property int showcaseVisibility
ButtonGroup.group: showcaseVisibilityGroup
icon.name: ProfileUtils.visibilityIcon(showcaseVisibility)
icon.color: Theme.palette.primaryColor1
checked: root.showcaseVisibility === showcaseVisibility
enabled: root.showcaseMaxVisibility >= showcaseVisibility
}
layer.enabled: root.blurState
layer.effect: fastBlur
height: ProfileUtils.defaultDelegateHeight
topInset: 0
bottomInset: 0
changeColorOnDragActive: false
bgColor: Theme.palette.getColor(Theme.palette.statusAppLayout.rightPanelBackgroundColor, 0.7)
icon.width: 40
icon.height: 40
draggable: true
dragAxis: Drag.XAndYAxis
actions: [
Loader {
id: additionalActionsLoader
Layout.maximumWidth: root.width *.4
},
StatusButton {
interactive: root.contextMenuEnabled
tooltip.text: root.tooltipTextWhenContextMenuDisabled
icon.name: ProfileUtils.visibilityIcon(root.showcaseVisibility)
horizontalPadding: Theme.halfPadding
verticalPadding: 3
Layout.preferredWidth: 72
Layout.preferredHeight: root.height/2
radius: height/2
highlighted: menuLoader.item && menuLoader.item.opened
onClicked: {
menuLoader.active = true
menuLoader.item.popup(width - menuLoader.item.width, height)
}
text: " " // NB to give the icon and indicator some even space
indicator: StatusIcon {
anchors.right: parent.right
anchors.rightMargin: parent.horizontalPadding
anchors.verticalCenter: parent.verticalCenter
icon: "chevron-down"
color: parent.interactive ? Theme.palette.primaryColor1 : Theme.palette.baseColor1
}
ButtonGroup {
id: showcaseVisibilityGroup
exclusive: true
onClicked: function(button) {
const newVisibility = (button as ShowcaseVisibilityAction).showcaseVisibility
if (newVisibility !== root.showcaseVisibility)
root.showcaseVisibilityRequested(newVisibility)
}
}
Loader {
id: menuLoader
active: false
sourceComponent: StatusMenu {
onClosed: menuLoader.active = false
StatusMenuHeadline { text: qsTr("Show to") }
ShowcaseVisibilityAction {
id: everyoneAction
showcaseVisibility: Constants.ShowcaseVisibility.Everyone
text: enabled ? qsTr("Everyone") : qsTr("Everyone (set account to Everyone)")
}
ShowcaseVisibilityAction {
id: contactsAction
showcaseVisibility: Constants.ShowcaseVisibility.Contacts
text: enabled ? qsTr("Contacts") : qsTr("Contacts (set account to Contacts)")
}
StatusMenuSeparator {}
ShowcaseVisibilityAction {
showcaseVisibility: Constants.ShowcaseVisibility.NoOne
text: qsTr("No one")
}
}
}
}
]
Component {
id: fastBlur
FastBlur {
radius: 32
transparentBorder: true
}
}
}