GODT-22: Facelift

- GODT-1199: Add menu to status window
- GODT-22: use ColorImage instead of IconLabel
- GODT-22: remove banners from MainWindow
- GODT-1199: Fix separator width
- GODT-1199: Fix StatusWindow button position
- GODT-1198: Open main window on startup if no users
- GODT-1199: Fix avatar text color
- GODT-1198: refactor main window layout
- GODT-22: add missing components to qmldir
- GODT-22: refactor components having Layout as root item
- GODT-22: add more user controls
- GODT-1199: Add status window resize and maximum height
- GODT-22: WIP: notification arch
- GODT-22: Notifications WIP
- GODT-22: Fix notification filter, topmost notification
- GODT-1199: Add notifications to status window
- GODT-22: Add strict typization to colorScheme variable
- GODT-1198: WIP Notifications, dialogs and banners
- GODT-22: Add backend notifications (Banners & Dialogs)

D
This commit is contained in:
Alexander Bilyak
2021-08-04 14:00:31 +02:00
committed by Jakub
parent 6bd0739013
commit 0a9748a15d
51 changed files with 3277 additions and 1056 deletions

View File

@ -22,10 +22,11 @@ import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
import Proton 4.0
import Notifications 1.0
import "tests"
Window {
ApplicationWindow {
id: root
title: "ProtonMail Bridge"
@ -35,33 +36,104 @@ Window {
minimumHeight: contentLayout.implicitHeight
minimumWidth: contentLayout.implicitWidth
property var colorScheme: ProtonStyle.currentStyle
colorScheme: ProtonStyle.currentStyle
property var backend
property var users
property bool isNoUser: backend.users.count === 0
property bool isNoLoggedUser: backend.users.count === 1 && backend.users.get(0).loggedIn === false
property bool showSetup: true
property var notifications
signal login(string username, string password)
signal login2FA(string username, string code)
signal login2Password(string username, string password)
signal loginAbort(string username)
// show Setup Guide on every new user
Connections {
target: root.backend.users
onRowsInserted: {
// considerring that users are added one-by-one
var user = root.backend.users.get(first)
if (!user.loggedIn) {
return
}
if (user.setupGuideSeen) {
return
}
root.showSetup(user)
}
onRowsAboutToBeRemoved: {
for (var i = first; i <= last; i++ ) {
var user = root.backend.users.get(i)
if (setupGuide.user === user) {
setupGuide.user = null
contentLayout._showSetup = false
return
}
}
}
}
function showSetup(user) {
setupGuide.user = user
if (setupGuide.user) {
contentLayout._showSetup = true
} else {
contentLayout._showSetup = false
}
}
StackLayout {
id: contentLayout
anchors.fill: parent
currentIndex: (root.isNoUser || root.isNoLoggedUser) ? 0 : ( root.showSetup ? 1 : 2)
property bool _showSetup: false
currentIndex: {
// show welcome when there are no users or only one non-logged-in user is present
if (backend.users.count === 0) {
return 1
}
WelcomeWindow {
if (backend.users.count === 1 && backend.users.get(0).loggedIn === false) {
return 1
}
if (contentLayout._showSetup) {
return 2
}
return 0
}
ContentWrapper {
colorScheme: root.colorScheme
backend: root.backend
Layout.fillHeight: true
Layout.fillWidth: true
onLogin: {
root.login(username, password)
}
onLogin2FA: {
root.login2FA(username, code)
}
onLogin2Password: {
root.login2Password(username, password)
}
onLoginAbort: {
root.loginAbort(username)
}
}
WelcomeGuide {
colorScheme: root.colorScheme
backend: root.backend
window: root
enabled: !banners.blocking
Layout.fillHeight: true
Layout.fillWidth: true
@ -81,38 +153,21 @@ Window {
}
SetupGuide {
id: setupGuide
colorScheme: root.colorScheme
window: root
enabled: !banners.blocking
backend: root.backend
Layout.fillHeight: true
Layout.fillWidth: true
}
ContentWrapper {
colorScheme: root.colorScheme
window: root
enabled: !banners.blocking
Layout.fillHeight: true
Layout.fillWidth: true
onDismissed: {
root.showSetup(null)
}
}
}
Banners {
id: banners
anchors.fill: parent
window: root
onTop: contentLayout.currentIndex == 0
}
function notifyOnlyPaidUsers() { banners.notifyOnlyPaidUsers() }
function notifyConnectionLostWhileLogin() { banners.notifyConnectionLostWhileLogin() }
function notifyUpdateManually() { banners.notifyUpdateManually() }
function notifyUserAdded() { banners.notifyUserAdded() }
function showSetupGuide(user) {
setupGuide.user = user
root.showSetup = true
NotificationPopups {
colorScheme: root.colorScheme
notifications: root.notifications
}
}