aboutsummaryrefslogtreecommitdiff
path: root/qtmips_gui/coreview
diff options
context:
space:
mode:
Diffstat (limited to 'qtmips_gui/coreview')
-rw-r--r--qtmips_gui/coreview/registers.cpp1
-rw-r--r--qtmips_gui/coreview/value.cpp51
-rw-r--r--qtmips_gui/coreview/value.h30
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