1
0
Fork 0

Graph in CPU view

This commit is contained in:
torusrxxx 2020-07-09 22:51:03 +08:00 committed by Duncan Ogilvie
parent aa0863689d
commit 37d0729795
6 changed files with 57 additions and 19 deletions

View File

@ -9,6 +9,7 @@
#include "CPURegistersView.h"
#include "CPUInfoBox.h"
#include "CPUArgumentWidget.h"
#include "DisassemblerGraphView.h"
#include "Configuration.h"
CPUWidget::CPUWidget(QWidget* parent) : QWidget(parent), ui(new Ui::CPUWidget)
@ -22,6 +23,8 @@ CPUWidget::CPUWidget(QWidget* parent) : QWidget(parent), ui(new Ui::CPUWidget)
mSideBar = new CPUSideBar(mDisas);
mDisas->setSideBar(mSideBar);
mArgumentWidget = new CPUArgumentWidget(this);
mGraphView = new DisassemblerGraphView(this);
connect(mDisas, SIGNAL(tableOffsetChanged(dsint)), mSideBar, SLOT(changeTopmostAddress(dsint)));
connect(mDisas, SIGNAL(viewableRowsChanged(int)), mSideBar, SLOT(setViewableRows(int)));
connect(mDisas, SIGNAL(selectionChanged(dsint)), mSideBar, SLOT(setSelection(dsint)));
@ -35,6 +38,9 @@ CPUWidget::CPUWidget(QWidget* parent) : QWidget(parent), ui(new Ui::CPUWidget)
ui->mTopLeftUpperLeftFrameLayout->addWidget(mSideBar);
ui->mTopLeftUpperRightFrameLayout->addWidget(mDisas);
ui->mTopLeftUpperRightFrameLayout->addWidget(mGraphView);
mGraphView->hide();
disasMode = true;
ui->mTopLeftVSplitter->setCollapsible(1, true); //allow collapsing of the InfoBox
connect(ui->mTopLeftVSplitter, SIGNAL(splitterMoved(int, int)), this, SLOT(splitterMoved(int, int)));
@ -149,9 +155,33 @@ void CPUWidget::setDefaultDisposition()
void CPUWidget::setDisasmFocus()
{
if(!disasMode)
{
mGraphView->hide();
mDisas->show();
mSideBar->show();
disasMode = true;
}
mDisas->setFocus();
}
void CPUWidget::setGraphFocus()
{
if(disasMode)
{
mDisas->hide();
mSideBar->hide();
mGraphView->show();
disasMode = false;
}
mGraphView->setFocus();
}
duint CPUWidget::getSelectionVa()
{
return disasMode ? mDisas->getSelectedVa() : mGraphView->get_cursor_pos();
}
CPUSideBar* CPUWidget::getSidebarWidget()
{
return mSideBar;

View File

@ -2,6 +2,7 @@
#define CPUWIDGET_H
#include <QWidget>
#include "Bridge.h"
class QVBoxLayout;
class CPUSideBar;
@ -11,6 +12,7 @@ class CPUStack;
class CPURegistersView;
class CPUInfoBox;
class CPUArgumentWidget;
class DisassemblerGraphView;
namespace Ui
{
@ -28,10 +30,13 @@ public:
// Misc
void setDefaultDisposition();
void setDisasmFocus();
void setGraphFocus();
void saveWindowSettings();
void loadWindowSettings();
duint getSelectionVa();
// Widget getters
CPUSideBar* getSidebarWidget();
CPUDisassembly* getDisasmWidget();
@ -42,12 +47,15 @@ public:
protected:
CPUSideBar* mSideBar;
CPUDisassembly* mDisas;
DisassemblerGraphView* mGraphView;
CPUMultiDump* mDump;
CPUStack* mStack;
CPURegistersView* mGeneralRegs;
CPUInfoBox* mInfo;
CPUArgumentWidget* mArgumentWidget;
bool disasMode;
private:
Ui::CPUWidget* ui;

View File

@ -202,11 +202,6 @@ MainWindow::MainWindow(QWidget* parent)
mHandlesView->setWindowTitle(tr("Handles"));
mHandlesView->setWindowIcon(DIcon("handles.png"));
// Graph view
mGraphView = new DisassemblerGraphView(this);
mGraphView->setWindowTitle(tr("Graph"));
mGraphView->setWindowIcon(DIcon("graph.png"));
// Trace view
mTraceWidget = new TraceWidget(this);
mTraceWidget->setWindowTitle(tr("Trace"));
@ -217,7 +212,6 @@ MainWindow::MainWindow(QWidget* parent)
// Add all widgets to the list
mWidgetList.push_back(WidgetInfo(mCpuWidget, "CPUTab"));
mWidgetList.push_back(WidgetInfo(mGraphView, "GraphTab"));
mWidgetList.push_back(WidgetInfo(mLogView, "LogTab"));
mWidgetList.push_back(WidgetInfo(mNotesManager, "NotesTab"));
mWidgetList.push_back(WidgetInfo(mBreakpointsView, "BreakpointsTab"));
@ -1066,6 +1060,7 @@ void MainWindow::updateWindowTitleSlot(QString filename)
void MainWindow::displayCpuWidget()
{
showQWidgetTab(mCpuWidget);
mCpuWidget->setDisasmFocus();
}
void MainWindow::displaySymbolWidget()
@ -1090,7 +1085,8 @@ void MainWindow::displayThreadsWidget()
void MainWindow::displayGraphWidget()
{
showQWidgetTab(mGraphView);
showQWidgetTab(mCpuWidget);
mCpuWidget->setGraphFocus();
}
void MainWindow::displayPreviousTab()
@ -1518,7 +1514,7 @@ void MainWindow::setNameMenu(int hMenu, QString name)
void MainWindow::runSelection()
{
if(DbgIsDebugging())
DbgCmdExec(("run " + ToPtrString(mGraphView->hasFocus() ? mGraphView->get_cursor_pos() : mCpuWidget->getDisasmWidget()->getSelectedVa())).toUtf8().constData());
DbgCmdExec(("run " + ToPtrString(mCpuWidget->getSelectionVa())).toUtf8().constData());
}
void MainWindow::runExpression()

View File

@ -29,7 +29,6 @@ class MainWindowCloseThread;
class TimeWastedCounter;
class NotesManager;
class SettingsDialog;
class DisassemblerGraphView;
class SimpleTraceDialog;
class MRUList;
class UpdateChecker;
@ -180,7 +179,6 @@ private:
CalculatorDialog* mCalculatorDialog;
HandlesView* mHandlesView;
NotesManager* mNotesManager;
DisassemblerGraphView* mGraphView;
TraceWidget* mTraceWidget;
SimpleTraceDialog* mSimpleTraceDialog;
UpdateChecker* mUpdateChecker;

View File

@ -736,13 +736,7 @@ void TraceBrowser::mousePressEvent(QMouseEvent* event)
setSingleSelection(index);
mHistory.addVaToHistory(index);
updateViewport();
if(mAutoDisassemblyFollowSelection)
followDisassemblySlot();
REGDUMP temp;
temp = mTraceFile->Registers(getInitialSelection());
emit updateTraceRegistersView(&temp);
selectionChanged();
return;
break;
@ -874,13 +868,22 @@ void TraceBrowser::keyPressEvent(QKeyEvent* event)
mHistory.addVaToHistory(visibleindex);
updateViewport();
if(mAutoDisassemblyFollowSelection)
followDisassemblySlot();
selectionChanged();
}
else
AbstractTableView::keyPressEvent(event);
}
void TraceBrowser::selectionChanged()
{
if(mAutoDisassemblyFollowSelection)
followDisassemblySlot();
REGDUMP temp;
temp = mTraceFile->Registers(getInitialSelection());
emit updateTraceRegistersView(&temp);
}
void TraceBrowser::tokenizerConfigUpdatedSlot()
{
mDisasm->UpdateConfig();
@ -1095,6 +1098,7 @@ void TraceBrowser::gotoNextSlot()
setSingleSelection(index);
makeVisible(index);
updateViewport();
selectionChanged();
}
}
@ -1106,6 +1110,7 @@ void TraceBrowser::gotoPreviousSlot()
setSingleSelection(index);
makeVisible(index);
updateViewport();
selectionChanged();
}
}

View File

@ -46,6 +46,7 @@ private:
void pushSelectionInto(bool copyBytes, QTextStream & stream, QTextStream* htmlStream = nullptr);
void copySelectionSlot(bool copyBytes);
void copySelectionToFileSlot(bool copyBytes);
void selectionChanged();
void contextMenuEvent(QContextMenuEvent* event) override;
void mousePressEvent(QMouseEvent* event) override;