From deec9e9ac8f5b69a0802f4e6b072b54de6085b9b Mon Sep 17 00:00:00 2001 From: Wayne Stambaugh Date: Thu, 27 Oct 2011 09:34:28 -0400 Subject: [PATCH] Unify Eeschema edit item commands into a single event handler. * Create command event handler for editing all schematic and child items. * Remove unique edit schematic item command IDs. * Unify find item, undo, and redo hot key commands. --- eeschema/eeschema_id.h | 13 +-- eeschema/hotkeys.cpp | 97 ++++------------------ eeschema/onrightclick.cpp | 27 +++---- eeschema/schedit.cpp | 162 +++++++++++++++++++++---------------- eeschema/schframe.cpp | 2 + eeschema/sheet.cpp | 39 ++++++--- include/wxEeschemaStruct.h | 12 ++- 7 files changed, 164 insertions(+), 188 deletions(-) diff --git a/eeschema/eeschema_id.h b/eeschema/eeschema_id.h index 7a4b71ae45..91eb6886a3 100644 --- a/eeschema/eeschema_id.h +++ b/eeschema/eeschema_id.h @@ -99,23 +99,16 @@ enum id_eeschema_frm ID_POPUP_SCH_ENTRY_SELECT_SLASH, ID_POPUP_SCH_ENTRY_SELECT_ANTISLASH, - ID_POPUP_SCH_EDIT_CMP, ID_POPUP_SCH_INIT_CMP, - ID_POPUP_SCH_EDIT_TEXT, ID_POPUP_SCH_SET_SHAPE_TEXT, ID_POPUP_END_LINE, ID_POPUP_SCH_END_SHEET, - ID_POPUP_SCH_EDIT_SHEET, ID_POPUP_SCH_RESIZE_SHEET, ID_POPUP_SCH_CLEANUP_SHEET, - ID_POPUP_SCH_EDIT_SHEET_PIN, ID_POPUP_IMPORT_GLABEL, ID_POPUP_SCH_GENERIC_ORIENT_CMP, ID_POPUP_SCH_GENERIC_EDIT_CMP, - ID_POPUP_SCH_EDIT_VALUE_CMP, - ID_POPUP_SCH_EDIT_REF_CMP, - ID_POPUP_SCH_EDIT_FOOTPRINT_CMP, ID_POPUP_SCH_EDIT_CONVERT_CMP, ID_POPUP_SCH_EDIT_FIELD, ID_POPUP_SCH_DISPLAYDOC_CMP, @@ -126,7 +119,6 @@ enum id_eeschema_frm ID_POPUP_SCH_ADD_GLABEL, ID_POPUP_SCH_GETINFO_MARKER, // Edit or change image orientation or context menu command IDs. - ID_POPUP_SCH_EDIT_IMAGE, ID_POPUP_SCH_MIRROR_X_IMAGE, ID_POPUP_SCH_MIRROR_Y_IMAGE, ID_POPUP_END_RANGE, @@ -180,7 +172,10 @@ enum id_eeschema_frm ID_SELECT_ITEM_END = ID_SELECT_ITEM_START + MAX_SELECT_ITEM_IDS, ID_SCH_ROTATE_ITEM, - + ID_SCH_EDIT_ITEM, + ID_SCH_EDIT_COMPONENT_VALUE, + ID_SCH_EDIT_COMPONENT_REFERENCE, + ID_SCH_EDIT_COMPONENT_FOOTPRINT, ID_POPUP_SCH_MOVE_ITEM, // Schematic editor commmands. These are command IDs that are generated by multiple diff --git a/eeschema/hotkeys.cpp b/eeschema/hotkeys.cpp index 8626bb2e92..310d3e31c8 100644 --- a/eeschema/hotkeys.cpp +++ b/eeschema/hotkeys.cpp @@ -159,13 +159,13 @@ static EDA_HOTKEY HkMirrorXComponent( wxT( "Mirror X Component" ), HK_MIRROR_X_C static EDA_HOTKEY HkOrientNormalComponent( wxT( "Orient Normal Component" ), HK_ORIENT_NORMAL_COMPONENT, 'N' ); static EDA_HOTKEY HkRotate( wxT( "Rotate Item" ), HK_ROTATE, 'R', ID_SCH_ROTATE_ITEM ); -static EDA_HOTKEY HkEdit( wxT( "Edit Schematic Item" ), HK_EDIT, 'E' ); +static EDA_HOTKEY HkEdit( wxT( "Edit Schematic Item" ), HK_EDIT, 'E', ID_SCH_EDIT_ITEM ); static EDA_HOTKEY HkEditComponentValue( wxT( "Edit Component Value" ), HK_EDIT_COMPONENT_VALUE, 'V', - ID_POPUP_SCH_EDIT_VALUE_CMP ); + ID_SCH_EDIT_COMPONENT_VALUE ); static EDA_HOTKEY HkEditComponentFootprint( wxT( "Edit Component Footprint" ), HK_EDIT_COMPONENT_FOOTPRINT, 'F', - ID_POPUP_SCH_EDIT_FOOTPRINT_CMP ); + ID_SCH_EDIT_COMPONENT_FOOTPRINT ); static EDA_HOTKEY HkMove( wxT( "Move Schematic Item" ), HK_MOVE_COMPONENT_OR_ITEM, 'M', ID_POPUP_SCH_MOVE_ITEM ); @@ -181,7 +181,7 @@ static EDA_HOTKEY HkMove2Drag( wxT( "Move Block -> Drag Block" ), static EDA_HOTKEY HkInsert( wxT( "Repeat Last Item" ), HK_REPEAT_LAST, WXK_INSERT ); static EDA_HOTKEY HkDelete( wxT( "Delete Item" ), HK_DELETE, WXK_DELETE ); -static EDA_HOTKEY HkFindItem( wxT( "Find Item" ), HK_FIND_ITEM, 'F' + GR_KB_CTRL ); +static EDA_HOTKEY HkFindItem( wxT( "Find Item" ), HK_FIND_ITEM, 'F' + GR_KB_CTRL, ID_FIND_ITEMS ); static EDA_HOTKEY HkFindNextItem( wxT( "Find Next Item" ), HK_FIND_NEXT_ITEM, WXK_F5, wxEVT_COMMAND_FIND ); static EDA_HOTKEY HkFindNextDrcMarker( wxT( "Find Next DRC Marker" ), HK_FIND_NEXT_DRC_MARKER, @@ -352,15 +352,6 @@ void SCH_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, GetEventHandler()->ProcessEvent( cmd ); break; - case HK_UNDO: - case HK_REDO: - if( notBusy ) - { - wxCommandEvent event( wxEVT_COMMAND_TOOL_CLICKED, hotKey->m_IdMenuEvent ); - wxPostEvent( this, event ); - } - break; - case HK_MOVEBLOCK_TO_DRAGBLOCK: // Switch to drag mode, when block moving HandleBlockEndByPopUp( BLOCK_DRAG, aDC ); break; @@ -374,15 +365,18 @@ void SCH_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, case HK_REPEAT_LAST: if( notBusy && m_itemToRepeat && ( m_itemToRepeat->GetFlags() == 0 ) ) RepeatDrawItem( aDC ); + break; + case HK_UNDO: + case HK_REDO: case HK_FIND_ITEM: if( notBusy ) { - wxCommandEvent evt; - evt.SetId( ID_FIND_ITEMS ); - Process_Special_Functions( evt ); + cmd.SetId( hotKey->m_IdMenuEvent ); + GetEventHandler()->ProcessEvent( cmd ); } + break; case HK_FIND_NEXT_ITEM: @@ -557,8 +551,11 @@ void SCH_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, break; - case HK_ROTATE: // Component or other schematic item rotation. + case HK_ROTATE: // Rotate schematic item or block. case HK_MOVE_COMPONENT_OR_ITEM: // Start move schematic item. + case HK_EDIT: // Edit schematic item. + case HK_EDIT_COMPONENT_VALUE: // Edit component value field. + case HK_EDIT_COMPONENT_FOOTPRINT: // Edit component footprint field. { EDA_HOTKEY_CLIENT_DATA data( aPosition ); cmd.SetInt( aHotKey ); @@ -567,72 +564,6 @@ void SCH_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, GetEventHandler()->ProcessEvent( cmd ); break; } - - case HK_EDIT: - - if( itemInEdit ) - break; - - if( aItem == NULL ) - { - aItem = LocateAndShowItem( aPosition, SCH_COLLECTOR::EditableItems ); - - if( aItem == NULL ) - break; - } - - switch( aItem->Type() ) - { - case SCH_COMPONENT_T: - EditComponent( (SCH_COMPONENT*) aItem ); - break; - - case SCH_SHEET_T: - cmd.SetId( ID_POPUP_SCH_EDIT_SHEET ); - wxPostEvent( this, cmd ); - break; - - case SCH_SHEET_PIN_T: - cmd.SetId( ID_POPUP_SCH_EDIT_SHEET_PIN ); - wxPostEvent( this, cmd ); - break; - - case SCH_TEXT_T: - case SCH_LABEL_T: - case SCH_GLOBAL_LABEL_T: - case SCH_HIERARCHICAL_LABEL_T: - EditSchematicText( (SCH_TEXT*) aItem ); - break; - - case SCH_FIELD_T: - EditComponentFieldText( (SCH_FIELD*) aItem, aDC ); - break; - - case SCH_BITMAP_T: - EditImage( (SCH_BITMAP*) aItem ); - break; - default: - ; - } - - break; - - case HK_EDIT_COMPONENT_VALUE: - case HK_EDIT_COMPONENT_FOOTPRINT: - - if( itemInEdit ) - break; - - if( aItem == NULL ) - aItem = LocateAndShowItem( aPosition, SCH_COLLECTOR::ComponentsOnly ); - - if( aItem ) - { - cmd.SetId( hotKey->m_IdMenuEvent ); - wxPostEvent( this, cmd ); - } - - break; } } diff --git a/eeschema/onrightclick.cpp b/eeschema/onrightclick.cpp index 56ea893c25..d240f8910f 100644 --- a/eeschema/onrightclick.cpp +++ b/eeschema/onrightclick.cpp @@ -252,7 +252,7 @@ void AddMenusForComponentField( wxMenu* PopMenu, SCH_FIELD* Field ) msg = AddHotkeyName( _( "Rotate Field" ), s_Schematic_Hokeys_Descr, HK_ROTATE ); AddMenuItem( PopMenu, ID_SCH_ROTATE_ITEM, msg, KiBitmap( rotate_field_xpm ) ); msg = AddHotkeyName( _( "Edit Field" ), s_Schematic_Hokeys_Descr, HK_EDIT ); - AddMenuItem( PopMenu, ID_POPUP_SCH_EDIT_FIELD, msg, KiBitmap( edit_text_xpm ) ); + AddMenuItem( PopMenu, ID_SCH_EDIT_ITEM, msg, KiBitmap( edit_text_xpm ) ); } @@ -300,19 +300,19 @@ void AddMenusForComponent( wxMenu* PopMenu, SCH_COMPONENT* Component ) wxMenu* editmenu = new wxMenu; msg = AddHotkeyName( _( "Edit" ), s_Schematic_Hokeys_Descr, HK_EDIT ); - AddMenuItem( editmenu, ID_POPUP_SCH_EDIT_CMP, msg, KiBitmap( edit_component_xpm ) ); + AddMenuItem( editmenu, ID_SCH_EDIT_ITEM, msg, KiBitmap( edit_component_xpm ) ); if( libComponent && libComponent->IsNormal() ) { msg = AddHotkeyName( _( "Value " ), s_Schematic_Hokeys_Descr, HK_EDIT_COMPONENT_VALUE ); - AddMenuItem( editmenu, ID_POPUP_SCH_EDIT_VALUE_CMP, msg, KiBitmap( edit_comp_value_xpm ) ); + AddMenuItem( editmenu, ID_SCH_EDIT_COMPONENT_VALUE, msg, KiBitmap( edit_comp_value_xpm ) ); - AddMenuItem( editmenu, ID_POPUP_SCH_EDIT_REF_CMP, _( "Reference" ), + AddMenuItem( editmenu, ID_SCH_EDIT_COMPONENT_REFERENCE, _( "Reference" ), KiBitmap( edit_comp_ref_xpm ) ); msg = AddHotkeyName( _( "Footprint " ), s_Schematic_Hokeys_Descr, HK_EDIT_COMPONENT_FOOTPRINT ); - AddMenuItem( editmenu, ID_POPUP_SCH_EDIT_FOOTPRINT_CMP, msg, + AddMenuItem( editmenu, ID_SCH_EDIT_COMPONENT_FOOTPRINT, msg, KiBitmap( edit_comp_footprint_xpm ) ); } @@ -348,7 +348,7 @@ void AddMenusForComponent( wxMenu* PopMenu, SCH_COMPONENT* Component ) KiBitmap( libedit_xpm ) ); } - AddMenuItem( PopMenu, editmenu, ID_POPUP_SCH_GENERIC_EDIT_CMP, + AddMenuItem( PopMenu, editmenu, ID_SCH_EDIT_ITEM, _( "Edit Component" ), KiBitmap( edit_component_xpm ) ); if( !Component->GetFlags() ) @@ -386,7 +386,7 @@ void AddMenusForGLabel( wxMenu* PopMenu, SCH_GLOBALLABEL* GLabel ) msg = AddHotkeyName( _( "Rotate Global Label" ), s_Schematic_Hokeys_Descr, HK_ROTATE ); AddMenuItem( PopMenu, ID_SCH_ROTATE_ITEM, msg, KiBitmap( rotate_glabel_xpm ) ); msg = AddHotkeyName( _( "Edit Global Label" ), s_Schematic_Hokeys_Descr, HK_EDIT ); - AddMenuItem( PopMenu, ID_POPUP_SCH_EDIT_TEXT, msg, KiBitmap( edit_text_xpm ) ); + AddMenuItem( PopMenu, ID_SCH_EDIT_ITEM, msg, KiBitmap( edit_text_xpm ) ); msg = AddHotkeyName( _( "Delete Global Label" ), s_Schematic_Hokeys_Descr, HK_DELETE ); AddMenuItem( PopMenu, ID_POPUP_SCH_DELETE, msg, KiBitmap( delete_text_xpm ) ); @@ -422,7 +422,7 @@ void AddMenusForHLabel( wxMenu* PopMenu, SCH_HIERLABEL* HLabel ) msg = AddHotkeyName( _( "Rotate Hierarchical Label" ), s_Schematic_Hokeys_Descr, HK_ROTATE ); AddMenuItem( PopMenu, ID_SCH_ROTATE_ITEM, msg, KiBitmap( rotate_glabel_xpm ) ); msg = AddHotkeyName( _( "Edit Hierarchical Label" ), s_Schematic_Hokeys_Descr, HK_EDIT ); - AddMenuItem( PopMenu, ID_POPUP_SCH_EDIT_TEXT, msg, KiBitmap( edit_text_xpm ) ); + AddMenuItem( PopMenu, ID_SCH_EDIT_ITEM, msg, KiBitmap( edit_text_xpm ) ); msg = AddHotkeyName( _( "Delete Hierarchical Label" ), s_Schematic_Hokeys_Descr, HK_DELETE ); AddMenuItem( PopMenu, ID_POPUP_SCH_DELETE, msg, KiBitmap( delete_text_xpm ) ); @@ -458,7 +458,7 @@ void AddMenusForLabel( wxMenu* PopMenu, SCH_LABEL* Label ) msg = AddHotkeyName( _( "Rotate Label" ), s_Schematic_Hokeys_Descr, HK_ROTATE ); AddMenuItem( PopMenu, ID_SCH_ROTATE_ITEM, msg, KiBitmap( rotate_ccw_xpm ) ); msg = AddHotkeyName( _( "Edit Label" ), s_Schematic_Hokeys_Descr, HK_EDIT ); - AddMenuItem( PopMenu, ID_POPUP_SCH_EDIT_TEXT, msg, KiBitmap( edit_text_xpm ) ); + AddMenuItem( PopMenu, ID_SCH_EDIT_ITEM, msg, KiBitmap( edit_text_xpm ) ); msg = AddHotkeyName( _( "Delete Label" ), s_Schematic_Hokeys_Descr, HK_DELETE ); AddMenuItem( PopMenu, ID_POPUP_SCH_DELETE, msg, KiBitmap( delete_text_xpm ) ); @@ -492,7 +492,7 @@ void AddMenusForText( wxMenu* PopMenu, SCH_TEXT* Text ) msg = AddHotkeyName( _( "Rotate Text" ), s_Schematic_Hokeys_Descr, HK_ROTATE ); AddMenuItem( PopMenu, ID_SCH_ROTATE_ITEM, msg, KiBitmap( rotate_ccw_xpm ) ); msg = AddHotkeyName( _( "Edit Text" ), s_Schematic_Hokeys_Descr, HK_EDIT ); - AddMenuItem( PopMenu, ID_POPUP_SCH_EDIT_TEXT, msg, KiBitmap( edit_text_xpm ) ); + AddMenuItem( PopMenu, ID_SCH_EDIT_ITEM, msg, KiBitmap( edit_text_xpm ) ); msg = AddHotkeyName( _( "Delete Text" ), s_Schematic_Hokeys_Descr, HK_DELETE ); AddMenuItem( PopMenu, ID_POPUP_SCH_DELETE, msg, KiBitmap( delete_text_xpm ) ); @@ -639,7 +639,7 @@ void AddMenusForHierchicalSheet( wxMenu* PopMenu, SCH_SHEET* Sheet ) else { msg = AddHotkeyName( _( "Edit Sheet" ), s_Schematic_Hokeys_Descr, HK_EDIT ); - AddMenuItem( PopMenu, ID_POPUP_SCH_EDIT_SHEET, msg, KiBitmap( edit_sheet_xpm ) ); + AddMenuItem( PopMenu, ID_SCH_EDIT_ITEM, msg, KiBitmap( edit_sheet_xpm ) ); AddMenuItem( PopMenu, ID_POPUP_SCH_RESIZE_SHEET, _( "Resize Sheet" ), KiBitmap( resize_sheet_xpm ) ); @@ -669,8 +669,7 @@ void AddMenusForSheetPin( wxMenu* PopMenu, SCH_SHEET_PIN* PinSheet ) AddMenuItem( PopMenu, ID_POPUP_SCH_MOVE_ITEM, msg, KiBitmap( move_xpm ) ); } - AddMenuItem( PopMenu, ID_POPUP_SCH_EDIT_SHEET_PIN, _( "Edit Sheet Pin" ), - KiBitmap( edit_xpm ) ); + AddMenuItem( PopMenu, ID_SCH_EDIT_ITEM, _( "Edit Sheet Pin" ), KiBitmap( edit_xpm ) ); if( !PinSheet->GetFlags() ) AddMenuItem( PopMenu, ID_POPUP_SCH_DELETE, _( "Delete Sheet Pin" ), @@ -746,7 +745,7 @@ void AddMenusForBitmap( wxMenu* aPopMenu, SCH_BITMAP * aBitmap ) if( aBitmap->GetFlags() == 0 ) { msg = AddHotkeyName( _( "Edit Image" ), s_Schematic_Hokeys_Descr, HK_EDIT ); - AddMenuItem( aPopMenu, ID_POPUP_SCH_EDIT_IMAGE, msg, KiBitmap( image_xpm ) ); + AddMenuItem( aPopMenu, ID_SCH_EDIT_ITEM, msg, KiBitmap( image_xpm ) ); aPopMenu->AppendSeparator(); msg = AddHotkeyName( _( "Delete Image" ), s_Schematic_Hokeys_Descr, HK_DELETE ); AddMenuItem( aPopMenu, ID_POPUP_SCH_DELETE, msg, KiBitmap( delete_xpm ) ); diff --git a/eeschema/schedit.cpp b/eeschema/schedit.cpp index bd5ef83e52..f0f7c383c0 100644 --- a/eeschema/schedit.cpp +++ b/eeschema/schedit.cpp @@ -69,29 +69,20 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_SCH_ENTRY_SELECT_SLASH: case ID_POPUP_SCH_ENTRY_SELECT_ANTISLASH: case ID_POPUP_END_LINE: - case ID_POPUP_SCH_EDIT_TEXT: case ID_POPUP_SCH_SET_SHAPE_TEXT: - case ID_POPUP_SCH_EDIT_SHEET: case ID_POPUP_SCH_CLEANUP_SHEET: case ID_POPUP_SCH_END_SHEET: case ID_POPUP_SCH_RESIZE_SHEET: case ID_POPUP_IMPORT_GLABEL: - case ID_POPUP_SCH_EDIT_SHEET_PIN: case ID_POPUP_SCH_DRAG_ITEM_REQUEST: - case ID_POPUP_SCH_EDIT_CMP: case ID_POPUP_SCH_INIT_CMP: case ID_POPUP_SCH_DISPLAYDOC_CMP: - case ID_POPUP_SCH_EDIT_VALUE_CMP: - case ID_POPUP_SCH_EDIT_REF_CMP: - case ID_POPUP_SCH_EDIT_FOOTPRINT_CMP: case ID_POPUP_SCH_EDIT_CONVERT_CMP: - case ID_POPUP_SCH_EDIT_FIELD: case ID_POPUP_DELETE_BLOCK: case ID_POPUP_PLACE_BLOCK: case ID_POPUP_ZOOM_BLOCK: case ID_POPUP_DRAG_BLOCK: case ID_POPUP_COPY_BLOCK: - case ID_POPUP_ROTATE_BLOCK: case ID_POPUP_MIRROR_X_BLOCK: case ID_POPUP_MIRROR_Y_BLOCK: case ID_POPUP_SCH_DELETE_NODE: @@ -137,6 +128,7 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) case wxID_CUT: if( screen->m_BlockLocate.m_Command != BLOCK_MOVE ) break; + HandleBlockEndByPopUp( BLOCK_DELETE, &dc ); m_itemToRepeat = NULL; SetSheetNumberAndCount(); @@ -171,19 +163,11 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) EndSegment( &dc ); break; - case ID_POPUP_SCH_EDIT_TEXT: - EditSchematicText( (SCH_TEXT*) item ); - break; - case ID_POPUP_SCH_SET_SHAPE_TEXT: // Not used break; - case ID_POPUP_SCH_EDIT_FIELD: - EditComponentFieldText( (SCH_FIELD*) item, &dc ); - break; - case ID_POPUP_SCH_DELETE_NODE: case ID_POPUP_SCH_DELETE_CONNECTION: DrawPanel->MoveCursorToCrossHair(); @@ -230,11 +214,6 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) screen->TestDanglingEnds( DrawPanel, &dc ); break; - case ID_POPUP_SCH_EDIT_SHEET: - if( EditSheet( (SCH_SHEET*) item, &dc ) ) - OnModify(); - break; - case ID_POPUP_IMPORT_GLABEL: if( item != NULL && item->Type() == SCH_SHEET_T ) screen->SetCurItem( ImportSheetPin( (SCH_SHEET*) item, &dc ) ); @@ -263,10 +242,6 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) } break; - case ID_POPUP_SCH_EDIT_SHEET_PIN: - EditSheetPin( (SCH_SHEET_PIN*) item, &dc ); - break; - case ID_POPUP_SCH_DRAG_ITEM_REQUEST: DrawPanel->MoveCursorToCrossHair(); @@ -284,44 +259,10 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) break; - case ID_POPUP_SCH_EDIT_CMP: - // Ensure the struct is a component (could be a struct of a - // component, like Field, text..) - if( item && item->Type() == SCH_COMPONENT_T ) - EditComponent( (SCH_COMPONENT*) item ); - - break; - case ID_POPUP_SCH_INIT_CMP: DrawPanel->MoveCursorToCrossHair(); break; - case ID_POPUP_SCH_EDIT_VALUE_CMP: - - // Ensure the struct is a component (could be a struct of a - // component, like Field, text..) - if( item != NULL && item->Type() == SCH_COMPONENT_T ) - EditComponentFieldText( ( (SCH_COMPONENT*) item )->GetField( VALUE ), &dc ); - - break; - - case ID_POPUP_SCH_EDIT_REF_CMP: - - // Ensure the struct is a component (could be a struct of a component, like Field, text..) - if( item != NULL && item->Type() == SCH_COMPONENT_T ) - EditComponentFieldText( ( (SCH_COMPONENT*) item )->GetField( REFERENCE ), &dc ); - - break; - - case ID_POPUP_SCH_EDIT_FOOTPRINT_CMP: - - // Ensure the struct is a component (could be a struct of a component, like Field, text..) - if( item && item->Type() == SCH_COMPONENT_T ) - EditComponentFieldText( ( (SCH_COMPONENT*) item )->GetField( FOOTPRINT ), &dc ); - - break; - - case ID_POPUP_SCH_EDIT_CONVERT_CMP: // Ensure the struct is a component (could be a struct of a component, like Field, text..) @@ -388,11 +329,6 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) SetSheetNumberAndCount(); break; - case ID_POPUP_ROTATE_BLOCK: - DrawPanel->MoveCursorToCrossHair(); - HandleBlockEndByPopUp( BLOCK_ROTATE, &dc ); - break; - case ID_POPUP_MIRROR_X_BLOCK: DrawPanel->MoveCursorToCrossHair(); HandleBlockEndByPopUp( BLOCK_MIRROR_X, &dc ); @@ -441,11 +377,6 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) break; - case ID_POPUP_SCH_EDIT_IMAGE: - if( item && item->GetFlags() == 0 ) - EditImage( (SCH_BITMAP*) item ); - break; - case ID_POPUP_SCH_MIRROR_X_IMAGE: if( item ) MirrorImage( (SCH_BITMAP*) item, true ); @@ -860,7 +791,96 @@ void SCH_EDIT_FRAME::OnRotate( wxCommandEvent& aEvent ) case SCH_SHEET_T: /// @todo allow sheet rotate on hotkey default: - break; + wxFAIL_MSG( wxString::Format( wxT( "Cannot rotate schematic item type %s." ), + GetChars( item->GetClass() ) ) ); + } + + if( item->GetFlags() == 0 ) + screen->SetCurItem( NULL ); +} + + +void SCH_EDIT_FRAME::OnEditItem( wxCommandEvent& aEvent ) +{ + SCH_SCREEN* screen = GetScreen(); + SCH_ITEM* item = screen->GetCurItem(); + + INSTALL_UNBUFFERED_DC( dc, DrawPanel ); + + if( item == NULL ) + { + // If we didn't get here by a hot key, then something has gone wrong. + if( aEvent.GetInt() == 0 ) + return; + + EDA_HOTKEY_CLIENT_DATA* data = (EDA_HOTKEY_CLIENT_DATA*) aEvent.GetClientObject(); + + wxCHECK_RET( data != NULL, wxT( "Invalid hot key client object." ) ); + + item = LocateAndShowItem( data->GetPosition(), SCH_COLLECTOR::EditableItems, + aEvent.GetInt() ); + + // Exit if no item found at the current location or the item is already being edited. + if( (item == NULL) || (item->GetFlags() != 0) ) + return; + } + + switch( item->Type() ) + { + case SCH_COMPONENT_T: + { + switch( aEvent.GetId() ) + { + case ID_SCH_EDIT_COMPONENT_REFERENCE: + EditComponentFieldText( ( (SCH_COMPONENT*) item )->GetField( REFERENCE ), &dc ); + break; + + case ID_SCH_EDIT_COMPONENT_VALUE: + EditComponentFieldText( ( (SCH_COMPONENT*) item )->GetField( VALUE ), &dc ); + break; + + case ID_SCH_EDIT_COMPONENT_FOOTPRINT: + EditComponentFieldText( ( (SCH_COMPONENT*) item )->GetField( FOOTPRINT ), &dc ); + break; + + case ID_SCH_EDIT_ITEM: + EditComponent( (SCH_COMPONENT*) item ); + break; + + default: + wxFAIL_MSG( wxString::Format( wxT( "Invalid schematic component edit command ID %d" ), + aEvent.GetId() ) ); + } + + break; + } + + case SCH_SHEET_T: + EditSheet( (SCH_SHEET*) item, &dc ); + break; + + case SCH_SHEET_PIN_T: + EditSheetPin( (SCH_SHEET_PIN*) item, &dc ); + break; + + case SCH_TEXT_T: + case SCH_LABEL_T: + case SCH_GLOBAL_LABEL_T: + case SCH_HIERARCHICAL_LABEL_T: + EditSchematicText( (SCH_TEXT*) item ); + break; + + case SCH_FIELD_T: + EditComponentFieldText( (SCH_FIELD*) item, &dc ); + break; + + case SCH_BITMAP_T: + EditImage( (SCH_BITMAP*) item ); + break; + + default: + wxFAIL_MSG( wxString::Format( wxT( "Cannot edit schematic item type %s." ), + GetChars( item->GetClass() ) ) ); } if( item->GetFlags() == 0 ) diff --git a/eeschema/schframe.cpp b/eeschema/schframe.cpp index c8a0de3f4f..4f32ef9ab6 100644 --- a/eeschema/schframe.cpp +++ b/eeschema/schframe.cpp @@ -137,6 +137,8 @@ BEGIN_EVENT_TABLE( SCH_EDIT_FRAME, EDA_DRAW_FRAME ) EVT_MENU( ID_SCH_ROTATE_ITEM, SCH_EDIT_FRAME::OnRotate ) EVT_MENU_RANGE( ID_POPUP_START_RANGE, ID_POPUP_END_RANGE, SCH_EDIT_FRAME::Process_Special_Functions ) + EVT_MENU_RANGE( ID_SCH_EDIT_ITEM, ID_SCH_EDIT_COMPONENT_FOOTPRINT, + SCH_EDIT_FRAME::OnEditItem ) // Tools and buttons options toolbar EVT_TOOL( ID_TB_OPTIONS_HIDDEN_PINS, SCH_EDIT_FRAME::OnSelectOptionToolbar ) diff --git a/eeschema/sheet.cpp b/eeschema/sheet.cpp index 444def4c94..604805e7a6 100644 --- a/eeschema/sheet.cpp +++ b/eeschema/sheet.cpp @@ -1,13 +1,31 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: sheet.cpp -// Purpose: -// Author: jean-pierre Charras -// Modified by: Wayne Stambaugh -// Created: 08/02/2006 18:37:02 -// RCS-ID: -// Copyright: License GNU -// License: -///////////////////////////////////////////////////////////////////////////// +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2006 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com + * Copyright (C) 2009-2011 Wayne Stambaugh + * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/** + * @file sheet.cpp + */ #include "fctsys.h" #include "gr_basic.h" @@ -188,6 +206,7 @@ bool SCH_EDIT_FRAME::EditSheet( SCH_SHEET* aSheet, wxDC* aDC ) DrawPanel->MoveCursorToCrossHair(); DrawPanel->m_IgnoreMouseEvents = false; aSheet->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); + OnModify(); return true; } diff --git a/include/wxEeschemaStruct.h b/include/wxEeschemaStruct.h index 11bb998781..b1eab1faac 100644 --- a/include/wxEeschemaStruct.h +++ b/include/wxEeschemaStruct.h @@ -617,14 +617,24 @@ public: // General search: private: + /** + * Function OnMoveItem + * handles the #ID_SCH_MOVE_ITEM event used to move schematic itams. + */ void OnMoveItem( wxCommandEvent& aEvent ); /** * Function OnRotate - * handles the #ID_SCH_ROTATE_ITEM event used to rotates schematic itams and blocks. + * handles the #ID_SCH_ROTATE_ITEM event used to rotate schematic itams and blocks. */ void OnRotate( wxCommandEvent& aEvent ); + /** + * Function OnEditItem + * handles the #ID_SCH_EDIT_ITEM event used to edit schematic itams. + */ + void OnEditItem( wxCommandEvent& aEvent ); + void OnExit( wxCommandEvent& event ); void OnAnnotate( wxCommandEvent& event ); void OnErc( wxCommandEvent& event );