KiCad PCB EDA Suite
Loading...
Searching...
No Matches
symbol_viewer_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) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2008 Wayne Stambaugh <[email protected]>
6 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, you may find one here:
20 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21 * or you may search the http://www.gnu.org website for the version 2 license,
22 * or you may write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
26#include <bitmaps.h>
28#include <confirm.h>
30#include <eeschema_id.h>
31#include <eeschema_settings.h>
33#include <kiface_base.h>
34#include <kiway.h>
35#include <kiway_express.h>
36#include <locale_io.h>
37#include <symbol_viewer_frame.h>
38#include <widgets/msgpanel.h>
39#include <widgets/wx_listbox.h>
42#include <sch_view.h>
43#include <sch_painter.h>
44#include <symbol_lib_table.h>
46#include <pgm_base.h>
48#include <project_sch.h>
50#include <symbol_async_loader.h>
51#include <tool/action_toolbar.h>
52#include <tool/common_control.h>
53#include <tool/common_tools.h>
55#include <tool/selection.h>
57#include <tool/tool_manager.h>
58#include <tool/zoom_tool.h>
59#include <tools/sch_actions.h>
62#include <view/view_controls.h>
63#include <wx/srchctrl.h>
64#include <wx/log.h>
65#include <wx/choice.h>
67
68#include <default_values.h>
69#include <string_utils.h>
70#include "eda_pattern_match.h"
71
72// Save previous symbol library viewer state.
74
78
79
80BEGIN_EVENT_TABLE( SYMBOL_VIEWER_FRAME, SCH_BASE_FRAME )
81 // Window events
84
85 // Toolbar events
90
91 // listbox events
97
98 // Menu (and/or hotkey) events
99 EVT_MENU( wxID_CLOSE, SYMBOL_VIEWER_FRAME::CloseLibraryViewer )
100
103
104END_EVENT_TABLE()
105
106
107SYMBOL_VIEWER_FRAME::SYMBOL_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
108 SCH_BASE_FRAME( aKiway, aParent, FRAME_SCH_VIEWER, _( "Symbol Library Browser" ),
109 wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE,
111 m_unitChoice( nullptr ),
112 m_bodyStyleChoice( nullptr ),
113 m_libList( nullptr ),
114 m_symbolList( nullptr )
115{
116 m_aboutTitle = _HKI( "KiCad Symbol Library Browser" );
117
118 // Force the frame name used in config. the lib viewer frame has a name
119 // depending on aFrameType (needed to identify the frame by wxWidgets),
120 // but only one configuration is preferable.
122
123 // Give an icon
124 wxIcon icon;
125 icon.CopyFromBitmap( KiBitmap( BITMAPS::library_browser ) );
126 SetIcon( icon );
127
128 m_libListWidth = 200;
129 m_symbolListWidth = 300;
130 m_listPowerOnly = false;
131
132 SetScreen( new SCH_SCREEN );
133 GetScreen()->m_Center = true; // Axis origin centered on screen.
134 LoadSettings( config() );
135
136 // Ensure axis are always drawn (initial default display was not drawn)
138 gal_opts.m_axesEnabled = true;
139 gal_opts.m_gridMinSpacing = 10.0;
140 gal_opts.NotifyChanged();
141
142 GetRenderSettings()->LoadColors( GetColorSettings() );
143 GetCanvas()->GetGAL()->SetAxesColor( m_colorSettings->GetColor( LAYER_SCHEMATIC_GRID_AXES ) );
144
145 GetRenderSettings()->SetDefaultPenWidth( DEFAULT_LINE_WIDTH_MILS * schIUScale.IU_PER_MILS );
146
147 setupTools();
149
153
155
156 wxPanel* libPanel = new wxPanel( this );
157 wxSizer* libSizer = new wxBoxSizer( wxVERTICAL );
158
159 m_libFilter = new wxSearchCtrl( libPanel, ID_LIBVIEW_LIB_FILTER, wxEmptyString,
160 wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
161 m_libFilter->SetDescriptiveText( _( "Filter" ) );
162 libSizer->Add( m_libFilter, 0, wxEXPAND, 5 );
163
164 m_libList = new WX_LISTBOX( libPanel, ID_LIBVIEW_LIB_LIST, wxDefaultPosition, wxDefaultSize,
165 0, nullptr, wxLB_HSCROLL | wxNO_BORDER );
166 libSizer->Add( m_libList, 1, wxEXPAND, 5 );
167
168 libPanel->SetSizer( libSizer );
169 libPanel->Fit();
170
171 wxPanel* symbolPanel = new wxPanel( this );
172 wxSizer* symbolSizer = new wxBoxSizer( wxVERTICAL );
173
174 m_symbolFilter = new wxSearchCtrl( symbolPanel, ID_LIBVIEW_SYM_FILTER, wxEmptyString,
175 wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
176 m_symbolFilter->SetDescriptiveText( _( "Filter" ) );
177 m_symbolFilter->SetToolTip(
178 _( "Filter on symbol name, keywords, description and pin count.\n"
179 "Search terms are separated by spaces. All search terms must match.\n"
180 "A term which is a number will also match against the pin count." ) );
181 symbolSizer->Add( m_symbolFilter, 0, wxEXPAND, 5 );
182
183#ifdef __WXGTK__
184 // wxSearchCtrl vertical height is not calculated correctly on some GTK setups
185 // See https://gitlab.com/kicad/code/kicad/-/issues/9019
186 m_libFilter->SetMinSize( wxSize( -1, GetTextExtent( wxT( "qb" ) ).y + 10 ) );
187 m_symbolFilter->SetMinSize( wxSize( -1, GetTextExtent( wxT( "qb" ) ).y + 10 ) );
188#endif
189
190 m_symbolList = new WX_LISTBOX( symbolPanel, ID_LIBVIEW_SYM_LIST, wxDefaultPosition,
191 wxDefaultSize, 0, nullptr, wxLB_HSCROLL | wxNO_BORDER );
192 symbolSizer->Add( m_symbolList, 1, wxEXPAND, 5 );
193
194 symbolPanel->SetSizer( symbolSizer );
195 symbolPanel->Fit();
196
197 // Preload libraries
200
201 m_selection_changed = false;
202
204
205 m_auimgr.SetManagedWindow( this );
206
208
209 // Manage main toolbar
210 m_auimgr.AddPane( m_tbTopMain, EDA_PANE().HToolbar().Name( "TopMainToolbar" ).Top().Layer(6) );
211 m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ) .Bottom().Layer(6) );
212
213 m_auimgr.AddPane( libPanel, EDA_PANE().Palette().Name( "Libraries" ).Left().Layer(2)
214 .CaptionVisible( false ).MinSize( 100, -1 ).BestSize( 200, -1 ) );
215 m_auimgr.AddPane( symbolPanel, EDA_PANE().Palette().Name( "Symbols" ).Left().Layer(1)
216 .CaptionVisible( false ).MinSize( 100, -1 ).BestSize( 300, -1 ) );
217
218 m_auimgr.AddPane( GetCanvas(), EDA_PANE().Canvas().Name( "DrawFrame" ).Center() );
219
220 m_auimgr.Update();
221
222 if( m_libListWidth > 0 )
223 SetAuiPaneSize( m_auimgr, m_auimgr.GetPane( "Libraries" ), m_libListWidth, -1 );
224
225 if( m_symbolListWidth > 0 )
226 SetAuiPaneSize( m_auimgr, m_auimgr.GetPane( "Symbols" ), m_symbolListWidth, -1 );
227
229
230 Raise();
231 Show( true );
232
233 SyncView();
234 GetCanvas()->SetCanFocus( false );
235
236 setupUnits( config() );
237
238 // Set the working/draw area size to display a symbol to a reasonable value:
239 // A 450mm x 450mm with a origin at the area center looks like a large working area
240 double max_size_x = schIUScale.mmToIU( 450 );
241 double max_size_y = schIUScale.mmToIU( 450 );
242 BOX2D bbox;
243 bbox.SetOrigin( -max_size_x / 2, -max_size_y / 2 );
244 bbox.SetSize( max_size_x, max_size_y );
245 GetCanvas()->GetView()->SetBoundary( bbox );
247
248 // If a symbol was previously selected in m_symbolList from a previous run, show it
249 wxString symbName = m_symbolList->GetStringSelection();
250
251 if( !symbName.IsEmpty() )
252 {
253 SetSelectedSymbol( symbName );
255 }
256}
257
258
260{
261 // Shutdown all running tools
262 if( m_toolManager )
263 m_toolManager->ShutdownAllTools();
264
265 if( m_previewItem )
266 {
267 GetCanvas()->GetView()->Remove( m_previewItem.get() );
268 m_previewItem = nullptr;
269 }
270}
271
272
274{
275 // TODO: deduplicate with SYMBOL_TREE_MODEL_ADAPTER::AddLibraries
276 std::vector<wxString> libraryNames = PROJECT_SCH::SchSymbolLibTable( &Prj() )->GetLogicalLibs();
277 std::unique_ptr<WX_PROGRESS_REPORTER> progressReporter = nullptr;
278
279 if( m_show_progress )
280 {
281 progressReporter = std::make_unique<WX_PROGRESS_REPORTER>( this, _( "Load Symbol Libraries" ),
282 libraryNames.size(), PR_CAN_ABORT );
283 }
284
285 // Disable KIID generation: not needed for library parts; sometimes very slow
286 KIID::CreateNilUuids( true );
287
288 std::unordered_map<wxString, std::vector<LIB_SYMBOL*>> loadedSymbols;
289
290 SYMBOL_ASYNC_LOADER loader( libraryNames, PROJECT_SCH::SchSymbolLibTable( &Prj() ), false,
291 nullptr, progressReporter.get() );
292
293 LOCALE_IO toggle;
294
295 loader.Start();
296
297 while( !loader.Done() )
298 {
299 if( progressReporter && !progressReporter->KeepRefreshing() )
300 break;
301
302 wxMilliSleep( 33 );
303 }
304
305 loader.Join();
306
307 KIID::CreateNilUuids( false );
308
309 if( !loader.GetErrors().IsEmpty() )
310 {
311 HTML_MESSAGE_BOX dlg( this, _( "Load Error" ) );
312
313 dlg.MessageSet( _( "Errors loading symbols:" ) );
314
315 wxString msg = loader.GetErrors();
316 msg.Replace( "\n", "<BR>" );
317
318 dlg.AddHTML_Text( msg );
319 dlg.ShowModal();
320 }
321}
322
323
325{
326 // Create the manager and dispatcher & route draw panel events to the dispatcher
328 m_toolManager->SetEnvironment( GetScreen(), GetCanvas()->GetView(),
329 GetCanvas()->GetViewControls(), config(), this );
330 m_actions = new SCH_ACTIONS();
332
333 // Register tools
334 m_toolManager->RegisterTool( new COMMON_TOOLS );
335 m_toolManager->RegisterTool( new COMMON_CONTROL );
336 m_toolManager->RegisterTool( new ZOOM_TOOL );
337 m_toolManager->RegisterTool( new SCH_INSPECTION_TOOL ); // manage show datasheet
338 m_toolManager->RegisterTool( new SCH_SELECTION_TOOL ); // manage context menu
339 m_toolManager->RegisterTool( new SYMBOL_EDITOR_CONTROL ); // manage render settings
340
341 m_toolManager->InitTools();
342
343 // Run the selection tool, it is supposed to be always active
344 // It also manages the mouse right click to show the context menu
345 m_toolManager->InvokeTool( "common.InteractiveSelection" );
346
348}
349
350
352{
354
355 ACTION_MANAGER* mgr = m_toolManager->GetActionManager();
356 EDITOR_CONDITIONS cond( this );
357
358 wxASSERT( mgr );
359
360#define ENABLE( x ) ACTION_CONDITIONS().Enable( x )
361#define CHECK( x ) ACTION_CONDITIONS().Check( x )
362
364
365 auto electricalTypesShownCondition =
366 [this]( const SELECTION& aSel )
367 {
369 };
370
371 auto pinNumbersShownCondition =
372 [this]( const SELECTION& )
373 {
375 };
376
377 auto haveDatasheetCond =
378 [this]( const SELECTION& )
379 {
380 LIB_SYMBOL* symbol = GetSelectedSymbol();
381 return symbol && !symbol->GetDatasheetField().GetText().IsEmpty();
382 };
383
384 mgr->SetConditions( ACTIONS::showDatasheet, ENABLE( haveDatasheetCond ) );
385 mgr->SetConditions( SCH_ACTIONS::showElectricalTypes, CHECK( electricalTypesShownCondition ) );
386 mgr->SetConditions( SCH_ACTIONS::showPinNumbers, CHECK( pinNumbersShownCondition ) );
387
388#undef CHECK
389#undef ENABLE
390}
391
392
393void SYMBOL_VIEWER_FRAME::SetUnitAndBodyStyle( int aUnit, int aBodyStyle )
394{
395 m_unit = aUnit > 0 ? aUnit : 1;
396 m_bodyStyle = aBodyStyle > 0 ? aBodyStyle : BODY_STYLE::BASE;
397 m_selection_changed = false;
398
400}
401
402
404{
405 LIB_SYMBOL* symbol = nullptr;
406
407 if( m_currentSymbol.IsValid() )
409
410 return symbol;
411}
412
413
415{
416 LIB_SYMBOL* symbol = GetSelectedSymbol();
417 KIGFX::SCH_VIEW* view = GetCanvas()->GetView();
418
419 if( m_previewItem )
420 {
421 view->Remove( m_previewItem.get() );
422 m_previewItem = nullptr;
423 }
424
426
427 if( symbol )
428 {
431
432 m_previewItem = symbol->Flatten();
433 view->Add( m_previewItem.get() );
434
435 wxString parentName;
436 std::shared_ptr<LIB_SYMBOL> parent = symbol->GetParent().lock();
437
438 if( parent )
439 parentName = parent->GetName();
440
441 AppendMsgPanel( _( "Name" ), UnescapeString( m_previewItem->GetName() ) );
442 AppendMsgPanel( _( "Parent" ), UnescapeString( parentName ) );
443 AppendMsgPanel( _( "Description" ), m_previewItem->GetDescription() );
444 AppendMsgPanel( _( "Keywords" ), m_previewItem->GetKeyWords() );
445 }
446
448 GetCanvas()->Refresh();
449}
450
451
453{
455
456 delete m_toolManager;
457 m_toolManager = nullptr;
458
459 Destroy();
460}
461
462
463void SYMBOL_VIEWER_FRAME::OnSize( wxSizeEvent& SizeEv )
464{
465 if( m_auimgr.GetManagedWindow() )
466 m_auimgr.Update();
467
468 SizeEv.Skip();
469}
470
471
472void SYMBOL_VIEWER_FRAME::onUpdateUnitChoice( wxUpdateUIEvent& aEvent )
473{
474 LIB_SYMBOL* symbol = GetSelectedSymbol();
475
476 int unit_count = 1;
477
478 if( symbol )
479 unit_count = std::max( symbol->GetUnitCount(), 1 );
480
481 m_unitChoice->Enable( unit_count > 1 );
482 m_unitChoice->Clear();
483
484 if( unit_count > 1 )
485 {
486 // rebuild the unit list if it is not suitable (after a new selection for instance)
487 if( unit_count != (int) m_unitChoice->GetCount() )
488 {
489 for( int ii = 0; ii < unit_count; ii++ )
490 m_unitChoice->Append( symbol->GetUnitDisplayName( ii + 1, true ) );
491 }
492
493 if( m_unitChoice->GetSelection() != std::max( 0, m_unit - 1 ) )
494 m_unitChoice->SetSelection( std::max( 0, m_unit - 1 ) );
495 }
496}
497
498
499void SYMBOL_VIEWER_FRAME::onUpdateBodyStyleChoice( wxUpdateUIEvent& aEvent )
500{
501 LIB_SYMBOL* symbol = GetSelectedSymbol();
502
503 int bodyStyle_count = 1;
504
505 if( symbol )
506 bodyStyle_count = std::max( symbol->GetBodyStyleCount(), 1 );
507
508 m_bodyStyleChoice->Enable( bodyStyle_count > 1 );
509 m_bodyStyleChoice->Clear();
510
511 if( bodyStyle_count > 1 )
512 {
513 if( symbol && symbol->HasDeMorganBodyStyles() )
514 {
515 m_bodyStyleChoice->Append( wxGetTranslation( DEMORGAN_STD ) );
516 m_bodyStyleChoice->Append( wxGetTranslation( DEMORGAN_ALT ) );
517 }
518 else if( symbol )
519 {
520 for( int i = 0; i < symbol->GetBodyStyleCount(); i++ )
521 m_bodyStyleChoice->Append( symbol->GetBodyStyleNames()[i] );
522 }
523
524 if( m_bodyStyleChoice->GetSelection() != std::max( 0, m_bodyStyle - 1 ) )
525 m_bodyStyleChoice->SetSelection( std::max( 0, m_bodyStyle - 1 ) );
526 }
527}
528
529
531{
532 if( !m_libList )
533 return false;
534
535 m_libList->Clear();
536
540 std::vector<wxString> libs = libTable->GetLogicalLibs();
541 std::vector<wxString> pinnedMatches;
542 std::vector<wxString> otherMatches;
543
544 auto doAddLib =
545 [&]( const wxString& aLib )
546 {
547 if( alg::contains( project.m_PinnedSymbolLibs, aLib )
549 {
550 pinnedMatches.push_back( aLib );
551 }
552 else
553 {
554 otherMatches.push_back( aLib );
555 }
556 };
557
558 auto process =
559 [&]( const wxString& aLib )
560 {
561 // Remove not allowed libs, if the allowed lib list is not empty
562 if( m_allowedLibs.GetCount() )
563 {
564 if( m_allowedLibs.Index( aLib ) == wxNOT_FOUND )
565 return;
566 }
567
568 // Remove libs which have no power symbols, if this filter is activated
569 if( m_listPowerOnly )
570 {
571 wxArrayString aliasNames;
572
573 PROJECT_SCH::SchSymbolLibTable( &Prj() )->EnumerateSymbolLib( aLib, aliasNames, true );
574
575 if( aliasNames.IsEmpty() )
576 return;
577 }
578
579 SYMBOL_LIB_TABLE_ROW* row = libTable->FindRow( aLib );
580
581 wxCHECK( row, /* void */ );
582
583 if( !row->GetIsVisible() )
584 return;
585
586 if( row->SupportsSubLibraries() )
587 {
588 std::vector<wxString> subLibraries;
589 row->GetSubLibraryNames( subLibraries );
590
591 for( const wxString& lib : subLibraries )
592 {
593 wxString suffix = lib.IsEmpty() ? wxString( wxT( "" ) )
594 : wxString::Format( wxT( " - %s" ), lib );
595 wxString name = wxString::Format( wxT( "%s%s" ), aLib, suffix );
596
597 doAddLib( name );
598 }
599 }
600 else
601 {
602 doAddLib( aLib );
603 }
604 };
605
606 if( m_libFilter->GetValue().IsEmpty() )
607 {
608 for( const wxString& lib : libs )
609 process( lib );
610 }
611 else
612 {
613 wxStringTokenizer tokenizer( m_libFilter->GetValue(), " \t\r\n", wxTOKEN_STRTOK );
614
615 while( tokenizer.HasMoreTokens() )
616 {
617 const wxString term = tokenizer.GetNextToken().Lower();
618 EDA_COMBINED_MATCHER matcher( term, CTX_LIBITEM );
619
620 for( const wxString& lib : libs )
621 {
622 if( matcher.Find( lib.Lower() ) )
623 process( lib );
624 }
625 }
626 }
627
628 if( libs.empty() )
629 return true;
630
631 for( const wxString& name : pinnedMatches )
633
634 for( const wxString& name : otherMatches )
635 m_libList->Append( UnescapeString( name ) );
636
637 // Search for a previous selection:
638 int index =
639 m_libList->FindString( UnescapeString( m_currentSymbol.GetUniStringLibNickname() ) );
640
641 if( index != wxNOT_FOUND )
642 {
643 m_libList->SetSelection( index, true );
644 }
645 else
646 {
647 // If not found, clear current library selection because it can be deleted after a
648 // config change.
649 m_currentSymbol.SetLibNickname( m_libList->GetCount() > 0 ? m_libList->GetBaseString( 0 )
650 : wxString( wxEmptyString ) );
651 m_currentSymbol.SetLibItemName( wxEmptyString );
652 m_unit = 1;
654 }
655
656 bool cmp_changed = ReCreateSymbolList();
658 GetCanvas()->Refresh();
659
660 return cmp_changed;
661}
662
663
665{
666 if( m_symbolList == nullptr )
667 return false;
668
669 m_symbolList->Clear();
670
671 wxString libName = m_currentSymbol.GetUniStringLibNickname();
672
673 if( libName.IsEmpty() )
674 return false;
675
676 std::vector<LIB_SYMBOL*> symbols;
678
679 try
680 {
681 if( row )
683 }
684 catch( const IO_ERROR& ) {} // ignore, it is handled below
685
686 std::set<wxString> excludes;
687
688 if( !m_symbolFilter->GetValue().IsEmpty() )
689 {
690 wxStringTokenizer tokenizer( m_symbolFilter->GetValue(), " \t\r\n", wxTOKEN_STRTOK );
691
692 while( tokenizer.HasMoreTokens() )
693 {
694 const wxString filterTerm = tokenizer.GetNextToken().Lower();
695 EDA_COMBINED_MATCHER matcher( filterTerm, CTX_LIBITEM );
696
697 for( LIB_SYMBOL* symbol : symbols )
698 {
699 std::vector<SEARCH_TERM> searchTerms = symbol->GetSearchTerms();
700 int matched = matcher.ScoreTerms( searchTerms );
701
702 if( filterTerm.IsNumber() && wxAtoi( filterTerm ) == (int)symbol->GetPinCount() )
703 matched++;
704
705 if( !matched )
706 excludes.insert( symbol->GetName() );
707 }
708 }
709 }
710
711 wxString subLib = m_currentSymbol.GetSubLibraryName();
712
713 for( const LIB_SYMBOL* symbol : symbols )
714 {
715 if( row && row->SupportsSubLibraries()
716 && !subLib.IsSameAs( symbol->GetLibId().GetSubLibraryName() ) )
717 {
718 continue;
719 }
720
721 if( !excludes.count( symbol->GetName() ) )
722 m_symbolList->Append( UnescapeString( symbol->GetName() ) );
723 }
724
725 if( m_symbolList->IsEmpty() )
726 {
727 SetSelectedSymbol( wxEmptyString );
729 m_unit = 1;
730 return true;
731 }
732
733 int index =
734 m_symbolList->FindString( UnescapeString( m_currentSymbol.GetUniStringLibItemName() ) );
735 bool changed = false;
736
737 if( index == wxNOT_FOUND )
738 {
739 // Select the first library entry when the previous entry name does not exist in
740 // the current library.
742 m_unit = 1;
743 index = -1;
744 changed = true;
745 SetSelectedSymbol( wxEmptyString );
746 }
747
748 m_symbolList->SetSelection( index, true );
749
750 return changed;
751}
752
753
754void SYMBOL_VIEWER_FRAME::ClickOnLibList( wxCommandEvent& event )
755{
756 int ii = m_libList->GetSelection();
757
758 if( ii < 0 )
759 return;
760
761 m_selection_changed = true;
762
763 wxString selection = EscapeString( m_libList->GetBaseString( ii ), CTX_LIBID );
764
765 if( !PROJECT_SCH::SchSymbolLibTable( &Prj() )->FindRow( selection )
766 && selection.Find( '-' ) != wxNOT_FOUND )
767 {
768 // Probably a sub-library
769 wxString sublib;
770 selection = selection.BeforeLast( '-', &sublib ).Trim();
771 sublib.Trim( false );
772 SetSelectedLibrary( selection, sublib );
773 }
774 else
775 {
776 SetSelectedLibrary( selection );
777 }
778}
779
780
781void SYMBOL_VIEWER_FRAME::SetSelectedLibrary( const wxString& aLibraryName,
782 const wxString& aSubLibName )
783{
784 if( m_currentSymbol.GetUniStringLibNickname() == aLibraryName
785 && wxString( m_currentSymbol.GetSubLibraryName().wx_str() ) == aSubLibName )
786 return;
787
788 m_currentSymbol.SetLibNickname( aLibraryName );
789 m_currentSymbol.SetSubLibraryName( aSubLibName );
791 GetCanvas()->Refresh();
793
794 // Ensure the corresponding line in m_libList is selected
795 // (which is not necessary the case if SetSelectedLibrary is called
796 // by another caller than ClickOnLibList.
797 m_libList->SetStringSelection( UnescapeString( m_currentSymbol.GetFullLibraryName() ), true );
798
799 // The m_libList has now the focus, in order to be able to use arrow keys
800 // to navigate inside the list.
801 // the gal canvas must not steal the focus to allow navigation
802 GetCanvas()->SetStealsFocus( false );
803 m_libList->SetFocus();
804}
805
806
807void SYMBOL_VIEWER_FRAME::ClickOnSymbolList( wxCommandEvent& event )
808{
809 int ii = m_symbolList->GetSelection();
810
811 if( ii < 0 )
812 return;
813
814 m_selection_changed = true;
815
816 SetSelectedSymbol( EscapeString( m_symbolList->GetBaseString( ii ), CTX_LIBID ) );
817
818 // The m_symbolList has now the focus, in order to be able to use arrow keys
819 // to navigate inside the list.
820 // the gal canvas must not steal the focus to allow navigation
821 GetCanvas()->SetStealsFocus( false );
822 m_symbolList->SetFocus();
823}
824
825
826void SYMBOL_VIEWER_FRAME::SetSelectedSymbol( const wxString& aSymbolName )
827{
828 if( m_currentSymbol.GetUniStringLibItemName() != aSymbolName )
829 {
830 m_currentSymbol.SetLibItemName( aSymbolName );
831
832 // Ensure the corresponding line in m_symbolList is selected
833 // (which is not necessarily the case if SetSelectedSymbol is called
834 // by another caller than ClickOnSymbolList.
835 m_symbolList->SetStringSelection( UnescapeString( aSymbolName ), true );
837
839 {
840 m_unit = 1;
842 m_selection_changed = false;
843 }
844
846 }
847}
848
849
850void SYMBOL_VIEWER_FRAME::DClickOnSymbolList( wxCommandEvent& event )
851{
853}
854
855
857{
859
861 {
862 // Grid shape, etc.
863 GetGalDisplayOptions().ReadWindowSettings( cfg->m_LibViewPanel.window );
864
865 m_libListWidth = cfg->m_LibViewPanel.lib_list_width;
866 m_symbolListWidth = cfg->m_LibViewPanel.cmp_list_width;
867
868 GetRenderSettings()->m_ShowPinsElectricalType = cfg->m_LibViewPanel.show_pin_electrical_type;
869 GetRenderSettings()->m_ShowPinNumbers = cfg->m_LibViewPanel.show_pin_numbers;
870
871 // Set parameters to a reasonable value.
872 int maxWidth = cfg->m_LibViewPanel.window.state.size_x - 80;
873
874 if( m_libListWidth + m_symbolListWidth > maxWidth )
875 {
878 }
879 }
880}
881
882
884{
886
888 m_libListWidth = m_libList->GetSize().x;
889
890 m_symbolListWidth = m_symbolList->GetSize().x;
891
893 {
894 cfg->m_LibViewPanel.lib_list_width = m_libListWidth;
895 cfg->m_LibViewPanel.cmp_list_width = m_symbolListWidth;
896
897 if( SCH_RENDER_SETTINGS* renderSettings = GetRenderSettings() )
898 {
899 cfg->m_LibViewPanel.show_pin_electrical_type = renderSettings->m_ShowPinsElectricalType;
900 cfg->m_LibViewPanel.show_pin_numbers = renderSettings->m_ShowPinNumbers;
901 }
902 }
903}
904
905
907{
908 if( EESCHEMA_SETTINGS* cfg = dynamic_cast<EESCHEMA_SETTINGS*>( aCfg ) )
909 return &cfg->m_LibViewPanel.window;
910
911 wxFAIL_MSG( wxT( "SYMBOL_VIEWER not running with EESCHEMA_SETTINGS" ) );
912 return &aCfg->m_Window; // non-null fail-safe
913}
914
915
917{
919
921 GetGalDisplayOptions().ReadWindowSettings( cfg->m_LibViewPanel.window );
922
924 GetCanvas()->GetGAL()->DrawGrid();
926
927 if( aFlags && ENVVARS_CHANGED )
929}
930
931
932void SYMBOL_VIEWER_FRAME::OnActivate( wxActivateEvent& event )
933{
934 if( event.GetActive() )
935 {
936 bool changed = m_libList ? ReCreateLibList() : false;
937
938 if (changed)
939 m_selection_changed = true;
940
942
944 }
945
946 event.Skip(); // required under wxMAC
947}
948
949
950void SYMBOL_VIEWER_FRAME::CloseLibraryViewer( wxCommandEvent& event )
951{
952 Close();
953}
954
955
956const BOX2I SYMBOL_VIEWER_FRAME::GetDocumentExtents( bool aIncludeAllVisible ) const
957{
958 LIB_SYMBOL* symbol = GetSelectedSymbol();
959
960 if( !symbol )
961 {
962 return BOX2I( VECTOR2I( -200, -200 ), VECTOR2I( 400, 400 ) );
963 }
964 else
965 {
966 std::shared_ptr<LIB_SYMBOL> tmp = symbol->IsDerived() ? symbol->GetParent().lock()
967 : symbol->SharedPtr();
968
969 wxCHECK( tmp, BOX2I( VECTOR2I( -200, -200 ), VECTOR2I( 400, 400 ) ) );
970
971 return tmp->GetUnitBoundingBox( m_unit, m_bodyStyle );
972 }
973}
974
975
976void SYMBOL_VIEWER_FRAME::OnLibFilter( wxCommandEvent& aEvent )
977{
979
980 // Required to avoid interaction with SetHint()
981 // See documentation for wxTextEntry::SetHint
982 aEvent.Skip();
983}
984
985
986void SYMBOL_VIEWER_FRAME::OnSymFilter( wxCommandEvent& aEvent )
987{
989
990 // Required to avoid interaction with SetHint()
991 // See documentation for wxTextEntry::SetHint
992 aEvent.Skip();
993}
994
995
996void SYMBOL_VIEWER_FRAME::OnCharHook( wxKeyEvent& aEvent )
997{
998 if( aEvent.GetKeyCode() == WXK_UP )
999 {
1000 if( m_libFilter->HasFocus() || m_libList->HasFocus() )
1001 {
1002 int prev = m_libList->GetSelection() - 1;
1003
1004 if( prev >= 0 )
1005 {
1006 m_libList->SetSelection( prev );
1007 m_libList->EnsureVisible( prev );
1008
1009 wxCommandEvent dummy;
1011 }
1012 }
1013 else
1014 {
1015 wxCommandEvent dummy;
1017 }
1018 }
1019 else if( aEvent.GetKeyCode() == WXK_DOWN )
1020 {
1021 if( m_libFilter->HasFocus() || m_libList->HasFocus() )
1022 {
1023 int next = m_libList->GetSelection() + 1;
1024
1025 if( next < (int)m_libList->GetCount() )
1026 {
1027 m_libList->SetSelection( next );
1028 m_libList->EnsureVisible( next );
1029
1030 wxCommandEvent dummy;
1032 }
1033 }
1034 else
1035 {
1036 wxCommandEvent dummy;
1038 }
1039 }
1040 else if( aEvent.GetKeyCode() == WXK_TAB && m_libFilter->HasFocus() )
1041 {
1042 if( !aEvent.ShiftDown() )
1043 m_symbolFilter->SetFocus();
1044 else
1045 aEvent.Skip();
1046 }
1047 else if( aEvent.GetKeyCode() == WXK_TAB && m_symbolFilter->HasFocus() )
1048 {
1049 if( aEvent.ShiftDown() )
1050 m_libFilter->SetFocus();
1051 else
1052 aEvent.Skip();
1053 }
1054 else if( ( aEvent.GetKeyCode() == WXK_RETURN || aEvent.GetKeyCode() == WXK_NUMPAD_ENTER )
1055 && m_symbolList->GetSelection() >= 0 )
1056 {
1057 wxCommandEvent dummy;
1059 }
1060 else
1061 {
1062 aEvent.Skip();
1063 }
1064}
1065
1066
1067void SYMBOL_VIEWER_FRAME::onSelectNextSymbol( wxCommandEvent& aEvent )
1068{
1069 wxCommandEvent evt( wxEVT_COMMAND_LISTBOX_SELECTED, ID_LIBVIEW_SYM_LIST );
1070 int ii = m_symbolList->GetSelection();
1071
1072 // Select the next symbol or stop at the end of the list.
1073 if( ii != wxNOT_FOUND && ii < (int) ( m_symbolList->GetCount() - 1 ) )
1074 ii += 1;
1075
1076 m_symbolList->SetSelection( ii );
1077 ProcessEvent( evt );
1078}
1079
1080
1082{
1083 wxCommandEvent evt( wxEVT_COMMAND_LISTBOX_SELECTED, ID_LIBVIEW_SYM_LIST );
1084 int ii = m_symbolList->GetSelection();
1085
1086 // Select the previous symbol or stop at the beginning of list.
1087 if( ii != wxNOT_FOUND && ii != 0 )
1088 ii -= 1;
1089
1090 m_symbolList->SetSelection( ii );
1091 ProcessEvent( evt );
1092}
1093
1094
1095void SYMBOL_VIEWER_FRAME::onSelectSymbolUnit( wxCommandEvent& aEvent )
1096{
1097 int ii = m_unitChoice->GetSelection();
1098
1099 if( ii < 0 )
1100 return;
1101
1102 m_unit = ii + 1;
1103
1105}
1106
1107
1109{
1110 int ii = m_bodyStyleChoice->GetSelection();
1111
1112 if( ii < 0 )
1113 return;
1114
1115 m_bodyStyle = ii + 1;
1116
1118}
1119
1120
1122{
1123 wxString libName = m_currentSymbol.GetUniStringLibNickname();
1124
1125 if( m_libList && !m_libList->IsEmpty() && !libName.IsEmpty() )
1126 {
1127 const SYMBOL_LIB_TABLE_ROW* row =
1128 PROJECT_SCH::SchSymbolLibTable( &Prj() )->FindRow( libName, true );
1129
1130 wxString title = row ? row->GetFullURI( true ) : _( "[no library selected]" );
1131
1132 title += wxT( " \u2014 " ) + _( "Symbol Library Browser" );
1133 SetTitle( title );
1134 }
1135}
1136
1137
1139{
1140 return m_toolManager->GetTool<SCH_SELECTION_TOOL>()->GetSelection();
1141}
1142
1143
1145{
1146
1147 switch( mail.Command() )
1148 {
1149 case MAIL_RELOAD_LIB:
1150 {
1152 break;
1153 }
1155 {
1157 LIB_SYMBOL* symbol = GetSelectedSymbol();
1158
1159 wxCHECK2( tbl && symbol, break );
1160
1161 const SYMBOL_LIB_TABLE_ROW* row = tbl->FindRow( symbol->GetLibId().GetLibNickname() );
1162
1163 if( !row )
1164 return;
1165
1166 wxString libfullname = row->GetFullURI( true );
1167
1168 wxString lib( mail.GetPayload() );
1169 wxLogTrace( "KICAD_LIB_WATCH", "Received refresh symbol request for %s, current symbols "
1170 "is %s", lib, libfullname );
1171
1172 if( lib == libfullname )
1173 {
1174 wxLogTrace( "KICAD_LIB_WATCH", "Refreshing symbol %s", symbol->GetName() );
1177 }
1178
1179 break;
1180 }
1181 default:;
1182 }
1183}
const char * name
constexpr EDA_IU_SCALE schIUScale
Definition base_units.h:114
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
Definition bitmap.cpp:104
@ library_browser
BOX2< VECTOR2I > BOX2I
Definition box2.h:922
BOX2< VECTOR2D > BOX2D
Definition box2.h:923
static TOOL_ACTION toggleGrid
Definition actions.h:197
static TOOL_ACTION showDatasheet
Definition actions.h:266
static TOOL_ACTION zoomFitScreen
Definition actions.h:141
Manage TOOL_ACTION objects.
void SetConditions(const TOOL_ACTION &aAction, const ACTION_CONDITIONS &aConditions)
Set the conditions the UI elements for activating a specific tool action should use for determining t...
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
WINDOW_SETTINGS m_Window
constexpr void SetOrigin(const Vec &pos)
Definition box2.h:237
constexpr void SetSize(const SizeVec &size)
Definition box2.h:248
Handle actions that are shared between different applications.
Handles action that are shared between different applications.
int ShowModal() override
virtual APP_SETTINGS_BASE * config() const
Return the settings object used in SaveSettings(), and is overloaded in KICAD_MANAGER_FRAME.
virtual void setupUIConditions()
Setup the UI conditions for the various actions and their controls in this frame.
TOOLBAR_SETTINGS * m_toolbarSettings
wxString m_configName
wxAuiManager m_auimgr
virtual void RecreateToolbars()
bool ProcessEvent(wxEvent &aEvent) override
Override the default process event handler to implement the auto save feature.
ACTION_TOOLBAR * m_tbTopMain
wxString m_aboutTitle
void ReCreateMenuBar()
Recreate the menu bar.
int ScoreTerms(std::vector< SEARCH_TERM > &aWeightedTerms)
bool Find(const wxString &aTerm, int &aMatchersTriggered, int &aPosition)
Look in all existing matchers, return the earliest match of any of the existing.
virtual void ClearMsgPanel()
Clear all messages from the message panel.
COLOR_SETTINGS * m_colorSettings
void setupUnits(APP_SETTINGS_BASE *aCfg)
GAL_DISPLAY_OPTIONS_IMPL & GetGalDisplayOptions()
Return a reference to the gal rendering options used by GAL for rendering.
EDA_MSG_PANEL * m_messagePanel
virtual void SetScreen(BASE_SCREEN *aScreen)
void AppendMsgPanel(const wxString &aTextUpper, const wxString &aTextLower, int aPadding=6)
Append a message to the message 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.
void SetEventDispatcher(TOOL_DISPATCHER *aEventDispatcher)
Set a dispatcher that processes events and forwards them to tools.
void SetStealsFocus(bool aStealsFocus)
Set whether focus is taken on certain events (mouseover, keys, etc).
Specialization of the wxAuiPaneInfo class for KiCad panels.
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition eda_text.h:97
Class that groups generic conditions for editor states.
SELECTION_CONDITION GridVisible()
Create a functor testing if the grid is visible in a frame.
void ReadWindowSettings(WINDOW_SETTINGS &aCfg)
Read GAL config options from application-level config.
void MessageSet(const wxString &message)
Add a message (in bold) to message list.
void AddHTML_Text(const wxString &message)
Add HTML text (without any change) to message list.
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
double m_gridMinSpacing
Whether or not to draw the coordinate system axes.
bool m_axesEnabled
Crosshair drawing mode.
void SetAxesColor(const COLOR4D &aAxesColor)
Set the axes color.
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
Definition view.cpp:298
virtual void Remove(VIEW_ITEM *aItem)
Remove a VIEW_ITEM from the view.
Definition view.cpp:341
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
Definition view.cpp:1561
static void CreateNilUuids(bool aNil=true)
A performance optimization which disables/enables the generation of pseudo-random UUIDs.
Definition kiid.cpp:288
Carry a payload from one KIWAY_PLAYER to another within a PROJECT.
std::string & GetPayload()
Return the payload, which can be any text but it typically self identifying s-expression.
MAIL_T Command()
Returns the MAIL_T associated with this mail.
bool Destroy() override
Our version of Destroy() which is virtual from wxWidgets.
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition kiway.h:286
virtual PROJECT & Prj() const
Return the PROJECT associated with this KIWAY.
Definition kiway.cpp:192
A logical library item identifier and consists of various portions much like a URI.
Definition lib_id.h:49
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 LIB_ID & GetLibId() const override
Definition lib_symbol.h:154
SCH_FIELD & GetDatasheetField()
Return reference to the datasheet field.
Definition lib_symbol.h:348
bool IsDerived() const
Definition lib_symbol.h:206
wxString GetName() const override
Definition lib_symbol.h:148
const std::vector< wxString > & GetBodyStyleNames() const
Definition lib_symbol.h:607
bool HasDeMorganBodyStyles() const override
Definition lib_symbol.h:604
LIB_SYMBOL_SPTR SharedPtr() const
http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/sp_techniques.html#weak_without_shared.
Definition lib_symbol.h:95
int GetBodyStyleCount() const override
Definition lib_symbol.h:596
int GetUnitCount() const override
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
LIB_SYMBOL_REF & GetParent()
Definition lib_symbol.h:117
wxString GetUnitDisplayName(int aUnit, bool aLabel) const override
Return the user-defined display name for aUnit for symbols with units.
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...
bool GetIsVisible() const
std::vector< wxString > GetLogicalLibs()
Return the logical library names, all of them that are pertinent to a look up done on this LIB_TABLE.
static const wxString GetPinningSymbol()
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
Definition locale_io.h:41
virtual COMMON_SETTINGS * GetCommonSettings() const
Definition pgm_base.cpp:576
The backing store for a PROJECT, in JSON format.
static SYMBOL_LIB_TABLE * SchSymbolLibTable(PROJECT *aProject)
Accessor for project symbol library table.
virtual PROJECT_FILE & GetProjectFile() const
Definition project.h:204
Gather all the actions that are shared by tools.
Definition sch_actions.h:40
static TOOL_ACTION showElectricalTypes
static TOOL_ACTION showPinNumbers
static TOOL_ACTION addSymbolToSchematic
A shim class between EDA_DRAW_FRAME and several derived classes: SYMBOL_EDIT_FRAME,...
SCH_BASE_FRAME(KIWAY *aKiway, wxWindow *aParent, FRAME_T aWindowType, const wxString &aTitle, const wxPoint &aPosition, const wxSize &aSize, long aStyle, const wxString &aFrameName)
SCH_RENDER_SETTINGS * GetRenderSettings()
void doCloseWindow() override
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
void CommonSettingsChanged(int aFlags) override
Notification event that some of the common (suite-wide) settings have changed.
void SyncView()
Mark all items for refresh.
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
const wxString & GetErrors() const
void Start()
Spin up threads to load all the libraries in m_nicknames.
bool Join()
Finalize the threads and combines the output into the target output map.
Handle actions for the various symbol editor and viewers.
Hold a record identifying a symbol library accessed by the appropriate symbol library SCH_IO object i...
void GetSubLibraryNames(std::vector< wxString > &aNames) const
bool SupportsSubLibraries() const
void LoadSymbolLib(std::vector< LIB_SYMBOL * > &aAliasList, const wxString &aNickname, bool aPowerSymbolsOnly=false)
void EnumerateSymbolLib(const wxString &aNickname, wxArrayString &aAliasNames, bool aPowerSymbolsOnly=false)
Return a list of symbol alias names contained within the library given by aNickname.
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...
Symbol library viewer main window.
void OnLibFilter(wxCommandEvent &aEvent)
std::unique_ptr< LIB_SYMBOL > m_previewItem
void CloseLibraryViewer(wxCommandEvent &event)
void onSelectNextSymbol(wxCommandEvent &aEvent)
void SetSelectedLibrary(const wxString &aLibName, const wxString &aSubLibName=wxEmptyString)
Set the selected library in the library window.
void ClickOnLibList(wxCommandEvent &event)
void onUpdateUnitChoice(wxUpdateUIEvent &aEvent)
SYMBOL_VIEWER_FRAME(KIWAY *aKiway, wxWindow *aParent)
void DClickOnSymbolList(wxCommandEvent &event)
void OnActivate(wxActivateEvent &event)
Called when the frame is activated to reload the libraries and symbol lists that can be changed by th...
void OnSymFilter(wxCommandEvent &aEvent)
void setupUIConditions() override
Setup the UI conditions for the various actions and their controls in this frame.
void SetSelectedSymbol(const wxString &aSymbolName)
Set the selected symbol.
void KiwayMailIn(KIWAY_EXPRESS &mail) override
Receive KIWAY_EXPRESS messages from other players.
bool ReCreateLibList()
Create o recreates a sorted list of currently loaded libraries.
SELECTION & GetCurrentSelection() override
Get the current selection from the canvas area.
void ClickOnSymbolList(wxCommandEvent &event)
const BOX2I GetDocumentExtents(bool aIncludeAllVisible=true) const override
Return bounding box of document with option to not include some items.
void SetUnitAndBodyStyle(int aUnit, int aBodyStyle)
Set unit and convert, and set flag preventing them from automatically resetting to 1.
wxSearchCtrl * m_symbolFilter
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
WINDOW_SETTINGS * GetWindowSettings(APP_SETTINGS_BASE *aCfg) override
Return a pointer to the window settings for this frame.
void OnCharHook(wxKeyEvent &aEvent) override
Capture the key event before it is sent to the GUI.
LIB_SYMBOL * GetSelectedSymbol() const
void onSelectSymbolUnit(wxCommandEvent &aEvent)
void OnSize(wxSizeEvent &event) override
Recalculate the size of toolbars and display panel when the frame size changes.
void onSelectPreviousSymbol(wxCommandEvent &aEvent)
void onUpdateBodyStyleChoice(wxUpdateUIEvent &aEvent)
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
void onSelectSymbolBodyStyle(wxCommandEvent &aEvent)
bool m_selection_changed
Updated to true if a list rewrite on GUI activation resulted in the symbol selection changing,...
bool ReCreateSymbolList()
Create or recreate the list of symbols in the currently selected library.
void CommonSettingsChanged(int aFlags) override
Notification event that some of the common (suite-wide) settings have changed.
TOOL_MANAGER * m_toolManager
TOOL_DISPATCHER * m_toolDispatcher
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
ACTIONS * m_actions
Master controller class:
This file is part of the common library.
#define CHECK(x)
#define ENABLE(x)
#define DEFAULT_LINE_WIDTH_MILS
The default wire width in mils. (can be changed in preference menu)
#define _(s)
#define KICAD_DEFAULT_DRAWFRAME_STYLE
#define LIB_VIEW_FRAME_NAME
Abstract pattern-matching tool and implementations.
@ CTX_LIBITEM
@ ID_LIBVIEW_SELECT_UNIT_NUMBER
Definition eeschema_id.h:71
@ ID_LIBVIEW_SYM_LIST
Definition eeschema_id.h:76
@ ID_LIBVIEW_NEXT
Definition eeschema_id.h:69
@ ID_LIBVIEW_SELECT_BODY_STYLE
Definition eeschema_id.h:72
@ ID_LIBVIEW_LIB_FILTER
Definition eeschema_id.h:73
@ ID_LIBVIEW_LIB_LIST
Definition eeschema_id.h:74
@ ID_LIBVIEW_SYM_FILTER
Definition eeschema_id.h:75
@ ID_LIBVIEW_PREVIOUS
Definition eeschema_id.h:70
@ FRAME_SCH_VIEWER
Definition frame_type.h:36
PROJECT & Prj()
Definition kicad.cpp:612
@ LAYER_SCHEMATIC_GRID_AXES
Definition layer_ids.h:486
@ MAIL_REFRESH_SYMBOL
Definition mail_type.h:59
@ MAIL_RELOAD_LIB
Definition mail_type.h:57
Message panel definition file.
@ ALL
All except INITIAL_ADD.
Definition view_item.h:59
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
Definition kicad_algo.h:100
#define _HKI(x)
Definition page_info.cpp:44
static PGM_BASE * process
Definition pgm_base.cpp:910
PGM_BASE & Pgm()
The global program "get" accessor.
Definition pgm_base.cpp:913
see class PGM_BASE
CITER next(CITER it)
Definition ptree.cpp:124
@ BASE
Definition sch_item.h:59
COLOR_SETTINGS * GetColorSettings(const wxString &aName)
T * GetToolbarSettings(const wxString &aFilename)
T * GetAppSettings(const char *aFilename)
KIWAY Kiway(KFCTL_STANDALONE)
std::vector< FAB_LAYER_COLOR > dummy
wxString UnescapeString(const wxString &aSource)
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
@ CTX_LIBID
std::vector< wxString > pinned_symbol_libs
Store the common settings that are saved and loaded for each window / frame.
#define DEMORGAN_ALT
#define DEMORGAN_STD
#define ENVVARS_CHANGED
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:695
void SetAuiPaneSize(wxAuiManager &aManager, wxAuiPaneInfo &aPane, int aWidth, int aHeight)
Sets the size of an AUI pane, working around http://trac.wxwidgets.org/ticket/13180.
#define PR_CAN_ABORT