1
mirror of https://github.com/monero-project/monero-gui synced 2024-12-21 03:45:53 +01:00
monero-gui/components/DaemonConsole.qml

221 lines
7.8 KiB
QML
Raw Normal View History

2018-01-07 06:20:45 +01:00
// 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.
2019-04-11 03:17:29 +02:00
import QtQuick 2.9
2018-04-21 18:44:42 +02:00
import QtQuick.Controls 2.0
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.4
2018-04-21 18:44:42 +02:00
import QtQuick.Window 2.2
2019-04-11 03:17:29 +02:00
import "." as MoneroComponents
import "effects/" as MoneroEffects
2018-04-21 18:44:42 +02:00
import "../js/Windows.js" as Windows
import "../js/Utils.js" as Utils
Window {
id: root
modality: Qt.ApplicationModal
2018-04-21 18:44:42 +02:00
color: "black"
flags: Windows.flags
property alias text: dialogContent.text
property alias content: root.text
property alias textArea: dialogContent
property var icon
// same signals as Dialog has
signal accepted()
signal rejected()
2018-04-21 18:44:42 +02:00
onClosing: {
inactiveOverlay.visible = false;
}
function open() {
2018-04-21 18:44:42 +02:00
inactiveOverlay.visible = true;
show();
}
// TODO: implement without hardcoding sizes
width: 480
height: 280
2019-04-11 03:17:29 +02:00
// background
MoneroEffects.GradientBackground {
2018-04-21 18:44:42 +02:00
anchors.fill: parent
2019-04-11 03:17:29 +02:00
fallBackColor: MoneroComponents.Style.middlePanelBackgroundColor
initialStartColor: MoneroComponents.Style.middlePanelBackgroundGradientStart
initialStopColor: MoneroComponents.Style.middlePanelBackgroundGradientStop
blackColorStart: MoneroComponents.Style._b_middlePanelBackgroundGradientStart
blackColorStop: MoneroComponents.Style._b_middlePanelBackgroundGradientStop
whiteColorStart: MoneroComponents.Style._w_middlePanelBackgroundGradientStart
whiteColorStop: MoneroComponents.Style._w_middlePanelBackgroundGradientStop
start: Qt.point(0, 0)
end: Qt.point(height, width)
2018-04-21 18:44:42 +02:00
}
2017-05-03 11:08:59 +02:00
// Make window draggable
MouseArea {
anchors.fill: parent
property point lastMousePos: Qt.point(0, 0)
onPressed: { lastMousePos = Qt.point(mouseX, mouseY); }
onMouseXChanged: root.x += (mouseX - lastMousePos.x)
onMouseYChanged: root.y += (mouseY - lastMousePos.y)
}
ColumnLayout {
id: mainLayout
2018-04-21 18:44:42 +02:00
anchors.fill: parent
2019-04-25 21:09:23 +02:00
anchors.topMargin: 20
anchors.margins: 35
spacing: 20
Item {
2018-04-21 18:44:42 +02:00
Layout.fillHeight: true
Layout.fillWidth: true
Rectangle {
anchors.fill: parent
color: "transparent"
border.color: MoneroComponents.Style.inputBorderColorActive
border.width: 1
radius: 4
}
2018-04-21 18:44:42 +02:00
Flickable {
id: flickable
anchors.fill: parent
TextArea.flickable: TextArea {
id : dialogContent
textFormat: TextEdit.RichText
selectByMouse: true
selectByKeyboard: true
font.family: MoneroComponents.Style.defaultFontColor
2019-04-25 21:09:23 +02:00
font.pixelSize: 14
2018-04-21 18:44:42 +02:00
color: MoneroComponents.Style.defaultFontColor
2019-04-11 03:17:29 +02:00
selectionColor: MoneroComponents.Style.textSelectionColor
2018-04-21 18:44:42 +02:00
wrapMode: TextEdit.Wrap
readOnly: true
function logCommand(msg){
2019-04-11 03:17:29 +02:00
msg = log_color(msg, MoneroComponents.Style.blackTheme ? "lime" : "#009100");
2018-04-21 18:44:42 +02:00
textArea.append(msg);
}
function logMessage(msg){
msg = msg.trim();
2019-04-11 03:17:29 +02:00
var color = MoneroComponents.Style.defaultFontColor;
2018-04-21 18:44:42 +02:00
if(msg.toLowerCase().indexOf('error') >= 0){
2019-04-11 03:17:29 +02:00
color = MoneroComponents.Style.errorColor;
2018-04-21 18:44:42 +02:00
} else if (msg.toLowerCase().indexOf('warning') >= 0){
2019-04-11 03:17:29 +02:00
color = MoneroComponents.Style.warningColor;
2018-04-21 18:44:42 +02:00
}
// format multi-lines
if(msg.split("\n").length >= 2){
msg = msg.split("\n").join('<br>');
}
log(msg, color);
}
function log_color(msg, color){
return "<span style='color: " + color + ";' >" + msg + "</span>";
}
function log(msg, color){
var timestamp = Utils.formatDate(new Date(), {
weekday: undefined,
month: "numeric",
timeZoneName: undefined
});
var _timestamp = log_color("[" + timestamp + "]", "#FFFFFF");
var _msg = log_color(msg, color);
textArea.append(_timestamp + " " + _msg);
// scroll to bottom
//if(flickable.contentHeight > content.height){
// flickable.contentY = flickable.contentHeight + 20;
//}
2018-04-21 18:44:42 +02:00
}
}
ScrollBar.vertical: ScrollBar {}
}
}
RowLayout {
2018-04-21 18:44:42 +02:00
Layout.fillWidth: true
MoneroComponents.LineEdit {
id: sendCommandText
2018-04-21 18:44:42 +02:00
Layout.fillWidth: true
2017-03-11 06:09:09 +01:00
placeholderText: qsTr("command + enter (e.g help)") + translationManager.emptyString
onAccepted: {
2018-04-21 18:44:42 +02:00
if(text.length > 0) {
textArea.logCommand(">>> " + text)
daemonManager.sendCommandAsync(text.split(" "), currentWallet.nettype, function(result) {
if (!result) {
appWindow.showStatusMessage(qsTr("Failed to send command"), 3);
}
});
2018-04-21 18:44:42 +02:00
}
text = ""
}
}
}
}
2018-04-21 18:44:42 +02:00
// window borders
Rectangle {
anchors.bottom: parent.bottom
anchors.top: parent.top
anchors.left: parent.left
width:1
color: "#2F2F2F"
z: 2
}
2018-04-21 18:44:42 +02:00
Rectangle {
anchors.bottom: parent.bottom
anchors.top: parent.top
anchors.right: parent.right
width:1
color: "#2F2F2F"
z: 2
}
2018-04-21 18:44:42 +02:00
Rectangle {
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.left: parent.left
height:1
color: "#2F2F2F"
z: 2
}
}