mirror of
https://github.com/stenzek/duckstation.git
synced 2026-02-10 08:24:32 +00:00
Qt: Display 'First Value' in memory scanner
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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++;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user