// Copyright (c) 2014-2018, The Monero Project // // 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. import QtQuick 2.2 import QtGraphicalEffects 1.0 import moneroComponents.Wallet 1.0 import moneroComponents.NetworkType 1.0 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 property alias progressBar : progressBar property alias daemonProgressBar : daemonProgressBar property alias minutesToUnlockTxt: unlockedBalanceLabel.text property int titleBarHeight: 50 signal dashboardClicked() signal historyClicked() signal transferClicked() signal receiveClicked() signal txkeyClicked() signal sharedringdbClicked() signal settingsClicked() signal addressBookClicked() signal miningClicked() signal signClicked() signal keysClicked() 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 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 else if(pos === "Sign") menuColumn.previousButton = signButton else if(pos === "Settings") menuColumn.previousButton = settingsButton else if(pos === "Advanced") menuColumn.previousButton = advancedButton menuColumn.previousButton.checked = true } width: (isMobile)? appWindow.width : 300 color: "transparent" anchors.bottom: parent.bottom anchors.top: parent.top Image { anchors.left: parent.left anchors.right: parent.right anchors.top: parent.top height: panel.height source: "images/leftPanelBg.jpg" z: 1 } // card with monero logo Column { visible: true z: 2 id: column1 height: 200 anchors.left: parent.left anchors.right: parent.right anchors.top: parent.top // @TODO: customDecorations? anchors.topMargin: (persistentSettings.customDecorations)? 50 : 0 Row { visible: true 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 Image { width: 259; height: 170 fillMode: Image.PreserveAspectFit source: "images/card-background.png" } Text { id: testnetLabel visible: persistentSettings.testnet text: qsTr("Testnet") + translationManager.emptyString anchors.top: parent.top anchors.topMargin: 8 anchors.left: parent.left anchors.leftMargin: 192 font.bold: true font.pixelSize: 12 color: "white" opacity: 0.6 } // @TODO: implement // Text { // id: viewOnlyLabel // visible: viewOnly // text: qsTr("View Only") + translationManager.emptyString // anchors.top: logo.bottom // anchors.topMargin: 5 // anchors.left: parent.left // anchors.leftMargin: 50 // font.bold: true // color: "blue" // } } 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 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; } } Text { id: unlockedBalanceText visible: false 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; } } Label { id: unlockedBalanceLabel visible: false text: qsTr("Unlocked balance") + translationManager.emptyString anchors.left: parent.left anchors.leftMargin: 20 anchors.top: parent.top anchors.topMargin: 110 } 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" } MouseArea { anchors.fill: parent onClicked: appWindow.rightPanelExpanded = !appWindow.rightPanelExpanded } */ } } } Rectangle { id: menuRect z: 2 anchors.left: parent.left anchors.right: parent.right anchors.bottom: parent.bottom anchors.top: (isMobile)? parent.top : column1.bottom anchors.topMargin: (isMobile)? 0 : 32 color: "transparent" Flickable { id:flicker contentHeight: 500 * scaleRatio anchors.fill: parent clip: true Column { id: menuColumn anchors.left: parent.left anchors.right: parent.right anchors.top: parent.top clip: true property var previousButton: transferButton // ------------- Dashboard tab --------------- /* MenuButton { id: dashboardButton anchors.left: parent.left anchors.right: parent.right text: qsTr("Dashboard") + translationManager.emptyString symbol: qsTr("D") + translationManager.emptyString dotColor: "#FFE00A" checked: true onClicked: { parent.previousButton.checked = false parent.previousButton = dashboardButton panel.dashboardClicked() } } Rectangle { anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: 16 color: dashboardButton.checked || transferButton.checked ? "#1C1C1C" : "#313131" height: 1 } */ // top border Rectangle { anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: 16 color: "#313131" height: 1 } // ------------- Transfer tab --------------- MenuButton { id: transferButton anchors.left: parent.left anchors.right: parent.right text: qsTr("Send") + translationManager.emptyString symbol: qsTr("S") + translationManager.emptyString dotColor: "#FF6C3C" onClicked: { parent.previousButton.checked = false parent.previousButton = transferButton panel.transferClicked() } } Rectangle { visible: transferButton.present anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: 16 color: "#313131" 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() } } Rectangle { visible: addressBookButton.present anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: 16 color: "#313131" 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 { visible: receiveButton.present anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: 16 color: "#313131" height: 1 } // ------------- History tab --------------- MenuButton { id: historyButton anchors.left: parent.left anchors.right: parent.right text: qsTr("History") + translationManager.emptyString symbol: qsTr("H") + translationManager.emptyString dotColor: "#6B0072" onClicked: { parent.previousButton.checked = false parent.previousButton = historyButton panel.historyClicked() } } Rectangle { visible: historyButton.present anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: 16 color: "#313131" height: 1 } // ------------- Advanced tab --------------- MenuButton { id: advancedButton anchors.left: parent.left anchors.right: parent.right text: qsTr("Advanced") + translationManager.emptyString symbol: qsTr("D") + translationManager.emptyString dotColor: "#FFD781" onClicked: { parent.previousButton.checked = false parent.previousButton = advancedButton } } Rectangle { visible: advancedButton.present anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: 16 color: "#313131" height: 1 } // ------------- Mining tab --------------- MenuButton { id: miningButton 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() } } Rectangle { visible: miningButton.present anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: 16 color: miningButton.checked || settingsButton.checked ? "#1C1C1C" : "#313131" height: 1 } // ------------- TxKey tab --------------- MenuButton { id: txkeyButton anchors.left: parent.left anchors.right: parent.right text: qsTr("Prove/check") + translationManager.emptyString symbol: qsTr("K") + translationManager.emptyString dotColor: "#FFD781" under: advancedButton onClicked: { parent.previousButton.checked = false parent.previousButton = txkeyButton panel.txkeyClicked() } } Rectangle { visible: txkeyButton.present anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: 16 color: "#505050" height: 1 } // ------------- Shared RingDB tab --------------- MenuButton { id: sharedringdbButton anchors.left: parent.left anchors.right: parent.right text: qsTr("Shared RingDB") + translationManager.emptyString symbol: qsTr("S") + 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 } // ------------- 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 onClicked: { parent.previousButton.checked = false parent.previousButton = signButton panel.signClicked() } } Rectangle { visible: signButton.present anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: 16 color: "#313131" height: 1 } // ------------- Settings tab --------------- MenuButton { id: settingsButton anchors.left: parent.left anchors.right: parent.right text: qsTr("Settings") + translationManager.emptyString symbol: qsTr("E") + translationManager.emptyString 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 } // ------------- 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" height: 1 } } // Column } // Flickable NetworkStatusItem { id: networkStatus anchors.left: parent.left anchors.right: parent.right anchors.bottom: (progressBar.visible)? progressBar.top : parent.bottom; connected: Wallet.ConnectionStatus_Disconnected height: 40 * scaleRatio } ProgressBar { id: progressBar anchors.left: parent.left anchors.right: parent.right anchors.bottom: daemonProgressBar.top height: 35 * 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 } } // menuRect // indicate disabled state // Desaturate { // anchors.fill: parent // source: parent // desaturation: panel.enabled ? 0.0 : 1.0 // } }