refactor: refactored/cleaned up sandbox app
Grouped QML files by pages, controls and demo app related stuff
This commit is contained in:
parent
774b7e44f4
commit
e7b9462c84
|
@ -1,14 +1,13 @@
|
||||||
import QtQuick 2.14
|
import QtQuick 2.14
|
||||||
import QtQuick.Controls 2.14
|
|
||||||
|
|
||||||
import StatusQ.Core 0.1
|
|
||||||
import StatusQ.Core.Theme 0.1
|
import StatusQ.Core.Theme 0.1
|
||||||
import StatusQ.Controls 0.1
|
import StatusQ.Controls 0.1
|
||||||
import StatusQ.Components 0.1
|
|
||||||
import StatusQ.Layout 0.1
|
import StatusQ.Layout 0.1
|
||||||
import StatusQ.Popups 0.1
|
import StatusQ.Popups 0.1
|
||||||
import StatusQ.Platform 0.1
|
import StatusQ.Platform 0.1
|
||||||
|
|
||||||
|
import "demoapp"
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: demoApp
|
id: demoApp
|
||||||
height: 602
|
height: 602
|
||||||
|
@ -148,735 +147,31 @@ Rectangle {
|
||||||
|
|
||||||
Component {
|
Component {
|
||||||
id: statusAppChatView
|
id: statusAppChatView
|
||||||
|
StatusAppChatView { }
|
||||||
StatusAppTwoPanelLayout {
|
|
||||||
|
|
||||||
leftPanel: Item {
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
StatusNavigationPanelHeadline {
|
|
||||||
id: headline
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.topMargin: 16
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
text: "Chat"
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: searchInputWrapper
|
|
||||||
anchors.top: headline.bottom
|
|
||||||
anchors.topMargin: 16
|
|
||||||
width: parent.width
|
|
||||||
height: searchInput.height
|
|
||||||
|
|
||||||
StatusBaseInput {
|
|
||||||
id: searchInput
|
|
||||||
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: actionButton.left
|
|
||||||
anchors.leftMargin: 16
|
|
||||||
anchors.rightMargin: 16
|
|
||||||
|
|
||||||
height: 36
|
|
||||||
topPadding: 8
|
|
||||||
bottomPadding: 0
|
|
||||||
placeholderText: "Search"
|
|
||||||
icon.name: "search"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusRoundButton {
|
|
||||||
id: actionButton
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.rightMargin: 8
|
|
||||||
width: 32
|
|
||||||
height: 32
|
|
||||||
|
|
||||||
type: StatusRoundButton.Type.Secondary
|
|
||||||
icon.name: "add"
|
|
||||||
state: "default"
|
|
||||||
|
|
||||||
onClicked: chatContextMenu.popup(actionButton.width-chatContextMenu.width, actionButton.height + 4)
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "default"
|
|
||||||
PropertyChanges {
|
|
||||||
target: actionButton
|
|
||||||
icon.rotation: 0
|
|
||||||
highlighted: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "pressed"
|
|
||||||
PropertyChanges {
|
|
||||||
target: actionButton
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
StatusPopupMenu {
|
|
||||||
id: chatContextMenu
|
|
||||||
|
|
||||||
onOpened: {
|
|
||||||
actionButton.state = "pressed"
|
|
||||||
}
|
|
||||||
|
|
||||||
onClosed: {
|
|
||||||
actionButton.state = "default"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Start new chat"
|
|
||||||
icon.name: "private-chat"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Start group chat"
|
|
||||||
icon.name: "group-chat"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Join public chat"
|
|
||||||
icon.name: "public-chat"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Communities"
|
|
||||||
icon.name: "communities"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Column {
|
|
||||||
anchors.top: searchInputWrapper.bottom
|
|
||||||
anchors.topMargin: 16
|
|
||||||
width: parent.width
|
|
||||||
spacing: 8
|
|
||||||
|
|
||||||
StatusContactRequestsIndicatorListItem {
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
title: "Contact requests"
|
|
||||||
requestsCount: 3
|
|
||||||
sensor.onClicked: demoContactRequestsModal.open()
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusChatList {
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
|
|
||||||
chatListItems.model: models.demoChatListItems
|
|
||||||
selectedChatId: "0"
|
|
||||||
onChatItemSelected: selectedChatId = id
|
|
||||||
onChatItemUnmuted: {
|
|
||||||
for (var i = 0; i < models.demoChatListItems.count; i++) {
|
|
||||||
let item = models.demoChatListItems.get(i);
|
|
||||||
if (item.chatId === id) {
|
|
||||||
models.demoChatListItems.setProperty(i, "muted", false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
popupMenu: StatusPopupMenu {
|
|
||||||
|
|
||||||
property string chatId
|
|
||||||
|
|
||||||
openHandler: function (id) {
|
|
||||||
chatId = id
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "View Profile"
|
|
||||||
icon.name: "group-chat"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuSeparator {}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Mute chat"
|
|
||||||
icon.name: "notification"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Mark as Read"
|
|
||||||
icon.name: "checkmark-circle"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Clear history"
|
|
||||||
icon.name: "close-circle"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuSeparator {}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Delete chat"
|
|
||||||
icon.name: "delete"
|
|
||||||
type: StatusMenuItem.Type.Danger
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rightPanel: Item {
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
StatusChatToolBar {
|
|
||||||
anchors.top: parent.top
|
|
||||||
width: parent.width
|
|
||||||
|
|
||||||
chatInfoButton.title: "Amazing Funny Squirrel"
|
|
||||||
chatInfoButton.subTitle: "Contact"
|
|
||||||
chatInfoButton.icon.color: Theme.palette.miscColor7
|
|
||||||
chatInfoButton.type: StatusChatInfoButton.Type.OneToOneChat
|
|
||||||
chatInfoButton.pinnedMessagesCount: 1
|
|
||||||
|
|
||||||
searchButton.visible: false
|
|
||||||
membersButton.visible: false
|
|
||||||
notificationCount: 1
|
|
||||||
|
|
||||||
onNotificationButtonClicked: notificationCount = 0
|
|
||||||
|
|
||||||
popupMenu: StatusPopupMenu {
|
|
||||||
id: contextMenu
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Mute Chat"
|
|
||||||
icon.name: "notification"
|
|
||||||
}
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Mark as Read"
|
|
||||||
icon.name: "checkmark-circle"
|
|
||||||
}
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Clear History"
|
|
||||||
icon.name: "close-circle"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuSeparator {}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Leave Chat"
|
|
||||||
icon.name: "arrow-right"
|
|
||||||
icon.width: 14
|
|
||||||
iconRotation: 180
|
|
||||||
type: StatusMenuItem.Type.Danger
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Component {
|
Component {
|
||||||
id: statusAppCommunityView
|
id: statusAppCommunityView
|
||||||
|
StatusAppCommunityView {
|
||||||
StatusAppThreePanelLayout {
|
communityDetailModalTitle: demoCommunityDetailModal.header.title
|
||||||
id: root
|
communityDetailModalImage: demoCommunityDetailModal.header.image.source
|
||||||
|
onChatInfoButtonClicked: {
|
||||||
handle: Rectangle {
|
demoCommunityDetailModal.open();
|
||||||
implicitWidth: 5
|
|
||||||
color: SplitHandle.pressed ? Theme.palette.baseColor2
|
|
||||||
: (SplitHandle.hovered ? Qt.darker(Theme.palette.baseColor5, 1.1) : "transparent")
|
|
||||||
}
|
|
||||||
leftPanel: Item {
|
|
||||||
id: leftPanel
|
|
||||||
|
|
||||||
StatusChatInfoToolBar {
|
|
||||||
id: statusChatInfoToolBar
|
|
||||||
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
|
|
||||||
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
|
|
||||||
chatInfoButton.onClicked: demoCommunityDetailModal.open()
|
|
||||||
|
|
||||||
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"
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ScrollView {
|
|
||||||
id: scrollView
|
|
||||||
|
|
||||||
anchors.top: statusChatInfoToolBar.bottom
|
|
||||||
anchors.topMargin: 8
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
width: leftPanel.width
|
|
||||||
|
|
||||||
contentHeight: communityCategories.height
|
|
||||||
clip: true
|
|
||||||
|
|
||||||
StatusChatListAndCategories {
|
|
||||||
id: communityCategories
|
|
||||||
width: leftPanel.width
|
|
||||||
height: implicitHeight > (leftPanel.height - 64) ? implicitHeight + 8 : leftPanel.height - 64
|
|
||||||
|
|
||||||
draggableItems: true
|
|
||||||
draggableCategories: false
|
|
||||||
chatList.model: models.demoCommunityChatListItems
|
|
||||||
categoryList.model: models.demoCommunityCategoryItems
|
|
||||||
|
|
||||||
showCategoryActionButtons: true
|
|
||||||
onChatItemSelected: selectedChatId = id
|
|
||||||
|
|
||||||
categoryPopupMenu: StatusPopupMenu {
|
|
||||||
|
|
||||||
property string categoryId
|
|
||||||
|
|
||||||
openHandler: function (id) {
|
|
||||||
categoryId = id
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Mute Category"
|
|
||||||
icon.name: "notification"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Mark as Read"
|
|
||||||
icon.name: "checkmark-circle"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Edit Category"
|
|
||||||
icon.name: "edit"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuSeparator {}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Delete Category"
|
|
||||||
icon.name: "delete"
|
|
||||||
type: StatusMenuItem.Type.Danger
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
chatListPopupMenu: StatusPopupMenu {
|
|
||||||
|
|
||||||
property string chatId
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Mute chat"
|
|
||||||
icon.name: "notification"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Mark as Read"
|
|
||||||
icon.name: "checkmark-circle"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Clear history"
|
|
||||||
icon.name: "close-circle"
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusMenuSeparator {}
|
|
||||||
|
|
||||||
StatusMenuItem {
|
|
||||||
text: "Delete chat"
|
|
||||||
icon.name: "delete"
|
|
||||||
type: StatusMenuItem.Type.Danger
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
centerPanel: Item {
|
|
||||||
StatusChatToolBar {
|
|
||||||
id: statusChatToolBar
|
|
||||||
anchors.top: parent.top
|
|
||||||
width: parent.width
|
|
||||||
|
|
||||||
chatInfoButton.title: "general"
|
|
||||||
chatInfoButton.subTitle: "Community Chat"
|
|
||||||
chatInfoButton.icon.color: Theme.palette.miscColor6
|
|
||||||
chatInfoButton.type: StatusChatInfoButton.Type.CommunityChat
|
|
||||||
onSearchButtonClicked: {
|
|
||||||
searchButton.highlighted = !searchButton.highlighted;
|
|
||||||
searchPopup.setSearchSelection(demoCommunityDetailModal.header.title,
|
|
||||||
"",
|
|
||||||
demoCommunityDetailModal.header.image.source);
|
|
||||||
searchPopup.open();
|
|
||||||
}
|
|
||||||
membersButton.onClicked: membersButton.highlighted = !membersButton.highlighted
|
|
||||||
onMembersButtonClicked: {
|
|
||||||
root.showRightPanel = !root.showRightPanel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusSearchPopup {
|
|
||||||
id: searchPopup
|
|
||||||
searchOptionsPopupMenu: searchPopupMenu
|
|
||||||
onAboutToHide: {
|
|
||||||
if (searchPopupMenu.visible) {
|
|
||||||
searchPopupMenu.close();
|
|
||||||
}
|
|
||||||
//clear menu
|
|
||||||
for (var i = 2; i < searchPopupMenu.count; i++) {
|
|
||||||
searchPopupMenu.removeItem(searchPopupMenu.takeItem(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onClosed: {
|
|
||||||
statusChatToolBar.searchButton.highlighted = false
|
|
||||||
searchPopupMenu.dismiss();
|
|
||||||
}
|
|
||||||
onSearchTextChanged: {
|
|
||||||
if (searchPopup.searchText !== "") {
|
|
||||||
searchPopup.loading = true;
|
|
||||||
searchModelSimTimer.start();
|
|
||||||
} else {
|
|
||||||
searchPopup.searchResults = [];
|
|
||||||
searchModelSimTimer.stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Timer {
|
|
||||||
id: searchModelSimTimer
|
|
||||||
interval: 500
|
|
||||||
onTriggered: {
|
|
||||||
if (searchPopup.searchText.startsWith("c")) {
|
|
||||||
searchPopup.searchResults = models.searchResultsA;
|
|
||||||
} else {
|
|
||||||
searchPopup.searchResults = models.searchResultsB;
|
|
||||||
}
|
|
||||||
searchPopup.loading = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
StatusSearchLocationMenu {
|
|
||||||
id: searchPopupMenu
|
|
||||||
searchPopup: searchPopup
|
|
||||||
locationModel: models.optionsModel
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rightPanel: Item {
|
|
||||||
id: rightPanel
|
|
||||||
StatusBaseText {
|
|
||||||
id: titleText
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.topMargin:16
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.leftMargin: 16
|
|
||||||
opacity: (rightPanel.width > 50) ? 1.0 : 0.0
|
|
||||||
visible: (opacity > 0.1)
|
|
||||||
font.pixelSize: 15
|
|
||||||
text: qsTr("Members")
|
|
||||||
}
|
|
||||||
|
|
||||||
ListView {
|
|
||||||
anchors.top: titleText.bottom
|
|
||||||
anchors.topMargin: 16
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.leftMargin: 8
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.rightMargin: 8
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
anchors.bottomMargin: 16
|
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
|
||||||
model: ["John", "Nick", "Maria", "Mike"]
|
|
||||||
delegate: Row {
|
|
||||||
width: parent.width
|
|
||||||
height: 30
|
|
||||||
spacing: 8
|
|
||||||
Rectangle {
|
|
||||||
width: 24
|
|
||||||
height: 24
|
|
||||||
radius: width/2
|
|
||||||
color: Qt.rgba(Math.random(), Math.random(), Math.random(), 255)
|
|
||||||
}
|
|
||||||
StatusBaseText {
|
|
||||||
height: parent.height
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
opacity: (rightPanel.width > 50) ? 1.0 : 0.0
|
|
||||||
visible: (opacity > 0.1)
|
|
||||||
font.pixelSize: 15
|
|
||||||
color: Theme.palette.directColor1
|
|
||||||
text: modelData
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component {
|
Component {
|
||||||
id: statusAppProfileSettingsView
|
id: statusAppProfileSettingsView
|
||||||
|
StatusAppProfileSettingsView { }
|
||||||
StatusAppTwoPanelLayout {
|
|
||||||
|
|
||||||
leftPanel: Item {
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
StatusNavigationPanelHeadline {
|
|
||||||
id: profileHeadline
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.topMargin: 16
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
text: "Profile"
|
|
||||||
}
|
|
||||||
|
|
||||||
ScrollView {
|
|
||||||
anchors.top: profileHeadline.bottom
|
|
||||||
anchors.topMargin: 16
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
width: parent.width
|
|
||||||
|
|
||||||
contentHeight: profileMenuItems.height + 8
|
|
||||||
contentWidth: parent.width
|
|
||||||
clip: true
|
|
||||||
|
|
||||||
Column {
|
|
||||||
id: profileMenuItems
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
spacing: 4
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
model: models.demoProfileGeneralMenuItems
|
|
||||||
delegate: StatusNavigationListItem {
|
|
||||||
title: model.title
|
|
||||||
icon.name: model.icon
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusListSectionHeadline { text: "Settings" }
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
model: models.demoProfileSettingsMenuItems
|
|
||||||
delegate: StatusNavigationListItem {
|
|
||||||
title: model.title
|
|
||||||
icon.name: model.icon
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: invisibleSeparator
|
|
||||||
height: 16
|
|
||||||
width: parent.width
|
|
||||||
}
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
model: models.demoProfileOtherMenuItems
|
|
||||||
delegate: StatusNavigationListItem {
|
|
||||||
title: model.title
|
|
||||||
icon.name: model.icon
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rightPanel: Item {
|
|
||||||
anchors.fill: parent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
StatusModal {
|
DemoContactRequestsModal {
|
||||||
id: demoContactRequestsModal
|
id: demoContactRequestsModal
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
|
|
||||||
header.title: "Contact Requests"
|
|
||||||
headerActionButton: StatusFlatRoundButton {
|
|
||||||
type: StatusFlatRoundButton.Type.Secondary
|
|
||||||
width: 32
|
|
||||||
height: 32
|
|
||||||
|
|
||||||
icon.width: 20
|
|
||||||
icon.height: 20
|
|
||||||
icon.name: "notification"
|
|
||||||
}
|
|
||||||
|
|
||||||
contentItem: StatusBaseText {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "Contact request will be shown here"
|
|
||||||
font.pixelSize: 15
|
|
||||||
color: Theme.palette.directColor1
|
|
||||||
}
|
|
||||||
|
|
||||||
rightButtons: [
|
|
||||||
StatusButton {
|
|
||||||
text: "Decline all"
|
|
||||||
type: StatusBaseButton.Type.Danger
|
|
||||||
onClicked: demoContactRequestsModal.close()
|
|
||||||
},
|
|
||||||
StatusButton {
|
|
||||||
text: "Accept all"
|
|
||||||
onClicked: demoContactRequestsModal.close()
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
StatusModal {
|
DemoCommunityDetailModal {
|
||||||
id: demoCommunityDetailModal
|
id: demoCommunityDetailModal
|
||||||
|
|
||||||
anchors.centerIn: parent
|
|
||||||
|
|
||||||
header.title: "Cryptokitties"
|
|
||||||
header.subTitle: "Public Community"
|
|
||||||
header.image.source: "https://pbs.twimg.com/profile_images/1369221718338895873/T_5fny6o_400x400.jpg"
|
|
||||||
|
|
||||||
contentItem: Column {
|
|
||||||
width: demoCommunityDetailModal.width
|
|
||||||
|
|
||||||
StatusModalDivider {
|
|
||||||
bottomPadding: 8
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusBaseText {
|
|
||||||
text: "A community of cat lovers, meow!"
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
font.pixelSize: 15
|
|
||||||
height: 46
|
|
||||||
color: Theme.palette.directColor1
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.leftMargin: 16
|
|
||||||
anchors.rightMargin: 16
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusModalDivider {
|
|
||||||
topPadding: 8
|
|
||||||
bottomPadding: 8
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusDescriptionListItem {
|
|
||||||
title: "Share community"
|
|
||||||
subTitle: "https://join.status.im/u/0x04...45f19"
|
|
||||||
tooltip.text: "Copy to clipboard"
|
|
||||||
icon.name: "copy"
|
|
||||||
iconButton.onClicked: tooltip.visible = !tooltip.visible
|
|
||||||
width: parent.width
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusModalDivider {
|
|
||||||
topPadding: 8
|
|
||||||
bottomPadding: 8
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusListItem {
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
statusListItemTitle.font.pixelSize: 17
|
|
||||||
title: "Members"
|
|
||||||
icon.name: "group-chat"
|
|
||||||
label: "184"
|
|
||||||
components: [
|
|
||||||
StatusIcon {
|
|
||||||
icon: "chevron-down"
|
|
||||||
rotation: 270
|
|
||||||
color: Theme.palette.baseColor1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusListItem {
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
statusListItemTitle.font.pixelSize: 17
|
|
||||||
title: "Notifications"
|
|
||||||
icon.name: "notification"
|
|
||||||
components: [
|
|
||||||
StatusSwitch {}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusModalDivider {
|
|
||||||
topPadding: 8
|
|
||||||
bottomPadding: 8
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusListItem {
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
statusListItemTitle.font.pixelSize: 17
|
|
||||||
title: "Edit community"
|
|
||||||
icon.name: "edit"
|
|
||||||
type: StatusListItem.Type.Secondary
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusListItem {
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
statusListItemTitle.font.pixelSize: 17
|
|
||||||
title: "Transfer ownership"
|
|
||||||
icon.name: "exchange"
|
|
||||||
type: StatusListItem.Type.Secondary
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusListItem {
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
statusListItemTitle.font.pixelSize: 17
|
|
||||||
title: "Leave community"
|
|
||||||
icon.name: "arrow-right"
|
|
||||||
icon.rotation: 180
|
|
||||||
type: StatusListItem.Type.Secondary
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Models {
|
|
||||||
id: models
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
import QtQuick 2.12
|
||||||
|
|
||||||
|
import StatusQ.Core 0.1
|
||||||
|
import StatusQ.Core.Theme 0.1
|
||||||
|
import StatusQ.Controls 0.1
|
||||||
|
import StatusQ.Components 0.1
|
||||||
|
import StatusQ.Popups 0.1
|
||||||
|
|
||||||
|
StatusModal {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
anchors.centerIn: parent
|
||||||
|
|
||||||
|
header.title: "Cryptokitties"
|
||||||
|
header.subTitle: "Public Community"
|
||||||
|
header.image.source: "https://pbs.twimg.com/profile_images/1369221718338895873/T_5fny6o_400x400.jpg"
|
||||||
|
|
||||||
|
contentItem: Column {
|
||||||
|
width: root.width
|
||||||
|
|
||||||
|
StatusModalDivider {
|
||||||
|
bottomPadding: 8
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusBaseText {
|
||||||
|
text: "A community of cat lovers, meow!"
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
font.pixelSize: 15
|
||||||
|
height: 46
|
||||||
|
color: Theme.palette.directColor1
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.leftMargin: 16
|
||||||
|
anchors.rightMargin: 16
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusModalDivider {
|
||||||
|
topPadding: 8
|
||||||
|
bottomPadding: 8
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusDescriptionListItem {
|
||||||
|
title: "Share community"
|
||||||
|
subTitle: "https://join.status.im/u/0x04...45f19"
|
||||||
|
tooltip.text: "Copy to clipboard"
|
||||||
|
icon.name: "copy"
|
||||||
|
iconButton.onClicked: tooltip.visible = !tooltip.visible
|
||||||
|
width: parent.width
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusModalDivider {
|
||||||
|
topPadding: 8
|
||||||
|
bottomPadding: 8
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusListItem {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
statusListItemTitle.font.pixelSize: 17
|
||||||
|
title: "Members"
|
||||||
|
icon.name: "group-chat"
|
||||||
|
label: "184"
|
||||||
|
components: [
|
||||||
|
StatusIcon {
|
||||||
|
icon: "chevron-down"
|
||||||
|
rotation: 270
|
||||||
|
color: Theme.palette.baseColor1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusListItem {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
statusListItemTitle.font.pixelSize: 17
|
||||||
|
title: "Notifications"
|
||||||
|
icon.name: "notification"
|
||||||
|
components: [
|
||||||
|
StatusSwitch {}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusModalDivider {
|
||||||
|
topPadding: 8
|
||||||
|
bottomPadding: 8
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusListItem {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
statusListItemTitle.font.pixelSize: 17
|
||||||
|
title: "Edit community"
|
||||||
|
icon.name: "edit"
|
||||||
|
type: StatusListItem.Type.Secondary
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusListItem {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
statusListItemTitle.font.pixelSize: 17
|
||||||
|
title: "Transfer ownership"
|
||||||
|
icon.name: "exchange"
|
||||||
|
type: StatusListItem.Type.Secondary
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusListItem {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
statusListItemTitle.font.pixelSize: 17
|
||||||
|
title: "Leave community"
|
||||||
|
icon.name: "arrow-right"
|
||||||
|
icon.rotation: 180
|
||||||
|
type: StatusListItem.Type.Secondary
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
import QtQuick 2.12
|
||||||
|
|
||||||
|
import StatusQ.Controls 0.1
|
||||||
|
import StatusQ.Core 0.1
|
||||||
|
import StatusQ.Popups 0.1
|
||||||
|
import StatusQ.Core.Theme 0.1
|
||||||
|
|
||||||
|
StatusModal {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
header.title: "Contact Requests"
|
||||||
|
headerActionButton: StatusFlatRoundButton {
|
||||||
|
type: StatusFlatRoundButton.Type.Secondary
|
||||||
|
width: 32
|
||||||
|
height: 32
|
||||||
|
|
||||||
|
icon.width: 20
|
||||||
|
icon.height: 20
|
||||||
|
icon.name: "notification"
|
||||||
|
}
|
||||||
|
|
||||||
|
contentItem: StatusBaseText {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: "Contact request will be shown here"
|
||||||
|
font.pixelSize: 15
|
||||||
|
color: Theme.palette.directColor1
|
||||||
|
}
|
||||||
|
|
||||||
|
rightButtons: [
|
||||||
|
StatusButton {
|
||||||
|
text: "Decline all"
|
||||||
|
type: StatusBaseButton.Type.Danger
|
||||||
|
onClicked: root.close()
|
||||||
|
},
|
||||||
|
StatusButton {
|
||||||
|
text: "Accept all"
|
||||||
|
onClicked: root.close()
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,253 @@
|
||||||
|
import QtQuick 2.12
|
||||||
|
|
||||||
|
import StatusQ.Controls 0.1
|
||||||
|
import StatusQ.Popups 0.1
|
||||||
|
import StatusQ.Components 0.1
|
||||||
|
import StatusQ.Layout 0.1
|
||||||
|
import StatusQ.Core.Theme 0.1
|
||||||
|
|
||||||
|
import "data" 1.0
|
||||||
|
|
||||||
|
StatusAppTwoPanelLayout {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
leftPanel: Item {
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
StatusNavigationPanelHeadline {
|
||||||
|
id: headline
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.topMargin: 16
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
text: "Chat"
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: searchInputWrapper
|
||||||
|
anchors.top: headline.bottom
|
||||||
|
anchors.topMargin: 16
|
||||||
|
width: parent.width
|
||||||
|
height: searchInput.height
|
||||||
|
|
||||||
|
StatusBaseInput {
|
||||||
|
id: searchInput
|
||||||
|
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: actionButton.left
|
||||||
|
anchors.leftMargin: 16
|
||||||
|
anchors.rightMargin: 16
|
||||||
|
|
||||||
|
height: 36
|
||||||
|
topPadding: 8
|
||||||
|
bottomPadding: 0
|
||||||
|
placeholderText: "Search"
|
||||||
|
icon.name: "search"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusRoundButton {
|
||||||
|
id: actionButton
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: 8
|
||||||
|
width: 32
|
||||||
|
height: 32
|
||||||
|
|
||||||
|
type: StatusRoundButton.Type.Secondary
|
||||||
|
icon.name: "add"
|
||||||
|
state: "default"
|
||||||
|
|
||||||
|
onClicked: chatContextMenu.popup(actionButton.width-chatContextMenu.width, actionButton.height + 4)
|
||||||
|
states: [
|
||||||
|
State {
|
||||||
|
name: "default"
|
||||||
|
PropertyChanges {
|
||||||
|
target: actionButton
|
||||||
|
icon.rotation: 0
|
||||||
|
highlighted: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
State {
|
||||||
|
name: "pressed"
|
||||||
|
PropertyChanges {
|
||||||
|
target: actionButton
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
StatusPopupMenu {
|
||||||
|
id: chatContextMenu
|
||||||
|
|
||||||
|
onOpened: {
|
||||||
|
actionButton.state = "pressed"
|
||||||
|
}
|
||||||
|
|
||||||
|
onClosed: {
|
||||||
|
actionButton.state = "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Start new chat"
|
||||||
|
icon.name: "private-chat"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Start group chat"
|
||||||
|
icon.name: "group-chat"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Join public chat"
|
||||||
|
icon.name: "public-chat"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Communities"
|
||||||
|
icon.name: "communities"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Column {
|
||||||
|
anchors.top: searchInputWrapper.bottom
|
||||||
|
anchors.topMargin: 16
|
||||||
|
width: parent.width
|
||||||
|
spacing: 8
|
||||||
|
|
||||||
|
StatusContactRequestsIndicatorListItem {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
title: "Contact requests"
|
||||||
|
requestsCount: 3
|
||||||
|
sensor.onClicked: demoContactRequestsModal.open()
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusChatList {
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
|
||||||
|
chatListItems.model: Models.demoChatListItems
|
||||||
|
selectedChatId: "0"
|
||||||
|
onChatItemSelected: selectedChatId = id
|
||||||
|
onChatItemUnmuted: {
|
||||||
|
for (var i = 0; i < Models.demoChatListItems.count; i++) {
|
||||||
|
let item = Models.demoChatListItems.get(i);
|
||||||
|
if (item.chatId === id) {
|
||||||
|
Models.demoChatListItems.setProperty(i, "muted", false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
popupMenu: StatusPopupMenu {
|
||||||
|
|
||||||
|
property string chatId
|
||||||
|
|
||||||
|
openHandler: function (id) {
|
||||||
|
chatId = id
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "View Profile"
|
||||||
|
icon.name: "group-chat"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuSeparator {}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Mute chat"
|
||||||
|
icon.name: "notification"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Mark as Read"
|
||||||
|
icon.name: "checkmark-circle"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Clear history"
|
||||||
|
icon.name: "close-circle"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuSeparator {}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Delete chat"
|
||||||
|
icon.name: "delete"
|
||||||
|
type: StatusMenuItem.Type.Danger
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rightPanel: Item {
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
StatusChatToolBar {
|
||||||
|
anchors.top: parent.top
|
||||||
|
width: parent.width
|
||||||
|
|
||||||
|
chatInfoButton.title: "Amazing Funny Squirrel"
|
||||||
|
chatInfoButton.subTitle: "Contact"
|
||||||
|
chatInfoButton.icon.color: Theme.palette.miscColor7
|
||||||
|
chatInfoButton.type: StatusChatInfoButton.Type.OneToOneChat
|
||||||
|
chatInfoButton.pinnedMessagesCount: 1
|
||||||
|
|
||||||
|
searchButton.visible: false
|
||||||
|
membersButton.visible: false
|
||||||
|
notificationCount: 1
|
||||||
|
|
||||||
|
onNotificationButtonClicked: notificationCount = 0
|
||||||
|
|
||||||
|
popupMenu: StatusPopupMenu {
|
||||||
|
id: contextMenu
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Mute Chat"
|
||||||
|
icon.name: "notification"
|
||||||
|
}
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Mark as Read"
|
||||||
|
icon.name: "checkmark-circle"
|
||||||
|
}
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Clear History"
|
||||||
|
icon.name: "close-circle"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuSeparator {}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Leave Chat"
|
||||||
|
icon.name: "arrow-right"
|
||||||
|
icon.width: 14
|
||||||
|
iconRotation: 180
|
||||||
|
type: StatusMenuItem.Type.Danger
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,283 @@
|
||||||
|
import QtQuick 2.12
|
||||||
|
import QtQuick.Controls 2.14
|
||||||
|
|
||||||
|
import StatusQ.Core 0.1
|
||||||
|
import StatusQ.Popups 0.1
|
||||||
|
import StatusQ.Controls 0.1
|
||||||
|
import StatusQ.Components 0.1
|
||||||
|
import StatusQ.Layout 0.1
|
||||||
|
import StatusQ.Core.Theme 0.1
|
||||||
|
|
||||||
|
import "data" 1.0
|
||||||
|
|
||||||
|
StatusAppThreePanelLayout {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property string communityDetailModalTitle: ""
|
||||||
|
property string communityDetailModalImage: ""
|
||||||
|
signal chatInfoButtonClicked()
|
||||||
|
|
||||||
|
handle: Rectangle {
|
||||||
|
implicitWidth: 5
|
||||||
|
color: SplitHandle.pressed ? Theme.palette.baseColor2
|
||||||
|
: (SplitHandle.hovered ? Qt.darker(Theme.palette.baseColor5, 1.1) : "transparent")
|
||||||
|
}
|
||||||
|
leftPanel: Item {
|
||||||
|
id: leftPanel
|
||||||
|
|
||||||
|
StatusChatInfoToolBar {
|
||||||
|
id: statusChatInfoToolBar
|
||||||
|
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
|
||||||
|
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
|
||||||
|
chatInfoButton.onClicked: { chatInfoButtonClicked(); }
|
||||||
|
|
||||||
|
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"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollView {
|
||||||
|
id: scrollView
|
||||||
|
|
||||||
|
anchors.top: statusChatInfoToolBar.bottom
|
||||||
|
anchors.topMargin: 8
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
width: leftPanel.width
|
||||||
|
|
||||||
|
contentHeight: communityCategories.height
|
||||||
|
clip: true
|
||||||
|
|
||||||
|
StatusChatListAndCategories {
|
||||||
|
id: communityCategories
|
||||||
|
width: leftPanel.width
|
||||||
|
height: implicitHeight > (leftPanel.height - 64) ? implicitHeight + 8 : leftPanel.height - 64
|
||||||
|
|
||||||
|
draggableItems: true
|
||||||
|
draggableCategories: false
|
||||||
|
chatList.model: Models.demoCommunityChatListItems
|
||||||
|
categoryList.model: Models.demoCommunityCategoryItems
|
||||||
|
|
||||||
|
showCategoryActionButtons: true
|
||||||
|
onChatItemSelected: selectedChatId = id
|
||||||
|
|
||||||
|
categoryPopupMenu: StatusPopupMenu {
|
||||||
|
|
||||||
|
property string categoryId
|
||||||
|
|
||||||
|
openHandler: function (id) {
|
||||||
|
categoryId = id
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Mute Category"
|
||||||
|
icon.name: "notification"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Mark as Read"
|
||||||
|
icon.name: "checkmark-circle"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Edit Category"
|
||||||
|
icon.name: "edit"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuSeparator {}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Delete Category"
|
||||||
|
icon.name: "delete"
|
||||||
|
type: StatusMenuItem.Type.Danger
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
chatListPopupMenu: StatusPopupMenu {
|
||||||
|
|
||||||
|
property string chatId
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Mute chat"
|
||||||
|
icon.name: "notification"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Mark as Read"
|
||||||
|
icon.name: "checkmark-circle"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Clear history"
|
||||||
|
icon.name: "close-circle"
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusMenuSeparator {}
|
||||||
|
|
||||||
|
StatusMenuItem {
|
||||||
|
text: "Delete chat"
|
||||||
|
icon.name: "delete"
|
||||||
|
type: StatusMenuItem.Type.Danger
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
centerPanel: Item {
|
||||||
|
StatusChatToolBar {
|
||||||
|
id: statusChatToolBar
|
||||||
|
anchors.top: parent.top
|
||||||
|
width: parent.width
|
||||||
|
|
||||||
|
chatInfoButton.title: "general"
|
||||||
|
chatInfoButton.subTitle: "Community Chat"
|
||||||
|
chatInfoButton.icon.color: Theme.palette.miscColor6
|
||||||
|
chatInfoButton.type: StatusChatInfoButton.Type.CommunityChat
|
||||||
|
onSearchButtonClicked: {
|
||||||
|
searchButton.highlighted = !searchButton.highlighted;
|
||||||
|
searchPopup.setSearchSelection(communityDetailModalTitle,
|
||||||
|
"",
|
||||||
|
communityDetailModalImage);
|
||||||
|
searchPopup.open();
|
||||||
|
}
|
||||||
|
membersButton.onClicked: membersButton.highlighted = !membersButton.highlighted
|
||||||
|
onMembersButtonClicked: {
|
||||||
|
root.showRightPanel = !root.showRightPanel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusSearchPopup {
|
||||||
|
id: searchPopup
|
||||||
|
searchOptionsPopupMenu: searchPopupMenu
|
||||||
|
onAboutToHide: {
|
||||||
|
if (searchPopupMenu.visible) {
|
||||||
|
searchPopupMenu.close();
|
||||||
|
}
|
||||||
|
//clear menu
|
||||||
|
for (var i = 2; i < searchPopupMenu.count; i++) {
|
||||||
|
searchPopupMenu.removeItem(searchPopupMenu.takeItem(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onClosed: {
|
||||||
|
statusChatToolBar.searchButton.highlighted = false
|
||||||
|
searchPopupMenu.dismiss();
|
||||||
|
}
|
||||||
|
onSearchTextChanged: {
|
||||||
|
if (searchPopup.searchText !== "") {
|
||||||
|
searchPopup.loading = true;
|
||||||
|
searchModelSimTimer.start();
|
||||||
|
} else {
|
||||||
|
searchPopup.searchResults = [];
|
||||||
|
searchModelSimTimer.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Timer {
|
||||||
|
id: searchModelSimTimer
|
||||||
|
interval: 500
|
||||||
|
onTriggered: {
|
||||||
|
if (searchPopup.searchText.startsWith("c")) {
|
||||||
|
searchPopup.searchResults = Models.searchResultsA;
|
||||||
|
} else {
|
||||||
|
searchPopup.searchResults = Models.searchResultsB;
|
||||||
|
}
|
||||||
|
searchPopup.loading = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
StatusSearchLocationMenu {
|
||||||
|
id: searchPopupMenu
|
||||||
|
searchPopup: searchPopup
|
||||||
|
locationModel: Models.optionsModel
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rightPanel: Item {
|
||||||
|
id: rightPanel
|
||||||
|
StatusBaseText {
|
||||||
|
id: titleText
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.topMargin:16
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 16
|
||||||
|
opacity: (rightPanel.width > 50) ? 1.0 : 0.0
|
||||||
|
visible: (opacity > 0.1)
|
||||||
|
font.pixelSize: 15
|
||||||
|
text: qsTr("Members")
|
||||||
|
}
|
||||||
|
|
||||||
|
ListView {
|
||||||
|
anchors.top: titleText.bottom
|
||||||
|
anchors.topMargin: 16
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 8
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: 8
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.bottomMargin: 16
|
||||||
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
|
model: ["John", "Nick", "Maria", "Mike"]
|
||||||
|
delegate: Row {
|
||||||
|
width: parent.width
|
||||||
|
height: 30
|
||||||
|
spacing: 8
|
||||||
|
Rectangle {
|
||||||
|
width: 24
|
||||||
|
height: 24
|
||||||
|
radius: width/2
|
||||||
|
color: Qt.rgba(Math.random(), Math.random(), Math.random(), 255)
|
||||||
|
}
|
||||||
|
StatusBaseText {
|
||||||
|
height: parent.height
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
opacity: (rightPanel.width > 50) ? 1.0 : 0.0
|
||||||
|
visible: (opacity > 0.1)
|
||||||
|
font.pixelSize: 15
|
||||||
|
color: Theme.palette.directColor1
|
||||||
|
text: modelData
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
import QtQuick 2.12
|
||||||
|
import QtQuick.Controls 2.14
|
||||||
|
|
||||||
|
import StatusQ.Components 0.1
|
||||||
|
import StatusQ.Layout 0.1
|
||||||
|
import StatusQ.Core.Theme 0.1
|
||||||
|
|
||||||
|
import "data" 1.0
|
||||||
|
|
||||||
|
StatusAppTwoPanelLayout {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
leftPanel: Item {
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
StatusNavigationPanelHeadline {
|
||||||
|
id: profileHeadline
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.topMargin: 16
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
text: "Profile"
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollView {
|
||||||
|
anchors.top: profileHeadline.bottom
|
||||||
|
anchors.topMargin: 16
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
width: parent.width
|
||||||
|
|
||||||
|
contentHeight: profileMenuItems.height + 8
|
||||||
|
contentWidth: parent.width
|
||||||
|
clip: true
|
||||||
|
|
||||||
|
Column {
|
||||||
|
id: profileMenuItems
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
spacing: 4
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
model: Models.demoProfileGeneralMenuItems
|
||||||
|
delegate: StatusNavigationListItem {
|
||||||
|
title: model.title
|
||||||
|
icon.name: model.icon
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusListSectionHeadline { text: "Settings" }
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
model: Models.demoProfileSettingsMenuItems
|
||||||
|
delegate: StatusNavigationListItem {
|
||||||
|
title: model.title
|
||||||
|
icon.name: model.icon
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: invisibleSeparator
|
||||||
|
height: 16
|
||||||
|
width: parent.width
|
||||||
|
}
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
model: Models.demoProfileOtherMenuItems
|
||||||
|
delegate: StatusNavigationListItem {
|
||||||
|
title: model.title
|
||||||
|
icon.name: model.icon
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rightPanel: Item {
|
||||||
|
anchors.fill: parent
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,9 +1,10 @@
|
||||||
|
pragma Singleton
|
||||||
import QtQuick 2.14
|
import QtQuick 2.14
|
||||||
import StatusQ.Components 0.1
|
import StatusQ.Components 0.1
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
|
|
||||||
property var demoChatListItems: ListModel {
|
property ListModel demoChatListItems: ListModel {
|
||||||
id: demoChatListItems
|
id: demoChatListItems
|
||||||
ListElement {
|
ListElement {
|
||||||
chatId: "0"
|
chatId: "0"
|
|
@ -0,0 +1 @@
|
||||||
|
singleton Models 1.0 Models.qml
|
|
@ -101,6 +101,14 @@ StatusWindow {
|
||||||
id: libraryDocumentationCmp
|
id: libraryDocumentationCmp
|
||||||
|
|
||||||
StatusAppTwoPanelLayout {
|
StatusAppTwoPanelLayout {
|
||||||
|
id: mainPageView
|
||||||
|
|
||||||
|
function page(name) {
|
||||||
|
viewLoader.source = Qt.resolvedUrl("./pages/" + name + "Page.qml");
|
||||||
|
}
|
||||||
|
function control(name) {
|
||||||
|
viewLoader.source = Qt.resolvedUrl("./controls/" + name + ".qml");
|
||||||
|
}
|
||||||
|
|
||||||
leftPanel: Item {
|
leftPanel: Item {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
@ -120,122 +128,122 @@ StatusWindow {
|
||||||
|
|
||||||
StatusListSectionHeadline { text: "StatusQ.Core" }
|
StatusListSectionHeadline { text: "StatusQ.Core" }
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "Icons"
|
title: "Icons"
|
||||||
selected: page.sourceComponent == iconsComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = iconsComponent
|
onClicked: mainPageView.control(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
StatusListSectionHeadline { text: "StatusQ.Layout" }
|
StatusListSectionHeadline { text: "StatusQ.Layout" }
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "Layouts"
|
title: "Layouts"
|
||||||
selected: page.sourceComponent == layoutComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = layoutComponent
|
onClicked: mainPageView.control(title.substring(0, title.length - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
StatusListSectionHeadline { text: "StatusQ.Controls" }
|
StatusListSectionHeadline { text: "StatusQ.Controls" }
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "Buttons"
|
title: "Buttons"
|
||||||
selected: page.sourceComponent == buttonsComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = buttonsComponent
|
onClicked: mainPageView.control(title);
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusSwitchTab"
|
title: "StatusSwitchTab"
|
||||||
selected: page.sourceComponent == statusTabSwitchesComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = statusTabSwitchesComponent
|
onClicked: mainPageView.page("StatusTabSwitch");
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusChatCommandButton"
|
title: "StatusChatCommandButton"
|
||||||
selected: page.sourceComponent == statusChatCommandButtonPageComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = statusChatCommandButtonPageComponent
|
onClicked: mainPageView.page(title);
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "Controls"
|
title: "Controls"
|
||||||
selected: page.sourceComponent == controlsComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = controlsComponent
|
onClicked: mainPageView.control(title);
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusTabBarIconButton"
|
title: "StatusTabBarIconButton"
|
||||||
selected: page.sourceComponent == statusTabBarIconButtonPageComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = statusTabBarIconButtonPageComponent
|
onClicked: mainPageView.page(title);
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusInput"
|
title: "StatusInput"
|
||||||
selected: page.sourceComponent == statusInputPageComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = statusInputPageComponent
|
onClicked: mainPageView.page(title);
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusSelect"
|
title: "StatusSelect"
|
||||||
selected: page.sourceComponent == statusSelectPageComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = statusSelectPageComponent
|
onClicked: mainPageView.page(title);
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusAccountSelector"
|
title: "StatusAccountSelector"
|
||||||
selected: page.sourceComponent == statusAccountSelectorPageComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = statusAccountSelectorPageComponent
|
onClicked: mainPageView.page(title);
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusAssetSelector"
|
title: "StatusAssetSelector"
|
||||||
selected: page.sourceComponent == statusAssetSelectorPageComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = statusAssetSelectorPageComponent
|
onClicked: mainPageView.page(title);
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusColorSelector"
|
title: "StatusColorSelector"
|
||||||
selected: page.sourceComponent == statusColorSelectorPageComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = statusColorSelectorPageComponent
|
onClicked: mainPageView.page(title);
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusWalletColorButton"
|
title: "StatusWalletColorButton"
|
||||||
selected: page.sourceComponent == statusWalletColorButtonPageComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = statusWalletColorButtonPageComponent
|
onClicked: mainPageView.page(title);
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusWalletColorSelect"
|
title: "StatusWalletColorSelect"
|
||||||
selected: page.sourceComponent == statusWalletColorSelectPageComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = statusWalletColorSelectPageComponent
|
onClicked: mainPageView.page(title);
|
||||||
}
|
}
|
||||||
StatusListSectionHeadline { text: "StatusQ.Components" }
|
StatusListSectionHeadline { text: "StatusQ.Components" }
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusAddress"
|
title: "StatusAddress"
|
||||||
selected: page.sourceComponent == statusAddressPageComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = statusAddressPageComponent
|
onClicked: mainPageView.page(title);
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "List Items"
|
title: "List Items"
|
||||||
selected: page.sourceComponent == listItemsComponent
|
selected: viewLoader.source.toString().includes(title.replace(/\s+/g, ''))
|
||||||
onClicked: page.sourceComponent = listItemsComponent
|
onClicked: mainPageView.control(title.replace(/\s+/g, ''));
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusChatInfoToolBar"
|
title: "StatusChatInfoToolBar"
|
||||||
selected: page.sourceComponent == chatInfoToolBarComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = chatInfoToolBarComponent
|
onClicked: mainPageView.page(title);
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "Others"
|
title: "Others"
|
||||||
selected: page.sourceComponent == othersComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = othersComponent
|
onClicked: mainPageView.control(title);
|
||||||
}
|
}
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusExpandableItem"
|
title: "StatusExpandableItem"
|
||||||
selected: page.sourceComponent == settingsComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = settingsComponent
|
onClicked: mainPageView.page("StatusExpandableSettingsItem");
|
||||||
}
|
}
|
||||||
StatusListSectionHeadline { text: "StatusQ.Popup" }
|
StatusListSectionHeadline { text: "StatusQ.Popup" }
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusPopupMenu"
|
title: "StatusPopupMenu"
|
||||||
selected: page.sourceComponent == popupMenuComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = popupMenuComponent
|
onClicked: mainPageView.page(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusModal"
|
title: "StatusModal"
|
||||||
selected: page.sourceComponent == statusModalComponent
|
selected: viewLoader.source.toString().includes("Popups")
|
||||||
onClicked: page.sourceComponent = statusModalComponent
|
onClicked: mainPageView.control("Popups");
|
||||||
}
|
}
|
||||||
StatusListSectionHeadline { text: "StatusQ.Platform" }
|
StatusListSectionHeadline { text: "StatusQ.Platform" }
|
||||||
StatusNavigationListItem {
|
StatusNavigationListItem {
|
||||||
title: "StatusMacNotification"
|
title: "StatusMacNotification"
|
||||||
selected: page.sourceComponent == notificationComponent
|
selected: viewLoader.source.toString().includes(title)
|
||||||
onClicked: page.sourceComponent = notificationComponent
|
onClicked: mainPageView.page(title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -255,13 +263,12 @@ StatusWindow {
|
||||||
width: rightPanel.width
|
width: rightPanel.width
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.topMargin: 64
|
anchors.topMargin: 64
|
||||||
height: Math.max(rootWindow.height, page.height + 128)
|
height: Math.max(rootWindow.height, viewLoader.height + 128)
|
||||||
scale: rootWindow.factor
|
scale: rootWindow.factor
|
||||||
Loader {
|
Loader {
|
||||||
id: page
|
id: viewLoader
|
||||||
active: true
|
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
sourceComponent: iconsComponent
|
source: control("Icons")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -292,116 +299,6 @@ StatusWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component {
|
|
||||||
id: iconsComponent
|
|
||||||
Icons { iconColor: Theme.palette.primaryColor1 }
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: controlsComponent
|
|
||||||
Controls {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: statusInputPageComponent
|
|
||||||
StatusInputPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: statusSelectPageComponent
|
|
||||||
StatusSelectPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: statusAccountSelectorPageComponent
|
|
||||||
StatusAccountSelectorPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: statusAssetSelectorPageComponent
|
|
||||||
StatusAssetSelectorPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: statusColorSelectorPageComponent
|
|
||||||
StatusColorSelectorPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: statusTabBarIconButtonPageComponent
|
|
||||||
StatusTabBarIconButtonPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: statusWalletColorButtonPageComponent
|
|
||||||
StatusWalletColorButtonPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: statusWalletColorSelectPageComponent
|
|
||||||
StatusWalletColorSelectPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: listItemsComponent
|
|
||||||
ListItems {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: statusAddressPageComponent
|
|
||||||
StatusAddressPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: layoutComponent
|
|
||||||
Layout {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: othersComponent
|
|
||||||
Others {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: buttonsComponent
|
|
||||||
Buttons {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: statusChatCommandButtonPageComponent
|
|
||||||
StatusChatCommandButtonPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: popupMenuComponent
|
|
||||||
StatusPopupMenuPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: chatInfoToolBarComponent
|
|
||||||
StatusChatInfoToolBarPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: statusModalComponent
|
|
||||||
Popups {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: statusTabSwitchesComponent
|
|
||||||
StatusTabSwitchPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: settingsComponent
|
|
||||||
StatusExpandableSettingsItemPage{}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: notificationComponent
|
|
||||||
StatusMacNotificationPage {}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
Component {
|
||||||
id: demoAppCmp
|
id: demoAppCmp
|
||||||
|
|
||||||
|
|
|
@ -2,53 +2,62 @@ import QtQuick 2.14
|
||||||
import QtQuick.Controls 2.14
|
import QtQuick.Controls 2.14
|
||||||
import QtQuick.Layouts 1.14
|
import QtQuick.Layouts 1.14
|
||||||
|
|
||||||
|
import Sandbox 0.1
|
||||||
import StatusQ.Core 0.1
|
import StatusQ.Core 0.1
|
||||||
import StatusQ.Core.Theme 0.1
|
import StatusQ.Core.Theme 0.1
|
||||||
import StatusQ.Controls 0.1
|
import StatusQ.Controls 0.1
|
||||||
import StatusQ.Popups 0.1
|
import StatusQ.Popups 0.1
|
||||||
|
|
||||||
import Sandbox 0.1
|
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
spacing: 8
|
spacing: 8
|
||||||
|
|
||||||
StatusAccountSelector {
|
StatusAccountSelector {
|
||||||
|
id: accountSelector
|
||||||
accounts: ListModel {
|
accounts: ListModel {
|
||||||
ListElement {
|
ListElement {
|
||||||
name: "Pascal"
|
name: "Pascal"
|
||||||
address: "0x1234567891011"
|
address: "0x1234567891011"
|
||||||
iconColor: "red"
|
path: ""
|
||||||
balance: "0"
|
color: "red"
|
||||||
|
publicKey: ""
|
||||||
walletType: "generated"
|
walletType: "generated"
|
||||||
|
isChat: ""
|
||||||
|
currencyBalance: "1199.02"
|
||||||
assets: []
|
assets: []
|
||||||
fiatBalance: "1199.02"
|
|
||||||
}
|
}
|
||||||
ListElement {
|
ListElement {
|
||||||
name: "Boris"
|
name: "Boris"
|
||||||
address: "0x123"
|
address: "0x123"
|
||||||
iconColor: "red"
|
path: ""
|
||||||
balance: "0"
|
color: "red"
|
||||||
|
publicKey: ""
|
||||||
walletType: "generated"
|
walletType: "generated"
|
||||||
|
isChat: ""
|
||||||
|
currencyBalance: "0"
|
||||||
assets: []
|
assets: []
|
||||||
fiatBalance: "0"
|
|
||||||
}
|
}
|
||||||
ListElement {
|
ListElement {
|
||||||
name: "Alexandra"
|
name: "Alexandra"
|
||||||
address: "0x123"
|
address: "0x123"
|
||||||
iconColor: "yellow"
|
path: ""
|
||||||
balance: "0"
|
color: "yellow"
|
||||||
|
publicKey: ""
|
||||||
walletType: "generated"
|
walletType: "generated"
|
||||||
|
isChat: ""
|
||||||
|
currencyBalance: "0"
|
||||||
assets: []
|
assets: []
|
||||||
fiatBalance: "0"
|
|
||||||
}
|
}
|
||||||
ListElement {
|
ListElement {
|
||||||
name: "Khushboo"
|
name: "Khushboo"
|
||||||
address: "0x123"
|
address: "0x123"
|
||||||
iconColor: "blue"
|
path: ""
|
||||||
balance: "0"
|
color: "blue"
|
||||||
|
publicKey: ""
|
||||||
walletType: "generated"
|
walletType: "generated"
|
||||||
|
isChat: ""
|
||||||
|
currencyBalance: "0"
|
||||||
assets: []
|
assets: []
|
||||||
fiatBalance: "0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,18 +1,36 @@
|
||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/">
|
<qresource prefix="/">
|
||||||
<file>main.qml</file>
|
<file>main.qml</file>
|
||||||
<file>Controls.qml</file>
|
|
||||||
<file>Icons.qml</file>
|
|
||||||
<file>Others.qml</file>
|
|
||||||
<file>Buttons.qml</file>
|
|
||||||
<file>DemoApp.qml</file>
|
<file>DemoApp.qml</file>
|
||||||
<file>ListItems.qml</file>
|
|
||||||
<file>StatusChatInfoToolBarPage.qml</file>
|
|
||||||
<file>StatusPopupMenuPage.qml</file>
|
|
||||||
<file>StatusInputPage.qml</file>
|
|
||||||
<file>ThemeSwitch.qml</file>
|
<file>ThemeSwitch.qml</file>
|
||||||
<file>Layout.qml</file>
|
<file>pages/StatusAccountSelectorPage.qml</file>
|
||||||
<file>Popups.qml</file>
|
<file>pages/StatusAddressPage.qml</file>
|
||||||
<file>StatusExpandableSettingsItemPage.qml</file>
|
<file>pages/StatusAssetSelectorPage.qml</file>
|
||||||
|
<file>pages/StatusChatCommandButtonPage.qml</file>
|
||||||
|
<file>pages/StatusChatInfoToolBarPage.qml</file>
|
||||||
|
<file>pages/StatusColorSelectorPage.qml</file>
|
||||||
|
<file>pages/StatusExpandableSettingsItemPage.qml</file>
|
||||||
|
<file>pages/StatusInputPage.qml</file>
|
||||||
|
<file>pages/StatusMacNotificationPage.qml</file>
|
||||||
|
<file>pages/StatusPopupMenuPage.qml</file>
|
||||||
|
<file>pages/StatusSelectPage.qml</file>
|
||||||
|
<file>pages/StatusTabBarIconButtonPage.qml</file>
|
||||||
|
<file>pages/StatusTabSwitchPage.qml</file>
|
||||||
|
<file>pages/StatusWalletColorButtonPage.qml</file>
|
||||||
|
<file>pages/StatusWalletColorSelectPage.qml</file>
|
||||||
|
<file>controls/Buttons.qml</file>
|
||||||
|
<file>controls/Controls.qml</file>
|
||||||
|
<file>controls/Icons.qml</file>
|
||||||
|
<file>controls/Layout.qml</file>
|
||||||
|
<file>controls/ListItems.qml</file>
|
||||||
|
<file>controls/Others.qml</file>
|
||||||
|
<file>controls/Popups.qml</file>
|
||||||
|
<file>demoapp/DemoCommunityDetailModal.qml</file>
|
||||||
|
<file>demoapp/DemoContactRequestsModal.qml</file>
|
||||||
|
<file>demoapp/StatusAppChatView.qml</file>
|
||||||
|
<file>demoapp/StatusAppCommunityView.qml</file>
|
||||||
|
<file>demoapp/StatusAppProfileSettingsView.qml</file>
|
||||||
|
<file>demoapp/data/Models.qml</file>
|
||||||
|
<file>demoapp/data/qmldir</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -24,6 +24,8 @@ SOURCES += \
|
||||||
TARGET = sandboxapp
|
TARGET = sandboxapp
|
||||||
DESTDIR = $$PWD/bin
|
DESTDIR = $$PWD/bin
|
||||||
|
|
||||||
|
DESTDIR = $$PWD/bin
|
||||||
|
|
||||||
macx {
|
macx {
|
||||||
CONFIG -= app_bundle
|
CONFIG -= app_bundle
|
||||||
OBJECTIVE_SOURCES += \
|
OBJECTIVE_SOURCES += \
|
||||||
|
|
|
@ -221,7 +221,7 @@ Item {
|
||||||
|
|
||||||
StatusBaseText {
|
StatusBaseText {
|
||||||
id: accountName
|
id: accountName
|
||||||
text: name
|
text: model.name
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
font.pixelSize: 15
|
font.pixelSize: 15
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
|
|
|
@ -315,5 +315,6 @@
|
||||||
<file>src/assets/img/icons/tiny/time.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/tribute-to-talk.svg</file>
|
||||||
<file>src/assets/img/icons/tiny/warning.svg</file>
|
<file>src/assets/img/icons/tiny/warning.svg</file>
|
||||||
|
<file>src/StatusQ/Controls/StatusBanner.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
Loading…
Reference in New Issue