aboutsummaryrefslogtreecommitdiff
path: root/qtmips_gui/statictable.h
diff options
context:
space:
mode:
authorKarel Kočí <cynerd@email.cz>2018-01-23 15:36:48 +0100
committerKarel Kočí <cynerd@email.cz>2018-01-23 15:39:28 +0100
commitd35a19f9d3722468dc2bb4ec7449a0cee07b3b8c (patch)
tree3c3301650a504298697be25e4c77685da251e70f /qtmips_gui/statictable.h
parent2e657ea1ff3472d8a4f3706731e5533ba94f2d0d (diff)
downloadqtmips-d35a19f9d3722468dc2bb4ec7449a0cee07b3b8c.tar.gz
qtmips-d35a19f9d3722468dc2bb4ec7449a0cee07b3b8c.tar.bz2
qtmips-d35a19f9d3722468dc2bb4ec7449a0cee07b3b8c.zip
Better layout registers
This does dynamic layout of registers. This implemntation is just terrible. It works but it's almost unreadable. It's just too much code for such a small feature. But I can't be bothered to refactor it on top of hacking it.
Diffstat (limited to 'qtmips_gui/statictable.h')
-rw-r--r--qtmips_gui/statictable.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/qtmips_gui/statictable.h b/qtmips_gui/statictable.h
new file mode 100644
index 0000000..8248aa3
--- /dev/null
+++ b/qtmips_gui/statictable.h
@@ -0,0 +1,64 @@
+#ifndef STATICTABLE_H
+#define STATICTABLE_H
+
+#include <QWidget>
+#include <QLayout>
+#include <QList>
+#include <QVector>
+
+/*
+ * This implements new layout and widget in the same time.
+ * Basic idea is that we need some table view that can also fill in horizontal space.
+ * This widget paints simple table under neath the widgets and lays them out in to them.
+ * It shows more than one column when there is enought horizontal space.
+ */
+
+class StaticTableLayout : public QLayout {
+public:
+ StaticTableLayout(QWidget *parent, int margin = 4, int horizontal_big_spacing = 4, int horizontal_small_spacing = 8, int vertical_spacing = 4);
+ ~StaticTableLayout();
+
+ Qt::Orientations expandingDirections() const override;
+ bool hasHeightForWidth() const override;
+ int heightForWidth(int) const override;
+ QSize minimumSize() const override;
+ void setGeometry(const QRect &rect) override;
+ QSize sizeHint() const override;
+
+ void addItem(QLayoutItem *item) override;
+ QLayoutItem *itemAt(int index) const override;
+ QLayoutItem *takeAt(int index) override;
+ int count() const override; // This returns number of item blocks
+
+ void addRow(QList<QWidget*>); // This adds row of widgets
+
+ void itemRect(QRect &rect, QVector<int> &separators, int i); // This returns single item rectable (if expad_margin and it's on edge also count in margin)
+ int columns();
+
+protected:
+ int shspace, bhspace, vspace;
+ QVector<QVector<QLayoutItem*>> items;
+
+ int row_height;
+ QList<QList<int>> row_widths;
+
+ int layout_count_approx(const QRect &rect) const;
+ int layout_size(int &row_h, QList<QList<int>> &row_w, int count) const;
+ void layout_parms(QRect &rect, int &row_h, QList<QList<int>> &row_w, int &count) const;
+ void do_layout(const QRect &rect);
+ int layout_height(int width) const;
+};
+
+class StaticTable : public QWidget {
+public:
+ StaticTable(QWidget *parent = nullptr);
+
+ void addRow(QList<QWidget*>);
+
+protected:
+ void paintEvent(QPaintEvent*);
+
+ StaticTableLayout layout;
+};
+
+#endif // STATICTABLE_H