summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2021-05-18 04:08:58 -0400
committerGitHub <noreply@github.com>2021-05-18 04:08:58 -0400
commit736de8abf618fdd3846ec90fa3d51a71ed3d0a68 (patch)
tree97d91e13b7eda20819ebdcf55d28537ce3425d8a /Source/Core
parent93e9d8be86caa590701aa5dcd37ccd7296f980bb (diff)
parent07f68560e61af4599078b7c4058880dc16667370 (diff)
Merge pull request #9527 from sepalani/watch-items
WatchWidget: Add new/delete/clear toolbar items
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinQt/Debugger/WatchWidget.cpp53
-rw-r--r--Source/Core/DolphinQt/Debugger/WatchWidget.h7
2 files changed, 58 insertions, 2 deletions
diff --git a/Source/Core/DolphinQt/Debugger/WatchWidget.cpp b/Source/Core/DolphinQt/Debugger/WatchWidget.cpp
index 2853a9ddb4..ab57da0cb1 100644
--- a/Source/Core/DolphinQt/Debugger/WatchWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/WatchWidget.cpp
@@ -5,6 +5,7 @@
#include "DolphinQt/Debugger/WatchWidget.h"
#include <QHeaderView>
+#include <QInputDialog>
#include <QMenu>
#include <QTableWidget>
#include <QToolBar>
@@ -85,9 +86,15 @@ void WatchWidget::CreateWidgets()
m_table->setContextMenuPolicy(Qt::CustomContextMenu);
m_table->setSelectionMode(QAbstractItemView::SingleSelection);
+ m_new = m_toolbar->addAction(tr("New"), this, &WatchWidget::OnNewWatch);
+ m_delete = m_toolbar->addAction(tr("Delete"), this, &WatchWidget::OnDelete);
+ m_clear = m_toolbar->addAction(tr("Clear"), this, &WatchWidget::OnClear);
m_load = m_toolbar->addAction(tr("Load"), this, &WatchWidget::OnLoad);
m_save = m_toolbar->addAction(tr("Save"), this, &WatchWidget::OnSave);
+ m_new->setEnabled(false);
+ m_delete->setEnabled(false);
+ m_clear->setEnabled(false);
m_load->setEnabled(false);
m_save->setEnabled(false);
@@ -111,6 +118,10 @@ void WatchWidget::ConnectWidgets()
void WatchWidget::UpdateIcons()
{
+ // TODO: Create a "debugger_add_watch" icon
+ m_new->setIcon(Resources::GetScaledThemeIcon("debugger_add_breakpoint"));
+ m_delete->setIcon(Resources::GetScaledThemeIcon("debugger_delete"));
+ m_clear->setIcon(Resources::GetScaledThemeIcon("debugger_clear"));
m_load->setIcon(Resources::GetScaledThemeIcon("debugger_load"));
m_save->setIcon(Resources::GetScaledThemeIcon("debugger_save"));
}
@@ -120,8 +131,12 @@ void WatchWidget::UpdateButtonsEnabled()
if (!isVisible())
return;
- m_load->setEnabled(Core::IsRunning());
- m_save->setEnabled(Core::IsRunning());
+ const bool is_enabled = Core::IsRunning();
+ m_new->setEnabled(is_enabled);
+ m_delete->setEnabled(is_enabled);
+ m_clear->setEnabled(is_enabled);
+ m_load->setEnabled(is_enabled);
+ m_save->setEnabled(is_enabled);
}
void WatchWidget::Update()
@@ -216,6 +231,40 @@ void WatchWidget::showEvent(QShowEvent* event)
Update();
}
+void WatchWidget::OnDelete()
+{
+ if (m_table->selectedItems().empty())
+ return;
+
+ auto row_variant = m_table->selectedItems()[0]->data(Qt::UserRole);
+ if (row_variant.isNull())
+ return;
+
+ DeleteWatch(row_variant.toInt());
+}
+
+void WatchWidget::OnClear()
+{
+ PowerPC::debug_interface.ClearWatches();
+ Update();
+}
+
+void WatchWidget::OnNewWatch()
+{
+ QString text = QInputDialog::getText(this, tr("Input"), tr("Enter address to watch:"));
+ bool good;
+ uint address = text.toUInt(&good, 16);
+
+ if (!good)
+ {
+ ModalMessageBox::warning(this, tr("Error"), tr("Invalid watch address: %1").arg(text));
+ return;
+ }
+
+ const QString name = QStringLiteral("mem_%1").arg(address, 8, 16, QLatin1Char('0'));
+ AddWatch(name, address);
+}
+
void WatchWidget::OnLoad()
{
IniFile ini;
diff --git a/Source/Core/DolphinQt/Debugger/WatchWidget.h b/Source/Core/DolphinQt/Debugger/WatchWidget.h
index cea8343ec5..ee17e462a6 100644
--- a/Source/Core/DolphinQt/Debugger/WatchWidget.h
+++ b/Source/Core/DolphinQt/Debugger/WatchWidget.h
@@ -34,6 +34,10 @@ private:
void CreateWidgets();
void ConnectWidgets();
+ void OnDelete();
+ void OnClear();
+ void OnNewWatch();
+
void OnLoad();
void OnSave();
@@ -47,6 +51,9 @@ private:
void UpdateIcons();
+ QAction* m_new;
+ QAction* m_delete;
+ QAction* m_clear;
QAction* m_load;
QAction* m_save;
QToolBar* m_toolbar;