PCBNew auxiliary tool bar changes and other minor improvements.

* Remove clearance and net class name read only text boxes from PCBNew
  auxiliary tool bar.
* Display full net class information in message panel when an object that
  supports net classes is selected.
* Move coordinate string conversion function to EDA_DRAW_FRAME object and
  made it more versatile.
* Refresh message panel text when units change.
This commit is contained in:
Wayne Stambaugh 2011-03-11 10:53:28 -05:00
parent 2f47b3f464
commit 018292a8c6
15 changed files with 86 additions and 129 deletions

View File

@ -138,6 +138,17 @@ EDA_DRAW_FRAME::~EDA_DRAW_FRAME()
} }
void EDA_DRAW_FRAME::unitsChangeRefresh()
{
UpdateStatusBar();
EDA_ITEM* item = GetScreen()->GetCurItem();
if( item )
item->DisplayInfo( this );
}
void EDA_DRAW_FRAME::EraseMsgBox() void EDA_DRAW_FRAME::EraseMsgBox()
{ {
if( MsgPanel ) if( MsgPanel )
@ -793,3 +804,37 @@ void EDA_DRAW_FRAME::ClearMsgPanel( void )
MsgPanel->EraseMsgBox(); MsgPanel->EraseMsgBox();
} }
wxString EDA_DRAW_FRAME::CoordinateToString( int aValue, bool aConvertToMils )
{
wxString text;
const wxChar* format;
double value = To_User_Unit( g_UserUnit, aValue, m_InternalUnits );
if( g_UserUnit == INCHES )
{
if( aConvertToMils )
{
format = ( m_InternalUnits == EESCHEMA_INTERNAL_UNIT ) ? wxT( "%.0f" ) : wxT( "%.1f" );
value *= 1000;
}
else
{
format = ( m_InternalUnits == EESCHEMA_INTERNAL_UNIT ) ? wxT( "%.3f" ) : wxT( "%.4f" );
}
}
else
{
format = ( m_InternalUnits == EESCHEMA_INTERNAL_UNIT ) ? wxT( "%.2f" ) : wxT( "%.3f" );
}
text.Printf( format, value );
if( g_UserUnit == INCHES )
text += ( aConvertToMils ) ? _( " mils" ) : _( " in" );
else
text += _( " mm" );
return text;
}

View File

@ -55,7 +55,6 @@ class PCB_EDIT_FRAME : public PCB_BASE_FRAME
void updateTraceWidthSelectBox(); void updateTraceWidthSelectBox();
void updateViaSizeSelectBox(); void updateViaSizeSelectBox();
void updateDesignRulesSelectBoxes();
protected: protected:
@ -120,12 +119,6 @@ public:
// select current track width // select current track width
WinEDAChoiceBox* m_SelViaSizeBox; // a combo box to display and WinEDAChoiceBox* m_SelViaSizeBox; // a combo box to display and
// select current via diameter // select current via diameter
wxTextCtrl* m_ClearanceBox; // a text ctrl to display the
// current tracks and vias
// clearance
wxTextCtrl* m_NetClassSelectedBox; // a text ctrl to display the
// current NetClass
bool m_TrackAndViasSizesList_Changed;
bool m_show_microwave_tools; bool m_show_microwave_tools;
bool m_show_layer_manager_tools; bool m_show_layer_manager_tools;
@ -1148,7 +1141,6 @@ public:
*/ */
virtual void SetLanguage( wxCommandEvent& event ); virtual void SetLanguage( wxCommandEvent& event );
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };

View File

