LibrePCB Developers Documentation
Loading...
Searching...
No Matches
schematiceditorstate_select.h
Go to the documentation of this file.
1/*
2 * LibrePCB - Professional EDA for everyone!
3 * Copyright (C) 2013 LibrePCB Developers, see AUTHORS.md for contributors.
4 * https://librepcb.org/
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef LIBREPCB_EDITOR_SCHEMATICEDITORSTATE_SELECT_H
21#define LIBREPCB_EDITOR_SCHEMATICEDITORSTATE_SELECT_H
22
23/*******************************************************************************
24 * Includes
25 ******************************************************************************/
27
29
30#include <QtCore>
31
32#include <memory>
33
34/*******************************************************************************
35 * Namespace / Forward Declarations
36 ******************************************************************************/
37namespace librepcb {
38
39class Angle;
40class Polygon;
41class SI_BusLabel;
42class SI_Image;
43class SI_NetLabel;
44class SI_Polygon;
45class SI_Symbol;
46class SI_Text;
47class Schematic;
48class Text;
49
50namespace editor {
51
52class CmdDragSelectedSchematicItems;
53class CmdImageEdit;
54class CmdPolygonEdit;
55
56/*******************************************************************************
57 * Class SchematicEditorState_Select
58 ******************************************************************************/
59
64 Q_OBJECT
65
66public:
67 // Constructors / Destructor
70 delete;
71 explicit SchematicEditorState_Select(const Context& context) noexcept;
72 virtual ~SchematicEditorState_Select() noexcept;
73
74 // General Methods
75 virtual bool entry() noexcept override;
76 virtual bool exit() noexcept override;
77
78 // Event Handlers
79 virtual bool processSelectAll() noexcept override;
80 virtual bool processCut() noexcept override;
81 virtual bool processCopy() noexcept override;
82 virtual bool processPaste() noexcept override;
83 virtual bool processMove(const Point& delta) noexcept override;
84 virtual bool processRotate(const Angle& rotation) noexcept override;
85 virtual bool processMirror(Qt::Orientation orientation) noexcept override;
86 virtual bool processSnapToGrid() noexcept override;
87 virtual bool processResetAllTexts() noexcept override;
88 virtual bool processRemove() noexcept override;
89 virtual bool processEditProperties() noexcept override;
90 virtual bool processAbortCommand() noexcept override;
92 const GraphicsSceneMouseEvent& e) noexcept override;
94 const GraphicsSceneMouseEvent& e) noexcept override;
96 const GraphicsSceneMouseEvent& e) noexcept override;
98 const GraphicsSceneMouseEvent& e) noexcept override;
100 const GraphicsSceneMouseEvent& e) noexcept override;
101 virtual bool processGridIntervalChanged(
102 const PositiveLength& interval) noexcept override;
103
104 // Operator Overloadings
106 const SchematicEditorState_Select& rhs) = delete;
107
108private: // Methods
110 const Point& startPos) noexcept;
111 bool moveSelectedItems(const Point& delta) noexcept;
112 bool rotateSelectedItems(const Angle& angle) noexcept;
113 bool mirrorSelectedItems(Qt::Orientation orientation) noexcept;
114 bool snapSelectedItemsToGrid() noexcept;
115 bool resetAllTextsOfSelectedItems() noexcept;
116 bool removeSelectedItems() noexcept;
117 void removePolygonVertices(Polygon& polygon,
118 const QVector<int> vertices) noexcept;
119 void startAddingPolygonVertex(SI_Polygon& polygon, int vertex,
120 const Point& pos) noexcept;
121 bool copySelectedItemsToClipboard() noexcept;
122 bool pasteFromClipboard() noexcept;
123 bool findPolygonVerticesAtPosition(const Point& pos) noexcept;
124 bool findImageHandleAtPosition(const Point& pos) noexcept;
125 bool openPropertiesDialog(std::shared_ptr<QGraphicsItem> item) noexcept;
126 void openSymbolPropertiesDialog(SI_Symbol& symbol) noexcept;
127 void openBusLabelPropertiesDialog(SI_BusLabel& label) noexcept;
128 void openNetLabelPropertiesDialog(SI_NetLabel& netlabel) noexcept;
129 void openPolygonPropertiesDialog(Polygon& polygon) noexcept;
130 void openTextPropertiesDialog(Text& text) noexcept;
131 void scheduleUpdateAvailableFeatures() noexcept;
132 void updateAvailableFeatures() noexcept;
133
134private: // Data
136 enum class SubState {
137 IDLE,
138 SELECTING,
139 MOVING,
142 PASTING,
143 };
144
147 std::unique_ptr<CmdDragSelectedSchematicItems> mSelectedItemsDragCommand;
148
154 std::unique_ptr<CmdPolygonEdit> mCmdPolygonEdit;
155
157 QPointer<SI_Image> mSelectedImage;
161 std::unique_ptr<CmdImageEdit> mCmdImageEdit;
162
164 QList<QMetaObject::Connection> mConnections;
165
167 std::unique_ptr<QTimer> mUpdateAvailableFeaturesTimer;
168};
169
170/*******************************************************************************
171 * End of File
172 ******************************************************************************/
173
174} // namespace editor
175} // namespace librepcb
176
177#endif
The Angle class is used to represent an angle (for example 12.75 degrees)
Definition angle.h:76
The Point class is used to represent a point/coordinate/vector, for example (1.2mm; 5....
Definition point.h:78
The Polygon class.
Definition polygon.h:45
The SI_BusLabel class.
Definition si_buslabel.h:48
The SI_NetLabel class.
Definition si_netlabel.h:48
The SI_Polygon class represents a polygon in a schematic.
Definition si_polygon.h:47
The SI_Symbol class.
Definition si_symbol.h:54
The Text class.
Definition text.h:48
The "select" state/tool of the schematic editor (default state)
Definition schematiceditorstate_select.h:63
virtual bool processEditProperties() noexcept override
Definition schematiceditorstate_select.cpp:256
virtual bool processGraphicsSceneMouseMoved(const GraphicsSceneMouseEvent &e) noexcept override
Definition schematiceditorstate_select.cpp:336
void openTextPropertiesDialog(Text &text) noexcept
Definition schematiceditorstate_select.cpp:1129
bool mirrorSelectedItems(Qt::Orientation orientation) noexcept
Definition schematiceditorstate_select.cpp:810
std::unique_ptr< CmdImageEdit > mCmdImageEdit
The image edit command (nullptr if not editing)
Definition schematiceditorstate_select.h:161
bool startMovingSelectedItems(SchematicGraphicsScene &scene, const Point &startPos) noexcept
Definition schematiceditorstate_select.cpp:764
virtual bool processGridIntervalChanged(const PositiveLength &interval) noexcept override
Definition schematiceditorstate_select.cpp:753
virtual bool processGraphicsSceneRightMouseButtonReleased(const GraphicsSceneMouseEvent &e) noexcept override
Definition schematiceditorstate_select.cpp:561
bool copySelectedItemsToClipboard() noexcept
Definition schematiceditorstate_select.cpp:930
virtual bool processRemove() noexcept override
Definition schematiceditorstate_select.cpp:245
bool rotateSelectedItems(const Angle &angle) noexcept
Definition schematiceditorstate_select.cpp:789
virtual bool processGraphicsSceneLeftMouseButtonReleased(const GraphicsSceneMouseEvent &e) noexcept override
Definition schematiceditorstate_select.cpp:486
std::unique_ptr< CmdPolygonEdit > mCmdPolygonEdit
The polygon edit command (nullptr if not editing)
Definition schematiceditorstate_select.h:154
virtual bool processGraphicsSceneLeftMouseButtonPressed(const GraphicsSceneMouseEvent &e) noexcept override
Definition schematiceditorstate_select.cpp:396
void openBusLabelPropertiesDialog(SI_BusLabel &label) noexcept
Definition schematiceditorstate_select.cpp:1107
virtual bool processAbortCommand() noexcept override
Definition schematiceditorstate_select.cpp:295
virtual bool processPaste() noexcept override
Definition schematiceditorstate_select.cpp:183
bool removeSelectedItems() noexcept
Definition schematiceditorstate_select.cpp:867
virtual bool processResetAllTexts() noexcept override
Definition schematiceditorstate_select.cpp:235
virtual bool processRotate(const Angle &rotation) noexcept override
Definition schematiceditorstate_select.cpp:203
virtual bool processSelectAll() noexcept override
Definition schematiceditorstate_select.cpp:152
std::unique_ptr< QTimer > mUpdateAvailableFeaturesTimer
Delay timer for updateAvailableFeatures(), only when in this state.
Definition schematiceditorstate_select.h:167
SchematicEditorState_Select(const SchematicEditorState_Select &other)=delete
virtual bool processGraphicsSceneLeftMouseButtonDoubleClicked(const GraphicsSceneMouseEvent &e) noexcept override
Definition schematiceditorstate_select.cpp:536
SI_Polygon * mSelectedPolygon
The current polygon selected for editing (nullptr if none)
Definition schematiceditorstate_select.h:150
QPointer< SI_Image > mSelectedImage
The current image selected for editing (nullptr if none)
Definition schematiceditorstate_select.h:157
bool pasteFromClipboard() noexcept
Definition schematiceditorstate_select.cpp:946
QList< QMetaObject::Connection > mConnections
Signal/slot connections only when in this state.
Definition schematiceditorstate_select.h:164
bool findPolygonVerticesAtPosition(const Point &pos) noexcept
Definition schematiceditorstate_select.cpp:1037
virtual bool processCut() noexcept override
Definition schematiceditorstate_select.cpp:163
void updateAvailableFeatures() noexcept
Definition schematiceditorstate_select.cpp:1164
bool resetAllTextsOfSelectedItems() noexcept
Definition schematiceditorstate_select.cpp:851
bool moveSelectedItems(const Point &delta) noexcept
Definition schematiceditorstate_select.cpp:773
virtual bool exit() noexcept override
Definition schematiceditorstate_select.cpp:119
void startAddingPolygonVertex(SI_Polygon &polygon, int vertex, const Point &pos) noexcept
Definition schematiceditorstate_select.cpp:911
void scheduleUpdateAvailableFeatures() noexcept
Definition schematiceditorstate_select.cpp:1137
void openSymbolPropertiesDialog(SI_Symbol &symbol) noexcept
Definition schematiceditorstate_select.cpp:1098
QVector< int > mSelectedPolygonVertices
The polygon vertex indices selected for editing (empty if none)
Definition schematiceditorstate_select.h:152
virtual bool processSnapToGrid() noexcept override
Definition schematiceditorstate_select.cpp:225
void removePolygonVertices(Polygon &polygon, const QVector< int > vertices) noexcept
Definition schematiceditorstate_select.cpp:885
bool openPropertiesDialog(std::shared_ptr< QGraphicsItem > item) noexcept
Definition schematiceditorstate_select.cpp:1076
void openNetLabelPropertiesDialog(SI_NetLabel &netlabel) noexcept
Definition schematiceditorstate_select.cpp:1114
qreal mSelectedImageAspectRatio
The original aspect ratio of the currently selected image.
Definition schematiceditorstate_select.h:159
Point mStartPos
Definition schematiceditorstate_select.h:146
bool findImageHandleAtPosition(const Point &pos) noexcept
Definition schematiceditorstate_select.cpp:1057
virtual bool processMirror(Qt::Orientation orientation) noexcept override
Definition schematiceditorstate_select.cpp:214
virtual ~SchematicEditorState_Select() noexcept
Definition schematiceditorstate_select.cpp:90
void openPolygonPropertiesDialog(Polygon &polygon) noexcept
Definition schematiceditorstate_select.cpp:1121
bool snapSelectedItemsToGrid() noexcept
Definition schematiceditorstate_select.cpp:831
SubState
enum for all possible substates
Definition schematiceditorstate_select.h:136
@ RESIZING_IMAGE
left mouts butten pressed to resize image
@ SELECTING
left mouse button pressed to draw selection rect
@ IDLE
left mouse button is not pressed (default state)
@ MOVING
left mouse button pressed to move items
@ MOVING_POLYGON_VERTICES
left mouts butten pressed to move vertices
virtual bool processMove(const Point &delta) noexcept override
Definition schematiceditorstate_select.cpp:193
SubState mSubState
the current substate
Definition schematiceditorstate_select.h:145
virtual bool processCopy() noexcept override
Definition schematiceditorstate_select.cpp:173
std::unique_ptr< CmdDragSelectedSchematicItems > mSelectedItemsDragCommand
Definition schematiceditorstate_select.h:147
virtual bool entry() noexcept override
Definition schematiceditorstate_select.cpp:98
The schematic editor state base class.
Definition schematiceditorstate.h:58
The SchematicGraphicsScene class.
Definition schematicgraphicsscene.h:76
Definition occmodel.cpp:77
type_safe::constrained_type< Length, PositiveLengthConstraint, PositiveLengthVerifier > PositiveLength
Definition length.h:810
Definition uuid.h:186
Definition graphicsscene.h:45
FSM Context.
Definition schematiceditorfsm.h:65