LIB_VIEW_FRAME::LIB_VIEW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType, const wxString& aLibraryName ) : SCH_BASE_FRAME( aKiway, aParent, aFrameType, _( "Symbol Library Browser" ), wxDefaultPosition, wxDefaultSize, aFrameType == FRAME_SCH_VIEWER_MODAL ? LIB_VIEW_STYLE_MODAL : LIB_VIEW_STYLE, aFrameType == FRAME_SCH_VIEWER_MODAL ? LIB_VIEW_NAME_MODAL : LIB_VIEW_NAME ), m_libList( nullptr ), m_cmpList( nullptr ), m_previewItem( nullptr ) { wxASSERT( aFrameType == FRAME_SCH_VIEWER || aFrameType == FRAME_SCH_VIEWER_MODAL ); if( aFrameType == FRAME_SCH_VIEWER_MODAL ) SetModal( true ); // Force the frame name used in config. the lib viewer frame has a name // depending on aFrameType (needed to identify the frame by wxWidgets), // but only one configuration is preferable. m_configFrameName = LIB_VIEW_NAME; // Give an icon wxIcon icon; icon.CopyFromBitmap( KiBitmap( library_browse_xpm ) ); SetIcon( icon ); m_hotkeysDescrList = g_Viewlib_Hotkeys_Descr; m_libListWidth = 200; m_cmpListWidth = 300; m_listPowerCmpOnly = false; SetShowElectricalType( true ); // Initialize grid id to the default value (50 mils): m_LastGridSizeId = ID_POPUP_GRID_LEVEL_50 - ID_POPUP_GRID_LEVEL_1000; SetScreen( new SCH_SCREEN( aKiway ) ); GetScreen()->m_Center = true; // Axis origin centered on screen. LoadSettings( config() ); SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y ); // Menu bar is not mandatory: uncomment/comment the next line // to add/remove the menubar ReCreateMenuBar(); ReCreateHToolbar(); ReCreateVToolbar(); m_libList = new wxListBox( this, ID_LIBVIEW_LIB_LIST, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_HSCROLL | wxNO_BORDER ); m_cmpList = new wxListBox( this, ID_LIBVIEW_CMP_LIST, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_HSCROLL | wxNO_BORDER ); if( aLibraryName.empty() ) { ReCreateListLib(); } else { m_libraryName = aLibraryName; m_entryName.Clear(); m_unit = 1; m_convert = 1; } m_selection_changed = false; DisplayLibInfos(); m_auimgr.SetManagedWindow( this ); m_auimgr.SetArtProvider( new EDA_DOCKART( this ) ); // Manage main toolbar m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" ).Top().Layer(6) ); m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ).Bottom().Layer(6) ); m_auimgr.AddPane( m_libList, EDA_PANE().Palette().Name( "Libraries" ).Left().Layer(3) .CaptionVisible( false ).MinSize( 80, -1 ).BestSize( m_libListWidth, -1 ) ); m_auimgr.AddPane( m_cmpList, EDA_PANE().Palette().Name( "Symbols" ).Left().Layer(1) .CaptionVisible( false ).MinSize( 80, -1 ).BestSize( m_cmpListWidth, -1 ) ); m_auimgr.AddPane( m_canvas->GetWindow(), EDA_PANE().Canvas().Name( "DrawFrame" ).Center() ); m_auimgr.GetPane( m_libList ).Show( aLibraryName.empty() ); m_auimgr.Update(); setupTools(); GetToolManager()->RunAction( "common.Control.gridPreset", true, m_LastGridSizeId ); GetToolManager()->RunAction( "common.Control.zoomFitScreen", true ); if( !IsModal() ) // For modal mode, calling ShowModal() will show this frame { Raise(); Show( true ); } SyncView(); GetGalCanvas()->GetViewControls()->SetSnapping( true ); GetGalCanvas()->GetGAL()->SetAxesEnabled( true ); GetGalCanvas()->GetGAL()->SetGridVisibility( IsGridVisible() ); // Set the working/draw area size to display a symbol to a reasonable value: // A 450mm x 450mm with a origin at the area center looks like a large working area double max_size_x = Millimeter2iu( 450 ); double max_size_y = Millimeter2iu( 450 ); BOX2D bbox; bbox.SetOrigin( -max_size_x /2, -max_size_y/2 ); bbox.SetSize( max_size_x, max_size_y ); GetCanvas()->GetView()->SetBoundary( bbox ); }
void EDA_DRAW_FRAME::OnUpdateGrid( wxUpdateUIEvent& aEvent ) { wxString tool_tip = IsGridVisible() ? _( "Hide grid" ) : _( "Show grid" ); aEvent.Check( IsGridVisible() ); m_optionsToolBar->SetToolShortHelp( ID_TB_OPTIONS_SHOW_GRID, tool_tip ); }
void EDA_DRAW_FRAME::OnToggleGridState( wxCommandEvent& aEvent ) { SetGridVisibility( !IsGridVisible() ); if( IsGalCanvasActive() ) { GetGalCanvas()->GetGAL()->SetGridVisibility( IsGridVisible() ); GetGalCanvas()->GetView()->MarkTargetDirty( KIGFX::TARGET_NONCACHED ); } m_canvas->Refresh(); }
void EDA_DRAW_FRAME::UseGalCanvas() { KIGFX::GAL* gal = GetGalCanvas()->GetGAL(); // Set up grid settings gal->SetGridVisibility( IsGridVisible() ); gal->SetGridSize( VECTOR2D( GetScreen()->GetGridSize() ) ); gal->SetGridOrigin( VECTOR2D( GetGridOrigin() ) ); // Transfer EDA_DRAW_PANEL settings KIGFX::VIEW_CONTROLS* viewControls = GetGalCanvas()->GetViewControls(); viewControls->EnableCursorWarping( !m_canvas->GetEnableZoomNoCenter() ); viewControls->EnableMousewheelPan( m_canvas->GetEnableMousewheelPan() ); viewControls->EnableAutoPan( m_canvas->GetEnableAutoPan() ); m_canvas->SetEvtHandlerEnabled( false ); GetGalCanvas()->SetEvtHandlerEnabled( true ); GetGalCanvas()->StartDrawing(); // Switch panes // JEY TODO: drop down to a single pane.... m_auimgr.GetPane( "DrawFrame" ).Show( false ); m_auimgr.GetPane( "DrawFrameGal" ).Show( true ); m_auimgr.Update(); // Reset current tool on switch(); SetNoToolSelected(); }
void EDA_DRAW_FRAME::SaveSettings( wxConfigBase* aCfg ) { EDA_BASE_FRAME::SaveSettings( aCfg ); aCfg->Write( m_FrameName + CursorShapeEntryKeyword, m_cursorShape ); aCfg->Write( m_FrameName + ShowGridEntryKeyword, IsGridVisible() ); aCfg->Write( m_FrameName + GridColorEntryKeyword, ( long ) GetGridColor() ); aCfg->Write( m_FrameName + LastGridSizeIdKeyword, ( long ) m_LastGridSizeId ); }
void EDA_DRAW_FRAME::UseGalCanvas( bool aEnable ) { KIGFX::VIEW* view = GetGalCanvas()->GetView(); KIGFX::GAL* gal = GetGalCanvas()->GetGAL(); double zoomFactor = gal->GetWorldScale() / gal->GetZoomFactor(); // Display the same view after canvas switching if( aEnable ) { BASE_SCREEN* screen = GetScreen(); // Switch to GAL rendering if( !IsGalCanvasActive() ) { // Set up viewport double zoom = 1.0 / ( zoomFactor * m_canvas->GetZoom() ); view->SetScale( zoom ); view->SetCenter( VECTOR2D( m_canvas->GetScreenCenterLogicalPosition() ) ); } // Set up grid settings gal->SetGridVisibility( IsGridVisible() ); gal->SetGridSize( VECTOR2D( screen->GetGridSize().x, screen->GetGridSize().y ) ); gal->SetGridOrigin( VECTOR2D( GetGridOrigin() ) ); } else { // Switch to standard rendering if( IsGalCanvasActive() ) { // Change view settings only if GAL was active previously double zoom = 1.0 / ( zoomFactor * view->GetScale() ); m_canvas->SetZoom( zoom ); VECTOR2D center = view->GetCenter(); RedrawScreen( wxPoint( center.x, center.y ), false ); } } m_canvas->SetEvtHandlerEnabled( !aEnable ); GetGalCanvas()->SetEvtHandlerEnabled( aEnable ); // Switch panes m_auimgr.GetPane( wxT( "DrawFrame" ) ).Show( !aEnable ); m_auimgr.GetPane( wxT( "DrawFrameGal" ) ).Show( aEnable ); m_auimgr.Update(); // Reset current tool on switch(); SetToolID( ID_NO_TOOL_SELECTED, wxCURSOR_DEFAULT, wxEmptyString ); m_galCanvasActive = aEnable; }
void EDA_DRAW_FRAME::UseGalCanvas( bool aEnable ) { KIGFX::VIEW* view = GetGalCanvas()->GetView(); KIGFX::GAL* gal = GetGalCanvas()->GetGAL(); // Display the same view after canvas switching if( aEnable ) { // Switch to GAL renderer from legacy if( !m_galCanvasActive ) { // Set up viewport double zoomFactor = gal->GetWorldScale() / gal->GetZoomFactor(); double zoom = 1.0 / ( zoomFactor * m_canvas->GetZoom() ); view->SetScale( zoom ); view->SetCenter( VECTOR2D( m_canvas->GetScreenCenterLogicalPosition() ) ); } // Set up grid settings gal->SetGridVisibility( IsGridVisible() ); gal->SetGridSize( VECTOR2D( GetScreen()->GetGridSize() ) ); gal->SetGridOrigin( VECTOR2D( GetGridOrigin() ) ); // Transfer EDA_DRAW_PANEL settings GetGalCanvas()->GetViewControls()->EnableCursorWarping( !m_canvas->GetEnableZoomNoCenter() ); GetGalCanvas()->GetViewControls()->EnableMousewheelPan( m_canvas->GetEnableMousewheelPan() ); GetGalCanvas()->GetViewControls()->EnableAutoPan( m_canvas->GetEnableAutoPan() ); } else if( m_galCanvasActive ) { // Switch to legacy renderer from GAL double zoomFactor = gal->GetWorldScale() / gal->GetZoomFactor(); // TODO replace it with EDA_DRAW_PANEL_GAL::GetLegacyZoom m_canvas->SetZoom( 1.0 / ( zoomFactor * view->GetScale() ) ); VECTOR2D center = view->GetCenter(); AdjustScrollBars( wxPoint( center.x, center.y ) ); } m_canvas->SetEvtHandlerEnabled( !aEnable ); GetGalCanvas()->SetEvtHandlerEnabled( aEnable ); // Switch panes m_auimgr.GetPane( wxT( "DrawFrame" ) ).Show( !aEnable ); m_auimgr.GetPane( wxT( "DrawFrameGal" ) ).Show( aEnable ); m_auimgr.Update(); // Reset current tool on switch(); SetNoToolSelected(); m_galCanvasActive = aEnable; }
void EDA_DRAW_FRAME::SaveSettings( wxConfigBase* aCfg ) { EDA_BASE_FRAME::SaveSettings( aCfg ); wxString baseCfgName = ConfigBaseName(); aCfg->Write( baseCfgName + ShowGridEntryKeyword, IsGridVisible() ); aCfg->Write( baseCfgName + GridColorEntryKeyword, GetGridColor().ToColour().GetAsString( wxC2S_CSS_SYNTAX ) ); aCfg->Write( baseCfgName + LastGridSizeIdKeyword, ( long ) m_LastGridSizeId ); aCfg->Write( baseCfgName + FirstRunShownKeyword, m_firstRunDialogSetting ); if( GetScreen() ) aCfg->Write( baseCfgName + MaxUndoItemsEntry, long( GetScreen()->GetMaxUndoItems() ) ); m_galDisplayOptions->WriteConfig( aCfg, baseCfgName + GalDisplayOptionsKeyword ); }
void SCH_EDIT_FRAME::OnSetOptions( wxCommandEvent& event ) { wxArrayString units; GRIDS grid_list; GetScreen()->GetGrids( grid_list ); DIALOG_EESCHEMA_OPTIONS dlg( this ); units.Add( GetUnitsLabel( INCHES ) ); units.Add( GetUnitsLabel( MILLIMETRES ) ); dlg.SetUnits( units, g_UserUnit ); dlg.SetGridSizes( grid_list, GetScreen()->GetGridId() ); dlg.SetBusWidth( GetDefaultBusThickness() ); dlg.SetLineWidth( GetDefaultLineThickness() ); dlg.SetTextSize( GetDefaultLabelSize() ); dlg.SetRepeatHorizontal( g_RepeatStep.x ); dlg.SetRepeatVertical( g_RepeatStep.y ); dlg.SetRepeatLabel( g_RepeatDeltaLabel ); dlg.SetAutoSaveInterval( GetAutoSaveInterval() / 60 ); dlg.SetRefIdSeparator( LIB_COMPONENT::GetSubpartIdSeparator( ), LIB_COMPONENT::GetSubpartFirstId() ); dlg.SetShowGrid( IsGridVisible() ); dlg.SetShowHiddenPins( m_showAllPins ); dlg.SetEnableMiddleButtonPan( m_canvas->GetEnableMiddleButtonPan() ); dlg.SetEnableZoomNoCenter( m_canvas->GetEnableZoomNoCenter() ); dlg.SetMiddleButtonPanLimited( m_canvas->GetMiddleButtonPanLimited() ); dlg.SetEnableAutoPan( m_canvas->GetEnableAutoPan() ); dlg.SetEnableHVBusOrientation( GetForceHVLines() ); dlg.SetShowPageLimits( g_ShowPageLimits ); dlg.Layout(); dlg.Fit(); dlg.SetMinSize( dlg.GetSize() ); const TEMPLATE_FIELDNAMES& tfnames = m_TemplateFieldNames.GetTemplateFieldNames(); for( unsigned i=0; i<tfnames.size(); ++i ) { DBG(printf("dlg.SetFieldName(%d, '%s')\n", i, TO_UTF8( tfnames[i].m_Name) );) dlg.SetFieldName( i, tfnames[i].m_Name ); }
/* * Function IsElementVisible * tests whether a given element category is visible * aItemIdVisible is an item id from the enum GERBER_VISIBLE_ID * return true if the element is visible. */ bool GERBVIEW_FRAME::IsElementVisible( GERBER_VISIBLE_ID aItemIdVisible ) const { switch( aItemIdVisible ) { case DCODES_VISIBLE: return m_DisplayOptions.m_DisplayDCodes; break; case NEGATIVE_OBJECTS_VISIBLE: return m_DisplayOptions.m_DisplayNegativeObjects; break; case GERBER_GRID_VISIBLE: return IsGridVisible(); break; default: wxLogDebug( wxT( "GERBVIEW_FRAME::IsElementVisible(): bad arg %d" ), aItemIdVisible ); } return true; }
LIB_EDIT_FRAME::LIB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) : SCH_BASE_FRAME( aKiway, aParent, FRAME_SCH_LIB_EDITOR, _( "Library Editor" ), wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, LIB_EDIT_FRAME_NAME ) { m_showAxis = true; // true to draw axis SetShowDeMorgan( false ); m_DrawSpecificConvert = true; m_DrawSpecificUnit = false; m_hotkeysDescrList = g_Libedit_Hotkeys_Descr; m_SyncPinEdit = false; m_repeatPinStep = DEFAULT_REPEAT_OFFSET_PIN; SetShowElectricalType( true ); m_FrameSize = ConvertDialogToPixels( wxSize( 500, 350 ) ); // default in case of no prefs m_my_part = NULL; m_treePane = nullptr; m_libMgr = nullptr; m_unit = 1; m_convert = 1; m_AboutTitle = "LibEdit"; // Delayed initialization if( g_LastTextSize == -1 ) g_LastTextSize = GetDefaultTextSize(); // Initialize grid id to the default value 50 mils: m_LastGridSizeId = ID_POPUP_GRID_LEVEL_50 - ID_POPUP_GRID_LEVEL_1000; wxIcon icon; icon.CopyFromBitmap( KiBitmap( icon_libedit_xpm ) ); SetIcon( icon ); LoadSettings( config() ); // Ensure axis are always drawn KIGFX::GAL_DISPLAY_OPTIONS& gal_opts = GetGalDisplayOptions(); gal_opts.m_axesEnabled = true; m_dummyScreen = new SCH_SCREEN( aKiway ); SetScreen( m_dummyScreen ); GetScreen()->m_Center = true; GetScreen()->SetMaxUndoItems( m_UndoRedoCountMax ); SetCrossHairPosition( wxPoint( 0, 0 ) ); SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y ); m_libMgr = new LIB_MANAGER( *this ); SyncLibraries( true ); m_treePane = new SYMBOL_TREE_PANE( this, m_libMgr ); setupTools(); ReCreateMenuBar(); ReCreateHToolbar(); ReCreateVToolbar(); ReCreateOptToolbar(); updateTitle(); DisplayCmpDoc(); RebuildSymbolUnitsList(); m_auimgr.SetManagedWindow( this ); m_auimgr.SetArtProvider( new EDA_DOCKART( this ) ); m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" ).Top().Layer(6) ); m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ).Bottom().Layer(6) ); m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( "OptToolbar" ).Left().Layer(3) ); m_auimgr.AddPane( m_treePane, EDA_PANE().Palette().Name( "ComponentTree" ).Left().Layer(1) .Caption( _( "Libraries" ) ).MinSize( 250, -1 ) .BestSize( m_defaultLibWidth, -1 ).Resizable() ); m_auimgr.AddPane( m_drawToolBar, EDA_PANE().VToolbar().Name( "ToolsToolbar" ).Right().Layer(1) ); m_auimgr.AddPane( m_canvas->GetWindow(), wxAuiPaneInfo().Name( "DrawFrame" ).CentrePane() ); m_auimgr.Update(); GetToolManager()->RunAction( "common.Control.gridPreset", true, m_LastGridSizeId ); Raise(); Show( true ); Bind( wxEVT_COMMAND_MENU_SELECTED, &LIB_EDIT_FRAME::OnConfigurePaths, this, ID_PREFERENCES_CONFIGURE_PATHS ); Bind( wxEVT_COMMAND_MENU_SELECTED, &LIB_EDIT_FRAME::OnEditSymbolLibTable, this, ID_EDIT_SYM_LIB_TABLE ); m_toolManager->RunAction( ACTIONS::zoomFitScreen, true ); SyncView(); GetGalCanvas()->GetViewControls()->SetSnapping( true ); GetGalCanvas()->GetView()->UseDrawPriority( true ); GetGalCanvas()->GetGAL()->SetGridVisibility( IsGridVisible() ); GetGalCanvas()->GetGAL()->SetAxesEnabled( true ); // Set the working/draw area size to display a symbol to a reasonable value: // A 600mm x 600mm with a origin at the area center looks like a large working area double max_size_x = Millimeter2iu( 600 ); double max_size_y = Millimeter2iu( 600 ); BOX2D bbox; bbox.SetOrigin( -max_size_x /2, -max_size_y/2 ); bbox.SetSize( max_size_x, max_size_y ); GetCanvas()->GetView()->SetBoundary( bbox ); }
void PL_EDITOR_FRAME::ReCreateMenuBar() { // Create and try to get the current menubar wxMenuBar* menuBar = GetMenuBar(); if( !menuBar ) menuBar = new wxMenuBar(); // Delete all existing menus so they can be rebuilt. // This allows language changes of the menu text on the fly. menuBar->Freeze(); while( menuBar->GetMenuCount() ) delete menuBar->Remove( 0 ); // Recreate all menus: // Menu File: wxMenu* fileMenu = new wxMenu; // Load AddMenuItem( fileMenu, wxID_NEW, _( "&New Page Layout Design" ), wxEmptyString, KiBitmap( pagelayout_new_xpm ) ); AddMenuItem( fileMenu, wxID_OPEN, _( "Load Page Layout &File" ), wxEmptyString, KiBitmap( pagelayout_load_xpm ) ); AddMenuItem( fileMenu, ID_LOAD_DEFAULT_PAGE_LAYOUT, _( "Load &Default Page Layout" ), wxEmptyString, KiBitmap( pagelayout_load_default_xpm ) ); // Recent gerber files static wxMenu* openRecentMenu; // Add this menu to list menu managed by m_fileHistory // (the file history will be updated when adding/removing files in history if( openRecentMenu ) Kiface().GetFileHistory().RemoveMenu( openRecentMenu ); openRecentMenu = new wxMenu(); Kiface().GetFileHistory().UseMenu( openRecentMenu ); Kiface().GetFileHistory().AddFilesToMenu(); AddMenuItem( fileMenu, openRecentMenu, wxID_ANY, _( "Open &Recent Page Layout File" ), wxEmptyString, KiBitmap( pagelayout_recent_xpm ) ); fileMenu->AppendSeparator(); // Save current sheet AddMenuItem( fileMenu, wxID_SAVE, _( "&Save Page Layout Design" ), wxEmptyString, KiBitmap( save_xpm ) ); // Save current sheet as AddMenuItem( fileMenu, wxID_SAVEAS, _( "Save Page Layout Design &As" ), wxEmptyString, KiBitmap( save_as_xpm ) ); // Print fileMenu->AppendSeparator(); AddMenuItem( fileMenu, wxID_PRINT, _( "&Print" ), wxEmptyString, KiBitmap( print_button_xpm ) ); AddMenuItem( fileMenu, wxID_PREVIEW, _( "Print Pre&view" ), wxEmptyString, KiBitmap( print_button_xpm ) ); // Separator fileMenu->AppendSeparator(); // Exit AddMenuItem( fileMenu, wxID_EXIT, _( "&Close" ), _( "&Close Page Layout Editor" ), KiBitmap( exit_xpm ) ); // Menu for preferences wxMenu* preferencesMenu = new wxMenu; AddMenuItem( preferencesMenu, ID_MENU_SWITCH_BGCOLOR, GetDrawBgColor() == WHITE ? _( "&BackGround Black" ) : _( "&BackGround White" ), wxEmptyString, KiBitmap( palette_xpm ) ); AddMenuItem( preferencesMenu, ID_MENU_GRID_ONOFF, IsGridVisible() ? _( "Hide &Grid" ) : _( "Show &Grid" ), wxEmptyString, KiBitmap( grid_xpm ) ); // Text editor selection AddMenuItem( preferencesMenu, ID_MENU_PL_EDITOR_SELECT_PREFERED_EDITOR, _( "&Text Editor" ), _( "Select your preferred text editor" ), KiBitmap( editor_xpm ) ); // Language submenu Pgm().AddMenuLanguageList( preferencesMenu ); // Hotkey submenu AddHotkeyConfigMenu( preferencesMenu ); // Menu Help wxMenu* helpMenu = new wxMenu; // Version info AddHelpVersionInfoMenuEntry( helpMenu ); // Contents AddMenuItem( helpMenu, wxID_HELP, _( "Page Layout Editor &Manual" ), _( "Open the Page Layout Editor Manual" ), KiBitmap( online_help_xpm ) ); AddMenuItem( helpMenu, wxID_INDEX, _( "&Getting Started in KiCad" ), _( "Open \"Getting Started in KiCad\" guide for beginners" ), KiBitmap( help_xpm ) ); // Separator helpMenu->AppendSeparator(); // About Kicad AddMenuItem( helpMenu, wxID_ABOUT, _( "&About Kicad" ), _( "About KiCad" ), KiBitmap( info_xpm ) ); // Append menus to the menubar menuBar->Append( fileMenu, _( "&File" ) ); menuBar->Append( preferencesMenu, _( "&Preferences" ) ); menuBar->Append( helpMenu, _( "&Help" ) ); menuBar->Thaw(); // Associate the menu bar with the frame, if no previous menubar if( GetMenuBar() == NULL ) SetMenuBar( menuBar ); else menuBar->Refresh(); }
void SCH_EDIT_FRAME::ReCreateMenuBar() { EE_SELECTION_TOOL* selTool = m_toolManager->GetTool<EE_SELECTION_TOOL>(); // wxWidgets handles the Mac Application menu behind the scenes, but that means // we always have to start from scratch with a new wxMenuBar. wxMenuBar* oldMenuBar = GetMenuBar(); wxMenuBar* menuBar = new wxMenuBar(); auto modifiedDocumentCondition = [] ( const SELECTION& sel ) { SCH_SHEET_LIST sheetList( g_RootSheet ); return sheetList.IsModified(); }; //-- File menu ----------------------------------------------------------- // CONDITIONAL_MENU* fileMenu = new CONDITIONAL_MENU( false, selTool ); static ACTION_MENU* openRecentMenu; if( Kiface().IsSingle() ) // not when under a project mgr { // Add this menu to list menu managed by m_fileHistory // (the file history will be updated when adding/removing files in history) if( openRecentMenu ) Kiface().GetFileHistory().RemoveMenu( openRecentMenu ); openRecentMenu = new ACTION_MENU(); openRecentMenu->SetTool( selTool ); openRecentMenu->SetTitle( _( "Open Recent" ) ); openRecentMenu->SetIcon( recent_xpm ); Kiface().GetFileHistory().UseMenu( openRecentMenu ); Kiface().GetFileHistory().AddFilesToMenu( openRecentMenu ); fileMenu->AddItem( ACTIONS::doNew, EE_CONDITIONS::ShowAlways ); fileMenu->AddItem( ACTIONS::open, EE_CONDITIONS::ShowAlways ); fileMenu->AddMenu( openRecentMenu, EE_CONDITIONS::ShowAlways ); fileMenu->AddSeparator(); } fileMenu->AddItem( ACTIONS::save, modifiedDocumentCondition ); fileMenu->AddItem( ACTIONS::saveAs, EE_CONDITIONS::ShowAlways ); fileMenu->AddItem( ACTIONS::saveAll, modifiedDocumentCondition ); fileMenu->AddSeparator(); fileMenu->AddItem( ID_APPEND_PROJECT, _( "Append Schematic Sheet Content..." ), _( "Append schematic sheet content from another project to the current sheet" ), add_document_xpm, EE_CONDITIONS::ShowAlways ); fileMenu->AddItem( ID_IMPORT_NON_KICAD_SCH, _( "Import Non KiCad Schematic..." ), _( "Replace current schematic sheet with one imported from another application" ), import_document_xpm, EE_CONDITIONS::ShowAlways ); fileMenu->AddSeparator(); // Import submenu ACTION_MENU* submenuImport = new ACTION_MENU(); submenuImport->SetTool( selTool ); submenuImport->SetTitle( _( "Import" ) ); submenuImport->SetIcon( import_xpm ); submenuImport->Add( _( "Footprint Association File..." ), HELP_IMPORT_FOOTPRINTS, ID_BACKANNO_ITEMS, import_footprint_names_xpm ); fileMenu->AddMenu( submenuImport, EE_CONDITIONS::ShowAlways ); // Export submenu ACTION_MENU* submenuExport = new ACTION_MENU(); submenuExport->SetTool( selTool ); submenuExport->SetTitle( _( "Export" ) ); submenuExport->SetIcon( export_xpm ); submenuExport->Add( _( "Drawing to Clipboard" ), _( "Export drawings to clipboard" ), ID_GEN_COPY_SHEET_TO_CLIPBOARD, copy_xpm ); submenuExport->Add( _( "Netlist..." ), _( "Export netlist file" ), ID_GET_NETLIST, netlist_xpm ); fileMenu->AddMenu( submenuExport, EE_CONDITIONS::ShowAlways ); fileMenu->AddSeparator(); fileMenu->AddItem( ACTIONS::pageSettings, EE_CONDITIONS::ShowAlways ); fileMenu->AddItem( ACTIONS::print, EE_CONDITIONS::ShowAlways ); fileMenu->AddItem( ACTIONS::plot, EE_CONDITIONS::ShowAlways ); fileMenu->AddSeparator(); // Don't use ACTIONS::quit; wxWidgets moves this on OSX and expects to find it via wxID_EXIT fileMenu->AddItem( wxID_EXIT, _( "Quit" ), "", exit_xpm, EE_CONDITIONS::ShowAlways ); //-- Edit menu ----------------------------------------------------------- // CONDITIONAL_MENU* editMenu = new CONDITIONAL_MENU( false, selTool ); auto enableUndoCondition = [ this ] ( const SELECTION& sel ) { return GetScreen() && GetScreen()->GetUndoCommandCount() > 0; }; auto enableRedoCondition = [ this ] ( const SELECTION& sel ) { return GetScreen() && GetScreen()->GetRedoCommandCount() > 0; }; editMenu->AddItem( ACTIONS::undo, enableUndoCondition ); editMenu->AddItem( ACTIONS::redo, enableRedoCondition ); editMenu->AddSeparator(); editMenu->AddItem( ACTIONS::cut, EE_CONDITIONS::NotEmpty ); editMenu->AddItem( ACTIONS::copy, EE_CONDITIONS::NotEmpty ); editMenu->AddItem( ACTIONS::paste, EE_CONDITIONS::Idle ); editMenu->AddItem( ACTIONS::duplicate, EE_CONDITIONS::NotEmpty ); editMenu->AddSeparator(); editMenu->AddItem( EE_ACTIONS::deleteItemCursor, EE_CONDITIONS::ShowAlways ); // Find editMenu->AddSeparator(); editMenu->AddItem( ACTIONS::find, EE_CONDITIONS::ShowAlways ); editMenu->AddItem( ACTIONS::findAndReplace, EE_CONDITIONS::ShowAlways ); editMenu->AddSeparator(); // Update field values editMenu->AddItem( ID_UPDATE_FIELDS, _( "Update Fields from Library..." ), _( "Sets symbol fields to original library values" ), update_fields_xpm, EE_CONDITIONS::ShowAlways ); //-- View menu ----------------------------------------------------------- // CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, selTool ); auto belowRootSheetCondition = [] ( const SELECTION& aSel ) { return g_CurrentSheet->Last() != g_RootSheet; }; auto gridShownCondition = [ this ] ( const SELECTION& aSel ) { return IsGridVisible(); }; auto imperialUnitsCondition = [ this ] ( const SELECTION& aSel ) { return GetUserUnits() == INCHES; }; auto metricUnitsCondition = [ this ] ( const SELECTION& aSel ) { return GetUserUnits() == MILLIMETRES; }; auto fullCrosshairCondition = [ this ] ( const SELECTION& aSel ) { return GetGalDisplayOptions().m_fullscreenCursor; }; auto hiddenPinsCondition = [ this ] ( const SELECTION& aSel ) { return GetShowAllPins(); }; viewMenu->AddItem( EE_ACTIONS::showLibraryBrowser, EE_CONDITIONS::ShowAlways ); viewMenu->AddItem( EE_ACTIONS::navigateHierarchy, EE_CONDITIONS::ShowAlways ); viewMenu->AddItem( EE_ACTIONS::leaveSheet, belowRootSheetCondition ); viewMenu->AddSeparator(); viewMenu->AddItem( ACTIONS::zoomInCenter, EE_CONDITIONS::ShowAlways ); viewMenu->AddItem( ACTIONS::zoomOutCenter, EE_CONDITIONS::ShowAlways ); viewMenu->AddItem( ACTIONS::zoomFitScreen, EE_CONDITIONS::ShowAlways ); viewMenu->AddItem( ACTIONS::zoomTool, EE_CONDITIONS::ShowAlways ); viewMenu->AddItem( ACTIONS::zoomRedraw, EE_CONDITIONS::ShowAlways ); viewMenu->AddSeparator(); viewMenu->AddCheckItem( ACTIONS::toggleGrid, gridShownCondition ); viewMenu->AddItem( ACTIONS::gridProperties, EE_CONDITIONS::ShowAlways ); // Units submenu CONDITIONAL_MENU* unitsSubMenu = new CONDITIONAL_MENU( false, selTool ); unitsSubMenu->SetTitle( _( "&Units" ) ); unitsSubMenu->SetIcon( unit_mm_xpm ); unitsSubMenu->AddCheckItem( ACTIONS::imperialUnits, imperialUnitsCondition ); unitsSubMenu->AddCheckItem( ACTIONS::metricUnits, metricUnitsCondition ); viewMenu->AddMenu( unitsSubMenu ); viewMenu->AddCheckItem( ACTIONS::toggleCursorStyle, fullCrosshairCondition ); viewMenu->AddSeparator(); viewMenu->AddCheckItem( EE_ACTIONS::toggleHiddenPins, hiddenPinsCondition ); #ifdef __APPLE__ viewMenu->AppendSeparator(); #endif //-- Place menu ----------------------------------------------------------- // CONDITIONAL_MENU* placeMenu = new CONDITIONAL_MENU( false, selTool ); placeMenu->AddItem( EE_ACTIONS::placeSymbol, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::placePower, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::drawWire, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::drawBus, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::placeBusWireEntry, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::placeBusBusEntry, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::placeNoConnect, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::placeJunction, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::placeLabel, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::placeGlobalLabel, EE_CONDITIONS::ShowAlways ); placeMenu->AddSeparator(); placeMenu->AddItem( EE_ACTIONS::placeHierarchicalLabel, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::drawSheet, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::importSheetPin, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::placeSheetPin, EE_CONDITIONS::ShowAlways ); placeMenu->AddSeparator(); placeMenu->AddItem( EE_ACTIONS::drawLines, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::placeSchematicText, EE_CONDITIONS::ShowAlways ); placeMenu->AddItem( EE_ACTIONS::placeImage, EE_CONDITIONS::ShowAlways ); //-- Inspect menu ----------------------------------------------- // wxMenu* inspectMenu = new wxMenu; AddMenuItem( inspectMenu, ID_GET_ERC, _( "Electrical Rules &Checker" ), _( "Perform electrical rules check" ), KiBitmap( erc_xpm ) ); //-- Tools menu ----------------------------------------------- // wxMenu* toolsMenu = new wxMenu; prepareToolsMenu( toolsMenu ); //-- Preferences menu ----------------------------------------------- // CONDITIONAL_MENU* prefsMenu = new CONDITIONAL_MENU( false, selTool ); auto acceleratedGraphicsCondition = [ this ] ( const SELECTION& aSel ) { return GetGalCanvas()->GetBackend() == EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL; }; auto standardGraphicsCondition = [ this ] ( const SELECTION& aSel ) { return GetGalCanvas()->GetBackend() == EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO; }; prefsMenu->AddItem( ID_PREFERENCES_CONFIGURE_PATHS, _( "Configure Pa&ths..." ), _( "Edit path configuration environment variables" ), path_xpm, EE_CONDITIONS::ShowAlways ); prefsMenu->AddItem( ID_EDIT_SYM_LIB_TABLE, _( "Manage Symbol Libraries..." ), _( "Edit the global and project symbol library lists" ), library_table_xpm, EE_CONDITIONS::ShowAlways ); prefsMenu->AddItem( wxID_PREFERENCES, AddHotkeyName( _( "&Preferences..." ), g_Eeschema_Hotkeys_Descr, HK_PREFERENCES ), _( "Show preferences for all open tools" ), preference_xpm, EE_CONDITIONS::ShowAlways ); prefsMenu->AddSeparator(); Pgm().AddMenuLanguageList( prefsMenu ); prefsMenu->AddSeparator(); prefsMenu->AddCheckItem( ACTIONS::acceleratedGraphics, acceleratedGraphicsCondition ); prefsMenu->AddCheckItem( ACTIONS::standardGraphics, standardGraphicsCondition ); //-- Menubar ----------------------------------------------- // menuBar->Append( fileMenu, _( "&File" ) ); menuBar->Append( editMenu, _( "&Edit" ) ); menuBar->Append( viewMenu, _( "&View" ) ); menuBar->Append( placeMenu, _( "&Place" ) ); menuBar->Append( inspectMenu, _( "&Inspect" ) ); menuBar->Append( toolsMenu, _( "&Tools" ) ); menuBar->Append( prefsMenu, _( "P&references" ) ); AddStandardHelpMenu( menuBar ); SetMenuBar( menuBar ); delete oldMenuBar; }
void SCH_EDIT_FRAME::OnPreferencesOptions( wxCommandEvent& event ) { wxArrayString units; GRIDS grid_list = GetScreen()->GetGrids(); bool saveProjectConfig = false; DIALOG_EESCHEMA_OPTIONS dlg( this ); units.Add( GetUnitsLabel( INCHES ) ); units.Add( GetUnitsLabel( MILLIMETRES ) ); dlg.SetUnits( units, g_UserUnit ); dlg.SetGridSizes( grid_list, GetScreen()->GetGridCmdId() ); dlg.SetBusWidth( GetDefaultBusThickness() ); dlg.SetLineWidth( GetDefaultLineThickness() ); dlg.SetTextSize( GetDefaultTextSize() ); dlg.SetRepeatHorizontal( GetRepeatStep().x ); dlg.SetRepeatVertical( GetRepeatStep().y ); dlg.SetRepeatLabel( GetRepeatDeltaLabel() ); dlg.SetAutoSaveInterval( GetAutoSaveInterval() / 60 ); dlg.SetRefIdSeparator( LIB_PART::GetSubpartIdSeparator(), LIB_PART::GetSubpartFirstId() ); dlg.SetShowGrid( IsGridVisible() ); dlg.SetShowHiddenPins( m_showAllPins ); dlg.SetEnableMousewheelPan( m_canvas->GetEnableMousewheelPan() ); dlg.SetEnableZoomNoCenter( m_canvas->GetEnableZoomNoCenter() ); dlg.SetEnableAutoPan( m_canvas->GetEnableAutoPan() ); dlg.SetEnableHVBusOrientation( GetForceHVLines() ); dlg.SetShowPageLimits( m_showPageLimits ); dlg.SetFootprintPreview( m_footprintPreview ); dlg.SetAutoplaceFields( m_autoplaceFields ); dlg.SetAutoplaceJustify( m_autoplaceJustify ); dlg.SetAutoplaceAlign( m_autoplaceAlign ); dlg.Layout(); dlg.Fit(); dlg.SetMinSize( dlg.GetSize() ); dlg.SetTemplateFields( m_TemplateFieldNames.GetTemplateFieldNames() ); if( dlg.ShowModal() == wxID_CANCEL ) return; g_UserUnit = (EDA_UNITS_T)dlg.GetUnitsSelection(); wxRealPoint gridsize = grid_list[ (size_t) dlg.GetGridSelection() ].m_Size; m_LastGridSizeId = GetScreen()->SetGrid( gridsize ); int sep, firstId; dlg.GetRefIdSeparator( sep, firstId); if( sep != (int)LIB_PART::GetSubpartIdSeparator() || firstId != (int)LIB_PART::GetSubpartFirstId() ) { LIB_PART::SetSubpartIdNotation( sep, firstId ); saveProjectConfig = true; } SetDefaultBusThickness( dlg.GetBusWidth() ); SetDefaultLineThickness( dlg.GetLineWidth() ); if( dlg.GetTextSize() != GetDefaultTextSize() ) { SetDefaultTextSize( dlg.GetTextSize() ); saveProjectConfig = true; } wxPoint step; step.x = dlg.GetRepeatHorizontal(); step.y = dlg.GetRepeatVertical(); SetRepeatStep( step ); SetRepeatDeltaLabel( dlg.GetRepeatLabel() ); SetAutoSaveInterval( dlg.GetAutoSaveInterval() * 60 ); SetGridVisibility( dlg.GetShowGrid() ); m_showAllPins = dlg.GetShowHiddenPins(); m_canvas->SetEnableMousewheelPan( dlg.GetEnableMousewheelPan() ); m_canvas->SetEnableZoomNoCenter( dlg.GetEnableZoomNoCenter() ); m_canvas->SetEnableAutoPan( dlg.GetEnableAutoPan() ); SetForceHVLines( dlg.GetEnableHVBusOrientation() ); m_showPageLimits = dlg.GetShowPageLimits(); m_autoplaceFields = dlg.GetAutoplaceFields(); m_autoplaceJustify = dlg.GetAutoplaceJustify(); m_autoplaceAlign = dlg.GetAutoplaceAlign(); m_footprintPreview = dlg.GetFootprintPreview(); // Delete all template fieldnames and then restore them using the template field data from // the options dialog DeleteAllTemplateFieldNames(); TEMPLATE_FIELDNAMES newFieldNames = dlg.GetTemplateFields(); for( TEMPLATE_FIELDNAMES::iterator dlgfld = newFieldNames.begin(); dlgfld != newFieldNames.end(); ++dlgfld ) { TEMPLATE_FIELDNAME fld = *dlgfld; AddTemplateFieldName( fld ); } SaveSettings( config() ); // save values shared by eeschema applications. if( saveProjectConfig ) SaveProjectSettings( true ); m_canvas->Refresh( true ); }