LibrePCB Developers Documentation
boardeditorstate_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_BOARDEDITORSTATE_SELECT_H
21 #define LIBREPCB_EDITOR_BOARDEDITORSTATE_SELECT_H
22 
23 /*******************************************************************************
24  * Includes
25  ******************************************************************************/
26 #include "boardeditorstate.h"
27 
29 
30 #include <QtCore>
31 
32 #include <memory>
33 #include <optional.hpp>
34 
35 /*******************************************************************************
36  * Namespace / Forward Declarations
37  ******************************************************************************/
38 namespace librepcb {
39 
40 class Angle;
41 class BI_Base;
42 class BI_Device;
43 class BI_Hole;
44 class BI_NetLine;
45 class BI_NetSegment;
46 class BI_Plane;
47 class BI_Polygon;
48 class BI_StrokeText;
49 class BI_Via;
50 class BI_Zone;
51 class Point;
52 
53 namespace editor {
54 
55 class BoardClipboardData;
56 class CmdBoardPlaneEdit;
57 class CmdBoardPolygonEdit;
58 class CmdBoardZoneEdit;
59 class CmdDragSelectedBoardItems;
60 class UndoCommandGroup;
61 
62 /*******************************************************************************
63  * Class BoardEditorState_Select
64  ******************************************************************************/
65 
70  Q_OBJECT
71 
72  struct DeviceMenuItem {
73  QString name;
75  };
76 
77 public:
78  // Constructors / Destructor
79  BoardEditorState_Select() = delete;
80  BoardEditorState_Select(const BoardEditorState_Select& other) = delete;
81  explicit BoardEditorState_Select(const Context& context) noexcept;
82  virtual ~BoardEditorState_Select() noexcept;
83 
84  // General Methods
85  virtual bool entry() noexcept override;
86  virtual bool exit() noexcept override;
87 
88  // Event Handlers
89  virtual bool processImportDxf() noexcept override;
90  virtual bool processSelectAll() noexcept override;
91  virtual bool processCut() noexcept override;
92  virtual bool processCopy() noexcept override;
93  virtual bool processPaste() noexcept override;
94  virtual bool processMove(const Point& delta) noexcept override;
95  virtual bool processRotate(const Angle& rotation) noexcept override;
96  virtual bool processFlip(Qt::Orientation orientation) noexcept override;
97  virtual bool processSnapToGrid() noexcept override;
98  virtual bool processSetLocked(bool locked) noexcept override;
99  virtual bool processChangeLineWidth(int step) noexcept override;
100  virtual bool processResetAllTexts() noexcept override;
101  virtual bool processRemove() noexcept override;
102  virtual bool processEditProperties() noexcept override;
103  virtual bool processAbortCommand() noexcept override;
104  virtual bool processGraphicsSceneMouseMoved(
105  QGraphicsSceneMouseEvent& e) noexcept override;
107  QGraphicsSceneMouseEvent& e) noexcept override;
109  QGraphicsSceneMouseEvent& e) noexcept override;
111  QGraphicsSceneMouseEvent& e) noexcept override;
113  QGraphicsSceneMouseEvent& e) noexcept override;
114  virtual bool processSwitchToBoard(int index) noexcept override;
115 
116  // Operator Overloadings
117  BoardEditorState_Select& operator=(const BoardEditorState_Select& rhs) =
118  delete;
119 
120 private: // Methods
122  const Point& startPos) noexcept;
123  bool moveSelectedItems(const Point& delta) noexcept;
124  bool rotateSelectedItems(const Angle& angle) noexcept;
125  bool flipSelectedItems(Qt::Orientation orientation) noexcept;
126  bool snapSelectedItemsToGrid() noexcept;
127  bool lockSelectedItems(bool locked) noexcept;
128  bool changeWidthOfSelectedItems(int step) noexcept;
129  bool resetAllTextsOfSelectedItems() noexcept;
130  bool removeSelectedItems() noexcept;
131  void removePolygonVertices(BI_Polygon& polygon,
132  const QVector<int> vertices) noexcept;
133  void removePlaneVertices(BI_Plane& plane,
134  const QVector<int> vertices) noexcept;
135  void removeZoneVertices(BI_Zone& zone, const QVector<int> vertices) noexcept;
136  void startAddingPolygonVertex(BI_Polygon& polygon, int vertex,
137  const Point& pos) noexcept;
138  void startAddingPlaneVertex(BI_Plane& plane, int vertex,
139  const Point& pos) noexcept;
140  void startAddingZoneVertex(BI_Zone& zone, int vertex,
141  const Point& pos) noexcept;
142  bool copySelectedItemsToClipboard() noexcept;
143  bool startPaste(BoardGraphicsScene& scene,
144  std::unique_ptr<BoardClipboardData> data,
145  const tl::optional<Point>& fixedPosition);
146  bool abortCommand(bool showErrMsgBox) noexcept;
147  bool findPolygonVerticesAtPosition(const Point& pos) noexcept;
148  bool findPlaneVerticesAtPosition(const Point& pos) noexcept;
149  bool findZoneVerticesAtPosition(const Point& pos) noexcept;
150 
159  bool measureSelectedItems(const BI_NetLine& netline) noexcept;
160 
176  bool directionBackwards,
177  const BI_NetLine& netline,
178  QSet<Uuid>& visitedNetLines,
179  UnsignedLength& totalLength);
180 
181  bool openPropertiesDialog(std::shared_ptr<QGraphicsItem> item);
182  void openDevicePropertiesDialog(BI_Device& device) noexcept;
183  void openViaPropertiesDialog(BI_Via& via) noexcept;
184  void openPlanePropertiesDialog(BI_Plane& plane) noexcept;
185  void openZonePropertiesDialog(BI_Zone& zone) noexcept;
186  void openPolygonPropertiesDialog(BI_Polygon& polygon) noexcept;
187  void openStrokeTextPropertiesDialog(BI_StrokeText& text) noexcept;
188  void openHolePropertiesDialog(BI_Hole& hole) noexcept;
190  const ComponentInstance& cmpInst) const noexcept;
191 
192 private: // Data
195 
198 
205 
212 
216  QVector<int> mSelectedZoneVertices;
219 };
220 
221 /*******************************************************************************
222  * End of File
223  ******************************************************************************/
224 
225 } // namespace editor
226 } // namespace librepcb
227 
228 #endif
The BI_NetLine class.
Definition: bi_netline.h:71
FSM Context.
Definition: boardeditorfsm.h:88
virtual bool processSetLocked(bool locked) noexcept override
Definition: boardeditorstate_select.cpp:378
void startAddingPolygonVertex(BI_Polygon &polygon, int vertex, const Point &pos) noexcept
Definition: boardeditorstate_select.cpp:1499
QScopedPointer< CmdBoardZoneEdit > mCmdZoneEdit
The zone edit command (nullptr if not editing)
Definition: boardeditorstate_select.h:218
bool findPlaneVerticesAtPosition(const Point &pos) noexcept
Definition: boardeditorstate_select.cpp:1665
virtual bool processImportDxf() noexcept override
Definition: boardeditorstate_select.cpp:152
BI_Polygon * mSelectedPolygon
The current polygon selected for editing (nullptr if none)
Definition: boardeditorstate_select.h:200
virtual bool processMove(const Point &delta) noexcept override
Definition: boardeditorstate_select.cpp:333
void openPlanePropertiesDialog(BI_Plane &plane) noexcept
Definition: boardeditorstate_select.cpp:1833
The CmdBoardPolygonEdit class.
Definition: cmdboardpolygonedit.h:49
Definition: occmodel.cpp:77
QScopedPointer< CmdDragSelectedBoardItems > mSelectedItemsDragCommand
When dragging items, this undo command will be active.
Definition: boardeditorstate_select.h:197
The BI_Device class.
Definition: bi_device.h:57
The BI_Hole class.
Definition: bi_hole.h:46
virtual bool processRotate(const Angle &rotation) noexcept override
Definition: boardeditorstate_select.cpp:344
virtual bool processEditProperties() noexcept override
Definition: boardeditorstate_select.cpp:422
bool startMovingSelectedItems(BoardGraphicsScene &scene, const Point &startPos) noexcept
Definition: boardeditorstate_select.cpp:1212
void openDevicePropertiesDialog(BI_Device &device) noexcept
Definition: boardeditorstate_select.cpp:1818
virtual bool processCopy() noexcept override
Definition: boardeditorstate_select.cpp:264
bool abortCommand(bool showErrMsgBox) noexcept
Definition: boardeditorstate_select.cpp:1608
bool findZoneVerticesAtPosition(const Point &pos) noexcept
Definition: boardeditorstate_select.cpp:1686
void openZonePropertiesDialog(BI_Zone &zone) noexcept
Definition: boardeditorstate_select.cpp:1850
The Angle class is used to represent an angle (for example 12.75 degrees)
Definition: angle.h:78
bool startPaste(BoardGraphicsScene &scene, std::unique_ptr< BoardClipboardData > data, const tl::optional< Point > &fixedPosition)
Definition: boardeditorstate_select.cpp:1570
virtual bool processSelectAll() noexcept override
Definition: boardeditorstate_select.cpp:235
bool flipSelectedItems(Qt::Orientation orientation) noexcept
Definition: boardeditorstate_select.cpp:1255
void startAddingZoneVertex(BI_Zone &zone, int vertex, const Point &pos) noexcept
Definition: boardeditorstate_select.cpp:1535
bool moveSelectedItems(const Point &delta) noexcept
Definition: boardeditorstate_select.cpp:1220
bool changeWidthOfSelectedItems(int step) noexcept
Definition: boardeditorstate_select.cpp:1303
void removeZoneVertices(BI_Zone &zone, const QVector< int > vertices) noexcept
Definition: boardeditorstate_select.cpp:1477
QScopedPointer< CmdBoardPlaneEdit > mCmdPlaneEdit
The plane edit command (nullptr if not editing)
Definition: boardeditorstate_select.h:211
void startAddingPlaneVertex(BI_Plane &plane, int vertex, const Point &pos) noexcept
Definition: boardeditorstate_select.cpp:1517
BI_Plane * mSelectedPlane
The current plane selected for editing (nullptr if none)
Definition: boardeditorstate_select.h:207
void openStrokeTextPropertiesDialog(BI_StrokeText &text) noexcept
Definition: boardeditorstate_select.cpp:1865
void removePolygonVertices(BI_Polygon &polygon, const QVector< int > vertices) noexcept
Definition: boardeditorstate_select.cpp:1423
void removePlaneVertices(BI_Plane &plane, const QVector< int > vertices) noexcept
Definition: boardeditorstate_select.cpp:1451
virtual bool processRemove() noexcept override
Definition: boardeditorstate_select.cpp:411
The Point class is used to represent a point/coordinate/vector, for example (1.2mm; 5...
Definition: point.h:79
The CmdBoardPlaneEdit class.
Definition: cmdboardplaneedit.h:50
virtual bool processGraphicsSceneRightMouseButtonReleased(QGraphicsSceneMouseEvent &e) noexcept override
Definition: boardeditorstate_select.cpp:705
virtual bool processSwitchToBoard(int index) noexcept override
Definition: boardeditorstate_select.cpp:1201
virtual bool processPaste() noexcept override
Definition: boardeditorstate_select.cpp:276
void openPolygonPropertiesDialog(BI_Polygon &polygon) noexcept
Definition: boardeditorstate_select.cpp:1857
BI_Zone * mSelectedZone
The current zone selected for editing (nullptr if none)
Definition: boardeditorstate_select.h:214
bool removeSelectedItems() noexcept
Definition: boardeditorstate_select.cpp:1408
QList< DeviceMenuItem > getDeviceMenuItems(const ComponentInstance &cmpInst) const noexcept
Definition: boardeditorstate_select.cpp:1881
virtual bool processGraphicsSceneLeftMouseButtonPressed(QGraphicsSceneMouseEvent &e) noexcept override
Definition: boardeditorstate_select.cpp:536
The BoardClipboardData class.
Definition: boardclipboarddata.h:64
virtual bool processGraphicsSceneLeftMouseButtonReleased(QGraphicsSceneMouseEvent &e) noexcept override
Definition: boardeditorstate_select.cpp:626
bool snapSelectedItemsToGrid() noexcept
Definition: boardeditorstate_select.cpp:1271
virtual bool processGraphicsSceneMouseMoved(QGraphicsSceneMouseEvent &e) noexcept override
Definition: boardeditorstate_select.cpp:480
The BI_StrokeText class.
Definition: bi_stroketext.h:49
void measureLengthInDirection(BoardGraphicsScene &scene, bool directionBackwards, const BI_NetLine &netline, QSet< Uuid > &visitedNetLines, UnsignedLength &totalLength)
Internal helper method used by measureSelectedItems.
Definition: boardeditorstate_select.cpp:1755
The BoardGraphicsScene class.
Definition: boardgraphicsscene.h:77
virtual bool processFlip(Qt::Orientation orientation) noexcept override
Definition: boardeditorstate_select.cpp:355
The BI_Plane class.
Definition: bi_plane.h:52
bool rotateSelectedItems(const Angle &angle) noexcept
Definition: boardeditorstate_select.cpp:1235
QVector< int > mSelectedPolygonVertices
The polygon vertex indices selected for editing (empty if none)
Definition: boardeditorstate_select.h:202
QVector< int > mSelectedZoneVertices
The zone vertex indices selected for editing (empty if none)
Definition: boardeditorstate_select.h:216
void openHolePropertiesDialog(BI_Hole &hole) noexcept
Definition: boardeditorstate_select.cpp:1873
bool openPropertiesDialog(std::shared_ptr< QGraphicsItem > item)
Definition: boardeditorstate_select.cpp:1791
virtual bool entry() noexcept override
Definition: boardeditorstate_select.cpp:126
Definition: uuid.h:183
QVector< int > mSelectedPlaneVertices
The plane vertex indices selected for editing (empty if none)
Definition: boardeditorstate_select.h:209
bool copySelectedItemsToClipboard() noexcept
Definition: boardeditorstate_select.cpp:1553
The ComponentInstance class.
Definition: componentinstance.h:54
virtual bool processResetAllTexts() noexcept override
Definition: boardeditorstate_select.cpp:400
The BI_Polygon class.
Definition: bi_polygon.h:46
bool findPolygonVerticesAtPosition(const Point &pos) noexcept
Definition: boardeditorstate_select.cpp:1643
virtual bool processCut() noexcept override
Definition: boardeditorstate_select.cpp:249
virtual bool processSnapToGrid() noexcept override
Definition: boardeditorstate_select.cpp:367
virtual bool exit() noexcept override
Definition: boardeditorstate_select.cpp:135
Uuid uuid
Definition: boardeditorstate_select.h:74
The BI_Zone class.
Definition: bi_zone.h:46
Definition: boardeditorstate_select.h:72
The Uuid class is a replacement for QUuid to get UUID strings without {} braces.
Definition: uuid.h:58
The board editor state base class.
Definition: boardeditorstate.h:59
QString name
Definition: boardeditorstate_select.h:73
The "select" state/tool of the board editor (default state)
Definition: boardeditorstate_select.h:69
virtual ~BoardEditorState_Select() noexcept
Definition: boardeditorstate_select.cpp:119
QScopedPointer< CmdBoardPolygonEdit > mCmdPolygonEdit
The polygon edit command (nullptr if not editing)
Definition: boardeditorstate_select.h:204
The CmdBoardZoneEdit class.
Definition: cmdboardzoneedit.h:49
bool measureSelectedItems(const BI_NetLine &netline) noexcept
Measure the length of the selected items.
Definition: boardeditorstate_select.cpp:1707
bool lockSelectedItems(bool locked) noexcept
Definition: boardeditorstate_select.cpp:1287
virtual bool processGraphicsSceneLeftMouseButtonDoubleClicked(QGraphicsSceneMouseEvent &e) noexcept override
Definition: boardeditorstate_select.cpp:679
virtual bool processAbortCommand() noexcept override
Definition: boardeditorstate_select.cpp:472
virtual bool processChangeLineWidth(int step) noexcept override
Definition: boardeditorstate_select.cpp:389
void openViaPropertiesDialog(BI_Via &via) noexcept
Definition: boardeditorstate_select.cpp:1826
The CmdDragSelectedBoardItems class.
Definition: cmddragselectedboarditems.h:58
The BI_Via class.
Definition: bi_via.h:44
type_safe::constrained_type< Length, UnsignedLengthConstraint, UnsignedLengthVerifier > UnsignedLength
Definition: length.h:696
bool resetAllTextsOfSelectedItems() noexcept
Definition: boardeditorstate_select.cpp:1392
bool mIsUndoCmdActive
An undo command will be active while dragging pasted items.
Definition: boardeditorstate_select.h:194