#ifndef DISPLAY_COMPONENT_H #define DISPLAY_COMPONENT_H #include #include #include namespace display { /* class ComponentItem: public QGraphicsItemGroup { public: ComponentItem(domain::ComponentInstance *instance, QGraphicsItem *parent); void redraw(); void clear(); private: domain::ComponentInstance *componentInstance; public: void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; }; class PinItem: public QGraphicsItemGroup { public: PinItem(domain::Pin pin, QGraphicsItem *parent); void redraw(); void clear(); private: domain::Pin pin; }; class ComponentWrapper: public QGraphicsItemGroup { public: static ComponentWrapper *ofComponent(domain::ComponentInstance *instance); static ComponentWrapper *ofBus(domain::BusInstance *instance); static ComponentWrapper *ofWire(domain::WireInstance *wire); ComponentWrapper() { this->setHandlesChildEvents(false); } void redraw(); void clear(); QVariant itemChange( GraphicsItemChange change, const QVariant &value ) override { auto response = QGraphicsItem::itemChange(change, value); if (change == ItemPositionChange){ if(componentInstance != nullptr) { componentInstance->position.first = (int)scenePos().x(); componentInstance->position.second = (int)scenePos().y(); } else if(busInstance != nullptr) { busInstance->position.first = (int)scenePos().x(); busInstance->position.second = (int)scenePos().y(); } } return response; } private: domain::ComponentInstance *componentInstance = nullptr; domain::BusInstance *busInstance = nullptr; domain::WireInstance *wireInstance = nullptr; ComponentItem *componentItem; std::vector pinItems; }; */ class Pin: public QGraphicsItemGroup { private: domain::Pin pin; public: Pin(domain::Pin pin): pin(pin) { pin.getDisplay().render(this); } }; class Component: public QGraphicsItemGroup { private: std::shared_ptr instance; public: Component(const std::shared_ptr& instance): instance(instance) { instance->component.getDisplay().render(this); } void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; }; class Bus: public QGraphicsItemGroup { public: Bus(const std::shared_ptr& instance) { instance->bus.getDisplay()->render(this); } void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; }; class ComponentGroup: public QGraphicsItemGroup { private: std::shared_ptr componentInstance; public: explicit ComponentGroup(const std::shared_ptr& instance): componentInstance(instance) { setFlag(ItemIsMovable, true); setHandlesChildEvents(false); addToGroup(new display::Component(instance)); for(auto &pin: instance->component.getPins()) { addToGroup(new display::Pin(pin)); } setPos(instance->position.first, instance->position.second); } }; class BusGroup: public QGraphicsItemGroup { private: std::shared_ptr busInstance; public: explicit BusGroup(const std::shared_ptr& instance): busInstance(instance) { setFlag(ItemIsMovable, true); setHandlesChildEvents(false); addToGroup(new display::Bus(instance)); setPos(instance->position.first, instance->position.second); } }; } // namespace display #endif // DISPLAY_COMPONENT_H