@ -258,7 +258,7 @@ protected:
* default version only updates the status bar. Don't forget to call the default * default version only updates the status bar. Don't forget to call the default
* in your derived class or the status bar will not get updated properly. * in your derived class or the status bar will not get updated properly.
*/ */
virtual void unitsChangeRefresh() { UpdateStatusBar(); } virtual void unitsChangeRefresh();
public: public:
EDA_DRAW_FRAME( wxWindow* father, int idtype, EDA_DRAW_FRAME( wxWindow* father, int idtype,
@ -557,6 +557,17 @@ public:
*/ */
virtual void PrintPage( wxDC* aDC, int aPrintMask, bool aPrintMirrorMode, void* aData = NULL ); virtual void PrintPage( wxDC* aDC, int aPrintMask, bool aPrintMirrorMode, void* aData = NULL );
/**
* Function CoordinateToString
* is a helper to convert the integer coordinate \a aValue to a string in inches or mm
* according to the current user units setting.
* @param aValue The coordinate to convert.
* @param aConvertToMils Convert inch values to mils if true. This setting has no effect if
* the current user unit is millimeters.
* @return The converted string for display in user interface elements.
*/
wxString CoordinateToString( int aValue, bool aConvertToMils = false );
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };

View File

@ -951,9 +951,28 @@ void TRACK::DisplayInfo( EDA_DRAW_FRAME* frame )
{ {
int trackLen = 0; int trackLen = 0;
Marque_Une_Piste( board, this, NULL, &trackLen, false ); Marque_Une_Piste( board, this, NULL, &trackLen, false );
valeur_param( trackLen, msg ); msg = frame->CoordinateToString( trackLen );
frame->AppendMsgPanel( _( "Track Length" ), msg, DARKCYAN ); frame->AppendMsgPanel( _( "Track Length" ), msg, DARKCYAN );
} }
NETCLASS* netclass = GetNetClass();
if( netclass )
{
frame->AppendMsgPanel( _( "NC Name" ), netclass->GetName(), DARKMAGENTA );
frame->AppendMsgPanel( _( "NC Clearance" ),
frame->CoordinateToString( netclass->GetClearance(), true ),
DARKMAGENTA );
frame->AppendMsgPanel( _( "NC Width" ),
frame->CoordinateToString( netclass->GetTrackWidth(), true ),
DARKMAGENTA );
frame->AppendMsgPanel( _( "NC Via Size"),
frame->CoordinateToString( netclass->GetViaDiameter(), true ),
DARKMAGENTA );
frame->AppendMsgPanel( _( "NC Via Drill"),
frame->CoordinateToString( netclass->GetViaDrill(), true ),
DARKMAGENTA );
}
} }
@ -1041,7 +1060,7 @@ void TRACK::DisplayInfoBase( EDA_DRAW_FRAME* frame )
frame->AppendMsgPanel( _( "Layer" ), msg, BROWN ); frame->AppendMsgPanel( _( "Layer" ), msg, BROWN );
/* Display width */ /* Display width */
valeur_param( (unsigned) m_Width, msg ); msg = frame->CoordinateToString( (unsigned) m_Width );
if( Type() == TYPE_VIA ) // Display Diam and Drill values if( Type() == TYPE_VIA ) // Display Diam and Drill values
{ {
@ -1051,7 +1070,7 @@ void TRACK::DisplayInfoBase( EDA_DRAW_FRAME* frame )
// Display drill value // Display drill value
int drill_value = GetDrillValue(); int drill_value = GetDrillValue();
valeur_param( (unsigned) drill_value, msg ); msg = frame->CoordinateToString( (unsigned) drill_value );
wxString title = _( "Drill" ); wxString title = _( "Drill" );
title += wxT( " " ); title += wxT( " " );
@ -1068,17 +1087,10 @@ void TRACK::DisplayInfoBase( EDA_DRAW_FRAME* frame )
frame->AppendMsgPanel( _( "Width" ), msg, DARKCYAN ); frame->AppendMsgPanel( _( "Width" ), msg, DARKCYAN );
} }
NETCLASS* netclass = GetNetClass();
if( netclass )
{
msg = netclass->GetName();
frame->AppendMsgPanel( _( "Net Class" ), msg, DARKCYAN );
}
// Display segment length // Display segment length
if( Type() != TYPE_VIA ) // Display Diam and Drill values if( Type() != TYPE_VIA ) // Display Diam and Drill values
{ {
valeur_param( wxRound( GetLength() ), msg ); msg = frame->CoordinateToString( wxRound( GetLength() ) );
frame->AppendMsgPanel( _( "Segment Length" ), msg, DARKCYAN ); frame->AppendMsgPanel( _( "Segment Length" ), msg, DARKCYAN );
} }
} }

View File

