|
|
/*********************/ /* lib_draw_item.cpp */ /*********************/
#include "fctsys.h"
#include "gr_basic.h"
#include "class_drawpanel.h"
#include "wxstruct.h"
#include "protos.h"
#include "general.h"
#include "lib_draw_item.h"
const int fill_tab[3] = { 'N', 'F', 'f' };
//#define DRAW_ARC_WITH_ANGLE // Used to draw arcs
/* Base class (abstract) for components bodies items */ LIB_DRAW_ITEM::LIB_DRAW_ITEM( KICAD_T aType, LIB_COMPONENT* aComponent, int aUnit, int aConvert, FILL_T aFillType ) : EDA_ITEM( aType ) { m_Unit = aUnit; m_Convert = aConvert; m_Fill = aFillType; m_Parent = (EDA_ITEM*) aComponent; m_typeName = _( "Undefined" ); m_isFillable = false; m_eraseLastDrawItem = false; }
LIB_DRAW_ITEM::LIB_DRAW_ITEM( const LIB_DRAW_ITEM& aItem ) : EDA_ITEM( aItem ) { m_Unit = aItem.m_Unit; m_Convert = aItem.m_Convert; m_Fill = aItem.m_Fill; m_Parent = aItem.m_Parent; m_typeName = aItem.m_typeName; m_isFillable = aItem.m_isFillable; }
/**
* Update the message panel information with the drawing information. * * This base function is used to display the information common to the * all library items. Call the base class from the derived class or the * common information will not be updated in the message panel. */ void LIB_DRAW_ITEM::DisplayInfo( EDA_DRAW_FRAME* aFrame ) { wxString msg;
aFrame->ClearMsgPanel(); aFrame->AppendMsgPanel( _( "Type" ), m_typeName, CYAN );
if( m_Unit == 0 ) msg = _( "All" ); else msg.Printf( wxT( "%d" ), m_Unit ); aFrame->AppendMsgPanel( _( "Unit" ), msg, BROWN );
if( m_Convert == 0 ) msg = _( "All" ); else if( m_Convert == 1 ) msg = _( "no" ); else if( m_Convert == 2 ) msg = _( "yes" ); else msg = wxT( "?" ); aFrame->AppendMsgPanel( _( "Convert" ), msg, BROWN ); }
bool LIB_DRAW_ITEM::operator==( const LIB_DRAW_ITEM& aOther ) const { return ( ( Type() == aOther.Type() ) && ( m_Unit == aOther.m_Unit ) && ( m_Convert == aOther.m_Convert ) && DoCompare( aOther ) == 0 ); }
bool LIB_DRAW_ITEM::operator<( const LIB_DRAW_ITEM& aOther ) const { int result = m_Convert - aOther.m_Convert;
if( result != 0 ) return result < 0;
result = m_Unit - aOther.m_Unit;
if( result != 0 ) return result < 0;
result = Type() - aOther.Type();
if( result != 0 ) return result < 0;
return ( DoCompare( aOther ) < 0 ); }
void LIB_DRAW_ITEM::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset, int aColor, int aDrawMode, void* aData, const TRANSFORM& aTransform ) { if( InEditMode() ) { // Temporarily disable filling while the item is being edited.
FILL_T fillMode = m_Fill; int color = GetDefaultColor();
m_Fill = NO_FILL;
// Erase the old items using the previous attributes.
if( m_eraseLastDrawItem ) { GRSetDrawMode( aDC, g_XorMode ); drawEditGraphics( &aPanel->m_ClipBox, aDC, color ); drawGraphic( aPanel, aDC, wxPoint( 0, 0 ), color, g_XorMode, aData, aTransform ); }
// Calculate the new attributes at the current cursor position.
calcEdit( aOffset );
// Draw the items using the new attributes.
drawEditGraphics( &aPanel->m_ClipBox, aDC, color ); drawGraphic( aPanel, aDC, wxPoint( 0, 0 ), color, g_XorMode, aData, aTransform );
m_Fill = fillMode; } else { drawGraphic( aPanel, aDC, aOffset, aColor, aDrawMode, aData, aTransform ); } }
int LIB_DRAW_ITEM::GetDefaultColor() { return ReturnLayerColor( LAYER_DEVICE ); }
|