summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@innovatetechnologi.es>2019-05-11 18:00:28 +0200
committerGitHub <noreply@github.com>2019-05-11 18:00:28 +0200
commit3bcee22f1747dad534e8e3095c604ad172591d39 (patch)
treed9279e2fd58fe9554841c86098ed99b065ad0863 /Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
parenta0a0a688018a470f702361e56e37bde44a96afca (diff)
parent86d1e6cd7eb0866cbeef63c3a5c339c9f51ce011 (diff)
Merge pull request #7697 from TryTwo/Debugger_UI_CodeView_Font_Based_Sizing
Qt/Debugger: Improve Code View
Diffstat (limited to 'Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp')
-rw-r--r--Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp48
1 files changed, 33 insertions, 15 deletions
diff --git a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
index 71518a2dda..2427101cb7 100644
--- a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
@@ -45,23 +45,21 @@ CodeViewWidget::CodeViewWidget()
setSelectionBehavior(QAbstractItemView::SelectRows);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-
- for (int i = 0; i < columnCount(); i++)
- {
- horizontalHeader()->setSectionResizeMode(i, QHeaderView::Fixed);
- }
+ setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
verticalHeader()->hide();
horizontalHeader()->hide();
- horizontalHeader()->setStretchLastSection(true);
setFont(Settings::Instance().GetDebugFont());
- Update();
+ FontBasedSizing();
connect(this, &CodeViewWidget::customContextMenuRequested, this, &CodeViewWidget::OnContextMenu);
connect(this, &CodeViewWidget::itemSelectionChanged, this, &CodeViewWidget::OnSelectionChanged);
connect(&Settings::Instance(), &Settings::DebugFontChanged, this, &QWidget::setFont);
+ connect(&Settings::Instance(), &Settings::DebugFontChanged, this,
+ &CodeViewWidget::FontBasedSizing);
+
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this] {
m_address = PC;
Update();
@@ -82,6 +80,16 @@ static u32 GetBranchFromAddress(u32 addr)
return std::stoul(hex, nullptr, 16);
}
+void CodeViewWidget::FontBasedSizing()
+{
+ const QFontMetrics fm(Settings::Instance().GetDebugFont());
+ const int rowh = fm.height() + 1;
+ verticalHeader()->setMaximumSectionSize(rowh);
+ horizontalHeader()->setMinimumSectionSize(rowh + 5);
+ setColumnWidth(0, rowh + 5);
+ Update();
+}
+
void CodeViewWidget::Update()
{
if (m_updating)
@@ -98,8 +106,11 @@ void CodeViewWidget::Update()
setRowCount(rows);
+ const QFontMetrics fm(Settings::Instance().GetDebugFont());
+ const int rowh = fm.height() + 1;
+
for (int i = 0; i < rows; i++)
- setRowHeight(i, 24);
+ setRowHeight(i, rowh);
u32 pc = PowerPC::ppcState.pc;
@@ -122,9 +133,17 @@ void CodeViewWidget::Update()
std::string param = (split == std::string::npos ? "" : disas.substr(split + 1));
std::string desc = PowerPC::debug_interface.GetDescription(addr);
- auto* ins_item = new QTableWidgetItem(QString::fromStdString(ins));
- auto* param_item = new QTableWidgetItem(QString::fromStdString(param));
- auto* description_item = new QTableWidgetItem(QString::fromStdString(desc));
+ // Adds whitespace and a minimum size to ins and param. Helps to prevent frequent resizing while
+ // scrolling.
+ const QString ins_formatted =
+ QStringLiteral("%1").arg(QString::fromStdString(ins), -7, QLatin1Char(' '));
+ const QString param_formatted =
+ QStringLiteral("%1").arg(QString::fromStdString(param), -19, QLatin1Char(' '));
+ const QString desc_formatted = QStringLiteral("%1 ").arg(QString::fromStdString(desc));
+
+ auto* ins_item = new QTableWidgetItem(ins_formatted);
+ auto* param_item = new QTableWidgetItem(param_formatted);
+ auto* description_item = new QTableWidgetItem(desc_formatted);
for (auto* item : {bp_item, addr_item, ins_item, param_item, description_item})
{
@@ -162,8 +181,9 @@ void CodeViewWidget::Update()
if (PowerPC::debug_interface.IsBreakpoint(addr))
{
- bp_item->setData(Qt::DecorationRole,
- Resources::GetScaledThemeIcon("debugger_breakpoint").pixmap(QSize(24, 24)));
+ bp_item->setData(
+ Qt::DecorationRole,
+ Resources::GetScaledThemeIcon("debugger_breakpoint").pixmap(QSize(rowh - 2, rowh - 2)));
}
setItem(i, 0, bp_item);
@@ -179,8 +199,6 @@ void CodeViewWidget::Update()
}
resizeColumnsToContents();
- setColumnWidth(0, 24 + 5);
-
g_symbolDB.FillInCallers();
repaint();