summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp')
-rw-r--r--Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp38
1 files changed, 30 insertions, 8 deletions
diff --git a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
index b9cff5549a..3ea99065e2 100644
--- a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
@@ -21,6 +21,7 @@
#include <QTableWidgetItem>
#include <QWheelEvent>
+#include "Common/GekkoDisassembler.h"
#include "Common/StringUtil.h"
#include "Core/Core.h"
#include "Core/Debugger/PPCDebugInterface.h"
@@ -140,7 +141,14 @@ CodeViewWidget::CodeViewWidget()
setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
verticalHeader()->hide();
- horizontalHeader()->hide();
+ horizontalHeader()->setSectionResizeMode(CODE_VIEW_COLUMN_BREAKPOINT, QHeaderView::Fixed);
+ horizontalHeader()->setStretchLastSection(true);
+ setHorizontalHeaderItem(CODE_VIEW_COLUMN_BREAKPOINT, new QTableWidgetItem());
+ setHorizontalHeaderItem(CODE_VIEW_COLUMN_ADDRESS, new QTableWidgetItem(tr("Address")));
+ setHorizontalHeaderItem(CODE_VIEW_COLUMN_INSTRUCTION, new QTableWidgetItem(tr("Instr.")));
+ setHorizontalHeaderItem(CODE_VIEW_COLUMN_PARAMETERS, new QTableWidgetItem(tr("Parameters")));
+ setHorizontalHeaderItem(CODE_VIEW_COLUMN_DESCRIPTION, new QTableWidgetItem(tr("Symbols")));
+ setHorizontalHeaderItem(CODE_VIEW_COLUMN_BRANCH_ARROWS, new QTableWidgetItem(tr("Branches")));
setFont(Settings::Instance().GetDebugFont());
setItemDelegateForColumn(CODE_VIEW_COLUMN_BRANCH_ARROWS, new BranchDisplayDelegate(this));
@@ -177,11 +185,32 @@ static u32 GetBranchFromAddress(u32 addr)
void CodeViewWidget::FontBasedSizing()
{
+ // just text width is too small with some fonts, so increase by a bit
+ constexpr int extra_text_width = 8;
+
const QFontMetrics fm(Settings::Instance().GetDebugFont());
const int rowh = fm.height() + 1;
verticalHeader()->setMaximumSectionSize(rowh);
horizontalHeader()->setMinimumSectionSize(rowh + 5);
setColumnWidth(CODE_VIEW_COLUMN_BREAKPOINT, rowh + 5);
+ setColumnWidth(CODE_VIEW_COLUMN_ADDRESS, fm.width(QStringLiteral("80000000")) + extra_text_width);
+
+ // The longest instruction is technically 'ps_merge00' (0x10000420u), but those instructions are
+ // very rare and would needlessly increase the column size, so let's go with 'rlwinm.' instead.
+ // Similarly, the longest parameter set is 'rtoc, rtoc, r10, 10, 10 (00000800)' (0x5c425294u),
+ // but one is unlikely to encounter that in practice, so let's use a slightly more reasonable
+ // 'r31, r31, 16, 16, 31 (ffff0000)'. The user can resize the columns as necessary anyway.
+ const std::string disas = Common::GekkoDisassembler::Disassemble(0x57ff843fu, 0);
+ const auto split = disas.find('\t');
+ const std::string ins = (split == std::string::npos ? disas : disas.substr(0, split));
+ const std::string param = (split == std::string::npos ? "" : disas.substr(split + 1));
+ setColumnWidth(CODE_VIEW_COLUMN_INSTRUCTION,
+ fm.width(QString::fromStdString(ins)) + extra_text_width);
+ setColumnWidth(CODE_VIEW_COLUMN_PARAMETERS,
+ fm.width(QString::fromStdString(param)) + extra_text_width);
+ setColumnWidth(CODE_VIEW_COLUMN_DESCRIPTION,
+ fm.width(QStringLiteral("0")) * 25 + extra_text_width);
+
Update();
}
@@ -322,13 +351,6 @@ void CodeViewWidget::Update()
CalculateBranchIndentation();
- u32 max_indent = 0;
- for (const CodeViewBranch& branch : m_branches)
- max_indent = std::max(max_indent, branch.indentation);
-
- resizeColumnsToContents();
- setColumnWidth(CODE_VIEW_COLUMN_BRANCH_ARROWS,
- static_cast<int>(WIDTH_PER_BRANCH_ARROW * (max_indent + 1)));
g_symbolDB.FillInCallers();
repaint();