feat(Components): introduce `StatusChatInfoToolBar` component
Usage: ```qml import StatusQ.Components 0.1 StatusChatInfoToolBar { chatInfoButton.title: "Cryptokitties" chatInfoButton.subTitle: "128 Members" chatInfoButton.image.source: "https://pbs.twimg.com/profile_images/1369221718338895873/T_5fny6o_400x400.jpg" chatInfoButton.icon.color: Theme.palette.miscColor6 popupMenu: StatusPopupMenu { StatusMenuItem { text: "Create channel" icon.name: "channel" } StatusMenuItem { text: "Create category" icon.name: "channel-category" } StatusMenuSeparator {} StatusMenuItem { text: "Invite people" icon.name: "share-ios" } } } ``` Closes #141
This commit is contained in:
parent
524eb14512
commit
f2de2642ac
|
@ -236,6 +236,35 @@ Rectangle {
|
||||||
leftPanel: Item {
|
leftPanel: Item {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
|
StatusChatInfoToolBar {
|
||||||
|
chatInfoButton.title: "Cryptokitties"
|
||||||
|
chatInfoButton.subTitle: "128 Members"
|
||||||
|
chatInfoButton.image.source: "https://pbs.twimg.com/profile_images/1369221718338895873/T_5fny6o_400x400.jpg"
|
||||||
|
chatInfoButton.icon.color: Theme.palette.miscColor6
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
|
||||||
|
popupMenu: StatusPopupMenu {
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Create channel"
|
||||||
|
icon.name: "channel"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Create category"
|
||||||
|
icon.name: "channel-category"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuSeparator {}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Invite people"
|
||||||
|
icon.name: "share-ios"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.topMargin: 64
|
anchors.topMargin: 64
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
import QtQuick 2.14
|
||||||
|
import QtQuick.Layouts 1.14
|
||||||
|
import QtQuick.Controls 2.13
|
||||||
|
|
||||||
|
import StatusQ.Core.Theme 0.1
|
||||||
|
import StatusQ.Components 0.1
|
||||||
|
import StatusQ.Popups 0.1
|
||||||
|
|
||||||
|
GridLayout {
|
||||||
|
columns: 1
|
||||||
|
columnSpacing: 5
|
||||||
|
rowSpacing: 5
|
||||||
|
|
||||||
|
StatusChatInfoToolBar {
|
||||||
|
chatInfoButton.title: "Cryptokitties"
|
||||||
|
chatInfoButton.subTitle: "128 Members"
|
||||||
|
chatInfoButton.image.source: "https://pbs.twimg.com/profile_images/1369221718338895873/T_5fny6o_400x400.jpg"
|
||||||
|
chatInfoButton.icon.color: Theme.palette.miscColor6
|
||||||
|
|
||||||
|
popupMenu: StatusPopupMenu {
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Create channel"
|
||||||
|
icon.name: "channel"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Create category"
|
||||||
|
icon.name: "channel-category"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuSeparator {}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Invite people"
|
||||||
|
icon.name: "share-ios"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -149,6 +149,11 @@ StatusWindow {
|
||||||
selected: page.sourceComponent == listItemsComponent
|
selected: page.sourceComponent == listItemsComponent
|
||||||
onClicked: page.sourceComponent = listItemsComponent
|
onClicked: page.sourceComponent = listItemsComponent
|
||||||
}
|
}
|
||||||
|
StatusNavigationListItem {
|
||||||
|
title: "StatusChatInfoToolBar"
|
||||||
|
selected: page.sourceComponent == chatInfoToolBarComponent
|
||||||
|
onClicked: page.sourceComponent = chatInfoToolBarComponent
|
||||||
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "Others"
|
title: "Others"
|
||||||
selected: page.sourceComponent == othersComponent
|
selected: page.sourceComponent == othersComponent
|
||||||
|
@ -252,6 +257,11 @@ StatusWindow {
|
||||||
StatusPopupMenuPage {}
|
StatusPopupMenuPage {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Component {
|
||||||
|
id: chatInfoToolBarComponent
|
||||||
|
StatusChatInfoToolBarPage {}
|
||||||
|
}
|
||||||
|
|
||||||
Component {
|
Component {
|
||||||
id: demoAppCmp
|
id: demoAppCmp
|
||||||
|
|
||||||
|
|
|
@ -5,5 +5,6 @@
|
||||||
<file>Icons.qml</file>
|
<file>Icons.qml</file>
|
||||||
<file>Others.qml</file>
|
<file>Others.qml</file>
|
||||||
<file>Buttons.qml</file>
|
<file>Buttons.qml</file>
|
||||||
|
<file>StatusChatInfoToolBarPage.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -0,0 +1,105 @@
|
||||||
|
import QtQuick 2.13
|
||||||
|
import QtGraphicalEffects 1.13
|
||||||
|
import StatusQ.Components 0.1
|
||||||
|
import StatusQ.Controls 0.1
|
||||||
|
import StatusQ.Popups 0.1
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: statusChatInfoToolBar
|
||||||
|
|
||||||
|
implicitWidth: 288
|
||||||
|
implicitHeight: 56
|
||||||
|
|
||||||
|
property alias chatInfoButton: statusChatInfoButton
|
||||||
|
property Component popupMenu
|
||||||
|
|
||||||
|
signal chatInfoButtonClicked()
|
||||||
|
signal addButtonClicked(var mouse)
|
||||||
|
|
||||||
|
onPopupMenuChanged: {
|
||||||
|
if (!!popupMenu) {
|
||||||
|
popupMenuSlot.sourceComponent = popupMenu
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusChatInfoButton {
|
||||||
|
id: statusChatInfoButton
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 5
|
||||||
|
type: StatusChatInfoButton.Type.OneToOneChat
|
||||||
|
onClicked: statusChatInfoToolBar.chatInfoButtonClicked()
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusRoundButton {
|
||||||
|
id: menuButton
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: 8
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
|
||||||
|
visible: popupMenuSlot.active
|
||||||
|
width: 32
|
||||||
|
height: 32
|
||||||
|
|
||||||
|
type: StatusRoundButton.Type.Secondary
|
||||||
|
icon.name: "add"
|
||||||
|
state: "default"
|
||||||
|
|
||||||
|
states: [
|
||||||
|
State {
|
||||||
|
name: "default"
|
||||||
|
PropertyChanges {
|
||||||
|
target: menuButton
|
||||||
|
icon.rotation: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
State {
|
||||||
|
name: "pressed"
|
||||||
|
PropertyChanges {
|
||||||
|
target: menuButton
|
||||||
|
icon.rotation: 45
|
||||||
|
highlighted: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
transitions: [
|
||||||
|
Transition {
|
||||||
|
from: "default"
|
||||||
|
to: "pressed"
|
||||||
|
|
||||||
|
RotationAnimation {
|
||||||
|
duration: 150
|
||||||
|
direction: RotationAnimation.Clockwise
|
||||||
|
easing.type: Easing.InCubic
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Transition {
|
||||||
|
from: "pressed"
|
||||||
|
to: "default"
|
||||||
|
RotationAnimation {
|
||||||
|
duration: 150
|
||||||
|
direction: RotationAnimation.Counterclockwise
|
||||||
|
easing.type: Easing.OutCubic
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
statusChatInfoToolBar.addButtonClicked(mouse)
|
||||||
|
menuButton.state = "pressed"
|
||||||
|
popupMenuSlot.item.popup(menuButton.width-popupMenuSlot.item.width, menuButton.height + 4)
|
||||||
|
}
|
||||||
|
|
||||||
|
Loader {
|
||||||
|
id: popupMenuSlot
|
||||||
|
active: !!statusChatInfoToolBar.popupMenu
|
||||||
|
onLoaded: {
|
||||||
|
popupMenuSlot.item.closeHandler = function () {
|
||||||
|
menuButton.state = "default"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
module StatusQ.Components
|
module StatusQ.Components
|
||||||
|
|
||||||
StatusBadge 0.1 StatusBadge.qml
|
StatusBadge 0.1 StatusBadge.qml
|
||||||
|
StatusChatInfoToolBar 0.1 StatusChatInfoToolBar.qml
|
||||||
StatusChatList 0.1 StatusChatList.qml
|
StatusChatList 0.1 StatusChatList.qml
|
||||||
StatusChatListItem 0.1 StatusChatListItem.qml
|
StatusChatListItem 0.1 StatusChatListItem.qml
|
||||||
StatusChatListCategory 0.1 StatusChatListCategory.qml
|
StatusChatListCategory 0.1 StatusChatListCategory.qml
|
||||||
|
|
|
@ -35,7 +35,7 @@ Rectangle {
|
||||||
}
|
}
|
||||||
|
|
||||||
radius: 8
|
radius: 8
|
||||||
color: sensor.containsMouse ? Theme.palette.baseColor2 : Theme.palette.statusChatInfoButton.backgroundColor
|
color: sensor.containsMouse ? Theme.palette.baseColor2 : "transparent"
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
id: sensor
|
id: sensor
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
<file>src/StatusQ/Popups/StatusMenuItem.qml</file>
|
<file>src/StatusQ/Popups/StatusMenuItem.qml</file>
|
||||||
<file>src/StatusQ/Components/qmldir</file>
|
<file>src/StatusQ/Components/qmldir</file>
|
||||||
<file>src/StatusQ/Components/StatusChatListItem.qml</file>
|
<file>src/StatusQ/Components/StatusChatListItem.qml</file>
|
||||||
|
<file>src/StatusQ/Components/StatusChatInfoToolBar.qml</file>
|
||||||
<file>src/StatusQ/Components/StatusNavigationListItem.qml</file>
|
<file>src/StatusQ/Components/StatusNavigationListItem.qml</file>
|
||||||
<file>src/StatusQ/Components/StatusChatToolBar.qml</file>
|
<file>src/StatusQ/Components/StatusChatToolBar.qml</file>
|
||||||
<file>src/StatusQ/Components/StatusRoundedImage.qml</file>
|
<file>src/StatusQ/Components/StatusRoundedImage.qml</file>
|
||||||
|
|
Loading…
Reference in New Issue