118 lines
3.0 KiB
C++
118 lines
3.0 KiB
C++
#ifndef DOMAIN_DISPLAY_H
|
|
#define DOMAIN_DISPLAY_H
|
|
|
|
#include <QGraphicsItem>
|
|
#include <optional>
|
|
|
|
#include <ostream>
|
|
|
|
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);
|
|
|
|
void comdel(std::ostream &buffer, int x, int y);
|
|
|
|
};
|
|
|
|
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);
|
|
|
|
void comdel(std::ostream &buffer, int x, int y);
|
|
};
|
|
|
|
enum PinType {
|
|
IN, OUT, IN_OUT
|
|
};
|
|
enum PinOrientation {
|
|
LEFT, RIGHT, TOP, BOTTOM
|
|
};
|
|
enum BusOrientation {
|
|
VERTICAL, HORIZONTAL
|
|
};
|
|
|
|
class Bus {
|
|
public:
|
|
int x, y, w, h;
|
|
BusOrientation orientation;
|
|
|
|
Bus(int x, int y, int w, int h, BusOrientation orientation) : x(x), y(y), w(w), h(h),
|
|
orientation(orientation) {}
|
|
|
|
void render(QGraphicsItemGroup *group, int size);
|
|
|
|
int getDefaultSize();
|
|
|
|
void comdel(std::ostream &buffer, int x, int y, int size);
|
|
|
|
};
|
|
|
|
class Pin {
|
|
public:
|
|
PinOrientation orientation;
|
|
PinType pinType;
|
|
int x, y, w, h;
|
|
|
|
Pin(int x, int y, int w, int h, PinOrientation orientation, PinType pinType) : x(x), y(y), w(w), h(h),
|
|
orientation(orientation),
|
|
pinType(pinType) {}
|
|
|
|
public:
|
|
void render(QGraphicsItemGroup *group);
|
|
|
|
int getConnectionX();
|
|
int getConnectionY();
|
|
|
|
private:
|
|
void renderIn(QGraphicsItemGroup *group);
|
|
void renderOut(QGraphicsItemGroup *group);
|
|
void renderInOut(QGraphicsItemGroup *group);
|
|
};
|
|
|
|
|
|
class Item {
|
|
public:
|
|
Item() : rect(std::nullopt), line(std::nullopt), pin(std::nullopt), bus(std::nullopt) {}
|
|
|
|
std::optional<Rect> rect = std::nullopt;
|
|
std::optional<Line> line = std::nullopt;
|
|
std::optional<Pin> pin = std::nullopt;
|
|
std::optional<Bus> bus = std::nullopt;
|
|
|
|
void render(QGraphicsItemGroup *group, int size = 0);
|
|
void comdel(std::ostream &buffer, int x, int y, int size = 0);
|
|
};
|
|
|
|
}
|
|
|
|
class Display {
|
|
public:
|
|
|
|
Display(std::vector<ui::Item> items);
|
|
|
|
void render(QGraphicsItemGroup *group);
|
|
|
|
void comdel(std::ostream &buffer, int x, int y, int size = 0);
|
|
|
|
std::vector<ui::Item> &getItems() { return items; }
|
|
|
|
private:
|
|
std::vector<ui::Item> items;
|
|
};
|
|
|
|
} // namespace domain
|
|
|
|
#endif // DOMAIN_DISPLAY_H
|