2015-04-01 08:56:05 +00:00
// Copyright (c) 2014-2015, The Monero Project
2016-10-08 23:23:57 +00:00
//
2015-04-01 08:56:05 +00:00
// All rights reserved.
2016-10-08 23:23:57 +00:00
//
2015-04-01 08:56:05 +00:00
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
2016-10-08 23:23:57 +00:00
//
2015-04-01 08:56:05 +00:00
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
2016-10-08 23:23:57 +00:00
//
2015-04-01 08:56:05 +00:00
// 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.
2016-10-08 23:23:57 +00:00
//
2015-04-01 08:56:05 +00:00
// 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.
2016-10-08 23:23:57 +00:00
//
2015-04-01 08:56:05 +00:00
// 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.0
2016-10-03 21:52:48 +00:00
import QtQuick . Controls 1.4
import QtQuick . Controls . Styles 1.4
import QtQuick . Layouts 1.1
2016-10-04 22:21:59 +00:00
import QtQuick . Dialogs 1.2
2016-12-20 21:13:42 +00:00
import "../version.js" as Version
2016-10-04 22:21:59 +00:00
2016-10-03 21:52:48 +00:00
import "../components"
import moneroComponents . Clipboard 1.0
2014-07-07 17:08:30 +00:00
Rectangle {
2016-10-04 22:21:59 +00:00
property var daemonAddress
2017-01-04 16:25:22 +00:00
property bool viewOnly: false
2017-04-03 16:51:55 +00:00
id: page
2016-10-04 22:21:59 +00:00
2016-10-03 21:52:48 +00:00
color: "#F0EEEE"
Clipboard { id: clipboard }
2016-10-08 22:54:15 +00:00
function initSettings ( ) {
2017-01-04 16:25:22 +00:00
//runs on every page load
2016-10-04 22:21:59 +00:00
// Daemon settings
daemonAddress = persistentSettings . daemon_address . split ( ":" ) ;
2016-10-08 22:54:15 +00:00
console . log ( "address: " + persistentSettings . daemon_address )
2016-10-04 22:21:59 +00:00
// try connecting to daemon
}
2016-10-03 21:52:48 +00:00
ColumnLayout {
id: mainLayout
2017-04-03 16:51:55 +00:00
anchors.margins: 17
2016-10-03 21:52:48 +00:00
anchors.left: parent . left
anchors.top: parent . top
anchors.right: parent . right
2016-10-08 22:54:15 +00:00
spacing: 10
2016-10-03 21:52:48 +00:00
2017-01-04 16:25:22 +00:00
//! Manage wallet
RowLayout {
Label {
id: manageWalletLabel
Layout.fillWidth: true
color: "#4A4949"
text: qsTr ( "Manage wallet" ) + translationManager . emptyString
fontSize: 16
Layout.topMargin: 10
}
}
2016-10-03 21:52:48 +00:00
2017-01-04 16:25:22 +00:00
Rectangle {
Layout.fillWidth: true
height: 1
color: "#DEDEDE"
2016-10-08 22:54:15 +00:00
}
2016-10-03 21:52:48 +00:00
2017-04-03 16:51:55 +00:00
GridLayout {
2017-05-03 13:32:46 +00:00
columns: ( isMobile ) ? 2 : 4
2017-01-04 16:25:22 +00:00
StandardButton {
id: closeWalletButton
text: qsTr ( "Close wallet" ) + translationManager . emptyString
shadowReleasedColor: "#FF4304"
shadowPressedColor: "#B32D00"
releasedColor: "#FF6C3C"
pressedColor: "#FF4304"
visible: true
onClicked: {
console . log ( "closing wallet button clicked" )
appWindow . showWizard ( ) ;
}
}
StandardButton {
enabled: ! viewOnly
id: createViewOnlyWalletButton
text: qsTr ( "Create view only wallet" ) + translationManager . emptyString
shadowReleasedColor: "#FF4304"
shadowPressedColor: "#B32D00"
releasedColor: "#FF6C3C"
pressedColor: "#FF4304"
visible: true
onClicked: {
wizard . openCreateViewOnlyWalletPage ( ) ;
}
}
2016-10-03 21:52:48 +00:00
StandardButton {
2016-10-08 22:54:15 +00:00
id: showSeedButton
2016-10-03 21:52:48 +00:00
shadowReleasedColor: "#FF4304"
shadowPressedColor: "#B32D00"
releasedColor: "#FF6C3C"
pressedColor: "#FF4304"
2017-05-02 15:29:35 +00:00
text: qsTr ( "Show seed & keys" ) + translationManager . emptyString
2016-10-03 21:52:48 +00:00
onClicked: {
2016-10-04 22:21:59 +00:00
settingsPasswordDialog . open ( ) ;
}
}
2017-05-03 12:37:33 +00:00
2017-05-03 13:57:41 +00:00
/ * R e s c a n c a c h e - D i s a b l e d u n t i l w e k n o w i t ' s n e e d e d
2017-05-03 12:37:33 +00:00
StandardButton {
id: rescanWalletbutton
shadowReleasedColor: "#FF4304"
shadowPressedColor: "#B32D00"
releasedColor: "#FF6C3C"
pressedColor: "#FF4304"
text: qsTr ( "Rescan wallet cache" ) + translationManager . emptyString
onClicked: {
// Show confirmation dialog
confirmationDialog . title = qsTr ( "Rescan wallet cache" ) + translationManager . emptyString ;
confirmationDialog . text = qsTr ( "Are you sure you want to rebuild the wallet cache?\n"
+ "The following information will be deleted\n"
+ "- Recipient addresses\n"
+ "- Tx keys\n"
+ "- Tx descriptions\n\n"
+ "The old wallet cache file will be renamed and can be restored later.\n"
) ;
confirmationDialog . icon = StandardIcon . Question
confirmationDialog . cancelText = qsTr ( "Cancel" )
confirmationDialog . onAcceptedCallback = function ( ) {
walletManager . closeWallet ( ) ;
walletManager . clearWalletCache ( persistentSettings . wallet_path ) ;
walletManager . openWalletAsync ( persistentSettings . wallet_path , appWindow . password ,
persistentSettings . testnet ) ;
}
confirmationDialog . onRejectedCallback = null ;
confirmationDialog . open ( )
}
}
2017-05-03 13:57:41 +00:00
* /
2017-05-03 13:32:46 +00:00
StandardButton {
id: rescanSpentButton
text: qsTr ( "Rescan wallet balance" ) + translationManager . emptyString
shadowReleasedColor: "#FF4304"
shadowPressedColor: "#B32D00"
releasedColor: "#FF6C3C"
pressedColor: "#FF4304"
onClicked: {
if ( ! currentWallet . rescanSpent ( ) ) {
console . error ( "Error: " , currentWallet . errorString ) ;
informationPopup . title = qsTr ( "Error" ) + translationManager . emptyString ;
informationPopup . text = qsTr ( "Error: " ) + currentWallet . errorString
informationPopup . icon = StandardIcon . Critical
informationPopup . onCloseCallback = null
informationPopup . open ( ) ;
} else {
informationPopup . title = qsTr ( "Information" ) + translationManager . emptyString
informationPopup . text = qsTr ( "Sucessfully rescanned spent outputs" ) + translationManager . emptyString
informationPopup . icon = StandardIcon . Information
informationPopup . onCloseCallback = null
informationPopup . open ( ) ;
}
}
}
2016-10-08 22:54:15 +00:00
}
2016-10-04 22:21:59 +00:00
2017-01-04 16:25:22 +00:00
//! Manage daemon
RowLayout {
Label {
id: manageDaemonLabel
2017-03-14 14:05:47 +00:00
Layout.fillWidth: true
2017-01-04 16:25:22 +00:00
color: "#4A4949"
text: qsTr ( "Manage daemon" ) + translationManager . emptyString
fontSize: 16
anchors.topMargin: 30
Layout.topMargin: 30
}
}
2016-10-08 22:54:15 +00:00
Rectangle {
Layout.fillWidth: true
height: 1
color: "#DEDEDE"
2016-10-03 21:52:48 +00:00
}
2017-04-03 16:51:55 +00:00
GridLayout {
2017-03-14 14:05:47 +00:00
id: daemonStatusRow
2017-04-03 16:51:55 +00:00
columns: ( isMobile ) ? 2 : 4
2017-01-04 16:25:22 +00:00
StandardButton {
visible: true
enabled: ! appWindow . daemonRunning
id: startDaemonButton
text: qsTr ( "Start daemon" ) + translationManager . emptyString
shadowReleasedColor: "#FF4304"
shadowPressedColor: "#B32D00"
releasedColor: "#FF6C3C"
pressedColor: "#FF4304"
onClicked: {
appWindow . startDaemon ( daemonFlags . text )
}
}
StandardButton {
visible: true
enabled: appWindow . daemonRunning
id: stopDaemonButton
text: qsTr ( "Stop daemon" ) + translationManager . emptyString
shadowReleasedColor: "#FF4304"
shadowPressedColor: "#B32D00"
releasedColor: "#FF6C3C"
pressedColor: "#FF4304"
onClicked: {
appWindow . stopDaemon ( )
}
}
2017-01-22 22:04:46 +00:00
StandardButton {
visible: true
id: daemonStatusButton
2017-02-23 18:47:58 +00:00
text: qsTr ( "Show status" ) + translationManager . emptyString
2017-01-22 22:04:46 +00:00
shadowReleasedColor: "#FF4304"
shadowPressedColor: "#B32D00"
releasedColor: "#FF6C3C"
pressedColor: "#FF4304"
onClicked: {
daemonManager . sendCommand ( "status" , currentWallet . testnet ) ;
daemonConsolePopup . open ( ) ;
}
}
2017-05-04 12:06:29 +00:00
}
2017-01-22 22:04:46 +00:00
2017-05-04 12:06:29 +00:00
RowLayout {
id: blockchainFolderRow
Label {
id: blockchainFolderLabel
color: "#4A4949"
text: qsTr ( "Blockchain location" ) + translationManager . emptyString
fontSize: 16
}
LineEdit {
id: blockchainFolder
Layout.preferredWidth: 200
Layout.fillWidth: true
text: persistentSettings . blockchainDataDir
placeholderText: qsTr ( "(optional)" ) + translationManager . emptyString
2017-01-22 22:04:46 +00:00
2017-05-04 12:06:29 +00:00
MouseArea {
anchors.fill: parent
onClicked: {
mouse . accepted = false
if ( persistentSettings . blockchainDataDir != "" )
blockchainFileDialog . folder = "file://" + persistentSettings . blockchainDataDir
blockchainFileDialog . open ( )
blockchainFolder . focus = true
}
}
}
2017-01-04 16:25:22 +00:00
}
2017-05-04 12:06:29 +00:00
RowLayout {
2017-01-04 16:25:22 +00:00
id: daemonFlagsRow
Label {
id: daemonFlagsLabel
color: "#4A4949"
text: qsTr ( "Daemon startup flags" ) + translationManager . emptyString
fontSize: 16
}
LineEdit {
id: daemonFlags
Layout.preferredWidth: 200
Layout.fillWidth: true
text: appWindow . persistentSettings . daemonFlags ;
placeholderText: qsTr ( "(optional)" ) + translationManager . emptyString
}
}
2016-10-04 22:21:59 +00:00
RowLayout {
2016-10-08 22:54:15 +00:00
Layout.fillWidth: true
spacing: 10
2016-10-04 22:21:59 +00:00
Label {
id: daemonAddrLabel
2016-10-08 22:54:15 +00:00
Layout.fillWidth: true
2016-10-04 22:21:59 +00:00
color: "#4A4949"
2016-10-11 22:14:43 +00:00
text: qsTr ( "Daemon address" ) + translationManager . emptyString
2016-10-08 22:54:15 +00:00
fontSize: 16
2016-10-04 22:21:59 +00:00
}
2017-04-03 16:51:55 +00:00
}
GridLayout {
id: daemonAddrRow
Layout.fillWidth: true
columnSpacing: 10
columns: ( isMobile ) ? 2 : 3
2016-10-04 22:21:59 +00:00
LineEdit {
id: daemonAddr
2017-04-03 16:51:55 +00:00
Layout.preferredWidth: 100
2016-10-08 22:54:15 +00:00
Layout.fillWidth: true
text: ( daemonAddress !== undefined ) ? daemonAddress [ 0 ] : ""
2017-03-09 00:28:24 +00:00
placeholderText: qsTr ( "Hostname / IP" ) + translationManager . emptyString
2016-10-04 22:21:59 +00:00
}
2016-10-03 21:52:48 +00:00
2016-10-08 22:54:15 +00:00
2016-10-04 22:21:59 +00:00
LineEdit {
id: daemonPort
2016-10-08 22:54:15 +00:00
Layout.preferredWidth: 100
Layout.fillWidth: true
2016-11-25 01:41:44 +00:00
text: ( daemonAddress !== undefined ) ? daemonAddress [ 1 ] : "18081"
2017-03-09 00:28:24 +00:00
placeholderText: qsTr ( "Port" ) + translationManager . emptyString
2016-10-04 22:21:59 +00:00
}
2017-02-25 21:16:58 +00:00
}
2016-10-04 22:21:59 +00:00
2017-02-25 21:16:58 +00:00
RowLayout {
2017-04-03 16:51:55 +00:00
Layout.fillWidth: true
spacing: 10
2017-02-25 21:16:58 +00:00
Label {
id: daemonLoginLabel
Layout.fillWidth: true
color: "#4A4949"
text: qsTr ( "Login (optional)" ) + translationManager . emptyString
fontSize: 16
}
2017-04-03 16:51:55 +00:00
}
RowLayout {
2017-02-25 21:16:58 +00:00
LineEdit {
id: daemonUsername
Layout.preferredWidth: 100
Layout.fillWidth: true
text: persistentSettings . daemonUsername
2017-03-09 00:28:24 +00:00
placeholderText: qsTr ( "Username" ) + translationManager . emptyString
2017-02-25 21:16:58 +00:00
}
LineEdit {
id: daemonPassword
Layout.preferredWidth: 100
Layout.fillWidth: true
text: persistentSettings . daemonPassword
2017-03-09 00:28:24 +00:00
placeholderText: qsTr ( "Password" ) + translationManager . emptyString
2017-02-25 21:16:58 +00:00
echoMode: TextInput . Password
}
2016-10-04 22:21:59 +00:00
StandardButton {
id: daemonAddrSave
2016-10-08 22:54:15 +00:00
Layout.fillWidth: false
Layout.leftMargin: 30
2017-03-23 17:30:36 +00:00
text: qsTr ( "Connect" ) + translationManager . emptyString
2016-10-04 22:21:59 +00:00
shadowReleasedColor: "#FF4304"
shadowPressedColor: "#B32D00"
releasedColor: "#FF6C3C"
pressedColor: "#FF4304"
onClicked: {
console . log ( "saving daemon adress settings" )
2017-03-03 11:40:50 +00:00
var newDaemon = daemonAddr . text . trim ( ) + ":" + daemonPort . text . trim ( )
2016-10-04 22:21:59 +00:00
if ( persistentSettings . daemon_address != newDaemon ) {
persistentSettings . daemon_address = newDaemon
}
2017-02-25 21:16:58 +00:00
// Update daemon login
persistentSettings . daemonUsername = daemonUsername . text ;
persistentSettings . daemonPassword = daemonPassword . text ;
currentWallet . setDaemonLogin ( persistentSettings . daemonUsername , persistentSettings . daemonPassword ) ;
//Reinit wallet
currentWallet . initAsync ( newDaemon ) ;
2016-10-04 22:21:59 +00:00
}
}
}
2016-10-29 14:30:41 +00:00
RowLayout {
Label {
color: "#4A4949"
2017-01-04 16:25:22 +00:00
text: qsTr ( "Layout settings" ) + translationManager . emptyString
2016-10-29 14:30:41 +00:00
fontSize: 16
2017-01-04 16:25:22 +00:00
anchors.topMargin: 30
Layout.topMargin: 30
2016-10-29 14:30:41 +00:00
}
}
2017-01-04 16:25:22 +00:00
Rectangle {
Layout.fillWidth: true
height: 1
color: "#DEDEDE"
2016-12-21 13:30:15 +00:00
}
2016-12-09 21:35:08 +00:00
RowLayout {
CheckBox {
id: customDecorationsCheckBox
checked: persistentSettings . customDecorations
2016-12-15 00:59:10 +00:00
onClicked: appWindow . setCustomWindowDecorations ( checked )
2016-12-09 21:35:08 +00:00
text: qsTr ( "Custom decorations" ) + translationManager . emptyString
checkedIcon: "../images/checkedVioletIcon.png"
uncheckedIcon: "../images/uncheckedIcon.png"
}
}
2016-12-31 10:56:08 +00:00
// Log level
2017-04-03 16:51:55 +00:00
2016-12-31 10:56:08 +00:00
RowLayout {
Label {
color: "#4A4949"
text: qsTr ( "Log level" ) + translationManager . emptyString
fontSize: 16
2017-04-03 16:51:55 +00:00
anchors.topMargin: 30
Layout.topMargin: 30
2016-12-31 10:56:08 +00:00
}
2017-04-03 16:51:55 +00:00
}
Rectangle {
Layout.fillWidth: true
height: 1
color: "#DEDEDE"
}
ColumnLayout {
2016-12-31 10:56:08 +00:00
ComboBox {
id: logLevel
2017-01-16 21:56:37 +00:00
model: [ 0 , 1 , 2 , 3 , 4 , "custom" ]
2016-12-31 10:56:08 +00:00
currentIndex : appWindow . persistentSettings . logLevel ;
onCurrentIndexChanged: {
2017-01-16 21:56:37 +00:00
if ( currentIndex == 5 ) {
console . log ( "log categories changed: " , logCategories . text ) ;
walletManager . setLogCategories ( logCategories . text ) ;
}
else {
console . log ( "log level changed: " , currentIndex ) ;
walletManager . setLogLevel ( currentIndex ) ;
}
2016-12-31 10:56:08 +00:00
appWindow . persistentSettings . logLevel = currentIndex ;
}
}
2017-01-16 21:56:37 +00:00
LineEdit {
id: logCategories
Layout.preferredWidth: 200
Layout.fillWidth: true
2017-02-05 12:38:43 +00:00
text: appWindow . persistentSettings . logCategories
2017-01-16 21:56:37 +00:00
placeholderText: qsTr ( "(e.g. *:WARNING,net.p2p:DEBUG)" ) + translationManager . emptyString
enabled: logLevel . currentIndex == 5
onEditingFinished: {
if ( enabled ) {
console . log ( "log categories changed: " , text ) ;
walletManager . setLogCategories ( text ) ;
2017-02-05 12:38:43 +00:00
appWindow . persistentSettings . logCategories = text ;
2017-01-16 21:56:37 +00:00
}
}
}
2016-12-31 10:56:08 +00:00
}
2017-01-04 16:25:22 +00:00
// Version
RowLayout {
Label {
color: "#4A4949"
2017-08-24 09:31:56 +00:00
text: qsTr ( "Debug info" ) + translationManager . emptyString
2017-01-04 16:25:22 +00:00
fontSize: 16
anchors.topMargin: 30
Layout.topMargin: 30
}
}
Rectangle {
Layout.fillWidth: true
height: 1
color: "#DEDEDE"
}
2017-08-24 09:31:56 +00:00
TextBlock {
2016-12-20 21:13:42 +00:00
Layout.topMargin: 8
2017-08-24 09:31:56 +00:00
Layout.fillWidth: true
2016-12-21 10:47:16 +00:00
text: qsTr ( "GUI version: " ) + Version . GUI_VERSION + translationManager . emptyString
}
2017-08-24 09:31:56 +00:00
TextBlock {
2016-12-21 10:47:16 +00:00
id: guiMoneroVersion
2017-08-24 09:31:56 +00:00
Layout.fillWidth: true
2016-12-21 10:47:16 +00:00
text: qsTr ( "Embedded Monero version: " ) + Version . GUI_MONERO_VERSION + translationManager . emptyString
2017-08-24 09:31:56 +00:00
}
TextBlock {
2017-10-23 16:33:10 +00:00
id: restoreHeightText
2017-08-24 09:31:56 +00:00
Layout.fillWidth: true
2017-10-23 16:33:10 +00:00
textFormat: Text . RichText
property var txt: "<style type='text/css'>a {text-decoration: none; color: #FF6C3C}</style>" + qsTr ( "Wallet creation height: " ) + currentWallet . walletCreationHeight + translationManager . emptyString
property var linkTxt: qsTr ( " <a href='#'>(Click to change)</a>" ) + translationManager . emptyString
text: ( typeof currentWallet == "undefined" ) ? "" : txt + linkTxt
onLinkActivated: {
restoreHeightRow . visible = true ;
text = txt
}
2017-08-24 09:31:56 +00:00
}
2017-10-23 16:33:10 +00:00
RowLayout {
id: restoreHeightRow
visible: false
LineEdit {
id: restoreHeight
Layout.preferredWidth: 80
Layout.fillWidth: true
text: currentWallet . walletCreationHeight
validator: IntValidator {
bottom: 0
}
}
StandardButton {
id: restoreHeightSave
Layout.fillWidth: false
Layout.leftMargin: 30
text: qsTr ( "Save" ) + translationManager . emptyString
shadowReleasedColor: "#FF4304"
shadowPressedColor: "#B32D00"
releasedColor: "#FF6C3C"
pressedColor: "#FF4304"
onClicked: {
currentWallet . walletCreationHeight = restoreHeight . text
// Restore height is saved in .keys file. Set password to trigger rewrite.
currentWallet . setPassword ( appWindow . password )
restoreHeightText . text = restoreHeightText . txt + restoreHeightText . linkTxt
restoreHeightRow . visible = false
// Show confirmation dialog
confirmationDialog . title = qsTr ( "Rescan wallet cache" ) + translationManager . emptyString ;
confirmationDialog . text = qsTr ( "Are you sure you want to rebuild the wallet cache?\n"
+ "The following information will be deleted\n"
+ "- Recipient addresses\n"
+ "- Tx keys\n"
+ "- Tx descriptions\n\n"
+ "The old wallet cache file will be renamed and can be restored later.\n"
) ;
confirmationDialog . icon = StandardIcon . Question
confirmationDialog . cancelText = qsTr ( "Cancel" )
confirmationDialog . onAcceptedCallback = function ( ) {
walletManager . closeWallet ( ) ;
walletManager . clearWalletCache ( persistentSettings . wallet_path ) ;
walletManager . openWalletAsync ( persistentSettings . wallet_path , appWindow . password ,
persistentSettings . testnet ) ;
}
confirmationDialog . onRejectedCallback = null ;
confirmationDialog . open ( )
}
}
}
2017-08-24 09:31:56 +00:00
TextBlock {
Layout.fillWidth: true
text: ( typeof currentWallet == "undefined" ) ? "" : qsTr ( "Wallet log path: " ) + currentWallet . walletLogPath + translationManager . emptyString
}
TextBlock {
Layout.fillWidth: true
text: ( typeof currentWallet == "undefined" ) ? "" : qsTr ( "Daemon log path: " ) + currentWallet . daemonLogPath + translationManager . emptyString
2016-12-20 21:13:42 +00:00
}
2016-10-03 21:52:48 +00:00
}
2016-10-04 22:21:59 +00:00
2016-11-07 13:59:00 +00:00
// Daemon console
2017-01-22 22:04:46 +00:00
DaemonConsole {
2016-11-07 13:59:00 +00:00
id: daemonConsolePopup
2016-11-26 18:30:53 +00:00
height: 500
2016-11-07 13:59:00 +00:00
width: 800
2017-03-09 00:28:24 +00:00
title: qsTr ( "Daemon log" ) + translationManager . emptyString
2016-11-07 13:59:00 +00:00
onAccepted: {
close ( ) ;
}
}
2016-10-04 22:21:59 +00:00
2017-01-04 16:25:22 +00:00
PasswordDialog {
id: settingsPasswordDialog
onAccepted: {
if ( appWindow . password === settingsPasswordDialog . password ) {
2017-05-23 12:03:23 +00:00
if ( currentWallet . seedLanguage == "" ) {
console . log ( "No seed language set. Using English as default" ) ;
currentWallet . setSeedLanguage ( "English" ) ;
}
2017-05-02 15:29:35 +00:00
seedPopup . title = qsTr ( "Wallet seed & keys" ) + translationManager . emptyString ;
seedPopup . text = "<b>Wallet Mnemonic seed</b> <br>" + currentWallet . seed
+ "<br><br> <b>" + qsTr ( "Secret view key" ) + ":</b> " + currentWallet . secretViewKey
+ "<br><b>" + qsTr ( "Public view key" ) + ":</b> " + currentWallet . publicViewKey
+ "<br><b>" + qsTr ( "Secret spend key" ) + ":</b> " + currentWallet . secretSpendKey
+ "<br><b>" + qsTr ( "Public spend key" ) + ":</b> " + currentWallet . publicSpendKey
seedPopup . open ( )
seedPopup . width = 600
seedPopup . height = 300
seedPopup . onCloseCallback = function ( ) {
seedPopup . text = ""
2017-02-04 19:38:59 +00:00
}
2017-01-04 16:25:22 +00:00
} else {
informationPopup . title = qsTr ( "Error" ) + translationManager . emptyString ;
informationPopup . text = qsTr ( "Wrong password" ) ;
informationPopup . open ( )
informationPopup . onCloseCallback = function ( ) {
settingsPasswordDialog . open ( )
}
}
settingsPasswordDialog . password = ""
}
onRejected: {
}
}
2016-10-04 22:21:59 +00:00
2017-05-02 15:29:35 +00:00
StandardDialog {
id: seedPopup
cancelVisible: false
okVisible: true
width: 600
height: 400
property var onCloseCallback
onAccepted: {
if ( onCloseCallback ) {
onCloseCallback ( )
}
}
}
2017-05-04 12:06:29 +00:00
// Choose blockchain folder
FileDialog {
id: blockchainFileDialog
title: qsTr ( "Please choose a folder" ) + translationManager . emptyString ;
selectFolder: true
folder: "file://" + persistentSettings . blockchainDataDir
onAccepted: {
var dataDir = walletManager . urlToLocalPath ( blockchainFileDialog . fileUrl )
var validator = daemonManager . validateDataDir ( dataDir ) ;
if ( ! validator . valid ) {
confirmationDialog . title = qsTr ( "Warning" ) + translationManager . emptyString ;
confirmationDialog . text = "" ;
if ( validator . readOnly ) {
confirmationDialog . text += qsTr ( "Error: Filesystem is read only" ) + "\n\n"
}
if ( validator . storageAvailable < 20 ) {
confirmationDialog . text += qsTr ( "Warning: There's only %1 GB available on the device. Blockchain requires ~%2 GB of data." ) . arg ( validator . storageAvailable ) . arg ( 15 ) + "\n\n"
} else {
confirmationDialog . text += qsTr ( "Note: There's %1 GB available on the device. Blockchain requires ~%2 GB of data." ) . arg ( validator . storageAvailable ) . arg ( 15 ) + "\n\n"
}
if ( ! validator . lmdbExists ) {
confirmationDialog . text += qsTr ( "Note: lmdb folder not found. A new folder will be created." ) + "\n\n"
}
confirmationDialog . icon = StandardIcon . Question
confirmationDialog . cancelText = qsTr ( "Cancel" )
// Continue
confirmationDialog . onAcceptedCallback = function ( ) {
persistentSettings . blockchainDataDir = dataDir
}
// Cancel
confirmationDialog . onRejectedCallback = function ( ) {
} ;
confirmationDialog . open ( )
} else {
persistentSettings . blockchainDataDir = dataDir
}
delete validator ;
}
onRejected: {
console . log ( "data dir selection canceled" )
}
}
2016-11-07 13:59:00 +00:00
// fires on every page load
2016-10-04 22:21:59 +00:00
function onPageCompleted ( ) {
console . log ( "Settings page loaded" ) ;
initSettings ( ) ;
2017-01-04 16:25:22 +00:00
viewOnly = currentWallet . viewOnly ;
2017-04-03 16:51:55 +00:00
if ( typeof daemonManager != "undefined" )
appWindow . daemonRunning = daemonManager . running ( persistentSettings . testnet )
2016-10-04 22:21:59 +00:00
}
2016-11-07 13:59:00 +00:00
// fires only once
Component.onCompleted: {
2017-04-03 16:51:55 +00:00
if ( typeof daemonManager != "undefined" )
daemonManager . daemonConsoleUpdated . connect ( onDaemonConsoleUpdated )
2016-11-07 13:59:00 +00:00
}
function onDaemonConsoleUpdated ( message ) {
// Update daemon console
daemonConsolePopup . textArea . append ( message )
}
2016-10-03 21:52:48 +00:00
2016-10-08 22:54:15 +00:00
}
2016-10-08 23:23:57 +00:00