Add basic JS/QML debug console
This commit is contained in:
parent
f7b3e0f032
commit
58d491a2b3
|
@ -108,7 +108,8 @@ class UISettings(JSONConfigFile):
|
||||||
"theme": "Default.qpl",
|
"theme": "Default.qpl",
|
||||||
"writeAliases": {},
|
"writeAliases": {},
|
||||||
"keys": {
|
"keys": {
|
||||||
"startDebugger": "Alt+Shift+D",
|
"startPythonDebugger": "Alt+Shift+D",
|
||||||
|
"toggleDebugConsole": "Alt+Shift+C",
|
||||||
"reloadConfig": "Alt+Shift+R",
|
"reloadConfig": "Alt+Shift+R",
|
||||||
|
|
||||||
"scrollUp": ["Alt+Up", "Alt+K"],
|
"scrollUp": ["Alt+Up", "Alt+K"],
|
||||||
|
|
90
src/qml/DebugConsole.qml
Normal file
90
src/qml/DebugConsole.qml
Normal 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
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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() })
|
||||||
|
|
|
@ -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" : ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user