diff --git a/x64_dbg_gui/Project/Src/Bridge/Bridge.cpp b/x64_dbg_gui/Project/Src/Bridge/Bridge.cpp index 4b48e20e..9ee0811f 100644 --- a/x64_dbg_gui/Project/Src/Bridge/Bridge.cpp +++ b/x64_dbg_gui/Project/Src/Bridge/Bridge.cpp @@ -410,6 +410,21 @@ void Bridge::emitShowCpu() emit showCpu(); } +void Bridge::emitAddQWidgetTab(QWidget* qWidget) +{ + emit addQWidgetTab(qWidget); +} + +void Bridge::emitShowQWidgetTab(QWidget* qWidget) +{ + emit showQWidgetTab(qWidget); +} + +void Bridge::emitCloseQWidgetTab(QWidget* qWidget) +{ + emit closeQWidgetTab(qWidget); +} + /************************************************************************************ Static Functions ************************************************************************************/ @@ -824,6 +839,24 @@ __declspec(dllexport) void* _gui_sendmessage(GUIMSG type, void* param1, void* pa } break; + case GUI_ADD_QWIDGET_TAB: + { + Bridge::getBridge()->emitAddQWidgetTab((QWidget*)param1); + } + break; + + case GUI_SHOW_QWIDGET_TAB: + { + Bridge::getBridge()->emitShowQWidgetTab((QWidget*)param1); + } + break; + + case GUI_CLOSE_QWIDGET_TAB: + { + Bridge::getBridge()->emitCloseQWidgetTab((QWidget*)param1); + } + break; + default: { diff --git a/x64_dbg_gui/Project/Src/Bridge/Bridge.h b/x64_dbg_gui/Project/Src/Bridge/Bridge.h index f663a9f5..2c22b031 100644 --- a/x64_dbg_gui/Project/Src/Bridge/Bridge.h +++ b/x64_dbg_gui/Project/Src/Bridge/Bridge.h @@ -3,6 +3,7 @@ #include #include +#include #include #include "Imports.h" #include "NewTypes.h" @@ -87,6 +88,9 @@ public: void emitSetMenuEntryIcon(int hEntry, const ICONDATA* icon); void emitSetMenuIcon(int hMenu, const ICONDATA* icon); void emitShowCpu(); + void emitAddQWidgetTab(QWidget* qWidget); + void emitShowQWidgetTab(QWidget* qWidget); + void emitCloseQWidgetTab(QWidget* qWidget); //Public variables void* winId; @@ -156,6 +160,9 @@ signals: void setIconMenuEntry(int hEntry, QIcon icon); void setIconMenu(int hMenu, QIcon icon); void showCpu(); + void addQWidgetTab(QWidget* qWidget); + void showQWidgetTab(QWidget* qWidget); + void closeQWidgetTab(QWidget* qWidget); private: QMutex* mBridgeMutex; diff --git a/x64_dbg_gui/Project/Src/Gui/MainWindow.cpp b/x64_dbg_gui/Project/Src/Gui/MainWindow.cpp index 5f995981..c86fe507 100644 --- a/x64_dbg_gui/Project/Src/Gui/MainWindow.cpp +++ b/x64_dbg_gui/Project/Src/Gui/MainWindow.cpp @@ -31,6 +31,8 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWi connect(Bridge::getBridge(), SIGNAL(setIconMenu(int, QIcon)), this, SLOT(setIconMenu(int, QIcon))); connect(Bridge::getBridge(), SIGNAL(setIconMenuEntry(int, QIcon)), this, SLOT(setIconMenuEntry(int, QIcon))); connect(Bridge::getBridge(), SIGNAL(showCpu()), this, SLOT(displayCpuWidget())); + connect(Bridge::getBridge(), SIGNAL(addQWidgetTab(QWidget*)), this, SLOT(addQWidgetTab(QWidget*))); + connect(Bridge::getBridge(), SIGNAL(showQWidgetTab(QWidget*)), this, SLOT(showQWidgetTab(QWidget*))); //setup menu api initMenuApi(); @@ -130,17 +132,17 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWi mTabWidget = new MHTabWidget(NULL); //Setup tabs - mTabWidget->addTab(mCpuWidget, mCpuWidget->windowIcon(), mCpuWidget->windowTitle()); - mTabWidget->addTab(mLogView, mLogView->windowIcon(), mLogView->windowTitle()); - mTabWidget->addTab(mBreakpointsView, mBreakpointsView->windowIcon(), mBreakpointsView->windowTitle()); - mTabWidget->addTab(mMemMapView, mMemMapView->windowIcon(), mMemMapView->windowTitle()); - mTabWidget->addTab(mCallStackView, mCallStackView->windowIcon(), mCallStackView->windowTitle()); - mTabWidget->addTab(mScriptView, mScriptView->windowIcon(), mScriptView->windowTitle()); - mTabWidget->addTab(mSymbolView, mSymbolView->windowIcon(), mSymbolView->windowTitle()); - mTabWidget->addTab(mSourceViewManager, mSourceViewManager->windowIcon(), mSourceViewManager->windowTitle()); - mTabWidget->addTab(mReferenceManager, mReferenceManager->windowIcon(), mReferenceManager->windowTitle()); - mTabWidget->addTab(mThreadView, mThreadView->windowIcon(), mThreadView->windowTitle()); - mTabWidget->addTab(mSnowmanView, mSnowmanView->windowIcon(), mSnowmanView->windowTitle()); + addQWidgetTab(mCpuWidget); + addQWidgetTab(mLogView); + addQWidgetTab(mBreakpointsView); + addQWidgetTab(mMemMapView); + addQWidgetTab(mCallStackView); + addQWidgetTab(mScriptView); + addQWidgetTab(mSymbolView); + addQWidgetTab(mSourceViewManager); + addQWidgetTab(mReferenceManager); + addQWidgetTab(mThreadView); + addQWidgetTab(mSnowmanView); setCentralWidget(mTabWidget); @@ -488,23 +490,17 @@ void MainWindow::execRtr() void MainWindow::displayMemMapWidget() { - mMemMapView->show(); - mMemMapView->setFocus(); - setTab(mMemMapView); + showQWidgetTab(mMemMapView); } void MainWindow::displayLogWidget() { - mLogView->show(); - mLogView->setFocus(); - setTab(mLogView); + showQWidgetTab(mLogView); } void MainWindow::displayScriptWidget() { - mScriptView->show(); - mScriptView->setFocus(); - setTab(mScriptView); + showQWidgetTab(mScriptView); } void MainWindow::displayAboutWidget() @@ -607,9 +603,7 @@ void MainWindow::restartDebugging() void MainWindow::displayBreakpointWidget() { - mBreakpointsView->show(); - mBreakpointsView->setFocus(); - setTab(mBreakpointsView); + showQWidgetTab(mBreakpointsView); } void MainWindow::dragEnterEvent(QDragEnterEvent* pEvent) @@ -667,44 +661,32 @@ void MainWindow::execSkip() void MainWindow::displayCpuWidget() { - mCpuWidget->show(); - mCpuWidget->setFocus(); - setTab(mCpuWidget); + showQWidgetTab(mCpuWidget); } void MainWindow::displaySymbolWidget() { - mSymbolView->show(); - mSymbolView->setFocus(); - setTab(mSymbolView); + showQWidgetTab(mSymbolView); } void MainWindow::displaySourceViewWidget() { - mSourceViewManager->show(); - mSourceViewManager->setFocus(); - setTab(mSourceViewManager); + showQWidgetTab(mSourceViewManager); } void MainWindow::displayReferencesWidget() { - mReferenceManager->show(); - mReferenceManager->setFocus(); - setTab(mReferenceManager); + showQWidgetTab(mReferenceManager); } void MainWindow::displayThreadsWidget() { - mThreadView->show(); - mThreadView->setFocus(); - setTab(mThreadView); + showQWidgetTab(mThreadView); } void MainWindow::displaySnowmanWidget() { - mSnowmanView->show(); - mSnowmanView->setFocus(); - setTab(mSnowmanView); + showQWidgetTab(mSnowmanView); } void MainWindow::openSettings() @@ -1025,9 +1007,7 @@ void MainWindow::checkUpdates() void MainWindow::displayCallstack() { - mCallStackView->show(); - mCallStackView->setFocus(); - setTab(mCallStackView); + showQWidgetTab(mCallStackView); } void MainWindow::donate() @@ -1122,3 +1102,25 @@ void MainWindow::canClose() bCanClose = true; close(); } + +void MainWindow::addQWidgetTab(QWidget* qWidget) +{ + mTabWidget->addTab(qWidget, qWidget->windowIcon(), qWidget->windowTitle()); +} + +void MainWindow::showQWidgetTab(QWidget* qWidget) +{ + qWidget->show(); + qWidget->setFocus(); + setTab(qWidget); +} + +void MainWindow::closeQWidgetTab(QWidget* qWidget) +{ + for(int i = 0; i < mTabWidget->count(); i++) + if(mTabWidget->widget(i) == qWidget) + { + mTabWidget->DeleteTab(i); + break; + } +} diff --git a/x64_dbg_gui/Project/Src/Gui/MainWindow.h b/x64_dbg_gui/Project/Src/Gui/MainWindow.h index dba22c03..655e9c6e 100644 --- a/x64_dbg_gui/Project/Src/Gui/MainWindow.h +++ b/x64_dbg_gui/Project/Src/Gui/MainWindow.h @@ -104,6 +104,9 @@ public slots: void changeCommandLine(); void decompileAt(int_t start, int_t end); void canClose(); + void addQWidgetTab(QWidget* qWidget); + void showQWidgetTab(QWidget* qWidget); + void closeQWidgetTab(QWidget* qWidget); private: Ui::MainWindow* ui;