From 8570d3311aae88a5b9fcd244aeabde905bd5cd63 Mon Sep 17 00:00:00 2001 From: stambaughw Date: Fri, 25 Sep 2009 18:49:04 +0000 Subject: [PATCH] Component library editor improvements and minor bug fixes. * Component library objects renamed for improved readability. * Fields now move when selected in library editor. * Add copy constructor to all library draw and library component objects. * Added copy constructor to EDA_BaseStruct. * Delete base screen in WinEDA_DrawFrame destructor to prevent potential memory leak. * Fixed memory access bug when replacing and adding a component to library. * Moved library component block manipulation code into component object. * Removed all of the global variables used by the library editor main window object. * The usual code cleaning and refactoring. --- common/base_struct.cpp | 12 + common/drawframe.cpp | 6 +- eeschema/CMakeLists.txt | 1 - eeschema/annotate.cpp | 3 +- eeschema/backanno.cpp | 4 +- eeschema/block.cpp | 41 +- eeschema/block_libedit.cpp | 233 ++------ eeschema/build_BOM.cpp | 7 +- eeschema/bus-wire-junction.cpp | 2 +- eeschema/busentry.cpp | 1 - eeschema/class_BodyItem_Text.cpp | 18 +- eeschema/class_drawsheet.cpp | 1 - eeschema/class_drawsheetpath.cpp | 1 - eeschema/class_hierarchical_PIN_sheet.cpp | 1 - eeschema/class_libentry.cpp | 357 ++++++++++--- eeschema/class_libentry.h | 57 +- eeschema/class_libentry_fields.cpp | 41 +- eeschema/class_libentry_fields.h | 25 +- eeschema/class_library.cpp | 133 +++-- eeschema/class_library.h | 67 ++- eeschema/class_netlist_object.cpp | 1 - eeschema/class_pin.cpp | 38 +- eeschema/class_sch_cmp_field.cpp | 7 +- eeschema/class_sch_component.cpp | 4 +- eeschema/class_sch_screen.cpp | 2 +- eeschema/class_schematic_items.cpp | 2 - eeschema/class_text-label.cpp | 1 - eeschema/classes_body_items.cpp | 185 +++++-- eeschema/classes_body_items.h | 124 +++-- eeschema/cleanup.cpp | 8 +- eeschema/controle.cpp | 4 +- eeschema/cross-probing.cpp | 8 +- eeschema/dangling_ends.cpp | 8 +- eeschema/database.cpp | 2 +- eeschema/delete.cpp | 1 - eeschema/delsheet.cpp | 2 +- eeschema/dialog_build_BOM.cpp | 3 +- eeschema/dialog_cmp_graphic_properties.cpp | 2 +- eeschema/dialog_create_component.cpp | 10 +- eeschema/dialog_edit_component_in_lib.cpp | 12 +- .../dialog_edit_component_in_schematic.cpp | 2 +- eeschema/dialog_edit_label.cpp | 1 - .../dialog_edit_libentry_fields_in_lib.cpp | 6 +- eeschema/dialog_eeschema_config.cpp | 1 - eeschema/dialog_erc.cpp | 6 +- eeschema/dialog_options.cpp | 1 - eeschema/edit_component_in_lib.cpp | 95 ++-- eeschema/edit_component_in_schematic.cpp | 3 +- eeschema/edit_graphic_bodyitem_text.cpp | 16 +- eeschema/edit_label.cpp | 5 +- eeschema/eeconfig.cpp | 1 - eeschema/eelayer.cpp | 1 - eeschema/eelibs_draw_components.cpp | 2 +- eeschema/eelibs_read_libraryfiles.cpp | 2 +- eeschema/eeredraw.cpp | 3 +- eeschema/eeschema.cpp | 21 +- eeschema/erc.cpp | 9 +- eeschema/files-io.cpp | 6 +- eeschema/find.cpp | 2 +- eeschema/general.h | 2 +- eeschema/getpart.cpp | 6 +- eeschema/hierarch.cpp | 5 +- eeschema/hotkeys.cpp | 25 +- eeschema/lib_export.cpp | 18 +- eeschema/libarch.cpp | 2 +- eeschema/libcmp.h | 44 -- eeschema/libedit.cpp | 199 +++---- eeschema/libedit_onleftclick.cpp | 96 ++-- eeschema/libedit_onrightclick.cpp | 10 +- eeschema/libedit_undo_redo.cpp | 24 +- eeschema/libeditfrm.h | 66 ++- eeschema/libfield.cpp | 88 ++-- eeschema/libframe.cpp | 336 ++++++------ eeschema/load_one_schematic_file.cpp | 3 +- eeschema/locate.cpp | 33 +- eeschema/menubar.cpp | 6 +- eeschema/netform.cpp | 17 +- eeschema/netlist.cpp | 9 +- eeschema/netlist.h | 4 + eeschema/netlist_control.cpp | 3 +- eeschema/onleftclick.cpp | 3 +- eeschema/onrightclick.cpp | 5 +- eeschema/operations_on_items_lists.cpp | 14 +- eeschema/pinedit-dialog.cpp | 10 +- eeschema/pinedit.cpp | 237 +++++---- eeschema/plot.cpp | 5 +- eeschema/plotdxf.cpp | 11 +- eeschema/plothpgl.cpp | 9 +- eeschema/plotps.cpp | 6 +- eeschema/protos.h | 54 +- ...from_file_schematic_items_descriptions.cpp | 5 +- eeschema/save_schemas.cpp | 3 +- eeschema/savelib.cpp | 108 ---- eeschema/schedit.cpp | 6 +- eeschema/schematic_undo_redo.cpp | 5 +- eeschema/schframe.cpp | 13 +- eeschema/selpart.cpp | 2 +- eeschema/sheet.cpp | 4 +- eeschema/sheetlab.cpp | 7 +- eeschema/symbdraw.cpp | 497 +++++++----------- eeschema/symbedit.cpp | 75 ++- eeschema/tool_lib.cpp | 1 - eeschema/tool_sch.cpp | 4 +- eeschema/tool_viewlib.cpp | 1 - eeschema/viewlib_frame.cpp | 8 +- eeschema/viewlibs.cpp | 6 +- include/base_struct.h | 1 + include/wxEeschemaStruct.h | 2 +- 108 files changed, 1974 insertions(+), 1742 deletions(-) delete mode 100644 eeschema/savelib.cpp diff --git a/common/base_struct.cpp b/common/base_struct.cpp index f51da95579..bece3de2d9 100644 --- a/common/base_struct.cpp +++ b/common/base_struct.cpp @@ -41,6 +41,18 @@ EDA_BaseStruct::EDA_BaseStruct( KICAD_T idType ) } +EDA_BaseStruct::EDA_BaseStruct( const EDA_BaseStruct& base ) +{ + m_StructType = base.m_StructType; + m_Parent = base.m_Parent; + m_Son = base.m_Son; + m_Flags = base.m_Flags; + m_TimeStamp = base.m_TimeStamp; + m_Status = base.m_Status; + m_Selected = base.m_Selected; +} + + /********************************************/ void EDA_BaseStruct::InitVars() /********************************************/ diff --git a/common/drawframe.cpp b/common/drawframe.cpp index 78427a2d59..783aa1cd9d 100644 --- a/common/drawframe.cpp +++ b/common/drawframe.cpp @@ -58,7 +58,7 @@ WinEDA_DrawFrame::WinEDA_DrawFrame( wxWindow* father, int idtype, MsgPanel = NULL; m_CurrentScreen = NULL; m_ID_current_state = 0; - m_ID_last_state = 0; + m_ID_last_state = 0; m_HTOOL_current_state = 0; m_Draw_Axis = FALSE; // TRUE pour avoir les axes dessines m_Draw_Grid = FALSE; // TRUE pour avoir la axes dessinee @@ -108,10 +108,10 @@ WinEDA_DrawFrame::WinEDA_DrawFrame( wxWindow* father, int idtype, } -/****************************************/ WinEDA_DrawFrame::~WinEDA_DrawFrame() -/****************************************/ { + if( m_CurrentScreen != NULL ) + delete m_CurrentScreen; } diff --git a/eeschema/CMakeLists.txt b/eeschema/CMakeLists.txt index 8c5f9e3352..3f17856000 100644 --- a/eeschema/CMakeLists.txt +++ b/eeschema/CMakeLists.txt @@ -101,7 +101,6 @@ set(EESCHEMA_SRCS plotps.cpp plotdxf.cpp read_from_file_schematic_items_descriptions.cpp - savelib.cpp save_schemas.cpp schedit.cpp schematic_undo_redo.cpp diff --git a/eeschema/annotate.cpp b/eeschema/annotate.cpp index 327c71f7e5..643541c9d0 100644 --- a/eeschema/annotate.cpp +++ b/eeschema/annotate.cpp @@ -10,8 +10,9 @@ #include "class_drawpanel.h" #include "confirm.h" #include "wxstruct.h" + #include "program.h" -#include "libcmp.h" +#include "class_library.h" #include "protos.h" #include "netlist.h" diff --git a/eeschema/backanno.cpp b/eeschema/backanno.cpp index 642b99a04d..fcfe08bcf0 100644 --- a/eeschema/backanno.cpp +++ b/eeschema/backanno.cpp @@ -9,10 +9,10 @@ #include "confirm.h" #include "kicad_string.h" #include "gestfich.h" -#include "libcmp.h" -#include "general.h" #include "appl_wxstruct.h" +#include "general.h" + /* Variables Locales */ /*******************************************************************************************/ diff --git a/eeschema/block.cpp b/eeschema/block.cpp index bb6a7c3977..27ab0d4d82 100644 --- a/eeschema/block.cpp +++ b/eeschema/block.cpp @@ -12,31 +12,36 @@ #include "block_commande.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "class_marker_sch.h" +#include "class_library.h" #include "protos.h" /* Variables Locales */ // Imported functions: -void MoveItemsInList( PICKED_ITEMS_LIST& aItemsList, const wxPoint aMoveVector ); -void MirrorListOfItems( PICKED_ITEMS_LIST& aItemsList, wxPoint& Center ); -void DeleteItemsInList( WinEDA_DrawPanel* panel, PICKED_ITEMS_LIST& aItemsList ); -void DuplicateItemsInList( SCH_SCREEN* screen, PICKED_ITEMS_LIST& aItemsList, const wxPoint aMoveVector ); +void MoveItemsInList( PICKED_ITEMS_LIST& aItemsList, + const wxPoint aMoveVector ); +void MirrorListOfItems( PICKED_ITEMS_LIST& aItemsList, + wxPoint& Center ); +void DeleteItemsInList( WinEDA_DrawPanel* panel, + PICKED_ITEMS_LIST& aItemsList ); +void DuplicateItemsInList( SCH_SCREEN* screen, + PICKED_ITEMS_LIST& aItemsList, + const wxPoint aMoveVector ); /* Fonctions exportees */ /* Fonctions Locales */ -static void CollectStructsToDrag( SCH_SCREEN* screen ); -static void AddPickedItem( SCH_SCREEN* screen, wxPoint aPosition ); -static LibEDA_BaseStruct* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem, - wxPoint& aPosition ); -static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, - wxDC* DC, - bool erase ); -static void SaveStructListForPaste( PICKED_ITEMS_LIST& aItemsList ); +static void CollectStructsToDrag( SCH_SCREEN* screen ); +static void AddPickedItem( SCH_SCREEN* screen, wxPoint aPosition ); +static LIB_DRAW_ITEM* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem, + wxPoint& aPosition ); +static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, + wxDC* DC, + bool erase ); +static void SaveStructListForPaste( PICKED_ITEMS_LIST& aItemsList ); /*************************************************************************/ @@ -645,7 +650,7 @@ static void CollectStructsToDrag( SCH_SCREEN* screen ) if( Struct->Type() == TYPE_SCH_COMPONENT ) { // Add all pins of the selected component to list - LibEDA_BaseStruct* DrawItem; + LIB_DRAW_ITEM* DrawItem; wxPoint pos; DrawItem = GetNextPinPosition( (SCH_COMPONENT*) Struct, pos ); while( DrawItem ) @@ -840,8 +845,8 @@ static void AddPickedItem( SCH_SCREEN* screen, wxPoint position ) /*********************************************************************************/ -static LibEDA_BaseStruct* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem, - wxPoint& aPosition ) +static LIB_DRAW_ITEM* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem, + wxPoint& aPosition ) /*********************************************************************************/ /** GetNextPinPosition() @@ -856,9 +861,9 @@ static LibEDA_BaseStruct* GetNextPinPosition( SCH_COMPONENT* aDrawLibItem, */ { LIB_COMPONENT* Entry; - static LibEDA_BaseStruct* NextItem; + static LIB_DRAW_ITEM* NextItem; static int Multi, convert, TransMat[2][2]; - LibEDA_BaseStruct* DEntry; + LIB_DRAW_ITEM* DEntry; int orient; LibDrawPin* Pin; static wxPoint CmpPosition; diff --git a/eeschema/block_libedit.cpp b/eeschema/block_libedit.cpp index a1609aa8ec..ba63de495f 100644 --- a/eeschema/block_libedit.cpp +++ b/eeschema/block_libedit.cpp @@ -11,98 +11,15 @@ #include "block_commande.h" #include "program.h" -#include "libcmp.h" #include "general.h" +#include "class_library.h" #include "protos.h" #include "libeditfrm.h" static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); -static int MarkItemsInBloc( LIB_COMPONENT* LibComponent, - EDA_Rect& Rect ); - -static void ClearMarkItems( LIB_COMPONENT* LibComponent ); -static void CopyMarkedItems( LIB_COMPONENT* LibEntry, wxPoint offset ); -static void MoveMarkedItems( LIB_COMPONENT* LibEntry, wxPoint offset ); -static void MirrorMarkedItems( LIB_COMPONENT* LibEntry, - wxPoint offset ); -static void DeleteMarkedItems( LIB_COMPONENT* LibEntry ); - - -void ClearMarkItems( LIB_COMPONENT* LibComponent ) -{ - LibEDA_BaseStruct* item; - - if( LibComponent == NULL ) - return; - - item = LibComponent->m_Drawings; - for( ; item != NULL; item = item->Next() ) - item->m_Flags = item->m_Selected = 0; -} - - -/* - * Mark items inside rect. - * Items are inside rect when an end point is inside rect - * - * Rules for convert drawings and other parts ( for multi part per package): - * - Commons are always marked - * - Specific graphic shapes must agree with the current displayed part and - * convert - * - Because most of pins are specific to current part and current convert: - * - if g_EditPinByPinIsOn == TRUE, or flag .m_UnitSelectionLocked == TRUE, - * only the pins specific to current part and current convert are marked - * - all specific to current convert pins are marked; - */ -int MarkItemsInBloc( LIB_COMPONENT* LibComponent, - EDA_Rect& Rect ) -{ - LibEDA_BaseStruct* item; - int ItemsCount = 0; - wxPoint pos; - bool ItemIsInOtherPart; - bool ItemIsInOtherConvert; - - if( LibComponent == NULL ) - return 0; - - item = LibComponent->m_Drawings; - for( ; item != NULL; item = item->Next() ) - { - item->m_Selected = 0; - - // Do not consider other units or other convert items: - ItemIsInOtherPart = ItemIsInOtherConvert = FALSE; - if( item->m_Unit && (item->m_Unit != CurrentUnit) ) - ItemIsInOtherPart = TRUE; - if( item->m_Convert && (item->m_Convert != CurrentConvert) ) - ItemIsInOtherConvert = TRUE; - if( ItemIsInOtherPart || ItemIsInOtherConvert ) - { - if( item->Type() == COMPONENT_PIN_DRAW_TYPE ) - { // Specific rules for pins: - if( g_EditPinByPinIsOn ) - continue; - if( LibComponent->m_UnitSelectionLocked ) - continue; - if( ItemIsInOtherConvert ) - continue; - } - else - continue; - } - - if( item->Inside( Rect ) ) - { - item->m_Selected = IS_SELECTED; - ItemsCount++; - } - } - - return ItemsCount; -} +static void MirrorMarkedItems( LIB_COMPONENT* LibEntry, wxPoint offset ); /* @@ -158,7 +75,7 @@ int WinEDA_LibeditFrame::ReturnBlockCommand( int key ) */ int WinEDA_LibeditFrame::HandleBlockEnd( wxDC* DC ) { - int ItemsCount = 0; + int ItemCount = 0; int MustDoPlace = 0; if( GetScreen()->m_BlockLocate.GetCount() ) @@ -184,9 +101,10 @@ int WinEDA_LibeditFrame::HandleBlockEnd( wxDC* DC ) case BLOCK_DRAG: /* Drag */ case BLOCK_MOVE: /* Move */ case BLOCK_COPY: /* Copy */ - ItemsCount = MarkItemsInBloc( m_currentComponent, - GetScreen()->m_BlockLocate ); - if( ItemsCount ) + ItemCount = m_component->SelectItems( GetScreen()->m_BlockLocate, + m_unit, m_convert, + g_EditPinByPinIsOn ); + if( ItemCount ) { MustDoPlace = 1; if( DrawPanel->ManageCurseur != NULL ) @@ -207,11 +125,12 @@ int WinEDA_LibeditFrame::HandleBlockEnd( wxDC* DC ) break; case BLOCK_DELETE: /* Delete */ - ItemsCount = MarkItemsInBloc( m_currentComponent, - GetScreen()->m_BlockLocate ); - if( ItemsCount ) - SaveCopyInUndoList( m_currentComponent ); - DeleteMarkedItems( m_currentComponent ); + ItemCount = m_component->SelectItems( GetScreen()->m_BlockLocate, + m_unit, m_convert, + g_EditPinByPinIsOn ); + if( ItemCount ) + SaveCopyInUndoList( m_component ); + m_component->DeleteSelectedItems(); break; case BLOCK_SAVE: /* Save */ @@ -223,12 +142,12 @@ int WinEDA_LibeditFrame::HandleBlockEnd( wxDC* DC ) case BLOCK_MIRROR_Y: - ItemsCount = MarkItemsInBloc( m_currentComponent, - GetScreen()->m_BlockLocate ); - if( ItemsCount ) - SaveCopyInUndoList( m_currentComponent ); - MirrorMarkedItems( m_currentComponent, - GetScreen()->m_BlockLocate.Centre() ); + ItemCount = m_component->SelectItems( GetScreen()->m_BlockLocate, + m_unit, m_convert, + g_EditPinByPinIsOn ); + if( ItemCount ) + SaveCopyInUndoList( m_component ); + MirrorMarkedItems( m_component, GetScreen()->m_BlockLocate.Centre() ); break; case BLOCK_ZOOM: /* Window Zoom */ @@ -245,9 +164,8 @@ int WinEDA_LibeditFrame::HandleBlockEnd( wxDC* DC ) if( MustDoPlace <= 0 ) { if( GetScreen()->m_BlockLocate.m_Command != BLOCK_SELECT_ITEMS_ONLY ) - { - ClearMarkItems( m_currentComponent ); - } + m_component->ClearSelectedItems(); + GetScreen()->m_BlockLocate.m_Flags = 0; GetScreen()->m_BlockLocate.m_State = STATE_NO_BLOCK; GetScreen()->m_BlockLocate.m_Command = BLOCK_IDLE; @@ -273,6 +191,7 @@ int WinEDA_LibeditFrame::HandleBlockEnd( wxDC* DC ) void WinEDA_LibeditFrame::HandleBlockPlace( wxDC* DC ) { bool err = FALSE; + wxPoint offset; if( DrawPanel->ManageCurseur == NULL ) { @@ -292,17 +211,19 @@ void WinEDA_LibeditFrame::HandleBlockPlace( wxDC* DC ) case BLOCK_MOVE: /* Move */ case BLOCK_PRESELECT_MOVE: /* Move with preselection list*/ GetScreen()->m_BlockLocate.ClearItemsList(); - SaveCopyInUndoList( m_currentComponent ); - MoveMarkedItems( m_currentComponent, - GetScreen()->m_BlockLocate.m_MoveVector ); + SaveCopyInUndoList( m_component ); + offset = GetScreen()->m_BlockLocate.m_MoveVector; + offset.y *= -1; + m_component->MoveSelectedItems( offset ); DrawPanel->Refresh( TRUE ); break; case BLOCK_COPY: /* Copy */ GetScreen()->m_BlockLocate.ClearItemsList(); - SaveCopyInUndoList( m_currentComponent ); - CopyMarkedItems( m_currentComponent, - GetScreen()->m_BlockLocate.m_MoveVector ); + SaveCopyInUndoList( m_component ); + offset = GetScreen()->m_BlockLocate.m_MoveVector; + offset.y *= -1; + m_component->CopySelectedItems( offset ); break; case BLOCK_PASTE: /* Paste (recopie du dernier bloc sauve */ @@ -310,9 +231,8 @@ void WinEDA_LibeditFrame::HandleBlockPlace( wxDC* DC ) break; case BLOCK_MIRROR_Y: /* Invert by popup menu, from block move */ - SaveCopyInUndoList( m_currentComponent ); - MirrorMarkedItems( m_currentComponent, - GetScreen()->m_BlockLocate.Centre() ); + SaveCopyInUndoList( m_component ); + MirrorMarkedItems( m_component, GetScreen()->m_BlockLocate.Centre() ); break; case BLOCK_ZOOM: // Handled by HandleBlockEnd @@ -348,25 +268,27 @@ void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) BLOCK_SELECTOR* PtBlock; BASE_SCREEN* screen = panel->GetScreen(); wxPoint move_offset; - PtBlock = &screen->m_BlockLocate; WinEDA_LibeditFrame* parent = ( WinEDA_LibeditFrame* ) panel->GetParent(); wxASSERT( parent != NULL ); - LIB_COMPONENT* component = parent->GetCurrentComponent(); + LIB_COMPONENT* component = parent->GetComponent(); if( component == NULL ) return; + int unit = parent->GetUnit(); + int convert = parent->GetConvert(); + if( erase ) { PtBlock->Draw( panel, DC, PtBlock->m_MoveVector, g_XorMode, PtBlock->m_Color ); - component->Draw( panel, DC, PtBlock->m_MoveVector, CurrentUnit, - CurrentConvert, g_XorMode, -1, DefaultTransformMatrix, - true, false, true ); + component->Draw( panel, DC, PtBlock->m_MoveVector, unit, convert, + g_XorMode, -1, DefaultTransformMatrix, + true, true, true ); } /* Redessin nouvel affichage */ @@ -379,78 +301,9 @@ void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) PtBlock->Draw( panel, DC, PtBlock->m_MoveVector, g_XorMode, PtBlock->m_Color ); - component->Draw( panel, DC, PtBlock->m_MoveVector, CurrentUnit, - CurrentConvert, g_XorMode, -1, DefaultTransformMatrix, - true, false, true ); -} - - -/* - * Copy marked items, at new position = old position + offset - */ -void CopyMarkedItems( LIB_COMPONENT* LibEntry, wxPoint offset ) -{ - LibEDA_BaseStruct* item; - - if( LibEntry == NULL ) - return; - - item = LibEntry->m_Drawings; - for( ; item != NULL; item = item->Next() ) - { - if( item->m_Selected == 0 ) - continue; - item->m_Selected = 0; - LibEDA_BaseStruct* newitem = item->GenCopy(); - newitem->m_Selected = IS_SELECTED; - newitem->SetNext( LibEntry->m_Drawings ); - LibEntry->m_Drawings = newitem; - } - - MoveMarkedItems( LibEntry, offset ); -} - - -/* - * Move marked items, at new position = old position + offset - */ -void MoveMarkedItems( LIB_COMPONENT* LibEntry, wxPoint offset ) -{ - LibEDA_BaseStruct* item; - - if( LibEntry == NULL ) - return; - - NEGATE( offset.y ); // Y axis for lib items is Down to Up: reverse y offset value - for( item = LibEntry->m_Drawings; item != NULL; item = item->Next() ) - { - if( item->m_Selected == 0 ) - continue; - - item->SetOffset( offset ); - item->m_Flags = item->m_Selected = 0; - } -} - - -/* - * Delete marked items - */ -void DeleteMarkedItems( LIB_COMPONENT* LibEntry ) -{ - LibEDA_BaseStruct* item, * next_item; - - if( LibEntry == NULL ) - return; - - item = LibEntry->m_Drawings; - for( ; item != NULL; item = next_item ) - { - next_item = item->Next(); - if( item->m_Selected == 0 ) - continue; - LibEntry->RemoveDrawItem( item ); - } + component->Draw( panel, DC, PtBlock->m_MoveVector, unit, convert, + g_XorMode, -1, DefaultTransformMatrix, + true, true, true ); } @@ -460,7 +313,7 @@ void DeleteMarkedItems( LIB_COMPONENT* LibEntry ) void MirrorMarkedItems( LIB_COMPONENT* LibEntry, wxPoint offset ) { #define SETMIRROR( z ) (z) -= offset.x; (z) = -(z); (z) += offset.x; - LibEDA_BaseStruct* item; + LIB_DRAW_ITEM* item; if( LibEntry == NULL ) return; diff --git a/eeschema/build_BOM.cpp b/eeschema/build_BOM.cpp index d933f6a5df..a8d275eecd 100644 --- a/eeschema/build_BOM.cpp +++ b/eeschema/build_BOM.cpp @@ -14,17 +14,16 @@ #include "kicad_string.h" #include "gestfich.h" #include "appl_wxstruct.h" + #include "program.h" -#include "libcmp.h" #include "general.h" +#include "class_library.h" #include "netlist.h" +#include "protos.h" #include "dialog_build_BOM.h" -#include "protos.h" - - /* object used in build BOM to handle the list of labels in schematic * because in a complex hierarchy, a label is used more than once, * and had more than one sheet path, so we must create a flat list of labels diff --git a/eeschema/bus-wire-junction.cpp b/eeschema/bus-wire-junction.cpp index ee7e2ac85e..171088c0d1 100644 --- a/eeschema/bus-wire-junction.cpp +++ b/eeschema/bus-wire-junction.cpp @@ -9,7 +9,7 @@ #include "confirm.h" #include "program.h" -#include "libcmp.h" +#include "classes_body_items.h" #include "general.h" #include "protos.h" diff --git a/eeschema/busentry.cpp b/eeschema/busentry.cpp index 749b13102c..0c04a67792 100644 --- a/eeschema/busentry.cpp +++ b/eeschema/busentry.cpp @@ -10,7 +10,6 @@ #include "confirm.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" diff --git a/eeschema/class_BodyItem_Text.cpp b/eeschema/class_BodyItem_Text.cpp index 4df8b99f89..c5abe43afa 100644 --- a/eeschema/class_BodyItem_Text.cpp +++ b/eeschema/class_BodyItem_Text.cpp @@ -15,7 +15,7 @@ #include "trigo.h" #include "program.h" -#include "libcmp.h" +#include "classes_body_items.h" #include "general.h" #include "protos.h" @@ -23,7 +23,7 @@ LibDrawText::LibDrawText(LIB_COMPONENT * aParent) : - LibEDA_BaseStruct( COMPONENT_GRAPHIC_TEXT_DRAW_TYPE, aParent ), + LIB_DRAW_ITEM( COMPONENT_GRAPHIC_TEXT_DRAW_TYPE, aParent ), EDA_TextStruct() { m_Size = wxSize( 50, 50 ); @@ -172,7 +172,7 @@ bool LibDrawText::HitTest( wxPoint aPosRef, int aThreshold, } -LibEDA_BaseStruct* LibDrawText::DoGenCopy() +LIB_DRAW_ITEM* LibDrawText::DoGenCopy() { LibDrawText* newitem = new LibDrawText(NULL); @@ -189,11 +189,11 @@ LibEDA_BaseStruct* LibDrawText::DoGenCopy() newitem->m_Bold = m_Bold; newitem->m_HJustify = m_HJustify; newitem->m_VJustify = m_VJustify; - return (LibEDA_BaseStruct*) newitem; + return (LIB_DRAW_ITEM*) newitem; } -bool LibDrawText::DoCompare( const LibEDA_BaseStruct& other ) const +bool LibDrawText::DoCompare( const LIB_DRAW_ITEM& other ) const { wxASSERT( other.Type() == COMPONENT_GRAPHIC_TEXT_DRAW_TYPE ); @@ -220,6 +220,12 @@ bool LibDrawText::DoTestInside( EDA_Rect& rect ) } +void LibDrawText::DoMove( const wxPoint& newPosition ) +{ + m_Pos = newPosition; +} + + /** Function GetPenSize * @return the size of the "pen" that be used to draw or plot this item */ @@ -273,7 +279,7 @@ void LibDrawText::DisplayInfo( WinEDA_DrawFrame* frame ) { wxString msg; - LibEDA_BaseStruct::DisplayInfo( frame ); + LIB_DRAW_ITEM::DisplayInfo( frame ); msg = ReturnStringFromValue( g_UnitMetric, m_Width, EESCHEMA_INTERNAL_UNIT, true ); diff --git a/eeschema/class_drawsheet.cpp b/eeschema/class_drawsheet.cpp index 99a1ef9101..6e2ef4b64d 100644 --- a/eeschema/class_drawsheet.cpp +++ b/eeschema/class_drawsheet.cpp @@ -19,7 +19,6 @@ #include "confirm.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" diff --git a/eeschema/class_drawsheetpath.cpp b/eeschema/class_drawsheetpath.cpp index 1a3e672962..4c22b69a52 100644 --- a/eeschema/class_drawsheetpath.cpp +++ b/eeschema/class_drawsheetpath.cpp @@ -11,7 +11,6 @@ #include "common.h" #include "program.h" -#include "libcmp.h" #include "general.h" diff --git a/eeschema/class_hierarchical_PIN_sheet.cpp b/eeschema/class_hierarchical_PIN_sheet.cpp index bea65366e5..c40167cc99 100644 --- a/eeschema/class_hierarchical_PIN_sheet.cpp +++ b/eeschema/class_hierarchical_PIN_sheet.cpp @@ -18,7 +18,6 @@ #include "drawtxt.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" diff --git a/eeschema/class_libentry.cpp b/eeschema/class_libentry.cpp index 5c5372bce8..57719b11c3 100644 --- a/eeschema/class_libentry.cpp +++ b/eeschema/class_libentry.cpp @@ -10,15 +10,16 @@ #include "gr_basic.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" +#include "class_library.h" +#include "class_libentry.h" int SortItemsFct(const void* ref, const void* item) { -#define Ref ( *(LibEDA_BaseStruct**) (ref) ) -#define Item ( *(LibEDA_BaseStruct**) (item) ) +#define Ref ( *(LIB_DRAW_ITEM**) (ref) ) +#define Item ( *(LIB_DRAW_ITEM**) (item) ) #define BEFORE -1 #define AFTER 1 @@ -168,6 +169,20 @@ CMP_LIB_ENTRY::CMP_LIB_ENTRY( LibrEntryType type, const wxString& name, } +CMP_LIB_ENTRY::CMP_LIB_ENTRY( const CMP_LIB_ENTRY& entry, CMP_LIBRARY* lib ) : + EDA_BaseStruct( entry ) +{ + Type = entry.Type; + m_Name = entry.m_Name; + m_Doc = entry.m_Doc; + m_KeyWord = entry.m_KeyWord; + m_DocFile = entry.m_DocFile; + m_Options = entry.m_Options; + m_lib = lib; + m_Name.SetParent( this ); +} + + CMP_LIB_ENTRY::~CMP_LIB_ENTRY() { } @@ -178,7 +193,43 @@ wxString CMP_LIB_ENTRY::GetLibraryName() if( m_lib != NULL ) return m_lib->GetName(); - return wxEmptyString; + return wxString( _( "none" ) ); +} + + +/** + * Function SaveDoc + * writes the doc info out to a FILE in "*.dcm" format. + * Only non empty fields are written. + * If all fields are empty, does not write anything + * @param aFile The FILE to write to. + * @return bool - true if success writing else false. + */ +bool CMP_LIB_ENTRY::SaveDoc( FILE* aFile ) +{ + if( m_Doc.IsEmpty() && m_KeyWord.IsEmpty() && m_DocFile.IsEmpty() ) + return true; + + /* Generation des lignes utiles */ + if( fprintf( aFile, "#\n$CMP %s\n", CONV_TO_UTF8( m_Name.m_Text ) ) < 0 ) + return false; + + if( ! m_Doc.IsEmpty() + && fprintf( aFile, "D %s\n", CONV_TO_UTF8( m_Doc ) ) < 0 ) + return false; + + if( ! m_KeyWord.IsEmpty() + && fprintf( aFile, "K %s\n", CONV_TO_UTF8( m_KeyWord ) ) < 0 ) + return false; + + if( ! m_DocFile.IsEmpty() + && fprintf( aFile, "F %s\n", CONV_TO_UTF8( m_DocFile ) ) < 0 ) + return false; + + if( fprintf( aFile, "$ENDCMP\n" ) < 0 ) + return false; + + return true; } @@ -223,6 +274,13 @@ LIB_ALIAS::LIB_ALIAS( const wxString& name, LIB_COMPONENT* root, } +LIB_ALIAS::LIB_ALIAS( const LIB_ALIAS& alias, CMP_LIBRARY* lib ) : + CMP_LIB_ENTRY( alias ) +{ + m_root = alias.m_root; +} + + LIB_ALIAS::~LIB_ALIAS() { } @@ -258,10 +316,61 @@ LIB_COMPONENT::LIB_COMPONENT( const wxString& name, CMP_LIBRARY* lib ) : } +LIB_COMPONENT::LIB_COMPONENT( const LIB_COMPONENT& component, + CMP_LIBRARY* lib ) : + CMP_LIB_ENTRY( component, lib ) +{ + LIB_DRAW_ITEM* oldItem; + LIB_DRAW_ITEM* newItem; + LIB_DRAW_ITEM* lastItem = NULL; + LibDrawField* oldField; + LibDrawField* newField; + + + m_Prefix = component.m_Prefix; + m_AliasList = component.m_AliasList; + m_FootprintList = component.m_FootprintList; + m_UnitCount = component.m_UnitCount; + m_UnitSelectionLocked = component.m_UnitSelectionLocked; + m_TextInside = component.m_TextInside; + m_DrawPinNum = component.m_DrawPinNum; + m_DrawPinName = component.m_DrawPinName; + m_LastDate = component.m_LastDate; + + m_Prefix.SetParent( this ); + + for( oldItem = component.m_Drawings; oldItem != NULL; + oldItem = oldItem->Next() ) + { + if( ( oldItem->m_Flags & IS_NEW ) != 0 ) + continue; + + newItem = oldItem->GenCopy(); + + if( lastItem == NULL ) + m_Drawings = newItem; + else + lastItem->SetNext( newItem ); + + newItem->SetParent( this ); + lastItem = newItem; + newItem->SetNext( NULL ); + } + + for( oldField = component.m_Fields; oldField != NULL; + oldField = oldField->Next() ) + { + newField = (LibDrawField*) oldField->GenCopy(); + newField->SetParent( this ); + m_Fields.PushBack( newField ); + } +} + + LIB_COMPONENT::~LIB_COMPONENT() { - LibEDA_BaseStruct* DrawItem; - LibEDA_BaseStruct* NextDrawItem; + LIB_DRAW_ITEM* DrawItem; + LIB_DRAW_ITEM* NextDrawItem; /* suppression des elements dependants */ DrawItem = m_Drawings; @@ -283,10 +392,10 @@ void LIB_COMPONENT::Draw( WinEDA_DrawPanel* panel, wxDC* dc, bool showPinText, bool drawFields, bool onlySelected ) { - wxString fieldText; - LibDrawField* Field; - LibEDA_BaseStruct* drawItem; - BASE_SCREEN* screen = panel->GetScreen(); + wxString fieldText; + LibDrawField* Field; + LIB_DRAW_ITEM* drawItem; + BASE_SCREEN* screen = panel->GetScreen(); GRSetDrawMode( dc, drawMode ); @@ -303,7 +412,8 @@ void LIB_COMPONENT::Draw( WinEDA_DrawPanel* panel, wxDC* dc, if( multi && drawItem->m_Unit && ( drawItem->m_Unit != multi ) ) continue; - if( convert && drawItem->m_Convert && ( drawItem->m_Convert != convert ) ) + if( convert && drawItem->m_Convert + && ( drawItem->m_Convert != convert ) ) continue; @@ -346,12 +456,19 @@ void LIB_COMPONENT::Draw( WinEDA_DrawPanel* panel, wxDC* dc, fieldText = m_Prefix.m_Text + wxT( "?" ); } - m_Prefix.Draw( panel, dc, offset, color, drawMode, &fieldText, - transformMatrix ); - m_Name.Draw( panel, dc, offset, color, drawMode, NULL, transformMatrix ); + if( !( onlySelected && m_Prefix.m_Selected == 0 ) ) + m_Prefix.Draw( panel, dc, offset, color, drawMode, &fieldText, + transformMatrix ); + + if( !( onlySelected && m_Name.m_Selected == 0 ) ) + m_Name.Draw( panel, dc, offset, color, drawMode, NULL, + transformMatrix ); for( Field = m_Fields; Field != NULL; Field = Field->Next() ) { + if( onlySelected && drawItem->m_Selected == 0 ) + continue; + Field->Draw( panel, dc, offset, color, drawMode, NULL, transformMatrix ); } @@ -376,13 +493,13 @@ void LIB_COMPONENT::Draw( WinEDA_DrawPanel* panel, wxDC* dc, } -void LIB_COMPONENT::RemoveDrawItem( LibEDA_BaseStruct* item, +void LIB_COMPONENT::RemoveDrawItem( LIB_DRAW_ITEM* item, WinEDA_DrawPanel* panel, wxDC* dc ) { wxASSERT( item != NULL ); - LibEDA_BaseStruct* prevItem = m_Drawings; + LIB_DRAW_ITEM* prevItem = m_Drawings; if( dc != NULL ) item->Draw( panel, dc, wxPoint( 0, 0 ), -1, g_XorMode, NULL, @@ -417,11 +534,11 @@ void LIB_COMPONENT::RemoveDrawItem( LibEDA_BaseStruct* item, */ bool LIB_COMPONENT::Save( FILE* aFile ) { - LibEDA_BaseStruct* DrawEntry; + LIB_DRAW_ITEM* DrawEntry; LibDrawField* Field; - if( Type != ROOT ) // should not happen, but just in case - return false; + /* Sort just in clase sorting was not done properly. */ + SortDrawItems(); /* First line: it s a comment (component name for readers) */ if( fprintf( aFile, "#\n# %s\n#\n", CONV_TO_UTF8( m_Name.m_Text ) ) < 0 ) @@ -656,9 +773,9 @@ bool LIB_COMPONENT::Load( FILE* file, char* line, int* lineNum, bool LIB_COMPONENT::LoadDrawEntries( FILE* f, char* line, int* lineNum, wxString& errorMsg ) { - LibEDA_BaseStruct* newEntry = NULL; - LibEDA_BaseStruct* headEntry = NULL; - LibEDA_BaseStruct* tailEntry = NULL; + LIB_DRAW_ITEM* newEntry = NULL; + LIB_DRAW_ITEM* headEntry = NULL; + LIB_DRAW_ITEM* tailEntry = NULL; while( true ) { @@ -676,31 +793,31 @@ bool LIB_COMPONENT::LoadDrawEntries( FILE* f, char* line, switch( line[0] ) { case 'A': /* Arc */ - newEntry = ( LibEDA_BaseStruct* ) new LibDrawArc(this); + newEntry = ( LIB_DRAW_ITEM* ) new LibDrawArc(this); break; case 'C': /* Circle */ - newEntry = ( LibEDA_BaseStruct* ) new LibDrawCircle(this); + newEntry = ( LIB_DRAW_ITEM* ) new LibDrawCircle(this); break; case 'T': /* Text */ - newEntry = ( LibEDA_BaseStruct* ) new LibDrawText(this); + newEntry = ( LIB_DRAW_ITEM* ) new LibDrawText(this); break; case 'S': /* Square */ - newEntry = ( LibEDA_BaseStruct* ) new LibDrawSquare(this); + newEntry = ( LIB_DRAW_ITEM* ) new LibDrawSquare(this); break; case 'X': /* Pin Description */ - newEntry = ( LibEDA_BaseStruct* ) new LibDrawPin(this); + newEntry = ( LIB_DRAW_ITEM* ) new LibDrawPin(this); break; case 'P': /* Polyline */ - newEntry = ( LibEDA_BaseStruct* ) new LibDrawPolyline(this); + newEntry = ( LIB_DRAW_ITEM* ) new LibDrawPolyline(this); break; case 'B': /* Bezier Curves */ - newEntry = ( LibEDA_BaseStruct* ) new LibDrawBezier(this); + newEntry = ( LIB_DRAW_ITEM* ) new LibDrawBezier(this); break; default: @@ -818,7 +935,7 @@ bool LIB_COMPONENT::LoadFootprints( FILE* file, char* line, */ void LIB_COMPONENT::SortDrawItems() { - LibEDA_BaseStruct** Bufentry, ** BufentryBase, * Entry = m_Drawings; + LIB_DRAW_ITEM** Bufentry, ** BufentryBase, * Entry = m_Drawings; int ii, nbitems; if( Entry == NULL ) @@ -828,15 +945,15 @@ void LIB_COMPONENT::SortDrawItems() nbitems++; BufentryBase = - (LibEDA_BaseStruct**) MyZMalloc( (nbitems + 1) * - sizeof(LibEDA_BaseStruct*) ); + (LIB_DRAW_ITEM**) MyZMalloc( (nbitems + 1) * + sizeof(LIB_DRAW_ITEM*) ); /* memorisation du chainage : */ for( Entry = m_Drawings, ii = 0; Entry != NULL; Entry = Entry->Next() ) BufentryBase[ii++] = Entry; /* Tri du chainage */ - qsort( BufentryBase, nbitems, sizeof(LibEDA_BaseStruct*), SortItemsFct ); + qsort( BufentryBase, nbitems, sizeof(LIB_DRAW_ITEM*), SortItemsFct ); /* Mise a jour du chainage. Remarque: * le dernier element de BufEntryBase (BufEntryBase[nbitems]) est NULL*/ @@ -861,7 +978,7 @@ void LIB_COMPONENT::SortDrawItems() /**********************************************************************/ EDA_Rect LIB_COMPONENT::GetBoundaryBox( int Unit, int Convert ) { - LibEDA_BaseStruct* DrawEntry; + LIB_DRAW_ITEM* DrawEntry; EDA_Rect bBox( wxPoint( 0, 0 ), wxSize( 0, 0 ) ); for( DrawEntry = m_Drawings; DrawEntry != NULL; @@ -982,7 +1099,7 @@ bool LIB_COMPONENT::LoadDateAndTime( char* Line ) void LIB_COMPONENT::SetOffset( const wxPoint& offset ) { - LibEDA_BaseStruct* DrawEntry; + LIB_DRAW_ITEM* DrawEntry; m_Name.SetOffset( offset ); m_Prefix.SetOffset( offset ); @@ -1004,8 +1121,8 @@ void LIB_COMPONENT::SetOffset( const wxPoint& offset ) void LIB_COMPONENT::RemoveDuplicateDrawItems() { - LibEDA_BaseStruct* DEntryRef; - LibEDA_BaseStruct* DEntryCompare; + LIB_DRAW_ITEM* DEntryRef; + LIB_DRAW_ITEM* DEntryCompare; bool deleted; DEntryRef = m_Drawings; @@ -1043,7 +1160,7 @@ void LIB_COMPONENT::RemoveDuplicateDrawItems() bool LIB_COMPONENT::HasConversion() const { - LibEDA_BaseStruct* entry; + LIB_DRAW_ITEM* entry; for( entry = m_Drawings; entry != NULL; entry = entry->Next() ) { @@ -1055,37 +1172,149 @@ bool LIB_COMPONENT::HasConversion() const } -/** - * Function SaveDoc - * writes the doc info out to a FILE in "*.dcm" format. - * Only non empty fields are written. - * If all fields are empty, does not write anything - * @param aFile The FILE to write to. - * @return bool - true if success writing else false. - */ -bool CMP_LIB_ENTRY::SaveDoc( FILE* aFile ) +int LIB_COMPONENT::SelectItems( EDA_Rect& rect, int unit, int convert, + bool editPinByPin ) { - if( m_Doc.IsEmpty() && m_KeyWord.IsEmpty() && m_DocFile.IsEmpty() ) - return true; + LIB_DRAW_ITEM* item; + int ItemsCount = 0; - /* Generation des lignes utiles */ - if( fprintf( aFile, "#\n$CMP %s\n", CONV_TO_UTF8( m_Name.m_Text ) ) < 0 ) - return false; + for( item = m_Drawings; item != NULL; item = item->Next() ) + { + item->m_Selected = 0; - if( ! m_Doc.IsEmpty() - && fprintf( aFile, "D %s\n", CONV_TO_UTF8( m_Doc ) ) < 0 ) - return false; + if( ( item->m_Unit && item->m_Unit != unit ) + || ( item->m_Convert && item->m_Convert != convert ) ) + { + if( item->Type() != COMPONENT_PIN_DRAW_TYPE ) + continue; - if( ! m_KeyWord.IsEmpty() - && fprintf( aFile, "K %s\n", CONV_TO_UTF8( m_KeyWord ) ) < 0 ) - return false; + // Specific rules for pins. + if( editPinByPin || m_UnitSelectionLocked + || ( item->m_Convert && item->m_Convert != convert ) ) + continue; + } - if( ! m_DocFile.IsEmpty() - && fprintf( aFile, "F %s\n", CONV_TO_UTF8( m_DocFile ) ) < 0 ) - return false; + if( item->Inside( rect ) ) + { + item->m_Selected = IS_SELECTED; + ItemsCount++; + } + } - if( fprintf( aFile, "$ENDCMP\n" ) < 0 ) - return false; + if( m_Name.Inside( rect ) ) + { + m_Name.m_Selected = IS_SELECTED; + ItemsCount++; + } - return true; + if( m_Prefix.Inside( rect ) ) + { + m_Prefix.m_Selected = IS_SELECTED; + ItemsCount++; + } + + for( LibDrawField* field = m_Fields.GetFirst(); field != NULL; + field = field->Next() ) + { + if( field->Inside( rect ) ) + { + field->m_Selected = IS_SELECTED; + ItemsCount++; + } + } + + return ItemsCount; +} + + +void LIB_COMPONENT::MoveSelectedItems( const wxPoint& offset ) +{ + LIB_DRAW_ITEM* item; + LibDrawField* field; + + for( item = m_Drawings; item != NULL; item = item->Next() ) + { + if( item->m_Selected == 0 ) + continue; + + item->SetOffset( offset ); + item->m_Flags = item->m_Selected = 0; + } + + if( m_Name.m_Selected ) + { + m_Name.SetOffset( offset ); + m_Name.m_Flags = m_Name.m_Selected = 0; + } + + if( m_Prefix.m_Selected ) + { + m_Prefix.SetOffset( offset ); + m_Prefix.m_Flags = m_Prefix.m_Selected = 0; + } + + for( field = m_Fields.GetFirst(); field != NULL; field = field->Next() ) + { + if( field->m_Selected ) + { + field->SetOffset( offset ); + field->m_Flags = field->m_Selected = 0; + } + } + + SortDrawItems(); +} + + +void LIB_COMPONENT::ClearSelectedItems( void ) +{ + LIB_DRAW_ITEM* item; + LibDrawField* field; + + for( item = m_Drawings; item != NULL; item = item->Next() ) + item->m_Flags = item->m_Selected = 0; + + m_Name.m_Flags = m_Name.m_Selected = 0; + m_Prefix.m_Flags = m_Prefix.m_Selected = 0; + + for( field = m_Fields.GetFirst(); field != NULL; field = field->Next() ) + field->m_Flags = field->m_Selected = 0; +} + + +void LIB_COMPONENT::DeleteSelectedItems( void ) +{ + LIB_DRAW_ITEM* item; + LIB_DRAW_ITEM* nextItem; + + for( item = m_Drawings; item != NULL; item = nextItem ) + { + nextItem = item->Next(); + + if( item->m_Selected == 0 ) + continue; + + RemoveDrawItem( item ); + } +} + + +void LIB_COMPONENT::CopySelectedItems( const wxPoint& offset ) +{ + LIB_DRAW_ITEM* item; + + for( item = m_Drawings; item != NULL; item = item->Next() ) + { + if( item->m_Selected == 0 ) + continue; + + item->m_Selected = 0; + LIB_DRAW_ITEM* newItem = item->GenCopy(); + newItem->m_Selected = IS_SELECTED; + newItem->SetNext( m_Drawings ); + m_Drawings = newItem; + } + + MoveSelectedItems( offset ); + SortDrawItems(); } diff --git a/eeschema/class_libentry.h b/eeschema/class_libentry.h index 2ef3cd3051..2fd69e43ad 100644 --- a/eeschema/class_libentry.h +++ b/eeschema/class_libentry.h @@ -53,6 +53,8 @@ public: public: CMP_LIB_ENTRY( LibrEntryType CmpType, const wxString& name, CMP_LIBRARY* lib = NULL ); + CMP_LIB_ENTRY( const CMP_LIB_ENTRY& entry, CMP_LIBRARY* lib = NULL ); + virtual ~CMP_LIB_ENTRY(); virtual wxString GetClass() const @@ -123,7 +125,7 @@ public: bool m_DrawPinNum; bool m_DrawPinName; DLIST m_Fields; /* Auxiliary Field list (id >= 2 ) */ - LibEDA_BaseStruct* m_Drawings; /* How to draw this part */ + LIB_DRAW_ITEM * m_Drawings; /* How to draw this part */ long m_LastDate; // Last change Date public: @@ -134,6 +136,8 @@ public: LIB_COMPONENT( const wxString& name, CMP_LIBRARY* lib = NULL ); + LIB_COMPONENT( const LIB_COMPONENT& component, CMP_LIBRARY* lib = NULL ); + ~LIB_COMPONENT(); EDA_Rect GetBoundaryBox( int Unit, int Convert ); @@ -207,7 +211,7 @@ public: * @param panel - Panel to remove part from. * @param dc - Device context to remove part from. */ - void RemoveDrawItem( LibEDA_BaseStruct* item, + void RemoveDrawItem( LIB_DRAW_ITEM* item, WinEDA_DrawPanel* panel = NULL, wxDC* dc = NULL ); @@ -244,6 +248,52 @@ public: wxASSERT( name != NULL ); return m_AliasList.Index( name ) != wxNOT_FOUND; } + + /** + * Checks all draw objects of component to see if they are with block. + * + * Use this method to mark draw objects as selected during block + * functions. + * + * @param rect - The bounding rectangle to test in draw items are inside. + * @param unit - The current unit number to test against. + * @param convert - Are the draw items being selected a conversion. + * @param editPinByPin - Used to ignore pin selections when in edit pin + * by pin mode is enabled. + * + * @return int - The number of draw object found inside the block select + * rectangle. + */ + int SelectItems( EDA_Rect& rect, int unit, int convert, + bool editPinByPin ); + + /** + * Clears all the draw items marked by a block select. + */ + void ClearSelectedItems( void ); + + /** + * Deletes the select draw items marked by a block select. + * + * The name and reference field will not be deleted. They are the + * minimum drawing items required for any component. Thier properties + * can be changed but the cannot be removed. + */ + void DeleteSelectedItems( void ); + + /** + * Move the selected draw items marked by a block select. + */ + void MoveSelectedItems( const wxPoint& offset ); + + /** + * Make a copy of the selected draw items marked by a block select. + * + * Fields are not copied. Only component body items are copied. + * Copying fields would result in duplicate fields which does not + * make sense in this context. + */ + void CopySelectedItems( const wxPoint& offset ); }; @@ -264,7 +314,8 @@ protected: public: LIB_ALIAS( const wxString& name, LIB_COMPONENT* root, - CMP_LIBRARY* lib = NULL ); + CMP_LIBRARY* lib = NULL ); + LIB_ALIAS( const LIB_ALIAS& alias, CMP_LIBRARY* lib = NULL ); ~LIB_ALIAS(); virtual wxString GetClass() const diff --git a/eeschema/class_libentry_fields.cpp b/eeschema/class_libentry_fields.cpp index 1d27be291a..dae6327d2f 100644 --- a/eeschema/class_libentry_fields.cpp +++ b/eeschema/class_libentry_fields.cpp @@ -10,10 +10,9 @@ #include "kicad_string.h" #include "program.h" -#include "libcmp.h" #include "general.h" - #include "protos.h" +#include "class_libentry.h" #include #include @@ -39,19 +38,35 @@ * others = free fields */ LibDrawField::LibDrawField(LIB_COMPONENT * aParent, int idfield ) : - LibEDA_BaseStruct( COMPONENT_FIELD_DRAW_TYPE, aParent ) + LIB_DRAW_ITEM( COMPONENT_FIELD_DRAW_TYPE, aParent ) { m_FieldId = idfield; m_Size.x = m_Size.y = DEFAULT_SIZE_TEXT; } LibDrawField::LibDrawField( int idfield ) : - LibEDA_BaseStruct( COMPONENT_FIELD_DRAW_TYPE, NULL ) + LIB_DRAW_ITEM( COMPONENT_FIELD_DRAW_TYPE, NULL ) { m_FieldId = idfield; m_Size.x = m_Size.y = DEFAULT_SIZE_TEXT; } +LibDrawField::LibDrawField( const LibDrawField& field ) : + LIB_DRAW_ITEM( field ) +{ + m_Pos = field.m_Pos; + m_Size = field.m_Size; + m_Width = field.m_Width; + m_Orient = field.m_Orient; + m_Attributs = field.m_Attributs; + m_Text = field.m_Text; + m_Name = field.m_Name; + m_HJustify = field.m_HJustify; + m_VJustify = field.m_VJustify; + m_Italic = field.m_Italic; + m_Bold = field.m_Bold; +} + LibDrawField::~LibDrawField() { @@ -358,13 +373,13 @@ bool LibDrawField::HitTest( wxPoint aPosRef, int aThreshold, } // Creation et Duplication d'un field -LibEDA_BaseStruct* LibDrawField::DoGenCopy() +LIB_DRAW_ITEM* LibDrawField::DoGenCopy() { LibDrawField* newfield = new LibDrawField( m_FieldId ); Copy( newfield ); - return (LibEDA_BaseStruct*) newfield; + return (LIB_DRAW_ITEM*) newfield; } @@ -389,7 +404,7 @@ void LibDrawField::Copy( LibDrawField* Target ) const } -bool LibDrawField::DoCompare( const LibEDA_BaseStruct& other ) const +bool LibDrawField::DoCompare( const LIB_DRAW_ITEM& other ) const { wxASSERT( other.Type() == COMPONENT_FIELD_DRAW_TYPE ); @@ -416,13 +431,19 @@ bool LibDrawField::DoTestInside( EDA_Rect& rect ) } +void LibDrawField::DoMove( const wxPoint& newPosition ) +{ + m_Pos = newPosition; +} + + /* * If the field is the reference, return reference like schematic, * i.e U -> U? or U?A or the field text for others * * @fixme This should be handled by the field object. */ -wxString LibDrawField::GetFullText( void ) +wxString LibDrawField::GetFullText( int unit ) { if( m_FieldId != REFERENCE ) return m_Text; @@ -433,11 +454,11 @@ wxString LibDrawField::GetFullText( void ) { #if defined(KICAD_GOST) text.Printf( wxT( "%s?.%c" ), - m_Text.GetData(), CurrentUnit + '1' - 1 ); + m_Text.GetData(), unit + '1' - 1 ); #else text.Printf( wxT( "%s?%c" ), - m_Text.GetData(), CurrentUnit + 'A' - 1 ); + m_Text.GetData(), unit + 'A' - 1 ); #endif } else diff --git a/eeschema/class_libentry_fields.h b/eeschema/class_libentry_fields.h index 2b778cc8b0..720dff22a3 100644 --- a/eeschema/class_libentry_fields.h +++ b/eeschema/class_libentry_fields.h @@ -6,6 +6,9 @@ #define CLASS_LIBENTRY_FIELDS_H +#include "classes_body_items.h" + + /* Fields , same as component fields. * can be defined in libraries (mandatory for ref and value, ca be useful for * footprints) @@ -15,7 +18,7 @@ * default value in schematic */ -class LibDrawField : public LibEDA_BaseStruct, +class LibDrawField : public LIB_DRAW_ITEM, public EDA_TextStruct { public: @@ -36,6 +39,7 @@ public: LibDrawField( int idfield = 2 ); LibDrawField( LIB_COMPONENT * aParent, int idfield = 2 ); + LibDrawField( const LibDrawField& field ); ~LibDrawField(); virtual wxString GetClass() const { @@ -103,13 +107,26 @@ public: m_Parent = field.m_Parent; } - wxString GetFullText( void ); + /** + * Return the text of a field. + * + * If the field is the reference field, the unit number is used to + * create a pseudo reference text. If the base reference field is U, + * the string U?A will be returned for unit = 1. + * + * @param unit - The package unit number. Only effects reference field. + * + * @return wxString - Field text. + */ + wxString GetFullText( int unit = 1 ); protected: - virtual LibEDA_BaseStruct* DoGenCopy(); - virtual bool DoCompare( const LibEDA_BaseStruct& other ) const; + virtual LIB_DRAW_ITEM* DoGenCopy(); + virtual bool DoCompare( const LIB_DRAW_ITEM& other ) const; virtual void DoOffset( const wxPoint& offset ); virtual bool DoTestInside( EDA_Rect& rect ); + virtual void DoMove( const wxPoint& newPosition ); + virtual wxPoint DoGetPosition( void ) { return m_Pos; } }; #endif // CLASS_LIBENTRY_FIELDS_H diff --git a/eeschema/class_library.cpp b/eeschema/class_library.cpp index 89a2281b1c..8e0d14e58d 100644 --- a/eeschema/class_library.cpp +++ b/eeschema/class_library.cpp @@ -11,7 +11,6 @@ #include "eda_doc.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "class_library.h" @@ -197,7 +196,7 @@ LIB_COMPONENT* CMP_LIBRARY::AddComponent( LIB_COMPONENT* cmp ) { wxASSERT( cmp != NULL ); - LIB_COMPONENT* newCmp = CopyLibEntryStruct( cmp ); + LIB_COMPONENT* newCmp = new LIB_COMPONENT( *cmp, this ); if( newCmp == NULL ) return NULL; @@ -387,7 +386,7 @@ in library <%s>." ), RemoveEntry( oldComponent->GetName() ); - LIB_COMPONENT* newCmp = CopyLibEntryStruct( newComponent ); + LIB_COMPONENT* newCmp = new LIB_COMPONENT( *newComponent, this ); if( newCmp == NULL ) return NULL; @@ -706,13 +705,12 @@ document file." ), } -bool CMP_LIBRARY::Save( const wxString& FullFileName ) +bool CMP_LIBRARY::Save( const wxString& FullFileName, bool oldDocFormat ) { - FILE* libfile, *docfile; + FILE* libfile; wxString msg; wxFileName libFileName = FullFileName; wxFileName backupFileName = FullFileName; - wxFileName docFileName = FullFileName; /* the old .lib file is renamed .bak */ if( libFileName.FileExists() ) @@ -723,24 +721,8 @@ bool CMP_LIBRARY::Save( const wxString& FullFileName ) if( !wxRenameFile( libFileName.GetFullPath(), backupFileName.GetFullPath() ) ) { - msg = wxT( "Failed to rename old lib file " ) + - backupFileName.GetFullPath(); - DisplayError( NULL, msg ); - } - } - - docFileName.SetExt( DOC_EXT ); - /* L'ancien fichier doc lib est renomme en .bck */ - if( wxFileExists( docFileName.GetFullPath() ) ) - { - backupFileName = docFileName; - backupFileName.SetExt( wxT( "bck" ) ); - wxRemoveFile( backupFileName.GetFullPath() ); - - if( !wxRenameFile( docFileName.GetFullPath(), - backupFileName.GetFullPath() ) ) - { - msg = wxT( "Failed to save old doc lib file " ) + + libFileName.MakeAbsolute(); + msg = wxT( "Failed to rename old component library file " ) + backupFileName.GetFullPath(); DisplayError( NULL, msg ); } @@ -750,31 +732,22 @@ bool CMP_LIBRARY::Save( const wxString& FullFileName ) if( libfile == NULL ) { + libFileName.MakeAbsolute(); msg = wxT( "Failed to create component library file " ) + libFileName.GetFullPath(); DisplayError( NULL, msg ); return false; } - docfile = wxFopen( docFileName.GetFullPath(), wxT( "wt" ) ); - - if( docfile == NULL ) - { - msg = wxT( "Failed to create component document library file " ) + - docFileName.GetFullPath(); - DisplayError( NULL, msg ); - } - m_IsModified = false; /* Creation de l'entete de la librairie */ m_TimeStamp = GetTimeStamp(); - SaveHeader( libfile ); - - /* Sauvegarde des composant: */ - char Line[256]; - fprintf( docfile, "%s Date: %s\n", DOCFILE_IDENT, - DateAndTime( Line ) ); + if( !SaveHeader( libfile ) ) + { + fclose( libfile ); + return false; + } bool success = true; @@ -783,21 +756,80 @@ bool CMP_LIBRARY::Save( const wxString& FullFileName ) if ( entry.Type == ROOT ) { LIB_COMPONENT* component = ( LIB_COMPONENT* ) &entry; - if ( ! component->Save( libfile ) ) - success = false; - } - if ( docfile ) - { - if ( ! entry.SaveDoc( docfile ) ) + if ( !component->Save( libfile ) ) success = false; } } - fprintf( libfile, "#\n#End Library\n" ); - if ( docfile ) - fprintf( docfile, "#\n#End Doc Library\n" ); + if( fprintf( libfile, "#\n#End Library\n" ) < 0 ) + success = false; + fclose( libfile ); + + if( USE_OLD_DOC_FILE_FORMAT( m_verMajor, m_verMinor ) && oldDocFormat ) + success = SaveDocFile( FullFileName ); + + return success; +} + + +bool CMP_LIBRARY::SaveDocFile( const wxString& FullFileName ) +{ + FILE* docfile; + wxString msg; + wxFileName backupFileName = FullFileName; + wxFileName docFileName = FullFileName; + + docFileName.SetExt( DOC_EXT ); + + /* Save current doc file as .bck */ + if( docFileName.FileExists() ) + { + backupFileName = docFileName; + backupFileName.SetExt( wxT( "bck" ) ); + wxRemoveFile( backupFileName.GetFullPath() ); + + if( !wxRenameFile( docFileName.GetFullPath(), + backupFileName.GetFullPath() ) ) + { + msg = wxT( "Failed to save old library document file " ) + + backupFileName.GetFullPath(); + DisplayError( NULL, msg ); + } + } + + docfile = wxFopen( docFileName.GetFullPath(), wxT( "wt" ) ); + + if( docfile == NULL ) + { + docFileName.MakeAbsolute(); + msg = wxT( "Failed to create component document library file " ) + + docFileName.GetFullPath(); + DisplayError( NULL, msg ); + return false; + } + + char Line[256]; + if( fprintf( docfile, "%s Date: %s\n", DOCFILE_IDENT, + DateAndTime( Line ) ) < 0 ) + { + fclose( docfile ); + return false; + } + + bool success = true; + + BOOST_FOREACH( CMP_LIB_ENTRY& entry, m_Entries ) + { + if ( !entry.SaveDoc( docfile ) ) + success = false; + } + + if ( fprintf( docfile, "#\n#End Doc Library\n" ) < 0 ) + success = false; + fclose( docfile ); + return success; } @@ -805,7 +837,7 @@ bool CMP_LIBRARY::Save( const wxString& FullFileName ) bool CMP_LIBRARY::SaveHeader( FILE* file ) { char BufLine[1024]; - bool succes = false; + bool succes = true; DateAndTime( BufLine ); if( fprintf( file, "%s %d.%d Date: %s\n", LIBFILE_IDENT, @@ -844,7 +876,8 @@ CMP_LIBRARY* CMP_LIBRARY::LoadLibrary( const wxFileName& fileName, return NULL; } - lib->LoadDocs( errMsg ); + if( USE_OLD_DOC_FILE_FORMAT( lib->m_verMajor, lib->m_verMinor ) ) + lib->LoadDocs( errMsg ); return lib; } diff --git a/eeschema/class_library.h b/eeschema/class_library.h index dc64b9c971..1e830fe905 100644 --- a/eeschema/class_library.h +++ b/eeschema/class_library.h @@ -1,6 +1,6 @@ -/***********************************/ -/* Headers for library definition */ -/***********************************/ +/*********************************************/ +/* Headers for component library definition */ +/*********************************************/ #ifndef CLASS_LIBRARY_H #define CLASS_LIBRARY_H @@ -8,6 +8,37 @@ #include "class_libentry.h" +/* + * Component Library version and file header macros. + */ +#define LIB_VERSION_MAJOR 2 +#define LIB_VERSION_MINOR 3 + +/* Must be the first line of component library (.lib) files. */ +#define LIBFILE_IDENT "EESchema-LIBRARY Version" + +#define LIB_VERSION( major, minor ) ( major * 100 + minor ) + +#define IS_LIB_CURRENT_VERSION( major, minor ) \ + ( \ + LIB_VERSION( major1, minor1 ) == \ + LIB_VERSION( LIB_VERSION_MAJOR, LIB_VERSION_MINOR) \ + ) + +/* + * Library versions 2.3 and lower use the old separate library (.lib) and + * document (.dcm) files. Component libraries after 2.3 merged the library + * and document files into a single library file. This macro checks if the + * library version supports the old format + */ +#define USE_OLD_DOC_FILE_FORMAT( major, minor ) \ + ( LIB_VERSION( major, minor ) <= LIB_VERSION( 2, 3 ) ) + +/* Must be the first line of component library document (.dcm) files. */ +#define DOCFILE_IDENT "EESchema-DOCLIB Version 2.0" + +#define DOC_EXT wxT( "dcm" ) + /* Helpers for creating a list of component libraries. */ class CMP_LIBRARY; @@ -43,17 +74,35 @@ public: /** * Save library to file. * - * Two files are created. The component objects are save as component - * library (*.lib) files. The alias objects are save as document - * definition (*.dcm) files. If the component library already exists, - * it is backup up in file *.bak. If the document definition file - * already exists, it is backed up in file *.bck. + * Prior to component library version 3.0, two files were created. The + * component objects are wer as component library (*.lib) files. The + * library entry ojbect document strings were save in library document + * definition (*.dcm) files. After version component library version 3.0, + * the document string information is saved as part of the library file. + * Saving separate document is maintained for backwards compatability. + * Please note that this behavior may change in the future. If the + * component library already exists, it is backup up in file *.bak. + * + * @param aFullFileName - The library filename with path. + * @param oldDocFormat - Save the document information in a separate + * file if true. The default is to save as the + * current library file format. + * + * @return bool - true if success writing else false. + */ + bool Save( const wxString& aFullFileName, bool oldDocFormat = false ); + + /** + * Save library document information to file. + * + * If the document definition file* already exists, it is backed up in + * file *.bck. * * @param aFullFileName - The library filename with path. * * @return bool - true if success writing else false. */ - bool Save( const wxString& aFullFileName ); + bool SaveDocFile( const wxString& FullFileName ); /** * Load library from file. diff --git a/eeschema/class_netlist_object.cpp b/eeschema/class_netlist_object.cpp index 5156333106..c758181db0 100644 --- a/eeschema/class_netlist_object.cpp +++ b/eeschema/class_netlist_object.cpp @@ -6,7 +6,6 @@ #include "fctsys.h" #include "common.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "class_netlist_object.h" diff --git a/eeschema/class_pin.cpp b/eeschema/class_pin.cpp index 6c66f4d9f9..bc2f5b8e54 100644 --- a/eeschema/class_pin.cpp +++ b/eeschema/class_pin.cpp @@ -12,10 +12,10 @@ #include "plot_common.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libeditfrm.h" +#include "class_libentry.h" const wxChar* MsgPinElectricType[] = @@ -34,7 +34,7 @@ const wxChar* MsgPinElectricType[] = }; LibDrawPin::LibDrawPin(LIB_COMPONENT * aParent) : - LibEDA_BaseStruct( COMPONENT_PIN_DRAW_TYPE, aParent ) + LIB_DRAW_ITEM( COMPONENT_PIN_DRAW_TYPE, aParent ) { m_PinLen = 300; /* default Pin len */ m_Orient = PIN_RIGHT; /* Pin oprient: Up, Down, Left, Right */ @@ -53,6 +53,26 @@ LibDrawPin::LibDrawPin(LIB_COMPONENT * aParent) : } +LibDrawPin::LibDrawPin( const LibDrawPin& pin ) : LIB_DRAW_ITEM( pin ) +{ + m_Pos = pin.m_Pos; + m_PinLen = pin.m_PinLen; + m_Orient = pin.m_Orient; + m_PinShape = pin.m_PinShape; + m_PinType = pin.m_PinType; + m_Attributs = pin.m_Attributs; + m_PinNum = pin.m_PinNum; + m_PinNumSize = pin.m_PinNumSize; + m_PinNameSize = pin.m_PinNameSize; + m_PinNumShapeOpt = pin.m_PinNumShapeOpt; + m_PinNameShapeOpt = pin.m_PinNameShapeOpt; + m_PinNumPositionOpt = pin.m_PinNumPositionOpt; + m_PinNamePositionOpt = pin.m_PinNamePositionOpt; + m_Width = pin.m_Width; + m_PinName = pin.m_PinName; +} + + /** * Function HitTest * tests if the given wxPoint is within the bounds of this object. @@ -1035,7 +1055,7 @@ void LibDrawPin::SetPinNumFromString( wxString& buffer ) /*************************************/ -LibEDA_BaseStruct* LibDrawPin::DoGenCopy() +LIB_DRAW_ITEM* LibDrawPin::DoGenCopy() /*************************************/ { LibDrawPin* newpin = new LibDrawPin( GetParent() ); @@ -1059,11 +1079,11 @@ LibEDA_BaseStruct* LibDrawPin::DoGenCopy() newpin->m_Width = m_Width; newpin->m_PinName = m_PinName; - return (LibEDA_BaseStruct*) newpin; + return (LIB_DRAW_ITEM*) newpin; } -bool LibDrawPin::DoCompare( const LibEDA_BaseStruct& other ) const +bool LibDrawPin::DoCompare( const LIB_DRAW_ITEM& other ) const { wxASSERT( other.Type() == COMPONENT_PIN_DRAW_TYPE ); @@ -1087,6 +1107,12 @@ bool LibDrawPin::DoTestInside( EDA_Rect& rect ) } +void LibDrawPin::DoMove( const wxPoint& newPosition ) +{ + m_Pos = newPosition; +} + + /** Function LibDrawPin::DisplayInfo * Displays info (pin num and name, orientation ... * on the Info window @@ -1096,7 +1122,7 @@ void LibDrawPin::DisplayInfo( WinEDA_DrawFrame* frame ) wxString Text; int ii; - LibEDA_BaseStruct::DisplayInfo( frame ); + LIB_DRAW_ITEM::DisplayInfo( frame ); /* Affichage du nom */ frame->MsgPanel->Affiche_1_Parametre( 30, _( "PinName" ), m_PinName, diff --git a/eeschema/class_sch_cmp_field.cpp b/eeschema/class_sch_cmp_field.cpp index 3097a95537..7ea55e0c0c 100644 --- a/eeschema/class_sch_cmp_field.cpp +++ b/eeschema/class_sch_cmp_field.cpp @@ -16,13 +16,12 @@ #include "base_struct.h" #include "gr_basic.h" #include "drawtxt.h" - -#include "program.h" -#include "libcmp.h" -#include "general.h" #include "macros.h" +#include "program.h" +#include "general.h" #include "protos.h" +#include "class_library.h" SCH_CMP_FIELD::SCH_CMP_FIELD( const wxPoint& aPos, int aFieldId, diff --git a/eeschema/class_sch_component.cpp b/eeschema/class_sch_component.cpp index fcf37b72f6..b94a1eda18 100644 --- a/eeschema/class_sch_component.cpp +++ b/eeschema/class_sch_component.cpp @@ -6,12 +6,12 @@ #include "class_drawpanel.h" #include "gr_basic.h" #include "common.h" + #include "program.h" -#include "libcmp.h" #include "general.h" #include "macros.h" - #include "protos.h" +#include "class_library.h" #include diff --git a/eeschema/class_sch_screen.cpp b/eeschema/class_sch_screen.cpp index c98d4ae672..dd3be2ff3f 100644 --- a/eeschema/class_sch_screen.cpp +++ b/eeschema/class_sch_screen.cpp @@ -4,8 +4,8 @@ #include "common.h" #include "eeschema_id.h" #include "class_drawpanel.h" + #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" diff --git a/eeschema/class_schematic_items.cpp b/eeschema/class_schematic_items.cpp index 740016edf9..e9fa8d0556 100644 --- a/eeschema/class_schematic_items.cpp +++ b/eeschema/class_schematic_items.cpp @@ -8,9 +8,7 @@ #include "common.h" #include "program.h" -#include "libcmp.h" #include "general.h" - #include "protos.h" /* used to calculate the pen size from default value diff --git a/eeschema/class_text-label.cpp b/eeschema/class_text-label.cpp index 24b5bf1bf0..4fe9d28541 100644 --- a/eeschema/class_text-label.cpp +++ b/eeschema/class_text-label.cpp @@ -11,7 +11,6 @@ #include "drawtxt.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" diff --git a/eeschema/classes_body_items.cpp b/eeschema/classes_body_items.cpp index 305023ccc2..1199c0a41a 100644 --- a/eeschema/classes_body_items.cpp +++ b/eeschema/classes_body_items.cpp @@ -11,9 +11,9 @@ #include "bezier_curves.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" +#include "classes_body_items.h" static int fill_tab[3] = { 'N', 'F', 'f' }; @@ -22,8 +22,7 @@ static int fill_tab[3] = { 'N', 'F', 'f' }; /* Base class (abstract) for components bodies items */ -LibEDA_BaseStruct::LibEDA_BaseStruct( KICAD_T struct_type, - LIB_COMPONENT* aParent ) : +LIB_DRAW_ITEM::LIB_DRAW_ITEM( KICAD_T struct_type, LIB_COMPONENT* aParent ) : EDA_BaseStruct( struct_type ) { m_Unit = 0; /* Unit identification (for multi part per package) @@ -31,11 +30,22 @@ LibEDA_BaseStruct::LibEDA_BaseStruct( KICAD_T struct_type, m_Convert = 0; /* Shape identification (for parts which have a convert * shape) 0 if the item is common to all shapes */ m_Fill = NO_FILL; - m_Parent = aParent; + m_Parent = (EDA_BaseStruct*) aParent; m_typeName = _( "Undefined" ); } +LIB_DRAW_ITEM::LIB_DRAW_ITEM( const LIB_DRAW_ITEM& item ) : + EDA_BaseStruct( item ) +{ + m_Unit = item.m_Unit; + m_Convert = item.m_Convert; + m_Fill = item.m_Fill; + m_Parent = item.m_Parent; + m_typeName = item.m_typeName; +} + + /** * Update the message panel information with the drawing information. * @@ -43,7 +53,7 @@ LibEDA_BaseStruct::LibEDA_BaseStruct( KICAD_T struct_type, * all library items. Call the base class from the derived class or the * common information will not be updated in the message panel. */ -void LibEDA_BaseStruct::DisplayInfo( WinEDA_DrawFrame* frame ) +void LIB_DRAW_ITEM::DisplayInfo( WinEDA_DrawFrame* frame ) { wxString msg; @@ -70,7 +80,7 @@ void LibEDA_BaseStruct::DisplayInfo( WinEDA_DrawFrame* frame ) } -bool LibEDA_BaseStruct::operator==( const LibEDA_BaseStruct& other ) const +bool LIB_DRAW_ITEM::operator==( const LIB_DRAW_ITEM& other ) const { return ( ( Type() == other.Type() ) && ( m_Unit == other.m_Unit ) @@ -84,7 +94,7 @@ bool LibEDA_BaseStruct::operator==( const LibEDA_BaseStruct& other ) const /**********************/ LibDrawArc::LibDrawArc( LIB_COMPONENT* aParent ) : - LibEDA_BaseStruct( COMPONENT_ARC_DRAW_TYPE, aParent ) + LIB_DRAW_ITEM( COMPONENT_ARC_DRAW_TYPE, aParent ) { m_Radius = 0; m_t1 = 0; @@ -95,6 +105,19 @@ LibDrawArc::LibDrawArc( LIB_COMPONENT* aParent ) : } +LibDrawArc::LibDrawArc( const LibDrawArc& arc ) : LIB_DRAW_ITEM( arc ) +{ + m_Radius = arc.m_Radius; + m_t1 = arc.m_t1; + m_t2 = arc.m_t2; + m_Width = arc.m_Width; + m_Fill = arc.m_Fill; + m_Pos = arc.m_Pos; + m_ArcStart = arc.m_ArcStart; + m_ArcEnd = arc.m_ArcEnd; +} + + /** * format: * A centre_posx centre_posy rayon start_angle end_angle unit convert @@ -233,7 +256,7 @@ bool LibDrawArc::HitTest( wxPoint aRefPoint, int aThreshold, } -LibEDA_BaseStruct* LibDrawArc::DoGenCopy() +LIB_DRAW_ITEM* LibDrawArc::DoGenCopy() { LibDrawArc* newitem = new LibDrawArc( GetParent() ); @@ -249,11 +272,11 @@ LibEDA_BaseStruct* LibDrawArc::DoGenCopy() newitem->m_Flags = m_Flags; newitem->m_Fill = m_Fill; - return (LibEDA_BaseStruct*) newitem; + return (LIB_DRAW_ITEM*) newitem; } -bool LibDrawArc::DoCompare( const LibEDA_BaseStruct& other ) const +bool LibDrawArc::DoCompare( const LIB_DRAW_ITEM& other ) const { wxASSERT( other.Type() == COMPONENT_ARC_DRAW_TYPE ); @@ -279,6 +302,15 @@ bool LibDrawArc::DoTestInside( EDA_Rect& rect ) } +void LibDrawArc::DoMove( const wxPoint& newPosition ) +{ + wxPoint offset = newPosition - m_Pos; + m_Pos = newPosition; + m_ArcStart += offset; + m_ArcEnd += offset; +} + + /** Function GetPenSize * @return the size of the "pen" that be used to draw or plot this item */ @@ -419,7 +451,7 @@ void LibDrawArc::DisplayInfo( WinEDA_DrawFrame* frame ) wxString msg; EDA_Rect bBox = GetBoundingBox(); - LibEDA_BaseStruct::DisplayInfo( frame ); + LIB_DRAW_ITEM::DisplayInfo( frame ); msg = ReturnStringFromValue( g_UnitMetric, m_Width, EESCHEMA_INTERNAL_UNIT, true ); @@ -438,7 +470,7 @@ void LibDrawArc::DisplayInfo( WinEDA_DrawFrame* frame ) /*************************/ LibDrawCircle::LibDrawCircle( LIB_COMPONENT* aParent ) : - LibEDA_BaseStruct( COMPONENT_CIRCLE_DRAW_TYPE, aParent ) + LIB_DRAW_ITEM( COMPONENT_CIRCLE_DRAW_TYPE, aParent ) { m_Radius = 0; m_Fill = NO_FILL; @@ -446,6 +478,15 @@ LibDrawCircle::LibDrawCircle( LIB_COMPONENT* aParent ) : } +LibDrawCircle::LibDrawCircle( const LibDrawCircle& circle ) : + LIB_DRAW_ITEM( circle ) +{ + m_Pos = circle.m_Pos; + m_Radius = circle.m_Radius; + m_Fill = circle.m_Fill; +} + + bool LibDrawCircle::Save( FILE* ExportFile ) const { if( fprintf( ExportFile, "C %d %d %d %d %d %d %c\n", m_Pos.x, m_Pos.y, @@ -519,7 +560,7 @@ bool LibDrawCircle::HitTest( wxPoint aPosRef, int aThreshold, } -LibEDA_BaseStruct* LibDrawCircle::DoGenCopy() +LIB_DRAW_ITEM* LibDrawCircle::DoGenCopy() { LibDrawCircle* newitem = new LibDrawCircle( GetParent() ); @@ -531,11 +572,11 @@ LibEDA_BaseStruct* LibDrawCircle::DoGenCopy() newitem->m_Flags = m_Flags; newitem->m_Fill = m_Fill; - return (LibEDA_BaseStruct*) newitem; + return (LIB_DRAW_ITEM*) newitem; } -bool LibDrawCircle::DoCompare( const LibEDA_BaseStruct& other ) const +bool LibDrawCircle::DoCompare( const LIB_DRAW_ITEM& other ) const { wxASSERT( other.Type() == COMPONENT_CIRCLE_DRAW_TYPE ); @@ -561,6 +602,12 @@ bool LibDrawCircle::DoTestInside( EDA_Rect& rect ) } +void LibDrawCircle::DoMove( const wxPoint& newPosition ) +{ + m_Pos = newPosition; +} + + /** Function GetPenSize * @return the size of the "pen" that be used to draw or plot this item */ @@ -623,7 +670,7 @@ void LibDrawCircle::DisplayInfo( WinEDA_DrawFrame* frame ) wxString msg; EDA_Rect bBox = GetBoundingBox(); - LibEDA_BaseStruct::DisplayInfo( frame ); + LIB_DRAW_ITEM::DisplayInfo( frame ); msg = ReturnStringFromValue( g_UnitMetric, m_Width, EESCHEMA_INTERNAL_UNIT, true ); @@ -646,7 +693,7 @@ void LibDrawCircle::DisplayInfo( WinEDA_DrawFrame* frame ) /*************************/ LibDrawSquare::LibDrawSquare( LIB_COMPONENT* aParent ) : - LibEDA_BaseStruct( COMPONENT_RECT_DRAW_TYPE, aParent ) + LIB_DRAW_ITEM( COMPONENT_RECT_DRAW_TYPE, aParent ) { m_Width = 0; m_Fill = NO_FILL; @@ -654,6 +701,16 @@ LibDrawSquare::LibDrawSquare( LIB_COMPONENT* aParent ) : } +LibDrawSquare::LibDrawSquare( const LibDrawSquare& rect ) : + LIB_DRAW_ITEM( rect ) +{ + m_Pos = rect.m_Pos; + m_End = rect.m_End; + m_Width = rect.m_Width; + m_Fill = rect.m_Fill; +} + + bool LibDrawSquare::Save( FILE* ExportFile ) const { if( fprintf( ExportFile, "S %d %d %d %d %d %d %d %c\n", m_Pos.x, m_Pos.y, @@ -689,7 +746,7 @@ bool LibDrawSquare::Load( char* line, wxString& errorMsg ) } -LibEDA_BaseStruct* LibDrawSquare::DoGenCopy() +LIB_DRAW_ITEM* LibDrawSquare::DoGenCopy() { LibDrawSquare* newitem = new LibDrawSquare( GetParent() ); @@ -701,11 +758,11 @@ LibEDA_BaseStruct* LibDrawSquare::DoGenCopy() newitem->m_Flags = m_Flags; newitem->m_Fill = m_Fill; - return (LibEDA_BaseStruct*) newitem; + return (LIB_DRAW_ITEM*) newitem; } -bool LibDrawSquare::DoCompare( const LibEDA_BaseStruct& other ) const +bool LibDrawSquare::DoCompare( const LIB_DRAW_ITEM& other ) const { wxASSERT( other.Type() == COMPONENT_RECT_DRAW_TYPE ); @@ -728,6 +785,14 @@ bool LibDrawSquare::DoTestInside( EDA_Rect& rect ) } +void LibDrawSquare::DoMove( const wxPoint& newPosition ) +{ + wxPoint size = m_End - m_Pos; + m_Pos = newPosition; + m_End = newPosition + size; +} + + /** Function GetPenSize * @return the size of the "pen" that be used to draw or plot this item */ @@ -778,7 +843,7 @@ void LibDrawSquare::DisplayInfo( WinEDA_DrawFrame* frame ) { wxString msg; - LibEDA_BaseStruct::DisplayInfo( frame ); + LIB_DRAW_ITEM::DisplayInfo( frame ); msg = ReturnStringFromValue( g_UnitMetric, m_Width, EESCHEMA_INTERNAL_UNIT, true ); @@ -864,13 +929,22 @@ bool LibDrawSquare::HitTest( wxPoint aRefPoint, int aThreshold, /** class LibDrawSegment **/ /**************************/ LibDrawSegment::LibDrawSegment( LIB_COMPONENT* aParent ) : - LibEDA_BaseStruct( COMPONENT_LINE_DRAW_TYPE, aParent ) + LIB_DRAW_ITEM( COMPONENT_LINE_DRAW_TYPE, aParent ) { m_Width = 0; m_typeName = _( "Segment" ); } +LibDrawSegment::LibDrawSegment( const LibDrawSegment& segment ) : + LIB_DRAW_ITEM( segment ) +{ + m_Pos = segment.m_Pos; + m_End = segment.m_End; + m_Width = segment.m_Width; +} + + bool LibDrawSegment::Save( FILE* ExportFile ) const { if( fprintf( ExportFile, "L %d %d %d", m_Unit, m_Convert, m_Width ) ) @@ -886,7 +960,7 @@ bool LibDrawSegment::Load( char* line, wxString& errorMsg ) } -LibEDA_BaseStruct* LibDrawSegment::DoGenCopy() +LIB_DRAW_ITEM* LibDrawSegment::DoGenCopy() { LibDrawSegment* newitem = new LibDrawSegment( GetParent() ); @@ -897,11 +971,11 @@ LibEDA_BaseStruct* LibDrawSegment::DoGenCopy() newitem->m_Convert = m_Convert; newitem->m_Flags = m_Flags; - return (LibEDA_BaseStruct*) newitem; + return (LIB_DRAW_ITEM*) newitem; } -bool LibDrawSegment::DoCompare( const LibEDA_BaseStruct& other ) const +bool LibDrawSegment::DoCompare( const LIB_DRAW_ITEM& other ) const { wxASSERT( other.Type() == COMPONENT_LINE_DRAW_TYPE ); @@ -924,6 +998,14 @@ bool LibDrawSegment::DoTestInside( EDA_Rect& rect ) } +void LibDrawSegment::DoMove( const wxPoint& newPosition ) +{ + wxPoint offset = newPosition - m_Pos; + m_Pos += offset; + m_End += offset; +} + + /** Function GetPenSize * @return the size of the "pen" that be used to draw or plot this item */ @@ -963,7 +1045,7 @@ void LibDrawSegment::DisplayInfo( WinEDA_DrawFrame* frame ) wxString msg; EDA_Rect bBox = GetBoundingBox(); - LibEDA_BaseStruct::DisplayInfo( frame ); + LIB_DRAW_ITEM::DisplayInfo( frame ); msg = ReturnStringFromValue( g_UnitMetric, m_Width, EESCHEMA_INTERNAL_UNIT, true ); @@ -1016,7 +1098,7 @@ bool LibDrawSegment::HitTest( wxPoint aPosRef, int aThreshold, /** class LibDrawPolyline **/ /***************************/ LibDrawPolyline::LibDrawPolyline( LIB_COMPONENT* aParent ) : - LibEDA_BaseStruct( COMPONENT_POLYLINE_DRAW_TYPE, aParent ) + LIB_DRAW_ITEM( COMPONENT_POLYLINE_DRAW_TYPE, aParent ) { m_Fill = NO_FILL; m_Width = 0; @@ -1024,6 +1106,15 @@ LibDrawPolyline::LibDrawPolyline( LIB_COMPONENT* aParent ) : } +LibDrawPolyline::LibDrawPolyline( const LibDrawPolyline& polyline ) : + LIB_DRAW_ITEM( polyline ) +{ + m_PolyPoints = polyline.m_PolyPoints; // Vector copy + m_Width = polyline.m_Width; + m_Fill = polyline.m_Fill; +} + + bool LibDrawPolyline::Save( FILE* ExportFile ) const { int ccount = GetCornerCount(); @@ -1106,7 +1197,7 @@ bool LibDrawPolyline::Load( char* line, wxString& errorMsg ) } -LibEDA_BaseStruct* LibDrawPolyline::DoGenCopy() +LIB_DRAW_ITEM* LibDrawPolyline::DoGenCopy() { LibDrawPolyline* newitem = new LibDrawPolyline( GetParent() ); @@ -1117,11 +1208,11 @@ LibEDA_BaseStruct* LibDrawPolyline::DoGenCopy() newitem->m_Flags = m_Flags; newitem->m_Fill = m_Fill; - return (LibEDA_BaseStruct*) newitem; + return (LIB_DRAW_ITEM*) newitem; } -bool LibDrawPolyline::DoCompare( const LibEDA_BaseStruct& other ) const +bool LibDrawPolyline::DoCompare( const LIB_DRAW_ITEM& other ) const { wxASSERT( other.Type() == COMPONENT_POLYLINE_DRAW_TYPE ); @@ -1158,6 +1249,12 @@ bool LibDrawPolyline::DoTestInside( EDA_Rect& rect ) } +void LibDrawPolyline::DoMove( const wxPoint& newPosition ) +{ + DoOffset( newPosition - m_PolyPoints[0] ); +} + + void LibDrawPolyline::AddPoint( const wxPoint& point ) { m_PolyPoints.push_back( point ); @@ -1304,7 +1401,7 @@ void LibDrawPolyline::DisplayInfo( WinEDA_DrawFrame* frame ) wxString msg; EDA_Rect bBox = GetBoundingBox(); - LibEDA_BaseStruct::DisplayInfo( frame ); + LIB_DRAW_ITEM::DisplayInfo( frame ); msg = ReturnStringFromValue( g_UnitMetric, m_Width, EESCHEMA_INTERNAL_UNIT, true ); @@ -1321,7 +1418,7 @@ void LibDrawPolyline::DisplayInfo( WinEDA_DrawFrame* frame ) /** class LibDrawBezier **/ /***************************/ LibDrawBezier::LibDrawBezier( LIB_COMPONENT* aParent ) : - LibEDA_BaseStruct( COMPONENT_BEZIER_DRAW_TYPE, aParent ) + LIB_DRAW_ITEM( COMPONENT_BEZIER_DRAW_TYPE, aParent ) { m_Fill = NO_FILL; m_Width = 0; @@ -1329,6 +1426,16 @@ LibDrawBezier::LibDrawBezier( LIB_COMPONENT* aParent ) : } +LibDrawBezier::LibDrawBezier( const LibDrawBezier& bezier ) : + LIB_DRAW_ITEM( bezier ) +{ + m_PolyPoints = bezier.m_PolyPoints; + m_BezierPoints = bezier.m_BezierPoints; // Vector copy + m_Width = bezier.m_Width; + m_Fill = bezier.m_Fill; +} + + bool LibDrawBezier::Save( FILE* ExportFile ) const { int ccount = GetCornerCount(); @@ -1410,7 +1517,7 @@ bool LibDrawBezier::Load( char* line, wxString& errorMsg ) } -LibEDA_BaseStruct* LibDrawBezier::DoGenCopy() +LIB_DRAW_ITEM* LibDrawBezier::DoGenCopy() { LibDrawBezier* newitem = new LibDrawBezier(GetParent()); @@ -1420,11 +1527,11 @@ LibEDA_BaseStruct* LibDrawBezier::DoGenCopy() newitem->m_Convert = m_Convert; newitem->m_Flags = m_Flags; newitem->m_Fill = m_Fill; - return (LibEDA_BaseStruct*) newitem; + return (LIB_DRAW_ITEM*) newitem; } -bool LibDrawBezier::DoCompare( const LibEDA_BaseStruct& other ) const +bool LibDrawBezier::DoCompare( const LIB_DRAW_ITEM& other ) const { wxASSERT( other.Type() == COMPONENT_BEZIER_DRAW_TYPE ); @@ -1467,6 +1574,12 @@ bool LibDrawBezier::DoTestInside( EDA_Rect& rect ) } +void LibDrawBezier::DoMove( const wxPoint& newPosition ) +{ + DoOffset( newPosition - m_PolyPoints[0] ); +} + + /** Function GetPenSize * @return the size of the "pen" that be used to draw or plot this item */ @@ -1597,7 +1710,7 @@ void LibDrawBezier::DisplayInfo( WinEDA_DrawFrame* frame ) wxString msg; EDA_Rect bBox = GetBoundingBox(); - LibEDA_BaseStruct::DisplayInfo( frame ); + LIB_DRAW_ITEM::DisplayInfo( frame ); msg = ReturnStringFromValue( g_UnitMetric, m_Width, EESCHEMA_INTERNAL_UNIT, true ); diff --git a/eeschema/classes_body_items.h b/eeschema/classes_body_items.h index 3811853d0d..bf77575cd0 100644 --- a/eeschema/classes_body_items.h +++ b/eeschema/classes_body_items.h @@ -7,6 +7,11 @@ #ifndef CLASSES_BODY_ITEMS_H #define CLASSES_BODY_ITEMS_H + +class LIB_COMPONENT; +class PLOTTER; + + #define TARGET_PIN_DIAM 12 /* Circle diameter drawn at the active end of * pins */ @@ -83,11 +88,11 @@ enum DrawPinOrient { /****************************************************************************/ -/* class LibEDA_BaseStruct : Basic class for items used in a library component +/* class LIB_DRAW_ITEM : Basic class for items used in a library component * (graphic shapes, texts, fields, pins) */ -class LibEDA_BaseStruct : public EDA_BaseStruct +class LIB_DRAW_ITEM : public EDA_BaseStruct { public: int m_Unit; /* Unit identification (for multi part per package) @@ -99,14 +104,15 @@ public: wxString m_typeName; /* Name of object displayed in the message panel. */ public: - LibEDA_BaseStruct* Next() + LIB_DRAW_ITEM* Next() { - return (LibEDA_BaseStruct*) Pnext; + return (LIB_DRAW_ITEM*) Pnext; } - LibEDA_BaseStruct( KICAD_T struct_type, LIB_COMPONENT * aParent ); - virtual ~LibEDA_BaseStruct() { } + LIB_DRAW_ITEM( KICAD_T struct_type, LIB_COMPONENT * aParent ); + LIB_DRAW_ITEM( const LIB_DRAW_ITEM& item ); + virtual ~LIB_DRAW_ITEM() { } /** Function Draw (virtual pure) * Draw A body item @@ -182,22 +188,22 @@ public: /** * Make a copy of this draw item. * - * Classes derived from LibEDA_BaseStruct must implement DoGenCopy(). + * Classes derived from LIB_DRAW_ITEM must implement DoGenCopy(). * This is just a placeholder for the derived class. * * @return Copy of this draw item. */ - LibEDA_BaseStruct* GenCopy() { return DoGenCopy(); } + LIB_DRAW_ITEM* GenCopy() { return DoGenCopy(); } /** - * Test LibEDA_BaseStruct objects for equivalence. + * Test LIB_DRAW_ITEM objects for equivalence. * * @param tst - Object to test against. * * @return bool - True if object is identical to this object. */ - bool operator==( const LibEDA_BaseStruct& other ) const; - bool operator==( const LibEDA_BaseStruct* other ) const + bool operator==( const LIB_DRAW_ITEM& other ) const; + bool operator==( const LIB_DRAW_ITEM* other ) const { return *this == *other; } @@ -207,7 +213,7 @@ public: * * @param offset - Cooridinates to offset position. */ - void SetOffset( const wxPoint offset ) { DoOffset( offset ); } + void SetOffset( const wxPoint& offset ) { DoOffset( offset ); } /** * Test if any part of the draw object is inside rectangle bounds. @@ -221,24 +227,40 @@ public: */ bool Inside( EDA_Rect& rect ) { return DoTestInside( rect ); } + /** + * Move a draw object to a new position. + * + * The real work is done by the DoMove method for each derived object type. + * + * @param newPosition - Position to move draw item to. + */ + void Move( const wxPoint& newPosition ) { DoMove( newPosition ); } + + /** + * Return the current draw object start position. + */ + wxPoint GetPosition( void ) { return DoGetPosition(); } + protected: - virtual LibEDA_BaseStruct* DoGenCopy() = 0; + virtual LIB_DRAW_ITEM* DoGenCopy() = 0; /** * Provide the draw object specific comparison. * * This is called by the == operator. */ - virtual bool DoCompare( const LibEDA_BaseStruct& other ) const = 0; + virtual bool DoCompare( const LIB_DRAW_ITEM& other ) const = 0; virtual void DoOffset( const wxPoint& offset ) = 0; virtual bool DoTestInside( EDA_Rect& rect ) = 0; + virtual void DoMove( const wxPoint& newPosition ) = 0; + virtual wxPoint DoGetPosition( void ) = 0; }; /********/ /* Pins */ /********/ -class LibDrawPin : public LibEDA_BaseStruct +class LibDrawPin : public LIB_DRAW_ITEM { public: int m_PinLen; /* Pin length */ @@ -267,6 +289,7 @@ public: public: LibDrawPin(LIB_COMPONENT * aParent); + LibDrawPin( const LibDrawPin& pin ); ~LibDrawPin() { } LibDrawPin* Next() const { return (LibDrawPin*) Pnext; } @@ -358,10 +381,12 @@ public: int aWidth); protected: - virtual LibEDA_BaseStruct* DoGenCopy(); - virtual bool DoCompare( const LibEDA_BaseStruct& other ) const; + virtual LIB_DRAW_ITEM* DoGenCopy(); + virtual bool DoCompare( const LIB_DRAW_ITEM& other ) const; virtual void DoOffset( const wxPoint& offset ); virtual bool DoTestInside( EDA_Rect& rect ); + virtual void DoMove( const wxPoint& newPosition ); + virtual wxPoint DoGetPosition( void ) { return m_Pos; } }; @@ -369,7 +394,7 @@ protected: /* Graphic Body Item: Arc */ /**************************/ -class LibDrawArc : public LibEDA_BaseStruct +class LibDrawArc : public LIB_DRAW_ITEM { public: int m_Radius; @@ -383,6 +408,7 @@ public: public: LibDrawArc(LIB_COMPONENT * aParent); + LibDrawArc( const LibDrawArc& arc ); ~LibDrawArc() { } virtual wxString GetClass() const { @@ -430,17 +456,19 @@ public: virtual int GetPenSize( ); protected: - virtual LibEDA_BaseStruct* DoGenCopy(); - virtual bool DoCompare( const LibEDA_BaseStruct& other ) const; + virtual LIB_DRAW_ITEM* DoGenCopy(); + virtual bool DoCompare( const LIB_DRAW_ITEM& other ) const; virtual void DoOffset( const wxPoint& offset ); virtual bool DoTestInside( EDA_Rect& rect ); + virtual void DoMove( const wxPoint& newPosition ); + virtual wxPoint DoGetPosition( void ) { return m_Pos; } }; /*****************************/ /* Graphic Body Item: Circle */ /*****************************/ -class LibDrawCircle : public LibEDA_BaseStruct +class LibDrawCircle : public LIB_DRAW_ITEM { public: int m_Radius; @@ -450,6 +478,7 @@ public: public: LibDrawCircle(LIB_COMPONENT * aParent); + LibDrawCircle( const LibDrawCircle& circle ); ~LibDrawCircle() { } virtual wxString GetClass() const { @@ -498,10 +527,12 @@ public: virtual void DisplayInfo( WinEDA_DrawFrame* frame ); protected: - virtual LibEDA_BaseStruct* DoGenCopy(); - virtual bool DoCompare( const LibEDA_BaseStruct& other ) const; + virtual LIB_DRAW_ITEM* DoGenCopy(); + virtual bool DoCompare( const LIB_DRAW_ITEM& other ) const; virtual void DoOffset( const wxPoint& offset ); virtual bool DoTestInside( EDA_Rect& rect ); + virtual void DoMove( const wxPoint& newPosition ); + virtual wxPoint DoGetPosition( void ) { return m_Pos; } }; @@ -511,10 +542,11 @@ protected: /* Fields like Ref , value... are not Text, */ /* they are a separate class */ /*********************************************/ -class LibDrawText : public LibEDA_BaseStruct, public EDA_TextStruct +class LibDrawText : public LIB_DRAW_ITEM, public EDA_TextStruct { public: LibDrawText(LIB_COMPONENT * aParent); + LibDrawText( const LibDrawText& text ); ~LibDrawText() { } virtual wxString GetClass() const { @@ -573,17 +605,19 @@ public: virtual void DisplayInfo( WinEDA_DrawFrame* frame ); protected: - virtual LibEDA_BaseStruct* DoGenCopy(); - virtual bool DoCompare( const LibEDA_BaseStruct& other ) const; + virtual LIB_DRAW_ITEM* DoGenCopy(); + virtual bool DoCompare( const LIB_DRAW_ITEM& other ) const; virtual void DoOffset( const wxPoint& offset ); virtual bool DoTestInside( EDA_Rect& rect ); + virtual void DoMove( const wxPoint& newPosition ); + virtual wxPoint DoGetPosition( void ) { return m_Pos; } }; /********************************/ /* Graphic Body Item: Rectangle */ /********************************/ -class LibDrawSquare : public LibEDA_BaseStruct +class LibDrawSquare : public LIB_DRAW_ITEM { public: wxPoint m_End; /* Rectangle end point. */ @@ -592,6 +626,7 @@ public: public: LibDrawSquare(LIB_COMPONENT * aParent); + LibDrawSquare( const LibDrawSquare& rect ); ~LibDrawSquare() { } virtual wxString GetClass() const { @@ -640,16 +675,18 @@ public: virtual void DisplayInfo( WinEDA_DrawFrame* frame ); protected: - virtual LibEDA_BaseStruct* DoGenCopy(); - virtual bool DoCompare( const LibEDA_BaseStruct& other ) const; + virtual LIB_DRAW_ITEM* DoGenCopy(); + virtual bool DoCompare( const LIB_DRAW_ITEM& other ) const; virtual void DoOffset( const wxPoint& offset ); virtual bool DoTestInside( EDA_Rect& rect ); + virtual void DoMove( const wxPoint& newPosition ); + virtual wxPoint DoGetPosition( void ) { return m_Pos; } }; /**********************************/ /* Graphic Body Item: single line */ /**********************************/ -class LibDrawSegment : public LibEDA_BaseStruct +class LibDrawSegment : public LIB_DRAW_ITEM { public: wxPoint m_End; @@ -659,6 +696,7 @@ public: public: LibDrawSegment(LIB_COMPONENT * aParent); + LibDrawSegment( const LibDrawSegment& segment ); ~LibDrawSegment() { } virtual wxString GetClass() const { @@ -706,17 +744,19 @@ public: virtual void DisplayInfo( WinEDA_DrawFrame* frame ); protected: - virtual LibEDA_BaseStruct* DoGenCopy(); - virtual bool DoCompare( const LibEDA_BaseStruct& other ) const; + virtual LIB_DRAW_ITEM* DoGenCopy(); + virtual bool DoCompare( const LIB_DRAW_ITEM& other ) const; virtual void DoOffset( const wxPoint& offset ); virtual bool DoTestInside( EDA_Rect& rect ); + virtual void DoMove( const wxPoint& newPosition ); + virtual wxPoint DoGetPosition( void ) { return m_Pos; } }; /**********************************************************/ /* Graphic Body Item: Polygon and polyline (set of lines) */ /**********************************************************/ -class LibDrawPolyline : public LibEDA_BaseStruct +class LibDrawPolyline : public LIB_DRAW_ITEM { public: int m_Width; /* Line width */ @@ -724,6 +764,7 @@ public: public: LibDrawPolyline(LIB_COMPONENT * aParent); + LibDrawPolyline( const LibDrawPolyline& polyline ); ~LibDrawPolyline() { } virtual wxString GetClass() const @@ -783,16 +824,18 @@ public: virtual void DisplayInfo( WinEDA_DrawFrame* frame ); protected: - virtual LibEDA_BaseStruct* DoGenCopy(); - virtual bool DoCompare( const LibEDA_BaseStruct& other ) const; + virtual LIB_DRAW_ITEM* DoGenCopy(); + virtual bool DoCompare( const LIB_DRAW_ITEM& other ) const; virtual void DoOffset( const wxPoint& offset ); virtual bool DoTestInside( EDA_Rect& rect ); + virtual void DoMove( const wxPoint& newPosition ); + virtual wxPoint DoGetPosition( void ) { return m_PolyPoints[0]; } }; /**********************************************************/ /* Graphic Body Item: Bezier Curve (set of lines) */ /**********************************************************/ -class LibDrawBezier : public LibEDA_BaseStruct +class LibDrawBezier : public LIB_DRAW_ITEM { public: int m_Width; /* Line width */ @@ -800,7 +843,8 @@ public: std::vector m_PolyPoints; // list of points (>= 2) public: - LibDrawBezier(LIB_COMPONENT * aParent); + LibDrawBezier( LIB_COMPONENT * aParent ); + LibDrawBezier( const LibDrawBezier& bezier ); ~LibDrawBezier() { } virtual wxString GetClass() const @@ -860,10 +904,12 @@ public: virtual void DisplayInfo( WinEDA_DrawFrame* frame ); protected: - virtual LibEDA_BaseStruct* DoGenCopy(); - virtual bool DoCompare( const LibEDA_BaseStruct& other ) const; + virtual LIB_DRAW_ITEM* DoGenCopy(); + virtual bool DoCompare( const LIB_DRAW_ITEM& other ) const; virtual void DoOffset( const wxPoint& offset ); virtual bool DoTestInside( EDA_Rect& rect ); + virtual void DoMove( const wxPoint& newPosition ); + virtual wxPoint DoGetPosition( void ) { return m_PolyPoints[0]; } }; #endif // CLASSES_BODY_ITEMS_H diff --git a/eeschema/cleanup.cpp b/eeschema/cleanup.cpp index 74f3a825da..442074977c 100644 --- a/eeschema/cleanup.cpp +++ b/eeschema/cleanup.cpp @@ -7,12 +7,12 @@ #include "common.h" #include "trigo.h" #include "confirm.h" -#include "program.h" -#include "libcmp.h" -#include "general.h" -#include "netlist.h" #include "macros.h" + +#include "program.h" +#include "general.h" #include "protos.h" +#include "netlist.h" /* Routines locales */ diff --git a/eeschema/controle.cpp b/eeschema/controle.cpp index e0fa855b02..f6856e5e16 100644 --- a/eeschema/controle.cpp +++ b/eeschema/controle.cpp @@ -10,14 +10,14 @@ #include "eeschema_id.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libeditfrm.h" #include "libviewfrm.h" - +#include "classes_body_items.h" #include "class_marker_sch.h" + /**************************************************************************************/ SCH_ITEM* WinEDA_SchematicFrame:: SchematicGeneralLocateAndDisplay( bool IncludePin ) /**************************************************************************************/ diff --git a/eeschema/cross-probing.cpp b/eeschema/cross-probing.cpp index ae805393b0..d54b701d9a 100644 --- a/eeschema/cross-probing.cpp +++ b/eeschema/cross-probing.cpp @@ -5,15 +5,13 @@ #include "fctsys.h" #include "appl_wxstruct.h" #include "common.h" -#include "program.h" -#include "libcmp.h" -#include "general.h" - #include "eda_dde.h" +#include "program.h" +#include "general.h" #include "eeschema_id.h" - #include "protos.h" +#include "classes_body_items.h" /***************************************************************/ diff --git a/eeschema/dangling_ends.cpp b/eeschema/dangling_ends.cpp index e4baf3401c..0f02db7b46 100644 --- a/eeschema/dangling_ends.cpp +++ b/eeschema/dangling_ends.cpp @@ -5,12 +5,12 @@ #include "fctsys.h" #include "gr_basic.h" #include "common.h" -#include "program.h" -#include "libcmp.h" -#include "general.h" +#include "program.h" +#include "general.h" #include "netlist.h" /* Definitions generales liees au calcul de netliste */ #include "protos.h" +#include "class_library.h" enum End_Type { @@ -392,7 +392,7 @@ DanglingEndHandle* RebuildEndList( EDA_BaseStruct* DrawList ) if( Entry == NULL ) break; - LibEDA_BaseStruct* DrawLibItem = Entry->m_Drawings; + LIB_DRAW_ITEM* DrawLibItem = Entry->m_Drawings; for( ; DrawLibItem != NULL; DrawLibItem = DrawLibItem->Next() ) { if( DrawLibItem->Type() != COMPONENT_PIN_DRAW_TYPE ) diff --git a/eeschema/database.cpp b/eeschema/database.cpp index 61f0edcdc0..63ef492608 100644 --- a/eeschema/database.cpp +++ b/eeschema/database.cpp @@ -13,9 +13,9 @@ #include "kicad_string.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" +#include "class_library.h" #include diff --git a/eeschema/delete.cpp b/eeschema/delete.cpp index e833334557..9810a4b6ac 100644 --- a/eeschema/delete.cpp +++ b/eeschema/delete.cpp @@ -7,7 +7,6 @@ #include "common.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "class_marker_sch.h" diff --git a/eeschema/delsheet.cpp b/eeschema/delsheet.cpp index 3b16c385bf..8955c8f1ec 100644 --- a/eeschema/delsheet.cpp +++ b/eeschema/delsheet.cpp @@ -6,8 +6,8 @@ #include "appl_wxstruct.h" #include "common.h" #include "confirm.h" + #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" diff --git a/eeschema/dialog_build_BOM.cpp b/eeschema/dialog_build_BOM.cpp index 841b0fb9d2..577cfc629f 100644 --- a/eeschema/dialog_build_BOM.cpp +++ b/eeschema/dialog_build_BOM.cpp @@ -9,10 +9,9 @@ #include "fctsys.h" #include "appl_wxstruct.h" - #include "common.h" + #include "program.h" -#include "libcmp.h" #include "general.h" #include "netlist.h" diff --git a/eeschema/dialog_cmp_graphic_properties.cpp b/eeschema/dialog_cmp_graphic_properties.cpp index a24361b534..9434849b87 100644 --- a/eeschema/dialog_cmp_graphic_properties.cpp +++ b/eeschema/dialog_cmp_graphic_properties.cpp @@ -51,7 +51,7 @@ WinEDA_bodygraphics_PropertiesFrame::WinEDA_bodygraphics_PropertiesFrame( ) WinEDA_bodygraphics_PropertiesFrame::WinEDA_bodygraphics_PropertiesFrame( WinEDA_LibeditFrame* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) { -LibEDA_BaseStruct * CurrentItem = CurrentDrawItem; + LIB_DRAW_ITEM * CurrentItem = parent->GetDrawItem(); m_Parent = parent; Create(parent, id, caption, pos, size, style); diff --git a/eeschema/dialog_create_component.cpp b/eeschema/dialog_create_component.cpp index 62570373d1..36f2087813 100644 --- a/eeschema/dialog_create_component.cpp +++ b/eeschema/dialog_create_component.cpp @@ -16,12 +16,12 @@ #endif #include "fctsys.h" -#include "gr_basic.h" #include "common.h" #include "confirm.h" + #include "program.h" -#include "libcmp.h" -#include "general.h" +#include "class_libentry.h" +#include "libeditfrm.h" ////@begin includes ////@end includes @@ -104,7 +104,9 @@ bool WinEDA_CreateCmpDialog::Create( WinEDA_DrawFrame* parent, wxWindowID id, co void WinEDA_CreateCmpDialog::SetComponentData( LIB_COMPONENT & component ) /**********************************************************************************/ { - g_AsDeMorgan = m_AsConvert->GetValue(); + WinEDA_LibeditFrame* parent = (WinEDA_LibeditFrame*) GetParent(); + + parent->SetShowDeMorgan( m_AsConvert->GetValue() ); component.m_UnitCount = m_PartsCount->GetSelection() + 1; component.m_Prefix.m_Text = m_Reference->GetValue(); if ( m_PinNameInside->GetValue() == FALSE) diff --git a/eeschema/dialog_edit_component_in_lib.cpp b/eeschema/dialog_edit_component_in_lib.cpp index 94f578a3ad..b5f40d1f16 100644 --- a/eeschema/dialog_edit_component_in_lib.cpp +++ b/eeschema/dialog_edit_component_in_lib.cpp @@ -10,10 +10,10 @@ #include "gestfich.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libeditfrm.h" +#include "class_libentry.h" #include "dialog_edit_component_in_lib.h" @@ -45,7 +45,7 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::Init( ) SetFocus(); m_AliasLocation = -1; - LIB_COMPONENT* component = m_Parent->GetCurrentComponent(); + LIB_COMPONENT* component = m_Parent->GetComponent(); if( component == NULL ) { @@ -55,22 +55,22 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::Init( ) wxString title = _( "Properties for " ); - if( !CurrentAliasName.IsEmpty() ) + if( !m_Parent->GetAliasName().IsEmpty() ) { - title += CurrentAliasName + _( " (alias of " ) + + title += m_Parent->GetAliasName() + _( " (alias of " ) + component->GetName() + wxT( ")" ); } else { title += component->GetName(); - CurrentAliasName.Empty(); + m_Parent->GetAliasName().Empty(); } SetTitle( title ); InitPanelDoc(); InitBasicPanel(); - if( !CurrentAliasName.IsEmpty() ) + if( !m_Parent->GetAliasName().IsEmpty() ) m_ButtonDeleteAllAlias->Enable( false ); /* Place list of alias names in listbox */ diff --git a/eeschema/dialog_edit_component_in_schematic.cpp b/eeschema/dialog_edit_component_in_schematic.cpp index 8e8cc7fe5f..6ed5f4b34c 100644 --- a/eeschema/dialog_edit_component_in_schematic.cpp +++ b/eeschema/dialog_edit_component_in_schematic.cpp @@ -9,9 +9,9 @@ #include "confirm.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" +#include "class_library.h" #include "dialog_edit_component_in_schematic.h" diff --git a/eeschema/dialog_edit_label.cpp b/eeschema/dialog_edit_label.cpp index b6e3abf2be..0266b6e916 100644 --- a/eeschema/dialog_edit_label.cpp +++ b/eeschema/dialog_edit_label.cpp @@ -13,7 +13,6 @@ #include "common.h" #include "class_drawpanel.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "dialog_edit_label.h" diff --git a/eeschema/dialog_edit_libentry_fields_in_lib.cpp b/eeschema/dialog_edit_libentry_fields_in_lib.cpp index 6508a2b20c..a0d671faf0 100644 --- a/eeschema/dialog_edit_libentry_fields_in_lib.cpp +++ b/eeschema/dialog_edit_libentry_fields_in_lib.cpp @@ -10,10 +10,10 @@ #include "class_drawpanel.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libeditfrm.h" +#include "class_library.h" #include "dialog_edit_libentry_fields_in_lib_base.h" @@ -101,12 +101,12 @@ private: void WinEDA_LibeditFrame::InstallFieldsEditorDialog( wxCommandEvent& event ) { - if( m_currentComponent == NULL ) + if( m_component == NULL ) return; DrawPanel->UnManageCursor( 0, wxCURSOR_ARROW ); - DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB dlg( this, m_currentComponent ); + DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB dlg( this, m_component ); int abort = dlg.ShowModal(); diff --git a/eeschema/dialog_eeschema_config.cpp b/eeschema/dialog_eeschema_config.cpp index e363d5b526..9ea00322d6 100644 --- a/eeschema/dialog_eeschema_config.cpp +++ b/eeschema/dialog_eeschema_config.cpp @@ -14,7 +14,6 @@ #include "gestfich.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "netlist.h" diff --git a/eeschema/dialog_erc.cpp b/eeschema/dialog_erc.cpp index 33179811f4..b11a46bea3 100644 --- a/eeschema/dialog_erc.cpp +++ b/eeschema/dialog_erc.cpp @@ -8,16 +8,14 @@ // Licence: GPL ///////////////////////////////////////////////////////////////////////////// #include "fctsys.h" - #include "common.h" #include "class_drawpanel.h" +#include "bitmaps.h" + #include "program.h" -#include "libcmp.h" #include "general.h" #include "netlist.h" -#include "bitmaps.h" #include "class_marker_sch.h" - #include "protos.h" #include "dialog_erc.h" diff --git a/eeschema/dialog_options.cpp b/eeschema/dialog_options.cpp index 58571d28e2..87bdf53863 100644 --- a/eeschema/dialog_options.cpp +++ b/eeschema/dialog_options.cpp @@ -24,7 +24,6 @@ #include "confirm.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" diff --git a/eeschema/edit_component_in_lib.cpp b/eeschema/edit_component_in_lib.cpp index 559c965001..8bfae6d962 100644 --- a/eeschema/edit_component_in_lib.cpp +++ b/eeschema/edit_component_in_lib.cpp @@ -9,14 +9,12 @@ #include "gestfich.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libeditfrm.h" +#include "class_library.h" -extern int CurrentUnit; - /* Dialog box to edit a libentry (a component in library) properties */ /* Creates a NoteBook dialog @@ -38,7 +36,7 @@ void WinEDA_LibeditFrame::OnEditComponentProperties( wxCommandEvent& event ) void WinEDA_LibeditFrame::EditComponentProperties() { - wxASSERT( m_currentComponent != NULL && CurrentLib != NULL ); + wxASSERT( m_component != NULL && m_library != NULL ); DIALOG_EDIT_COMPONENT_IN_LIBRARY dlg( this ); @@ -50,7 +48,7 @@ void WinEDA_LibeditFrame::EditComponentProperties() DisplayLibInfos(); DisplayCmpDoc(); GetScreen()->SetModify(); - SaveCopyInUndoList( m_currentComponent ); + SaveCopyInUndoList( m_component ); } @@ -58,18 +56,20 @@ void WinEDA_LibeditFrame::EditComponentProperties() void DIALOG_EDIT_COMPONENT_IN_LIBRARY::InitPanelDoc() { CMP_LIB_ENTRY* entry; - LIB_COMPONENT* component = m_Parent->GetCurrentComponent(); + LIB_COMPONENT* component = m_Parent->GetComponent(); + CMP_LIBRARY* library = m_Parent->GetLibrary(); if( component == NULL ) return; - if( CurrentAliasName.IsEmpty() ) + if( m_Parent->GetAliasName().IsEmpty() ) { entry = component; } else { - entry = ( CMP_LIB_ENTRY* ) CurrentLib->FindAlias( CurrentAliasName ); + entry = + ( CMP_LIB_ENTRY* ) library->FindAlias( m_Parent->GetAliasName() ); if( entry == NULL ) return; @@ -86,9 +86,9 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::InitPanelDoc() */ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::InitBasicPanel() { - LIB_COMPONENT* component = m_Parent->GetCurrentComponent(); + LIB_COMPONENT* component = m_Parent->GetComponent(); - if( g_AsDeMorgan ) + if( m_Parent->GetShowDeMorgan() ) m_AsConvertButt->SetValue( true ); /* Default values for a new component. */ @@ -121,15 +121,16 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnOkClick( wxCommandEvent& event ) size_t i; int index; CMP_LIB_ENTRY* entry; - LIB_COMPONENT* component = m_Parent->GetCurrentComponent(); + LIB_COMPONENT* component = m_Parent->GetComponent(); + CMP_LIBRARY* library = m_Parent->GetLibrary(); - if( CurrentAliasName.IsEmpty() ) + if( m_Parent->GetAliasName().IsEmpty() ) { entry = (CMP_LIB_ENTRY*) component; } else { - entry = CurrentLib->FindEntry( CurrentAliasName ); + entry = library->FindEntry( m_Parent->GetAliasName() ); } if( entry == NULL ) @@ -137,9 +138,9 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnOkClick( wxCommandEvent& event ) wxString msg; msg.Printf( _( "Alias <%s> not found for component <%s> in library \ <%s>." ), - (const wxChar*) CurrentAliasName, + (const wxChar*) m_Parent->GetAliasName(), (const wxChar*) component->GetName(), - (const wxChar*) CurrentLib->GetName() ); + (const wxChar*) library->GetName() ); wxMessageBox( msg, _( "Component Library Error" ), wxID_OK | wxICON_ERROR, this ); } @@ -165,7 +166,7 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnOkClick( wxCommandEvent& event ) alias = new LIB_ALIAS( aliases[ i ], component ); - if( !CurrentLib->AddAlias( alias ) ) + if( !library->AddAlias( alias ) ) { delete alias; alias = NULL; @@ -181,9 +182,9 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnOkClick( wxCommandEvent& event ) continue; CMP_LIB_ENTRY* alias = - CurrentLib->FindAlias( component->m_AliasList[ i ] ); + library->FindAlias( component->m_AliasList[ i ] ); if( alias != NULL ) - CurrentLib->RemoveEntry( alias ); + library->RemoveEntry( alias ); } component->m_AliasList = aliases; @@ -194,17 +195,17 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnOkClick( wxCommandEvent& event ) if( m_AsConvertButt->GetValue() ) { - if( !g_AsDeMorgan ) + if( !m_Parent->GetShowDeMorgan() ) { - g_AsDeMorgan = 1; + m_Parent->SetShowDeMorgan( true ); SetUnsetConvert(); } } else { - if( g_AsDeMorgan ) + if( m_Parent->GetShowDeMorgan() ) { - g_AsDeMorgan = 0; + m_Parent->SetShowDeMorgan( false ); SetUnsetConvert(); } } @@ -240,9 +241,9 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::OnOkClick( wxCommandEvent& event ) void DIALOG_EDIT_COMPONENT_IN_LIBRARY::CopyDocToAlias( wxCommandEvent& WXUNUSED (event) ) /******************************************************************************/ { - LIB_COMPONENT* component = m_Parent->GetCurrentComponent(); + LIB_COMPONENT* component = m_Parent->GetComponent(); - if( component == NULL || CurrentAliasName.IsEmpty() ) + if( component == NULL || m_Parent->GetAliasName().IsEmpty() ) return; m_Doc->SetValue( component->m_Doc ); @@ -256,17 +257,18 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteAllAliasOfPart( wxCommandEvent& WXUNUSED (event) ) /**********************************************************/ { - if( m_PartAliasList->FindString( CurrentAliasName ) != wxNOT_FOUND ) + if( m_PartAliasList->FindString( m_Parent->GetAliasName() ) + != wxNOT_FOUND ) { wxString msg; msg.Printf( _( "Alias <%s> cannot be removed while it is being \ edited!" ), - (const wxChar*) CurrentAliasName ); + (const wxChar*) m_Parent->GetAliasName() ); DisplayError( this, msg ); return; } - CurrentAliasName.Empty(); + m_Parent->GetAliasName().Empty(); if( IsOK( this, _( "Remove all aliases from list?" ) ) ) { @@ -287,31 +289,33 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::AddAliasOfPart( wxCommandEvent& WXUNUSED { wxString Line; wxString aliasname; - LIB_COMPONENT* component = m_Parent->GetCurrentComponent(); + LIB_COMPONENT* component = m_Parent->GetComponent(); + CMP_LIBRARY* library = m_Parent->GetLibrary(); if( component == NULL ) return; - if( Get_Message( _( "New alias:" ), _( "Component Alias" ), Line, this ) != 0 ) + if( Get_Message( _( "New alias:" ), + _( "Component Alias" ), Line, this ) != 0 ) return; Line.Replace( wxT( " " ), wxT( "_" ) ); aliasname = Line; if( m_PartAliasList->FindString( aliasname ) != wxNOT_FOUND - || CurrentLib->FindEntry( aliasname ) != NULL ) + || library->FindEntry( aliasname ) != NULL ) { wxString msg; msg.Printf( _( "Alias or component name <%s> already exists in \ library <%s>." ), (const wxChar*) aliasname, - (const wxChar*) CurrentLib->GetName() ); + (const wxChar*) library->GetName() ); DisplayError( this, msg ); return; } m_PartAliasList->Append( aliasname ); - if( CurrentAliasName.IsEmpty() ) + if( m_Parent->GetAliasName().IsEmpty() ) m_ButtonDeleteAllAlias->Enable( TRUE ); m_ButtonDeleteOneAlias->Enable( TRUE ); } @@ -324,7 +328,7 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteAliasOfPart( if( aliasname.IsEmpty() ) return; - if( aliasname.CmpNoCase( CurrentAliasName ) == 0 ) + if( aliasname.CmpNoCase( m_Parent->GetAliasName() ) == 0 ) { wxString msg; msg.Printf( _( "Alias <%s> cannot be removed while it is being \ @@ -353,8 +357,8 @@ bool DIALOG_EDIT_COMPONENT_IN_LIBRARY::ChangeNbUnitsPerPackage( int MaxUnit ) */ { int OldNumUnits, ii, FlagDel = -1; - LibEDA_BaseStruct* DrawItem, * NextDrawItem; - LIB_COMPONENT* component = m_Parent->GetCurrentComponent(); + LIB_DRAW_ITEM* DrawItem, * NextDrawItem; + LIB_COMPONENT* component = m_Parent->GetComponent(); if( component == NULL ) return FALSE; @@ -384,8 +388,8 @@ bool DIALOG_EDIT_COMPONENT_IN_LIBRARY::ChangeNbUnitsPerPackage( int MaxUnit ) if( IsOK( this, _( "Delete units" ) ) ) { /* Si part selectee n'existe plus: selection 1ere unit */ - if( CurrentUnit > MaxUnit ) - CurrentUnit = 1; + if( m_Parent->GetUnit() > MaxUnit ) + m_Parent->SetUnit( 1 ); FlagDel = 1; } else @@ -435,10 +439,10 @@ bool DIALOG_EDIT_COMPONENT_IN_LIBRARY::SetUnsetConvert() */ { int FlagDel = 0; - LibEDA_BaseStruct* DrawItem = NULL, * NextDrawItem; - LIB_COMPONENT* component = m_Parent->GetCurrentComponent(); + LIB_DRAW_ITEM* DrawItem = NULL, * NextDrawItem; + LIB_COMPONENT* component = m_Parent->GetComponent(); - if( g_AsDeMorgan ) /* Representation convertie a creer */ + if( m_Parent->GetShowDeMorgan() ) /* Representation convertie a creer */ { /* Traitement des elements a ajouter ( pins seulement ) */ if( component ) @@ -459,7 +463,8 @@ bool DIALOG_EDIT_COMPONENT_IN_LIBRARY::SetUnsetConvert() if( IsOK( this, _( "Part as \"De Morgan\" anymore" ) ) ) return TRUE; - g_AsDeMorgan = 0; return FALSE; + m_Parent->SetShowDeMorgan( false ); + return FALSE; } } NextDrawItem = DrawItem->GenCopy(); @@ -483,12 +488,12 @@ bool DIALOG_EDIT_COMPONENT_IN_LIBRARY::SetUnsetConvert() { if( IsOK( this, _( "Delete Convert items" ) ) ) { - CurrentConvert = 1; + m_Parent->SetConvert( 1 ); FlagDel = 1; } else { - g_AsDeMorgan = 1; + m_Parent->SetShowDeMorgan( true ); return FALSE; } } @@ -561,7 +566,7 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::AddFootprintFilter( wxCommandEvent& WXUNU */ { wxString Line; - LIB_COMPONENT* component = m_Parent->GetCurrentComponent(); + LIB_COMPONENT* component = m_Parent->GetComponent(); if( component == NULL ) return; @@ -596,7 +601,7 @@ void DIALOG_EDIT_COMPONENT_IN_LIBRARY::DeleteOneFootprintFilter( wxCommandEvent& WXUNUSED (event) ) /********************************************************/ { - LIB_COMPONENT* component = m_Parent->GetCurrentComponent(); + LIB_COMPONENT* component = m_Parent->GetComponent(); int ii = m_FootprintFilterListBox->GetSelection(); m_FootprintFilterListBox->Delete( ii ); diff --git a/eeschema/edit_component_in_schematic.cpp b/eeschema/edit_component_in_schematic.cpp index 6e4e3d10ad..78ee55ccc8 100644 --- a/eeschema/edit_component_in_schematic.cpp +++ b/eeschema/edit_component_in_schematic.cpp @@ -9,10 +9,9 @@ #include "confirm.h" #include "program.h" -#include "libcmp.h" #include "general.h" - #include "protos.h" +#include "class_library.h" /* Fonctions locales */ diff --git a/eeschema/edit_graphic_bodyitem_text.cpp b/eeschema/edit_graphic_bodyitem_text.cpp index 23ccfb0372..da04116563 100644 --- a/eeschema/edit_graphic_bodyitem_text.cpp +++ b/eeschema/edit_graphic_bodyitem_text.cpp @@ -13,10 +13,10 @@ #include "class_drawpanel.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libeditfrm.h" +#include "class_libentry.h" #include "dialog_bodygraphictext_properties_base.h" @@ -144,7 +144,7 @@ void Dialog_BodyGraphicText_Properties::OnOkClick( wxCommandEvent& event ) /* Met a jour les differents parametres pour le composant en cours d'edition */ { -wxString Line; + wxString Line; Line = m_TextValue->GetValue(); g_LastTextOrient = m_Orient->GetValue() ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ; @@ -165,12 +165,12 @@ wxString Line; m_GraphicText->m_Orient = g_LastTextOrient; if( g_FlDrawSpecificUnit ) - m_GraphicText->m_Unit = CurrentUnit; + m_GraphicText->m_Unit = m_Parent->GetUnit(); else m_GraphicText->m_Unit = 0; if( g_FlDrawSpecificConvert ) - m_GraphicText->m_Convert = CurrentConvert; + m_GraphicText->m_Convert = m_Parent->GetConvert(); else m_GraphicText->m_Convert = 0; @@ -216,14 +216,14 @@ wxString Line; } Close(); - if ( CurrentDrawItem ) - CurrentDrawItem->DisplayInfo( m_Parent ); + if ( m_Parent->GetDrawItem() ) + m_Parent->GetDrawItem()->DisplayInfo( m_Parent ); Close(); } -void WinEDA_LibeditFrame::EditSymbolText(wxDC * DC, LibEDA_BaseStruct * DrawItem) +void WinEDA_LibeditFrame::EditSymbolText(wxDC* DC, LIB_DRAW_ITEM* DrawItem) { int DrawMode = g_XorMode; @@ -263,7 +263,7 @@ void WinEDA_LibeditFrame::RotateSymbolText(wxDC * DC) 90 deg Graphic text Rotation . */ { - LibDrawText * DrawItem = (LibDrawText *) CurrentDrawItem; + LibDrawText * DrawItem = (LibDrawText *) m_drawItem; if( DrawItem == NULL ) return; diff --git a/eeschema/edit_label.cpp b/eeschema/edit_label.cpp index 5fc3c244c3..2598b2c450 100644 --- a/eeschema/edit_label.cpp +++ b/eeschema/edit_label.cpp @@ -12,12 +12,11 @@ #include "confirm.h" #include "program.h" -#include "libcmp.h" #include "general.h" -#include "dialog_edit_label.h" - #include "protos.h" +#include "dialog_edit_label.h" + /* Fonctions locales */ static void ShowWhileMoving( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); static void ExitMoveTexte( WinEDA_DrawPanel* panel, wxDC* DC ); diff --git a/eeschema/eeconfig.cpp b/eeschema/eeconfig.cpp index 21d47dd800..0c92258840 100644 --- a/eeschema/eeconfig.cpp +++ b/eeschema/eeconfig.cpp @@ -12,7 +12,6 @@ #include "gestfich.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "eeconfig.h" diff --git a/eeschema/eelayer.cpp b/eeschema/eelayer.cpp index 6c47fa9662..550a852e1d 100644 --- a/eeschema/eelayer.cpp +++ b/eeschema/eelayer.cpp @@ -16,7 +16,6 @@ #include "class_drawpanel.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" diff --git a/eeschema/eelibs_draw_components.cpp b/eeschema/eelibs_draw_components.cpp index c32b07b8fb..fe861de95c 100644 --- a/eeschema/eelibs_draw_components.cpp +++ b/eeschema/eelibs_draw_components.cpp @@ -6,8 +6,8 @@ #include "gr_basic.h" #include "common.h" #include "class_drawpanel.h" + #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "class_library.h" diff --git a/eeschema/eelibs_read_libraryfiles.cpp b/eeschema/eelibs_read_libraryfiles.cpp index b25b91fe8e..47b25214b5 100644 --- a/eeschema/eelibs_read_libraryfiles.cpp +++ b/eeschema/eelibs_read_libraryfiles.cpp @@ -7,8 +7,8 @@ #include "appl_wxstruct.h" #include "program.h" -#include "libcmp.h" #include "general.h" +#include "class_library.h" #include "dialog_load_error.h" diff --git a/eeschema/eeredraw.cpp b/eeschema/eeredraw.cpp index f75d49bd5f..5bde009008 100644 --- a/eeschema/eeredraw.cpp +++ b/eeschema/eeredraw.cpp @@ -10,9 +10,10 @@ #include "appl_wxstruct.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" +#include "class_library.h" + static EDA_BaseStruct* HighLightStruct = NULL; diff --git a/eeschema/eeschema.cpp b/eeschema/eeschema.cpp index deb737be7d..0c1a6555a9 100644 --- a/eeschema/eeschema.cpp +++ b/eeschema/eeschema.cpp @@ -8,12 +8,11 @@ #include "class_drawpanel.h" #include "confirm.h" #include "gestfich.h" -#include "program.h" -#include "general.h" #include "bitmaps.h" #include "eda_dde.h" -#include "libcmp.h" +#include "program.h" +#include "general.h" #include "protos.h" #include @@ -65,7 +64,6 @@ HPGL_Pen_Descr_Struct g_HPGL_Pen_Descr; //SCH_SCREEN * ScreenSch; DrawSheetStruct* g_RootSheet = NULL; -SCH_SCREEN* g_ScreenLib = NULL; wxString g_NetCmpExtBuffer( wxT( "cmp" ) ); @@ -97,21 +95,6 @@ int g_ItemSelectetColor = BROWN; // Color to draw items flagged invisible, in libedit (they are insisible in eeschema int g_InvisibleItemColor = DARKGRAY; -/* Variables used by LibEdit */ -LibEDA_BaseStruct* LibItemToRepeat = NULL; /* pointer on a graphic item than - * can be duplicated by the Ins key - * (usually the last created item */ -CMP_LIBRARY* CurrentLib = NULL; /* Current opened library */ -LibEDA_BaseStruct* CurrentDrawItem = NULL; /* current edited item */ - -// Current selected alias (for components which have aliases) -wxString CurrentAliasName; - -// True if the current component has a "De Morgan" representation -bool g_AsDeMorgan; -int CurrentUnit = 1; -int CurrentConvert = 1; - int DefaultTransformMatrix[2][2] = { { 1, 0 }, { 0, -1 } }; diff --git a/eeschema/erc.cpp b/eeschema/erc.cpp index cc420a6c26..b140c8d9b2 100644 --- a/eeschema/erc.cpp +++ b/eeschema/erc.cpp @@ -8,18 +8,17 @@ #include "kicad_string.h" #include "gestfich.h" #include "appl_wxstruct.h" +#include "bitmaps.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "netlist.h" -#include "bitmaps.h" #include "class_marker_sch.h" - -#include "dialog_erc.h" +#include "protos.h" #include "erc.h" -#include "protos.h" +#include "dialog_erc.h" + /* ERC tests : * 1 - conflicts between connected pins ( example: 2 connected outputs ) diff --git a/eeschema/files-io.cpp b/eeschema/files-io.cpp index 4ea2a90001..1a1ab7b63b 100644 --- a/eeschema/files-io.cpp +++ b/eeschema/files-io.cpp @@ -7,12 +7,12 @@ #include "class_drawpanel.h" #include "confirm.h" #include "gestfich.h" -#include "program.h" -#include "libcmp.h" -#include "general.h" +#include "program.h" +#include "general.h" #include "protos.h" #include "eeschema_id.h" +#include "class_library.h" /****************************************************************/ diff --git a/eeschema/find.cpp b/eeschema/find.cpp index e01c26903a..69ab24e72c 100644 --- a/eeschema/find.cpp +++ b/eeschema/find.cpp @@ -16,10 +16,10 @@ #include "gestfich.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "class_marker_sch.h" #include "protos.h" +#include "class_library.h" #include diff --git a/eeschema/general.h b/eeschema/general.h index f4998ec30f..0104d88df3 100644 --- a/eeschema/general.h +++ b/eeschema/general.h @@ -158,7 +158,7 @@ extern HPGL_Pen_Descr_Struct g_HPGL_Pen_Descr; /* First and main (root) screen */ extern DrawSheetStruct* g_RootSheet; -extern SCH_SCREEN* g_ScreenLib; + /*************************************/ /* Gestion de recherche des elements */ diff --git a/eeschema/getpart.cpp b/eeschema/getpart.cpp index 7a8fb7a518..6ce40b237f 100644 --- a/eeschema/getpart.cpp +++ b/eeschema/getpart.cpp @@ -9,14 +9,14 @@ #include "class_drawpanel.h" #include "confirm.h" -#include "get_component_dialog.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "class_library.h" #include "libviewfrm.h" +#include "get_component_dialog.h" + #include @@ -441,7 +441,7 @@ void WinEDA_SchematicFrame::ConvertPart( SCH_COMPONENT* DrawComponent, int LookForConvertPart( LIB_COMPONENT* LibEntry ) { int ii; - LibEDA_BaseStruct* DrawLibEntry; + LIB_DRAW_ITEM* DrawLibEntry; DrawLibEntry = LibEntry->m_Drawings; ii = 0; diff --git a/eeschema/hierarch.cpp b/eeschema/hierarch.cpp index 610ddc26d3..d0ac5bc1e9 100644 --- a/eeschema/hierarch.cpp +++ b/eeschema/hierarch.cpp @@ -7,18 +7,15 @@ #include "common.h" #include "class_drawpanel.h" #include "confirm.h" +#include "bitmaps.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "wx/imaglist.h" #include "wx/treectrl.h" -#include "bitmaps.h" - - static bool UpdateScreenFromSheet( WinEDA_SchematicFrame* frame ); enum { diff --git a/eeschema/hotkeys.cpp b/eeschema/hotkeys.cpp index 12369f5f93..3cf56bc627 100644 --- a/eeschema/hotkeys.cpp +++ b/eeschema/hotkeys.cpp @@ -8,10 +8,11 @@ #include "hotkeys.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libeditfrm.h" +#include "class_libentry.h" + /* How to add a new hotkey: * add a new id in the enum hotkey_id_commnand like MY_NEW_ID_FUNCTION (see @@ -463,7 +464,7 @@ void WinEDA_LibeditFrame::OnHotKey( wxDC* DC, int hotkey, wxPoint MousePos = GetScreen()->m_MousePosition; - LibEDA_BaseStruct* DrawEntry = LocateItemUsingCursor(); + LIB_DRAW_ITEM* DrawEntry = LocateItemUsingCursor(); // Remap the control key Ctrl A (0x01) to GR_KB_CTRL + 'A' (easier to // handle...) @@ -533,10 +534,10 @@ void WinEDA_LibeditFrame::OnHotKey( wxDC* DC, int hotkey, break; case HK_REPEAT_LAST: - if( LibItemToRepeat && (LibItemToRepeat->m_Flags == 0) - && (LibItemToRepeat->Type() == COMPONENT_PIN_DRAW_TYPE) ) + if( m_lastDrawItem && (m_lastDrawItem->m_Flags == 0) + && (m_lastDrawItem->Type() == COMPONENT_PIN_DRAW_TYPE) ) { - RepeatPinItem( DC, (LibDrawPin*) LibItemToRepeat ); + RepeatPinItem( DC, (LibDrawPin*) m_lastDrawItem ); } else wxBell(); @@ -544,18 +545,18 @@ void WinEDA_LibeditFrame::OnHotKey( wxDC* DC, int hotkey, case HK_EDIT_PIN: if( DrawEntry ) - CurrentDrawItem = DrawEntry; - if( CurrentDrawItem ) + m_drawItem = DrawEntry; + if( m_drawItem ) { - if( CurrentDrawItem->Type() == COMPONENT_PIN_DRAW_TYPE ) + if( m_drawItem->Type() == COMPONENT_PIN_DRAW_TYPE ) InstallPineditFrame( this, DC, MousePos ); } break; case HK_DELETE_PIN: if( DrawEntry ) - CurrentDrawItem = DrawEntry; - if( CurrentDrawItem ) + m_drawItem = DrawEntry; + if( m_drawItem ) { wxCommandEvent evt; evt.SetId( ID_POPUP_LIBEDIT_DELETE_ITEM ); @@ -565,8 +566,8 @@ void WinEDA_LibeditFrame::OnHotKey( wxDC* DC, int hotkey, case HK_MOVE_PIN: if( DrawEntry ) - CurrentDrawItem = DrawEntry; - if( CurrentDrawItem ) + m_drawItem = DrawEntry; + if( m_drawItem ) { wxCommandEvent evt; evt.SetId( ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST ); diff --git a/eeschema/lib_export.cpp b/eeschema/lib_export.cpp index a0647ded36..16ff553ff6 100644 --- a/eeschema/lib_export.cpp +++ b/eeschema/lib_export.cpp @@ -16,10 +16,10 @@ #include "eeschema_id.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libeditfrm.h" +#include "class_library.h" #include @@ -41,7 +41,7 @@ void WinEDA_LibeditFrame::OnImportPart( wxCommandEvent& event ) CMP_LIBRARY* LibTmp; CMP_LIB_ENTRY* LibEntry; - LibItemToRepeat = NULL; + m_lastDrawItem = NULL; wxFileDialog dlg( this, _( "Import Component" ), m_LastLibImportPath, wxEmptyString, CompLibFileWildcard, @@ -96,13 +96,13 @@ void WinEDA_LibeditFrame::OnExportPart( wxCommandEvent& event ) CMP_LIBRARY* CurLibTmp; bool createLib = ( event.GetId() != ExportPartId ) ? false : true; - if( m_currentComponent == NULL ) + if( m_component == NULL ) { DisplayError( this, _( "There is no component selected to save." ) ); return; } - fn = m_currentComponent->GetName().Lower(); + fn = m_component->GetName().Lower(); fn.SetExt( CompLibFileExtension ); title = createLib ? _( "New Library" ) : _( "Export Component" ); @@ -115,19 +115,19 @@ void WinEDA_LibeditFrame::OnExportPart( wxCommandEvent& event ) fn = dlg.GetPath(); - CurLibTmp = CurrentLib; + CurLibTmp = m_library; - CurrentLib = new CMP_LIBRARY( LIBRARY_TYPE_EESCHEMA, fn ); + m_library = new CMP_LIBRARY( LIBRARY_TYPE_EESCHEMA, fn ); SaveOnePartInMemory(); - bool success = CurrentLib->Save( fn.GetFullPath() ); + bool success = m_library->Save( fn.GetFullPath() ); if( success ) m_LastLibExportPath = fn.GetPath(); - delete CurrentLib; - CurrentLib = CurLibTmp; + delete m_library; + m_library = CurLibTmp; if( createLib && success ) { diff --git a/eeschema/libarch.cpp b/eeschema/libarch.cpp index adb94ce514..cc44763fcf 100644 --- a/eeschema/libarch.cpp +++ b/eeschema/libarch.cpp @@ -7,10 +7,10 @@ #include "confirm.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "netlist.h" #include "protos.h" +#include "class_library.h" /* diff --git a/eeschema/libcmp.h b/eeschema/libcmp.h index 402cb18775..1d459b4fd2 100644 --- a/eeschema/libcmp.h +++ b/eeschema/libcmp.h @@ -6,35 +6,6 @@ #define LIBCMP_H -#define LIB_VERSION_MAJOR 2 -#define LIB_VERSION_MINOR 3 - -/* Must be the first line of component library (.lib) files. */ -#define LIBFILE_IDENT "EESchema-LIBRARY Version" - -#define LIB_VERSION( major, minor ) ( major * 100 + minor ) - -#define IS_LIB_CURRENT_VERSION( major, minor ) \ - ( \ - LIB_VERSION( major1, minor1 ) == \ - LIB_VERSION( LIB_VERSION_MAJOR, LIB_VERSION_MINOR) \ - ) - -/* - * Library versions 2.3 and lower use the old separate library (.lib) and - * document (.dcm) files. Component libraries after 2.3 merged the library - * and document files into a single library file. This macro checks if the - * library version supports the old format - */ -#define USE_OLD_DOC_FILE_FORMAT( major, minor ) \ - ( LIB_VERSION( major, minor ) < LIB_VERSION( 2, 3 ) - -/* Must be the first line of component library document (.dcm) files. */ -#define DOCFILE_IDENT "EESchema-DOCLIB Version 2.0" - -#define DOC_EXT wxT( "dcm" ) - - enum LocateDrawStructType { LOCATE_COMPONENT_ARC_DRAW_TYPE = 1, @@ -49,19 +20,4 @@ enum LocateDrawStructType #define LOCATE_ALL_DRAW_ITEM 0xFFFFFFFF -#include "class_library.h" - - -/* Variables used by LibEdit */ -extern LibEDA_BaseStruct* LibItemToRepeat; /* pointer on a graphic item than - * can be duplicated by the Ins key - * (usually the last created item */ -extern CMP_LIBRARY* CurrentLib; /* Current opened library */ -extern LibEDA_BaseStruct* CurrentDrawItem; /* current edited item */ - -extern wxString CurrentAliasName; -extern bool g_AsDeMorgan; -extern int CurrentUnit; -extern int CurrentConvert; - #endif // LIBCMP_H diff --git a/eeschema/libedit.cpp b/eeschema/libedit.cpp index 4ab64ba74d..0913802e7b 100644 --- a/eeschema/libedit.cpp +++ b/eeschema/libedit.cpp @@ -16,10 +16,10 @@ #include "eeschema_id.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libeditfrm.h" +#include "class_library.h" #include "dialog_create_component.h" @@ -29,8 +29,8 @@ void WinEDA_LibeditFrame::DisplayLibInfos() { wxString msg = _( "Component Library Editor: " ); - if( CurrentLib ) - msg += CurrentLib->GetFullFileName(); + if( m_library ) + msg += m_library->GetFullFileName(); else msg += _( "no library selected" ); @@ -46,7 +46,7 @@ void WinEDA_LibeditFrame::SelectActiveLibrary() Lib = SelectLibraryFromList( this ); if( Lib ) { - CurrentLib = Lib; + m_library = Lib; } DisplayLibInfos(); } @@ -59,58 +59,60 @@ void WinEDA_LibeditFrame::SelectActiveLibrary() * If there is no current selected library, * prompt user for library name and make the selected library the current lib. */ -bool WinEDA_LibeditFrame::LoadOneLibraryPart() +void WinEDA_LibeditFrame::LoadOneLibraryPart( wxCommandEvent& event ) { int i; wxString msg; wxString CmpName; CMP_LIB_ENTRY* LibEntry = NULL; - if( g_ScreenLib->IsModify() && !IsOK( this, _( "Current part not \ -saved.\n\nDiscard current changes?" ) ) ) - return false; + DrawPanel->UnManageCursor( 0, wxCURSOR_ARROW ); - if( CurrentLib == NULL ) // No current lib, ask user for the library to use + if( GetBaseScreen()->IsModify() && !IsOK( this, _( "Current part not \ +saved.\n\nDiscard current changes?" ) ) ) + return; + + // No current lib, ask user for the library to use. + if( m_library == NULL ) { SelectActiveLibrary(); - if( CurrentLib == NULL ) - return false; + if( m_library == NULL ) + return; } - i = GetNameOfPartToLoad( this, CurrentLib, CmpName ); + i = GetNameOfPartToLoad( this, m_library, CmpName ); if( i == 0 ) - return false; + return; - g_ScreenLib->ClrModify(); - CurrentDrawItem = NULL; + GetBaseScreen()->ClrModify(); + m_lastDrawItem = m_drawItem = NULL; // Delete previous library component, if any - if( m_currentComponent ) + if( m_component ) { - SAFE_DELETE( m_currentComponent ); + SAFE_DELETE( m_component ); } /* Load the new library component */ - LibEntry = CurrentLib->FindEntry( CmpName ); + LibEntry = m_library->FindEntry( CmpName ); if( LibEntry == NULL ) { msg.Printf( _( "Component or alias name \"%s\" not found in \ library \"%s\"." ), (const wxChar*) CmpName, - (const wxChar*) CurrentLib->GetName() ); + (const wxChar*) m_library->GetName() ); DisplayError( this, msg ); - return false; + return; } + if( !LoadOneLibraryPartAux( LibEntry, m_library ) ) + return; + + g_EditPinByPinIsOn = false; GetScreen()->ClearUndoRedoList(); - - if( !LoadOneLibraryPartAux( LibEntry, CurrentLib ) ) - return false; - Zoom_Automatique( false ); DrawPanel->Refresh(); - return true; } @@ -119,7 +121,7 @@ library \"%s\"." ), * retourne * 0 si OK * 1 si err - * m_currentComponent pointe la copie ainsi creee + * m_component pointe la copie ainsi creee */ bool WinEDA_LibeditFrame::LoadOneLibraryPartAux( CMP_LIB_ENTRY* LibEntry, CMP_LIBRARY* Library ) @@ -138,7 +140,7 @@ bool WinEDA_LibeditFrame::LoadOneLibraryPartAux( CMP_LIB_ENTRY* LibEntry, } cmpName = LibEntry->GetName(); - CurrentAliasName.Empty(); + m_aliasName.Empty(); if( LibEntry->Type != ROOT ) { @@ -151,19 +153,19 @@ bool WinEDA_LibeditFrame::LoadOneLibraryPartAux( CMP_LIB_ENTRY* LibEntry, (const wxChar*) cmpName, (const wxChar*) component->GetName() ); - CurrentAliasName = cmpName; + m_aliasName = cmpName; } else { component = (LIB_COMPONENT*) LibEntry; } - if( m_currentComponent ) - SAFE_DELETE( m_currentComponent ); + if( m_component ) + SAFE_DELETE( m_component ); - m_currentComponent = CopyLibEntryStruct( component ); + m_component = new LIB_COMPONENT( *component ); - if( m_currentComponent == NULL ) + if( m_component == NULL ) { msg.Printf( _( "Could not create copy of part <%s> in library <%s>." ), (const wxChar*) LibEntry->GetName(), @@ -172,15 +174,15 @@ bool WinEDA_LibeditFrame::LoadOneLibraryPartAux( CMP_LIB_ENTRY* LibEntry, return false; } - CurrentUnit = 1; - CurrentConvert = 1; + m_unit = 1; + m_convert = 1; - g_AsDeMorgan = 0; + m_showDeMorgan = false; - if( LookForConvertPart( m_currentComponent ) > 1 ) - g_AsDeMorgan = 1; + if( LookForConvertPart( m_component ) > 1 ) + m_showDeMorgan = true; - g_ScreenLib->ClrModify(); + GetBaseScreen()->ClrModify(); DisplayLibInfos(); UpdateAliasSelectList(); UpdatePartSelectList(); @@ -216,9 +218,9 @@ void WinEDA_LibeditFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg ) DrawPanel->DrawBackGround( DC ); - if( m_currentComponent ) - m_currentComponent->Draw( DrawPanel, DC, wxPoint( 0, 0 ), CurrentUnit, - CurrentConvert, GR_DEFAULT_DRAWMODE ); + if( m_component ) + m_component->Draw( DrawPanel, DC, wxPoint( 0, 0 ), m_unit, + m_convert, GR_DEFAULT_DRAWMODE ); DrawPanel->CursorOn( DC ); // redraw cursor @@ -250,20 +252,20 @@ void WinEDA_LibeditFrame::SaveActiveLibrary( wxCommandEvent& event ) SaveOnePartInMemory(); } - if( CurrentLib == NULL ) + if( m_library == NULL ) { DisplayError( this, wxT( "No library specified." ) ); return; } - fn = wxFileName( CurrentLib->GetFullFileName() ); + fn = wxFileName( m_library->GetFullFileName() ); msg = _( "Modify library file \"" ) + fn.GetFullPath() + _( "\"?" ); if( !IsOK( this, msg ) ) return; - bool success = CurrentLib->Save( fn.GetFullPath() ); + bool success = m_library->Save( fn.GetFullPath() ); MsgPanel->EraseMsgBox(); @@ -296,38 +298,38 @@ void WinEDA_LibeditFrame::DisplayCmpDoc() MsgPanel->EraseMsgBox(); - if( CurrentLib == NULL || m_currentComponent == NULL ) + if( m_library == NULL || m_component == NULL ) return; - msg = m_currentComponent->GetName(); + msg = m_component->GetName(); MsgPanel->AppendMessage( _( "Part" ), msg, BLUE, 8 ); - if( CurrentAliasName.IsEmpty() ) + if( m_aliasName.IsEmpty() ) { msg = _( "None" ); } else { - msg = CurrentAliasName; - alias = CurrentLib->FindAlias( CurrentAliasName ); + msg = m_aliasName; + alias = m_library->FindAlias( m_aliasName ); } MsgPanel->AppendMessage( _( "Alias" ), msg, RED, 8 ); static wxChar UnitLetter[] = wxT( "?ABCDEFGHIJKLMNOPQRSTUVWXYZ" ); - msg = UnitLetter[CurrentUnit]; + msg = UnitLetter[m_unit]; MsgPanel->AppendMessage( _( "Unit" ), msg, BROWN, 8 ); - if( CurrentConvert > 1 ) + if( m_convert > 1 ) msg = _( "Convert" ); else msg = _( "Normal" ); MsgPanel->AppendMessage( _( "Body" ), msg, GREEN, 8 ); - if( m_currentComponent->m_Options == ENTRY_POWER ) + if( m_component->m_Options == ENTRY_POWER ) msg = _( "Power Symbol" ); else msg = _( "Component" ); @@ -337,14 +339,14 @@ void WinEDA_LibeditFrame::DisplayCmpDoc() if( alias != NULL ) msg = alias->m_Doc; else - msg = m_currentComponent->m_Doc; + msg = m_component->m_Doc; MsgPanel->AppendMessage( _( "Description" ), msg, CYAN, 8 ); if( alias != NULL ) msg = alias->m_KeyWord; else - msg = m_currentComponent->m_KeyWord; + msg = m_component->m_KeyWord; MsgPanel->AppendMessage( _( "Key words" ), msg, DARKDARKGRAY ); } @@ -371,62 +373,63 @@ void WinEDA_LibeditFrame::DeleteOnePart( wxCommandEvent& event ) DrawPanel->UnManageCursor( 0, wxCURSOR_ARROW ); - LibItemToRepeat = NULL; - CurrentDrawItem = NULL; + m_lastDrawItem = NULL; + m_drawItem = NULL; - if( CurrentLib == NULL ) + if( m_library == NULL ) { SelectActiveLibrary(); - if( CurrentLib == NULL ) + if( m_library == NULL ) { DisplayError( this, _( "Please select a component library." ) ); return; } } - CurrentLib->GetEntryNames( ListNames ); + m_library->GetEntryNames( ListNames ); if( ListNames.IsEmpty() ) { msg.Printf( _( "Component library <%s> is empty." ), - ( const wxChar* ) CurrentLib->GetName() ); + ( const wxChar* ) m_library->GetName() ); wxMessageBox( msg, _( "Delete Entry Error" ), wxID_OK | wxICON_EXCLAMATION, this ); return; } msg.Printf( _( "Select 1 of %d components to delete\nfrom library <%s>." ), - ListNames.GetCount(), ( const wxChar* ) CurrentLib->GetName() ); + ListNames.GetCount(), + ( const wxChar* ) m_library->GetName() ); wxSingleChoiceDialog dlg( this, msg, _( "Delete Component" ), ListNames ); if( dlg.ShowModal() == wxID_CANCEL || dlg.GetStringSelection().IsEmpty() ) return; - LibEntry = CurrentLib->FindEntry( dlg.GetStringSelection() ); + LibEntry = m_library->FindEntry( dlg.GetStringSelection() ); if( LibEntry == NULL ) { msg.Printf( _( "Entry <%s> not found in library <%s>." ), ( const wxChar* ) dlg.GetStringSelection(), - ( const wxChar* ) CurrentLib->GetName() ); + ( const wxChar* ) m_library->GetName() ); DisplayError( this, msg ); return; } msg.Printf( _( "Delete component \"%s\" from library \"%s\"?" ), (const wxChar*) LibEntry->GetName(), - (const wxChar*) CurrentLib->GetName() ); + (const wxChar*) m_library->GetName() ); if( !IsOK( this, msg ) ) return; - if( m_currentComponent == NULL - || ( m_currentComponent->GetName().CmpNoCase( LibEntry->GetName() ) != 0 - && !m_currentComponent->HasAlias( LibEntry->GetName() ) ) ) + if( m_component == NULL + || ( m_component->GetName().CmpNoCase( LibEntry->GetName() ) != 0 + && !m_component->HasAlias( LibEntry->GetName() ) ) ) { - CurrentLib->RemoveEntry( LibEntry ); + m_library->RemoveEntry( LibEntry ); return; } @@ -447,33 +450,32 @@ All changes will be lost. Discard changes?" ) ) ) * in the library will be shown. If the current component has * aliases, the updated component will be shown */ - if( m_currentComponent->GetName().CmpNoCase( LibEntry->GetName() ) == 0 ) + if( m_component->GetName().CmpNoCase( LibEntry->GetName() ) == 0 ) { - if( m_currentComponent->m_AliasList.IsEmpty() ) + if( m_component->m_AliasList.IsEmpty() ) { - nextEntry = - CurrentLib->GetNextEntry( m_currentComponent->GetName() ); + nextEntry = m_library->GetNextEntry( m_component->GetName() ); if( nextEntry != NULL ) newCmpName = nextEntry->GetName(); } else { - newCmpName = m_currentComponent->m_AliasList[ 0 ]; + newCmpName = m_component->m_AliasList[ 0 ]; } } else { - newCmpName = m_currentComponent->GetName(); + newCmpName = m_component->GetName(); } - CurrentLib->RemoveEntry( LibEntry ); + m_library->RemoveEntry( LibEntry ); if( !newCmpName.IsEmpty() ) { - nextEntry = CurrentLib->FindEntry( newCmpName ); + nextEntry = m_library->FindEntry( newCmpName ); - if( nextEntry != NULL && LoadOneLibraryPartAux( nextEntry, CurrentLib ) ) + if( nextEntry != NULL && LoadOneLibraryPartAux( nextEntry, m_library ) ) Zoom_Automatique( false ); DrawPanel->Refresh(); @@ -492,14 +494,14 @@ void WinEDA_LibeditFrame::CreateNewLibraryPart( wxCommandEvent& event ) wxString msg; LIB_COMPONENT* NewStruct; - if( m_currentComponent && GetScreen()->IsModify() + if( m_component && GetScreen()->IsModify() && !IsOK( this, _( "All changes to the current component will be \ lost!\n\nClear the current component from the screen?" ) ) ) return; DrawPanel->UnManageCursor( 0, wxCURSOR_ARROW ); - CurrentDrawItem = NULL; + m_drawItem = NULL; WinEDA_CreateCmpDialog Dialogbox( this ); diag = Dialogbox.ShowModal(); @@ -512,15 +514,15 @@ lost!\n\nClear the current component from the screen?" ) ) ) msg.Replace( wxT( " " ), wxT( "_" ) ); /* Test: y a t-il un composant deja de ce nom */ - if( CurrentLib ) + if( m_library ) { - if( CurrentLib->FindEntry( msg ) ) + if( m_library->FindEntry( msg ) ) { wxString msg; msg.Printf( _( "Component \"%s\" already exists in \ library \"%s\"." ), (const wxChar*) Dialogbox.ReturnCmpName(), - (const wxChar*) CurrentLib->GetName() ); + (const wxChar*) m_library->GetName() ); DisplayError( this, msg ); return; } @@ -533,19 +535,19 @@ library \"%s\"." ), NewStruct->m_Prefix.m_Text.MakeUpper(); // Effacement ancien composant affich� - if( m_currentComponent ) + if( m_component ) { - SAFE_DELETE( m_currentComponent ); + SAFE_DELETE( m_component ); } - m_currentComponent = NewStruct; - CurrentUnit = 1; - CurrentConvert = 1; + m_component = NewStruct; + m_unit = 1; + m_convert = 1; DisplayLibInfos(); DisplayCmpDoc(); UpdateAliasSelectList(); UpdatePartSelectList(); g_EditPinByPinIsOn = false; - LibItemToRepeat = NULL; + m_lastDrawItem = NULL; GetScreen()->ClearUndoRedoList(); DrawPanel->Refresh(); } @@ -564,24 +566,24 @@ void WinEDA_LibeditFrame::SaveOnePartInMemory() LIB_COMPONENT* Component; wxString msg; - if( m_currentComponent == NULL ) + if( m_component == NULL ) { DisplayError( this, _( "No component to save." ) ); return; } - if( CurrentLib == NULL ) + if( m_library == NULL ) SelectActiveLibrary(); - if( CurrentLib == NULL ) + if( m_library == NULL ) { DisplayError( this, _( "No library specified." ) ); return; } - g_ScreenLib->ClrModify(); + GetBaseScreen()->ClrModify(); - oldComponent = CurrentLib->FindComponent( m_currentComponent->GetName() ); + oldComponent = m_library->FindComponent( m_component->GetName() ); if( oldComponent != NULL ) { @@ -591,19 +593,20 @@ void WinEDA_LibeditFrame::SaveOnePartInMemory() return; } - wxASSERT( m_currentComponent->Type == ROOT ); + m_drawItem = m_lastDrawItem = NULL; + + wxASSERT( m_component->Type == ROOT ); if( oldComponent != NULL ) - Component = CurrentLib->ReplaceComponent( oldComponent, - m_currentComponent ); + Component = m_library->ReplaceComponent( oldComponent, m_component ); else - Component = CurrentLib->AddComponent( m_currentComponent ); + Component = m_library->AddComponent( m_component ); if( Component == NULL ) return; msg.Printf( _( "Component %s saved in library %s" ), ( const wxChar* ) Component->GetName(), - ( const wxChar* ) CurrentLib->GetName() ); + ( const wxChar* ) m_library->GetName() ); Affiche_Message( msg ); } diff --git a/eeschema/libedit_onleftclick.cpp b/eeschema/libedit_onleftclick.cpp index 9fc48974b7..46554e3944 100644 --- a/eeschema/libedit_onleftclick.cpp +++ b/eeschema/libedit_onleftclick.cpp @@ -13,24 +13,25 @@ #include "eeschema_id.h" #include "program.h" -#include "libcmp.h" #include "general.h" +#include "libcmp.h" #include "protos.h" #include "libeditfrm.h" +#include "class_libentry.h" void WinEDA_LibeditFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) { - LibEDA_BaseStruct* DrawEntry = CurrentDrawItem; + LIB_DRAW_ITEM* DrawEntry = m_drawItem; - if( m_currentComponent == NULL ) // No component loaded ! + if( m_component == NULL ) // No component loaded ! return; if( m_ID_current_state == 0 ) { if( DrawEntry && DrawEntry->m_Flags ) { - SaveCopyInUndoList( m_currentComponent ); + SaveCopyInUndoList( m_component ); switch( DrawEntry->Type() ) { @@ -50,28 +51,24 @@ void WinEDA_LibeditFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) } else { - DrawEntry = LocatePin( GetScreen()->m_MousePosition, - m_currentComponent, CurrentUnit, - CurrentConvert ); + DrawEntry = LocatePin( GetScreen()->m_MousePosition, m_component, + m_unit, m_convert ); if( DrawEntry == NULL ) { DrawEntry = LocateDrawItem( (SCH_SCREEN*)GetScreen(), GetScreen()->m_MousePosition, - m_currentComponent, CurrentUnit, - CurrentConvert, + m_component, m_unit, m_convert, LOCATE_ALL_DRAW_ITEM ); } if( DrawEntry == NULL ) - DrawEntry = LocatePin( GetScreen()->m_Curseur, - m_currentComponent, CurrentUnit, - CurrentConvert ); + DrawEntry = LocatePin( GetScreen()->m_Curseur, m_component, + m_unit, m_convert ); if( DrawEntry == NULL ) { DrawEntry = LocateDrawItem( (SCH_SCREEN*)GetScreen(), GetScreen()->m_Curseur, - m_currentComponent, CurrentUnit, - CurrentConvert, + m_component, m_unit, m_convert, LOCATE_ALL_DRAW_ITEM ); } @@ -91,13 +88,13 @@ void WinEDA_LibeditFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) break; case ID_LIBEDIT_PIN_BUTT: - if( CurrentDrawItem == NULL || CurrentDrawItem->m_Flags == 0 ) + if( m_drawItem == NULL || m_drawItem->m_Flags == 0 ) { CreatePin( DC ); } else { - SaveCopyInUndoList( m_currentComponent ); + SaveCopyInUndoList( m_component ); PlacePin( DC ); } break; @@ -107,60 +104,57 @@ void WinEDA_LibeditFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) case ID_LIBEDIT_BODY_CIRCLE_BUTT: case ID_LIBEDIT_BODY_RECT_BUTT: case ID_LIBEDIT_BODY_TEXT_BUTT: - if( CurrentDrawItem == NULL || CurrentDrawItem->m_Flags == 0 ) + if( m_drawItem == NULL || m_drawItem->m_Flags == 0 ) { - CurrentDrawItem = CreateGraphicItem( m_currentComponent, DC ); + m_drawItem = CreateGraphicItem( m_component, DC ); } - else if( CurrentDrawItem ) + else if( m_drawItem ) { - if( CurrentDrawItem->m_Flags & IS_NEW ) + if( m_drawItem->m_Flags & IS_NEW ) GraphicItemBeginDraw( DC ); else { - SaveCopyInUndoList( m_currentComponent ); + SaveCopyInUndoList( m_component ); EndDrawGraphicItem( DC ); } } break; case ID_LIBEDIT_DELETE_ITEM_BUTT: - DrawEntry = LocatePin( GetScreen()->m_MousePosition, - m_currentComponent, CurrentUnit, - CurrentConvert ); + DrawEntry = LocatePin( GetScreen()->m_MousePosition, m_component, + m_unit, m_convert ); if( DrawEntry == NULL ) { DrawEntry = LocateDrawItem( (SCH_SCREEN*)GetScreen(), GetScreen()->m_MousePosition, - m_currentComponent, CurrentUnit, - CurrentConvert, + m_component, m_unit, m_convert, LOCATE_ALL_DRAW_ITEM ); } if( DrawEntry == NULL ) DrawEntry = LocatePin( GetScreen()->m_Curseur, - m_currentComponent, CurrentUnit, - CurrentConvert ); + m_component, m_unit, + m_convert ); if( DrawEntry == NULL ) { DrawEntry = LocateDrawItem( (SCH_SCREEN*)GetScreen(), GetScreen()->m_Curseur, - m_currentComponent, CurrentUnit, - CurrentConvert, + m_component, m_unit, m_convert, LOCATE_ALL_DRAW_ITEM ); } if( DrawEntry == NULL ) DisplayCmpDoc(); - SaveCopyInUndoList( m_currentComponent ); + SaveCopyInUndoList( m_component ); if( DrawEntry->Type() == COMPONENT_PIN_DRAW_TYPE ) - DeletePin( DC, m_currentComponent, (LibDrawPin*) DrawEntry ); + DeletePin( DC, m_component, (LibDrawPin*) DrawEntry ); else - m_currentComponent->RemoveDrawItem( DrawEntry, DrawPanel, DC ); + m_component->RemoveDrawItem( DrawEntry, DrawPanel, DC ); DrawEntry = NULL; GetScreen()->SetModify(); break; case ID_LIBEDIT_ANCHOR_ITEM_BUTT: - SaveCopyInUndoList( m_currentComponent ); + SaveCopyInUndoList( m_component ); PlaceAncre(); SetToolID( 0, wxCURSOR_ARROW, wxEmptyString ); break; @@ -183,39 +177,37 @@ void WinEDA_LibeditFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) */ void WinEDA_LibeditFrame::OnLeftDClick( wxDC* DC, const wxPoint& MousePos ) { - wxPoint pos = GetPosition(); - LibEDA_BaseStruct* DrawEntry = CurrentDrawItem; + wxPoint pos = GetPosition(); + LIB_DRAW_ITEM* DrawEntry = m_drawItem; - if( m_currentComponent == NULL ) + if( m_component == NULL ) return; if( ( DrawEntry == NULL ) || ( DrawEntry->m_Flags == 0 ) ) { // We can locate an item - DrawEntry = LocatePin( GetScreen()->m_MousePosition, m_currentComponent, - CurrentUnit, CurrentConvert ); + DrawEntry = LocatePin( GetScreen()->m_MousePosition, m_component, + m_unit, m_convert ); if( DrawEntry == NULL ) - DrawEntry = LocatePin( GetScreen()->m_Curseur, m_currentComponent, - CurrentUnit, CurrentConvert ); + DrawEntry = LocatePin( GetScreen()->m_Curseur, m_component, + m_unit, m_convert ); if( DrawEntry == NULL ) { - DrawEntry = CurrentDrawItem = + DrawEntry = m_drawItem = LocateDrawItem( (SCH_SCREEN*) GetScreen(), - GetScreen()->m_MousePosition, - m_currentComponent, CurrentUnit, - CurrentConvert, LOCATE_ALL_DRAW_ITEM ); + GetScreen()->m_MousePosition, m_component, + m_unit, m_convert, LOCATE_ALL_DRAW_ITEM ); } if( DrawEntry == NULL ) { - DrawEntry = CurrentDrawItem = + DrawEntry = m_drawItem = LocateDrawItem( (SCH_SCREEN*) GetScreen(), - GetScreen()->m_Curseur, - m_currentComponent, CurrentUnit, - CurrentConvert, LOCATE_ALL_DRAW_ITEM ); + GetScreen()->m_Curseur, m_component, m_unit, + m_convert, LOCATE_ALL_DRAW_ITEM ); } if( DrawEntry == NULL ) { - DrawEntry = CurrentDrawItem = - (LibEDA_BaseStruct*) LocateField( m_currentComponent ); + DrawEntry = m_drawItem = + (LIB_DRAW_ITEM*) LocateField( m_component ); } if( DrawEntry == NULL ) { @@ -228,7 +220,7 @@ void WinEDA_LibeditFrame::OnLeftDClick( wxDC* DC, const wxPoint& MousePos ) else return; - CurrentDrawItem = DrawEntry; + m_drawItem = DrawEntry; DrawPanel->m_IgnoreMouseEvents = TRUE; diff --git a/eeschema/libedit_onrightclick.cpp b/eeschema/libedit_onrightclick.cpp index f5c943b177..52117eed3f 100644 --- a/eeschema/libedit_onrightclick.cpp +++ b/eeschema/libedit_onrightclick.cpp @@ -14,10 +14,10 @@ #include "hotkeys.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libeditfrm.h" +#include "class_libentry.h" /* functions to add commands and submenus depending on the item */ @@ -29,10 +29,10 @@ static void AddMenusForPin( wxMenu* PopMenu, LibDrawPin* Pin, bool WinEDA_LibeditFrame::OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ) { - LibEDA_BaseStruct* DrawEntry = LocateItemUsingCursor(); + LIB_DRAW_ITEM* DrawEntry = LocateItemUsingCursor(); bool BlockActive = (GetScreen()->m_BlockLocate.m_Command != BLOCK_IDLE); - if( m_currentComponent == NULL ) + if( m_component == NULL ) return true; // If Command in progresss: put the menu "cancel" and "end tool" @@ -68,7 +68,7 @@ bool WinEDA_LibeditFrame::OnRightClick( const wxPoint& MousePos, else return true; - CurrentDrawItem = DrawEntry; + m_drawItem = DrawEntry; wxString msg; switch( DrawEntry->Type() ) @@ -211,7 +211,7 @@ bool WinEDA_LibeditFrame::OnRightClick( const wxPoint& MousePos, StructType %d" ), DrawEntry->Type() ); DisplayError( this, msg ); - CurrentDrawItem = NULL; + m_drawItem = NULL; break; } diff --git a/eeschema/libedit_undo_redo.cpp b/eeschema/libedit_undo_redo.cpp index c2d4ac3019..e92101e4a4 100644 --- a/eeschema/libedit_undo_redo.cpp +++ b/eeschema/libedit_undo_redo.cpp @@ -7,10 +7,10 @@ #include "common.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libeditfrm.h" +#include "class_libentry.h" /*************************************************************************/ @@ -22,7 +22,7 @@ void WinEDA_LibeditFrame::SaveCopyInUndoList( EDA_BaseStruct* ItemToCopy, LIB_COMPONENT* CopyItem; PICKED_ITEMS_LIST* lastcmd; - CopyItem = CopyLibEntryStruct( (LIB_COMPONENT*) ItemToCopy ); + CopyItem = new LIB_COMPONENT( *( (LIB_COMPONENT*) ItemToCopy ) ); if( CopyItem == NULL ) return; @@ -54,17 +54,17 @@ void WinEDA_LibeditFrame::GetComponentFromRedoList(wxCommandEvent& event) return; PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST(); - ITEM_PICKER wrapper(m_currentComponent, UR_LIBEDIT); + ITEM_PICKER wrapper(m_component, UR_LIBEDIT); lastcmd->PushItem(wrapper); GetScreen()->PushCommandToUndoList( lastcmd ); lastcmd = GetScreen()->PopCommandFromRedoList( ); wrapper = lastcmd->PopItem(); - m_currentComponent = (LIB_COMPONENT*) wrapper.m_PickedItem; - if( m_currentComponent ) - m_currentComponent->SetNext( NULL ); - CurrentDrawItem = NULL; + m_component = (LIB_COMPONENT*) wrapper.m_PickedItem; + if( m_component ) + m_component->SetNext( NULL ); + m_drawItem = NULL; GetScreen()->SetModify(); DrawPanel->Refresh(); } @@ -84,18 +84,18 @@ void WinEDA_LibeditFrame::GetComponentFromUndoList(wxCommandEvent& event) return; PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST(); - ITEM_PICKER wrapper(m_currentComponent, UR_LIBEDIT); + ITEM_PICKER wrapper(m_component, UR_LIBEDIT); lastcmd->PushItem(wrapper); GetScreen()->PushCommandToRedoList( lastcmd ); lastcmd = GetScreen()->PopCommandFromUndoList( ); wrapper = lastcmd->PopItem(); - m_currentComponent = (LIB_COMPONENT*) wrapper.m_PickedItem; + m_component = (LIB_COMPONENT*) wrapper.m_PickedItem; - if( m_currentComponent ) - m_currentComponent->SetNext( NULL ); - CurrentDrawItem = NULL; + if( m_component ) + m_component->SetNext( NULL ); + m_drawItem = NULL; GetScreen()->SetModify(); DrawPanel->Refresh(); } diff --git a/eeschema/libeditfrm.h b/eeschema/libeditfrm.h index fb979ecb3d..3c1d294b6b 100644 --- a/eeschema/libeditfrm.h +++ b/eeschema/libeditfrm.h @@ -12,6 +12,7 @@ class SCH_SCREEN; class CMP_LIBRARY; class LIB_COMPONENT; class LIB_ALIAS; +class LIB_DRAW_ITEM; /** * The component library editor main window. @@ -39,6 +40,10 @@ public: void CreateNewLibraryPart( wxCommandEvent& event ); void OnEditComponentProperties( wxCommandEvent& event ); void InstallFieldsEditorDialog( wxCommandEvent& event ); + void LoadOneLibraryPart( wxCommandEvent& event ); + void OnViewEntryDoc( wxCommandEvent& event ); + void OnCheckComponent( wxCommandEvent& event ); + void OnSelectBodyStyle( wxCommandEvent& event ); void OnUpdateEditingPart( wxUpdateUIEvent& event ); void OnUpdateNotEditingPart( wxUpdateUIEvent& event ); @@ -74,17 +79,51 @@ public: void LoadSettings(); void SaveSettings(); - LIB_COMPONENT* GetCurrentComponent( void ) + LIB_COMPONENT* GetComponent( void ) { return m_component; } + + CMP_LIBRARY* GetLibrary( void ) { return m_library; } + + wxString& GetAliasName( void ) { return m_aliasName; } + + int GetUnit( void ) { return m_unit; } + + void SetUnit( int unit ) { - return m_currentComponent; + wxASSERT( unit >= 1 ); + m_unit = unit; } + int GetConvert( void ) { return m_convert; } + + void SetConvert( int convert ) + { + wxASSERT( convert >= 1 ); + m_convert = convert; + } + + LIB_DRAW_ITEM* GetLastDrawItem( void ) { return m_lastDrawItem; } + + void SetLastDrawItem( LIB_DRAW_ITEM* drawItem ) + { + m_lastDrawItem = drawItem; + } + + LIB_DRAW_ITEM* GetDrawItem( void ) { return m_drawItem; } + + void SetDrawItem( LIB_DRAW_ITEM* drawItem ) + { + m_drawItem = drawItem; + } + + bool GetShowDeMorgan( void ) { return m_showDeMorgan; } + + void SetShowDeMorgan( bool show ) { m_showDeMorgan = show; } + private: // General: void SaveOnePartInMemory(); void SelectActiveLibrary(); - bool LoadOneLibraryPart(); void SaveActiveLibrary( wxCommandEvent& event ); bool LoadOneLibraryPartAux( CMP_LIB_ENTRY* LibEntry, @@ -109,26 +148,23 @@ private: LibDrawPin* Pin ); void StartMovePin( wxDC* DC ); - // Test des pins ( duplicates...) - bool TestPins( LIB_COMPONENT* LibEntry ); - // Edition de l'ancre void PlaceAncre(); // Edition des graphismes: - LibEDA_BaseStruct* CreateGraphicItem( LIB_COMPONENT* LibEntry, wxDC* DC ); + LIB_DRAW_ITEM* CreateGraphicItem( LIB_COMPONENT* LibEntry, wxDC* DC ); void GraphicItemBeginDraw( wxDC* DC ); void StartMoveDrawSymbol( wxDC* DC ); void EndDrawGraphicItem( wxDC* DC ); void LoadOneSymbol(); void SaveOneSymbol(); void EditGraphicSymbol( wxDC* DC, - LibEDA_BaseStruct* DrawItem ); - void EditSymbolText( wxDC* DC, LibEDA_BaseStruct* DrawItem ); + LIB_DRAW_ITEM* DrawItem ); + void EditSymbolText( wxDC* DC, LIB_DRAW_ITEM* DrawItem ); void RotateSymbolText( wxDC* DC ); void DeleteDrawPoly( wxDC* DC ); LibDrawField* LocateField( LIB_COMPONENT* LibEntry ); - LibEDA_BaseStruct* LocateItemUsingCursor(); + LIB_DRAW_ITEM* LocateItemUsingCursor(); void RotateField( wxDC* DC, LibDrawField* Field ); void PlaceField( wxDC* DC, LibDrawField* Field ); void EditField( wxDC* DC, LibDrawField* Field ); @@ -152,7 +188,15 @@ protected: wxString m_LastLibImportPath; wxString m_LastLibExportPath; - static LIB_COMPONENT* m_currentComponent; + static LIB_COMPONENT* m_component; + static CMP_LIBRARY* m_library; + static LIB_DRAW_ITEM* m_lastDrawItem; + static LIB_DRAW_ITEM* m_drawItem; + static wxString m_aliasName; + static int m_unit; + static int m_convert; + static bool m_showDeMorgan; + static wxSize m_clientSize; DECLARE_EVENT_TABLE() }; diff --git a/eeschema/libfield.cpp b/eeschema/libfield.cpp index 403addd32a..01e88b1690 100644 --- a/eeschema/libfield.cpp +++ b/eeschema/libfield.cpp @@ -9,10 +9,11 @@ #include "confirm.h" #include "program.h" -#include "libcmp.h" #include "general.h" +#include "libcmp.h" #include "protos.h" #include "libeditfrm.h" +#include "class_library.h" /* Routines locales */ @@ -20,7 +21,7 @@ static void ShowMoveField( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); /* Variables locales */ -extern int CurrentUnit; +extern int m_unit; static wxPoint StartCursor, LastTextPosition; @@ -28,7 +29,15 @@ static void ExitMoveField( WinEDA_DrawPanel* Panel, wxDC* DC ) { Panel->ManageCurseur = NULL; Panel->ForceCloseManageCurseur = NULL; - if( CurrentDrawItem == NULL ) + + WinEDA_LibeditFrame* parent = ( WinEDA_LibeditFrame* ) Panel->GetParent(); + + if( parent == NULL ) + return; + + LIB_DRAW_ITEM* item = parent->GetDrawItem(); + + if( item == NULL ) return; wxPoint curpos = Panel->GetScreen()->m_Curseur; @@ -36,9 +45,8 @@ static void ExitMoveField( WinEDA_DrawPanel* Panel, wxDC* DC ) Panel->GetScreen()->m_Curseur = StartCursor; ShowMoveField( Panel, DC, TRUE ); Panel->GetScreen()->m_Curseur = curpos; - CurrentDrawItem->m_Flags = 0; - - CurrentDrawItem = NULL; + item->m_Flags = 0; + parent->SetDrawItem( NULL ); } @@ -49,12 +57,12 @@ void WinEDA_LibeditFrame::StartMoveField( wxDC* DC, LibDrawField* field ) { wxPoint startPos; - if( ( m_currentComponent == NULL ) || ( field == NULL ) ) + if( ( m_component == NULL ) || ( field == NULL ) ) return; - CurrentDrawItem = field; + m_drawItem = field; LastTextPosition = field->m_Pos; - CurrentDrawItem->m_Flags |= IS_MOVED; + m_drawItem->m_Flags |= IS_MOVED; startPos.x = LastTextPosition.x; startPos.y = -LastTextPosition.y; @@ -77,12 +85,17 @@ void WinEDA_LibeditFrame::StartMoveField( wxDC* DC, LibDrawField* field ) /*****************************************************************/ static void ShowMoveField( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) { - LibDrawField* Field = (LibDrawField*) CurrentDrawItem; + WinEDA_LibeditFrame* parent = (WinEDA_LibeditFrame*) panel->GetParent(); + + if( parent == NULL ) + return; + + LibDrawField* Field = (LibDrawField*) parent->GetDrawItem(); if( Field == NULL ) return; - wxString text = Field->GetFullText(); + wxString text = Field->GetFullText( parent->GetUnit() ); if( erase ) Field->Draw( panel, DC, wxPoint( 0, 0 ), -1, g_XorMode, &text, @@ -107,7 +120,7 @@ void WinEDA_LibeditFrame::PlaceField( wxDC* DC, LibDrawField* Field ) Field->m_Pos.y = -GetScreen()->m_Curseur.y; DrawPanel->CursorOff( DC ); - wxString fieldText = Field->GetFullText(); + wxString fieldText = Field->GetFullText( m_unit ); Field->Draw( DrawPanel, DC, wxPoint( 0, 0 ), -1, GR_DEFAULT_DRAWMODE, &fieldText, DefaultTransformMatrix ); @@ -116,7 +129,7 @@ void WinEDA_LibeditFrame::PlaceField( wxDC* DC, LibDrawField* Field ) GetScreen()->SetModify(); DrawPanel->ManageCurseur = NULL; DrawPanel->ForceCloseManageCurseur = NULL; - CurrentDrawItem = NULL; + m_drawItem = NULL; } @@ -148,13 +161,12 @@ void WinEDA_LibeditFrame::EditField( wxDC* DC, LibDrawField* Field ) Get_Message( title, _( "Edit field" ), Text, this ); Text.Replace( wxT( " " ), wxT( "_" ) ); - /* If the value is changed, this is equivalent to create a new component - * from the old one. - * So we must check for an existing alias of this "new" component - * and change the value only if there is no existing alias with the same - * name for this component + /* 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 ) + if( Field->m_FieldId == VALUE && Text != Field->m_Text ) { wxString msg; @@ -173,19 +185,19 @@ names in the alias list." ), /* Test for an existing entry in the library to prevent duplicate * entry names. */ - if( CurrentLib && CurrentLib->FindEntry( Text ) != NULL ) + if( 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." ), (const wxChar*) Text, - (const wxChar*) CurrentLib->GetName() ); + (const wxChar*) m_library->GetName() ); DisplayError( this, msg ); return; } } - wxString fieldText = Field->GetFullText(); + wxString fieldText = Field->GetFullText( m_unit ); Field->Draw( DrawPanel, DC, wxPoint( 0, 0 ), -1, g_XorMode, &fieldText, DefaultTransformMatrix ); @@ -200,7 +212,7 @@ not conflict with any library entries." ), DisplayError( this, _( "No new text: no change" ) ); } - fieldText = Field->GetFullText(); + fieldText = Field->GetFullText( m_unit ); int drawMode = g_XorMode; if( Field->m_Flags == 0 ) @@ -229,7 +241,7 @@ void WinEDA_LibeditFrame::RotateField( wxDC* DC, LibDrawField* Field ) DrawPanel->CursorOff( DC ); GRSetDrawMode( DC, g_XorMode ); - wxString fieldText = Field->GetFullText(); + wxString fieldText = Field->GetFullText( m_unit ); Field->Draw( DrawPanel, DC, wxPoint( 0, 0 ), -1, g_XorMode, &fieldText, DefaultTransformMatrix ); @@ -283,37 +295,35 @@ LibDrawField* WinEDA_LibeditFrame::LocateField( LIB_COMPONENT* LibEntry ) } -LibEDA_BaseStruct* WinEDA_LibeditFrame::LocateItemUsingCursor() +LIB_DRAW_ITEM* WinEDA_LibeditFrame::LocateItemUsingCursor() { - LibEDA_BaseStruct* DrawEntry = CurrentDrawItem; + LIB_DRAW_ITEM* DrawEntry = m_drawItem; - if( m_currentComponent == NULL ) + if( m_component == NULL ) return NULL; if( ( DrawEntry == NULL ) || ( DrawEntry->m_Flags == 0 ) ) { - DrawEntry = LocatePin( GetScreen()->m_Curseur, m_currentComponent, - CurrentUnit, CurrentConvert ); + DrawEntry = LocatePin( GetScreen()->m_Curseur, m_component, + m_unit, m_convert ); if( DrawEntry == NULL ) { - DrawEntry = CurrentDrawItem = + DrawEntry = m_drawItem = LocateDrawItem( (SCH_SCREEN*) GetScreen(), - GetScreen()->m_MousePosition, - m_currentComponent, CurrentUnit, - CurrentConvert, LOCATE_ALL_DRAW_ITEM ); + GetScreen()->m_MousePosition, m_component, + m_unit, m_convert, LOCATE_ALL_DRAW_ITEM ); } if( DrawEntry == NULL ) { - DrawEntry = CurrentDrawItem = + DrawEntry = m_drawItem = LocateDrawItem( (SCH_SCREEN*) GetScreen(), - GetScreen()->m_Curseur, m_currentComponent, - CurrentUnit, CurrentConvert, - LOCATE_ALL_DRAW_ITEM ); + GetScreen()->m_Curseur, m_component, + m_unit, m_convert, LOCATE_ALL_DRAW_ITEM ); } if( DrawEntry == NULL ) { - DrawEntry = CurrentDrawItem = - (LibEDA_BaseStruct*) LocateField( m_currentComponent ); + DrawEntry = m_drawItem = + (LIB_DRAW_ITEM*) LocateField( m_component ); } } diff --git a/eeschema/libframe.cpp b/eeschema/libframe.cpp index 248ec76c9e..bd28f15664 100644 --- a/eeschema/libframe.cpp +++ b/eeschema/libframe.cpp @@ -2,24 +2,20 @@ /* EESchema - libframe.cpp */ /****************************/ -/* Gestion de la frame d'edition des composants en librairie - */ - #include "fctsys.h" #include "appl_wxstruct.h" #include "common.h" #include "class_drawpanel.h" #include "confirm.h" #include "eda_doc.h" +#include "bitmaps.h" #include "program.h" -#include "libcmp.h" #include "general.h" -#include "bitmaps.h" #include "protos.h" #include "eeschema_id.h" -#include "class_library.h" #include "libeditfrm.h" +#include "class_library.h" #include @@ -29,7 +25,7 @@ const wxString lastLibExportPathEntry( wxT( "LastLibraryExportPath" ) ); const wxString lastLibImportPathEntry( wxT( "LastLibraryImportPath" ) ); const wxString showGridPathEntry( wxT( "ShowGrid" ) ); -/* This method guarentees unique IDs for the library this run of Eeschema +/* This method guarantees unique IDs for the library this run of Eeschema * which prevents ID conflicts and eliminates the need to recompile every * source file in the project when adding IDs to include/id.h. */ int ExportPartId = ::wxNewId(); @@ -37,7 +33,21 @@ int ImportPartId = ::wxNewId(); int CreateNewLibAndSavePartId = ::wxNewId(); -LIB_COMPONENT* WinEDA_LibeditFrame::m_currentComponent = NULL; +/* + * Static component library editor members. These are static so their + * state is saved between editing sessions. This way the last component + * that was being edited will be displayed. These members are protected + * making it necessary to use the class access methods. + */ +LIB_COMPONENT* WinEDA_LibeditFrame::m_component = NULL; +CMP_LIBRARY* WinEDA_LibeditFrame::m_library = NULL; +wxString WinEDA_LibeditFrame::m_aliasName; +int WinEDA_LibeditFrame::m_unit = 1; +int WinEDA_LibeditFrame::m_convert = 1; +LIB_DRAW_ITEM* WinEDA_LibeditFrame::m_lastDrawItem = NULL; +LIB_DRAW_ITEM* WinEDA_LibeditFrame::m_drawItem = NULL; +bool WinEDA_LibeditFrame::m_showDeMorgan = false; +wxSize WinEDA_LibeditFrame::m_clientSize = wxSize( -1, -1 ); /*****************************/ @@ -58,7 +68,7 @@ BEGIN_EVENT_TABLE( WinEDA_LibeditFrame, WinEDA_DrawFrame ) EVT_TOOL( ID_LIBEDIT_NEW_PART, WinEDA_LibeditFrame::CreateNewLibraryPart ) EVT_TOOL( ID_LIBEDIT_SELECT_PART, - WinEDA_LibeditFrame::Process_Special_Functions ) + WinEDA_LibeditFrame::LoadOneLibraryPart ) EVT_TOOL( ID_LIBEDIT_SAVE_CURRENT_PART, WinEDA_LibeditFrame::Process_Special_Functions ) EVT_TOOL( ID_LIBEDIT_UNDO, @@ -70,13 +80,13 @@ BEGIN_EVENT_TABLE( WinEDA_LibeditFrame, WinEDA_DrawFrame ) EVT_TOOL( ID_LIBEDIT_GET_FRAME_EDIT_FIELDS, WinEDA_LibeditFrame::InstallFieldsEditorDialog ) EVT_TOOL( ID_LIBEDIT_CHECK_PART, - WinEDA_LibeditFrame::Process_Special_Functions ) + WinEDA_LibeditFrame::OnCheckComponent ) EVT_TOOL( ID_DE_MORGAN_NORMAL_BUTT, - WinEDA_LibeditFrame::Process_Special_Functions ) + WinEDA_LibeditFrame::OnSelectBodyStyle ) EVT_TOOL( ID_DE_MORGAN_CONVERT_BUTT, - WinEDA_LibeditFrame::Process_Special_Functions ) + WinEDA_LibeditFrame::OnSelectBodyStyle ) EVT_TOOL( ID_LIBEDIT_VIEW_DOC, - WinEDA_LibeditFrame::Process_Special_Functions ) + WinEDA_LibeditFrame::OnViewEntryDoc ) EVT_TOOL( ID_LIBEDIT_EDIT_PIN_BY_PIN, WinEDA_LibeditFrame::Process_Special_Functions ) EVT_TOOL( ExportPartId, WinEDA_LibeditFrame::OnExportPart ) @@ -147,7 +157,7 @@ WinEDA_LibeditFrame::WinEDA_LibeditFrame( wxWindow* father, // Give an icon SetIcon( wxIcon( libedit_xpm ) ); - SetBaseScreen( g_ScreenLib ); + SetBaseScreen( new SCH_SCREEN() ); GetScreen()->m_Center = true; LoadSettings(); SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y ); @@ -159,7 +169,7 @@ WinEDA_LibeditFrame::WinEDA_LibeditFrame( wxWindow* father, DisplayCmpDoc(); UpdateAliasSelectList(); UpdatePartSelectList(); - BestZoom(); + Zoom_Automatique( false ); Show( true ); } @@ -169,6 +179,7 @@ WinEDA_LibeditFrame::~WinEDA_LibeditFrame() WinEDA_SchematicFrame* frame = (WinEDA_SchematicFrame*) wxGetApp().GetTopWindow(); frame->m_LibeditFrame = NULL; + m_drawItem = m_lastDrawItem = NULL; } @@ -178,7 +189,7 @@ WinEDA_LibeditFrame::~WinEDA_LibeditFrame() * Don't forget to call this base method from any derived classes or the * settings will not get loaded. */ -void WinEDA_LibeditFrame::LoadSettings( ) +void WinEDA_LibeditFrame::LoadSettings() { wxConfig* cfg; @@ -248,41 +259,52 @@ void WinEDA_LibeditFrame::OnCloseWindow( wxCloseEvent& Event ) int WinEDA_LibeditFrame::BestZoom() { int dx, dy, ii, jj; - int bestzoom; wxSize size; EDA_Rect BoundaryBox; - if( m_currentComponent ) + if( m_component ) { - BoundaryBox = m_currentComponent->GetBoundaryBox( CurrentUnit, - CurrentConvert ); + BoundaryBox = m_component->GetBoundaryBox( m_unit, m_convert ); dx = BoundaryBox.GetWidth(); dy = BoundaryBox.GetHeight(); + GetScreen()->m_Curseur = BoundaryBox.Centre(); } else { dx = GetScreen()->m_CurrentSheetDesc->m_Size.x; dy = GetScreen()->m_CurrentSheetDesc->m_Size.y; + GetScreen()->m_Curseur = wxPoint( 0, 0 ); } - size = DrawPanel->GetClientSize(); - size -= wxSize( 100, 100 ); // reserve 100 mils margin - ii = abs( dx / size.x ); - jj = abs( dy / size.y ); - - bestzoom = MAX( ii, jj ) + 1; - - if( m_currentComponent ) + /* + * This fixes a bug where the client size of the drawing area is not + * correctly reported until after the window is shown. This is most + * likely due to the unmanaged windows ( vertical tool bars and message + * panel ) that are drawn in the main window which wxWidgets knows + * nothing about. When the library editor is reopened with a component + * already loading, the zoom will be calculated correctly. + */ + if( !IsShownOnScreen() ) { - GetScreen()->m_Curseur = BoundaryBox.Centre(); + if( m_clientSize != wxSize( -1, -1 ) ) + size = m_clientSize; + else + size = DrawPanel->GetClientSize(); } else { - GetScreen()->m_Curseur.x = 0; - GetScreen()->m_Curseur.y = 0; + if( m_clientSize == wxSize( -1, -1 ) ) + m_clientSize = DrawPanel->GetClientSize(); + size = m_clientSize; } - return bestzoom * GetScreen()->m_ZoomScalar; + size -= wxSize( 25, 25 ); // reserve 100 mils margin + ii = wxRound( ( (double) dx / (double) size.x ) * + (double) GetScreen()->m_ZoomScalar ); + jj = wxRound( ( (double) dy / (double) size.y ) * + (double) GetScreen()->m_ZoomScalar ); + + return MAX( ii + 1, jj + 1 ); } @@ -293,17 +315,17 @@ void WinEDA_LibeditFrame::UpdateAliasSelectList() m_SelAliasBox->Clear(); - if( m_currentComponent == NULL ) + if( m_component == NULL ) return; - m_SelAliasBox->Append( m_currentComponent->GetName() ); + m_SelAliasBox->Append( m_component->GetName() ); m_SelAliasBox->SetSelection( 0 ); - if( !m_currentComponent->m_AliasList.IsEmpty() ) + if( !m_component->m_AliasList.IsEmpty() ) { - m_SelAliasBox->Append( m_currentComponent->m_AliasList ); + m_SelAliasBox->Append( m_component->m_AliasList ); - int index = m_SelAliasBox->FindString( CurrentAliasName ); + int index = m_SelAliasBox->FindString( m_aliasName ); if( index != wxNOT_FOUND ) m_SelAliasBox->SetSelection( index ); @@ -320,13 +342,13 @@ void WinEDA_LibeditFrame::UpdatePartSelectList() if( m_SelpartBox->GetCount() != 0 ) m_SelpartBox->Clear(); - if( m_currentComponent == NULL || m_currentComponent->m_UnitCount <= 1 ) + if( m_component == NULL || m_component->m_UnitCount <= 1 ) { m_SelpartBox->Append( wxEmptyString ); } else { - for( int i = 0; i < m_currentComponent->m_UnitCount; i++ ) + for( int i = 0; i < m_component->m_UnitCount; i++ ) { wxString msg; msg.Printf( _( "Part %c" ), 'A' + i ); @@ -334,40 +356,40 @@ void WinEDA_LibeditFrame::UpdatePartSelectList() } } - m_SelpartBox->SetSelection( ( CurrentUnit > 0 ) ? CurrentUnit - 1 : 0 ); + m_SelpartBox->SetSelection( ( m_unit > 0 ) ? m_unit - 1 : 0 ); } void WinEDA_LibeditFrame::OnUpdateEditingPart( wxUpdateUIEvent& event ) { - event.Enable( m_currentComponent != NULL ); + event.Enable( m_component != NULL ); } void WinEDA_LibeditFrame::OnUpdateNotEditingPart( wxUpdateUIEvent& event ) { - event.Enable( m_currentComponent == NULL ); + event.Enable( m_component == NULL ); } void WinEDA_LibeditFrame::OnUpdateUndo( wxUpdateUIEvent& event ) { - event.Enable( m_currentComponent != NULL && GetScreen() != NULL + event.Enable( m_component != NULL && GetScreen() != NULL && GetScreen()->GetUndoCommandCount() != 0 ); } void WinEDA_LibeditFrame::OnUpdateRedo( wxUpdateUIEvent& event ) { - event.Enable( m_currentComponent != NULL && GetScreen() != NULL + event.Enable( m_component != NULL && GetScreen() != NULL && GetScreen()->GetRedoCommandCount() != 0 ); } void WinEDA_LibeditFrame::OnUpdateSaveCurrentLib( wxUpdateUIEvent& event ) { - event.Enable( CurrentLib != NULL - && ( CurrentLib->IsModified() || GetScreen()->IsModify() ) ); + event.Enable( m_library != NULL + && ( m_library->IsModified()|| GetScreen()->IsModify() ) ); } @@ -375,16 +397,16 @@ void WinEDA_LibeditFrame::OnUpdateViewDoc( wxUpdateUIEvent& event ) { bool enable = false; - if( m_currentComponent != NULL && CurrentLib != NULL ) + if( m_component != NULL && m_library != NULL ) { - if( !CurrentAliasName.IsEmpty() ) + if( !m_aliasName.IsEmpty() ) { - CMP_LIB_ENTRY* entry = CurrentLib->FindEntry( CurrentAliasName ); + CMP_LIB_ENTRY* entry = m_library->FindEntry( m_aliasName ); if( entry != NULL ) enable = !entry->m_DocFile.IsEmpty(); } - else if( !m_currentComponent->m_DocFile.IsEmpty() ) + else if( !m_component->m_DocFile.IsEmpty() ) { enable = true; } @@ -396,9 +418,8 @@ void WinEDA_LibeditFrame::OnUpdateViewDoc( wxUpdateUIEvent& event ) void WinEDA_LibeditFrame::OnUpdatePinByPin( wxUpdateUIEvent& event ) { - event.Enable( ( m_currentComponent != NULL ) - && ( ( m_currentComponent->m_UnitCount > 1 ) - || g_AsDeMorgan ) ); + event.Enable( ( m_component != NULL ) + && ( ( m_component->m_UnitCount > 1 ) || m_showDeMorgan ) ); if( m_HToolBar ) m_HToolBar->ToggleTool( event.GetId(), g_EditPinByPinIsOn ); @@ -410,11 +431,11 @@ void WinEDA_LibeditFrame::OnUpdatePartNumber( wxUpdateUIEvent& event ) if( m_SelpartBox == NULL ) return; - /* Using the typical event.Enable() call dosen't seem to work with wxGTK + /* Using the typical event.Enable() call doesn't seem to work with wxGTK * so use the pointer to alias combobox to directly enable or disable. */ - m_SelpartBox->Enable( m_currentComponent != NULL - && m_currentComponent->m_UnitCount > 1 ); + m_SelpartBox->Enable( m_component != NULL + && m_component->m_UnitCount > 1 ); } @@ -423,9 +444,9 @@ void WinEDA_LibeditFrame::OnUpdateDeMorganNormal( wxUpdateUIEvent& event ) if( m_HToolBar == NULL ) return; - event.Enable( m_currentComponent != NULL - && m_currentComponent->HasConversion() ); - m_HToolBar->ToggleTool( event.GetId(), CurrentConvert <= 1 ); + event.Enable( m_component != NULL + && m_component->HasConversion() ); + m_HToolBar->ToggleTool( event.GetId(), m_convert <= 1 ); } @@ -434,9 +455,9 @@ void WinEDA_LibeditFrame::OnUpdateDeMorganConvert( wxUpdateUIEvent& event ) if( m_HToolBar == NULL ) return; - event.Enable( m_currentComponent != NULL - && m_currentComponent->HasConversion() ); - m_HToolBar->ToggleTool( event.GetId(), CurrentConvert > 1 ); + event.Enable( m_component != NULL + && m_component->HasConversion() ); + m_HToolBar->ToggleTool( event.GetId(), m_convert > 1 ); } @@ -445,26 +466,26 @@ void WinEDA_LibeditFrame::OnUpdateSelectAlias( wxUpdateUIEvent& event ) if( m_SelAliasBox == NULL ) return; - /* Using the typical event.Enable() call dosen't seem to work with wxGTK + /* Using the typical event.Enable() call doesn't seem to work with wxGTK * so use the pointer to alias combobox to directly enable or disable. */ - m_SelAliasBox->Enable( m_currentComponent != NULL - && !m_currentComponent->m_AliasList.IsEmpty() ); + m_SelAliasBox->Enable( m_component != NULL + && !m_component->m_AliasList.IsEmpty() ); } void WinEDA_LibeditFrame::OnSelectAlias( wxCommandEvent& event ) { if( m_SelAliasBox == NULL - || m_SelAliasBox->GetStringSelection().CmpNoCase( CurrentAliasName ) == 0 ) + || m_SelAliasBox->GetStringSelection().CmpNoCase( m_aliasName ) == 0 ) return; - LibItemToRepeat = NULL; + m_lastDrawItem = NULL; - if( m_SelAliasBox->GetStringSelection().CmpNoCase(m_currentComponent->GetName() ) == 0 ) - CurrentAliasName.Empty(); + if( m_SelAliasBox->GetStringSelection().CmpNoCase(m_component->GetName() ) == 0 ) + m_aliasName.Empty(); else - CurrentAliasName = m_SelAliasBox->GetStringSelection(); + m_aliasName = m_SelAliasBox->GetStringSelection(); DisplayCmpDoc(); DrawPanel->Refresh(); @@ -475,16 +496,56 @@ void WinEDA_LibeditFrame::OnSelectPart( wxCommandEvent& event ) { int i = event.GetSelection(); - if( ( i == wxNOT_FOUND ) || ( ( i + 1 ) == CurrentUnit ) ) + if( ( i == wxNOT_FOUND ) || ( ( i + 1 ) == m_unit ) ) return; - LibItemToRepeat = NULL; - CurrentUnit = i + 1; + m_lastDrawItem = NULL; + m_unit = i + 1; DrawPanel->Refresh(); DisplayCmpDoc(); } +void WinEDA_LibeditFrame::OnViewEntryDoc( wxCommandEvent& event ) +{ + if( m_component == NULL ) + return; + + wxString fileName; + + if( !m_aliasName.IsEmpty() ) + { + CMP_LIB_ENTRY* entry = + m_library->FindEntry( m_aliasName ); + + if( entry != NULL ) + fileName = entry->m_DocFile; + } + else + { + fileName = m_component->m_DocFile; + } + + if( !fileName.IsEmpty() ) + GetAssociatedDocument( this, fileName, + &wxGetApp().GetLibraryPathList() ); +} + + +void WinEDA_LibeditFrame::OnSelectBodyStyle( wxCommandEvent& event ) +{ + DrawPanel->UnManageCursor( 0, wxCURSOR_ARROW ); + + if( event.GetId() == ID_DE_MORGAN_NORMAL_BUTT ) + m_convert = 1; + else + m_convert = 2; + + m_lastDrawItem = NULL; + DrawPanel->Refresh(); +} + + void WinEDA_LibeditFrame::Process_Special_Functions( wxCommandEvent& event ) { int id = event.GetId(); @@ -538,56 +599,10 @@ void WinEDA_LibeditFrame::Process_Special_Functions( wxCommandEvent& event ) SelectActiveLibrary(); break; - case ID_LIBEDIT_SELECT_PART: - LibItemToRepeat = NULL; - if( LoadOneLibraryPart() ) - { - g_EditPinByPinIsOn = false; - GetScreen()->ClearUndoRedoList(); - } - DrawPanel->Refresh(); - break; - case ID_LIBEDIT_SAVE_CURRENT_PART: SaveOnePartInMemory(); break; - case ID_LIBEDIT_CHECK_PART: - if( m_currentComponent && TestPins( m_currentComponent ) == false ) - DisplayInfoMessage( this, _( " Pins Test OK!" ) ); - break; - - case ID_DE_MORGAN_NORMAL_BUTT: - LibItemToRepeat = NULL; - CurrentConvert = 1; - DrawPanel->Refresh(); - break; - - case ID_DE_MORGAN_CONVERT_BUTT: - LibItemToRepeat = NULL; - CurrentConvert = 2; - DrawPanel->Refresh(); - break; - - case ID_LIBEDIT_VIEW_DOC: - if( m_currentComponent ) - { - wxString docfilename; - if( !CurrentAliasName.IsEmpty() ) - { - CMP_LIB_ENTRY* entry = CurrentLib->FindEntry( CurrentAliasName ); - if( entry != NULL ) - docfilename = entry->m_DocFile; - } - else - docfilename = m_currentComponent->m_DocFile; - - if( !docfilename.IsEmpty() ) - GetAssociatedDocument( this, docfilename, - &wxGetApp().GetLibraryPathList() ); - } - break; - case ID_LIBEDIT_EDIT_PIN_BY_PIN: g_EditPinByPinIsOn = g_EditPinByPinIsOn ? false : true; break; @@ -597,13 +612,13 @@ void WinEDA_LibeditFrame::Process_Special_Functions( wxCommandEvent& event ) break; case ID_LIBEDIT_PIN_BUTT: - if( m_currentComponent ) + if( m_component ) { - SetToolID( id, wxCURSOR_PENCIL, _( "Add Pin" ) ); + SetToolID( id, wxCURSOR_PENCIL, _( "Add pin" ) ); } else { - SetToolID( id, wxCURSOR_ARROW, _( "Set Pin Options" ) ); + SetToolID( id, wxCURSOR_ARROW, _( "Set pin options" ) ); InstallPineditFrame( this, &dc, pos ); SetToolID( 0, wxCURSOR_ARROW, wxEmptyString ); } @@ -621,27 +636,27 @@ void WinEDA_LibeditFrame::Process_Special_Functions( wxCommandEvent& event ) break; case ID_LIBEDIT_BODY_TEXT_BUTT: - SetToolID( id, wxCURSOR_PENCIL, _( "Add Text" ) ); + SetToolID( id, wxCURSOR_PENCIL, _( "Add text" ) ); break; case ID_LIBEDIT_BODY_RECT_BUTT: - SetToolID( id, wxCURSOR_PENCIL, _( "Add Rectangle" ) ); + SetToolID( id, wxCURSOR_PENCIL, _( "Add rectangle" ) ); break; case ID_LIBEDIT_BODY_CIRCLE_BUTT: - SetToolID( id, wxCURSOR_PENCIL, _( "Add Circle" ) ); + SetToolID( id, wxCURSOR_PENCIL, _( "Add circle" ) ); break; case ID_LIBEDIT_BODY_ARC_BUTT: - SetToolID( id, wxCURSOR_PENCIL, _( "Add Arc" ) ); + SetToolID( id, wxCURSOR_PENCIL, _( "Add arc" ) ); break; case ID_LIBEDIT_BODY_LINE_BUTT: - SetToolID( id, wxCURSOR_PENCIL, _( "Add Line" ) ); + SetToolID( id, wxCURSOR_PENCIL, _( "Add line" ) ); break; case ID_LIBEDIT_ANCHOR_ITEM_BUTT: - SetToolID( id, wxCURSOR_HAND, _( "Anchor" ) ); + SetToolID( id, wxCURSOR_HAND, _( "Set anchor position" ) ); break; case ID_LIBEDIT_IMPORT_BODY_BUTT: @@ -658,29 +673,29 @@ void WinEDA_LibeditFrame::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_LIBEDIT_END_CREATE_ITEM: DrawPanel->MouseToCursorSchema(); - if( CurrentDrawItem ) + if( m_drawItem ) { EndDrawGraphicItem( &dc ); } break; case ID_POPUP_LIBEDIT_BODY_EDIT_ITEM: - if( CurrentDrawItem ) + if( m_drawItem ) { DrawPanel->CursorOff( &dc ); - switch( CurrentDrawItem->Type() ) + switch( m_drawItem->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 ); + EditGraphicSymbol( &dc, m_drawItem ); break; case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE: - EditSymbolText( &dc, CurrentDrawItem ); + EditSymbolText( &dc, m_drawItem ); break; default: @@ -693,7 +708,7 @@ void WinEDA_LibeditFrame::Process_Special_Functions( wxCommandEvent& event ) case ID_LIBEDIT_DELETE_ITEM_BUTT: - if( m_currentComponent == NULL ) + if( m_component == NULL ) { wxBell(); break; @@ -704,79 +719,78 @@ void WinEDA_LibeditFrame::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_LIBEDIT_DELETE_CURRENT_POLY_SEGMENT: // Delete the last created segment, while creating a polyline draw item - if( CurrentDrawItem == NULL ) + if( m_drawItem == NULL ) break; DrawPanel->MouseToCursorSchema(); DeleteDrawPoly( &dc ); break; case ID_POPUP_LIBEDIT_DELETE_ITEM: - if( CurrentDrawItem == NULL ) + if( m_drawItem == NULL ) break; DrawPanel->MouseToCursorSchema(); DrawPanel->CursorOff( &dc ); - SaveCopyInUndoList( m_currentComponent ); - if( CurrentDrawItem->Type() == COMPONENT_PIN_DRAW_TYPE ) + SaveCopyInUndoList( m_component ); + if( m_drawItem->Type() == COMPONENT_PIN_DRAW_TYPE ) { - DeletePin( &dc, m_currentComponent, (LibDrawPin*) CurrentDrawItem ); + DeletePin( &dc, m_component, (LibDrawPin*) m_drawItem ); } else { if( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur ) DrawPanel->ForceCloseManageCurseur( DrawPanel, &dc ); else - m_currentComponent->RemoveDrawItem( CurrentDrawItem, DrawPanel, - &dc ); + m_component->RemoveDrawItem( m_drawItem, DrawPanel, &dc ); } - CurrentDrawItem = NULL; + m_drawItem = NULL; GetScreen()->SetModify(); DrawPanel->CursorOn( &dc ); break; case ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST: - if( CurrentDrawItem == NULL ) + if( m_drawItem == NULL ) break; DrawPanel->MouseToCursorSchema(); - if( CurrentDrawItem->Type() == COMPONENT_PIN_DRAW_TYPE ) + if( m_drawItem->Type() == COMPONENT_PIN_DRAW_TYPE ) StartMovePin( &dc ); - else if( CurrentDrawItem->Type() == COMPONENT_FIELD_DRAW_TYPE ) - StartMoveField( &dc, (LibDrawField*) CurrentDrawItem ); + else if( m_drawItem->Type() == COMPONENT_FIELD_DRAW_TYPE ) + StartMoveField( &dc, (LibDrawField*) m_drawItem ); else StartMoveDrawSymbol( &dc ); break; case ID_POPUP_LIBEDIT_ROTATE_GRAPHIC_TEXT: - if( CurrentDrawItem == NULL ) + if( m_drawItem == NULL ) break; DrawPanel->CursorOff( &dc ); DrawPanel->MouseToCursorSchema(); - if( (CurrentDrawItem->m_Flags & IS_NEW) == 0 ) - SaveCopyInUndoList( m_currentComponent ); + if( (m_drawItem->m_Flags & IS_NEW) == 0 ) + SaveCopyInUndoList( m_component ); RotateSymbolText( &dc ); DrawPanel->CursorOn( &dc ); break; case ID_POPUP_LIBEDIT_FIELD_ROTATE_ITEM: - if( CurrentDrawItem == NULL ) + if( m_drawItem == NULL ) break; DrawPanel->CursorOff( &dc ); DrawPanel->MouseToCursorSchema(); - if( CurrentDrawItem->Type() == COMPONENT_FIELD_DRAW_TYPE ) + if( m_drawItem->Type() == COMPONENT_FIELD_DRAW_TYPE ) { - SaveCopyInUndoList( m_currentComponent ); - RotateField( &dc, (LibDrawField*) CurrentDrawItem ); + SaveCopyInUndoList( m_component ); + RotateField( &dc, (LibDrawField*) m_drawItem ); } DrawPanel->CursorOn( &dc ); break; case ID_POPUP_LIBEDIT_FIELD_EDIT_ITEM: - if( CurrentDrawItem == NULL ) + if( m_drawItem == NULL ) break; DrawPanel->CursorOff( &dc ); - if( CurrentDrawItem->Type() == COMPONENT_FIELD_DRAW_TYPE ) + if( m_drawItem->Type() == COMPONENT_FIELD_DRAW_TYPE ) { - EditField( &dc, (LibDrawField*) CurrentDrawItem ); + EditField( &dc, (LibDrawField*) m_drawItem ); } DrawPanel->MouseToCursorSchema(); DrawPanel->CursorOn( &dc ); @@ -785,11 +799,11 @@ void WinEDA_LibeditFrame::Process_Special_Functions( wxCommandEvent& event ) 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) ) + if( (m_drawItem == NULL ) + || (m_drawItem->Type() != COMPONENT_PIN_DRAW_TYPE) ) break; - SaveCopyInUndoList( m_currentComponent ); - GlobalSetPins( &dc, (LibDrawPin*) CurrentDrawItem, id ); + SaveCopyInUndoList( m_component ); + GlobalSetPins( &dc, (LibDrawPin*) m_drawItem, id ); DrawPanel->MouseToCursorSchema(); break; @@ -842,5 +856,5 @@ void WinEDA_LibeditFrame::Process_Special_Functions( wxCommandEvent& event ) DrawPanel->m_IgnoreMouseEvents = false; if( m_ID_current_state == 0 ) - LibItemToRepeat = NULL; + m_lastDrawItem = NULL; } diff --git a/eeschema/load_one_schematic_file.cpp b/eeschema/load_one_schematic_file.cpp index 477e7978ce..7d4e63a039 100644 --- a/eeschema/load_one_schematic_file.cpp +++ b/eeschema/load_one_schematic_file.cpp @@ -5,12 +5,13 @@ #include "fctsys.h" #include "confirm.h" #include "kicad_string.h" + #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "class_marker_sch.h" + /* in read_from_file_schematic_items_description.cpp */ SCH_ITEM* ReadTextDescr( FILE* aFile, wxString& aMsgDiag, char* aLine, int aBufsize, int* aLineNum, diff --git a/eeschema/locate.cpp b/eeschema/locate.cpp index 69be8e37b1..1299c0f4b3 100644 --- a/eeschema/locate.cpp +++ b/eeschema/locate.cpp @@ -5,16 +5,19 @@ #include "fctsys.h" #include "common.h" #include "program.h" -#include "libcmp.h" -#include "general.h" #include "trigo.h" #include "macros.h" -#include "class_marker_sch.h" +#include "libcmp.h" +#include "general.h" +#include "class_marker_sch.h" #include "protos.h" +#include "class_library.h" + /* Routines Locales */ -static bool DrawStructInBox(int x1, int y1, int x2, int y2, SCH_ITEM *DrawStruct); +static bool DrawStructInBox( int x1, int y1, int x2, int y2, + SCH_ITEM *DrawStruct ); static SCH_ITEM* LastSnappedStruct = NULL; static bool IsBox1InBox2( int StartX1, int StartY1, int EndX1, int EndY1, int StartX2, int StartY2, int EndX2, int EndY2 ); @@ -612,12 +615,12 @@ static bool IsBox1InBox2( int StartX1, int StartY1, int EndX1, int EndY1, /*********************************************************************************/ -LibEDA_BaseStruct* LocateDrawItem( SCH_SCREEN* Screen, - const wxPoint& aRefPoint, - LIB_COMPONENT* LibEntry, - int Unit, - int Convert, - int masque ) +LIB_DRAW_ITEM* LocateDrawItem( SCH_SCREEN* Screen, + const wxPoint& aRefPoint, + LIB_COMPONENT* LibEntry, + int Unit, + int Convert, + int masque ) /*********************************************************************************/ /* Locates a body item( not pins ) @@ -626,7 +629,7 @@ LibEDA_BaseStruct* LocateDrawItem( SCH_SCREEN* Screen, * remember the Y axis is from bottom to top in library entries for graphic items. */ { - LibEDA_BaseStruct* DrawItem; + LIB_DRAW_ITEM* DrawItem; if( LibEntry == NULL ) return NULL; @@ -717,7 +720,7 @@ LibDrawPin* LocatePinByNumber( const wxString& ePin_Number, * @return a pointer on the pin, or NULL if not found */ { - LibEDA_BaseStruct* DrawItem; + LIB_DRAW_ITEM* DrawItem; LIB_COMPONENT* Entry; LibDrawPin* Pin; int Unit, Convert; @@ -760,8 +763,8 @@ LibDrawPin* LocatePinByNumber( const wxString& ePin_Number, /*******************************************************************/ -LibEDA_BaseStruct* LocatePin( const wxPoint& RefPos, LIB_COMPONENT* Entry, - int Unit, int convert, SCH_COMPONENT* DrawLibItem ) +LIB_DRAW_ITEM* LocatePin( const wxPoint& RefPos, LIB_COMPONENT* Entry, + int Unit, int convert, SCH_COMPONENT* DrawLibItem ) /*******************************************************************/ /* Routine de localisation d'une PIN de la PartLib pointee par Entry @@ -779,7 +782,7 @@ LibEDA_BaseStruct* LocatePin( const wxPoint& RefPos, LIB_COMPONENT* Entry, return NULL; } - LibEDA_BaseStruct* DrawItem = Entry->m_Drawings; + LIB_DRAW_ITEM* DrawItem = Entry->m_Drawings; for( ; DrawItem != NULL; DrawItem = DrawItem->Next() ) { if( DrawItem->Type() == COMPONENT_PIN_DRAW_TYPE ) /* Pin Trouvee */ diff --git a/eeschema/menubar.cpp b/eeschema/menubar.cpp index f030579457..fa070e310b 100644 --- a/eeschema/menubar.cpp +++ b/eeschema/menubar.cpp @@ -9,10 +9,10 @@ #include "fctsys.h" #include "common.h" #include "appl_wxstruct.h" -#include "program.h" -#include "libcmp.h" -#include "general.h" #include "bitmaps.h" + +#include "program.h" +#include "general.h" #include "protos.h" #include "eeschema_id.h" #include "hotkeys.h" diff --git a/eeschema/netform.cpp b/eeschema/netform.cpp index fc2e2f29d6..a173563a52 100644 --- a/eeschema/netform.cpp +++ b/eeschema/netform.cpp @@ -8,13 +8,14 @@ #include "confirm.h" #include "kicad_string.h" #include "gestfich.h" -#include "program.h" -#include "libcmp.h" -#include "general.h" -#include "netlist.h" #include "appl_wxstruct.h" +#include "program.h" +#include "general.h" +#include "netlist.h" #include "protos.h" +#include "class_library.h" + /* Routines locales */ static void Write_GENERIC_NetList( WinEDA_SchematicFrame* frame, const wxString& FullFileName ); @@ -108,9 +109,9 @@ static SCH_COMPONENT* FindNextComponentAndCreatPinList( * Must be deallocated by the user */ { - SCH_COMPONENT* Component = NULL; - LIB_COMPONENT* Entry; - LibEDA_BaseStruct* DEntry; + SCH_COMPONENT* Component = NULL; + LIB_COMPONENT* Entry; + LIB_DRAW_ITEM* DEntry; s_SortedComponentPinList.clear(); for( ; DrawList != NULL; DrawList = DrawList->Next() ) @@ -767,7 +768,7 @@ static void FindAllsInstancesOfComponent( SCH_COMPONENT* Component_in, { EDA_BaseStruct* SchItem; SCH_COMPONENT* Component2; - LibEDA_BaseStruct* DEntry; + LIB_DRAW_ITEM* DEntry; DrawSheetPath* sheet; wxString str, Reference = Component_in->GetRef( Sheet_in ); diff --git a/eeschema/netlist.cpp b/eeschema/netlist.cpp index be07f0a0b2..6e06f4712a 100644 --- a/eeschema/netlist.cpp +++ b/eeschema/netlist.cpp @@ -4,15 +4,16 @@ #include "fctsys.h" #include "common.h" -#include "program.h" -#include "libcmp.h" -#include "general.h" +#include "program.h" +#include "general.h" #include "netlist.h" /* Definitions generales liees au calcul de netliste */ #include "protos.h" +#include "class_library.h" #include "algorithm" + // Buffer to build the list of items used in netlist and erc calculations NETLIST_OBJECT_LIST g_NetObjectslist; @@ -354,7 +355,7 @@ static void ListeObjetConnection( DrawSheetPath* sheetlist, NETLIST_OBJECT* new_item; SCH_COMPONENT* DrawLibItem; LIB_COMPONENT* Entry; - LibEDA_BaseStruct* DEntry; + LIB_DRAW_ITEM* DEntry; Hierarchical_PIN_Sheet_Struct* SheetLabel; DrawSheetPath list; diff --git a/eeschema/netlist.h b/eeschema/netlist.h index a5b308bae2..7ac07cf7c4 100644 --- a/eeschema/netlist.h +++ b/eeschema/netlist.h @@ -5,6 +5,10 @@ #ifndef _NETLIST_H_ #define _NETLIST_H_ + +#include "class_libentry.h" + + #define NETLIST_HEAD_STRING "EESchema Netlist Version 1.1" #define ISBUS 1 diff --git a/eeschema/netlist_control.cpp b/eeschema/netlist_control.cpp index 6ac48d65e1..40f8dc839f 100644 --- a/eeschema/netlist_control.cpp +++ b/eeschema/netlist_control.cpp @@ -17,13 +17,14 @@ #include "common.h" #include "confirm.h" #include "gestfich.h" + #include "program.h" -#include "libcmp.h" #include "general.h" #include "netlist.h" #include "protos.h" #include "netlist_control.h" + // ID for configuration: #define CUSTOM_NETLIST_TITLE wxT( "CustomNetlistTitle" ) #define CUSTOM_NETLIST_COMMAND wxT( "CustomNetlistCommand" ) diff --git a/eeschema/onleftclick.cpp b/eeschema/onleftclick.cpp index d328161f71..22249ac94f 100644 --- a/eeschema/onleftclick.cpp +++ b/eeschema/onleftclick.cpp @@ -9,12 +9,11 @@ #include "confirm.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "class_marker_sch.h" - #include "protos.h" + static wxArrayString s_CmpNameList; static wxArrayString s_PowerNameList; diff --git a/eeschema/onrightclick.cpp b/eeschema/onrightclick.cpp index 1452d12e9c..c935d87b04 100644 --- a/eeschema/onrightclick.cpp +++ b/eeschema/onrightclick.cpp @@ -8,16 +8,15 @@ #include "eeschema_id.h" #include "class_drawpanel.h" #include "confirm.h" +#include "bitmaps.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "class_marker_sch.h" - #include "protos.h" #include "hotkeys.h" +#include "class_library.h" -#include "bitmaps.h" /* functions to add commands and submenus depending on the item */ static void AddMenusForBlock( wxMenu* PopMenu, WinEDA_SchematicFrame* frame ); diff --git a/eeschema/operations_on_items_lists.cpp b/eeschema/operations_on_items_lists.cpp index e7539f7762..97367be273 100644 --- a/eeschema/operations_on_items_lists.cpp +++ b/eeschema/operations_on_items_lists.cpp @@ -8,18 +8,20 @@ #include "appl_wxstruct.h" #include "common.h" #include "class_drawpanel.h" + #include "program.h" -#include "libcmp.h" #include "general.h" #include "class_marker_sch.h" - #include "protos.h" + /* Exported Functions */ -void MoveItemsInList( PICKED_ITEMS_LIST& aItemsList, const wxPoint aMoveVector ); -void MirrorListOfItems( PICKED_ITEMS_LIST& aItemsList, wxPoint& aMirrorPoint ); -void DeleteItemsInList( WinEDA_DrawPanel* panel, PICKED_ITEMS_LIST& aItemsList ); -void DuplicateItemsInList( SCH_SCREEN* screen, PICKED_ITEMS_LIST& aItemsList, const wxPoint aMoveVector ); +void MoveItemsInList( PICKED_ITEMS_LIST& aItemsList, const wxPoint aMoveVector ); +void MirrorListOfItems( PICKED_ITEMS_LIST& aItemsList, wxPoint& aMirrorPoint ); +void DeleteItemsInList( WinEDA_DrawPanel* panel, + PICKED_ITEMS_LIST& aItemsList ); +void DuplicateItemsInList( SCH_SCREEN* screen, PICKED_ITEMS_LIST& aItemsList, + const wxPoint aMoveVector ); /***************************************************************************** diff --git a/eeschema/pinedit-dialog.cpp b/eeschema/pinedit-dialog.cpp index 036145673d..fb2766d9b9 100644 --- a/eeschema/pinedit-dialog.cpp +++ b/eeschema/pinedit-dialog.cpp @@ -26,10 +26,10 @@ void InstallPineditFrame( WinEDA_LibeditFrame* parent, wxDC* DC, wxPoint MousePos = parent->GetScreen()->m_Curseur; int accept = TRUE; - if ( ( CurrentDrawItem == NULL ) - || ( CurrentDrawItem->Type() == COMPONENT_PIN_DRAW_TYPE ) ) + if ( ( parent->GetDrawItem() == NULL ) + || ( parent->GetDrawItem()->Type() == COMPONENT_PIN_DRAW_TYPE ) ) { - LibDrawPin * Pin = (LibDrawPin *) CurrentDrawItem; + LibDrawPin * Pin = (LibDrawPin *) parent->GetDrawItem(); WinEDA_PinPropertiesFrame dlg( parent ); accept = dlg.ShowModal(); @@ -81,7 +81,7 @@ WinEDA_PinPropertiesFrame::WinEDA_PinPropertiesFrame( ) WinEDA_PinPropertiesFrame::WinEDA_PinPropertiesFrame( WinEDA_LibeditFrame* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) { -LibDrawPin * CurrentPin = (LibDrawPin *) CurrentDrawItem; + LibDrawPin * CurrentPin = (LibDrawPin *) parent->GetDrawItem(); m_Parent = parent; if ( CurrentPin ) @@ -326,7 +326,7 @@ void WinEDA_PinPropertiesFrame::SetValuesInDialog(void) /*******************************************************/ { wxString number; - LibDrawPin * CurrentPin = (LibDrawPin *) CurrentDrawItem; + LibDrawPin * CurrentPin = (LibDrawPin *) m_Parent->GetDrawItem(); wxString msg; int tmp, ii; diff --git a/eeschema/pinedit.cpp b/eeschema/pinedit.cpp index a9d60c66d4..0b447c1bb6 100644 --- a/eeschema/pinedit.cpp +++ b/eeschema/pinedit.cpp @@ -7,6 +7,7 @@ #include "program.h" #include "libeditfrm.h" #include "eeschema_id.h" +#include "class_libentry.h" #include "pinedit-dialog.h" @@ -33,7 +34,8 @@ int CodeShape[NBSHAPES] = /* Routines locales */ -static void CreateImagePins( LibDrawPin* Pin ); +static void CreateImagePins( LibDrawPin* Pin, int unit, int convert, + bool asDeMorgan ); static void AbortPinMove( WinEDA_DrawPanel* Panel, wxDC* DC ); static void DrawMovePin( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); @@ -82,50 +84,52 @@ void WinEDA_PinPropertiesFrame::PinPropertiesAccept( wxCommandEvent& event ) LastPinNumSize = ReturnValueFromString( g_UnitMetric, msg, m_Parent->m_InternalUnits ); - if( CurrentDrawItem ) // Set Pin Name & Num - { - if( !(CurrentDrawItem->m_Flags & IS_NEW) ) // if IS_NEW, copy for undo is done before place - m_Parent->SaveCopyInUndoList( CurrentDrawItem->GetParent() ); + LIB_DRAW_ITEM* item = m_Parent->GetDrawItem(); - SetPinName( m_PinNameCtrl->GetValue(), LastPinNameSize ); - msg = m_PinNumCtrl->GetValue(); - if( msg.IsEmpty() ) - msg = wxT( "~" ); - SetPinNum( msg, LastPinNumSize ); - NewSizePin( LastPinSize ); - SetPinShape( LastPinShape ); - SetPinType( LastPinType ); - SetPinOrient( LastPinOrient ); - SetAttributsPin( true, true, true ); // Set all attributes (visibility, common to units and common to convert options) - CurrentDrawItem->DisplayInfo( m_Parent ); - } + if( item == NULL ) + return; + + if( !( item->m_Flags & IS_NEW ) ) // if IS_NEW, copy for undo is done before place + m_Parent->SaveCopyInUndoList( item->GetParent() ); + + SetPinName( m_PinNameCtrl->GetValue(), LastPinNameSize ); + msg = m_PinNumCtrl->GetValue(); + + if( msg.IsEmpty() ) + msg = wxT( "~" ); + + SetPinNum( msg, LastPinNumSize ); + NewSizePin( LastPinSize ); + SetPinShape( LastPinShape ); + SetPinType( LastPinType ); + SetPinOrient( LastPinOrient ); + SetAttributsPin( true, true, true ); // Set all attributes (visibility, common to units and common to convert options) + item->DisplayInfo( m_Parent ); m_Parent->DrawPanel->Refresh(); } -/*********************************************/ -void WinEDA_LibeditFrame::InitEditOnePin() -/*********************************************/ - -/* Called when installing the edit pin dialog frame +/* + * Called when installing the edit pin dialog frame * Set pins flags (.m_Flags pins member) to ensure a correctins edition: - * If 2 or more pins are on the same location (and the same orientation) they are all moved or resized. + * If 2 or more pins are on the same location (and the same orientation) they + * are all moved or resized. * This is usefull for components which have more than one part per package * In this case all parts can be edited at once. - * Note: if the option "Edit Pin per Pin" (tool of the main toolbar) is activated, only the current part is edited + * Note: if the option "Edit Pin per Pin" (tool of the main toolbar) is + * activated, only the current part is edited. */ +void WinEDA_LibeditFrame::InitEditOnePin() { LibDrawPin* Pin; - LibDrawPin* CurrentPin = (LibDrawPin*) CurrentDrawItem; + LibDrawPin* CurrentPin = (LibDrawPin*) m_drawItem; - if( m_currentComponent == NULL ) - return; - if( CurrentPin == NULL ) + if( m_component == NULL || CurrentPin == NULL ) return; /* Marquage des pins a traiter,Si edition d'une pin non deja selectionnee */ - Pin = (LibDrawPin*) m_currentComponent->m_Drawings; + Pin = (LibDrawPin*) m_component->m_Drawings; for( ; Pin != NULL; Pin = Pin->Next() ) { if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE ) @@ -153,20 +157,25 @@ static void AbortPinMove( WinEDA_DrawPanel* Panel, wxDC* DC ) /* Used to abort the move pin command. */ { - LibDrawPin* CurrentPin = (LibDrawPin*) CurrentDrawItem; + WinEDA_LibeditFrame* parent = (WinEDA_LibeditFrame*) Panel->GetParent(); + + if( parent == NULL ) + return; + + LibDrawPin* CurrentPin = (LibDrawPin*) parent->GetDrawItem(); if( CurrentPin && ( CurrentPin->m_Flags & IS_NEW ) ) CurrentPin->GetParent()->RemoveDrawItem( CurrentPin, Panel, DC ); /* clear edit flags */ - LibEDA_BaseStruct* item = CurrentPin->GetParent()->m_Drawings; + LIB_DRAW_ITEM* item = CurrentPin->GetParent()->m_Drawings; for( ; item != NULL; item = item->Next() ) item->m_Flags = 0; Panel->ManageCurseur = NULL; Panel->ForceCloseManageCurseur = NULL; - CurrentDrawItem = NULL; - LibItemToRepeat = NULL; + parent->SetDrawItem( NULL ); + parent->SetLastDrawItem( NULL ); Panel->Refresh( true ); } @@ -177,7 +186,7 @@ void WinEDA_LibeditFrame::PlacePin( wxDC* DC ) /* Routine de fin de deplacement de la pin selectionnee */ { LibDrawPin* Pin; - LibDrawPin* CurrentPin = (LibDrawPin*) CurrentDrawItem; + LibDrawPin* CurrentPin = (LibDrawPin*) m_drawItem; bool ask_for_pin = true; wxPoint newpos; bool status; @@ -188,7 +197,7 @@ void WinEDA_LibeditFrame::PlacePin( wxDC* DC ) newpos.x = GetScreen()->m_Curseur.x; newpos.y = -GetScreen()->m_Curseur.y; - Pin = (LibDrawPin*) m_currentComponent->m_Drawings; + Pin = (LibDrawPin*) m_component->m_Drawings; // Tst for an other pin in same new position: for( ; Pin != NULL; Pin = Pin->Next() ) @@ -224,12 +233,13 @@ void WinEDA_LibeditFrame::PlacePin( wxDC* DC ) LastPinOrient = CurrentPin->m_Orient; LastPinType = CurrentPin->m_PinType; LastPinShape = CurrentPin->m_PinShape; - CreateImagePins( CurrentPin ); - LibItemToRepeat = CurrentPin; + CreateImagePins( CurrentPin, m_unit, m_convert, + m_showDeMorgan ); + m_lastDrawItem = CurrentPin; } /* Put linked pins in new position, and clear flags */ - Pin = (LibDrawPin*) m_currentComponent->m_Drawings; + Pin = (LibDrawPin*) m_component->m_Drawings; for( ; Pin != NULL; Pin = Pin->Next() ) { if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE ) @@ -246,7 +256,7 @@ void WinEDA_LibeditFrame::PlacePin( wxDC* DC ) &showPinText, DefaultTransformMatrix ); DrawPanel->CursorOn( DC ); - CurrentDrawItem = NULL; + m_drawItem = NULL; }; /***********************************************************/ @@ -254,7 +264,7 @@ void WinEDA_PinPropertiesFrame::SetPinOrient( int neworient ) /***********************************************************/ /* Routine de Rotation de la pin courante*/ { - LibDrawPin* CurrentPin = (LibDrawPin*) CurrentDrawItem; + LibDrawPin* CurrentPin = (LibDrawPin*) m_Parent->GetDrawItem(); LibDrawPin* Pin, * RefPin = CurrentPin; if( CurrentPin == NULL || CurrentPin->GetParent() == NULL ) @@ -289,11 +299,11 @@ void WinEDA_LibeditFrame::StartMovePin( wxDC* DC ) */ { LibDrawPin* Pin; - LibDrawPin* CurrentPin = (LibDrawPin*) CurrentDrawItem; + LibDrawPin* CurrentPin = (LibDrawPin*) m_drawItem; wxPoint startPos; /* Marquage des pins a traiter */ - Pin = (LibDrawPin*) m_currentComponent->m_Drawings; + Pin = (LibDrawPin*) m_component->m_Drawings; for( ; Pin != NULL; Pin = Pin->Next() ) { Pin->m_Flags = 0; @@ -330,7 +340,12 @@ void WinEDA_LibeditFrame::StartMovePin( wxDC* DC ) /******************************************************************************/ static void DrawMovePin( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) { - LibDrawPin* CurrentPin = (LibDrawPin*) CurrentDrawItem; + WinEDA_LibeditFrame* parent = (WinEDA_LibeditFrame*) panel->GetParent(); + + if( parent == NULL ) + return; + + LibDrawPin* CurrentPin = (LibDrawPin*) parent->GetDrawItem(); wxPoint pinpos = CurrentPin->m_Pos; bool showPinText = true; @@ -367,7 +382,7 @@ void WinEDA_PinPropertiesFrame::SetPinShape( int newshape ) */ { LibDrawPin* Pin; - LibDrawPin* CurrentPin = (LibDrawPin*) CurrentDrawItem; + LibDrawPin* CurrentPin = (LibDrawPin*) m_Parent->GetDrawItem(); if( CurrentPin ) { @@ -400,7 +415,7 @@ void WinEDA_PinPropertiesFrame::SetPinType( int newtype ) */ { LibDrawPin* Pin; - LibDrawPin* CurrentPin = (LibDrawPin*) CurrentDrawItem; + LibDrawPin* CurrentPin = (LibDrawPin*) m_Parent->GetDrawItem(); if( CurrentPin == NULL || CurrentPin->GetParent() == NULL ) return; @@ -430,7 +445,7 @@ void WinEDA_PinPropertiesFrame::SetPinName( const wxString& newname, int newsize */ { LibDrawPin* Pin; - LibDrawPin* CurrentPin = (LibDrawPin*) CurrentDrawItem; + LibDrawPin* CurrentPin = (LibDrawPin*) m_Parent->GetDrawItem(); wxString buf; if( CurrentPin == NULL || CurrentPin->GetParent() == NULL ) @@ -473,7 +488,7 @@ void WinEDA_PinPropertiesFrame::SetPinNum( const wxString& newnum, int newsize ) */ { LibDrawPin* Pin; - LibDrawPin* CurrentPin = (LibDrawPin*) CurrentDrawItem; + LibDrawPin* CurrentPin = (LibDrawPin*) m_Parent->GetDrawItem(); wxString buf; buf = newnum; @@ -517,14 +532,14 @@ void WinEDA_LibeditFrame::DeletePin( wxDC* DC, * Sinon seule la pin de l'unite en convert courante sera effacee */ { - LibEDA_BaseStruct* DrawItem; - wxPoint PinPos; + LIB_DRAW_ITEM* DrawItem; + wxPoint PinPos; if( LibEntry == NULL || Pin == NULL ) return; PinPos = Pin->m_Pos; - LibEntry->RemoveDrawItem( (LibEDA_BaseStruct*) Pin, DrawPanel, DC ); + LibEntry->RemoveDrawItem( (LIB_DRAW_ITEM*) Pin, DrawPanel, DC ); /* Effacement des autres pins de meme coordonnees */ if( g_EditPinByPinIsOn == false ) @@ -541,7 +556,7 @@ void WinEDA_LibeditFrame::DeletePin( wxDC* DC, DrawItem = DrawItem->Next(); if( Pin->m_Pos != PinPos ) continue; - LibEntry->RemoveDrawItem( (LibEDA_BaseStruct*) Pin ); + LibEntry->RemoveDrawItem( (LIB_DRAW_ITEM*) Pin ); } } GetScreen()->SetModify(); @@ -553,26 +568,26 @@ void WinEDA_LibeditFrame::CreatePin( wxDC* DC ) /*********************************************/ /* Creation d'une nouvelle pin */ { - LibEDA_BaseStruct* DrawItem; - LibDrawPin* CurrentPin; - bool showPinText = true; + LIB_DRAW_ITEM* DrawItem; + LibDrawPin* CurrentPin; + bool showPinText = true; - if( m_currentComponent == NULL ) + if( m_component == NULL ) return; /* Effacement des flags */ - DrawItem = m_currentComponent->m_Drawings; + DrawItem = m_component->m_Drawings; for( ; DrawItem != NULL; DrawItem = DrawItem->Next() ) DrawItem->m_Flags = 0; - CurrentPin = new LibDrawPin(m_currentComponent); + CurrentPin = new LibDrawPin(m_component); - CurrentDrawItem = CurrentPin; + m_drawItem = CurrentPin; if( CurrentPin == NULL ) return; CurrentPin->m_Flags = IS_NEW; - CurrentPin->m_Unit = CurrentUnit; - CurrentPin->m_Convert = CurrentConvert; + CurrentPin->m_Unit = m_unit; + CurrentPin->m_Convert = m_convert; /* Marquage des pins a traiter */ if( g_EditPinByPinIsOn == false ) @@ -589,19 +604,19 @@ void WinEDA_LibeditFrame::CreatePin( wxDC* DC ) if( LastPinCommonConvert ) CurrentPin->m_Convert = 0; else - CurrentPin->m_Convert = CurrentConvert; + CurrentPin->m_Convert = m_convert; if( LastPinCommonUnit ) CurrentPin->m_Unit = 0; else - CurrentPin->m_Unit = CurrentUnit; + CurrentPin->m_Unit = m_unit; if( LastPinNoDraw ) CurrentPin->m_Attributs |= PINNOTDRAW; else CurrentPin->m_Attributs &= ~PINNOTDRAW; - CurrentPin->SetNext( m_currentComponent->m_Drawings ); - m_currentComponent->m_Drawings = CurrentPin; - m_currentComponent->SortDrawItems(); + CurrentPin->SetNext( m_component->m_Drawings ); + m_component->m_Drawings = CurrentPin; + m_component->SortDrawItems(); if( DC ) CurrentPin->Draw( DrawPanel, DC, wxPoint( 0, 0 ), -1, g_XorMode, @@ -641,8 +656,8 @@ void WinEDA_PinPropertiesFrame::SetAttributsPin( bool draw, * */ { - LibEDA_BaseStruct* DrawItem; - LibDrawPin* Pin, * CurrentPin = (LibDrawPin*) CurrentDrawItem; + LIB_DRAW_ITEM* DrawItem; + LibDrawPin* Pin, * CurrentPin = (LibDrawPin*) m_Parent->GetDrawItem(); if( CurrentPin == NULL ) return; @@ -654,7 +669,7 @@ void WinEDA_PinPropertiesFrame::SetAttributsPin( bool draw, if( LastPinCommonUnit ) CurrentPin->m_Unit = 0; else - CurrentPin->m_Unit = CurrentUnit; + CurrentPin->m_Unit = m_Parent->GetUnit(); Pin = (LibDrawPin*) CurrentPin->GetParent()->m_Drawings; @@ -679,7 +694,7 @@ void WinEDA_PinPropertiesFrame::SetAttributsPin( bool draw, if( Pin->m_Orient != CurrentPin->m_Orient ) continue; - CurrentPin->GetParent()->RemoveDrawItem( (LibEDA_BaseStruct*) Pin ); + CurrentPin->GetParent()->RemoveDrawItem( (LIB_DRAW_ITEM*) Pin ); } } } // end if unit @@ -689,7 +704,7 @@ void WinEDA_PinPropertiesFrame::SetAttributsPin( bool draw, if( LastPinCommonConvert ) CurrentPin->m_Convert = 0; else - CurrentPin->m_Convert = CurrentConvert; + CurrentPin->m_Convert = m_Parent->GetConvert(); if( CurrentPin->m_Convert == 0 ) /* Effacement des pins redondantes */ { @@ -711,7 +726,7 @@ void WinEDA_PinPropertiesFrame::SetAttributsPin( bool draw, if( Pin->m_Orient != CurrentPin->m_Orient ) continue; - CurrentPin->GetParent()->RemoveDrawItem( (LibEDA_BaseStruct*) Pin ); + CurrentPin->GetParent()->RemoveDrawItem( (LIB_DRAW_ITEM*) Pin ); } } } // end if convert @@ -747,7 +762,7 @@ void WinEDA_PinPropertiesFrame::NewSizePin( int newsize ) * */ { - LibDrawPin* RefPin, * Pin = (LibDrawPin*) CurrentDrawItem; + LibDrawPin* RefPin, * Pin = (LibDrawPin*) m_Parent->GetDrawItem(); if( Pin == NULL || Pin->GetParent() == NULL ) return; @@ -778,13 +793,8 @@ void WinEDA_PinPropertiesFrame::NewSizePin( int newsize ) } -/********************************************/ -static void CreateImagePins( LibDrawPin* Pin ) -/********************************************/ - -/* Creation des autres pins pour les autres unites et pour convert, apres - * creation d'une pin - */ +static void CreateImagePins( LibDrawPin* Pin, int unit, int convert, + bool asDeMorgan ) { int ii; LibDrawPin* NewPin; @@ -794,7 +804,7 @@ static void CreateImagePins( LibDrawPin* Pin ) if( g_EditPinByPinIsOn ) return; - if( g_AsDeMorgan && ( Pin->m_Convert != 0 ) ) + if( asDeMorgan && ( Pin->m_Convert != 0 ) ) CreateConv = true; /* Creation de la pin " convert " pour la part courante */ @@ -811,12 +821,12 @@ static void CreateImagePins( LibDrawPin* Pin ) for( ii = 1; ii <= Pin->GetParent()->m_UnitCount; ii++ ) { - if( ii == CurrentUnit || Pin->m_Unit == 0 ) + if( ii == unit || Pin->m_Unit == 0 ) continue; /* Pin commune a toutes les unites */ /* Creation pour la representation "normale" */ NewPin = (LibDrawPin*) Pin->GenCopy(); - if( CurrentConvert != 0 ) + if( convert != 0 ) NewPin->m_Convert = 1; NewPin->m_Unit = ii; NewPin->SetNext( Pin->GetParent()->m_Drawings ); @@ -852,19 +862,19 @@ void WinEDA_LibeditFrame::GlobalSetPins( wxDC* DC, bool selected = ( MasterPin->m_Selected & IS_SELECTED ) != 0; bool showPinText = true; - if( ( m_currentComponent == NULL ) || ( MasterPin == NULL ) ) + if( ( m_component == NULL ) || ( MasterPin == NULL ) ) return; if( MasterPin->Type() != COMPONENT_PIN_DRAW_TYPE ) return; GetScreen()->SetModify(); - Pin = (LibDrawPin*) m_currentComponent->m_Drawings; + Pin = (LibDrawPin*) m_component->m_Drawings; for( ; Pin != NULL; Pin = Pin->Next() ) { if( Pin->Type() != COMPONENT_PIN_DRAW_TYPE ) continue; - if( ( Pin->m_Convert ) && ( Pin->m_Convert != CurrentConvert ) ) + if( ( Pin->m_Convert ) && ( Pin->m_Convert != m_convert ) ) continue; // Is it the "selected mode" ? @@ -904,13 +914,13 @@ void WinEDA_LibeditFrame::RepeatPinItem( wxDC* DC, LibDrawPin* SourcePin ) wxString msg; int ox = 0, oy = 0; - if( m_currentComponent == NULL || SourcePin == NULL + if( m_component == NULL || SourcePin == NULL || SourcePin->Type() != COMPONENT_PIN_DRAW_TYPE ) return; Pin = (LibDrawPin*)SourcePin->GenCopy(); - Pin->SetNext( m_currentComponent->m_Drawings ); - m_currentComponent->m_Drawings = Pin; + Pin->SetNext( m_component->m_Drawings ); + m_component->m_Drawings = Pin; Pin->m_Flags = IS_NEW; Pin->m_Pos.x += g_RepeatStep.x; @@ -924,7 +934,7 @@ void WinEDA_LibeditFrame::RepeatPinItem( wxDC* DC, LibDrawPin* SourcePin ) IncrementLabelMember( msg ); Pin->SetPinNumFromString( msg ); - CurrentDrawItem = Pin; + m_drawItem = Pin; /* Marquage des pins a traiter */ if( g_EditPinByPinIsOn == false ) @@ -954,22 +964,18 @@ int sort_by_pin_number( const void* ref, const void* tst ) } -/***************************************************************/ -bool WinEDA_LibeditFrame::TestPins( LIB_COMPONENT* LibEntry ) -/***************************************************************/ - -// Test des pins ( duplicates...) +void WinEDA_LibeditFrame::OnCheckComponent( wxCommandEvent& event ) { int nb_pins, ii, error; LibDrawPin* Pin; LibDrawPin** PinList; wxString msg; - if( m_currentComponent == NULL ) - return false; + if( m_component == NULL ) + return; // Construction de la liste des pins: - Pin = (LibDrawPin*) m_currentComponent->m_Drawings; + Pin = (LibDrawPin*) m_component->m_Drawings; for( nb_pins = 0; Pin != NULL; Pin = Pin->Next() ) { if( Pin->Type() == COMPONENT_PIN_DRAW_TYPE ) @@ -977,7 +983,7 @@ bool WinEDA_LibeditFrame::TestPins( LIB_COMPONENT* LibEntry ) } PinList = (LibDrawPin**) MyZMalloc( (nb_pins + 1) * sizeof(LibDrawPin*) ); - Pin = (LibDrawPin*) m_currentComponent->m_Drawings; + Pin = (LibDrawPin*) m_component->m_Drawings; for( ii = 0; Pin != NULL; Pin = Pin->Next() ) { if( Pin->Type() == COMPONENT_PIN_DRAW_TYPE ) @@ -995,39 +1001,42 @@ bool WinEDA_LibeditFrame::TestPins( LIB_COMPONENT* LibEntry ) LibDrawPin* curr_pin = PinList[ii]; Pin = PinList[ii - 1]; - if( Pin->m_PinNum != curr_pin->m_PinNum ) - continue; - - if( Pin->m_Convert != curr_pin->m_Convert ) - continue; - - if( Pin->m_Unit != curr_pin->m_Unit ) + if( Pin->m_PinNum != curr_pin->m_PinNum + || Pin->m_Convert != curr_pin->m_Convert + || Pin->m_Unit != curr_pin->m_Unit ) continue; error++; curr_pin->ReturnPinStringNum( StringPinNum ); - msg.Printf( _( "Duplicate Pin %4.4s (Pin %s loc %d, %d, and Pin %s loc %d, %d)" ), - StringPinNum.GetData(), curr_pin->m_PinName.GetData(), + msg.Printf( _( "Duplicate pin %s at location (%d, %d) conflicts \ +with pin %s at location (%d, %d)" ), + (const wxChar*)StringPinNum, + (const wxChar*)curr_pin->m_PinName, curr_pin->m_Pos.x, -curr_pin->m_Pos.y, - Pin->m_PinName.GetData(), Pin->m_Pos.x, -Pin->m_Pos.y ); + (const wxChar*)Pin->m_PinName, + Pin->m_Pos.x, -Pin->m_Pos.y ); - if( m_currentComponent->m_UnitCount > 1 ) + if( m_component->m_UnitCount > 1 ) { - aux_msg.Printf( _( " Part %d" ), curr_pin->m_Unit ); + aux_msg.Printf( _( " in part %c" ), 'A' + curr_pin->m_Unit ); msg += aux_msg; } - if( g_AsDeMorgan ) + if( m_showDeMorgan ) { if( curr_pin->m_Convert ) - msg += _( " Convert" ); + msg += _( " of converion" ); else - msg += _( " Normal" ); + msg += _( " of normal" ); } + msg += wxT( "." ); + DisplayError( this, msg ); } free( PinList ); - return error ? true : false; + + if( error == 0 ) + DisplayInfoMessage( this, _( "No duplicate pins were found." ) ); } diff --git a/eeschema/plot.cpp b/eeschema/plot.cpp index 400385f166..96bb7424e4 100644 --- a/eeschema/plot.cpp +++ b/eeschema/plot.cpp @@ -11,9 +11,10 @@ #include "trigo.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" +#include "class_library.h" + /* Local Variables : */ static void Plot_Hierarchical_PIN_Sheet( PLOTTER* plotter, @@ -64,7 +65,7 @@ static void PlotLibPart( PLOTTER* plotter, SCH_COMPONENT* DrawLibItem ) Multi = DrawLibItem->m_Multi; convert = DrawLibItem->m_Convert; - for( LibEDA_BaseStruct* DEntry = Entry->m_Drawings; + for( LIB_DRAW_ITEM* DEntry = Entry->m_Drawings; DEntry != NULL; DEntry = DEntry->Next() ) { /* Elimination des elements non relatifs a l'unite */ diff --git a/eeschema/plotdxf.cpp b/eeschema/plotdxf.cpp index dad5f70997..b3bd1ee476 100644 --- a/eeschema/plotdxf.cpp +++ b/eeschema/plotdxf.cpp @@ -19,14 +19,15 @@ #include "fctsys.h" #include "gr_basic.h" #include "common.h" -#include "confirm.h" -#include "program.h" -#include "libcmp.h" -#include "general.h" -#include "worksheet.h" #include "plot_common.h" +#include "confirm.h" +#include "worksheet.h" + +#include "program.h" +#include "general.h" #include "protos.h" + /* Variables locales : */ static bool Plot_Sheet_Ref = TRUE; diff --git a/eeschema/plothpgl.cpp b/eeschema/plothpgl.cpp index ccba36ea46..a6ee1d62eb 100644 --- a/eeschema/plothpgl.cpp +++ b/eeschema/plothpgl.cpp @@ -23,14 +23,15 @@ #include "gr_basic.h" #include "common.h" #include "confirm.h" -#include "program.h" -#include "libcmp.h" -#include "general.h" -#include "worksheet.h" #include "plot_common.h" +#include "worksheet.h" + +#include "program.h" +#include "general.h" #include "protos.h" #include "plothpgl.h" + ////@begin XPM images ////@end XPM images diff --git a/eeschema/plotps.cpp b/eeschema/plotps.cpp index 782863a714..64e78a8e72 100644 --- a/eeschema/plotps.cpp +++ b/eeschema/plotps.cpp @@ -20,11 +20,11 @@ #include "gr_basic.h" #include "common.h" #include "confirm.h" -#include "program.h" -#include "libcmp.h" -#include "general.h" #include "worksheet.h" #include "plot_common.h" + +#include "program.h" +#include "general.h" #include "protos.h" enum PageFormatReq { diff --git a/eeschema/protos.h b/eeschema/protos.h index 15e42284f6..b4bade6e79 100644 --- a/eeschema/protos.h +++ b/eeschema/protos.h @@ -2,11 +2,30 @@ /* prototypage des fonctions de EESchema */ /*****************************************/ -LibEDA_BaseStruct* LocatePin( const wxPoint& RefPos, - LIB_COMPONENT* Entry, - int Unit, - int Convert, - SCH_COMPONENT* DrawItem = NULL ); +#ifndef __PROTOS_H__ +#define __PROTOS_H__ + + +class EDA_BaseStruct; +class WinEDA_DrawPanel; +class WinEDA_SchematicFrame; +class LIB_COMPONENT; +class LIB_DRAW_ITEM; +class SCH_COMPONENT; +class BASE_SCREEN; +class SCH_SCREEN; +class SCH_ITEM; +class Hierarchical_PIN_Sheet_Struct; +class PLOTTER; +class DrawSheetStruct; +class LibDrawPin; + + +LIB_DRAW_ITEM* LocatePin( const wxPoint& RefPos, + LIB_COMPONENT* Entry, + int Unit, + int Convert, + SCH_COMPONENT* DrawItem = NULL ); /* Routine de localisation d'une PIN de la PartLib pointee par Entry */ @@ -139,12 +158,12 @@ SCH_ITEM* PickStruct( const wxPoint& refpos, int SearchMask ); -LibEDA_BaseStruct* LocateDrawItem( SCH_SCREEN* Screen, - const wxPoint& refpoint, - LIB_COMPONENT* LibEntry, - int Unit, - int Convert, - int masque ); +LIB_DRAW_ITEM* LocateDrawItem( SCH_SCREEN* Screen, + const wxPoint& refpoint, + LIB_COMPONENT* LibEntry, + int Unit, + int Convert, + int masque ); Hierarchical_PIN_Sheet_Struct* LocateSheetLabel( DrawSheetStruct* Sheet, const wxPoint& pos ); @@ -198,17 +217,6 @@ int CountCmpNumber(); bool Read_Hotkey_Config( WinEDA_DrawFrame* frame, bool verbose ); -/**************/ -/* SAVELIB.CPP */ -/**************/ - -LIB_COMPONENT* CopyLibEntryStruct( LIB_COMPONENT* OldEntry ); - -/* Routine de copie d'une partlib - * Parametres d'entree: pointeur sur la structure de depart - * Parametres de sortie: pointeur sur la structure creee */ - - /**************/ /* NETLIST.CPP */ /**************/ @@ -352,3 +360,5 @@ void DisplayOptionFrame( WinEDA_SchematicFrame* parent, /* CONTROLE.CPP */ /****************/ void RemoteCommand( const char* cmdline ); + +#endif /* __PROTOS_H__ */ diff --git a/eeschema/read_from_file_schematic_items_descriptions.cpp b/eeschema/read_from_file_schematic_items_descriptions.cpp index 6d73b297ce..a04add7a1e 100644 --- a/eeschema/read_from_file_schematic_items_descriptions.cpp +++ b/eeschema/read_from_file_schematic_items_descriptions.cpp @@ -6,11 +6,10 @@ #include "common.h" #include "confirm.h" #include "kicad_string.h" -#include "program.h" -#include "libcmp.h" -#include "general.h" #include "drawtxt.h" +#include "program.h" +#include "general.h" #include "protos.h" diff --git a/eeschema/save_schemas.cpp b/eeschema/save_schemas.cpp index 13674db03e..e6455b86f6 100644 --- a/eeschema/save_schemas.cpp +++ b/eeschema/save_schemas.cpp @@ -8,11 +8,10 @@ #include "confirm.h" #include "kicad_string.h" #include "gestfich.h" +#include "macros.h" #include "program.h" -#include "libcmp.h" #include "general.h" -#include "macros.h" #include "protos.h" #include "class_library.h" diff --git a/eeschema/savelib.cpp b/eeschema/savelib.cpp deleted file mode 100644 index 4f1a8bb077..0000000000 --- a/eeschema/savelib.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/****************************/ -/* EESchema - eesavlib.cpp */ -/****************************/ - -/* Functions to save schematic libraries and library components (::Save() - * members) - */ - -#include "fctsys.h" -#include "gr_basic.h" -#include "common.h" -#include "confirm.h" -#include "kicad_string.h" -#include "gestfich.h" -#include "program.h" -#include "libcmp.h" -#include "general.h" - -#include "protos.h" - - -/* - * Routine de copie d'une partlib - * Parametres d'entree: pointeur sur la structure de depart - * Parametres de sortie: pointeur sur la structure creee - * Do not copy new items ( i.e. with m_Flag & IS_NEW) - */ -LIB_COMPONENT* CopyLibEntryStruct( LIB_COMPONENT* OldEntry ) -{ - wxString msg; - LIB_COMPONENT* NewStruct; - LibEDA_BaseStruct* NewDrawings, * OldDrawings; - LibEDA_BaseStruct* LastItem; - LibDrawField* OldField, * NewField; - - if( OldEntry->Type != ROOT ) - { - msg.Printf( wxT( "Component <%s> must be root type to make copy." ), - (const wxChar*) OldEntry->GetName() ); - wxLogError( msg ); - return NULL; - } - - NewStruct = new LIB_COMPONENT( wxEmptyString ); - - OldEntry->m_Prefix.Copy( &NewStruct->m_Prefix ); - OldEntry->m_Name.Copy( &NewStruct->m_Name ); - - NewStruct->m_UnitCount = OldEntry->m_UnitCount; - NewStruct->m_TextInside = OldEntry->m_TextInside; - NewStruct->m_DrawPinNum = OldEntry->m_DrawPinNum; - NewStruct->m_DrawPinName = OldEntry->m_DrawPinName; - NewStruct->m_Options = OldEntry->m_Options; - NewStruct->m_UnitSelectionLocked = OldEntry->m_UnitSelectionLocked; - - /* Copie des sous structures: */ - NewStruct->m_AliasList = OldEntry->m_AliasList; - NewStruct->m_Doc = OldEntry->m_Doc; - NewStruct->m_KeyWord = OldEntry->m_KeyWord; - NewStruct->m_DocFile = OldEntry->m_DocFile; - - /* Copie des champs */ - for( OldField = OldEntry->m_Fields; OldField != NULL; - OldField = OldField->Next() ) - { - NewField = (LibDrawField*) OldField->GenCopy(); - NewStruct->m_Fields.PushBack( NewField ); - } - - /* Copie des elements type Drawing */ - LastItem = NULL; - for( OldDrawings = OldEntry->m_Drawings; OldDrawings != NULL; - OldDrawings = OldDrawings->Next() ) - { - if( ( OldDrawings->m_Flags & IS_NEW ) != 0 ) - continue; - - NewDrawings = OldDrawings->GenCopy(); - - if( NewDrawings ) - { - if( LastItem == NULL ) - NewStruct->m_Drawings = NewDrawings; - else - LastItem->SetNext( NewDrawings ); - - LastItem = NewDrawings; - NewDrawings->SetNext( NULL ); - } - else // Should never occur, just in case... - { // CopyDrawEntryStruct() was not able to duplicate the type - // of OldDrawings - // occurs when an unexpected type is encountered - msg.Printf( wxT( "Error attempting to copy draw item <%s> from \ -component <%s>." ), - (const wxChar*) OldDrawings->GetClass(), - (const wxChar*) OldEntry->GetName() ); - wxLogError( msg ); - break; - } - } - - /* Copy the footprint filter list */ - for( unsigned ii = 0; ii < OldEntry->m_FootprintList.GetCount(); ii++ ) - NewStruct->m_FootprintList.Add( OldEntry->m_FootprintList[ii] ); - - return NewStruct; -} diff --git a/eeschema/schedit.cpp b/eeschema/schedit.cpp index c2c1176b56..5b7f345de1 100644 --- a/eeschema/schedit.cpp +++ b/eeschema/schedit.cpp @@ -9,15 +9,13 @@ #include "class_drawpanel.h" #include "confirm.h" #include "eda_doc.h" + #include "class_marker_sch.h" - #include "program.h" -#include "libcmp.h" #include "general.h" - #include "eeschema_id.h" - #include "protos.h" +#include "class_library.h" /***************************************************************************** diff --git a/eeschema/schematic_undo_redo.cpp b/eeschema/schematic_undo_redo.cpp index b94e988db6..7c34456c79 100644 --- a/eeschema/schematic_undo_redo.cpp +++ b/eeschema/schematic_undo_redo.cpp @@ -7,7 +7,6 @@ #include "class_drawpanel.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "class_marker_sch.h" @@ -436,7 +435,7 @@ void WinEDA_SchematicFrame::GetSchematicFromUndoList(wxCommandEvent& event) List->ReversePickersListOrder(); GetScreen()->PushCommandToRedoList( List ); - CurrentDrawItem = NULL; +// m_drawItem = NULL; GetScreen()->SetModify(); SetSheetNumberAndCount(); ReCreateHToolbar(); @@ -471,7 +470,7 @@ void WinEDA_SchematicFrame::GetSchematicFromRedoList(wxCommandEvent& event) List->ReversePickersListOrder(); GetScreen()->PushCommandToUndoList( List ); - CurrentDrawItem = NULL; +// m_drawItem = NULL; GetScreen()->SetModify(); SetSheetNumberAndCount(); ReCreateHToolbar(); diff --git a/eeschema/schframe.cpp b/eeschema/schframe.cpp index ce86c60ca4..879747b872 100644 --- a/eeschema/schframe.cpp +++ b/eeschema/schframe.cpp @@ -11,11 +11,10 @@ #include "common.h" #include "class_drawpanel.h" #include "gestfich.h" +#include "bitmaps.h" #include "program.h" -#include "libcmp.h" #include "general.h" -#include "bitmaps.h" #include "protos.h" #include "eeschema_id.h" #include "netlist.h" @@ -286,10 +285,10 @@ void WinEDA_SchematicFrame::CreateScreens() m_CurrentSheet->Clear(); m_CurrentSheet->Push( g_RootSheet ); - if( g_ScreenLib == NULL ) - g_ScreenLib = new SCH_SCREEN(); - g_ScreenLib->SetZoom( 4 * g_ScreenLib->m_ZoomScalar ); - g_ScreenLib->m_UndoRedoCountMax = 10; + if( GetBaseScreen() == NULL ) + SetBaseScreen( new SCH_SCREEN() ); + GetBaseScreen()->SetZoom( 4 * GetBaseScreen()->m_ZoomScalar ); + GetBaseScreen()->m_UndoRedoCountMax = 10; } @@ -648,7 +647,7 @@ void WinEDA_SchematicFrame::OnOpenLibraryEditor( wxCommandEvent& event ) wxT( "Library Editor" ), wxPoint( -1, -1 ), wxSize( 600, 400 ) ); - ActiveScreen = g_ScreenLib; + ActiveScreen = GetBaseScreen(); m_LibeditFrame->AdjustScrollBars(); } } diff --git a/eeschema/selpart.cpp b/eeschema/selpart.cpp index f014849d07..f4764d3c17 100644 --- a/eeschema/selpart.cpp +++ b/eeschema/selpart.cpp @@ -8,9 +8,9 @@ #include "confirm.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" +#include "class_library.h" CMP_LIBRARY* SelectLibraryFromList( WinEDA_DrawFrame* frame ) diff --git a/eeschema/sheet.cpp b/eeschema/sheet.cpp index d4ffa8c5c6..8263df5324 100644 --- a/eeschema/sheet.cpp +++ b/eeschema/sheet.cpp @@ -18,6 +18,7 @@ ////@begin includes ////@end includes + #include "fctsys.h" #include "gr_basic.h" #include "common.h" @@ -26,11 +27,10 @@ #include "gestfich.h" #include "program.h" -#include "libcmp.h" #include "general.h" - #include "protos.h" + /* Routines Locales */ static void ExitSheet( WinEDA_DrawPanel* Panel, wxDC* DC ); static void DeplaceSheet( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); diff --git a/eeschema/sheetlab.cpp b/eeschema/sheetlab.cpp index 998059fd19..0a015e88d0 100644 --- a/eeschema/sheetlab.cpp +++ b/eeschema/sheetlab.cpp @@ -9,18 +9,17 @@ #include "confirm.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" /* Routines Locales */ -static void ExitPinSheet( WinEDA_DrawPanel* Panel, wxDC* DC ); -static void Move_PinSheet( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); +static void ExitPinSheet( WinEDA_DrawPanel* Panel, wxDC* DC ); +static void Move_PinSheet( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); /* Variables locales */ static int CurrentTypeLabel = NET_INPUT; -static wxSize NetSheetTextSize( DEFAULT_SIZE_TEXT, DEFAULT_SIZE_TEXT ); +static wxSize NetSheetTextSize( DEFAULT_SIZE_TEXT, DEFAULT_SIZE_TEXT ); /****************************************/ /* class WinEDA_PinSheetPropertiesFrame */ diff --git a/eeschema/symbdraw.cpp b/eeschema/symbdraw.cpp index 29d21e7b30..cf6339ea92 100644 --- a/eeschema/symbdraw.cpp +++ b/eeschema/symbdraw.cpp @@ -13,11 +13,12 @@ #include "eeschema_id.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "trigo.h" #include "protos.h" #include "libeditfrm.h" +#include "class_libentry.h" + /* Routines locales */ static void SymbolDisplayDraw( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); @@ -25,7 +26,6 @@ static void ComputeArc( LibDrawArc* DrawItem, wxPoint ArcCentre ); static void RedrawWhileMovingCursor( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); -static void MoveLibDrawItemAt( LibEDA_BaseStruct* DrawItem, wxPoint newpos ); /* Variables locales */ static int StateDrawArc, ArcStartX, ArcStartY, ArcEndX, ArcEndY; @@ -46,6 +46,11 @@ void WinEDA_bodygraphics_PropertiesFrame::bodygraphics_PropertiesAccept( wxComma /* Update the current draw item */ { + LIB_DRAW_ITEM* item = m_Parent->GetDrawItem(); + + if( item == NULL ) + return; + g_FlDrawSpecificConvert = m_CommonConvert->GetValue() ? FALSE : TRUE; g_FlDrawSpecificUnit = m_CommonUnit->GetValue() ? FALSE : TRUE; @@ -54,91 +59,84 @@ void WinEDA_bodygraphics_PropertiesFrame::bodygraphics_PropertiesAccept( wxComma g_LibSymbolDefaultLineWidth = m_GraphicShapeWidthCtrl->GetValue(); - if( CurrentDrawItem ) + if( !(item->m_Flags & IS_NEW) ) // if IS_NEW, copy for undo is done before place + m_Parent->SaveCopyInUndoList( item->GetParent() ); + wxClientDC dc( m_Parent->DrawPanel ); + + m_Parent->DrawPanel->PrepareGraphicContext( &dc ); + + item->Draw( m_Parent->DrawPanel, &dc, wxPoint( 0, 0 ), -1, g_XorMode, + NULL, DefaultTransformMatrix ); + + if( g_FlDrawSpecificUnit ) + item->m_Unit = m_Parent->GetUnit(); + else + item->m_Unit = 0; + + if( g_FlDrawSpecificConvert ) + item->m_Convert = m_Parent->GetConvert(); + else + item->m_Convert = 0; + + if( m_Filled ) { - if( !(CurrentDrawItem->m_Flags & IS_NEW) ) // if IS_NEW, copy for undo is done before place - m_Parent->SaveCopyInUndoList( CurrentDrawItem->GetParent() ); - wxClientDC dc( m_Parent->DrawPanel ); - - m_Parent->DrawPanel->PrepareGraphicContext( &dc ); - - CurrentDrawItem->Draw( m_Parent->DrawPanel, &dc, wxPoint( 0, 0 ), -1, - g_XorMode, NULL, DefaultTransformMatrix ); - - if( g_FlDrawSpecificUnit ) - CurrentDrawItem->m_Unit = CurrentUnit; - else - CurrentDrawItem->m_Unit = 0; - if( g_FlDrawSpecificConvert ) - CurrentDrawItem->m_Convert = CurrentConvert; - else - CurrentDrawItem->m_Convert = 0; - if( m_Filled ) + switch( item->Type() ) { - switch( CurrentDrawItem->Type() ) - { - case COMPONENT_ARC_DRAW_TYPE: - ( (LibDrawArc*) CurrentDrawItem )->m_Fill = FlSymbol_Fill; - ( (LibDrawArc*) CurrentDrawItem )->m_Width = - m_GraphicShapeWidthCtrl->GetValue(); - break; + case COMPONENT_ARC_DRAW_TYPE: + ( (LibDrawArc*) item )->m_Fill = FlSymbol_Fill; + ( (LibDrawArc*) item )->m_Width = + m_GraphicShapeWidthCtrl->GetValue(); + break; - case COMPONENT_CIRCLE_DRAW_TYPE: - ( (LibDrawCircle*) CurrentDrawItem )->m_Fill = FlSymbol_Fill; - ( (LibDrawCircle*) CurrentDrawItem )->m_Width = - m_GraphicShapeWidthCtrl->GetValue(); - break; + case COMPONENT_CIRCLE_DRAW_TYPE: + ( (LibDrawCircle*) item )->m_Fill = FlSymbol_Fill; + ( (LibDrawCircle*) item )->m_Width = + m_GraphicShapeWidthCtrl->GetValue(); + break; - case COMPONENT_RECT_DRAW_TYPE: - ( (LibDrawSquare*) CurrentDrawItem )->m_Fill = FlSymbol_Fill; - ( (LibDrawSquare*) CurrentDrawItem )->m_Width = - m_GraphicShapeWidthCtrl->GetValue(); - break; + case COMPONENT_RECT_DRAW_TYPE: + ( (LibDrawSquare*) item )->m_Fill = FlSymbol_Fill; + ( (LibDrawSquare*) item )->m_Width = + m_GraphicShapeWidthCtrl->GetValue(); + break; - case COMPONENT_POLYLINE_DRAW_TYPE: - ( (LibDrawPolyline*) CurrentDrawItem )->m_Fill = - FlSymbol_Fill; - ( (LibDrawPolyline*) CurrentDrawItem )->m_Width = - m_GraphicShapeWidthCtrl-> - GetValue(); - break; + case COMPONENT_POLYLINE_DRAW_TYPE: + ( (LibDrawPolyline*) item )->m_Fill = + FlSymbol_Fill; + ( (LibDrawPolyline*) item )->m_Width = + m_GraphicShapeWidthCtrl->GetValue(); + break; - default: - break; - } + default: + break; } - CurrentDrawItem->GetParent()->SortDrawItems(); + item->GetParent()->SortDrawItems(); m_Parent->GetScreen()->SetModify(); - CurrentDrawItem->Draw( m_Parent->DrawPanel, &dc, wxPoint( 0, 0 ), - -1, g_XorMode, NULL, DefaultTransformMatrix ); + item->Draw( m_Parent->DrawPanel, &dc, wxPoint( 0, 0 ), -1, g_XorMode, + NULL, DefaultTransformMatrix ); } Close(); - if( CurrentDrawItem ) - CurrentDrawItem->DisplayInfo( m_Parent ); + item->DisplayInfo( m_Parent ); m_Parent->DrawPanel->Refresh(); } -/**********************************************************/ -void WinEDA_LibeditFrame::EditGraphicSymbol( wxDC* DC, - LibEDA_BaseStruct* DrawItem ) -/**********************************************************/ - -/* Install the dialog box for editing a graphical item properties +/* + * Show the dialog box for editing a graphical item properties */ +void WinEDA_LibeditFrame::EditGraphicSymbol( wxDC* DC, LIB_DRAW_ITEM* DrawItem ) { if( DrawItem == NULL ) return; - WinEDA_bodygraphics_PropertiesFrame* frame = - new WinEDA_bodygraphics_PropertiesFrame( this ); + WinEDA_bodygraphics_PropertiesFrame dlg( this ); - frame->ShowModal(); frame->Destroy(); + dlg.ShowModal(); } @@ -146,91 +144,53 @@ void WinEDA_LibeditFrame::EditGraphicSymbol( wxDC* DC, static void AbortSymbolTraceOn( WinEDA_DrawPanel* Panel, wxDC* DC ) /****************************************************************/ { + LIB_DRAW_ITEM* item; + + item = ( ( WinEDA_LibeditFrame* ) Panel->GetParent() )->GetDrawItem(); + + if( item == NULL ) + return; + StateDrawArc = 0; Panel->ManageCurseur = NULL; Panel->ForceCloseManageCurseur = NULL; - if( CurrentDrawItem == NULL ) - return; - if( CurrentDrawItem->m_Flags & IS_NEW ) + if( item->m_Flags & IS_NEW ) { - if( CurrentDrawItem->Type() == COMPONENT_ARC_DRAW_TYPE ) - { + if( item->Type() == COMPONENT_ARC_DRAW_TYPE ) Panel->m_Parent->RedrawActiveWindow( DC, TRUE ); - } else - { - CurrentDrawItem->Draw( Panel, DC, wxPoint( 0, 0 ), -1, g_XorMode, - NULL, DefaultTransformMatrix ); - } + item->Draw( Panel, DC, wxPoint( 0, 0 ), -1, g_XorMode, NULL, + DefaultTransformMatrix ); - SAFE_DELETE( CurrentDrawItem ); + SAFE_DELETE( item ); } else { - wxPoint curpos; - curpos = Panel->GetScreen()->m_Curseur; + wxPoint curpos = Panel->GetScreen()->m_Curseur; Panel->GetScreen()->m_Curseur = StartCursor; RedrawWhileMovingCursor( Panel, DC, TRUE ); Panel->GetScreen()->m_Curseur = curpos; - CurrentDrawItem->Draw( Panel, DC, wxPoint( 0, 0 ), -1, - GR_DEFAULT_DRAWMODE, NULL, - DefaultTransformMatrix ); - CurrentDrawItem->m_Flags = 0; + item->Draw( Panel, DC, wxPoint( 0, 0 ), -1, GR_DEFAULT_DRAWMODE, NULL, + DefaultTransformMatrix ); + item->m_Flags = 0; } } -/*******************************************************************************************/ -LibEDA_BaseStruct* WinEDA_LibeditFrame::CreateGraphicItem( LIB_COMPONENT* LibEntry, - wxDC* DC ) -/*******************************************************************************************/ - -/* Routine de creation d'un nouvel element type LibraryDrawStruct - */ +LIB_DRAW_ITEM* WinEDA_LibeditFrame::CreateGraphicItem( LIB_COMPONENT* LibEntry, + wxDC* DC ) { - int DrawType; - - DrawPanel->m_IgnoreMouseEvents = TRUE; - - // Creation du nouvel element - switch( m_ID_current_state ) - { - case ID_LIBEDIT_BODY_LINE_BUTT: - DrawType = COMPONENT_POLYLINE_DRAW_TYPE; - break; - - case ID_LIBEDIT_BODY_ARC_BUTT: - DrawType = COMPONENT_ARC_DRAW_TYPE; - break; - - case ID_LIBEDIT_BODY_CIRCLE_BUTT: - DrawType = COMPONENT_CIRCLE_DRAW_TYPE; - break; - - case ID_LIBEDIT_BODY_RECT_BUTT: - DrawType = COMPONENT_RECT_DRAW_TYPE; - break; - - case ID_LIBEDIT_BODY_TEXT_BUTT: - DrawType = COMPONENT_GRAPHIC_TEXT_DRAW_TYPE; - break; - - default: - DisplayError( this, wxT( "WinEDA_LibeditFrame::CreateGraphicItem() error" ) ); - return NULL; - } - DrawPanel->ManageCurseur = SymbolDisplayDraw; DrawPanel->ForceCloseManageCurseur = AbortSymbolTraceOn; - switch( DrawType ) + switch( m_ID_current_state ) { - case COMPONENT_ARC_DRAW_TYPE: + case ID_LIBEDIT_BODY_ARC_BUTT: { LibDrawArc* Arc = new LibDrawArc( LibEntry ); - CurrentDrawItem = Arc; + m_drawItem = Arc; ArcStartX = ArcEndX = GetScreen()->m_Curseur.x; ArcStartY = ArcEndY = -( GetScreen()->m_Curseur.y ); StateDrawArc = 1; @@ -239,11 +199,11 @@ LibEDA_BaseStruct* WinEDA_LibeditFrame::CreateGraphicItem( LIB_COMPONENT* LibEnt } break; - case COMPONENT_CIRCLE_DRAW_TYPE: + case ID_LIBEDIT_BODY_CIRCLE_BUTT: { LibDrawCircle* Circle = new LibDrawCircle( LibEntry ); - CurrentDrawItem = Circle; + m_drawItem = Circle; Circle->m_Pos = GetScreen()->m_Curseur; NEGATE( Circle->m_Pos.y ); Circle->m_Fill = FlSymbol_Fill; @@ -251,11 +211,11 @@ LibEDA_BaseStruct* WinEDA_LibeditFrame::CreateGraphicItem( LIB_COMPONENT* LibEnt } break; - case COMPONENT_RECT_DRAW_TYPE: + case ID_LIBEDIT_BODY_RECT_BUTT: { LibDrawSquare* Square = new LibDrawSquare( LibEntry ); - CurrentDrawItem = Square; + m_drawItem = Square; Square->m_Pos = GetScreen()->m_Curseur; NEGATE( Square->m_Pos.y ); Square->m_End = Square->m_Pos; @@ -264,10 +224,10 @@ LibEDA_BaseStruct* WinEDA_LibeditFrame::CreateGraphicItem( LIB_COMPONENT* LibEnt } break; - case COMPONENT_POLYLINE_DRAW_TYPE: + case ID_LIBEDIT_BODY_LINE_BUTT: { LibDrawPolyline* polyline = new LibDrawPolyline( LibEntry ); - CurrentDrawItem = polyline; + m_drawItem = polyline; wxPoint point = GetScreen()->m_Curseur; NEGATE( point.y ); polyline->AddPoint( point ); // Start point of the current segment @@ -281,7 +241,7 @@ LibEDA_BaseStruct* WinEDA_LibeditFrame::CreateGraphicItem( LIB_COMPONENT* LibEnt { LibDrawSegment* Segment = new LibDrawSegment( LibEntry ); - CurrentDrawItem = Segment; + m_drawItem = Segment; Segment->m_Pos = GetScreen()->m_Curseur; NEGATE( Segment->m_Pos.y ); Segment->m_End = Segment->m_Pos; @@ -289,11 +249,11 @@ LibEDA_BaseStruct* WinEDA_LibeditFrame::CreateGraphicItem( LIB_COMPONENT* LibEnt } break; - case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE: + case ID_LIBEDIT_BODY_TEXT_BUTT: { LibDrawText* Text = new LibDrawText( LibEntry ); - CurrentDrawItem = Text; + m_drawItem = Text; Text->m_Size.x = Text->m_Size.y = g_LastTextSize; Text->m_Orient = g_LastTextOrient; Text->m_Pos = GetScreen()->m_Curseur; @@ -302,7 +262,7 @@ LibEDA_BaseStruct* WinEDA_LibeditFrame::CreateGraphicItem( LIB_COMPONENT* LibEnt if( Text->m_Text.IsEmpty() ) { SAFE_DELETE( Text ); - CurrentDrawItem = NULL; + m_drawItem = NULL; DrawPanel->ManageCurseur = NULL; DrawPanel->ForceCloseManageCurseur = NULL; } @@ -314,21 +274,26 @@ LibEDA_BaseStruct* WinEDA_LibeditFrame::CreateGraphicItem( LIB_COMPONENT* LibEnt } } break; + + default: + DisplayError( this, wxT( "WinEDA_LibeditFrame::CreateGraphicItem() \ +error" ) ); + return NULL; } - if( CurrentDrawItem ) + if( m_drawItem ) { - CurrentDrawItem->m_Flags |= IS_NEW; + m_drawItem->m_Flags |= IS_NEW; if( g_FlDrawSpecificUnit ) - CurrentDrawItem->m_Unit = CurrentUnit; + m_drawItem->m_Unit = m_unit; if( g_FlDrawSpecificConvert ) - CurrentDrawItem->m_Convert = CurrentConvert; + m_drawItem->m_Convert = m_convert; } DrawPanel->MouseToCursorSchema(); DrawPanel->m_IgnoreMouseEvents = FALSE; - return CurrentDrawItem; + return m_drawItem; } @@ -339,10 +304,10 @@ void WinEDA_LibeditFrame::GraphicItemBeginDraw( wxDC* DC ) /* Routine de creation d'un nouvel element type LibraryDrawStruct */ { - if( CurrentDrawItem == NULL ) + if( m_drawItem == NULL ) return; - switch( CurrentDrawItem->Type() ) + switch( m_drawItem->Type() ) { case COMPONENT_ARC_DRAW_TYPE: if( StateDrawArc == 1 ) @@ -369,7 +334,7 @@ void WinEDA_LibeditFrame::GraphicItemBeginDraw( wxDC* DC ) { wxPoint pos = GetScreen()->m_Curseur; NEGATE( pos.y ); - ( (LibDrawPolyline*) CurrentDrawItem )->AddPoint( pos ); + ( (LibDrawPolyline*) m_drawItem )->AddPoint( pos ); } break; @@ -382,15 +347,20 @@ void WinEDA_LibeditFrame::GraphicItemBeginDraw( wxDC* DC ) } -/**************************************************************************/ +/* + * Redraw the graphoc shape while moving + */ static void RedrawWhileMovingCursor( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) -/**************************************************************************/ - -/* Redraw the graphoc shape while moving - */ { + LIB_DRAW_ITEM* item; + + item = ( ( WinEDA_LibeditFrame* ) panel->GetParent() )->GetDrawItem(); + + if( item == NULL ) + return; + BASE_SCREEN* Screen = panel->GetScreen(); wxPoint pos; @@ -398,110 +368,27 @@ static void RedrawWhileMovingCursor( WinEDA_DrawPanel* panel, if( erase ) { pos = ItemPreviousPos - StartCursor; - CurrentDrawItem->Draw( panel, DC, pos, -1, g_XorMode, NULL, - DefaultTransformMatrix ); + item->Draw( panel, DC, pos, -1, g_XorMode, NULL, + DefaultTransformMatrix ); } /* Redraw moved shape */ pos = Screen->m_Curseur - StartCursor; - CurrentDrawItem->Draw( panel, DC, pos, -1, g_XorMode, NULL, - DefaultTransformMatrix ); + item->Draw( panel, DC, pos, -1, g_XorMode, NULL, DefaultTransformMatrix ); ItemPreviousPos = Screen->m_Curseur; } -/*****************************************************************/ -void MoveLibDrawItemAt( LibEDA_BaseStruct* DrawItem, wxPoint newpos ) -/*****************************************************************/ -{ - NEGATE( newpos.y ); - wxPoint size; - - switch( DrawItem->Type() ) - { - case COMPONENT_ARC_DRAW_TYPE: - { - wxPoint offset = newpos - ( (LibDrawArc*) CurrentDrawItem )->m_Pos; - ( (LibDrawArc*) CurrentDrawItem )->m_Pos = newpos; - ( (LibDrawArc*) CurrentDrawItem )->m_ArcStart += offset; - ( (LibDrawArc*) CurrentDrawItem )->m_ArcEnd += offset; - break; - } - - case COMPONENT_CIRCLE_DRAW_TYPE: - ( (LibDrawCircle*) CurrentDrawItem )->m_Pos = newpos; - break; - - case COMPONENT_RECT_DRAW_TYPE: - size = ( (LibDrawSquare*) CurrentDrawItem )->m_End - - ( (LibDrawSquare*) CurrentDrawItem )->m_Pos; - ( (LibDrawSquare*) CurrentDrawItem )->m_Pos = newpos; - ( (LibDrawSquare*) CurrentDrawItem )->m_End = newpos + size; - break; - - case COMPONENT_POLYLINE_DRAW_TYPE: - { - int ii, imax = ( (LibDrawPolyline*) CurrentDrawItem )->GetCornerCount(); - wxPoint offset = newpos - ( (LibDrawPolyline*) CurrentDrawItem )->m_PolyPoints[0]; - for( ii = 0; ii < imax; ii++ ) - ( (LibDrawPolyline*) CurrentDrawItem )->m_PolyPoints[ii] += offset; - } - break; - - case COMPONENT_LINE_DRAW_TYPE: - break; - - case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE: - ( (LibDrawText*) CurrentDrawItem )->m_Pos = newpos; - break; - - default: - ; - } -} - - -/************************************************************/ void WinEDA_LibeditFrame::StartMoveDrawSymbol( wxDC* DC ) -/************************************************************/ { - if( CurrentDrawItem == NULL ) + if( m_drawItem == NULL ) return; SetCursor( wxCURSOR_HAND ); - CurrentDrawItem->m_Flags |= IS_MOVED; + m_drawItem->m_Flags |= IS_MOVED; StartCursor = GetScreen()->m_Curseur; - - switch( CurrentDrawItem->Type() ) - { - case COMPONENT_ARC_DRAW_TYPE: - InitPosition = ( (LibDrawArc*) CurrentDrawItem )->m_Pos; - break; - - case COMPONENT_CIRCLE_DRAW_TYPE: - InitPosition = ( (LibDrawCircle*) CurrentDrawItem )->m_Pos; - break; - - case COMPONENT_RECT_DRAW_TYPE: - InitPosition = ( (LibDrawSquare*) CurrentDrawItem )->m_Pos; - break; - - case COMPONENT_POLYLINE_DRAW_TYPE: - InitPosition = ( (LibDrawPolyline*) CurrentDrawItem )->m_PolyPoints[0]; - break; - - case COMPONENT_LINE_DRAW_TYPE: - break; - - case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE: - InitPosition = ( (LibDrawText*) CurrentDrawItem )->m_Pos; - break; - - default: - ; - } - + InitPosition = m_drawItem->GetPosition(); ItemPreviousPos = GetScreen()->m_Curseur; DrawPanel->ManageCurseur = RedrawWhileMovingCursor; DrawPanel->ForceCloseManageCurseur = AbortSymbolTraceOn; @@ -520,6 +407,13 @@ static void SymbolDisplayDraw( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) BASE_SCREEN* Screen = panel->GetScreen(); wxPoint curr_pos = Screen->m_Curseur; + LIB_DRAW_ITEM* item; + + item = ( ( WinEDA_LibeditFrame* ) panel->GetParent() )->GetDrawItem(); + + if( item == NULL ) + return; + NEGATE( curr_pos.y ); GRSetDrawMode( DC, DrawMode ); @@ -529,72 +423,67 @@ static void SymbolDisplayDraw( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) if( StateDrawArc == 1 ) { int Color = ReturnLayerColor( LAYER_DEVICE ); - GRLine( &panel->m_ClipBox, - DC, - ArcStartX, - -ArcStartY, - ArcEndX, - -ArcEndY, - 0, - Color ); + GRLine( &panel->m_ClipBox, DC, ArcStartX, -ArcStartY, + ArcEndX, -ArcEndY, 0, Color ); } else { - CurrentDrawItem->Draw( panel, DC, wxPoint( 0, 0 ), -1, DrawMode, - NULL, DefaultTransformMatrix ); - if( CurrentDrawItem->Type() == COMPONENT_ARC_DRAW_TYPE ) + item->Draw( panel, DC, wxPoint( 0, 0 ), -1, DrawMode, NULL, + DefaultTransformMatrix ); + if( item->Type() == COMPONENT_ARC_DRAW_TYPE ) { int Color = ReturnLayerColor( LAYER_DEVICE ); GRDashedLine( &panel->m_ClipBox, DC, ArcStartX, -ArcStartY, - ( (LibDrawArc*) CurrentDrawItem )->m_Pos.x, - -( (LibDrawArc*) CurrentDrawItem )->m_Pos.y, + ( (LibDrawArc*) item )->m_Pos.x, + -( (LibDrawArc*) item )->m_Pos.y, 0, Color ); GRDashedLine( &panel->m_ClipBox, DC, ArcEndX, -ArcEndY, - ( (LibDrawArc*) CurrentDrawItem )->m_Pos.x, - -( (LibDrawArc*) CurrentDrawItem )->m_Pos.y, + ( (LibDrawArc*) item )->m_Pos.x, + -( (LibDrawArc*) item )->m_Pos.y, 0, Color ); } } } - switch( CurrentDrawItem->Type() ) + switch( item->Type() ) { case COMPONENT_ARC_DRAW_TYPE: if( StateDrawArc == 1 ) { - ArcEndX = curr_pos.x; ArcEndY = curr_pos.y; + ArcEndX = curr_pos.x; + ArcEndY = curr_pos.y; } if( StateDrawArc == 2 ) { - ComputeArc( (LibDrawArc*) CurrentDrawItem, Screen->m_Curseur ); + ComputeArc( (LibDrawArc*) item, Screen->m_Curseur ); } - ( (LibDrawArc*) CurrentDrawItem )->m_Fill = FlSymbol_Fill; + ( (LibDrawArc*) item )->m_Fill = FlSymbol_Fill; break; case COMPONENT_CIRCLE_DRAW_TYPE: - dx = ( (LibDrawCircle*) CurrentDrawItem )->m_Pos.x - curr_pos.x; - dy = ( (LibDrawCircle*) CurrentDrawItem )->m_Pos.y - curr_pos.y; - ( (LibDrawCircle*) CurrentDrawItem )->m_Radius = + dx = ( (LibDrawCircle*) item )->m_Pos.x - curr_pos.x; + dy = ( (LibDrawCircle*) item )->m_Pos.y - curr_pos.y; + ( (LibDrawCircle*) item )->m_Radius = (int) sqrt( ( (double) dx * dx ) + ( (double) dy * dy ) ); - ( (LibDrawCircle*) CurrentDrawItem )->m_Fill = FlSymbol_Fill; + ( (LibDrawCircle*) item )->m_Fill = FlSymbol_Fill; break; case COMPONENT_RECT_DRAW_TYPE: - ( (LibDrawSquare*) CurrentDrawItem )->m_End = curr_pos; - ( (LibDrawSquare*) CurrentDrawItem )->m_Fill = FlSymbol_Fill; + ( (LibDrawSquare*) item )->m_End = curr_pos; + ( (LibDrawSquare*) item )->m_Fill = FlSymbol_Fill; break; case COMPONENT_POLYLINE_DRAW_TYPE: { - unsigned idx = ( (LibDrawPolyline*) CurrentDrawItem )->GetCornerCount() - 1; - ( (LibDrawPolyline*) CurrentDrawItem )->m_PolyPoints[idx] = curr_pos; - ( (LibDrawPolyline*) CurrentDrawItem )->m_Fill = FlSymbol_Fill; + unsigned idx = ( (LibDrawPolyline*) item )->GetCornerCount() - 1; + ( (LibDrawPolyline*) item )->m_PolyPoints[idx] = curr_pos; + ( (LibDrawPolyline*) item )->m_Fill = FlSymbol_Fill; } break; case COMPONENT_LINE_DRAW_TYPE: - ( (LibDrawSegment*) CurrentDrawItem )->m_End = curr_pos; + ( (LibDrawSegment*) item )->m_End = curr_pos; break; case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE: /* Traite par des routines specifiques */ @@ -607,29 +496,24 @@ static void SymbolDisplayDraw( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) if( StateDrawArc == 1 ) { int Color = ReturnLayerColor( LAYER_DEVICE ); - GRLine( &panel->m_ClipBox, - DC, - ArcStartX, - -ArcStartY, - ArcEndX, - -ArcEndY, - 0, - Color ); + GRLine( &panel->m_ClipBox, DC, ArcStartX, -ArcStartY, ArcEndX, + -ArcEndY, 0, Color ); } else { - CurrentDrawItem->Draw( panel, DC, wxPoint( 0, 0 ), -1, DrawMode, - NULL, DefaultTransformMatrix ); - if( CurrentDrawItem->Type() == COMPONENT_ARC_DRAW_TYPE ) + item->Draw( panel, DC, wxPoint( 0, 0 ), -1, DrawMode, NULL, + DefaultTransformMatrix ); + + if( item->Type() == COMPONENT_ARC_DRAW_TYPE ) { int Color = ReturnLayerColor( LAYER_DEVICE ); GRDashedLine( &panel->m_ClipBox, DC, ArcStartX, -ArcStartY, - ( (LibDrawArc*) CurrentDrawItem )->m_Pos.x, - -( (LibDrawArc*) CurrentDrawItem )->m_Pos.y, + ( (LibDrawArc*) item )->m_Pos.x, + -( (LibDrawArc*) item )->m_Pos.y, 0, Color ); GRDashedLine( &panel->m_ClipBox, DC, ArcEndX, -ArcEndY, - ( (LibDrawArc*) CurrentDrawItem )->m_Pos.x, - -( (LibDrawArc*) CurrentDrawItem )->m_Pos.y, + ( (LibDrawArc*) item )->m_Pos.x, + -( (LibDrawArc*) item )->m_Pos.y, 0, Color ); } } @@ -643,16 +527,14 @@ void WinEDA_LibeditFrame::EndDrawGraphicItem( wxDC* DC ) /* Place la structure courante en liste des structures du composant * courant, si elle existe et redessine toujours celle ci * Parametres: (tous globaux) - * CurrentDrawItem - * m_currentComponent + * m_drawItem + * m_component */ { - if( m_currentComponent == NULL ) - return; - if( CurrentDrawItem == NULL ) + if( m_component == NULL || m_drawItem == NULL ) return; - if( CurrentDrawItem->Type() == COMPONENT_ARC_DRAW_TYPE ) + if( m_drawItem->Type() == COMPONENT_ARC_DRAW_TYPE ) { if( StateDrawArc == 1 ) /* Trace d'arc en cours: doit etre termine */ { @@ -660,35 +542,35 @@ void WinEDA_LibeditFrame::EndDrawGraphicItem( wxDC* DC ) } else { - if( (CurrentDrawItem->m_Flags & IS_MOVED) == 0 ) + if( (m_drawItem->m_Flags & IS_MOVED) == 0 ) SymbolDisplayDraw( DrawPanel, DC, FALSE ); } } StateDrawArc = 0; - if( CurrentDrawItem->m_Flags & IS_NEW ) + if( m_drawItem->m_Flags & IS_NEW ) { - SaveCopyInUndoList( m_currentComponent ); - CurrentDrawItem->SetNext( m_currentComponent->m_Drawings ); - m_currentComponent->m_Drawings = CurrentDrawItem; + SaveCopyInUndoList( m_component ); + m_drawItem->SetNext( m_component->m_Drawings ); + m_component->m_Drawings = m_drawItem; - switch( CurrentDrawItem->Type() ) + switch( m_drawItem->Type() ) { case COMPONENT_ARC_DRAW_TYPE: - ( (LibDrawArc*) CurrentDrawItem )->m_Fill = FlSymbol_Fill; + ( (LibDrawArc*) m_drawItem )->m_Fill = FlSymbol_Fill; break; case COMPONENT_CIRCLE_DRAW_TYPE: - ( (LibDrawCircle*) CurrentDrawItem )->m_Fill = FlSymbol_Fill; + ( (LibDrawCircle*) m_drawItem )->m_Fill = FlSymbol_Fill; break; case COMPONENT_RECT_DRAW_TYPE: - ( (LibDrawSquare*) CurrentDrawItem )->m_Fill = FlSymbol_Fill; + ( (LibDrawSquare*) m_drawItem )->m_Fill = FlSymbol_Fill; break; case COMPONENT_POLYLINE_DRAW_TYPE: - ( (LibDrawPolyline*) CurrentDrawItem )->m_Fill = FlSymbol_Fill; + ( (LibDrawPolyline*) m_drawItem )->m_Fill = FlSymbol_Fill; break; case COMPONENT_PIN_DRAW_TYPE: @@ -700,7 +582,7 @@ void WinEDA_LibeditFrame::EndDrawGraphicItem( wxDC* DC ) ; } - m_currentComponent->SortDrawItems(); + m_component->SortDrawItems(); } if( m_ID_current_state ) @@ -708,19 +590,20 @@ void WinEDA_LibeditFrame::EndDrawGraphicItem( wxDC* DC ) else SetCursor( wxCURSOR_ARROW ); - if( (CurrentDrawItem->m_Flags & IS_MOVED) ) + if( (m_drawItem->m_Flags & IS_MOVED) ) { wxPoint pos; pos.x = GetScreen()->m_Curseur.x + InitPosition.x - StartCursor.x, pos.y = GetScreen()->m_Curseur.y - InitPosition.y - StartCursor.y; - MoveLibDrawItemAt( CurrentDrawItem, pos ); + NEGATE( pos.y ); + m_drawItem->Move( pos ); } - m_currentComponent->Draw( DrawPanel, DC, wxPoint( 0, 0 ), CurrentUnit, - CurrentConvert, GR_DEFAULT_DRAWMODE ); + m_component->Draw( DrawPanel, DC, wxPoint( 0, 0 ), m_unit, m_convert, + GR_DEFAULT_DRAWMODE ); - CurrentDrawItem->m_Flags = 0; - CurrentDrawItem = NULL; + m_drawItem->m_Flags = 0; + m_drawItem = NULL; GetScreen()->SetModify(); @@ -826,14 +709,14 @@ void WinEDA_LibeditFrame::DeleteDrawPoly( wxDC* DC ) /* Used for deleting last entered segment while creating a Polyline */ { - if( CurrentDrawItem == NULL - || CurrentDrawItem->Type() != COMPONENT_POLYLINE_DRAW_TYPE ) + if( m_drawItem == NULL + || m_drawItem->Type() != COMPONENT_POLYLINE_DRAW_TYPE ) return; - LibDrawPolyline* Poly = (LibDrawPolyline*) CurrentDrawItem; + LibDrawPolyline* Poly = (LibDrawPolyline*) m_drawItem; - CurrentDrawItem->Draw( DrawPanel, DC, wxPoint( 0, 0 ), -1, g_XorMode, - NULL, DefaultTransformMatrix ); + m_drawItem->Draw( DrawPanel, DC, wxPoint( 0, 0 ), -1, g_XorMode, NULL, + DefaultTransformMatrix ); while( Poly->GetCornerCount() > 2 ) // First segment is kept, only its end point is changed { @@ -848,6 +731,6 @@ void WinEDA_LibeditFrame::DeleteDrawPoly( wxDC* DC ) } } - CurrentDrawItem->Draw( DrawPanel, DC, wxPoint( 0, 0 ), -1, g_XorMode, - NULL, DefaultTransformMatrix ); + m_drawItem->Draw( DrawPanel, DC, wxPoint( 0, 0 ), -1, g_XorMode, NULL, + DefaultTransformMatrix ); } diff --git a/eeschema/symbedit.cpp b/eeschema/symbedit.cpp index 34d5baa3f1..78dbd75369 100644 --- a/eeschema/symbedit.cpp +++ b/eeschema/symbedit.cpp @@ -16,10 +16,10 @@ #include "gestfich.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libeditfrm.h" +#include "class_library.h" /* @@ -31,15 +31,14 @@ */ void WinEDA_LibeditFrame::LoadOneSymbol( void ) { - LIB_COMPONENT* Component; - LibEDA_BaseStruct* DrawEntry; - FILE* ImportFile; - wxString msg, err; - CMP_LIBRARY* Lib; + LIB_COMPONENT* Component; + LIB_DRAW_ITEM* DrawEntry; + FILE* ImportFile; + wxString msg, err; + CMP_LIBRARY* Lib; /* Exit if no library entry is selected or a command is in progress. */ - if( m_currentComponent == NULL - || ( CurrentDrawItem && CurrentDrawItem->m_Flags ) ) + if( m_component == NULL || ( m_drawItem && m_drawItem->m_Flags ) ) return; DrawPanel->m_IgnoreMouseEvents = TRUE; @@ -102,16 +101,16 @@ void WinEDA_LibeditFrame::LoadOneSymbol( void ) while( DrawEntry ) { if( DrawEntry->m_Unit ) - DrawEntry->m_Unit = CurrentUnit; + DrawEntry->m_Unit = m_unit; if( DrawEntry->m_Convert ) - DrawEntry->m_Convert = CurrentConvert; + DrawEntry->m_Convert = m_convert; DrawEntry->m_Flags = IS_NEW; DrawEntry->m_Selected = IS_SELECTED; if( DrawEntry->Next() == NULL ) /* Fin de liste trouvee */ { - DrawEntry->SetNext( m_currentComponent->m_Drawings ); - m_currentComponent->m_Drawings = Component->m_Drawings; + DrawEntry->SetNext( m_component->m_Drawings ); + m_component->m_Drawings = Component->m_Drawings; Component->m_Drawings = NULL; break; } @@ -120,10 +119,10 @@ void WinEDA_LibeditFrame::LoadOneSymbol( void ) } // Remove duplicated drawings: - m_currentComponent->RemoveDuplicateDrawItems(); + m_component->RemoveDuplicateDrawItems(); // Clear flags - DrawEntry = m_currentComponent->m_Drawings; + DrawEntry = m_component->m_Drawings; while( DrawEntry ) { DrawEntry->m_Flags = 0; @@ -148,18 +147,18 @@ void WinEDA_LibeditFrame::LoadOneSymbol( void ) */ void WinEDA_LibeditFrame::SaveOneSymbol() { - LibEDA_BaseStruct* DrawEntry; - wxString msg; - FILE* ExportFile; + LIB_DRAW_ITEM* DrawEntry; + wxString msg; + FILE* ExportFile; - if( m_currentComponent->m_Drawings == NULL ) + if( m_component->m_Drawings == NULL ) return; /* Creation du fichier symbole */ wxString default_path = wxGetApp().ReturnLastVisitedLibraryPath(); wxFileDialog dlg( this, _( "Export Symbol Drawings" ), default_path, - m_currentComponent->m_Name.m_Text, SymbolFileWildcard, + m_component->m_Name.m_Text, SymbolFileWildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); if( dlg.ShowModal() == wxID_CANCEL ) @@ -195,28 +194,28 @@ void WinEDA_LibeditFrame::SaveOneSymbol() /* Creation du commentaire donnant le nom du composant */ fprintf( ExportFile, "# SYMBOL %s\n#\n", - CONV_TO_UTF8( m_currentComponent->m_Name.m_Text ) ); + CONV_TO_UTF8( m_component->m_Name.m_Text ) ); /* Generation des lignes utiles */ fprintf( ExportFile, "DEF %s", - CONV_TO_UTF8( m_currentComponent->m_Name.m_Text ) ); - if( !m_currentComponent->m_Prefix.m_Text.IsEmpty() ) + CONV_TO_UTF8( m_component->m_Name.m_Text ) ); + if( !m_component->m_Prefix.m_Text.IsEmpty() ) fprintf( ExportFile, " %s", - CONV_TO_UTF8( m_currentComponent->m_Prefix.m_Text ) ); + CONV_TO_UTF8( m_component->m_Prefix.m_Text ) ); else fprintf( ExportFile, " ~" ); fprintf( ExportFile, " %d %d %c %c %d %d %c\n", 0, /* unused */ - m_currentComponent->m_TextInside, - m_currentComponent->m_DrawPinNum ? 'Y' : 'N', - m_currentComponent->m_DrawPinName ? 'Y' : 'N', + m_component->m_TextInside, + m_component->m_DrawPinNum ? 'Y' : 'N', + m_component->m_DrawPinName ? 'Y' : 'N', 1, 0 /* unused */, 'N' ); /* Position / orientation / visibilite des champs */ - m_currentComponent->m_Prefix.Save( ExportFile ); - m_currentComponent->m_Name.Save( ExportFile ); - DrawEntry = m_currentComponent->m_Drawings; + m_component->m_Prefix.Save( ExportFile ); + m_component->m_Name.Save( ExportFile ); + DrawEntry = m_component->m_Drawings; if( DrawEntry ) { @@ -224,11 +223,11 @@ void WinEDA_LibeditFrame::SaveOneSymbol() for( ; DrawEntry != NULL; DrawEntry = DrawEntry->Next() ) { /* Elimination des elements non relatifs a l'unite */ - if( CurrentUnit && DrawEntry->m_Unit - && ( DrawEntry->m_Unit != CurrentUnit ) ) + if( m_unit && DrawEntry->m_Unit + && ( DrawEntry->m_Unit != m_unit ) ) continue; - if( CurrentConvert && DrawEntry->m_Convert - && ( DrawEntry->m_Convert != CurrentConvert ) ) + if( m_convert && DrawEntry->m_Convert + && ( DrawEntry->m_Convert != m_convert ) ) continue; DrawEntry->Save( ExportFile ); @@ -244,21 +243,21 @@ void WinEDA_LibeditFrame::SaveOneSymbol() /***************************************************************************/ /* Routine de placement du point d'ancrage ( reference des coordonnes pour */ -/* le trace) du composant courant */ -/* Toutes les coord apparaissant dans les structures sont modifiees */ -/* pour repositionner le point repere par le curseur souris au point */ +/* le trace) du composant courant */ +/* Toutes les coord apparaissant dans les structures sont modifiees */ +/* pour repositionner le point repere par le curseur souris au point */ /* d'ancrage ( coord 0,0 ). */ /***************************************************************************/ void WinEDA_LibeditFrame::PlaceAncre() { - if( m_currentComponent == NULL ) + if( m_component == NULL ) return; wxPoint offset( -GetScreen()->m_Curseur.x, GetScreen()->m_Curseur.y ); GetScreen()->SetModify(); - m_currentComponent->SetOffset( offset ); + m_component->SetOffset( offset ); /* Redraw the symbol */ GetScreen()->m_Curseur.x = GetScreen()->m_Curseur.y = 0; diff --git a/eeschema/tool_lib.cpp b/eeschema/tool_lib.cpp index 8bce36ac56..4771dc363b 100644 --- a/eeschema/tool_lib.cpp +++ b/eeschema/tool_lib.cpp @@ -9,7 +9,6 @@ #include "eeschema_id.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libeditfrm.h" diff --git a/eeschema/tool_sch.cpp b/eeschema/tool_sch.cpp index 2fab94c00b..08dbbfc02a 100644 --- a/eeschema/tool_sch.cpp +++ b/eeschema/tool_sch.cpp @@ -6,14 +6,12 @@ #include "common.h" #include "class_drawpanel.h" #include "confirm.h" +#include "bitmaps.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "hotkeys.h" - -#include "bitmaps.h" #include "eeschema_id.h" diff --git a/eeschema/tool_viewlib.cpp b/eeschema/tool_viewlib.cpp index a2edbb971c..3aa7806288 100644 --- a/eeschema/tool_viewlib.cpp +++ b/eeschema/tool_viewlib.cpp @@ -8,7 +8,6 @@ #include "eeschema_id.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "class_library.h" diff --git a/eeschema/viewlib_frame.cpp b/eeschema/viewlib_frame.cpp index d8e588585e..64f25c0f44 100644 --- a/eeschema/viewlib_frame.cpp +++ b/eeschema/viewlib_frame.cpp @@ -10,10 +10,10 @@ #include "bitmaps.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libviewfrm.h" +#include "class_library.h" /*****************************/ @@ -135,7 +135,6 @@ WinEDA_ViewlibFrame::WinEDA_ViewlibFrame( wxWindow* father, wxT( "CmpWindow" ) ); m_CmpListWindow->SetOrientation( wxLAYOUT_VERTICAL ); -// m_CmpListWindow->SetAlignment( wxLAYOUT_LEFT ); m_CmpListWindow->SetSashVisible( wxSASH_RIGHT, TRUE ); m_CmpListWindow->SetExtraBorderSize( EXTRA_BORDER_SIZE ); m_CmpList = new wxListBox( m_CmpListWindow, ID_LIBVIEW_CMP_LIST, @@ -154,13 +153,8 @@ WinEDA_ViewlibFrame::WinEDA_ViewlibFrame( wxWindow* father, } -/*******************************************/ WinEDA_ViewlibFrame::~WinEDA_ViewlibFrame() -/*******************************************/ { - delete GetScreen(); - SetBaseScreen( 0 ); - WinEDA_SchematicFrame* frame = (WinEDA_SchematicFrame*) wxGetApp().GetTopWindow(); frame->m_ViewlibFrame = NULL; diff --git a/eeschema/viewlibs.cpp b/eeschema/viewlibs.cpp index ca6e14d448..06255755ae 100644 --- a/eeschema/viewlibs.cpp +++ b/eeschema/viewlibs.cpp @@ -11,11 +11,11 @@ #include "eda_doc.h" #include "program.h" -#include "libcmp.h" #include "general.h" #include "protos.h" #include "libviewfrm.h" #include "eeschema_id.h" +#include "class_library.h" #define NEXT_PART 1 @@ -28,10 +28,6 @@ void WinEDA_ViewlibFrame::Process_Special_Functions( wxCommandEvent& event ) wxString msg; CMP_LIB_ENTRY* LibEntry; int ii, id = event.GetId(); - wxPoint pos; - - wxGetMousePosition( &pos.x, &pos.y ); - pos.y += 20; switch( id ) { diff --git a/include/base_struct.h b/include/base_struct.h index f97dbfcdcd..800add3e9b 100644 --- a/include/base_struct.h +++ b/include/base_struct.h @@ -277,6 +277,7 @@ public: EDA_BaseStruct( EDA_BaseStruct* parent, KICAD_T idType ); EDA_BaseStruct( KICAD_T idType ); + EDA_BaseStruct( const EDA_BaseStruct& base ); virtual ~EDA_BaseStruct() { }; /** diff --git a/include/wxEeschemaStruct.h b/include/wxEeschemaStruct.h index 7757684f9c..b9e0accf4a 100644 --- a/include/wxEeschemaStruct.h +++ b/include/wxEeschemaStruct.h @@ -21,7 +21,7 @@ class DrawNoConnectStruct; class CMP_LIBRARY; class LIB_COMPONENT; class CMP_LIB_ENTRY; -class LibEDA_BaseStruct; +class LIB_DRAW_ITEM; class EDA_BaseStruct; class DrawBusEntryStruct; class SCH_GLOBALLABEL;