Base object decoupling improvements.

* Improve MSG_PANEL_ITEM to handle message panel information.
* Create containers for passing message panel items between objects and
  the message panel.
* Rename EDA_ITEM::DisplayInfo to EDA_ITEM::GetMsgPanelInfo.
* Remove all direct manipulation of EDA_DRAW_FRAME from all objects derived
  from EDA_ITEM.
This commit is contained in:
Wayne Stambaugh 2013-01-12 12:32:24 -05:00
parent 5c2efcbf3e
commit f8a56d446f
110 changed files with 897 additions and 657 deletions

View File

@ -74,10 +74,8 @@ EDA_BASE_FRAME::EDA_BASE_FRAME( wxWindow* aParent,
m_autoSaveInterval = -1; m_autoSaveInterval = -1;
m_autoSaveTimer = new wxTimer( this, ID_AUTO_SAVE_TIMER ); m_autoSaveTimer = new wxTimer( this, ID_AUTO_SAVE_TIMER );
m_MsgFrameHeight = EDA_MSG_PANEL::GetRequiredHeight();
minsize.x = 470; minsize.x = 470;
minsize.y = 350 + m_MsgFrameHeight; minsize.y = 350;
SetSizeHints( minsize.x, minsize.y, -1, -1, -1, -1 ); SetSizeHints( minsize.x, minsize.y, -1, -1, -1, -1 );
@ -90,7 +88,6 @@ EDA_BASE_FRAME::EDA_BASE_FRAME( wxWindow* aParent,
GetClientSize( &m_FrameSize.x, &m_FrameSize.y ); GetClientSize( &m_FrameSize.x, &m_FrameSize.y );
m_FramePos.x = m_FramePos.y = 0; m_FramePos.x = m_FramePos.y = 0;
m_FrameSize.y -= m_MsgFrameHeight;
Connect( ID_HELP_COPY_VERSION_STRING, Connect( ID_HELP_COPY_VERSION_STRING,
wxEVT_COMMAND_MENU_SELECTED, wxEVT_COMMAND_MENU_SELECTED,

View File

@ -36,6 +36,7 @@
#include <id.h> #include <id.h>
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <class_base_screen.h> #include <class_base_screen.h>
#include <msgpanel.h>
#include <wxstruct.h> #include <wxstruct.h>
#include <confirm.h> #include <confirm.h>
#include <kicad_device_context.h> #include <kicad_device_context.h>
@ -110,6 +111,8 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( wxWindow* aParent,
m_DrawGrid = true; // hide/Show grid. default = show m_DrawGrid = true; // hide/Show grid. default = show
m_GridColor = DARKGRAY; // Grid color m_GridColor = DARKGRAY; // Grid color
m_snapToGrid = true; m_snapToGrid = true;
m_MsgFrameHeight = EDA_MSG_PANEL::GetRequiredHeight();
//#define ZOOM_DISPLAY_SIZE 60 //#define ZOOM_DISPLAY_SIZE 60
//#define COORD_DISPLAY_SIZE 165 //#define COORD_DISPLAY_SIZE 165
@ -179,7 +182,7 @@ void EDA_DRAW_FRAME::unitsChangeRefresh()
EDA_ITEM* item = GetScreen()->GetCurItem(); EDA_ITEM* item = GetScreen()->GetCurItem();
if( item ) if( item )
item->DisplayInfo( this ); SetMsgPanel( item );
} }
@ -610,6 +613,28 @@ void EDA_DRAW_FRAME::ClearMsgPanel( void )
} }
void EDA_DRAW_FRAME::SetMsgPanel( const MSG_PANEL_ITEMS& aList )
{
if( m_messagePanel == NULL && !aList.empty() )
return;
ClearMsgPanel();
for( unsigned i = 0; i < aList.size(); i++ )
m_messagePanel->AppendMessage( aList[i] );
}
void EDA_DRAW_FRAME::SetMsgPanel( EDA_ITEM* aItem )
{
wxCHECK_RET( aItem != NULL, wxT( "Invalid EDA_ITEM pointer. Bad programmer." ) );
MSG_PANEL_ITEMS items;
aItem->GetMsgPanelInfo( items );
SetMsgPanel( items );
}
wxString EDA_DRAW_FRAME::CoordinateToString( int aValue, bool aConvertToMils ) const wxString EDA_DRAW_FRAME::CoordinateToString( int aValue, bool aConvertToMils ) const
{ {
return ::CoordinateToString( aValue, aConvertToMils ); return ::CoordinateToString( aValue, aConvertToMils );

View File

@ -23,14 +23,17 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
/**
* @file msgpanel.cpp
* @brief Message panel implementation file.
*/
#ifdef __GNUG__ #ifdef __GNUG__
#pragma implementation #pragma implementation
#endif #endif
#include <fctsys.h>
#include <wxstruct.h> #include <msgpanel.h>
#include <common.h>
#include <colors.h>
BEGIN_EVENT_TABLE( EDA_MSG_PANEL, wxPanel ) BEGIN_EVENT_TABLE( EDA_MSG_PANEL, wxPanel )
@ -38,9 +41,9 @@ BEGIN_EVENT_TABLE( EDA_MSG_PANEL, wxPanel )
END_EVENT_TABLE() END_EVENT_TABLE()
EDA_MSG_PANEL::EDA_MSG_PANEL( EDA_DRAW_FRAME* parent, int id, EDA_MSG_PANEL::EDA_MSG_PANEL( wxWindow* aParent, int aId,
const wxPoint& pos, const wxSize& size ) : const wxPoint& aPosition, const wxSize& aSize ) :
wxPanel( parent, id, pos, size ) wxPanel( aParent, aId, aPosition, aSize )
{ {
SetFont( wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ) ); SetFont( wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ) );
SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
@ -76,7 +79,7 @@ int EDA_MSG_PANEL::GetRequiredHeight()
} }
wxSize EDA_MSG_PANEL::computeTextSize( const wxString& text ) const wxSize EDA_MSG_PANEL::computeTextSize( const wxString& aText ) const
{ {
// Get size of the wxSYS_DEFAULT_GUI_FONT // Get size of the wxSYS_DEFAULT_GUI_FONT
wxSize textSizeInPixels; wxSize textSizeInPixels;
@ -84,13 +87,13 @@ wxSize EDA_MSG_PANEL::computeTextSize( const wxString& text ) const
wxScreenDC dc; wxScreenDC dc;
dc.SetFont( wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ) ); dc.SetFont( wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ) );
dc.GetTextExtent( text, &textSizeInPixels.x, &textSizeInPixels.y ); dc.GetTextExtent( aText, &textSizeInPixels.x, &textSizeInPixels.y );
return textSizeInPixels; return textSizeInPixels;
} }
void EDA_MSG_PANEL::OnPaint( wxPaintEvent& event ) void EDA_MSG_PANEL::OnPaint( wxPaintEvent& aEvent )
{ {
wxPaintDC dc( this ); wxPaintDC dc( this );
@ -104,20 +107,21 @@ void EDA_MSG_PANEL::OnPaint( wxPaintEvent& event )
for( unsigned i=0; i<m_Items.size(); ++i ) for( unsigned i=0; i<m_Items.size(); ++i )
showItem( dc, m_Items[i] ); showItem( dc, m_Items[i] );
event.Skip(); aEvent.Skip();
} }
void EDA_MSG_PANEL::AppendMessage( const wxString& textUpper,
const wxString& textLower, void EDA_MSG_PANEL::AppendMessage( const wxString& aUpperText,
EDA_COLOR_T color, int pad ) const wxString& aLowerText,
EDA_COLOR_T aColor, int aPad )
{ {
wxString text; wxString text;
wxSize drawSize = GetClientSize(); wxSize drawSize = GetClientSize();
text = ( textUpper.Len() > textLower.Len() ) ? textUpper : textLower; text = ( aUpperText.Len() > aLowerText.Len() ) ? aUpperText : aLowerText;
text.Append( ' ', pad ); text.Append( ' ', aPad );
EDA_MSG_ITEM item; MSG_PANEL_ITEM item;
/* Don't put the first message a window client position 0. Offset by /* Don't put the first message a window client position 0. Offset by
* one 'W' character width. */ * one 'W' character width. */
@ -129,9 +133,9 @@ void EDA_MSG_PANEL::AppendMessage( const wxString& textUpper,
item.m_UpperY = ( drawSize.y / 2 ) - m_fontSize.y; item.m_UpperY = ( drawSize.y / 2 ) - m_fontSize.y;
item.m_LowerY = drawSize.y - m_fontSize.y; item.m_LowerY = drawSize.y - m_fontSize.y;
item.m_UpperText = textUpper; item.m_UpperText = aUpperText;
item.m_LowerText = textLower; item.m_LowerText = aLowerText;
item.m_Color = color; item.m_Color = aColor;
m_Items.push_back( item ); m_Items.push_back( item );
m_last_x += computeTextSize( text ).x; m_last_x += computeTextSize( text ).x;
@ -153,7 +157,7 @@ void EDA_MSG_PANEL::SetMessage( int aXPosition, const wxString& aUpperText,
else else
pos.x = m_last_x; pos.x = m_last_x;
EDA_MSG_ITEM item; MSG_PANEL_ITEM item;
item.m_X = pos.x; item.m_X = pos.x;
@ -194,26 +198,26 @@ void EDA_MSG_PANEL::SetMessage( int aXPosition, const wxString& aUpperText,
} }
void EDA_MSG_PANEL::showItem( wxDC& dc, const EDA_MSG_ITEM& aItem ) void EDA_MSG_PANEL::showItem( wxDC& aDC, const MSG_PANEL_ITEM& aItem )
{ {
EDA_COLOR_T color = aItem.m_Color; EDA_COLOR_T color = aItem.m_Color;
if( color >= 0 ) if( color >= 0 )
{ {
color = ColorGetBase( color ); color = ColorGetBase( color );
dc.SetTextForeground( wxColour( ColorRefs[color].m_Red, aDC.SetTextForeground( wxColour( ColorRefs[color].m_Red,
ColorRefs[color].m_Green, ColorRefs[color].m_Green,
ColorRefs[color].m_Blue ) ); ColorRefs[color].m_Blue ) );
} }
if( !aItem.m_UpperText.IsEmpty() ) if( !aItem.m_UpperText.IsEmpty() )
{ {
dc.DrawText( aItem.m_UpperText, aItem.m_X, aItem.m_UpperY ); aDC.DrawText( aItem.m_UpperText, aItem.m_X, aItem.m_UpperY );
} }
if( !aItem.m_LowerText.IsEmpty() ) if( !aItem.m_LowerText.IsEmpty() )
{ {
dc.DrawText( aItem.m_LowerText, aItem.m_X, aItem.m_LowerY ); aDC.DrawText( aItem.m_LowerText, aItem.m_X, aItem.m_LowerY );
} }
} }
@ -226,7 +230,7 @@ void EDA_MSG_PANEL::EraseMsgBox()
} }
void EDA_MSG_PANEL::erase( wxDC* DC ) void EDA_MSG_PANEL::erase( wxDC* aDC )
{ {
wxPen pen; wxPen pen;
wxBrush brush; wxBrush brush;
@ -239,8 +243,7 @@ void EDA_MSG_PANEL::erase( wxDC* DC )
brush.SetColour( color ); brush.SetColour( color );
brush.SetStyle( wxSOLID ); brush.SetStyle( wxSOLID );
DC->SetPen( pen ); aDC->SetPen( pen );
DC->SetBrush( brush ); aDC->SetBrush( brush );
aDC->DrawRectangle( 0, 0, size.x, size.y );
DC->DrawRectangle( 0, 0, size.x, size.y );
} }

View File

@ -34,6 +34,7 @@
#include <confirm.h> #include <confirm.h>
#include <macros.h> #include <macros.h>
#include <bitmaps.h> #include <bitmaps.h>
#include <msgpanel.h>
#include <class_board.h> #include <class_board.h>

View File

@ -7,6 +7,7 @@
#include <gr_basic.h> #include <gr_basic.h>
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <bitmaps.h> #include <bitmaps.h>
#include <msgpanel.h>
#include <class_board.h> #include <class_board.h>
#include <class_module.h> #include <class_module.h>
@ -118,7 +119,11 @@ void DISPLAY_FOOTPRINTS_FRAME::RedrawActiveWindow( wxDC* DC, bool EraseBg )
MODULE* Module = GetBoard()->m_Modules; MODULE* Module = GetBoard()->m_Modules;
if ( Module ) if ( Module )
Module->DisplayInfo( this ); {
MSG_PANEL_ITEMS items;
Module->GetMsgPanelInfo( items );
SetMsgPanel( items );
}
m_canvas->DrawCrossHair( DC ); m_canvas->DrawCrossHair( DC );
} }

View File

@ -33,6 +33,7 @@
#include <eda_dde.h> #include <eda_dde.h>
#include <wxEeschemaStruct.h> #include <wxEeschemaStruct.h>
#include <menus_helpers.h> #include <menus_helpers.h>
#include <msgpanel.h>
#include <eeschema_id.h> #include <eeschema_id.h>
#include <general.h> #include <general.h>
@ -104,11 +105,14 @@ SCH_ITEM* SCH_EDIT_FRAME::LocateAndShowItem( const wxPoint& aPosition, const KIC
if( Pin ) if( Pin )
{ {
// Force display pin information (the previous display could be a component info) // Force display pin information (the previous display could be a component info)
Pin->DisplayInfo( this ); MSG_PANEL_ITEMS items;
Pin->GetMsgPanelInfo( items );
if( LibItem ) if( LibItem )
AppendMsgPanel( LibItem->GetRef( m_CurrentSheet ), items.push_back( MSG_PANEL_ITEM( LibItem->GetRef( m_CurrentSheet ),
LibItem->GetField( VALUE )->m_Text, DARKCYAN ); LibItem->GetField( VALUE )->m_Text, DARKCYAN ) );
SetMsgPanel( items );
// Cross probing:2 - pin found, and send a locate pin command to Pcbnew (highlight net) // Cross probing:2 - pin found, and send a locate pin command to Pcbnew (highlight net)
SendMessageToPCBNEW( Pin, LibItem ); SendMessageToPCBNEW( Pin, LibItem );
@ -182,9 +186,18 @@ SCH_ITEM* SCH_EDIT_FRAME::LocateItem( const wxPoint& aPosition, const KICAD_T aF
GetScreen()->SetCurItem( item ); GetScreen()->SetCurItem( item );
if( item ) if( item )
item->DisplayInfo( this ); {
if( item->Type() == SCH_COMPONENT_T )
( (SCH_COMPONENT*) item )->SetCurrentSheetPath( &GetCurrentSheet() );
MSG_PANEL_ITEMS items;
item->GetMsgPanelInfo( items );
SetMsgPanel( items );
}
else else
{
ClearMsgPanel(); ClearMsgPanel();
}
return item; return item;
} }

View File

@ -214,7 +214,7 @@ void DIALOG_LIB_EDIT_TEXT::OnOkClick( wxCommandEvent& event )
} }
if( m_parent->GetDrawItem() ) if( m_parent->GetDrawItem() )
m_parent->GetDrawItem()->DisplayInfo( m_parent ); m_parent->SetMsgPanel( m_parent->GetDrawItem() );
EndModal(wxID_OK); EndModal(wxID_OK);
} }

View File

@ -33,6 +33,7 @@
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <confirm.h> #include <confirm.h>
#include <wxEeschemaStruct.h> #include <wxEeschemaStruct.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <class_library.h> #include <class_library.h>
@ -139,7 +140,10 @@ create a new power component with the new value." ), GetChars( entry->GetName()
m_canvas->Refresh(); m_canvas->Refresh();
} }
component->DisplayInfo( this ); MSG_PANEL_ITEMS items;
component->SetCurrentSheetPath( &GetCurrentSheet() );
component->GetMsgPanelInfo( items );
SetMsgPanel( items );
} }

View File

