From 506174a8266eb9842ff9e50a89ddf86cb975be30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Mon, 8 Jan 2018 21:43:58 +0100 Subject: Add coreview progress --- qtmips_gui/coreview/memory.cpp | 124 ++++++++++++++++++++++++++++++----------- 1 file changed, 90 insertions(+), 34 deletions(-) (limited to 'qtmips_gui/coreview/memory.cpp') diff --git a/qtmips_gui/coreview/memory.cpp b/qtmips_gui/coreview/memory.cpp index c732687..13355db 100644 --- a/qtmips_gui/coreview/memory.cpp +++ b/qtmips_gui/coreview/memory.cpp @@ -1,63 +1,119 @@ #include "memory.h" +#include using namespace coreview; ////////////////////// -#define WIDTH 80 -#define HEIGHT 100 +#define WIDTH 680 +#define HEIGHT 30 #define PENW 1 ////////////////////// Memory::Memory(machine::QtMipsMachine *machine) : QGraphicsObject(nullptr) { -#define CON_INIT(X) do { \ - X.in = new Connector(); \ - X.out = new Connector(); \ - X.read = new Connector(); \ - X.write = new Connector(); \ - } while(false) - CON_INIT(con_program); - CON_INIT(con_data); -#undef CON_INIT - // TODO cache? + con_pc = new Connector(M_PI_2); + con_inst = new Connector(M_PI_2); + con_address = new Connector(M_PI_2); + con_data_in = new Connector(M_PI_2); + con_data_out = new Connector(M_PI_2); + con_req_write = new Connector(M_PI_2); + con_req_read = new Connector(M_PI_2); + + if (machine->config().cache()) { + // TODO cache? + } + + name = new QGraphicsSimpleTextItem("Memory", this); + QRectF name_box = name->boundingRect(); + name->setPos(WIDTH/2 - name_box.width()/2, HEIGHT/2 - name_box.height()/2); + + // TODO add labels for connections + + QFont font; + font.setPointSize(7); + + // TODO better placement + name_program = new QGraphicsSimpleTextItem("Program", this); + name_box = name_program->boundingRect(); + name_program->setPos(1, HEIGHT - 1 - name_box.height()); + name_program->setFont(font); + + name_data = new QGraphicsSimpleTextItem("Data", this); + name_box = name_data->boundingRect(); + name_data->setPos(WIDTH - 1 - name_box.width(), HEIGHT - 1 - name_box.height()); + name_data->setFont(font); + + setPos(x(), y()); // set connector's position +} + +Memory::~Memory() { + delete con_pc; + delete con_inst; + delete con_address; + delete con_data_out; + delete con_data_in; + delete con_req_write; + delete con_req_read; + + delete name; + delete name_program; + delete name_data; } QRectF Memory::boundingRect() const { - // TODO + return QRectF(-PENW / 2, -PENW / 2, WIDTH + PENW, HEIGHT + PENW); } void Memory::paint(QPainter *painter, const QStyleOptionGraphicsItem *option __attribute__((unused)), QWidget *widget __attribute__((unused))) { - // TODO + painter->drawRect(0, 0, WIDTH, HEIGHT); + // TODO cache } void Memory::setPos(qreal x, qreal y) { QGraphicsObject::setPos(x, y); - // TODO con + + con_pc->setPos(x + 30, y); + con_inst->setPos(x + 40, y); + + con_address->setPos(x + WIDTH - 70, y); + con_data_in->setPos(x + WIDTH - 60, y); + con_req_write->setPos(x + WIDTH- 50, y); + con_req_read->setPos(x + WIDTH - 40, y); + con_data_out->setPos(x + WIDTH - 30, y); } -const Connector *Memory::connector_in(bool program) const { - if (program) - return con_program.in; - else - return con_data.in; +const Connector *Memory::connector_pc() const { + return con_pc; } -const Connector *Memory::connector_out(bool program) const { - if (program) - return con_program.out; - else - return con_data.out; +const Connector *Memory::connector_inst() const { + return con_inst; } -const Connector *Memory::connector_read(bool program) const { - if (program) - return con_program.read; - else - return con_data.read; +const Connector *Memory::connector_address() const { + return con_address; +} + +const Connector *Memory::connector_data_out() const { + return con_data_out; +} + +const Connector *Memory::connector_data_in() const { + return con_data_in; +} + +const Connector *Memory::connector_req_write() const { + return con_req_write; } -const Connector *Memory::connector_write(bool program) const { - if (program) - return con_program.write; +const Connector *Memory::connector_req_read() const { + return con_req_read; +} + +void Memory::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) { + QGraphicsObject::mouseDoubleClickEvent(event); + + if (event->pos().x() < WIDTH/2) + emit open_program_mem(); else - return con_data.write; + emit open_data_mem(); } -- cgit v1.2.3