diff --git a/src/gui/Src/Gui/CPURegistersView.cpp b/src/gui/Src/Gui/CPURegistersView.cpp index 442d5f27..fb9f991a 100644 --- a/src/gui/Src/Gui/CPURegistersView.cpp +++ b/src/gui/Src/Gui/CPURegistersView.cpp @@ -194,7 +194,7 @@ void CPURegistersView::refreshShortcutsSlot() void CPURegistersView::mousePressEvent(QMouseEvent* event) { - if(!DbgIsDebugging()) + if(!isActive) return; if(event->y() < yTopSpacing - mButtonHeight) @@ -238,7 +238,7 @@ void CPURegistersView::mousePressEvent(QMouseEvent* event) void CPURegistersView::mouseDoubleClickEvent(QMouseEvent* event) { - if(!DbgIsDebugging() || event->button() != Qt::LeftButton) + if(!isActive || event->button() != Qt::LeftButton) return; // get mouse position const int y = (event->y() - yTopSpacing) / (double)mRowHeight; @@ -260,7 +260,7 @@ void CPURegistersView::mouseDoubleClickEvent(QMouseEvent* event) void CPURegistersView::keyPressEvent(QKeyEvent* event) { - if(DbgIsDebugging()) + if(isActive) { int key = event->key(); REGISTER_NAME newRegister = UNKNOWN; @@ -300,6 +300,11 @@ void CPURegistersView::debugStateChangedSlot(DBGSTATE state) if(state == stopped) { updateRegistersSlot(); + isActive = false; + } + else + { + isActive = true; } } @@ -767,7 +772,7 @@ void CPURegistersView::onFollowInMemoryMap() void CPURegistersView::displayCustomContextMenuSlot(QPoint pos) { - if(!DbgIsDebugging()) + if(!isActive) return; QMenu wMenu(this); QMenu* followInDumpNMenu = nullptr; diff --git a/src/gui/Src/Gui/RegistersView.cpp b/src/gui/Src/Gui/RegistersView.cpp index 40c0c9cf..4aca5a84 100644 --- a/src/gui/Src/Gui/RegistersView.cpp +++ b/src/gui/Src/Gui/RegistersView.cpp @@ -686,6 +686,7 @@ RegistersView::RegistersView(QWidget* parent) : QScrollArea(parent), mVScrollOff setWindowTitle("Registers"); mChangeViewButton = NULL; mFpuMode = 0; + isActive = false; // general purposes register (we allow the user to modify the value) mGPR.insert(CAX); @@ -1397,7 +1398,7 @@ QString RegistersView::helpRegister(REGISTER_NAME reg) void RegistersView::mousePressEvent(QMouseEvent* event) { - if(!DbgIsDebugging()) + if(!isActive) return; if(event->y() < yTopSpacing - mButtonHeight) @@ -1424,7 +1425,7 @@ void RegistersView::mousePressEvent(QMouseEvent* event) void RegistersView::mouseMoveEvent(QMouseEvent* event) { - if(!DbgIsDebugging()) + if(!isActive) { QScrollArea::mouseMoveEvent(event); setCursor(QCursor(Qt::ArrowCursor)); @@ -1472,7 +1473,7 @@ void RegistersView::paintEvent(QPaintEvent* event) wPainter.fillRect(wPainter.viewport(), QBrush(ConfigColor("RegistersBackgroundColor"))); // Don't draw the registers if a program isn't actually running - if(!DbgIsDebugging()) + if(!isActive) return; // Iterate all registers @@ -1958,7 +1959,7 @@ void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value) //p->drawText(offset,mRowHeight*(mRegisterPlaces[reg].line+1),mRegisterMapping[reg]); //set highlighting - if(DbgIsDebugging() && mRegisterUpdates.contains(reg)) + if(isActive && mRegisterUpdates.contains(reg)) p->setPen(ConfigColor("RegistersModifiedColor")); else p->setPen(ConfigColor("RegistersColor")); @@ -1980,7 +1981,7 @@ void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value) x += width; - if(mFPUx87_80BITSDISPLAY.contains(reg) && DbgIsDebugging()) + if(mFPUx87_80BITSDISPLAY.contains(reg) && isActive) { p->setPen(ConfigColor("RegistersExtraInfoColor")); x += 1 * mCharWidth; //1 space @@ -2019,7 +2020,7 @@ void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value) p->setPen(ConfigColor("RegistersExtraInfoColor")); - if(DbgIsDebugging() && mRegisterUpdates.contains(reg)) + if(isActive && mRegisterUpdates.contains(reg)) p->setPen(ConfigColor("RegistersModifiedColor")); newText += ToLongDoubleString(((X87FPUREGISTER*) registerValue(&wRegDumpStruct, reg))->data); diff --git a/src/gui/Src/Gui/RegistersView.h b/src/gui/Src/Gui/RegistersView.h index 33654cb0..f0a67278 100644 --- a/src/gui/Src/Gui/RegistersView.h +++ b/src/gui/Src/Gui/RegistersView.h @@ -136,8 +136,6 @@ public: static void operator delete(void* p); int getEstimateHeight(); - void setRegisters(REGDUMP* reg); //This is really a protected member, but we need to put REGDUMP into it from TraceWidget - public slots: virtual void refreshShortcutsSlot(); virtual void displayCustomContextMenuSlot(QPoint pos); @@ -183,10 +181,12 @@ protected slots: //unsigned int GetMxCsrRCValueFromString(const char* string); //unsigned int GetStatusWordTOPValueFromString(const char* string); QString GetStatusWordTOPStateString(unsigned short state); + void setRegisters(REGDUMP* reg); void appendRegister(QString & text, REGISTER_NAME reg, const char* name64, const char* name32); void onCopyAllAction(); protected: + bool isActive; QPushButton* mChangeViewButton; bool mShowFpu; int mVScrollOffset; diff --git a/src/gui/Src/Tracer/TraceBrowser.cpp b/src/gui/Src/Tracer/TraceBrowser.cpp index 52eb698c..e4aaad05 100644 --- a/src/gui/Src/Tracer/TraceBrowser.cpp +++ b/src/gui/Src/Tracer/TraceBrowser.cpp @@ -58,6 +58,11 @@ TraceBrowser::~TraceBrowser() delete mDisasm; } +bool TraceBrowser::isFileOpened() const +{ + return mTraceFile && mTraceFile->Progress() == 100 && mTraceFile->Length() > 0; +} + QString TraceBrowser::getAddrText(dsint cur_addr, char label[MAX_LABEL_SIZE], bool getLabel) { QString addrText = ""; @@ -145,7 +150,7 @@ RichTextPainter::List TraceBrowser::getRichBytes(const Instruction_t & instr) co QString TraceBrowser::paintContent(QPainter* painter, dsint rowBase, int rowOffset, int col, int x, int y, int w, int h) { - if(!mTraceFile || mTraceFile->Progress() != 100) + if(!isFileOpened()) { return ""; } @@ -1031,7 +1036,7 @@ void TraceBrowser::closeFileSlot() mTraceFile->Close(); delete mTraceFile; mTraceFile = nullptr; - reloadData(); + emit Bridge::getBridge()->updateTraceBrowser(); } void TraceBrowser::closeDeleteSlot() @@ -1044,7 +1049,7 @@ void TraceBrowser::closeDeleteSlot() mTraceFile->Delete(); delete mTraceFile; mTraceFile = nullptr; - reloadData(); + emit Bridge::getBridge()->updateTraceBrowser(); } } @@ -1069,7 +1074,7 @@ void TraceBrowser::parseFinishedSlot() mMRUList->addEntry(mFileName); mMRUList->save(); } - reloadData(); + emit Bridge::getBridge()->updateTraceBrowser(); } void TraceBrowser::gotoSlot() diff --git a/src/gui/Src/Tracer/TraceBrowser.h b/src/gui/Src/Tracer/TraceBrowser.h index 9ad18590..dacb1959 100644 --- a/src/gui/Src/Tracer/TraceBrowser.h +++ b/src/gui/Src/Tracer/TraceBrowser.h @@ -28,6 +28,8 @@ public: duint getSelectionStart(); duint getSelectionEnd(); + bool isFileOpened() const; + private: enum TableColumnIndex { diff --git a/src/gui/Src/Tracer/TraceRegisters.cpp b/src/gui/Src/Tracer/TraceRegisters.cpp new file mode 100644 index 00000000..f4ef4bc4 --- /dev/null +++ b/src/gui/Src/Tracer/TraceRegisters.cpp @@ -0,0 +1,17 @@ +#include "TraceRegisters.h" + +TraceRegisters::TraceRegisters(QWidget* parent) : RegistersView(parent) +{ + +} + +void TraceRegisters::setRegisters(REGDUMP* registers) +{ + this->RegistersView::setRegisters(registers); +} + +void TraceRegisters::setActive(bool isActive) +{ + this->isActive = isActive; + this->RegistersView::setRegisters(&this->wRegDumpStruct); +} diff --git a/src/gui/Src/Tracer/TraceRegisters.h b/src/gui/Src/Tracer/TraceRegisters.h new file mode 100644 index 00000000..573e1577 --- /dev/null +++ b/src/gui/Src/Tracer/TraceRegisters.h @@ -0,0 +1,15 @@ +#ifndef TRACEREGISTERS_H +#define TRACEREGISTERS_H +#include "RegistersView.h" + +class TraceRegisters : public RegistersView +{ + Q_OBJECT +public: + TraceRegisters(QWidget* parent = 0); + + void setRegisters(REGDUMP* registers); + void setActive(bool isActive); +}; + +#endif // TRACEREGISTERS_H diff --git a/src/gui/Src/Tracer/TraceWidget.cpp b/src/gui/Src/Tracer/TraceWidget.cpp index 3f18252c..dc381eb4 100644 --- a/src/gui/Src/Tracer/TraceWidget.cpp +++ b/src/gui/Src/Tracer/TraceWidget.cpp @@ -1,7 +1,7 @@ #include "TraceWidget.h" #include "ui_TraceWidget.h" #include "TraceBrowser.h" -#include "RegistersView.h" +#include "TraceRegisters.h" #include "CPUInfoBox.h" TraceWidget::TraceWidget(QWidget* parent) : @@ -13,7 +13,7 @@ TraceWidget::TraceWidget(QWidget* parent) : mTraceWidget = new TraceBrowser(this); mOverview = new StdTable(this); mInfo = new CPUInfoBox(this); - mGeneralRegs = new RegistersView(this); + mGeneralRegs = new TraceRegisters(this); //disasm ui->mTopLeftUpperRightFrameLayout->addWidget(mTraceWidget); //registers @@ -31,6 +31,7 @@ TraceWidget::TraceWidget(QWidget* parent) : button_changeview->setStyleSheet("Text-align:left;padding: 4px;padding-left: 10px;"); connect(button_changeview, SIGNAL(clicked()), mGeneralRegs, SLOT(onChangeFPUViewAction())); connect(mTraceWidget, SIGNAL(updateTraceRegistersView(void*)), this, SLOT(updateTraceRegistersView(void*))); + connect(Bridge::getBridge(), SIGNAL(updateTraceBrowser()), this, SLOT(updateSlot())); mGeneralRegs->SetChangeButton(button_changeview); @@ -62,6 +63,11 @@ void TraceWidget::updateTraceRegistersView(void* registers) mGeneralRegs->setRegisters((REGDUMP*)registers); } +void TraceWidget::updateSlot() +{ + mGeneralRegs->setActive(mTraceWidget->isFileOpened()); +} + TraceBrowser* TraceWidget::getTraceBrowser() { return mTraceWidget; diff --git a/src/gui/Src/Tracer/TraceWidget.h b/src/gui/Src/Tracer/TraceWidget.h index 33e2022e..e0abac47 100644 --- a/src/gui/Src/Tracer/TraceWidget.h +++ b/src/gui/Src/Tracer/TraceWidget.h @@ -5,7 +5,7 @@ class QVBoxLayout; class CPUWidget; -class RegistersView; +class TraceRegisters; class TraceBrowser; class CPUInfoBox; class StdTable; @@ -27,10 +27,11 @@ public: protected slots: void updateTraceRegistersView(void* registers); + void updateSlot(); protected: TraceBrowser* mTraceWidget; - RegistersView* mGeneralRegs; + TraceRegisters* mGeneralRegs; CPUInfoBox* mInfo; StdTable* mOverview; diff --git a/src/gui/x64dbg.pro b/src/gui/x64dbg.pro index 1c34aa17..2598353a 100644 --- a/src/gui/x64dbg.pro +++ b/src/gui/x64dbg.pro @@ -75,6 +75,7 @@ RESOURCES += \ SOURCES += \ Src/Gui/CPURegistersView.cpp \ + Src/Tracer/TraceRegisters.cpp \ Src/Tracer/TraceWidget.cpp \ Src/main.cpp \ Src/Gui/MainWindow.cpp \ @@ -191,6 +192,7 @@ SOURCES += \ HEADERS += \ Src/Gui/CPURegistersView.h \ + Src/Tracer/TraceRegisters.h \ Src/Tracer/TraceWidget.h \ Src/main.h \ Src/Gui/MainWindow.h \