@ -667,8 +667,6 @@ void DIALOG_DESIGN_RULES::CopyDimensionsListsToBoard()
std::vector <VIA_DIMENSION>* vialist = &m_Parent->GetBoard()->m_ViasDimensionsList; std::vector <VIA_DIMENSION>* vialist = &m_Parent->GetBoard()->m_ViasDimensionsList;
vialist->erase( vialist->begin() + 1, vialist->end() ); vialist->erase( vialist->begin() + 1, vialist->end() );
vialist->insert( vialist->end(), m_ViasDimensionsList.begin(), m_ViasDimensionsList.end() ); vialist->insert( vialist->end(), m_ViasDimensionsList.begin(), m_ViasDimensionsList.end() );
m_Parent->m_TrackAndViasSizesList_Changed = true;
} }
@ -709,7 +707,6 @@ void DIALOG_DESIGN_RULES::OnOkButtonClick( wxCommandEvent& event )
EndModal( wxID_OK ); EndModal( wxID_OK );
m_Pcb->SetCurrentNetClass( NETCLASS::Default ); m_Pcb->SetCurrentNetClass( NETCLASS::Default );
m_Parent->m_TrackAndViasSizesList_Changed = true;
} }

View File

@ -150,8 +150,6 @@ TRACK* PCB_EDIT_FRAME::Begin_Route( TRACK* aTrack, wxDC* DC )
// Display info about track Net class, and init track and vias sizes: // Display info about track Net class, and init track and vias sizes:
g_CurrentTrackSegment->SetNet( g_HighLight_NetCode ); g_CurrentTrackSegment->SetNet( g_HighLight_NetCode );
GetBoard()->SetCurrentNetClass( g_CurrentTrackSegment->GetNetClassName() ); GetBoard()->SetCurrentNetClass( g_CurrentTrackSegment->GetNetClassName() );
m_TrackAndViasSizesList_Changed = true;
updateDesignRulesSelectBoxes();
g_CurrentTrackSegment->SetLayer( GetScreen()->m_Active_Layer ); g_CurrentTrackSegment->SetLayer( GetScreen()->m_Active_Layer );
g_CurrentTrackSegment->m_Width = GetBoard()->GetCurrentTrackWidth(); g_CurrentTrackSegment->m_Width = GetBoard()->GetCurrentTrackWidth();

View File

