Add basic JS/QML debug console

This commit is contained in:
miruka 2019-09-05 15:05:57 -04:00
parent f7b3e0f032
commit 58d491a2b3
4 changed files with 106 additions and 3 deletions

View File

@ -108,8 +108,9 @@ class UISettings(JSONConfigFile):
"theme": "Default.qpl", "theme": "Default.qpl",
"writeAliases": {}, "writeAliases": {},
"keys": { "keys": {
"startDebugger": "Alt+Shift+D", "startPythonDebugger": "Alt+Shift+D",
"reloadConfig": "Alt+Shift+R", "toggleDebugConsole": "Alt+Shift+C",
"reloadConfig": "Alt+Shift+R",
"scrollUp": ["Alt+Up", "Alt+K"], "scrollUp": ["Alt+Up", "Alt+K"],
"scrollDown": ["Alt+Down", "Alt+J"], "scrollDown": ["Alt+Down", "Alt+J"],

90
src/qml/DebugConsole.qml Normal file
View File

@ -0,0 +1,90 @@
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.12
import "Base"
Window {
title: qsTr("Debug console")
width: 640
height: 480
visible: false
flags: Qt.WA_TranslucentBackground
color: "transparent"
function runJS(input) {
let error = false
try {
var output = input.startsWith("j ") ?
JSON.stringify(eval(input.substring(2)), null, 4) :
String(eval(input))
} catch (err) {
error = true
var output = err.toString()
}
commandsView.model.insert(0, { input, output, error })
}
HColumnLayout {
anchors.fill: parent
HListView {
id: commandsView
spacing: theme.spacing
topMargin: theme.spacing
bottomMargin: topMargin
leftMargin: theme.spacing
rightMargin: rightMargin
clip: true
verticalLayoutDirection: ListView.BottomToTop
Layout.fillWidth: true
Layout.fillHeight: true
model: ListModel {}
delegate: HColumnLayout {
width: commandsView.width
HLabel {
text: "> " + model.input
wrapMode: Text.Wrap
color: theme.chat.message.quote
visible: model.input
Layout.fillWidth: true
}
HLabel {
text: "" + model.output
wrapMode: Text.Wrap
color: model.error ?
theme.colors.errorText : theme.colors.text
visible: model.output
Layout.fillWidth: true
}
}
Rectangle {
z: -10
anchors.fill: parent
color: theme.colors.weakBackground
}
}
HTextField {
focus: true
onAccepted: if (text) runJS(text)
backgroundColor: Qt.hsla(0, 0, 0, 0.85)
bordered: false
placeholderText: qsTr("Type some JavaScript...")
Layout.fillWidth: true
}
}
}

View File

@ -9,10 +9,16 @@ HShortcutHandler {
HShortcut { HShortcut {
enabled: debugMode enabled: debugMode
sequences: settings.keys.startDebugger sequences: settings.keys.startPythonDebugger
onPressed: py.call("APP.pdb") onPressed: py.call("APP.pdb")
} }
HShortcut {
enabled: debugMode
sequences: settings.keys.toggleDebugConsole
onPressed: mainUI.debugConsole.visible = ! mainUI.debugConsole.visible
}
HShortcut { HShortcut {
sequences: settings.keys.reloadConfig sequences: settings.keys.reloadConfig
onPressed: py.loadSettings(() => { mainUI.pressAnimation.start() }) onPressed: py.loadSettings(() => { mainUI.pressAnimation.start() })

View File

@ -15,6 +15,7 @@ Item {
property alias sidePane: sidePane property alias sidePane: sidePane
property alias pageLoader: pageLoader property alias pageLoader: pageLoader
property alias pressAnimation: pressAnimation property alias pressAnimation: pressAnimation
property alias debugConsole: debugConsoleLoader.item
SequentialAnimation { SequentialAnimation {
id: pressAnimation id: pressAnimation
@ -138,4 +139,9 @@ Item {
} }
} }
} }
HLoader {
id: debugConsoleLoader
source: debugMode ? "DebugConsole.qml" : ""
}
} }