Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
AbstractCanvasItem.hpp
Go to the documentation of this file.
1#ifndef LIBS_GUI_ABSTRACTCANVASITEM_HPP_
2#define LIBS_GUI_ABSTRACTCANVASITEM_HPP_
3
5#include <bits/stdint-uintn.h>
6#include <memory>
7#include <tuple>
8#include <utility>
9#include <vector>
10
11class ICanvasItem;
17
24{
25public:
30 enum class EMarkMode
31 {
32 None,
34 };
35
40 enum class EStandOutMode
41 {
43 Warning,
44 None// TODO: aag. añadir un modo Error, para señalar los elementos que hace que el usuario corrija/especifique
45 };
46
47 typedef uint32_t TId;
48 typedef std::pair<double, double> TPosition2d;
49 typedef uint32_t TIndex;
50 typedef std::tuple<EMarkMode, EStandOutMode> TTupleDrawingMode;
51
52 inline static const TId kInvalidCanvasItemId = 0;
53 inline static const TId kStartingCanvasItemId = 1;
54 inline static const TPosition2d kZeroPosition = {0., 0.};
55
57 explicit AbstractCanvasItem(TId id);
58 virtual ~AbstractCanvasItem();
59 AbstractCanvasItem(const AbstractCanvasItem &other) = delete;
63
64 virtual iv::file::xml::node read(const iv::file::xml::node &node) = 0;
65 virtual iv::file::xml::node save(iv::file::xml::node &node) const = 0;
66
67 // getLinkedItems() returns linked items to replicate behaviour in them (like 'select', 'translate', etc.)
68 // The idea is that a logicsComponent has linked logicsConectionPoint, and these have logicsConnection, where the linked items end.
69 virtual std::vector<std::shared_ptr<AbstractCanvasItem>> getLinkedItems() = 0;
70 virtual void updateLinkedItems() = 0;
71 virtual void resetLinkedItems() = 0;
72
73 void addListenerClick(std::unique_ptr<IListenerCanvasItemClick> listener);
74 void addListenerMove(std::unique_ptr<IListenerCanvasItemMove> listener);
75 void addListenerEnter(std::unique_ptr<IListenerCanvasItemEnter> listener);
76 void addListenerLeave(std::unique_ptr<IListenerCanvasItemLeave> listener);
77
78 void runListenersClick(CEventCanvasButton *evtCanvasButton);
79 void runListenersMove(CEventCanvasButton *evtCanvasButton);
80 void runListenersEnter();
81 void runListenersLeave();
82
83 void setCanvasItem(ICanvasItem *canvasItem);
84 void setCurrentMarkMode(EMarkMode markMode);
85 void setCurrentStandoutMode(EStandOutMode standoutMode);
86 void setGlobalPosition2d(const TPosition2d &position2d);
87 void setId(TId id);
88 void setRedrawFlag(bool redraw);
89
91 [[maybe_unused]] [[nodiscard]] const ICanvasItem *getCanvasItem() const;
93 [[nodiscard]] const TPosition2d &getGlobalPosition2d() const;
94 [[nodiscard]] TId getId() const;
95 [[nodiscard]] bool getRedrawFlag() const;
96
97private:
99
100 TPosition2d m_globalPosition2d;// top left position (the position clicked by the user to place a canvas item)
101
104
106
107 std::vector<std::unique_ptr<IListenerCanvasItemClick>> m_listenersItemClick;
108 std::vector<std::unique_ptr<IListenerCanvasItemMove>> m_listenersItemMove;
109 std::vector<std::unique_ptr<IListenerCanvasItemEnter>> m_listenersItemEnter;
110 std::vector<std::unique_ptr<IListenerCanvasItemLeave>> m_listenersItemLeave;
111};
112
119
120#endif /* LIBS_GUI_ABSTRACTCANVASITEM_HPP_ */
bool operator!=(const AbstractCanvasItem::TPosition2d &p1, const AbstractCanvasItem::TPosition2d &p2)
Definition AbstractCanvasItem.cpp:238
AbstractCanvasItem::TPosition2d operator-(const AbstractCanvasItem::TPosition2d &p1, const AbstractCanvasItem::TPosition2d &p2)
Definition AbstractCanvasItem.cpp:221
AbstractCanvasItem::TPosition2d operator+(const AbstractCanvasItem::TPosition2d &p1, const AbstractCanvasItem::TPosition2d &p2)
Definition AbstractCanvasItem.cpp:210
bool operator==(const AbstractCanvasItem::TPosition2d &p1, const AbstractCanvasItem::TPosition2d &p2)
Definition AbstractCanvasItem.cpp:233
Definition AbstractCanvasItem.hpp:24
TPosition2d m_globalPosition2d
Definition AbstractCanvasItem.hpp:100
const TPosition2d & getGlobalPosition2d() const
Definition AbstractCanvasItem.cpp:195
virtual iv::file::xml::node save(iv::file::xml::node &node) const =0
Definition AbstractCanvasItem.cpp:59
std::tuple< EMarkMode, EStandOutMode > TTupleDrawingMode
Definition AbstractCanvasItem.hpp:50
TId getId() const
Definition AbstractCanvasItem.cpp:200
static const TId kInvalidCanvasItemId
Definition AbstractCanvasItem.hpp:52
void runListenersMove(CEventCanvasButton *evtCanvasButton)
Definition AbstractCanvasItem.cpp:108
std::vector< std::unique_ptr< IListenerCanvasItemClick > > m_listenersItemClick
Definition AbstractCanvasItem.hpp:107
std::vector< std::unique_ptr< IListenerCanvasItemEnter > > m_listenersItemEnter
Definition AbstractCanvasItem.hpp:109
void runListenersLeave()
Definition AbstractCanvasItem.cpp:124
void addListenerClick(std::unique_ptr< IListenerCanvasItemClick > listener)
Definition AbstractCanvasItem.cpp:72
TId m_id
Definition AbstractCanvasItem.hpp:98
void setCurrentStandoutMode(EStandOutMode standoutMode)
Definition AbstractCanvasItem.cpp:142
bool getRedrawFlag() const
Definition AbstractCanvasItem.cpp:205
AbstractCanvasItem & operator=(AbstractCanvasItem &&other)=delete
void setRedrawFlag(bool redraw)
Definition AbstractCanvasItem.cpp:163
EStandOutMode
Definition AbstractCanvasItem.hpp:41
uint32_t TIndex
Definition AbstractCanvasItem.hpp:49
static const TPosition2d kZeroPosition
Definition AbstractCanvasItem.hpp:54
virtual void resetLinkedItems()=0
virtual ~AbstractCanvasItem()
Definition AbstractCanvasItem.cpp:37
std::vector< std::unique_ptr< IListenerCanvasItemLeave > > m_listenersItemLeave
Definition AbstractCanvasItem.hpp:110
static const TId kStartingCanvasItemId
Definition AbstractCanvasItem.hpp:53
void runListenersClick(CEventCanvasButton *evtCanvasButton)
Definition AbstractCanvasItem.cpp:100
void runListenersEnter()
Definition AbstractCanvasItem.cpp:116
void setId(TId id)
Definition AbstractCanvasItem.cpp:158
AbstractCanvasItem(AbstractCanvasItem &&other)=delete
std::vector< std::unique_ptr< IListenerCanvasItemMove > > m_listenersItemMove
Definition AbstractCanvasItem.hpp:108
void setGlobalPosition2d(const TPosition2d &position2d)
Definition AbstractCanvasItem.cpp:151
void setCurrentMarkMode(EMarkMode markMode)
Definition AbstractCanvasItem.cpp:137
AbstractCanvasItem & operator=(const AbstractCanvasItem &other)=delete
ICanvasItem * m_canvasItem
Definition AbstractCanvasItem.hpp:105
EMarkMode
Definition AbstractCanvasItem.hpp:31
virtual std::vector< std::shared_ptr< AbstractCanvasItem > > getLinkedItems()=0
virtual void updateLinkedItems()=0
void setCanvasItem(ICanvasItem *canvasItem)
Definition AbstractCanvasItem.cpp:132
AbstractCanvasItem()
Definition AbstractCanvasItem.cpp:20
AbstractCanvasItem(const AbstractCanvasItem &other)=delete
virtual iv::file::xml::node read(const iv::file::xml::node &node)=0
Definition AbstractCanvasItem.cpp:46
void addListenerMove(std::unique_ptr< IListenerCanvasItemMove > listener)
Definition AbstractCanvasItem.cpp:79
uint32_t TId
Definition AbstractCanvasItem.hpp:47
void addListenerEnter(std::unique_ptr< IListenerCanvasItemEnter > listener)
Definition AbstractCanvasItem.cpp:86
ICanvasItem * getCanvasItem()
Definition AbstractCanvasItem.cpp:180
TTupleDrawingMode m_currentDrawingMode
Definition AbstractCanvasItem.hpp:102
std::pair< double, double > TPosition2d
Definition AbstractCanvasItem.hpp:48
const AbstractCanvasItem::TTupleDrawingMode & getCurrentDrawingMode() const
Definition AbstractCanvasItem.cpp:190
bool m_redrawFlag
Definition AbstractCanvasItem.hpp:103
void addListenerLeave(std::unique_ptr< IListenerCanvasItemLeave > listener)
Definition AbstractCanvasItem.cpp:93
Definition CEventCanvasButton.hpp:7
Definition ICanvasItem.hpp:5
Definition IListenerCanvasItemClick.hpp:5
Definition IListenerCanvasItemEnter.hpp:5
Definition IListenerCanvasItemLeave.hpp:5
Definition IListenerCanvasItemMove.hpp:5
Definition xmlFile.hpp:15