@ -142,8 +142,6 @@ the changes?" ) ) )
return false; return false;
} }
m_TrackAndViasSizesList_Changed = true;
if( aAppend ) if( aAppend )
{ {
GetScreen()->SetFileName( wxEmptyString ); GetScreen()->SetFileName( wxEmptyString );
@ -273,14 +271,11 @@ this file again." ) );
// Update info shown by the horizontal toolbars // Update info shown by the horizontal toolbars
GetBoard()->SetCurrentNetClass( NETCLASS::Default ); GetBoard()->SetCurrentNetClass( NETCLASS::Default );
m_TrackAndViasSizesList_Changed = true;
ReFillLayerWidget(); ReFillLayerWidget();
ReCreateLayerBox( NULL ); ReCreateLayerBox( NULL );
syncLayerWidget(); syncLayerWidget();
updateDesignRulesSelectBoxes();
updateTraceWidthSelectBox(); updateTraceWidthSelectBox();
updateViaSizeSelectBox(); updateViaSizeSelectBox();

View File

@ -42,7 +42,6 @@ bool PCB_EDIT_FRAME::Clear_Pcb( bool aQuery )
// delete the old BOARD and create a new BOARD so that the default // delete the old BOARD and create a new BOARD so that the default
// layer names are put into the BOARD. // layer names are put into the BOARD.
SetBoard( new BOARD( NULL, this ) ); SetBoard( new BOARD( NULL, this ) );
m_TrackAndViasSizesList_Changed = true;
SetCurItem( NULL ); SetCurItem( NULL );
/* clear filename, to avoid overwriting an old file */ /* clear filename, to avoid overwriting an old file */

View File

@ -1116,7 +1116,6 @@ int PCB_EDIT_FRAME::ReadPcbFile( LINE_READER* aReader, bool Append )
board->SynchronizeNetsAndNetClasses(); board->SynchronizeNetsAndNetClasses();
m_TrackAndViasSizesList_Changed = true;
SetStatusText( wxEmptyString ); SetStatusText( wxEmptyString );
BestZoom(); BestZoom();
return 1; return 1;
@ -1154,7 +1153,6 @@ int PCB_EDIT_FRAME::SavePcbFormatAscii( FILE* aFile )
// Select default Netclass before writing file. // Select default Netclass before writing file.
// Useful to save default values in headers // Useful to save default values in headers
GetBoard()->SetCurrentNetClass( GetBoard()->m_NetClasses.GetDefault()->GetName() ); GetBoard()->SetCurrentNetClass( GetBoard()->m_NetClasses.GetDefault()->GetName() );
m_TrackAndViasSizesList_Changed = true;
WriteGeneralDescrPcb( aFile ); WriteGeneralDescrPcb( aFile );
WriteSheetDescr( GetScreen(), aFile ); WriteSheetDescr( GetScreen(), aFile );

View File

@ -124,8 +124,6 @@ void PCB_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition )
case TYPE_PAD: case TYPE_PAD:
GetBoard()->SetCurrentNetClass( GetBoard()->SetCurrentNetClass(
((BOARD_CONNECTED_ITEM*)DrawStruct)->GetNetClassName() ); ((BOARD_CONNECTED_ITEM*)DrawStruct)->GetNetClassName() );
m_TrackAndViasSizesList_Changed = true;
updateDesignRulesSelectBoxes();
break; break;
default: default:

View File

@ -393,8 +393,6 @@ void PCB_EDIT_FRAME::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu )
wxString msg; wxString msg;
GetBoard()->SetCurrentNetClass( Track->GetNetClassName() ); GetBoard()->SetCurrentNetClass( Track->GetNetClassName() );
m_TrackAndViasSizesList_Changed = true;
updateDesignRulesSelectBoxes();
int flags = Track->m_Flags; int flags = Track->m_Flags;
@ -714,8 +712,6 @@ void PCB_EDIT_FRAME::createPopUpMenuForFpPads( D_PAD* Pad, wxMenu* menu )
return; return;
GetBoard()->SetCurrentNetClass( Pad->GetNetClassName() ); GetBoard()->SetCurrentNetClass( Pad->GetNetClassName() );
m_TrackAndViasSizesList_Changed = true;
updateDesignRulesSelectBoxes();
wxString msg = Pad->MenuText( GetBoard() ); wxString msg = Pad->MenuText( GetBoard() );

View File

