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_group.h>
37#include <sch_view.h>
38#include <sch_painter.h>
39#include <sch_shape.h>
41#include <confirm.h>
43#include <project_sch.h>
44#include <symbol_library.h>
45#include <symbol_lib_table.h>
46#include <sch_base_frame.h>
47#include <design_block.h>
49#include <tool/action_toolbar.h>
50#include <tool/tool_manager.h>
53#include <view/view_controls.h>
54#include <wx/choicdlg.h>
55#include <wx/fswatcher.h>
56#include <wx/log.h>
57#include <wx/msgdlg.h>
58
60
61
63 SYMBOL_LIB* aCacheLib, wxWindow* aParent, bool aShowErrorMsg )
64{
65 wxCHECK_MSG( aLibTable, nullptr, wxS( "Invalid symbol library table." ) );
66
67 LIB_SYMBOL* symbol = nullptr;
68
69 try
70 {
71 symbol = aLibTable->LoadSymbol( aLibId );
72
73 if( !symbol && aCacheLib )
74 {
75 wxCHECK_MSG( aCacheLib->IsCache(), nullptr, wxS( "Invalid cache library." ) );
76
77 wxString cacheName = aLibId.GetLibNickname().wx_str();
78 cacheName << "_" << aLibId.GetLibItemName();
79 symbol = aCacheLib->FindSymbol( cacheName );
80 }
81 }
82 catch( const IO_ERROR& ioe )
83 {
84 if( aShowErrorMsg )
85 {
86 wxString msg = wxString::Format( _( "Error loading symbol %s from library '%s'." ),
87 aLibId.GetLibItemName().wx_str(),
88 aLibId.GetLibNickname().wx_str() );
89 DisplayErrorMessage( aParent, msg, ioe.What() );
90 }
91 }
92
93 return symbol;
94}
95
96
97SCH_BASE_FRAME::SCH_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aWindowType,
98 const wxString& aTitle, const wxPoint& aPosition,
99 const wxSize& aSize, long aStyle, const wxString& aFrameName ) :
100 EDA_DRAW_FRAME( aKiway, aParent, aWindowType, aTitle, aPosition, aSize, aStyle,
101 aFrameName, schIUScale ),
102 m_base_frame_defaults( nullptr, "base_Frame_defaults" ),
103 m_selectionFilterPanel( nullptr )
104{
105 if( ( aStyle & wxFRAME_NO_TASKBAR ) == 0 )
106 createCanvas();
107
108 Bind( wxEVT_IDLE,
109 [this]( wxIdleEvent& aEvent )
110 {
111 // Handle cursor adjustments. While we can get motion and key events through
112 // wxWidgets, we can't get modifier-key-up events.
113 if( m_toolManager )
114 {
116
117 if( selTool )
118 selTool->OnIdle( aEvent );
119 }
120 } );
121
123}
124
125
128{}
129
130
132{
134}
135
136
138{
139 return dynamic_cast<EESCHEMA_SETTINGS*>( config() );
140}
141
142
144{
145 return dynamic_cast<SYMBOL_EDITOR_SETTINGS*>( config() );
146}
147
148
150{
151 switch( GetFrameType() )
152 {
153 case FRAME_SCH:
154 default:
155 return Pgm().GetSettingsManager().GetAppSettings<EESCHEMA_SETTINGS>( "eeschema" );
156
158 case FRAME_SCH_VIEWER:
160 return Pgm().GetSettingsManager().GetAppSettings<SYMBOL_EDITOR_SETTINGS>( "symbol_editor" );
161 }
162}
163
164
165void SCH_BASE_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
166{
167 GetScreen()->SetPageSettings( aPageSettings );
168}
169
170
172{
173 return GetScreen()->GetPageSettings();
174}
175
176
178{
179 // GetSizeIU is compile time dependent:
181}
182
183
185{
186 wxASSERT( GetScreen() );
187 return GetScreen()->GetTitleBlock();
188}
189
190
192{
193 wxASSERT( GetScreen() );
194 GetScreen()->SetTitleBlock( aTitleBlock );
195}
196
197
199{
200 wxString line;
201 BASE_SCREEN* screen = GetScreen();
202
203 if( !screen )
204 return;
205
207
208 // Display absolute and relative coordinates
210 VECTOR2D d = cursorPos - screen->m_LocalOrigin;
211
212 line.Printf( wxS( "X %s Y %s" ),
213 MessageTextFromValue( cursorPos.x, false ),
214 MessageTextFromValue( cursorPos.y, false ) );
215 SetStatusText( line, 2 );
216
217 line.Printf( wxS( "dx %s dy %s dist %s" ),
218 MessageTextFromValue( d.x, false ),
219 MessageTextFromValue( d.y, false ),
220 MessageTextFromValue( hypot( d.x, d.y ), false ) );
221 SetStatusText( line, 3 );
222
225}
226
227
228LIB_SYMBOL* SCH_BASE_FRAME::GetLibSymbol( const LIB_ID& aLibId, bool aUseCacheLib,
229 bool aShowErrorMsg )
230{
231 SYMBOL_LIB* cache =
232 ( aUseCacheLib ) ? PROJECT_SCH::SchLibs( &Prj() )->GetCacheLibrary() : nullptr;
233
234 return SchGetLibSymbol( aLibId, PROJECT_SCH::SchSymbolLibTable( &Prj() ), cache, this,
235 aShowErrorMsg );
236}
237
238
239bool SCH_BASE_FRAME::saveSymbolLibTables( bool aGlobal, bool aProject )
240{
241 wxString msg;
242 bool success = true;
243
244 if( aGlobal )
245 {
246 try
247 {
249 }
250 catch( const IO_ERROR& ioe )
251 {
252 success = false;
253 msg.Printf( _( "Error saving global symbol library table:\n%s" ), ioe.What() );
254 DisplayErrorMessage( this, msg );
255 }
256 }
257
258 if( aProject && !Prj().GetProjectName().IsEmpty() )
259 {
260 wxFileName fn( Prj().GetProjectPath(), SYMBOL_LIB_TABLE::GetSymbolLibTableFileName() );
261
262 try
263 {
264 PROJECT_SCH::SchSymbolLibTable( &Prj() )->Save( fn.GetFullPath() );
265 }
266 catch( const IO_ERROR& ioe )
267 {
268 success = false;
269 msg.Printf( _( "Error saving project-specific symbol library table:\n%s" ),
270 ioe.What() );
271 DisplayErrorMessage( this, msg );
272 }
273 }
274
275 return success;
276}
277
278
280{
281 // If no project is loaded, always work with the global table
282 if( Prj().IsNullProject() )
283 {
285
286 if( aOptional )
287 {
288 wxMessageDialog dlg( this, _( "Add the library to the global library table?" ),
289 _( "Add To Global Library Table" ), wxYES_NO );
290
291 if( dlg.ShowModal() != wxID_OK )
292 ret = nullptr;
293 }
294
295 return ret;
296 }
297
298 wxArrayString libTableNames;
299 libTableNames.Add( _( "Global" ) );
300 libTableNames.Add( _( "Project" ) );
301
302 wxSingleChoiceDialog dlg( this, _( "Choose the Library Table to add the library to:" ),
303 _( "Add To Library Table" ), libTableNames );
304
305 if( aOptional )
306 {
307 dlg.FindWindow( wxID_CANCEL )->SetLabel( _( "Skip" ) );
308 dlg.FindWindow( wxID_OK )->SetLabel( _( "Add" ) );
309 }
310
311 if( dlg.ShowModal() != wxID_OK )
312 return nullptr;
313
314 switch( dlg.GetSelection() )
315 {
316 case 0: return &SYMBOL_LIB_TABLE::GetGlobalLibTable();
317 case 1: return PROJECT_SCH::SchSymbolLibTable( &Prj() );
318 default: return nullptr;
319 }
320}
321
322
323void SCH_BASE_FRAME::RedrawScreen( const VECTOR2I& aCenterPoint, bool aWarpPointer )
324{
325 GetCanvas()->GetView()->SetCenter( aCenterPoint );
326
327 if( aWarpPointer )
329
330 GetCanvas()->Refresh();
331}
332
333
335{
336 if( GetCanvas() && GetCanvas()->GetView() )
337 {
340 }
341}
342
343
345{
346 return static_cast<SCH_DRAW_PANEL*>( EDA_DRAW_FRAME::GetCanvas() );
347}
348
349
351{
352 if( GetCanvas() && GetCanvas()->GetView() )
353 {
354 if( KIGFX::PAINTER* painter = GetCanvas()->GetView()->GetPainter() )
355 return static_cast<SCH_RENDER_SETTINGS*>( painter->GetSettings() );
356 }
357
358 return nullptr;
359}
360
361
363{
365
366 SetCanvas( new SCH_DRAW_PANEL( this, wxID_ANY, wxPoint( 0, 0 ), m_frameSize,
369}
370
371
373{
375
376 try
377 {
378 if( !m_spaceMouse )
379 m_spaceMouse = std::make_unique<NL_SCHEMATIC_PLUGIN>();
380
381 m_spaceMouse->SetCanvas( GetCanvas() );
382 }
383 catch( const std::system_error& e )
384 {
385 wxLogTrace( wxT( "KI_TRACE_NAVLIB" ), e.what() );
386 }
387}
388
389
390void SCH_BASE_FRAME::UpdateItem( EDA_ITEM* aItem, bool isAddOrDelete, bool aUpdateRtree )
391{
392 EDA_ITEM* parent = aItem->GetParent();
393
394 if( aItem->Type() == SCH_SHEET_PIN_T )
395 {
396 // Sheet pins aren't in the view. Refresh their parent.
397 if( parent )
398 GetCanvas()->GetView()->Update( parent );
399 }
400 else
401 {
402 if( aItem->Type() == SCH_SHAPE_T )
403 static_cast<SCH_SHAPE*>( aItem )->UpdateHatching();
404
405 if( !isAddOrDelete )
406 GetCanvas()->GetView()->Update( aItem );
407
408 // Some children are drawn from their parents. Mark them for re-paint.
409 if( parent && ( parent->Type() == SCH_SYMBOL_T
410 || parent->Type() == SCH_SHEET_T
411 || parent->Type() == SCH_LABEL_LOCATE_ANY_T
412 || parent->Type() == SCH_TABLE_T ) )
413 {
414 GetCanvas()->GetView()->Update( parent, KIGFX::REPAINT );
415 }
416 }
417
418 /*
419 * Be careful when calling this. Update will invalidate RTree iterators, so you cannot
420 * call this while doing things like `for( SCH_ITEM* item : screen->Items() )`
421 */
422 if( aUpdateRtree && dynamic_cast<SCH_ITEM*>( aItem ) )
423 {
424 GetScreen()->Update( static_cast<SCH_ITEM*>( aItem ) );
425
426 /*
427 * If we are updating the group, we also need to update all the children otherwise
428 * their positions will remain stale in the RTree
429 */
430 if( SCH_GROUP* group = dynamic_cast<SCH_GROUP*>( aItem ) )
431 {
432 group->RunOnChildren(
433 [&]( SCH_ITEM* item )
434 {
435 GetScreen()->Update( item );
436 },
437 RECURSE_MODE::RECURSE );
438 }
439 }
440
441 // Calling Refresh() here introduces a bi-stable state: when doing operations on a
442 // large number of items if at some point the refresh timer times out and does a
443 // refresh it will take long enough that the next item will also time out, and the
444 // next, and the next, etc.
445 // GetCanvas()->Refresh();
446}
447
448
450{
451 // We currently have two zoom-dependent renderings: text, which is rendered as bitmap text
452 // when too small to see the difference, and selection shadows.
453 //
454 // Because non-selected text is cached by OpenGL, we only apply the bitmap performance hack
455 // to selected text items.
456 //
457 // Thus, as it currently stands, all zoom-dependent items can be found in the list of selected
458 // items.
459 if( m_toolManager )
460 {
462 SELECTION& selection = selectionTool->GetSelection();
463 KIGFX::SCH_VIEW* view = GetCanvas()->GetView();
464
465 for( EDA_ITEM* item : selection )
466 {
467 if( item->RenderAsBitmap( view->GetGAL()->GetWorldScale() ) != item->IsShownAsBitmap()
469 {
470 view->Update( item, KIGFX::REPAINT );
471
472 EDA_ITEM* parent = item->GetParent();
473
474 // Symbol children are drawn from their parents. Mark them for re-paint.
475 if( parent && parent->Type() == SCH_SYMBOL_T )
476 GetCanvas()->GetView()->Update( parent, KIGFX::REPAINT );
477 }
478 }
479 }
480}
481
482
484{
485 // Null pointers will cause boost::ptr_vector to raise a boost::bad_pointer exception which
486 // will be unhandled. There is no valid reason to pass an invalid EDA_ITEM pointer to the
487 // screen append function.
488 wxCHECK( aItem, /* void */ );
489
490 SCH_SCREEN* screen = aScreen;
491
492 if( aScreen == nullptr )
493 screen = GetScreen();
494
495 if( aItem->Type() != SCH_TABLECELL_T )
496 screen->Append( (SCH_ITEM*) aItem );
497
498 if( screen == GetScreen() )
499 {
500 GetCanvas()->GetView()->Add( aItem );
501 UpdateItem( aItem, true ); // handle any additional parent semantics
502 }
503}
504
505
507{
508 auto screen = aScreen;
509
510 if( aScreen == nullptr )
511 screen = GetScreen();
512
513 if( screen == GetScreen() )
514 GetCanvas()->GetView()->Remove( aItem );
515
516 EDA_GROUP* parentGroup = aItem->GetParentGroup();
517
518 if( parentGroup && !( parentGroup->AsEdaItem()->GetFlags() & STRUCT_DELETED ) )
519 parentGroup->RemoveItem( aItem );
520
521 if( aItem->Type() != SCH_TABLECELL_T )
522 screen->Remove( (SCH_ITEM*) aItem );
523
524 if( screen == GetScreen() )
525 UpdateItem( aItem, true ); // handle any additional parent semantics
526}
527
528
530{
531 // Let tools add things to the view if necessary
532 if( m_toolManager )
534
536}
537
538
540{
541 return GetColorSettings()->GetColor( aLayer );
542}
543
544
546{
548
549 COLOR_SETTINGS* colorSettings = GetColorSettings( true );
550
551 GetCanvas()->GetView()->GetPainter()->GetSettings()->LoadColors( colorSettings );
553
557}
558
559
561{
562 if( !m_colorSettings || aForceRefresh )
563 {
565 EESCHEMA_SETTINGS* cfg = mgr.GetAppSettings<EESCHEMA_SETTINGS>( "eeschema" );
566 wxString colorTheme = cfg->m_ColorTheme;
567
569 {
570 SYMBOL_EDITOR_SETTINGS* symCfg =
571 mgr.GetAppSettings<SYMBOL_EDITOR_SETTINGS>( "symbol_editor" );
572
573 if( !symCfg->m_UseEeschemaColorSettings )
574 colorTheme = symCfg->m_ColorTheme;
575 }
576
577 COLOR_SETTINGS* colorSettings = mgr.GetColorSettings( colorTheme );
578
579 const_cast<SCH_BASE_FRAME*>( this )->m_colorSettings = colorSettings;
580 }
581
582 return m_colorSettings;
583}
584
585
587{
589}
590
591
592void SCH_BASE_FRAME::handleActivateEvent( wxActivateEvent& aEvent )
593{
595
596 if( m_spaceMouse )
597 m_spaceMouse->SetFocus( aEvent.GetActive() );
598}
599
600
601void SCH_BASE_FRAME::handleIconizeEvent( wxIconizeEvent& aEvent )
602{
604
605 if( m_spaceMouse )
606 m_spaceMouse->SetFocus( false );
607}
608
609
611{
613 PROJECT& prj = Prj();
614
615 if( PROJECT_SCH::SchSymbolLibTable( &prj )->IsEmpty() )
616 {
617 ShowInfoBarError( _( "No symbol libraries are loaded." ) );
618 return wxEmptyString;
619 }
620
621 wxArrayString headers;
622
623 headers.Add( _( "Library" ) );
624
625 std::vector< wxArrayString > itemsToDisplay;
626 std::vector< wxString > libNicknames = PROJECT_SCH::SchSymbolLibTable( &prj )->GetLogicalLibs();
627
628 for( const wxString& name : libNicknames )
629 {
630 // Exclude read only libraries.
631 if( !PROJECT_SCH::SchSymbolLibTable( &prj )->IsSymbolLibWritable( name ) )
632 continue;
633
636 {
637 wxArrayString item;
638
640 itemsToDisplay.push_back( item );
641 }
642 }
643
644 for( const wxString& name : libNicknames )
645 {
646 // Exclude read only libraries.
647 if( !PROJECT_SCH::SchSymbolLibTable( &prj )->IsSymbolLibWritable( name ) )
648 continue;
649
652 {
653 wxArrayString item;
654
655 item.Add( name );
656 itemsToDisplay.push_back( item );
657 }
658 }
659
660 wxString oldLibName = prj.GetRString( PROJECT::SCH_LIB_SELECT );
661
662 EDA_LIST_DIALOG dlg( this, _( "Select Symbol Library" ), headers, itemsToDisplay, oldLibName,
663 false );
664
665 if( dlg.ShowModal() != wxID_OK )
666 return wxEmptyString;
667
668 wxString libName = dlg.GetTextSelection();
669
670 if( !libName.empty() )
671 {
672 if( PROJECT_SCH::SchSymbolLibTable( &prj )->HasLibrary( libName ) )
673 prj.SetRString( PROJECT::SCH_LIB_SELECT, libName );
674 else
675 libName = wxEmptyString;
676 }
677
678 return libName;
679}
680
681
683{
684 Unbind( wxEVT_FSWATCHER, &SCH_BASE_FRAME::OnSymChange, this );
685
686 if( m_watcher )
687 {
688 wxLogTrace( "KICAD_LIB_WATCH", "Remove watch" );
689 m_watcher->RemoveAll();
690 m_watcher->SetOwner( nullptr );
691 m_watcher.reset();
692 }
693
694 wxString libfullname;
696
697 if( !aID || !tbl )
698 return;
699
700 try
701 {
702 const SYMBOL_LIB_TABLE_ROW* row = tbl->FindRow( aID->GetLibNickname() );
703
704 if( !row )
705 return;
706
707 libfullname = row->GetFullURI( true );
708 }
709 catch( const std::exception& e )
710 {
711 DisplayInfoMessage( this, e.what() );
712 return;
713 }
714 catch( const IO_ERROR& error )
715 {
716 wxLogTrace( "KICAD_LIB_WATCH", "Error: %s", error.What() );
717 return;
718 }
719
720 wxLogTrace( "KICAD_LIB_WATCH", "Setting up watcher for %s", libfullname );
721 m_watcherFileName.Assign( libfullname );
722
723 if( !m_watcherFileName.FileExists() )
724 return;
725
726 wxLog::EnableLogging( false );
727 m_watcherLastModified = m_watcherFileName.GetModificationTime();
728 wxLog::EnableLogging( true );
729
730 Bind( wxEVT_FSWATCHER, &SCH_BASE_FRAME::OnSymChange, this );
731 m_watcher = std::make_unique<wxFileSystemWatcher>();
732 m_watcher->SetOwner( this );
733
734 wxFileName fn;
735 fn.AssignDir( m_watcherFileName.GetPath() );
736 fn.DontFollowLink();
737
738 {
739 // Silence OS errors that come from the watcher
740 wxLogNull silence;
741 m_watcher->Add( fn );
742 }
743}
744
745
746void SCH_BASE_FRAME::OnSymChange( wxFileSystemWatcherEvent& aEvent )
747{
749
750 wxLogTrace( "KICAD_LIB_WATCH", "OnSymChange: %s, watcher file: %s",
751 aEvent.GetPath().GetFullPath(), m_watcherFileName.GetFullPath() );
752
753 if( !libs || !m_watcher || !m_watcher.get() || m_watcherFileName.GetPath().IsEmpty() )
754 return;
755
756 if( aEvent.GetPath() != m_watcherFileName )
757 return;
758
759 // Start the debounce timer (set to 1 second)
760 if( !m_watcherDebounceTimer.StartOnce( 1000 ) )
761 {
762 wxLogTrace( "KICAD_LIB_WATCH", "Failed to start the debounce timer" );
763 return;
764 }
765}
766
767
769{
770 wxLogTrace( "KICAD_LIB_WATCH", "OnSymChangeDebounceTimer" );
771
772 // Disable logging to avoid spurious messages and check if the file has changed
773 wxLog::EnableLogging( false );
774 wxDateTime lastModified = m_watcherFileName.GetModificationTime();
775 wxLog::EnableLogging( true );
776
777 if( lastModified == m_watcherLastModified || !lastModified.IsValid() )
778 return;
779
780 m_watcherLastModified = lastModified;
781
783 || IsOK( this, _( "The library containing the current symbol has changed.\n"
784 "Do you want to reload the library?" ) ) )
785 {
786 wxLogTrace( "KICAD_LIB_WATCH", "Sending refresh symbol mail" );
787 std::string libName = m_watcherFileName.GetFullPath().ToStdString();
790 }
791}
const char * name
Definition: DXF_plotter.cpp:62
constexpr EDA_IU_SCALE schIUScale
Definition: base_units.h:112
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:108
wxString m_ColorTheme
Active color theme name.
Definition: app_settings.h:235
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 set of EDA_ITEMs (i.e., without duplicates).
Definition: eda_group.h:46
virtual bool RemoveItem(EDA_ITEM *aItem)=0
Remove item from group.
virtual EDA_ITEM * AsEdaItem()=0
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:96
virtual EDA_GROUP * GetParentGroup() const
Definition: eda_item.h:114
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:108
EDA_ITEM * GetParent() const
Definition: eda_item.h:110
EDA_ITEM_FLAGS GetFlags() const
Definition: eda_item.h:141
A dialog which shows:
wxString GetTextSelection(int aColumn=0)
Return the selected text from aColumn in the wxListCtrl in the dialog.
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:144
void Update(const KIGFX::VIEW_ITEM *aItem, int aUpdateFlags) const override
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
Definition: sch_view.cpp:60
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
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:85
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:687
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:139
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:220
virtual PROJECT_FILE & GetProjectFile() const
Definition: project.h:203
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.
A set of SCH_ITEMs (i.e., without duplicates).
Definition: sch_group.h:52
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:134
void SetTitleBlock(const TITLE_BLOCK &aTitleBlock)
Definition: sch_screen.h:160
void Append(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
Definition: sch_screen.cpp:156
void SetPageSettings(const PAGE_INFO &aPageSettings)
Definition: sch_screen.h:135
const TITLE_BLOCK & GetTitleBlock() const
Definition: sch_screen.h:158
void Update(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
Update aItem's bounding box in the tree.
Definition: sch_screen.cpp:326
SCH_SELECTION & GetSelection()
void OnIdle(wxIdleEvent &aEvent)
Zoom the screen to fit the bounding box for cross probing/selection sync.
T * GetAppSettings(const char *aFilename)
Return a handle to the a given settings by type.
COLOR_SETTINGS * GetColorSettings(const wxString &aName="user")
Retrieve 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: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:249
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Display an informational message box with aMessage.
Definition: confirm.cpp:221
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:194
This file is part of the common library.
#define _(s)
#define STRUCT_DELETED
flag indication structures to be erased
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:59
@ 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:1071
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.
Class to handle a set of SCH_ITEMs.
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_TABLE_T
Definition: typeinfo.h:165
@ SCH_SYMBOL_T
Definition: typeinfo.h:172
@ SCH_TABLECELL_T
Definition: typeinfo.h:166
@ SCH_SHEET_T
Definition: typeinfo.h:175
@ SCH_SHAPE_T
Definition: typeinfo.h:149
@ SCH_LABEL_LOCATE_ANY_T
Definition: typeinfo.h:191
@ SCH_SHEET_PIN_T
Definition: typeinfo.h:174