void FOOTPRINT_EDIT_FRAME::OnCloseWindow( wxCloseEvent& Event ) { if( GetScreen()->IsModify() && GetBoard()->m_Modules ) { if( !HandleUnsavedChanges( this, _( "Save changes to footprint before closing?" ), [&]()->bool { return SaveFootprint( GetBoard()->m_Modules ); } ) ) { Event.Veto(); return; } } GetGalCanvas()->SetEventDispatcher( NULL ); GetGalCanvas()->StopDrawing(); // Do not show the layer manager during closing to avoid flicker // on some platforms (Windows) that generate useless redraw of items in // the Layer Manger m_auimgr.GetPane( "LayersManager" ).Show( false ); Clear_Pcb( false ); //close the editor Destroy(); }
void PCB_BASE_FRAME::UseGalCanvas( bool aEnable ) { EDA_DRAW_FRAME::UseGalCanvas( aEnable ); EDA_DRAW_PANEL_GAL* galCanvas = GetGalCanvas(); if( m_toolManager ) m_toolManager->SetEnvironment( m_Pcb, GetGalCanvas()->GetView(), GetGalCanvas()->GetViewControls(), this ); if( aEnable ) { SetBoard( m_Pcb ); if( m_toolManager ) m_toolManager->ResetTools( TOOL_BASE::GAL_SWITCH ); galCanvas->GetView()->RecacheAllItems(); galCanvas->SetEventDispatcher( m_toolDispatcher ); galCanvas->StartDrawing(); } else { if( m_toolManager ) m_toolManager->ResetTools( TOOL_BASE::GAL_SWITCH ); // Redirect all events to the legacy canvas galCanvas->SetEventDispatcher( NULL ); } }
void EDA_DRAW_FRAME::SwitchCanvas( EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType ) { GetGalCanvas()->SwitchBackend( aCanvasType ); m_canvasType = GetGalCanvas()->GetBackend(); UseGalCanvas(); }
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 PCB_BASE_FRAME::UseGalCanvas() { EDA_DRAW_FRAME::UseGalCanvas(); EDA_DRAW_PANEL_GAL* galCanvas = GetGalCanvas(); if( m_toolManager ) { m_toolManager->SetEnvironment( m_Pcb, GetGalCanvas()->GetView(), GetGalCanvas()->GetViewControls(), this ); } SetBoard( m_Pcb ); if( m_toolManager ) m_toolManager->ResetTools( TOOL_BASE::GAL_SWITCH ); // Transfer latest current display options from legacy to GAL canvas: auto painter = static_cast<KIGFX::PCB_PAINTER*>( galCanvas->GetView()->GetPainter() ); auto settings = painter->GetSettings(); auto displ_opts = (PCB_DISPLAY_OPTIONS*)GetDisplayOptions(); settings->LoadDisplayOptions( displ_opts, ShowPageLimits() ); galCanvas->GetView()->RecacheAllItems(); galCanvas->SetEventDispatcher( m_toolDispatcher ); galCanvas->StartDrawing(); }
void PCB_BASE_EDIT_FRAME::SetBoard( BOARD* aBoard ) { bool new_board = ( aBoard != m_Pcb ); // The active tool might store a reference to the BOARD that is about to be deleted. if( m_toolManager ) m_toolManager->DeactivateTool(); // It has to be done before the previous board is destroyed by SetBoard() if( new_board ) GetGalCanvas()->GetView()->Clear(); PCB_BASE_FRAME::SetBoard( aBoard ); GetGalCanvas()->GetGAL()->SetGridOrigin( VECTOR2D( aBoard->GetGridOrigin() ) ); // update the tool manager with the new board and its view. if( m_toolManager ) { PCB_DRAW_PANEL_GAL* drawPanel = static_cast<PCB_DRAW_PANEL_GAL*>( GetGalCanvas() ); drawPanel->DisplayBoard( aBoard ); m_toolManager->SetEnvironment( aBoard, drawPanel->GetView(), drawPanel->GetViewControls(), this ); if( new_board ) m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD ); } }
void PL_EDITOR_FRAME::setupTools() { // Create the manager and dispatcher & route draw panel events to the dispatcher m_toolManager = new TOOL_MANAGER; m_toolManager->SetEnvironment( nullptr, GetGalCanvas()->GetView(), GetGalCanvas()->GetViewControls(), this ); m_actions = new PL_ACTIONS(); m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions ); GetGalCanvas()->SetEventDispatcher( m_toolDispatcher ); // Register tools m_toolManager->RegisterTool( new COMMON_TOOLS ); m_toolManager->RegisterTool( new ZOOM_TOOL ); m_toolManager->RegisterTool( new PL_SELECTION_TOOL ); m_toolManager->RegisterTool( new PL_EDITOR_CONTROL ); m_toolManager->RegisterTool( new PL_DRAWING_TOOLS ); m_toolManager->RegisterTool( new PL_EDIT_TOOL ); m_toolManager->RegisterTool( new PL_POINT_EDITOR ); m_toolManager->RegisterTool( new PL_PICKER_TOOL ); m_toolManager->InitTools(); // Run the selection tool, it is supposed to be always active m_toolManager->InvokeTool( "plEditor.InteractiveSelection" ); }
void PCB_BASE_FRAME::SwitchCanvas( wxCommandEvent& aEvent ) { bool use_gal = false; EDA_DRAW_PANEL_GAL::GAL_TYPE canvasType = EDA_DRAW_PANEL_GAL::GAL_TYPE_NONE; switch( aEvent.GetId() ) { case ID_MENU_CANVAS_LEGACY: break; case ID_MENU_CANVAS_CAIRO: use_gal = GetGalCanvas()->SwitchBackend( EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO ); if( use_gal ) canvasType = EDA_DRAW_PANEL_GAL::GAL_TYPE_CAIRO; break; case ID_MENU_CANVAS_OPENGL: use_gal = GetGalCanvas()->SwitchBackend( EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL ); if( use_gal ) canvasType = EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL; break; } SaveCanvasTypeSetting( canvasType ); UseGalCanvas( use_gal ); }
void PCB_EDIT_FRAME::UseGalCanvas( bool aEnable ) { EDA_DRAW_FRAME::UseGalCanvas( aEnable ); m_toolManager->SetEnvironment( m_Pcb, GetGalCanvas()->GetView(), GetGalCanvas()->GetViewControls(), this ); ViewReloadBoard( m_Pcb ); }
PCB_BASE_FRAME::~PCB_BASE_FRAME() { // Ensure m_canvasType is up to date, to save it in config if( !GetGalCanvas() ) m_canvasType = EDA_DRAW_PANEL_GAL::GAL_TYPE_NONE; else m_canvasType = GetGalCanvas()->GetBackend(); delete m_Pcb; }
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 FOOTPRINT_EDIT_FRAME::SetActiveLayer( LAYER_ID aLayer ) { PCB_BASE_FRAME::SetActiveLayer( aLayer ); GetGalCanvas()->SetHighContrastLayer( aLayer ); m_Layers->SelectLayer( GetActiveLayer() ); m_Layers->OnLayerSelected(); if( IsGalCanvasActive() ) GetGalCanvas()->Refresh(); }
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 PCB_EDIT_FRAME::SetBoard( BOARD* aBoard ) { PCB_BASE_FRAME::SetBoard( aBoard ); if( GetGalCanvas() ) { ViewReloadBoard( aBoard ); // update the tool manager with the new board and its view. if( m_toolManager ) m_toolManager->SetEnvironment( aBoard, GetGalCanvas()->GetView(), GetGalCanvas()->GetViewControls(), this ); } }
void PCB_BASE_FRAME::OnTogglePadDrawMode( wxCommandEvent& aEvent ) { m_DisplayPadFill = DisplayOpt.DisplayPadFill = !m_DisplayPadFill; // Apply new display options to the GAL canvas KIGFX::PCB_PAINTER* painter = static_cast<KIGFX::PCB_PAINTER*> ( GetGalCanvas()->GetView()->GetPainter() ); KIGFX::PCB_RENDER_SETTINGS* settings = static_cast<KIGFX::PCB_RENDER_SETTINGS*> ( painter->GetSettings() ); settings->LoadDisplayOptions( DisplayOpt ); GetGalCanvas()->GetView()->RecacheAllItems( true ); m_canvas->Refresh(); }
void PCB_EDIT_FRAME::SetActiveLayer( LAYER_ID aLayer ) { PCB_BASE_FRAME::SetActiveLayer( aLayer ); GetGalCanvas()->SetHighContrastLayer( aLayer ); syncLayerWidgetLayer(); if( IsGalCanvasActive() ) { m_toolManager->RunAction( COMMON_ACTIONS::layerChanged ); // notify other tools GetGalCanvas()->SetFocus(); // otherwise hotkeys are stuck somewhere GetGalCanvas()->Refresh(); } }
PCB_BASE_FRAME::~PCB_BASE_FRAME() { delete m_Collector; delete m_Pcb; // is already NULL for FOOTPRINT_EDIT_FRAME delete GetGalCanvas(); }
PCB_BASE_FRAME::PCB_BASE_FRAME( wxWindow* aParent, ID_DRAWFRAME_TYPE aFrameType, const wxString& aTitle, const wxPoint& aPos, const wxSize& aSize, long aStyle, const wxString & aFrameName) : EDA_DRAW_FRAME( aParent, aFrameType, aTitle, aPos, aSize, aStyle, aFrameName ) { m_Pcb = NULL; m_toolManager = NULL; m_toolDispatcher = NULL; m_DisplayPadFill = true; // How to draw pads m_DisplayViaFill = true; // How to draw vias m_DisplayPadNum = true; // show pads number m_DisplayModEdge = FILLED; // How to display module drawings (line/ filled / sketch) m_DisplayModText = FILLED; // How to display module texts (line/ filled / sketch) m_DisplayPcbTrackFill = true; // false = sketch , true = filled m_Draw3DFrame = NULL; // Display Window in 3D mode (OpenGL) m_UserGridSize = wxRealPoint( 100.0, 100.0 ); m_UserGridUnit = INCHES; m_Collector = new GENERAL_COLLECTOR(); m_FastGrid1 = 0; m_FastGrid2 = 0; SetGalCanvas( new EDA_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ), m_FrameSize, EDA_DRAW_PANEL_GAL::GAL_TYPE_OPENGL ) ); // Hide by default, it has to be explicitly shown GetGalCanvas()->Hide(); m_auxiliaryToolBar = NULL; }
void PCB_EDIT_FRAME::OnCloseWindow( wxCloseEvent& Event ) { m_canvas->SetAbortRequest( true ); if( GetScreen()->IsModify() ) { wxString msg = wxString::Format( _( "Save the changes in\n" "'%s'\n" "before closing?" ), GetChars( GetBoard()->GetFileName() ) ); int ii = DisplayExitDialog( this, msg ); switch( ii ) { case wxID_CANCEL: Event.Veto(); return; case wxID_NO: break; case wxID_YES: // save the board. if the board has no name, // the ID_SAVE_BOARD_AS will actually made Files_io_from_id( ID_SAVE_BOARD ); break; } } GetGalCanvas()->StopDrawing(); // Delete the auto save file if it exists. wxFileName fn = GetBoard()->GetFileName(); // Auto save file name is the normal file name prefixed with a '$'. fn.SetName( wxT( "$" ) + fn.GetName() ); // Remove the auto save file on a normal close of Pcbnew. if( fn.FileExists() && !wxRemoveFile( fn.GetFullPath() ) ) { wxString msg = wxString::Format( _( "The auto save file '%s' could not be removed!" ), GetChars( fn.GetFullPath() ) ); wxMessageBox( msg, Pgm().App().GetAppName(), wxOK | wxICON_ERROR, this ); } // Delete board structs and undo/redo lists, to avoid crash on exit // when deleting some structs (mainly in undo/redo lists) too late Clear_Pcb( false ); // do not show the window because ScreenPcb will be deleted and we do not // want any paint event Show( false ); Destroy(); }
void PCB_EDIT_FRAME::setupTools() { // Create the manager and dispatcher & route draw panel events to the dispatcher m_toolManager = new TOOL_MANAGER; m_toolManager->SetEnvironment( m_Pcb, GetGalCanvas()->GetView(), GetGalCanvas()->GetViewControls(), this ); m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager ); // Register tools registerAllTools( m_toolManager ); m_toolManager->ResetTools( TOOL_BASE::RUN ); // Run the selection tool, it is supposed to be always active m_toolManager->InvokeTool( "pcbnew.InteractiveSelection" ); }
bool GERBVIEW_FRAME::Clear_DrawLayers( bool query ) { if( GetGerberLayout() == NULL ) return false; if( query && GetScreen()->IsModify() ) { if( !IsOK( this, _( "Current data will be lost?" ) ) ) return false; } if( auto canvas = GetGalCanvas() ) { canvas->GetView()->Clear(); } GetImagesList()->DeleteAllImages(); GetGerberLayout()->SetBoundingBox( EDA_RECT() ); SetActiveLayer( 0 ); ReFillLayerWidget(); syncLayerBox(); return true; }
WS_DATA_ITEM* PL_EDITOR_FRAME::AddPageLayoutItem( int aType ) { WS_DATA_ITEM * item = NULL; switch( aType ) { case WS_DATA_ITEM::WS_TEXT: item = new WS_DATA_ITEM_TEXT( wxT( "Text") ); break; case WS_DATA_ITEM::WS_SEGMENT: item = new WS_DATA_ITEM( WS_DATA_ITEM::WS_SEGMENT ); break; case WS_DATA_ITEM::WS_RECT: item = new WS_DATA_ITEM( WS_DATA_ITEM::WS_RECT ); break; case WS_DATA_ITEM::WS_POLYPOLYGON: item = new WS_DATA_ITEM_POLYGONS(); break; case WS_DATA_ITEM::WS_BITMAP: { wxFileDialog fileDlg( this, _( "Choose Image" ), wxEmptyString, wxEmptyString, _( "Image Files " ) + wxImage::GetImageExtWildcard(), wxFD_OPEN ); if( fileDlg.ShowModal() != wxID_OK ) return NULL; wxString fullFilename = fileDlg.GetPath(); if( !wxFileExists( fullFilename ) ) { wxMessageBox( _( "Couldn't load image from \"%s\"" ), fullFilename ); break; } BITMAP_BASE* image = new BITMAP_BASE(); if( !image->ReadImageFile( fullFilename ) ) { wxMessageBox( _( "Couldn't load image from \"%s\"" ), fullFilename ); delete image; break; } item = new WS_DATA_ITEM_BITMAP( image ); } break; } if( item == NULL ) return NULL; WS_DATA_MODEL::GetTheInstance().Append( item ); item->SyncDrawItems( nullptr, GetGalCanvas()->GetView() ); return item; }
/* Handles the selection of tools, menu, and popup menu commands. */ void PL_EDITOR_FRAME::Process_Special_Functions( wxCommandEvent& event ) { wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED ); cmd.SetEventObject( this ); switch( event.GetId() ) { case wxID_PREFERENCES: ShowPreferences( PlEditorHotkeysDescr, PlEditorHotkeysDescr, wxT( "pl_editor" ) ); break; case ID_PREFERENCES_HOTKEY_SHOW_CURRENT_LIST: DisplayHotkeyList( this, PlEditorHotkeysDescr ); break; case ID_SELECT_PAGE_NUMBER: { KIGFX::VIEW* view = GetGalCanvas()->GetView(); view->SetLayerVisible( LAYER_WORKSHEET_PAGE1, m_pageSelectBox->GetSelection() == 0 ); view->SetLayerVisible( LAYER_WORKSHEET_PAGEn, m_pageSelectBox->GetSelection() == 1 ); m_canvas->Refresh(); } break; default: wxMessageBox( wxT( "PL_EDITOR_FRAME::Process_Special_Functions error" ) ); break; } }
wxPoint EDA_DRAW_FRAME::GetCrossHairPosition( bool aInvertY ) const { // subject to change, borrow from old BASE_SCREEN for now. VECTOR2I cursor = GetGalCanvas()->GetViewControls()->GetCursorPosition(); return wxPoint( cursor.x, cursor.y ); }
void PCB_BASE_FRAME::OnTogglePadDrawMode( wxCommandEvent& aEvent ) { DISPLAY_OPTIONS* displ_opts = (DISPLAY_OPTIONS*)GetDisplayOptions(); displ_opts->m_DisplayPadFill = !displ_opts->m_DisplayPadFill; EDA_DRAW_PANEL_GAL* gal = GetGalCanvas(); if( gal ) { // Apply new display options to the GAL canvas KIGFX::PCB_PAINTER* painter = static_cast<KIGFX::PCB_PAINTER*> ( gal->GetView()->GetPainter() ); KIGFX::PCB_RENDER_SETTINGS* settings = static_cast<KIGFX::PCB_RENDER_SETTINGS*> ( painter->GetSettings() ); settings->LoadDisplayOptions( displ_opts ); // Update pads BOARD* board = GetBoard(); for( MODULE* module = board->m_Modules; module; module = module->Next() ) { for( D_PAD* pad = module->Pads(); pad; pad = pad->Next() ) pad->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY ); } } m_canvas->Refresh(); }
void FOOTPRINT_EDIT_FRAME::setupTools() { PCB_DRAW_PANEL_GAL* drawPanel = static_cast<PCB_DRAW_PANEL_GAL*>( GetGalCanvas() ); // Create the manager and dispatcher & route draw panel events to the dispatcher m_toolManager = new TOOL_MANAGER; m_toolManager->SetEnvironment( GetBoard(), drawPanel->GetView(), drawPanel->GetViewControls(), this ); m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager ); drawPanel->SetEventDispatcher( m_toolDispatcher ); m_toolManager->RegisterTool( new SELECTION_TOOL ); m_toolManager->RegisterTool( new EDIT_TOOL ); m_toolManager->RegisterTool( new DRAWING_TOOL ); m_toolManager->RegisterTool( new POINT_EDITOR ); m_toolManager->RegisterTool( new PCBNEW_CONTROL ); m_toolManager->RegisterTool( new MODULE_TOOLS ); m_toolManager->RegisterTool( new PLACEMENT_TOOL ); m_toolManager->RegisterTool( new PICKER_TOOL ); m_toolManager->GetTool<SELECTION_TOOL>()->EditModules( true ); m_toolManager->GetTool<EDIT_TOOL>()->EditModules( true ); m_toolManager->GetTool<DRAWING_TOOL>()->EditModules( true ); m_toolManager->ResetTools( TOOL_BASE::RUN ); m_toolManager->InvokeTool( "pcbnew.InteractiveSelection" ); }
int PCB_EDIT_FRAME::Fill_Zone( ZONE_CONTAINER* aZone ) { aZone->ClearFilledPolysList(); aZone->UnFill(); // Cannot fill keepout zones: if( aZone->GetIsKeepout() ) return 1; wxString msg; ClearMsgPanel(); // Shows the net ZONE_SETTINGS zoneInfo = GetZoneSettings(); zoneInfo.m_NetcodeSelection = aZone->GetNetCode(); SetZoneSettings( zoneInfo ); msg = aZone->GetNetname(); if( msg.IsEmpty() ) msg = wxT( "No net" ); AppendMsgPanel( _( "NetName" ), msg, RED ); wxBusyCursor dummy; // Shows an hourglass cursor (removed by its destructor) aZone->BuildFilledSolidAreasPolygons( GetBoard() ); GetGalCanvas()->GetView()->Update( aZone, KIGFX::ALL ); GetBoard()->GetRatsnest()->Update( aZone ); OnModify(); return 0; }
void PCB_EDIT_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings ) { PCB_BASE_FRAME::SetPageSettings( aPageSettings ); if( IsGalCanvasActive() ) { PCB_DRAW_PANEL_GAL* drawPanel = static_cast<PCB_DRAW_PANEL_GAL*>( GetGalCanvas() ); // Prepare worksheet template KIGFX::WORKSHEET_VIEWITEM* worksheet; worksheet = new KIGFX::WORKSHEET_VIEWITEM( &m_Pcb->GetPageSettings(), &m_Pcb->GetTitleBlock() ); worksheet->SetSheetName( std::string( GetScreenDesc().mb_str() ) ); BASE_SCREEN* screen = GetScreen(); if( screen != NULL ) { worksheet->SetSheetNumber( screen->m_ScreenNumber ); worksheet->SetSheetCount( screen->m_NumberOfScreens ); } // PCB_DRAW_PANEL_GAL takes ownership of the worksheet drawPanel->SetWorksheet( worksheet ); } }
void PCB_EDIT_FRAME::syncLayerVisibilities() { m_Layers->SyncLayerVisibilities(); KIGFX::VIEW* view = GetGalCanvas()->GetView(); // Load layer & elements visibility settings for( LAYER_NUM i = 0; i < NB_LAYERS; ++i ) { view->SetLayerVisible( i, m_Pcb->IsLayerVisible( i ) ); // Synchronize netname layers as well if( IsCopperLayer( i ) ) view->SetLayerVisible( GetNetnameLayer( i ), m_Pcb->IsLayerVisible( i ) ); } for( LAYER_NUM i = 0; i < END_PCB_VISIBLE_LIST; ++i ) { view->SetLayerVisible( ITEM_GAL_LAYER( i ), m_Pcb->IsElementVisible( i ) ); } // Enable some layers that are GAL specific view->SetLayerVisible( ITEM_GAL_LAYER( PADS_HOLES_VISIBLE ), true ); view->SetLayerVisible( ITEM_GAL_LAYER( VIAS_HOLES_VISIBLE ), true ); view->SetLayerVisible( ITEM_GAL_LAYER( WORKSHEET ), true ); view->SetLayerVisible( ITEM_GAL_LAYER( GP_OVERLAY ), true ); }
void LIB_EDIT_FRAME::OnExportBody( wxCommandEvent& aEvent ) { m_toolManager->DeactivateTool(); SetToolID( ID_LIBEDIT_EXPORT_BODY_BUTT, GetGalCanvas()->GetDefaultCursor(), _( "Export" ) ); SaveOneSymbol(); SetNoToolSelected(); m_canvas->SetIgnoreMouseEvents( false ); }