#ifndef DOMAIN_DISPLAY_H #define DOMAIN_DISPLAY_H #include #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)); } void comdel(std::ostream &buffer, int x, int y, int size) { buffer << "\t\trectangle {\n"; buffer << "\t\t\tx: " << (this->x + x) << "; y: " << (this->y + y) << ";\n"; buffer << "\t\t\tw: " << w << "; h: " << h << ";\n"; buffer << "\t\t}\n\n"; } }; 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)); } void comdel(std::ostream &buffer, int x, int y, int size) { buffer << "\t\tline {\n"; buffer << "\t\t\tx1: " << (x1 + x) << "; y1: " << (y1 + y) << ";\n"; buffer << "\t\t\tx2: " << (x2 + x) << "; y2: " << (y2 + y) << ";\n"; buffer << "\t\t}\n\n"; } }; 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; void comdel(std::ostream &buffer, int x, int y, int size) { if(rect) rect->comdel(buffer, x, y, size); if(line) line->comdel(buffer, x, y, size); } }; } class Display { public: Display(std::vector items); void render(QGraphicsItemGroup *group) { for(auto &item: items) { item.render(group); } } void comdel(std::ostream &buffer, int x, int y, int size) { for(auto &item: items) { item.comdel(buffer, x, y, size); } } private: std::vector items; }; } // namespace domain #endif // DOMAIN_DISPLAY_H