LibrePCB Developers Documentation
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#include <QtWidgets>
32
33#include <memory>
34#include <optional.hpp>
35
36/*******************************************************************************
37 * Namespace / Forward Declarations
38 ******************************************************************************/
39namespace librepcb {
40
41class Angle;
42class Polygon;
43class Zone;
44
45namespace editor {
46
47class CmdDragSelectedFootprintItems;
48class CmdPolygonEdit;
49class CmdZoneEdit;
50class FootprintClipboardData;
51
52/*******************************************************************************
53 * Class PackageEditorState_Select
54 ******************************************************************************/
55
60 Q_OBJECT
61
62 enum class SubState {
63 IDLE,
64 SELECTING,
65 MOVING,
66 PASTING,
67 MOVING_POLYGON_VERTEX,
68 MOVING_ZONE_VERTEX,
69 };
70
71public:
72 // Constructors / Destructor
75 explicit PackageEditorState_Select(Context& context) noexcept;
77
78 // General Methods
79 bool exit() noexcept override;
81 const noexcept override;
82
83 // Event Handlers
85 QGraphicsSceneMouseEvent& e) noexcept override;
87 QGraphicsSceneMouseEvent& e) noexcept override;
89 QGraphicsSceneMouseEvent& e) noexcept override;
91 QGraphicsSceneMouseEvent& e) noexcept override;
93 QGraphicsSceneMouseEvent& e) noexcept override;
94 bool processSelectAll() noexcept override;
95 bool processCut() noexcept override;
96 bool processCopy() noexcept override;
97 bool processPaste() noexcept override;
98 bool processMove(Qt::ArrowType direction) noexcept override;
99 bool processRotate(const Angle& rotation) noexcept override;
100 bool processMirror(Qt::Orientation orientation) noexcept override;
101 bool processFlip(Qt::Orientation orientation) noexcept override;
102 bool processSnapToGrid() noexcept override;
103 bool processRemove() noexcept override;
104 bool processEditProperties() noexcept override;
105 bool processGenerateOutline() noexcept override;
106 bool processGenerateCourtyard() noexcept override;
107 bool processImportDxf() noexcept override;
108 bool processAbortCommand() noexcept override;
109
110 // Operator Overloadings
112 delete;
113
114private: // Methods
115 bool openContextMenuAtPos(const Point& pos) noexcept;
116 bool openPropertiesDialogOfItem(std::shared_ptr<QGraphicsItem> item) noexcept;
117 bool openPropertiesDialogOfItemAtPos(const Point& pos) noexcept;
118 bool copySelectedItemsToClipboard() noexcept;
119 bool startPaste(std::unique_ptr<FootprintClipboardData> data,
120 const tl::optional<Point>& fixedPosition);
121 bool rotateSelectedItems(const Angle& angle) noexcept;
122 bool mirrorSelectedItems(Qt::Orientation orientation,
123 bool flipLayers) noexcept;
124 bool snapSelectedItemsToGrid() noexcept;
125 bool removeSelectedItems() noexcept;
126 bool generateOutline() noexcept;
127 bool generateCourtyard() noexcept;
128 void removePolygonVertices(std::shared_ptr<Polygon> polygon,
129 const QVector<int> vertices) noexcept;
130 void startAddingPolygonVertex(std::shared_ptr<Polygon> polygon, int vertex,
131 const Point& pos) noexcept;
132 void removeZoneVertices(std::shared_ptr<Zone> zone,
133 const QVector<int> vertices) noexcept;
134 void startAddingZoneVertex(std::shared_ptr<Zone> zone, int vertex,
135 const Point& pos) noexcept;
136 void setSelectionRect(const Point& p1, const Point& p2) noexcept;
137 void clearSelectionRect(bool updateItemsSelectionState) noexcept;
138 QList<std::shared_ptr<QGraphicsItem>> findItemsAtPosition(
139 const Point& pos) noexcept;
140 bool findPolygonVerticesAtPosition(const Point& pos) noexcept;
141 bool findZoneVerticesAtPosition(const Point& pos) noexcept;
142 void setState(SubState state) noexcept;
143
144private: // Types / Data
148
150 std::shared_ptr<Polygon> mSelectedPolygon;
155
157 std::shared_ptr<Zone> mSelectedZone;
161 QScopedPointer<CmdZoneEdit> mCmdZoneEdit;
162};
163
164/*******************************************************************************
165 * End of File
166 ******************************************************************************/
167
168} // namespace editor
169} // namespace librepcb
170
171#endif
The Angle class is used to represent an angle (for example 12.75 degrees)
Definition: angle.h:78
The Point class is used to represent a point/coordinate/vector, for example (1.2mm; 5....
Definition: point.h:79
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 EditorWidgetBase class.
Definition: editorwidgetbase.h:62
The FootprintClipboardData class.
Definition: footprintclipboarddata.h:55
The PackageEditorState_Select class.
Definition: packageeditorstate_select.h:59
bool processGraphicsSceneMouseMoved(QGraphicsSceneMouseEvent &e) noexcept override
Definition: packageeditorstate_select.cpp:136
bool processGenerateCourtyard() noexcept override
Definition: packageeditorstate_select.cpp:606
void setState(SubState state) noexcept
Definition: packageeditorstate_select.cpp:1501
void clearSelectionRect(bool updateItemsSelectionState) noexcept
Definition: packageeditorstate_select.cpp:1440
bool processEditProperties() noexcept override
Definition: packageeditorstate_select.cpp:563
bool processGraphicsSceneLeftMouseButtonReleased(QGraphicsSceneMouseEvent &e) noexcept override
Definition: packageeditorstate_select.cpp:295
bool mirrorSelectedItems(Qt::Orientation orientation, bool flipLayers) noexcept
Definition: packageeditorstate_select.cpp:1082
bool processGenerateOutline() noexcept override
Definition: packageeditorstate_select.cpp:595
SubState mState
Definition: packageeditorstate_select.h:145
bool copySelectedItemsToClipboard() noexcept
Definition: packageeditorstate_select.cpp:968
bool processRemove() noexcept override
Definition: packageeditorstate_select.cpp:552
bool rotateSelectedItems(const Angle &angle) noexcept
Definition: packageeditorstate_select.cpp:1065
~PackageEditorState_Select() noexcept
Definition: packageeditorstate_select.cpp:82
bool generateCourtyard() noexcept
Definition: packageeditorstate_select.cpp:1214
bool processAbortCommand() noexcept override
Definition: packageeditorstate_select.cpp:700
bool processPaste() noexcept override
Definition: packageeditorstate_select.cpp:424
QScopedPointer< CmdZoneEdit > mCmdZoneEdit
The zone edit command (nullptr if not editing)
Definition: packageeditorstate_select.h:161
void removeZoneVertices(std::shared_ptr< Zone > zone, const QVector< int > vertices) noexcept
Definition: packageeditorstate_select.cpp:1391
bool removeSelectedItems() noexcept
Definition: packageeditorstate_select.cpp:1117
bool openPropertiesDialogOfItem(std::shared_ptr< QGraphicsItem > item) noexcept
Definition: packageeditorstate_select.cpp:900
bool processRotate(const Angle &rotation) noexcept override
Definition: packageeditorstate_select.cpp:498
std::shared_ptr< Polygon > mSelectedPolygon
The current polygon selected for editing (nullptr if none)
Definition: packageeditorstate_select.h:150
bool processSelectAll() noexcept override
Definition: packageeditorstate_select.cpp:378
bool findZoneVerticesAtPosition(const Point &pos) noexcept
Definition: packageeditorstate_select.cpp:1481
bool processImportDxf() noexcept override
Definition: packageeditorstate_select.cpp:617
bool openContextMenuAtPos(const Point &pos) noexcept
Definition: packageeditorstate_select.cpp:739
QScopedPointer< CmdDragSelectedFootprintItems > mCmdDragSelectedItems
Definition: packageeditorstate_select.h:147
void startAddingPolygonVertex(std::shared_ptr< Polygon > polygon, int vertex, const Point &pos) noexcept
Definition: packageeditorstate_select.cpp:1370
bool openPropertiesDialogOfItemAtPos(const Point &pos) noexcept
Definition: packageeditorstate_select.cpp:957
PackageEditorState_Select(const PackageEditorState_Select &other)=delete
bool findPolygonVerticesAtPosition(const Point &pos) noexcept
Definition: packageeditorstate_select.cpp:1460
bool processCut() noexcept override
Definition: packageeditorstate_select.cpp:398
void startAddingZoneVertex(std::shared_ptr< Zone > zone, int vertex, const Point &pos) noexcept
Definition: packageeditorstate_select.cpp:1412
QVector< int > mSelectedZoneVertices
The zone vertex indices selected for editing (empty if none)
Definition: packageeditorstate_select.h:159
bool exit() noexcept override
Definition: packageeditorstate_select.cpp:90
QVector< int > mSelectedPolygonVertices
The polygon vertex indices selected for editing (empty if none)
Definition: packageeditorstate_select.h:152
QList< std::shared_ptr< QGraphicsItem > > findItemsAtPosition(const Point &pos) noexcept
Definition: packageeditorstate_select.cpp:1449
bool processSnapToGrid() noexcept override
Definition: packageeditorstate_select.cpp:539
bool processMove(Qt::ArrowType direction) noexcept override
Definition: packageeditorstate_select.cpp:449
bool processGraphicsSceneRightMouseButtonReleased(QGraphicsSceneMouseEvent &e) noexcept override
Definition: packageeditorstate_select.cpp:362
Point mStartPos
Definition: packageeditorstate_select.h:146
void setSelectionRect(const Point &p1, const Point &p2) noexcept
Definition: packageeditorstate_select.cpp:1433
bool processFlip(Qt::Orientation orientation) noexcept override
Definition: packageeditorstate_select.cpp:525
bool processMirror(Qt::Orientation orientation) noexcept override
Definition: packageeditorstate_select.cpp:511
QSet< EditorWidgetBase::Feature > getAvailableFeatures() const noexcept override
Definition: packageeditorstate_select.cpp:100
void removePolygonVertices(std::shared_ptr< Polygon > polygon, const QVector< int > vertices) noexcept
Definition: packageeditorstate_select.cpp:1344
bool startPaste(std::unique_ptr< FootprintClipboardData > data, const tl::optional< Point > &fixedPosition)
Definition: packageeditorstate_select.cpp:1022
bool snapSelectedItemsToGrid() noexcept
Definition: packageeditorstate_select.cpp:1105
bool processGraphicsSceneLeftMouseButtonPressed(QGraphicsSceneMouseEvent &e) noexcept override
Definition: packageeditorstate_select.cpp:197
SubState
Definition: packageeditorstate_select.h:62
QScopedPointer< CmdPolygonEdit > mCmdPolygonEdit
The polygon edit command (nullptr if not editing)
Definition: packageeditorstate_select.h:154
bool processCopy() noexcept override
Definition: packageeditorstate_select.cpp:413
std::shared_ptr< Zone > mSelectedZone
The current zone selected for editing (nullptr if none)
Definition: packageeditorstate_select.h:157
bool generateOutline() noexcept
Definition: packageeditorstate_select.cpp:1126
bool processGraphicsSceneLeftMouseButtonDoubleClicked(QGraphicsSceneMouseEvent &e) noexcept override
Definition: packageeditorstate_select.cpp:347
The PackageEditorState class is the base class of all package editor FSM states.
Definition: packageeditorstate.h:52
Definition: occmodel.cpp:77
Definition: uuid.h:183
Definition: packageeditorfsm.h:89