2020-06-17 19:18:31 +00:00
|
|
|
import QtQuick 2.13
|
|
|
|
import QtQuick.Controls 2.13
|
|
|
|
import QtQuick.Layouts 1.13
|
2021-02-18 19:14:31 +00:00
|
|
|
import QtMultimedia 5.13
|
2020-05-11 21:24:08 +00:00
|
|
|
import "../imports"
|
2021-02-18 19:14:31 +00:00
|
|
|
import "../sounds"
|
2020-06-23 18:59:16 +00:00
|
|
|
import "../shared"
|
2020-10-27 12:46:19 +00:00
|
|
|
import "../shared/status"
|
2020-05-13 17:27:06 +00:00
|
|
|
import "./AppLayouts"
|
2020-12-17 10:40:37 +00:00
|
|
|
import "./AppLayouts/Timeline"
|
2020-10-15 18:57:43 +00:00
|
|
|
import "./AppLayouts/Wallet"
|
2020-12-29 20:33:54 +00:00
|
|
|
import "./AppLayouts/Chat/components"
|
2021-02-18 19:14:31 +00:00
|
|
|
import Qt.labs.settings 1.0
|
2020-05-11 21:24:08 +00:00
|
|
|
|
|
|
|
RowLayout {
|
2020-09-15 19:47:13 +00:00
|
|
|
id: appMain
|
2020-10-08 18:08:50 +00:00
|
|
|
spacing: 0
|
2020-05-13 14:40:51 +00:00
|
|
|
Layout.fillHeight: true
|
|
|
|
Layout.fillWidth: true
|
2020-05-11 21:24:08 +00:00
|
|
|
|
2021-02-18 19:14:31 +00:00
|
|
|
property alias appSettings: appSettings
|
|
|
|
|
|
|
|
|
2020-12-21 12:08:44 +00:00
|
|
|
function getProfileImage(pubkey, isCurrentUser, useLargeImage) {
|
|
|
|
if (isCurrentUser || (isCurrentUser === undefined && pubkey === profileModel.profile.pubKey)) {
|
|
|
|
return profileModel.profile.thumbnailImage
|
|
|
|
}
|
|
|
|
|
|
|
|
const index = profileModel.contacts.list.getContactIndexByPubkey(pubkey)
|
|
|
|
if (index === -1) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2021-01-15 15:37:23 +00:00
|
|
|
if (appSettings.onlyShowContactsProfilePics) {
|
|
|
|
const isContact = profileModel.contacts.list.rowData(index, "isContact")
|
|
|
|
if (isContact === "false") {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-12-21 12:08:44 +00:00
|
|
|
return profileModel.contacts.list.rowData(index, useLargeImage ? "largeImage" : "thumbnailImage")
|
|
|
|
}
|
|
|
|
|
2020-12-29 20:33:54 +00:00
|
|
|
function openPopup(popupComponent, params = {}) {
|
|
|
|
const popup = popupComponent.createObject(appMain, params);
|
|
|
|
popup.open()
|
|
|
|
return popup
|
|
|
|
}
|
|
|
|
|
2021-01-14 16:03:00 +00:00
|
|
|
function getUserNickname(pubKey) {
|
|
|
|
// Get contact nickname
|
|
|
|
const contactList = profileModel.contacts.list
|
|
|
|
const contactCount = contactList.rowCount()
|
|
|
|
for (let i = 0; i < contactCount; i++) {
|
|
|
|
if (contactList.rowData(i, 'pubKey') === pubKey) {
|
|
|
|
return contactList.rowData(i, 'localNickname')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2020-12-29 20:33:54 +00:00
|
|
|
function openLink(link) {
|
|
|
|
if (appSettings.showBrowserSelector) {
|
|
|
|
appMain.openPopup(chooseBrowserPopupComponent, {link: link})
|
|
|
|
} else {
|
|
|
|
if (appSettings.openLinksInStatus) {
|
|
|
|
appMain.changeAppSection(Constants.browser)
|
|
|
|
browserLayoutContainer.item.openUrlInNewTab(link)
|
|
|
|
} else {
|
|
|
|
Qt.openUrlExternally(link)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-02-18 19:14:31 +00:00
|
|
|
signal settingsLoaded()
|
|
|
|
|
|
|
|
Settings {
|
|
|
|
id: appSettings
|
|
|
|
fileName: profileModel.profileSettingsFile
|
|
|
|
property var chatSplitView
|
|
|
|
property var walletSplitView
|
|
|
|
property var profileSplitView
|
|
|
|
property bool communitiesEnabled: false
|
|
|
|
property bool walletEnabled: false
|
|
|
|
property bool nodeManagementEnabled: false
|
|
|
|
property bool browserEnabled: false
|
|
|
|
property bool displayChatImages: false
|
|
|
|
property bool useCompactMode: false
|
|
|
|
property bool timelineEnabled: true
|
|
|
|
property string locale: "en"
|
|
|
|
property var recentEmojis: []
|
|
|
|
property real volume: 0.2
|
|
|
|
property int notificationSetting: Constants.notifyAllMessages
|
|
|
|
property bool notificationSoundsEnabled: true
|
|
|
|
property bool useOSNotifications: true
|
|
|
|
property int notificationMessagePreviewSetting: Constants.notificationPreviewNameAndMessage
|
|
|
|
property bool allowNotificationsFromNonContacts: false
|
|
|
|
property var whitelistedUnfurlingSites: ({})
|
|
|
|
property bool neverAskAboutUnfurlingAgain: false
|
|
|
|
property bool hideChannelSuggestions: false
|
|
|
|
property int fontSize: Constants.fontSizeM
|
|
|
|
property bool hideSignPhraseModal: false
|
|
|
|
property bool onlyShowContactsProfilePics: true
|
2021-02-23 20:14:29 +00:00
|
|
|
property bool quitOnClose: false
|
2021-02-18 19:14:31 +00:00
|
|
|
|
|
|
|
// Browser settings
|
|
|
|
property bool showBrowserSelector: true
|
|
|
|
property bool openLinksInStatus: true
|
|
|
|
property bool showFavoritesBar: false
|
|
|
|
property string browserHomepage: ""
|
|
|
|
property int browserSearchEngine: Constants.browserSearchEngineNone
|
|
|
|
property int browserEthereumExplorer: Constants.browserEthereumExplorerNone
|
|
|
|
property bool autoLoadImages: true
|
|
|
|
property bool javaScriptEnabled: true
|
|
|
|
property bool errorPageEnabled: true
|
|
|
|
property bool pluginsEnabled: true
|
|
|
|
property bool autoLoadIconsForPage: true
|
|
|
|
property bool touchIconsEnabled: true
|
|
|
|
property bool webRTCPublicInterfacesOnly: false
|
|
|
|
property bool devToolsEnabled: false
|
|
|
|
property bool pdfViewerEnabled: true
|
|
|
|
property bool compatibilityMode: true
|
|
|
|
}
|
|
|
|
|
|
|
|
Audio {
|
|
|
|
id: sendMessageSound
|
|
|
|
audioRole: Audio.NotificationRole
|
|
|
|
source: "../../../../sounds/send_message.wav"
|
|
|
|
volume: appSettings.volume
|
|
|
|
muted: !appSettings.notificationSoundsEnabled
|
|
|
|
}
|
|
|
|
|
|
|
|
Audio {
|
|
|
|
id: notificationSound
|
|
|
|
audioRole: Audio.NotificationRole
|
|
|
|
source: "../../../../sounds/notification.wav"
|
|
|
|
volume: appSettings.volume
|
|
|
|
muted: !appSettings.notificationSoundsEnabled
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Connections {
|
|
|
|
target: profileModel
|
|
|
|
onProfileSettingsFileChanged: {
|
|
|
|
if (appSettings.locale !== "en") {
|
|
|
|
profileModel.changeLocale(appSettings.locale)
|
|
|
|
}
|
|
|
|
const whitelist = profileModel.getLinkPreviewWhitelist()
|
|
|
|
try {
|
|
|
|
const whiteListedSites = JSON.parse(whitelist)
|
|
|
|
let settingsUpdated = false
|
|
|
|
const settings = appSettings.whitelistedUnfurlingSites
|
|
|
|
const whitelistedHostnames = []
|
|
|
|
|
|
|
|
// Add whitelisted sites in to app settings that are not already there
|
|
|
|
whiteListedSites.forEach(site => {
|
|
|
|
if (!settings.hasOwnProperty(site.address)) {
|
|
|
|
settings[site.address] = false
|
|
|
|
settingsUpdated = true
|
|
|
|
}
|
|
|
|
whitelistedHostnames.push(site.address)
|
|
|
|
})
|
|
|
|
// Remove any whitelisted sites from app settings that don't exist in the
|
|
|
|
// whitelist from status-go
|
|
|
|
Object.keys(settings).forEach(settingsHostname => {
|
|
|
|
if (!whitelistedHostnames.includes(settingsHostname)) {
|
|
|
|
delete settings[settingsHostname]
|
|
|
|
settingsUpdated = true
|
|
|
|
}
|
|
|
|
})
|
|
|
|
if (settingsUpdated) {
|
|
|
|
appSettings.whitelistedUnfurlingSites = settings
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
console.error('Could not parse the whitelist for sites', e)
|
|
|
|
}
|
|
|
|
appMain.settingsLoaded()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Connections {
|
|
|
|
target: profileModel
|
|
|
|
ignoreUnknownSignals: true
|
|
|
|
enabled: removeMnemonicAfterLogin
|
|
|
|
onInitialized: {
|
|
|
|
profileModel.mnemonic.remove()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-12-29 20:33:54 +00:00
|
|
|
Component {
|
|
|
|
id: chooseBrowserPopupComponent
|
|
|
|
ChooseBrowserPopup {
|
|
|
|
onClosed: {
|
|
|
|
destroy()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-12-21 12:08:44 +00:00
|
|
|
|
2020-09-11 17:31:13 +00:00
|
|
|
ToastMessage {
|
|
|
|
id: toastMessage
|
|
|
|
}
|
|
|
|
|
2020-10-15 18:57:43 +00:00
|
|
|
// Add SenmdModal here as it is used by the Wallet as well as the Browser
|
2020-11-03 10:29:56 +00:00
|
|
|
Loader {
|
2020-10-15 18:57:43 +00:00
|
|
|
id: sendModal
|
2020-11-03 10:29:56 +00:00
|
|
|
|
|
|
|
function open() {
|
|
|
|
this.active = true
|
|
|
|
this.item.open()
|
|
|
|
}
|
|
|
|
function closed() {
|
|
|
|
// this.sourceComponent = undefined // kill an opened instance
|
|
|
|
this.active = false
|
|
|
|
}
|
|
|
|
sourceComponent: SendModal {
|
|
|
|
onOpened: {
|
|
|
|
walletModel.getGasPricePredictions()
|
|
|
|
}
|
|
|
|
onClosed: {
|
|
|
|
sendModal.closed()
|
|
|
|
}
|
2020-10-15 18:57:43 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-11-17 03:07:01 +00:00
|
|
|
Action {
|
|
|
|
shortcut: "Ctrl+1"
|
|
|
|
onTriggered: changeAppSection(Constants.chat)
|
|
|
|
}
|
|
|
|
Action {
|
|
|
|
shortcut: "Ctrl+2"
|
|
|
|
onTriggered: changeAppSection(Constants.browser)
|
|
|
|
}
|
|
|
|
Action {
|
|
|
|
shortcut: "Ctrl+3"
|
|
|
|
onTriggered: changeAppSection(Constants.wallet)
|
|
|
|
}
|
|
|
|
Action {
|
|
|
|
shortcut: "Ctrl+4, Ctrl+,"
|
|
|
|
onTriggered: changeAppSection(Constants.profile)
|
|
|
|
}
|
2020-12-28 20:03:57 +00:00
|
|
|
Action {
|
|
|
|
shortcut: "Ctrl+K"
|
|
|
|
onTriggered: {
|
|
|
|
if (channelPicker.opened) {
|
|
|
|
channelPicker.close()
|
|
|
|
} else {
|
|
|
|
channelPicker.open()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Component {
|
|
|
|
id: statusIdenticonComponent
|
|
|
|
StatusIdenticon {}
|
|
|
|
}
|
|
|
|
|
|
|
|
StatusInputListPopup {
|
|
|
|
id: channelPicker
|
2021-02-18 16:36:05 +00:00
|
|
|
//% "Where do you want to go?"
|
|
|
|
title: qsTrId("where-do-you-want-to-go-")
|
2020-12-28 20:03:57 +00:00
|
|
|
showSearchBox: true
|
|
|
|
width: 350
|
|
|
|
x: parent.width / 2 - width / 2
|
|
|
|
y: parent.height / 2 - height / 2
|
|
|
|
modelList: chatsModel.chats
|
|
|
|
getText: function (modelData) {
|
|
|
|
return modelData.name
|
|
|
|
}
|
|
|
|
getImageComponent: function (parent, modelData) {
|
|
|
|
return statusIdenticonComponent.createObject(parent, {
|
|
|
|
width: channelPicker.imageWidth,
|
|
|
|
height: channelPicker.imageHeight,
|
|
|
|
chatName: modelData.name,
|
|
|
|
chatType: modelData.chatType,
|
|
|
|
identicon: modelData.identicon
|
|
|
|
});
|
|
|
|
}
|
|
|
|
onClicked: function (index) {
|
|
|
|
chatsModel.setActiveChannelByIndex(index)
|
|
|
|
appMain.changeAppSection(Constants.chat)
|
|
|
|
channelPicker.close()
|
|
|
|
}
|
|
|
|
}
|
2020-11-17 03:07:01 +00:00
|
|
|
|
2020-10-21 14:45:28 +00:00
|
|
|
function changeAppSection(section) {
|
|
|
|
let sectionId = -1
|
|
|
|
switch (section) {
|
|
|
|
case Constants.chat: sectionId = 0; break;
|
|
|
|
case Constants.wallet: sectionId = 1; break;
|
|
|
|
case Constants.browser: sectionId = 2; break;
|
2021-01-05 12:12:31 +00:00
|
|
|
case Constants.profile: sectionId = 4; break;
|
|
|
|
case Constants.node: sectionId = 5; break;
|
|
|
|
case Constants.ui: sectionId = 6; break;
|
2020-10-21 14:45:28 +00:00
|
|
|
}
|
|
|
|
if (sectionId === -1) {
|
|
|
|
throw new Exception ("Unknown section name. Check the Constants to know the available ones")
|
|
|
|
}
|
|
|
|
tabBar.setCurrentIndex(sectionId)
|
|
|
|
}
|
|
|
|
|
2020-05-11 21:24:08 +00:00
|
|
|
TabBar {
|
|
|
|
id: tabBar
|
2020-06-23 18:59:16 +00:00
|
|
|
width: 78
|
2020-05-13 14:40:51 +00:00
|
|
|
Layout.maximumWidth: 80
|
|
|
|
Layout.preferredWidth: 80
|
|
|
|
Layout.minimumWidth: 80
|
2020-05-11 21:24:08 +00:00
|
|
|
currentIndex: 0
|
|
|
|
topPadding: 57
|
|
|
|
rightPadding: 19
|
|
|
|
leftPadding: 19
|
|
|
|
transformOrigin: Item.Top
|
|
|
|
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
|
|
|
|
Layout.fillHeight: true
|
|
|
|
spacing: 5
|
|
|
|
background: Rectangle {
|
|
|
|
color: "#00000000"
|
2020-07-13 18:45:54 +00:00
|
|
|
border.color: Style.current.border
|
2020-05-11 21:24:08 +00:00
|
|
|
}
|
|
|
|
|
2020-10-27 12:46:19 +00:00
|
|
|
StatusIconTabButton {
|
|
|
|
id: chatBtn
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
icon.name: "message"
|
2020-10-30 19:40:53 +00:00
|
|
|
anchors.topMargin: 0
|
2020-10-27 12:46:19 +00:00
|
|
|
|
|
|
|
Rectangle {
|
2021-01-15 19:21:19 +00:00
|
|
|
id: chatBadge
|
2020-10-27 12:46:19 +00:00
|
|
|
visible: chatsModel.unreadMessagesCount > 0
|
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.left: parent.right
|
2021-01-15 21:22:18 +00:00
|
|
|
anchors.leftMargin: -17
|
2021-01-15 19:21:19 +00:00
|
|
|
anchors.topMargin: 1
|
|
|
|
radius: height / 2
|
2021-01-15 21:16:48 +00:00
|
|
|
color: Style.current.blue
|
2021-02-16 17:23:38 +00:00
|
|
|
border.color: chatBtn.hovered ? Style.current.secondaryBackground : Style.current.background
|
2021-01-15 21:16:48 +00:00
|
|
|
border.width: 2
|
2021-01-15 19:21:19 +00:00
|
|
|
width: chatsModel.unreadMessagesCount < 10 ? 22 : messageCount.width + 14
|
|
|
|
height: 22
|
2021-01-15 21:16:48 +00:00
|
|
|
Text {
|
|
|
|
id: messageCount
|
|
|
|
font.pixelSize: chatsModel.unreadMessagesCount > 99 ? 10 : 12
|
|
|
|
color: Style.current.white
|
|
|
|
anchors.centerIn: parent
|
|
|
|
text: chatsModel.unreadMessagesCount > 99 ? "99+" : chatsModel.unreadMessagesCount
|
2020-10-27 12:46:19 +00:00
|
|
|
}
|
|
|
|
}
|
2020-05-11 21:24:08 +00:00
|
|
|
}
|
|
|
|
|
2020-10-27 12:46:19 +00:00
|
|
|
StatusIconTabButton {
|
|
|
|
id: walletBtn
|
|
|
|
anchors.top: chatBtn.top
|
|
|
|
enabled: isExperimental === "1" || appSettings.walletEnabled
|
|
|
|
icon.name: "wallet"
|
2020-05-11 21:24:08 +00:00
|
|
|
}
|
|
|
|
|
2020-10-27 12:46:19 +00:00
|
|
|
StatusIconTabButton {
|
|
|
|
id: browserBtn
|
|
|
|
anchors.top: walletBtn.top
|
|
|
|
enabled: isExperimental === "1" || appSettings.browserEnabled
|
|
|
|
icon.name: "compass"
|
2020-09-22 15:12:48 +00:00
|
|
|
}
|
|
|
|
|
2020-12-17 10:40:37 +00:00
|
|
|
StatusIconTabButton {
|
|
|
|
id: timelineBtn
|
|
|
|
anchors.top: browserBtn.enabled ? browserBtn.top : walletBtn.top
|
|
|
|
enabled: isExperimental === "1" || appSettings.timelineEnabled
|
|
|
|
icon.name: "timeline"
|
|
|
|
}
|
|
|
|
|
2020-10-27 12:46:19 +00:00
|
|
|
StatusIconTabButton {
|
|
|
|
id: profileBtn
|
2020-12-17 10:40:37 +00:00
|
|
|
anchors.top: timelineBtn.enabled ? timelineBtn.top : browserBtn.top
|
2020-10-27 12:46:19 +00:00
|
|
|
icon.name: "profile"
|
2020-10-26 20:20:31 +00:00
|
|
|
|
|
|
|
Rectangle {
|
|
|
|
id: profileBadge
|
2020-12-06 22:15:51 +00:00
|
|
|
visible: !profileModel.mnemonic.isBackedUp && sLayout.children[sLayout.currentIndex] !== profileLayoutContainer
|
2020-10-28 10:15:39 +00:00
|
|
|
anchors.top: parent.top
|
2021-01-15 22:14:06 +00:00
|
|
|
anchors.right: parent.right
|
|
|
|
anchors.rightMargin: 4
|
2021-01-15 21:16:48 +00:00
|
|
|
anchors.topMargin: 5
|
2021-01-15 19:21:19 +00:00
|
|
|
radius: height / 2
|
2021-01-15 21:16:48 +00:00
|
|
|
color: Style.current.blue
|
2021-02-16 17:23:38 +00:00
|
|
|
border.color: profileBtn.hovered ? Style.current.secondaryBackground : Style.current.background
|
2021-01-15 21:16:48 +00:00
|
|
|
border.width: 2
|
|
|
|
width: 14
|
|
|
|
height: 14
|
2020-10-26 20:20:31 +00:00
|
|
|
}
|
2020-05-11 21:24:08 +00:00
|
|
|
}
|
2020-05-15 21:10:00 +00:00
|
|
|
|
2020-10-27 12:46:19 +00:00
|
|
|
StatusIconTabButton {
|
|
|
|
id: nodeBtn
|
2021-01-14 14:12:37 +00:00
|
|
|
enabled: isExperimental === "1" && appSettings.nodeManagementEnabled
|
2020-10-27 12:46:19 +00:00
|
|
|
anchors.top: profileBtn.top
|
|
|
|
icon.name: "node"
|
2020-05-15 21:10:00 +00:00
|
|
|
}
|
2020-08-25 09:00:03 +00:00
|
|
|
|
2020-10-27 12:46:19 +00:00
|
|
|
StatusIconTabButton {
|
|
|
|
id: uiComponentBtn
|
|
|
|
enabled: isExperimental === "1"
|
|
|
|
anchors.top: nodeBtn.top
|
|
|
|
icon.name: "node"
|
2020-08-25 09:00:03 +00:00
|
|
|
}
|
2020-05-11 21:24:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
StackLayout {
|
2020-10-26 20:20:31 +00:00
|
|
|
id: sLayout
|
2020-05-13 14:40:51 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
|
|
|
|
Layout.fillHeight: true
|
2020-05-11 21:24:08 +00:00
|
|
|
currentIndex: tabBar.currentIndex
|
2020-09-23 07:28:20 +00:00
|
|
|
onCurrentIndexChanged: {
|
|
|
|
if (typeof this.children[currentIndex].onActivated === "function") {
|
|
|
|
this.children[currentIndex].onActivated()
|
|
|
|
}
|
2020-10-07 19:49:26 +00:00
|
|
|
|
|
|
|
if(this.children[currentIndex] === browserLayoutContainer && browserLayoutContainer.active == false){
|
|
|
|
browserLayoutContainer.active = true;
|
|
|
|
}
|
2020-11-19 18:30:09 +00:00
|
|
|
|
2021-02-15 10:50:33 +00:00
|
|
|
timelineLayoutContainer.active = this.children[currentIndex] == timelineLayoutContainer
|
|
|
|
|
2020-11-27 16:21:15 +00:00
|
|
|
if(this.children[currentIndex] === walletLayoutContainer){
|
|
|
|
walletLayoutContainer.showSigningPhrasePopup();
|
|
|
|
}
|
2020-09-23 07:28:20 +00:00
|
|
|
}
|
2020-05-11 21:24:08 +00:00
|
|
|
|
2020-05-13 17:27:06 +00:00
|
|
|
ChatLayout {
|
|
|
|
id: chatLayoutContainer
|
2020-05-11 21:24:08 +00:00
|
|
|
Layout.fillWidth: true
|
2020-05-13 17:27:06 +00:00
|
|
|
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
|
|
|
|
Layout.fillHeight: true
|
2020-05-11 21:24:08 +00:00
|
|
|
}
|
2020-05-13 18:17:18 +00:00
|
|
|
|
|
|
|
WalletLayout {
|
|
|
|
id: walletLayoutContainer
|
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
|
|
|
|
Layout.fillHeight: true
|
|
|
|
}
|
2020-05-15 21:10:00 +00:00
|
|
|
|
2020-10-07 19:49:26 +00:00
|
|
|
Component {
|
|
|
|
id: browserLayoutComponent
|
|
|
|
BrowserLayout { }
|
|
|
|
}
|
|
|
|
|
|
|
|
Loader {
|
2020-09-22 15:12:48 +00:00
|
|
|
id: browserLayoutContainer
|
2020-10-07 19:49:26 +00:00
|
|
|
sourceComponent: browserLayoutComponent
|
|
|
|
active: false
|
2020-09-22 15:12:48 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
|
|
|
|
Layout.fillHeight: true
|
2020-10-07 19:49:26 +00:00
|
|
|
// Loaders do not have access to the context, so props need to be set
|
|
|
|
// Adding a "_" to avoid a binding loop
|
|
|
|
property var _chatsModel: chatsModel
|
|
|
|
property var _walletModel: walletModel
|
|
|
|
property var _utilsModel: utilsModel
|
|
|
|
property var _web3Provider: web3Provider
|
2020-09-22 15:12:48 +00:00
|
|
|
}
|
|
|
|
|
2021-02-15 10:50:33 +00:00
|
|
|
Loader {
|
2020-12-17 10:40:37 +00:00
|
|
|
id: timelineLayoutContainer
|
2021-02-17 13:43:48 +00:00
|
|
|
sourceComponent: Component {
|
|
|
|
TimelineLayout {}
|
|
|
|
}
|
2021-02-15 10:50:33 +00:00
|
|
|
onLoaded: timelineLayoutContainer.item.onActivated()
|
|
|
|
active: false
|
2020-12-17 10:40:37 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
|
|
|
|
Layout.fillHeight: true
|
|
|
|
}
|
|
|
|
|
2020-05-19 19:44:45 +00:00
|
|
|
ProfileLayout {
|
|
|
|
id: profileLayoutContainer
|
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
|
|
|
|
Layout.fillHeight: true
|
2020-05-15 21:10:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
NodeLayout {
|
|
|
|
id: nodeLayoutContainer
|
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
|
|
|
|
Layout.fillHeight: true
|
|
|
|
}
|
2020-08-25 09:00:03 +00:00
|
|
|
|
|
|
|
UIComponents {
|
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
|
|
|
|
Layout.fillHeight: true
|
|
|
|
}
|
2020-05-11 21:24:08 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*##^##
|
|
|
|
Designer {
|
2020-05-13 17:27:06 +00:00
|
|
|
D{i:0;formeditorZoom:0.33000001311302185;height:770;width:1232}
|
2020-05-11 21:24:08 +00:00
|
|
|
}
|
|
|
|
##^##*/
|