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 m_grids.clear();
60
61 if( aReason == RESET_REASON::SHUTDOWN )
62 return;
63
66
67 for( GRID& gridDef : settings.grids )
68 {
69 double gridSizeX = EDA_UNIT_UTILS::UI::DoubleValueFromString( scale, EDA_UNITS::MILLIMETRES,
70 gridDef.x );
71 double gridSizeY = EDA_UNIT_UTILS::UI::DoubleValueFromString( scale, EDA_UNITS::MILLIMETRES,
72 gridDef.y );
73
74 m_grids.emplace_back( KiROUND<double, int>( gridSizeX ),
75 KiROUND<double, int>( gridSizeY ) );
76 }
77
78 OnGridChanged( false );
79}
80
81
83{
85 m_imperialUnit = aUnit;
86 else if( EDA_UNIT_UTILS::IsMetricUnit( aUnit ) )
87 m_metricUnit = aUnit;
88 else
89 wxASSERT_MSG( false, wxS( "Invalid unit" ) );
90}
91
92
94{
95 // Since selection tools are run permanently underneath the toolStack, this is really
96 // just a cancel of whatever other tools might be running.
97
99 return 0;
100}
101
102
103// Cursor control
105{
107
108 bool mirroredX = getView()->IsMirroredX();
110 VECTOR2D gridSize = getView()->GetGAL()->GetGridSize();
111
112 switch( type )
113 {
115 gridSize *= 10;
118 cursor -= VECTOR2D( 0, gridSize.y );
119 break;
120
122 gridSize *= 10;
125 cursor += VECTOR2D( 0, gridSize.y );
126 break;
127
129 gridSize *= 10;
132 cursor -= VECTOR2D( mirroredX ? -gridSize.x : gridSize.x, 0 );
133 break;
134
136 gridSize *= 10;
139 cursor += VECTOR2D( mirroredX ? -gridSize.x : gridSize.x, 0 );
140 break;
141
142 case ACTIONS::CURSOR_CLICK: // fall through
145 {
148 int modifiers = 0;
149
150 modifiers |= wxGetKeyState( WXK_SHIFT ) ? MD_SHIFT : 0;
151 modifiers |= wxGetKeyState( WXK_CONTROL ) ? MD_CTRL : 0;
152 modifiers |= wxGetKeyState( WXK_ALT ) ? MD_ALT : 0;
153
154 if( type == ACTIONS::CURSOR_DBL_CLICK )
155 action = TA_MOUSE_DBLCLICK;
156 else if( type == ACTIONS::CURSOR_RIGHT_CLICK )
157 button = BUT_RIGHT;
158
159 TOOL_EVENT evt( TC_MOUSE, action, static_cast<int>( button | modifiers ) );
160 evt.SetParameter( type );
161 evt.SetMousePosition( getViewControls()->GetMousePosition() );
162 m_toolMgr->ProcessEvent( evt );
163
164 return 0;
165 }
166 default:
167 wxFAIL_MSG( wxS( "CursorControl(): unexpected request" ) );
168 }
169
170 getViewControls()->SetCursorPosition( cursor, true, true, type );
172
173 return 0;
174}
175
176
178{
180 KIGFX::VIEW* view = getView();
181 VECTOR2D center = view->GetCenter();
182 VECTOR2D gridSize = getView()->GetGAL()->GetGridSize() * 10;
183 bool mirroredX = view->IsMirroredX();
184
185 switch( type )
186 {
188 center -= VECTOR2D( 0, gridSize.y );
189 break;
190
192 center += VECTOR2D( 0, gridSize.y );
193 break;
194
196 center -= VECTOR2D( mirroredX ? -gridSize.x : gridSize.x, 0 );
197 break;
198
200 center += VECTOR2D( mirroredX ? -gridSize.x : gridSize.x, 0 );
201 break;
202
203 default:
204 wxFAIL;
205 break;
206 }
207
208 view->SetCenter( center );
209
210 return 0;
211}
212
213
215{
217 return 0;
218}
219
220
222{
223 bool direction = aEvent.IsAction( &ACTIONS::zoomIn );
224 return doZoomInOut( direction, true );
225}
226
227
229{
230 bool direction = aEvent.IsAction( &ACTIONS::zoomInCenter );
231 return doZoomInOut( direction, false );
232}
233
234
235int COMMON_TOOLS::doZoomInOut( bool aDirection, bool aCenterOnCursor )
236{
237 double zoom = getView()->GetGAL()->GetZoomFactor();
238
239 // Step must be AT LEAST 1.3
240 if( aDirection )
241 zoom *= 1.3;
242 else
243 zoom /= 1.3;
244
245 // Now look for the next closest menu step
246 std::vector<double>& zoomList = m_toolMgr->GetSettings()->m_Window.zoom_factors;
247 int idx;
248
249 if( aDirection )
250 {
251 for( idx = 0; idx < int( zoomList.size() ); ++idx )
252 {
253 if( zoomList[idx] >= zoom )
254 break;
255 }
256
257 if( idx >= int( zoomList.size() ) )
258 idx = (int) zoomList.size() - 1; // if we ran off the end then peg to the end
259 }
260 else
261 {
262 for( idx = int( zoomList.size() ) - 1; idx >= 0; --idx )
263 {
264 if( zoomList[idx] <= zoom )
265 break;
266 }
267
268 if( idx < 0 )
269 idx = 0; // if we ran off the end then peg to the end
270 }
271
272 // Note: idx == 0 is Auto; idx == 1 is first entry in zoomList
273 return doZoomToPreset( idx + 1, aCenterOnCursor );
274}
275
276
278{
280
281 ctls->CenterOnCursor();
282
283 return 0;
284}
285
286
288{
289 return doZoomFit( ZOOM_FIT_ALL );
290}
291
292
294{
295 return doZoomFit( ZOOM_FIT_OBJECTS );
296}
297
298
300{
301 KIGFX::VIEW* view = getView();
303 EDA_DRAW_FRAME* frame = getEditFrame<EDA_DRAW_FRAME>();
304
305 BOX2I bBox = frame->GetDocumentExtents();
306 BOX2I defaultBox = canvas->GetDefaultViewBBox();
307
308 view->SetScale( 1.0 ); // The best scale will be determined later, but this initial
309 // value ensures all view parameters are up to date (especially
310 // at init time)
311 VECTOR2D screenSize = view->ToWorld( ToVECTOR2I( canvas->GetClientSize() ), false );
312
313 // Currently "Zoom to Objects" is only supported in Eeschema & Pcbnew. Support for other
314 // programs in the suite can be added as needed.
315
316 if( aFitType == ZOOM_FIT_ALL )
317 {
318 if( frame->IsType( FRAME_PCB_EDITOR ) )
319 bBox = m_frame->GetDocumentExtents( false );
320 }
321
322 if( aFitType == ZOOM_FIT_OBJECTS )
323 {
324 if( frame->IsType( FRAME_SCH ) )
325 bBox = m_frame->GetDocumentExtents( false );
326 else
327 aFitType = ZOOM_FIT_ALL; // Just do a "Zoom to Fit" for unsupported editors
328 }
329
330 // If the screen is empty then use the default view bbox
331
332 if( bBox.GetWidth() == 0 || bBox.GetHeight() == 0 )
333 bBox = defaultBox;
334
335 VECTOR2D vsize = bBox.GetSize();
336 double scale = view->GetScale() / std::max( fabs( vsize.x / screenSize.x ),
337 fabs( vsize.y / screenSize.y ) );
338
339 // if the scale isn't finite (most likely due to an empty canvas)
340 // simply just make sure we are centered and quit out of trying to zoom to fit
341 if( !std::isfinite( scale ) )
342 {
343 view->SetCenter( VECTOR2D( 0, 0 ) );
344 canvas->Refresh();
345 return 0;
346 }
347
348 // Reserve enough margin to limit the amount of the view that might be obscured behind the
349 // infobar.
350 double margin_scale_factor = 1.04;
351
352 if( canvas->GetClientSize().y < 768 )
353 margin_scale_factor = 1.10;
354
355 if( aFitType == ZOOM_FIT_ALL )
356 {
357 // Leave a bigger margin for library editors & viewers
358
359 if( frame->IsType( FRAME_FOOTPRINT_VIEWER )
360 || frame->IsType( FRAME_SCH_VIEWER ) )
361 {
362 margin_scale_factor = 1.30;
363 }
364 else if( frame->IsType( FRAME_SCH_SYMBOL_EDITOR )
365 || frame->IsType( FRAME_FOOTPRINT_EDITOR ) )
366 {
367 margin_scale_factor = 1.48;
368 }
369 }
370
371 view->SetScale( scale / margin_scale_factor );
372 view->SetCenter( bBox.Centre() );
373 canvas->Refresh();
374
375 return 0;
376}
377
378
380{
382 BOX2I bBox = getModel<EDA_ITEM>()->ViewBBox();
383
384 if( bBox.GetWidth() == 0 || bBox.GetHeight() == 0 )
385 bBox = canvas->GetDefaultViewBBox();
386
387 getView()->SetCenter( bBox.Centre() );
388
389 // Take scrollbars into account
390 VECTOR2D scrollbarSize = VECTOR2D( ToVECTOR2D( canvas->GetSize() - canvas->GetClientSize() ) );
391 VECTOR2D worldScrollbarSize = getView()->ToWorld( scrollbarSize, false );
392 getView()->SetCenter( getView()->GetCenter() + worldScrollbarSize / 2.0 );
393 canvas->Refresh();
394
395 return 0;
396}
397
398
400{
401 int idx = aEvent.Parameter<int>();
402 return doZoomToPreset( idx, false );
403}
404
405
406// Note: idx == 0 is Auto; idx == 1 is first entry in zoomList
407int COMMON_TOOLS::doZoomToPreset( int idx, bool aCenterOnCursor )
408{
409 std::vector<double>& zoomList = m_toolMgr->GetSettings()->m_Window.zoom_factors;
410
411 if( idx == 0 ) // Zoom Auto
412 {
414 return ZoomFitScreen( dummy );
415 }
416 else
417 {
418 idx--;
419 }
420
421 double scale = zoomList[idx];
422
423 if( aCenterOnCursor )
424 {
425 getView()->SetScale( scale, getViewControls()->GetCursorPosition() );
426
427 if( getViewControls()->IsCursorWarpingEnabled() )
429 }
430 else
431 {
432 getView()->SetScale( scale );
433 }
434
436
437 return 0;
438}
439
440
441// Grid control
443{
444 int& currentGrid = m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
445
446 currentGrid++;
447
448 if( currentGrid >= int( m_grids.size() ) )
449 currentGrid = 0;
450
451 return OnGridChanged( true );
452}
453
454
456{
457 int& currentGrid = m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
458
459 currentGrid--;
460
461 if( currentGrid < 0 )
462 currentGrid = (int) m_grids.size() - 1;
463
464 return OnGridChanged( true );
465}
466
467
469{
470 return GridPreset( aEvent.Parameter<int>(), false );
471}
472
473
474int COMMON_TOOLS::GridPreset( int idx, bool aFromHotkey )
475{
476 int& currentGrid = m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
477
478 currentGrid = alg::clamp( 0, idx, (int) m_grids.size() - 1 );
479
480 return OnGridChanged( aFromHotkey );
481}
482
483
484int COMMON_TOOLS::OnGridChanged( bool aFromHotkey )
485{
486 int& currentGrid = m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
487
488 currentGrid = std::max( 0, std::min( currentGrid, static_cast<int>( m_grids.size() ) - 1 ) );
489
490 // Update the combobox (if any)
491 wxUpdateUIEvent dummy;
493
494 // Update GAL canvas from screen
495 getView()->GetGAL()->SetGridSize( m_grids[ currentGrid ] );
498
499 // Put cursor on new grid
500 VECTOR2D gridCursor = getViewControls()->GetCursorPosition( true );
501 getViewControls()->SetCrossHairCursorPosition( gridCursor, false );
502
503 // Show feedback
504 if( aFromHotkey )
506
507 return 0;
508}
509
510
512{
513 return GridPreset( m_frame->config()->m_Window.grid.fast_grid_1, true );
514}
515
516
518{
519 return GridPreset( m_frame->config()->m_Window.grid.fast_grid_2, true );
520}
521
522
524{
527 {
528 return GridPreset( m_frame->config()->m_Window.grid.fast_grid_2, true );
529 }
530
531 return GridPreset( m_frame->config()->m_Window.grid.fast_grid_1, true );
532}
533
534
536{
538 return 0;
539}
540
541
543{
545 return 0;
546}
547
548
550{
551 auto showGridPrefs =
552 [this]( const wxString& aParentName )
553 {
554 m_frame->CallAfter(
555 [this, aParentName]()
556 {
557 m_frame->ShowPreferences( _( "Grids" ), aParentName );
558 } );
559 };
560
561 switch( m_frame->GetFrameType() )
562 {
563 case FRAME_SCH: showGridPrefs( _( "Schematic Editor" ) ); break;
564 case FRAME_SCH_SYMBOL_EDITOR: showGridPrefs( _( "Symbol Editor" ) ); break;
565 case FRAME_PCB_EDITOR: showGridPrefs( _( "PCB Editor" ) ); break;
566 case FRAME_FOOTPRINT_EDITOR: showGridPrefs( _( "Footprint Editor" ) ); break;
567 case FRAME_PL_EDITOR: showGridPrefs( _( "Drawing Sheet Editor" ) ); break;
568 case FRAME_GERBER: showGridPrefs( _( "Gerber Viewer" ) ); break;
569 default: wxFAIL_MSG( "Unknown frame: " + GetName() ); break;
570 }
571
572 return 0;
573}
574
575
577{
578 VECTOR2I origin = m_frame->GetGridOrigin();
579 WX_PT_ENTRY_DIALOG dlg( m_frame, _( "Grid Origin" ), _( "X:" ), _( "Y:" ), origin );
580
581 if( dlg.ShowModal() == wxID_OK )
582 {
584
588 }
589
590 return 0;
591}
592
593
595{
596 EDA_UNITS newUnit = aEvent.Parameter<EDA_UNITS>();
597
598 if( EDA_UNIT_UTILS::IsMetricUnit( newUnit ) )
599 m_metricUnit = newUnit;
600 else if( EDA_UNIT_UTILS::IsImperialUnit( newUnit ) )
601 m_imperialUnit = newUnit;
602 else
603 wxASSERT_MSG( false, wxS( "Invalid unit for the frame" ) );
604
605 m_frame->ChangeUserUnits( newUnit );
606 return 0;
607}
608
609
611{
615 return 0;
616}
617
618
620{
621 m_frame->SetStatusText( wxEmptyString );
624
625 return 0;
626}
627
628
630{
631 const KIGFX::VC_SETTINGS& vcSettings = m_toolMgr->GetCurrentToolVC();
632
633 // Use either the active tool forced cursor position or the general settings
634 if( vcSettings.m_forceCursorPosition )
636 else
638
640
641 return 0;
642}
643
644
646{
647 auto& galOpts = m_frame->GetGalDisplayOptions();
648
649 galOpts.m_forceDisplayCursor = !galOpts.m_forceDisplayCursor;
650 galOpts.WriteConfig( m_toolMgr->GetSettings()->m_Window );
651 galOpts.NotifyChanged();
652
653 return 0;
654}
655
656
658{
660
661 galOpts.m_fullscreenCursor = !galOpts.m_fullscreenCursor;
663 galOpts.NotifyChanged();
664
665 return 0;
666}
667
668
670{
672
673 if( canvas )
674 {
676
678
679 canvas->GetView()->UpdateAllItems( KIGFX::ALL );
680 canvas->ForceRefresh();
681 }
682
683 return 0;
684}
685
686
688{
690
691 // Cursor control
700
704
705 // Pan control
710
711 // Zoom control
722
723 // Grid control
734
735 // Units and coordinates
742
743 // Misc
747}
748
749
BASE_SCREEN class implementation.
static TOOL_ACTION gridProperties
Definition: actions.h:179
static TOOL_ACTION gridFastCycle
Definition: actions.h:171
static TOOL_ACTION toggleGrid
Definition: actions.h:177
static TOOL_ACTION zoomRedraw
Definition: actions.h:116
static TOOL_ACTION millimetersUnits
Definition: actions.h:185
static TOOL_ACTION gridFast1
Definition: actions.h:169
static TOOL_ACTION gridPrev
Definition: actions.h:173
static TOOL_ACTION cursorLeft
Definition: actions.h:151
static TOOL_ACTION zoomOutCenter
Definition: actions.h:120
static TOOL_ACTION togglePolarCoords
Definition: actions.h:188
static TOOL_ACTION zoomIn
Definition: actions.h:117
static TOOL_ACTION cursorLeftFast
Definition: actions.h:156
static TOOL_ACTION gridPreset
Definition: actions.h:176
static TOOL_ACTION cursorDown
Definition: actions.h:150
static TOOL_ACTION zoomOut
Definition: actions.h:118
static TOOL_ACTION milsUnits
Definition: actions.h:184
static TOOL_ACTION cursorRightFast
Definition: actions.h:157
static TOOL_ACTION toggleBoundingBoxes
Definition: actions.h:137
static TOOL_ACTION showContextMenu
Definition: actions.h:67
static TOOL_ACTION toggleCursor
Definition: actions.h:133
static TOOL_ACTION centerContents
Definition: actions.h:132
static TOOL_ACTION zoomCenter
Definition: actions.h:125
static TOOL_ACTION panDown
Definition: actions.h:164
static TOOL_ACTION cursorDblClick
Definition: actions.h:160
CURSOR_EVENT_TYPE
Definition: actions.h:238
@ CURSOR_DBL_CLICK
Definition: actions.h:249
@ CURSOR_RIGHT
Definition: actions.h:246
@ CURSOR_LEFT_FAST
Definition: actions.h:245
@ CURSOR_LEFT
Definition: actions.h:244
@ CURSOR_DOWN_FAST
Definition: actions.h:243
@ CURSOR_CLICK
Definition: actions.h:248
@ CURSOR_UP
Definition: actions.h:240
@ CURSOR_RIGHT_FAST
Definition: actions.h:247
@ CURSOR_DOWN
Definition: actions.h:242
@ CURSOR_UP_FAST
Definition: actions.h:241
@ CURSOR_RIGHT_CLICK
Definition: actions.h:250
static TOOL_ACTION cursorDownFast
Definition: actions.h:155
static TOOL_ACTION inchesUnits
Definition: actions.h:183
static TOOL_ACTION cursorUpFast
Definition: actions.h:154
static TOOL_ACTION toggleCursorStyle
Definition: actions.h:134
static TOOL_ACTION gridOrigin
Definition: actions.h:180
static TOOL_ACTION panLeft
Definition: actions.h:165
static TOOL_ACTION selectionTool
Definition: actions.h:192
static TOOL_ACTION cursorClick
Definition: actions.h:159
static TOOL_ACTION zoomFitScreen
Definition: actions.h:126
static TOOL_ACTION zoomPreset
Definition: actions.h:128
static TOOL_ACTION panUp
Definition: actions.h:163
static TOOL_ACTION zoomFitObjects
Definition: actions.h:127
static TOOL_ACTION toggleUnits
Definition: actions.h:187
static TOOL_ACTION zoomInCenter
Definition: actions.h:119
static TOOL_ACTION panRight
Definition: actions.h:166
static TOOL_ACTION gridSetOrigin
Definition: actions.h:174
static TOOL_ACTION gridFast2
Definition: actions.h:170
static TOOL_ACTION cursorUp
Cursor control with keyboard.
Definition: actions.h:149
static TOOL_ACTION refreshPreview
Definition: actions.h:139
static TOOL_ACTION toggleGridOverrides
Definition: actions.h:178
static TOOL_ACTION gridNext
Definition: actions.h:172
static TOOL_ACTION cursorRight
Definition: actions.h:152
static TOOL_ACTION resetLocalCoords
Definition: actions.h:189
WINDOW_SETTINGS m_Window
Definition: app_settings.h:172
VECTOR2D m_LocalOrigin
Relative Screen cursor coordinate (on grid) in user units.
Definition: base_screen.h:90
const SizeVec & GetSize() const
Definition: box2.h:196
size_type GetHeight() const
Definition: box2.h:205
size_type GetWidth() const
Definition: box2.h:204
Vec Centre() const
Definition: box2.h:87
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:290
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:277
virtual void SetScale(double aScale, VECTOR2D aAnchor={ 0, 0 })
Set the scaling factor, zooming around a given anchor point.
Definition: view.cpp:587
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
Definition: view.h:203
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:484
bool IsMirroredX() const
Return true if view is flipped across the X axis.
Definition: view.h:251
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
Definition: view.cpp:1563
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:221
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
Definition: view.cpp:613
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:625
const std::string & GetName() const
Return the name of the tool.
Definition: tool_base.h:136
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:218
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
@ SHUTDOWN
Tool is being shut down.
Definition: tool_base.h:84
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:150
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:400
bool PostAction(const std::string &aActionName, T aParam)
Run the specified action after the current action (coroutine) ends.
Definition: tool_manager.h:235
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:576
KICOMMON_API bool IsImperialUnit(EDA_UNITS aUnit)
Definition: eda_units.cpp:47
KICOMMON_API bool IsMetricUnit(EDA_UNITS aUnit)
Definition: eda_units.cpp:61
@ 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:672
VECTOR2I ToVECTOR2I(const wxSize &aSize)
Definition: vector2wx.h:30
VECTOR2D ToVECTOR2D(const wxPoint &aPoint)
Definition: vector2wx.h:40