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-2022 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>
34#include <sch_draw_panel.h>
35#include <sch_view.h>
36#include <sch_painter.h>
38#include <confirm.h>
40#include <symbol_library.h>
41#include <sch_base_frame.h>
42#include <symbol_lib_table.h>
43#include <tool/action_toolbar.h>
44#include <tool/tool_manager.h>
46#include <tools/ee_actions.h>
48#include <wx/choicdlg.h>
49#include <wx/log.h>
50
52
54 SYMBOL_LIB* aCacheLib, wxWindow* aParent, bool aShowErrorMsg )
55{
56 wxCHECK_MSG( aLibTable, nullptr, wxS( "Invalid symbol library table." ) );
57
58 LIB_SYMBOL* symbol = nullptr;
59
60 try
61 {
62 symbol = aLibTable->LoadSymbol( aLibId );
63
64 if( !symbol && aCacheLib )
65 {
66 wxCHECK_MSG( aCacheLib->IsCache(), nullptr, wxS( "Invalid cache library." ) );
67
68 wxString cacheName = aLibId.GetLibNickname().wx_str();
69 cacheName += "_" + aLibId.GetLibItemName();
70 symbol = aCacheLib->FindSymbol( cacheName );
71 }
72 }
73 catch( const IO_ERROR& ioe )
74 {
75 if( aShowErrorMsg )
76 {
77 wxString msg = wxString::Format( _( "Error loading symbol %s from library '%s'." ),
78 aLibId.GetLibItemName().wx_str(),
79 aLibId.GetLibNickname().wx_str() );
80 DisplayErrorMessage( aParent, msg, ioe.What() );
81 }
82 }
83
84 return symbol;
85}
86
87
88SCH_BASE_FRAME::SCH_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aWindowType,
89 const wxString& aTitle, const wxPoint& aPosition,
90 const wxSize& aSize, long aStyle, const wxString& aFrameName ) :
91 EDA_DRAW_FRAME( aKiway, aParent, aWindowType, aTitle, aPosition, aSize, aStyle,
92 aFrameName, schIUScale ),
93 m_base_frame_defaults( nullptr, "base_Frame_defaults" ), m_spaceMouse( nullptr )
94{
96
97 Bind( wxEVT_IDLE,
98 [this]( wxIdleEvent& aEvent )
99 {
100 // Handle cursor adjustments. While we can get motion and key events through
101 // wxWidgets, we can't get modifier-key-up events.
102 if( m_toolManager )
103 {
105
106 if( selTool )
107 selTool->OnIdle( aEvent );
108 }
109 } );
110
112}
113
114
116{
117 delete m_spaceMouse;
118}
119
120
122{
124}
125
126
128{
129 return dynamic_cast<EESCHEMA_SETTINGS*>( config() );
130}
131
132
134{
135 return dynamic_cast<SYMBOL_EDITOR_SETTINGS*>( config() );
136}
137
138
139void SCH_BASE_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
140{
141 GetScreen()->SetPageSettings( aPageSettings );
142}
143
144
146{
147 return GetScreen()->GetPageSettings();
148}
149
150
152{
153 // GetSizeIU is compile time dependent:
155}
156
157
159{
160 wxASSERT( GetScreen() );
161 return GetScreen()->GetTitleBlock();
162}
163
164
166{
167 wxASSERT( GetScreen() );
168 GetScreen()->SetTitleBlock( aTitleBlock );
169}
170
171
173{
174 wxString line;
175 BASE_SCREEN* screen = GetScreen();
176
177 if( !screen )
178 return;
179
181
182 // Display absolute and relative coordinates
184 VECTOR2D d = cursorPos - screen->m_LocalOrigin;
185
186 line.Printf( wxS( "X %s Y %s" ),
187 MessageTextFromValue( cursorPos.x, false ),
188 MessageTextFromValue( cursorPos.y, false ) );
189 SetStatusText( line, 2 );
190
191 line.Printf( wxS( "dx %s dy %s dist %s" ),
192 MessageTextFromValue( d.x, false ),
193 MessageTextFromValue( d.y, false ),
194 MessageTextFromValue( hypot( d.x, d.y ), false ) );
195 SetStatusText( line, 3 );
196
199}
200
201
202LIB_SYMBOL* SCH_BASE_FRAME::GetLibSymbol( const LIB_ID& aLibId, bool aUseCacheLib,
203 bool aShowErrorMsg )
204{
205 SYMBOL_LIB* cache = ( aUseCacheLib ) ? Prj().SchLibs()->GetCacheLibrary() : nullptr;
206
207 return SchGetLibSymbol( aLibId, Prj().SchSymbolLibTable(), cache, this, aShowErrorMsg );
208}
209
210
211bool SCH_BASE_FRAME::saveSymbolLibTables( bool aGlobal, bool aProject )
212{
213 wxString msg;
214 bool success = true;
215
216 if( aGlobal )
217 {
218 try
219 {
221 }
222 catch( const IO_ERROR& ioe )
223 {
224 success = false;
225 msg.Printf( _( "Error saving global symbol library table:\n%s" ), ioe.What() );
226 DisplayErrorMessage( this, msg );
227 }
228 }
229
230 if( aProject && !Prj().GetProjectName().IsEmpty() )
231 {
232 wxFileName fn( Prj().GetProjectPath(), SYMBOL_LIB_TABLE::GetSymbolLibTableFileName() );
233
234 try
235 {
236 Prj().SchSymbolLibTable()->Save( fn.GetFullPath() );
237 }
238 catch( const IO_ERROR& ioe )
239 {
240 success = false;
241 msg.Printf( _( "Error saving project-specific symbol library table:\n%s" ),
242 ioe.What() );
243 DisplayErrorMessage( this, msg );
244 }
245 }
246
247 return success;
248}
249
250
252{
253 // If no project is loaded, always work with the global table
254 if( Prj().IsNullProject() )
255 {
257
258 if( aOptional )
259 {
260 wxMessageDialog dlg( this, _( "Add the library to the global library table?" ),
261 _( "Add To Global Library Table" ), wxYES_NO );
262
263 if( dlg.ShowModal() != wxID_OK )
264 ret = nullptr;
265 }
266
267 return ret;
268 }
269
270 wxArrayString libTableNames;
271 libTableNames.Add( _( "Global" ) );
272 libTableNames.Add( _( "Project" ) );
273
274 wxSingleChoiceDialog dlg( this, _( "Choose the Library Table to add the library to:" ),
275 _( "Add To Library Table" ), libTableNames );
276
277 if( aOptional )
278 {
279 dlg.FindWindow( wxID_CANCEL )->SetLabel( _( "Skip" ) );
280 dlg.FindWindow( wxID_OK )->SetLabel( _( "Add" ) );
281 }
282
283 if( dlg.ShowModal() != wxID_OK )
284 return nullptr;
285
286 switch( dlg.GetSelection() )
287 {
288 case 0: return &SYMBOL_LIB_TABLE::GetGlobalLibTable();
289 case 1: return Prj().SchSymbolLibTable();
290 default: return nullptr;
291 }
292}
293
294
295void SCH_BASE_FRAME::RedrawScreen( const VECTOR2I& aCenterPoint, bool aWarpPointer )
296{
297 GetCanvas()->GetView()->SetCenter( aCenterPoint );
298
299 if( aWarpPointer )
301
302 GetCanvas()->Refresh();
303}
304
305
307{
308 if( GetCanvas() && GetCanvas()->GetView() )
309 {
312 }
313}
314
315
317{
318 return static_cast<SCH_DRAW_PANEL*>( EDA_DRAW_FRAME::GetCanvas() );
319}
320
321
323{
324 if( GetCanvas() && GetCanvas()->GetView() )
325 {
326 if( KIGFX::PAINTER* painter = GetCanvas()->GetView()->GetPainter() )
327 return static_cast<KIGFX::SCH_RENDER_SETTINGS*>( painter->GetSettings() );
328 }
329
330 return nullptr;
331}
332
333
335{
337
338 SetCanvas( new SCH_DRAW_PANEL( this, wxID_ANY, wxPoint( 0, 0 ), m_frameSize,
341}
342
343
345{
347
348 if( ADVANCED_CFG::GetCfg().m_Use3DConnexionDriver )
349 {
350 try
351 {
352 if( !m_spaceMouse )
354
356 }
357 catch( const std::system_error& e )
358 {
359 wxLogTrace( wxT( "KI_TRACE_NAVLIB" ), e.what() );
360 }
361 }
362}
363
364
365void SCH_BASE_FRAME::UpdateItem( EDA_ITEM* aItem, bool isAddOrDelete, bool aUpdateRtree )
366{
367 EDA_ITEM* parent = aItem->GetParent();
368
369 if( aItem->Type() == SCH_SHEET_PIN_T )
370 {
371 // Sheet pins aren't in the view. Refresh their parent.
372 if( parent )
373 GetCanvas()->GetView()->Update( parent );
374 }
375 else
376 {
377 if( !isAddOrDelete )
378 GetCanvas()->GetView()->Update( aItem );
379
380 // Some children are drawn from their parents. Mark them for re-paint.
381 if( parent && parent->IsType( { SCH_SYMBOL_T, SCH_SHEET_T, SCH_LABEL_LOCATE_ANY_T } ) )
382 GetCanvas()->GetView()->Update( parent, KIGFX::REPAINT );
383 }
384
389 if( aUpdateRtree && dynamic_cast<SCH_ITEM*>( aItem ) )
390 GetScreen()->Update( static_cast<SCH_ITEM*>( aItem ) );
391
392 // Calling Refresh() here introduces a bi-stable state: when doing operations on a
393 // large number of items if at some point the refresh timer times out and does a
394 // refresh it will take long enough that the next item will also time out, and the
395 // next, and the next, etc.
396 // GetCanvas()->Refresh();
397}
398
399
401{
402 // We currently have two zoom-dependent renderings: text, which is rendered as bitmap text
403 // when too small to see the difference, and selection shadows.
404 //
405 // Because non-selected text is cached by OpenGL, we only apply the bitmap performance hack
406 // to selected text items.
407 //
408 // Thus, as it currently stands, all zoom-dependent items can be found in the list of selected
409 // items.
410
411 if( m_toolManager )
412 {
414 SELECTION& selection = selectionTool->GetSelection();
415 KIGFX::SCH_VIEW* view = GetCanvas()->GetView();
416
417 for( EDA_ITEM* item : selection )
418 {
419 if( item->RenderAsBitmap( view->GetGAL()->GetWorldScale() ) != item->IsShownAsBitmap()
421 {
422 view->Update( item, KIGFX::REPAINT );
423
424 EDA_ITEM* parent = item->GetParent();
425
426 // Symbol children are drawn from their parents. Mark them for re-paint.
427 if( parent && parent->Type() == SCH_SYMBOL_T )
428 GetCanvas()->GetView()->Update( parent, KIGFX::REPAINT );
429 }
430 }
431 }
432}
433
434
436{
437 // Null pointers will cause boost::ptr_vector to raise a boost::bad_pointer exception which
438 // will be unhandled. There is no valid reason to pass an invalid EDA_ITEM pointer to the
439 // screen append function.
440 wxCHECK( aItem != nullptr, /* voide */ );
441
442 auto screen = aScreen;
443
444 if( aScreen == nullptr )
445 screen = GetScreen();
446
447 screen->Append( (SCH_ITEM*) aItem );
448
449 if( screen == GetScreen() )
450 {
451 GetCanvas()->GetView()->Add( aItem );
452 UpdateItem( aItem, true ); // handle any additional parent semantics
453 }
454}
455
456
458{
459 auto screen = aScreen;
460
461 if( aScreen == nullptr )
462 screen = GetScreen();
463
464 if( screen == GetScreen() )
465 GetCanvas()->GetView()->Remove( aItem );
466
467 screen->Remove( (SCH_ITEM*) aItem );
468
469 if( screen == GetScreen() )
470 UpdateItem( aItem, true ); // handle any additional parent semantics
471}
472
473
475{
476 // Let tools add things to the view if necessary
477 if( m_toolManager )
479
481}
482
483
485{
486 return GetColorSettings()->GetColor( aLayer );
487}
488
489
490void SCH_BASE_FRAME::CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVarsChanged )
491{
492 EDA_DRAW_FRAME::CommonSettingsChanged( aEnvVarsChanged, aTextVarsChanged );
493
494 COLOR_SETTINGS* colorSettings = GetColorSettings( true );
495
496 GetCanvas()->GetView()->GetPainter()->GetSettings()->LoadColors( colorSettings );
498
502}
503
504
506{
507 if( !m_colorSettings || aForceRefresh )
508 {
509 SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
511 wxString colorTheme = cfg->m_ColorTheme;
512
514 {
516
517 if( !symCfg->m_UseEeschemaColorSettings )
518 colorTheme = symCfg->m_ColorTheme;
519 }
520
521 COLOR_SETTINGS* colorSettings = mgr.GetColorSettings( colorTheme );
522
523 const_cast<SCH_BASE_FRAME*>( this )->m_colorSettings = colorSettings;
524 }
525
526 return m_colorSettings;
527}
528
529
531{
533}
534
535
536void SCH_BASE_FRAME::handleActivateEvent( wxActivateEvent& aEvent )
537{
539
540 if( m_spaceMouse && ADVANCED_CFG::GetCfg().m_Use3DConnexionDriver )
541 m_spaceMouse->SetFocus( aEvent.GetActive() );
542}
543
544
545void SCH_BASE_FRAME::handleIconizeEvent( wxIconizeEvent& aEvent )
546{
548
549 if( m_spaceMouse && aEvent.IsIconized() && ADVANCED_CFG::GetCfg().m_Use3DConnexionDriver )
550 m_spaceMouse->SetFocus( false );
551}
552
553
555{
556 COMMON_SETTINGS* cfg = Pgm().GetCommonSettings();
557 PROJECT& prj = Prj();
558
559 if( prj.SchSymbolLibTable()->IsEmpty() )
560 {
561 ShowInfoBarError( _( "No symbol libraries are loaded." ) );
562 return wxEmptyString;
563 }
564
565 wxArrayString headers;
566
567 headers.Add( _( "Library" ) );
568
569 std::vector< wxArrayString > itemsToDisplay;
570 std::vector< wxString > libNicknames = prj.SchSymbolLibTable()->GetLogicalLibs();
571
572 for( const wxString& name : libNicknames )
573 {
574 // Exclude read only libraries.
575 if( !prj.SchSymbolLibTable()->IsSymbolLibWritable( name ) )
576 continue;
577
580 {
581 wxArrayString item;
582
584 itemsToDisplay.push_back( item );
585 }
586 }
587
588 for( const wxString& name : libNicknames )
589 {
590 // Exclude read only libraries.
591 if( !prj.SchSymbolLibTable()->IsSymbolLibWritable( name ) )
592 continue;
593
596 {
597 wxArrayString item;
598
599 item.Add( name );
600 itemsToDisplay.push_back( item );
601 }
602 }
603
604 wxString oldLibName = prj.GetRString( PROJECT::SCH_LIB_SELECT );
605
606 EDA_LIST_DIALOG dlg( this, _( "Select Symbol Library" ), headers, itemsToDisplay, oldLibName,
607 false );
608
609 if( dlg.ShowModal() != wxID_OK )
610 return wxEmptyString;
611
612 wxString libName = dlg.GetTextSelection();
613
614 if( !libName.empty() )
615 {
616 if( prj.SchSymbolLibTable()->HasLibrary( libName ) )
617 prj.SetRString( PROJECT::SCH_LIB_SELECT, libName );
618 else
619 libName = wxEmptyString;
620 }
621
622 return libName;
623}
624
625
627{
628 Unbind( wxEVT_FSWATCHER, &SCH_BASE_FRAME::OnSymChange, this );
629
630 if( !aID )
631 {
632 wxLogTrace( "KICAD_LIB_WATCH", "No symbol library specified, disabling watcher" );
633 m_watcher.reset();
634 return;
635 }
636
637 wxString libfullname;
638 SYMBOL_LIB_TABLE* tbl = Prj().SchSymbolLibTable();
639
640 if( !tbl )
641 return;
642
643 try
644 {
645 const SYMBOL_LIB_TABLE_ROW* row = tbl->FindRow( aID->GetLibNickname() );
646
647 if( !row )
648 return;
649
650 libfullname = row->GetFullURI( true );
651 }
652 catch( const std::exception& e )
653 {
654 DisplayInfoMessage( this, e.what() );
655 return;
656 }
657 catch( const IO_ERROR& error )
658 {
659 wxLogTrace( "KICAD_LIB_WATCH", "Error: %s", error.What() );
660 return;
661 }
662
663 wxLogTrace( "KICAD_LIB_WATCH", "Setting up watcher for %s", libfullname );
664 m_watcherFileName.Assign( libfullname );
665
666 if( !m_watcherFileName.FileExists() )
667 return;
668
669 wxLog::EnableLogging( false );
670 m_watcherLastModified = m_watcherFileName.GetModificationTime();
671 wxLog::EnableLogging( true );
672
673 Bind( wxEVT_FSWATCHER, &SCH_BASE_FRAME::OnSymChange, this );
674 m_watcher = std::make_unique<wxFileSystemWatcher>();
675 m_watcher->SetOwner( this );
676
677 wxFileName fn;
678 fn.AssignDir( m_watcherFileName.GetPath() );
679 fn.DontFollowLink();
680
681 m_watcher->AddTree( fn );
682}
683
684
685void SCH_BASE_FRAME::OnSymChange( wxFileSystemWatcherEvent& aEvent )
686{
687 SYMBOL_LIBS* libs = Prj().SchLibs();
688
689 wxLogTrace( "KICAD_LIB_WATCH", "OnSymChange: %s, watcher file: %s",
690 aEvent.GetPath().GetFullPath(), m_watcherFileName.GetFullPath() );
691
692 if( !libs || !m_watcher || !m_watcher.get() || m_watcherFileName.GetPath().IsEmpty() )
693 return;
694
695 if( aEvent.GetPath() != m_watcherFileName )
696 return;
697
698 // Start the debounce timer (set to 1 second)
699 if( !m_watcherDebounceTimer.StartOnce( 1000 ) )
700 {
701 wxLogTrace( "KICAD_LIB_WATCH", "Failed to start the debounce timer" );
702 return;
703 }
704}
705
706
708{
709 wxLogTrace( "KICAD_LIB_WATCH", "OnSymChangeDebounceTimer" );
710 // Disable logging to avoid spurious messages and check if the file has changed
711 wxLog::EnableLogging( false );
712 wxDateTime lastModified = m_watcherFileName.GetModificationTime();
713 wxLog::EnableLogging( true );
714
715 if( lastModified == m_watcherLastModified || !lastModified.IsValid() )
716 return;
717
718 m_watcherLastModified = lastModified;
719
720 if( !GetScreen()->IsContentModified() || IsOK( this, _( "The library containing the current symbol has changed.\n"
721 "Do you want to reload the library?" ) ) )
722 {
723 wxLogTrace( "KICAD_LIB_WATCH", "Sending refresh symbol mail" );
724 std::string libName = m_watcherFileName.GetFullPath().ToStdString();
727 }
728}
const char * name
Definition: DXF_plotter.cpp:56
constexpr EDA_IU_SCALE schIUScale
Definition: base_units.h:111
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
wxString m_ColorTheme
Active color theme name.
Definition: app_settings.h:190
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.
KIGFX::GAL_DISPLAY_OPTIONS & 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.
EDA_DRAW_PANEL_GAL::GAL_TYPE loadCanvasTypeSetting()
Returns the canvas type stored in the application settings.
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:85
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:97
virtual bool IsType(const std::vector< KICAD_T > &aScanTypes) const
Check whether the item is one of the listed types.
Definition: eda_item.h:165
EDA_ITEM * GetParent() const
Definition: eda_item.h:99
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:76
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:103
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:58
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:209
Store schematic specific render settings.
Definition: sch_painter.h:71
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:314
virtual void Remove(VIEW_ITEM *aItem)
Remove a VIEW_ITEM from the view.
Definition: view.cpp:351
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:1608
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
Definition: view.h:195
void RecacheAllItems()
Rebuild GAL display lists.
Definition: view.cpp:1401
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
Definition: view.cpp:1501
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:213
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
Definition: view.cpp:574
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:617
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:549
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:99
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...
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:54
const VECTOR2I GetSizeIU(double aIUScale) const
Gets the page size in internal units.
Definition: page_info.h:162
std::vector< wxString > m_PinnedSymbolLibs
Below are project-level settings that have not been moved to a dedicated file.
Definition: project_file.h:115
Container for project specific data.
Definition: project.h:64
@ SCH_LIB_SELECT
Definition: project.h:166
virtual PROJECT_FILE & GetProjectFile() const
Definition: project.h:149
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:254
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:265
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.
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.
KIGFX::SCH_RENDER_SETTINGS * GetRenderSettings()
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:147
const PAGE_INFO & GetPageSettings() const
Definition: sch_screen.h:131
void SetTitleBlock(const TITLE_BLOCK &aTitleBlock)
Definition: sch_screen.h:157
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:307
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_PLUGIN obje...
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:170
@ 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)
A lower-precision version of StringFromValue().
wxString wx_str() const
Definition: utf8.cpp:46
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
Definition: confirm.cpp:363
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Display an informational message box with aMessage.
Definition: confirm.cpp:335
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:308
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
bool m_Use3DConnexionDriver
Use the 3DConnexion Driver.
KIWAY Kiway
SCH_LAYER_ID
Eeschema drawing layers.
Definition: layer_ids.h:345
@ LAYER_SCHEMATIC_GRID_AXES
Definition: layer_ids.h:379
@ LAYER_SCHEMATIC_BACKGROUND
Definition: layer_ids.h:380
@ MAIL_REFRESH_SYMBOL
Definition: mail_type.h:57
@ REPAINT
Item needs to be redrawn.
Definition: view_item.h:52
@ ALL
All except INITIAL_ADD.
Definition: view_item.h:53
@ 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:99
Declaration of the NL_SCHEMATIC_PLUGIN class.
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 & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:115
std::vector< wxString > pinned_symbol_libs
const double IU_PER_MILS
Definition: base_units.h:78
Definition for symbol library class.
@ SCH_SYMBOL_T
Definition: typeinfo.h:146
@ SCH_SHEET_PIN_T
Definition: typeinfo.h:147