diff options
Diffstat (limited to 'qtmips_gui/coreview')
-rw-r--r-- | qtmips_gui/coreview/registers.cpp | 1 | ||||
-rw-r--r-- | qtmips_gui/coreview/value.cpp | 51 | ||||
-rw-r--r-- | qtmips_gui/coreview/value.h | 30 |
3 files changed, 81 insertions, 1 deletions
diff --git a/qtmips_gui/coreview/registers.cpp b/qtmips_gui/coreview/registers.cpp index ba46f53..e4515c0 100644 --- a/qtmips_gui/coreview/registers.cpp +++ b/qtmips_gui/coreview/registers.cpp @@ -46,7 +46,6 @@ QRectF Registers::boundingRect() const { void Registers::paint(QPainter *painter, const QStyleOptionGraphicsItem *option __attribute((unused)), QWidget *widget __attribute((unused))) { painter->drawRect(0, 0, WIDTH, HEIGHT); - // TODO anything else? } void Registers::setPos(qreal x, qreal y) { diff --git a/qtmips_gui/coreview/value.cpp b/qtmips_gui/coreview/value.cpp new file mode 100644 index 0000000..557abfe --- /dev/null +++ b/qtmips_gui/coreview/value.cpp @@ -0,0 +1,51 @@ +#include "value.h" + +using namespace coreview; + +#define HEIGHT 8 +#define LETWIDTH 7 + +// TODO orientation +Value::Value(bool vertical, unsigned width, std::uint32_t init_val) : QGraphicsObject(nullptr) { + wid = width; + val = init_val; + this->vertical = vertical; +} + +QRectF Value::boundingRect() const { + if (vertical) + return QRectF(-LETWIDTH/2 - 1, -HEIGHT*(int)wid/2 - 1, LETWIDTH + 2, HEIGHT*wid + 2); + else + return QRectF(-(LETWIDTH*(int)wid)/2 - 1, -HEIGHT/2 - 1, LETWIDTH*wid + 2, HEIGHT + 2); +} + +void Value::paint(QPainter *painter, const QStyleOptionGraphicsItem *option __attribute__((unused)), QWidget *widget __attribute__((unused))){ + QFont f; + f.setPointSize(7); + painter->setFont(f); + + QRectF rect; + if (vertical) + rect = QRectF(-LETWIDTH/2 - 0.5, -(HEIGHT*(int)wid)/2 - 0.5, LETWIDTH + 1, HEIGHT*wid + 1); + else + rect = QRectF(-(LETWIDTH*(int)wid)/2 - 0.5, -HEIGHT/2 - 0.5, LETWIDTH*wid + 1, HEIGHT + 1); + painter->setBrush(QBrush(QColor(Qt::white))); + painter->setBackgroundMode(Qt::OpaqueMode); + painter->drawRect(rect); + painter->setBackgroundMode(Qt::TransparentMode); + QString str = QString("%1").arg(val, wid, 16, QChar('0')); + if (vertical) { + rect.setHeight(HEIGHT + 1); + for (unsigned i = 0; i < wid; i++) { + painter->drawText(rect, Qt::AlignCenter, QString(str[i])); + // TODO this is probably broken (it is offseted) + rect.setY(rect.y() + HEIGHT + 8); + } + } else + painter->drawText(rect, Qt::AlignCenter, str); +} + +void Value::value_update(std::uint32_t val) { + this->val = val; + update(); +} diff --git a/qtmips_gui/coreview/value.h b/qtmips_gui/coreview/value.h new file mode 100644 index 0000000..c454024 --- /dev/null +++ b/qtmips_gui/coreview/value.h @@ -0,0 +1,30 @@ +#ifndef VALUE_H +#define VALUE_H + +#include <QGraphicsObject> +#include <QPainter> + +namespace coreview { + +class Value : public QGraphicsObject { + Q_OBJECT +public: + Value(bool vertical = false, unsigned width = 8, unsigned init_val = 0); // width is for number of character to be shown from number + + QRectF boundingRect() const; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + +public slots: + void value_update(std::uint32_t); + +protected: + std::uint32_t val; + +private: + unsigned wid; + bool vertical; +}; + +} + +#endif // VALUE_H |