Qt: Display 'First Value' in memory scanner

This commit is contained in:
Stenzek
2025-07-30 21:08:38 +10:00
parent a9ce005a20
commit fef553ff12
5 changed files with 42 additions and 24 deletions

View File

@@ -77,6 +77,7 @@ void MemoryScan::SearchBytes()
res.address = address;
res.value = m_signed ? SignExtend32(bvalue) : ZeroExtend32(bvalue);
res.last_value = res.value;
res.first_value = res.value;
res.value_changed = false;
if (res.Filter(m_operator, m_value, m_signed))
@@ -99,6 +100,7 @@ void MemoryScan::SearchHalfwords()
res.address = address;
res.value = m_signed ? SignExtend32(bvalue) : ZeroExtend32(bvalue);
res.last_value = res.value;
res.first_value = res.value;
res.value_changed = false;
if (res.Filter(m_operator, m_value, m_signed))
@@ -121,6 +123,7 @@ void MemoryScan::SearchWords()
res.address = address;
res.value = bvalue;
res.last_value = res.value;
res.first_value = res.value;
res.value_changed = false;
if (res.Filter(m_operator, m_value, m_signed))

View File

@@ -38,6 +38,7 @@ public:
PhysicalMemoryAddress address;
u32 value;
u32 last_value;
u32 first_value;
bool value_changed;
bool Filter(Operator op, u32 comp_value, bool is_signed) const;

View File

@@ -227,7 +227,7 @@ void MemoryScannerWindow::resizeEvent(QResizeEvent* event)
void MemoryScannerWindow::resizeColumns()
{
QtUtils::ResizeColumnsForTableView(m_ui.scanTable, {-1, 130, 130});
QtUtils::ResizeColumnsForTableView(m_ui.scanTable, {-1, 100, 100, 100});
QtUtils::ResizeColumnsForTableView(m_ui.watchTable, {-1, 100, 100, 100, 40});
}
@@ -484,6 +484,26 @@ void MemoryScannerWindow::updateScanValue()
m_scanner.SetValue(uint_value);
}
QTableWidgetItem* MemoryScannerWindow::createValueItem(MemoryAccessSize size, u32 value, bool is_signed,
bool editable) const
{
QTableWidgetItem* item;
if (m_ui.scanValueBase->currentIndex() == 0)
item = new QTableWidgetItem(formatValue(value, is_signed));
else if (m_scanner.GetSize() == MemoryAccessSize::Byte)
item = new QTableWidgetItem(formatHexValue(value, 2));
else if (m_scanner.GetSize() == MemoryAccessSize::HalfWord)
item = new QTableWidgetItem(formatHexValue(value, 4));
else
item = new QTableWidgetItem(formatHexValue(value, 8));
if (!editable)
item->setFlags(item->flags() & ~(Qt::ItemIsEditable));
item->setTextAlignment(Qt::AlignCenter | Qt::AlignHCenter);
return item;
}
void MemoryScannerWindow::updateResults()
{
QSignalBlocker sb(m_ui.scanTable);
@@ -500,31 +520,15 @@ void MemoryScannerWindow::updateResults()
QTableWidgetItem* address_item = new QTableWidgetItem(formatHexValue(res.address, 8));
address_item->setFlags(address_item->flags() & ~(Qt::ItemIsEditable));
address_item->setTextAlignment(Qt::AlignCenter | Qt::AlignHCenter);
m_ui.scanTable->setItem(row, 0, address_item);
QTableWidgetItem* value_item;
if (m_ui.scanValueBase->currentIndex() == 0)
value_item = new QTableWidgetItem(formatValue(res.value, m_scanner.GetValueSigned()));
else if (m_scanner.GetSize() == MemoryAccessSize::Byte)
value_item = new QTableWidgetItem(formatHexValue(res.value, 2));
else if (m_scanner.GetSize() == MemoryAccessSize::HalfWord)
value_item = new QTableWidgetItem(formatHexValue(res.value, 4));
else
value_item = new QTableWidgetItem(formatHexValue(res.value, 8));
m_ui.scanTable->setItem(row, 1, value_item);
m_ui.scanTable->setItem(row, 1, createValueItem(m_scanner.GetSize(), res.value, m_scanner.GetValueSigned(), true));
m_ui.scanTable->setItem(row, 2,
createValueItem(m_scanner.GetSize(), res.last_value, m_scanner.GetValueSigned(), false));
m_ui.scanTable->setItem(row, 3,
createValueItem(m_scanner.GetSize(), res.first_value, m_scanner.GetValueSigned(), false));
QTableWidgetItem* previous_item;
if (m_ui.scanValueBase->currentIndex() == 0)
previous_item = new QTableWidgetItem(formatValue(res.last_value, m_scanner.GetValueSigned()));
else if (m_scanner.GetSize() == MemoryAccessSize::Byte)
previous_item = new QTableWidgetItem(formatHexValue(res.last_value, 2));
else if (m_scanner.GetSize() == MemoryAccessSize::HalfWord)
previous_item = new QTableWidgetItem(formatHexValue(res.last_value, 4));
else
previous_item = new QTableWidgetItem(formatHexValue(res.last_value, 8));
previous_item->setFlags(address_item->flags() & ~(Qt::ItemIsEditable));
m_ui.scanTable->setItem(row, 2, previous_item);
row++;
}

View File

@@ -70,6 +70,8 @@ private:
int getSelectedWatchIndexFirst() const;
int getSelectedWatchIndexLast() const;
QTableWidgetItem* createValueItem(MemoryAccessSize size, u32 value, bool is_signed, bool editable) const;
Ui::MemoryScannerWindow m_ui;
MemoryScan m_scanner;

View File

@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>833</width>
<width>850</width>
<height>610</height>
</rect>
</property>
@@ -41,6 +41,9 @@
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarPolicy::ScrollBarAlwaysOn</enum>
</property>
<column>
<property name="text">
<string>Address</string>
@@ -56,6 +59,11 @@
<string>Previous Value</string>
</property>
</column>
<column>
<property name="text">
<string>First Value</string>
</property>
</column>
</widget>
</item>
<item row="0" column="1">