diff options
Diffstat (limited to 'qtmips_gui')
-rw-r--r-- | qtmips_gui/coreview/instructionview.cpp | 13 | ||||
-rw-r--r-- | qtmips_gui/coreview/instructionview.h | 4 |
2 files changed, 13 insertions, 4 deletions
diff --git a/qtmips_gui/coreview/instructionview.cpp b/qtmips_gui/coreview/instructionview.cpp index d989b7b..495edfb 100644 --- a/qtmips_gui/coreview/instructionview.cpp +++ b/qtmips_gui/coreview/instructionview.cpp @@ -52,7 +52,8 @@ InstructionView::InstructionView() : QGraphicsObject(nullptr), text(this) { f.setPointSize(6); text.setFont(f); - instruction_update(machine::Instruction(), 0); // Initialize to NOP + // Initialize to NOP + instruction_update(machine::Instruction(), 0, machine::EXCAUSE_NONE); } QRectF InstructionView::boundingRect() const { @@ -61,13 +62,19 @@ QRectF InstructionView::boundingRect() const { void InstructionView::paint(QPainter *painter, const QStyleOptionGraphicsItem *option __attribute__((unused)), QWidget *widget __attribute__((unused))) { painter->setPen(QPen(QColor(240, 240, 240))); - painter->setBrush(QBrush(QColor(240, 240, 240))); + if (excause == machine::EXCAUSE_NONE) + painter->setBrush(QBrush(QColor(240, 240, 240))); + else + painter->setBrush(QBrush(QColor(255, 100, 100))); painter->drawRoundRect(-WIDTH/2, 0, WIDTH, HEIGHT, ROUND, ROUND); } -void InstructionView::instruction_update(const machine::Instruction &i, std::uint32_t inst_addr) { +void InstructionView::instruction_update(const machine::Instruction &i, + std::uint32_t inst_addr, machine::ExceptionCause excause) { + QRectF prev_box = boundingRect(); text.setText(i.to_str(inst_addr)); + this->excause = excause; QRectF box = text.boundingRect(); text.setPos(-box.width()/2, GAP); update(prev_box.united(boundingRect())); diff --git a/qtmips_gui/coreview/instructionview.h b/qtmips_gui/coreview/instructionview.h index 8c63fc1..6e39bdd 100644 --- a/qtmips_gui/coreview/instructionview.h +++ b/qtmips_gui/coreview/instructionview.h @@ -51,10 +51,12 @@ public: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); public slots: - void instruction_update(const machine::Instruction &i, std::uint32_t inst_addr); + void instruction_update(const machine::Instruction &i, std::uint32_t inst_addr, + machine::ExceptionCause excause); private: QGraphicsSimpleTextItem text; + machine::ExceptionCause excause; }; } |