5#include <QGraphicsItem>
6#include <QGraphicsScene>
7#include <QGraphicsView>
13#include "elements/node.h"
17#include "system/focus_properties.h"
40 object[
"info"] = info.toJson();
45 static CopiedNode fromJson(
const QJsonObject&
object)
54 enum class NodeCreation
71 Canvas(
const QString& canvasId, std::shared_ptr<ConfigurationTable> configTable, std::shared_ptr<EdgeRouter> router, QObject* parent =
nullptr);
134 virtual Types::LibraryTypes
type()
const;
155 void populate(
const FlowSaveInfo& flow);
168 void createNode(
const NodeSaveInfo& info, NodeCreation creation);
183 void moveNodeTo(
const QString& nodeId,
const QPointF& position);
191 void setNodeSize(
const QString& nodeId,
const QSizeF& size);
214 void requestAlignNodes(
const QList<Types::AlignmentNode>& items, Types::AlignmentMode mode, Types::AlignmentDirection direction);
224 void alignNodes(
const QList<Types::AlignmentNode>& items, Types::AlignmentMode mode, Types::AlignmentDirection direction,
bool useGiven);
226 void alignSelectedNodes(Types::AlignmentMode mode);
227 void distributeSelectedNodes();
228 void distributeNodesVertically(
const QList<Types::AlignmentNode>& nodes);
229 void distributeNodesHorizontally(
const QList<Types::AlignmentNode>& nodes);
231 std::shared_ptr<EdgeRouter> router()
const;
233 virtual void suggestCapability(NodeItem* node);
234 virtual void suggestedNodes(NodeItem* node, QStringList consumers, QStringList producers);
249 void dragMoveEvent(QGraphicsSceneDragDropEvent* event)
override;
256 void dropEvent(QGraphicsSceneDragDropEvent* event)
override;
293 virtual void updateParent(NodeItem* node, std::shared_ptr<NodeSaveInfo> storage,
bool adding);
378 void onRemoveNode(
const QString& flowId,
const QString& nodeId);
386 void onFlowSelected(
const QString& flowId,
const QString& nodeId);
394 void onFlowRemoved(
const QString& flowId,
const QString& nodeId);
397 std::shared_ptr<ConfigurationTable> mConfigTable;
401 std::shared_ptr<NodeConfig>
getNodeConfig(
const QString& key)
const;
402 virtual void addedItemNode(
NodeItem* node, std::shared_ptr<NodeSaveInfo> info);
404 virtual void onNodeHovered(
NodeItem* node,
bool entered);
407 virtual bool canAddTransition(
NodeItem* node)
const;
409 virtual QVector<TransitionSaveInfo> transitionsOfNode(
const QString& nodeId);
410 virtual QVector<QGraphicsItem*> cleanTransitionsOfNode(
const QString& nodeId);
411 virtual void onNodeMoved(
const NodeItem* node);
412 virtual void showSimulationControls(
NodeItem* node, maki::ControlWidget* controls,
const QColor& highlightColor);
414 virtual bool insertDroppedNodeOnTransition(
TransitionItem* transition, std::shared_ptr<NodeSaveInfo> info);
443 QGraphicsRectItem* mSelectionRect =
nullptr;
451 QTimer* mSuggestionHideTimer =
nullptr;
453 void createSuggestedNode(
const QString& nodeType,
NodeItem* sourceNode);
490 void alignNodesHorizontally(
const QList<Types::AlignmentNode>& items, Types::AlignmentDirection direction);
498 void alignNodesVertically(
const QList<Types::AlignmentNode>& items, Types::AlignmentDirection direction);
501 void createAlignMenu(QMenu* alignMenu,
const QList<Types::AlignmentNode>& items);
506 bool isModifierSet(QGraphicsSceneMouseEvent* event, Qt::KeyboardModifier modifier);
508 bool nodeClickHandler(QGraphicsSceneMouseEvent* event, QGraphicsItem* item);
523 void updateCapabilityDropPreview(
const QPointF& scenePos);
Custom QGraphicsView for a canvas application.
Definition canvas_view.h:15
void themeChanged()
Handles theme change events.
Definition canvas.cpp:1594
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
Handles mouse press events.
Definition canvas.cpp:222
void onFlowRemoved(const QString &flowId, const QString &nodeId)
Handles removal of a flow.
Definition canvas.cpp:1571
void requestAlignNodes(const QList< Types::AlignmentNode > &items, Types::AlignmentMode mode, Types::AlignmentDirection direction)
Requests alignment of nodes.
Definition canvas.cpp:522
void createNodeContextMenu(QMenu *menu, NodeItem *node, const QList< NodeItem * > &items)
Handles transition click events.
Definition canvas.cpp:813
void alignNodesVertically(const QList< Types::AlignmentNode > &items, Types::AlignmentDirection direction)
Aligns nodes vertically based on the given parameters.
Definition canvas.cpp:586
void createNode(const NodeSaveInfo &info, NodeCreation creation)
Creates a node based on save information.
Definition canvas.cpp:1285
void alignNodesHorizontally(const QList< Types::AlignmentNode > &items, Types::AlignmentDirection direction)
Aligns nodes horizontally based on the given parameters.
Definition canvas.cpp:554
QList< NodeItem * > mSelectedNodes
List of copied nodes.
Definition canvas.h:448
void removeNode(const NodeSaveInfo &info)
Removes a node based on save information.
Definition canvas.cpp:1296
bool isParentSelected(NodeItem *node)
Creates a context menu for transitions.
Definition canvas.cpp:1001
QPointF mSelectionStart
Whether the mouse button is pressed.
Definition canvas.h:442
void clearCanvas()
Clears all items from the canvas.
Definition canvas.cpp:1121
virtual Types::LibraryTypes type() const
Returns the type of library this canvas belongs to.
Definition canvas.cpp:66
void pasteCopiedItems()
Pastes copied items onto the canvas.
Definition canvas.cpp:1090
NodeItem * mSuggestionSourceNode
List of currently selected nodes.
Definition canvas.h:450
NodeItem * findNodeWithId(const QString &id) const
Finds a node by its ID.
Definition canvas.cpp:1436
void nodeSelected(NodeItem *node, bool selected)
Emitted when a node is selected.
void copySelectedItems(NodeItem *node)
Copies selected items to the clipboard.
Definition canvas.cpp:1010
NodeItem * mNode
Pointer to the current transition being created.
Definition canvas.h:437
void removeTransition(const TransitionSaveInfo &info)
Removes a transition based on save information.
Definition canvas.cpp:1275
Canvas(const QString &canvasId, std::shared_ptr< ConfigurationTable > configTable, std::shared_ptr< EdgeRouter > router, QObject *parent=nullptr)
Constructs a new Canvas object.
Definition canvas.cpp:41
bool transitionClickHandler(QGraphicsSceneMouseEvent *event, QGraphicsItem *item)
Handles node click events.
Definition canvas.cpp:345
bool isModifierSet(QGraphicsSceneMouseEvent *event, Qt::KeyboardModifier modifier)
Clears all selected nodes.
Definition canvas.cpp:217
bool mMouseDown
Whether a drag operation is in progress.
Definition canvas.h:440
void transitionSelected(TransitionItem *transtion)
Emitted when a transition is selected.
void openFlow(Flow *flow, const QString &nodeId, const maki::FocusProperties &properties)
Emitted when a flow is opened.
void createTransition(const TransitionSaveInfo &info)
Creates a transition based on save information.
Definition canvas.cpp:1243
QList< NodeItem * > availableNodes()
Returns a list of available node items.
Definition canvas.cpp:81
void onSelectionChanged()
Loads nodes and their children from save information.
Definition canvas.cpp:91
CanvasView * parentView() const
Returns the parent view of this canvas.
Definition canvas.cpp:1218
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override
Handles context menu events.
Definition canvas.cpp:729
void clearSelectedNodes()
Removes a node and its associated connections.
Definition canvas.cpp:1165
qreal getScale() const
Returns the current scale of the canvas.
Definition canvas.cpp:1466
VoidResult loadFromSave(const SaveInfo &info)
Loads the canvas from save information.
Definition canvas.cpp:1201
QList< NodeItem * > selectedNodes() const
Returns a list of currently selected nodes.
Definition canvas.cpp:517
void deleteSelectedItems()
Deletes selected items from the canvas.
Definition canvas.cpp:832
void flowAdded(Flow *flow, NodeItem *node)
Emitted when a flow is added.
void nodeAdded(NodeItem *node)
Emitted when a node is added.
void alignNodes(const QList< Types::AlignmentNode > &items, Types::AlignmentMode mode, Types::AlignmentDirection direction, bool useGiven)
Aligns nodes based on the given parameters.
Definition canvas.cpp:527
void dragMoveEvent(QGraphicsSceneDragDropEvent *event) override
Handles drag move events.
Definition canvas.cpp:114
QPointF mStartDragPosition
Pointer to the currently clicked node.
Definition canvas.h:438
void createEvent(NodeItem *node)
Emitted when an event is created.
std::shared_ptr< EdgeRouter > mRouter
Pointer to the configuration table.
Definition canvas.h:398
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
Handles mouse move events.
Definition canvas.cpp:355
void createTransitionContextMenu(QMenu *menu, const QList< NodeItem * > &items)
Creates a context menu for nodes.
Definition canvas.cpp:828
void flowRemoved(const QString &flowId, NodeItem *node)
Emitted when a flow is removed.
bool mDragging
The starting position of a drag operation.
Definition canvas.h:439
void moveNodeTo(const QString &nodeId, const QPointF &position)
Moves a node to a new position.
Definition canvas.cpp:1223
QString id() const
Returns the unique identifier for this canvas.
Definition canvas.cpp:61
TransitionItem * mTransition
Pointer to the hovered node.
Definition canvas.h:436
void onFocusNode(const QString &flowId, const QString &nodeId, const maki::FocusProperties &properties)
Handles focus on a node.
Definition canvas.cpp:1476
void nodeModified(NodeItem *node)
Emitted when a node is modified.
void populate(const FlowSaveInfo &flow)
Populates the canvas with a given flow.
Definition canvas.cpp:1538
std::shared_ptr< NodeConfig > getNodeConfig(const QString &key) const
Pointer to the undo stack.
Definition canvas.cpp:1383
void nodeClicked(NodeItem *node)
Handles node click events.
Definition canvas.cpp:503
void nodeRemoved(const QString &nodeId, const QString &parentId)
Emitted when a node is removed.
QPointF getCenter() const
Returns the center position of the canvas.
Definition canvas.cpp:1471
void onRemoveNode(const QString &flowId, const QString &nodeId)
Handles removal of a node.
Definition canvas.cpp:1532
bool nodeClickHandler(QGraphicsSceneMouseEvent *event, QGraphicsItem *item)
Checks if a specific keyboard modifier is set.
Definition canvas.cpp:295
QList< CopiedNode > mCopiedNodes
Unique identifier for this canvas.
Definition canvas.h:447
void selectNode(NodeItem *node, bool select)
Selects a node and updates its selection state.
Definition canvas.cpp:1153
void setNodeSize(const QString &nodeId, const QSizeF &size)
Sets the size of a node.
Definition canvas.cpp:1232
void onFlowSelected(const QString &flowId, const QString &nodeId)
Handles selection of a flow.
Definition canvas.cpp:1558
virtual void updateParent(NodeItem *node, std::shared_ptr< NodeSaveInfo > storage, bool adding)
Updates the parent of a node.
Definition canvas.cpp:1590
QUndoStack * mUndoStack
Pointer to the system edge router.
Definition canvas.h:399
void dragEnterEvent(QGraphicsSceneDragDropEvent *event) override
Handles drag enter events.
Definition canvas.cpp:103
void dropEvent(QGraphicsSceneDragDropEvent *event) override
Handles drop events.
Definition canvas.cpp:126
QUndoStack * undoStack() const
Returns a pointer to the undo stack associated with this canvas.
Definition canvas.cpp:71
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
Handles mouse release events.
Definition canvas.cpp:378
Manages a table of configuration settings.
Definition config_table.h:13
Definition edge_router.h:11
Represents a flow in the system.
Definition flow.h:17
static QPointF toPointF(const QJsonObject &value)
Converts a QJsonObject to a QPointF.
Definition json.cpp:79
static QJsonObject fromPointF(const QPointF &value)
Creates a JSON object from a QPointF.
Definition json.cpp:70
Represents a graphical node item in a flowchart.
Definition node.h:26
Represents a node that can be saved and loaded.
Definition node_info.h:17
static NodeSaveInfo fromJson(const QJsonObject &data)
Creates a NodeSaveInfo object from a JSON object.
Definition node_info.cpp:319
Configuration for a transition between nodes.
Definition config.h:44
Represents a transition between two nodes in a graphical representation.
Definition transition.h:15
QJsonObject toJson() const
Position relative to the mouse when copying.
Definition canvas.h:37
QPointF posRelativeToMouse
Save information of the copied node.
Definition canvas.h:35
Definition focus_properties.h:17