From d35a19f9d3722468dc2bb4ec7449a0cee07b3b8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Tue, 23 Jan 2018 15:36:48 +0100 Subject: 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. --- qtmips_gui/statictable.h | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 qtmips_gui/statictable.h (limited to 'qtmips_gui/statictable.h') 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 +#include +#include +#include + +/* + * 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); // This adds row of widgets + + void itemRect(QRect &rect, QVector &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> items; + + int row_height; + QList> row_widths; + + int layout_count_approx(const QRect &rect) const; + int layout_size(int &row_h, QList> &row_w, int count) const; + void layout_parms(QRect &rect, int &row_h, QList> &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); + +protected: + void paintEvent(QPaintEvent*); + + StaticTableLayout layout; +}; + +#endif // STATICTABLE_H -- cgit v1.2.3