342 lines
11 KiB
C++
342 lines
11 KiB
C++
/**********************************************/
|
|
/* EESchema - symbtext.cpp for Library Editor */
|
|
/**********************************************/
|
|
|
|
/* Menu et routines de creation, modification, suppression de textes
|
|
du type symbole
|
|
(textes autres que Fields)
|
|
*/
|
|
|
|
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
|
|
#pragma implementation "symbtext.h"
|
|
#endif
|
|
|
|
#include "fctsys.h"
|
|
#include "gr_basic.h"
|
|
|
|
#include "common.h"
|
|
#include "program.h"
|
|
#include "libcmp.h"
|
|
#include "general.h"
|
|
|
|
#include "symbtext.h"
|
|
|
|
#include "protos.h"
|
|
|
|
|
|
|
|
/*!
|
|
* WinEDA_bodytext_PropertiesFrame type definition
|
|
*/
|
|
|
|
IMPLEMENT_DYNAMIC_CLASS( WinEDA_bodytext_PropertiesFrame, wxDialog )
|
|
|
|
/*!
|
|
* WinEDA_bodytext_PropertiesFrame event table definition
|
|
*/
|
|
|
|
BEGIN_EVENT_TABLE( WinEDA_bodytext_PropertiesFrame, wxDialog )
|
|
|
|
////@begin WinEDA_bodytext_PropertiesFrame event table entries
|
|
EVT_BUTTON( wxID_OK, WinEDA_bodytext_PropertiesFrame::OnOkClick )
|
|
|
|
EVT_BUTTON( wxID_CANCEL, WinEDA_bodytext_PropertiesFrame::OnCancelClick )
|
|
|
|
////@end WinEDA_bodytext_PropertiesFrame event table entries
|
|
|
|
END_EVENT_TABLE()
|
|
|
|
/*!
|
|
* WinEDA_bodytext_PropertiesFrame constructors
|
|
*/
|
|
|
|
WinEDA_bodytext_PropertiesFrame::WinEDA_bodytext_PropertiesFrame( )
|
|
{
|
|
}
|
|
|
|
WinEDA_bodytext_PropertiesFrame::WinEDA_bodytext_PropertiesFrame( WinEDA_LibeditFrame* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
|
|
{
|
|
LibDrawText * CurrentText = (LibDrawText *) CurrentDrawItem;
|
|
wxString msg;
|
|
|
|
m_Parent = parent;
|
|
Create(parent, id, caption, pos, size, style);
|
|
|
|
if ( CurrentText )
|
|
{
|
|
msg = ReturnStringFromValue(g_UnitMetric, CurrentText->m_Size.x, m_Parent->m_InternalUnits);
|
|
m_Size->SetValue(msg);
|
|
m_NewText->SetValue(CurrentText->m_Text);
|
|
if ( CurrentText->m_Unit == 0 ) m_CommonUnit->SetValue(TRUE);
|
|
if ( CurrentText->m_Convert == 0 ) m_CommonConvert->SetValue(TRUE);
|
|
if ( CurrentText->m_Horiz == TEXT_ORIENT_VERT ) m_Orient->SetValue(TRUE);
|
|
}
|
|
else
|
|
{
|
|
msg = ReturnStringFromValue(g_UnitMetric, g_LastTextSize, m_Parent->m_InternalUnits);
|
|
m_Size->SetValue(msg);
|
|
if ( ! g_FlDrawSpecificUnit ) m_CommonUnit->SetValue(TRUE);
|
|
if ( ! g_FlDrawSpecificConvert ) m_CommonConvert->SetValue(TRUE);
|
|
if ( g_LastTextOrient == TEXT_ORIENT_VERT ) m_Orient->SetValue(TRUE);
|
|
}
|
|
|
|
msg = m_SizeText->GetLabel() + ReturnUnitSymbol();
|
|
m_SizeText->SetLabel(msg);
|
|
}
|
|
|
|
/*!
|
|
* WinEDA_bodytext_PropertiesFrame creator
|
|
*/
|
|
|
|
bool WinEDA_bodytext_PropertiesFrame::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
|
|
{
|
|
////@begin WinEDA_bodytext_PropertiesFrame member initialisation
|
|
m_NewText = NULL;
|
|
m_SizeText = NULL;
|
|
m_Size = NULL;
|
|
m_CommonUnit = NULL;
|
|
m_CommonConvert = NULL;
|
|
m_Orient = NULL;
|
|
////@end WinEDA_bodytext_PropertiesFrame member initialisation
|
|
|
|
////@begin WinEDA_bodytext_PropertiesFrame creation
|
|
SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS);
|
|
wxDialog::Create( parent, id, caption, pos, size, style );
|
|
|
|
CreateControls();
|
|
GetSizer()->Fit(this);
|
|
GetSizer()->SetSizeHints(this);
|
|
Centre();
|
|
////@end WinEDA_bodytext_PropertiesFrame creation
|
|
return true;
|
|
}
|
|
|
|
/*!
|
|
* Control creation for WinEDA_bodytext_PropertiesFrame
|
|
*/
|
|
|
|
void WinEDA_bodytext_PropertiesFrame::CreateControls()
|
|
{
|
|
SetFont(*g_DialogFont);
|
|
|
|
////@begin WinEDA_bodytext_PropertiesFrame content construction
|
|
// Generated by DialogBlocks, 12/02/2006 15:02:01 (unregistered)
|
|
|
|
WinEDA_bodytext_PropertiesFrame* itemDialog1 = this;
|
|
|
|
wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
|
|
itemDialog1->SetSizer(itemBoxSizer2);
|
|
|
|
wxStaticBox* itemStaticBoxSizer3Static = new wxStaticBox(itemDialog1, wxID_ANY, _(" Text : "));
|
|
wxStaticBoxSizer* itemStaticBoxSizer3 = new wxStaticBoxSizer(itemStaticBoxSizer3Static, wxVERTICAL);
|
|
itemBoxSizer2->Add(itemStaticBoxSizer3, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
|
|
|
|
wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
|
|
itemStaticBoxSizer3->Add(itemBoxSizer4, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
|
|
|
|
wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxVERTICAL);
|
|
itemBoxSizer4->Add(itemBoxSizer5, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
|
|
|
|
wxStaticText* itemStaticText6 = new wxStaticText( itemDialog1, wxID_STATIC, _("Name:"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
|
|
|
|
m_NewText = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxSize(250, -1), 0 );
|
|
itemBoxSizer5->Add(m_NewText, 0, wxALIGN_LEFT|wxALL, 5);
|
|
|
|
wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxVERTICAL);
|
|
itemBoxSizer4->Add(itemBoxSizer8, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
|
|
|
|
m_SizeText = new wxStaticText( itemDialog1, wxID_STATIC, _("Size:"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
itemBoxSizer8->Add(m_SizeText, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
|
|
|
|
m_Size = new wxTextCtrl( itemDialog1, ID_TEXTCTRL1, _T(""), wxDefaultPosition, wxDefaultSize, 0 );
|
|
itemBoxSizer8->Add(m_Size, 0, wxALIGN_LEFT|wxALL, 5);
|
|
|
|
wxStaticBox* itemStaticBoxSizer11Static = new wxStaticBox(itemDialog1, wxID_ANY, _(" Text Options : "));
|
|
wxStaticBoxSizer* itemStaticBoxSizer11 = new wxStaticBoxSizer(itemStaticBoxSizer11Static, wxVERTICAL);
|
|
itemStaticBoxSizer3->Add(itemStaticBoxSizer11, 0, wxALIGN_LEFT|wxALL, 5);
|
|
|
|
m_CommonUnit = new wxCheckBox( itemDialog1, ID_CHECKBOX, _("Common to Units"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
|
|
m_CommonUnit->SetValue(false);
|
|
itemStaticBoxSizer11->Add(m_CommonUnit, 0, wxALIGN_LEFT|wxALL, 5);
|
|
|
|
m_CommonConvert = new wxCheckBox( itemDialog1, ID_CHECKBOX1, _("Common to convert"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
|
|
m_CommonConvert->SetValue(false);
|
|
itemStaticBoxSizer11->Add(m_CommonConvert, 0, wxALIGN_LEFT|wxALL, 5);
|
|
|
|
m_Orient = new wxCheckBox( itemDialog1, ID_CHECKBOX2, _("Vertical"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE );
|
|
m_Orient->SetValue(false);
|
|
itemStaticBoxSizer11->Add(m_Orient, 0, wxALIGN_LEFT|wxALL, 5);
|
|
|
|
wxBoxSizer* itemBoxSizer15 = new wxBoxSizer(wxVERTICAL);
|
|
itemBoxSizer2->Add(itemBoxSizer15, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
|
|
|
|
wxButton* itemButton16 = new wxButton( itemDialog1, wxID_OK, _("&OK"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
itemButton16->SetForegroundColour(wxColour(206, 0, 0));
|
|
itemBoxSizer15->Add(itemButton16, 0, wxGROW|wxALL, 5);
|
|
|
|
wxButton* itemButton17 = new wxButton( itemDialog1, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
itemButton17->SetForegroundColour(wxColour(0, 0, 255));
|
|
itemBoxSizer15->Add(itemButton17, 0, wxGROW|wxALL, 5);
|
|
|
|
////@end WinEDA_bodytext_PropertiesFrame content construction
|
|
}
|
|
|
|
/*!
|
|
* Should we show tooltips?
|
|
*/
|
|
|
|
bool WinEDA_bodytext_PropertiesFrame::ShowToolTips()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/*!
|
|
* Get bitmap resources
|
|
*/
|
|
|
|
wxBitmap WinEDA_bodytext_PropertiesFrame::GetBitmapResource( const wxString& name )
|
|
{
|
|
// Bitmap retrieval
|
|
////@begin WinEDA_bodytext_PropertiesFrame bitmap retrieval
|
|
wxUnusedVar(name);
|
|
return wxNullBitmap;
|
|
////@end WinEDA_bodytext_PropertiesFrame bitmap retrieval
|
|
}
|
|
|
|
/*!
|
|
* Get icon resources
|
|
*/
|
|
|
|
wxIcon WinEDA_bodytext_PropertiesFrame::GetIconResource( const wxString& name )
|
|
{
|
|
// Icon retrieval
|
|
////@begin WinEDA_bodytext_PropertiesFrame icon retrieval
|
|
wxUnusedVar(name);
|
|
return wxNullIcon;
|
|
////@end WinEDA_bodytext_PropertiesFrame icon retrieval
|
|
}
|
|
/*!
|
|
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK
|
|
*/
|
|
|
|
void WinEDA_bodytext_PropertiesFrame::OnOkClick( wxCommandEvent& event )
|
|
{
|
|
bodytext_PropertiesAccept(event);
|
|
Close();
|
|
}
|
|
|
|
/*!
|
|
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
|
|
*/
|
|
|
|
void WinEDA_bodytext_PropertiesFrame::OnCancelClick( wxCommandEvent& event )
|
|
{
|
|
////@begin wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL in WinEDA_bodytext_PropertiesFrame.
|
|
// Before editing this code, remove the block markers.
|
|
event.Skip();
|
|
////@end wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL in WinEDA_bodytext_PropertiesFrame.
|
|
}
|
|
|
|
|
|
/***************************************************************************/
|
|
void WinEDA_bodytext_PropertiesFrame::bodytext_PropertiesAccept(wxCommandEvent& event)
|
|
/***************************************************************************/
|
|
/* Met a jour les differents parametres pour le composant en cours d'edition
|
|
*/
|
|
{
|
|
LibDrawText* Text = (LibDrawText*) CurrentDrawItem;
|
|
wxString Line;
|
|
|
|
Line = m_NewText->GetValue();
|
|
g_LastTextOrient = m_Orient->GetValue() ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ;
|
|
wxString msg = m_Size->GetValue();
|
|
g_LastTextSize = ReturnValueFromString(g_UnitMetric, msg, m_Parent->m_InternalUnits);
|
|
g_FlDrawSpecificConvert = m_CommonConvert->GetValue() ? FALSE : TRUE;
|
|
g_FlDrawSpecificUnit = m_CommonUnit->GetValue() ? FALSE : TRUE;
|
|
|
|
if ( Text ) // Set Pin Name & Num
|
|
{
|
|
if ( ! Line.IsEmpty() ) Text->m_Text = Line;
|
|
else Text->m_Text = wxT("[null]"); // **** A REVOIR ***
|
|
Text->m_Size.x = Text->m_Size.y = g_LastTextSize;
|
|
Text->m_Horiz = g_LastTextOrient;
|
|
if( g_FlDrawSpecificUnit ) Text->m_Unit = CurrentUnit;
|
|
else Text->m_Unit = 0;
|
|
if( g_FlDrawSpecificConvert ) Text->m_Convert = CurrentConvert;
|
|
else Text->m_Convert = 0;
|
|
}
|
|
Close();
|
|
|
|
if ( CurrentDrawItem )
|
|
CurrentDrawItem->Display_Infos_DrawEntry(m_Parent);
|
|
}
|
|
|
|
|
|
|
|
/*******************************************************/
|
|
void WinEDA_LibeditFrame::EditSymbolText(wxDC * DC,
|
|
LibEDA_BaseStruct * DrawItem)
|
|
/*******************************************************/
|
|
{
|
|
int DrawMode = g_XorMode;
|
|
|
|
if ( DrawItem == NULL ) return;
|
|
if ( DrawItem->Type() != COMPONENT_GRAPHIC_TEXT_DRAW_TYPE ) return;
|
|
|
|
/* Effacement ancien texte */
|
|
if( ((LibDrawText*)DrawItem)->m_Text && DC)
|
|
DrawLibraryDrawStruct(DrawPanel, DC, CurrentLibEntry, 0 , 0,
|
|
DrawItem, CurrentUnit, DrawMode);
|
|
|
|
|
|
WinEDA_bodytext_PropertiesFrame * frame =
|
|
new WinEDA_bodytext_PropertiesFrame(this);
|
|
frame->ShowModal(); frame->Destroy();
|
|
|
|
m_CurrentScreen->SetModify();
|
|
|
|
/* Affichage nouveau texte */
|
|
if( ((LibDrawText*)DrawItem)->m_Text && DC)
|
|
{
|
|
if ( (DrawItem->m_Flags & IS_MOVED) == 0 )
|
|
DrawMode = GR_DEFAULT_DRAWMODE;
|
|
DrawLibraryDrawStruct(DrawPanel, DC, CurrentLibEntry, 0 , 0,
|
|
DrawItem, CurrentUnit, DrawMode);
|
|
}
|
|
}
|
|
|
|
|
|
/****************************************************/
|
|
void WinEDA_LibeditFrame::RotateSymbolText(wxDC * DC)
|
|
/****************************************************/
|
|
/*
|
|
90 deg Graphic text Rotation .
|
|
*/
|
|
{
|
|
LibDrawText * DrawItem = (LibDrawText *) CurrentDrawItem;
|
|
|
|
if(DrawItem == NULL) return;
|
|
|
|
/* Erase drawing (can be within a move command) */
|
|
if ( DrawPanel->ManageCurseur == NULL)
|
|
DrawLibraryDrawStruct(DrawPanel, DC, CurrentLibEntry, 0 , 0,
|
|
DrawItem, CurrentUnit, g_XorMode);
|
|
else DrawPanel->ManageCurseur(DrawPanel, DC, FALSE);
|
|
|
|
if( DrawItem->m_Horiz == TEXT_ORIENT_HORIZ)
|
|
DrawItem->m_Horiz = TEXT_ORIENT_VERT;
|
|
else DrawItem->m_Horiz = TEXT_ORIENT_HORIZ;
|
|
|
|
m_CurrentScreen->SetModify();
|
|
|
|
/* Redraw item with new orient */
|
|
if ( DrawPanel->ManageCurseur == NULL)
|
|
DrawLibraryDrawStruct(DrawPanel, DC, CurrentLibEntry, 0 , 0,
|
|
DrawItem, CurrentUnit, GR_DEFAULT_DRAWMODE);
|
|
else DrawPanel->ManageCurseur(DrawPanel, DC, FALSE);
|
|
|
|
}
|
|
|
|
|