LibrePCB Developers Documentation
Loading...
Searching...
No Matches
packageeditorstate_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_PACKAGEEDITORSTATE_SELECT_H
21#define LIBREPCB_EDITOR_PACKAGEEDITORSTATE_SELECT_H
22
23/*******************************************************************************
24 * Includes
25 ******************************************************************************/
26#include "packageeditorstate.h"
27
29
30#include <QtCore>
31
32#include <memory>
33#include <optional>
34
35/*******************************************************************************
36 * Namespace / Forward Declarations
37 ******************************************************************************/
38namespace librepcb {
39
40class Angle;
41class Polygon;
42class Zone;
43
44namespace editor {
45
46class CmdDragSelectedFootprintItems;
47class CmdPolygonEdit;
48class CmdZoneEdit;
49class FootprintClipboardData;
50
51/*******************************************************************************
52 * Class PackageEditorState_Select
53 ******************************************************************************/
54
59 Q_OBJECT
60
61 enum class SubState {
62 IDLE,
64 MOVING,
65 PASTING,
68 };
69
70public:
71 // Constructors / Destructor
74 explicit PackageEditorState_Select(Context& context) noexcept;
76
77 // General Methods
78 bool entry() noexcept override;
79 bool exit() noexcept override;
80
81 // Event Handlers
83 const GraphicsSceneMouseEvent& e) noexcept override;
85 const GraphicsSceneMouseEvent& e) noexcept override;
87 const GraphicsSceneMouseEvent& e) noexcept override;
89 const GraphicsSceneMouseEvent& e) noexcept override;
91 const GraphicsSceneMouseEvent& e) noexcept override;
92 bool processSelectAll() noexcept override;
93 bool processCut() noexcept override;
94 bool processCopy() noexcept override;
95 bool processPaste() noexcept override;
96 bool processMove(const Point& delta) noexcept override;
97 bool processRotate(const Angle& rotation) noexcept override;
98 bool processMirror(Qt::Orientation orientation) noexcept override;
99 bool processFlip(Qt::Orientation orientation) noexcept override;
100 bool processMoveAlign() noexcept override;
101 bool processSnapToGrid() noexcept override;
102 bool processRemove() noexcept override;
103 bool processEditProperties() noexcept override;
104 bool processGenerateOutline() noexcept override;
105 bool processGenerateCourtyard() noexcept override;
106 bool processImportDxf() noexcept override;
107 bool processAbortCommand() noexcept override;
109 const PositiveLength& interval) noexcept override;
110
111 // Operator Overloadings
113 delete;
114
115private: // Methods
116 bool openContextMenuAtPos(const Point& pos) noexcept;
117 bool openPropertiesDialogOfItem(std::shared_ptr<QGraphicsItem> item) noexcept;
118 bool openPropertiesDialogOfItemAtPos(const Point& pos) noexcept;
119 bool copySelectedItemsToClipboard() noexcept;
120 bool canPasteGeometry(
121 const std::unique_ptr<FootprintClipboardData>& data) const noexcept;
123 std::unique_ptr<FootprintClipboardData> data) noexcept;
124 bool startPaste(std::unique_ptr<FootprintClipboardData> data,
125 const std::optional<Point>& fixedPosition);
126 bool rotateSelectedItems(const Angle& angle) noexcept;
127 bool mirrorSelectedItems(Qt::Orientation orientation,
128 bool flipLayers) noexcept;
129 bool moveAlignSelectedItems() noexcept;
130 bool snapSelectedItemsToGrid() noexcept;
131 bool removeSelectedItems() noexcept;
132 bool generateOutline() noexcept;
133 bool generateCourtyard() noexcept;
134 void removePolygonVertices(std::shared_ptr<Polygon> polygon,
135 const QVector<int> vertices) noexcept;
136 void startAddingPolygonVertex(std::shared_ptr<Polygon> polygon, int vertex,
137 const Point& pos) noexcept;
138 void removeZoneVertices(std::shared_ptr<Zone> zone,
139 const QVector<int> vertices) noexcept;
140 void startAddingZoneVertex(std::shared_ptr<Zone> zone, int vertex,
141 const Point& pos) noexcept;
142 void setSelectionRect(const Point& p1, const Point& p2) noexcept;
143 void clearSelectionRect(bool updateItemsSelectionState) noexcept;
144 QList<std::shared_ptr<QGraphicsItem>> findItemsAtPosition(
145 const Point& pos) noexcept;
146 bool findPolygonVerticesAtPosition(const Point& pos) noexcept;
147 bool findZoneVerticesAtPosition(const Point& pos) noexcept;
148 void setState(SubState state) noexcept;
149 void scheduleUpdateAvailableFeatures() noexcept;
151
152private: // Types / Data
156
163
165 std::shared_ptr<Zone> mSelectedZone;
170
172 QList<QMetaObject::Connection> mConnections;
173
176};
177
178/*******************************************************************************
179 * End of File
180 ******************************************************************************/
181
182} // namespace editor
183} // namespace librepcb
184
185#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 Zone class.
Definition zone.h:43
The CmdDragSelectedFootprintItems class.
Definition cmddragselectedfootprintitems.h:54
The CmdPolygonEdit class.
Definition cmdpolygonedit.h:51
The CmdZoneEdit class.
Definition cmdzoneedit.h:48
The FootprintClipboardData class.
Definition footprintclipboarddata.h:52
Interface for the integration of the Package editor FSM.
Definition packageeditorfsmadapter.h:64
The PackageEditorState_Select class.
Definition packageeditorstate_select.h:58
bool processGenerateCourtyard() noexcept override
Definition packageeditorstate_select.cpp:592
void setState(SubState state) noexcept
Definition packageeditorstate_select.cpp:1689
bool moveAlignSelectedItems() noexcept
Definition packageeditorstate_select.cpp:1252
void clearSelectionRect(bool updateItemsSelectionState) noexcept
Definition packageeditorstate_select.cpp:1623
bool processEditProperties() noexcept override
Definition packageeditorstate_select.cpp:549
bool processGraphicsSceneMouseMoved(const GraphicsSceneMouseEvent &e) noexcept override
Definition packageeditorstate_select.cpp:132
bool processMoveAlign() noexcept override
Definition packageeditorstate_select.cpp:514
bool processGridIntervalChanged(const PositiveLength &interval) noexcept override
Definition packageeditorstate_select.cpp:708
bool mirrorSelectedItems(Qt::Orientation orientation, bool flipLayers) noexcept
Definition packageeditorstate_select.cpp:1226
bool processGraphicsSceneRightMouseButtonReleased(const GraphicsSceneMouseEvent &e) noexcept override
Definition packageeditorstate_select.cpp:356
bool processGenerateOutline() noexcept override
Definition packageeditorstate_select.cpp:581
SubState mState
Definition packageeditorstate_select.h:153
bool copySelectedItemsToClipboard() noexcept
Definition packageeditorstate_select.cpp:977
bool processRemove() noexcept override
Definition packageeditorstate_select.cpp:538
bool rotateSelectedItems(const Angle &angle) noexcept
Definition packageeditorstate_select.cpp:1206
bool processGraphicsSceneLeftMouseButtonReleased(const GraphicsSceneMouseEvent &e) noexcept override
Definition packageeditorstate_select.cpp:292
std::unique_ptr< CmdPolygonEdit > mCmdPolygonEdit
The polygon edit command (nullptr if not editing)
Definition packageeditorstate_select.h:162
bool processGraphicsSceneLeftMouseButtonPressed(const GraphicsSceneMouseEvent &e) noexcept override
Definition packageeditorstate_select.cpp:195
~PackageEditorState_Select() noexcept
Definition packageeditorstate_select.cpp:83
bool generateCourtyard() noexcept
Definition packageeditorstate_select.cpp:1396
bool processAbortCommand() noexcept override
Definition packageeditorstate_select.cpp:673
bool processPaste() noexcept override
Definition packageeditorstate_select.cpp:418
bool pasteGeometryFromClipboard(std::unique_ptr< FootprintClipboardData > data) noexcept
Definition packageeditorstate_select.cpp:1066
std::unique_ptr< CmdZoneEdit > mCmdZoneEdit
The zone edit command (nullptr if not editing)
Definition packageeditorstate_select.h:169
void removeZoneVertices(std::shared_ptr< Zone > zone, const QVector< int > vertices) noexcept
Definition packageeditorstate_select.cpp:1571
bool removeSelectedItems() noexcept
Definition packageeditorstate_select.cpp:1299
bool canPasteGeometry(const std::unique_ptr< FootprintClipboardData > &data) const noexcept
Definition packageeditorstate_select.cpp:1039
bool openPropertiesDialogOfItem(std::shared_ptr< QGraphicsItem > item) noexcept
Definition packageeditorstate_select.cpp:911
bool processRotate(const Angle &rotation) noexcept override
Definition packageeditorstate_select.cpp:473
std::shared_ptr< Polygon > mSelectedPolygon
The current polygon selected for editing (nullptr if none)
Definition packageeditorstate_select.h:158
bool processSelectAll() noexcept override
Definition packageeditorstate_select.cpp:372
bool findZoneVerticesAtPosition(const Point &pos) noexcept
Definition packageeditorstate_select.cpp:1667
std::unique_ptr< QTimer > mUpdateAvailableFeaturesTimer
Delay timer for updateAvailableFeatures(), only when in this state.
Definition packageeditorstate_select.h:175
bool processGraphicsSceneLeftMouseButtonDoubleClicked(const GraphicsSceneMouseEvent &e) noexcept override
Definition packageeditorstate_select.cpp:341
bool processImportDxf() noexcept override
Definition packageeditorstate_select.cpp:603
bool openContextMenuAtPos(const Point &pos) noexcept
Definition packageeditorstate_select.cpp:719
void startAddingPolygonVertex(std::shared_ptr< Polygon > polygon, int vertex, const Point &pos) noexcept
Definition packageeditorstate_select.cpp:1550
bool openPropertiesDialogOfItemAtPos(const Point &pos) noexcept
Definition packageeditorstate_select.cpp:966
bool startPaste(std::unique_ptr< FootprintClipboardData > data, const std::optional< Point > &fixedPosition)
Definition packageeditorstate_select.cpp:1165
QList< QMetaObject::Connection > mConnections
Signal/slot connections only when in this state.
Definition packageeditorstate_select.h:172
PackageEditorState_Select(const PackageEditorState_Select &other)=delete
bool findPolygonVerticesAtPosition(const Point &pos) noexcept
Definition packageeditorstate_select.cpp:1644
bool processCut() noexcept override
Definition packageeditorstate_select.cpp:392
void startAddingZoneVertex(std::shared_ptr< Zone > zone, int vertex, const Point &pos) noexcept
Definition packageeditorstate_select.cpp:1592
QVector< int > mSelectedZoneVertices
The zone vertex indices selected for editing (empty if none)
Definition packageeditorstate_select.h:167
bool exit() noexcept override
Definition packageeditorstate_select.cpp:111
void scheduleUpdateAvailableFeatures() noexcept
Definition packageeditorstate_select.cpp:1696
QVector< int > mSelectedPolygonVertices
The polygon vertex indices selected for editing (empty if none)
Definition packageeditorstate_select.h:160
QList< std::shared_ptr< QGraphicsItem > > findItemsAtPosition(const Point &pos) noexcept
Definition packageeditorstate_select.cpp:1634
bool processSnapToGrid() noexcept override
Definition packageeditorstate_select.cpp:525
PackageEditorFsmAdapter::Features updateAvailableFeatures() noexcept
Definition packageeditorstate_select.cpp:1701
Point mStartPos
Definition packageeditorstate_select.h:154
void setSelectionRect(const Point &p1, const Point &p2) noexcept
Definition packageeditorstate_select.cpp:1613
bool processFlip(Qt::Orientation orientation) noexcept override
Definition packageeditorstate_select.cpp:500
bool processMirror(Qt::Orientation orientation) noexcept override
Definition packageeditorstate_select.cpp:486
void removePolygonVertices(std::shared_ptr< Polygon > polygon, const QVector< int > vertices) noexcept
Definition packageeditorstate_select.cpp:1524
std::unique_ptr< CmdDragSelectedFootprintItems > mCmdDragSelectedItems
Definition packageeditorstate_select.h:155
bool snapSelectedItemsToGrid() noexcept
Definition packageeditorstate_select.cpp:1284
SubState
Definition packageeditorstate_select.h:61
bool processMove(const Point &delta) noexcept override
Definition packageeditorstate_select.cpp:450
bool processCopy() noexcept override
Definition packageeditorstate_select.cpp:407
std::shared_ptr< Zone > mSelectedZone
The current zone selected for editing (nullptr if none)
Definition packageeditorstate_select.h:165
bool entry() noexcept override
Definition packageeditorstate_select.cpp:91
bool generateOutline() noexcept
Definition packageeditorstate_select.cpp:1310
The PackageEditorState class is the base class of all package editor FSM states.
Definition packageeditorstate.h:52
Definition occmodel.cpp:77
type_safe::constrained_type< Length, PositiveLengthConstraint, PositiveLengthVerifier > PositiveLength
Definition length.h:810
Definition uuid.h:186
Definition graphicsscene.h:45
Definition packageeditorfsm.h:89