18class QGraphicsSceneHoverEvent;
48 explicit IC(QGraphicsItem *parent =
nullptr);
66 void loadFile(
const QString &fileName,
const QString &contextDir = {});
69 void loadFromBlob(
const QByteArray &blob,
const QString &contextDir);
71 void loadFromDrop(
const QString &fileName,
const QString &contextDir)
override;
73 const QString &
file()
const {
return m_file; }
80 const QString &
blobName()
const override {
return m_blobName; }
82 bool isEmbedded()
const override {
return !m_blobName.isEmpty(); }
84 const QVector<GraphicElement *> &
internalElements()
const {
return m_internalElements; }
128 void paint(QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget)
override;
161 Q_DISABLE_COPY_MOVE(
IC)
167 bool isCursorOverPort(
const QPointF &localPos)
const;
171 void resetInternalState();
180 QByteArray m_loadedBlobSnapshot;
181 QVector<GraphicElement *> m_internalElements;
182 QVector<Connection *> m_internalConnections;
183 QVector<Port *> m_internalInputs;
184 QVector<Port *> m_internalOutputs;
188 QVector<GraphicElement *> m_sortedInternalElements;
189 QSet<GraphicElement *> m_boundaryInputElements;
190 bool m_internalHasFeedback =
false;
194 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 saveSimState(QVector< Status > &out) const override
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
friend class TestICController
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)
void restoreSimState(const QVector< Status > &in, int &cursor) override
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...