702 lines
19 KiB
C++
702 lines
19 KiB
C++
/****************************/
|
|
/* EESchema - libframe.cpp */
|
|
/****************************/
|
|
|
|
/* Gestion de la frame d'edition des composants en librairie
|
|
*/
|
|
|
|
#include "fctsys.h"
|
|
#include "gr_basic.h"
|
|
|
|
#include "common.h"
|
|
#include "program.h"
|
|
#include "libcmp.h"
|
|
#include "general.h"
|
|
|
|
#include "bitmaps.h"
|
|
#include "protos.h"
|
|
|
|
#include "id.h"
|
|
|
|
#include "libedit.xpm"
|
|
|
|
/*****************************/
|
|
/* class WinEDA_LibeditFrame */
|
|
/*****************************/
|
|
BEGIN_EVENT_TABLE(WinEDA_LibeditFrame, wxFrame)
|
|
COMMON_EVENTS_DRAWFRAME
|
|
|
|
EVT_CLOSE(WinEDA_LibeditFrame::OnCloseWindow)
|
|
EVT_SIZE(WinEDA_LibeditFrame::OnSize)
|
|
|
|
EVT_TOOL_RANGE(ID_ZOOM_PLUS_BUTT, ID_ZOOM_PAGE_BUTT,
|
|
WinEDA_LibeditFrame::Process_Zoom)
|
|
|
|
// Tools et boutons de Libedit:
|
|
|
|
/* Main horizontal toolbar */
|
|
EVT_TOOL_RANGE( ID_LIBEDIT_START_H_TOOL, ID_LIBEDIT_END_H_TOOL,
|
|
WinEDA_LibeditFrame::Process_Special_Functions)
|
|
EVT_KICAD_CHOICEBOX(ID_LIBEDIT_SELECT_PART_NUMBER,
|
|
WinEDA_LibeditFrame::Process_Special_Functions)
|
|
EVT_KICAD_CHOICEBOX(ID_LIBEDIT_SELECT_ALIAS,
|
|
WinEDA_LibeditFrame::Process_Special_Functions)
|
|
|
|
/* Right Vertical toolbar */
|
|
EVT_TOOL( ID_NO_SELECT_BUTT,WinEDA_LibeditFrame::Process_Special_Functions)
|
|
EVT_TOOL_RANGE( ID_LIBEDIT_START_V_TOOL, ID_LIBEDIT_END_V_TOOL,
|
|
WinEDA_LibeditFrame::Process_Special_Functions)
|
|
|
|
/* PopUp events and commands: */
|
|
EVT_MENU_RANGE(ID_POPUP_START_RANGE, ID_POPUP_END_RANGE,
|
|
WinEDA_LibeditFrame::Process_Special_Functions )
|
|
|
|
// Annulation de commande en cours
|
|
EVT_MENU_RANGE(ID_POPUP_GENERAL_START_RANGE, ID_POPUP_GENERAL_END_RANGE,
|
|
WinEDA_LibeditFrame::Process_Special_Functions )
|
|
|
|
// PopUp Menus pour Zooms traités dans drawpanel.cpp
|
|
|
|
|
|
END_EVENT_TABLE()
|
|
|
|
|
|
WinEDA_LibeditFrame::WinEDA_LibeditFrame(wxWindow * father, WinEDA_App *parent,
|
|
const wxString & title, const wxPoint& pos, const wxSize& size):
|
|
WinEDA_DrawFrame(father, LIBEDITOR_FRAME, parent, title, pos, size)
|
|
{
|
|
m_FrameName = wxT("LibeditFrame");
|
|
m_Draw_Axis = TRUE; // TRUE pour avoir les axes dessines
|
|
m_Draw_Grid = TRUE; // TRUE pour avoir la axes dessinee
|
|
|
|
// Give an icon
|
|
SetIcon(wxIcon(libedit_xpm));
|
|
m_CurrentScreen = ScreenLib;
|
|
GetSettings();
|
|
SetSize(m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y);
|
|
if ( DrawPanel ) DrawPanel-> m_Block_Enable = TRUE;
|
|
ReCreateHToolbar();
|
|
ReCreateVToolbar();
|
|
DisplayLibInfos();
|
|
Show(TRUE);
|
|
}
|
|
|
|
/**********************************************/
|
|
WinEDA_LibeditFrame::~WinEDA_LibeditFrame()
|
|
/**********************************************/
|
|
{
|
|
m_Parent->LibeditFrame = NULL;
|
|
m_CurrentScreen = ScreenSch;
|
|
|
|
}
|
|
|
|
/***********************************************************/
|
|
void WinEDA_LibeditFrame::OnCloseWindow(wxCloseEvent & Event)
|
|
/***********************************************************/
|
|
{
|
|
LibraryStruct *Lib;
|
|
|
|
if( m_CurrentScreen->IsModify() )
|
|
{
|
|
if( ! IsOK(this, _("LibEdit: Part modified!, Continue ?") ) )
|
|
{
|
|
Event.Veto(); return;
|
|
}
|
|
else m_CurrentScreen->ClrModify();
|
|
}
|
|
|
|
for (Lib = g_LibraryList; Lib != NULL; Lib = Lib->m_Pnext)
|
|
{
|
|
if( Lib->m_Modified )
|
|
{
|
|
wxString msg;
|
|
msg.Printf( _("Library %s modified!, Continue ?"), Lib->m_Name.GetData());
|
|
if( ! IsOK(this, msg) )
|
|
{
|
|
Event.Veto(); return;
|
|
}
|
|
}
|
|
}
|
|
|
|
SaveSettings();
|
|
Destroy();
|
|
}
|
|
|
|
|
|
/******************************************/
|
|
void WinEDA_LibeditFrame::SetToolbars()
|
|
/******************************************/
|
|
/* Enable or disable tools of the differents toolbars,
|
|
according to the current conditions or options
|
|
*/
|
|
{
|
|
|
|
if( m_HToolBar == NULL ) return;
|
|
|
|
if ( CurrentLib == NULL )
|
|
{
|
|
if ( m_HToolBar ) m_HToolBar->EnableTool(ID_LIBEDIT_SAVE_CURRENT_LIB,FALSE);
|
|
}
|
|
else
|
|
{
|
|
if ( m_HToolBar ) m_HToolBar->EnableTool(ID_LIBEDIT_SAVE_CURRENT_LIB,TRUE);
|
|
}
|
|
|
|
if ( CurrentLibEntry == NULL )
|
|
{
|
|
if ( m_HToolBar )
|
|
{
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_IMPORT_PART,TRUE);
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_EXPORT_PART,FALSE);
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART,FALSE);
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_SAVE_CURRENT_PART,FALSE);
|
|
m_HToolBar->EnableTool(ID_DE_MORGAN_CONVERT_BUTT, FALSE);
|
|
m_HToolBar->EnableTool(ID_DE_MORGAN_NORMAL_BUTT, FALSE);
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, FALSE);
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_VIEW_DOC, FALSE);
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_CHECK_PART, FALSE);
|
|
m_SelpartBox->Enable( FALSE);
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_UNDO,FALSE);
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_REDO,FALSE);
|
|
}
|
|
g_EditPinByPinIsOn = FALSE;
|
|
m_HToolBar->ToggleTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn);
|
|
|
|
if ( m_VToolBar )
|
|
{
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_BODY_TEXT_BUTT, FALSE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_BODY_LINE_BUTT, FALSE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_BODY_RECT_BUTT, FALSE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_BODY_CIRCLE_BUTT, FALSE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_BODY_ARC_BUTT, FALSE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_DELETE_ITEM_BUTT, FALSE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_ANCHOR_ITEM_BUTT, FALSE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_IMPORT_BODY_BUTT, FALSE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_EXPORT_BODY_BUTT, FALSE);
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
if ( m_HToolBar )
|
|
{
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_IMPORT_PART,TRUE);
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_EXPORT_PART,TRUE);
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART,TRUE);
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_SAVE_CURRENT_PART,TRUE);
|
|
if ( (CurrentLibEntry->m_UnitCount > 1) || g_AsDeMorgan )
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, TRUE);
|
|
else
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, FALSE);
|
|
|
|
m_HToolBar->ToggleTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn);
|
|
|
|
m_HToolBar->EnableTool(ID_DE_MORGAN_CONVERT_BUTT, g_AsDeMorgan);
|
|
m_HToolBar->EnableTool(ID_DE_MORGAN_NORMAL_BUTT, g_AsDeMorgan);
|
|
/* Enable the "get doc" tool */
|
|
bool enable_dtool = FALSE;
|
|
if ( ! CurrentAliasName.IsEmpty() )
|
|
{
|
|
int AliasLocation = LocateAlias( CurrentLibEntry->m_AliasList, CurrentAliasName);
|
|
if ( AliasLocation >= 0 )
|
|
if ( ! CurrentLibEntry->m_AliasList[AliasLocation+ALIAS_DOC_FILENAME].IsEmpty() )
|
|
enable_dtool = TRUE;
|
|
}
|
|
else if ( ! CurrentLibEntry->m_DocFile.IsEmpty() ) enable_dtool = TRUE;
|
|
if ( enable_dtool ) m_HToolBar->EnableTool(ID_LIBEDIT_VIEW_DOC, TRUE);
|
|
else m_HToolBar->EnableTool(ID_LIBEDIT_VIEW_DOC, FALSE);
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_CHECK_PART, TRUE);
|
|
m_SelpartBox->Enable( (CurrentLibEntry->m_UnitCount > 1 ) ? TRUE : FALSE);
|
|
|
|
if ( GetScreen() )
|
|
{
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_UNDO,GetScreen()->m_UndoList);
|
|
m_HToolBar->EnableTool(ID_LIBEDIT_REDO,GetScreen()->m_RedoList);
|
|
}
|
|
}
|
|
|
|
if ( m_VToolBar )
|
|
{
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_BODY_TEXT_BUTT, TRUE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_BODY_LINE_BUTT, TRUE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_BODY_RECT_BUTT, TRUE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_BODY_CIRCLE_BUTT, TRUE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_BODY_ARC_BUTT, TRUE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_DELETE_ITEM_BUTT, TRUE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_ANCHOR_ITEM_BUTT, TRUE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_IMPORT_BODY_BUTT, TRUE);
|
|
m_VToolBar->EnableTool(ID_LIBEDIT_EXPORT_BODY_BUTT, TRUE);
|
|
}
|
|
}
|
|
|
|
DisplayUnitsMsg();
|
|
}
|
|
|
|
/**************************************/
|
|
int WinEDA_LibeditFrame::BestZoom()
|
|
/**************************************/
|
|
{
|
|
int dx, dy, ii,jj ;
|
|
int bestzoom;
|
|
wxSize size;
|
|
EDA_Rect BoundaryBox;
|
|
|
|
if ( CurrentLibEntry )
|
|
{
|
|
BoundaryBox = CurrentLibEntry->GetBoundaryBox(CurrentUnit, CurrentConvert);
|
|
dx = BoundaryBox.GetWidth();
|
|
dy = BoundaryBox.GetHeight();
|
|
}
|
|
|
|
else
|
|
{
|
|
dx = m_CurrentScreen->m_CurrentSheet->m_Size.x;
|
|
dy = m_CurrentScreen->m_CurrentSheet->m_Size.y;
|
|
}
|
|
|
|
size = DrawPanel->GetClientSize();
|
|
size.x -= 60; // Pour marges haut et bas
|
|
ii = abs (dx / size.x);
|
|
jj = abs (dy / size.y);
|
|
|
|
/* determination du zoom existant le plus proche */
|
|
bestzoom = MAX(ii, jj) + 1;
|
|
|
|
if ( CurrentLibEntry )
|
|
{
|
|
m_CurrentScreen->m_Curseur = BoundaryBox.Centre();
|
|
}
|
|
else
|
|
{
|
|
m_CurrentScreen->m_Curseur.x = 0;
|
|
m_CurrentScreen->m_Curseur.y = 0;
|
|
}
|
|
|
|
return(bestzoom);
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
void WinEDA_LibeditFrame::Process_Special_Functions(wxCommandEvent& event)
|
|
/*************************************************************************/
|
|
{
|
|
int id = event.GetId();
|
|
wxPoint pos;
|
|
wxClientDC dc(DrawPanel);
|
|
|
|
DrawPanel->m_IgnoreMouseEvents = TRUE;
|
|
|
|
DrawPanel->PrepareGraphicContext(&dc);
|
|
|
|
wxGetMousePosition(&pos.x, &pos.y);
|
|
pos.y += 20;
|
|
|
|
switch ( id ) // Arret de la commande de déplacement en cours
|
|
{
|
|
case ID_POPUP_LIBEDIT_END_CREATE_ITEM:
|
|
case ID_POPUP_LIBEDIT_PIN_EDIT:
|
|
case ID_POPUP_LIBEDIT_BODY_EDIT_ITEM:
|
|
case ID_POPUP_LIBEDIT_FIELD_ROTATE_ITEM:
|
|
case ID_POPUP_LIBEDIT_FIELD_EDIT_ITEM:
|
|
case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINSIZE_ITEM:
|
|
case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNAMESIZE_ITEM:
|
|
case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNUMSIZE_ITEM:
|
|
case ID_POPUP_LIBEDIT_CANCEL_EDITING :
|
|
case ID_POPUP_ZOOM_BLOCK:
|
|
case ID_POPUP_DELETE_BLOCK:
|
|
case ID_POPUP_COPY_BLOCK:
|
|
case ID_POPUP_SELECT_ITEMS_BLOCK:
|
|
case ID_POPUP_INVERT_BLOCK:
|
|
case ID_POPUP_PLACE_BLOCK:
|
|
case ID_POPUP_LIBEDIT_DELETE_CURRENT_POLY_SEGMENT:
|
|
case ID_POPUP_LIBEDIT_ROTATE_GRAPHIC_TEXT:
|
|
break;
|
|
|
|
case ID_POPUP_LIBEDIT_DELETE_ITEM:
|
|
if ( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur )
|
|
DrawPanel->ForceCloseManageCurseur(DrawPanel, &dc);
|
|
break;
|
|
|
|
default:
|
|
if ( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur )
|
|
DrawPanel->ForceCloseManageCurseur(DrawPanel, &dc);
|
|
SetToolID( 0, wxCURSOR_ARROW, wxEmptyString );
|
|
break;
|
|
}
|
|
|
|
switch ( id )
|
|
{
|
|
case ID_LIBEDIT_SAVE_CURRENT_LIB:
|
|
if( m_CurrentScreen->IsModify() )
|
|
{
|
|
if( IsOK(this, _("Include last component changes") ) )
|
|
SaveOnePartInMemory();
|
|
}
|
|
SaveActiveLibrary();
|
|
break;
|
|
|
|
case ID_LIBEDIT_NEW_PART:
|
|
{
|
|
g_EditPinByPinIsOn = FALSE;
|
|
LibItemToRepeat = NULL;
|
|
CreateNewLibraryPart();
|
|
GetScreen()->ClearUndoRedoList();
|
|
ReDrawPanel();
|
|
SetToolbars();
|
|
break;
|
|
}
|
|
|
|
case ID_LIBEDIT_SELECT_CURRENT_LIB:
|
|
SelectActiveLibrary();
|
|
break;
|
|
|
|
case ID_LIBEDIT_SELECT_PART:
|
|
LibItemToRepeat = NULL;
|
|
if ( LoadOneLibraryPart() )
|
|
{
|
|
g_EditPinByPinIsOn = FALSE;
|
|
GetScreen()->ClearUndoRedoList();
|
|
SetToolbars();
|
|
}
|
|
ReDrawPanel();
|
|
break;
|
|
|
|
case ID_LIBEDIT_SAVE_CURRENT_PART:
|
|
SaveOnePartInMemory();
|
|
break;
|
|
|
|
case ID_LIBEDIT_GET_FRAME_EDIT_PART:
|
|
InstallLibeditFrame(pos);
|
|
break;
|
|
|
|
case ID_LIBEDIT_DELETE_PART:
|
|
LibItemToRepeat = NULL;
|
|
DeleteOnePart();
|
|
break;
|
|
|
|
case ID_LIBEDIT_IMPORT_PART:
|
|
LibItemToRepeat = NULL;
|
|
ImportOnePart();
|
|
GetScreen()->ClearUndoRedoList();
|
|
ReDrawPanel();
|
|
break;
|
|
|
|
case ID_LIBEDIT_EXPORT_PART:
|
|
ExportOnePart(FALSE);
|
|
break;
|
|
|
|
case ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART:
|
|
ExportOnePart(TRUE);
|
|
break;
|
|
|
|
case ID_LIBEDIT_CHECK_PART :
|
|
if ( CurrentLibEntry )
|
|
if ( TestPins(CurrentLibEntry) == FALSE )
|
|
DisplayInfo(this, _(" Tst Pins OK!") );
|
|
break;
|
|
|
|
case ID_DE_MORGAN_NORMAL_BUTT:
|
|
m_HToolBar->ToggleTool(ID_DE_MORGAN_NORMAL_BUTT, TRUE);
|
|
m_HToolBar->ToggleTool(ID_DE_MORGAN_CONVERT_BUTT, FALSE);
|
|
LibItemToRepeat = NULL;
|
|
CurrentConvert = 1;
|
|
ReDrawPanel();
|
|
break;
|
|
|
|
case ID_DE_MORGAN_CONVERT_BUTT:
|
|
m_HToolBar->ToggleTool(ID_DE_MORGAN_NORMAL_BUTT, FALSE);
|
|
m_HToolBar->ToggleTool(ID_DE_MORGAN_CONVERT_BUTT, TRUE);
|
|
LibItemToRepeat = NULL;
|
|
CurrentConvert = 2;
|
|
ReDrawPanel();
|
|
break;
|
|
|
|
case ID_LIBEDIT_VIEW_DOC:
|
|
if ( CurrentLibEntry )
|
|
{
|
|
wxString docfilename;
|
|
if ( ! CurrentAliasName.IsEmpty() )
|
|
{
|
|
int AliasLocation = LocateAlias( CurrentLibEntry->m_AliasList, CurrentAliasName);
|
|
if ( AliasLocation >= 0 )
|
|
docfilename = CurrentLibEntry->m_AliasList[AliasLocation+ALIAS_DOC_FILENAME];
|
|
}
|
|
else docfilename = CurrentLibEntry->m_DocFile;
|
|
|
|
if ( ! docfilename.IsEmpty() )
|
|
GetAssociatedDocument(this, g_RealLibDirBuffer, docfilename);
|
|
}
|
|
break;
|
|
|
|
case ID_LIBEDIT_EDIT_PIN_BY_PIN:
|
|
g_EditPinByPinIsOn = g_EditPinByPinIsOn ? FALSE : TRUE;
|
|
m_HToolBar->ToggleTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn);
|
|
break;
|
|
|
|
case ID_LIBEDIT_SELECT_PART_NUMBER:
|
|
{
|
|
int ii = m_SelpartBox->GetChoice();
|
|
if ( ii < 0 ) return;
|
|
LibItemToRepeat = NULL;
|
|
CurrentUnit = ii + 1;
|
|
ReDrawPanel();
|
|
}
|
|
break;
|
|
|
|
case ID_LIBEDIT_SELECT_ALIAS:
|
|
{
|
|
int ii = m_SelAliasBox->GetChoice();
|
|
if ( ii < 0 ) return;
|
|
LibItemToRepeat = NULL;
|
|
if ( ii > 0 ) CurrentAliasName = m_SelAliasBox->GetValue();
|
|
else CurrentAliasName.Empty();
|
|
ReDrawPanel();
|
|
}
|
|
break;
|
|
|
|
case ID_POPUP_LIBEDIT_PIN_EDIT:
|
|
InstallPineditFrame(this, &dc, pos);
|
|
break;
|
|
|
|
case ID_LIBEDIT_PIN_BUTT:
|
|
if ( CurrentLibEntry )
|
|
{
|
|
SetToolID( id, wxCURSOR_PENCIL, _("Add Pin"));
|
|
}
|
|
else
|
|
{
|
|
SetToolID( id, wxCURSOR_ARROW, _("Set Pin Opt"));
|
|
InstallPineditFrame(this, &dc, pos);
|
|
SetToolID( 0, wxCURSOR_ARROW, wxEmptyString);
|
|
}
|
|
break;
|
|
|
|
case ID_POPUP_LIBEDIT_CANCEL_EDITING :
|
|
if ( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur )
|
|
DrawPanel->ForceCloseManageCurseur(DrawPanel, &dc);
|
|
else
|
|
SetToolID( 0, wxCURSOR_ARROW, wxEmptyString);
|
|
break;
|
|
|
|
case ID_NO_SELECT_BUTT:
|
|
SetToolID( 0, wxCURSOR_ARROW, wxEmptyString);
|
|
break;
|
|
|
|
case ID_LIBEDIT_BODY_TEXT_BUTT:
|
|
SetToolID( id, wxCURSOR_PENCIL, _("Add Text"));
|
|
break;
|
|
|
|
case ID_LIBEDIT_BODY_RECT_BUTT:
|
|
SetToolID( id, wxCURSOR_PENCIL, _("Add Rectangle"));
|
|
break;
|
|
|
|
case ID_LIBEDIT_BODY_CIRCLE_BUTT:
|
|
SetToolID( id, wxCURSOR_PENCIL, _("Add Circle"));
|
|
break;
|
|
|
|
case ID_LIBEDIT_BODY_ARC_BUTT:
|
|
SetToolID( id, wxCURSOR_PENCIL, _("Add Arc"));
|
|
break;
|
|
|
|
case ID_LIBEDIT_BODY_LINE_BUTT:
|
|
SetToolID( id, wxCURSOR_PENCIL, _("Add Line"));
|
|
break;
|
|
|
|
case ID_LIBEDIT_ANCHOR_ITEM_BUTT :
|
|
SetToolID( id, wxCURSOR_HAND, _("Anchor"));
|
|
break;
|
|
|
|
case ID_LIBEDIT_IMPORT_BODY_BUTT :
|
|
SetToolID( id, wxCURSOR_ARROW, _("Import"));
|
|
LoadOneSymbol(&dc);
|
|
SetToolID( 0, wxCURSOR_ARROW, wxEmptyString);
|
|
break;
|
|
|
|
case ID_LIBEDIT_EXPORT_BODY_BUTT :
|
|
SetToolID( id, wxCURSOR_ARROW, _("Export"));
|
|
SaveOneSymbol();
|
|
SetToolID( 0, wxCURSOR_ARROW, wxEmptyString);
|
|
break;
|
|
|
|
case ID_POPUP_LIBEDIT_END_CREATE_ITEM:
|
|
DrawPanel->MouseToCursorSchema();
|
|
if ( CurrentDrawItem )
|
|
{
|
|
EndDrawGraphicItem(&dc);
|
|
}
|
|
break;
|
|
|
|
case ID_POPUP_LIBEDIT_BODY_EDIT_ITEM:
|
|
if ( CurrentDrawItem )
|
|
{
|
|
DrawPanel->CursorOff(&dc);
|
|
switch ( CurrentDrawItem->Type() )
|
|
{
|
|
case COMPONENT_ARC_DRAW_TYPE:
|
|
case COMPONENT_CIRCLE_DRAW_TYPE:
|
|
case COMPONENT_RECT_DRAW_TYPE:
|
|
case COMPONENT_POLYLINE_DRAW_TYPE:
|
|
case COMPONENT_LINE_DRAW_TYPE:
|
|
EditGraphicSymbol(&dc, CurrentDrawItem);
|
|
break;
|
|
case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE:
|
|
EditSymbolText(&dc, CurrentDrawItem);
|
|
break;
|
|
default:;
|
|
}
|
|
DrawPanel->CursorOn(&dc);
|
|
}
|
|
break;
|
|
|
|
|
|
case ID_LIBEDIT_DELETE_ITEM_BUTT:
|
|
if ( CurrentLibEntry == NULL) { wxBell(); break; }
|
|
SetToolID( id, wxCURSOR_BULLSEYE, _("Delete item"));
|
|
break;
|
|
|
|
|
|
case ID_POPUP_LIBEDIT_DELETE_CURRENT_POLY_SEGMENT:
|
|
// Delete the last created segment, while creating a polyline draw item
|
|
if ( CurrentDrawItem == NULL) break;
|
|
DrawPanel->MouseToCursorSchema();
|
|
DeleteDrawPoly(&dc);
|
|
break;
|
|
|
|
case ID_POPUP_LIBEDIT_DELETE_ITEM:
|
|
if ( CurrentDrawItem == NULL) break;
|
|
DrawPanel->MouseToCursorSchema();
|
|
DrawPanel->CursorOff(&dc);
|
|
SaveCopyInUndoList(CurrentLibEntry);
|
|
if ( CurrentDrawItem->Type() == COMPONENT_PIN_DRAW_TYPE )
|
|
{
|
|
DeletePin(&dc, CurrentLibEntry, (LibDrawPin*)CurrentDrawItem);
|
|
}
|
|
|
|
else
|
|
{
|
|
if ( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur)
|
|
DrawPanel->ForceCloseManageCurseur(DrawPanel, &dc);
|
|
else DeleteOneLibraryDrawStruct(DrawPanel, &dc, CurrentLibEntry,CurrentDrawItem, TRUE);
|
|
}
|
|
|
|
CurrentDrawItem = NULL;
|
|
m_CurrentScreen->SetModify();
|
|
DrawPanel->CursorOn(&dc);
|
|
break;
|
|
|
|
case ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST:
|
|
if ( CurrentDrawItem == NULL) break;
|
|
DrawPanel->MouseToCursorSchema();
|
|
if ( CurrentDrawItem->Type() == COMPONENT_PIN_DRAW_TYPE )
|
|
StartMovePin(&dc);
|
|
else if ( CurrentDrawItem->Type() == COMPONENT_FIELD_DRAW_TYPE )
|
|
StartMoveField(&dc, (LibDrawField *) CurrentDrawItem);
|
|
else StartMoveDrawSymbol(&dc);
|
|
break;
|
|
|
|
case ID_POPUP_LIBEDIT_ROTATE_GRAPHIC_TEXT:
|
|
if ( CurrentDrawItem == NULL) break;
|
|
DrawPanel->CursorOff(&dc);
|
|
DrawPanel->MouseToCursorSchema();
|
|
if ( (CurrentDrawItem->m_Flags & IS_NEW) == 0 )
|
|
SaveCopyInUndoList(CurrentLibEntry);
|
|
RotateSymbolText(&dc);
|
|
DrawPanel->CursorOn(&dc);
|
|
break;
|
|
|
|
case ID_POPUP_LIBEDIT_FIELD_ROTATE_ITEM:
|
|
if ( CurrentDrawItem == NULL) break;
|
|
DrawPanel->CursorOff(&dc);
|
|
DrawPanel->MouseToCursorSchema();
|
|
if ( CurrentDrawItem->Type() == COMPONENT_FIELD_DRAW_TYPE )
|
|
{
|
|
SaveCopyInUndoList(CurrentLibEntry);
|
|
RotateField(&dc, (LibDrawField *) CurrentDrawItem);
|
|
}
|
|
DrawPanel->CursorOn(&dc);
|
|
break;
|
|
|
|
case ID_POPUP_LIBEDIT_FIELD_EDIT_ITEM:
|
|
if ( CurrentDrawItem == NULL) break;
|
|
DrawPanel->CursorOff(&dc);
|
|
if ( CurrentDrawItem->Type() == COMPONENT_FIELD_DRAW_TYPE )
|
|
{
|
|
EditField(&dc, (LibDrawField *) CurrentDrawItem);
|
|
}
|
|
DrawPanel->CursorOn(&dc);
|
|
break;
|
|
|
|
case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINSIZE_ITEM:
|
|
case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNAMESIZE_ITEM:
|
|
case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNUMSIZE_ITEM:
|
|
if ( (CurrentDrawItem == NULL) ||
|
|
(CurrentDrawItem->Type() != COMPONENT_PIN_DRAW_TYPE) )
|
|
break;
|
|
SaveCopyInUndoList(CurrentLibEntry);
|
|
GlobalSetPins(&dc, (LibDrawPin *) CurrentDrawItem, id);
|
|
DrawPanel->MouseToCursorSchema();
|
|
break;
|
|
|
|
case ID_POPUP_ZOOM_BLOCK:
|
|
DrawPanel->m_AutoPAN_Request = FALSE;
|
|
GetScreen()->BlockLocate.m_Command = BLOCK_ZOOM;
|
|
HandleBlockEnd(&dc);
|
|
break;
|
|
|
|
case ID_POPUP_DELETE_BLOCK:
|
|
DrawPanel->m_AutoPAN_Request = FALSE;
|
|
GetScreen()->BlockLocate.m_Command = BLOCK_DELETE;
|
|
DrawPanel->MouseToCursorSchema();
|
|
HandleBlockEnd(&dc);
|
|
break;
|
|
|
|
case ID_POPUP_COPY_BLOCK:
|
|
DrawPanel->m_AutoPAN_Request = FALSE;
|
|
GetScreen()->BlockLocate.m_Command = BLOCK_COPY;
|
|
DrawPanel->MouseToCursorSchema();
|
|
HandleBlockPlace(&dc);
|
|
break;
|
|
|
|
case ID_POPUP_SELECT_ITEMS_BLOCK:
|
|
DrawPanel->m_AutoPAN_Request = FALSE;
|
|
GetScreen()->BlockLocate.m_Command = BLOCK_SELECT_ITEMS_ONLY;
|
|
DrawPanel->MouseToCursorSchema();
|
|
HandleBlockEnd(&dc);
|
|
break;
|
|
|
|
case ID_POPUP_INVERT_BLOCK:
|
|
DrawPanel->m_AutoPAN_Request = FALSE;
|
|
GetScreen()->BlockLocate.m_Command = BLOCK_INVERT;
|
|
DrawPanel->MouseToCursorSchema();
|
|
HandleBlockPlace(&dc);
|
|
break;
|
|
|
|
case ID_POPUP_PLACE_BLOCK:
|
|
DrawPanel->m_AutoPAN_Request = FALSE;
|
|
DrawPanel->MouseToCursorSchema();
|
|
HandleBlockPlace(&dc);
|
|
break;
|
|
|
|
case ID_LIBEDIT_UNDO:
|
|
GetComponentFromUndoList();
|
|
DrawPanel->Refresh(TRUE);
|
|
break;
|
|
|
|
case ID_LIBEDIT_REDO:
|
|
GetComponentFromRedoList();
|
|
DrawPanel->Refresh(TRUE);
|
|
break;
|
|
|
|
default:
|
|
DisplayError(this, wxT("WinEDA_LibeditFrame::Process_Special_Functions error"));
|
|
break;
|
|
}
|
|
DrawPanel->MouseToCursorSchema();
|
|
DrawPanel->m_IgnoreMouseEvents = FALSE;
|
|
|
|
if ( m_ID_current_state == 0 ) LibItemToRepeat = NULL;
|
|
}
|
|
|
|
|