From 9d8b67cdc43417fa0dbc7e4c144a6e79d303ebf6 Mon Sep 17 00:00:00 2001 From: slack Date: Tue, 17 Mar 2009 02:21:52 +0100 Subject: [PATCH] Added history browsing to qtboi disassembly window --- qtboi/QtBoiDisassemblyWindow.cc | 73 +++++++++++++++++++++++++++++++-- qtboi/QtBoiDisassemblyWindow.h | 18 +++++++- qtboi/QtBoiMainWindow.cc | 2 - 3 files changed, 86 insertions(+), 7 deletions(-) diff --git a/qtboi/QtBoiDisassemblyWindow.cc b/qtboi/QtBoiDisassemblyWindow.cc index a3d6978..1712479 100644 --- a/qtboi/QtBoiDisassemblyWindow.cc +++ b/qtboi/QtBoiDisassemblyWindow.cc @@ -1,15 +1,46 @@ #include #include #include +#include + +#include +#include +#include #include "QtBoiDisassemblyWindow.h" #include "../common/toString.h" QtBoiDisassemblyWindow::QtBoiDisassemblyWindow(QWidget *parent, GameBoy *gb, QHash *tags) - :gb(gb), tags(tags) + :QWidget(parent), gb(gb), tags(tags), history(), historyPosition(-1) { - setFocusPolicy(Qt::NoFocus); - setMinimumSize(500,500); + setFocusPolicy(Qt::NoFocus); + + browser = new QTextBrowser(this); + browser->setOpenLinks(false); + browser->setFont(QFont("courier")); + browser->setFocusPolicy(Qt::NoFocus); + browser->setMinimumSize(500,500); + connect(browser, SIGNAL(anchorClicked(const QUrl&)), this, SIGNAL(anchorClicked(const QUrl &))); + + + backButton = new QPushButton("Back", this); + backButton->setEnabled(false); + backButton->setFocusPolicy(Qt::NoFocus); + forwardButton = new QPushButton("Forward", this); + forwardButton->setEnabled(false); + forwardButton->setFocusPolicy(Qt::NoFocus); + connect(backButton, SIGNAL(clicked()), this, SLOT(historyBack())); + connect(forwardButton, SIGNAL(clicked()), this, SLOT(historyForward())); + + QHBoxLayout *buttons = new QHBoxLayout(); + buttons->addWidget(backButton); + buttons->addWidget(forwardButton); + + QVBoxLayout *vbox = new QVBoxLayout; + vbox->addWidget(browser); + vbox->addLayout(buttons); + + setLayout(vbox); } QtBoiDisassemblyWindow::~QtBoiDisassemblyWindow() @@ -127,8 +158,30 @@ void QtBoiDisassemblyWindow::gotoAddress(u16 addr) str << ""; - setHtml(QString(str.str().c_str())); + browser->setHtml(QString(str.str().c_str())); currentAddress=addr; + + // If there are "forward" history elements + // - check if we are going forwards or backwards + // - else, delete forward history and insert the new address + if (historyPosition < history.size()-1 && history[historyPosition+1] == addr) + historyPosition++; + else if (historyPosition > 0 && history[historyPosition-1] == addr) + historyPosition--; + else + { + while (history.size() > historyPosition+1) + history.pop_back(); + history.push_back(addr); + historyPosition++; + } + + // enable/disable navigation buttons + if (historyPosition >= 1) backButton->setEnabled(true); + else backButton->setEnabled(false); + + if (historyPosition >= 0 && historyPosition < history.size()-1) forwardButton->setEnabled(true); + else forwardButton->setEnabled(false); } void QtBoiDisassemblyWindow::gotoPC() @@ -141,5 +194,17 @@ void QtBoiDisassemblyWindow::refresh() gotoAddress(currentAddress); } +void QtBoiDisassemblyWindow::historyBack() +{ + if (historyPosition >= 1) + gotoAddress(history[historyPosition-1]); +} + +void QtBoiDisassemblyWindow::historyForward() +{ + if (historyPosition < history.size()-1) + gotoAddress(history[historyPosition+1]); +} + diff --git a/qtboi/QtBoiDisassemblyWindow.h b/qtboi/QtBoiDisassemblyWindow.h index 5b4c180..375237b 100644 --- a/qtboi/QtBoiDisassemblyWindow.h +++ b/qtboi/QtBoiDisassemblyWindow.h @@ -2,11 +2,14 @@ #define QTBOIDISASSEMBLYWINDOW_H #include +#include #include #include +#include +#include #include "../core/GameBoy.h" -class QtBoiDisassemblyWindow: public QTextBrowser +class QtBoiDisassemblyWindow: public QWidget { Q_OBJECT @@ -18,13 +21,26 @@ class QtBoiDisassemblyWindow: public QTextBrowser void gotoPC(); void refresh(); + public slots: + void historyBack(); + void historyForward(); + + signals: + void anchorClicked(const QUrl & link); + private: std::string insToHtml(const Instruction &ins); std::string operandToHtml(const Instruction::Operand &ins); std::string htmlLinkMem(u32 addr); + + QTextBrowser *browser; + QPushButton *backButton, *forwardButton; + GameBoy *gb; QString romTitle; QHash *tags; + QList history; + int historyPosition; u16 currentAddress; diff --git a/qtboi/QtBoiMainWindow.cc b/qtboi/QtBoiMainWindow.cc index fd5c045..236ade9 100644 --- a/qtboi/QtBoiMainWindow.cc +++ b/qtboi/QtBoiMainWindow.cc @@ -103,8 +103,6 @@ QtBoiMainWindow::QtBoiMainWindow(QWidget *parent) leftVBoxLayout->addWidget(status); disassembly = new QtBoiDisassemblyWindow(centralWindow, &emuThread->gb, &tags); - disassembly->setOpenLinks(false); - disassembly->setFont(QFont("courier")); connect(disassembly, SIGNAL(anchorClicked(const QUrl&)), this, SLOT(onDisassemblyAnchorClicked(const QUrl&))); -- 2.34.1