@ -35,6 +35,7 @@
#include <confirm.h> #include <confirm.h>
#include <wxEeschemaStruct.h> #include <wxEeschemaStruct.h>
#include <kicad_device_context.h> #include <kicad_device_context.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <protos.h> #include <protos.h>
@ -257,10 +258,13 @@ SCH_COMPONENT* SCH_EDIT_FRAME::Load_Component( wxDC* aDC,
// Set the component value that can differ from component name in lib, for aliases // Set the component value that can differ from component name in lib, for aliases
component->GetField( VALUE )->m_Text = Name; component->GetField( VALUE )->m_Text = Name;
component->DisplayInfo( this );
MSG_PANEL_ITEMS items;
component->SetCurrentSheetPath( &GetCurrentSheet() );
component->GetMsgPanelInfo( items );
SetMsgPanel( items );
component->Draw( m_canvas, aDC, wxPoint( 0, 0 ), g_XorMode, g_GhostColor ); component->Draw( m_canvas, aDC, wxPoint( 0, 0 ), g_XorMode, g_GhostColor );
component->SetFlags( IS_NEW ); component->SetFlags( IS_NEW );
MoveItem( (SCH_ITEM*) component, aDC ); MoveItem( (SCH_ITEM*) component, aDC );
return component; return component;

View File

@ -35,6 +35,7 @@
#include <wxstruct.h> #include <wxstruct.h>
#include <richio.h> #include <richio.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <protos.h> #include <protos.h>
@ -508,21 +509,21 @@ start(%d, %d), end(%d, %d), radius %d" ),
} }
void LIB_ARC::DisplayInfo( EDA_DRAW_FRAME* aFrame ) void LIB_ARC::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
wxString msg; wxString msg;
EDA_RECT bBox = GetBoundingBox(); EDA_RECT bBox = GetBoundingBox();
LIB_ITEM::DisplayInfo( aFrame ); LIB_ITEM::GetMsgPanelInfo( aList );
msg = ReturnStringFromValue( g_UserUnit, m_Width, true ); msg = ReturnStringFromValue( g_UserUnit, m_Width, true );
aFrame->AppendMsgPanel( _( "Line width" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Line width" ), msg, BLUE ) );
msg.Printf( wxT( "(%d, %d, %d, %d)" ), bBox.GetOrigin().x, msg.Printf( wxT( "(%d, %d, %d, %d)" ), bBox.GetOrigin().x,
bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y ); bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y );
aFrame->AppendMsgPanel( _( "Bounding box" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Bounding box" ), msg, BROWN ) );
} }

View File

@ -106,7 +106,7 @@ public:
EDA_RECT GetBoundingBox() const; EDA_RECT GetBoundingBox() const;
void DisplayInfo( EDA_DRAW_FRAME* frame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
int GetPenSize() const; int GetPenSize() const;

View File

@ -35,6 +35,7 @@
#include <bezier_curves.h> #include <bezier_curves.h>
#include <richio.h> #include <richio.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <protos.h> #include <protos.h>
@ -404,19 +405,19 @@ EDA_RECT LIB_BEZIER::GetBoundingBox() const
} }
void LIB_BEZIER::DisplayInfo( EDA_DRAW_FRAME* aFrame ) void LIB_BEZIER::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
wxString msg; wxString msg;
EDA_RECT bBox = GetBoundingBox(); EDA_RECT bBox = GetBoundingBox();
LIB_ITEM::DisplayInfo( aFrame ); LIB_ITEM::GetMsgPanelInfo( aList );
msg = ReturnStringFromValue( g_UserUnit, m_Width, true ); msg = ReturnStringFromValue( g_UserUnit, m_Width, true );
aFrame->AppendMsgPanel( _( "Line width" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Line width" ), msg, BLUE ) );
msg.Printf( wxT( "(%d, %d, %d, %d)" ), bBox.GetOrigin().x, msg.Printf( wxT( "(%d, %d, %d, %d)" ), bBox.GetOrigin().x,
bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y ); bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y );
aFrame->AppendMsgPanel( _( "Bounding box" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Bounding box" ), msg, BROWN ) );
} }

View File

@ -99,7 +99,7 @@ public:
int GetPenSize( ) const; int GetPenSize( ) const;
void DisplayInfo( EDA_DRAW_FRAME* aFrame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
EDA_ITEM* Clone() const; EDA_ITEM* Clone() const;

View File

@ -36,6 +36,7 @@
#include <wxstruct.h> #include <wxstruct.h>
#include <richio.h> #include <richio.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <protos.h> #include <protos.h>
@ -265,24 +266,24 @@ EDA_RECT LIB_CIRCLE::GetBoundingBox() const
} }
void LIB_CIRCLE::DisplayInfo( EDA_DRAW_FRAME* aFrame ) void LIB_CIRCLE::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
{ {
wxString msg; wxString msg;
EDA_RECT bBox = GetBoundingBox(); EDA_RECT bBox = GetBoundingBox();
LIB_ITEM::DisplayInfo( aFrame ); LIB_ITEM::GetMsgPanelInfo( aList );
msg = ReturnStringFromValue( g_UserUnit, m_Width, true ); msg = ReturnStringFromValue( g_UserUnit, m_Width, true );
aFrame->AppendMsgPanel( _( "Line width" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Line width" ), msg, BLUE ) );
msg = ReturnStringFromValue( g_UserUnit, m_Radius, true ); msg = ReturnStringFromValue( g_UserUnit, m_Radius, true );
aFrame->AppendMsgPanel( _( "Radius" ), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _( "Radius" ), msg, RED ) );
msg.Printf( wxT( "(%d, %d, %d, %d)" ), bBox.GetOrigin().x, msg.Printf( wxT( "(%d, %d, %d, %d)" ), bBox.GetOrigin().x,
bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y ); bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y );
aFrame->AppendMsgPanel( _( "Bounding box" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Bounding box" ), msg, BROWN ) );
} }

View File

@ -69,7 +69,7 @@ public:
EDA_RECT GetBoundingBox() const; EDA_RECT GetBoundingBox() const;
void DisplayInfo( EDA_DRAW_FRAME* aFrame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
void BeginEdit( int aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) ); void BeginEdit( int aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );

View File

@ -30,6 +30,7 @@
#include <gr_basic.h> #include <gr_basic.h>
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <wxstruct.h> #include <wxstruct.h>
#include <msgpanel.h>
#include <protos.h> #include <protos.h>
#include <general.h> #include <general.h>
@ -57,19 +58,18 @@ LIB_ITEM::LIB_ITEM( KICAD_T aType,
} }
void LIB_ITEM::DisplayInfo( EDA_DRAW_FRAME* aFrame ) void LIB_ITEM::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
{ {
wxString msg; wxString msg;
aFrame->ClearMsgPanel(); aList.push_back( MSG_PANEL_ITEM( _( "Type" ), m_typeName, CYAN ) );
aFrame->AppendMsgPanel( _( "Type" ), m_typeName, CYAN );
if( m_Unit == 0 ) if( m_Unit == 0 )
msg = _( "All" ); msg = _( "All" );
else else
msg.Printf( wxT( "%d" ), m_Unit ); msg.Printf( wxT( "%d" ), m_Unit );
aFrame->AppendMsgPanel( _( "Unit" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Unit" ), msg, BROWN ) );
if( m_Convert == 0 ) if( m_Convert == 0 )
msg = _( "All" ); msg = _( "All" );
@ -80,7 +80,7 @@ void LIB_ITEM::DisplayInfo( EDA_DRAW_FRAME* aFrame )
else else
msg = wxT( "?" ); msg = wxT( "?" );
aFrame->AppendMsgPanel( _( "Convert" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Convert" ), msg, BROWN ) );
} }

View File

@ -42,6 +42,7 @@ class LIB_COMPONENT;
class PLOTTER; class PLOTTER;
class LIB_ITEM; class LIB_ITEM;
class LIB_PIN; class LIB_PIN;
class MSG_PANEL_ITEM;
extern const int fill_tab[]; extern const int fill_tab[];
@ -261,7 +262,7 @@ public:
virtual EDA_RECT GetBoundingBox() const { return EDA_ITEM::GetBoundingBox(); } virtual EDA_RECT GetBoundingBox() const { return EDA_ITEM::GetBoundingBox(); }
/** /**
* Function DisplayInfo * Function GetMsgPanelInfo
* displays basic info (type, part and convert) about the current item * displays basic info (type, part and convert) about the current item
* in message panel. * in message panel.
* <p> * <p>
@ -269,9 +270,9 @@ public:
* all library items. Call the base class from the derived class or the * all library items. Call the base class from the derived class or the
* common information will not be updated in the message panel. * common information will not be updated in the message panel.
* </p> * </p>
* @param aFrame A pointer to EDA_DRAW_FRAME window where the message panel resides. * @param aList is the list to populate.
*/ */
virtual void DisplayInfo( EDA_DRAW_FRAME* aFrame ); virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
/** /**
* Test LIB_ITEM objects for equivalence. * Test LIB_ITEM objects for equivalence.

View File

@ -37,6 +37,7 @@
#include <plot_common.h> #include <plot_common.h>
#include <trigo.h> #include <trigo.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <protos.h> #include <protos.h>
@ -723,26 +724,26 @@ void LIB_FIELD::calcEdit( const wxPoint& aPosition )
} }
} }
void LIB_FIELD::DisplayInfo( EDA_DRAW_FRAME* aFrame ) void LIB_FIELD::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
{ {
wxString msg; wxString msg;
LIB_ITEM::DisplayInfo( aFrame ); LIB_ITEM::GetMsgPanelInfo( aList );
// Display style: // Display style:
msg = GetTextStyleName(); msg = GetTextStyleName();
aFrame->AppendMsgPanel( _( "Style" ), msg, MAGENTA ); aList.push_back( MSG_PANEL_ITEM( _( "Style" ), msg, MAGENTA ) );
msg = ReturnStringFromValue( g_UserUnit, m_Size.x, true ); msg = ReturnStringFromValue( g_UserUnit, m_Size.x, true );
aFrame->AppendMsgPanel( _( "Size X" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Size X" ), msg, BLUE ) );
msg = ReturnStringFromValue( g_UserUnit, m_Size.y, true ); msg = ReturnStringFromValue( g_UserUnit, m_Size.y, true );
aFrame->AppendMsgPanel( _( "Size Y" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Size Y" ), msg, BLUE ) );
// Display field name (ref, value ...) // Display field name (ref, value ...)
msg = GetName(); msg = GetName();
aFrame->AppendMsgPanel( _( "Field" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Field" ), msg, BROWN ) );
// Display field text: // Display field text:
aFrame->AppendMsgPanel( _( "Value" ), m_Text, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Value" ), m_Text, BROWN ) );
} }

View File

@ -167,7 +167,7 @@ public:
EDA_RECT GetBoundingBox() const; EDA_RECT GetBoundingBox() const;
void DisplayInfo( EDA_DRAW_FRAME* aFrame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
bool HitTest( const wxPoint& aPosition ); bool HitTest( const wxPoint& aPosition );

View File

@ -37,6 +37,7 @@
#include <wxEeschemaStruct.h> #include <wxEeschemaStruct.h>
#include <richio.h> #include <richio.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <protos.h> #include <protos.h>
@ -1823,40 +1824,40 @@ void LIB_PIN::SetWidth( int aWidth )
} }
void LIB_PIN::DisplayInfo( EDA_DRAW_FRAME* aFrame ) void LIB_PIN::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
{ {
wxString Text; wxString Text;
LIB_ITEM::DisplayInfo( aFrame ); LIB_ITEM::GetMsgPanelInfo( aList );
aFrame->AppendMsgPanel( _( "Name" ), m_name, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Name" ), m_name, DARKCYAN ) );
if( m_number == 0 ) if( m_number == 0 )
Text = wxT( "?" ); Text = wxT( "?" );
else else
ReturnPinStringNum( Text ); ReturnPinStringNum( Text );
aFrame->AppendMsgPanel( _( "Number" ), Text, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Number" ), Text, DARKCYAN ) );
aFrame->AppendMsgPanel( _( "Type" ), aList.push_back( MSG_PANEL_ITEM( _( "Type" ),
wxGetTranslation( pin_electrical_type_names[ m_type ] ), wxGetTranslation( pin_electrical_type_names[ m_type ] ),
RED ); RED ) );
Text = wxGetTranslation( pin_style_names[ GetStyleCodeIndex( m_shape ) ] ); Text = wxGetTranslation( pin_style_names[ GetStyleCodeIndex( m_shape ) ] );
aFrame->AppendMsgPanel( _( "Style" ), Text, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Style" ), Text, BLUE ) );
if( IsVisible() ) if( IsVisible() )
Text = _( "Yes" ); Text = _( "Yes" );
else else
Text = _( "No" ); Text = _( "No" );
aFrame->AppendMsgPanel( _( "Visible" ), Text, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "Visible" ), Text, DARKGREEN ) );
/* Display pin length */ /* Display pin length */
Text = ReturnStringFromValue( g_UserUnit, m_length, true ); Text = ReturnStringFromValue( g_UserUnit, m_length, true );
aFrame->AppendMsgPanel( _( "Length" ), Text, MAGENTA ); aList.push_back( MSG_PANEL_ITEM( _( "Length" ), Text, MAGENTA ) );
Text = wxGetTranslation( pin_orientation_names[ GetOrientationCodeIndex( m_orientation ) ] ); Text = wxGetTranslation( pin_orientation_names[ GetOrientationCodeIndex( m_orientation ) ] );
aFrame->AppendMsgPanel( _( "Orientation" ), Text, DARKMAGENTA ); aList.push_back( MSG_PANEL_ITEM( _( "Orientation" ), Text, DARKMAGENTA ) );
} }

View File

@ -31,6 +31,7 @@
#include <lib_draw_item.h> #include <lib_draw_item.h>
#define TARGET_PIN_RADIUS 12 /* Circle diameter drawn at the active end of pins */ #define TARGET_PIN_RADIUS 12 /* Circle diameter drawn at the active end of pins */
#define PIN_LENGTH 300 /* Default Length of each pin to be drawn. */ #define PIN_LENGTH 300 /* Default Length of each pin to be drawn. */
@ -138,7 +139,7 @@ public:
bool HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTransform ); bool HitTest( wxPoint aPosRef, int aThreshold, const TRANSFORM& aTransform );
void DisplayInfo( EDA_DRAW_FRAME* aFrame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation ); bool Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint* aFindLocation );

View File

@ -35,6 +35,7 @@
#include <wxstruct.h> #include <wxstruct.h>
#include <richio.h> #include <richio.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <protos.h> #include <protos.h>
@ -392,21 +393,21 @@ void LIB_POLYLINE::DeleteSegment( const wxPoint aPosition )
} }
void LIB_POLYLINE::DisplayInfo( EDA_DRAW_FRAME* aFrame ) void LIB_POLYLINE::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
{ {
wxString msg; wxString msg;
EDA_RECT bBox = GetBoundingBox(); EDA_RECT bBox = GetBoundingBox();
LIB_ITEM::DisplayInfo( aFrame ); LIB_ITEM::GetMsgPanelInfo( aList );
msg = ReturnStringFromValue( g_UserUnit, m_Width, true ); msg = ReturnStringFromValue( g_UserUnit, m_Width, true );
aFrame->AppendMsgPanel( _( "Line width" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Line width" ), msg, BLUE ) );
msg.Printf( wxT( "(%d, %d, %d, %d)" ), bBox.GetOrigin().x, msg.Printf( wxT( "(%d, %d, %d, %d)" ), bBox.GetOrigin().x,
bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y ); bBox.GetOrigin().y, bBox.GetEnd().x, bBox.GetEnd().y );
aFrame->AppendMsgPanel( _( "Bounding box" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Bounding box" ), msg, BROWN ) );
} }

View File

@ -82,7 +82,7 @@ public:
int GetPenSize( ) const; int GetPenSize( ) const;
void DisplayInfo( EDA_DRAW_FRAME* aFrame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
void BeginEdit( int aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) ); void BeginEdit( int aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );

View File

@ -35,6 +35,7 @@
#include <wxstruct.h> #include <wxstruct.h>
#include <richio.h> #include <richio.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <protos.h> #include <protos.h>
@ -243,15 +244,15 @@ void LIB_RECTANGLE::drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
} }
void LIB_RECTANGLE::DisplayInfo( EDA_DRAW_FRAME* aFrame ) void LIB_RECTANGLE::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
{ {
wxString msg; wxString msg;
LIB_ITEM::DisplayInfo( aFrame ); LIB_ITEM::GetMsgPanelInfo( aList );
msg = ReturnStringFromValue( g_UserUnit, m_Width, true ); msg = ReturnStringFromValue( g_UserUnit, m_Width, true );
aFrame->AppendMsgPanel( _( "Line width" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Line width" ), msg, BLUE ) );
} }

View File

@ -73,7 +73,7 @@ public:
EDA_RECT GetBoundingBox() const; EDA_RECT GetBoundingBox() const;
void DisplayInfo( EDA_DRAW_FRAME* aFrame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
void BeginEdit( int aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) ); void BeginEdit( int aEditMode, const wxPoint aStartPoint = wxPoint( 0, 0 ) );

View File

@ -35,6 +35,7 @@
#include <wxstruct.h> #include <wxstruct.h>
#include <richio.h> #include <richio.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
#include <lib_draw_item.h> #include <lib_draw_item.h>
#include <general.h> #include <general.h>
@ -408,15 +409,15 @@ void LIB_TEXT::drawGraphic( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aO
} }
void LIB_TEXT::DisplayInfo( EDA_DRAW_FRAME* frame ) void LIB_TEXT::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
{ {
wxString msg; wxString msg;
LIB_ITEM::DisplayInfo( frame ); LIB_ITEM::GetMsgPanelInfo( aList );
msg = ReturnStringFromValue( g_UserUnit, m_Thickness, true ); msg = ReturnStringFromValue( g_UserUnit, m_Thickness, true );
frame->AppendMsgPanel( _( "Line width" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Line width" ), msg, BLUE ) );
} }

View File

@ -32,6 +32,7 @@
#include <eda_text.h> #include <eda_text.h>
#include <lib_draw_item.h> #include <lib_draw_item.h>
/** /**
* Class LIB_TEXT * Class LIB_TEXT
* defines a component library graphical text item. * defines a component library graphical text item.
@ -93,7 +94,7 @@ public:
int GetPenSize( ) const; int GetPenSize( ) const;
void DisplayInfo( EDA_DRAW_FRAME* aFrame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
EDA_RECT GetBoundingBox() const; EDA_RECT GetBoundingBox() const;

View File

@ -31,6 +31,7 @@
#include <fctsys.h> #include <fctsys.h>
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <eeschema_id.h> #include <eeschema_id.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <libeditframe.h> #include <libeditframe.h>
@ -51,7 +52,11 @@ void LIB_EDIT_FRAME::OnLeftClick( wxDC* DC, const wxPoint& aPosition )
item = LocateItemUsingCursor( aPosition ); item = LocateItemUsingCursor( aPosition );
if( item ) if( item )
item->DisplayInfo( this ); {
MSG_PANEL_ITEMS items;
item->GetMsgPanelInfo( items );
SetMsgPanel( items );
}
else else
{ {
DisplayCmpDoc(); DisplayCmpDoc();
@ -150,7 +155,7 @@ void LIB_EDIT_FRAME::OnLeftDClick( wxDC* DC, const wxPoint& aPosition )
} }
if( m_drawItem ) if( m_drawItem )
m_drawItem->DisplayInfo( this ); SetMsgPanel( m_drawItem );
else else
return; return;

View File

@ -32,6 +32,7 @@
#include <hotkeys.h> #include <hotkeys.h>
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <class_sch_screen.h> #include <class_sch_screen.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <libeditframe.h> #include <libeditframe.h>
@ -89,9 +90,15 @@ bool LIB_EDIT_FRAME::OnRightClick( const wxPoint& aPosition, wxMenu* PopMenu )
} }
if( item ) if( item )
item->DisplayInfo( this ); {
MSG_PANEL_ITEMS items;
item->GetMsgPanelInfo( items );
SetMsgPanel( items );
}
else else
{
return true; return true;
}
m_drawItem = item; m_drawItem = item;
bool not_edited = !item->InEditMode(); bool not_edited = !item->InEditMode();

View File

@ -35,6 +35,7 @@
#include <eda_doc.h> #include <eda_doc.h>
#include <gr_basic.h> #include <gr_basic.h>
#include <wxEeschemaStruct.h> #include <wxEeschemaStruct.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <protos.h> #include <protos.h>
@ -1185,9 +1186,15 @@ LIB_ITEM* LIB_EDIT_FRAME::locateItem( const wxPoint& aPosition, const KICAD_T aF
} }
if( item ) if( item )
item->DisplayInfo( this ); {
MSG_PANEL_ITEMS items;
item->GetMsgPanelInfo( items );
SetMsgPanel( items );
}
else else
{
ClearMsgPanel(); ClearMsgPanel();
}
return item; return item;
} }

View File

@ -34,6 +34,7 @@
#include <confirm.h> #include <confirm.h>
#include <class_sch_screen.h> #include <class_sch_screen.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
#include <libeditframe.h> #include <libeditframe.h>
#include <eeschema_id.h> #include <eeschema_id.h>
@ -148,7 +149,10 @@ void LIB_EDIT_FRAME::OnEditPin( wxCommandEvent& event )
SaveCopyInUndoList( pin->GetParent() ); SaveCopyInUndoList( pin->GetParent() );
OnModify( ); OnModify( );
pin->DisplayInfo( this );
MSG_PANEL_ITEMS items;
pin->GetMsgPanelInfo( items );
SetMsgPanel( items );
m_canvas->Refresh(); m_canvas->Refresh();
} }
@ -313,7 +317,9 @@ void LIB_EDIT_FRAME::StartMovePin( wxDC* DC )
GetScreen()->SetCrossHairPosition( startPos ); GetScreen()->SetCrossHairPosition( startPos );
m_canvas->MoveCursorToCrossHair(); m_canvas->MoveCursorToCrossHair();
CurrentPin->DisplayInfo( this ); MSG_PANEL_ITEMS items;
CurrentPin->GetMsgPanelInfo( items );
SetMsgPanel( items );
m_canvas->SetMouseCapture( DrawMovePin, AbortPinMove ); m_canvas->SetMouseCapture( DrawMovePin, AbortPinMove );
m_canvas->CrossHairOn( DC ); m_canvas->CrossHairOn( DC );
} }
@ -563,7 +569,9 @@ void LIB_EDIT_FRAME::RepeatPinItem( wxDC* DC, LIB_PIN* SourcePin )
GetScreen()->SetCrossHairPosition( savepos ); GetScreen()->SetCrossHairPosition( savepos );
m_canvas->CrossHairOn( DC ); m_canvas->CrossHairOn( DC );
Pin->DisplayInfo( this ); MSG_PANEL_ITEMS items;
Pin->GetMsgPanelInfo( items );
SetMsgPanel( items );
OnModify( ); OnModify( );
} }

View File

@ -36,6 +36,7 @@
#include <richio.h> #include <richio.h>
#include <wxEeschemaStruct.h> #include <wxEeschemaStruct.h>
#include <plot_common.h> #include <plot_common.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <class_library.h> #include <class_library.h>
@ -1464,7 +1465,7 @@ EDA_RECT SCH_COMPONENT::GetBoundingBox() const
} }
void SCH_COMPONENT::DisplayInfo( EDA_DRAW_FRAME* frame ) void SCH_COMPONENT::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
{ {
// search for the component in lib // search for the component in lib
// Entry and root_component can differ if Entry is an alias // Entry and root_component can differ if Entry is an alias
@ -1476,30 +1477,29 @@ void SCH_COMPONENT::DisplayInfo( EDA_DRAW_FRAME* frame )
wxString msg; wxString msg;
frame->ClearMsgPanel(); if( m_currentSheetPath )
aList.push_back( MSG_PANEL_ITEM( _( "Reference" ),
frame->AppendMsgPanel( _( "Reference" ), GetRef( m_currentSheetPath ),
GetRef( &( ( (SCH_EDIT_FRAME*) frame )->GetCurrentSheet() ) ), DARKCYAN ) );
DARKCYAN );
if( root_component->IsPower() ) if( root_component->IsPower() )
msg = _( "Power symbol" ); msg = _( "Power symbol" );
else else
msg = _( "Name" ); msg = _( "Name" );
frame->AppendMsgPanel( msg, GetField( VALUE )->m_Text, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( msg, GetField( VALUE )->m_Text, DARKCYAN ) );
// Display component reference in library and library // Display component reference in library and library
frame->AppendMsgPanel( _( "Component" ), m_ChipName, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Component" ), m_ChipName, BROWN ) );
if( alias->GetName() != root_component->GetName() ) if( alias->GetName() != root_component->GetName() )
frame->AppendMsgPanel( _( "Alias of" ), root_component->GetName(), BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Alias of" ), root_component->GetName(), BROWN ) );
frame->AppendMsgPanel( _( "Library" ), alias->GetLibraryName(), BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Library" ), alias->GetLibraryName(), BROWN ) );
// Display description of the component, and keywords found in lib // Display description of the component, and keywords found in lib
frame->AppendMsgPanel( _( "Description" ), alias->GetDescription(), DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Description" ), alias->GetDescription(), DARKCYAN ) );
frame->AppendMsgPanel( _( "Key words" ), alias->GetKeyWords(), DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Key words" ), alias->GetKeyWords(), DARKCYAN ) );
} }

View File

@ -67,6 +67,14 @@ class SCH_COMPONENT : public SCH_ITEM
TRANSFORM m_transform; ///< The rotation/mirror transformation matrix. TRANSFORM m_transform; ///< The rotation/mirror transformation matrix.
SCH_FIELDS m_Fields; ///< Variable length list of fields. SCH_FIELDS m_Fields; ///< Variable length list of fields.
/**
* A temporary sheet path is required to generate the correct reference designator string
* in complex heirarchies. Hopefully this is only a temporary hack to decouple schematic
* objects from the drawing window until a better design for handling complex heirarchies
* can be implemented.
*/
const SCH_SHEET_PATH* m_currentSheetPath;
/** /**
* Defines the hierarchical path and reference of the component. This allows support * Defines the hierarchical path and reference of the component. This allows support
* for hierarchical sheets that reference the same schematic. The format for the path * for hierarchical sheets that reference the same schematic. The format for the path
@ -179,7 +187,7 @@ public:
*/ */
wxPoint GetScreenCoord( const wxPoint& aPoint ); wxPoint GetScreenCoord( const wxPoint& aPoint );
void DisplayInfo( EDA_DRAW_FRAME* frame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
/** /**
* Function ClearAnnotation * Function ClearAnnotation
@ -277,6 +285,11 @@ public:
*/ */
static bool IsReferenceStringValid( const wxString& aReferenceString ); static bool IsReferenceStringValid( const wxString& aReferenceString );
void SetCurrentSheetPath( const SCH_SHEET_PATH* aSheetPath )
{
m_currentSheetPath = aSheetPath;
}
/** /**
* Function GetRef * Function GetRef
* returns the reference, for the given sheet path. * returns the reference, for the given sheet path.

View File

@ -31,6 +31,7 @@
#include <wxstruct.h> #include <wxstruct.h>
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <trigo.h> #include <trigo.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <sch_marker.h> #include <sch_marker.h>
@ -156,16 +157,12 @@ EDA_RECT SCH_MARKER::GetBoundingBox() const
} }
void SCH_MARKER::DisplayInfo( EDA_DRAW_FRAME* aFrame ) void SCH_MARKER::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
{ {
if( aFrame == NULL )
return;
wxString msg; wxString msg;
aFrame->ClearMsgPanel(); aList.push_back( MSG_PANEL_ITEM( _( "Electronics rule check error" ),
aFrame->AppendMsgPanel( _( "Electronics rule check error" ), GetReporter().GetErrorText(), DARKRED ) );
GetReporter().GetErrorText(), DARKRED );
} }

View File

@ -33,6 +33,7 @@
#include <sch_item_struct.h> #include <sch_item_struct.h>
#include <class_marker_base.h> #include <class_marker_base.h>
/* Marker are mainly used to show an ERC error /* Marker are mainly used to show an ERC error
*/ */
@ -96,7 +97,7 @@ public:
*/ */
bool Matches( wxFindReplaceData& aSearchData, wxPoint* aFindLocation ); bool Matches( wxFindReplaceData& aSearchData, wxPoint* aFindLocation );
void DisplayInfo( EDA_DRAW_FRAME* aFrame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
bool IsSelectStateChanged( const wxRect& aRect ); bool IsSelectStateChanged( const wxRect& aRect );

View File

@ -35,6 +35,7 @@
#include <wxEeschemaStruct.h> #include <wxEeschemaStruct.h>
#include <plot_common.h> #include <plot_common.h>
#include <kicad_string.h> #include <kicad_string.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <sch_sheet.h> #include <sch_sheet.h>
@ -820,16 +821,15 @@ wxString SCH_SHEET::GetFileName( void ) const
} }
void SCH_SHEET::DisplayInfo( EDA_DRAW_FRAME* frame ) void SCH_SHEET::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
{ {
frame->ClearMsgPanel(); aList.push_back( MSG_PANEL_ITEM( _( "Sheet name" ), m_name, CYAN ) );
frame->AppendMsgPanel( _( "Sheet name" ), m_name, CYAN ); aList.push_back( MSG_PANEL_ITEM( _( "File name" ), m_fileName, BROWN ) );
frame->AppendMsgPanel( _( "File name" ), m_fileName, BROWN );
#if 0 // Set to 1 to display the sheet time stamp (mainly for test) #if 0 // Set to 1 to display the sheet time stamp (mainly for test)
wxString msg; wxString msg;
msg.Printf( wxT( "%.8X" ), m_TimeStamp ); msg.Printf( wxT( "%.8X" ), m_TimeStamp );
frame->AppendMsgPanel( _( "Time Stamp" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Time Stamp" ), msg, BLUE ) );
#endif #endif
} }

View File

@ -290,7 +290,7 @@ public:
bool Load( LINE_READER& aLine, wxString& aErrorMsg ); bool Load( LINE_READER& aLine, wxString& aErrorMsg );
void DisplayInfo( EDA_DRAW_FRAME* frame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
/* there is no member for orientation in sch_sheet, to preserve file /* there is no member for orientation in sch_sheet, to preserve file
* format, we detect orientation based on pin edges * format, we detect orientation based on pin edges

View File

@ -37,6 +37,7 @@
#include <wxEeschemaStruct.h> #include <wxEeschemaStruct.h>
#include <plot_common.h> #include <plot_common.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <protos.h> #include <protos.h>
@ -730,31 +731,30 @@ void SCH_TEXT::Plot( PLOTTER* aPlotter )
aPlotter->PlotPoly( Poly, NO_FILL ); aPlotter->PlotPoly( Poly, NO_FILL );
} }
/* /*
* Display the type, shape, size and some other props to the Message panel * Display the type, shape, size and some other props to the Message panel
*/ */
void SCH_TEXT::DisplayInfo( EDA_DRAW_FRAME* frame ) void SCH_TEXT::GetMsgPanelInfo( MSG_PANEL_ITEMS& aList )
{ {
wxString msg; wxString msg;
frame->ClearMsgPanel();
switch( Type() ) switch( Type() )
{ {
case SCH_TEXT_T: case SCH_TEXT_T:
msg = _("Graphic text"); msg = _( "Graphic text" );
break; break;
case SCH_LABEL_T: case SCH_LABEL_T:
msg = _("Label"); msg = _( "Label" );
break; break;
case SCH_GLOBAL_LABEL_T: case SCH_GLOBAL_LABEL_T:
msg = _("Global label"); msg = _( "Global label" );
break; break;
case SCH_HIERARCHICAL_LABEL_T: case SCH_HIERARCHICAL_LABEL_T:
msg = _("Hierarchical label"); msg = _( "Hierarchical label" );
break; break;
case SCH_SHEET_PIN_T: case SCH_SHEET_PIN_T:
@ -765,34 +765,34 @@ void SCH_TEXT::DisplayInfo( EDA_DRAW_FRAME* frame )
return; return;
} }
frame->AppendMsgPanel( msg, wxEmptyString, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( msg, GetText(), DARKCYAN ) );
switch( GetOrientation() ) switch( GetOrientation() )
{ {
case 0: // horizontal text case 0: // horizontal text
msg = _("Horizontal"); msg = _( "Horizontal" );
break; break;
case 1: // Vert Orientation UP case 1: // Vert Orientation UP
msg = _("Vertical up"); msg = _( "Vertical up" );
break; break;
case 2: // invert horizontal text case 2: // invert horizontal text
msg = _("Horizontal invert"); msg = _( "Horizontal invert" );
break; break;
case 3: // Vert Orientation Down case 3: // Vert Orientation Down
msg = _("Vertical down");; msg = _( "Vertical down" );
break; break;
default: default:
msg = wxT("???"); msg = wxT( "???" );
break; break;
} }
frame->AppendMsgPanel( _("Orientation"), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Orientation" ), msg, BROWN ) );
wxString textStyle[] = { _("Normal"), _("Italic"), _("Bold"), _("Bold Italic") }; wxString textStyle[] = { _( "Normal" ), _( "Italic" ), _( "Bold" ), _( "Bold Italic" ) };
int style = 0; int style = 0;
if( m_Italic ) if( m_Italic )
@ -801,7 +801,7 @@ void SCH_TEXT::DisplayInfo( EDA_DRAW_FRAME* frame )
if( m_Bold ) if( m_Bold )
style += 2; style += 2;
frame->AppendMsgPanel( _("Style"), textStyle[style], BROWN ); aList.push_back( MSG_PANEL_ITEM( _("Style"), textStyle[style], BROWN ) );
// Display electricat type if it is relevant // Display electricat type if it is relevant
@ -811,19 +811,20 @@ void SCH_TEXT::DisplayInfo( EDA_DRAW_FRAME* frame )
{ {
switch( GetShape() ) switch( GetShape() )
{ {
case NET_INPUT: msg = _("Input"); break; case NET_INPUT: msg = _( "Input" ); break;
case NET_OUTPUT: msg = _("Output"); break; case NET_OUTPUT: msg = _( "Output" ); break;
case NET_BIDI: msg = _("Bidirectional"); break; case NET_BIDI: msg = _( "Bidirectional" ); break;
case NET_TRISTATE: msg = _("Tri-State"); break; case NET_TRISTATE: msg = _( "Tri-State" ); break;
case NET_UNSPECIFIED: msg = _("Passive"); break; case NET_UNSPECIFIED: msg = _( "Passive" ); break;
default: msg = wxT("???"); break; default: msg = wxT( "???" ); break;
} }
frame->AppendMsgPanel( _("Type"), msg, BLUE );
aList.push_back( MSG_PANEL_ITEM( _( "Type" ), msg, BLUE ) );
} }
// Display text size (X or Y value, with are the same value in Eeschema) // Display text size (X or Y value, with are the same value in Eeschema)
msg = ReturnStringFromValue( g_UserUnit, m_Size.x, true ); msg = ReturnStringFromValue( g_UserUnit, m_Size.x, true );
frame->AppendMsgPanel( _("Size"), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _( "Size" ), msg, RED ) );
} }
#if defined(DEBUG) #if defined(DEBUG)

View File

@ -212,7 +212,7 @@ public:
virtual EDA_ITEM* Clone() const; virtual EDA_ITEM* Clone() const;
void DisplayInfo( EDA_DRAW_FRAME* frame ); // Virtual function void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
#if defined(DEBUG) #if defined(DEBUG)
void Show( int nestLevel, std::ostream& os ) const; // override void Show( int nestLevel, std::ostream& os ) const; // override

View File

@ -33,6 +33,7 @@
#include <gestfich.h> #include <gestfich.h>
#include <confirm.h> #include <confirm.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <eeschema_id.h> #include <eeschema_id.h>

View File

@ -34,6 +34,7 @@
#include <confirm.h> #include <confirm.h>
#include <class_sch_screen.h> #include <class_sch_screen.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
#include <eeschema_id.h> #include <eeschema_id.h>
#include <general.h> #include <general.h>
@ -119,7 +120,9 @@ void LIB_EDIT_FRAME::EditGraphicSymbol( wxDC* DC, LIB_ITEM* DrawItem )
component->GetDrawItemList().sort(); component->GetDrawItemList().sort();
OnModify( ); OnModify( );
DrawItem->DisplayInfo( this ); MSG_PANEL_ITEMS items;
DrawItem->GetMsgPanelInfo( items );
SetMsgPanel( items );
m_canvas->Refresh(); m_canvas->Refresh();
} }

View File

@ -32,6 +32,7 @@
#include <eeschema_id.h> #include <eeschema_id.h>
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <wxEeschemaStruct.h> #include <wxEeschemaStruct.h>
#include <msgpanel.h>
#include <general.h> #include <general.h>
#include <viewlib_frame.h> #include <viewlib_frame.h>

View File

@ -33,6 +33,7 @@
#include <trigo.h> #include <trigo.h>
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <macros.h> #include <macros.h>
#include <msgpanel.h>
#include <gerbview.h> #include <gerbview.h>
#include <class_gerber_draw_item.h> #include <class_gerber_draw_item.h>
@ -540,42 +541,41 @@ void GERBER_DRAW_ITEM::DrawGbrPoly( EDA_RECT* aClipBox,
} }
void GERBER_DRAW_ITEM::DisplayInfo( EDA_DRAW_FRAME* frame ) void GERBER_DRAW_ITEM::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
wxString msg; wxString msg;
frame->ClearMsgPanel();
msg = ShowGBRShape(); msg = ShowGBRShape();
frame->AppendMsgPanel( _( "Type" ), msg, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Type" ), msg, DARKCYAN ) );
// Display D_Code value: // Display D_Code value:
msg.Printf( wxT( "%d" ), m_DCode ); msg.Printf( wxT( "%d" ), m_DCode );
frame->AppendMsgPanel( _( "D Code" ), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _( "D Code" ), msg, RED ) );
// Display graphic layer number // Display graphic layer number
msg.Printf( wxT( "%d" ), GetLayer() + 1 ); msg.Printf( wxT( "%d" ), GetLayer() + 1 );
frame->AppendMsgPanel( _( "Graphic layer" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Graphic layer" ), msg, BROWN ) );
// Display item rotation // Display item rotation
// The full rotation is Image rotation + m_lyrRotation // The full rotation is Image rotation + m_lyrRotation
// but m_lyrRotation is specific to this object // but m_lyrRotation is specific to this object
// so we display only this parameter // so we display only this parameter
msg.Printf( wxT( "%f" ), m_lyrRotation ); msg.Printf( wxT( "%f" ), m_lyrRotation );
frame->AppendMsgPanel( _( "Rotation" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Rotation" ), msg, BLUE ) );
// Display item polarity (item specific) // Display item polarity (item specific)
msg = m_LayerNegative ? _("Clear") : _("Dark"); msg = m_LayerNegative ? _("Clear") : _("Dark");
frame->AppendMsgPanel( _( "Polarity" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Polarity" ), msg, BLUE ) );
// Display mirroring (item specific) // Display mirroring (item specific)
msg.Printf( wxT( "A:%s B:%s" ), msg.Printf( wxT( "A:%s B:%s" ),
m_mirrorA ? _("Yes") : _("No"), m_mirrorA ? _("Yes") : _("No"),
m_mirrorB ? _("Yes") : _("No")); m_mirrorB ? _("Yes") : _("No"));
frame->AppendMsgPanel( _( "Mirror" ), msg, DARKRED ); aList.push_back( MSG_PANEL_ITEM( _( "Mirror" ), msg, DARKRED ) );
// Display AB axis swap (item specific) // Display AB axis swap (item specific)
msg = m_swapAxis ? wxT( "A=Y B=X" ) : wxT( "A=X B=Y" ); msg = m_swapAxis ? wxT( "A=Y B=X" ) : wxT( "A=X B=Y" );
frame->AppendMsgPanel( _( "AB axis" ), msg, DARKRED ); aList.push_back( MSG_PANEL_ITEM( _( "AB axis" ), msg, DARKRED ) );
} }

View File

@ -36,6 +36,7 @@
class GERBER_IMAGE; class GERBER_IMAGE;
class GBR_LAYOUT; class GBR_LAYOUT;
class D_CODE; class D_CODE;
class MSG_PANEL_ITEM;
/* Shapes id for basic shapes ( .m_Shape member ) */ /* Shapes id for basic shapes ( .m_Shape member ) */
@ -243,15 +244,7 @@ public:
/* divers */ /* divers */
int Shape() const { return m_Shape; } int Shape() const { return m_Shape; }
/** void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
* Function DisplayInfo
* has knowledge about the frame and how and where to put status information
* about this object into the frame's message panel.
* Is virtual from EDA_ITEM.
* Display info about this GERBER item
* @param frame A EDA_DRAW_FRAME in which to print status information.
*/
void DisplayInfo( EDA_DRAW_FRAME* frame );
wxString ShowGBRShape(); wxString ShowGBRShape();

View File

@ -35,6 +35,7 @@
#include <base_units.h> #include <base_units.h>
#include <colors_selection.h> #include <colors_selection.h>
#include <class_gbr_layer_box_selector.h> #include <class_gbr_layer_box_selector.h>
#include <msgpanel.h>
#include <gerbview.h> #include <gerbview.h>
#include <class_gerber_draw_item.h> #include <class_gerber_draw_item.h>
@ -744,6 +745,7 @@ void GERBVIEW_FRAME::SetOriginAxisPosition( const wxPoint& aPosition )
m_Layout->SetOriginAxisPosition( aPosition ); m_Layout->SetOriginAxisPosition( aPosition );
} }
void GERBVIEW_FRAME::SetCurItem( GERBER_DRAW_ITEM* aItem, bool aDisplayInfo ) void GERBVIEW_FRAME::SetCurItem( GERBER_DRAW_ITEM* aItem, bool aDisplayInfo )
{ {
GetScreen()->SetCurItem( aItem ); GetScreen()->SetCurItem( aItem );
@ -751,12 +753,19 @@ void GERBVIEW_FRAME::SetCurItem( GERBER_DRAW_ITEM* aItem, bool aDisplayInfo )
if( aItem ) if( aItem )
{ {
if( aDisplayInfo ) if( aDisplayInfo )
aItem->DisplayInfo( this ); {
MSG_PANEL_ITEMS items;
aItem->GetMsgPanelInfo( items );
SetMsgPanel( items );
}
} }
else else
{
EraseMsgBox(); EraseMsgBox();
}
} }
/* /*
* Function GetLayoutBoundingBox * Function GetLayoutBoundingBox
* returns the bounding box containing all gerber items. * returns the bounding box containing all gerber items.

View File

@ -28,9 +28,12 @@
#include <fctsys.h> #include <fctsys.h>
#include <common.h> #include <common.h>
#include <msgpanel.h>
#include <gerbview.h> #include <gerbview.h>
#include <class_gerber_draw_item.h> #include <class_gerber_draw_item.h>
/* localize a gerber item and return a pointer to it. /* localize a gerber item and return a pointer to it.
* Display info about this item * Display info about this item
*/ */
@ -74,7 +77,9 @@ GERBER_DRAW_ITEM* GERBVIEW_FRAME::Locate( const wxPoint& aPosition, int aTypeloc
if( found ) if( found )
{ {
gerb_item->DisplayInfo( this ); MSG_PANEL_ITEMS items;
gerb_item->GetMsgPanelInfo( items );
SetMsgPanel( items );
return gerb_item; return gerb_item;
} }

View File

@ -165,8 +165,8 @@ class wxFindReplaceData;
class EDA_ITEM; class EDA_ITEM;
class EDA_DRAW_FRAME; class EDA_DRAW_FRAME;
class EDA_RECT; class EDA_RECT;
class EDA_DRAW_PANEL;
class DHEAD; class DHEAD;
class MSG_PANEL_ITEM;
/** /**
@ -495,14 +495,17 @@ public:
void SetForceVisible( bool aEnable ) { m_forceVisible = aEnable; } void SetForceVisible( bool aEnable ) { m_forceVisible = aEnable; }
/** /**
* Function DisplayInfo * Function GetMsgPanelInfo
* has knowledge about the frame and how and where to put status * populates \a aList of #MSG_PANEL_ITEM objects with it's internal state for display
* information about this object into the frame's message panel. * purposes.
* @param frame A EDA_DRAW_FRAME in which to print status information. *
* @note This method replaces DisplayInfo() so that KiCad objects no longer have any
* knowledge of wxWidgets UI objects.
*
* @param aList is the list to populate.
*/ */
virtual void DisplayInfo( EDA_DRAW_FRAME* frame ) virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
// derived classes may implement this
} }
/** /**

View File

@ -35,7 +35,7 @@
#include <base_struct.h> #include <base_struct.h>
#include <gr_basic.h> #include <gr_basic.h>
class EDA_DRAW_FRAME;
class BASE_SCREEN; class BASE_SCREEN;
class PCB_SCREEN; class PCB_SCREEN;

184
include/msgpanel.h Normal file
View File

@ -0,0 +1,184 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2011-2012 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file msgpanel.h
* @brief Message panel definition file.
*/
#ifndef _MSGPANEL_H_
#define _MSGPANEL_H_
#include <colors.h>
#include <wx/window.h>
#include <vector>
#define MSG_PANEL_DEFAULT_PAD 6 ///< The default number of spaces between each text string.
class EDA_MSG_PANEL;
/**
* Class EDA_MSG_ITEM
* is used EDA_MSG_PANEL as the item type for displaying messages.
*/
class MSG_PANEL_ITEM
{
int m_X;
int m_UpperY;
int m_LowerY;
wxString m_UpperText;
wxString m_LowerText;
EDA_COLOR_T m_Color;
int m_Pad;
friend class EDA_MSG_PANEL;
public:
MSG_PANEL_ITEM( const wxString& aUpperText, const wxString& aLowerText, EDA_COLOR_T aColor,
int aPad = MSG_PANEL_DEFAULT_PAD ) :
m_UpperText( aUpperText ),
m_LowerText( aLowerText ),
m_Color( aColor ),
m_Pad( aPad )
{
}
MSG_PANEL_ITEM()
{
}
void SetUpperText( const wxString& aUpperText ) { m_UpperText = aUpperText; }
const wxString& GetUpperText() const { return m_UpperText; }
void SetLowerText( const wxString& aLowerText ) { m_LowerText = aLowerText; }
const wxString& GetLowerText() const { return m_LowerText; }
void SetColor( EDA_COLOR_T aColor ) { m_Color = aColor; }
EDA_COLOR_T GetColor() const { return m_Color; }
void SetPadding( int aPad ) { m_Pad = aPad; }
int GetPadding() const { return m_Pad; }
};
typedef std::vector<MSG_PANEL_ITEM> MSG_PANEL_ITEMS;
typedef MSG_PANEL_ITEMS::iterator MSG_PANEL_ITEMS_ITER;
typedef MSG_PANEL_ITEMS::const_iterator MSG_PANEL_ITEMS_CITER;
/**
* class EDA_MSG_PANEL
* is a panel to display various information messages.
*/
class EDA_MSG_PANEL : public wxPanel
{
protected:
MSG_PANEL_ITEMS m_Items;
int m_last_x; ///< the last used x coordinate
wxSize m_fontSize;
void showItem( wxDC& dc, const MSG_PANEL_ITEM& aItem );
void erase( wxDC* DC );
/**
* Function getFontSize
* computes the height and width of a 'W' in the system font.
*/
static wxSize computeFontSize();
/**
* Calculate the width and height of a text string using the system UI font.
*/
wxSize computeTextSize( const wxString& text ) const;
public:
EDA_MSG_PANEL( wxWindow* aParent, int aId, const wxPoint& aPosition, const wxSize& aSize );
~EDA_MSG_PANEL();
/**
* Function GetRequiredHeight
* returns the required height (in pixels) of a EDA_MSG_PANEL. This takes
* into consideration the system gui font, wxSYS_DEFAULT_GUI_FONT.
*/
static int GetRequiredHeight();
void OnPaint( wxPaintEvent& aEvent );
void EraseMsgBox();
/**
* Function SetMessage
* sets a message at \a aXPosition to \a aUpperText and \a aLowerText in the message panel.
*
* @param aXPosition The horizontal position to display the message or less than zero
* to set the message using the last message position.
* @param aUpperText The text to be displayed in top line.
* @param aLowerText The text to be displayed in bottom line.
* @param aColor Color of the text to display.
*/
void SetMessage( int aXPosition, const wxString& aUpperText,
const wxString& aLowerText, EDA_COLOR_T aColor );
/**
* Function AppendMessage
* appends a message to the message panel.
*
* This method automatically adjusts for the width of the text string.
* Making consecutive calls to AppendMessage will append each message
* to the right of the last message. This message is not compatible
* with Affiche_1_Parametre.
*
* @param aUpperText The message upper text.
* @param aLowerText The message lower text.
* @param aColor A color ID from the KiCad color list (see colors.h).
* @param aPad Number of spaces to pad between messages (default = 4).
*/
void AppendMessage( const wxString& aUpperText, const wxString& aLowerText,
EDA_COLOR_T aColor, int aPad = 6 );
/**
* Function AppendMessage
* appends \a aMessageItem to the message panel.
*
* @param aMessageItem is a reference to an #MSG_PANEL_ITEM containing the message to
* append to the panel.
*/
void AppendMessage( const MSG_PANEL_ITEM& aMessageItem )
{
AppendMessage( aMessageItem.GetUpperText(), aMessageItem.GetLowerText(),
aMessageItem.GetColor(), aMessageItem.GetPadding() );
}
DECLARE_EVENT_TABLE()
};
#endif // _MSGPANEL_H_

View File

@ -74,6 +74,8 @@ class PARAM_CFG_BASE;
class PAGE_INFO; class PAGE_INFO;
class PLOTTER; class PLOTTER;
class TITLE_BLOCK; class TITLE_BLOCK;
class MSG_PANEL_ITEM;
enum id_librarytype { enum id_librarytype {
LIBRARY_TYPE_EESCHEMA, LIBRARY_TYPE_EESCHEMA,
@ -116,7 +118,6 @@ protected:
ID_DRAWFRAME_TYPE m_Ident; // Id Type (pcb, schematic, library..) ID_DRAWFRAME_TYPE m_Ident; // Id Type (pcb, schematic, library..)
wxPoint m_FramePos; wxPoint m_FramePos;
wxSize m_FrameSize; wxSize m_FrameSize;
int m_MsgFrameHeight;
wxAuiToolBar* m_mainToolBar; // Standard horizontal Toolbar wxAuiToolBar* m_mainToolBar; // Standard horizontal Toolbar
bool m_FrameIsActive; bool m_FrameIsActive;
@ -432,6 +433,8 @@ protected:
/// Panel used to display information at the bottom of the main window. /// Panel used to display information at the bottom of the main window.
EDA_MSG_PANEL* m_messagePanel; EDA_MSG_PANEL* m_messagePanel;
int m_MsgFrameHeight;
#ifdef USE_WX_OVERLAY #ifdef USE_WX_OVERLAY
// MAC Uses overlay to workaround the wxINVERT and wxXOR miss // MAC Uses overlay to workaround the wxINVERT and wxXOR miss
wxOverlay m_overlay; wxOverlay m_overlay;
@ -851,6 +854,16 @@ public:
*/ */
void ClearMsgPanel( void ); void ClearMsgPanel( void );
/**
* Function SetMsgPanel
* clears the message panel and populates it with the contents of \a aList.
*
* @param aList is the list of #MSG_PANEL_ITEM objects to fill the message panel.
*/
void SetMsgPanel( const std::vector< MSG_PANEL_ITEM >& aList );
void SetMsgPanel( EDA_ITEM* aItem );
/** /**
* Function PrintPage * Function PrintPage
* used to print a page * used to print a page
@ -888,95 +901,6 @@ public:
}; };
/**
* Struct EDA_MSG_ITEM
* is used privately by EDA_MSG_PANEL as the item type for displaying messages.
*/
struct EDA_MSG_ITEM
{
int m_X;
int m_UpperY;
int m_LowerY;
wxString m_UpperText;
wxString m_LowerText;
EDA_COLOR_T m_Color;
};
/**
* class EDA_MSG_PANEL
* is a panel to display various information messages.
*/
class EDA_MSG_PANEL : public wxPanel
{
protected:
std::vector<EDA_MSG_ITEM> m_Items;
int m_last_x; ///< the last used x coordinate
wxSize m_fontSize;
void showItem( wxDC& dc, const EDA_MSG_ITEM& aItem );
void erase( wxDC* DC );
/**
* Function getFontSize
* computes the height and width of a 'W' in the system font.
*/
static wxSize computeFontSize();
/**
* Calculate the width and height of a text string using the system UI font.
*/
wxSize computeTextSize( const wxString& text ) const;
public:
EDA_MSG_PANEL( EDA_DRAW_FRAME* parent, int id, const wxPoint& pos, const wxSize& size );
~EDA_MSG_PANEL();
/**
* Function GetRequiredHeight
* returns the required height (in pixels) of a EDA_MSG_PANEL. This takes
* into consideration the system gui font, wxSYS_DEFAULT_GUI_FONT.
*/
static int GetRequiredHeight();
void OnPaint( wxPaintEvent& event );
void EraseMsgBox();
/**
* Function SetMessage
* sets a message at \a aXPosition to \a aUpperText and \a aLowerText in the message panel.
*
* @param aXPosition The horizontal position to display the message or less than zero
* to set the message using the last message position.
* @param aUpperText The text to be displayed in top line.
* @param aLowerText The text to be displayed in bottom line.
* @param aColor Color of the text to display.
*/
void SetMessage( int aXPosition, const wxString& aUpperText,
const wxString& aLowerText, EDA_COLOR_T aColor );
/**
* Append a message to the message panel.
*
* This method automatically adjusts for the width of the text string.
* Making consecutive calls to AppendMessage will append each message
* to the right of the last message. This message is not compatible
* with Affiche_1_Parametre.
*
* @param textUpper - The message upper text.
* @param textLower - The message lower text.
* @param color - A color ID from the KiCad color list (see colors.h).
* @param pad - Number of spaces to pad between messages (default = 4).
*/
void AppendMessage( const wxString& textUpper, const wxString& textLower,
EDA_COLOR_T color, int pad = 6 );
DECLARE_EVENT_TABLE()
};
/** /**
* Specialization of the wxAuiPaneInfo class for KiCad panels. * Specialization of the wxAuiPaneInfo class for KiCad panels.
* *

View File

@ -33,6 +33,7 @@
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <gr_basic.h> #include <gr_basic.h>
#include <wxPcbStruct.h> #include <wxPcbStruct.h>
#include <msgpanel.h>
#include <pcbnew.h> #include <pcbnew.h>
#include <protos.h> #include <protos.h>
@ -56,7 +57,10 @@ void PCB_EDIT_FRAME::Attribut_Segment( TRACK* track, wxDC* DC, bool Flag_On )
track->SetState( TRACK_LOCKED, Flag_On ); track->SetState( TRACK_LOCKED, Flag_On );
track->Draw( m_canvas, DC, GR_OR | GR_HIGHLIGHT ); track->Draw( m_canvas, DC, GR_OR | GR_HIGHLIGHT );
m_canvas->CrossHairOn( DC ); // Display cursor shape m_canvas->CrossHairOn( DC ); // Display cursor shape
track->DisplayInfo( this );
MSG_PANEL_ITEMS items;
track->GetMsgPanelInfo( items );
SetMsgPanel( items );
} }

View File

@ -304,8 +304,7 @@ void PCB_EDIT_FRAME::LockModule( MODULE* aModule, bool aLocked )
if( aModule ) if( aModule )
{ {
aModule->SetLocked( aLocked ); aModule->SetLocked( aLocked );
SetMsgPanel( aModule );
aModule->DisplayInfo( this );
OnModify(); OnModify();
} }
else else

View File

@ -38,6 +38,7 @@
#include <gr_basic.h> #include <gr_basic.h>
#include <macros.h> #include <macros.h>
#include <pcbcommon.h> #include <pcbcommon.h>
#include <msgpanel.h>
#include <protos.h> #include <protos.h>
#include <autorout.h> #include <autorout.h>
@ -591,7 +592,7 @@ int PCB_EDIT_FRAME::GetOptimalModulePlacement( MODULE* aModule, wxDC* aDC )
g_Show_Module_Ratsnest = false; g_Show_Module_Ratsnest = false;
aModule->DisplayInfo( this ); SetMsgPanel( aModule );
LastPosOK.x = RoutingMatrix.m_BrdBox.GetX(); LastPosOK.x = RoutingMatrix.m_BrdBox.GetX();
LastPosOK.y = RoutingMatrix.m_BrdBox.GetY(); LastPosOK.y = RoutingMatrix.m_BrdBox.GetY();
@ -1106,7 +1107,7 @@ static MODULE* PickModule( PCB_EDIT_FRAME* pcbframe, wxDC* DC )
continue; continue;
pcbframe->GetBoard()->m_Status_Pcb &= ~RATSNEST_ITEM_LOCAL_OK; pcbframe->GetBoard()->m_Status_Pcb &= ~RATSNEST_ITEM_LOCAL_OK;
Module->DisplayInfo( pcbframe ); pcbframe->SetMsgPanel( Module );
pcbframe->build_ratsnest_module( Module ); pcbframe->build_ratsnest_module( Module );
/* Calculate external ratsnest. */ /* Calculate external ratsnest. */

View File

@ -34,6 +34,7 @@
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <wxPcbStruct.h> #include <wxPcbStruct.h>
#include <gr_basic.h> #include <gr_basic.h>
#include <msgpanel.h>
#include <pcbnew.h> #include <pcbnew.h>
#include <cell.h> #include <cell.h>

View File

@ -37,6 +37,7 @@
#include <kicad_device_context.h> #include <kicad_device_context.h>
#include <wxBasePcbFrame.h> #include <wxBasePcbFrame.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
#include <pcbnew.h> #include <pcbnew.h>
#include <pcbnew_id.h> #include <pcbnew_id.h>
@ -460,7 +461,11 @@ void PCB_BASE_FRAME::SetCurItem( BOARD_ITEM* aItem, bool aDisplayInfo )
if( aItem ) if( aItem )
{ {
if( aDisplayInfo ) if( aDisplayInfo )
aItem->DisplayInfo( this ); {
MSG_PANEL_ITEMS items;
aItem->GetMsgPanelInfo( items );
SetMsgPanel( items );
}
#if 0 && defined(DEBUG) #if 0 && defined(DEBUG)
aItem->Show( 0, std::cout ); aItem->Show( 0, std::cout );
@ -471,8 +476,9 @@ void PCB_BASE_FRAME::SetCurItem( BOARD_ITEM* aItem, bool aDisplayInfo )
{ {
// we can use either of these two: // we can use either of these two:
//MsgPanel->EraseMsgBox(); MSG_PANEL_ITEMS items;
m_Pcb->DisplayInfo( this ); // show the BOARD stuff m_Pcb->GetMsgPanelInfo( items ); // show the BOARD stuff
SetMsgPanel( items );
#if 0 && defined(DEBUG) #if 0 && defined(DEBUG)
std::cout << "SetCurItem(NULL)\n"; std::cout << "SetCurItem(NULL)\n";

View File

@ -38,6 +38,7 @@
#include <kicad_string.h> #include <kicad_string.h>
#include <pcbcommon.h> #include <pcbcommon.h>
#include <wxBasePcbFrame.h> #include <wxBasePcbFrame.h>
#include <msgpanel.h>
#include <pcbnew.h> #include <pcbnew.h>
#include <colors_selection.h> #include <colors_selection.h>
@ -1007,12 +1008,9 @@ EDA_RECT BOARD::ComputeBoundingBox( bool aBoardEdgesOnly )
// virtual, see pcbstruct.h // virtual, see pcbstruct.h
void BOARD::DisplayInfo( EDA_DRAW_FRAME* frame ) void BOARD::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
wxString txt; wxString txt;
frame->ClearMsgPanel();
int viasCount = 0; int viasCount = 0;
int trackSegmentsCount = 0; int trackSegmentsCount = 0;
@ -1025,19 +1023,19 @@ void BOARD::DisplayInfo( EDA_DRAW_FRAME* frame )
} }
txt.Printf( wxT( "%d" ), GetPadCount() ); txt.Printf( wxT( "%d" ), GetPadCount() );
frame->AppendMsgPanel( _( "Pads" ), txt, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "Pads" ), txt, DARKGREEN ) );
txt.Printf( wxT( "%d" ), viasCount ); txt.Printf( wxT( "%d" ), viasCount );
frame->AppendMsgPanel( _( "Vias" ), txt, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "Vias" ), txt, DARKGREEN ) );
txt.Printf( wxT( "%d" ), trackSegmentsCount ); txt.Printf( wxT( "%d" ), trackSegmentsCount );
frame->AppendMsgPanel( _( "trackSegm" ), txt, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "trackSegm" ), txt, DARKGREEN ) );
txt.Printf( wxT( "%d" ), GetNodesCount() ); txt.Printf( wxT( "%d" ), GetNodesCount() );
frame->AppendMsgPanel( _( "Nodes" ), txt, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Nodes" ), txt, DARKCYAN ) );
txt.Printf( wxT( "%d" ), m_NetInfo.GetNetCount() ); txt.Printf( wxT( "%d" ), m_NetInfo.GetNetCount() );
frame->AppendMsgPanel( _( "Nets" ), txt, RED ); aList.push_back( MSG_PANEL_ITEM( _( "Nets" ), txt, RED ) );
/* These parameters are known only if the full ratsnest is available, /* These parameters are known only if the full ratsnest is available,
* so, display them only if this is the case * so, display them only if this is the case
@ -1045,13 +1043,13 @@ void BOARD::DisplayInfo( EDA_DRAW_FRAME* frame )
if( (m_Status_Pcb & NET_CODES_OK) ) if( (m_Status_Pcb & NET_CODES_OK) )
{ {
txt.Printf( wxT( "%d" ), GetRatsnestsCount() ); txt.Printf( wxT( "%d" ), GetRatsnestsCount() );
frame->AppendMsgPanel( _( "Links" ), txt, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "Links" ), txt, DARKGREEN ) );
txt.Printf( wxT( "%d" ), GetRatsnestsCount() - GetUnconnectedNetCount() ); txt.Printf( wxT( "%d" ), GetRatsnestsCount() - GetUnconnectedNetCount() );
frame->AppendMsgPanel( _( "Connect" ), txt, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "Connect" ), txt, DARKGREEN ) );
txt.Printf( wxT( "%d" ), GetUnconnectedNetCount() ); txt.Printf( wxT( "%d" ), GetUnconnectedNetCount() );
frame->AppendMsgPanel( _( "Unconnected" ), txt, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Unconnected" ), txt, BLUE ) );
} }
} }

View File

@ -29,6 +29,7 @@ class SEGZONE;
class TRACK; class TRACK;
class D_PAD; class D_PAD;
class MARKER_PCB; class MARKER_PCB;
class MSG_PANEL_ITEM;
// non-owning container of item candidates when searching for items on the same track. // non-owning container of item candidates when searching for items on the same track.
@ -807,14 +808,7 @@ public:
void SetBoundingBox( const EDA_RECT& aBox ) { m_BoundingBox = aBox; } void SetBoundingBox( const EDA_RECT& aBox ) { m_BoundingBox = aBox; }
/** void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
* Function DisplayInfo
* has knowledge about the frame and how and where to put status information
* about this object into the frame's message panel.
* Is virtual from EDA_ITEM.
* @param frame A EDA_DRAW_FRAME in which to print status information.
*/
void DisplayInfo( EDA_DRAW_FRAME* frame );
/** /**
* Function Draw. * Function Draw.

View File

@ -389,10 +389,10 @@ void DIMENSION::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE mode_color,
// see class_cotation.h // see class_cotation.h
void DIMENSION::DisplayInfo( EDA_DRAW_FRAME* frame ) void DIMENSION::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
// for now, display only the text within the DIMENSION using class TEXTE_PCB. // for now, display only the text within the DIMENSION using class TEXTE_PCB.
m_Text.DisplayInfo( frame ); m_Text.GetMsgPanelInfo( aList );
} }

View File

@ -38,6 +38,7 @@
class LINE_READER; class LINE_READER;
class EDA_DRAW_PANEL; class EDA_DRAW_PANEL;
class TEXTE_PCB; class TEXTE_PCB;
class MSG_PANEL_ITEM;
class DIMENSION : public BOARD_ITEM class DIMENSION : public BOARD_ITEM
@ -116,7 +117,7 @@ public:
*/ */
void Mirror( const wxPoint& axis_pos ); void Mirror( const wxPoint& axis_pos );
void DisplayInfo( EDA_DRAW_FRAME* frame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
bool HitTest( const wxPoint& aPosition ); bool HitTest( const wxPoint& aPosition );

View File

@ -41,6 +41,7 @@
#include <trigo.h> #include <trigo.h>
#include <richio.h> #include <richio.h>
#include <pcbcommon.h> #include <pcbcommon.h>
#include <msgpanel.h>
#include <pcbnew.h> #include <pcbnew.h>
#include <protos.h> #include <protos.h>
@ -313,7 +314,7 @@ void DRAWSEGMENT::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
// see pcbstruct.h // see pcbstruct.h
void DRAWSEGMENT::DisplayInfo( EDA_DRAW_FRAME* frame ) void DRAWSEGMENT::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
wxString msg; wxString msg;
wxString coords; wxString coords;
@ -321,31 +322,30 @@ void DRAWSEGMENT::DisplayInfo( EDA_DRAW_FRAME* frame )
BOARD* board = (BOARD*) m_Parent; BOARD* board = (BOARD*) m_Parent;
wxASSERT( board ); wxASSERT( board );
frame->ClearMsgPanel();
msg = wxT( "DRAWING" ); msg = wxT( "DRAWING" );
frame->AppendMsgPanel( _( "Type" ), msg, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Type" ), msg, DARKCYAN ) );
wxString shape = _( "Shape" ); wxString shape = _( "Shape" );
switch( m_Shape ) { switch( m_Shape )
{
case S_CIRCLE: case S_CIRCLE:
frame->AppendMsgPanel( shape, _( "Circle" ), RED ); aList.push_back( MSG_PANEL_ITEM( shape, _( "Circle" ), RED ) );
break; break;
case S_ARC: case S_ARC:
frame->AppendMsgPanel( shape, _( "Arc" ), RED ); aList.push_back( MSG_PANEL_ITEM( shape, _( "Arc" ), RED ) );
msg.Printf( wxT( "%.1f" ), (double)m_Angle/10 ); msg.Printf( wxT( "%.1f" ), (double)m_Angle/10 );
frame->AppendMsgPanel( _("Angle"), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _("Angle"), msg, RED ) );
break; break;
case S_CURVE: case S_CURVE:
frame->AppendMsgPanel( shape, _( "Curve" ), RED ); aList.push_back( MSG_PANEL_ITEM( shape, _( "Curve" ), RED ) );
break; break;
default: default:
frame->AppendMsgPanel( shape, _( "Segment" ), RED ); aList.push_back( MSG_PANEL_ITEM( shape, _( "Segment" ), RED ) );
} }
wxString start; wxString start;
@ -354,12 +354,10 @@ void DRAWSEGMENT::DisplayInfo( EDA_DRAW_FRAME* frame )
wxString end; wxString end;
end << GetEnd(); end << GetEnd();
frame->AppendMsgPanel( start, end, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( start, end, DARKGREEN ) );
aList.push_back( MSG_PANEL_ITEM( _( "Layer" ), board->GetLayerName( m_Layer ), DARKBROWN ) );
frame->AppendMsgPanel( _( "Layer" ), board->GetLayerName( m_Layer ), DARKBROWN ); msg = ::CoordinateToString( m_Width );
aList.push_back( MSG_PANEL_ITEM( _( "Width" ), msg, DARKCYAN ) );
msg = frame->CoordinateToString( m_Width );
frame->AppendMsgPanel( _( "Width" ), msg, DARKCYAN );
} }

View File

@ -38,6 +38,7 @@
class LINE_READER; class LINE_READER;
class EDA_DRAW_FRAME; class EDA_DRAW_FRAME;
class MODULE; class MODULE;
class MSG_PANEL_ITEM;
class DRAWSEGMENT : public BOARD_ITEM class DRAWSEGMENT : public BOARD_ITEM
@ -163,7 +164,7 @@ public:
void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset ); GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset );
virtual void DisplayInfo( EDA_DRAW_FRAME* frame ); virtual void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
virtual EDA_RECT GetBoundingBox() const; virtual EDA_RECT GetBoundingBox() const;

View File

@ -42,6 +42,8 @@
#include <macros.h> #include <macros.h>
#include <wxBasePcbFrame.h> #include <wxBasePcbFrame.h>
#include <pcbcommon.h> #include <pcbcommon.h>
#include <msgpanel.h>
#include <base_units.h>
#include <class_board.h> #include <class_board.h>
#include <class_module.h> #include <class_module.h>
@ -229,7 +231,7 @@ void EDGE_MODULE::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
// see class_edge_mod.h // see class_edge_mod.h
void EDGE_MODULE::DisplayInfo( EDA_DRAW_FRAME* frame ) void EDGE_MODULE::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
wxString msg; wxString msg;
@ -243,19 +245,16 @@ void EDGE_MODULE::DisplayInfo( EDA_DRAW_FRAME* frame )
if( !board ) if( !board )
return; return;
frame->ClearMsgPanel(); aList.push_back( MSG_PANEL_ITEM( _( "Graphic Item" ), wxEmptyString, DARKCYAN ) );
aList.push_back( MSG_PANEL_ITEM( _( "Module" ), module->m_Reference->m_Text, DARKCYAN ) );
frame->AppendMsgPanel( _( "Graphic Item" ), wxEmptyString, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Value" ), module->m_Value->m_Text, BLUE ) );
frame->AppendMsgPanel( _( "Module" ), module->m_Reference->m_Text, DARKCYAN );
frame->AppendMsgPanel( _( "Value" ), module->m_Value->m_Text, BLUE );
msg.Printf( wxT( "%8.8lX" ), module->GetTimeStamp() ); msg.Printf( wxT( "%8.8lX" ), module->GetTimeStamp() );
frame->AppendMsgPanel( _( "TimeStamp" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "TimeStamp" ), msg, BROWN ) );
frame->AppendMsgPanel( _( "Mod Layer" ), board->GetLayerName( module->GetLayer() ), RED ); aList.push_back( MSG_PANEL_ITEM( _( "Mod Layer" ), board->GetLayerName( module->GetLayer() ),
frame->AppendMsgPanel( _( "Seg Layer" ), board->GetLayerName( GetLayer() ), RED ); RED ) );
aList.push_back( MSG_PANEL_ITEM( _( "Seg Layer" ), board->GetLayerName( GetLayer() ), RED ) );
msg = frame->CoordinateToString( m_Width ); msg = ::CoordinateToString( m_Width );
frame->AppendMsgPanel( _( "Width" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Width" ), msg, BLUE ) );
} }

View File

@ -37,7 +37,7 @@
class LINE_READER; class LINE_READER;
class EDA_3D_CANVAS; class EDA_3D_CANVAS;
class EDA_DRAW_FRAME; class MSG_PANEL_ITEM;
class EDGE_MODULE : public DRAWSEGMENT class EDGE_MODULE : public DRAWSEGMENT
@ -69,7 +69,7 @@ public:
void Draw3D( EDA_3D_CANVAS* glcanvas ); void Draw3D( EDA_3D_CANVAS* glcanvas );
void DisplayInfo( EDA_DRAW_FRAME* frame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
wxString GetClass() const wxString GetClass() const
{ {

View File

@ -33,6 +33,7 @@
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <wxstruct.h> #include <wxstruct.h>
#include <trigo.h> #include <trigo.h>
#include <msgpanel.h>
#include <pcbnew.h> #include <pcbnew.h>
#include <class_marker_pcb.h> #include <class_marker_pcb.h>
@ -90,20 +91,18 @@ bool MARKER_PCB::IsOnLayer( int aLayer ) const
return IsValidCopperLayerIndex( aLayer ); return IsValidCopperLayerIndex( aLayer );
} }
void MARKER_PCB::DisplayInfo( EDA_DRAW_FRAME* frame ) void MARKER_PCB::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
frame->ClearMsgPanel();
const DRC_ITEM& rpt = m_drc; const DRC_ITEM& rpt = m_drc;
frame->AppendMsgPanel( _( "Type" ), _( "Marker" ), DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Type" ), _( "Marker" ), DARKCYAN ) );
wxString errorTxt; wxString errorTxt;
errorTxt << _( "ErrType" ) << wxT( "(" ) << rpt.GetErrorCode() << wxT( ")- " ) errorTxt << _( "ErrType" ) << wxT( "(" ) << rpt.GetErrorCode() << wxT( ")- " )
<< rpt.GetErrorText() << wxT( ":" ); << rpt.GetErrorText() << wxT( ":" );
frame->AppendMsgPanel( errorTxt, wxEmptyString, RED ); aList.push_back( MSG_PANEL_ITEM( errorTxt, wxEmptyString, RED ) );
wxString txtA; wxString txtA;
txtA << DRC_ITEM::ShowCoord( rpt.GetPointA() ) << wxT( ": " ) << rpt.GetTextA(); txtA << DRC_ITEM::ShowCoord( rpt.GetPointA() ) << wxT( ": " ) << rpt.GetTextA();
@ -113,7 +112,7 @@ void MARKER_PCB::DisplayInfo( EDA_DRAW_FRAME* frame )
if ( rpt.HasSecondItem() ) if ( rpt.HasSecondItem() )
txtB << DRC_ITEM::ShowCoord( rpt.GetPointB() ) << wxT( ": " ) << rpt.GetTextB(); txtB << DRC_ITEM::ShowCoord( rpt.GetPointB() ) << wxT( ": " ) << rpt.GetTextB();
frame->AppendMsgPanel( txtA, txtB, DARKBROWN ); aList.push_back( MSG_PANEL_ITEM( txtA, txtB, DARKBROWN ) );
} }

View File

@ -11,6 +11,9 @@
#include <class_marker_base.h> #include <class_marker_base.h>
class MSG_PANEL_ITEM;
class MARKER_PCB : public BOARD_ITEM, public MARKER_BASE class MARKER_PCB : public BOARD_ITEM, public MARKER_BASE
{ {
@ -68,7 +71,7 @@ public:
bool IsOnLayer( int aLayer ) const; bool IsOnLayer( int aLayer ) const;
void DisplayInfo( EDA_DRAW_FRAME* frame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
wxString GetSelectMenuText() const; wxString GetSelectMenuText() const;

View File

@ -44,6 +44,7 @@
#include <filter_reader.h> #include <filter_reader.h>
#include <macros.h> #include <macros.h>
#include <3d_struct.h> #include <3d_struct.h>
#include <msgpanel.h>
#include <drag.h> #include <drag.h>
#include <class_board.h> #include <class_board.h>
@ -436,23 +437,16 @@ EDA_RECT MODULE::GetBoundingBox() const
/* Virtual function, from EDA_ITEM. /* Virtual function, from EDA_ITEM.
* display module info on MsgPanel * display module info on MsgPanel
*/ */
void MODULE::DisplayInfo( EDA_DRAW_FRAME* frame ) void MODULE::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
int nbpad; int nbpad;
char bufcar[512], Line[512]; char bufcar[512], Line[512];
bool flag = false;
wxString msg; wxString msg;
BOARD* board = GetBoard(); BOARD* board = GetBoard();
frame->EraseMsgBox(); aList.push_back( MSG_PANEL_ITEM( m_Reference->m_Text, m_Value->m_Text, DARKCYAN ) );
if( frame->IsType( PCB_FRAME_TYPE ) ) // Display last date the component was edited (useful in Module Editor).
flag = true;
frame->AppendMsgPanel( m_Reference->m_Text, m_Value->m_Text, DARKCYAN );
if( flag ) // Display last date the component was edited( useful in Module Editor)
{
time_t edit_time = m_LastEdit_Time; time_t edit_time = m_LastEdit_Time;
strcpy( Line, ctime( &edit_time ) ); strcpy( Line, ctime( &edit_time ) );
strtok( Line, " \n\r" ); strtok( Line, " \n\r" );
@ -461,15 +455,12 @@ void MODULE::DisplayInfo( EDA_DRAW_FRAME* frame )
strtok( NULL, " \n\r" ); strtok( NULL, " \n\r" );
strcat( bufcar, strtok( NULL, " \n\r" ) ); strcat( bufcar, strtok( NULL, " \n\r" ) );
msg = FROM_UTF8( bufcar ); msg = FROM_UTF8( bufcar );
frame->AppendMsgPanel( _( "Last Change" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Last Change" ), msg, BROWN ) );
}
else // display time stamp in schematic
{
msg.Printf( wxT( "%8.8lX" ), m_TimeStamp );
frame->AppendMsgPanel( _( "Netlist path" ), m_Path, BROWN );
}
frame->AppendMsgPanel( _( "Layer" ), board->GetLayerName( m_Layer ), RED ); // display time stamp in schematic
msg.Printf( wxT( "%8.8lX" ), m_TimeStamp );
aList.push_back( MSG_PANEL_ITEM( _( "Netlist path" ), m_Path, BROWN ) );
aList.push_back( MSG_PANEL_ITEM( _( "Layer" ), board->GetLayerName( m_Layer ), RED ) );
EDA_ITEM* PtStruct = m_Pads; EDA_ITEM* PtStruct = m_Pads;
nbpad = 0; nbpad = 0;
@ -481,7 +472,7 @@ void MODULE::DisplayInfo( EDA_DRAW_FRAME* frame )
} }
msg.Printf( wxT( "%d" ), nbpad ); msg.Printf( wxT( "%d" ), nbpad );
frame->AppendMsgPanel( _( "Pads" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Pads" ), msg, BLUE ) );
msg = wxT( ".." ); msg = wxT( ".." );
@ -491,10 +482,10 @@ void MODULE::DisplayInfo( EDA_DRAW_FRAME* frame )
if( m_ModuleStatus & MODULE_is_PLACED ) if( m_ModuleStatus & MODULE_is_PLACED )
msg[1] = 'P'; msg[1] = 'P';
frame->AppendMsgPanel( _( "Stat" ), msg, MAGENTA ); aList.push_back( MSG_PANEL_ITEM( _( "Stat" ), msg, MAGENTA ) );
msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 ); msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 );
frame->AppendMsgPanel( _( "Orient" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Orient" ), msg, BROWN ) );
/* Controls on right side of the dialog */ /* Controls on right side of the dialog */
switch( m_Attributs & 255 ) switch( m_Attributs & 255 )
@ -515,20 +506,20 @@ void MODULE::DisplayInfo( EDA_DRAW_FRAME* frame )
msg = wxT("???"); msg = wxT("???");
break; break;
} }
frame->AppendMsgPanel( _( "Attrib" ), msg, BROWN );
frame->AppendMsgPanel( _( "Module" ), m_LibRef, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Attrib" ), msg, BROWN ) );
aList.push_back( MSG_PANEL_ITEM( _( "Module" ), m_LibRef, BLUE ) );
if( m_3D_Drawings != NULL ) if( m_3D_Drawings != NULL )
msg = m_3D_Drawings->m_Shape3DName; msg = m_3D_Drawings->m_Shape3DName;
else else
msg = _( "No 3D shape" ); msg = _( "No 3D shape" );
frame->AppendMsgPanel( _( "3D-Shape" ), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _( "3D-Shape" ), msg, RED ) );
wxString doc = _( "Doc: " ) + m_Doc; wxString doc = _( "Doc: " ) + m_Doc;
wxString keyword = _( "KeyW: " ) + m_KeyWord; wxString keyword = _( "KeyW: " ) + m_KeyWord;
frame->AppendMsgPanel( doc, keyword, BLACK ); aList.push_back( MSG_PANEL_ITEM( doc, keyword, BLACK ) );
} }

View File

@ -45,6 +45,7 @@ class S3D_MASTER;
class EDA_DRAW_PANEL; class EDA_DRAW_PANEL;
class D_PAD; class D_PAD;
class BOARD; class BOARD;
class MSG_PANEL_ITEM;
/** /**
@ -248,7 +249,7 @@ public:
void DrawAncre( EDA_DRAW_PANEL* panel, wxDC* DC, void DrawAncre( EDA_DRAW_PANEL* panel, wxDC* DC,
const wxPoint& offset, int dim_ancre, GR_DRAWMODE draw_mode ); const wxPoint& offset, int dim_ancre, GR_DRAWMODE draw_mode );
void DisplayInfo( EDA_DRAW_FRAME* frame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
bool HitTest( const wxPoint& aPosition ); bool HitTest( const wxPoint& aPosition );

View File

@ -24,7 +24,7 @@ class NETINFO_ITEM;
class D_PAD; class D_PAD;
class BOARD; class BOARD;
class BOARD_ITEM; class BOARD_ITEM;
class MSG_PANEL_ITEM;
/*****************************/ /*****************************/
@ -215,6 +215,7 @@ private:
NETCLASS* m_NetClass; NETCLASS* m_NetClass;
BOARD_ITEM* m_parent; ///< The parent board item object the net belongs to.
public: public:
int m_NbNodes; // Pads count for this net int m_NbNodes; // Pads count for this net
@ -379,14 +380,7 @@ public:
*/ */
void SetNetname( const wxString& aNetname ); void SetNetname( const wxString& aNetname );
/** void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
* Function DisplayInfo
* has knowledge about the frame and how and where to put status information
* about this object into the frame's message panel.
* Is virtual from EDA_ITEM.
* @param frame A EDA_DRAW_FRAME in which to print status information.
*/
void DisplayInfo( EDA_DRAW_FRAME* frame );
}; };

View File

@ -37,6 +37,8 @@
#include <colors_selection.h> #include <colors_selection.h>
#include <richio.h> #include <richio.h>
#include <macros.h> #include <macros.h>
#include <msgpanel.h>
#include <base_units.h>
#include <class_board.h> #include <class_board.h>
#include <class_module.h> #include <class_module.h>
@ -54,6 +56,7 @@ NETINFO_ITEM::NETINFO_ITEM( BOARD_ITEM* aParent, const wxString& aNetName, int a
if( aNetName.size() ) if( aNetName.size() )
SetNetname( aNetName ); SetNetname( aNetName );
m_parent = aParent;
m_NbNodes = 0; m_NbNodes = 0;
m_NbLink = 0; m_NbLink = 0;
m_NbNoconn = 0; m_NbNoconn = 0;
@ -103,7 +106,7 @@ void NETINFO_ITEM::Draw( EDA_DRAW_PANEL* panel,
* Is virtual from EDA_ITEM. * Is virtual from EDA_ITEM.
* @param frame A EDA_DRAW_FRAME in which to print status information. * @param frame A EDA_DRAW_FRAME in which to print status information.
*/ */
void NETINFO_ITEM::DisplayInfo( EDA_DRAW_FRAME* frame ) void NETINFO_ITEM::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
int count; int count;
EDA_ITEM* Struct; EDA_ITEM* Struct;
@ -113,15 +116,14 @@ void NETINFO_ITEM::DisplayInfo( EDA_DRAW_FRAME* frame )
double lengthnet = 0; // This is the lenght of tracks on pcb double lengthnet = 0; // This is the lenght of tracks on pcb
double lengthPadToDie = 0; // this is the lenght of internal ICs connections double lengthPadToDie = 0; // this is the lenght of internal ICs connections
frame->ClearMsgPanel(); aList.push_back( MSG_PANEL_ITEM( _( "Net Name" ), GetNetname(), RED ) );
frame->AppendMsgPanel( _( "Net Name" ), GetNetname(), RED );
txt.Printf( wxT( "%d" ), GetNet() ); txt.Printf( wxT( "%d" ), GetNet() );
frame->AppendMsgPanel( _( "Net Code" ), txt, RED ); aList.push_back( MSG_PANEL_ITEM( _( "Net Code" ), txt, RED ) );
count = 0; count = 0;
module = ( (PCB_BASE_FRAME*) frame )->GetBoard()->m_Modules; module = m_parent->GetBoard()->m_Modules;
for( ; module != 0; module = module->Next() ) for( ; module != 0; module = module->Next() )
{ {
for( pad = module->m_Pads; pad != 0; pad = pad->Next() ) for( pad = module->m_Pads; pad != 0; pad = pad->Next() )
@ -135,10 +137,10 @@ void NETINFO_ITEM::DisplayInfo( EDA_DRAW_FRAME* frame )
} }
txt.Printf( wxT( "%d" ), count ); txt.Printf( wxT( "%d" ), count );
frame->AppendMsgPanel( _( "Pads" ), txt, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "Pads" ), txt, DARKGREEN ) );
count = 0; count = 0;
Struct = ( (PCB_BASE_FRAME*) frame )->GetBoard()->m_Track; Struct = m_parent->GetBoard()->m_Track;
for( ; Struct != NULL; Struct = Struct->Next() ) for( ; Struct != NULL; Struct = Struct->Next() )
{ {
@ -156,19 +158,19 @@ void NETINFO_ITEM::DisplayInfo( EDA_DRAW_FRAME* frame )
} }
txt.Printf( wxT( "%d" ), count ); txt.Printf( wxT( "%d" ), count );
frame->AppendMsgPanel( _( "Vias" ), txt, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Vias" ), txt, BLUE ) );
// Displays the full net lenght (tracks on pcb + internal ICs connections ): // Displays the full net length (tracks on pcb + internal ICs connections ):
txt = frame->CoordinateToString( lengthnet + lengthPadToDie ); txt = ::CoordinateToString( lengthnet + lengthPadToDie );
frame->AppendMsgPanel( _( "Net Length:" ), txt, RED ); aList.push_back( MSG_PANEL_ITEM( _( "Net Length:" ), txt, RED ) );
// Displays the net lenght of tracks only: // Displays the net length of tracks only:
txt = frame->CoordinateToString( lengthnet ); txt = ::CoordinateToString( lengthnet );
frame->AppendMsgPanel( _( "On Board" ), txt, RED ); aList.push_back( MSG_PANEL_ITEM( _( "On Board" ), txt, RED ) );
// Displays the net lenght of internal ICs connections (wires inside ICs): // Displays the net length of internal ICs connections (wires inside ICs):
txt = frame->CoordinateToString( lengthPadToDie ); txt = ::CoordinateToString( lengthPadToDie );
frame->AppendMsgPanel( _( "In Package" ), txt, RED ); aList.push_back( MSG_PANEL_ITEM( _( "In Package" ), txt, RED ) );
} }

View File

@ -38,6 +38,8 @@
#include <richio.h> #include <richio.h>
#include <wxstruct.h> #include <wxstruct.h>
#include <macros.h> #include <macros.h>
#include <msgpanel.h>
#include <base_units.h>
#include <pcbnew.h> #include <pcbnew.h>
#include <pcbnew_id.h> // ID_TRACK_BUTT #include <pcbnew_id.h> // ID_TRACK_BUTT
@ -492,31 +494,29 @@ int D_PAD::GetThermalGap() const
} }
void D_PAD::DisplayInfo( EDA_DRAW_FRAME* frame ) void D_PAD::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM>& aList )
{ {
MODULE* module; MODULE* module;
wxString Line; wxString Line;
BOARD* board; BOARD* board;
frame->EraseMsgBox();
module = (MODULE*) m_Parent; module = (MODULE*) m_Parent;
if( module ) if( module )
{ {
wxString msg = module->GetReference(); wxString msg = module->GetReference();
frame->AppendMsgPanel( _( "Module" ), msg, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Module" ), msg, DARKCYAN ) );
ReturnStringPadName( Line ); ReturnStringPadName( Line );
frame->AppendMsgPanel( _( "RefP" ), Line, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "RefP" ), Line, BROWN ) );
} }
frame->AppendMsgPanel( _( "Net" ), m_Netname, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Net" ), m_Netname, DARKCYAN ) );
/* For test and debug only: display m_physical_connexion and /* For test and debug only: display m_physical_connexion and
* m_logical_connexion */ * m_logical_connexion */
#if 1 // Used only to debug connectivity calculations #if 1 // Used only to debug connectivity calculations
Line.Printf( wxT( "%d-%d-%d " ), GetSubRatsnest(), GetSubNet(), GetZoneSubNet() ); Line.Printf( wxT( "%d-%d-%d " ), GetSubRatsnest(), GetSubNet(), GetZoneSubNet() );
frame->AppendMsgPanel( wxT( "L-P-Z" ), Line, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( wxT( "L-P-Z" ), Line, DARKGREEN ) );
#endif #endif
board = GetBoard(); board = GetBoard();
@ -620,29 +620,29 @@ void D_PAD::DisplayInfo( EDA_DRAW_FRAME* frame )
} }
} }
frame->AppendMsgPanel( _( "Layer" ), layerInfo, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "Layer" ), layerInfo, DARKGREEN ) );
frame->AppendMsgPanel( ShowPadShape(), ShowPadAttr(), DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( ShowPadShape(), ShowPadAttr(), DARKGREEN ) );
Line = frame->CoordinateToString( m_Size.x ); Line = ::CoordinateToString( m_Size.x );
frame->AppendMsgPanel( _( "H Size" ), Line, RED ); aList.push_back( MSG_PANEL_ITEM( _( "H Size" ), Line, RED ) );
Line = frame->CoordinateToString( m_Size.y ); Line = ::CoordinateToString( m_Size.y );
frame->AppendMsgPanel( _( "V Size" ), Line, RED ); aList.push_back( MSG_PANEL_ITEM( _( "V Size" ), Line, RED ) );
Line = frame->CoordinateToString( (unsigned) m_Drill.x ); Line = ::CoordinateToString( (unsigned) m_Drill.x );
if( m_DrillShape == PAD_CIRCLE ) if( m_DrillShape == PAD_CIRCLE )
{ {
frame->AppendMsgPanel( _( "Drill" ), Line, RED ); aList.push_back( MSG_PANEL_ITEM( _( "Drill" ), Line, RED ) );
} }
else else
{ {
Line = frame->CoordinateToString( (unsigned) m_Drill.x ); Line = ::CoordinateToString( (unsigned) m_Drill.x );
wxString msg; wxString msg;
msg = frame->CoordinateToString( (unsigned) m_Drill.y ); msg = ::CoordinateToString( (unsigned) m_Drill.y );
Line += wxT( "/" ) + msg; Line += wxT( "/" ) + msg;
frame->AppendMsgPanel( _( "Drill X / Y" ), Line, RED ); aList.push_back( MSG_PANEL_ITEM( _( "Drill X / Y" ), Line, RED ) );
} }
int module_orient = module ? module->GetOrientation() : 0; int module_orient = module ? module->GetOrientation() : 0;
@ -654,18 +654,18 @@ void D_PAD::DisplayInfo( EDA_DRAW_FRAME* frame )
else else
Line.Printf( wxT( "%3.1f" ), (double) m_Orient / 10 ); Line.Printf( wxT( "%3.1f" ), (double) m_Orient / 10 );
frame->AppendMsgPanel( _( "Orient" ), Line, LIGHTBLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Orient" ), Line, LIGHTBLUE ) );
Line = frame->CoordinateToString( m_Pos.x ); Line = ::CoordinateToString( m_Pos.x );
frame->AppendMsgPanel( _( "X Pos" ), Line, LIGHTBLUE ); aList.push_back( MSG_PANEL_ITEM( _( "X Pos" ), Line, LIGHTBLUE ) );
Line = frame->CoordinateToString( m_Pos.y ); Line = ::CoordinateToString( m_Pos.y );
frame->AppendMsgPanel( _( "Y pos" ), Line, LIGHTBLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Y pos" ), Line, LIGHTBLUE ) );
if( GetPadToDieLength() ) if( GetPadToDieLength() )
{ {
Line = frame->CoordinateToString( GetPadToDieLength() ); Line = ::CoordinateToString( GetPadToDieLength() );
frame->AppendMsgPanel( _( "Length in package" ), Line, CYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Length in package" ), Line, CYAN ) );
} }
} }

View File

@ -38,11 +38,13 @@
#include <param_config.h> // PARAM_CFG_ARRAY #include <param_config.h> // PARAM_CFG_ARRAY
#include "zones.h" #include "zones.h"
class LINE_READER; class LINE_READER;
class EDA_3D_CANVAS; class EDA_3D_CANVAS;
class EDA_DRAW_PANEL; class EDA_DRAW_PANEL;
class MODULE; class MODULE;
class TRACK; class TRACK;
class MSG_PANEL_INFO;
/* Default layers used for pads, according to the pad type. /* Default layers used for pads, according to the pad type.
@ -341,7 +343,7 @@ public:
void SetSubRatsnest( int aSubRatsnest ) { m_SubRatsnest = aSubRatsnest; } void SetSubRatsnest( int aSubRatsnest ) { m_SubRatsnest = aSubRatsnest; }
void DisplayInfo( EDA_DRAW_FRAME* frame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
bool IsOnLayer( int aLayer ) const; bool IsOnLayer( int aLayer ) const;

View File

@ -40,6 +40,8 @@
#include <richio.h> #include <richio.h>
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <macros.h> #include <macros.h>
#include <msgpanel.h>
#include <base_units.h>
#include <class_board.h> #include <class_board.h>
#include <class_pcb_text.h> #include <class_pcb_text.h>
@ -106,10 +108,9 @@ void TEXTE_PCB::Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
} }
void TEXTE_PCB::DisplayInfo( EDA_DRAW_FRAME* frame ) void TEXTE_PCB::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
wxString msg; wxString msg;
BOARD* board; BOARD* board;
BOARD_ITEM* parent = (BOARD_ITEM*) m_Parent; BOARD_ITEM* parent = (BOARD_ITEM*) m_Parent;
@ -119,34 +120,33 @@ void TEXTE_PCB::DisplayInfo( EDA_DRAW_FRAME* frame )
board = (BOARD*) parent->GetParent(); board = (BOARD*) parent->GetParent();
else else
board = (BOARD*) parent; board = (BOARD*) parent;
wxASSERT( board ); wxASSERT( board );
frame->ClearMsgPanel();
if( m_Parent && m_Parent->Type() == PCB_DIMENSION_T ) if( m_Parent && m_Parent->Type() == PCB_DIMENSION_T )
frame->AppendMsgPanel( _( "DIMENSION" ), m_Text, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "DIMENSION" ), m_Text, DARKGREEN ) );
else else
frame->AppendMsgPanel( _( "PCB Text" ), m_Text, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "PCB Text" ), m_Text, DARKGREEN ) );
frame->AppendMsgPanel( _( "Layer" ), aList.push_back( MSG_PANEL_ITEM( _( "Layer" ),
board->GetLayerName( m_Layer ), BLUE ); board->GetLayerName( m_Layer ), BLUE ) );
if( !m_Mirror ) if( !m_Mirror )
frame->AppendMsgPanel( _( "Mirror" ), _( "No" ), DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "Mirror" ), _( "No" ), DARKGREEN ) );
else else
frame->AppendMsgPanel( _( "Mirror" ), _( "Yes" ), DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "Mirror" ), _( "Yes" ), DARKGREEN ) );
msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 ); msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 );
frame->AppendMsgPanel( _( "Orientation" ), msg, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "Orientation" ), msg, DARKGREEN ) );
msg = frame->CoordinateToString( m_Thickness ); msg = ::CoordinateToString( m_Thickness );
frame->AppendMsgPanel( _( "Thickness" ), msg, MAGENTA ); aList.push_back( MSG_PANEL_ITEM( _( "Thickness" ), msg, MAGENTA ) );
msg = frame->CoordinateToString( m_Size.x ); msg = ::CoordinateToString( m_Size.x );
frame->AppendMsgPanel( _( "Size X" ), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _( "Size X" ), msg, RED ) );
msg = frame->CoordinateToString( m_Size.y ); msg = ::CoordinateToString( m_Size.y );
frame->AppendMsgPanel( _( "Size Y" ), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _( "Size Y" ), msg, RED ) );
} }

View File

@ -37,6 +37,7 @@
class LINE_READER; class LINE_READER;
class EDA_DRAW_PANEL; class EDA_DRAW_PANEL;
class MSG_PANEL_ITEM;
class TEXTE_PCB : public BOARD_ITEM, public EDA_TEXT class TEXTE_PCB : public BOARD_ITEM, public EDA_TEXT
@ -73,7 +74,7 @@ public:
void Draw( EDA_DRAW_PANEL* panel, wxDC* DC, void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
GR_DRAWMODE aDrawMode, const wxPoint& offset = ZeroOffset ); GR_DRAWMODE aDrawMode, const wxPoint& offset = ZeroOffset );
void DisplayInfo( EDA_DRAW_FRAME* frame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
bool HitTest( const wxPoint& aPosition ) bool HitTest( const wxPoint& aPosition )
{ {

View File

@ -40,6 +40,8 @@
#include <richio.h> #include <richio.h>
#include <macros.h> #include <macros.h>
#include <wxBasePcbFrame.h> #include <wxBasePcbFrame.h>
#include <msgpanel.h>
#include <base_units.h>
#include <class_board.h> #include <class_board.h>
#include <class_module.h> #include <class_module.h>
@ -355,7 +357,7 @@ int TEXTE_MODULE::GetDrawRotation() const
// see class_text_mod.h // see class_text_mod.h
void TEXTE_MODULE::DisplayInfo( EDA_DRAW_FRAME* frame ) void TEXTE_MODULE::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
MODULE* module = (MODULE*) m_Parent; MODULE* module = (MODULE*) m_Parent;
@ -370,50 +372,55 @@ void TEXTE_MODULE::DisplayInfo( EDA_DRAW_FRAME* frame )
_( "Ref." ), _( "Value" ), _( "Text" ) _( "Ref." ), _( "Value" ), _( "Text" )
}; };
frame->ClearMsgPanel();
Line = module->m_Reference->m_Text; Line = module->m_Reference->m_Text;
frame->AppendMsgPanel( _( "Module" ), Line, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Module" ), Line, DARKCYAN ) );
Line = m_Text; Line = m_Text;
frame->AppendMsgPanel( _( "Text" ), Line, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Text" ), Line, BROWN ) );
ii = m_Type; ii = m_Type;
if( ii > 2 ) if( ii > 2 )
ii = 2; ii = 2;
frame->AppendMsgPanel( _( "Type" ), text_type_msg[ii], DARKGREEN );
aList.push_back( MSG_PANEL_ITEM( _( "Type" ), text_type_msg[ii], DARKGREEN ) );
if( m_NoShow ) if( m_NoShow )
msg = _( "No" ); msg = _( "No" );
else else
msg = _( "Yes" ); msg = _( "Yes" );
frame->AppendMsgPanel( _( "Display" ), msg, DARKGREEN );
aList.push_back( MSG_PANEL_ITEM( _( "Display" ), msg, DARKGREEN ) );
// Display text layer (use layer name if possible) // Display text layer (use layer name if possible)
BOARD* board = NULL; BOARD* board = NULL;
board = (BOARD*) module->GetParent(); board = (BOARD*) module->GetParent();
if( m_Layer < NB_LAYERS && board ) if( m_Layer < NB_LAYERS && board )
msg = board->GetLayerName( m_Layer ); msg = board->GetLayerName( m_Layer );
else else
msg.Printf( wxT( "%d" ), m_Layer ); msg.Printf( wxT( "%d" ), m_Layer );
frame->AppendMsgPanel( _( "Layer" ), msg, DARKGREEN );
aList.push_back( MSG_PANEL_ITEM( _( "Layer" ), msg, DARKGREEN ) );
msg = _( " No" ); msg = _( " No" );
if( m_Mirror ) if( m_Mirror )
msg = _( " Yes" ); msg = _( " Yes" );
frame->AppendMsgPanel( _( "Mirror" ), msg, DARKGREEN );
aList.push_back( MSG_PANEL_ITEM( _( "Mirror" ), msg, DARKGREEN ) );
msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 ); msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 );
frame->AppendMsgPanel( _( "Orient" ), msg, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "Orient" ), msg, DARKGREEN ) );
msg = frame->CoordinateToString( m_Thickness ); msg = ::CoordinateToString( m_Thickness );
frame->AppendMsgPanel( _( "Thickness" ), msg, DARKGREEN ); aList.push_back( MSG_PANEL_ITEM( _( "Thickness" ), msg, DARKGREEN ) );
msg = frame->CoordinateToString( m_Size.x ); msg = ::CoordinateToString( m_Size.x );
frame->AppendMsgPanel( _( "H Size" ), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _( "H Size" ), msg, RED ) );
msg = frame->CoordinateToString( m_Size.y ); msg = ::CoordinateToString( m_Size.y );
frame->AppendMsgPanel( _( "V Size" ), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _( "V Size" ), msg, RED ) );
} }

View File

@ -39,8 +39,8 @@
class LINE_READER; class LINE_READER;
class EDA_RECT; class EDA_RECT;
class EDA_DRAW_PANEL; class EDA_DRAW_PANEL;
class EDA_DRAW_FRAME;
class MODULE; class MODULE;
class MSG_PANEL_ITEM;
#define TEXT_is_REFERENCE 0 #define TEXT_is_REFERENCE 0
@ -136,7 +136,7 @@ public:
GR_DRAWMODE aDrawMode, GR_DRAWMODE aDrawMode,
const wxPoint& aOffset = ZeroOffset ); const wxPoint& aOffset = ZeroOffset );
void DisplayInfo( EDA_DRAW_FRAME* frame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
bool HitTest( const wxPoint& aPosition ); bool HitTest( const wxPoint& aPosition );

View File

@ -44,6 +44,8 @@
#include <class_track.h> #include <class_track.h>
#include <pcbnew.h> #include <pcbnew.h>
#include <base_units.h> #include <base_units.h>
#include <msgpanel.h>
/** /**
* Function ShowClearance * Function ShowClearance
@ -957,30 +959,30 @@ void SEGVIA::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
// see class_track.h // see class_track.h
void TRACK::DisplayInfo( EDA_DRAW_FRAME* frame ) void TRACK::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
wxString msg; wxString msg;
BOARD* board = ( (PCB_BASE_FRAME*) frame )->GetBoard(); BOARD* board = GetBoard();
// Display basic infos // Display basic infos
DisplayInfoBase( frame ); GetMsgPanelInfoBase( aList );
// Display full track length (in Pcbnew) // Display full track length (in Pcbnew)
if( frame->IsType( PCB_FRAME_TYPE ) ) if( board )
{ {
double trackLen = 0; double trackLen = 0;
double lenPadToDie = 0; double lenPadToDie = 0;
board->MarkTrace( this, NULL, &trackLen, &lenPadToDie, false ); board->MarkTrace( this, NULL, &trackLen, &lenPadToDie, false );
msg = frame->CoordinateToString( trackLen ); msg = ::CoordinateToString( trackLen );
frame->AppendMsgPanel( _( "Track Len" ), msg, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Track Len" ), msg, DARKCYAN ) );
if( lenPadToDie != 0 ) if( lenPadToDie != 0 )
{ {
msg = frame->LengthDoubleToString( trackLen + lenPadToDie ); msg = ::LengthDoubleToString( trackLen + lenPadToDie );
frame->AppendMsgPanel( _( "Full Len" ), msg, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Full Len" ), msg, DARKCYAN ) );
msg = frame->LengthDoubleToString( lenPadToDie ); msg = ::LengthDoubleToString( lenPadToDie );
frame->AppendMsgPanel( _( "In Package" ), msg, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "In Package" ), msg, DARKCYAN ) );
} }
} }
@ -988,29 +990,27 @@ void TRACK::DisplayInfo( EDA_DRAW_FRAME* frame )
if( netclass ) if( netclass )
{ {
frame->AppendMsgPanel( _( "NC Name" ), netclass->GetName(), DARKMAGENTA ); aList.push_back( MSG_PANEL_ITEM( _( "NC Name" ), netclass->GetName(), DARKMAGENTA ) );
frame->AppendMsgPanel( _( "NC Clearance" ), aList.push_back( MSG_PANEL_ITEM( _( "NC Clearance" ),
frame->CoordinateToString( netclass->GetClearance(), true ), ::CoordinateToString( netclass->GetClearance(), true ),
DARKMAGENTA ); DARKMAGENTA ) );
frame->AppendMsgPanel( _( "NC Width" ), aList.push_back( MSG_PANEL_ITEM( _( "NC Width" ),
frame->CoordinateToString( netclass->GetTrackWidth(), true ), ::CoordinateToString( netclass->GetTrackWidth(), true ),
DARKMAGENTA ); DARKMAGENTA ) );
frame->AppendMsgPanel( _( "NC Via Size"), aList.push_back( MSG_PANEL_ITEM( _( "NC Via Size" ),
frame->CoordinateToString( netclass->GetViaDiameter(), true ), ::CoordinateToString( netclass->GetViaDiameter(), true ),
DARKMAGENTA ); DARKMAGENTA ) );
frame->AppendMsgPanel( _( "NC Via Drill"), aList.push_back( MSG_PANEL_ITEM( _( "NC Via Drill"),
frame->CoordinateToString( netclass->GetViaDrill(), true ), ::CoordinateToString( netclass->GetViaDrill(), true ),
DARKMAGENTA ); DARKMAGENTA ) );
} }
} }
void TRACK::DisplayInfoBase( EDA_DRAW_FRAME* frame ) void TRACK::GetMsgPanelInfoBase( std::vector< MSG_PANEL_ITEM >& aList )
{ {
wxString msg; wxString msg;
BOARD* board = ( (PCB_BASE_FRAME*) frame )->GetBoard(); BOARD* board = GetBoard();
frame->ClearMsgPanel();
switch( Type() ) switch( Type() )
{ {
@ -1036,6 +1036,7 @@ void TRACK::DisplayInfoBase( EDA_DRAW_FRAME* frame )
msg = _( "Through Via" ); // Usual via (from TOP to BOTTOM layer only ) msg = _( "Through Via" ); // Usual via (from TOP to BOTTOM layer only )
break; break;
} }
break; break;
case PCB_TRACE_T: case PCB_TRACE_T:
@ -1051,10 +1052,10 @@ void TRACK::DisplayInfoBase( EDA_DRAW_FRAME* frame )
break; break;
} }
frame->AppendMsgPanel( _( "Type" ), msg, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Type" ), msg, DARKCYAN ) );
// Display Net Name (in Pcbnew) // Display Net Name (in Pcbnew)
if( frame->IsType( PCB_FRAME_TYPE ) ) if( board )
{ {
NETINFO_ITEM* net = board->FindNet( GetNet() ); NETINFO_ITEM* net = board->FindNet( GetNet() );
@ -1063,36 +1064,36 @@ void TRACK::DisplayInfoBase( EDA_DRAW_FRAME* frame )
else else
msg = wxT( "<noname>" ); msg = wxT( "<noname>" );
frame->AppendMsgPanel( _( "NetName" ), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _( "NetName" ), msg, RED ) );
/* Display net code : (useful in test or debug) */ /* Display net code : (useful in test or debug) */
msg.Printf( wxT( "%d .%d" ), GetNet(), GetSubNet() ); msg.Printf( wxT( "%d .%d" ), GetNet(), GetSubNet() );
frame->AppendMsgPanel( _( "NetCode" ), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _( "NetCode" ), msg, RED ) );
} }
#if defined(DEBUG) #if defined(DEBUG)
// Display the flags // Display the flags
msg.Printf( wxT( "0x%08X" ), m_Flags ); msg.Printf( wxT( "0x%08X" ), m_Flags );
frame->AppendMsgPanel( wxT( "Flags" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( wxT( "Flags" ), msg, BLUE ) );
#if 0 #if 0
// Display start and end pointers: // Display start and end pointers:
msg.Printf( wxT( "%p" ), start ); msg.Printf( wxT( "%p" ), start );
frame->AppendMsgPanel( wxT( "start ptr" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( wxT( "start ptr" ), msg, BLUE ) );
msg.Printf( wxT( "%p" ), end ); msg.Printf( wxT( "%p" ), end );
frame->AppendMsgPanel( wxT( "end ptr" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( wxT( "end ptr" ), msg, BLUE ) );
// Display this ptr // Display this ptr
msg.Printf( wxT( "%p" ), this ); msg.Printf( wxT( "%p" ), this );
frame->AppendMsgPanel( wxT( "this" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( wxT( "this" ), msg, BLUE ) );
#endif #endif
#if 0 #if 0
// Display start and end positions: // Display start and end positions:
msg.Printf( wxT( "%d %d" ), m_Start.x, m_Start.y ); msg.Printf( wxT( "%d %d" ), m_Start.x, m_Start.y );
frame->AppendMsgPanel( wxT( "Start pos" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( wxT( "Start pos" ), msg, BLUE ) );
msg.Printf( wxT( "%d %d" ), m_End.x, m_End.y ); msg.Printf( wxT( "%d %d" ), m_End.x, m_End.y );
frame->AppendMsgPanel( wxT( "End pos" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( wxT( "End pos" ), msg, BLUE ) );
#endif #endif
#endif // defined(DEBUG) #endif // defined(DEBUG)
@ -1106,7 +1107,7 @@ void TRACK::DisplayInfoBase( EDA_DRAW_FRAME* frame )
if( GetState( TRACK_AR ) ) if( GetState( TRACK_AR ) )
msg[2] = 'A'; msg[2] = 'A';
frame->AppendMsgPanel( _( "Status" ), msg, MAGENTA ); aList.push_back( MSG_PANEL_ITEM( _( "Status" ), msg, MAGENTA ) );
/* Display layer or layer pair) */ /* Display layer or layer pair) */
if( Type() == PCB_VIA_T ) if( Type() == PCB_VIA_T )
@ -1122,20 +1123,20 @@ void TRACK::DisplayInfoBase( EDA_DRAW_FRAME* frame )
msg = board->GetLayerName( m_Layer ); msg = board->GetLayerName( m_Layer );
} }
frame->AppendMsgPanel( _( "Layer" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Layer" ), msg, BROWN ) );
/* Display width */ /* Display width */
msg = frame->CoordinateToString( (unsigned) m_Width ); msg = ::CoordinateToString( (unsigned) m_Width );
if( Type() == PCB_VIA_T ) // Display Diam and Drill values if( Type() == PCB_VIA_T ) // Display Diam and Drill values
{ {
// Display diameter value: // Display diameter value:
frame->AppendMsgPanel( _( "Diam" ), msg, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Diam" ), msg, DARKCYAN ) );
// Display drill value // Display drill value
int drill_value = GetDrillValue(); int drill_value = GetDrillValue();
msg = frame->CoordinateToString( (unsigned) drill_value ); msg = ::CoordinateToString( (unsigned) drill_value );
wxString title = _( "Drill" ); wxString title = _( "Drill" );
title += wxT( " " ); title += wxT( " " );
@ -1145,18 +1146,18 @@ void TRACK::DisplayInfoBase( EDA_DRAW_FRAME* frame )
else else
title += _( "(Default)" ); title += _( "(Default)" );
frame->AppendMsgPanel( title, msg, RED ); aList.push_back( MSG_PANEL_ITEM( title, msg, RED ) );
} }
else else
{ {
frame->AppendMsgPanel( _( "Width" ), msg, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Width" ), msg, DARKCYAN ) );
} }
// Display segment length // Display segment length
if( Type() != PCB_VIA_T ) // Display Diam and Drill values if( Type() != PCB_VIA_T ) // Display Diam and Drill values
{ {
msg = frame->LengthDoubleToString( GetLength() ); msg = ::LengthDoubleToString( GetLength() );
frame->AppendMsgPanel( _( "Segment Length" ), msg, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Segment Length" ), msg, DARKCYAN ) );
} }
} }

View File

@ -38,6 +38,8 @@
class TRACK; class TRACK;
class D_PAD; class D_PAD;
class MSG_PANEL_ITEM;
// Via attributes (m_Shape parameter) // Via attributes (m_Shape parameter)
#define VIA_THROUGH 3 /* Always a through hole via */ #define VIA_THROUGH 3 /* Always a through hole via */
@ -239,16 +241,14 @@ public:
*/ */
bool IsNull(); bool IsNull();
void DisplayInfo( EDA_DRAW_FRAME* frame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
/** /**
* Function DisplayInfoBase * Function GetMsgPanelInfoBase
* has knowledge about the frame and how and where to put status information
* about this object into the frame's message panel.
* Display info about the track segment only, and does not calculate the full track length * Display info about the track segment only, and does not calculate the full track length
* @param frame A EDA_DRAW_FRAME in which to print status information. * @param aList A list of #MSG_PANEL_ITEM objects to add status information.
*/ */
void DisplayInfoBase( EDA_DRAW_FRAME* frame ); void GetMsgPanelInfoBase( std::vector< MSG_PANEL_ITEM >& aList );
/** /**
* Function ShowWidth * Function ShowWidth

View File

@ -39,6 +39,7 @@
#include <richio.h> #include <richio.h>
#include <macros.h> #include <macros.h>
#include <wxBasePcbFrame.h> #include <wxBasePcbFrame.h>
#include <msgpanel.h>
#include <protos.h> #include <protos.h>
#include <class_board.h> #include <class_board.h>
@ -629,7 +630,7 @@ bool ZONE_CONTAINER::HitTestFilledArea( const wxPoint& aRefPos ) const
} }
void ZONE_CONTAINER::DisplayInfo( EDA_DRAW_FRAME* frame ) void ZONE_CONTAINER::GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList )
{ {
wxString msg; wxString msg;
@ -637,8 +638,6 @@ void ZONE_CONTAINER::DisplayInfo( EDA_DRAW_FRAME* frame )
wxASSERT( board ); wxASSERT( board );
frame->ClearMsgPanel();
msg = _( "Zone Outline" ); msg = _( "Zone Outline" );
// Display Cutout instead of Outline for holes inside a zone // Display Cutout instead of Outline for holes inside a zone
@ -648,33 +647,38 @@ void ZONE_CONTAINER::DisplayInfo( EDA_DRAW_FRAME* frame )
if( ncont ) if( ncont )
msg << wxT( " " ) << _( "(Cutout)" ); msg << wxT( " " ) << _( "(Cutout)" );
frame->AppendMsgPanel( _( "Type" ), msg, DARKCYAN ); aList.push_back( MSG_PANEL_ITEM( _( "Type" ), msg, DARKCYAN ) );
if( GetIsKeepout() ) if( GetIsKeepout() )
{ {
msg.Empty(); msg.Empty();
if( GetDoNotAllowVias() ) if( GetDoNotAllowVias() )
msg = _("No via"); msg = _("No via");
if( GetDoNotAllowTracks() ) if( GetDoNotAllowTracks() )
{ {
if( !msg.IsEmpty() ) if( !msg.IsEmpty() )
msg += wxT(", "); msg += wxT(", ");
msg += _("No track"); msg += _("No track");
} }
if( GetDoNotAllowCopperPour() ) if( GetDoNotAllowCopperPour() )
{ {
if( !msg.IsEmpty() ) if( !msg.IsEmpty() )
msg += wxT(", "); msg += wxT(", ");
msg += _("No copper pour"); msg += _("No copper pour");
} }
frame->AppendMsgPanel( _( "Keepout" ), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _( "Keepout" ), msg, RED ) );
} }
else if( IsOnCopperLayer() ) else if( IsOnCopperLayer() )
{ {
if( GetNet() >= 0 ) if( GetNet() >= 0 )
{ {
NETINFO_ITEM* equipot = ( (PCB_BASE_FRAME*) frame )->GetBoard()->FindNet( GetNet() ); NETINFO_ITEM* equipot = board->FindNet( GetNet() );
if( equipot ) if( equipot )
msg = equipot->GetNetname(); msg = equipot->GetNetname();
@ -688,43 +692,44 @@ void ZONE_CONTAINER::DisplayInfo( EDA_DRAW_FRAME* frame )
msg << wxT( " <" ) << _( "Not Found" ) << wxT( ">" ); msg << wxT( " <" ) << _( "Not Found" ) << wxT( ">" );
} }
frame->AppendMsgPanel( _( "NetName" ), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _( "NetName" ), msg, RED ) );
#if 1 #if 1
// Display net code : (useful in test or debug) // Display net code : (useful in test or debug)
msg.Printf( wxT( "%d" ), GetNet() ); msg.Printf( wxT( "%d" ), GetNet() );
frame->AppendMsgPanel( _( "NetCode" ), msg, RED ); aList.push_back( MSG_PANEL_ITEM( _( "NetCode" ), msg, RED ) );
#endif #endif
// Display priority level // Display priority level
msg.Printf( wxT( "%d" ), GetPriority() ); msg.Printf( wxT( "%d" ), GetPriority() );
frame->AppendMsgPanel( _( "Priority" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Priority" ), msg, BLUE ) );
} }
else else
{ {
frame->AppendMsgPanel( _( "Non Copper Zone" ), wxEmptyString, RED ); aList.push_back( MSG_PANEL_ITEM( _( "Non Copper Zone" ), wxEmptyString, RED ) );
} }
msg = board->GetLayerName( m_Layer ); msg = board->GetLayerName( m_Layer );
frame->AppendMsgPanel( _( "Layer" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Layer" ), msg, BROWN ) );
msg.Printf( wxT( "%d" ), (int) m_Poly->m_CornersList.size() ); msg.Printf( wxT( "%d" ), (int) m_Poly->m_CornersList.size() );
frame->AppendMsgPanel( _( "Corners" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Corners" ), msg, BLUE ) );
if( m_FillMode ) if( m_FillMode )
msg = _( "Segments" ); msg = _( "Segments" );
else else
msg = _( "Polygons" ); msg = _( "Polygons" );
frame->AppendMsgPanel( _( "Fill mode" ), msg, BROWN ); aList.push_back( MSG_PANEL_ITEM( _( "Fill mode" ), msg, BROWN ) );
// Useful for statistics : // Useful for statistics :
msg.Printf( wxT( "%d" ), (int) m_Poly->m_HatchLines.size() ); msg.Printf( wxT( "%d" ), (int) m_Poly->m_HatchLines.size() );
frame->AppendMsgPanel( _( "Hatch lines" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Hatch lines" ), msg, BLUE ) );
if( m_FilledPolysList.size() ) if( m_FilledPolysList.size() )
{ {
msg.Printf( wxT( "%d" ), (int) m_FilledPolysList.size() ); msg.Printf( wxT( "%d" ), (int) m_FilledPolysList.size() );
frame->AppendMsgPanel( _( "Corners in DrawList" ), msg, BLUE ); aList.push_back( MSG_PANEL_ITEM( _( "Corners in DrawList" ), msg, BLUE ) );
} }
} }

View File

@ -42,11 +42,12 @@
class EDA_RECT; class EDA_RECT;
class LINE_READER; class LINE_READER;
class EDA_DRAW_FRAME;
class EDA_DRAW_PANEL; class EDA_DRAW_PANEL;
class PCB_EDIT_FRAME; class PCB_EDIT_FRAME;
class BOARD; class BOARD;
class ZONE_CONTAINER; class ZONE_CONTAINER;
class MSG_PANEL_ITEM;
/** /**
* Struct SEGMENT * Struct SEGMENT
@ -109,7 +110,7 @@ public:
*/ */
void Copy( ZONE_CONTAINER* src ); void Copy( ZONE_CONTAINER* src );
void DisplayInfo( EDA_DRAW_FRAME* frame ); void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList );
/** /**
* Function Draw * Function Draw

View File

@ -131,9 +131,9 @@ TRACK* PCB_EDIT_FRAME::Delete_Segment( wxDC* DC, TRACK* aTrack )
SaveCopyInUndoList( aTrack, UR_DELETED ); SaveCopyInUndoList( aTrack, UR_DELETED );
OnModify(); OnModify();
TestNetConnection( DC, current_net_code ); TestNetConnection( DC, current_net_code );
GetBoard()->DisplayInfo( this ); SetMsgPanel( GetBoard() );
return NULL; return NULL;
} }
@ -185,7 +185,7 @@ void PCB_EDIT_FRAME::Delete_net( wxDC* DC, TRACK* aTrack )
SaveCopyInUndoList( itemsList, UR_DELETED ); SaveCopyInUndoList( itemsList, UR_DELETED );
OnModify(); OnModify();
TestNetConnection( DC, net_code_delete ); TestNetConnection( DC, net_code_delete );
GetBoard()->DisplayInfo( this ); SetMsgPanel( GetBoard() );
} }

View File

@ -236,7 +236,7 @@ void DIALOG_GRAPHIC_ITEM_PROPERTIES::OnOkClick( wxCommandEvent& event )
if( m_DC ) if( m_DC )
m_Item->Draw( m_parent->GetCanvas(), m_DC, GR_OR ); m_Item->Draw( m_parent->GetCanvas(), m_DC, GR_OR );
m_Item->DisplayInfo( m_parent ); m_parent->SetMsgPanel( m_Item );
m_parent->SetDesignSettings( m_brdSettings ); m_parent->SetDesignSettings( m_brdSettings );

View File

@ -245,7 +245,7 @@ void DIALOG_MODEDIT_FP_BODY_ITEM_PROPERTIES::OnOkClick( wxCommandEvent& event )
} }
m_parent->OnModify(); m_parent->OnModify();
m_item->DisplayInfo( m_parent ); m_parent->SetMsgPanel( m_item );
Close( true ); Close( true );
} }

View File

@ -832,7 +832,7 @@ void DIALOG_PAD_PROPERTIES::PadPropertiesAccept( wxCommandEvent& event )
m_CurrentPad->SetThermalGap( m_Pad_Master.GetThermalGap() ); m_CurrentPad->SetThermalGap( m_Pad_Master.GetThermalGap() );
module->CalculateBoundingBox(); module->CalculateBoundingBox();
m_CurrentPad->DisplayInfo( m_Parent ); m_Parent->SetMsgPanel( m_CurrentPad );
// redraw the area where the pad was // redraw the area where the pad was
m_Parent->GetCanvas()->RefreshDrawingRect( m_CurrentPad->GetBoundingBox() ); m_Parent->GetCanvas()->RefreshDrawingRect( m_CurrentPad->GetBoundingBox() );

View File

@ -381,7 +381,7 @@ void PCB_EDIT_FRAME::BeginMoveDimensionText( DIMENSION* aItem, wxDC* DC )
aItem->Draw( m_canvas, DC, GR_XOR ); aItem->Draw( m_canvas, DC, GR_XOR );
aItem->SetFlags( IS_MOVED ); aItem->SetFlags( IS_MOVED );
aItem->DisplayInfo( this ); SetMsgPanel( aItem );
GetScreen()->SetCrossHairPosition( aItem->m_Text.m_Pos ); GetScreen()->SetCrossHairPosition( aItem->m_Text.m_Pos );
m_canvas->MoveCursorToCrossHair(); m_canvas->MoveCursorToCrossHair();

View File

@ -132,7 +132,7 @@ int DRC::Drc( TRACK* aRefSegm, TRACK* aList )
{ {
wxASSERT( m_currentMarker ); wxASSERT( m_currentMarker );
m_currentMarker->DisplayInfo( m_mainWindow ); m_mainWindow->SetMsgPanel( m_currentMarker );
return BAD_DRC; return BAD_DRC;
} }
@ -140,7 +140,7 @@ int DRC::Drc( TRACK* aRefSegm, TRACK* aList )
{ {
wxASSERT( m_currentMarker ); wxASSERT( m_currentMarker );
m_currentMarker->DisplayInfo( m_mainWindow ); m_mainWindow->SetMsgPanel( m_currentMarker );
return BAD_DRC; return BAD_DRC;
} }
@ -165,7 +165,7 @@ int DRC::Drc( ZONE_CONTAINER* aArea, int aCornerIndex )
if( !doEdgeZoneDrc( aArea, aCornerIndex ) ) if( !doEdgeZoneDrc( aArea, aCornerIndex ) )
{ {
wxASSERT( m_currentMarker ); wxASSERT( m_currentMarker );
m_currentMarker->DisplayInfo( m_mainWindow ); m_mainWindow->SetMsgPanel( m_currentMarker );
return BAD_DRC; return BAD_DRC;
} }

View File

@ -467,7 +467,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
SetCurItem( NULL ); SetCurItem( NULL );
TestNetConnection( NULL, netcode ); TestNetConnection( NULL, netcode );
OnModify(); OnModify();
GetBoard()->DisplayInfo( this ); SetMsgPanel( GetBoard() );
} }
break; break;
@ -503,7 +503,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
Delete_Zone_Contour( &dc, (ZONE_CONTAINER*) GetCurItem() ); Delete_Zone_Contour( &dc, (ZONE_CONTAINER*) GetCurItem() );
SetCurItem( NULL ); SetCurItem( NULL );
TestNetConnection( NULL, netcode ); TestNetConnection( NULL, netcode );
GetBoard()->DisplayInfo( this ); SetMsgPanel( GetBoard() );
} }
break; break;
@ -572,7 +572,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
m_canvas->MoveCursorToCrossHair(); m_canvas->MoveCursorToCrossHair();
Fill_All_Zones( this ); Fill_All_Zones( this );
m_canvas->Refresh(); m_canvas->Refresh();
GetBoard()->DisplayInfo( this ); SetMsgPanel( GetBoard() );
break; break;
case ID_POPUP_PCB_REMOVE_FILLED_AREAS_IN_CURRENT_ZONE: case ID_POPUP_PCB_REMOVE_FILLED_AREAS_IN_CURRENT_ZONE:
@ -582,7 +582,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
zone_container->UnFill(); zone_container->UnFill();
TestNetConnection( NULL, zone_container->GetNet() ); TestNetConnection( NULL, zone_container->GetNet() );
OnModify(); OnModify();
GetBoard()->DisplayInfo( this ); SetMsgPanel( GetBoard() );
m_canvas->Refresh(); m_canvas->Refresh();
} }
SetCurItem( NULL ); SetCurItem( NULL );
@ -602,7 +602,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
TestConnections(); TestConnections();
TestForActiveLinksInRatsnest( 0 ); // Recalculate the active ratsnest, i.e. the unconnected links TestForActiveLinksInRatsnest( 0 ); // Recalculate the active ratsnest, i.e. the unconnected links
OnModify(); OnModify();
GetBoard()->DisplayInfo( this ); SetMsgPanel( GetBoard() );
m_canvas->Refresh(); m_canvas->Refresh();
break; break;
@ -610,7 +610,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
m_canvas->MoveCursorToCrossHair(); m_canvas->MoveCursorToCrossHair();
Fill_Zone( (ZONE_CONTAINER*) GetCurItem() ); Fill_Zone( (ZONE_CONTAINER*) GetCurItem() );
TestNetConnection( NULL, ( (ZONE_CONTAINER*) GetCurItem() )->GetNet() ); TestNetConnection( NULL, ( (ZONE_CONTAINER*) GetCurItem() )->GetNet() );
GetBoard()->DisplayInfo( this ); SetMsgPanel( GetBoard() );
m_canvas->Refresh(); m_canvas->Refresh();
break; break;
@ -1177,7 +1177,7 @@ void PCB_EDIT_FRAME::RemoveStruct( BOARD_ITEM* Item, wxDC* DC )
int netcode = ( (ZONE_CONTAINER*) Item )->GetNet(); int netcode = ( (ZONE_CONTAINER*) Item )->GetNet();
Delete_Zone_Contour( DC, (ZONE_CONTAINER*) Item ); Delete_Zone_Contour( DC, (ZONE_CONTAINER*) Item );
TestNetConnection( NULL, netcode ); TestNetConnection( NULL, netcode );
GetBoard()->DisplayInfo( this ); SetMsgPanel( GetBoard() );
} }
break; break;

View File

@ -140,7 +140,7 @@ void PCB_EDIT_FRAME::StartMoveTextePcb( TEXTE_PCB* aTextePcb, wxDC* aDC, bool aE
s_TextCopy.Copy( aTextePcb ); s_TextCopy.Copy( aTextePcb );
aTextePcb->SetFlags( IS_MOVED ); aTextePcb->SetFlags( IS_MOVED );
aTextePcb->DisplayInfo( this ); SetMsgPanel( aTextePcb );
#ifdef USE_WX_OVERLAY #ifdef USE_WX_OVERLAY
m_canvas->Refresh(); m_canvas->Refresh();
@ -248,7 +248,7 @@ void PCB_EDIT_FRAME::Rotate_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC )
/* Redraw text in new position. */ /* Redraw text in new position. */
TextePcb->Draw( m_canvas, DC, GR_XOR ); TextePcb->Draw( m_canvas, DC, GR_XOR );
TextePcb->DisplayInfo( this ); SetMsgPanel( TextePcb );
if( TextePcb->GetFlags() == 0 ) // i.e. not edited, or moved if( TextePcb->GetFlags() == 0 ) // i.e. not edited, or moved
SaveCopyInUndoList( TextePcb, UR_ROTATED, TextePcb->GetPosition() ); SaveCopyInUndoList( TextePcb, UR_ROTATED, TextePcb->GetPosition() );
@ -272,7 +272,7 @@ void PCB_EDIT_FRAME::FlipTextePcb( TEXTE_PCB* aTextePcb, wxDC* aDC )
aTextePcb->Flip( aTextePcb->GetPosition() ); aTextePcb->Flip( aTextePcb->GetPosition() );
aTextePcb->Draw( m_canvas, aDC, GR_XOR ); aTextePcb->Draw( m_canvas, aDC, GR_XOR );
aTextePcb->DisplayInfo( this ); SetMsgPanel( aTextePcb );
if( aTextePcb->GetFlags() == 0 ) // i.e. not edited, or moved if( aTextePcb->GetFlags() == 0 ) // i.e. not edited, or moved
SaveCopyInUndoList( aTextePcb, UR_FLIPPED, aTextePcb->GetPosition() ); SaveCopyInUndoList( aTextePcb, UR_FLIPPED, aTextePcb->GetPosition() );

View File

@ -61,7 +61,7 @@ void PCB_EDIT_FRAME::Start_Move_DrawItem( DRAWSEGMENT* drawitem, wxDC* DC )
drawitem->Draw( m_canvas, DC, GR_XOR ); drawitem->Draw( m_canvas, DC, GR_XOR );
drawitem->SetFlags( IS_MOVED ); drawitem->SetFlags( IS_MOVED );
s_InitialPosition = s_LastPosition = GetScreen()->GetCrossHairPosition(); s_InitialPosition = s_LastPosition = GetScreen()->GetCrossHairPosition();
drawitem->DisplayInfo( this ); SetMsgPanel( drawitem );
m_canvas->SetMouseCapture( Move_Segment, Abort_EditEdge ); m_canvas->SetMouseCapture( Move_Segment, Abort_EditEdge );
SetCurItem( drawitem ); SetCurItem( drawitem );
m_canvas->CallMouseCapture( DC, wxDefaultPosition, false ); m_canvas->CallMouseCapture( DC, wxDefaultPosition, false );

View File

@ -166,7 +166,7 @@ bool PCB_EDIT_FRAME::Other_Layer_Route( TRACK* aTrack, wxDC* DC )
// Refresh DRC diag, erased by previous calls // Refresh DRC diag, erased by previous calls
if( m_drc->GetCurrentMarker() ) if( m_drc->GetCurrentMarker() )
m_drc->GetCurrentMarker()->DisplayInfo( this ); SetMsgPanel( m_drc->GetCurrentMarker() );
return false; return false;
} }
@ -209,8 +209,7 @@ bool PCB_EDIT_FRAME::Other_Layer_Route( TRACK* aTrack, wxDC* DC )
} }
m_canvas->CallMouseCapture( DC, wxDefaultPosition, false ); m_canvas->CallMouseCapture( DC, wxDefaultPosition, false );
via->DisplayInfo( this ); SetMsgPanel( via );
UpdateStatusBar(); UpdateStatusBar();
return true; return true;
@ -238,7 +237,7 @@ void PCB_EDIT_FRAME::Show_1_Ratsnest( EDA_ITEM* item, wxDC* DC )
if( pt_pad ) // Displaying the ratsnest of the corresponding net. if( pt_pad ) // Displaying the ratsnest of the corresponding net.
{ {
pt_pad->DisplayInfo( this ); SetMsgPanel( pt_pad );
for( unsigned ii = 0; ii < GetBoard()->GetRatsnestsCount(); ii++ ) for( unsigned ii = 0; ii < GetBoard()->GetRatsnestsCount(); ii++ )
{ {
@ -272,7 +271,7 @@ void PCB_EDIT_FRAME::Show_1_Ratsnest( EDA_ITEM* item, wxDC* DC )
if( Module ) if( Module )
{ {
Module->DisplayInfo( this ); SetMsgPanel( Module );
pt_pad = Module->m_Pads; pt_pad = Module->m_Pads;
for( ; pt_pad != NULL; pt_pad = (D_PAD*) pt_pad->Next() ) for( ; pt_pad != NULL; pt_pad = (D_PAD*) pt_pad->Next() )

View File

@ -201,7 +201,7 @@ TRACK* PCB_EDIT_FRAME::Begin_Route( TRACK* aTrack, wxDC* aDC )
D( g_CurrentTrackList.VerifyListIntegrity(); ); D( g_CurrentTrackList.VerifyListIntegrity(); );
g_CurrentTrackSegment->DisplayInfoBase( this ); SetMsgPanel( g_CurrentTrackSegment );
SetCurItem( g_CurrentTrackSegment, false ); SetCurItem( g_CurrentTrackSegment, false );
m_canvas->CallMouseCapture( aDC, wxDefaultPosition, false ); m_canvas->CallMouseCapture( aDC, wxDefaultPosition, false );
@ -510,7 +510,7 @@ bool PCB_EDIT_FRAME::End_Route( TRACK* aTrack, wxDC* aDC )
// compute the new ratsnest // compute the new ratsnest
TestNetConnection( aDC, netcode ); TestNetConnection( aDC, netcode );
OnModify(); OnModify();
GetBoard()->DisplayInfo( this ); SetMsgPanel( GetBoard() );
// Redraw the entire new track. // Redraw the entire new track.
DrawTraces( m_canvas, aDC, firstTrack, newCount, GR_OR ); DrawTraces( m_canvas, aDC, firstTrack, newCount, GR_OR );
@ -785,7 +785,7 @@ void ShowNewTrackWhenMovingCursor( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPo
isegm = g_CurrentTrackSegment->Back(); isegm = g_CurrentTrackSegment->Back();
// display interesting segment info only: // display interesting segment info only:
isegm->DisplayInfoBase( frame ); frame->SetMsgPanel( isegm );
// Display current track length (on board) and the the actual track len // Display current track length (on board) and the the actual track len
// if there is an extra len due to the len die on the starting pad (if any) // if there is an extra len due to the len die on the starting pad (if any)

View File

@ -91,7 +91,7 @@ TEXTE_MODULE* PCB_BASE_FRAME::CreateTextModule( MODULE* Module, wxDC* DC )
if( DC ) if( DC )
Text->Draw( m_canvas, DC, GR_OR ); Text->Draw( m_canvas, DC, GR_OR );
Text->DisplayInfo( this ); SetMsgPanel( Text );
return Text; return Text;
} }
@ -121,7 +121,7 @@ void PCB_BASE_FRAME::RotateTextModule( TEXTE_MODULE* Text, wxDC* DC )
Text->m_Orient -= 1800; Text->m_Orient -= 1800;
Text->Draw( m_canvas, DC, GR_XOR, MoveVector ); Text->Draw( m_canvas, DC, GR_XOR, MoveVector );
Text->DisplayInfo( this ); SetMsgPanel( Text );
if( module ) if( module )
module->SetLastEditTime(); module->SetLastEditTime();
@ -214,8 +214,7 @@ void PCB_BASE_FRAME::StartMoveTexteModule( TEXTE_MODULE* Text, wxDC* DC )
GetScreen()->SetCrossHairPosition( TextInitialPosition ); GetScreen()->SetCrossHairPosition( TextInitialPosition );
m_canvas->MoveCursorToCrossHair(); m_canvas->MoveCursorToCrossHair();
Text->DisplayInfo( this ); SetMsgPanel( Text );
SetCurItem( Text ); SetCurItem( Text );
m_canvas->SetMouseCapture( Show_MoveTexte_Module, AbortMoveTextModule ); m_canvas->SetMouseCapture( Show_MoveTexte_Module, AbortMoveTextModule );
m_canvas->CallMouseCapture( DC, wxDefaultPosition, true ); m_canvas->CallMouseCapture( DC, wxDefaultPosition, true );

View File

@ -40,6 +40,7 @@
#include <richio.h> #include <richio.h>
#include <filter_reader.h> #include <filter_reader.h>
#include <appl_wxstruct.h> #include <appl_wxstruct.h>
#include <msgpanel.h>
#include <pcbnew.h> #include <pcbnew.h>
#include <pcbnew_id.h> #include <pcbnew_id.h>
@ -403,7 +404,7 @@ the changes?" ) ) )
// Compile ratsnest and displays net info // Compile ratsnest and displays net info
wxBusyCursor dummy; // Displays an Hourglass while building connectivity wxBusyCursor dummy; // Displays an Hourglass while building connectivity
Compile_Ratsnest( NULL, true ); Compile_Ratsnest( NULL, true );
GetBoard()->DisplayInfo( this ); SetMsgPanel( GetBoard() );
// Refresh the 3D view, if any // Refresh the 3D view, if any
if( m_Draw3DFrame ) if( m_Draw3DFrame )

View File

@ -215,11 +215,12 @@ void FOOTPRINT_WIZARD_FRAME::RedrawActiveWindow( wxDC* DC, bool EraseBg )
MODULE* module = GetBoard()->m_Modules; MODULE* module = GetBoard()->m_Modules;
if ( module ) if ( module )
module->DisplayInfo( this ); SetMsgPanel( module );
m_canvas->DrawCrossHair( DC ); m_canvas->DrawCrossHair( DC );
ClearMsgPanel(); ClearMsgPanel();
if( module ) if( module )
module->DisplayInfo( this ); SetMsgPanel( module );
} }

View File

@ -34,6 +34,7 @@
#include <wxPcbStruct.h> #include <wxPcbStruct.h>
#include <3d_viewer.h> #include <3d_viewer.h>
#include <pcbcommon.h> #include <pcbcommon.h>
#include <msgpanel.h>
#include <class_board.h> #include <class_board.h>
#include <class_module.h> #include <class_module.h>

View File

@ -128,7 +128,7 @@ void PCB_EDIT_FRAME::DlgGlobalChange_PadSettings( D_PAD* aPad, bool aRedraw )
return; return;
} }
module->DisplayInfo( this ); SetMsgPanel( module );
{ {
DIALOG_GLOBAL_PADS_EDITION dlg( this, aPad ); DIALOG_GLOBAL_PADS_EDITION dlg( this, aPad );
@ -172,7 +172,7 @@ void FOOTPRINT_EDIT_FRAME::DlgGlobalChange_PadSettings( D_PAD* aPad )
return; return;
} }
module->DisplayInfo( this ); SetMsgPanel( module );
{ {
DIALOG_GLOBAL_PADS_EDITION dlg( this, aPad ); DIALOG_GLOBAL_PADS_EDITION dlg( this, aPad );

View File

@ -509,7 +509,7 @@ void PCB_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosit
SetCurItem( module ); SetCurItem( module );
module->SetLocked( !module->IsLocked() ); module->SetLocked( !module->IsLocked() );
OnModify(); OnModify();
module->DisplayInfo( this ); SetMsgPanel( module );
} }
break; break;

View File

@ -267,7 +267,7 @@ MODULE* FOOTPRINT_EDIT_FRAME::Import_Module()
GetBoard()->Add( module ); GetBoard()->Add( module );
// Display info : // Display info :
module->DisplayInfo( this ); SetMsgPanel( module );
PlaceModule( module, NULL ); PlaceModule( module, NULL );
GetBoard()->m_Status_Pcb = 0; GetBoard()->m_Status_Pcb = 0;
GetBoard()->BuildListOfNets(); GetBoard()->BuildListOfNets();
@ -595,7 +595,7 @@ bool PCB_BASE_FRAME::Save_Module_In_Library( const wxString& aLibPath,
if( aModule == NULL ) if( aModule == NULL )
return false; return false;
aModule->DisplayInfo( this ); SetMsgPanel( aModule );
// Ask what to use as the footprint name in the library // Ask what to use as the footprint name in the library
wxString footprintName = aModule->GetLibRef(); wxString footprintName = aModule->GetLibRef();
@ -739,10 +739,9 @@ MODULE* PCB_BASE_FRAME::Create_1_Module( const wxString& aModuleName )
module->m_Value->m_Text = wxT( "VAL**" ); module->m_Value->m_Text = wxT( "VAL**" );
module->m_Value->SetThickness( GetDesignSettings().m_ModuleTextWidth ); module->m_Value->SetThickness( GetDesignSettings().m_ModuleTextWidth );
module->m_Value->SetSize( GetDesignSettings().m_ModuleTextSize ); module->m_Value->SetSize( GetDesignSettings().m_ModuleTextSize );
module->SetPosition( wxPoint( 0, 0 ) ); module->SetPosition( wxPoint( 0, 0 ) );
module->DisplayInfo( this ); SetMsgPanel( module );
return module; return module;
} }

View File

@ -133,7 +133,7 @@ BOARD_ITEM* FOOTPRINT_EDIT_FRAME::ModeditLocateAndDisplay( int aHotKeyCode )
if( item ) if( item )
{ {
item->DisplayInfo( this ); SetMsgPanel( item );
} }
return item; return item;

View File

@ -37,6 +37,7 @@
#include <dialog_helpers.h> #include <dialog_helpers.h>
#include <3d_viewer.h> #include <3d_viewer.h>
#include <pcbcommon.h> #include <pcbcommon.h>
#include <msgpanel.h>
#include <class_board.h> #include <class_board.h>
#include <class_module.h> #include <class_module.h>

View File

@ -257,7 +257,7 @@ bool PCB_EDIT_FRAME::Delete_Module( MODULE* aModule, wxDC* aDC, bool aAskBeforeD
if( aModule == NULL ) if( aModule == NULL )
return false; return false;
aModule->DisplayInfo( this ); SetMsgPanel( aModule );
/* Confirm module delete. */ /* Confirm module delete. */
if( aAskBeforeDeleting ) if( aAskBeforeDeleting )
@ -331,7 +331,7 @@ void PCB_EDIT_FRAME::Change_Side_Module( MODULE* Module, wxDC* DC )
/* Flip the module */ /* Flip the module */
Module->Flip( Module->m_Pos ); Module->Flip( Module->m_Pos );
Module->DisplayInfo( this ); SetMsgPanel( Module );
if( !Module->IsMoving() ) /* Inversion simple */ if( !Module->IsMoving() ) /* Inversion simple */
{ {
@ -421,7 +421,7 @@ void PCB_BASE_FRAME::PlaceModule( MODULE* aModule, wxDC* aDC, bool aDoNotRecreat
if( aDC ) if( aDC )
m_canvas->Refresh(); m_canvas->Refresh();
aModule->DisplayInfo( this ); SetMsgPanel( aModule );
} }
@ -468,7 +468,7 @@ void PCB_BASE_FRAME::Rotate_Module( wxDC* DC, MODULE* module, int angle, bool in
else else
module->SetOrientation( angle ); module->SetOrientation( angle );
module->DisplayInfo( this ); SetMsgPanel( module );
if( DC ) if( DC )
{ {

Some files were not shown because too many files have changed in this diff Show More