114 lines
3.4 KiB
C++
114 lines
3.4 KiB
C++
/*****************************************************/
|
|
/* Component library edit field manipulation code. */
|
|
/*****************************************************/
|
|
|
|
#include "fctsys.h"
|
|
#include "gr_basic.h"
|
|
#include "common.h"
|
|
#include "class_drawpanel.h"
|
|
#include "confirm.h"
|
|
|
|
#include "program.h"
|
|
#include "general.h"
|
|
#include "protos.h"
|
|
#include "libeditframe.h"
|
|
#include "class_library.h"
|
|
|
|
|
|
void WinEDA_LibeditFrame::EditField( wxDC* DC, LIB_FIELD* Field )
|
|
{
|
|
wxString Text;
|
|
wxString title;
|
|
wxString oldName;
|
|
|
|
if( Field == NULL )
|
|
return;
|
|
|
|
title = Field->GetName();
|
|
Text = Field->m_Text;
|
|
|
|
wxTextEntryDialog dlg( this, title + wxT( ":" ), _( "Edit field" ), Text );
|
|
|
|
if( dlg.ShowModal() != wxID_OK || dlg.GetValue() == Text )
|
|
return;
|
|
|
|
Text = dlg.GetValue();
|
|
|
|
Text.Replace( wxT( " " ), wxT( "_" ) );
|
|
|
|
if( ( Field->m_FieldId == REFERENCE || Field->m_FieldId == VALUE ) && Text.IsEmpty ( ) )
|
|
{
|
|
DisplayError( this, title + _( " field cannot be empty." ) );
|
|
return;
|
|
}
|
|
|
|
wxString fieldText = Field->GetFullText( m_unit );
|
|
LIB_COMPONENT* parent = Field->GetParent();
|
|
|
|
/* If the value field is changed, this is equivalent to creating a new
|
|
* component from the old one. Check for an existing library entry of
|
|
* this "new" component and change the value only if there is no existing
|
|
* entry with the same name.
|
|
*/
|
|
if( Field->m_FieldId == VALUE && Text != Field->m_Text )
|
|
{
|
|
wxString msg;
|
|
|
|
/* Test for an existing name in the current components alias list and in
|
|
* the current library.
|
|
*/
|
|
if( ( parent->HasAlias( Text ) && !parent->GetAlias( Text )->IsRoot() )
|
|
|| ( m_library && m_library->FindEntry( Text ) != NULL ) )
|
|
{
|
|
msg.Printf( _( "The field name <%s> conflicts with an existing \
|
|
entry in the component library <%s>.\nPlease choose another name that does \
|
|
not conflict with any library entries." ),
|
|
GetChars( Text ),
|
|
GetChars( m_library->GetName() ) );
|
|
DisplayError( this, msg );
|
|
return;
|
|
}
|
|
}
|
|
|
|
if( Field->m_FieldId == VALUE && Field->m_Text == m_aliasName )
|
|
m_aliasName = Text;
|
|
|
|
if( !Field->InEditMode() )
|
|
{
|
|
SaveCopyInUndoList( parent );
|
|
( (LIB_DRAW_ITEM*) Field )->Draw( DrawPanel, DC, wxPoint( 0, 0 ), -1, g_XorMode,
|
|
&fieldText, DefaultTransform );
|
|
}
|
|
|
|
Field->SetText( Text );
|
|
|
|
if( !Field->InEditMode() )
|
|
{
|
|
fieldText = Field->GetFullText( m_unit );
|
|
( (LIB_DRAW_ITEM*) Field )->Draw( DrawPanel, DC, wxPoint( 0, 0 ), -1, g_XorMode,
|
|
&fieldText, DefaultTransform );
|
|
}
|
|
|
|
OnModify();
|
|
UpdateAliasSelectList();
|
|
}
|
|
|
|
|
|
LIB_DRAW_ITEM* WinEDA_LibeditFrame::LocateItemUsingCursor()
|
|
{
|
|
if( m_component == NULL )
|
|
return NULL;
|
|
|
|
if( ( m_drawItem == NULL ) || ( m_drawItem->m_Flags == 0 ) )
|
|
{
|
|
m_drawItem = m_component->LocateDrawItem( m_unit, m_convert, TYPE_NOT_INIT,
|
|
GetScreen()->m_MousePosition );
|
|
|
|
if( m_drawItem == NULL )
|
|
m_drawItem = m_component->LocateDrawItem( m_unit, m_convert, TYPE_NOT_INIT,
|
|
GetScreen()->m_Curseur );
|
|
}
|
|
|
|
return m_drawItem;
|
|
}
|