Graph in CPU view
This commit is contained in:
parent
aa0863689d
commit
37d0729795
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue