#ifndef DOMAIN_DISPLAY_H #define DOMAIN_DISPLAY_H #include #include namespace domain { namespace ui { class Rect { public: int x, y, w, h; Rect(int x, int y, int w, int h): x(x), y(y), w(w), h(h) {} void render(QGraphicsItemGroup *group) { group->addToGroup(new QGraphicsRectItem(x,y,w,h)); } }; class Line { public: int x1, y1, x2, y2; Line(int x1, int y1, int x2, int y2): x1(x1), y1(y1), x2(x2), y2(y2) {} void render(QGraphicsItemGroup *group) { group->addToGroup(new QGraphicsLineItem(x1, y1, x2, y2)); } }; enum Orientation { LEFT, RIGHT, TOP, BOTTOM }; enum PinType { IN, OUT, IN_OUT }; class Pin { public: Orientation orientation; PinType pinType; int x, y, w, h; Pin(int x, int y, int w, int h): x(x), y(y), w(w), h(h) {} void render(QGraphicsItemGroup *group) { group->addToGroup(new QGraphicsRectItem(x,y,w,h)); } }; class Item { public: Item(): rect(std::nullopt), line(std::nullopt), pin(std::nullopt) {} void render(QGraphicsItemGroup *group) { if(rect) rect->render(group); if(line) line->render(group); if(pin) pin->render(group); } std::optional rect = std::nullopt; std::optional line = std::nullopt; std::optional pin = std::nullopt; }; } class Display { public: Display(std::vector items); void render(QGraphicsItemGroup *group) { for(auto &item: items) { item.render(group); } } private: std::vector items; }; } // namespace domain #endif // DOMAIN_DISPLAY_H