diff --git a/pages/Mining.qml b/pages/Mining.qml index 83324bdb..ca74ab1a 100644 --- a/pages/Mining.qml +++ b/pages/Mining.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2018, The Monero Project +// Copyright (c) 2014-2019, The Monero Project // // All rights reserved. // @@ -59,10 +59,8 @@ Rectangle { visible: !walletManager.isDaemonLocal(appWindow.currentDaemonAddress) } - MoneroComponents.Label { - id: soloSyncedLabel - fontSize: 18 * scaleRatio - color: "#D02020" + MoneroComponents.WarningBox { + Layout.bottomMargin: 8 * scaleRatio text: qsTr("Your daemon must be synchronized before you can start mining") + translationManager.emptyString visible: walletManager.isDaemonLocal(appWindow.currentDaemonAddress) && !appWindow.daemonSynced } @@ -84,145 +82,168 @@ Rectangle { text: qsTr("Mining may reduce the performance of other running applications and processes.") + translationManager.emptyString } - RowLayout { - id: soloMinerThreadsRow + GridLayout { + columns: 2 + Layout.fillWidth: true + columnSpacing: 20 * scaleRatio + rowSpacing: 16 * scaleRatio - MoneroComponents.Label { - id: soloMinerThreadsLabel - color: MoneroComponents.Style.defaultFontColor - text: qsTr("CPU threads") + translationManager.emptyString - fontSize: 16 * scaleRatio - Layout.preferredWidth: 120 * scaleRatio - } + ColumnLayout { + Layout.fillWidth: true + Layout.alignment : Qt.AlignTop | Qt.AlignLeft - MoneroComponents.LineEdit { - id: soloMinerThreadsLine - Layout.preferredWidth: 200 * scaleRatio - text: "1" - validator: IntValidator { bottom: 1; top: idealThreadCount } - } - } - - Text { - id: numAvailableThreadsText - text: qsTr("Max # of CPU threads available for mining: ") + idealThreadCount + translationManager.emptyString - wrapMode: Text.WordWrap - Layout.leftMargin: 125 * scaleRatio - font.family: MoneroComponents.Style.fontRegular.name - font.pixelSize: 14 * scaleRatio - color: MoneroComponents.Style.defaultFontColor - } - - RowLayout { - Layout.leftMargin: 125 * scaleRatio - - MoneroComponents.StandardButton { - id: autoRecommendedThreadsButton - small: true - text: qsTr("Use recommended # of threads") + translationManager.emptyString - enabled: startSoloMinerButton.enabled - onClicked: { - soloMinerThreadsLine.text = Math.floor(idealThreadCount / 2); - appWindow.showStatusMessage(qsTr("Set to use recommended # of threads"),3) + MoneroComponents.Label { + id: soloMinerThreadsLabel + color: MoneroComponents.Style.defaultFontColor + text: qsTr("CPU threads") + translationManager.emptyString + fontSize: 16 * scaleRatio + wrapMode: Text.WordWrap } } - MoneroComponents.StandardButton { - id: autoSetMaxThreadsButton - small: true - text: qsTr("Use all threads") + translationManager.emptyString - enabled: startSoloMinerButton.enabled - onClicked: { - soloMinerThreadsLine.text = idealThreadCount - appWindow.showStatusMessage(qsTr("Set to use all threads"),3) + ColumnLayout { + Layout.fillWidth: true + spacing: 16 * scaleRatio + + MoneroComponents.LineEdit { + id: soloMinerThreadsLine + Layout.minimumWidth: 200 * scaleRatio + text: "1" + validator: IntValidator { bottom: 1; top: idealThreadCount } } - } - } - RowLayout { - Layout.leftMargin: 125 * scaleRatio - MoneroComponents.CheckBox { - id: backgroundMining - enabled: startSoloMinerButton.enabled - checked: persistentSettings.allow_background_mining - onClicked: {persistentSettings.allow_background_mining = checked} - text: qsTr("Background mining (experimental)") + translationManager.emptyString - } - } + Text { + id: numAvailableThreadsText + text: qsTr("Max # of CPU threads available for mining: ") + idealThreadCount + translationManager.emptyString + wrapMode: Text.WordWrap + font.family: MoneroComponents.Style.fontRegular.name + font.pixelSize: 14 * scaleRatio + color: MoneroComponents.Style.defaultFontColor + } - RowLayout { - // Disable this option until stable - visible: false - Layout.leftMargin: 125 * scaleRatio - MoneroComponents.CheckBox { - id: ignoreBattery - enabled: startSoloMinerButton.enabled - checked: !persistentSettings.miningIgnoreBattery - onClicked: {persistentSettings.miningIgnoreBattery = !checked} - text: qsTr("Enable mining when running on battery") + translationManager.emptyString - } - } + RowLayout { + MoneroComponents.StandardButton { + id: autoRecommendedThreadsButton + small: true + text: qsTr("Use recommended # of threads") + translationManager.emptyString + enabled: startSoloMinerButton.enabled + onClicked: { + soloMinerThreadsLine.text = Math.floor(idealThreadCount / 2); + appWindow.showStatusMessage(qsTr("Set to use recommended # of threads"),3) + } + } - RowLayout { - MoneroComponents.Label { - id: manageSoloMinerLabel - color: MoneroComponents.Style.defaultFontColor - text: qsTr("Manage miner") + translationManager.emptyString - fontSize: 16 * scaleRatio - Layout.preferredWidth: 120 * scaleRatio - } + MoneroComponents.StandardButton { + id: autoSetMaxThreadsButton + small: true + text: qsTr("Use all threads") + translationManager.emptyString + enabled: startSoloMinerButton.enabled + onClicked: { + soloMinerThreadsLine.text = idealThreadCount + appWindow.showStatusMessage(qsTr("Set to use all threads"),3) + } + } + } - MoneroComponents.StandardButton { - visible: true - id: startSoloMinerButton - width: 110 * scaleRatio - small: true - text: qsTr("Start mining") + translationManager.emptyString - onClicked: { - var success = walletManager.startMining(appWindow.currentWallet.address(0, 0), soloMinerThreadsLine.text, persistentSettings.allow_background_mining, persistentSettings.miningIgnoreBattery) - if (success) { - update() - } else { - errorPopup.title = qsTr("Error starting mining") + translationManager.emptyString; - errorPopup.text = qsTr("Couldn't start mining.
") - if (!walletManager.isDaemonLocal(appWindow.currentDaemonAddress)) - errorPopup.text += qsTr("Mining is only available on local daemons. Run a local daemon to be able to mine.
") - errorPopup.icon = StandardIcon.Critical - errorPopup.open() + RowLayout { + MoneroComponents.CheckBox { + id: backgroundMining + enabled: startSoloMinerButton.enabled + checked: persistentSettings.allow_background_mining + onClicked: {persistentSettings.allow_background_mining = checked} + text: qsTr("Background mining (experimental)") + translationManager.emptyString + } + } + + RowLayout { + // Disable this option until stable + visible: false + MoneroComponents.CheckBox { + id: ignoreBattery + enabled: startSoloMinerButton.enabled + checked: !persistentSettings.miningIgnoreBattery + onClicked: {persistentSettings.miningIgnoreBattery = !checked} + text: qsTr("Enable mining when running on battery") + translationManager.emptyString } } } - MoneroComponents.StandardButton { - visible: true - id: stopSoloMinerButton - width: 110 * scaleRatio - small: true - text: qsTr("Stop mining") + translationManager.emptyString - onClicked: { - walletManager.stopMining() - update() + ColumnLayout { + Layout.alignment : Qt.AlignTop | Qt.AlignLeft + + MoneroComponents.Label { + id: manageSoloMinerLabel + color: MoneroComponents.Style.defaultFontColor + text: qsTr("Manage miner") + translationManager.emptyString + fontSize: 16 * scaleRatio + wrapMode: Text.Wrap + Layout.preferredWidth: manageSoloMinerLabel.textWidth } } - } - RowLayout { - id: statusRow + ColumnLayout { + Layout.fillWidth: true + spacing: 16 * scaleRatio - MoneroComponents.Label { - id: statusLabel - color: MoneroComponents.Style.defaultFontColor - text: qsTr("Status") + translationManager.emptyString - fontSize: 16 * scaleRatio - Layout.preferredWidth: 120 * scaleRatio + RowLayout { + MoneroComponents.StandardButton { + visible: true + id: startSoloMinerButton + small: true + text: qsTr("Start mining") + translationManager.emptyString + onClicked: { + var success = walletManager.startMining(appWindow.currentWallet.address(0, 0), soloMinerThreadsLine.text, persistentSettings.allow_background_mining, persistentSettings.miningIgnoreBattery) + if (success) { + update() + } else { + errorPopup.title = qsTr("Error starting mining") + translationManager.emptyString; + errorPopup.text = qsTr("Couldn't start mining.
") + if (!walletManager.isDaemonLocal(appWindow.currentDaemonAddress)) + errorPopup.text += qsTr("Mining is only available on local daemons. Run a local daemon to be able to mine.
") + errorPopup.icon = StandardIcon.Critical + errorPopup.open() + } + } + } + + MoneroComponents.StandardButton { + visible: true + id: stopSoloMinerButton + small: true + text: qsTr("Stop mining") + translationManager.emptyString + onClicked: { + walletManager.stopMining() + update() + } + } + } } - MoneroComponents.LineEdit { - id: statusText - Layout.preferredWidth: 200 * scaleRatio - text: qsTr("Not mining") + translationManager.emptyString - borderDisabled: true - readOnly: true + ColumnLayout { + Layout.fillWidth: true + Layout.alignment : Qt.AlignTop | Qt.AlignLeft + + MoneroComponents.Label { + id: statusLabel + color: MoneroComponents.Style.defaultFontColor + text: qsTr("Status") + translationManager.emptyString + fontSize: 16 * scaleRatio + } + } + + ColumnLayout { + Layout.fillWidth: true + spacing: 16 * scaleRatio + + MoneroComponents.LineEditMulti { + id: statusText + Layout.minimumWidth: 300 * scaleRatio + text: qsTr("Not mining") + translationManager.emptyString + borderDisabled: true + readOnly: true + wrapMode: Text.Wrap + inputPaddingLeft: 0 + } } } } @@ -237,10 +258,11 @@ Rectangle { } function update() { + var daemonReady = walletManager.isDaemonLocal(appWindow.currentDaemonAddress) && appWindow.daemonSynced appWindow.isMining = walletManager.isMining() updateStatusText() - startSoloMinerButton.enabled = !appWindow.isMining - stopSoloMinerButton.enabled = !startSoloMinerButton.enabled + startSoloMinerButton.enabled = !appWindow.isMining && daemonReady + stopSoloMinerButton.enabled = !startSoloMinerButton.enabled && daemonReady } MoneroComponents.StandardDialog {