KiCad PCB EDA Suite
Loading...
Searching...
No Matches
sch_base_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) 2012 SoftPLC Corporation, Dick Hollenbeck <[email protected]>
5 * Copyright (C) 2015-2023 KiCad Developers, see change_log.txt for contributors.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, you may find one here:
19 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20 * or you may search the http://www.gnu.org website for the version 2 license,
21 * or you may write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 */
24
25#include <advanced_config.h>
26#include <base_units.h>
27#include <kiway.h>
29#include <pgm_base.h>
30#include <eda_list_dialog.h>
31#include <eeschema_settings.h>
35#include <sch_draw_panel.h>
36#include <sch_view.h>
37#include <sch_painter.h>
39#include <confirm.h>
41#include <project_sch.h>
42#include <symbol_library.h>
43#include <sch_base_frame.h>
44#include <symbol_lib_table.h>
45#include <tool/action_toolbar.h>
46#include <tool/tool_manager.h>
48#include <tools/ee_actions.h>
50#include <view/view_controls.h>
51#include <wx/choicdlg.h>
52#include <wx/fswatcher.h>
53#include <wx/log.h>
54#include <wx/msgdlg.h>
55
57
59 SYMBOL_LIB* aCacheLib, wxWindow* aParent, bool aShowErrorMsg )
60{
61 wxCHECK_MSG( aLibTable, nullptr, wxS( "Invalid symbol library table." ) );
62
63 LIB_SYMBOL* symbol = nullptr;
64
65 try
66 {
67 symbol = aLibTable->LoadSymbol( aLibId );
68
69 if( !symbol && aCacheLib )
70 {
71 wxCHECK_MSG( aCacheLib->IsCache(), nullptr, wxS( "Invalid cache library." ) );
72
73 wxString cacheName = aLibId.GetLibNickname().wx_str();
74 cacheName << "_" << aLibId.GetLibItemName();
75 symbol = aCacheLib->FindSymbol( cacheName );
76 }
77 }
78 catch( const IO_ERROR& ioe )
79 {
80 if( aShowErrorMsg )
81 {
82 wxString msg = wxString::Format( _( "Error loading symbol %s from library '%s'." ),
83 aLibId.GetLibItemName().wx_str(),
84 aLibId.GetLibNickname().wx_str() );
85 DisplayErrorMessage( aParent, msg, ioe.What() );
86 }
87 }
88
89 return symbol;
90}
91
92
93SCH_BASE_FRAME::SCH_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aWindowType,
94 const wxString& aTitle, const wxPoint& aPosition,
95 const wxSize& aSize, long aStyle, const wxString& aFrameName ) :
96 EDA_DRAW_FRAME( aKiway, aParent, aWindowType, aTitle, aPosition, aSize, aStyle,
97 aFrameName, schIUScale ),
98 m_base_frame_defaults( nullptr, "base_Frame_defaults" ),
99 m_selectionFilterPanel( nullptr ),
100 m_spaceMouse( nullptr )
101{
102 if( ( aStyle & wxFRAME_NO_TASKBAR ) == 0 )
103 createCanvas();
104
105 Bind( wxEVT_IDLE,
106 [this]( wxIdleEvent& aEvent )
107 {
108 // Handle cursor adjustments. While we can get motion and key events through
109 // wxWidgets, we can't get modifier-key-up events.
110 if( m_toolManager )
111 {
113
114 if( selTool )
115 selTool->OnIdle( aEvent );
116 }
117 } );
118
120}
121
122
124{
125 delete m_spaceMouse;
126}
127
128
130{
132}
133
134
136{
137 return dynamic_cast<EESCHEMA_SETTINGS*>( config() );
138}
139
140
142{
143 return dynamic_cast<SYMBOL_EDITOR_SETTINGS*>( config() );
144}
145
146
147void SCH_BASE_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
148{
149 GetScreen()->SetPageSettings( aPageSettings );
150}
151
152
154{
155 return GetScreen()->GetPageSettings();
156}
157
158
160{
161 // GetSizeIU is compile time dependent:
163}
164
165
167{
168 wxASSERT( GetScreen() );
169 return GetScreen()->GetTitleBlock();
170}
171
172
174{
175 wxASSERT( GetScreen() );
176 GetScreen()->SetTitleBlock( aTitleBlock );
177}
178
179
181{
182 wxString line;
183 BASE_SCREEN* screen = GetScreen();
184
185 if( !screen )
186 return;
187
189
190 // Display absolute and relative coordinates
192 VECTOR2D d = cursorPos - screen->m_LocalOrigin;
193
194 line.Printf( wxS( "X %s Y %s" ),
195 MessageTextFromValue( cursorPos.x, false ),
196 MessageTextFromValue( cursorPos.y, false ) );
197 SetStatusText( line, 2 );
198
199 line.Printf( wxS( "dx %s dy %s dist %s" ),
200 MessageTextFromValue( d.x, false ),
201 MessageTextFromValue( d.y, false ),
202 MessageTextFromValue( hypot( d.x, d.y ), false ) );
203 SetStatusText( line, 3 );
204
207}
208
209
210LIB_SYMBOL* SCH_BASE_FRAME::GetLibSymbol( const LIB_ID& aLibId, bool aUseCacheLib,
211 bool aShowErrorMsg )
212{
213 SYMBOL_LIB* cache =
214 ( aUseCacheLib ) ? PROJECT_SCH::SchLibs( &Prj() )->GetCacheLibrary() : nullptr;
215
216 return SchGetLibSymbol( aLibId, PROJECT_SCH::SchSymbolLibTable( &Prj() ), cache, this,
217 aShowErrorMsg );
218}
219
220
221bool SCH_BASE_FRAME::saveSymbolLibTables( bool aGlobal, bool aProject )
222{
223 wxString msg;
224 bool success = true;
225
226 if( aGlobal )
227 {
228 try
229 {
231 }
232 catch( const IO_ERROR& ioe )
233 {
234 success = false;
235 msg.Printf( _( "Error saving global symbol library table:\n%s" ), ioe.What() );
236 DisplayErrorMessage( this, msg );
237 }
238 }
239
240 if( aProject && !Prj().GetProjectName().IsEmpty() )
241 {
242 wxFileName fn( Prj().GetProjectPath(), SYMBOL_LIB_TABLE::GetSymbolLibTableFileName() );
243
244 try
245 {
246 PROJECT_SCH::SchSymbolLibTable( &Prj() )->Save( fn.GetFullPath() );
247 }
248 catch( const IO_ERROR& ioe )
249 {
250 success = false;
251 msg.Printf( _( "Error saving project-specific symbol library table:\n%s" ),
252 ioe.What() );
253 DisplayErrorMessage( this, msg );
254 }
255 }
256
257 return success;
258}
259
260
262{
263 // If no project is loaded, always work with the global table
264 if( Prj().IsNullProject() )
265 {
267
268 if( aOptional )
269 {
270 wxMessageDialog dlg( this, _( "Add the library to the global library table?" ),
271 _( "Add To Global Library Table" ), wxYES_NO );
272
273 if( dlg.ShowModal() != wxID_OK )
274 ret = nullptr;
275 }
276
277 return ret;
278 }
279
280 wxArrayString libTableNames;
281 libTableNames.Add( _( "Global" ) );
282 libTableNames.Add( _( "Project" ) );
283
284 wxSingleChoiceDialog dlg( this, _( "Choose the Library Table to add the library to:" ),
285 _( "Add To Library Table" ), libTableNames );
286
287 if( aOptional )
288 {
289 dlg.FindWindow( wxID_CANCEL )->SetLabel( _( "Skip" ) );
290 dlg.FindWindow( wxID_OK )->SetLabel( _( "Add" ) );
291 }
292
293 if( dlg.ShowModal() != wxID_OK )
294 return nullptr;
295
296 switch( dlg.GetSelection() )
297 {
298 case 0: return &SYMBOL_LIB_TABLE::GetGlobalLibTable();
299 case 1: return PROJECT_SCH::SchSymbolLibTable( &Prj() );
300 default: return nullptr;
301 }
302}
303
304
305void SCH_BASE_FRAME::RedrawScreen( const VECTOR2I& aCenterPoint, bool aWarpPointer )
306{
307 GetCanvas()->GetView()->SetCenter( aCenterPoint );
308
309 if( aWarpPointer )
311
312 GetCanvas()->Refresh();
313}
314
315
317{
318 if( GetCanvas() && GetCanvas()->GetView() )
319 {
322 }
323}
324
325
327{
328 return static_cast<SCH_DRAW_PANEL*>( EDA_DRAW_FRAME::GetCanvas() );
329}
330
331
333{
334 if( GetCanvas() && GetCanvas()->GetView() )
335 {
336 if( KIGFX::PAINTER* painter = GetCanvas()->GetView()->GetPainter() )
337 return static_cast<SCH_RENDER_SETTINGS*>( painter->GetSettings() );
338 }
339
340 return nullptr;
341}
342
343
345{
347
348 SetCanvas( new SCH_DRAW_PANEL( this, wxID_ANY, wxPoint( 0, 0 ), m_frameSize,
351}
352
353
355{
357
358 try
359 {
360 if( !m_spaceMouse )
362
364 }
365 catch( const std::system_error& e )
366 {
367 wxLogTrace( wxT( "KI_TRACE_NAVLIB" ), e.what() );
368 }
369}
370
371
372void SCH_BASE_FRAME::UpdateItem( EDA_ITEM* aItem, bool isAddOrDelete, bool aUpdateRtree )
373{
374 EDA_ITEM* parent = aItem->GetParent();
375
376 if( aItem->Type() == SCH_SHEET_PIN_T )
377 {
378 // Sheet pins aren't in the view. Refresh their parent.
379 if( parent )
380 GetCanvas()->GetView()->Update( parent );
381 }
382 else
383 {
384 if( !isAddOrDelete )
385 GetCanvas()->GetView()->Update( aItem );
386
387 // Some children are drawn from their parents. Mark them for re-paint.
388 if( parent && parent->IsType( { SCH_SYMBOL_T, SCH_SHEET_T, SCH_LABEL_LOCATE_ANY_T, SCH_TABLE_T } ) )
389 GetCanvas()->GetView()->Update( parent, KIGFX::REPAINT );
390 }
391
396 if( aUpdateRtree && dynamic_cast<SCH_ITEM*>( aItem ) )
397 GetScreen()->Update( static_cast<SCH_ITEM*>( aItem ) );
398
399 // Calling Refresh() here introduces a bi-stable state: when doing operations on a
400 // large number of items if at some point the refresh timer times out and does a
401 // refresh it will take long enough that the next item will also time out, and the
402 // next, and the next, etc.
403 // GetCanvas()->Refresh();
404}
405
406
408{
409 // We currently have two zoom-dependent renderings: text, which is rendered as bitmap text
410 // when too small to see the difference, and selection shadows.
411 //
412 // Because non-selected text is cached by OpenGL, we only apply the bitmap performance hack
413 // to selected text items.
414 //
415 // Thus, as it currently stands, all zoom-dependent items can be found in the list of selected
416 // items.
417
418 if( m_toolManager )
419 {
421 SELECTION& selection = selectionTool->GetSelection();
422 KIGFX::SCH_VIEW* view = GetCanvas()->GetView();
423
424 for( EDA_ITEM* item : selection )
425 {
426 if( item->RenderAsBitmap( view->GetGAL()->GetWorldScale() ) != item->IsShownAsBitmap()
428 {
429 view->Update( item, KIGFX::REPAINT );
430
431 EDA_ITEM* parent = item->GetParent();
432
433 // Symbol children are drawn from their parents. Mark them for re-paint.
434 if( parent && parent->Type() == SCH_SYMBOL_T )
435 GetCanvas()->GetView()->Update( parent, KIGFX::REPAINT );
436 }
437 }
438 }
439}
440
441
443{
444 // Null pointers will cause boost::ptr_vector to raise a boost::bad_pointer exception which
445 // will be unhandled. There is no valid reason to pass an invalid EDA_ITEM pointer to the
446 // screen append function.
447 wxCHECK( aItem != nullptr, /* void */ );
448
449 auto screen = aScreen;
450
451 if( aScreen == nullptr )
452 screen = GetScreen();
453
454 if( aItem->Type() != SCH_TABLECELL_T )
455 screen->Append( (SCH_ITEM*) aItem );
456
457 if( screen == GetScreen() )
458 {
459 GetCanvas()->GetView()->Add( aItem );
460 UpdateItem( aItem, true ); // handle any additional parent semantics
461 }
462}
463
464
466{
467 auto screen = aScreen;
468
469 if( aScreen == nullptr )
470 screen = GetScreen();
471
472 if( screen == GetScreen() )
473 GetCanvas()->GetView()->Remove( aItem );
474
475 if( aItem->Type() != SCH_TABLECELL_T )
476 screen->Remove( (SCH_ITEM*) aItem );
477
478 if( screen == GetScreen() )
479 UpdateItem( aItem, true ); // handle any additional parent semantics
480}
481
482
484{
485 // Let tools add things to the view if necessary
486 if( m_toolManager )
488
490}
491
492
494{
495 return GetColorSettings()->GetColor( aLayer );
496}
497
498
499void SCH_BASE_FRAME::CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged )
500{
501 EDA_DRAW_FRAME::CommonSettingsChanged( aEnvVarsChanged, aTextVarsChanged );
502
503 COLOR_SETTINGS* colorSettings = GetColorSettings( true );
504
505 GetCanvas()->GetView()->GetPainter()->GetSettings()->LoadColors( colorSettings );
507
511}
512
513
515{
516 if( !m_colorSettings || aForceRefresh )
517 {
520 wxString colorTheme = cfg->m_ColorTheme;
521
523 {
525
526 if( !symCfg->m_UseEeschemaColorSettings )
527 colorTheme = symCfg->m_ColorTheme;
528 }
529
530 COLOR_SETTINGS* colorSettings = mgr.GetColorSettings( colorTheme );
531
532 const_cast<SCH_BASE_FRAME*>( this )->m_colorSettings = colorSettings;
533 }
534
535 return m_colorSettings;
536}
537
538
540{
542}
543
544
545void SCH_BASE_FRAME::handleActivateEvent( wxActivateEvent& aEvent )
546{
548
549 if( m_spaceMouse )
550 m_spaceMouse->SetFocus( aEvent.GetActive() );
551}
552
553
554void SCH_BASE_FRAME::handleIconizeEvent( wxIconizeEvent& aEvent )
555{
557
558 if( m_spaceMouse )
559 m_spaceMouse->SetFocus( false );
560}
561
562
564{
566 PROJECT& prj = Prj();
567
568 if( PROJECT_SCH::SchSymbolLibTable( &prj )->IsEmpty() )
569 {
570 ShowInfoBarError( _( "No symbol libraries are loaded." ) );
571 return wxEmptyString;
572 }
573
574 wxArrayString headers;
575
576 headers.Add( _( "Library" ) );
577
578 std::vector< wxArrayString > itemsToDisplay;
579 std::vector< wxString > libNicknames = PROJECT_SCH::SchSymbolLibTable( &prj )->GetLogicalLibs();
580
581 for( const wxString& name : libNicknames )
582 {
583 // Exclude read only libraries.
584 if( !PROJECT_SCH::SchSymbolLibTable( &prj )->IsSymbolLibWritable( name ) )
585 continue;
586
589 {
590 wxArrayString item;
591
593 itemsToDisplay.push_back( item );
594 }
595 }
596
597 for( const wxString& name : libNicknames )
598 {
599 // Exclude read only libraries.
600 if( !PROJECT_SCH::SchSymbolLibTable( &prj )->IsSymbolLibWritable( name ) )
601 continue;
602
605 {
606 wxArrayString item;
607
608 item.Add( name );
609 itemsToDisplay.push_back( item );
610 }
611 }
612
613 wxString oldLibName = prj.GetRString( PROJECT::SCH_LIB_SELECT );
614
615 EDA_LIST_DIALOG dlg( this, _( "Select Symbol Library" ), headers, itemsToDisplay, oldLibName,
616 false );
617
618 if( dlg.ShowModal() != wxID_OK )
619 return wxEmptyString;
620
621 wxString libName = dlg.GetTextSelection();
622
623 if( !libName.empty() )
624 {
625 if( PROJECT_SCH::SchSymbolLibTable( &prj )->HasLibrary( libName ) )
626 prj.SetRString( PROJECT::SCH_LIB_SELECT, libName );
627 else
628 libName = wxEmptyString;
629 }
630
631 return libName;
632}
633
634
636{
637 Unbind( wxEVT_FSWATCHER, &SCH_BASE_FRAME::OnSymChange, this );
638
639 if( m_watcher )
640 {
641 wxLogTrace( "KICAD_LIB_WATCH", "Remove watch" );
642 m_watcher->RemoveAll();
643 m_watcher->SetOwner( nullptr );
644 m_watcher.reset();
645 }
646
647 wxString libfullname;
649
650 if( !aID || !tbl )
651 return;
652
653 try
654 {
655 const SYMBOL_LIB_TABLE_ROW* row = tbl->FindRow( aID->GetLibNickname() );
656
657 if( !row )
658 return;
659
660 libfullname = row->GetFullURI( true );
661 }
662 catch( const std::exception& e )
663 {
664 DisplayInfoMessage( this, e.what() );
665 return;
666 }
667 catch( const IO_ERROR& error )
668 {
669 wxLogTrace( "KICAD_LIB_WATCH", "Error: %s", error.What() );
670 return;
671 }
672
673 wxLogTrace( "KICAD_LIB_WATCH", "Setting up watcher for %s", libfullname );
674 m_watcherFileName.Assign( libfullname );
675
676 if( !m_watcherFileName.FileExists() )
677 return;
678
679 wxLog::EnableLogging( false );
680 m_watcherLastModified = m_watcherFileName.GetModificationTime();
681 wxLog::EnableLogging( true );
682
683 Bind( wxEVT_FSWATCHER, &SCH_BASE_FRAME::OnSymChange, this );
684 m_watcher = std::make_unique<wxFileSystemWatcher>();
685 m_watcher->SetOwner( this );
686
687 wxFileName fn;
688 fn.AssignDir( m_watcherFileName.GetPath() );
689 fn.DontFollowLink();
690
691 m_watcher->Add( fn );
692}
693
694
695void SCH_BASE_FRAME::OnSymChange( wxFileSystemWatcherEvent& aEvent )
696{
698
699 wxLogTrace( "KICAD_LIB_WATCH", "OnSymChange: %s, watcher file: %s",
700 aEvent.GetPath().GetFullPath(), m_watcherFileName.GetFullPath() );
701
702 if( !libs || !m_watcher || !m_watcher.get() || m_watcherFileName.GetPath().IsEmpty() )
703 return;
704
705 if( aEvent.GetPath() != m_watcherFileName )
706 return;
707
708 // Start the debounce timer (set to 1 second)
709 if( !m_watcherDebounceTimer.StartOnce( 1000 ) )
710 {
711 wxLogTrace( "KICAD_LIB_WATCH", "Failed to start the debounce timer" );
712 return;
713 }
714}
715
716
718{
719 wxLogTrace( "KICAD_LIB_WATCH", "OnSymChangeDebounceTimer" );
720 // Disable logging to avoid spurious messages and check if the file has changed
721 wxLog::EnableLogging( false );
722 wxDateTime lastModified = m_watcherFileName.GetModificationTime();
723 wxLog::EnableLogging( true );
724
725 if( lastModified == m_watcherLastModified || !lastModified.IsValid() )
726 return;
727
728 m_watcherLastModified = lastModified;
729
730 if( !GetScreen()->IsContentModified() || IsOK( this, _( "The library containing the current symbol has changed.\n"
731 "Do you want to reload the library?" ) ) )
732 {
733 wxLogTrace( "KICAD_LIB_WATCH", "Sending refresh symbol mail" );
734 std::string libName = m_watcherFileName.GetFullPath().ToStdString();
737 }
738}
const char * name
Definition: DXF_plotter.cpp:57
constexpr EDA_IU_SCALE schIUScale
Definition: base_units.h:110
wxString m_ColorTheme
Active color theme name.
Definition: app_settings.h:175
Handles how to draw a screen (a board, a schematic ...)
Definition: base_screen.h:41
VECTOR2D m_LocalOrigin
Relative Screen cursor coordinate (on grid) in user units.
Definition: base_screen.h:90
Color settings are a bit different than most of the settings objects in that there can be more than o...
COLOR4D GetColor(int aLayer) const
virtual APP_SETTINGS_BASE * config() const
Returns the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
virtual void handleIconizeEvent(wxIconizeEvent &aEvent)
Handle a window iconize event.
virtual bool IsContentModified() const
Get if the contents of the frame have been modified since the last save.
void ShowInfoBarError(const wxString &aErrorMsg, bool aShowCloseButton=false, WX_INFOBAR::MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the WX_INFOBAR displayed on the top of the canvas with a message and an error icon on the left o...
bool IsType(FRAME_T aType) const
The base class for create windows for drawing purpose.
virtual void ActivateGalCanvas()
Use to start up the GAL drawing canvas.
COLOR_SETTINGS * m_colorSettings
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 DisplayUnitsMsg()
Display current unit pane in the status bar.
EDA_DRAW_PANEL_GAL::GAL_TYPE loadCanvasTypeSetting(APP_SETTINGS_BASE *aCfg=nullptr)
Returns the canvas type stored in the application settings.
GAL_DISPLAY_OPTIONS_IMPL & GetGalDisplayOptions()
Return a reference to the gal rendering options used by GAL for rendering.
void SetCanvas(EDA_DRAW_PANEL_GAL *aPanel)
virtual void handleActivateEvent(wxActivateEvent &aEvent)
Handle a window activation event.
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.
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Notification event that some of the common (suite-wide) settings have changed.
virtual void DisplayGridMsg()
Display current grid size in the status bar.
KIGFX::VIEW_CONTROLS * GetViewControls() const
Return a pointer to the #VIEW_CONTROLS instance used in the panel.
void ForceRefresh()
Force a redraw.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
KIGFX::GAL * GetGAL() const
Return a pointer to the GAL instance used in the panel.
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:88
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:100
virtual bool IsType(const std::vector< KICAD_T > &aScanTypes) const
Check whether the item is one of the listed types.
Definition: eda_item.h:175
EDA_ITEM * GetParent() const
Definition: eda_item.h:102
A dialog which shows:
wxString GetTextSelection(int aColumn=0)
Return the selected text from aColumn in the wxListCtrl in the dialog.
void OnIdle(wxIdleEvent &aEvent)
Zoom the screen to fit the bounding box for cross probing/selection sync.
EE_SELECTION & GetSelection()
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
Definition: ki_exception.h:77
virtual const wxString What() const
A composite of Problem() and Where()
Definition: exceptions.cpp:30
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
void SetAxesColor(const COLOR4D &aAxesColor)
Set the axes color.
double GetWorldScale() const
Get the world scale.
Contains all the knowledge about how to draw graphical object onto any particular output device.
Definition: painter.h:59
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
virtual void LoadColors(const COLOR_SETTINGS *aSettings)
static std::vector< KICAD_T > g_ScaledSelectionTypes
Definition: sch_painter.h:141
virtual void CenterOnCursor()=0
Set the viewport center to the current cursor position and warps the cursor to the screen center.
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
Definition: view.cpp:315
virtual void Remove(VIEW_ITEM *aItem)
Remove a VIEW_ITEM from the view.
Definition: view.cpp:354
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
Definition: view.cpp:1631
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
Definition: view.h:197
void RecacheAllItems()
Rebuild GAL display lists.
Definition: view.cpp:1410
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
Definition: view.cpp:1513
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
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition: kiway.h:279
virtual void ExpressMail(FRAME_T aDestination, MAIL_T aCommand, std::string &aPayload, wxWindow *aSource=nullptr)
Send aPayload to aDestination from aSource.
Definition: kiway.cpp:527
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:49
const UTF8 & GetLibItemName() const
Definition: lib_id.h:102
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
Definition: lib_id.h:87
Define a library symbol object.
Definition: lib_symbol.h:77
const wxString GetFullURI(bool aSubstituted=false) const
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
std::vector< wxString > GetLogicalLibs()
Return the logical library names, all of them that are pertinent to a look up done on this LIB_TABLE.
void Save(const wxString &aFileName) const
Write this library table to aFileName in s-expression form.
static const wxString GetPinningSymbol()
The class that implements the public interface to the SpaceMouse plug-in.
void SetFocus(bool aFocus)
Set the connection to the 3Dconnexion driver to the focus state so that 3DMouse data is routed to thi...
void SetCanvas(EDA_DRAW_PANEL_GAL *aViewport)
Sets the viewport controlled by the SpaceMouse.
Describe the page size and margins of a paper page on which to eventually print or plot.
Definition: page_info.h:59
const VECTOR2D GetSizeIU(double aIUScale) const
Gets the page size in internal units.
Definition: page_info.h:171
virtual COMMON_SETTINGS * GetCommonSettings() const
Definition: pgm_base.cpp:678
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition: pgm_base.h:142
std::vector< wxString > m_PinnedSymbolLibs
Below are project-level settings that have not been moved to a dedicated file.
Definition: project_file.h:120
static SYMBOL_LIB_TABLE * SchSymbolLibTable(PROJECT *aProject)
Accessor for project symbol library table.
static SYMBOL_LIBS * SchLibs(PROJECT *aProject)
Definition: project_sch.cpp:90
Container for project specific data.
Definition: project.h:62
@ SCH_LIB_SELECT
Definition: project.h:183
virtual PROJECT_FILE & GetProjectFile() const
Definition: project.h:166
virtual void SetRString(RSTRING_T aStringId, const wxString &aString)
Store a "retained string", which is any session and project specific string identified in enum RSTRIN...
Definition: project.cpp:269
virtual const wxString & GetRString(RSTRING_T aStringId)
Return a "retained string", which is any session and project specific string identified in enum RSTRI...
Definition: project.cpp:280
A shim class between EDA_DRAW_FRAME and several derived classes: SYMBOL_EDIT_FRAME,...
virtual void RedrawScreen(const VECTOR2I &aCenterPoint, bool aWarpPointer)
SCH_BASE_FRAME(KIWAY *aKiway, wxWindow *aParent, FRAME_T aWindowType, const wxString &aTitle, const wxPoint &aPosition, const wxSize &aSize, long aStyle, const wxString &aFrameName)
void UpdateStatusBar() override
Update the status bar information.
SCH_RENDER_SETTINGS * GetRenderSettings()
void ActivateGalCanvas() override
Use to start up the GAL drawing canvas.
const VECTOR2I GetPageSizeIU() const override
Works off of GetPageSettings() to return the size of the paper page in the internal units of this par...
void SetPageSettings(const PAGE_INFO &aPageSettings) override
void handleIconizeEvent(wxIconizeEvent &aEvent) override
Handle a window iconize event.
void AddToScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen=nullptr)
Add an item to the screen (and view) aScreen is the screen the item is located on,...
void OnSymChange(wxFileSystemWatcherEvent &aEvent)
Handler for Symbol change events.
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
SYMBOL_EDITOR_SETTINGS * libeditconfig() const
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
void HardRedraw() override
Rebuild the GAL and redraws the screen.
wxTimer m_watcherDebounceTimer
SYMBOL_LIB_TABLE * SelectSymLibTable(bool aOptional=false)
Display a dialog asking the user to select a symbol library table.
wxString SelectLibraryFromList()
Display a list of loaded libraries and allows the user to select a library.
void SyncView()
Mark all items for refresh.
wxDateTime m_watcherLastModified
std::unique_ptr< wxFileSystemWatcher > m_watcher
These are file watchers for the symbol library tables.
virtual ~SCH_BASE_FRAME()
const TITLE_BLOCK & GetTitleBlock() const override
void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged) override
Notification event that some of the common (suite-wide) settings have changed.
NL_SCHEMATIC_PLUGIN * m_spaceMouse
bool saveSymbolLibTables(bool aGlobal, bool aProject)
Save Symbol Library Tables to disk.
void RefreshZoomDependentItems()
Mark selected items for refresh.
EESCHEMA_SETTINGS * eeconfig() const
void SetTitleBlock(const TITLE_BLOCK &aTitleBlock) override
LIB_SYMBOL * GetLibSymbol(const LIB_ID &aLibId, bool aUseCacheLib=false, bool aShowErrorMsg=false)
Load symbol from symbol library table.
virtual void UpdateItem(EDA_ITEM *aItem, bool isAddOrDelete=false, bool aUpdateRtree=false)
Mark an item for refresh.
void handleActivateEvent(wxActivateEvent &aEvent) override
Handle a window activation event.
COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Returns a pointer to the active color theme settings.
wxFileName m_watcherFileName
void setSymWatcher(const LIB_ID *aSymbol)
Creates (or removes) a watcher on the specified symbol library.
const PAGE_INFO & GetPageSettings() const override
COLOR4D GetDrawBgColor() const override
void OnSymChangeDebounceTimer(wxTimerEvent &aEvent)
Handler for the filesystem watcher debounce timer.
void RemoveFromScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen)
Remove an item from the screen (and view) aScreen is the screen the item is located on,...
COLOR4D GetLayerColor(SCH_LAYER_ID aLayer)
Helper to retrieve a layer color from the global color settings.
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:174
const PAGE_INFO & GetPageSettings() const
Definition: sch_screen.h:130
void SetTitleBlock(const TITLE_BLOCK &aTitleBlock)
Definition: sch_screen.h:156
void SetPageSettings(const PAGE_INFO &aPageSettings)
Definition: sch_screen.h:131
const TITLE_BLOCK & GetTitleBlock() const
Definition: sch_screen.h:154
void Update(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
Update aItem's bounding box in the tree.
Definition: sch_screen.cpp:314
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.
A collection of SYMBOL_LIB objects.
Hold a record identifying a symbol library accessed by the appropriate symbol library SCH_IO object i...
static SYMBOL_LIB_TABLE & GetGlobalLibTable()
static const wxString & GetSymbolLibTableFileName()
static wxString GetGlobalTableFileName()
Fetch the global symbol library table file name.
LIB_SYMBOL * LoadSymbol(const wxString &aNickname, const wxString &aName)
Load a LIB_SYMBOL having aName from the library given by aNickname.
SYMBOL_LIB_TABLE_ROW * FindRow(const wxString &aNickName, bool aCheckIfEnabled=false)
Return an SYMBOL_LIB_TABLE_ROW if aNickName is found in this table or in any chained fallBack table f...
Object used to load, save, search, and otherwise manipulate symbol library files.
bool IsCache() const
LIB_SYMBOL * FindSymbol(const wxString &aName) const
Find LIB_SYMBOL by aName.
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
@ MODEL_RELOAD
Model changes (the sheet for a schematic)
Definition: tool_base.h:80
void ResetTools(TOOL_BASE::RESET_REASON aReason)
Reset all tools (i.e.
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
wxString wx_str() const
Definition: utf8.cpp:45
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
Definition: confirm.cpp:241
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Display an informational message box with aMessage.
Definition: confirm.cpp:213
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:186
This file is part of the common library.
#define _(s)
FRAME_T
The set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
Definition: frame_type.h:33
@ FRAME_SCH_SYMBOL_EDITOR
Definition: frame_type.h:35
@ FRAME_SCH_VIEWER
Definition: frame_type.h:36
SCH_LAYER_ID
Eeschema drawing layers.
Definition: layer_ids.h:353
@ LAYER_SCHEMATIC_GRID_AXES
Definition: layer_ids.h:389
@ LAYER_SCHEMATIC_BACKGROUND
Definition: layer_ids.h:390
@ MAIL_REFRESH_SYMBOL
Definition: mail_type.h:58
@ REPAINT
Item needs to be redrawn.
Definition: view_item.h:57
@ ALL
All except INITIAL_ADD.
Definition: view_item.h:58
@ TARGET_NONCACHED
Auxiliary rendering target (noncached)
Definition: definitions.h:49
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
Definition: kicad_algo.h:100
Declaration of the NL_SCHEMATIC_PLUGIN class.
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: pgm_base.cpp:1059
see class PGM_BASE
LIB_SYMBOL * SchGetLibSymbol(const LIB_ID &aLibId, SYMBOL_LIB_TABLE *aLibTable, SYMBOL_LIB *aCacheLib, wxWindow *aParent, bool aShowErrorMsg)
Load symbol from symbol library table.
LIB_SYMBOL * SchGetLibSymbol(const LIB_ID &aLibId, SYMBOL_LIB_TABLE *aLibTable, SYMBOL_LIB *aCacheLib=nullptr, wxWindow *aParent=nullptr, bool aShowErrorMsg=false)
Load symbol from symbol library table.
KIWAY Kiway(KFCTL_STANDALONE)
std::vector< wxString > pinned_symbol_libs
const double IU_PER_MILS
Definition: base_units.h:77
Definition for symbol library class.
@ SCH_SYMBOL_T
Definition: typeinfo.h:172
@ SCH_TABLECELL_T
Definition: typeinfo.h:166
@ SCH_SHEET_PIN_T
Definition: typeinfo.h:173