monero-gui/LeftPanel.qml

628 lines
23 KiB
QML
Raw Normal View History

2018-01-07 05:20:45 +00:00
// Copyright (c) 2014-2018, The Monero Project
2015-04-01 08:56:05 +00:00
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2014-07-07 17:08:30 +00:00
import QtQuick 2.2
2018-03-24 19:48:19 +00:00
import QtQuick.Layouts 1.1
import QtGraphicalEffects 1.0
import moneroComponents.Wallet 1.0
2018-03-05 16:19:45 +00:00
import moneroComponents.NetworkType 1.0
2014-07-07 17:08:30 +00:00
import "components"
Rectangle {
id: panel
property alias unlockedBalanceText: unlockedBalanceText.text
property alias unlockedBalanceVisible: unlockedBalanceText.visible
property alias unlockedBalanceLabelVisible: unlockedBalanceLabel.visible
property alias balanceLabelText: balanceLabel.text
property alias balanceText: balanceText.text
property alias networkStatus : networkStatus
2016-12-14 12:48:12 +00:00
property alias progressBar : progressBar
property alias daemonProgressBar : daemonProgressBar
property alias minutesToUnlockTxt: unlockedBalanceLabel.text
property int titleBarHeight: 50
2014-07-07 17:08:30 +00:00
signal dashboardClicked()
signal historyClicked()
signal transferClicked()
signal receiveClicked()
signal txkeyClicked()
signal sharedringdbClicked()
2014-07-07 17:08:30 +00:00
signal settingsClicked()
signal addressBookClicked()
signal miningClicked()
2016-11-08 10:06:34 +00:00
signal signClicked()
2017-08-07 08:48:13 +00:00
signal keysClicked()
2014-07-07 17:08:30 +00:00
2014-07-09 16:03:37 +00:00
function selectItem(pos) {
menuColumn.previousButton.checked = false
if(pos === "Dashboard") menuColumn.previousButton = dashboardButton
else if(pos === "History") menuColumn.previousButton = historyButton
else if(pos === "Transfer") menuColumn.previousButton = transferButton
else if(pos === "Receive") menuColumn.previousButton = receiveButton
2014-07-09 16:03:37 +00:00
else if(pos === "AddressBook") menuColumn.previousButton = addressBookButton
else if(pos === "Mining") menuColumn.previousButton = miningButton
else if(pos === "TxKey") menuColumn.previousButton = txkeyButton
else if(pos === "SharedRingDB") menuColumn.previousButton = sharedringdbButton
2016-11-08 10:06:34 +00:00
else if(pos === "Sign") menuColumn.previousButton = signButton
2014-07-09 16:03:37 +00:00
else if(pos === "Settings") menuColumn.previousButton = settingsButton
2017-01-17 21:59:40 +00:00
else if(pos === "Advanced") menuColumn.previousButton = advancedButton
2018-09-27 14:01:14 +00:00
else if(pos === "Keys") menuColumn.previousButton = keysButton
2014-07-09 16:03:37 +00:00
menuColumn.previousButton.checked = true
}
2017-11-12 16:55:13 +00:00
width: (isMobile)? appWindow.width : 300
2017-11-21 23:14:38 +00:00
color: "transparent"
2017-08-07 10:14:37 +00:00
anchors.bottom: parent.bottom
anchors.top: parent.top
2014-07-07 17:08:30 +00:00
2017-11-21 23:14:38 +00:00
Image {
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
height: panel.height
source: "images/leftPanelBg.jpg"
z: 1
}
2017-11-12 17:46:00 +00:00
// card with monero logo
2014-07-07 17:08:30 +00:00
Column {
2017-11-12 17:46:00 +00:00
visible: true
2017-11-21 23:14:38 +00:00
z: 2
2014-07-07 17:08:30 +00:00
id: column1
2017-11-12 17:46:00 +00:00
height: 200
2014-07-07 17:08:30 +00:00
anchors.left: parent.left
anchors.right: parent.right
2017-11-12 17:46:00 +00:00
anchors.top: parent.top
anchors.topMargin: (persistentSettings.customDecorations)? 50 : 0
2018-03-24 19:48:19 +00:00
RowLayout {
2017-11-12 17:46:00 +00:00
visible: true
2014-07-07 17:08:30 +00:00
Item {
2017-11-12 17:46:00 +00:00
anchors.left: parent.left
anchors.top: parent.top
anchors.topMargin: 20
2017-11-12 17:46:00 +00:00
anchors.leftMargin: 20
2014-07-07 17:08:30 +00:00
anchors.verticalCenter: parent.verticalCenter
2017-11-12 17:46:00 +00:00
height: 490 * scaleRatio
2018-01-12 00:17:20 +00:00
width: 259 * scaleRatio
2014-07-07 17:08:30 +00:00
Image {
2017-11-21 23:14:38 +00:00
width: 259; height: 170
2017-11-12 17:46:00 +00:00
fillMode: Image.PreserveAspectFit
source: "images/card-background.png"
2014-07-07 17:08:30 +00:00
}
2017-11-18 15:18:05 +00:00
Text {
id: testnetLabel
2018-03-27 18:41:15 +00:00
visible: persistentSettings.nettype != NetworkType.MAINNET
text: (persistentSettings.nettype == NetworkType.TESTNET ? qsTr("Testnet") : qsTr("Stagenet")) + translationManager.emptyString
2017-11-18 15:18:05 +00:00
anchors.top: parent.top
anchors.topMargin: 8
anchors.left: parent.left
anchors.leftMargin: 192
2017-11-18 15:18:05 +00:00
font.bold: true
font.pixelSize: 12
2018-01-12 00:17:20 +00:00
color: "#f33434"
2017-11-18 15:18:05 +00:00
}
2018-01-12 00:17:20 +00:00
Text {
id: viewOnlyLabel
visible: viewOnly
text: qsTr("View Only") + translationManager.emptyString
anchors.top: parent.top
anchors.topMargin: 8
anchors.right: testnetLabel.visible ? testnetLabel.left : parent.right
anchors.rightMargin: 8
font.pixelSize: 12
font.bold: true
color: "#ff9323"
}
}
Item {
anchors.left: parent.left
anchors.top: parent.top
anchors.topMargin: 20
anchors.leftMargin: 20
anchors.verticalCenter: parent.verticalCenter
height: 490 * scaleRatio
width: 50 * scaleRatio
2014-07-07 17:08:30 +00:00
2017-11-12 17:46:00 +00:00
Text {
visible: !isMobile
id: balanceText
anchors.left: parent.left
anchors.leftMargin: 20
anchors.top: parent.top
anchors.topMargin: 76
font.family: "Arial"
color: "#FFFFFF"
text: "N/A"
// dynamically adjust text size
font.pixelSize: {
var digits = text.split('.')[0].length
var defaultSize = 22;
if(digits > 2) {
return defaultSize - 1.1*digits
}
return defaultSize;
2016-12-31 10:22:23 +00:00
}
}
2014-07-07 17:08:30 +00:00
2017-11-12 17:46:00 +00:00
Text {
id: unlockedBalanceText
visible: true
2017-11-12 17:46:00 +00:00
anchors.left: parent.left
anchors.leftMargin: 20
anchors.top: parent.top
anchors.topMargin: 126
font.family: "Arial"
color: "#FFFFFF"
text: "N/A"
// dynamically adjust text size
font.pixelSize: {
var digits = text.split('.')[0].length
var defaultSize = 20;
if(digits > 3) {
return defaultSize - 0.6*digits
}
return defaultSize;
}
}
2017-11-18 15:18:05 +00:00
2017-11-12 17:46:00 +00:00
Label {
id: unlockedBalanceLabel
visible: true
2017-11-12 17:46:00 +00:00
text: qsTr("Unlocked balance") + translationManager.emptyString
anchors.left: parent.left
anchors.leftMargin: 20
anchors.top: parent.top
anchors.topMargin: 110
}
2014-07-07 17:08:30 +00:00
2017-11-12 17:46:00 +00:00
Label {
visible: !isMobile
id: balanceLabel
text: qsTr("Balance") + translationManager.emptyString
fontSize: 14
anchors.left: parent.left
anchors.leftMargin: 20
anchors.top: parent.top
anchors.topMargin: 60
}
Item { //separator
anchors.left: parent.left
anchors.right: parent.right
height: 1
}
/* Disable twitter/news panel
Image {
anchors.left: parent.left
anchors.verticalCenter: logo.verticalCenter
anchors.leftMargin: 19
source: appWindow.rightPanelExpanded ? "images/expandRightPanel.png" :
"images/collapseRightPanel.png"
}
2014-07-07 17:08:30 +00:00
2017-11-12 17:46:00 +00:00
MouseArea {
anchors.fill: parent
onClicked: appWindow.rightPanelExpanded = !appWindow.rightPanelExpanded
2016-12-31 10:22:23 +00:00
}
2017-11-12 17:46:00 +00:00
*/
2016-12-31 10:22:23 +00:00
}
2014-07-07 17:08:30 +00:00
}
}
Rectangle {
id: menuRect
2017-11-21 23:14:38 +00:00
z: 2
2014-07-07 17:08:30 +00:00
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
2017-04-03 16:51:55 +00:00
anchors.top: (isMobile)? parent.top : column1.bottom
anchors.topMargin: (isMobile)? 0 : 32
2017-11-21 23:14:38 +00:00
color: "transparent"
2014-07-07 17:08:30 +00:00
2017-04-03 16:51:55 +00:00
Flickable {
2017-08-07 10:14:37 +00:00
id:flicker
2018-04-13 19:43:15 +00:00
contentHeight: (progressBar.visible)? menuColumn.height + separator.height +
networkStatus.height + progressBar.height + daemonProgressBar.height :
menuColumn.height + separator.height + networkStatus.height
2017-04-03 16:51:55 +00:00
anchors.fill: parent
clip: true
2014-07-07 17:08:30 +00:00
Column {
2017-04-03 16:51:55 +00:00
2014-07-09 16:03:37 +00:00
id: menuColumn
2014-07-07 17:08:30 +00:00
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
2017-08-07 10:14:37 +00:00
clip: true
property var previousButton: transferButton
// ------------- Dashboard tab ---------------
/*
2014-07-07 17:08:30 +00:00
MenuButton {
id: dashboardButton
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Dashboard") + translationManager.emptyString
symbol: qsTr("D") + translationManager.emptyString
2014-07-07 17:08:30 +00:00
dotColor: "#FFE00A"
checked: true
onClicked: {
parent.previousButton.checked = false
parent.previousButton = dashboardButton
panel.dashboardClicked()
}
}
2014-07-07 17:08:30 +00:00
Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: dashboardButton.checked || transferButton.checked ? "#1C1C1C" : "#313131"
2014-07-07 17:08:30 +00:00
height: 1
}
*/
// top border
Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: "#313131"
height: 1
}
2014-07-07 17:08:30 +00:00
// ------------- Transfer tab ---------------
2014-07-07 17:08:30 +00:00
MenuButton {
id: transferButton
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Send") + translationManager.emptyString
symbol: qsTr("S") + translationManager.emptyString
2014-07-07 17:08:30 +00:00
dotColor: "#FF6C3C"
onClicked: {
parent.previousButton.checked = false
parent.previousButton = transferButton
panel.transferClicked()
}
}
Rectangle {
2017-01-17 21:59:40 +00:00
visible: transferButton.present
2014-07-07 17:08:30 +00:00
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: "#313131"
2014-07-07 17:08:30 +00:00
height: 1
}
// ------------- AddressBook tab ---------------
MenuButton {
id: addressBookButton
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Address book") + translationManager.emptyString
symbol: qsTr("B") + translationManager.emptyString
dotColor: "#FF4F41"
under: transferButton
onClicked: {
parent.previousButton.checked = false
parent.previousButton = addressBookButton
panel.addressBookClicked()
}
}
2016-11-23 19:00:19 +00:00
Rectangle {
2017-01-01 15:56:39 +00:00
visible: addressBookButton.present
2016-11-23 19:00:19 +00:00
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: "#313131"
2016-11-23 19:00:19 +00:00
height: 1
}
// ------------- Receive tab ---------------
MenuButton {
id: receiveButton
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Receive") + translationManager.emptyString
symbol: qsTr("R") + translationManager.emptyString
dotColor: "#AAFFBB"
onClicked: {
parent.previousButton.checked = false
parent.previousButton = receiveButton
panel.receiveClicked()
}
}
Rectangle {
2017-01-17 21:59:40 +00:00
visible: receiveButton.present
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: "#313131"
height: 1
}
// ------------- History tab ---------------
2014-07-07 17:08:30 +00:00
MenuButton {
id: historyButton
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("History") + translationManager.emptyString
symbol: qsTr("H") + translationManager.emptyString
2014-07-07 17:08:30 +00:00
dotColor: "#6B0072"
onClicked: {
parent.previousButton.checked = false
parent.previousButton = historyButton
panel.historyClicked()
}
}
2016-11-23 19:00:19 +00:00
Rectangle {
2017-01-17 21:59:40 +00:00
visible: historyButton.present
2016-11-23 19:00:19 +00:00
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: "#313131"
2016-11-23 19:00:19 +00:00
height: 1
}
2016-12-10 01:01:04 +00:00
// ------------- Advanced tab ---------------
2014-07-07 17:08:30 +00:00
MenuButton {
id: advancedButton
2014-07-07 17:08:30 +00:00
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Advanced") + translationManager.emptyString
2017-01-17 21:59:40 +00:00
symbol: qsTr("D") + translationManager.emptyString
dotColor: "#FFD781"
2014-07-07 17:08:30 +00:00
onClicked: {
parent.previousButton.checked = false
parent.previousButton = advancedButton
2014-07-07 17:08:30 +00:00
}
}
Rectangle {
2017-01-17 21:59:40 +00:00
visible: advancedButton.present
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: "#313131"
height: 1
}
// ------------- Mining tab ---------------
MenuButton {
id: miningButton
2017-08-07 10:15:12 +00:00
visible: !isAndroid && !isIOS
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Mining") + translationManager.emptyString
symbol: qsTr("M") + translationManager.emptyString
dotColor: "#FFD781"
under: advancedButton
onClicked: {
parent.previousButton.checked = false
parent.previousButton = miningButton
panel.miningClicked()
}
}
2014-07-07 17:08:30 +00:00
Rectangle {
2017-01-17 21:59:40 +00:00
visible: miningButton.present
2014-07-07 17:08:30 +00:00
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: miningButton.checked || settingsButton.checked ? "#1C1C1C" : "#313131"
2014-07-07 17:08:30 +00:00
height: 1
}
// ------------- TxKey tab ---------------
2014-07-07 17:08:30 +00:00
MenuButton {
id: txkeyButton
2014-07-07 17:08:30 +00:00
anchors.left: parent.left
anchors.right: parent.right
2017-09-12 08:42:00 +00:00
text: qsTr("Prove/check") + translationManager.emptyString
symbol: qsTr("K") + translationManager.emptyString
dotColor: "#FFD781"
under: advancedButton
2014-07-07 17:08:30 +00:00
onClicked: {
parent.previousButton.checked = false
parent.previousButton = txkeyButton
panel.txkeyClicked()
2014-07-07 17:08:30 +00:00
}
}
Rectangle {
2017-01-01 15:56:39 +00:00
visible: txkeyButton.present
2014-07-07 17:08:30 +00:00
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
2018-03-28 19:12:00 +00:00
color: "#313131"
2014-07-07 17:08:30 +00:00
height: 1
}
// ------------- Shared RingDB tab ---------------
MenuButton {
id: sharedringdbButton
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Shared RingDB") + translationManager.emptyString
symbol: qsTr("G") + translationManager.emptyString
dotColor: "#FFD781"
under: advancedButton
onClicked: {
parent.previousButton.checked = false
parent.previousButton = sharedringdbButton
panel.sharedringdbClicked()
}
}
Rectangle {
visible: sharedringdbButton.present
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: "#313131"
height: 1
}
2016-11-08 10:06:34 +00:00
// ------------- Sign/verify tab ---------------
MenuButton {
id: signButton
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Sign/verify") + translationManager.emptyString
symbol: qsTr("I") + translationManager.emptyString
dotColor: "#FFD781"
under: advancedButton
2016-11-08 10:06:34 +00:00
onClicked: {
parent.previousButton.checked = false
parent.previousButton = signButton
panel.signClicked()
}
}
2016-11-23 19:00:19 +00:00
Rectangle {
2017-01-01 15:56:39 +00:00
visible: signButton.present
2016-11-23 19:00:19 +00:00
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: "#313131"
2016-11-23 19:00:19 +00:00
height: 1
}
// ------------- Settings tab ---------------
2014-07-07 17:08:30 +00:00
MenuButton {
id: settingsButton
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Settings") + translationManager.emptyString
symbol: qsTr("E") + translationManager.emptyString
2014-07-07 17:08:30 +00:00
dotColor: "#36B25C"
onClicked: {
parent.previousButton.checked = false
parent.previousButton = settingsButton
panel.settingsClicked()
}
}
Rectangle {
visible: settingsButton.present
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: "#313131"
height: 1
}
2017-08-07 08:48:13 +00:00
// ------------- Sign/verify tab ---------------
MenuButton {
id: keysButton
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Seed & Keys") + translationManager.emptyString
symbol: qsTr("Y") + translationManager.emptyString
dotColor: "#FFD781"
under: settingsButton
onClicked: {
parent.previousButton.checked = false
parent.previousButton = keysButton
panel.keysClicked()
}
}
Rectangle {
visible: settingsButton.present
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: "#313131"
2017-08-07 08:48:13 +00:00
height: 1
}
2017-08-07 08:48:13 +00:00
} // Column
2014-07-07 17:08:30 +00:00
2017-08-07 08:48:13 +00:00
} // Flickable
2017-04-03 16:51:55 +00:00
2018-04-13 19:43:15 +00:00
Rectangle {
id: separator
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 0
anchors.rightMargin: 0
anchors.bottom: networkStatus.top;
height: 10 * scaleRatio
2018-04-29 22:52:48 +00:00
color: "transparent"
2018-04-13 19:43:15 +00:00
}
2014-07-07 17:08:30 +00:00
NetworkStatusItem {
id: networkStatus
2014-07-07 17:08:30 +00:00
anchors.left: parent.left
anchors.right: parent.right
2018-04-13 19:43:15 +00:00
anchors.leftMargin: 0
anchors.rightMargin: 0
2016-12-14 12:48:12 +00:00
anchors.bottom: (progressBar.visible)? progressBar.top : parent.bottom;
connected: Wallet.ConnectionStatus_Disconnected
2018-04-13 19:43:15 +00:00
height: 48 * scaleRatio
2014-07-07 17:08:30 +00:00
}
2016-12-14 12:48:12 +00:00
ProgressBar {
id: progressBar
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: daemonProgressBar.top
2018-04-13 19:43:15 +00:00
height: 48 * scaleRatio
syncType: qsTr("Wallet")
visible: networkStatus.connected
}
ProgressBar {
id: daemonProgressBar
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
syncType: qsTr("Daemon")
visible: networkStatus.connected
height: 62 * scaleRatio
}
2017-08-07 10:14:37 +00:00
} // menuRect
2017-04-03 16:51:55 +00:00
// indicate disabled state
// Desaturate {
// anchors.fill: parent
// source: parent
// desaturation: panel.enabled ? 0.0 : 1.0
// }
2014-07-07 17:08:30 +00:00
}