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 The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, you may find one here:
19 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20 * or you may search the http://www.gnu.org website for the version 2 license,
21 * or you may write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 */
24
25#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 <symbol_lib_table.h>
44#include <sch_base_frame.h>
45#include <design_block.h>
47#include <tool/action_toolbar.h>
48#include <tool/tool_manager.h>
50#include <tools/ee_actions.h>
52#include <view/view_controls.h>
53#include <wx/choicdlg.h>
54#include <wx/fswatcher.h>
55#include <wx/log.h>
56#include <wx/msgdlg.h>
57
59
60
62 SYMBOL_LIB* aCacheLib, wxWindow* aParent, bool aShowErrorMsg )
63{
64 wxCHECK_MSG( aLibTable, nullptr, wxS( "Invalid symbol library table." ) );
65
66 LIB_SYMBOL* symbol = nullptr;
67
68 try
69 {
70 symbol = aLibTable->LoadSymbol( aLibId );
71
72 if( !symbol && aCacheLib )
73 {
74 wxCHECK_MSG( aCacheLib->IsCache(), nullptr, wxS( "Invalid cache library." ) );
75
76 wxString cacheName = aLibId.GetLibNickname().wx_str();
77 cacheName << "_" << aLibId.GetLibItemName();
78 symbol = aCacheLib->FindSymbol( cacheName );
79 }
80 }
81 catch( const IO_ERROR& ioe )
82 {
83 if( aShowErrorMsg )
84 {
85 wxString msg = wxString::Format( _( "Error loading symbol %s from library '%s'." ),
86 aLibId.GetLibItemName().wx_str(),
87 aLibId.GetLibNickname().wx_str() );
88 DisplayErrorMessage( aParent, msg, ioe.What() );
89 }
90 }
91
92 return symbol;
93}
94
95
96SCH_BASE_FRAME::SCH_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aWindowType,
97 const wxString& aTitle, const wxPoint& aPosition,
98 const wxSize& aSize, long aStyle, const wxString& aFrameName ) :
99 EDA_DRAW_FRAME( aKiway, aParent, aWindowType, aTitle, aPosition, aSize, aStyle,
100 aFrameName, schIUScale ),
101 m_base_frame_defaults( nullptr, "base_Frame_defaults" ),
102 m_selectionFilterPanel( nullptr )
103{
104 if( ( aStyle & wxFRAME_NO_TASKBAR ) == 0 )
105 createCanvas();
106
107 Bind( wxEVT_IDLE,
108 [this]( wxIdleEvent& aEvent )
109 {
110 // Handle cursor adjustments. While we can get motion and key events through
111 // wxWidgets, we can't get modifier-key-up events.
112 if( m_toolManager )
113 {
115
116 if( selTool )
117 selTool->OnIdle( aEvent );
118 }
119 } );
120
122}
123
124
127{}
128
129
131{
133}
134
135
137{
138 return dynamic_cast<EESCHEMA_SETTINGS*>( config() );
139}
140
141
143{
144 return dynamic_cast<SYMBOL_EDITOR_SETTINGS*>( config() );
145}
146
147
149{
150 switch( GetFrameType() )
151 {
152 case FRAME_SCH:
153 default:
154 return Pgm().GetSettingsManager().GetAppSettings<EESCHEMA_SETTINGS>( "eeschema" );
155
157 case FRAME_SCH_VIEWER:
159 return Pgm().GetSettingsManager().GetAppSettings<SYMBOL_EDITOR_SETTINGS>( "symbol_editor" );
160 }
161}
162
163
164void SCH_BASE_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
165{
166 GetScreen()->SetPageSettings( aPageSettings );
167}
168
169
171{
172 return GetScreen()->GetPageSettings();
173}
174
175
177{
178 // GetSizeIU is compile time dependent:
180}
181
182
184{
185 wxASSERT( GetScreen() );
186 return GetScreen()->GetTitleBlock();
187}
188
189
191{
192 wxASSERT( GetScreen() );
193 GetScreen()->SetTitleBlock( aTitleBlock );
194}
195
196
198{
199 wxString line;
200 BASE_SCREEN* screen = GetScreen();
201
202 if( !screen )
203 return;
204
206
207 // Display absolute and relative coordinates
209 VECTOR2D d = cursorPos - screen->m_LocalOrigin;
210
211 line.Printf( wxS( "X %s Y %s" ),
212 MessageTextFromValue( cursorPos.x, false ),
213 MessageTextFromValue( cursorPos.y, false ) );
214 SetStatusText( line, 2 );
215
216 line.Printf( wxS( "dx %s dy %s dist %s" ),
217 MessageTextFromValue( d.x, false ),
218 MessageTextFromValue( d.y, false ),
219 MessageTextFromValue( hypot( d.x, d.y ), false ) );
220 SetStatusText( line, 3 );
221
224}
225
226
227LIB_SYMBOL* SCH_BASE_FRAME::GetLibSymbol( const LIB_ID& aLibId, bool aUseCacheLib,
228 bool aShowErrorMsg )
229{
230 SYMBOL_LIB* cache =
231 ( aUseCacheLib ) ? PROJECT_SCH::SchLibs( &Prj() )->GetCacheLibrary() : nullptr;
232
233 return SchGetLibSymbol( aLibId, PROJECT_SCH::SchSymbolLibTable( &Prj() ), cache, this,
234 aShowErrorMsg );
235}
236
237
238bool SCH_BASE_FRAME::saveSymbolLibTables( bool aGlobal, bool aProject )
239{
240 wxString msg;
241 bool success = true;
242
243 if( aGlobal )
244 {
245 try
246 {
248 }
249 catch( const IO_ERROR& ioe )
250 {
251 success = false;
252 msg.Printf( _( "Error saving global symbol library table:\n%s" ), ioe.What() );
253 DisplayErrorMessage( this, msg );
254 }
255 }
256
257 if( aProject && !Prj().GetProjectName().IsEmpty() )
258 {
259 wxFileName fn( Prj().GetProjectPath(), SYMBOL_LIB_TABLE::GetSymbolLibTableFileName() );
260
261 try
262 {
263 PROJECT_SCH::SchSymbolLibTable( &Prj() )->Save( fn.GetFullPath() );
264 }
265 catch( const IO_ERROR& ioe )
266 {
267 success = false;
268 msg.Printf( _( "Error saving project-specific symbol library table:\n%s" ),
269 ioe.What() );
270 DisplayErrorMessage( this, msg );
271 }
272 }
273
274 return success;
275}
276
277
279{
280 // If no project is loaded, always work with the global table
281 if( Prj().IsNullProject() )
282 {
284
285 if( aOptional )
286 {
287 wxMessageDialog dlg( this, _( "Add the library to the global library table?" ),
288 _( "Add To Global Library Table" ), wxYES_NO );
289
290 if( dlg.ShowModal() != wxID_OK )
291 ret = nullptr;
292 }
293
294 return ret;
295 }
296
297 wxArrayString libTableNames;
298 libTableNames.Add( _( "Global" ) );
299 libTableNames.Add( _( "Project" ) );
300
301 wxSingleChoiceDialog dlg( this, _( "Choose the Library Table to add the library to:" ),
302 _( "Add To Library Table" ), libTableNames );
303
304 if( aOptional )
305 {
306 dlg.FindWindow( wxID_CANCEL )->SetLabel( _( "Skip" ) );
307 dlg.FindWindow( wxID_OK )->SetLabel( _( "Add" ) );
308 }
309
310 if( dlg.ShowModal() != wxID_OK )
311 return nullptr;
312
313 switch( dlg.GetSelection() )
314 {
315 case 0: return &SYMBOL_LIB_TABLE::GetGlobalLibTable();
316 case 1: return PROJECT_SCH::SchSymbolLibTable( &Prj() );
317 default: return nullptr;
318 }
319}
320
321
322void SCH_BASE_FRAME::RedrawScreen( const VECTOR2I& aCenterPoint, bool aWarpPointer )
323{
324 GetCanvas()->GetView()->SetCenter( aCenterPoint );
325
326 if( aWarpPointer )
328
329 GetCanvas()->Refresh();
330}
331
332
334{
335 if( GetCanvas() && GetCanvas()->GetView() )
336 {
339 }
340}
341
342
344{
345 return static_cast<SCH_DRAW_PANEL*>( EDA_DRAW_FRAME::GetCanvas() );
346}
347
348
350{
351 if( GetCanvas() && GetCanvas()->GetView() )
352 {
353 if( KIGFX::PAINTER* painter = GetCanvas()->GetView()->GetPainter() )
354 return static_cast<SCH_RENDER_SETTINGS*>( painter->GetSettings() );
355 }
356
357 return nullptr;
358}
359
360
362{
364
365 SetCanvas( new SCH_DRAW_PANEL( this, wxID_ANY, wxPoint( 0, 0 ), m_frameSize,
368}
369
370
372{
374
375 try
376 {
377 if( !m_spaceMouse )
378 m_spaceMouse = std::make_unique<NL_SCHEMATIC_PLUGIN>();
379
380 m_spaceMouse->SetCanvas( GetCanvas() );
381 }
382 catch( const std::system_error& e )
383 {
384 wxLogTrace( wxT( "KI_TRACE_NAVLIB" ), e.what() );
385 }
386}
387
388
389void SCH_BASE_FRAME::UpdateItem( EDA_ITEM* aItem, bool isAddOrDelete, bool aUpdateRtree )
390{
391 EDA_ITEM* parent = aItem->GetParent();
392
393 if( aItem->Type() == SCH_SHEET_PIN_T )
394 {
395 // Sheet pins aren't in the view. Refresh their parent.
396 if( parent )
397 GetCanvas()->GetView()->Update( parent );
398 }
399 else
400 {
401 if( !isAddOrDelete )
402 GetCanvas()->GetView()->Update( aItem );
403
404 // Some children are drawn from their parents. Mark them for re-paint.
405 if( parent
406 && parent->IsType( { SCH_SYMBOL_T, SCH_SHEET_T, SCH_LABEL_LOCATE_ANY_T, SCH_TABLE_T } ) )
407 GetCanvas()->GetView()->Update( parent, KIGFX::REPAINT );
408 }
409
410 /*
411 * Be careful when calling this. Update will invalidate RTree iterators, so you cannot
412 * call this while doing things like `for( SCH_ITEM* item : screen->Items() )`
413 */
414 if( aUpdateRtree && dynamic_cast<SCH_ITEM*>( aItem ) )
415 GetScreen()->Update( static_cast<SCH_ITEM*>( aItem ) );
416
417 // Calling Refresh() here introduces a bi-stable state: when doing operations on a
418 // large number of items if at some point the refresh timer times out and does a
419 // refresh it will take long enough that the next item will also time out, and the
420 // next, and the next, etc.
421 // GetCanvas()->Refresh();
422}
423
424
426{
427 // We currently have two zoom-dependent renderings: text, which is rendered as bitmap text
428 // when too small to see the difference, and selection shadows.
429 //
430 // Because non-selected text is cached by OpenGL, we only apply the bitmap performance hack
431 // to selected text items.
432 //
433 // Thus, as it currently stands, all zoom-dependent items can be found in the list of selected
434 // items.
435 if( m_toolManager )
436 {
438 SELECTION& selection = selectionTool->GetSelection();
439 KIGFX::SCH_VIEW* view = GetCanvas()->GetView();
440
441 for( EDA_ITEM* item : selection )
442 {
443 if( item->RenderAsBitmap( view->GetGAL()->GetWorldScale() ) != item->IsShownAsBitmap()
445 {
446 view->Update( item, KIGFX::REPAINT );
447
448 EDA_ITEM* parent = item->GetParent();
449
450 // Symbol children are drawn from their parents. Mark them for re-paint.
451 if( parent && parent->Type() == SCH_SYMBOL_T )
452 GetCanvas()->GetView()->Update( parent, KIGFX::REPAINT );
453 }
454 }
455 }
456}
457
458
460{
461 // Null pointers will cause boost::ptr_vector to raise a boost::bad_pointer exception which
462 // will be unhandled. There is no valid reason to pass an invalid EDA_ITEM pointer to the
463 // screen append function.
464 wxCHECK( aItem, /* void */ );
465
466 SCH_SCREEN* screen = aScreen;
467
468 if( aScreen == nullptr )
469 screen = GetScreen();
470
471 if( aItem->Type() != SCH_TABLECELL_T )
472 screen->Append( (SCH_ITEM*) aItem );
473
474 if( screen == GetScreen() )
475 {
476 GetCanvas()->GetView()->Add( aItem );
477 UpdateItem( aItem, true ); // handle any additional parent semantics
478 }
479}
480
481
483{
484 auto screen = aScreen;
485
486 if( aScreen == nullptr )
487 screen = GetScreen();
488
489 if( screen == GetScreen() )
490 GetCanvas()->GetView()->Remove( aItem );
491
492 if( aItem->Type() != SCH_TABLECELL_T )
493 screen->Remove( (SCH_ITEM*) aItem );
494
495 if( screen == GetScreen() )
496 UpdateItem( aItem, true ); // handle any additional parent semantics
497}
498
499
501{
502 // Let tools add things to the view if necessary
503 if( m_toolManager )
505
507}
508
509
511{
512 return GetColorSettings()->GetColor( aLayer );
513}
514
515
517{
519
520 COLOR_SETTINGS* colorSettings = GetColorSettings( true );
521
522 GetCanvas()->GetView()->GetPainter()->GetSettings()->LoadColors( colorSettings );
524
528}
529
530
532{
533 if( !m_colorSettings || aForceRefresh )
534 {
536 EESCHEMA_SETTINGS* cfg = mgr.GetAppSettings<EESCHEMA_SETTINGS>( "eeschema" );
537 wxString colorTheme = cfg->m_ColorTheme;
538
540 {
541 SYMBOL_EDITOR_SETTINGS* symCfg =
542 mgr.GetAppSettings<SYMBOL_EDITOR_SETTINGS>( "symbol_editor" );
543
544 if( !symCfg->m_UseEeschemaColorSettings )
545 colorTheme = symCfg->m_ColorTheme;
546 }
547
548 COLOR_SETTINGS* colorSettings = mgr.GetColorSettings( colorTheme );
549
550 const_cast<SCH_BASE_FRAME*>( this )->m_colorSettings = colorSettings;
551 }
552
553 return m_colorSettings;
554}
555
556
558{
560}
561
562
563void SCH_BASE_FRAME::handleActivateEvent( wxActivateEvent& aEvent )
564{
566
567 if( m_spaceMouse )
568 m_spaceMouse->SetFocus( aEvent.GetActive() );
569}
570
571
572void SCH_BASE_FRAME::handleIconizeEvent( wxIconizeEvent& aEvent )
573{
575
576 if( m_spaceMouse )
577 m_spaceMouse->SetFocus( false );
578}
579
580
582{
584 PROJECT& prj = Prj();
585
586 if( PROJECT_SCH::SchSymbolLibTable( &prj )->IsEmpty() )
587 {
588 ShowInfoBarError( _( "No symbol libraries are loaded." ) );
589 return wxEmptyString;
590 }
591
592 wxArrayString headers;
593
594 headers.Add( _( "Library" ) );
595
596 std::vector< wxArrayString > itemsToDisplay;
597 std::vector< wxString > libNicknames = PROJECT_SCH::SchSymbolLibTable( &prj )->GetLogicalLibs();
598
599 for( const wxString& name : libNicknames )
600 {
601 // Exclude read only libraries.
602 if( !PROJECT_SCH::SchSymbolLibTable( &prj )->IsSymbolLibWritable( name ) )
603 continue;
604
607 {
608 wxArrayString item;
609
611 itemsToDisplay.push_back( item );
612 }
613 }
614
615 for( const wxString& name : libNicknames )
616 {
617 // Exclude read only libraries.
618 if( !PROJECT_SCH::SchSymbolLibTable( &prj )->IsSymbolLibWritable( name ) )
619 continue;
620
623 {
624 wxArrayString item;
625
626 item.Add( name );
627 itemsToDisplay.push_back( item );
628 }
629 }
630
631 wxString oldLibName = prj.GetRString( PROJECT::SCH_LIB_SELECT );
632
633 EDA_LIST_DIALOG dlg( this, _( "Select Symbol Library" ), headers, itemsToDisplay, oldLibName,
634 false );
635
636 if( dlg.ShowModal() != wxID_OK )
637 return wxEmptyString;
638
639 wxString libName = dlg.GetTextSelection();
640
641 if( !libName.empty() )
642 {
643 if( PROJECT_SCH::SchSymbolLibTable( &prj )->HasLibrary( libName ) )
644 prj.SetRString( PROJECT::SCH_LIB_SELECT, libName );
645 else
646 libName = wxEmptyString;
647 }
648
649 return libName;
650}
651
652
654{
655 Unbind( wxEVT_FSWATCHER, &SCH_BASE_FRAME::OnSymChange, this );
656
657 if( m_watcher )
658 {
659 wxLogTrace( "KICAD_LIB_WATCH", "Remove watch" );
660 m_watcher->RemoveAll();
661 m_watcher->SetOwner( nullptr );
662 m_watcher.reset();
663 }
664
665 wxString libfullname;
667
668 if( !aID || !tbl )
669 return;
670
671 try
672 {
673 const SYMBOL_LIB_TABLE_ROW* row = tbl->FindRow( aID->GetLibNickname() );
674
675 if( !row )
676 return;
677
678 libfullname = row->GetFullURI( true );
679 }
680 catch( const std::exception& e )
681 {
682 DisplayInfoMessage( this, e.what() );
683 return;
684 }
685 catch( const IO_ERROR& error )
686 {
687 wxLogTrace( "KICAD_LIB_WATCH", "Error: %s", error.What() );
688 return;
689 }
690
691 wxLogTrace( "KICAD_LIB_WATCH", "Setting up watcher for %s", libfullname );
692 m_watcherFileName.Assign( libfullname );
693
694 if( !m_watcherFileName.FileExists() )
695 return;
696
697 wxLog::EnableLogging( false );
698 m_watcherLastModified = m_watcherFileName.GetModificationTime();
699 wxLog::EnableLogging( true );
700
701 Bind( wxEVT_FSWATCHER, &SCH_BASE_FRAME::OnSymChange, this );
702 m_watcher = std::make_unique<wxFileSystemWatcher>();
703 m_watcher->SetOwner( this );
704
705 wxFileName fn;
706 fn.AssignDir( m_watcherFileName.GetPath() );
707 fn.DontFollowLink();
708
709 {
710 // Silence OS errors that come from the watcher
711 wxLogNull silence;
712 m_watcher->Add( fn );
713 }
714}
715
716
717void SCH_BASE_FRAME::OnSymChange( wxFileSystemWatcherEvent& aEvent )
718{
720
721 wxLogTrace( "KICAD_LIB_WATCH", "OnSymChange: %s, watcher file: %s",
722 aEvent.GetPath().GetFullPath(), m_watcherFileName.GetFullPath() );
723
724 if( !libs || !m_watcher || !m_watcher.get() || m_watcherFileName.GetPath().IsEmpty() )
725 return;
726
727 if( aEvent.GetPath() != m_watcherFileName )
728 return;
729
730 // Start the debounce timer (set to 1 second)
731 if( !m_watcherDebounceTimer.StartOnce( 1000 ) )
732 {
733 wxLogTrace( "KICAD_LIB_WATCH", "Failed to start the debounce timer" );
734 return;
735 }
736}
737
738
740{
741 wxLogTrace( "KICAD_LIB_WATCH", "OnSymChangeDebounceTimer" );
742
743 // Disable logging to avoid spurious messages and check if the file has changed
744 wxLog::EnableLogging( false );
745 wxDateTime lastModified = m_watcherFileName.GetModificationTime();
746 wxLog::EnableLogging( true );
747
748 if( lastModified == m_watcherLastModified || !lastModified.IsValid() )
749 return;
750
751 m_watcherLastModified = lastModified;
752
754 || IsOK( this, _( "The library containing the current symbol has changed.\n"
755 "Do you want to reload the library?" ) ) )
756 {
757 wxLogTrace( "KICAD_LIB_WATCH", "Sending refresh symbol mail" );
758 std::string libName = m_watcherFileName.GetFullPath().ToStdString();
761 }
762}
const char * name
Definition: DXF_plotter.cpp:59
constexpr EDA_IU_SCALE schIUScale
Definition: base_units.h:110
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:92
wxString m_ColorTheme
Active color theme name.
Definition: app_settings.h:199
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
int ShowModal() override
FRAME_T GetFrameType() const
virtual APP_SETTINGS_BASE * config() const
Return 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
The current canvas type.
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)
Return 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.
virtual void DisplayGridMsg()
Display current grid size in the status bar.
void CommonSettingsChanged(int aFlags) override
Notification event that some of the common (suite-wide) settings have changed.
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:89
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:101
virtual bool IsType(const std::vector< KICAD_T > &aScanTypes) const
Check whether the item is one of the listed types.
Definition: eda_item.h:174
EDA_ITEM * GetParent() const
Definition: eda_item.h:103
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:140
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:297
virtual void Remove(VIEW_ITEM *aItem)
Remove a VIEW_ITEM from the view.
Definition: view.cpp:332
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:1673
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
Definition: view.h:198
void RecacheAllItems()
Rebuild GAL display lists.
Definition: view.cpp:1439
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
Definition: view.cpp:1549
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:216
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
Definition: view.cpp:586
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:635
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:285
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:84
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()
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:689
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition: pgm_base.h:125
std::vector< wxString > m_PinnedSymbolLibs
Below are project-level settings that have not been moved to a dedicated file.
Definition: project_file.h:127
static SYMBOL_LIB_TABLE * SchSymbolLibTable(PROJECT *aProject)
Accessor for project symbol library table.
static SYMBOL_LIBS * SchLibs(PROJECT *aProject)
These are all prefaced with "Sch".
Definition: project_sch.cpp:90
Container for project specific data.
Definition: project.h:64
@ SCH_LIB_SELECT
Definition: project.h:217
virtual PROJECT_FILE & GetProjectFile() const
Definition: project.h:200
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:318
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:329
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.
APP_SETTINGS_BASE * GetViewerSettingsBase() const
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.
void CommonSettingsChanged(int aFlags) override
Notification event that some of the common (suite-wide) settings have changed.
wxString SelectLibraryFromList()
Display a list of loaded libraries and allows the user to select a library.
void SyncView()
Mark all items for refresh.
std::unique_ptr< NL_SCHEMATIC_PLUGIN > m_spaceMouse
wxDateTime m_watcherLastModified
std::unique_ptr< wxFileSystemWatcher > m_watcher
These are file watchers for the symbol library tables.
virtual ~SCH_BASE_FRAME()
Needs to be in the cpp file to encode the sizeof() for std::unique_ptr.
const TITLE_BLOCK & GetTitleBlock() const override
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:167
const PAGE_INFO & GetPageSettings() const
Definition: sch_screen.h:131
void SetTitleBlock(const TITLE_BLOCK &aTitleBlock)
Definition: sch_screen.h:157
void Append(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
Definition: sch_screen.cpp:155
void SetPageSettings(const PAGE_INFO &aPageSettings)
Definition: sch_screen.h:132
const TITLE_BLOCK & GetTitleBlock() const
Definition: sch_screen.h:155
void Update(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
Update aItem's bounding box in the tree.
Definition: sch_screen.cpp:318
COLOR_SETTINGS * GetColorSettings(const wxString &aName="user")
Retrieve a color settings object that applications can read colors from.
T * GetAppSettings(const wxString &aFilename)
Return a handle to the a given settings by type.
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:171
@ 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:250
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Display an informational message box with aMessage.
Definition: confirm.cpp:222
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:195
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
@ FRAME_SCH
Definition: frame_type.h:34
@ FRAME_SYMBOL_CHOOSER
Definition: frame_type.h:37
SCH_LAYER_ID
Eeschema drawing layers.
Definition: layer_ids.h:438
@ LAYER_SCHEMATIC_GRID_AXES
Definition: layer_ids.h:476
@ LAYER_SCHEMATIC_BACKGROUND
Definition: layer_ids.h:477
@ MAIL_REFRESH_SYMBOL
Definition: mail_type.h:58
@ REPAINT
Item needs to be redrawn.
Definition: view_item.h:58
@ ALL
All except INITIAL_ADD.
Definition: view_item.h:59
@ TARGET_NONCACHED
Auxiliary rendering target (noncached)
Definition: definitions.h:38
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:1073
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