diff options
Diffstat (limited to 'qtmips_gui/cop0dock.cpp')
-rw-r--r-- | qtmips_gui/cop0dock.cpp | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/qtmips_gui/cop0dock.cpp b/qtmips_gui/cop0dock.cpp index 1070444..9e35d6b 100644 --- a/qtmips_gui/cop0dock.cpp +++ b/qtmips_gui/cop0dock.cpp @@ -50,14 +50,24 @@ Cop0Dock::Cop0Dock(QWidget *parent) : QDockWidget(parent) { } while(false) cop0reg[0] = nullptr; - for (int i = 1; i < machine::Cop0State::COP0REGS_CNT; i++) + for (int i = 1; i < machine::Cop0State::COP0REGS_CNT; i++) { INIT(cop0reg[i], machine::Cop0State::cop0reg_name((machine::Cop0State::Cop0Registers)i)); + cop0reg_highlighted[i] = false; + } #undef INIT scrollarea->setWidget(widg); setWidget(scrollarea); setObjectName("Coprocessor0"); setWindowTitle("Coprocessor0"); + + pal_normal = QPalette(cop0reg[1]->palette()); + pal_updated = QPalette(cop0reg[1]->palette()); + pal_read = QPalette(cop0reg[1]->palette()); + pal_normal.setColor(QPalette::WindowText, QColor(0, 0, 0)); + pal_updated.setColor(QPalette::WindowText, QColor(240, 0, 0)); + pal_read.setColor(QPalette::WindowText, QColor(0, 0, 240)); + cop0reg_highlighted_any = false; } Cop0Dock::~Cop0Dock() { @@ -76,11 +86,15 @@ void Cop0Dock::setup(machine::QtMipsMachine *machine) { } const machine::Cop0State *cop0state = machine->cop0state(); - connect(cop0state, &machine::Cop0State::cop0reg_update, - this, &Cop0Dock::cop0reg_changed); for (int i = 1; i < machine::Cop0State::COP0REGS_CNT; i++) labelVal(cop0reg[i], cop0state->read_cop0reg((machine::Cop0State::Cop0Registers)i)); + + connect(cop0state, &machine::Cop0State::cop0reg_update, + this, &Cop0Dock::cop0reg_changed); + connect(cop0state, &machine::Cop0State::cop0reg_read, + this, &Cop0Dock::cop0reg_read); + connect(machine, SIGNAL(tick()), this, SLOT(clear_highlights())); } void Cop0Dock::cop0reg_changed(enum machine::Cop0State::Cop0Registers reg, std::uint32_t val) { @@ -88,6 +102,32 @@ void Cop0Dock::cop0reg_changed(enum machine::Cop0State::Cop0Registers reg, std:: QString("Cop0Dock received signal with invalid cop0 register: ") + QString::number((uint)reg)); labelVal(cop0reg[(uint)reg], val); + cop0reg[reg]->setPalette(pal_updated); + cop0reg_highlighted[reg] = true; + cop0reg_highlighted_any = true; +} + +void Cop0Dock::cop0reg_read(enum machine::Cop0State::Cop0Registers reg, std::uint32_t val) { + (void)val; + SANITY_ASSERT((uint)reg < machine::Cop0State::COP0REGS_CNT && (uint)reg, + QString("Cop0Dock received signal with invalid cop0 register: ") + + QString::number((uint)reg)); + if (!cop0reg_highlighted[reg]) + cop0reg[reg]->setPalette(pal_read); + cop0reg_highlighted[reg] = true; + cop0reg_highlighted_any = true; +} + +void Cop0Dock::clear_highlights() { + if (!cop0reg_highlighted_any) + return; + for (int i = 1; i < machine::Cop0State::COP0REGS_CNT; i++) { + if (cop0reg_highlighted[i]) { + cop0reg[i]->setPalette(pal_normal); + cop0reg_highlighted[i] = false; + } + } + cop0reg_highlighted_any = false; } void Cop0Dock::labelVal(QLabel *label, std::uint32_t value) { |