From 2229b41af1f75aed2bb9b15ff856025ccf42620a Mon Sep 17 00:00:00 2001 From: miruka Date: Thu, 19 Dec 2019 13:41:57 -0400 Subject: [PATCH] New way to open debug consoles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace broken old utils.debug(...) (since the utils.js → Utils.qml transition) with a declarative approach: a console can now be opened with by placing a `DebugConsoleLoader {}` anywhere. mainUI has a default console opened by F1/alt-shit-c when no other console is loaded. --- src/gui/DebugConsole.qml | 8 +--- src/gui/DebugConsoleLoader.qml | 43 ++++++++++++++++++++ src/gui/GlobalShortcuts.qml | 23 +++++++++-- src/gui/Pages/Chat/Timeline/EventContent.qml | 10 ++++- src/gui/UI.qml | 10 ++++- src/gui/Utils.qml | 8 ---- 6 files changed, 81 insertions(+), 21 deletions(-) create mode 100644 src/gui/DebugConsoleLoader.qml diff --git a/src/gui/DebugConsole.qml b/src/gui/DebugConsole.qml index 2146a550..e1b4da11 100644 --- a/src/gui/DebugConsole.qml +++ b/src/gui/DebugConsole.qml @@ -17,9 +17,9 @@ HDrawer { z: 9999 position: 0 - property var previouslyFocused: null + property Item previouslyFocused: null - property var target: null + property QtObject target: null property alias t: debugConsole.target property var history: window.history.console @@ -51,10 +51,6 @@ HDrawer { Component.onCompleted: { - if (mainUI.shortcuts.debugConsole) - mainUI.shortcuts.debugConsole.destroy() - - mainUI.shortcuts.debugConsole = debugConsole position = 1 commandsView.model.insert(0, { input: "t = " + String(target), diff --git a/src/gui/DebugConsoleLoader.qml b/src/gui/DebugConsoleLoader.qml new file mode 100644 index 00000000..1de56f66 --- /dev/null +++ b/src/gui/DebugConsoleLoader.qml @@ -0,0 +1,43 @@ +import QtQuick 2.12 +import "Base" + +HLoader { + id: loader + + onLoaded: { + if (! isDefault) + shortcuts.defaultDebugConsoleLoader.active = false + + if (shortcuts.debugConsoleLoader) + shortcuts.debugConsoleLoader.active = false + + shortcuts.debugConsoleLoader = this + } + + onActiveChanged: if (! active) shortcuts.debugConsoleLoader = null + + Component.onDestruction: shortcuts.debugConsoleLoader = null + + sourceComponent: DebugConsole { + target: loader.target + + property HLoader parentLoader: loader + } + + + property QtObject target: parent + + readonly property bool isDefault: + shortcuts.defaultDebugConsoleLoader && + shortcuts.defaultDebugConsoleLoader === this + + + function toggle() { + if (! loader.active) { + loader.active = true + return + } + + loader.item.visible = ! loader.item.visible + } +} diff --git a/src/gui/GlobalShortcuts.qml b/src/gui/GlobalShortcuts.qml index 55345066..02960126 100644 --- a/src/gui/GlobalShortcuts.qml +++ b/src/gui/GlobalShortcuts.qml @@ -13,12 +13,23 @@ Item { // A QQC Container that should be affected by tab navigation shortcuts property Container tabsTarget - // DebugConsole that should be affected by console shortcuts - property DebugConsole debugConsole + // DebugConsoleLoader that should be affected by console shortcuts + property DebugConsoleLoader debugConsoleLoader + + // DebugConsoleLoader to activate if no other loader is active and the + // shortcut to bring up a console is pressed + property DebugConsoleLoader defaultDebugConsoleLoader + + readonly property DebugConsole debugConsole: + debugConsoleLoader ? debugConsoleLoader.item : null + + readonly property DebugConsole defaultDebugConsole: + defaultDebugConsoleLoader ? defaultDebugConsoleLoader.item : null readonly property Item toFlick: debugConsole && debugConsole.activeFocus ? - debugConsole.commandsView : flickTarget + debugConsole.commandsView : + flickTarget // App @@ -35,8 +46,12 @@ Item { onActivated: { if (debugConsole) { debugConsole.visible = ! debugConsole.visible + + } else if (! defaultDebugConsoleLoader.active) { + defaultDebugConsoleLoader.active = true + } else { - utils.debug(mainUI || window) + defaultDebugConsole.visible = ! defaultDebugConsole.visible } } } diff --git a/src/gui/Pages/Chat/Timeline/EventContent.qml b/src/gui/Pages/Chat/Timeline/EventContent.qml index 36ec5637..c49f4ed0 100644 --- a/src/gui/Pages/Chat/Timeline/EventContent.qml +++ b/src/gui/Pages/Chat/Timeline/EventContent.qml @@ -3,6 +3,7 @@ import QtQuick 2.12 import QtQuick.Layouts 1.12 import "../../../Base" +import "../../.." HRowLayout { id: eventContent @@ -40,8 +41,13 @@ HRowLayout { TapHandler { enabled: debugMode - onDoubleTapped: - utils.debug(eventContent, null, con => { con.runJS("json()") }) + onDoubleTapped: debugConsoleLoader.toggle() + } + + DebugConsoleLoader { + id: debugConsoleLoader + active: false + onLoaded: item.runJS("json()") } Item { diff --git a/src/gui/UI.qml b/src/gui/UI.qml index b2a3e72e..1969b988 100644 --- a/src/gui/UI.qml +++ b/src/gui/UI.qml @@ -35,7 +35,15 @@ Item { } } - GlobalShortcuts { id: shortcuts } + GlobalShortcuts { + id: shortcuts + defaultDebugConsoleLoader: debugConsoleLoader + } + + DebugConsoleLoader { + id: debugConsoleLoader + active: false + } HImage { id: mainUIBackground diff --git a/src/gui/Utils.qml b/src/gui/Utils.qml index 3fb382a3..602b1742 100644 --- a/src/gui/Utils.qml +++ b/src/gui/Utils.qml @@ -57,14 +57,6 @@ QtObject { } - function debug(target, parent=null, callback=null) { - parent = parent || target - return utils.makeObject( - "DebugConsole.qml", parent, { target }, callback, - ) - } - - function isEmptyObject(obj) { return Object.entries(obj).length === 0 && obj.constructor === Object }