all repos — mgba @ 086a34103d625936af63b729a3d86d0944b971d2

mGBA Game Boy Advance Emulator

Qt: Debugger console history
Vicki Pfau vi@endrift.com
Sat, 06 Oct 2018 18:23:11 -0700
commit

086a34103d625936af63b729a3d86d0944b971d2

parent

cf28e05f1ae15bd915589b038e0f0a7bc6e82d05

3 files changed, 48 insertions(+), 0 deletions(-)

jump to
M CHANGESCHANGES

@@ -130,6 +130,7 @@ - Qt: Ensure camera image is valid

- GB: Improved SGB2 support - Libretro: Reduce rumble callbacks - Debugger: Minor text fixes + - Qt: Debugger console history 0.7 beta 1: (2018-09-24) - Initial beta for 0.7
M src/platform/qt/DebuggerConsole.cppsrc/platform/qt/DebuggerConsole.cpp

@@ -17,6 +17,8 @@ , m_consoleController(controller)

{ m_ui.setupUi(this); + m_ui.prompt->installEventFilter(this); + connect(m_ui.prompt, &QLineEdit::returnPressed, this, &DebuggerConsole::postLine); connect(controller, &DebuggerConsoleController::log, this, &DebuggerConsole::log); connect(m_ui.breakpoint, &QAbstractButton::clicked, controller, &DebuggerController::attach);

@@ -36,7 +38,47 @@ m_ui.prompt->clear();

if (line.isEmpty()) { m_consoleController->enterLine(QString("\n")); } else { + m_history.append(line); + m_historyOffset = 0; log(QString("> %1\n").arg(line)); m_consoleController->enterLine(line); } } + +bool DebuggerConsole::eventFilter(QObject*, QEvent* event) { + if (event->type() != QEvent::KeyPress) { + return false; + } + if (m_history.isEmpty()) { + return false; + } + QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event); + switch (keyEvent->key()) { + case Qt::Key_Down: + if (m_historyOffset <= 0) { + return false; + } + --m_historyOffset; + break; + case Qt::Key_Up: + if (m_historyOffset >= m_history.size()) { + return false; + } + ++m_historyOffset; + break; + case Qt::Key_End: + m_historyOffset = 0; + break; + case Qt::Key_Home: + m_historyOffset = m_history.size(); + break; + default: + return false; + } + if (m_historyOffset == 0) { + m_ui.prompt->clear(); + } else { + m_ui.prompt->setText(m_history[m_history.size() - m_historyOffset]); + } + return true; +}
M src/platform/qt/DebuggerConsole.hsrc/platform/qt/DebuggerConsole.h

@@ -21,8 +21,13 @@ private slots:

void log(const QString&); void postLine(); +protected: + bool eventFilter(QObject*, QEvent*) override; + private: Ui::DebuggerConsole m_ui; + QStringList m_history; + int m_historyOffset; DebuggerConsoleController* m_consoleController; };