Plasma Engine  2.0
Loading...
Searching...
No Matches
Node.h
1#pragma once
2
3#include <Foundation/Containers/HybridArray.h>
4#include <GuiFoundation/GuiFoundationDLL.h>
5#include <GuiFoundation/NodeEditor/NodeScene.moc.h>
6#include <QGraphicsWidget>
7
8// Avoid conflicts with windows.
9#ifdef GetObject
10# undef GetObject
11#endif
12
13class plQtPin;
15class QLabel;
17class QGraphicsTextItem;
18class QGraphicsPixmapItem;
19class QGraphicsDropShadowEffect;
20
22{
23 using StorageType = plUInt8;
24
25 enum Enum
26 {
27 None = 0,
28 Moved = PL_BIT(0),
29 UpdateTitle = PL_BIT(1),
30 Default = None
31 };
32
33 struct Bits
34 {
35 StorageType Moved : 1;
36 StorageType UpdateTitle : 1;
37 };
38};
39
40class PL_GUIFOUNDATION_DLL plQtNode : public QGraphicsPathItem
41{
42public:
43 plQtNode();
44 ~plQtNode();
45 virtual int type() const override { return plQtNodeScene::Node; }
46
47 const plDocumentObject* GetObject() const { return m_pObject; }
48 virtual void InitNode(const plDocumentNodeManager* pManager, const plDocumentObject* pObject);
49
50 virtual void UpdateGeometry();
51
52 void CreatePins();
53
54 plQtPin* GetInputPin(const plPin& pin);
55 plQtPin* GetOutputPin(const plPin& pin);
56
57 plBitflags<plNodeFlags> GetFlags() const;
58 void ResetFlags();
59
60 void EnableDropShadow(bool bEnable);
61 virtual void UpdateState();
62
63 const plHybridArray<plQtPin*, 6>& GetInputPins() const { return m_Inputs; }
64 const plHybridArray<plQtPin*, 6>& GetOutputPins() const { return m_Outputs; }
65
66 void SetActive(bool bActive);
67
68 virtual void ExtendContextMenu(QMenu& ref_menu) {}
69
70protected:
71 virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override;
72 virtual QVariant itemChange(GraphicsItemChange change, const QVariant& value) override;
73
74 QColor m_HeaderColor;
75 QRectF m_HeaderRect;
76 QGraphicsTextItem* m_pTitleLabel = nullptr;
77 QGraphicsTextItem* m_pSubtitleLabel = nullptr;
78 QGraphicsPixmapItem* m_pIcon = nullptr;
79
80private:
81 const plDocumentNodeManager* m_pManager = nullptr;
82 const plDocumentObject* m_pObject = nullptr;
83 plBitflags<plNodeFlags> m_DirtyFlags;
84
85 bool m_bIsActive = true;
86
87 QGraphicsDropShadowEffect* m_pShadow = nullptr;
88
89 // Pins
92};
Definition DocumentNodeManager.h:141
Definition DocumentObjectBase.h:11
A hybrid array uses in-place storage to handle the first few elements without any allocation....
Definition HybridArray.h:12
Definition DocumentNodeManager.h:59
Definition Node.h:41
Definition Pin.h:20
The plBitflags class allows you to work with type-safe bitflags.
Definition Bitflags.h:82
Definition Node.h:34
Definition Node.h:22