18class QGraphicsSceneHoverEvent;
47 explicit IC(QGraphicsItem *parent =
nullptr);
65 void loadFile(
const QString &fileName,
const QString &contextDir = {});
68 void loadFromBlob(
const QByteArray &blob,
const QString &contextDir);
70 void loadFromDrop(
const QString &fileName,
const QString &contextDir)
override;
72 const QString &
file()
const {
return m_file; }
79 const QString &
blobName()
const override {
return m_blobName; }
81 bool isEmbedded()
const override {
return !m_blobName.isEmpty(); }
83 const QVector<GraphicElement *> &
internalElements()
const {
return m_internalElements; }
122 void paint(QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget)
override;
155 Q_DISABLE_COPY_MOVE(
IC)
161 bool isCursorOverPort(
const QPointF &localPos)
const;
165 void resetInternalState();
174 QByteArray m_loadedBlobSnapshot;
175 QVector<GraphicElement *> m_internalElements;
176 QVector<Connection *> m_internalConnections;
177 QVector<Port *> m_internalInputs;
178 QVector<Port *> m_internalOutputs;
182 QVector<GraphicElement *> m_sortedInternalElements;
183 QSet<GraphicElement *> m_boundaryInputElements;
184 bool m_internalHasFeedback =
false;
188 QPixmap m_previewPixmap;
Abstract base class for all graphical circuit elements.
Deserialization/serialization context structs passed through load()/save() call chains.
A bezier-curve wire connecting an output port to an input port in the scene.
GraphicElement(ElementType type, QGraphicsItem *parent=nullptr)
Constructs a graphic element of the given type, fetching all properties from the metadata registry.
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
const QVector< Port * > & internalInputs() const
const QVector< Port * > & internalOutputs() const
void resettleCombinational() override
void previewHideRequested()
void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override
void initializeSimulation()
Builds the internal simulation graph (connection graph + sort) for direct simulation.
friend class ICSimulation
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override
QString displayName() const
void loadFromBlob(const QByteArray &blob, const QString &contextDir)
Loads the IC from in-memory blob bytes (full .panda file format).
bool isEmbedded() const override
Returns true if this element is an embedded IC (not file-backed). Base returns false.
void previewRequested(IC *ic, const QPoint &screenPos)
void load(QDataStream &stream, SerializationContext &context) override
const QString & blobName() const override
Returns the blob name for embedded ICs, empty if file-backed.
const QPixmap & previewPixmap() const
void setBlobName(const QString &name)
friend class TestDanglingPointer
void save(QDataStream &stream, SerializationOptions options) const override
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override
QStringList externalFiles() const override
void loadFromDrop(const QString &fileName, const QString &contextDir) override
Polymorphic interface for drag-drop initialization (replaces elementType() == IC checks).
void previewMoved(IC *ic, const QPoint &screenPos)
const QVector< GraphicElement * > & internalElements() const
static PortMetadata buildPortMetadata(const QVector< GraphicElement * > &elements)
Scans elements for Input/Output groups, sorts by Y/X position, and builds labels.
void requestOpenSubCircuit(int elementId, const QString &blobName, const QString &filePath)
Emitted on double-click to request opening the sub-circuit in a new tab.
void updateLogic() override
const QString & file() const
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override
void previewCancelRequested(IC *ic)
QRectF boundingRect() const override
IC(QGraphicsItem *parent=nullptr)
Constructs an IC element without loading a file.
void loadFile(const QString &fileName, const QString &contextDir={})
Loads the IC circuit from fileName and rebuilds the logic mapping.
Bundles all per-deserialization state so that load() overrides receive it through one explicit parame...
Options passed to GraphicElement::save() (and friends); the save-side counterpart of SerializationCon...