diff --git a/src/drivers/Qt/ConsoleDebugger.cpp b/src/drivers/Qt/ConsoleDebugger.cpp index cb8479f2..cd68d794 100644 --- a/src/drivers/Qt/ConsoleDebugger.cpp +++ b/src/drivers/Qt/ConsoleDebugger.cpp @@ -38,6 +38,7 @@ #include "Qt/config.h" #include "Qt/nes_shm.h" #include "Qt/fceuWrapper.h" +#include "Qt/HexEditor.h" #include "Qt/ConsoleDebugger.h" #include "Qt/ConsoleUtilities.h" @@ -1604,6 +1605,26 @@ void ConsoleDebugger::asmViewCtxMenuAddBM(void) bmListUpdate(false); } //---------------------------------------------------------------------------- +void ConsoleDebugger::asmViewCtxMenuOpenHexEdit(void) +{ + int romAddr = -1; + int addr = asmView->getCtxMenuAddr(); + + if (addr >= 0x8000) + { + romAddr = GetNesFileAddress(addr); + } + + if ( romAddr >= 0 ) + { + hexEditorOpenFromDebugger( QHexEdit::MODE_NES_ROM, romAddr ); + } + else + { + hexEditorOpenFromDebugger( QHexEdit::MODE_NES_RAM, addr ); + } +} +//---------------------------------------------------------------------------- void ConsoleDebugger::setBookmarkSelectedAddress( int addr ) { char stmp[32]; @@ -2957,6 +2978,10 @@ void QAsmView::contextMenuEvent(QContextMenuEvent *event) menu.addAction(act); connect( act, SIGNAL(triggered(void)), parent, SLOT(asmViewCtxMenuAddBM(void)) ); + act = new QAction(tr("Open Hex Editor"), this); + menu.addAction(act); + connect( act, SIGNAL(triggered(void)), parent, SLOT(asmViewCtxMenuOpenHexEdit(void)) ); + menu.exec(event->globalPos()); } } diff --git a/src/drivers/Qt/ConsoleDebugger.h b/src/drivers/Qt/ConsoleDebugger.h index 515b7cac..7ee626ea 100644 --- a/src/drivers/Qt/ConsoleDebugger.h +++ b/src/drivers/Qt/ConsoleDebugger.h @@ -237,6 +237,7 @@ class ConsoleDebugger : public QDialog void asmViewCtxMenuAddBP(void); void asmViewCtxMenuAddBM(void); void asmViewCtxMenuAddSym(void); + void asmViewCtxMenuOpenHexEdit(void); private slots: void updatePeriodic(void); void hbarChanged(int value); diff --git a/src/drivers/Qt/HexEditor.cpp b/src/drivers/Qt/HexEditor.cpp index 1906fe7e..1fe9d45d 100644 --- a/src/drivers/Qt/HexEditor.cpp +++ b/src/drivers/Qt/HexEditor.cpp @@ -36,6 +36,7 @@ #include "Qt/fceuWrapper.h" #include "Qt/HexEditor.h" #include "Qt/ConsoleUtilities.h" +#include "Qt/ConsoleWindow.h" static HexBookMarkManager_t hbm; static std::list winList; @@ -1928,3 +1929,30 @@ void hexEditorSaveBookmarks(void) } } //---------------------------------------------------------------------------- +int hexEditorNumWindows(void) +{ + return winList.size(); +} +//---------------------------------------------------------------------------- +int hexEditorOpenFromDebugger( int mode, int addr ) +{ + HexEditorDialog_t *win = NULL; + + if ( winList.size() > 0 ) + { + win = winList.front(); + } + + if ( win == NULL ) + { + win = new HexEditorDialog_t(consoleWindow); + + win->show(); + } + + win->editor->setMode( mode ); + win->editor->setAddr( addr ); + + return 0; +} +//---------------------------------------------------------------------------- diff --git a/src/drivers/Qt/HexEditor.h b/src/drivers/Qt/HexEditor.h index 6c2623a0..cd861f6f 100644 --- a/src/drivers/Qt/HexEditor.h +++ b/src/drivers/Qt/HexEditor.h @@ -195,13 +195,14 @@ class HexEditorDialog_t : public QDialog void gotoAddress(int newAddr); void populateBookmarkMenu(void); + + QHexEdit *editor; protected: void closeEvent(QCloseEvent *bar); QScrollBar *vbar; QScrollBar *hbar; - QHexEdit *editor; QTimer *periodicTimer; QMenu *bookmarkMenu; @@ -227,5 +228,7 @@ class HexEditorDialog_t : public QDialog void removeAllBookmarks(void); }; +int hexEditorNumWindows(void); void hexEditorLoadBookmarks(void); void hexEditorSaveBookmarks(void); +int hexEditorOpenFromDebugger( int mode, int addr );