KiCad PCB EDA Suite
Loading...
Searching...
No Matches
pl_editor_frame.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) 2013 CERN
5 * Copyright (C) 2017-2023 KiCad Developers, see AUTHORS.txt for contributors.
6 * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
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 <kiface_base.h>
27#include <pgm_base.h>
28#include <bitmaps.h>
29#include <core/arraydim.h>
33#include <confirm.h>
34#include <kiplatform/app.h>
36#include <gal/painter.h>
38#include <tool/selection.h>
39#include <tool/action_toolbar.h>
42#include <tool/tool_manager.h>
43#include <tool/common_control.h>
44#include <tool/common_tools.h>
45#include <tool/picker_tool.h>
46#include <tool/zoom_tool.h>
48#include "pl_editor_frame.h"
49#include "pl_editor_id.h"
50#include "pl_editor_settings.h"
51#include "properties_frame.h"
52#include "tools/pl_actions.h"
55#include "tools/pl_edit_tool.h"
59#include <zoom_defines.h>
60
61#include <wx/filedlg.h>
62#include <wx/print.h>
63#include <wx/treebook.h>
64
65
66BEGIN_EVENT_TABLE( PL_EDITOR_FRAME, EDA_DRAW_FRAME )
67 EVT_MENU( wxID_CLOSE, PL_EDITOR_FRAME::OnExit )
68 EVT_MENU( wxID_EXIT, PL_EDITOR_FRAME::OnExit )
69
70 EVT_MENU( wxID_FILE, PL_EDITOR_FRAME::Files_io )
71
74
77
78 // Drop files event
79 EVT_DROP_FILES( PL_EDITOR_FRAME::OnDropFiles )
80END_EVENT_TABLE()
81
82
83PL_EDITOR_FRAME::PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
84 EDA_DRAW_FRAME( aKiway, aParent, FRAME_PL_EDITOR, wxT( "PlEditorFrame" ),
85 wxDefaultPosition, wxDefaultSize,
87 m_propertiesPagelayout( nullptr ),
88 m_propertiesFrameWidth( 200 ),
89 m_originSelectBox( nullptr ),
90 m_originSelectChoice( 0 ),
91 m_pageSelectBox( nullptr ),
92 m_mruImagePath( wxEmptyString )
93{
94 m_maximizeByDefault = true;
95 SetUserUnits( EDA_UNITS::MILLIMETRES );
96
97 m_showBorderAndTitleBlock = true; // true for reference drawings.
99 m_aboutTitle = _HKI( "KiCad Drawing Sheet Editor" );
100
101 // Give an icon
102 wxIcon icon;
103 wxIconBundle icon_bundle;
104
105 icon.CopyFromBitmap( KiBitmap( BITMAPS::icon_pagelayout_editor, 48 ) );
106 icon_bundle.AddIcon( icon );
107 icon.CopyFromBitmap( KiBitmap( BITMAPS::icon_pagelayout_editor, 128 ) );
108 icon_bundle.AddIcon( icon );
109 icon.CopyFromBitmap( KiBitmap( BITMAPS::icon_pagelayout_editor, 256 ) );
110 icon_bundle.AddIcon( icon );
111 icon.CopyFromBitmap( KiBitmap( BITMAPS::icon_pagelayout_editor_32 ) );
112 icon_bundle.AddIcon( icon );
113 icon.CopyFromBitmap( KiBitmap( BITMAPS::icon_pagelayout_editor_16 ) );
114 icon_bundle.AddIcon( icon );
115
116 SetIcons( icon_bundle );
117
118 // Create GAL canvas
119 auto* drawPanel = new PL_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ), m_frameSize,
120 GetGalDisplayOptions(),
122 SetCanvas( drawPanel );
123
124 LoadSettings( config() );
125
126 m_acceptedExts.emplace( FILEEXT::DrawingSheetFileExtension, nullptr );
127 DragAcceptFiles( true );
128
129 VECTOR2I pageSizeIU = GetPageLayout().GetPageSettings().GetSizeIU( drawSheetIUScale.IU_PER_MILS );
130 SetScreen( new BASE_SCREEN( pageSizeIU ) );
131
132 setupTools();
133 setupUIConditions();
134 ReCreateMenuBar();
135 ReCreateHToolbar();
136 ReCreateVToolbar();
137 ReCreateOptToolbar();
138
139 wxWindow* stsbar = GetStatusBar();
140 int spacer = KIUI::GetTextSize( wxT( "M" ), stsbar ).x * 2;
141
142 int dims[] = {
143
144 // balance of status bar on far left is set to a default or whatever is left over.
145 -1,
146
147 // When using GetTextSize() remember the width of '1' is not the same
148 // as the width of '0' unless the font is fixed width, and it usually won't be.
149
150 // zoom:
151 KIUI::GetTextSize( wxT( "Z 762000" ), stsbar ).x + spacer,
152
153 // cursor coords
154 KIUI::GetTextSize( wxT( "X 0234.567 Y 0234.567" ), stsbar ).x + spacer,
155
156 // delta distances
157 KIUI::GetTextSize( wxT( "dx 0234.567 dx 0234.567" ), stsbar ).x + spacer,
158
159 // grid size
160 KIUI::GetTextSize( wxT( "grid 0234.567" ), stsbar ).x + spacer,
161
162 // Coord origin (use the bigger message)
163 KIUI::GetTextSize( _( "coord origin: Right Bottom page corner" ), stsbar ).x + spacer,
164
165 // units display, Inches is bigger than mm
166 KIUI::GetTextSize( _( "Inches" ), stsbar ).x + spacer,
167
168 // constraint mode
169 KIUI::GetTextSize( _( "Constrain to H, V, 45" ), stsbar ).x + spacer
170 };
171
172 SetStatusWidths( arrayDim( dims ), dims );
173
174 m_auimgr.SetManagedWindow( this );
175
176 CreateInfoBar();
177 m_propertiesPagelayout = new PROPERTIES_FRAME( this );
178
179 // Rows; layers 4 - 6
180 m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" )
181 .Top().Layer( 6 ) );
182 m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( "OptToolbar" )
183 .Left().Layer( 3 ) );
184 m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" )
185 .Bottom().Layer( 6 ) );
186
187 // Columns; layers 1 - 3
188 m_auimgr.AddPane( m_drawToolBar, EDA_PANE().VToolbar().Name( "ToolsToolbar" )
189 .Right().Layer( 2 ) );
190
191 m_auimgr.AddPane( m_propertiesPagelayout, EDA_PANE().Palette().Name( "Props" )
192 .Right().Layer( 3 )
193 .Caption( _( "Properties" ) )
194 .MinSize( m_propertiesPagelayout->GetMinSize() )
195 .BestSize( m_propertiesFrameWidth, -1 ) );
196
197 // Center
198 m_auimgr.AddPane( GetCanvas(), EDA_PANE().Canvas().Name( "DrawFrame" )
199 .Center() );
200
201 FinishAUIInitialization();
202
203 resolveCanvasType();
204 SwitchCanvas( m_canvasType );
205
206 // Add the exit key handler
207 setupUnits( config() );
208
209 VECTOR2I originCoord = ReturnCoordOriginCorner();
210 SetGridOrigin( originCoord );
211
212 // Initialize the current drawing sheet
213#if 0 //start with empty layout
216#else // start with the default KiCad layout
218#endif
219 OnNewDrawingSheet();
220
221 // Ensure the window is on top
222 Raise();
223
224 // Register a call to update the toolbar sizes. It can't be done immediately because
225 // it seems to require some sizes calculated that aren't yet (at least on GTK).
226 CallAfter( [this]()
227 {
228 // Ensure the controls on the toolbars all are correctly sized
229 UpdateToolbarControlSizes();
230 } );
231}
232
233
235{
236 // Ensure m_canvasType is up to date, to save it in config
238
239 // Shutdown all running tools
240 if( m_toolManager )
242}
243
244
246{
247 // Create the manager and dispatcher & route draw panel events to the dispatcher
249 m_toolManager->SetEnvironment( nullptr, GetCanvas()->GetView(),
250 GetCanvas()->GetViewControls(), config(), this );
251 m_actions = new PL_ACTIONS();
253
255
256 // Register tools
267
268 // Run the selection tool, it is supposed to be always active
269 m_toolManager->InvokeTool( "plEditor.InteractiveSelection" );
270}
271
272
274{
276
278 EDITOR_CONDITIONS cond( this );
279
280 wxASSERT( mgr );
281
282#define ENABLE( x ) ACTION_CONDITIONS().Enable( x )
283#define CHECK( x ) ACTION_CONDITIONS().Check( x )
284
288
291 mgr->SetConditions( ACTIONS::millimetersUnits, CHECK( cond.Units( EDA_UNITS::MILLIMETRES ) ) );
292 mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCHES ) ) );
293 mgr->SetConditions( ACTIONS::milsUnits, CHECK( cond.Units( EDA_UNITS::MILS ) ) );
294
299
306
315
316 // Not a tool, just a way to activate the action
319
320 auto titleBlockNormalMode =
321 [] ( const SELECTION& )
322 {
324 };
325
326 auto titleBlockEditMode =
327 [] ( const SELECTION& )
328 {
330 };
331
332 mgr->SetConditions( PL_ACTIONS::layoutNormalMode, CHECK( titleBlockNormalMode ) );
333 mgr->SetConditions( PL_ACTIONS::layoutEditMode, CHECK( titleBlockEditMode ) );
334
335#undef CHECK
336#undef ENABLE
337}
338
339
340bool PL_EDITOR_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl )
341{
342 wxString fn = aFileSet[0];
343
344 if( !LoadDrawingSheetFile( fn ) )
345 {
346 wxMessageBox( wxString::Format( _( "Error loading drawing sheet '%s'." ), fn ) );
347 return false;
348 }
349 else
350 {
352 return true;
353 }
354}
355
356
358{
359 // Must be called after a change in order to set the "modify" flag and update
360 // the frame title.
362
364
366}
367
368
370{
371 return GetScreen() && GetScreen()->IsContentModified();
372}
373
374
375void PL_EDITOR_FRAME::OnExit( wxCommandEvent& aEvent )
376{
377 if( aEvent.GetId() == wxID_EXIT )
378 Kiway().OnKiCadExit();
379
380 if( aEvent.GetId() == wxID_CLOSE || Kiface().IsSingle() )
381 Close( false );
382}
383
384
385bool PL_EDITOR_FRAME::canCloseWindow( wxCloseEvent& aEvent )
386{
387 // Shutdown blocks must be determined and vetoed as early as possible
389 && aEvent.GetId() == wxEVT_QUERY_END_SESSION
390 && IsContentModified() )
391 {
392 return false;
393 }
394
395 if( IsContentModified() )
396 {
397 wxFileName filename = GetCurrentFileName();
398 wxString msg = _( "Save changes to '%s' before closing?" );
399
400 if( !HandleUnsavedChanges( this, wxString::Format( msg, filename.GetFullName() ),
401 [&]() -> bool
402 {
403 return saveCurrentPageLayout();
404 } ) )
405 {
406 return false;
407 }
408 }
409
410 return true;
411}
412
413
415{
416 // do not show the window because we do not want any paint event
417 Show( false );
418
419 // clean up the data before the view is destroyed
421
422 // On Linux, m_propertiesPagelayout must be destroyed
423 // before deleting the main frame to avoid a crash when closing
424 m_propertiesPagelayout->Destroy();
425 Destroy();
426}
427
428
429void PL_EDITOR_FRAME::OnSelectPage( wxCommandEvent& event )
430{
431 KIGFX::VIEW* view = GetCanvas()->GetView();
432 view->SetLayerVisible( LAYER_DRAWINGSHEET_PAGE1, m_pageSelectBox->GetSelection() == 0 );
433 view->SetLayerVisible( LAYER_DRAWINGSHEET_PAGEn, m_pageSelectBox->GetSelection() == 1 );
434 GetCanvas()->Refresh();
435}
436
437
439{
440 m_originSelectChoice = m_originSelectBox->GetSelection();
441 UpdateStatusBar(); // Update grid origin
443 GetCanvas()->Refresh();
444}
445
446
447void PL_EDITOR_FRAME::ToPrinter( bool doPreview )
448{
449 // static print data and page setup data, to remember settings during the session
450 static wxPrintData* s_PrintData;
451 static wxPageSetupDialogData* s_pageSetupData = nullptr;
452
453 const PAGE_INFO& pageInfo = GetPageSettings();
454
455 if( s_PrintData == nullptr ) // First print
456 {
457 s_PrintData = new wxPrintData();
458 s_PrintData->SetQuality( wxPRINT_QUALITY_HIGH ); // Default resolution = HIGH;
459 }
460
461 if( !s_PrintData->Ok() )
462 {
463 wxMessageBox( _( "Error Init Printer info" ) );
464 return;
465 }
466
467 if( s_pageSetupData == nullptr )
468 s_pageSetupData = new wxPageSetupDialogData( *s_PrintData );
469
470 s_pageSetupData->SetPaperId( pageInfo.GetPaperId() );
471 s_pageSetupData->GetPrintData().SetOrientation( pageInfo.GetWxOrientation() );
472
473 if( pageInfo.IsCustom() )
474 {
475 if( pageInfo.IsPortrait() )
476 s_pageSetupData->SetPaperSize( wxSize( EDA_UNIT_UTILS::Mils2mm( pageInfo.GetWidthMils() ),
477 EDA_UNIT_UTILS::Mils2mm( pageInfo.GetHeightMils() ) ) );
478 else
479 s_pageSetupData->SetPaperSize( wxSize( EDA_UNIT_UTILS::Mils2mm( pageInfo.GetHeightMils() ),
480 EDA_UNIT_UTILS::Mils2mm( pageInfo.GetWidthMils() ) ) );
481 }
482
483 *s_PrintData = s_pageSetupData->GetPrintData();
484
485 if( doPreview )
486 InvokeDialogPrintPreview( this, s_PrintData );
487 else
488 InvokeDialogPrint( this, s_PrintData, s_pageSetupData );
489}
490
491
492const BOX2I PL_EDITOR_FRAME::GetDocumentExtents( bool aIncludeAllVisible ) const
493{
495 return rv;
496}
497
498
500{
502
503 if( aCfg->m_Window.grid.grids.empty() )
504 {
505 aCfg->m_Window.grid.grids = { GRID{ wxEmptyString, wxS( "5.00 mm" ), wxS( "5.00 mm" ) },
506 GRID{ wxEmptyString, wxS( "2.50 mm" ), wxS( "2.50 mm" ) },
507 GRID{ wxEmptyString, wxS( "2.00 mm" ), wxS( "2.00 mm" ) },
508 GRID{ wxEmptyString, wxS( "1.00 mm" ), wxS( "1.00 mm" ) },
509 GRID{ wxEmptyString, wxS( "0.50 mm" ), wxS( "0.50 mm" ) },
510 GRID{ wxEmptyString, wxS( "0.25 mm" ), wxS( "0.25 mm" ) },
511 GRID{ wxEmptyString, wxS( "0.20 mm" ), wxS( "0.20 mm" ) },
512 GRID{ wxEmptyString, wxS( "0.10 mm" ), wxS( "0.10 mm" ) } };
513 }
514
515 // Currently values read from config file are not used because the user cannot
516 // change this config
517 // if( aCfg->m_Window.zoom_factors.empty() )
518 {
520 }
521
522 PL_EDITOR_SETTINGS* cfg = dynamic_cast<PL_EDITOR_SETTINGS*>( aCfg );
523 wxCHECK( cfg, /*void*/ );
524
527
529
532
533 PAGE_INFO pageInfo = GetPageSettings();
534 pageInfo.SetType( cfg->m_LastPaperSize, cfg->m_LastWasPortrait );
535 SetPageSettings( pageInfo );
536}
537
538
540{
542
543 auto cfg = static_cast<PL_EDITOR_SETTINGS*>( aCfg );
544
546
547 cfg->m_PropertiesFrameWidth = m_propertiesFrameWidth;
548 cfg->m_CornerOrigin = m_originSelectChoice;
549 cfg->m_BlackBackground = GetDrawBgColor() == BLACK;
550 cfg->m_LastPaperSize = GetPageSettings().GetType();
551 cfg->m_LastWasPortrait = GetPageSettings().IsPortrait();
552 cfg->m_LastCustomWidth = PAGE_INFO::GetCustomWidthMils();
553 cfg->m_LastCustomHeight = PAGE_INFO::GetCustomHeightMils();
554}
555
556
558{
559 wxString title;
560 wxFileName file( GetCurrentFileName() );
561
562 if( IsContentModified() )
563 title = wxT( "*" );
564
565 if( file.IsOk() )
566 title += file.GetName();
567 else
568 title += _( "[no drawing sheet loaded]" );
569
570 title += wxT( " \u2014 " ) + _( "Drawing Sheet Editor" ),
571
572 SetTitle( title );
573}
574
575
577{
579}
580
581
582void PL_EDITOR_FRAME::SetCurrentFileName( const wxString& aName )
583{
585}
586
587
588void PL_EDITOR_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
589{
590 m_pageLayout.SetPageSettings( aPageSettings );
591
592 if( GetScreen() )
594}
595
596
598{
600}
601
602
604{
605 // this function is only needed because EDA_DRAW_FRAME is not compiled
606 // with either -DPCBNEW or -DEESCHEMA, so the virtual is used to route
607 // into an application specific source file.
609}
610
611
613{
614 return GetPageLayout().GetTitleBlock();
615}
616
617
619{
620 m_pageLayout.SetTitleBlock( aTitleBlock );
621}
622
623
624void PL_EDITOR_FRAME::CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged )
625{
626 EDA_DRAW_FRAME::CommonSettingsChanged( aEnvVarsChanged, aTextVarsChanged );
627
628 SETTINGS_MANAGER& settingsManager = Pgm().GetSettingsManager();
629 PL_EDITOR_SETTINGS* cfg = settingsManager.GetAppSettings<PL_EDITOR_SETTINGS>();
630 COLOR_SETTINGS* colors = settingsManager.GetColorSettings( cfg->m_ColorTheme );
631
632 // Update gal display options like cursor shape, grid options:
634
635 GetCanvas()->GetView()->GetPainter()->GetSettings()->LoadColors( colors );
636
639
641 Layout();
642 SendSizeEvent();
643}
644
645
647{
648 // calculate the position (in page, in iu) of the corner used as coordinate origin
649 // coordinate origin can be the paper Top Left corner, or each of 4 page corners
650 VECTOR2I originCoord;
651
652 // To avoid duplicate code, we use a dummy segment starting at 0,0 in relative coord
654
655 switch( m_originSelectChoice )
656 {
657 default:
658 case 0: // Origin = paper Left Top corner
659 break;
660
661 case 1: // Origin = page Right Bottom corner
662 dummy.SetStart( 0, 0, RB_CORNER );
663 originCoord = dummy.GetStartPosIU();
664 break;
665
666 case 2: // Origin = page Left Bottom corner
667 dummy.SetStart( 0, 0, LB_CORNER );
668 originCoord = dummy.GetStartPosIU();
669 break;
670
671 case 3: // Origin = page Right Top corner
672 dummy.SetStart( 0, 0, RT_CORNER );
673 originCoord = dummy.GetStartPosIU();
674 break;
675
676 case 4: // Origin = page Left Top corner
677 dummy.SetStart( 0, 0, LT_CORNER );
678 originCoord = dummy.GetStartPosIU();
679 break;
680 }
681
682 return originCoord;
683}
684
685
687{
688 wxString line;
689 wxString gridformatter;
690
691 switch( GetUserUnits() )
692 {
693 case EDA_UNITS::INCHES: gridformatter = wxS( "grid %.3f" ); break;
694 case EDA_UNITS::MILLIMETRES: gridformatter = wxS( "grid %.4f" ); break;
695 default: gridformatter = wxS( "grid %f" ); break;
696 }
697
699 GetCanvas()->GetGAL()->GetGridSize().x );
700 line.Printf( gridformatter, grid );
701
702 SetStatusText( line, 4 );
703}
704
705
707{
708 // Display Zoom level:
709 SetStatusText( GetZoomLevelIndicator(), 1 );
710
711 // coordinate origin can be the paper Top Left corner, or each of 4 page corners
712 VECTOR2I originCoord = ReturnCoordOriginCorner();
713 SetGridOrigin( originCoord );
714
715 // We need the orientation of axis (sign of coordinates)
716 int Xsign = 1;
717 int Ysign = 1;
718
719 switch( m_originSelectChoice )
720 {
721 default:
722 case 0: // Origin = paper Left Top corner
723 break;
724
725 case 1: // Origin = page Right Bottom corner
726 Xsign = -1;
727 Ysign = -1;
728 break;
729
730 case 2: // Origin = page Left Bottom corner
731 Ysign = -1;
732 break;
733
734 case 3: // Origin = page Right Top corner
735 Xsign = -1;
736 break;
737
738 case 4: // Origin = page Left Top corner
739 break;
740 }
741
742 // Display absolute coordinates:
744 VECTOR2D coord = cursorPos - originCoord;
745 double dXpos =
747 double dYpos =
749
750 wxString absformatter = wxT( "X %.4g Y %.4g" );
751 wxString locformatter = wxT( "dx %.4g dy %.4g" );
752
753 switch( GetUserUnits() )
754 {
755 case EDA_UNITS::INCHES: SetStatusText( _( "inches" ), 6 ); break;
756 case EDA_UNITS::MILS: SetStatusText( _( "mils" ), 6 ); break;
757 case EDA_UNITS::MILLIMETRES: SetStatusText( _( "mm" ), 6 ); break;
758 case EDA_UNITS::UNSCALED: SetStatusText( wxEmptyString, 6 ); break;
759 default: wxASSERT( false ); break;
760 }
761
762 wxString line;
763
764 // Display abs coordinates
765 line.Printf( absformatter, dXpos, dYpos );
766 SetStatusText( line, 2 );
767
768 // Display relative coordinates:
769 if( GetScreen() )
770 {
771 double dx = cursorPos.x - GetScreen()->m_LocalOrigin.x;
772 double dy = cursorPos.y - GetScreen()->m_LocalOrigin.y;
775 line.Printf( locformatter, dXpos, dYpos );
776 SetStatusText( line, 3 );
777 }
778
780
781 // Display corner reference for coord origin
782 line.Printf( _("coord origin: %s"),
783 m_originSelectBox->GetString( m_originSelectChoice ).GetData() );
784 SetStatusText( line, 5 );
785}
786
787
789{
792
793 for( DS_DATA_ITEM* dataItem : model.GetItems() )
794 {
795 // Ensure the scaling factor (used only in printing) of bitmaps is up to date
796 if( dataItem->GetType() == DS_DATA_ITEM::DS_BITMAP )
797 {
798 BITMAP_BASE* bitmap = static_cast<DS_DATA_ITEM_BITMAP*>( dataItem )->m_ImageBitmap;
799 bitmap->SetPixelSizeIu( drawSheetIUScale.IU_PER_MILS * 1000 / bitmap->GetPPI() );
800 }
801 }
802
804 wxEmptyString );
805
807 GetCanvas()->Refresh();
808}
809
810
812{
813 return static_cast<PL_DRAW_PANEL_GAL*>( EDA_DRAW_FRAME::GetCanvas() );
814}
815
816
818{
819 return m_toolManager->GetTool<PL_SELECTION_TOOL>()->GetSelection();
820}
821
822
824{
826
828 PL_SELECTION& selection = selTool->GetSelection();
829 DS_DATA_ITEM* item = nullptr;
830
831 if( selection.GetSize() == 1 )
832 item = static_cast<DS_DRAW_ITEM_BASE*>( selection.Front() )->GetPeer();
833
837 GetCanvas()->Refresh();
838}
839
840
842{
843 DS_DATA_ITEM * item = nullptr;
844
845 switch( aType )
846 {
848 item = new DS_DATA_ITEM_TEXT( wxT( "Text") );
849 break;
850
853 break;
854
857 break;
858
860 item = new DS_DATA_ITEM_POLYGONS();
861 break;
862
864 {
865 wxFileDialog fileDlg( this, _( "Choose Image" ), m_mruImagePath, wxEmptyString,
866 _( "Image Files" ) + wxS( " " ) + wxImage::GetImageExtWildcard(),
867 wxFD_OPEN );
868
869 if( fileDlg.ShowModal() != wxID_OK )
870 return nullptr;
871
872 wxString fullFilename = fileDlg.GetPath();
873 m_mruImagePath = wxPathOnly( fullFilename );
874
875 if( !wxFileExists( fullFilename ) )
876 {
877 wxMessageBox( _( "Could not load image from '%s'." ), fullFilename );
878 break;
879 }
880
882
883 if( !image->ReadImageFile( fullFilename ) )
884 {
885 wxMessageBox( _( "Could not load image from '%s'." ), fullFilename );
886 delete image;
887 break;
888 }
889
890 // Set the scale factor for pl_editor (it is set for Eeschema by default)
891 image->SetPixelSizeIu( drawSheetIUScale.IU_PER_MILS * 1000.0 / image->GetPPI() );
892 item = new DS_DATA_ITEM_BITMAP( image );
893 }
894 break;
895 }
896
897 if( item == nullptr )
898 return nullptr;
899
901 item->SyncDrawItems( nullptr, GetCanvas()->GetView() );
902
903 return item;
904}
905
906
908{
910 GetScreen()->SetContentModified( false );
912
915
917
919
920 if( GetCurrentFileName().IsEmpty() )
921 {
922 // Default shutdown reason until a file is loaded
923 KIPLATFORM::APP::SetShutdownBlockReason( this, _( "New drawing sheet file is unsaved" ) );
924 }
925 else
926 {
927 KIPLATFORM::APP::SetShutdownBlockReason( this, _( "Drawing sheet changes are unsaved" ) );
928 }
929}
930
931
933{
934 if( aItemCount == 0 )
935 return;
936
937 UNDO_REDO_CONTAINER& list = ( whichList == UNDO_LIST ) ? m_undoList : m_redoList;
938
939 if( aItemCount < 0 )
940 {
941 list.ClearCommandList();
942 }
943 else
944 {
945 for( int ii = 0; ii < aItemCount; ii++ )
946 {
947 if( list.m_CommandsList.size() == 0 )
948 break;
949
950 PICKED_ITEMS_LIST* curr_cmd = list.m_CommandsList[0];
951 list.m_CommandsList.erase( list.m_CommandsList.begin() );
952
953 curr_cmd->ClearListAndDeleteItems( []( EDA_ITEM* aItem )
954 {
955 delete aItem;
956 } );
957 delete curr_cmd; // Delete command
958 }
959 }
960}
961
962
964{
965 return m_pageSelectBox->GetSelection() == 0;
966}
967
968#if 1
970{
972
973 std::vector<MSG_PANEL_ITEM> msgItems;
974 msgItems.emplace_back( _( "Page Width" ), MessageTextFromValue( size.x ) );
975 msgItems.emplace_back( _( "Page Height" ), MessageTextFromValue( size.y ) );
976
977 SetMsgPanel( msgItems );
978}
979#endif
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Returns # of elements in an array.
Definition: arraydim.h:31
constexpr EDA_IU_SCALE drawSheetIUScale
Definition: base_units.h:110
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
Definition: bitmap.cpp:104
@ icon_pagelayout_editor
@ icon_pagelayout_editor_16
@ icon_pagelayout_editor_32
static TOOL_ACTION toggleGrid
Definition: actions.h:172
static TOOL_ACTION paste
Definition: actions.h:70
static TOOL_ACTION millimetersUnits
Definition: actions.h:180
static TOOL_ACTION copy
Definition: actions.h:69
static TOOL_ACTION milsUnits
Definition: actions.h:179
static TOOL_ACTION undo
Definition: actions.h:66
static TOOL_ACTION inchesUnits
Definition: actions.h:178
static TOOL_ACTION toggleCursorStyle
Definition: actions.h:132
static TOOL_ACTION doDelete
Definition: actions.h:75
static TOOL_ACTION selectionTool
Definition: actions.h:187
static TOOL_ACTION save
Definition: actions.h:51
static TOOL_ACTION zoomFitScreen
Definition: actions.h:124
static TOOL_ACTION redo
Definition: actions.h:67
static TOOL_ACTION deleteTool
Definition: actions.h:76
static TOOL_ACTION zoomTool
Definition: actions.h:127
static TOOL_ACTION cut
Definition: actions.h:68
Manage TOOL_ACTION objects.
void SetConditions(const TOOL_ACTION &aAction, const ACTION_CONDITIONS &aConditions)
Set the conditions the UI elements for activating a specific tool action should use for determining t...
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:92
WINDOW_SETTINGS m_Window
Definition: app_settings.h:170
wxString m_ColorTheme
Active color theme name.
Definition: app_settings.h:173
Handles how to draw a screen (a board, a schematic ...)
Definition: base_screen.h:41
bool IsContentModified() const
Definition: base_screen.h:60
void SetVirtualPageNumber(int aPageNumber)
Definition: base_screen.h:76
static wxString m_DrawingSheetFileName
the name of the drawing sheet file, or empty to use the default drawing sheet
Definition: base_screen.h:85
VECTOR2D m_LocalOrigin
Relative Screen cursor coordinate (on grid) in user units.
Definition: base_screen.h:90
void SetContentModified(bool aModified=true)
Definition: base_screen.h:59
void InitDataPoints(const VECTOR2I &aPageSizeInternalUnits)
Definition: base_screen.cpp:46
This class handle bitmap images in KiCad.
Definition: bitmap_base.h:48
void SetPixelSizeIu(double aPixSize)
Definition: bitmap_base.h:65
int GetPPI() const
Definition: bitmap_base.h:117
Color settings are a bit different than most of the settings objects in that there can be more than o...
Handle actions that are shared between different applications.
Handles action that are shared between different applications.
Definition: common_tools.h:38
Drawing sheet structure type definitions.
Definition: ds_data_item.h:96
virtual void SyncDrawItems(DS_DRAW_ITEM_LIST *aCollector, KIGFX::VIEW *aView)
Handle the graphic items list to draw/plot the frame and title block.
Definition: ds_data_model.h:39
static DS_DATA_MODEL & GetTheInstance()
static function: returns the instance of DS_DATA_MODEL used in the application
void Append(DS_DATA_ITEM *aItem)
void AllowVoidList(bool Allow)
In KiCad applications, a drawing sheet is needed So if the list is empty, a default drawing sheet is ...
Definition: ds_data_model.h:83
void ClearList()
Erase the list of items.
std::vector< DS_DATA_ITEM * > & GetItems()
bool LoadDrawingSheet(const wxString &aFullFileName=wxEmptyString, bool Append=false)
Populates the list with a custom layout or the default layout if no custom layout is available.
Base class to handle basic graphic items.
Definition: ds_draw_item.h:59
virtual APP_SETTINGS_BASE * config() const
Returns the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
UNDO_REDO_CONTAINER m_undoList
virtual void setupUIConditions()
Setup the UI conditions for the various actions and their controls in this frame.
virtual void ClearUndoRedoList()
Clear the undo and redo list using ClearUndoORRedoList()
UNDO_REDO_LIST
Specifies whether we are interacting with the undo or redo stacks.
virtual void OnModify()
Must be called after a model change in order to set the "modify" flag and do other frame-specific pro...
UNDO_REDO_CONTAINER m_redoList
virtual void OnDropFiles(wxDropFilesEvent &aEvent)
Handles event fired when a file is dropped to the window.
The base class for create windows for drawing purpose.
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
EDA_DRAW_PANEL_GAL::GAL_TYPE m_canvasType
virtual BASE_SCREEN * GetScreen() const
Return a pointer to a BASE_SCREEN or one of its derivatives.
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
const wxString GetZoomLevelIndicator() const
Return a human readable value for display in dialogs.
GAL_DISPLAY_OPTIONS_IMPL & GetGalDisplayOptions()
Return a reference to the gal rendering options used by GAL for rendering.
void RecreateToolbars()
Rebuild all toolbars, and update the checked state of check tools.
virtual void SetDrawBgColor(const COLOR4D &aColor)
void PrintDrawingSheet(const RENDER_SETTINGS *aSettings, BASE_SCREEN *aScreen, const std::map< wxString, wxString > *aProperties, double aMils2Iu, const wxString &aFilename, const wxString &aSheetLayer=wxEmptyString)
Prints the drawing-sheet (frame and title block).
virtual EDA_DRAW_PANEL_GAL * GetCanvas() const
Return a pointer to GAL-based canvas of given EDA draw frame.
virtual COLOR4D GetDrawBgColor() const
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Notification event that some of the common (suite-wide) settings have changed.
GAL_TYPE GetBackend() const
Return the type of backend currently used by GAL canvas.
KIGFX::VIEW_CONTROLS * GetViewControls() const
Return a pointer to the #VIEW_CONTROLS instance used in the panel.
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
@ GAL_TYPE_NONE
GAL not used (the legacy wxDC engine is used)
void SetEventDispatcher(TOOL_DISPATCHER *aEventDispatcher)
Set a dispatcher that processes events and forwards them to tools.
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:85
Specialization of the wxAuiPaneInfo class for KiCad panels.
Class that groups generic conditions for editor states.
SELECTION_CONDITION RedoAvailable()
Create a functor that tests if there are any items in the redo queue.
SELECTION_CONDITION CurrentTool(const TOOL_ACTION &aTool)
Create a functor testing if the specified tool is the current active tool in the frame.
virtual SELECTION_CONDITION UndoAvailable()
Create a functor that tests if there are any items in the undo queue.
SELECTION_CONDITION Units(EDA_UNITS aUnit)
Create a functor that tests if the frame has the specified units.
SELECTION_CONDITION GridVisible()
Create a functor testing if the grid is visible in a frame.
SELECTION_CONDITION FullscreenCursor()
Create a functor testing if the cursor is full screen in a frame.
void ReadWindowSettings(WINDOW_SETTINGS &aCfg)
Read GAL config options from application-level config.
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.
virtual void LoadColors(const COLOR_SETTINGS *aSettings)
VECTOR2D GetCursorPosition() const
Return the current cursor position 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
void SetLayerVisible(int aLayer, bool aVisible=true)
Control the visibility of a particular layer.
Definition: view.h:395
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
bool Destroy() override
Our version of Destroy() which is virtual from wxWidgets.
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition: kiway.h:279
void OnKiCadExit()
Definition: kiway.cpp:743
Describe the page size and margins of a paper page on which to eventually print or plot.
Definition: page_info.h:59
static void SetCustomWidthMils(double aWidthInMils)
Set the width of Custom page in mils for any custom page constructed or made via SetType() after maki...
Definition: page_info.cpp:235
wxPrintOrientation GetWxOrientation() const
Definition: page_info.h:127
static double GetCustomHeightMils()
Definition: page_info.h:196
const VECTOR2D GetSizeIU(double aIUScale) const
Gets the page size in internal units.
Definition: page_info.h:171
double GetHeightMils() const
Definition: page_info.h:141
wxPaperSize GetPaperId() const
Definition: page_info.h:132
const wxString & GetType() const
Definition: page_info.h:99
double GetWidthMils() const
Definition: page_info.h:136
bool IsCustom() const
Definition: page_info.cpp:183
bool IsPortrait() const
Definition: page_info.h:122
static double GetCustomWidthMils()
Definition: page_info.h:191
static void SetCustomHeightMils(double aHeightInMils)
Set the height of Custom page in mils for any custom page constructed or made via SetType() after mak...
Definition: page_info.cpp:241
bool SetType(const wxString &aStandardPageDescriptionName, bool aIsPortrait=false)
Set the name of the page type and also the sizes and margins commonly associated with that type name.
Definition: page_info.cpp:122
A holder to handle information on schematic or board items.
void ClearListAndDeleteItems(std::function< void(EDA_ITEM *)> aItemDeleter)
Delete the list of pickers AND the data pointed by #m_PickedItem or #m_PickedItemLink according to th...
Gather all the actions that are shared by tools.
Definition: pl_actions.h:36
static TOOL_ACTION placeImage
Definition: pl_actions.h:59
static TOOL_ACTION drawRectangle
Definition: pl_actions.h:60
static TOOL_ACTION layoutNormalMode
Definition: pl_actions.h:67
static TOOL_ACTION placeText
Definition: pl_actions.h:58
static TOOL_ACTION layoutEditMode
Definition: pl_actions.h:68
static TOOL_ACTION appendImportedDrawingSheet
Definition: pl_actions.h:62
static TOOL_ACTION drawLine
Definition: pl_actions.h:61
Tool responsible for drawing/placing items (lines, rectangles, text, etc.)
void DisplayDrawingSheet()
Build and update the list of WS_DRAW_ITEM_xxx showing the frame layout.
Handle actions specific to the drawing sheet editor.
The main window used in the drawing sheet editor.
bool OpenProjectFiles(const std::vector< wxString > &aFileSet, int aCtl) override
Open a project or set of files given by aFileList.
void OnNewDrawingSheet()
Must be called to initialize parameters when a new drawing sheet is loaded.
void OnModify() override
Must be called after a change in order to set the "modify" flag.
void SetCurrentFileName(const wxString &aName)
Store the current layout description file filename.
bool IsContentModified() const override
Get if the drawing sheet has been modified but not saved.
void Files_io(wxCommandEvent &event)
void ToPrinter(bool doPreview)
Open a dialog frame to print layers.
void UpdateMsgPanelInfo()
Display the size of the sheet to the message panel.
const BOX2I GetDocumentExtents(bool aIncludeAllVisible=true) const override
Returns bbox of document with option to not include some items.
wxString m_mruImagePath
void doCloseWindow() override
VECTOR2I ReturnCoordOriginCorner() const
Calculate the position (in page, in iu) of the corner used as coordinate origin of items.
void OnClearFileHistory(wxCommandEvent &aEvent)
void SetPageSettings(const PAGE_INFO &) override
DS_DATA_ITEM * AddDrawingSheetItem(int aType)
Add a new item to the drawing sheet item list.
wxString GetCurrentFileName() const override
bool canCloseWindow(wxCloseEvent &aCloseEvent) override
void OnFileHistory(wxCommandEvent &event)
void UpdateStatusBar() override
Update the status bar information.
void SetGridOrigin(const VECTOR2I &aPoint) override
void OnSelectPage(wxCommandEvent &event)
const TITLE_BLOCK & GetTitleBlock() const override
void UpdateTitleAndInfo()
Display the short filename (if exists) loaded file on the caption of the main window.
const VECTOR2I GetPageSizeIU() const override
Works off of GetPageSettings() to return the size of the paper page in the internal units of this par...
virtual void PrintPage(const RENDER_SETTINGS *aSettings) override
Print a page.
void OnSelectCoordOriginCorner(wxCommandEvent &event)
Called when the user select one of the 4 page corner as corner reference (or the left top paper corne...
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
SELECTION & GetCurrentSelection() override
Get the current selection from the canvas area.
PL_EDITOR_LAYOUT m_pageLayout
bool GetPageNumberOption() const
Drawing sheet editor can show the title block using a page number 1 or another number.
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Notification event that some of the common (suite-wide) settings have changed.
void HardRedraw() override
Refresh the library tree and redraw the window.
void DisplayGridMsg() override
Display current grid size in the status bar.
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
wxChoice * m_originSelectBox
const PAGE_INFO & GetPageSettings() const override
const PL_EDITOR_LAYOUT & GetPageLayout() const
void setupUIConditions() override
Setup the UI conditions for the various actions and their controls in this frame.
PROPERTIES_FRAME * m_propertiesPagelayout
The last filename chosen to be proposed to the user.
wxChoice * m_pageSelectBox
PL_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
void ClearUndoORRedoList(UNDO_REDO_LIST whichList, int aItemCount=-1) override
Remove the aItemCount of old commands from aList and delete commands, pickers and picked items if nee...
void SetTitleBlock(const TITLE_BLOCK &aTitleBlock) override
void OnExit(wxCommandEvent &aEvent)
Event handler for the wxID_EXIT and wxID_CLOSE events.
bool LoadDrawingSheetFile(const wxString &aFullFileName)
Load a .kicad_wks drawing sheet file.
void SetPageSettings(const PAGE_INFO &aPageSettings)
TITLE_BLOCK & GetTitleBlock()
PAGE_INFO & GetPageSettings()
void SetTitleBlock(const TITLE_BLOCK &aTitleBlock)
Tool that displays edit points allowing to modify items by dragging the points.
PL_SELECTION & GetSelection()
Return the set of currently selected items.
PROPERTIES_FRAME display properties of the current item.
void CopyPrmsFromItemToPanel(DS_DATA_ITEM *aItem)
static bool NotEmpty(const SELECTION &aSelection)
Test if there are any items selected.
static bool Idle(const SELECTION &aSelection)
Test if there no items selected or being edited.
static bool ShowAlways(const SELECTION &aSelection)
The default condition function (always returns true).
static bool ShowNever(const SELECTION &aSelection)
Always returns false.
T * GetAppSettings()
Returns a handle to the a given settings by type If the settings have already been loaded,...
COLOR_SETTINGS * GetColorSettings(const wxString &aName="user")
Retrieves a color settings object that applications can read colors from.
Hold the information shown in the lower right corner of a plot, printout, or editing view.
Definition: title_block.h:41
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:167
TOOL_DISPATCHER * m_toolDispatcher
Definition: tools_holder.h:169
ACTIONS * m_actions
Definition: tools_holder.h:168
Master controller class:
Definition: tool_manager.h:57
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
bool InvokeTool(TOOL_ID aToolId)
Call a tool by sending a tool activation event to tool of given ID.
ACTION_MANAGER * GetActionManager() const
Definition: tool_manager.h:289
void RegisterTool(TOOL_BASE *aTool)
Add a tool to the manager set and sets it up.
void SetEnvironment(EDA_ITEM *aModel, KIGFX::VIEW *aView, KIGFX::VIEW_CONTROLS *aViewControls, APP_SETTINGS_BASE *aSettings, TOOLS_HOLDER *aFrame)
Set the work environment (model, view, view controls and the parent window).
void InitTools()
Initializes all registered tools.
void ShutdownAllTools()
Shutdown all tools with a currently registered event loop in this tool manager by waking them up with...
A holder to handle a list of undo (or redo) commands.
std::vector< PICKED_ITEMS_LIST * > m_CommandsList
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
EDA_UNITS GetUserUnits() const
@ WHITE
Definition: color4d.h:48
@ BLACK
Definition: color4d.h:44
bool HandleUnsavedChanges(wxWindow *aParent, const wxString &aMessage, const std::function< bool()> &aSaveFunction)
Display a dialog with Save, Cancel and Discard Changes buttons.
Definition: confirm.cpp:240
This file is part of the common library.
#define CHECK(x)
#define ENABLE(x)
#define _HKI(x)
int InvokeDialogPrintPreview(PL_EDITOR_FRAME *aCaller, wxPrintData *aPrintData)
Create and show a print preview dialog returns 1 if OK, 0 , there is a problem.
int InvokeDialogPrint(PL_EDITOR_FRAME *aCaller, wxPrintData *aPrintData, wxPageSetupDialogData *aPageSetupData)
Create and show a print dialog returns 1 if OK, 0 , there is a problem.
@ RB_CORNER
Definition: ds_data_item.h:49
@ RT_CORNER
Definition: ds_data_item.h:50
@ LT_CORNER
Definition: ds_data_item.h:52
@ LB_CORNER
Definition: ds_data_item.h:51
#define _(s)
#define KICAD_DEFAULT_DRAWFRAME_STYLE
#define PL_EDITOR_FRAME_NAME
GERBVIEW_FRAME::OnZipFileHistory GERBVIEW_FRAME::OnSelectDisplayMode EVT_CHOICE(ID_GBR_AUX_TOOLBAR_PCB_APERATTRIBUTES_CHOICE, GERBVIEW_FRAME::OnSelectHighlightChoice) EVT_UPDATE_UI(ID_TOOLBARH_GERBVIEW_SELECT_ACTIVE_LAYER
EVT_MENU_RANGE(ID_GERBVIEW_DRILL_FILE1, ID_GERBVIEW_DRILL_FILEMAX, GERBVIEW_FRAME::OnDrlFileHistory) EVT_MENU_RANGE(ID_GERBVIEW_ZIP_FILE1
@ FRAME_PL_EDITOR
Definition: frame_type.h:59
static const std::string DrawingSheetFileExtension
@ ID_FILE_LIST_CLEAR
Definition: id.h:87
@ ID_FILEMAX
Definition: id.h:85
@ ID_FILE1
Definition: id.h:84
KIWAY Kiway
@ LAYER_DRAWINGSHEET_PAGEn
for drawingsheetEditor previewing
Definition: layer_ids.h:250
@ LAYER_DRAWINGSHEET_PAGE1
for drawingsheetEditor previewing
Definition: layer_ids.h:249
KICOMMON_API double ToUserUnit(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnit, double aValue)
Function To_User_Unit convert aValue in internal units to the appropriate user units defined by aUnit...
Definition: eda_units.cpp:243
KICOMMON_API int Mils2mm(double aVal)
Convert mils to mm.
Definition: eda_units.cpp:66
@ COLOR
Color has changed.
Definition: view_item.h:53
void SetShutdownBlockReason(wxWindow *aWindow, const wxString &aReason)
Sets the block reason why the window/application is preventing OS shutdown.
Definition: gtk/app.cpp:90
bool SupportsShutdownBlockReason()
Whether or not the window supports setting a shutdown block reason.
Definition: gtk/app.cpp:79
wxSize GetTextSize(const wxString &aSingleLine, wxWindow *aWindow)
Return the size of aSingleLine of text when it is rendered in aWindow using whatever font is currentl...
Definition: ui_common.cpp:74
see class PGM_BASE
@ ID_SELECT_PAGE_NUMBER
Definition: pl_editor_id.h:39
@ ID_SELECT_COORDINATE_ORIGIN
Definition: pl_editor_id.h:38
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:119
std::vector< FAB_LAYER_COLOR > dummy
const double IU_PER_MILS
Definition: base_units.h:78
std::vector< GRID > grids
Definition: grid_settings.h:66
Common grid settings, available to every frame.
Definition: grid_settings.h:34
GRID_SETTINGS grid
Definition: app_settings.h:81
std::vector< double > zoom_factors
Definition: app_settings.h:78
VECTOR2< int > VECTOR2I
Definition: vector2d.h:588
Definition of file extensions used in Kicad.
#define ZOOM_LIST_PL_EDITOR
Definition: zoom_defines.h:38