forked from qt-creator/qt-creator
Debugger: Fix change-indication of registers.
Emit dataChanged() on changed values.
This commit is contained in:
@@ -34,7 +34,6 @@
|
||||
#include "registerhandler.h"
|
||||
#include "watchdelegatewidgets.h"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// RegisterHandler
|
||||
@@ -146,21 +145,44 @@ bool RegisterHandler::isEmpty() const
|
||||
return m_registers.isEmpty();
|
||||
}
|
||||
|
||||
// Compare register sets by name
|
||||
static inline bool compareRegisterSet(const Registers &r1, const Registers &r2)
|
||||
{
|
||||
if (r1.size() != r2.size())
|
||||
return false;
|
||||
const int size = r1.size();
|
||||
for (int r = 0; r < size; r++)
|
||||
if (r1.at(r).name != r2.at(r).name)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void RegisterHandler::setRegisters(const Registers ®isters)
|
||||
{
|
||||
m_registers = registers;
|
||||
const int size = m_registers.size();
|
||||
for (int r = 0; r < size; r++)
|
||||
m_registers[r].changed = false;
|
||||
calculateWidth();
|
||||
reset();
|
||||
}
|
||||
|
||||
void RegisterHandler::setAndMarkRegisters(const Registers ®isters)
|
||||
{
|
||||
const Registers old = m_registers;
|
||||
m_registers = registers;
|
||||
for (int i = qMin(m_registers.size(), old.size()); --i >= 0; )
|
||||
m_registers[i].changed = m_registers[i].value != old[i].value;
|
||||
calculateWidth();
|
||||
reset();
|
||||
if (!compareRegisterSet(m_registers, registers)) {
|
||||
setRegisters(registers);
|
||||
return;
|
||||
}
|
||||
const int size = m_registers.size();
|
||||
for (int r = 0; r < size; r++) {
|
||||
if (m_registers.at(r).value != registers.at(r).value) {
|
||||
// Indicate red if values change, keep changed.
|
||||
m_registers[r].changed = m_registers[r].changed || !m_registers.at(r).value.isEmpty();
|
||||
m_registers[r].value = registers.at(r).value;
|
||||
const QModelIndex regIndex = index(r, 1);
|
||||
emit dataChanged(regIndex, regIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Registers RegisterHandler::registers() const
|
||||
|
||||
Reference in New Issue
Block a user