@ -271,7 +271,6 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( wxWindow* parent, const wxString& title,
m_SelTrackWidthBox = NULL; m_SelTrackWidthBox = NULL;
m_SelViaSizeBox = NULL; m_SelViaSizeBox = NULL;
m_SelLayerBox = NULL; m_SelLayerBox = NULL;
m_TrackAndViasSizesList_Changed = false;
m_show_microwave_tools = false; m_show_microwave_tools = false;
m_show_layer_manager_tools = true; m_show_layer_manager_tools = true;
m_HotkeysZoomAndGridList = g_Board_Editor_Hokeys_Descr; m_HotkeysZoomAndGridList = g_Board_Editor_Hokeys_Descr;
@ -291,8 +290,6 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( wxWindow* parent, const wxString& title,
m_Layers = new PCB_LAYER_WIDGET( this, DrawPanel, pointSize ); m_Layers = new PCB_LAYER_WIDGET( this, DrawPanel, pointSize );
m_TrackAndViasSizesList_Changed = true;
m_drc = new DRC( this ); // these 2 objects point to each other m_drc = new DRC( this ); // these 2 objects point to each other
m_DisplayPcbTrackFill = DisplayOpt.DisplayPcbTrackFill; m_DisplayPcbTrackFill = DisplayOpt.DisplayPcbTrackFill;
@ -513,7 +510,6 @@ void PCB_EDIT_FRAME::ShowDesignRulesEditor( wxCommandEvent& event )
if( returncode == wxID_OK ) // New rules, or others changes. if( returncode == wxID_OK ) // New rules, or others changes.
{ {
ReCreateLayerBox( NULL ); ReCreateLayerBox( NULL );
updateDesignRulesSelectBoxes();
updateTraceWidthSelectBox(); updateTraceWidthSelectBox();
updateViaSizeSelectBox(); updateViaSizeSelectBox();
OnModify(); OnModify();
@ -653,7 +649,6 @@ void PCB_EDIT_FRAME::unitsChangeRefresh()
updateTraceWidthSelectBox(); updateTraceWidthSelectBox();
updateViaSizeSelectBox(); updateViaSizeSelectBox();
updateDesignRulesSelectBoxes();
} }

View File

@ -111,8 +111,6 @@ void PCB_EDIT_FRAME::ImportSpecctraSession( wxCommandEvent& event )
SetLocaleTo_Default( ); // revert to the current locale SetLocaleTo_Default( ); // revert to the current locale
m_TrackAndViasSizesList_Changed = true;
OnModify(); OnModify();
GetBoard()->m_Status_Pcb = 0; GetBoard()->m_Status_Pcb = 0;

View File

@ -25,9 +25,9 @@ void PCB_EDIT_FRAME::ToolOnRightClick( wxCommandEvent& event )
case ID_TRACK_BUTT: case ID_TRACK_BUTT:
{ {
DIALOG_DESIGN_RULES dlg( this ); DIALOG_DESIGN_RULES dlg( this );
if( dlg.ShowModal() == wxID_OK ) if( dlg.ShowModal() == wxID_OK )
{ {
updateDesignRulesSelectBoxes();
updateTraceWidthSelectBox(); updateTraceWidthSelectBox();
updateViaSizeSelectBox(); updateViaSizeSelectBox();
} }

View File

@ -506,8 +506,6 @@ void PCB_EDIT_FRAME::ReCreateAuxiliaryToolbar()
m_AuxiliaryToolBar = new WinEDA_Toolbar( TOOLBAR_AUX, this, ID_AUX_TOOLBAR, true ); m_AuxiliaryToolBar = new WinEDA_Toolbar( TOOLBAR_AUX, this, ID_AUX_TOOLBAR, true );
m_TrackAndViasSizesList_Changed = true;
/* Set up toolbar items */ /* Set up toolbar items */
// Creates box to display and choose tracks widths: // Creates box to display and choose tracks widths:
@ -526,24 +524,6 @@ void PCB_EDIT_FRAME::ReCreateAuxiliaryToolbar()
m_AuxiliaryToolBar->AddControl( m_SelViaSizeBox ); m_AuxiliaryToolBar->AddControl( m_SelViaSizeBox );
m_AuxiliaryToolBar->AddSeparator(); m_AuxiliaryToolBar->AddSeparator();
// Creates box to display tracks and vias clearance:
m_ClearanceBox = new wxTextCtrl( m_AuxiliaryToolBar, -1,
wxEmptyString, wxPoint( -1, -1 ),
wxSize( LISTBOX_WIDTH + 10, -1 ),
wxTE_READONLY );
m_ClearanceBox->SetToolTip(_("Current NetClass clearance value") );
m_AuxiliaryToolBar->AddControl( m_ClearanceBox );
m_AuxiliaryToolBar->AddSeparator();
// Creates box to display the current NetClass:
m_NetClassSelectedBox = new wxTextCtrl( m_AuxiliaryToolBar, -1,
wxEmptyString, wxPoint( -1, -1 ),
wxSize( LISTBOX_WIDTH, -1 ),
wxTE_READONLY );
m_NetClassSelectedBox->SetToolTip(_("Name of the current NetClass") );
m_AuxiliaryToolBar->AddControl( m_NetClassSelectedBox );
m_AuxiliaryToolBar->AddSeparator();
// Creates box to display and choose strategy to handle tracks an vias sizes: // Creates box to display and choose strategy to handle tracks an vias sizes:
m_AuxiliaryToolBar->AddTool( ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH, m_AuxiliaryToolBar->AddTool( ID_AUX_TOOLBAR_PCB_SELECT_AUTO_WIDTH,
wxEmptyString, wxEmptyString,
@ -572,44 +552,13 @@ an existing track use its width\notherwise, use current width setting" ),
updateGridSelectBox(); updateGridSelectBox();
updateTraceWidthSelectBox(); updateTraceWidthSelectBox();
updateViaSizeSelectBox(); updateViaSizeSelectBox();
updateDesignRulesSelectBoxes();
// after adding the buttons to the toolbar, must call Realize() // after adding the buttons to the toolbar, must call Realize()
m_AuxiliaryToolBar->Realize(); m_AuxiliaryToolBar->Realize();
m_TrackAndViasSizesList_Changed = true;
m_AuxiliaryToolBar->AddSeparator(); m_AuxiliaryToolBar->AddSeparator();
} }
/* helper to convert an integer value to a string, using mils or mm
* according to g_UserUnit value
*/
static wxString ReturnStringValue( int aValue )
{
wxString text;
const wxChar* format;
double value = To_User_Unit( g_UserUnit, aValue, PCB_INTERNAL_UNIT );
if( g_UserUnit == INCHES )
{
format = wxT( " %.1f" );
value *= 1000;
}
else
format = wxT( " %.3f" );
text.Printf( format, value );
if( g_UserUnit == INCHES )
text += _( " mils" );
else
text += _( " mm" );
return text;
}
void PCB_EDIT_FRAME::updateTraceWidthSelectBox() void PCB_EDIT_FRAME::updateTraceWidthSelectBox()
{ {
if( m_SelTrackWidthBox == NULL ) if( m_SelTrackWidthBox == NULL )
@ -621,7 +570,7 @@ void PCB_EDIT_FRAME::updateTraceWidthSelectBox()
for( unsigned ii = 0; ii < GetBoard()->m_TrackWidthList.size(); ii++ ) for( unsigned ii = 0; ii < GetBoard()->m_TrackWidthList.size(); ii++ )
{ {
msg = _( "Track" ) + ReturnStringValue( GetBoard()->m_TrackWidthList[ii] ); msg = _( "Track " ) + CoordinateToString( GetBoard()->m_TrackWidthList[ii], true );
if( ii == 0 ) if( ii == 0 )
msg << _( " *" ); msg << _( " *" );
@ -645,11 +594,12 @@ void PCB_EDIT_FRAME::updateViaSizeSelectBox()
for( unsigned ii = 0; ii < GetBoard()->m_ViasDimensionsList.size(); ii++ ) for( unsigned ii = 0; ii < GetBoard()->m_ViasDimensionsList.size(); ii++ )
{ {
msg = _( "Via" ); msg = _( "Via " );
msg << ReturnStringValue( GetBoard()->m_ViasDimensionsList[ii].m_Diameter ); msg << CoordinateToString( GetBoard()->m_ViasDimensionsList[ii].m_Diameter, true );
if( GetBoard()->m_ViasDimensionsList[ii].m_Drill ) if( GetBoard()->m_ViasDimensionsList[ii].m_Drill )
msg << wxT("/") << ReturnStringValue( GetBoard()->m_ViasDimensionsList[ii].m_Drill ); msg << wxT("/ ")
<< CoordinateToString( GetBoard()->m_ViasDimensionsList[ii].m_Drill, true );
if( ii == 0 ) if( ii == 0 )
msg << _( " *" ); msg << _( " *" );
@ -662,33 +612,6 @@ void PCB_EDIT_FRAME::updateViaSizeSelectBox()
} }
/**
* Function updateDesignRulesSelectBoxes
* update the displayed values: track widths, via sizes, clearance, Netclass name
* used when a netclass is selected
*/
void PCB_EDIT_FRAME::updateDesignRulesSelectBoxes()
{
wxString nclname = GetBoard()->m_CurrentNetClassName;
wxString msg = _( "NetClass: " ) + nclname;
if( m_NetClassSelectedBox )
{
m_NetClassSelectedBox->Clear();
m_NetClassSelectedBox->AppendText( msg );
}
NETCLASS* netclass = GetBoard()->m_NetClasses.Find( nclname );
if( m_ClearanceBox )
{
wxString msg = _( "Clearance" ) + ReturnStringValue( netclass->GetClearance() );
m_ClearanceBox->Clear();
m_ClearanceBox->AppendText( msg );
}
}
WinEDALayerChoiceBox* PCB_EDIT_FRAME::ReCreateLayerBox( WinEDA_Toolbar* parent ) WinEDALayerChoiceBox* PCB_EDIT_FRAME::ReCreateLayerBox( WinEDA_Toolbar* parent )
{ {
if( m_SelLayerBox == NULL ) if( m_SelLayerBox == NULL )