/* * Update variables with new options */ bool PANEL_PCBNEW_DISPLAY_OPTIONS::TransferDataFromWindow() { PCB_DISPLAY_OPTIONS* displ_opts = (PCB_DISPLAY_OPTIONS*) m_frame->GetDisplayOptions(); displ_opts->m_ShowTrackClearanceMode = UTIL::GetValFromConfig( traceClearanceSelectMap, m_OptDisplayTracksClearance->GetSelection() ); displ_opts->m_DisplayPadIsol = m_OptDisplayPadClearence->GetValue(); displ_opts->m_DisplayPadNum = m_OptDisplayPadNumber->GetValue(); m_frame->SetElementVisibility( LAYER_NO_CONNECTS, m_OptDisplayPadNoConn->GetValue() ); displ_opts->m_DisplayNetNamesMode = m_ShowNetNamesOption->GetSelection(); displ_opts->m_DisplayRatsnestLinesCurved = m_OptDisplayCurvedRatsnestLines->GetValue(); m_galOptsPanel->TransferDataFromWindow(); // Apply changes to the GAL KIGFX::VIEW* view = m_frame->GetGalCanvas()->GetView(); KIGFX::PCB_PAINTER* painter = static_cast<KIGFX::PCB_PAINTER*>( view->GetPainter() ); KIGFX::PCB_RENDER_SETTINGS* settings = painter->GetSettings(); settings->LoadDisplayOptions( displ_opts, m_frame->ShowPageLimits() ); view->RecacheAllItems(); view->MarkTargetDirty( KIGFX::TARGET_NONCACHED ); m_frame->GetCanvas()->Refresh(); return true; }
void PCB_LAYER_WIDGET::OnRenderColorChange( int aId, COLOR4D aColor ) { wxASSERT( aId > GAL_LAYER_ID_START && aId < GAL_LAYER_ID_END ); myframe->Settings().Colors().SetItemColor( static_cast<GAL_LAYER_ID>( aId ), aColor ); EDA_DRAW_PANEL_GAL* galCanvas = myframe->GetGalCanvas(); if( galCanvas && myframe->IsGalCanvasActive() ) { if( aId == LAYER_GRID ) galCanvas->GetGAL()->SetGridColor( aColor ); KIGFX::VIEW* view = galCanvas->GetView(); view->GetPainter()->GetSettings()->ImportLegacyColors( &myframe->Settings().Colors() ); view->MarkTargetDirty( KIGFX::TARGET_NONCACHED ); // useful to update rastnest view->UpdateLayerColor( aId ); // plated-through-holes don't have their own color; they use the background color if( aId == LAYER_PCB_BACKGROUND ) view->UpdateLayerColor( LAYER_PADS_PLATEDHOLES ); galCanvas->ForceRefresh(); } myframe->ReCreateHToolbar(); myframe->GetCanvas()->Refresh(); }
void PCB_LAYER_WIDGET::OnLayerColorChange( int aLayer, COLOR4D aColor ) { // Avoid setting the alpha channel, when we are in legacy mode, // because in legacy mode the alpha channel is not used, but changing it // destroys the GAL color setup if( !myframe->IsGalCanvasActive() ) { COLOR4D oldColor = myframe->Settings().Colors().GetLayerColor( aLayer ); aColor.a = oldColor.a; } myframe->Settings().Colors().SetLayerColor( aLayer, aColor ); if( myframe->IsGalCanvasActive() ) { KIGFX::VIEW* view = myframe->GetGalCanvas()->GetView(); view->GetPainter()->GetSettings()->ImportLegacyColors( &myframe->Settings().Colors() ); view->UpdateLayerColor( aLayer ); view->UpdateLayerColor( GetNetnameLayer( aLayer ) ); } myframe->ReCreateHToolbar(); myframe->GetCanvas()->Refresh(); if( aLayer == LAYER_PCB_BACKGROUND ) myframe->SetDrawBgColor( aColor ); }
void PCB_LAYER_WIDGET::OnLayerColorChange( int aLayer, EDA_COLOR_T aColor ) { myframe->GetBoard()->SetLayerColor( ToLAYER_ID( aLayer ), aColor ); if( myframe->IsGalCanvasActive() ) { KIGFX::VIEW* view = myframe->GetGalCanvas()->GetView(); view->GetPainter()->GetSettings()->ImportLegacyColors( myframe->GetBoard()->GetColorsSettings() ); view->UpdateLayerColor( aLayer ); } myframe->GetCanvas()->Refresh(); }
void GERBER_LAYER_WIDGET::OnLayerColorChange( int aLayer, COLOR4D aColor ) { // NOTE: Active layer in GerbView is stored as 0-indexed, but layer color is // stored according to the GERBER_DRAW_LAYER() offset. myframe->SetLayerColor( GERBER_DRAW_LAYER( aLayer ), aColor ); myframe->m_SelLayerBox->ResyncBitmapOnly(); if( myframe->IsGalCanvasActive() ) { KIGFX::VIEW* view = myframe->GetGalCanvas()->GetView(); view->GetPainter()->GetSettings()->ImportLegacyColors( myframe->m_colorsSettings ); view->UpdateLayerColor( GERBER_DRAW_LAYER( aLayer ) ); } myframe->GetCanvas()->Refresh(); }
void PCB_EDIT_FRAME::setHighContrastLayer( LAYER_NUM aLayer ) { // Set display settings for high contrast mode KIGFX::VIEW* view = GetGalCanvas()->GetView(); KIGFX::RENDER_SETTINGS* rSettings = view->GetPainter()->GetSettings(); setTopLayer( aLayer ); rSettings->ClearActiveLayers(); rSettings->SetActiveLayer( aLayer ); if( IsCopperLayer( aLayer ) ) { // Bring some other layers to the front in case of copper layers and make them colored // fixme do not like the idea of storing the list of layers here, // should be done in some other way I guess.. LAYER_NUM layers[] = { GetNetnameLayer( aLayer ), ITEM_GAL_LAYER( VIAS_VISIBLE ), ITEM_GAL_LAYER( VIAS_HOLES_VISIBLE ), ITEM_GAL_LAYER( PADS_VISIBLE ), ITEM_GAL_LAYER( PADS_HOLES_VISIBLE ), NETNAMES_GAL_LAYER( PADS_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( GP_OVERLAY ), ITEM_GAL_LAYER( RATSNEST_VISIBLE ) }; for( unsigned int i = 0; i < sizeof( layers ) / sizeof( LAYER_NUM ); ++i ) rSettings->SetActiveLayer( layers[i] ); // Pads should be shown too if( aLayer == FIRST_COPPER_LAYER ) { rSettings->SetActiveLayer( ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ); rSettings->SetActiveLayer( NETNAMES_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ) ); } else if( aLayer == LAST_COPPER_LAYER ) { rSettings->SetActiveLayer( ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ); rSettings->SetActiveLayer( NETNAMES_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ) ); } } view->UpdateAllLayersColor(); }
void PCB_BASE_FRAME::LoadSettings() { wxASSERT( wxGetApp().GetSettings() != NULL ); wxConfig* cfg = wxGetApp().GetSettings(); EDA_DRAW_FRAME::LoadSettings(); // Ensure grid id is an existent grid id: if( (m_LastGridSizeId <= 0) || (m_LastGridSizeId > (ID_POPUP_GRID_USER - ID_POPUP_GRID_LEVEL_1000)) ) m_LastGridSizeId = ID_POPUP_GRID_LEVEL_500 - ID_POPUP_GRID_LEVEL_1000; cfg->Read( m_FrameName + UserGridSizeXEntry, &m_UserGridSize.x, 0.01 ); cfg->Read( m_FrameName + UserGridSizeYEntry, &m_UserGridSize.y, 0.01 ); long itmp; cfg->Read( m_FrameName + UserGridUnitsEntry, &itmp, ( long )INCHES ); m_UserGridUnit = (EDA_UNITS_T) itmp; cfg->Read( m_FrameName + DisplayPadFillEntry, &m_DisplayPadFill, true ); cfg->Read( m_FrameName + DisplayViaFillEntry, &m_DisplayViaFill, true ); cfg->Read( m_FrameName + DisplayPadNumberEntry, &m_DisplayPadNum, true ); cfg->Read( m_FrameName + DisplayModuleEdgeEntry, &m_DisplayModEdge, ( long )FILLED ); cfg->Read( m_FrameName + FastGrid1Entry, &itmp, ( long )0); m_FastGrid1 = itmp; cfg->Read( m_FrameName + FastGrid2Entry, &itmp, ( long )0); m_FastGrid2 = itmp; if( m_DisplayModEdge < LINE || m_DisplayModEdge > SKETCH ) m_DisplayModEdge = FILLED; cfg->Read( m_FrameName + DisplayModuleTextEntry, &m_DisplayModText, ( long )FILLED ); if( m_DisplayModText < LINE || m_DisplayModText > SKETCH ) m_DisplayModText = FILLED; // Apply display settings for GAL KIGFX::VIEW* view = GetGalCanvas()->GetView(); // Set rendering order and properties of layers for( LAYER_NUM i = 0; (unsigned) i < sizeof(GAL_LAYER_ORDER) / sizeof(LAYER_NUM); ++i ) { LAYER_NUM layer = GAL_LAYER_ORDER[i]; wxASSERT( layer < KIGFX::VIEW::VIEW_MAX_LAYERS ); view->SetLayerOrder( layer, i ); if( IsCopperLayer( layer ) ) { // Copper layers are required for netname layers view->SetRequired( GetNetnameLayer( layer ), layer ); view->SetLayerTarget( layer, KIGFX::TARGET_CACHED ); } else if( IsNetnameLayer( layer ) ) { // Netnames are drawn only when scale is sufficient (level of details) // so there is no point in caching them view->SetLayerTarget( layer, KIGFX::TARGET_NONCACHED ); } } // Some more required layers settings view->SetRequired( ITEM_GAL_LAYER( VIAS_HOLES_VISIBLE ), ITEM_GAL_LAYER( VIAS_VISIBLE ) ); view->SetRequired( ITEM_GAL_LAYER( PADS_HOLES_VISIBLE ), ITEM_GAL_LAYER( PADS_VISIBLE ) ); view->SetRequired( NETNAMES_GAL_LAYER( PADS_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PADS_VISIBLE ) ); view->SetRequired( NETNAMES_GAL_LAYER( PAD_FR_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ); view->SetRequired( ADHESIVE_N_FRONT, ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ); view->SetRequired( SOLDERPASTE_N_FRONT, ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ); view->SetRequired( SOLDERMASK_N_FRONT, ITEM_GAL_LAYER( PAD_FR_VISIBLE ) ); view->SetRequired( NETNAMES_GAL_LAYER( PAD_BK_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ); view->SetRequired( ADHESIVE_N_BACK, ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ); view->SetRequired( SOLDERPASTE_N_BACK, ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ); view->SetRequired( SOLDERMASK_N_BACK, ITEM_GAL_LAYER( PAD_BK_VISIBLE ) ); view->SetLayerTarget( ITEM_GAL_LAYER( GP_OVERLAY ), KIGFX::TARGET_OVERLAY ); view->SetLayerTarget( ITEM_GAL_LAYER( RATSNEST_VISIBLE ), KIGFX::TARGET_OVERLAY ); // Apply layer coloring scheme & display options if( view->GetPainter() ) { KIGFX::PCB_RENDER_SETTINGS* settings = new KIGFX::PCB_RENDER_SETTINGS(); // Load layers' colors from PCB data settings->ImportLegacyColors( m_Pcb->GetColorsSettings() ); view->GetPainter()->ApplySettings( settings ); // Load display options (such as filled/outline display of items) settings->LoadDisplayOptions( DisplayOpt ); } // WxWidgets 2.9.1 seems call setlocale( LC_NUMERIC, "" ) // when reading doubles in config, // but forget to back to current locale. So we call SetLocaleTo_Default SetLocaleTo_Default( ); }
/* Update variables with new options */ void DIALOG_DISPLAY_OPTIONS::OnOkClick(wxCommandEvent& event) { if ( m_Show_Page_Limits->GetSelection() == 0 ) m_Parent->SetShowPageLimits( true ); else m_Parent->SetShowPageLimits( false ); if ( m_OptDisplayTracks->GetSelection() == 1 ) DisplayOpt.DisplayPcbTrackFill = true; else DisplayOpt.DisplayPcbTrackFill = false; m_Parent->m_DisplayPcbTrackFill = DisplayOpt.DisplayPcbTrackFill; DisplayOpt.m_DisplayViaMode = (VIA_DISPLAY_MODE_T) m_OptDisplayViaHole->GetSelection(); switch ( m_OptDisplayTracksClearance->GetSelection() ) { case 0: DisplayOpt.ShowTrackClearanceMode = DO_NOT_SHOW_CLEARANCE; break; case 1: DisplayOpt.ShowTrackClearanceMode = SHOW_CLEARANCE_NEW_TRACKS; break; case 2: DisplayOpt.ShowTrackClearanceMode = SHOW_CLEARANCE_NEW_TRACKS_AND_VIA_AREAS; break; case 3: DisplayOpt.ShowTrackClearanceMode = SHOW_CLEARANCE_NEW_AND_EDITED_TRACKS_AND_VIA_AREAS; break; case 4: DisplayOpt.ShowTrackClearanceMode = SHOW_CLEARANCE_ALWAYS; break; } m_Parent->m_DisplayModText = DisplayOpt.DisplayModText = m_OptDisplayModTexts->GetSelection(); m_Parent->m_DisplayModEdge = DisplayOpt.DisplayModEdge = m_OptDisplayModEdges->GetSelection(); if (m_OptDisplayPads->GetSelection() == 1 ) DisplayOpt.DisplayPadFill = true; else DisplayOpt.DisplayPadFill = false; if (m_OptDisplayVias->GetSelection() == 1 ) DisplayOpt.DisplayViaFill = true; else DisplayOpt.DisplayViaFill = false; m_Parent->m_DisplayPadFill = DisplayOpt.DisplayPadFill; m_Parent->m_DisplayViaFill = DisplayOpt.DisplayViaFill; DisplayOpt.DisplayPadIsol = m_OptDisplayPadClearence->GetValue(); m_Parent->m_DisplayPadNum = DisplayOpt.DisplayPadNum = m_OptDisplayPadNumber->GetValue(); m_Parent->SetElementVisibility( PCB_VISIBLE(NO_CONNECTS_VISIBLE), m_OptDisplayPadNoConn->GetValue() ); DisplayOpt.DisplayDrawItems = m_OptDisplayDrawings->GetSelection(); DisplayOpt.DisplayNetNamesMode = m_ShowNetNamesOption->GetSelection(); // Apply changes to the GAL KIGFX::VIEW* view = m_Parent->GetGalCanvas()->GetView(); KIGFX::PCB_PAINTER* painter = static_cast<KIGFX::PCB_PAINTER*>( view->GetPainter() ); KIGFX::PCB_RENDER_SETTINGS* settings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( painter->GetSettings() ); settings->LoadDisplayOptions( DisplayOpt ); view->RecacheAllItems( true ); m_Parent->GetCanvas()->Refresh(); EndModal( 1 ); }