KiCad PCB EDA Suite
Loading...
Searching...
No Matches
common_tools.cpp
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) 2014-2016 CERN
5 * Copyright (C) 2020-2023 KiCad Developers, see AUTHORS.txt for contributors.
6 * @author Maciej Suminski <[email protected]>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, you may find one here:
20 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21 * or you may search the http://www.gnu.org website for the version 2 license,
22 * or you may write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
26#include <base_screen.h>
27#include <base_units.h>
28#include <gal/painter.h>
29#include <bitmaps.h>
33#include <eda_draw_frame.h>
35#include <id.h>
36#include <math/vector2wx.h>
37#include <core/kicad_algo.h>
38#include <kiface_base.h>
40#include <tool/actions.h>
41#include <tool/common_tools.h>
42#include <tool/tool_manager.h>
43#include <view/view.h>
44#include <view/view_controls.h>
45#include "macros.h"
46
47
49 TOOL_INTERACTIVE( "common.Control" ),
50 m_frame( nullptr ),
51 m_imperialUnit( EDA_UNITS::INCHES ),
52 m_metricUnit( EDA_UNITS::MILLIMETRES )
53{
54}
55
57{
58 m_frame = getEditFrame<EDA_DRAW_FRAME>();
59
62
63 m_grids.clear();
64
65 for( GRID& gridDef : settings.grids )
66 {
67 double gridSizeX = EDA_UNIT_UTILS::UI::DoubleValueFromString( scale, EDA_UNITS::MILLIMETRES,
68 gridDef.x );
69 double gridSizeY = EDA_UNIT_UTILS::UI::DoubleValueFromString( scale, EDA_UNITS::MILLIMETRES,
70 gridDef.y );
71
72 m_grids.emplace_back( KiROUND<double, int>( gridSizeX ),
73 KiROUND<double, int>( gridSizeY ) );
74 }
75
76 OnGridChanged( false );
77}
78
79
81{
83 m_imperialUnit = aUnit;
84 else if( EDA_UNIT_UTILS::IsMetricUnit( aUnit ) )
85 m_metricUnit = aUnit;
86 else
87 wxASSERT_MSG( false, wxS( "Invalid unit" ) );
88}
89
90
92{
93 // Since selection tools are run permanently underneath the toolStack, this is really
94 // just a cancel of whatever other tools might be running.
95
97 return 0;
98}
99
100
101// Cursor control
103{
105
106 bool mirroredX = getView()->IsMirroredX();
108 VECTOR2D gridSize = getView()->GetGAL()->GetGridSize();
109
110 switch( type )
111 {
113 gridSize *= 10;
116 cursor -= VECTOR2D( 0, gridSize.y );
117 break;
118
120 gridSize *= 10;
123 cursor += VECTOR2D( 0, gridSize.y );
124 break;
125
127 gridSize *= 10;
130 cursor -= VECTOR2D( mirroredX ? -gridSize.x : gridSize.x, 0 );
131 break;
132
134 gridSize *= 10;
137 cursor += VECTOR2D( mirroredX ? -gridSize.x : gridSize.x, 0 );
138 break;
139
140 case ACTIONS::CURSOR_CLICK: // fall through
143 {
146 int modifiers = 0;
147
148 modifiers |= wxGetKeyState( WXK_SHIFT ) ? MD_SHIFT : 0;
149 modifiers |= wxGetKeyState( WXK_CONTROL ) ? MD_CTRL : 0;
150 modifiers |= wxGetKeyState( WXK_ALT ) ? MD_ALT : 0;
151
152 if( type == ACTIONS::CURSOR_DBL_CLICK )
153 action = TA_MOUSE_DBLCLICK;
154 else if( type == ACTIONS::CURSOR_RIGHT_CLICK )
155 button = BUT_RIGHT;
156
157 TOOL_EVENT evt( TC_MOUSE, action, static_cast<int>( button | modifiers ) );
158 evt.SetParameter( type );
159 evt.SetMousePosition( getViewControls()->GetMousePosition() );
160 m_toolMgr->ProcessEvent( evt );
161
162 return 0;
163 }
164 default:
165 wxFAIL_MSG( wxS( "CursorControl(): unexpected request" ) );
166 }
167
168 getViewControls()->SetCursorPosition( cursor, true, true, type );
170
171 return 0;
172}
173
174
176{
178 KIGFX::VIEW* view = getView();
179 VECTOR2D center = view->GetCenter();
180 VECTOR2D gridSize = getView()->GetGAL()->GetGridSize() * 10;
181 bool mirroredX = view->IsMirroredX();
182
183 switch( type )
184 {
186 center -= VECTOR2D( 0, gridSize.y );
187 break;
188
190 center += VECTOR2D( 0, gridSize.y );
191 break;
192
194 center -= VECTOR2D( mirroredX ? -gridSize.x : gridSize.x, 0 );
195 break;
196
198 center += VECTOR2D( mirroredX ? -gridSize.x : gridSize.x, 0 );
199 break;
200
201 default:
202 wxFAIL;
203 break;
204 }
205
206 view->SetCenter( center );
207
208 return 0;
209}
210
211
213{
215 return 0;
216}
217
218
220{
221 bool direction = aEvent.IsAction( &ACTIONS::zoomIn );
222 return doZoomInOut( direction, true );
223}
224
225
227{
228 bool direction = aEvent.IsAction( &ACTIONS::zoomInCenter );
229 return doZoomInOut( direction, false );
230}
231
232
233int COMMON_TOOLS::doZoomInOut( bool aDirection, bool aCenterOnCursor )
234{
235 double zoom = getView()->GetGAL()->GetZoomFactor();
236
237 // Step must be AT LEAST 1.3
238 if( aDirection )
239 zoom *= 1.3;
240 else
241 zoom /= 1.3;
242
243 // Now look for the next closest menu step
244 std::vector<double>& zoomList = m_toolMgr->GetSettings()->m_Window.zoom_factors;
245 int idx;
246
247 if( aDirection )
248 {
249 for( idx = 0; idx < int( zoomList.size() ); ++idx )
250 {
251 if( zoomList[idx] >= zoom )
252 break;
253 }
254
255 if( idx >= int( zoomList.size() ) )
256 idx = (int) zoomList.size() - 1; // if we ran off the end then peg to the end
257 }
258 else
259 {
260 for( idx = int( zoomList.size() ) - 1; idx >= 0; --idx )
261 {
262 if( zoomList[idx] <= zoom )
263 break;
264 }
265
266 if( idx < 0 )
267 idx = 0; // if we ran off the end then peg to the end
268 }
269
270 // Note: idx == 0 is Auto; idx == 1 is first entry in zoomList
271 return doZoomToPreset( idx + 1, aCenterOnCursor );
272}
273
274
276{
278
279 ctls->CenterOnCursor();
280
281 return 0;
282}
283
284
286{
287 return doZoomFit( ZOOM_FIT_ALL );
288}
289
290
292{
293 return doZoomFit( ZOOM_FIT_OBJECTS );
294}
295
296
298{
299 KIGFX::VIEW* view = getView();
301 EDA_DRAW_FRAME* frame = getEditFrame<EDA_DRAW_FRAME>();
302
303 BOX2I bBox = frame->GetDocumentExtents();
304 BOX2I defaultBox = canvas->GetDefaultViewBBox();
305
306 view->SetScale( 1.0 ); // The best scale will be determined later, but this initial
307 // value ensures all view parameters are up to date (especially
308 // at init time)
309 VECTOR2D screenSize = view->ToWorld( ToVECTOR2I( canvas->GetClientSize() ), false );
310
311 // Currently "Zoom to Objects" is only supported in Eeschema & Pcbnew. Support for other
312 // programs in the suite can be added as needed.
313
314 if( aFitType == ZOOM_FIT_ALL )
315 {
316 if( frame->IsType( FRAME_PCB_EDITOR ) )
317 bBox = m_frame->GetDocumentExtents( false );
318 }
319
320 if( aFitType == ZOOM_FIT_OBJECTS )
321 {
322 if( frame->IsType( FRAME_SCH ) )
323 bBox = m_frame->GetDocumentExtents( false );
324 else
325 aFitType = ZOOM_FIT_ALL; // Just do a "Zoom to Fit" for unsupported editors
326 }
327
328 // If the screen is empty then use the default view bbox
329
330 if( bBox.GetWidth() == 0 || bBox.GetHeight() == 0 )
331 bBox = defaultBox;
332
333 VECTOR2D vsize = bBox.GetSize();
334 double scale = view->GetScale() / std::max( fabs( vsize.x / screenSize.x ),
335 fabs( vsize.y / screenSize.y ) );
336
337 // if the scale isn't finite (most likely due to an empty canvas)
338 // simply just make sure we are centered and quit out of trying to zoom to fit
339 if( !std::isfinite( scale ) )
340 {
341 view->SetCenter( VECTOR2D( 0, 0 ) );
342 canvas->Refresh();
343 return 0;
344 }
345
346 // Reserve enough margin to limit the amount of the view that might be obscured behind the
347 // infobar.
348 double margin_scale_factor = 1.04;
349
350 if( canvas->GetClientSize().y < 768 )
351 margin_scale_factor = 1.10;
352
353 if( aFitType == ZOOM_FIT_ALL )
354 {
355 // Leave a bigger margin for library editors & viewers
356
357 if( frame->IsType( FRAME_FOOTPRINT_VIEWER )
358 || frame->IsType( FRAME_SCH_VIEWER ) )
359 {
360 margin_scale_factor = 1.30;
361 }
362 else if( frame->IsType( FRAME_SCH_SYMBOL_EDITOR )
363 || frame->IsType( FRAME_FOOTPRINT_EDITOR ) )
364 {
365 margin_scale_factor = 1.48;
366 }
367 }
368
369 view->SetScale( scale / margin_scale_factor );
370 view->SetCenter( bBox.Centre() );
371 canvas->Refresh();
372
373 return 0;
374}
375
376
378{
380 BOX2I bBox = getModel<EDA_ITEM>()->ViewBBox();
381
382 if( bBox.GetWidth() == 0 || bBox.GetHeight() == 0 )
383 bBox = canvas->GetDefaultViewBBox();
384
385 getView()->SetCenter( bBox.Centre() );
386
387 // Take scrollbars into account
388 VECTOR2D scrollbarSize = VECTOR2D( ToVECTOR2D( canvas->GetSize() - canvas->GetClientSize() ) );
389 VECTOR2D worldScrollbarSize = getView()->ToWorld( scrollbarSize, false );
390 getView()->SetCenter( getView()->GetCenter() + worldScrollbarSize / 2.0 );
391 canvas->Refresh();
392
393 return 0;
394}
395
396
398{
399 int idx = aEvent.Parameter<int>();
400 return doZoomToPreset( idx, false );
401}
402
403
404// Note: idx == 0 is Auto; idx == 1 is first entry in zoomList
405int COMMON_TOOLS::doZoomToPreset( int idx, bool aCenterOnCursor )
406{
407 std::vector<double>& zoomList = m_toolMgr->GetSettings()->m_Window.zoom_factors;
408
409 if( idx == 0 ) // Zoom Auto
410 {
412 return ZoomFitScreen( dummy );
413 }
414 else
415 {
416 idx--;
417 }
418
419 double scale = zoomList[idx];
420
421 if( aCenterOnCursor )
422 {
423 getView()->SetScale( scale, getViewControls()->GetCursorPosition() );
424
425 if( getViewControls()->IsCursorWarpingEnabled() )
427 }
428 else
429 {
430 getView()->SetScale( scale );
431 }
432
434
435 return 0;
436}
437
438
439// Grid control
441{
442 int& currentGrid = m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
443
444 currentGrid++;
445
446 if( currentGrid >= int( m_grids.size() ) )
447 currentGrid = 0;
448
449 return OnGridChanged( true );
450}
451
452
454{
455 int& currentGrid = m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
456
457 currentGrid--;
458
459 if( currentGrid < 0 )
460 currentGrid = (int) m_grids.size() - 1;
461
462 return OnGridChanged( true );
463}
464
465
467{
468 return GridPreset( aEvent.Parameter<int>(), false );
469}
470
471
472int COMMON_TOOLS::GridPreset( int idx, bool aFromHotkey )
473{
474 int& currentGrid = m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
475
476 currentGrid = alg::clamp( 0, idx, (int) m_grids.size() - 1 );
477
478 return OnGridChanged( aFromHotkey );
479}
480
481
482int COMMON_TOOLS::OnGridChanged( bool aFromHotkey )
483{
484 int& currentGrid = m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
485
486 currentGrid = std::max( 0, std::min( currentGrid, static_cast<int>( m_grids.size() ) - 1 ) );
487
488 // Update the combobox (if any)
489 wxUpdateUIEvent dummy;
491
492 // Update GAL canvas from screen
493 getView()->GetGAL()->SetGridSize( m_grids[ currentGrid ] );
496
497 // Put cursor on new grid
498 VECTOR2D gridCursor = getViewControls()->GetCursorPosition( true );
499 getViewControls()->SetCrossHairCursorPosition( gridCursor, false );
500
501 // Show feedback
502 if( aFromHotkey )
504
505 return 0;
506}
507
508
510{
511 return GridPreset( m_frame->config()->m_Window.grid.fast_grid_1, true );
512}
513
514
516{
517 return GridPreset( m_frame->config()->m_Window.grid.fast_grid_2, true );
518}
519
520
522{
525 {
526 return GridPreset( m_frame->config()->m_Window.grid.fast_grid_2, true );
527 }
528
529 return GridPreset( m_frame->config()->m_Window.grid.fast_grid_1, true );
530}
531
532
534{
536 return 0;
537}
538
539
541{
543 return 0;
544}
545
546
548{
549 auto showGridPrefs =
550 [this]( const wxString& aParentName )
551 {
552 m_frame->CallAfter(
553 [this, aParentName]()
554 {
555 m_frame->ShowPreferences( _( "Grids" ), aParentName );
556 } );
557 };
558
559 switch( m_frame->GetFrameType() )
560 {
561 case FRAME_SCH: showGridPrefs( _( "Schematic Editor" ) ); break;
562 case FRAME_SCH_SYMBOL_EDITOR: showGridPrefs( _( "Symbol Editor" ) ); break;
563 case FRAME_PCB_EDITOR: showGridPrefs( _( "PCB Editor" ) ); break;
564 case FRAME_FOOTPRINT_EDITOR: showGridPrefs( _( "Footprint Editor" ) ); break;
565 case FRAME_PL_EDITOR: showGridPrefs( _( "Drawing Sheet Editor" ) ); break;
566 case FRAME_GERBER: showGridPrefs( _( "Gerber Viewer" ) ); break;
567 default: wxFAIL_MSG( "Unknown frame: " + GetName() ); break;
568 }
569
570 return 0;
571}
572
573
575{
576 VECTOR2I origin = m_frame->GetGridOrigin();
577 WX_PT_ENTRY_DIALOG dlg( m_frame, _( "Grid Origin" ), _( "X:" ), _( "Y:" ), origin );
578
579 if( dlg.ShowModal() == wxID_OK )
580 {
582
586 }
587
588 return 0;
589}
590
591
593{
594 EDA_UNITS newUnit = aEvent.Parameter<EDA_UNITS>();
595
596 if( EDA_UNIT_UTILS::IsMetricUnit( newUnit ) )
597 m_metricUnit = newUnit;
598 else if( EDA_UNIT_UTILS::IsImperialUnit( newUnit ) )
599 m_imperialUnit = newUnit;
600 else
601 wxASSERT_MSG( false, wxS( "Invalid unit for the frame" ) );
602
603 m_frame->ChangeUserUnits( newUnit );
604 return 0;
605}
606
607
609{
613 return 0;
614}
615
616
618{
619 m_frame->SetStatusText( wxEmptyString );
622
623 return 0;
624}
625
626
628{
629 const KIGFX::VC_SETTINGS& vcSettings = m_toolMgr->GetCurrentToolVC();
630
631 // Use either the active tool forced cursor position or the general settings
632 if( vcSettings.m_forceCursorPosition )
634 else
636
638
639 return 0;
640}
641
642
644{
645 auto& galOpts = m_frame->GetGalDisplayOptions();
646
647 galOpts.m_forceDisplayCursor = !galOpts.m_forceDisplayCursor;
648 galOpts.WriteConfig( m_toolMgr->GetSettings()->m_Window );
649 galOpts.NotifyChanged();
650
651 return 0;
652}
653
654
656{
658
659 galOpts.m_fullscreenCursor = !galOpts.m_fullscreenCursor;
661 galOpts.NotifyChanged();
662
663 return 0;
664}
665
666
668{
670
671 if( canvas )
672 {
674
676
677 canvas->GetView()->UpdateAllItems( KIGFX::ALL );
678 canvas->ForceRefresh();
679 }
680
681 return 0;
682}
683
684
686{
688
689 // Cursor control
698
702
703 // Pan control
708
709 // Zoom control
720
721 // Grid control
732
733 // Units and coordinates
740
741 // Misc
745}
746
747
BASE_SCREEN class implementation.
static TOOL_ACTION gridProperties
Definition: actions.h:174
static TOOL_ACTION gridFastCycle
Definition: actions.h:166
static TOOL_ACTION toggleGrid
Definition: actions.h:172
static TOOL_ACTION zoomRedraw
Definition: actions.h:114
static TOOL_ACTION millimetersUnits
Definition: actions.h:180
static TOOL_ACTION gridFast1
Definition: actions.h:164
static TOOL_ACTION gridPrev
Definition: actions.h:168
static TOOL_ACTION cursorLeft
Definition: actions.h:146
static TOOL_ACTION zoomOutCenter
Definition: actions.h:118
static TOOL_ACTION togglePolarCoords
Definition: actions.h:183
static TOOL_ACTION zoomIn
Definition: actions.h:115
static TOOL_ACTION cursorLeftFast
Definition: actions.h:151
static TOOL_ACTION gridPreset
Definition: actions.h:171
static TOOL_ACTION cursorDown
Definition: actions.h:145
static TOOL_ACTION zoomOut
Definition: actions.h:116
static TOOL_ACTION milsUnits
Definition: actions.h:179
static TOOL_ACTION cursorRightFast
Definition: actions.h:152
static TOOL_ACTION toggleBoundingBoxes
Definition: actions.h:135
static TOOL_ACTION showContextMenu
Definition: actions.h:65
static TOOL_ACTION toggleCursor
Definition: actions.h:131
static TOOL_ACTION centerContents
Definition: actions.h:130
static TOOL_ACTION zoomCenter
Definition: actions.h:123
static TOOL_ACTION panDown
Definition: actions.h:159
static TOOL_ACTION cursorDblClick
Definition: actions.h:155
CURSOR_EVENT_TYPE
Definition: actions.h:225
@ CURSOR_DBL_CLICK
Definition: actions.h:236
@ CURSOR_RIGHT
Definition: actions.h:233
@ CURSOR_LEFT_FAST
Definition: actions.h:232
@ CURSOR_LEFT
Definition: actions.h:231
@ CURSOR_DOWN_FAST
Definition: actions.h:230
@ CURSOR_CLICK
Definition: actions.h:235
@ CURSOR_UP
Definition: actions.h:227
@ CURSOR_RIGHT_FAST
Definition: actions.h:234
@ CURSOR_DOWN
Definition: actions.h:229
@ CURSOR_UP_FAST
Definition: actions.h:228
@ CURSOR_RIGHT_CLICK
Definition: actions.h:237
static TOOL_ACTION cursorDownFast
Definition: actions.h:150
static TOOL_ACTION inchesUnits
Definition: actions.h:178
static TOOL_ACTION cursorUpFast
Definition: actions.h:149
static TOOL_ACTION toggleCursorStyle
Definition: actions.h:132
static TOOL_ACTION gridOrigin
Definition: actions.h:175
static TOOL_ACTION panLeft
Definition: actions.h:160
static TOOL_ACTION selectionTool
Definition: actions.h:187
static TOOL_ACTION cursorClick
Definition: actions.h:154
static TOOL_ACTION zoomFitScreen
Definition: actions.h:124
static TOOL_ACTION zoomPreset
Definition: actions.h:126
static TOOL_ACTION panUp
Definition: actions.h:158
static TOOL_ACTION zoomFitObjects
Definition: actions.h:125
static TOOL_ACTION toggleUnits
Definition: actions.h:182
static TOOL_ACTION zoomInCenter
Definition: actions.h:117
static TOOL_ACTION panRight
Definition: actions.h:161
static TOOL_ACTION gridSetOrigin
Definition: actions.h:169
static TOOL_ACTION gridFast2
Definition: actions.h:165
static TOOL_ACTION cursorUp
Cursor control with keyboard.
Definition: actions.h:144
static TOOL_ACTION refreshPreview
Definition: actions.h:137
static TOOL_ACTION toggleGridOverrides
Definition: actions.h:173
static TOOL_ACTION gridNext
Definition: actions.h:167
static TOOL_ACTION cursorRight
Definition: actions.h:147
static TOOL_ACTION resetLocalCoords
Definition: actions.h:184
WINDOW_SETTINGS m_Window
Definition: app_settings.h:170
VECTOR2D m_LocalOrigin
Relative Screen cursor coordinate (on grid) in user units.
Definition: base_screen.h:90
coord_type GetHeight() const
Definition: box2.h:189
coord_type GetWidth() const
Definition: box2.h:188
Vec Centre() const
Definition: box2.h:71
const Vec & GetSize() const
Definition: box2.h:180
int ZoomCenter(const TOOL_EVENT &aEvent)
int GridProperties(const TOOL_EVENT &aEvent)
int GridFastCycle(const TOOL_EVENT &aEvent)
int ToggleCursorStyle(const TOOL_EVENT &aEvent)
int GridOrigin(const TOOL_EVENT &aEvent)
int doZoomToPreset(int idx, bool aCenterOnCursor)
int PanControl(const TOOL_EVENT &aEvent)
EDA_UNITS m_metricUnit
Definition: common_tools.h:123
EDA_UNITS m_imperialUnit
Definition: common_tools.h:122
int SwitchUnits(const TOOL_EVENT &aEvent)
int ToggleGrid(const TOOL_EVENT &aEvent)
int GridFast1(const TOOL_EVENT &aEvent)
void SetLastUnits(EDA_UNITS aUnit)
int ToggleUnits(const TOOL_EVENT &aEvent)
int GridFast2(const TOOL_EVENT &aEvent)
int GridNext(const TOOL_EVENT &aEvent)
int OnGridChanged(bool aFromHotkey)
void setTransitions() override
Pointer to the currently used edit frame.
int ZoomPreset(const TOOL_EVENT &aEvent)
int ZoomFitScreen(const TOOL_EVENT &aEvent)
int ToggleBoundingBoxes(const TOOL_EVENT &aEvent)
int ToggleGridOverrides(const TOOL_EVENT &aEvent)
std::vector< VECTOR2I > m_grids
Grids from #APP_SETTINGS converted to internal units and with the user grid appended.
Definition: common_tools.h:118
int ToggleCursor(const TOOL_EVENT &aEvent)
int ZoomFitObjects(const TOOL_EVENT &aEvent)
int CenterContents(const TOOL_EVENT &aEvent)
void Reset(RESET_REASON aReason) override
Bring the tool to a known, initial state.
int TogglePolarCoords(const TOOL_EVENT &aEvent)
int GridPrev(const TOOL_EVENT &aEvent)
int ZoomInOutCenter(const TOOL_EVENT &aEvent)
int ZoomRedraw(const TOOL_EVENT &aEvent)
int ResetLocalCoords(const TOOL_EVENT &aEvent)
EDA_DRAW_FRAME * m_frame
Definition: common_tools.h:109
int doZoomFit(ZOOM_FIT_TYPE_T aFitType)
int CursorControl(const TOOL_EVENT &aEvent)
ZOOM_FIT_TYPE_T
The set of "Zoom to Fit" types that can be performed.
Definition: common_tools.h:100
@ ZOOM_FIT_ALL
Zoom to fall all items in view INCLUDING page and border.
Definition: common_tools.h:101
@ ZOOM_FIT_OBJECTS
Zoom to fit all items in view EXCLUDING page and border.
Definition: common_tools.h:102
int SelectionTool(const TOOL_EVENT &aEvent)
int GridPreset(const TOOL_EVENT &aEvent)
int ZoomInOut(const TOOL_EVENT &aEvent)
int doZoomInOut(bool aDirection, bool aCenterOnCursor)
Note: idx == 0 is Auto; idx == 1 is first entry in zoomList.
FRAME_T GetFrameType() const
virtual APP_SETTINGS_BASE * config() const
Returns the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
void ShowPreferences(wxString aStartPage, wxString aStartParentPage)
Displays the preferences and settings of all opened editors paged dialog, starting with a particular ...
void ChangeUserUnits(EDA_UNITS aUnits)
bool IsType(FRAME_T aType) const
The base class for create windows for drawing purpose.
virtual const BOX2I GetDocumentExtents(bool aIncludeAllVisible=true) const
Returns bbox of document with option to not include some items.
virtual BASE_SCREEN * GetScreen() const
Return a pointer to a BASE_SCREEN or one of its derivatives.
virtual void HardRedraw()
Rebuild the GAL and redraws the screen.
virtual void SetGridOrigin(const VECTOR2I &aPosition)=0
bool IsGridOverridden() const
GAL_DISPLAY_OPTIONS_IMPL & GetGalDisplayOptions()
Return a reference to the gal rendering options used by GAL for rendering.
virtual const VECTOR2I & GetGridOrigin() const =0
Return the absolute coordinates of the origin of the snap grid.
void SetShowPolarCoords(bool aShow)
virtual void SetGridVisibility(bool aVisible)
void UpdateStatusBar() override
Update the status bar information.
virtual EDA_DRAW_PANEL_GAL * GetCanvas() const
Return a pointer to GAL-based canvas of given EDA draw frame.
bool IsGridVisible() const
virtual void SetGridOverrides(bool aOverride)
void OnUpdateSelectGrid(wxUpdateUIEvent &aEvent)
Update the checked item in the grid wxchoice.
bool GetShowPolarCoords() const
For those frames that support polar coordinates.
virtual BOX2I GetDefaultViewBBox() const
Return the bounding box of the view that should be used if model is not valid.
virtual KIGFX::VIEW * GetView() const
Return a pointer to the #VIEW instance used in the panel.
void ForceRefresh()
Force a redraw.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
static const TOOL_EVENT GridChangedByKeyEvent
Definition: actions.h:277
void WriteConfig(WINDOW_SETTINGS &aCfg)
bool m_forceDisplayCursor
The pixel scale factor (>1 for hi-DPI scaled displays)
bool m_fullscreenCursor
Force cursor display.
double GetZoomFactor() const
void SetGridSize(const VECTOR2D &aGridSize)
Set the grid size.
const VECTOR2D & GetGridSize() const
Return the grid size.
void SetGridVisibility(bool aVisibility)
Set the visibility setting of the grid.
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
void SetDrawBoundingBoxes(bool aEnabled)
bool GetDrawBoundingBoxes() const
An interface for classes handling user events controlling the view behavior such as zooming,...
virtual VECTOR2D GetRawCursorPosition(bool aSnappingEnabled=true) const =0
Return the current cursor position in world coordinates ignoring the cursorUp position force mode.
virtual void CenterOnCursor()=0
Set the viewport center to the current cursor position and warps the cursor to the screen center.
virtual void SetCrossHairCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Move the graphic crosshair cursor to the requested position expressed in world coordinates.
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
virtual void SetCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true, bool aTriggeredByArrows=false, long aArrowCommand=0)=0
Move cursor to the requested position expressed in world coordinates.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition: view.h:68
double GetScale() const
Definition: view.h:271
virtual void SetScale(double aScale, VECTOR2D aAnchor={ 0, 0 })
Set the scaling factor, zooming around a given anchor point.
Definition: view.cpp:552
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
Definition: view.h:197
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Converts a screen space point/vector to a point/vector in world space coordinates.
Definition: view.cpp:449
bool IsMirroredX() const
Return true if view is flipped across the X axis.
Definition: view.h:245
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
Definition: view.cpp:1518
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:215
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
Definition: view.cpp:578
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:619
const std::string & GetName() const
Return the name of the tool.
Definition: tool_base.h:135
KIGFX::VIEW_CONTROLS * getViewControls() const
Return the instance of VIEW_CONTROLS object used in the application.
Definition: tool_base.cpp:42
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:216
KIGFX::VIEW * getView() const
Returns the instance of #VIEW object used in the application.
Definition: tool_base.cpp:36
RESET_REASON
Determine the reason of reset for a tool.
Definition: tool_base.h:78
@ REDRAW
Full drawing refresh.
Definition: tool_base.h:83
Generic, UI-independent tool event.
Definition: tool_event.h:167
void SetMousePosition(const VECTOR2D &aP)
Definition: tool_event.h:525
void SetParameter(T aParam)
Set a non-standard parameter assigned to the event.
Definition: tool_event.h:515
bool IsAction(const TOOL_ACTION *aAction) const
Test if the event contains an action issued upon activation of the given TOOL_ACTION.
Definition: tool_event.cpp:82
T Parameter() const
Return a parameter assigned to the event.
Definition: tool_event.h:460
void Go(int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
Define which state (aStateFunc) to go when a certain event arrives (aConditions).
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagate an event to tools that requested events of matching type(s).
void PostEvent(const TOOL_EVENT &aEvent)
Put an event to the event queue to be processed at the end of event processing cycle.
bool RunAction(const std::string &aActionName, T aParam)
Run the specified action immediately, pausing the current action to run the new one.
Definition: tool_manager.h:145
const KIGFX::VC_SETTINGS & GetCurrentToolVC() const
Return the view controls settings for the current tool or the general settings if there is no active ...
APP_SETTINGS_BASE * GetSettings() const
Definition: tool_manager.h:387
bool PostAction(const std::string &aActionName, T aParam)
Run the specified action after the current action (coroutine) ends.
Definition: tool_manager.h:230
void ResetTools(TOOL_BASE::RESET_REASON aReason)
Reset all tools (i.e.
const EDA_IU_SCALE & GetIuScale() const
EDA_UNITS GetUserUnits() const
VECTOR2I GetValue()
Returns the value in internal units.
#define _(s)
EDA_UNITS
Definition: eda_units.h:46
@ FRAME_PCB_EDITOR
Definition: frame_type.h:42
@ FRAME_SCH_SYMBOL_EDITOR
Definition: frame_type.h:35
@ FRAME_FOOTPRINT_VIEWER
Definition: frame_type.h:45
@ FRAME_SCH_VIEWER
Definition: frame_type.h:36
@ FRAME_SCH
Definition: frame_type.h:34
@ FRAME_PL_EDITOR
Definition: frame_type.h:59
@ FRAME_FOOTPRINT_EDITOR
Definition: frame_type.h:43
@ FRAME_GERBER
Definition: frame_type.h:57
This file contains miscellaneous commonly used macros and functions.
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83
KICOMMON_API double DoubleValueFromString(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits, const wxString &aTextValue, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Function DoubleValueFromString converts aTextValue to a double.
Definition: eda_units.cpp:565
KICOMMON_API bool IsImperialUnit(EDA_UNITS aUnit)
Definition: eda_units.cpp:31
KICOMMON_API bool IsMetricUnit(EDA_UNITS aUnit)
Definition: eda_units.cpp:45
@ ALL
All except INITIAL_ADD.
Definition: view_item.h:58
@ TARGET_NONCACHED
Auxiliary rendering target (noncached)
Definition: definitions.h:49
T clamp(T min, T value, T max)
Definition: kicad_algo.h:205
const int scale
std::vector< FAB_LAYER_COLOR > dummy
std::vector< GRID > grids
Definition: grid_settings.h:66
Common grid settings, available to every frame.
Definition: grid_settings.h:34
wxString y
Definition: grid_settings.h:53
wxString x
Definition: grid_settings.h:52
Structure to keep VIEW_CONTROLS settings for easy store/restore operations.
Definition: view_controls.h:43
VECTOR2D m_forcedPosition
Is the forced cursor position enabled.
Definition: view_controls.h:56
bool m_forceCursorPosition
Should the cursor be locked within the parent window area.
Definition: view_controls.h:59
GRID_SETTINGS grid
Definition: app_settings.h:81
std::vector< double > zoom_factors
Definition: app_settings.h:78
TOOL_ACTIONS
Definition: tool_event.h:63
@ TA_MOUSE_CLICK
Definition: tool_event.h:66
@ TA_MOUSE_DBLCLICK
Definition: tool_event.h:67
@ TA_CANCEL_TOOL
Definition: tool_event.h:89
@ TC_COMMAND
Definition: tool_event.h:56
@ TC_MOUSE
Definition: tool_event.h:54
@ MD_ALT
Definition: tool_event.h:144
@ MD_CTRL
Definition: tool_event.h:143
@ MD_SHIFT
Definition: tool_event.h:142
TOOL_MOUSE_BUTTONS
Definition: tool_event.h:129
@ BUT_LEFT
Definition: tool_event.h:131
@ BUT_RIGHT
Definition: tool_event.h:132
VECTOR2< double > VECTOR2D
Definition: vector2d.h:587
VECTOR2I ToVECTOR2I(const wxSize &aSize)
Definition: vector2wx.h:30
VECTOR2D ToVECTOR2D(const wxPoint &aPoint)
Definition: vector2wx.h:40