LibrePCB Developers Documentation
Loading...
Searching...
No Matches
boardeditorstate_addpad.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_ADDPAD_H
21#define LIBREPCB_EDITOR_BOARDEDITORSTATE_ADDPAD_H
22
23/*******************************************************************************
24 * Includes
25 ******************************************************************************/
26#include "boardeditorstate.h"
27
29
30#include <QtCore>
31
32#include <memory>
33#include <optional>
34
35/*******************************************************************************
36 * Namespace / Forward Declarations
37 ******************************************************************************/
38namespace librepcb {
39namespace editor {
40
41class BoardGraphicsScene;
42class CmdBoardPadEdit;
43
44/*******************************************************************************
45 * Class BoardEditorState_AddPad
46 ******************************************************************************/
47
52 Q_OBJECT
53
54public:
55 // Types
56 enum class PadType { THT, SMT };
57
58 // Constructors / Destructor
61 explicit BoardEditorState_AddPad(const Context& context, PadType type,
62 Pad::Function function) noexcept;
63 virtual ~BoardEditorState_AddPad() noexcept;
64
65 // General Methods
66 virtual bool entry() noexcept override;
67 virtual bool exit() noexcept override;
68
69 // Event Handlers
71 const GraphicsSceneMouseEvent& e) noexcept override;
73 const GraphicsSceneMouseEvent& e) noexcept override;
75 const GraphicsSceneMouseEvent& e) noexcept override;
77 const GraphicsSceneMouseEvent& e) noexcept override;
78 virtual bool processRotate(const Angle& rotation) noexcept override;
79
80 // Connection to UI
81 PadType getType() const noexcept { return mPadType; }
82 QVector<std::pair<Uuid, QString>> getAvailableNets() const noexcept;
83 std::optional<Uuid> getNet() const noexcept { return mCurrentNetSignal; }
84 void setNet(const std::optional<Uuid>& net) noexcept;
88 void setComponentSide(Pad::ComponentSide side) noexcept;
89 Pad::Shape getShape() const noexcept { return mCurrentProperties.getShape(); }
90 void setShape(Pad::Shape shape) noexcept;
91 const PositiveLength& getWidth() const noexcept {
93 }
94 void setWidth(const PositiveLength& width) noexcept;
95 const PositiveLength& getHeight() const noexcept {
97 }
98 void setHeight(const PositiveLength& height) noexcept;
99 const UnsignedLimitedRatio& getRadius() const noexcept {
101 }
102 void setRadius(const UnsignedLimitedRatio& radius) noexcept;
103 std::optional<PositiveLength> getDrillDiameter() const noexcept {
104 if (std::shared_ptr<const PadHole> hole =
106 return hole->getDiameter();
107 } else {
108 return std::nullopt;
109 }
110 }
111 void setDrillDiameter(const PositiveLength& diameter) noexcept;
112 const UnsignedLength& getCopperClearance() const noexcept {
114 }
115 void setCopperClearance(const UnsignedLength& clearance) noexcept;
116 const MaskConfig& getStopMaskConfig() const noexcept {
118 }
119 void setStopMaskConfig(const MaskConfig& cfg) noexcept;
120 Pad::Function getFunction() const noexcept {
122 }
123 bool getFunctionIsFiducial() const noexcept {
125 }
126 void setFunction(Pad::Function function) noexcept;
127
128 // Operator Overloadings
130 delete;
131
132signals:
133 void netChanged(const std::optional<Uuid>& net);
136 void widthChanged(const PositiveLength& width);
137 void heightChanged(const PositiveLength& height);
143
144private: // Methods
145 bool start(const Point& pos) noexcept;
146 bool updatePosition(BoardGraphicsScene& scene, const Point& pos) noexcept;
147 void setNetSignal(NetSignal* netsignal) noexcept;
148 bool finish(const Point& pos) noexcept;
149 bool abortCommand(bool showErrMsgBox) noexcept;
150 void applySelectedNetSignal() noexcept;
151 NetSignal* getCurrentNetSignal() const noexcept;
152 void applyRecommendedRoundedRectRadius() noexcept;
153 void makePadLayerVisible() noexcept;
154
155private: // Data
157
158 // State
160
161 // Current tool settings
163
166
167 // Information about the current pad to place. Only valid if
168 // mIsUndoCmdActive == true.
171};
172
173/*******************************************************************************
174 * End of File
175 ******************************************************************************/
176
177} // namespace editor
178} // namespace librepcb
179
180#endif
The Angle class is used to represent an angle (for example 12.75 degrees)
Definition angle.h:76
A pad in a board (either standalone or from a footprint)
Definition bi_pad.h:49
The BoardPadData class represents a pad in a board.
Definition boardpaddata.h:43
PadHoleList & getHoles() noexcept
Definition boardpaddata.h:87
The MaskConfig class defines how to add automatic stop mask or solder paste.
Definition maskconfig.h:45
The NetSignal class.
Definition netsignal.h:50
const PositiveLength & getWidth() const noexcept
Definition pad.h:100
bool getFunctionIsFiducial() const noexcept
Definition pad.cpp:220
const MaskConfig & getStopMaskConfig() const noexcept
Definition pad.h:106
ComponentSide
Definition pad.h:64
const UnsignedLength & getCopperClearance() const noexcept
Definition pad.h:112
Function
Definition pad.h:69
Function getFunction() const noexcept
Definition pad.h:116
Shape
Definition pad.h:58
const PositiveLength & getHeight() const noexcept
Definition pad.h:101
ComponentSide getComponentSide() const noexcept
Definition pad.h:115
const UnsignedLimitedRatio & getRadius() const noexcept
Definition pad.h:102
Shape getShape() const noexcept
Definition pad.h:99
The Point class is used to represent a point/coordinate/vector, for example (1.2mm; 5....
Definition point.h:78
std::shared_ptr< T > value(int index) noexcept
Definition serializableobjectlist.h:254
The Uuid class is a replacement for QUuid to get UUID strings without {} braces.
Definition uuid.h:56
The "add via" state/tool of the board editor.
Definition boardeditorstate_addpad.h:51
Pad::Shape getShape() const noexcept
Definition boardeditorstate_addpad.h:89
void setFunction(Pad::Function function) noexcept
Definition boardeditorstate_addpad.cpp:354
void setComponentSide(Pad::ComponentSide side) noexcept
Definition boardeditorstate_addpad.cpp:233
void setRadius(const UnsignedLimitedRatio &radius) noexcept
Definition boardeditorstate_addpad.cpp:295
std::optional< Uuid > getNet() const noexcept
Definition boardeditorstate_addpad.h:83
void setShape(Pad::Shape shape) noexcept
Definition boardeditorstate_addpad.cpp:248
virtual bool processGraphicsSceneMouseMoved(const GraphicsSceneMouseEvent &e) noexcept override
Definition boardeditorstate_addpad.cpp:165
const PositiveLength & getWidth() const noexcept
Definition boardeditorstate_addpad.h:91
void radiusChanged(const UnsignedLimitedRatio &radius)
bool getFunctionIsFiducial() const noexcept
Definition boardeditorstate_addpad.h:123
bool start(const Point &pos) noexcept
Definition boardeditorstate_addpad.cpp:368
QVector< std::pair< Uuid, QString > > getAvailableNets() const noexcept
Definition boardeditorstate_addpad.cpp:207
const MaskConfig & getStopMaskConfig() const noexcept
Definition boardeditorstate_addpad.h:116
std::optional< PositiveLength > getDrillDiameter() const noexcept
Definition boardeditorstate_addpad.h:103
PadType
Definition boardeditorstate_addpad.h:56
Pad::ComponentSide getComponentSide() const noexcept
Definition boardeditorstate_addpad.h:85
virtual bool processGraphicsSceneRightMouseButtonReleased(const GraphicsSceneMouseEvent &e) noexcept override
Definition boardeditorstate_addpad.cpp:187
bool finish(const Point &pos) noexcept
Definition boardeditorstate_addpad.cpp:419
const UnsignedLength & getCopperClearance() const noexcept
Definition boardeditorstate_addpad.h:112
void setDrillDiameter(const PositiveLength &diameter) noexcept
Definition boardeditorstate_addpad.cpp:306
BoardEditorState_AddPad(const BoardEditorState_AddPad &other)=delete
BoardPadData mCurrentProperties
Definition boardeditorstate_addpad.h:162
virtual bool processGraphicsSceneLeftMouseButtonPressed(const GraphicsSceneMouseEvent &e) noexcept override
Definition boardeditorstate_addpad.cpp:174
void setWidth(const PositiveLength &width) noexcept
Definition boardeditorstate_addpad.cpp:259
const PositiveLength & getHeight() const noexcept
Definition boardeditorstate_addpad.h:95
const PadType mPadType
Definition boardeditorstate_addpad.h:156
std::optional< Uuid > mCurrentNetSignal
The current net signal of the via.
Definition boardeditorstate_addpad.h:165
void componentSideChanged(Pad::ComponentSide side)
PadType getType() const noexcept
Definition boardeditorstate_addpad.h:81
void netChanged(const std::optional< Uuid > &net)
void applySelectedNetSignal() noexcept
Definition boardeditorstate_addpad.cpp:463
BoardEditorState_AddPad & operator=(const BoardEditorState_AddPad &rhs)=delete
void heightChanged(const PositiveLength &height)
virtual bool processRotate(const Angle &rotation) noexcept override
Definition boardeditorstate_addpad.cpp:193
void setNet(const std::optional< Uuid > &net) noexcept
Definition boardeditorstate_addpad.cpp:224
BI_Pad * mCurrentPad
Definition boardeditorstate_addpad.h:169
Pad::Function getFunction() const noexcept
Definition boardeditorstate_addpad.h:120
void functionChanged(Pad::Function function)
virtual bool processGraphicsSceneLeftMouseButtonDoubleClicked(const GraphicsSceneMouseEvent &e) noexcept override
Definition boardeditorstate_addpad.cpp:182
void stopMaskConfigChanged(const MaskConfig &cfg)
bool abortCommand(bool showErrMsgBox) noexcept
Definition boardeditorstate_addpad.cpp:438
void setNetSignal(NetSignal *netsignal) noexcept
void makePadLayerVisible() noexcept
Definition boardeditorstate_addpad.cpp:499
bool mIsUndoCmdActive
Definition boardeditorstate_addpad.h:159
void drillDiameterChanged(const PositiveLength &diameter)
virtual bool exit() noexcept override
Definition boardeditorstate_addpad.cpp:151
void widthChanged(const PositiveLength &width)
void copperClearanceChanged(const UnsignedLength &clearance)
bool updatePosition(BoardGraphicsScene &scene, const Point &pos) noexcept
Definition boardeditorstate_addpad.cpp:408
virtual ~BoardEditorState_AddPad() noexcept
Definition boardeditorstate_addpad.cpp:130
NetSignal * getCurrentNetSignal() const noexcept
Definition boardeditorstate_addpad.cpp:485
void applyRecommendedRoundedRectRadius() noexcept
Definition boardeditorstate_addpad.cpp:491
void setHeight(const PositiveLength &height) noexcept
Definition boardeditorstate_addpad.cpp:277
std::unique_ptr< CmdBoardPadEdit > mCurrentEditCmd
Definition boardeditorstate_addpad.h:170
void setCopperClearance(const UnsignedLength &clearance) noexcept
Definition boardeditorstate_addpad.cpp:330
const UnsignedLimitedRatio & getRadius() const noexcept
Definition boardeditorstate_addpad.h:99
virtual bool entry() noexcept override
Definition boardeditorstate_addpad.cpp:137
void setStopMaskConfig(const MaskConfig &cfg) noexcept
Definition boardeditorstate_addpad.cpp:342
The board editor state base class.
Definition boardeditorstate.h:60
The BoardGraphicsScene class.
Definition boardgraphicsscene.h:77
The CmdBoardPadEdit class.
Definition cmdboardpadedit.h:49
Definition occmodel.cpp:77
type_safe::constrained_type< Length, PositiveLengthConstraint, PositiveLengthVerifier > PositiveLength
Definition length.h:810
type_safe::constrained_type< Length, UnsignedLengthConstraint, UnsignedLengthVerifier > UnsignedLength
Definition length.h:694
type_safe::constrained_type< Ratio, UnsignedLimitedRatioConstraint, UnsignedLimitedRatioVerifier > UnsignedLimitedRatio
Definition ratio.h:376
Definition uuid.h:186
FSM Context.
Definition boardeditorfsm.h:99
Definition graphicsscene.h:45