diff --git a/change_log.txt b/change_log.txt index 0f4b481923..2db357e767 100644 --- a/change_log.txt +++ b/change_log.txt @@ -10,7 +10,15 @@ email address. + pcbnew * controle.cpp, added Function AllAreModulesAndReturnSmallestIfSo() which is called from PcbGeneralLocateAndDisplay() - * onrightclick.cpp changed to calls to BOARD_ITEM::MenuText() + * onrightclick.cpp changed to calls to BOARD_ITEM::MenuText(), and switched + to member functions for createPopupMenus() so we can get all the state + information we need for the proper menus. + * BOARD_ITEM::MenuText() got new argument BOARD*, and elaboration for + TRACKs and VIAs and Pcb Graphics. + * Fixed a problem in GENERAL_COLLECTOR::Inspect() so it now knows that MODULEs + have their own visibility controls (same for pads and pcb texts). This + interpretation must always match the drawing code's interpretation. + * Made TRACK::TRACK( const TRACK& ) protected to enforce use of TRACK::Copy() 2007-Sep-13 UPDATE Dick Hollenbeck diff --git a/eeschema/edit_component_in_schematic.cpp b/eeschema/edit_component_in_schematic.cpp index 430627c9ef..671ed4a8fa 100644 --- a/eeschema/edit_component_in_schematic.cpp +++ b/eeschema/edit_component_in_schematic.cpp @@ -53,7 +53,8 @@ void InstallCmpeditFrame( WinEDA_SchematicFrame* parent, wxPoint& pos, { WinEDA_ComponentPropertiesFrame* frame = new WinEDA_ComponentPropertiesFrame( parent, cmp ); - frame->ShowModal(); frame->Destroy(); + frame->ShowModal(); + frame->Destroy(); } parent->DrawPanel->MouseToCursorSchema(); diff --git a/eeschema/editpart.cpp b/eeschema/editpart.cpp index 49d5a9f9f4..1a282267e6 100644 --- a/eeschema/editpart.cpp +++ b/eeschema/editpart.cpp @@ -125,7 +125,8 @@ void InstallCmpeditFrame( WinEDA_SchematicFrame* parent, wxPoint& pos, { WinEDA_ComponentPropertiesFrame* frame = new WinEDA_ComponentPropertiesFrame( parent, pos, cmp ); - frame->ShowModal(); frame->Destroy(); + frame->ShowModal(); + frame->Destroy(); } parent->DrawPanel->m_IgnoreMouseEvents = FALSE; } diff --git a/eeschema/find.cpp b/eeschema/find.cpp index 596194185b..730c043af5 100644 --- a/eeschema/find.cpp +++ b/eeschema/find.cpp @@ -341,7 +341,7 @@ EDA_BaseStruct* WinEDA_SchematicFrame::FindSchematicItem( } /* If the struct found is a DRAW_LIB_ITEM_STRUCT_TYPE type, - * coordinates must be computed according to its orientation matrix + * coordinates must be computed according to its orientation matrix */ if( Struct->Type() == DRAW_LIB_ITEM_STRUCT_TYPE ) { @@ -519,7 +519,8 @@ int WinEDA_FindFrame::ExploreAllLibraries( const wxString& wildmask, wxString& F while( GetLine( file, Line, &LineNum, sizeof(Line) ) ) { if( strnicmp( Line, "DEF", 3 ) == 0 ) - { /* Read one DEF part from library: DEF 74LS00 U 0 30 Y Y 4 0 N */ + { + /* Read one DEF part from library: DEF 74LS00 U 0 30 Y Y 4 0 N */ strtok( Line, " \t\r\n" ); name = strtok( NULL, " \t\r\n" ); wxString st_name = CONV_FROM_UTF8( name ); @@ -533,7 +534,8 @@ int WinEDA_FindFrame::ExploreAllLibraries( const wxString& wildmask, wxString& F } } else if( strnicmp( Line, "ALIAS", 5 ) == 0 ) - { /* Read one ALIAS part from library: ALIAS 74HC00 74HCT00 7400 74LS37 */ + { + /* Read one ALIAS part from library: ALIAS 74HC00 74HCT00 7400 74LS37 */ strtok( Line, " \t\r\n" ); while( ( name = strtok( NULL, " \t\r\n" ) ) != NULL ) { diff --git a/eeschema/libedit_onleftclick.cpp b/eeschema/libedit_onleftclick.cpp index 4126a293ec..8cbb38069f 100644 --- a/eeschema/libedit_onleftclick.cpp +++ b/eeschema/libedit_onleftclick.cpp @@ -1,9 +1,9 @@ - /*****************************************/ - /* EESchema - libedit_onleftclick.cpp */ - /*****************************************/ +/*****************************************/ +/* EESchema - libedit_onleftclick.cpp */ +/*****************************************/ /* Library editor commands created by a mouse left button simple or double click -*/ + */ #include "fctsys.h" #include "gr_basic.h" @@ -20,273 +20,284 @@ /************************************************************************/ -void WinEDA_LibeditFrame::OnLeftClick(wxDC * DC, const wxPoint& MousePos) +void WinEDA_LibeditFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) /************************************************************************/ { -LibEDA_BaseStruct* DrawEntry = CurrentDrawItem; + LibEDA_BaseStruct* DrawEntry = CurrentDrawItem; - if( CurrentLibEntry == NULL) return; + if( CurrentLibEntry == NULL ) + return; - if ( m_ID_current_state == 0 ) - { - if ( DrawEntry && DrawEntry->m_Flags ) - { - SaveCopyInUndoList(CurrentLibEntry); - switch (DrawEntry->Type() ) - { - case COMPONENT_PIN_DRAW_TYPE: - PlacePin(DC); - break; + if( m_ID_current_state == 0 ) + { + if( DrawEntry && DrawEntry->m_Flags ) + { + SaveCopyInUndoList( CurrentLibEntry ); - case COMPONENT_FIELD_DRAW_TYPE: - PlaceField(DC, (LibDrawField *) DrawEntry); - DrawEntry = NULL; - break; + switch( DrawEntry->Type() ) + { + case COMPONENT_PIN_DRAW_TYPE: + PlacePin( DC ); + break; - default: - EndDrawGraphicItem(DC); - break; - } - } - else - { - DrawEntry = LocatePin(m_CurrentScreen->m_MousePosition, CurrentLibEntry, - CurrentUnit, CurrentConvert); - if (DrawEntry == NULL ) - { - DrawEntry = LocateDrawItem(GetScreen(), GetScreen()->m_MousePosition, - CurrentLibEntry,CurrentUnit, - CurrentConvert,LOCATE_ALL_DRAW_ITEM); - } + case COMPONENT_FIELD_DRAW_TYPE: + PlaceField( DC, (LibDrawField*) DrawEntry ); + DrawEntry = NULL; + break; - if (DrawEntry == NULL ) - DrawEntry = LocatePin(m_CurrentScreen->m_Curseur, CurrentLibEntry, - CurrentUnit, CurrentConvert); - if (DrawEntry == NULL ) - { - DrawEntry = LocateDrawItem(GetScreen(), GetScreen()->m_Curseur, - CurrentLibEntry,CurrentUnit, - CurrentConvert,LOCATE_ALL_DRAW_ITEM); - } + default: + EndDrawGraphicItem( DC ); + break; + } + } + else + { + DrawEntry = LocatePin( m_CurrentScreen->m_MousePosition, CurrentLibEntry, + CurrentUnit, CurrentConvert ); + if( DrawEntry == NULL ) + { + DrawEntry = LocateDrawItem( GetScreen(), GetScreen()->m_MousePosition, + CurrentLibEntry, CurrentUnit, + CurrentConvert, LOCATE_ALL_DRAW_ITEM ); + } - if ( DrawEntry ) DrawEntry->Display_Infos_DrawEntry(this); + if( DrawEntry == NULL ) + DrawEntry = LocatePin( m_CurrentScreen->m_Curseur, CurrentLibEntry, + CurrentUnit, CurrentConvert ); + if( DrawEntry == NULL ) + { + DrawEntry = LocateDrawItem( GetScreen(), GetScreen()->m_Curseur, + CurrentLibEntry, CurrentUnit, + CurrentConvert, LOCATE_ALL_DRAW_ITEM ); + } - else - { - EraseMsgBox(); - AfficheDoc(this, CurrentLibEntry->m_Doc.GetData(), - CurrentLibEntry->m_KeyWord.GetData()); - } - } - } + if( DrawEntry ) + DrawEntry->Display_Infos_DrawEntry( this ); - if ( m_ID_current_state ) - { - switch ( m_ID_current_state ) - { - case ID_NO_SELECT_BUTT: - break; + else + { + EraseMsgBox(); + AfficheDoc( this, CurrentLibEntry->m_Doc.GetData(), + CurrentLibEntry->m_KeyWord.GetData() ); + } + } + } - case ID_LIBEDIT_PIN_BUTT : - if( CurrentDrawItem == NULL ) - { - CreatePin(DC); - } - else - { - SaveCopyInUndoList(CurrentLibEntry); - PlacePin(DC); - } - break; + if( m_ID_current_state ) + { + switch( m_ID_current_state ) + { + case ID_NO_SELECT_BUTT: + break; - case ID_LIBEDIT_BODY_LINE_BUTT : - case ID_LIBEDIT_BODY_ARC_BUTT : - case ID_LIBEDIT_BODY_CIRCLE_BUTT : - case ID_LIBEDIT_BODY_RECT_BUTT : - case ID_LIBEDIT_BODY_TEXT_BUTT : - if ( CurrentDrawItem == NULL) - { - CurrentDrawItem = CreateGraphicItem(DC); - } - else - { - if ( CurrentDrawItem->m_Flags & IS_NEW ) - GraphicItemBeginDraw(DC); - else - { - SaveCopyInUndoList(CurrentLibEntry); - EndDrawGraphicItem(DC); - } - } - break; + case ID_LIBEDIT_PIN_BUTT: + if( CurrentDrawItem == NULL ) + { + CreatePin( DC ); + } + else + { + SaveCopyInUndoList( CurrentLibEntry ); + PlacePin( DC ); + } + break; - case ID_LIBEDIT_DELETE_ITEM_BUTT : - DrawEntry = LocatePin(m_CurrentScreen->m_MousePosition, CurrentLibEntry, - CurrentUnit, CurrentConvert); - if (DrawEntry == NULL ) - { - DrawEntry = LocateDrawItem(GetScreen(), m_CurrentScreen->m_MousePosition, - CurrentLibEntry,CurrentUnit, - CurrentConvert,LOCATE_ALL_DRAW_ITEM); - } + case ID_LIBEDIT_BODY_LINE_BUTT: + case ID_LIBEDIT_BODY_ARC_BUTT: + case ID_LIBEDIT_BODY_CIRCLE_BUTT: + case ID_LIBEDIT_BODY_RECT_BUTT: + case ID_LIBEDIT_BODY_TEXT_BUTT: + if( CurrentDrawItem == NULL ) + { + CurrentDrawItem = CreateGraphicItem( DC ); + } + else + { + if( CurrentDrawItem->m_Flags & IS_NEW ) + GraphicItemBeginDraw( DC ); + else + { + SaveCopyInUndoList( CurrentLibEntry ); + EndDrawGraphicItem( DC ); + } + } + break; - if (DrawEntry == NULL ) - DrawEntry = LocatePin(m_CurrentScreen->m_Curseur, CurrentLibEntry, - CurrentUnit, CurrentConvert); - if (DrawEntry == NULL ) - { - DrawEntry = LocateDrawItem(GetScreen(), m_CurrentScreen->m_Curseur, - CurrentLibEntry,CurrentUnit, - CurrentConvert,LOCATE_ALL_DRAW_ITEM); - } - if ( DrawEntry == NULL ) - { - AfficheDoc(this, CurrentLibEntry->m_Doc.GetData(), - CurrentLibEntry->m_KeyWord.GetData()); - break; - } - SaveCopyInUndoList(CurrentLibEntry); - if ( DrawEntry->Type() == COMPONENT_PIN_DRAW_TYPE ) - DeletePin(DC, CurrentLibEntry, (LibDrawPin*)DrawEntry); - else - DeleteOneLibraryDrawStruct(DrawPanel, DC, CurrentLibEntry,DrawEntry, TRUE); - DrawEntry = NULL; - m_CurrentScreen->SetModify(); - break; + case ID_LIBEDIT_DELETE_ITEM_BUTT: + DrawEntry = LocatePin( m_CurrentScreen->m_MousePosition, CurrentLibEntry, + CurrentUnit, CurrentConvert ); + if( DrawEntry == NULL ) + { + DrawEntry = LocateDrawItem( GetScreen(), m_CurrentScreen->m_MousePosition, + CurrentLibEntry, CurrentUnit, + CurrentConvert, LOCATE_ALL_DRAW_ITEM ); + } - case ID_LIBEDIT_ANCHOR_ITEM_BUTT : - SaveCopyInUndoList(CurrentLibEntry); - PlaceAncre(); - SetToolID( 0, wxCURSOR_ARROW, wxEmptyString); - break; + if( DrawEntry == NULL ) + DrawEntry = LocatePin( m_CurrentScreen->m_Curseur, CurrentLibEntry, + CurrentUnit, CurrentConvert ); + if( DrawEntry == NULL ) + { + DrawEntry = LocateDrawItem( GetScreen(), m_CurrentScreen->m_Curseur, + CurrentLibEntry, CurrentUnit, + CurrentConvert, LOCATE_ALL_DRAW_ITEM ); + } + if( DrawEntry == NULL ) + { + AfficheDoc( this, CurrentLibEntry->m_Doc.GetData(), + CurrentLibEntry->m_KeyWord.GetData() ); + break; + } + SaveCopyInUndoList( CurrentLibEntry ); + if( DrawEntry->Type() == COMPONENT_PIN_DRAW_TYPE ) + DeletePin( DC, CurrentLibEntry, (LibDrawPin*) DrawEntry ); + else + DeleteOneLibraryDrawStruct( DrawPanel, DC, CurrentLibEntry, DrawEntry, TRUE ); + DrawEntry = NULL; + m_CurrentScreen->SetModify(); + break; + + case ID_LIBEDIT_ANCHOR_ITEM_BUTT: + SaveCopyInUndoList( CurrentLibEntry ); + PlaceAncre(); + SetToolID( 0, wxCURSOR_ARROW, wxEmptyString ); + break; - default : - DisplayError(this, wxT("WinEDA_LibeditFrame::OnLeftClick error") ); - SetToolID( 0, wxCURSOR_ARROW, wxEmptyString); - break; - } - } + default: + DisplayError( this, wxT( "WinEDA_LibeditFrame::OnLeftClick error" ) ); + SetToolID( 0, wxCURSOR_ARROW, wxEmptyString ); + break; + } + } } /*************************************************************************/ -void WinEDA_LibeditFrame::OnLeftDClick(wxDC * DC, const wxPoint& MousePos) +void WinEDA_LibeditFrame::OnLeftDClick( wxDC* DC, const wxPoint& MousePos ) /*************************************************************************/ + /* Appelé sur un double click: - pour un élément editable (textes, composant): - appel de l'editeur correspondant. - pour une connexion en cours: - termine la connexion -*/ + * pour un élément editable (textes, composant): + * appel de l'editeur correspondant. + * pour une connexion en cours: + * termine la connexion + */ { -wxPoint pos = GetPosition(); -LibEDA_BaseStruct* DrawEntry = CurrentDrawItem; + wxPoint pos = GetPosition(); + LibEDA_BaseStruct* DrawEntry = CurrentDrawItem; - if ( CurrentLibEntry == NULL ) return; + if( CurrentLibEntry == NULL ) + return; - if ( !m_ID_current_state || // Simple localisation des elements - (DrawEntry == NULL) || (DrawEntry->m_Flags == 0) ) - { - DrawEntry = LocatePin(m_CurrentScreen->m_MousePosition, CurrentLibEntry, - CurrentUnit, CurrentConvert); - if ( DrawEntry == NULL ) - DrawEntry = LocatePin(m_CurrentScreen->m_Curseur, CurrentLibEntry, - CurrentUnit, CurrentConvert); - if ( DrawEntry == NULL ) - { - DrawEntry = CurrentDrawItem = LocateDrawItem((SCH_SCREEN*)m_CurrentScreen, - m_CurrentScreen->m_MousePosition,CurrentLibEntry,CurrentUnit, - CurrentConvert,LOCATE_ALL_DRAW_ITEM); - } - if ( DrawEntry == NULL ) - { - DrawEntry = CurrentDrawItem = LocateDrawItem((SCH_SCREEN*)m_CurrentScreen, - m_CurrentScreen->m_Curseur, CurrentLibEntry,CurrentUnit, - CurrentConvert,LOCATE_ALL_DRAW_ITEM); - } - if ( DrawEntry == NULL ) - { - DrawEntry = CurrentDrawItem = (LibEDA_BaseStruct*) - LocateField(CurrentLibEntry); - } - if ( DrawEntry == NULL ) - { - wxPoint mpos; - wxGetMousePosition(&mpos.x, &mpos.y); - InstallLibeditFrame(mpos); - } - } + if( !m_ID_current_state // Simple localisation des elements + || (DrawEntry == NULL) || (DrawEntry->m_Flags == 0) ) + { + DrawEntry = LocatePin( m_CurrentScreen->m_MousePosition, CurrentLibEntry, + CurrentUnit, CurrentConvert ); + if( DrawEntry == NULL ) + DrawEntry = LocatePin( m_CurrentScreen->m_Curseur, CurrentLibEntry, + CurrentUnit, CurrentConvert ); + if( DrawEntry == NULL ) + { + DrawEntry = CurrentDrawItem = LocateDrawItem( (SCH_SCREEN*) m_CurrentScreen, + m_CurrentScreen->m_MousePosition, + CurrentLibEntry, CurrentUnit, + CurrentConvert, + LOCATE_ALL_DRAW_ITEM ); + } + if( DrawEntry == NULL ) + { + DrawEntry = CurrentDrawItem = LocateDrawItem( (SCH_SCREEN*) m_CurrentScreen, + m_CurrentScreen->m_Curseur, + CurrentLibEntry, CurrentUnit, + CurrentConvert, + LOCATE_ALL_DRAW_ITEM ); + } + if( DrawEntry == NULL ) + { + DrawEntry = CurrentDrawItem = (LibEDA_BaseStruct*) + LocateField( CurrentLibEntry ); + } + if( DrawEntry == NULL ) + { + wxPoint mpos; + wxGetMousePosition( &mpos.x, &mpos.y ); + InstallLibeditFrame( mpos ); + } + } - // Si Commande en cours: affichage commande d'annulation - if ( m_ID_current_state ) - { - } + // Si Commande en cours: affichage commande d'annulation + if( m_ID_current_state ) + { + } + else + { + } - else - { - } + if( DrawEntry ) + DrawEntry->Display_Infos_DrawEntry( this ); + else + return; - if ( DrawEntry ) DrawEntry->Display_Infos_DrawEntry(this); - else return; + CurrentDrawItem = DrawEntry; - CurrentDrawItem = DrawEntry; + DrawPanel->m_IgnoreMouseEvents = TRUE; - DrawPanel->m_IgnoreMouseEvents = TRUE; - switch ( DrawEntry->Type() ) - { - case COMPONENT_PIN_DRAW_TYPE: - if( DrawEntry->m_Flags == 0 ) // Item localisé et non en edition: placement commande move - { - InstallPineditFrame(this, DC, pos); - } - break; + switch( DrawEntry->Type() ) + { + case COMPONENT_PIN_DRAW_TYPE: + if( DrawEntry->m_Flags == 0 ) // Item localisé et non en edition: placement commande move + { + InstallPineditFrame( this, DC, pos ); + } + break; - case COMPONENT_ARC_DRAW_TYPE: - case COMPONENT_CIRCLE_DRAW_TYPE: - case COMPONENT_RECT_DRAW_TYPE: - if( DrawEntry->m_Flags == 0 ) - { - EditGraphicSymbol(DC, DrawEntry); - } - break; + case COMPONENT_ARC_DRAW_TYPE: + case COMPONENT_CIRCLE_DRAW_TYPE: + case COMPONENT_RECT_DRAW_TYPE: + if( DrawEntry->m_Flags == 0 ) + { + EditGraphicSymbol( DC, DrawEntry ); + } + break; - case COMPONENT_LINE_DRAW_TYPE: - case COMPONENT_POLYLINE_DRAW_TYPE: - if( DrawEntry->m_Flags == 0 ) - { - EditGraphicSymbol(DC, DrawEntry); - } - else if( DrawEntry->m_Flags & IS_NEW ) - { - EndDrawGraphicItem(DC); - } - break; + case COMPONENT_LINE_DRAW_TYPE: + case COMPONENT_POLYLINE_DRAW_TYPE: + if( DrawEntry->m_Flags == 0 ) + { + EditGraphicSymbol( DC, DrawEntry ); + } + else if( DrawEntry->m_Flags & IS_NEW ) + { + EndDrawGraphicItem( DC ); + } + break; - case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE: - if( DrawEntry->m_Flags == 0 ) - { - EditSymbolText(DC, DrawEntry); - } - break; + case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE: + if( DrawEntry->m_Flags == 0 ) + { + EditSymbolText( DC, DrawEntry ); + } + break; - case COMPONENT_FIELD_DRAW_TYPE: - if( DrawEntry->m_Flags == 0 ) - { - EditField(DC, (LibDrawField *)DrawEntry); - } - break; + case COMPONENT_FIELD_DRAW_TYPE: + if( DrawEntry->m_Flags == 0 ) + { + EditField( DC, (LibDrawField*) DrawEntry ); + } + break; - default: - wxString msg; - msg.Printf( - wxT("WinEDA_LibeditFrame::OnLeftDClick Error: unknown StructType %d"), - DrawEntry->Type()); - DisplayError(this, msg ); - break; - } - DrawPanel->MouseToCursorSchema(); - DrawPanel->m_IgnoreMouseEvents = FALSE; + default: + wxString msg; + msg.Printf( + wxT( "WinEDA_LibeditFrame::OnLeftDClick Error: unknown StructType %d" ), + DrawEntry->Type() ); + DisplayError( this, msg ); + break; + } + + DrawPanel->MouseToCursorSchema(); + DrawPanel->m_IgnoreMouseEvents = FALSE; } - diff --git a/eeschema/libframe.cpp b/eeschema/libframe.cpp index 5b4e4dd5fe..2601457f57 100644 --- a/eeschema/libframe.cpp +++ b/eeschema/libframe.cpp @@ -1,9 +1,9 @@ - /****************************/ - /* EESchema - libframe.cpp */ - /****************************/ +/****************************/ +/* EESchema - libframe.cpp */ +/****************************/ /* Gestion de la frame d'edition des composants en librairie -*/ + */ #include "fctsys.h" #include "gr_basic.h" @@ -20,682 +20,712 @@ #include "libedit.xpm" - /*****************************/ - /* class WinEDA_LibeditFrame */ - /*****************************/ -BEGIN_EVENT_TABLE(WinEDA_LibeditFrame, wxFrame) - COMMON_EVENTS_DRAWFRAME +/*****************************/ +/* class WinEDA_LibeditFrame */ +/*****************************/ +BEGIN_EVENT_TABLE( WinEDA_LibeditFrame, wxFrame ) +COMMON_EVENTS_DRAWFRAME EVT_CLOSE( WinEDA_LibeditFrame::OnCloseWindow ) +EVT_SIZE( WinEDA_LibeditFrame::OnSize ) - EVT_CLOSE(WinEDA_LibeditFrame::OnCloseWindow) - EVT_SIZE(WinEDA_LibeditFrame::OnSize) +EVT_TOOL_RANGE( ID_ZOOM_PLUS_BUTT, ID_ZOOM_PAGE_BUTT, + WinEDA_LibeditFrame::Process_Zoom ) - EVT_TOOL_RANGE(ID_ZOOM_PLUS_BUTT, ID_ZOOM_PAGE_BUTT, - WinEDA_LibeditFrame::Process_Zoom) +// Tools et boutons de Libedit: - // Tools et boutons de Libedit: +/* Main horizontal toolbar */ +EVT_TOOL_RANGE( ID_LIBEDIT_START_H_TOOL, ID_LIBEDIT_END_H_TOOL, + WinEDA_LibeditFrame::Process_Special_Functions ) +EVT_KICAD_CHOICEBOX( ID_LIBEDIT_SELECT_PART_NUMBER, + WinEDA_LibeditFrame::Process_Special_Functions ) +EVT_KICAD_CHOICEBOX( ID_LIBEDIT_SELECT_ALIAS, + WinEDA_LibeditFrame::Process_Special_Functions ) - /* Main horizontal toolbar */ - EVT_TOOL_RANGE( ID_LIBEDIT_START_H_TOOL, ID_LIBEDIT_END_H_TOOL, - WinEDA_LibeditFrame::Process_Special_Functions) - EVT_KICAD_CHOICEBOX(ID_LIBEDIT_SELECT_PART_NUMBER, - WinEDA_LibeditFrame::Process_Special_Functions) - EVT_KICAD_CHOICEBOX(ID_LIBEDIT_SELECT_ALIAS, - WinEDA_LibeditFrame::Process_Special_Functions) +/* Right Vertical toolbar */ +EVT_TOOL( ID_NO_SELECT_BUTT, WinEDA_LibeditFrame::Process_Special_Functions ) +EVT_TOOL_RANGE( ID_LIBEDIT_START_V_TOOL, ID_LIBEDIT_END_V_TOOL, + WinEDA_LibeditFrame::Process_Special_Functions ) - /* Right Vertical toolbar */ - EVT_TOOL( ID_NO_SELECT_BUTT,WinEDA_LibeditFrame::Process_Special_Functions) - EVT_TOOL_RANGE( ID_LIBEDIT_START_V_TOOL, ID_LIBEDIT_END_V_TOOL, - WinEDA_LibeditFrame::Process_Special_Functions) +/* PopUp events and commands: */ +EVT_MENU_RANGE( ID_POPUP_START_RANGE, ID_POPUP_END_RANGE, + WinEDA_LibeditFrame::Process_Special_Functions ) - /* PopUp events and commands: */ - EVT_MENU_RANGE(ID_POPUP_START_RANGE, ID_POPUP_END_RANGE, - WinEDA_LibeditFrame::Process_Special_Functions ) +// Annulation de commande en cours +EVT_MENU_RANGE( ID_POPUP_GENERAL_START_RANGE, ID_POPUP_GENERAL_END_RANGE, + WinEDA_LibeditFrame::Process_Special_Functions ) - // Annulation de commande en cours - EVT_MENU_RANGE(ID_POPUP_GENERAL_START_RANGE, ID_POPUP_GENERAL_END_RANGE, - WinEDA_LibeditFrame::Process_Special_Functions ) - - // PopUp Menus pour Zooms traités dans drawpanel.cpp +// PopUp Menus pour Zooms traités dans drawpanel.cpp END_EVENT_TABLE() -WinEDA_LibeditFrame::WinEDA_LibeditFrame(wxWindow * father, WinEDA_App *parent, - const wxString & title, const wxPoint& pos, const wxSize& size): - WinEDA_DrawFrame(father, LIBEDITOR_FRAME, parent, title, pos, size) +WinEDA_LibeditFrame::WinEDA_LibeditFrame( wxWindow* father, + WinEDA_App* parent, + const wxString& title, + const wxPoint& pos, + const wxSize& size ) : + WinEDA_DrawFrame( father, LIBEDITOR_FRAME, parent, title, pos, size ) { - m_FrameName = wxT("LibeditFrame"); - m_Draw_Axis = TRUE; // TRUE pour avoir les axes dessines - m_Draw_Grid = TRUE; // TRUE pour avoir la axes dessinee + m_FrameName = wxT( "LibeditFrame" ); + m_Draw_Axis = TRUE; // TRUE pour avoir les axes dessines + m_Draw_Grid = TRUE; // TRUE pour avoir la axes dessinee - // Give an icon - SetIcon(wxIcon(libedit_xpm)); - m_CurrentScreen = ScreenLib; - GetSettings(); - SetSize(m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y); - if ( DrawPanel ) DrawPanel-> m_Block_Enable = TRUE; - ReCreateHToolbar(); - ReCreateVToolbar(); - DisplayLibInfos(); - Show(TRUE); + // Give an icon + SetIcon( wxIcon( libedit_xpm ) ); + m_CurrentScreen = ScreenLib; + GetSettings(); + SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y ); + if( DrawPanel ) + DrawPanel->m_Block_Enable = TRUE; + ReCreateHToolbar(); + ReCreateVToolbar(); + DisplayLibInfos(); + Show( TRUE ); } + /**********************************************/ WinEDA_LibeditFrame::~WinEDA_LibeditFrame() /**********************************************/ { - m_Parent->LibeditFrame = NULL; - m_CurrentScreen = ScreenSch; - + m_Parent->LibeditFrame = NULL; + m_CurrentScreen = ScreenSch; } + /***********************************************************/ -void WinEDA_LibeditFrame::OnCloseWindow(wxCloseEvent & Event) +void WinEDA_LibeditFrame::OnCloseWindow( wxCloseEvent& Event ) /***********************************************************/ { -LibraryStruct *Lib; + LibraryStruct* Lib; - if( m_CurrentScreen->IsModify() ) - { - if( ! IsOK(this, _("LibEdit: Part modified!, Continue ?") ) ) - { - Event.Veto(); return; - } - else m_CurrentScreen->ClrModify(); - } + if( m_CurrentScreen->IsModify() ) + { + if( !IsOK( this, _( "LibEdit: Part modified!, Continue ?" ) ) ) + { + Event.Veto(); return; + } + else + m_CurrentScreen->ClrModify(); + } - for (Lib = g_LibraryList; Lib != NULL; Lib = Lib->m_Pnext) - { - if( Lib->m_Modified ) - { - wxString msg; - msg.Printf( _("Library %s modified!, Continue ?"), Lib->m_Name.GetData()); - if( ! IsOK(this, msg) ) - { - Event.Veto(); return; - } - } - } + for( Lib = g_LibraryList; Lib != NULL; Lib = Lib->m_Pnext ) + { + if( Lib->m_Modified ) + { + wxString msg; + msg.Printf( _( "Library %s modified!, Continue ?" ), Lib->m_Name.GetData() ); + if( !IsOK( this, msg ) ) + { + Event.Veto(); return; + } + } + } - SaveSettings(); - Destroy(); + SaveSettings(); + Destroy(); } /******************************************/ void WinEDA_LibeditFrame::SetToolbars() /******************************************/ + /* Enable or disable tools of the differents toolbars, - according to the current conditions or options -*/ + * according to the current conditions or options + */ { + if( m_HToolBar == NULL ) + return; - if( m_HToolBar == NULL ) return; + if( CurrentLib == NULL ) + { + if( m_HToolBar ) + m_HToolBar->EnableTool( ID_LIBEDIT_SAVE_CURRENT_LIB, FALSE ); + } + else + { + if( m_HToolBar ) + m_HToolBar->EnableTool( ID_LIBEDIT_SAVE_CURRENT_LIB, TRUE ); + } - if ( CurrentLib == NULL ) - { - if ( m_HToolBar ) m_HToolBar->EnableTool(ID_LIBEDIT_SAVE_CURRENT_LIB,FALSE); - } - else - { - if ( m_HToolBar ) m_HToolBar->EnableTool(ID_LIBEDIT_SAVE_CURRENT_LIB,TRUE); - } + if( CurrentLibEntry == NULL ) + { + if( m_HToolBar ) + { + m_HToolBar->EnableTool( ID_LIBEDIT_IMPORT_PART, TRUE ); + m_HToolBar->EnableTool( ID_LIBEDIT_EXPORT_PART, FALSE ); + m_HToolBar->EnableTool( ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART, FALSE ); + m_HToolBar->EnableTool( ID_LIBEDIT_SAVE_CURRENT_PART, FALSE ); + m_HToolBar->EnableTool( ID_DE_MORGAN_CONVERT_BUTT, FALSE ); + m_HToolBar->EnableTool( ID_DE_MORGAN_NORMAL_BUTT, FALSE ); + m_HToolBar->EnableTool( ID_LIBEDIT_EDIT_PIN_BY_PIN, FALSE ); + m_HToolBar->EnableTool( ID_LIBEDIT_VIEW_DOC, FALSE ); + m_HToolBar->EnableTool( ID_LIBEDIT_CHECK_PART, FALSE ); + m_SelpartBox->Enable( FALSE ); + m_HToolBar->EnableTool( ID_LIBEDIT_UNDO, FALSE ); + m_HToolBar->EnableTool( ID_LIBEDIT_REDO, FALSE ); + } + g_EditPinByPinIsOn = FALSE; + m_HToolBar->ToggleTool( ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn ); - if ( CurrentLibEntry == NULL ) - { - if ( m_HToolBar ) - { - m_HToolBar->EnableTool(ID_LIBEDIT_IMPORT_PART,TRUE); - m_HToolBar->EnableTool(ID_LIBEDIT_EXPORT_PART,FALSE); - m_HToolBar->EnableTool(ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART,FALSE); - m_HToolBar->EnableTool(ID_LIBEDIT_SAVE_CURRENT_PART,FALSE); - m_HToolBar->EnableTool(ID_DE_MORGAN_CONVERT_BUTT, FALSE); - m_HToolBar->EnableTool(ID_DE_MORGAN_NORMAL_BUTT, FALSE); - m_HToolBar->EnableTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, FALSE); - m_HToolBar->EnableTool(ID_LIBEDIT_VIEW_DOC, FALSE); - m_HToolBar->EnableTool(ID_LIBEDIT_CHECK_PART, FALSE); - m_SelpartBox->Enable( FALSE); - m_HToolBar->EnableTool(ID_LIBEDIT_UNDO,FALSE); - m_HToolBar->EnableTool(ID_LIBEDIT_REDO,FALSE); - } - g_EditPinByPinIsOn = FALSE; - m_HToolBar->ToggleTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn); + if( m_VToolBar ) + { + m_VToolBar->EnableTool( ID_LIBEDIT_BODY_TEXT_BUTT, FALSE ); + m_VToolBar->EnableTool( ID_LIBEDIT_BODY_LINE_BUTT, FALSE ); + m_VToolBar->EnableTool( ID_LIBEDIT_BODY_RECT_BUTT, FALSE ); + m_VToolBar->EnableTool( ID_LIBEDIT_BODY_CIRCLE_BUTT, FALSE ); + m_VToolBar->EnableTool( ID_LIBEDIT_BODY_ARC_BUTT, FALSE ); + m_VToolBar->EnableTool( ID_LIBEDIT_DELETE_ITEM_BUTT, FALSE ); + m_VToolBar->EnableTool( ID_LIBEDIT_ANCHOR_ITEM_BUTT, FALSE ); + m_VToolBar->EnableTool( ID_LIBEDIT_IMPORT_BODY_BUTT, FALSE ); + m_VToolBar->EnableTool( ID_LIBEDIT_EXPORT_BODY_BUTT, FALSE ); + } + } + else + { + if( m_HToolBar ) + { + m_HToolBar->EnableTool( ID_LIBEDIT_IMPORT_PART, TRUE ); + m_HToolBar->EnableTool( ID_LIBEDIT_EXPORT_PART, TRUE ); + m_HToolBar->EnableTool( ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART, TRUE ); + m_HToolBar->EnableTool( ID_LIBEDIT_SAVE_CURRENT_PART, TRUE ); + if( (CurrentLibEntry->m_UnitCount > 1) || g_AsDeMorgan ) + m_HToolBar->EnableTool( ID_LIBEDIT_EDIT_PIN_BY_PIN, TRUE ); + else + m_HToolBar->EnableTool( ID_LIBEDIT_EDIT_PIN_BY_PIN, FALSE ); - if ( m_VToolBar ) - { - m_VToolBar->EnableTool(ID_LIBEDIT_BODY_TEXT_BUTT, FALSE); - m_VToolBar->EnableTool(ID_LIBEDIT_BODY_LINE_BUTT, FALSE); - m_VToolBar->EnableTool(ID_LIBEDIT_BODY_RECT_BUTT, FALSE); - m_VToolBar->EnableTool(ID_LIBEDIT_BODY_CIRCLE_BUTT, FALSE); - m_VToolBar->EnableTool(ID_LIBEDIT_BODY_ARC_BUTT, FALSE); - m_VToolBar->EnableTool(ID_LIBEDIT_DELETE_ITEM_BUTT, FALSE); - m_VToolBar->EnableTool(ID_LIBEDIT_ANCHOR_ITEM_BUTT, FALSE); - m_VToolBar->EnableTool(ID_LIBEDIT_IMPORT_BODY_BUTT, FALSE); - m_VToolBar->EnableTool(ID_LIBEDIT_EXPORT_BODY_BUTT, FALSE); - } - } + m_HToolBar->ToggleTool( ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn ); - else - { - if ( m_HToolBar ) - { - m_HToolBar->EnableTool(ID_LIBEDIT_IMPORT_PART,TRUE); - m_HToolBar->EnableTool(ID_LIBEDIT_EXPORT_PART,TRUE); - m_HToolBar->EnableTool(ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART,TRUE); - m_HToolBar->EnableTool(ID_LIBEDIT_SAVE_CURRENT_PART,TRUE); - if ( (CurrentLibEntry->m_UnitCount > 1) || g_AsDeMorgan ) - m_HToolBar->EnableTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, TRUE); - else - m_HToolBar->EnableTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, FALSE); + m_HToolBar->EnableTool( ID_DE_MORGAN_CONVERT_BUTT, g_AsDeMorgan ); + m_HToolBar->EnableTool( ID_DE_MORGAN_NORMAL_BUTT, g_AsDeMorgan ); + /* Enable the "get doc" tool */ + bool enable_dtool = FALSE; + if( !CurrentAliasName.IsEmpty() ) + { + int AliasLocation = LocateAlias( CurrentLibEntry->m_AliasList, CurrentAliasName ); + if( AliasLocation >= 0 ) + if( !CurrentLibEntry->m_AliasList[AliasLocation + ALIAS_DOC_FILENAME].IsEmpty() ) + enable_dtool = TRUE; + } + else if( !CurrentLibEntry->m_DocFile.IsEmpty() ) + enable_dtool = TRUE; + if( enable_dtool ) + m_HToolBar->EnableTool( ID_LIBEDIT_VIEW_DOC, TRUE ); + else + m_HToolBar->EnableTool( ID_LIBEDIT_VIEW_DOC, FALSE ); + m_HToolBar->EnableTool( ID_LIBEDIT_CHECK_PART, TRUE ); + m_SelpartBox->Enable( (CurrentLibEntry->m_UnitCount > 1 ) ? TRUE : FALSE ); - m_HToolBar->ToggleTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn); + if( GetScreen() ) + { + m_HToolBar->EnableTool( ID_LIBEDIT_UNDO, GetScreen()->m_UndoList ); + m_HToolBar->EnableTool( ID_LIBEDIT_REDO, GetScreen()->m_RedoList ); + } + } - m_HToolBar->EnableTool(ID_DE_MORGAN_CONVERT_BUTT, g_AsDeMorgan); - m_HToolBar->EnableTool(ID_DE_MORGAN_NORMAL_BUTT, g_AsDeMorgan); - /* Enable the "get doc" tool */ - bool enable_dtool = FALSE; - if ( ! CurrentAliasName.IsEmpty() ) - { - int AliasLocation = LocateAlias( CurrentLibEntry->m_AliasList, CurrentAliasName); - if ( AliasLocation >= 0 ) - if ( ! CurrentLibEntry->m_AliasList[AliasLocation+ALIAS_DOC_FILENAME].IsEmpty() ) - enable_dtool = TRUE; - } - else if ( ! CurrentLibEntry->m_DocFile.IsEmpty() ) enable_dtool = TRUE; - if ( enable_dtool ) m_HToolBar->EnableTool(ID_LIBEDIT_VIEW_DOC, TRUE); - else m_HToolBar->EnableTool(ID_LIBEDIT_VIEW_DOC, FALSE); - m_HToolBar->EnableTool(ID_LIBEDIT_CHECK_PART, TRUE); - m_SelpartBox->Enable( (CurrentLibEntry->m_UnitCount > 1 ) ? TRUE : FALSE); + if( m_VToolBar ) + { + m_VToolBar->EnableTool( ID_LIBEDIT_BODY_TEXT_BUTT, TRUE ); + m_VToolBar->EnableTool( ID_LIBEDIT_BODY_LINE_BUTT, TRUE ); + m_VToolBar->EnableTool( ID_LIBEDIT_BODY_RECT_BUTT, TRUE ); + m_VToolBar->EnableTool( ID_LIBEDIT_BODY_CIRCLE_BUTT, TRUE ); + m_VToolBar->EnableTool( ID_LIBEDIT_BODY_ARC_BUTT, TRUE ); + m_VToolBar->EnableTool( ID_LIBEDIT_DELETE_ITEM_BUTT, TRUE ); + m_VToolBar->EnableTool( ID_LIBEDIT_ANCHOR_ITEM_BUTT, TRUE ); + m_VToolBar->EnableTool( ID_LIBEDIT_IMPORT_BODY_BUTT, TRUE ); + m_VToolBar->EnableTool( ID_LIBEDIT_EXPORT_BODY_BUTT, TRUE ); + } + } - if ( GetScreen() ) - { - m_HToolBar->EnableTool(ID_LIBEDIT_UNDO,GetScreen()->m_UndoList); - m_HToolBar->EnableTool(ID_LIBEDIT_REDO,GetScreen()->m_RedoList); - } - } - - if ( m_VToolBar ) - { - m_VToolBar->EnableTool(ID_LIBEDIT_BODY_TEXT_BUTT, TRUE); - m_VToolBar->EnableTool(ID_LIBEDIT_BODY_LINE_BUTT, TRUE); - m_VToolBar->EnableTool(ID_LIBEDIT_BODY_RECT_BUTT, TRUE); - m_VToolBar->EnableTool(ID_LIBEDIT_BODY_CIRCLE_BUTT, TRUE); - m_VToolBar->EnableTool(ID_LIBEDIT_BODY_ARC_BUTT, TRUE); - m_VToolBar->EnableTool(ID_LIBEDIT_DELETE_ITEM_BUTT, TRUE); - m_VToolBar->EnableTool(ID_LIBEDIT_ANCHOR_ITEM_BUTT, TRUE); - m_VToolBar->EnableTool(ID_LIBEDIT_IMPORT_BODY_BUTT, TRUE); - m_VToolBar->EnableTool(ID_LIBEDIT_EXPORT_BODY_BUTT, TRUE); - } - } - - DisplayUnitsMsg(); + DisplayUnitsMsg(); } + /**************************************/ int WinEDA_LibeditFrame::BestZoom() /**************************************/ { -int dx, dy, ii,jj ; -int bestzoom; -wxSize size; -EDA_Rect BoundaryBox; + int dx, dy, ii, jj; + int bestzoom; + wxSize size; + EDA_Rect BoundaryBox; - if ( CurrentLibEntry ) - { - BoundaryBox = CurrentLibEntry->GetBoundaryBox(CurrentUnit, CurrentConvert); - dx = BoundaryBox.GetWidth(); - dy = BoundaryBox.GetHeight(); - } + if( CurrentLibEntry ) + { + BoundaryBox = CurrentLibEntry->GetBoundaryBox( CurrentUnit, CurrentConvert ); + dx = BoundaryBox.GetWidth(); + dy = BoundaryBox.GetHeight(); + } + else + { + dx = m_CurrentScreen->m_CurrentSheet->m_Size.x; + dy = m_CurrentScreen->m_CurrentSheet->m_Size.y; + } - else - { - dx = m_CurrentScreen->m_CurrentSheet->m_Size.x; - dy = m_CurrentScreen->m_CurrentSheet->m_Size.y; - } + size = DrawPanel->GetClientSize(); + size.x -= 60; // Pour marges haut et bas + ii = abs( dx / size.x ); + jj = abs( dy / size.y ); - size = DrawPanel->GetClientSize(); - size.x -= 60; // Pour marges haut et bas - ii = abs (dx / size.x); - jj = abs (dy / size.y); + /* determination du zoom existant le plus proche */ + bestzoom = MAX( ii, jj ) + 1; - /* determination du zoom existant le plus proche */ - bestzoom = MAX(ii, jj) + 1; + if( CurrentLibEntry ) + { + m_CurrentScreen->m_Curseur = BoundaryBox.Centre(); + } + else + { + m_CurrentScreen->m_Curseur.x = 0; + m_CurrentScreen->m_Curseur.y = 0; + } - if ( CurrentLibEntry ) - { - m_CurrentScreen->m_Curseur = BoundaryBox.Centre(); - } - else - { - m_CurrentScreen->m_Curseur.x = 0; - m_CurrentScreen->m_Curseur.y = 0; - } - - return(bestzoom); + return bestzoom; } - /*************************************************************************/ -void WinEDA_LibeditFrame::Process_Special_Functions(wxCommandEvent& event) +void WinEDA_LibeditFrame::Process_Special_Functions( wxCommandEvent& event ) /*************************************************************************/ { -int id = event.GetId(); -wxPoint pos; -wxClientDC dc(DrawPanel); + int id = event.GetId(); + wxPoint pos; - DrawPanel->m_IgnoreMouseEvents = TRUE; + wxClientDC dc( DrawPanel ); - DrawPanel->PrepareGraphicContext(&dc); + DrawPanel->m_IgnoreMouseEvents = TRUE; - wxGetMousePosition(&pos.x, &pos.y); - pos.y += 20; + DrawPanel->PrepareGraphicContext( &dc ); - switch ( id ) // Arret de la commande de déplacement en cours - { - case ID_POPUP_LIBEDIT_END_CREATE_ITEM: - case ID_POPUP_LIBEDIT_PIN_EDIT: - case ID_POPUP_LIBEDIT_BODY_EDIT_ITEM: - case ID_POPUP_LIBEDIT_FIELD_ROTATE_ITEM: - case ID_POPUP_LIBEDIT_FIELD_EDIT_ITEM: - case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINSIZE_ITEM: - case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNAMESIZE_ITEM: - case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNUMSIZE_ITEM: - case ID_POPUP_LIBEDIT_CANCEL_EDITING : - case ID_POPUP_ZOOM_BLOCK: - case ID_POPUP_DELETE_BLOCK: - case ID_POPUP_COPY_BLOCK: - case ID_POPUP_SELECT_ITEMS_BLOCK: - case ID_POPUP_INVERT_BLOCK: - case ID_POPUP_PLACE_BLOCK: - case ID_POPUP_LIBEDIT_DELETE_CURRENT_POLY_SEGMENT: - case ID_POPUP_LIBEDIT_ROTATE_GRAPHIC_TEXT: - break; + wxGetMousePosition( &pos.x, &pos.y ); + pos.y += 20; - case ID_POPUP_LIBEDIT_DELETE_ITEM: - if ( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur ) - DrawPanel->ForceCloseManageCurseur(DrawPanel, &dc); - break; + switch( id ) // Arret de la commande de déplacement en cours + { + case ID_POPUP_LIBEDIT_END_CREATE_ITEM: + case ID_POPUP_LIBEDIT_PIN_EDIT: + case ID_POPUP_LIBEDIT_BODY_EDIT_ITEM: + case ID_POPUP_LIBEDIT_FIELD_ROTATE_ITEM: + case ID_POPUP_LIBEDIT_FIELD_EDIT_ITEM: + case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINSIZE_ITEM: + case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNAMESIZE_ITEM: + case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNUMSIZE_ITEM: + case ID_POPUP_LIBEDIT_CANCEL_EDITING: + case ID_POPUP_ZOOM_BLOCK: + case ID_POPUP_DELETE_BLOCK: + case ID_POPUP_COPY_BLOCK: + case ID_POPUP_SELECT_ITEMS_BLOCK: + case ID_POPUP_INVERT_BLOCK: + case ID_POPUP_PLACE_BLOCK: + case ID_POPUP_LIBEDIT_DELETE_CURRENT_POLY_SEGMENT: + case ID_POPUP_LIBEDIT_ROTATE_GRAPHIC_TEXT: + break; - default: - if ( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur ) - DrawPanel->ForceCloseManageCurseur(DrawPanel, &dc); - SetToolID( 0, wxCURSOR_ARROW, wxEmptyString ); - break; - } + case ID_POPUP_LIBEDIT_DELETE_ITEM: + if( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur ) + DrawPanel->ForceCloseManageCurseur( DrawPanel, &dc ); + break; - switch ( id ) - { - case ID_LIBEDIT_SAVE_CURRENT_LIB: - if( m_CurrentScreen->IsModify() ) - { - if( IsOK(this, _("Include last component changes") ) ) - SaveOnePartInMemory(); - } - SaveActiveLibrary(); - break; + default: + if( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur ) + DrawPanel->ForceCloseManageCurseur( DrawPanel, &dc ); + SetToolID( 0, wxCURSOR_ARROW, wxEmptyString ); + break; + } - case ID_LIBEDIT_NEW_PART: - { - g_EditPinByPinIsOn = FALSE; - LibItemToRepeat = NULL; - CreateNewLibraryPart(); - GetScreen()->ClearUndoRedoList(); - ReDrawPanel(); - SetToolbars(); - break; - } + switch( id ) + { + case ID_LIBEDIT_SAVE_CURRENT_LIB: + if( m_CurrentScreen->IsModify() ) + { + if( IsOK( this, _( "Include last component changes" ) ) ) + SaveOnePartInMemory(); + } + SaveActiveLibrary(); + break; - case ID_LIBEDIT_SELECT_CURRENT_LIB: - SelectActiveLibrary(); - break; + case ID_LIBEDIT_NEW_PART: + { + g_EditPinByPinIsOn = FALSE; + LibItemToRepeat = NULL; + CreateNewLibraryPart(); + GetScreen()->ClearUndoRedoList(); + ReDrawPanel(); + SetToolbars(); + break; + } - case ID_LIBEDIT_SELECT_PART: - LibItemToRepeat = NULL; - if ( LoadOneLibraryPart() ) - { - g_EditPinByPinIsOn = FALSE; - GetScreen()->ClearUndoRedoList(); - SetToolbars(); - } - ReDrawPanel(); - break; + case ID_LIBEDIT_SELECT_CURRENT_LIB: + SelectActiveLibrary(); + break; - case ID_LIBEDIT_SAVE_CURRENT_PART: - SaveOnePartInMemory(); - break; + case ID_LIBEDIT_SELECT_PART: + LibItemToRepeat = NULL; + if( LoadOneLibraryPart() ) + { + g_EditPinByPinIsOn = FALSE; + GetScreen()->ClearUndoRedoList(); + SetToolbars(); + } + ReDrawPanel(); + break; - case ID_LIBEDIT_GET_FRAME_EDIT_PART: - InstallLibeditFrame(pos); - break; + case ID_LIBEDIT_SAVE_CURRENT_PART: + SaveOnePartInMemory(); + break; - case ID_LIBEDIT_DELETE_PART: - LibItemToRepeat = NULL; - DeleteOnePart(); - break; + case ID_LIBEDIT_GET_FRAME_EDIT_PART: + InstallLibeditFrame( pos ); + break; - case ID_LIBEDIT_IMPORT_PART: - LibItemToRepeat = NULL; - ImportOnePart(); - GetScreen()->ClearUndoRedoList(); - ReDrawPanel(); - break; + case ID_LIBEDIT_DELETE_PART: + LibItemToRepeat = NULL; + DeleteOnePart(); + break; - case ID_LIBEDIT_EXPORT_PART: - ExportOnePart(FALSE); - break; + case ID_LIBEDIT_IMPORT_PART: + LibItemToRepeat = NULL; + ImportOnePart(); + GetScreen()->ClearUndoRedoList(); + ReDrawPanel(); + break; - case ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART: - ExportOnePart(TRUE); - break; + case ID_LIBEDIT_EXPORT_PART: + ExportOnePart( FALSE ); + break; - case ID_LIBEDIT_CHECK_PART : - if ( CurrentLibEntry ) - if ( TestPins(CurrentLibEntry) == FALSE ) - DisplayInfo(this, _(" Tst Pins OK!") ); - break; + case ID_LIBEDIT_CREATE_NEW_LIB_AND_SAVE_CURRENT_PART: + ExportOnePart( TRUE ); + break; - case ID_DE_MORGAN_NORMAL_BUTT: - m_HToolBar->ToggleTool(ID_DE_MORGAN_NORMAL_BUTT, TRUE); - m_HToolBar->ToggleTool(ID_DE_MORGAN_CONVERT_BUTT, FALSE); - LibItemToRepeat = NULL; - CurrentConvert = 1; - ReDrawPanel(); - break; + case ID_LIBEDIT_CHECK_PART: + if( CurrentLibEntry ) + if( TestPins( CurrentLibEntry ) == FALSE ) + DisplayInfo( this, _( " Tst Pins OK!" ) ); + break; - case ID_DE_MORGAN_CONVERT_BUTT: - m_HToolBar->ToggleTool(ID_DE_MORGAN_NORMAL_BUTT, FALSE); - m_HToolBar->ToggleTool(ID_DE_MORGAN_CONVERT_BUTT, TRUE); - LibItemToRepeat = NULL; - CurrentConvert = 2; - ReDrawPanel(); - break; + case ID_DE_MORGAN_NORMAL_BUTT: + m_HToolBar->ToggleTool( ID_DE_MORGAN_NORMAL_BUTT, TRUE ); + m_HToolBar->ToggleTool( ID_DE_MORGAN_CONVERT_BUTT, FALSE ); + LibItemToRepeat = NULL; + CurrentConvert = 1; + ReDrawPanel(); + break; - case ID_LIBEDIT_VIEW_DOC: - if ( CurrentLibEntry ) - { - wxString docfilename; - if ( ! CurrentAliasName.IsEmpty() ) - { - int AliasLocation = LocateAlias( CurrentLibEntry->m_AliasList, CurrentAliasName); - if ( AliasLocation >= 0 ) - docfilename = CurrentLibEntry->m_AliasList[AliasLocation+ALIAS_DOC_FILENAME]; - } - else docfilename = CurrentLibEntry->m_DocFile; + case ID_DE_MORGAN_CONVERT_BUTT: + m_HToolBar->ToggleTool( ID_DE_MORGAN_NORMAL_BUTT, FALSE ); + m_HToolBar->ToggleTool( ID_DE_MORGAN_CONVERT_BUTT, TRUE ); + LibItemToRepeat = NULL; + CurrentConvert = 2; + ReDrawPanel(); + break; - if ( ! docfilename.IsEmpty() ) - GetAssociatedDocument(this, g_RealLibDirBuffer, docfilename); - } - break; + case ID_LIBEDIT_VIEW_DOC: + if( CurrentLibEntry ) + { + wxString docfilename; + if( !CurrentAliasName.IsEmpty() ) + { + int AliasLocation = LocateAlias( CurrentLibEntry->m_AliasList, CurrentAliasName ); + if( AliasLocation >= 0 ) + docfilename = CurrentLibEntry->m_AliasList[AliasLocation + ALIAS_DOC_FILENAME]; + } + else + docfilename = CurrentLibEntry->m_DocFile; - case ID_LIBEDIT_EDIT_PIN_BY_PIN: - g_EditPinByPinIsOn = g_EditPinByPinIsOn ? FALSE : TRUE; - m_HToolBar->ToggleTool(ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn); - break; + if( !docfilename.IsEmpty() ) + GetAssociatedDocument( this, g_RealLibDirBuffer, docfilename ); + } + break; - case ID_LIBEDIT_SELECT_PART_NUMBER: - { - int ii = m_SelpartBox->GetChoice(); - if ( ii < 0 ) return; - LibItemToRepeat = NULL; - CurrentUnit = ii + 1; - ReDrawPanel(); - } - break; + case ID_LIBEDIT_EDIT_PIN_BY_PIN: + g_EditPinByPinIsOn = g_EditPinByPinIsOn ? FALSE : TRUE; + m_HToolBar->ToggleTool( ID_LIBEDIT_EDIT_PIN_BY_PIN, g_EditPinByPinIsOn ); + break; - case ID_LIBEDIT_SELECT_ALIAS: - { - int ii = m_SelAliasBox->GetChoice(); - if ( ii < 0 ) return; - LibItemToRepeat = NULL; - if ( ii > 0 ) CurrentAliasName = m_SelAliasBox->GetValue(); - else CurrentAliasName.Empty(); - ReDrawPanel(); - } - break; + case ID_LIBEDIT_SELECT_PART_NUMBER: + { + int ii = m_SelpartBox->GetChoice(); + if( ii < 0 ) + return; + LibItemToRepeat = NULL; + CurrentUnit = ii + 1; + ReDrawPanel(); + } + break; - case ID_POPUP_LIBEDIT_PIN_EDIT: - InstallPineditFrame(this, &dc, pos); - break; + case ID_LIBEDIT_SELECT_ALIAS: + { + int ii = m_SelAliasBox->GetChoice(); + if( ii < 0 ) + return; + LibItemToRepeat = NULL; + if( ii > 0 ) + CurrentAliasName = m_SelAliasBox->GetValue(); + else + CurrentAliasName.Empty(); + ReDrawPanel(); + } + break; - case ID_LIBEDIT_PIN_BUTT: - if ( CurrentLibEntry ) - { - SetToolID( id, wxCURSOR_PENCIL, _("Add Pin")); - } - else - { - SetToolID( id, wxCURSOR_ARROW, _("Set Pin Opt")); - InstallPineditFrame(this, &dc, pos); - SetToolID( 0, wxCURSOR_ARROW, wxEmptyString); - } - break; + case ID_POPUP_LIBEDIT_PIN_EDIT: + InstallPineditFrame( this, &dc, pos ); + break; - case ID_POPUP_LIBEDIT_CANCEL_EDITING : - if ( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur ) - DrawPanel->ForceCloseManageCurseur(DrawPanel, &dc); - else - SetToolID( 0, wxCURSOR_ARROW, wxEmptyString); - break; + case ID_LIBEDIT_PIN_BUTT: + if( CurrentLibEntry ) + { + SetToolID( id, wxCURSOR_PENCIL, _( "Add Pin" ) ); + } + else + { + SetToolID( id, wxCURSOR_ARROW, _( "Set Pin Opt" ) ); + InstallPineditFrame( this, &dc, pos ); + SetToolID( 0, wxCURSOR_ARROW, wxEmptyString ); + } + break; - case ID_NO_SELECT_BUTT: - SetToolID( 0, wxCURSOR_ARROW, wxEmptyString); - break; + case ID_POPUP_LIBEDIT_CANCEL_EDITING: + if( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur ) + DrawPanel->ForceCloseManageCurseur( DrawPanel, &dc ); + else + SetToolID( 0, wxCURSOR_ARROW, wxEmptyString ); + break; - case ID_LIBEDIT_BODY_TEXT_BUTT: - SetToolID( id, wxCURSOR_PENCIL, _("Add Text")); - break; + case ID_NO_SELECT_BUTT: + SetToolID( 0, wxCURSOR_ARROW, wxEmptyString ); + break; - case ID_LIBEDIT_BODY_RECT_BUTT: - SetToolID( id, wxCURSOR_PENCIL, _("Add Rectangle")); - break; + case ID_LIBEDIT_BODY_TEXT_BUTT: + SetToolID( id, wxCURSOR_PENCIL, _( "Add Text" ) ); + break; - case ID_LIBEDIT_BODY_CIRCLE_BUTT: - SetToolID( id, wxCURSOR_PENCIL, _("Add Circle")); - break; + case ID_LIBEDIT_BODY_RECT_BUTT: + SetToolID( id, wxCURSOR_PENCIL, _( "Add Rectangle" ) ); + break; - case ID_LIBEDIT_BODY_ARC_BUTT: - SetToolID( id, wxCURSOR_PENCIL, _("Add Arc")); - break; + case ID_LIBEDIT_BODY_CIRCLE_BUTT: + SetToolID( id, wxCURSOR_PENCIL, _( "Add Circle" ) ); + break; - case ID_LIBEDIT_BODY_LINE_BUTT: - SetToolID( id, wxCURSOR_PENCIL, _("Add Line")); - break; + case ID_LIBEDIT_BODY_ARC_BUTT: + SetToolID( id, wxCURSOR_PENCIL, _( "Add Arc" ) ); + break; - case ID_LIBEDIT_ANCHOR_ITEM_BUTT : - SetToolID( id, wxCURSOR_HAND, _("Anchor")); - break; + case ID_LIBEDIT_BODY_LINE_BUTT: + SetToolID( id, wxCURSOR_PENCIL, _( "Add Line" ) ); + break; - case ID_LIBEDIT_IMPORT_BODY_BUTT : - SetToolID( id, wxCURSOR_ARROW, _("Import")); - LoadOneSymbol(&dc); - SetToolID( 0, wxCURSOR_ARROW, wxEmptyString); - break; + case ID_LIBEDIT_ANCHOR_ITEM_BUTT: + SetToolID( id, wxCURSOR_HAND, _( "Anchor" ) ); + break; - case ID_LIBEDIT_EXPORT_BODY_BUTT : - SetToolID( id, wxCURSOR_ARROW, _("Export")); - SaveOneSymbol(); - SetToolID( 0, wxCURSOR_ARROW, wxEmptyString); - break; + case ID_LIBEDIT_IMPORT_BODY_BUTT: + SetToolID( id, wxCURSOR_ARROW, _( "Import" ) ); + LoadOneSymbol( &dc ); + SetToolID( 0, wxCURSOR_ARROW, wxEmptyString ); + break; - case ID_POPUP_LIBEDIT_END_CREATE_ITEM: - DrawPanel->MouseToCursorSchema(); - if ( CurrentDrawItem ) - { - EndDrawGraphicItem(&dc); - } - break; + case ID_LIBEDIT_EXPORT_BODY_BUTT: + SetToolID( id, wxCURSOR_ARROW, _( "Export" ) ); + SaveOneSymbol(); + SetToolID( 0, wxCURSOR_ARROW, wxEmptyString ); + break; - case ID_POPUP_LIBEDIT_BODY_EDIT_ITEM: - if ( CurrentDrawItem ) - { - DrawPanel->CursorOff(&dc); - switch ( CurrentDrawItem->Type() ) - { - case COMPONENT_ARC_DRAW_TYPE: - case COMPONENT_CIRCLE_DRAW_TYPE: - case COMPONENT_RECT_DRAW_TYPE: - case COMPONENT_POLYLINE_DRAW_TYPE: - case COMPONENT_LINE_DRAW_TYPE: - EditGraphicSymbol(&dc, CurrentDrawItem); - break; - case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE: - EditSymbolText(&dc, CurrentDrawItem); - break; - default:; - } - DrawPanel->CursorOn(&dc); - } - break; + case ID_POPUP_LIBEDIT_END_CREATE_ITEM: + DrawPanel->MouseToCursorSchema(); + if( CurrentDrawItem ) + { + EndDrawGraphicItem( &dc ); + } + break; + + case ID_POPUP_LIBEDIT_BODY_EDIT_ITEM: + if( CurrentDrawItem ) + { + DrawPanel->CursorOff( &dc ); + + switch( CurrentDrawItem->Type() ) + { + case COMPONENT_ARC_DRAW_TYPE: + case COMPONENT_CIRCLE_DRAW_TYPE: + case COMPONENT_RECT_DRAW_TYPE: + case COMPONENT_POLYLINE_DRAW_TYPE: + case COMPONENT_LINE_DRAW_TYPE: + EditGraphicSymbol( &dc, CurrentDrawItem ); + break; + + case COMPONENT_GRAPHIC_TEXT_DRAW_TYPE: + EditSymbolText( &dc, CurrentDrawItem ); + break; + + default: + ; + } + + DrawPanel->CursorOn( &dc ); + } + break; - case ID_LIBEDIT_DELETE_ITEM_BUTT: - if ( CurrentLibEntry == NULL) { wxBell(); break; } - SetToolID( id, wxCURSOR_BULLSEYE, _("Delete item")); - break; + case ID_LIBEDIT_DELETE_ITEM_BUTT: + if( CurrentLibEntry == NULL ) + { + wxBell(); break; + } + SetToolID( id, wxCURSOR_BULLSEYE, _( "Delete item" ) ); + break; - case ID_POPUP_LIBEDIT_DELETE_CURRENT_POLY_SEGMENT: - // Delete the last created segment, while creating a polyline draw item - if ( CurrentDrawItem == NULL) break; - DrawPanel->MouseToCursorSchema(); - DeleteDrawPoly(&dc); - break; + case ID_POPUP_LIBEDIT_DELETE_CURRENT_POLY_SEGMENT: - case ID_POPUP_LIBEDIT_DELETE_ITEM: - if ( CurrentDrawItem == NULL) break; - DrawPanel->MouseToCursorSchema(); - DrawPanel->CursorOff(&dc); - SaveCopyInUndoList(CurrentLibEntry); - if ( CurrentDrawItem->Type() == COMPONENT_PIN_DRAW_TYPE ) - { - DeletePin(&dc, CurrentLibEntry, (LibDrawPin*)CurrentDrawItem); - } + // Delete the last created segment, while creating a polyline draw item + if( CurrentDrawItem == NULL ) + break; + DrawPanel->MouseToCursorSchema(); + DeleteDrawPoly( &dc ); + break; - else - { - if ( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur) - DrawPanel->ForceCloseManageCurseur(DrawPanel, &dc); - else DeleteOneLibraryDrawStruct(DrawPanel, &dc, CurrentLibEntry,CurrentDrawItem, TRUE); - } + case ID_POPUP_LIBEDIT_DELETE_ITEM: + if( CurrentDrawItem == NULL ) + break; + DrawPanel->MouseToCursorSchema(); + DrawPanel->CursorOff( &dc ); + SaveCopyInUndoList( CurrentLibEntry ); + if( CurrentDrawItem->Type() == COMPONENT_PIN_DRAW_TYPE ) + { + DeletePin( &dc, CurrentLibEntry, (LibDrawPin*) CurrentDrawItem ); + } + else + { + if( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur ) + DrawPanel->ForceCloseManageCurseur( DrawPanel, &dc ); + else + DeleteOneLibraryDrawStruct( DrawPanel, &dc, CurrentLibEntry, CurrentDrawItem, TRUE ); + } - CurrentDrawItem = NULL; - m_CurrentScreen->SetModify(); - DrawPanel->CursorOn(&dc); - break; + CurrentDrawItem = NULL; + m_CurrentScreen->SetModify(); + DrawPanel->CursorOn( &dc ); + break; - case ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST: - if ( CurrentDrawItem == NULL) break; - DrawPanel->MouseToCursorSchema(); - if ( CurrentDrawItem->Type() == COMPONENT_PIN_DRAW_TYPE ) - StartMovePin(&dc); - else if ( CurrentDrawItem->Type() == COMPONENT_FIELD_DRAW_TYPE ) - StartMoveField(&dc, (LibDrawField *) CurrentDrawItem); - else StartMoveDrawSymbol(&dc); - break; + case ID_POPUP_LIBEDIT_MOVE_ITEM_REQUEST: + if( CurrentDrawItem == NULL ) + break; + DrawPanel->MouseToCursorSchema(); + if( CurrentDrawItem->Type() == COMPONENT_PIN_DRAW_TYPE ) + StartMovePin( &dc ); + else if( CurrentDrawItem->Type() == COMPONENT_FIELD_DRAW_TYPE ) + StartMoveField( &dc, (LibDrawField*) CurrentDrawItem ); + else + StartMoveDrawSymbol( &dc ); + break; - case ID_POPUP_LIBEDIT_ROTATE_GRAPHIC_TEXT: - if ( CurrentDrawItem == NULL) break; - DrawPanel->CursorOff(&dc); - DrawPanel->MouseToCursorSchema(); - if ( (CurrentDrawItem->m_Flags & IS_NEW) == 0 ) - SaveCopyInUndoList(CurrentLibEntry); - RotateSymbolText(&dc); - DrawPanel->CursorOn(&dc); - break; + case ID_POPUP_LIBEDIT_ROTATE_GRAPHIC_TEXT: + if( CurrentDrawItem == NULL ) + break; + DrawPanel->CursorOff( &dc ); + DrawPanel->MouseToCursorSchema(); + if( (CurrentDrawItem->m_Flags & IS_NEW) == 0 ) + SaveCopyInUndoList( CurrentLibEntry ); + RotateSymbolText( &dc ); + DrawPanel->CursorOn( &dc ); + break; - case ID_POPUP_LIBEDIT_FIELD_ROTATE_ITEM: - if ( CurrentDrawItem == NULL) break; - DrawPanel->CursorOff(&dc); - DrawPanel->MouseToCursorSchema(); - if ( CurrentDrawItem->Type() == COMPONENT_FIELD_DRAW_TYPE ) - { - SaveCopyInUndoList(CurrentLibEntry); - RotateField(&dc, (LibDrawField *) CurrentDrawItem); - } - DrawPanel->CursorOn(&dc); - break; + case ID_POPUP_LIBEDIT_FIELD_ROTATE_ITEM: + if( CurrentDrawItem == NULL ) + break; + DrawPanel->CursorOff( &dc ); + DrawPanel->MouseToCursorSchema(); + if( CurrentDrawItem->Type() == COMPONENT_FIELD_DRAW_TYPE ) + { + SaveCopyInUndoList( CurrentLibEntry ); + RotateField( &dc, (LibDrawField*) CurrentDrawItem ); + } + DrawPanel->CursorOn( &dc ); + break; - case ID_POPUP_LIBEDIT_FIELD_EDIT_ITEM: - if ( CurrentDrawItem == NULL) break; - DrawPanel->CursorOff(&dc); - if ( CurrentDrawItem->Type() == COMPONENT_FIELD_DRAW_TYPE ) - { - EditField(&dc, (LibDrawField *) CurrentDrawItem); - } - DrawPanel->CursorOn(&dc); - break; + case ID_POPUP_LIBEDIT_FIELD_EDIT_ITEM: + if( CurrentDrawItem == NULL ) + break; + DrawPanel->CursorOff( &dc ); + if( CurrentDrawItem->Type() == COMPONENT_FIELD_DRAW_TYPE ) + { + EditField( &dc, (LibDrawField*) CurrentDrawItem ); + } + DrawPanel->CursorOn( &dc ); + break; - case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINSIZE_ITEM: - case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNAMESIZE_ITEM: - case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNUMSIZE_ITEM: - if ( (CurrentDrawItem == NULL) || - (CurrentDrawItem->Type() != COMPONENT_PIN_DRAW_TYPE) ) - break; - SaveCopyInUndoList(CurrentLibEntry); - GlobalSetPins(&dc, (LibDrawPin *) CurrentDrawItem, id); - DrawPanel->MouseToCursorSchema(); - break; + case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINSIZE_ITEM: + case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNAMESIZE_ITEM: + case ID_POPUP_LIBEDIT_PIN_GLOBAL_CHANGE_PINNUMSIZE_ITEM: + if( (CurrentDrawItem == NULL) + || (CurrentDrawItem->Type() != COMPONENT_PIN_DRAW_TYPE) ) + break; + SaveCopyInUndoList( CurrentLibEntry ); + GlobalSetPins( &dc, (LibDrawPin*) CurrentDrawItem, id ); + DrawPanel->MouseToCursorSchema(); + break; - case ID_POPUP_ZOOM_BLOCK: - DrawPanel->m_AutoPAN_Request = FALSE; - GetScreen()->BlockLocate.m_Command = BLOCK_ZOOM; - HandleBlockEnd(&dc); - break; + case ID_POPUP_ZOOM_BLOCK: + DrawPanel->m_AutoPAN_Request = FALSE; + GetScreen()->BlockLocate.m_Command = BLOCK_ZOOM; + HandleBlockEnd( &dc ); + break; - case ID_POPUP_DELETE_BLOCK: - DrawPanel->m_AutoPAN_Request = FALSE; - GetScreen()->BlockLocate.m_Command = BLOCK_DELETE; - DrawPanel->MouseToCursorSchema(); - HandleBlockEnd(&dc); - break; + case ID_POPUP_DELETE_BLOCK: + DrawPanel->m_AutoPAN_Request = FALSE; + GetScreen()->BlockLocate.m_Command = BLOCK_DELETE; + DrawPanel->MouseToCursorSchema(); + HandleBlockEnd( &dc ); + break; - case ID_POPUP_COPY_BLOCK: - DrawPanel->m_AutoPAN_Request = FALSE; - GetScreen()->BlockLocate.m_Command = BLOCK_COPY; - DrawPanel->MouseToCursorSchema(); - HandleBlockPlace(&dc); - break; + case ID_POPUP_COPY_BLOCK: + DrawPanel->m_AutoPAN_Request = FALSE; + GetScreen()->BlockLocate.m_Command = BLOCK_COPY; + DrawPanel->MouseToCursorSchema(); + HandleBlockPlace( &dc ); + break; - case ID_POPUP_SELECT_ITEMS_BLOCK: - DrawPanel->m_AutoPAN_Request = FALSE; - GetScreen()->BlockLocate.m_Command = BLOCK_SELECT_ITEMS_ONLY; - DrawPanel->MouseToCursorSchema(); - HandleBlockEnd(&dc); - break; + case ID_POPUP_SELECT_ITEMS_BLOCK: + DrawPanel->m_AutoPAN_Request = FALSE; + GetScreen()->BlockLocate.m_Command = BLOCK_SELECT_ITEMS_ONLY; + DrawPanel->MouseToCursorSchema(); + HandleBlockEnd( &dc ); + break; - case ID_POPUP_INVERT_BLOCK: - DrawPanel->m_AutoPAN_Request = FALSE; - GetScreen()->BlockLocate.m_Command = BLOCK_INVERT; - DrawPanel->MouseToCursorSchema(); - HandleBlockPlace(&dc); - break; + case ID_POPUP_INVERT_BLOCK: + DrawPanel->m_AutoPAN_Request = FALSE; + GetScreen()->BlockLocate.m_Command = BLOCK_INVERT; + DrawPanel->MouseToCursorSchema(); + HandleBlockPlace( &dc ); + break; - case ID_POPUP_PLACE_BLOCK: - DrawPanel->m_AutoPAN_Request = FALSE; - DrawPanel->MouseToCursorSchema(); - HandleBlockPlace(&dc); - break; + case ID_POPUP_PLACE_BLOCK: + DrawPanel->m_AutoPAN_Request = FALSE; + DrawPanel->MouseToCursorSchema(); + HandleBlockPlace( &dc ); + break; - case ID_LIBEDIT_UNDO: - GetComponentFromUndoList(); - DrawPanel->Refresh(TRUE); - break; + case ID_LIBEDIT_UNDO: + GetComponentFromUndoList(); + DrawPanel->Refresh( TRUE ); + break; - case ID_LIBEDIT_REDO: - GetComponentFromRedoList(); - DrawPanel->Refresh(TRUE); - break; + case ID_LIBEDIT_REDO: + GetComponentFromRedoList(); + DrawPanel->Refresh( TRUE ); + break; - default: - DisplayError(this, wxT("WinEDA_LibeditFrame::Process_Special_Functions error")); - break; - } - DrawPanel->MouseToCursorSchema(); - DrawPanel->m_IgnoreMouseEvents = FALSE; + default: + DisplayError( this, wxT( "WinEDA_LibeditFrame::Process_Special_Functions error" ) ); + break; + } - if ( m_ID_current_state == 0 ) LibItemToRepeat = NULL; + DrawPanel->MouseToCursorSchema(); + DrawPanel->m_IgnoreMouseEvents = FALSE; + + if( m_ID_current_state == 0 ) + LibItemToRepeat = NULL; } - - diff --git a/gerbview/export_to_pcbnew.cpp b/gerbview/export_to_pcbnew.cpp index 70ef60474f..a6862cf2d0 100644 --- a/gerbview/export_to_pcbnew.cpp +++ b/gerbview/export_to_pcbnew.cpp @@ -177,7 +177,7 @@ static int SavePcbFormatAscii( WinEDA_GerberFrame* frame, FILE* File, } else // a true TRACK { - newtrack = new TRACK( *track ); + newtrack = track->Copy(); newtrack->SetLayer( pcb_layer_number ); } diff --git a/include/base_struct.h b/include/base_struct.h index 171ba28eb7..38b9719ca0 100644 --- a/include/base_struct.h +++ b/include/base_struct.h @@ -85,6 +85,7 @@ enum SEARCH_RESULT { class EDA_BaseStruct; class WinEDA_DrawFrame; +class BOARD; /** * Class INSPECTOR @@ -433,20 +434,6 @@ public: } - /** - * Function IsOnOneOfTheseLayers - * returns true if this object is on one of the given layers. Is virtual so - * objects like D_PAD, which reside on multiple layers, can do their own - * form of testing. - * @param aLayerMask The bit-mapped set of layers to test for. - * @return bool - true if on one of the given layers, else false. - */ - virtual bool IsOnOneOfTheseLayers( int aLayerMask ) const - { - return ( (1<= 0 (ou >= n) si un bloc peut demarrer diff --git a/include/pcbstruct.h b/include/pcbstruct.h index ae8b8661ff..fb597c9e13 100644 --- a/include/pcbstruct.h +++ b/include/pcbstruct.h @@ -287,7 +287,7 @@ public: * @param aNetcode A netcode to search for. * @return EQUIPOT* - the net or NULL if not found. */ - EQUIPOT* FindNet( int aNetcode ); + EQUIPOT* FindNet( int aNetcode ) const; /** diff --git a/include/wxstruct.h b/include/wxstruct.h index c79f5e666c..e3af87ec9c 100644 --- a/include/wxstruct.h +++ b/include/wxstruct.h @@ -557,27 +557,13 @@ private: bool m_SelViaSizeBox_Changed; wxMenu* m_FilesMenu; -#if 0 && defined(DEBUG) - /** - * Function onRightClickBuilder - * is a helper function for private use by OnRightClick(). It helps build - * the hierarchical menu. - * @param collectorNdx The index into the COLLECTOR that \a aItem represents. - * @param aItem The BOARD_ITEM to provide menu support for, or NULL if - * nothing was under the mouse. - * @param pPopMenu What to populate with choices. - */ - void onRightClickBuilder( int collectorNdx, BOARD_ITEM* aItem, wxMenu* aPopMenu ); - - void popUpMenuForFootprints( int collectorNdx, MODULE* aModule, wxMenu* aPopMenu ); - - void popUpMenuForFpTexts( int collectorNdx, TEXTE_MODULE* aText, wxMenu* aPopMenu ); - - void popUpMenuForFpPads( int collectorNdx, D_PAD* aPad, wxMenu* aPopMenu ); - - void popupMenuForTracks( int collectorNdx, TRACK* aTrack, wxMenu* aPopMenu ); -#endif - + // we'll use lower case function names for private member functions. + void createPopUpMenuForFootprints( MODULE* aModule, wxMenu* aPopMenu ); + void createPopUpMenuForFpTexts( TEXTE_MODULE* aText, wxMenu* aPopMenu ); + void createPopUpMenuForFpPads( D_PAD* aPad, wxMenu* aPopMenu ); + void createPopupMenuForTracks( TRACK* aTrack, wxMenu* aPopMenu ); + void createPopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu ); + void createPopUpBlockMenu( wxMenu* menu ); public: WinEDA_PcbFrame( wxWindow* father, WinEDA_App* parent, const wxString& title, diff --git a/pcbnew/class_board.cpp b/pcbnew/class_board.cpp index 51555f9d1d..bfe911ed8a 100644 --- a/pcbnew/class_board.cpp +++ b/pcbnew/class_board.cpp @@ -450,7 +450,7 @@ SEARCH_RESULT BOARD::Visit( INSPECTOR* inspector, const void* testData, } -/* +/* now using PcbGeneralLocateAndDisplay() // see pcbstruct.h BOARD_ITEM* BOARD::FindPadOrModule( const wxPoint& refPos, int layer ) { @@ -534,7 +534,7 @@ BOARD_ITEM* BOARD::FindPadOrModule( const wxPoint& refPos, int layer ) * @param anetcode The netcode to search for. * @return EQUIPOT* - the net or NULL if not found. */ -EQUIPOT* BOARD::FindNet( int anetcode ) +EQUIPOT* BOARD::FindNet( int anetcode ) const { if( anetcode <= 0 ) return NULL; diff --git a/pcbnew/class_track.h b/pcbnew/class_track.h index 057de660cb..b501fb7e1c 100644 --- a/pcbnew/class_track.h +++ b/pcbnew/class_track.h @@ -39,16 +39,18 @@ public: // chain = 0 indique une connexion non encore traitee int m_Param; // Auxiliary variable ( used in some computations ) +protected: + TRACK( const TRACK& track ); // protected so Copy() is used instead. public: TRACK( BOARD_ITEM* StructFather, KICAD_T idtype = TYPETRACK ); - TRACK( const TRACK& track ); /** * Function Copy * will copy this object whether it is a TRACK or a SEGVIA returning * the corresponding type. - * @return - TRACK* or SEGVIA*, typed as the least common demoninator: TRACK + * @return - TRACK*, SEGVIA*, or SEGZONE*, declared as the least common + * demoninator: TRACK */ TRACK* Copy() const; diff --git a/pcbnew/collectors.cpp b/pcbnew/collectors.cpp index 01444236c9..a859fc2d6e 100644 --- a/pcbnew/collectors.cpp +++ b/pcbnew/collectors.cpp @@ -191,7 +191,6 @@ SEARCH_RESULT GENERAL_COLLECTOR::Inspect( EDA_BaseStruct* testItem, const void* default: break; } - // common tests: @@ -202,13 +201,15 @@ SEARCH_RESULT GENERAL_COLLECTOR::Inspect( EDA_BaseStruct* testItem, const void* if( m_Guide->IgnoreModulesOnCmp() && module->GetLayer()==LAYER_CMP_N ) goto exit; } - + if( item->IsOnLayer( m_Guide->GetPreferredLayer() ) || m_Guide->IgnorePreferredLayer() ) { int layer = item->GetLayer(); - - if( m_Guide->IsLayerVisible( layer ) || !m_Guide->IgnoreNonVisibleLayers() ) + + // Modules and their subcomponents: text and pads are not sensitive to the layer + // visibility controls. They all have their own separate visibility controls + if( module || m_Guide->IsLayerVisible( layer ) || !m_Guide->IgnoreNonVisibleLayers() ) { if( !m_Guide->IsLayerLocked(layer) || !m_Guide->IgnoreLockedLayers() ) { @@ -233,7 +234,9 @@ SEARCH_RESULT GENERAL_COLLECTOR::Inspect( EDA_BaseStruct* testItem, const void* int layer = item->GetLayer(); - if( m_Guide->IsLayerVisible( layer ) || !m_Guide->IgnoreNonVisibleLayers() ) + // Modules and their subcomponents: text and pads are not sensitive to the layer + // visibility controls. They all have their own separate visibility controls + if( module || m_Guide->IsLayerVisible( layer ) || !m_Guide->IgnoreNonVisibleLayers() ) { if( !m_Guide->IsLayerLocked(layer) || !m_Guide->IgnoreLockedLayers() ) { diff --git a/pcbnew/controle.cpp b/pcbnew/controle.cpp index ca8350be42..19c062bff1 100644 --- a/pcbnew/controle.cpp +++ b/pcbnew/controle.cpp @@ -124,10 +124,11 @@ void RemoteCommand( const char* cmdline ) // @todo: move this to proper source file. -wxString BOARD_ITEM::MenuText() const +wxString BOARD_ITEM::MenuText( const BOARD* aPcb ) const { wxString text; const BOARD_ITEM* item = this; + EQUIPOT* net; switch( item->Type() ) { @@ -140,11 +141,13 @@ wxString BOARD_ITEM::MenuText() const break; case TYPEPAD: - text << _("Pad") << wxT(" ") << ((D_PAD*)item)->ReturnStringPadName() << _(" of ") << GetParent()->MenuText(); + text << _("Pad") << wxT(" ") << ((D_PAD*)item)->ReturnStringPadName() << _(" of ") +// << GetParent()->MenuText( aPcb ); + << ((MODULE*)GetParent())->GetReference(); break; case TYPEDRAWSEGMENT: - text << _("PGraphic"); + text << _("Pcb Graphic") << _(" on ") << ReturnPcbLayerName( item->GetLayer() ); // @todo: extend text break; case TYPETEXTE: @@ -163,29 +166,63 @@ wxString BOARD_ITEM::MenuText() const break; case TEXT_is_VALUE: - text << _( "Value" ) << wxT( " " ) << ((TEXTE_MODULE*)item)->m_Text << _(" of ") << GetParent()->MenuText(); + text << _( "Value" ) << wxT( " " ) << ((TEXTE_MODULE*)item)->m_Text << _(" of ") +// << GetParent()->MenuText( aPcb ); + << ((MODULE*)GetParent())->GetReference(); break; - default: - text << _( "Text" ) << wxT( " " ) << ((TEXTE_MODULE*)item)->m_Text << _(" of ") << GetParent()->MenuText(); + default: // wrap this one in quotes: + text << _( "Text" ) << wxT( " \"" ) << ((TEXTE_MODULE*)item)->m_Text << wxT("\"") << _(" of ") +// << GetParent()->MenuText( aPcb ); + << ((MODULE*)GetParent())->GetReference(); break; } break; case TYPEEDGEMODULE: - text << _("MGraphic"); // @todo: expand on the text + text << _("Graphic") << wxT( " " ); + const wxChar* cp; + switch( ((EDGE_MODULE*)item)->m_Shape ) + { + case S_SEGMENT: cp = _("Line"); break; + case S_RECT: cp = _("Rect"); break; + case S_ARC: cp = _("Arc"); break; + case S_CIRCLE: cp = _("Circle"); break; + /* used? + case S_ARC_RECT: cp = wxT("arc_rect"); break; + case S_SPOT_OVALE: cp = wxT("spot_oval"); break; + case S_SPOT_CIRCLE: cp = wxT("spot_circle"); break; + case S_SPOT_RECT: cp = wxT("spot_rect"); break; + case S_POLYGON: cp = wxT("polygon"); break; + */ + default: cp = wxT("??EDGE??"); break; + } + text << *cp << _(" of ") +// << GetParent()->MenuText( aPcb ); + << ((MODULE*)GetParent())->GetReference(); break; case TYPETRACK: - text << _("Track"); // @todo: expand on the text + text << _("Track") << wxT(" ") << ((TRACK*)item)->m_NetCode; + net = aPcb->FindNet( ((TRACK*)item)->m_NetCode ); + if( net ) + { + text << wxT( " [" ) << net->m_Netname << wxT("]"); + } + text << _(" on ") << ReturnPcbLayerName( item->GetLayer() ); break; case TYPEZONE: - text << _("Zone"); // @todo: expand on the text + text << _("Zone") << _(" on ") << ReturnPcbLayerName( item->GetLayer() ); break; case TYPEVIA: - text << _("Via"); // @todo: expand on text + text << _("Via") << wxT(" ") << ((SEGVIA*)item)->m_NetCode; + net = aPcb->FindNet( ((TRACK*)item)->m_NetCode ); + if( net ) + { + text << wxT( " [" ) << net->m_Netname << wxT("]"); + } break; case TYPEMARQUEUR: @@ -201,7 +238,7 @@ wxString BOARD_ITEM::MenuText() const break; case TYPEEDGEZONE: - text << _("Graphic"); // @todo: extend text + text << _("Edge Zone") << _(" on ") << ReturnPcbLayerName( item->GetLayer() ); // @todo: extend text break; default: @@ -418,7 +455,7 @@ BOARD_ITEM* WinEDA_BasePcbFrame::PcbGeneralLocateAndDisplay() item = (*m_Collector)[i]; - text = item->MenuText(); + text = item->MenuText( m_Pcb ); xpm = item->MenuIcon(); ADD_MENUITEM( &itemMenu, ID_POPUP_PCB_ITEM_SELECTION_START+i, text, xpm ); diff --git a/pcbnew/editrack.cpp b/pcbnew/editrack.cpp index 4b456c6166..51c2a06ee2 100644 --- a/pcbnew/editrack.cpp +++ b/pcbnew/editrack.cpp @@ -147,7 +147,7 @@ TRACK* WinEDA_PcbFrame::Begin_Route( TRACK* track, wxDC* DC ) if( g_TwoSegmentTrackBuild ) { // Create 2 segments - g_CurrentTrackSegment = new TRACK( *g_CurrentTrackSegment ); + g_CurrentTrackSegment = g_CurrentTrackSegment->Copy(); g_TrackSegmentCount++; g_CurrentTrackSegment->Pback = g_FirstTrackSegment; g_FirstTrackSegment->Pnext = g_CurrentTrackSegment; @@ -797,7 +797,7 @@ void EnsureEndTrackOnPad( D_PAD* Pad ) if( !g_CurrentTrackSegment->IsNull() ) { /* Must create a new segment, from track end to pad center */ - g_CurrentTrackSegment = new TRACK( *lasttrack ); + g_CurrentTrackSegment = lasttrack->Copy(); g_TrackSegmentCount++; lasttrack->Pnext = g_CurrentTrackSegment; g_CurrentTrackSegment->Pback = lasttrack; diff --git a/pcbnew/onrightclick.cpp b/pcbnew/onrightclick.cpp index a3c1b4e26a..a9f6145b61 100644 --- a/pcbnew/onrightclick.cpp +++ b/pcbnew/onrightclick.cpp @@ -55,19 +55,6 @@ #include "Flag.xpm" -/* local functions */ -static void CreatePopupMenuForTracks( TRACK* Track, wxPoint CursorPosition, - wxMenu* PopMenu ); -static void CreatePopUpMenuForFootprints( MODULE* Footprint, wxMenu* menu, bool full_menu ); -static void CreatePopUpMenuForFpTexts( TEXTE_MODULE* FpText, wxMenu* menu ); -static void CreatePopUpMenuForPads( D_PAD* Pad, wxMenu* menu ); -static void CreatePopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu ); -static void CreatePopUpBlockMenu( wxMenu* menu ); - - -/*****/ - - /********************************************/ static wxMenu* Append_Track_Width_List() /********************************************/ @@ -168,7 +155,7 @@ void WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) if( (item && item->m_Flags) || BlockActive ) { if( BlockActive ) - CreatePopUpBlockMenu( aPopMenu ); + createPopUpBlockMenu( aPopMenu ); else { ADD_MENUITEM( aPopMenu, ID_POPUP_CANCEL_CURRENT_COMMAND, @@ -194,10 +181,7 @@ void WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) switch( item->Type() ) { case TYPEMODULE: - if( !flags ) - CreatePopUpMenuForFootprints( (MODULE*) item, aPopMenu, TRUE ); - else - CreatePopUpMenuForFootprints( (MODULE*) item, aPopMenu, FALSE ); + createPopUpMenuForFootprints( (MODULE*) item, aPopMenu ); if( m_HTOOL_current_state == ID_TOOLBARH_PCB_AUTOPLACE ) { @@ -219,37 +203,11 @@ void WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) break; case TYPEPAD: - CreatePopUpMenuForPads( (D_PAD*) item, aPopMenu ); - if( m_HTOOL_current_state == ID_TOOLBARH_PCB_AUTOROUTE ) - { - if( !flags ) - { - aPopMenu->Append( ID_POPUP_PCB_AUTOROUTE_PAD, _( "Autoroute Pad" ) ); - aPopMenu->Append( ID_POPUP_PCB_AUTOROUTE_NET, _( "Autoroute Net" ) ); - } - } - if( !flags ) - { - MODULE* module = (MODULE*) item->m_Parent; - if( module ) - { - aPopMenu->AppendSeparator(); - CreatePopUpMenuForFootprints( module, aPopMenu, TRUE ); - } - } + createPopUpMenuForFpPads( (D_PAD*) item, aPopMenu ); break; case TYPETEXTEMODULE: - CreatePopUpMenuForFpTexts( (TEXTE_MODULE*) item, aPopMenu ); - if( !flags ) - { - MODULE* module = (MODULE*) item->m_Parent; - if( module ) - { - aPopMenu->AppendSeparator(); - CreatePopUpMenuForFootprints( module, aPopMenu, TRUE ); - } - } + createPopUpMenuForFpTexts( (TEXTE_MODULE*) item, aPopMenu ); break; case TYPEDRAWSEGMENT: @@ -278,14 +236,13 @@ void WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) break; case TYPETEXTE: - CreatePopUpMenuForTexts( (TEXTE_PCB*) item, aPopMenu ); + createPopUpMenuForTexts( (TEXTE_PCB*) item, aPopMenu ); break; case TYPETRACK: case TYPEVIA: locate_track = TRUE; - CreatePopupMenuForTracks( (TRACK*) item, GetScreen()->m_Curseur, - aPopMenu ); + createPopupMenuForTracks( (TRACK*) item, aPopMenu ); break; case TYPEZONE: @@ -469,7 +426,7 @@ void WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) /****************************************/ -void CreatePopUpBlockMenu( wxMenu* menu ) +void WinEDA_PcbFrame::createPopUpBlockMenu( wxMenu* menu ) /****************************************/ /* Create Pop sub menu for block commands @@ -494,13 +451,14 @@ void CreatePopUpBlockMenu( wxMenu* menu ) /********************************************************************/ -void CreatePopupMenuForTracks( TRACK* Track, wxPoint CursorPosition, - wxMenu* PopMenu ) +void WinEDA_PcbFrame::createPopupMenuForTracks( TRACK* Track, wxMenu* PopMenu ) /*******************************************************************/ /* Create command lines for a popup menu, for track editing */ { + wxPoint cursorPosition = GetScreen()->m_Curseur; + int flags = Track->m_Flags; if( flags == 0 ) @@ -532,7 +490,7 @@ void CreatePopupMenuForTracks( TRACK* Track, wxPoint CursorPosition, } else { - if( Track->IsPointOnEnds( CursorPosition, -1 ) != 0 ) + if( Track->IsPointOnEnds( cursorPosition, -1 ) != 0 ) { ADD_MENUITEM( PopMenu, ID_POPUP_PCB_MOVE_TRACK_NODE, _( "Move Node" ), move_xpm ); @@ -623,7 +581,7 @@ void CreatePopupMenuForTracks( TRACK* Track, wxPoint CursorPosition, /*********************************************************************************/ -void CreatePopUpMenuForFootprints( MODULE* aModule, wxMenu* menu, bool full_menu ) +void WinEDA_PcbFrame::createPopUpMenuForFootprints( MODULE* aModule, wxMenu* menu ) /*********************************************************************************/ /* Create the wxMenuitem list for footprint editing @@ -632,12 +590,12 @@ void CreatePopUpMenuForFootprints( MODULE* aModule, wxMenu* menu, bool full_menu wxMenu* sub_menu_footprint; int flags = aModule->m_Flags; - wxString msg = aModule->MenuText(); + wxString msg = aModule->MenuText( m_Pcb ); sub_menu_footprint = new wxMenu; ADD_MENUITEM_WITH_SUBMENU( menu, sub_menu_footprint, -1, msg, module_xpm ); - if( full_menu ) + if( !flags ) { ADD_MENUITEM( sub_menu_footprint, ID_POPUP_PCB_MOVE_MODULE_REQUEST, _( "Move (M)" ), Move_Module_xpm ); @@ -663,7 +621,7 @@ void CreatePopUpMenuForFootprints( MODULE* aModule, wxMenu* menu, bool full_menu /********************************************************************/ -void CreatePopUpMenuForFpTexts( TEXTE_MODULE* FpText, wxMenu* menu ) +void WinEDA_PcbFrame::createPopUpMenuForFpTexts( TEXTE_MODULE* FpText, wxMenu* menu ) /********************************************************************/ /* Create the wxMenuitem list for editing texts on footprints @@ -672,7 +630,7 @@ void CreatePopUpMenuForFpTexts( TEXTE_MODULE* FpText, wxMenu* menu ) wxMenu* sub_menu_Fp_text; int flags = FpText->m_Flags; - wxString msg = FpText->MenuText(); + wxString msg = FpText->MenuText( m_Pcb ); sub_menu_Fp_text = new wxMenu; @@ -690,18 +648,28 @@ void CreatePopUpMenuForFpTexts( TEXTE_MODULE* FpText, wxMenu* menu ) if( FpText->m_Type == TEXT_is_DIVERS ) ADD_MENUITEM( sub_menu_Fp_text, ID_POPUP_PCB_DELETE_TEXTMODULE, _( "Delete" ), delete_xpm ); + + if( !flags ) + { + MODULE* module = (MODULE*) FpText->GetParent(); + if( module ) + { + menu->AppendSeparator(); + createPopUpMenuForFootprints( module, menu ); + } + } } /***************************************************************/ -void CreatePopUpMenuForPads( D_PAD* Pad, wxMenu* menu ) +void WinEDA_PcbFrame::createPopUpMenuForFpPads( D_PAD* Pad, wxMenu* menu ) /***************************************************************/ /* Create pop menu for pads */ { wxMenu* sub_menu_Pad; int flags = Pad->m_Flags; - wxString msg = Pad->MenuText(); + wxString msg = Pad->MenuText( m_Pcb ); sub_menu_Pad = new wxMenu; ADD_MENUITEM_WITH_SUBMENU( menu, sub_menu_Pad, -1, msg, pad_xpm ); @@ -729,18 +697,36 @@ void CreatePopUpMenuForPads( D_PAD* Pad, wxMenu* menu ) ADD_MENUITEM( sub_menu_Pad, ID_POPUP_PCB_DELETE_PAD, _( "delete" ), Delete_Pad_xpm ); } + + if( m_HTOOL_current_state == ID_TOOLBARH_PCB_AUTOROUTE ) + { + if( !flags ) + { + menu->Append( ID_POPUP_PCB_AUTOROUTE_PAD, _( "Autoroute Pad" ) ); + menu->Append( ID_POPUP_PCB_AUTOROUTE_NET, _( "Autoroute Net" ) ); + } + } + if( !flags ) + { + MODULE* module = (MODULE*) Pad->GetParent(); + if( module ) + { + menu->AppendSeparator(); + createPopUpMenuForFootprints( module, menu ); + } + } } /*************************************************************/ -void CreatePopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu ) +void WinEDA_PcbFrame::createPopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu ) /*************************************************************/ /* Create pop menu for pcb texts */ { wxMenu* sub_menu_Text; int flags = Text->m_Flags; - wxString msg = Text->MenuText(); + wxString msg = Text->MenuText( m_Pcb ); sub_menu_Text = new wxMenu; diff --git a/share/drawpanel.cpp b/share/drawpanel.cpp index f4e874cb1c..0899a9962e 100644 --- a/share/drawpanel.cpp +++ b/share/drawpanel.cpp @@ -57,7 +57,7 @@ WinEDA_DrawPanel::WinEDA_DrawPanel( WinEDA_DrawFrame* parent, int id, m_CanStartBlock = -1; // Command block can start if >= 0 m_AbortEnable = m_AbortRequest = FALSE; m_AutoPAN_Enable = TRUE; - m_IgnoreMouseEvents = FALSE; + m_IgnoreMouseEvents = 0; ManageCurseur = NULL; ForceCloseManageCurseur = NULL;