From 920186ddb4b471dad931301bc5a56cdb90585ff4 Mon Sep 17 00:00:00 2001 From: dickelbeck Date: Thu, 21 Jan 2010 20:53:01 +0000 Subject: [PATCH] more layer widget incorporation --- include/class_board_design_settings.h | 25 ++- include/pcbstruct.h | 50 ++++-- include/wxPcbStruct.h | 22 +-- pcbnew/basepcbframe.cpp | 6 +- pcbnew/class_board.cpp | 52 ++++++ pcbnew/class_board.h | 20 ++- pcbnew/class_board_design_settings.cpp | 2 +- pcbnew/class_text_mod.cpp | 6 +- pcbnew/class_track.cpp | 2 +- pcbnew/dialog_general_options.cpp | 2 +- pcbnew/dialog_layers_setup.cpp | 1 + pcbnew/layer_panel_base.cpp | 4 +- pcbnew/layer_widget.cpp | 40 +++-- pcbnew/layer_widget.h | 23 +++ pcbnew/panel_layer_select.fbp | 4 +- pcbnew/pcbframe.cpp | 167 ++++++++++++++++--- pcbnew/pcbnew_config.cpp | 12 +- pcbnew/set_color.h | 12 +- pcbnew/tool_pcb.cpp | 191 +++++++++++----------- pcbnew/toolbars_update_user_interface.cpp | 4 +- 20 files changed, 436 insertions(+), 209 deletions(-) diff --git a/include/class_board_design_settings.h b/include/class_board_design_settings.h index a04e19ceac..6b7c596c04 100644 --- a/include/class_board_design_settings.h +++ b/include/class_board_design_settings.h @@ -78,7 +78,7 @@ public: return false; // If a layer is disabled, it is automatically invisible - return (bool) ( m_VisibleLayers & m_EnabledLayers & 1 << aLayerIndex ); + return (bool) ( m_VisibleLayers & m_EnabledLayers & (1 << aLayerIndex) ); } @@ -111,28 +111,27 @@ public: m_VisibleElements = aMask; } - /** * Function IsElementVisible - * tests whether a given element category is visible - * @param aCategoryIndex = The index of the element category to be tested. + * tests whether a given element category is visible. Keep this as an + * inline function. + * @param aPCB_VISIBLE is from the enum by the same name * @return bool - true if the element is visible. + * @see enum PCB_VISIBLE */ - bool IsElementVisible( int aCategoryIndex ) const + bool IsElementVisible( int aPCB_VISIBLE ) const { - if( aCategoryIndex < 0 || aCategoryIndex > PAD_CMP_VISIBLE ) - return false; - return (bool) ( m_VisibleElements & (1 << aCategoryIndex) ); + return bool( m_VisibleElements & (1 << aPCB_VISIBLE) ); } - /** * Function SetElementVisibility * changes the visibility of an element category - * @param aCategoryIndex = The index of the element category to be changed + * @param aPCB_VISIBLE is from the enum by the same name * @param aNewState = The new visibility state of the element category + * @see enum PCB_VISIBLE */ - void SetElementVisibility( int aCategoryIndex, bool aNewState ); + void SetElementVisibility( int aPCB_VISIBLE, bool aNewState ); /** * Function GetEnabledLayers @@ -144,7 +143,6 @@ public: return m_EnabledLayers; } - /** * Function SetEnabledLayers * changes the bit-mask of enabled layers @@ -152,7 +150,6 @@ public: */ void SetEnabledLayers( int aMask ); - /** * Function IsLayerEnabled * tests whether a given layer is enabled @@ -161,7 +158,7 @@ public: */ bool IsLayerEnabled( int aLayerIndex ) { - return (bool) ( m_EnabledLayers & 1 << aLayerIndex ); + return bool( m_EnabledLayers & (1 << aLayerIndex) ); } diff --git a/include/pcbstruct.h b/include/pcbstruct.h index 441d671c06..bbdd25c5e9 100644 --- a/include/pcbstruct.h +++ b/include/pcbstruct.h @@ -93,14 +93,14 @@ #define LAYER_14 (1 << LAYER_N_14) ///< bit mask for layer 14 #define LAYER_15 (1 << LAYER_N_15) ///< bit mask for layer 15 #define LAYER_FRONT (1 << LAYER_N_FRONT) ///< bit mask for component layer -#define ADHESIVE_LAYER_BACK (1 << ADHESIVE_N_BACK) -#define ADHESIVE_LAYER_FRONT (1 << ADHESIVE_N_FRONT) -#define SOLDERPASTE_LAYER_BACK (1 << SOLDERPASTE_N_BACK) -#define SOLDERPASTE_LAYER_FRONT (1 << SOLDERPASTE_N_FRONT) -#define SILKSCREEN_LAYER_BACK (1 << SILKSCREEN_N_BACK) -#define SILKSCREEN_LAYER_FRONT (1 << SILKSCREEN_N_FRONT) -#define SOLDERMASK_LAYER_BACK (1 << SOLDERMASK_N_BACK) -#define SOLDERMASK_LAYER_FRONT (1 << SOLDERMASK_N_FRONT) +#define ADHESIVE_LAYER_BACK (1 << ADHESIVE_N_BACK) +#define ADHESIVE_LAYER_FRONT (1 << ADHESIVE_N_FRONT) +#define SOLDERPASTE_LAYER_BACK (1 << SOLDERPASTE_N_BACK) +#define SOLDERPASTE_LAYER_FRONT (1 << SOLDERPASTE_N_FRONT) +#define SILKSCREEN_LAYER_BACK (1 << SILKSCREEN_N_BACK) +#define SILKSCREEN_LAYER_FRONT (1 << SILKSCREEN_N_FRONT) +#define SOLDERMASK_LAYER_BACK (1 << SOLDERMASK_N_BACK) +#define SOLDERMASK_LAYER_FRONT (1 << SOLDERMASK_N_FRONT) #define DRAW_LAYER (1 << DRAW_N) #define COMMENT_LAYER (1 << COMMENT_N) #define ECO1_LAYER (1 << ECO1_N) @@ -152,21 +152,37 @@ class RATSNEST_ITEM; /* Class to handle a board */ #include "class_board.h" -enum ELEMENTS_NUMBERS + +/** + * Enum PCB_VISIBLE + * is a set of visible PCB elements. + * @see BOARD::SetVisibleElementColor() + * @see BOARD::SetVisibleElement() + */ +enum PCB_VISIBLE { - VIAS_VISIBLE = 0, - VIA_NOT_DEFINED_VISIBLE = VIAS_VISIBLE, + VIAS_VISIBLE, VIA_MICROVIA_VISIBLE, - VIA_BLIND_BURIED_VISIBLE, + VIA_BBLIND_VISIBLE, VIA_THROUGH_VISIBLE, - MODULE_TEXT_CMP_VISIBLE, - MODULE_TEXT_CU_VISIBLE, - MODULE_TEXT_NOV_VISIBLE, + MOD_TEXT_FR_VISIBLE, + MOD_TEXT_BK_VISIBLE, + MOD_TEXT_INVISIBLE, ///< text marked as invisible ANCHOR_VISIBLE, - PAD_CU_VISIBLE, - PAD_CMP_VISIBLE + PAD_FR_VISIBLE, + PAD_BK_VISIBLE, + RATSNEST_VISIBLE, + GRID_VISIBLE, + + // the rest of these do not currently support color changes: + NO_CONNECTS_VISIBLE, ///< show a marker on pads with no nets + MOD_FR_VISIBLE, ///< show modules on front + MOD_BK_VISIBLE, ///< show modules on back + + END_VISIBLE // sentinel }; + /** * Function IsValidLayerIndex * tests whether a given integer is a valid layer index diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h index 3b92e26bfa..47ff1fdf9b 100644 --- a/include/wxPcbStruct.h +++ b/include/wxPcbStruct.h @@ -67,28 +67,17 @@ protected: { } - //-------- + //---------------- void OnLayerColorChange( int aLayer, int aColor ); bool OnLayerSelect( int aLayer ); void OnLayerVisible( int aLayer, bool isVisible, bool isFinal ); void OnRenderColorChange( int aId, int aColor ); void OnRenderEnable( int aId, bool isEnabled ); - //-------------------- + //--------------- }; - /// render rows are fixed, layer rows are dynamically determined. - static LAYER_WIDGET::ROW renderRows[]; - LYRS* m_Layers; // established in constructor - /** - * Function ReFillLayerWidget - * changes out all the layers in m_Layers and may be called upon - * loading a new BOARD. - */ - void ReFillLayerWidget(); - - public: WinEDAChoiceBox* m_SelLayerBox; // a combo box to display and // select active layer @@ -177,6 +166,13 @@ public: void ReCreateMenuBar(); WinEDAChoiceBox* ReCreateLayerBox( WinEDA_Toolbar* parent ); + /** + * Function ReFillLayerWidget + * changes out all the layers in m_Layers and may be called upon + * loading a new BOARD. + */ + void ReFillLayerWidget(); + void Show3D_Frame( wxCommandEvent& event ); void GeneralControle( wxDC* DC, wxPoint Mouse ); diff --git a/pcbnew/basepcbframe.cpp b/pcbnew/basepcbframe.cpp index d1024ed8da..4553b1c760 100644 --- a/pcbnew/basepcbframe.cpp +++ b/pcbnew/basepcbframe.cpp @@ -277,9 +277,9 @@ GENERAL_COLLECTORS_GUIDE WinEDA_BasePcbFrame::GetCollectorsGuide() ( (PCB_SCREEN*)GetScreen())->m_Active_Layer ); // account for the globals - guide.SetIgnoreMTextsMarkedNoShow( ! g_DesignSettings.IsElementVisible( MODULE_TEXT_NOV_VISIBLE )); - guide.SetIgnoreMTextsOnCopper( ! g_DesignSettings.IsElementVisible( MODULE_TEXT_CU_VISIBLE )); - guide.SetIgnoreMTextsOnCmp( ! g_DesignSettings.IsElementVisible( MODULE_TEXT_CMP_VISIBLE )); + guide.SetIgnoreMTextsMarkedNoShow( ! g_DesignSettings.IsElementVisible( MOD_TEXT_INVISIBLE )); + guide.SetIgnoreMTextsOnCopper( ! g_DesignSettings.IsElementVisible( MOD_TEXT_BK_VISIBLE )); + guide.SetIgnoreMTextsOnCmp( ! g_DesignSettings.IsElementVisible( MOD_TEXT_FR_VISIBLE )); guide.SetIgnoreModulesOnCu( !DisplayOpt.Show_Modules_Cu ); guide.SetIgnoreModulesOnCmp( !DisplayOpt.Show_Modules_Cmp ); diff --git a/pcbnew/class_board.cpp b/pcbnew/class_board.cpp index a37662d200..8b7bf7d0cb 100644 --- a/pcbnew/class_board.cpp +++ b/pcbnew/class_board.cpp @@ -396,11 +396,63 @@ int BOARD::GetVisibleElements() const return m_BoardSettings->GetVisibleElements(); } + +int BOARD::GetVisibleElementColor( int aPCB_VISIBLE ) +{ + int color = -1; + + // @todo move these globals into the board. + switch( aPCB_VISIBLE ) + { + case VIAS_VISIBLE: color = m_BoardSettings->m_ViaColor[VIA_THROUGH]; break; + case VIA_MICROVIA_VISIBLE: color = m_BoardSettings->m_ViaColor[VIA_MICROVIA]; break; + case VIA_BBLIND_VISIBLE: color = m_BoardSettings->m_ViaColor[VIA_BLIND_BURIED]; break; + case VIA_THROUGH_VISIBLE: color = g_ModuleTextCUColor; break; + case MOD_TEXT_FR_VISIBLE: color = g_ModuleTextCUColor; break; + case MOD_TEXT_BK_VISIBLE: color = g_ModuleTextCUColor; break; + case MOD_TEXT_INVISIBLE: color = g_ModuleTextNOVColor; break; + case ANCHOR_VISIBLE: color = g_AnchorColor; break; + case PAD_FR_VISIBLE: color = g_PadCMPColor; break; + case PAD_BK_VISIBLE: color = g_PadCUColor; break; + case RATSNEST_VISIBLE: color = m_BoardSettings->m_RatsnestColor; break; + case GRID_VISIBLE: color = g_GridColor; break; + default: + wxLogDebug("BOARD::GetVisibleElementColor(): bad arg %d", aPCB_VISIBLE ); + } + + return color; +} + + +void BOARD::SetVisibleElementColor( int aPCB_VISIBLE, int aColor ) +{ + // @todo move these globals into the board. + switch( aPCB_VISIBLE ) + { + case VIAS_VISIBLE: m_BoardSettings->m_ViaColor[VIA_THROUGH] = aColor; break; + case VIA_MICROVIA_VISIBLE: m_BoardSettings->m_ViaColor[VIA_MICROVIA] = aColor; break; + case VIA_BBLIND_VISIBLE: m_BoardSettings->m_ViaColor[VIA_BLIND_BURIED] = aColor; break; + case VIA_THROUGH_VISIBLE: g_ModuleTextCUColor = aColor; break; + case MOD_TEXT_FR_VISIBLE: g_ModuleTextCUColor = aColor; break; + case MOD_TEXT_BK_VISIBLE: g_ModuleTextCUColor = aColor; break; + case MOD_TEXT_INVISIBLE: g_ModuleTextNOVColor = aColor; break; + case ANCHOR_VISIBLE: g_AnchorColor = aColor; break; + case PAD_FR_VISIBLE: g_PadCMPColor = aColor; break; + case PAD_BK_VISIBLE: g_PadCUColor = aColor; break; + case RATSNEST_VISIBLE: m_BoardSettings->m_RatsnestColor = aColor; break; + case GRID_VISIBLE: g_GridColor = aColor; break; + default: + wxLogDebug("BOARD::SetVisibleElementColor(): bad arg %d", aPCB_VISIBLE ); + } +} + + void BOARD::SetLayerColor( int aLayer, int aColor ) { m_BoardSettings->SetLayerColor( aLayer, aColor ); } + int BOARD::GetLayerColor( int aLayer ) { return m_BoardSettings->GetLayerColor( aLayer ); diff --git a/pcbnew/class_board.h b/pcbnew/class_board.h index 5a079baee1..c6055f7caf 100644 --- a/pcbnew/class_board.h +++ b/pcbnew/class_board.h @@ -287,7 +287,8 @@ public: * Function GetVisibleElements * is a proxy function that calls the correspondent function in m_BoardSettings * returns a bit-mask of all the element categories that are visible - * @return int - the visible element categories in bit-mapped form. + * @return int - the visible element bitmap or-ed from enum PCB_VISIBLE + * @see enum PCB_VISIBLE */ int GetVisibleElements() const; @@ -295,10 +296,20 @@ public: * Function SetVisibleElements * is a proxy function that calls the correspondent function in m_BoardSettings * changes the bit-mask of visible element categories - * @param aMask = The new bit-mask of visible element categories + * @param aMask = The new bit-mask of visible element bitmap or-ed from enum PCB_VISIBLE + * @see enum PCB_VISIBLE */ void SetVisibleElements( int aMask ); + /** + * Function GetVisibleElementColor + * returns the color of a pcb visible element. + * @see enum PCB_VISIBLE + */ + int GetVisibleElementColor( int aPCB_VISIBLE ); + void SetVisibleElementColor( int aPCB_VISIBLE, int aColor ); + + /** * Function GetLayerName * returns the name of the layer given by aLayerIndex. @@ -345,8 +356,13 @@ public: */ void SetLayerColor( int aLayer, int aColor ); + /** + * Function GetLayerColor + * gets a layer color for any valid layer, including non-copper ones. + */ int GetLayerColor( int aLayer ); + /* Functions to get some items count */ int GetNumSegmTrack(); int GetNumSegmZone(); diff --git a/pcbnew/class_board_design_settings.cpp b/pcbnew/class_board_design_settings.cpp index 57205bf168..e8c2d6cd35 100644 --- a/pcbnew/class_board_design_settings.cpp +++ b/pcbnew/class_board_design_settings.cpp @@ -104,7 +104,7 @@ void EDA_BoardDesignSettings::SetLayerVisibility( int aLayerIndex, bool aNewStat void EDA_BoardDesignSettings::SetElementVisibility( int aElementCategory, bool aNewState ) { - if( aElementCategory < 0 || aElementCategory > PAD_CMP_VISIBLE ) + if( aElementCategory < 0 || aElementCategory >= END_VISIBLE ) return; if( aNewState ) m_VisibleElements |= 1 << aElementCategory; diff --git a/pcbnew/class_text_mod.cpp b/pcbnew/class_text_mod.cpp index 4a2f90dc2f..6b0c2abf85 100644 --- a/pcbnew/class_text_mod.cpp +++ b/pcbnew/class_text_mod.cpp @@ -378,20 +378,20 @@ void TEXTE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, if( Module->GetLayer() == LAYER_N_BACK ) { - if( g_DesignSettings.IsElementVisible( MODULE_TEXT_CU_VISIBLE ) == false ) + if( g_DesignSettings.IsElementVisible( MOD_TEXT_BK_VISIBLE ) == false ) return; color = g_ModuleTextCUColor; } else if( Module->GetLayer() == LAYER_N_FRONT ) { - if( g_DesignSettings.IsElementVisible( MODULE_TEXT_CMP_VISIBLE ) == false ) + if( g_DesignSettings.IsElementVisible( MOD_TEXT_FR_VISIBLE ) == false ) return; color = g_ModuleTextCMPColor; } if( m_NoShow ) { - if( g_DesignSettings.IsElementVisible( MODULE_TEXT_NOV_VISIBLE ) == false ) + if( g_DesignSettings.IsElementVisible( MOD_TEXT_INVISIBLE ) == false ) return; color = g_ModuleTextNOVColor; } diff --git a/pcbnew/class_track.cpp b/pcbnew/class_track.cpp index 2b64d4ce03..e0796d1725 100644 --- a/pcbnew/class_track.cpp +++ b/pcbnew/class_track.cpp @@ -725,7 +725,7 @@ void SEGVIA::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode, const wxPoi color = g_DesignSettings.m_ViaColor[m_Shape]; - if( g_DesignSettings.IsElementVisible( VIAS_VISIBLE + m_Shape ) == false + if( g_DesignSettings.IsElementVisible( PCB_VISIBLE(VIAS_VISIBLE + m_Shape) ) == false && ( color & HIGHT_LIGHT_FLAG ) != HIGHT_LIGHT_FLAG ) return; diff --git a/pcbnew/dialog_general_options.cpp b/pcbnew/dialog_general_options.cpp index 69d9dea946..68848fd4ca 100644 --- a/pcbnew/dialog_general_options.cpp +++ b/pcbnew/dialog_general_options.cpp @@ -250,7 +250,7 @@ void WinEDA_PcbFrame::OnSelectOptionToolbar( wxCommandEvent& event ) break; case ID_TB_OPTIONS_SHOW_INVISIBLE_TEXT_MODE: - g_DesignSettings.SetElementVisibility( MODULE_TEXT_NOV_VISIBLE, + g_DesignSettings.SetElementVisibility( MOD_TEXT_INVISIBLE, m_OptionsToolBar->GetToolState( id ) ); DrawPanel->Refresh(); break; diff --git a/pcbnew/dialog_layers_setup.cpp b/pcbnew/dialog_layers_setup.cpp index 3db1d4e050..44c05230b6 100644 --- a/pcbnew/dialog_layers_setup.cpp +++ b/pcbnew/dialog_layers_setup.cpp @@ -547,6 +547,7 @@ void DIALOG_LAYERS_SETUP::OnOkButtonClick( wxCommandEvent& event ) m_Parent->GetScreen()->SetModify(); m_Parent->ReCreateLayerBox( NULL ); + m_Parent->ReFillLayerWidget(); EndModal( wxID_OK ); } diff --git a/pcbnew/layer_panel_base.cpp b/pcbnew/layer_panel_base.cpp index 7654ca93ee..4a69e73d5a 100644 --- a/pcbnew/layer_panel_base.cpp +++ b/pcbnew/layer_panel_base.cpp @@ -19,7 +19,7 @@ LAYER_PANEL_BASE::LAYER_PANEL_BASE( wxWindow* parent, wxWindowID id, const wxPoi wxBoxSizer* bSizer3; bSizer3 = new wxBoxSizer( wxVERTICAL ); - m_LayerScrolledWindow = new wxScrolledWindow( m_LayerPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxVSCROLL ); + m_LayerScrolledWindow = new wxScrolledWindow( m_LayerPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER ); m_LayerScrolledWindow->SetScrollRate( 5, 5 ); m_LayersFlexGridSizer = new wxFlexGridSizer( 0, 4, 1, 3 ); m_LayersFlexGridSizer->SetFlexibleDirection( wxHORIZONTAL ); @@ -38,7 +38,7 @@ LAYER_PANEL_BASE::LAYER_PANEL_BASE( wxWindow* parent, wxWindowID id, const wxPoi wxBoxSizer* bSizer4; bSizer4 = new wxBoxSizer( wxVERTICAL ); - m_RenderScrolledWindow = new wxScrolledWindow( m_RenderingPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxVSCROLL ); + m_RenderScrolledWindow = new wxScrolledWindow( m_RenderingPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER ); m_RenderScrolledWindow->SetScrollRate( 5, 5 ); m_RenderFlexGridSizer = new wxFlexGridSizer( 0, 2, 1, 3 ); m_RenderFlexGridSizer->SetFlexibleDirection( wxHORIZONTAL ); diff --git a/pcbnew/layer_widget.cpp b/pcbnew/layer_widget.cpp index 95cdce9313..c53a4a46b5 100644 --- a/pcbnew/layer_widget.cpp +++ b/pcbnew/layer_widget.cpp @@ -210,6 +210,8 @@ void LAYER_WIDGET::OnLeftDownLayers( wxMouseEvent& event ) if( OnLayerSelect( row ) ) // if client allows this change. SelectLayerRow( row ); + + passOnFocus(); } @@ -234,6 +236,8 @@ void LAYER_WIDGET::OnMiddleDownLayerColor( wxMouseEvent& event ) // tell the client code. OnLayerColorChange( layer, newColor ); } + + passOnFocus(); } @@ -250,6 +254,8 @@ void LAYER_WIDGET::OnRightDownLayers( wxMouseEvent& event ) _( "Hide All Cu" ) ) ); PopupMenu( &menu ); + + passOnFocus(); } void LAYER_WIDGET::OnPopupSelection( wxCommandEvent& event ) @@ -307,6 +313,7 @@ void LAYER_WIDGET::OnLayerCheckBox( wxCommandEvent& event ) wxCheckBox* eventSource = (wxCheckBox*) event.GetEventObject(); int layer = getDecodedId( eventSource->GetId() ); OnLayerVisible( layer, eventSource->IsChecked() ); + passOnFocus(); } @@ -331,6 +338,7 @@ void LAYER_WIDGET::OnMiddleDownRenderColor( wxMouseEvent& event ) // tell the client code. OnRenderColorChange( id, newColor ); } + passOnFocus(); } void LAYER_WIDGET::OnRenderCheckBox( wxCommandEvent& event ) @@ -338,6 +346,7 @@ void LAYER_WIDGET::OnRenderCheckBox( wxCommandEvent& event ) wxCheckBox* eventSource = (wxCheckBox*) event.GetEventObject(); int id = getDecodedId( eventSource->GetId() ); OnRenderEnable( id, eventSource->IsChecked() ); + passOnFocus(); } @@ -437,6 +446,7 @@ void LAYER_WIDGET::insertRenderRow( int aRow, const ROW& aSpec ) col = 1; wxCheckBox* cb = new wxCheckBox( m_RenderScrolledWindow, encodeId( col, aSpec.id ), aSpec.rowName, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT ); + cb->SetValue( aSpec.state ); cb->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( LAYER_WIDGET::OnRenderCheckBox ), NULL, this ); cb->SetToolTip( aSpec.tooltip ); @@ -444,11 +454,22 @@ void LAYER_WIDGET::insertRenderRow( int aRow, const ROW& aSpec ) } +void LAYER_WIDGET::passOnFocus() +{ + wxWindow* parent = GetParent(); + parent->SetFocus(); + +// printf( "passOnFocus() %p %p\n", parent, m_OriginalParent ); +} + + //------------------------------------------------------------ LAYER_WIDGET::LAYER_WIDGET( wxWindow* parent ) : LAYER_PANEL_BASE( parent ) { + m_OriginalParent = parent; + m_CurrentRow = -1; m_RightArrowBitmap = new wxBitmap( rightarrow_xpm ); @@ -601,18 +622,16 @@ void LAYER_WIDGET::SelectLayerRow( int aRow ) { newbm->SetBitmap( *m_RightArrowBitmap ); - // Change the focus to the wxBitmapButton in column 1 for this row. - // We really do not need or want the focus, but because we get focus - // and it changes the appearance of these wxBitmapButtons, if any focused - // button is going to look different, we want it to be the current - // row. - getLayerComp( newNdx + 1 /* 1 is column */ )->SetFocus(); - // Make sure the desired layer row is visible. - // It seems that as of 2.8.2, setting the focus - // does this and generally I don't expect the scrolling to be needed at all because - // the minimum window size may end up being established by the number of layers. + // It seems that as of 2.8.2, setting the focus does this. + // I don't expect the scrolling to be needed at all because + // the minimum window size may end up being established so that the + // scroll bars will not be visible. + getLayerComp( newNdx + 1 /* 1 is column */ )->SetFocus(); } + + // give the focus back to the app. + passOnFocus(); } @@ -649,6 +668,7 @@ void LAYER_WIDGET::UpdateLayouts() { m_LayersFlexGridSizer->Layout(); m_RenderFlexGridSizer->Layout(); + FitInside(); } #if defined(STAND_ALONE) diff --git a/pcbnew/layer_widget.h b/pcbnew/layer_widget.h index 98545c76fc..911f60bc3d 100644 --- a/pcbnew/layer_widget.h +++ b/pcbnew/layer_widget.h @@ -74,6 +74,7 @@ public: protected: + wxWindow* m_OriginalParent; wxBitmap* m_BlankBitmap; wxBitmap* m_RightArrowBitmap; wxSize m_BitmapSize; @@ -139,6 +140,12 @@ protected: void insertRenderRow( int aRow, const ROW& aSpec ); + /** + * Function passOnFocus + * gives away the keyboard focus up to the main parent window. + */ + void passOnFocus(); + public: /** Constructor */ @@ -241,6 +248,22 @@ public: void UpdateLayouts(); +/* did not help: + void Freeze() + { + LAYER_PANEL_BASE::Freeze(); + m_LayerScrolledWindow->Freeze(); + m_RenderScrolledWindow->Freeze(); + } + + void Thaw() + { + m_RenderScrolledWindow->Thaw(); + m_LayerScrolledWindow->Thaw(); + LAYER_PANEL_BASE::Thaw(); + } +*/ + //------------------------------------------------ /** diff --git a/pcbnew/panel_layer_select.fbp b/pcbnew/panel_layer_select.fbp index e57a84e418..c2a623a39e 100644 --- a/pcbnew/panel_layer_select.fbp +++ b/pcbnew/panel_layer_select.fbp @@ -190,7 +190,7 @@ - wxNO_BORDER|wxVSCROLL + wxNO_BORDER @@ -307,7 +307,7 @@ - wxNO_BORDER|wxVSCROLL + wxNO_BORDER diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index c19088ec94..7a5f6f3030 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -9,6 +9,7 @@ #include "confirm.h" #include "pcbnew.h" #include "wxPcbStruct.h" +#include "pcbstruct.h" // enum PCB_VISIBLE #include "collectors.h" #include "bitmaps.h" #include "protos.h" @@ -210,24 +211,6 @@ END_EVENT_TABLE() ///////****************************///////////: -// the fixed "Rendering" tab rows within the LAYER_WIDGET: -LAYER_WIDGET::ROW WinEDA_PcbFrame::renderRows[] = { - // text id color tooltip checked - LAYER_WIDGET::ROW( _( "Through Via"), 0, LIGHTBLUE, _("Show through vias") ), - LAYER_WIDGET::ROW( _( "Blind/Buried Via"), 1, YELLOW, _("Show blind or buried vias") ), - LAYER_WIDGET::ROW( _( "Micro Via" ), 2, BROWN, _("Show micro vias") ), - LAYER_WIDGET::ROW( _( "Ratsnets" ), 3, BLUE, _("Show the ratsnest") ), - LAYER_WIDGET::ROW( _( "Mod Text Back" ), 4, WHITE, _("Show footprint text residing on board's back") ), - LAYER_WIDGET::ROW( _( "Mod Text Front" ), 5, WHITE, _("Show footprint text residing on board's front") ), - LAYER_WIDGET::ROW( _( "Mod Text Hide" ), 6, WHITE, _("TBD") ), - LAYER_WIDGET::ROW( _( "Anchors" ), 7, WHITE, _("TBD") ), -// LAYER_WIDGET::ROW( _( "Grid" ), 8, WHITE, _("Show grid") ), - LAYER_WIDGET::ROW( _( "Not Connecteds" ), 9, -1, _("TBD") ), - LAYER_WIDGET::ROW( _( "Modules Front" ), 10, -1, _("TBD") ), - LAYER_WIDGET::ROW( _( "Modules Back" ), 11, -1, _("TBD") ), -}; - - WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father, const wxString& title, const wxPoint& pos, const wxSize& size, @@ -246,9 +229,9 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father, m_show_layer_manager_tools = true; m_Layers = new LYRS( this ); - m_Layers->AppendRenderRows( renderRows, DIM(renderRows) ); SetBoard( new BOARD( NULL, this ) ); + m_TrackAndViasSizesList_Changed = true; m_drc = new DRC( this ); // these 2 objects point to each other @@ -282,6 +265,47 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father, ReCreateAuxVToolbar(); + // Fixed "Rendering" tab rows within the LAYER_WIDGET, only the initial color + // is changed before appending to the LAYER_WIDGET. This is an automatic variable + // not a static variable, change the color & state after copying from code to renderRows + // on the stack. + LAYER_WIDGET::ROW renderRows[14] = { + +#define RR LAYER_WIDGET::ROW // Render Row abreviation to reduce source width + + // text id color tooltip checked + RR( _( "Through Via" ), VIAS_VISIBLE, WHITE, _( "Show through vias" ) ), + RR( _( "Bl/Buried Via" ), VIA_MICROVIA_VISIBLE, WHITE, _( "Show blind or buried vias" ) ), + RR( _( "Micro Via" ), VIA_BBLIND_VISIBLE, WHITE, _( "Show micro vias") ), + RR( _( "Ratsnest" ), RATSNEST_VISIBLE, WHITE, _( "Show unconnected nets as a ratsnest") ), + + RR( _( "Pads Front" ), PAD_FR_VISIBLE, WHITE, _( "Show footprint pads on board's front" ) ), + RR( _( "Pads Back" ), PAD_BK_VISIBLE, WHITE, _( "Show footprint pads on board's back" ) ), + + RR( _( "Text Front" ), MOD_TEXT_FR_VISIBLE, WHITE, _( "Show footprint text on board's back" ) ), + RR( _( "Text Back" ), MOD_TEXT_BK_VISIBLE, WHITE, _( "Show footprint text on board's back" ) ), + RR( _( "Hidden Text" ), MOD_TEXT_INVISIBLE, WHITE, _( "Show footprint text marked as invisible" ) ), + + RR( _( "Anchors" ), ANCHOR_VISIBLE, WHITE, _( "Show footprint and text origins as a cross" ) ), + RR( _( "Grid" ), GRID_VISIBLE, WHITE, _( "Show the (x,y) grid dots" ) ), + RR( _( "No-Connects" ), NO_CONNECTS_VISIBLE, -1, _( "Show a marker on pads which have no net connected" ) ), + RR( _( "Modules Front" ), MOD_FR_VISIBLE, -1, _( "Show footprints that are on board's front") ), + RR( _( "Modules Back" ), MOD_BK_VISIBLE, -1, _( "Show footprints that are on board's back") ), + }; + + for( unsigned row=0; rowGetVisibleElementColor( renderRows[row].id ); + } + // @todo + // renderRows[row].state = GetBoard()->IsElementVisible( renderRows[row].id ); + } + + m_Layers->AppendRenderRows( renderRows, DIM(renderRows) ); + #if defined(KICAD_AUIMANAGER) m_auimgr.SetManagedWindow( this ); @@ -395,19 +419,64 @@ void WinEDA_PcbFrame::LYRS::OnLayerVisible( int aLayer, bool isVisible, bool isF void WinEDA_PcbFrame::LYRS::OnRenderColorChange( int aId, int aColor ) { - // @todo - //myframe->GetBoard()->SetLayerColor( aId, aColor ); - //myframe->DrawPanel->Refresh(); + myframe->GetBoard()->SetVisibleElementColor( aId, aColor ); + myframe->DrawPanel->Refresh(); } void WinEDA_PcbFrame::LYRS::OnRenderEnable( int aId, bool isEnabled ) { - // @todo - // mframe->GetBoard()->Set + BOARD* brd = myframe->GetBoard(); + + /* @todo: + + 1) move: + + RATSNEST_VISIBLE, + GRID_VISIBLE, ? maybe not this one + + NO_CONNECTS_VISIBLE, + MOD_FR_VISIBLE, + MOD_BK_VISIBLE, + + into m_VisibleElements and get rid of globals. + + 2) Add IsElementVisible() & SetVisibleElement() to class BOARD + */ + + switch( aId ) + { + // see todo above, don't really want anything except IsElementVisible() here. + + case GRID_VISIBLE: + myframe->m_Draw_Grid = isEnabled; + break; + + case MOD_FR_VISIBLE: + DisplayOpt.Show_Modules_Cmp = isEnabled; + break; + + case MOD_BK_VISIBLE: + DisplayOpt.Show_Modules_Cu = isEnabled; + break; + + default: + + int visibleElements = brd->GetVisibleElements(); + + if( isEnabled ) + visibleElements |= (1 << aId ); + else + visibleElements &= ~(1 << aId); + + brd->SetVisibleElements( visibleElements ); + } + + myframe->DrawPanel->Refresh(); } //----------------------------------------------- + void WinEDA_PcbFrame::ReFillLayerWidget() { BOARD* brd = GetBoard(); @@ -415,7 +484,7 @@ void WinEDA_PcbFrame::ReFillLayerWidget() int enabledLayers = brd->GetEnabledLayers(); - m_Layers->Freeze(); // no screen updates until done modifying +// m_Layers->Freeze(); // no screen updates until done modifying m_Layers->ClearLayerRows(); @@ -446,7 +515,52 @@ void WinEDA_PcbFrame::ReFillLayerWidget() m_Layers->SelectLayer( LAYER_N_FRONT ); - m_Layers->Thaw(); + // technical layers are shown in this order: + static const struct { + int layerId; + wxString tooltip; + } techLayerSeq[] = { + { ADHESIVE_N_FRONT, _("Adhesive on board's front") }, + { ADHESIVE_N_BACK, _("Adhesive on board's back") }, + { SOLDERPASTE_N_FRONT, _("Solder paste on board's front") }, + { SOLDERPASTE_N_BACK, _("Solder paste on board's back") }, + { SILKSCREEN_N_FRONT, _("Silkscreen on board's front") }, + { SILKSCREEN_N_BACK, _("Silkscreen on board's back") }, + { SOLDERMASK_N_FRONT, _("Solder mask on board's front") }, + { SOLDERMASK_N_BACK, _("Solder mask on board's back") }, + { DRAW_N, _("Explanatory drawings") }, + { COMMENT_N, _("Explanatory comments") }, + { ECO1_N, _("TDB") }, + { ECO2_N, _("TBD") }, + { EDGE_N, _("Board's perimeter definition") }, + }; + + for( unsigned i=0; iAppendLayerRow( LAYER_WIDGET::ROW( + brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), + techLayerSeq[i].tooltip, true ) ); + } + +// m_Layers->Thaw(); + + wxAuiPaneInfo& lyrs = m_auimgr.GetPane( m_Layers ); + + wxSize bestz = m_Layers->GetBestSize(); + + lyrs.MinSize( bestz ); + lyrs.BestSize( bestz ); + lyrs.FloatingSize( bestz ); + + if( lyrs.IsDocked() ) + m_auimgr.Update(); + else + m_Layers->SetSize( bestz ); } @@ -522,6 +636,7 @@ void WinEDA_PcbFrame::ShowDesignRulesEditor( wxCommandEvent& event ) if( returncode == wxID_OK ) // New rules, or others changes. { ReCreateLayerBox( NULL ); + // ReFillLayerWidget(); why? GetScreen()->SetModify(); } } diff --git a/pcbnew/pcbnew_config.cpp b/pcbnew/pcbnew_config.cpp index f0386fa49a..fb01fdee46 100644 --- a/pcbnew/pcbnew_config.cpp +++ b/pcbnew/pcbnew_config.cpp @@ -189,13 +189,13 @@ bool WinEDA_PcbFrame::Read_Config( const wxString& projectFileName ) DisplayOpt.Show_Modules_Cmp = true; DisplayOpt.Show_Modules_Cu = true; - g_DesignSettings.SetElementVisibility( MODULE_TEXT_NOV_VISIBLE, true ); - g_DesignSettings.SetElementVisibility( MODULE_TEXT_CMP_VISIBLE, true ); - g_DesignSettings.SetElementVisibility( MODULE_TEXT_CU_VISIBLE, true ); - g_DesignSettings.SetElementVisibility( PAD_CMP_VISIBLE, true ); - g_DesignSettings.SetElementVisibility( PAD_CU_VISIBLE, true ); + g_DesignSettings.SetElementVisibility( MOD_TEXT_INVISIBLE, true ); + g_DesignSettings.SetElementVisibility( MOD_TEXT_FR_VISIBLE, true ); + g_DesignSettings.SetElementVisibility( MOD_TEXT_BK_VISIBLE, true ); + g_DesignSettings.SetElementVisibility( PAD_BK_VISIBLE, true ); + g_DesignSettings.SetElementVisibility( PAD_BK_VISIBLE, true ); g_DesignSettings.SetElementVisibility( VIA_THROUGH_VISIBLE, true ); - g_DesignSettings.SetElementVisibility( VIA_BLIND_BURIED_VISIBLE, true ); + g_DesignSettings.SetElementVisibility( VIA_BBLIND_VISIBLE, true ); g_DesignSettings.SetElementVisibility( VIA_MICROVIA_VISIBLE, true ); // Items that can remain not visible: comment them if you want. diff --git a/pcbnew/set_color.h b/pcbnew/set_color.h index 6321d4c66f..9a80ccab71 100644 --- a/pcbnew/set_color.h +++ b/pcbnew/set_color.h @@ -373,7 +373,7 @@ static ColorButton Pad_Cu_Butt = { type_element, // Toggle ITEM_NOT_SHOW bit of the color variable _( "Pad Back" ), // Title - PAD_CU_VISIBLE, + PAD_BK_VISIBLE, &g_PadCUColor // Address of optional parameter }; @@ -381,7 +381,7 @@ static ColorButton Pad_Cmp_Butt = { type_element, // Toggle ITEM_NOT_SHOW bit of the color variable _( "Pad Front" ), // Title - PAD_CMP_VISIBLE, + PAD_FR_VISIBLE, &g_PadCMPColor // Address of optional parameter }; @@ -389,7 +389,7 @@ static ColorButton Text_Mod_Cu_Butt = { type_element, // Toggle ITEM_NOT_SHOW bit of the color variable _( "Text Module Back" ), // Title - MODULE_TEXT_CU_VISIBLE, + MOD_TEXT_BK_VISIBLE, &g_ModuleTextCUColor // Address of optional parameter }; @@ -397,7 +397,7 @@ static ColorButton Text_Mod_Cmp_Butt = { type_element, // Toggle ITEM_NOT_SHOW bit of the color variable _( "Text Module Front" ), // Title - MODULE_TEXT_CMP_VISIBLE, + MOD_TEXT_FR_VISIBLE, &g_ModuleTextCMPColor // Address of optional parameter }; @@ -405,13 +405,13 @@ static ColorButton Text_Mod_NoVisible_Butt = { type_element, // Toggle ITEM_NOT_SHOW bit of the color variable _( "Text Module invisible" ), // Title - MODULE_TEXT_NOV_VISIBLE, + MOD_TEXT_INVISIBLE, &g_ModuleTextNOVColor // Address of optional parameter }; static ColorButton Anchors_Butt = { - type_element, // Toggle ITEM_NOT_SHOW bit of the color variable + type_element, // Toggle ITEM_NOT_SHOW bit of the color variableg_ModuleTextNOVColor _( "Anchors" ), // Title ANCHOR_VISIBLE, &g_AnchorColor // Address of optional parameter diff --git a/pcbnew/tool_pcb.cpp b/pcbnew/tool_pcb.cpp index 947813f5eb..eda342beb6 100644 --- a/pcbnew/tool_pcb.cpp +++ b/pcbnew/tool_pcb.cpp @@ -24,14 +24,15 @@ #include "hotkeys.h" +#define MUWAVE_ENBL + #define SEL_LAYER_HELP _( \ "Show active layer selections\nand select layer pair for route and place via" ) /* Data to build the layer pair indicator button */ static wxBitmap* LayerPairBitmap = NULL; -static const char s_BitmapLayerIcon[16][16] = -{ +static const char s_BitmapLayerIcon[16][16] = { // 0 = draw pixel with active layer color // 1 = draw pixel with top layer color (top/bottom layer used in // autoroute and place via) @@ -69,22 +70,19 @@ void WinEDA_PcbFrame::PrepareLayerIndicator() previous_Route_Layer_BOTTOM_color, previous_via_color; /* get colors, and redraw bitmap button only on changes */ - active_layer_color = - g_DesignSettings.m_LayerColor[( (PCB_SCREEN*) GetScreen() )->m_Active_Layer]; + active_layer_color = g_DesignSettings.m_LayerColor[((PCB_SCREEN*)GetScreen())->m_Active_Layer]; if( previous_active_layer_color != active_layer_color ) { previous_active_layer_color = active_layer_color; change = true; } - Route_Layer_TOP_color = - g_DesignSettings.m_LayerColor[( (PCB_SCREEN*) GetScreen() )->m_Route_Layer_TOP]; + Route_Layer_TOP_color = g_DesignSettings.m_LayerColor[((PCB_SCREEN*)GetScreen())->m_Route_Layer_TOP]; if( previous_Route_Layer_TOP_color != Route_Layer_TOP_color ) { previous_Route_Layer_TOP_color = Route_Layer_TOP_color; change = true; } - Route_Layer_BOTTOM_color = - g_DesignSettings.m_LayerColor[( (PCB_SCREEN*) GetScreen() )->m_Route_Layer_BOTTOM]; + Route_Layer_BOTTOM_color = g_DesignSettings.m_LayerColor[((PCB_SCREEN*)GetScreen())->m_Route_Layer_BOTTOM]; if( previous_Route_Layer_BOTTOM_color != Route_Layer_BOTTOM_color ) { previous_Route_Layer_BOTTOM_color = Route_Layer_BOTTOM_color; @@ -179,7 +177,7 @@ void WinEDA_PcbFrame::PrepareLayerIndicator() /* Creates or updates the main horizontal toolbar for the board editor - */ +*/ void WinEDA_PcbFrame::ReCreateHToolbar() { wxString msg; @@ -194,49 +192,48 @@ void WinEDA_PcbFrame::ReCreateHToolbar() m_HToolBar = new WinEDA_Toolbar( TOOLBAR_MAIN, this, ID_H_TOOLBAR, true ); m_HToolBar->SetRows( 1 ); #if !defined(KICAD_AUIMANAGER) - SetToolBar( (wxToolBar*) m_HToolBar ); + SetToolBar( (wxToolBar*)m_HToolBar ); #endif - // Set up toolbar m_HToolBar->AddTool( ID_NEW_BOARD, wxEmptyString, wxBitmap( new_xpm ), - _( "New board" ) ); + _( "New board" ) ); m_HToolBar->AddTool( ID_LOAD_FILE, wxEmptyString, wxBitmap( open_xpm ), - _( "Open existing board" ) ); + _( "Open existing board" ) ); m_HToolBar->AddTool( ID_SAVE_BOARD, wxEmptyString, wxBitmap( save_xpm ), - _( "Save board" ) ); + _( "Save board" ) ); m_HToolBar->AddSeparator(); m_HToolBar->AddTool( ID_SHEET_SET, wxEmptyString, wxBitmap( sheetset_xpm ), - _( "Page settings (size, texts)" ) ); + _( "Page settings (size, texts)" ) ); m_HToolBar->AddSeparator(); m_HToolBar->AddTool( ID_OPEN_MODULE_EDITOR, wxEmptyString, - wxBitmap( modedit_xpm ), - _( "Open module editor" ) ); + wxBitmap( modedit_xpm ), + _( "Open module editor" ) ); m_HToolBar->AddSeparator(); m_HToolBar->AddTool( wxID_CUT, wxEmptyString, wxBitmap( cut_button ), - _( "Cut selected item" ) ); + _( "Cut selected item" ) ); #if 0 m_HToolBar->AddTool( wxID_COPY, wxEmptyString, wxBitmap( copy_button ), - _( "Copy selected item" ) ); + _( "Copy selected item" ) ); m_HToolBar->AddTool( wxID_PASTE, wxEmptyString, wxBitmap( paste_xpm ), - _( "Paste" ) ); + _( "Paste" ) ); #endif m_HToolBar->AddSeparator(); m_HToolBar->AddTool( wxID_UNDO, wxEmptyString, wxBitmap( undo_xpm ), - _( "Undo last edition" ) ); + _( "Undo last edition" ) ); m_HToolBar->AddTool( wxID_REDO, wxEmptyString, wxBitmap( redo_xpm ), - _( "Redo the last undo command" ) ); + _( "Redo the last undo command" ) ); m_HToolBar->AddSeparator(); m_HToolBar->AddTool( ID_GEN_PRINT, wxEmptyString, wxBitmap( print_button ), - _( "Print board" ) ); + _( "Print board" ) ); m_HToolBar->AddTool( ID_GEN_PLOT, wxEmptyString, wxBitmap( plot_xpm ), - _( "Plot (HPGL, PostScript, or GERBER format)" ) ); + _( "Plot (HPGL, PostScript, or GERBER format)" ) ); m_HToolBar->AddSeparator(); msg = AddHotkeyName( _( "Zoom in" ), s_Board_Editor_Hokeys_Descr, @@ -268,9 +265,9 @@ void WinEDA_PcbFrame::ReCreateHToolbar() m_HToolBar->AddSeparator(); m_HToolBar->AddTool( ID_GET_NETLIST, wxEmptyString, wxBitmap( netlist_xpm ), - _( "Read netlist" ) ); + _( "Read netlist" ) ); m_HToolBar->AddTool( ID_DRC_CONTROL, wxEmptyString, wxBitmap( erc_xpm ), - _( "Perform design rules check" ) ); + _( "Perform design rules check" ) ); m_HToolBar->AddSeparator(); @@ -292,8 +289,8 @@ void WinEDA_PcbFrame::ReCreateHToolbar() // Fast call to FreeROUTE Web Bases router m_HToolBar->AddSeparator(); m_HToolBar->AddTool( ID_TOOLBARH_PCB_FREEROUTE_ACCESS, wxEmptyString, - wxBitmap( web_support_xpm ), - _( "Fast access to theWeb Based FreeROUTE advanced router" ) ); + wxBitmap( web_support_xpm ), + _( "Fast access to theWeb Based FreeROUTE advanced router" ) ); // after adding the buttons to the toolbar, must call Realize() to reflect // the changes @@ -348,18 +345,18 @@ void WinEDA_PcbFrame::ReCreateOptToolbar() m_OptionsToolBar->AddSeparator(); m_OptionsToolBar->AddRadioTool( ID_TB_OPTIONS_SHOW_ZONES, wxEmptyString, - wxBitmap( show_zone_xpm ), wxNullBitmap, - _( "Show filled areas in zones" ) ); + wxBitmap( show_zone_xpm ), wxNullBitmap, + _( "Show filled areas in zones" ) ); m_OptionsToolBar->AddRadioTool( ID_TB_OPTIONS_SHOW_ZONES_DISABLE, - wxEmptyString, - wxBitmap( show_zone_disable_xpm ), - wxNullBitmap, - _( "Do not show filled areas in zones" ) ); + wxEmptyString, + wxBitmap( show_zone_disable_xpm ), + wxNullBitmap, + _( "Do not show filled areas in zones" )); m_OptionsToolBar->AddRadioTool( ID_TB_OPTIONS_SHOW_ZONES_OUTLINES_ONLY, - wxEmptyString, - wxBitmap( show_zone_outline_only_xpm ), - wxNullBitmap, - _( "Show outlines of filled areas only in zones" ) ); + wxEmptyString, + wxBitmap( show_zone_outline_only_xpm ), + wxNullBitmap, + _( "Show outlines of filled areas only in zones" ) ); m_OptionsToolBar->AddSeparator(); m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_PADS_SKETCH, wxEmptyString, @@ -388,23 +385,17 @@ void WinEDA_PcbFrame::ReCreateOptToolbar() _( "Show invisible text" ), wxITEM_CHECK ); m_OptionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_INVISIBLE_TEXT_MODE, - g_DesignSettings.IsElementVisible( MODULE_TEXT_NOV_VISIBLE ) ); + g_DesignSettings.IsElementVisible( MOD_TEXT_INVISIBLE )); +#ifdef MUWAVE_ENBL m_OptionsToolBar->AddSeparator(); - m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_MANAGE_LAYERS_VERTICAL_TOOLBAR, - wxEmptyString, - wxBitmap( layers_manager_xpm ), - _( - "Display/remove auxiliary vertical toolbar (tools for micro wave applications)\n This is a experimental feature (under development)" ), - wxITEM_CHECK ); - m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_EXTRA_VERTICAL_TOOLBAR1, wxEmptyString, wxBitmap( mw_toolbar_xpm ), - _( - "Display/remove auxiliary vertical toolbar (tools for micro wave applications)\n This is a experimental feature (under development)" ), + _( "Display/remove auxiliary vertical toolbar (tools for micro wave applications)\n This is a experimental feature (under development)" ), wxITEM_CHECK ); +#endif m_OptionsToolBar->Realize(); SetToolbars(); @@ -503,18 +494,18 @@ void WinEDA_PcbFrame::ReCreateAuxVToolbar() // Set up toolbar m_AuxVToolBar->AddTool( ID_PCB_MUWAVE_TOOL_SELF_CMD, wxEmptyString, - wxBitmap( mw_Add_Line_xpm ), - _( "Create line of specified length for microwave applications" ) ); + wxBitmap( mw_Add_Line_xpm ), + _( "Create line of specified length for microwave applications" ) ); m_AuxVToolBar->AddTool( ID_PCB_MUWAVE_TOOL_GAP_CMD, wxEmptyString, - wxBitmap( mw_Add_Gap_xpm ), - _( "Create gap of specified length for microwave applications" ) ); + wxBitmap( mw_Add_Gap_xpm ), + _( "Create gap of specified length for microwave applications" ) ); m_AuxVToolBar->AddSeparator(); m_AuxVToolBar->AddTool( ID_PCB_MUWAVE_TOOL_STUB_CMD, wxEmptyString, - wxBitmap( mw_Add_Stub_xpm ), - _( "Create stub of specified length for microwave applications" ) ); + wxBitmap( mw_Add_Stub_xpm ), + _( "Create stub of specified length for microwave applications" ) ); m_AuxVToolBar->AddTool( ID_PCB_MUWAVE_TOOL_STUB_ARC_CMD, wxEmptyString, wxBitmap( mw_Add_stub_arc_xpm ), @@ -522,8 +513,8 @@ void WinEDA_PcbFrame::ReCreateAuxVToolbar() ); m_AuxVToolBar->AddTool( ID_PCB_MUWAVE_TOOL_FUNCTION_SHAPE_CMD, wxEmptyString, - wxBitmap( mw_Add_Shape_xpm ), - _( "Create a polynomial shape for microwave applications" ) ); + wxBitmap( mw_Add_Shape_xpm ), + _( "Create a polynomial shape for microwave applications" ) ); m_AuxVToolBar->Realize(); @@ -556,17 +547,17 @@ void WinEDA_PcbFrame::ReCreateAuxiliaryToolbar() // Creates box to display and choose tracks widths: m_SelTrackWidthBox = new WinEDAChoiceBox( m_AuxiliaryToolBar, - ID_AUX_TOOLBAR_PCB_TRACK_WIDTH, - wxPoint( -1, -1 ), - wxSize( LISTBOX_WIDTH, -1 ) ); + ID_AUX_TOOLBAR_PCB_TRACK_WIDTH, + wxPoint( -1, -1 ), + wxSize( LISTBOX_WIDTH, -1 ) ); m_AuxiliaryToolBar->AddControl( m_SelTrackWidthBox ); m_AuxiliaryToolBar->AddSeparator(); // Creates box to display and choose vias diameters: m_SelViaSizeBox = new WinEDAChoiceBox( m_AuxiliaryToolBar, - ID_AUX_TOOLBAR_PCB_VIA_SIZE, - wxPoint( -1, -1 ), - wxSize( (LISTBOX_WIDTH * 12) / 10, -1 ) ); + ID_AUX_TOOLBAR_PCB_VIA_SIZE, + wxPoint( -1, -1 ), + wxSize( (LISTBOX_WIDTH*12)/10, -1 ) ); m_AuxiliaryToolBar->AddControl( m_SelViaSizeBox ); m_AuxiliaryToolBar->AddSeparator(); @@ -575,7 +566,7 @@ void WinEDA_PcbFrame::ReCreateAuxiliaryToolbar() wxEmptyString, wxPoint( -1, -1 ), wxSize( LISTBOX_WIDTH + 10, -1 ), wxTE_READONLY ); - m_ClearanceBox->SetToolTip( _( "Current NetClass clearance value" ) ); + m_ClearanceBox->SetToolTip(_("Current NetClass clearance value") ); m_AuxiliaryToolBar->AddControl( m_ClearanceBox ); m_AuxiliaryToolBar->AddSeparator(); @@ -584,7 +575,7 @@ void WinEDA_PcbFrame::ReCreateAuxiliaryToolbar() wxEmptyString, wxPoint( -1, -1 ), wxSize( LISTBOX_WIDTH, -1 ), wxTE_READONLY ); - m_NetClassSelectedBox->SetToolTip( _( "Name of the current NetClass" ) ); + m_NetClassSelectedBox->SetToolTip(_("Name of the current NetClass") ); m_AuxiliaryToolBar->AddControl( m_NetClassSelectedBox ); m_AuxiliaryToolBar->AddSeparator(); @@ -593,37 +584,36 @@ void WinEDA_PcbFrame::ReCreateAuxiliaryToolbar() m_AuxiliaryToolBar->AddTool( ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH, wxEmptyString, wxBitmap( auto_track_width_xpm ), - _( - "Auto track width: when starting on \ -an existing track use its width\notherwise, use current width setting" ), + _( "Auto track width: when starting on \ +an existing track use its width\notherwise, use current width setting" ), wxITEM_CHECK ); // Add the box to display and select the current grid size: m_AuxiliaryToolBar->AddSeparator(); m_SelGridBox = new WinEDAChoiceBox( m_AuxiliaryToolBar, - ID_ON_GRID_SELECT, - wxPoint( -1, -1 ), - wxSize( LISTBOX_WIDTH, -1 ) ); + ID_ON_GRID_SELECT, + wxPoint( -1, -1 ), + wxSize( LISTBOX_WIDTH, -1 ) ); m_AuxiliaryToolBar->AddControl( m_SelGridBox ); // Add the box to display and select the current Zoom m_AuxiliaryToolBar->AddSeparator(); m_SelZoomBox = new WinEDAChoiceBox( m_AuxiliaryToolBar, - ID_ON_ZOOM_SELECT, - wxPoint( -1, -1 ), - wxSize( LISTBOX_WIDTH, -1 ) ); + ID_ON_ZOOM_SELECT, + wxPoint( -1, -1 ), + wxSize( LISTBOX_WIDTH, -1 ) ); msg = _( "Auto" ); m_SelZoomBox->Append( msg ); - for( int i = 0; i < (int) GetScreen()->m_ZoomList.GetCount(); i++ ) + for( int i = 0; i < (int)GetScreen()->m_ZoomList.GetCount(); i++ ) { msg = _( "Zoom " ); - if( (GetScreen()->m_ZoomList[i] % GetScreen()->m_ZoomScalar) == 0 ) + if ( (GetScreen()->m_ZoomList[i] % GetScreen()->m_ZoomScalar) == 0 ) msg << GetScreen()->m_ZoomList[i] / GetScreen()->m_ZoomScalar; else { wxString value; value.Printf( wxT( "%.1f" ), - (float) GetScreen()->m_ZoomList[i] / + (float)GetScreen()->m_ZoomList[i] / GetScreen()->m_ZoomScalar ); msg += value; } @@ -638,7 +628,7 @@ an existing track use its width\notherwise, use current width setting" // Update displayed values m_SelGridBox->Clear(); - wxString format = _( "Grid" ); + wxString format = _( "Grid"); if( g_UnitMetric == INCHES ) format += wxT( " %.1f" ); else @@ -646,9 +636,9 @@ an existing track use its width\notherwise, use current width setting" for( i = 0; i < GetScreen()->m_GridList.GetCount(); i++ ) { - GRID_TYPE grid = GetScreen()->m_GridList[i]; - double value = To_User_Unit( g_UnitMetric, grid.m_Size.x, - m_InternalUnits ); + GRID_TYPE grid = GetScreen()->m_GridList[i]; + double value = To_User_Unit( g_UnitMetric, grid.m_Size.x, + m_InternalUnits ); if( grid.m_Id != ID_POPUP_GRID_USER ) { if( g_UnitMetric == INCHES ) @@ -665,7 +655,7 @@ an existing track use its width\notherwise, use current width setting" m_SelGridBox->SetSelection( i ); } - m_TrackAndViasSizesList_Changed = true; + m_TrackAndViasSizesList_Changed = true; ReCreateLayerBox( NULL ); SetToolbars(); @@ -679,13 +669,13 @@ void WinEDA_PcbFrame::UpdateToolbarLayerInfo() // Enable the display on the correct layer // To avoid reentrancy ( Bug wxGTK Linux version? ), the selection is // made where it is bad ( corrected on wxGTK 2.6.0 ) - int count = m_SelLayerBox->GetCount(); - int choice = m_SelLayerBox->GetChoice(); - int layer = GetScreen()->m_Active_Layer; + int count = m_SelLayerBox->GetCount(); + int choice = m_SelLayerBox->GetChoice(); + int layer = GetScreen()->m_Active_Layer; - for( int listNdx = 0; listNdxGetClientData( listNdx ) == layer ) + if( (int) (size_t) m_SelLayerBox->GetClientData( listNdx ) == layer ) { if( listNdx != choice ) m_SelLayerBox->SetSelection( listNdx ); @@ -705,11 +695,11 @@ WinEDAChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent ) m_SelLayerBox = new WinEDAChoiceBox( parent, ID_TOOLBARH_PCB_SELECT_LAYER, wxPoint( -1, -1 ), -#if defined(__UNIX__) +#if defined (__UNIX__) - // Width enough for the longest - // string: "Component (Page Down)" - // Maybe that string is too long? + // Width enough for the longest + // string: "Component (Page Down)" + // Maybe that string is too long? wxSize( 230, -1 ) #else wxSize( LISTBOX_WIDTH + 30, -1 ) @@ -719,16 +709,20 @@ WinEDAChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent ) parent->AddControl( m_SelLayerBox ); } +/* + int layer_mask = g_TabAllCopperLayerMask[g_DesignSettings.m_CopperLayerCount - 1]; + + layer_mask |= ALL_NO_CU_LAYERS; +*/ int layer_mask = g_DesignSettings.GetEnabledLayers(); - unsigned length = 0; + unsigned length = 0; m_SelLayerBox->Clear(); - for( int layer = 0, listNdx = 0; layer <= EDGE_N; layer++ ) + for( int layer=0, listNdx=0; layer <= EDGE_N; layer++ ) { // List to append hotkeys in layer box selection - static const int HK_SwitchLayer[EDGE_N + 1] = - { + static const int HK_SwitchLayer[EDGE_N + 1] = { HK_SWITCH_LAYER_TO_COPPER, HK_SWITCH_LAYER_TO_INNER1, HK_SWITCH_LAYER_TO_INNER2, @@ -752,13 +746,10 @@ WinEDAChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent ) wxString msg = GetBoard()->GetLayerName( layer ); msg = AddHotkeyName( msg, s_Board_Editor_Hokeys_Descr, HK_SwitchLayer[layer] ); - - /* we are using tabs in AddHotkeyName message. - * this is not handled by m_SelLayerBox. - * so we replace them by 3 spaces - */ - msg.Replace( wxT( "\t"), wxT( " " ) ); m_SelLayerBox->Append( msg ); + + //D(printf("appending layername=%s, ndx=%d, layer=%d\n", CONV_TO_UTF8(msg), listNdx, layer );) + m_SelLayerBox->SetClientData( listNdx, (void*) layer ); length = MAX( length, msg.Len() ); listNdx++; diff --git a/pcbnew/toolbars_update_user_interface.cpp b/pcbnew/toolbars_update_user_interface.cpp index eda5f9f184..a8eb3d17c0 100644 --- a/pcbnew/toolbars_update_user_interface.cpp +++ b/pcbnew/toolbars_update_user_interface.cpp @@ -267,9 +267,9 @@ void WinEDA_PcbFrame::SetToolbars() _( "High contrast display mode" ) ); m_OptionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_INVISIBLE_TEXT_MODE, - g_DesignSettings.IsElementVisible( MODULE_TEXT_NOV_VISIBLE ) ); + g_DesignSettings.IsElementVisible( MOD_TEXT_INVISIBLE ) ); m_OptionsToolBar->SetToolShortHelp( ID_TB_OPTIONS_SHOW_INVISIBLE_TEXT_MODE, - g_DesignSettings.IsElementVisible( MODULE_TEXT_NOV_VISIBLE ) ? + g_DesignSettings.IsElementVisible( MOD_TEXT_INVISIBLE ) ? _( "Hide invisible text" ) : _( "Show invisible text" ) );