KiCad PCB EDA Suite
sch_move_tool.h
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2019 CERN
5  * Copyright (C) 2019-2021 KiCad Developers, see AUTHORS.txt for contributors.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, you may find one here:
19  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20  * or you may search the http://www.gnu.org website for the version 2 license,
21  * or you may write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23  */
24 
25 #ifndef KICAD_SCH_MOVE_TOOL_H
26 #define KICAD_SCH_MOVE_TOOL_H
27 
28 #include <tools/ee_tool_base.h>
29 #include <sch_base_frame.h>
30 
31 
32 class SCH_EDIT_FRAME;
33 class EE_SELECTION_TOOL;
34 
35 
37 {
40 };
41 
42 
43 class SCH_MOVE_TOOL : public EE_TOOL_BASE<SCH_EDIT_FRAME>
44 {
45 public:
46  SCH_MOVE_TOOL();
47  ~SCH_MOVE_TOOL() override { }
48 
50  bool Init() override;
51 
55  int Main( const TOOL_EVENT& aEvent );
56 
63  int AlignElements( const TOOL_EVENT& aEvent );
64 
65 private:
66  void moveItem( EDA_ITEM* aItem, const VECTOR2I& aDelta );
67 
71  void getConnectedDragItems( SCH_ITEM* aOriginalItem, const wxPoint& aPoint, EDA_ITEMS& aList );
72 
74  void setTransitions() override;
75 
76 private:
79  bool m_isDrag;
80 
82  std::vector<KIID> m_dragAdditions;
83 
86 
90 
91  boost::optional<VECTOR2I> m_anchorPos;
92 
93  // A map of labels to scaling factors. Used to scale the movement vector for labels that
94  // are attached to wires which have only one end moving.
95  std::map<SCH_TEXT*, SPECIAL_CASE_LABEL_INFO> m_specialCaseLabels;
96 
97 };
98 
99 #endif //KICAD_SCH_MOVE_TOOL_H
int Main(const TOOL_EVENT &aEvent)
Run an interactive move of the selected items, or the item under the cursor.
VECTOR2I m_cursor
Definition: sch_move_tool.h:89
VECTOR2I m_moveOffset
Last cursor position (needed for getModificationPoint() to avoid changes of edit reference point).
Definition: sch_move_tool.h:85
std::vector< KIID > m_dragAdditions
Used for chaining commands.
Definition: sch_move_tool.h:82
Schematic editor (Eeschema) main window.
bool m_moveInProgress
< Flag determining if anything is being dragged right now
Definition: sch_move_tool.h:78
~SCH_MOVE_TOOL() override
Definition: sch_move_tool.h:47
std::map< SCH_TEXT *, SPECIAL_CASE_LABEL_INFO > m_specialCaseLabels
Definition: sch_move_tool.h:95
boost::optional< VECTOR2I > m_anchorPos
Definition: sch_move_tool.h:91
void getConnectedDragItems(SCH_ITEM *aOriginalItem, const wxPoint &aPoint, EDA_ITEMS &aList)
Set up handlers for various events.
Generic, UI-independent tool event.
Definition: tool_event.h:152
int AlignElements(const TOOL_EVENT &aEvent)
Align selected elements to the grid.
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
Definition: eda_item.h:507
bool Init() override
Init() is called once upon a registration of the tool.
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
void moveItem(EDA_ITEM *aItem, const VECTOR2I &aDelta)
Find additional items for a drag operation.
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:100
A foundation class for a tool operating on a schematic or symbol.
Definition: ee_tool_base.h:49
void setTransitions() override
This method is meant to be overridden in order to specify handlers for events.
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:193
bool m_isDrag
Items (such as wires) which were added to the selection for a drag.
Definition: sch_move_tool.h:79