From cfc3d6dfd6f5e8b5615b528cb87e3049ccfd906b Mon Sep 17 00:00:00 2001 From: Wayne Stambaugh Date: Wed, 30 Mar 2011 15:26:05 -0400 Subject: [PATCH] EESchema sheet pin code improvements. * Change all code references to pin sheet and sheet label to sheet pin to more closely match the sheet pin object for improved code readability. * Change menu and tool bar text from pin sheet to sheet pin for improved user readability. * Moved sheet pin place method to sheet pin object source file. * Move last sheet pin stored state information into schematic frame object. * Add Doxygen comments for the sheet pin editing methods. --- eeschema/build_BOM.cpp | 16 +- eeschema/dialogs/dialog_edit_label.cpp | 2 +- eeschema/eeschema_id.h | 6 +- eeschema/help_common_strings.h | 8 +- eeschema/hotkeys.cpp | 8 +- eeschema/menubar.cpp | 6 +- eeschema/netlist.cpp | 14 +- eeschema/onleftclick.cpp | 10 +- eeschema/onrightclick.cpp | 22 +-- eeschema/operations_on_items_lists.cpp | 12 +- eeschema/plot.cpp | 7 +- eeschema/sch_collectors.cpp | 10 +- eeschema/sch_screen.cpp | 20 +-- eeschema/sch_sheet.cpp | 128 +++++++------- eeschema/sch_sheet.h | 94 +++++------ eeschema/sch_sheet_pin.cpp | 39 ++++- eeschema/schedit.cpp | 20 +-- eeschema/schematic_undo_redo.cpp | 2 +- eeschema/sheet.cpp | 6 +- eeschema/sheetlab.cpp | 224 ++++++++++--------------- eeschema/tool_sch.cpp | 6 +- include/base_struct.h | 2 +- include/wxEeschemaStruct.h | 53 +++++- 23 files changed, 376 insertions(+), 339 deletions(-) diff --git a/eeschema/build_BOM.cpp b/eeschema/build_BOM.cpp index fed846ba4f..cb572b7ae1 100644 --- a/eeschema/build_BOM.cpp +++ b/eeschema/build_BOM.cpp @@ -46,11 +46,11 @@ void GenListeGLabels( LABEL_OBJECT_LIST& aList ) { SCH_SHEET* sheet = (SCH_SHEET*) schItem; - BOOST_FOREACH( SCH_SHEET_PIN& sheetLabel, sheet->GetSheetPins() ) + BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, sheet->GetPins() ) { - label.m_LabelType = SCH_SHEET_LABEL_T; + label.m_LabelType = SCH_SHEET_PIN_T; label.m_SheetPath = *path; - label.m_Label = &sheetLabel; + label.m_Label = &sheetPin; aList.push_back( label ); } } @@ -75,12 +75,12 @@ bool SortLabelsByValue( const LABEL_OBJECT& obj1, const LABEL_OBJECT& obj2 ) int ii; wxString* Text1, * Text2; - if( obj1.m_LabelType == SCH_SHEET_LABEL_T ) + if( obj1.m_LabelType == SCH_SHEET_PIN_T ) Text1 = &( (SCH_SHEET_PIN*)(obj1.m_Label) )->m_Text; else Text1 = &( (SCH_TEXT*)(obj1.m_Label) )->m_Text; - if( obj2.m_LabelType == SCH_SHEET_LABEL_T ) + if( obj2.m_LabelType == SCH_SHEET_PIN_T ) Text2 = &( (SCH_SHEET_PIN*)(obj2.m_Label) )->m_Text; else Text2 = &( (SCH_TEXT*)(obj2.m_Label) )->m_Text; @@ -109,12 +109,12 @@ bool SortLabelsBySheet( const LABEL_OBJECT& obj1, const LABEL_OBJECT& obj2 ) if( ii == 0 ) { - if( obj1.m_LabelType == SCH_SHEET_LABEL_T ) + if( obj1.m_LabelType == SCH_SHEET_PIN_T ) Text1 = ( (SCH_SHEET_PIN*) obj1.m_Label )->m_Text; else Text1 = ( (SCH_TEXT*) obj1.m_Label )->m_Text; - if( obj2.m_LabelType == SCH_SHEET_LABEL_T ) + if( obj2.m_LabelType == SCH_SHEET_PIN_T ) Text2 = ( (SCH_SHEET_PIN*) obj2.m_Label )->m_Text; else Text2 = ( (SCH_TEXT*) obj2.m_Label )->m_Text; @@ -157,7 +157,7 @@ int PrintListeGLabel( FILE* f, LABEL_OBJECT_LIST& aList ) fputs( TO_UTF8( msg ), f ); break; - case SCH_SHEET_LABEL_T: + case SCH_SHEET_PIN_T: { pinsheet = (SCH_SHEET_PIN*) aList[ii].m_Label; int jj = pinsheet->m_Shape; diff --git a/eeschema/dialogs/dialog_edit_label.cpp b/eeschema/dialogs/dialog_edit_label.cpp index 1bff3e4f0c..0a932292af 100644 --- a/eeschema/dialogs/dialog_edit_label.cpp +++ b/eeschema/dialogs/dialog_edit_label.cpp @@ -84,7 +84,7 @@ void DialogLabelEditor::InitDialog() SetTitle( _( "Label Properties" ) ); break; - case SCH_SHEET_LABEL_T: + case SCH_SHEET_PIN_T: SetTitle( _( "Hierarchical Sheet Pin Properties." ) ); break; diff --git a/eeschema/eeschema_id.h b/eeschema/eeschema_id.h index 270c008e31..2a9637cfc7 100644 --- a/eeschema/eeschema_id.h +++ b/eeschema/eeschema_id.h @@ -43,7 +43,7 @@ enum id_eeschema_frm ID_GLABEL_BUTT, ID_HIERLABEL_BUTT, ID_IMPORT_HLABEL_BUTT, - ID_SHEET_LABEL_BUTT, + ID_SHEET_PIN_BUTT, ID_NOCONN_BUTT, ID_JUNCTION_BUTT, ID_SHEET_SYMBOL_BUTT, @@ -84,8 +84,8 @@ enum id_eeschema_frm ID_POPUP_SCH_EDIT_SHEET, ID_POPUP_SCH_RESIZE_SHEET, ID_POPUP_SCH_CLEANUP_SHEET, - ID_POPUP_SCH_EDIT_PINSHEET, - ID_POPUP_SCH_MOVE_PINSHEET, + ID_POPUP_SCH_EDIT_SHEET_PIN, + ID_POPUP_SCH_MOVE_SHEET_PIN, ID_POPUP_IMPORT_GLABEL, ID_POPUP_SCH_GENERIC_ORIENT_CMP, ID_POPUP_SCH_GENERIC_EDIT_CMP, diff --git a/eeschema/help_common_strings.h b/eeschema/help_common_strings.h index dd46b9ff8b..b0dff7f1a8 100644 --- a/eeschema/help_common_strings.h +++ b/eeschema/help_common_strings.h @@ -39,13 +39,13 @@ _(\ "Place a global label.\nWarning: all global labels with the same name are connected in whole hierarchy" ) #define HELP_PLACE_HIER_LABEL \ - _( "Place a hierarchical label. This label will be seen as a pin sheet in the sheet symbol" ) + _( "Place a hierarchical label. This label will be seen as a hierarchical pin in the sheet symbol" ) #define HELP_PLACE_JUNCTION _( "Place a junction" ) #define HELP_PLACE_SHEET _( "Create a hierarchical sheet" ) -#define HELP_IMPORT_PINSHEET _( \ - "Place a pin sheet, imported from the corresponding hierarchical label in sheet" ) -#define HELP_PLACE_PINSHEET _( "Place a hierarchical pin to sheet" ) +#define HELP_IMPORT_SHEETPIN _( \ + "Place a hierarchical pin imported from the corresponding hierarchical label in sheet" ) +#define HELP_PLACE_SHEETPIN _( "Place a hierarchical pin in sheet" ) #define HELP_PLACE_GRAPHICLINES _( "Place graphic lines or polygons" ) #define HELP_PLACE_GRAPHICTEXTS _( "Place graphic text (comment)" ) diff --git a/eeschema/hotkeys.cpp b/eeschema/hotkeys.cpp index a47d4bf0dc..90ffbfd89b 100644 --- a/eeschema/hotkeys.cpp +++ b/eeschema/hotkeys.cpp @@ -743,8 +743,8 @@ void SCH_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, wxPostEvent( this, cmd ); break; - case SCH_SHEET_LABEL_T: - cmd.SetId( ID_POPUP_SCH_MOVE_PINSHEET ); + case SCH_SHEET_PIN_T: + cmd.SetId( ID_POPUP_SCH_MOVE_SHEET_PIN ); wxPostEvent( this, cmd ); break; @@ -791,8 +791,8 @@ void SCH_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, wxPostEvent( this, cmd ); break; - case SCH_SHEET_LABEL_T: - cmd.SetId( ID_POPUP_SCH_EDIT_PINSHEET ); + case SCH_SHEET_PIN_T: + cmd.SetId( ID_POPUP_SCH_EDIT_SHEET_PIN ); wxPostEvent( this, cmd ); break; diff --git a/eeschema/menubar.cpp b/eeschema/menubar.cpp index 539c3ae2cf..034e98de89 100644 --- a/eeschema/menubar.cpp +++ b/eeschema/menubar.cpp @@ -337,13 +337,13 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() /* Import hierarchical sheet */ item = new wxMenuItem( placeMenu, ID_IMPORT_HLABEL_BUTT, _( "Import Hierarchical Label" ), - HELP_IMPORT_PINSHEET, wxITEM_NORMAL ); + HELP_IMPORT_SHEETPIN, wxITEM_NORMAL ); item->SetBitmap( import_hierarchical_label_xpm ); placeMenu->Append( item ); /* Add hierarchical Pin to Sheet */ - item = new wxMenuItem( placeMenu, ID_SHEET_LABEL_BUTT, _( "Add Hierarchical Pin to Sheet" ), - HELP_PLACE_PINSHEET, wxITEM_NORMAL ); + item = new wxMenuItem( placeMenu, ID_SHEET_PIN_BUTT, _( "Add Hierarchical Pin to Sheet" ), + HELP_PLACE_SHEETPIN, wxITEM_NORMAL ); item->SetBitmap( add_hierar_pin_xpm ); placeMenu->Append( item ); diff --git a/eeschema/netlist.cpp b/eeschema/netlist.cpp index 5f4a9bd683..7de7858cd5 100644 --- a/eeschema/netlist.cpp +++ b/eeschema/netlist.cpp @@ -694,19 +694,19 @@ static void AddConnectedObjects( SCH_SHEET_PATH* sheetlist, list.Push( STRUCT ); SCH_SHEET* sheet = (SCH_SHEET*) DrawList; - BOOST_FOREACH( SCH_SHEET_PIN label, sheet->GetSheetPins() ) + BOOST_FOREACH( SCH_SHEET_PIN pin, sheet->GetPins() ) { - ii = IsBusLabel( label.m_Text ); + ii = IsBusLabel( pin.m_Text ); new_item = new NETLIST_OBJECT(); new_item->m_SheetListInclude = *sheetlist; - new_item->m_Comp = &label; + new_item->m_Comp = &pin; new_item->m_SheetList = *sheetlist; new_item->m_Link = DrawList; new_item->m_Type = NET_SHEETLABEL; - new_item->m_ElectricalType = label.m_Shape; - new_item->m_Label = label.m_Text; + new_item->m_ElectricalType = pin.m_Shape; + new_item->m_Label = pin.m_Text; new_item->m_SheetListInclude = list; - new_item->m_Start = new_item->m_End = label.m_Pos; + new_item->m_Start = new_item->m_End = pin.m_Pos; aNetItemBuffer.push_back( new_item ); if( ii ) @@ -716,7 +716,7 @@ static void AddConnectedObjects( SCH_SHEET_PATH* sheetlist, break; } - case SCH_SHEET_LABEL_T: + case SCH_SHEET_PIN_T: default: { wxString msg; diff --git a/eeschema/onleftclick.cpp b/eeschema/onleftclick.cpp index deef86e7c4..6b4b828971 100644 --- a/eeschema/onleftclick.cpp +++ b/eeschema/onleftclick.cpp @@ -44,7 +44,7 @@ void SCH_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition ) case SCH_GLOBAL_LABEL_T: case SCH_HIERARCHICAL_LABEL_T: case SCH_TEXT_T: - case SCH_SHEET_LABEL_T: + case SCH_SHEET_PIN_T: case SCH_SHEET_T: case SCH_BUS_ENTRY_T: case SCH_JUNCTION_T: @@ -239,7 +239,7 @@ void SCH_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition ) break; case ID_IMPORT_HLABEL_BUTT: - case ID_SHEET_LABEL_BUTT: + case ID_SHEET_PIN_BUTT: if( ( item == NULL ) || ( item->GetFlags() == 0 ) ) item = LocateAndShowItem( aPosition, SCH_COLLECTOR::SheetsAndSheetLabels ); @@ -249,11 +249,11 @@ void SCH_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition ) if( (item->Type() == SCH_SHEET_T) && (item->GetFlags() == 0) ) { if( GetToolId() == ID_IMPORT_HLABEL_BUTT ) - GetScreen()->SetCurItem( Import_PinSheet( (SCH_SHEET*) item, aDC ) ); + GetScreen()->SetCurItem( ImportSheetPin( (SCH_SHEET*) item, aDC ) ); else - GetScreen()->SetCurItem( Create_PinSheet( (SCH_SHEET*) item, aDC ) ); + GetScreen()->SetCurItem( CreateSheetPin( (SCH_SHEET*) item, aDC ) ); } - else if( (item->Type() == SCH_SHEET_LABEL_T) && (item->GetFlags() != 0) ) + else if( (item->Type() == SCH_SHEET_PIN_T) && (item->GetFlags() != 0) ) { item->Place( this, aDC ); GetScreen()->TestDanglingEnds(); diff --git a/eeschema/onrightclick.cpp b/eeschema/onrightclick.cpp index 4589d70496..73762d43af 100644 --- a/eeschema/onrightclick.cpp +++ b/eeschema/onrightclick.cpp @@ -33,7 +33,7 @@ static void AddMenusForBlock( wxMenu* PopMenu, SCH_EDIT_FRAME* frame ); static void AddMenusForWire( wxMenu* PopMenu, SCH_LINE* Wire, SCH_EDIT_FRAME* frame ); static void AddMenusForBus( wxMenu* PopMenu, SCH_LINE* Bus, SCH_EDIT_FRAME* frame ); static void AddMenusForHierchicalSheet( wxMenu* PopMenu, SCH_SHEET* Sheet ); -static void AddMenusForPinSheet( wxMenu* PopMenu, SCH_SHEET_PIN* PinSheet ); +static void AddMenusForSheetPin( wxMenu* PopMenu, SCH_SHEET_PIN* PinSheet ); static void AddMenusForText( wxMenu* PopMenu, SCH_TEXT* Text ); static void AddMenusForLabel( wxMenu* PopMenu, SCH_LABEL* Label ); static void AddMenusForGLabel( wxMenu* PopMenu, SCH_GLOBALLABEL* GLabel ); @@ -186,8 +186,8 @@ bool SCH_EDIT_FRAME::OnRightClick( const wxPoint& aPosition, wxMenu* PopMenu ) AddMenusForHierchicalSheet( PopMenu, (SCH_SHEET*) item ); break; - case SCH_SHEET_LABEL_T: - AddMenusForPinSheet( PopMenu, (SCH_SHEET_PIN*) item ); + case SCH_SHEET_PIN_T: + AddMenusForSheetPin( PopMenu, (SCH_SHEET_PIN*) item ); break; default: @@ -587,11 +587,11 @@ void AddMenusForHierchicalSheet( wxMenu* PopMenu, SCH_SHEET* Sheet ) ADD_MENUITEM( PopMenu, ID_POPUP_SCH_RESIZE_SHEET, _( "Resize Sheet" ), resize_sheet_xpm ); PopMenu->AppendSeparator(); - ADD_MENUITEM( PopMenu, ID_POPUP_IMPORT_GLABEL, _( "Import PinSheets" ), + ADD_MENUITEM( PopMenu, ID_POPUP_IMPORT_GLABEL, _( "Import Sheet Pins" ), import_hierarchical_label_xpm ); - if( Sheet->HasUndefinedLabels() ) // Sheet has pin labels, and can be cleaned - ADD_MENUITEM( PopMenu, ID_POPUP_SCH_CLEANUP_SHEET, _( "Cleanup PinSheets" ), + if( Sheet->HasUndefinedPins() ) // Sheet has pin labels, and can be cleaned + ADD_MENUITEM( PopMenu, ID_POPUP_SCH_CLEANUP_SHEET, _( "Cleanup Sheet Pins" ), options_pinsheet_xpm ); PopMenu->AppendSeparator(); msg = AddHotkeyName( _( "Delete Sheet" ), s_Schematic_Hokeys_Descr, HK_DELETE ); @@ -600,21 +600,21 @@ void AddMenusForHierchicalSheet( wxMenu* PopMenu, SCH_SHEET* Sheet ) } -void AddMenusForPinSheet( wxMenu* PopMenu, SCH_SHEET_PIN* PinSheet ) +void AddMenusForSheetPin( wxMenu* PopMenu, SCH_SHEET_PIN* PinSheet ) { wxString msg; if( !PinSheet->GetFlags() ) { - msg = AddHotkeyName( _( "Move PinSheet" ), s_Schematic_Hokeys_Descr, + msg = AddHotkeyName( _( "Move Sheet Pin" ), s_Schematic_Hokeys_Descr, HK_MOVE_COMPONENT_OR_ITEM ); - ADD_MENUITEM( PopMenu, ID_POPUP_SCH_MOVE_PINSHEET, msg, move_xpm ); + ADD_MENUITEM( PopMenu, ID_POPUP_SCH_MOVE_SHEET_PIN, msg, move_xpm ); } - ADD_MENUITEM( PopMenu, ID_POPUP_SCH_EDIT_PINSHEET, _( "Edit PinSheet" ), edit_xpm ); + ADD_MENUITEM( PopMenu, ID_POPUP_SCH_EDIT_SHEET_PIN, _( "Edit Sheet Pin" ), edit_xpm ); if( !PinSheet->GetFlags() ) - ADD_MENUITEM( PopMenu, ID_POPUP_SCH_DELETE, _( "Delete PinSheet" ), delete_pinsheet_xpm ); + ADD_MENUITEM( PopMenu, ID_POPUP_SCH_DELETE, _( "Delete Sheet Pin" ), delete_pinsheet_xpm ); } diff --git a/eeschema/operations_on_items_lists.cpp b/eeschema/operations_on_items_lists.cpp index fff257b432..060a712319 100644 --- a/eeschema/operations_on_items_lists.cpp +++ b/eeschema/operations_on_items_lists.cpp @@ -42,7 +42,7 @@ void SetSchItemParent( SCH_ITEM* Struct, SCH_SCREEN* Screen ) Struct->SetParent( Screen ); break; - case SCH_SHEET_LABEL_T: + case SCH_SHEET_PIN_T: break; default: @@ -121,10 +121,10 @@ void DeleteItemsInList( EDA_DRAW_PANEL* panel, PICKED_ITEMS_LIST& aItemsList ) SCH_ITEM* item = (SCH_ITEM*) aItemsList.GetPickedItem( ii ); ITEM_PICKER itemWrapper( item, UR_DELETED ); - if( item->Type() == SCH_SHEET_LABEL_T ) + if( item->Type() == SCH_SHEET_PIN_T ) { /* this item is depending on a sheet, and is not in global list */ - wxMessageBox( wxT( "DeleteItemsInList() err: unexpected SCH_SHEET_LABEL_T" ) ); + wxMessageBox( wxT( "DeleteItemsInList() err: unexpected SCH_SHEET_PIN_T" ) ); } else { @@ -147,14 +147,14 @@ void SCH_EDIT_FRAME::DeleteItem( SCH_ITEM* aItem ) SCH_SCREEN* screen = GetScreen(); - if( aItem->Type() == SCH_SHEET_LABEL_T ) + if( aItem->Type() == SCH_SHEET_PIN_T ) { // This iten is attached to a node, and is not accessible by the global list directly. SCH_SHEET* sheet = (SCH_SHEET*) aItem->GetParent(); wxCHECK_RET( (sheet != NULL) && (sheet->Type() == SCH_SHEET_T), wxT( "Sheet label has invalid parent item." ) ); SaveCopyInUndoList( (SCH_ITEM*) sheet, UR_CHANGED ); - sheet->RemoveLabel( (SCH_SHEET_PIN*) aItem ); + sheet->RemovePin( (SCH_SHEET_PIN*) aItem ); DrawPanel->RefreshDrawingRect( sheet->GetBoundingBox() ); } else @@ -198,7 +198,7 @@ void DuplicateItemsInList( SCH_SCREEN* screen, PICKED_ITEMS_LIST& aItemsList, case SCH_LABEL_T: case SCH_GLOBAL_LABEL_T: case SCH_HIERARCHICAL_LABEL_T: - case SCH_SHEET_LABEL_T: + case SCH_SHEET_PIN_T: case SCH_MARKER_T: case SCH_NO_CONNECT_T: default: diff --git a/eeschema/plot.cpp b/eeschema/plot.cpp index 5c8461b0e0..77b680bfa4 100644 --- a/eeschema/plot.cpp +++ b/eeschema/plot.cpp @@ -250,7 +250,7 @@ static void PlotTextStruct( PLOTTER* plotter, SCH_TEXT* aSchText ) switch( aSchText->Type() ) { - case SCH_SHEET_LABEL_T: + case SCH_SHEET_PIN_T: case SCH_GLOBAL_LABEL_T: case SCH_HIERARCHICAL_LABEL_T: case SCH_LABEL_T: @@ -373,7 +373,8 @@ static void PlotSheetStruct( PLOTTER* plotter, SCH_SHEET* Struct ) plotter->set_color( ReturnLayerColor( Struct->GetLayer() ) ); /* Draw texts : SheetLabel */ - BOOST_FOREACH( SCH_SHEET_PIN & pin_sheet, Struct->GetSheetPins() ) { + BOOST_FOREACH( SCH_SHEET_PIN& pin_sheet, Struct->GetPins() ) + { //pin_sheet.Plot( plotter ); PlotTextStruct( plotter, &pin_sheet ); } @@ -443,7 +444,7 @@ void PlotDrawlist( PLOTTER* plotter, SCH_ITEM* aDrawlist ) case SCH_POLYLINE_T: break; - case SCH_SHEET_LABEL_T: + case SCH_SHEET_PIN_T: break; case SCH_MARKER_T: diff --git a/eeschema/sch_collectors.cpp b/eeschema/sch_collectors.cpp index 15e46c000b..24cc257849 100644 --- a/eeschema/sch_collectors.cpp +++ b/eeschema/sch_collectors.cpp @@ -43,7 +43,7 @@ const KICAD_T SCH_COLLECTOR::AllItems[] = { SCH_FIELD_T, SCH_COMPONENT_T, LIB_PIN_T, - SCH_SHEET_LABEL_T, + SCH_SHEET_PIN_T, SCH_SHEET_T, EOT }; @@ -62,7 +62,7 @@ const KICAD_T SCH_COLLECTOR::AllItemsButPins[] = { SCH_HIERARCHICAL_LABEL_T, SCH_FIELD_T, SCH_COMPONENT_T, - SCH_SHEET_LABEL_T, + SCH_SHEET_PIN_T, SCH_SHEET_T, EOT }; @@ -75,7 +75,7 @@ const KICAD_T SCH_COLLECTOR::EditableItems[] = { SCH_HIERARCHICAL_LABEL_T, SCH_FIELD_T, SCH_COMPONENT_T, - SCH_SHEET_LABEL_T, + SCH_SHEET_PIN_T, SCH_SHEET_T, EOT }; @@ -94,7 +94,7 @@ const KICAD_T SCH_COLLECTOR::MovableItems[] = { SCH_HIERARCHICAL_LABEL_T, SCH_FIELD_T, SCH_COMPONENT_T, - SCH_SHEET_LABEL_T, + SCH_SHEET_PIN_T, SCH_SHEET_T, EOT }; @@ -154,7 +154,7 @@ const KICAD_T SCH_COLLECTOR::SheetsOnly[] = { const KICAD_T SCH_COLLECTOR::SheetsAndSheetLabels[] = { - SCH_SHEET_LABEL_T, + SCH_SHEET_PIN_T, SCH_SHEET_T, EOT }; diff --git a/eeschema/sch_screen.cpp b/eeschema/sch_screen.cpp index 43d5533a20..38062c5899 100644 --- a/eeschema/sch_screen.cpp +++ b/eeschema/sch_screen.cpp @@ -149,14 +149,14 @@ void SCH_SCREEN::DeleteItem( SCH_ITEM* aItem ) SetModify(); - if( aItem->Type() == SCH_SHEET_LABEL_T ) + if( aItem->Type() == SCH_SHEET_PIN_T ) { // This structure is attached to a sheet, get the parent sheet object. - SCH_SHEET_PIN* sheetLabel = (SCH_SHEET_PIN*) aItem; - SCH_SHEET* sheet = sheetLabel->GetParent(); + SCH_SHEET_PIN* sheetPin = (SCH_SHEET_PIN*) aItem; + SCH_SHEET* sheet = sheetPin->GetParent(); wxCHECK_RET( sheet != NULL, wxT( "Sheet label parent not properly set, bad programmer!" ) ); - sheet->RemoveLabel( sheetLabel ); + sheet->RemovePin( sheetPin ); return; } else @@ -228,11 +228,11 @@ SCH_ITEM* SCH_SCREEN::GetItem( const wxPoint& aPosition, int aAccuracy, KICAD_T return (SCH_ITEM*) field; } } - else if( (aType == SCH_SHEET_LABEL_T) && (item->Type() == SCH_SHEET_T) ) + else if( (aType == SCH_SHEET_PIN_T) && (item->Type() == SCH_SHEET_T) ) { SCH_SHEET* sheet = (SCH_SHEET*)item; - SCH_SHEET_PIN* label = sheet->GetLabel( aPosition ); + SCH_SHEET_PIN* label = sheet->GetPin( aPosition ); if( label ) return (SCH_ITEM*) label; @@ -625,7 +625,7 @@ LIB_PIN* SCH_SCREEN::GetPin( const wxPoint& aPosition, SCH_COMPONENT** aComponen SCH_SHEET_PIN* SCH_SCREEN::GetSheetLabel( const wxPoint& aPosition ) { - SCH_SHEET_PIN* sheetLabel = NULL; + SCH_SHEET_PIN* sheetPin = NULL; for( SCH_ITEM* item = GetDrawItems(); item != NULL; item = item->Next() ) { @@ -633,13 +633,13 @@ SCH_SHEET_PIN* SCH_SCREEN::GetSheetLabel( const wxPoint& aPosition ) continue; SCH_SHEET* sheet = (SCH_SHEET*) item; - sheetLabel = sheet->GetLabel( aPosition ); + sheetPin = sheet->GetPin( aPosition ); - if( sheetLabel ) + if( sheetPin ) break; } - return sheetLabel; + return sheetPin; } diff --git a/eeschema/sch_sheet.cpp b/eeschema/sch_sheet.cpp index 23757d1fb0..c51718dc44 100644 --- a/eeschema/sch_sheet.cpp +++ b/eeschema/sch_sheet.cpp @@ -53,10 +53,10 @@ SCH_SHEET::SCH_SHEET( const SCH_SHEET& aSheet ) : m_AssociatedScreen = aSheet.m_AssociatedScreen; m_SheetName = aSheet.m_SheetName; m_FileName = aSheet.m_FileName; - m_labels = aSheet.m_labels; + m_pins = aSheet.m_pins; - for( size_t i = 0; i < m_labels.size(); i++ ) - m_labels[i].SetParent( this ); + for( size_t i = 0; i < m_pins.size(); i++ ) + m_pins[i].SetParent( this ); if( m_AssociatedScreen ) m_AssociatedScreen->IncRefCount(); @@ -145,7 +145,7 @@ bool SCH_SHEET::Save( FILE* aFile ) const /* Save the list of labels in the sheet. */ - BOOST_FOREACH( const SCH_SHEET_PIN& label, m_labels ) + BOOST_FOREACH( const SCH_SHEET_PIN& label, m_pins ) { if( !label.Save( aFile ) ) return false; @@ -161,7 +161,7 @@ bool SCH_SHEET::Save( FILE* aFile ) const bool SCH_SHEET::Load( LINE_READER& aLine, wxString& aErrorMsg ) { int fieldNdx, size; - SCH_SHEET_PIN* SheetLabel; + SCH_SHEET_PIN* sheetPin; char* ptcar; m_TimeStamp = GetTimeStamp(); @@ -267,16 +267,16 @@ bool SCH_SHEET::Load( LINE_READER& aLine, wxString& aErrorMsg ) if( fieldNdx > 1 ) { - SheetLabel = new SCH_SHEET_PIN( this ); + sheetPin = new SCH_SHEET_PIN( this ); - if( !SheetLabel->Load( aLine, aErrorMsg ) ) + if( !sheetPin->Load( aLine, aErrorMsg ) ) { - delete SheetLabel; - SheetLabel = NULL; + delete sheetPin; + sheetPin = NULL; return false; } - AddLabel( SheetLabel ); + AddPin( sheetPin ); } } @@ -299,59 +299,59 @@ void SCH_SHEET::SwapData( SCH_SHEET* copyitem ) EXCHG( m_SheetName, copyitem->m_SheetName ); EXCHG( m_SheetNameSize, copyitem->m_SheetNameSize ); EXCHG( m_FileNameSize, copyitem->m_FileNameSize ); - m_labels.swap( copyitem->m_labels ); + m_pins.swap( copyitem->m_pins ); // Ensure sheet labels have their .m_Parent member pointing really on their // parent, after swapping. - BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, m_pins ) { sheetPin.SetParent( this ); } - BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, copyitem->m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, copyitem->m_pins ) { sheetPin.SetParent( copyitem ); } } -void SCH_SHEET::AddLabel( SCH_SHEET_PIN* aLabel ) +void SCH_SHEET::AddPin( SCH_SHEET_PIN* aSheetPin ) { - wxASSERT( aLabel != NULL ); - wxASSERT( aLabel->Type() == SCH_SHEET_LABEL_T ); + wxASSERT( aSheetPin != NULL ); + wxASSERT( aSheetPin->Type() == SCH_SHEET_PIN_T ); - m_labels.push_back( aLabel ); - renumberLabels(); + m_pins.push_back( aSheetPin ); + renumberPins(); } -void SCH_SHEET::RemoveLabel( SCH_SHEET_PIN* aLabel ) +void SCH_SHEET::RemovePin( SCH_SHEET_PIN* aSheetPin ) { - wxASSERT( aLabel != NULL ); - wxASSERT( aLabel->Type() == SCH_SHEET_LABEL_T ); + wxASSERT( aSheetPin != NULL ); + wxASSERT( aSheetPin->Type() == SCH_SHEET_PIN_T ); - SCH_SHEET_PIN_LIST::iterator i; + SCH_SHEET_PINS::iterator i; - for( i = m_labels.begin(); i < m_labels.end(); ++i ) + for( i = m_pins.begin(); i < m_pins.end(); ++i ) { - if( *i == aLabel ) + if( *i == aSheetPin ) { - m_labels.erase( i ); - renumberLabels(); + m_pins.erase( i ); + renumberPins(); return; } } wxLogDebug( wxT( "Fix me: attempt to remove label %s which is not in sheet %s." ), - GetChars( aLabel->m_Text ), GetChars( m_SheetName ) ); + GetChars( aSheetPin->m_Text ), GetChars( m_SheetName ) ); } -bool SCH_SHEET::HasLabel( const wxString& aName ) +bool SCH_SHEET::HasPin( const wxString& aName ) { - BOOST_FOREACH( SCH_SHEET_PIN label, m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN pin, m_pins ) { - if( label.m_Text.CmpNoCase( aName ) == 0 ) + if( pin.m_Text.CmpNoCase( aName ) == 0 ) return true; } @@ -361,18 +361,18 @@ bool SCH_SHEET::HasLabel( const wxString& aName ) bool SCH_SHEET::IsVerticalOrientation() { - BOOST_FOREACH( SCH_SHEET_PIN label, m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN pin, m_pins ) { - if( label.GetEdge() > 1 ) + if( pin.GetEdge() > 1 ) return true; } return false; } -bool SCH_SHEET::HasUndefinedLabels() +bool SCH_SHEET::HasUndefinedPins() { - BOOST_FOREACH( SCH_SHEET_PIN label, m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN pin, m_pins ) { /* Search the schematic for a hierarchical label corresponding to this sheet label. */ EDA_ITEM* DrawStruct = m_AssociatedScreen->GetDrawItems(); @@ -385,7 +385,7 @@ bool SCH_SHEET::HasUndefinedLabels() HLabel = (SCH_HIERLABEL*) DrawStruct; - if( label.m_Text.CmpNoCase( HLabel->m_Text ) == 0 ) + if( pin.m_Text.CmpNoCase( HLabel->m_Text ) == 0 ) break; // Found! HLabel = NULL; @@ -447,9 +447,9 @@ void SCH_SHEET::Place( SCH_EDIT_FRAME* frame, wxDC* DC ) */ void SCH_SHEET::CleanupSheet() { - SCH_SHEET_PIN_LIST::iterator i = m_labels.begin(); + SCH_SHEET_PINS::iterator i = m_pins.begin(); - while( i != m_labels.end() ) + while( i != m_pins.end() ) { /* Search the schematic for a hierarchical label corresponding to this sheet label. */ EDA_ITEM* DrawStruct = m_AssociatedScreen->GetDrawItems(); @@ -469,19 +469,19 @@ void SCH_SHEET::CleanupSheet() } if( HLabel == NULL ) // Hlabel not found: delete sheet label. - m_labels.erase( i ); + m_pins.erase( i ); else ++i; } } -SCH_SHEET_PIN* SCH_SHEET::GetLabel( const wxPoint& aPosition ) +SCH_SHEET_PIN* SCH_SHEET::GetPin( const wxPoint& aPosition ) { - BOOST_FOREACH( SCH_SHEET_PIN& label, m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN& pin, m_pins ) { - if( label.HitTest( aPosition ) ) - return &label; + if( pin.HitTest( aPosition ) ) + return &pin; } return NULL; @@ -585,7 +585,7 @@ void SCH_SHEET::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, /* Draw text : SheetLabel */ - BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, m_pins ) { if( !( sheetPin.m_Flags & IS_MOVED ) ) sheetPin.Draw( aPanel, aDC, aOffset, aDrawMode, aColor ); @@ -805,7 +805,7 @@ void SCH_SHEET::Rotate(wxPoint rotationPoint) NEGATE( m_Size.y ); } - BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, m_pins ) { sheetPin.Rotate( rotationPoint ); } @@ -819,7 +819,7 @@ void SCH_SHEET::Mirror_X( int aXaxis_position ) m_Pos.y += aXaxis_position; m_Pos.y -= m_Size.y; - BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN& sheetPin, m_pins ) { sheetPin.Mirror_X( aXaxis_position ); } @@ -833,7 +833,7 @@ void SCH_SHEET::Mirror_Y( int aYaxis_position ) m_Pos.x += aYaxis_position; m_Pos.x -= m_Size.x; - BOOST_FOREACH( SCH_SHEET_PIN& label, m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN& label, m_pins ) { label.Mirror_Y( aYaxis_position ); } @@ -848,7 +848,7 @@ void SCH_SHEET::Resize( const wxSize& aSize ) m_Size = aSize; /* Move the sheet labels according to the new sheet size. */ - BOOST_FOREACH( SCH_SHEET_PIN& label, m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN& label, m_pins ) { label.ConstraintOnEdge( label.m_Pos ); } @@ -877,14 +877,14 @@ bool SCH_SHEET::Matches( wxFindReplaceData& aSearchData, void* aAuxData, wxPoint } -void SCH_SHEET::renumberLabels() +void SCH_SHEET::renumberPins() { - int labelId = 2; + int id = 2; - BOOST_FOREACH( SCH_SHEET_PIN& label, m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN& pin, m_pins ) { - label.SetNumber( labelId ); - labelId++; + pin.SetNumber( id ); + id++; } } @@ -893,11 +893,11 @@ void SCH_SHEET::GetEndPoints( std::vector & aItemList ) { // Using BOOST_FOREACH here creates problems (bad pointer value to pinsheet). // I do not know why. - for( unsigned ii = 0; ii < GetSheetPins().size(); ii++ ) + for( unsigned ii = 0; ii < GetPins().size(); ii++ ) { - SCH_SHEET_PIN &pinsheet = GetSheetPins()[ii]; + SCH_SHEET_PIN &pinsheet = GetPins()[ii]; - wxCHECK2_MSG( pinsheet.Type() == SCH_SHEET_LABEL_T, continue, + wxCHECK2_MSG( pinsheet.Type() == SCH_SHEET_PIN_T, continue, wxT( "Invalid item in schematic sheet pin list. Bad programmer!" ) ); pinsheet.GetEndPoints( aItemList ); @@ -909,7 +909,7 @@ bool SCH_SHEET::IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemL { bool currentState = IsDangling(); - BOOST_FOREACH( SCH_SHEET_PIN& pinsheet, GetSheetPins() ) + BOOST_FOREACH( SCH_SHEET_PIN& pinsheet, GetPins() ) { pinsheet.IsDanglingStateChanged( aItemList ); } @@ -921,9 +921,9 @@ bool SCH_SHEET::IsDanglingStateChanged( std::vector< DANGLING_END_ITEM >& aItemL bool SCH_SHEET::IsDangling() const { // If any hierarchical label in the sheet is dangling, then the sheet is dangling. - for( size_t i = 0; i < GetSheetPins().size(); i++ ) + for( size_t i = 0; i < GetPins().size(); i++ ) { - if( GetSheetPins()[i].IsDangling() ) + if( GetPins()[i].IsDangling() ) return true; } @@ -948,8 +948,8 @@ bool SCH_SHEET::IsSelectStateChanged( const wxRect& aRect ) void SCH_SHEET::GetConnectionPoints( vector< wxPoint >& aPoints ) const { - for( size_t i = 0; i < GetSheetPins().size(); i++ ) - aPoints.push_back( GetSheetPins()[i].m_Pos ); + for( size_t i = 0; i < GetPins().size(); i++ ) + aPoints.push_back( GetPins()[i].m_Pos ); } @@ -966,12 +966,12 @@ SEARCH_RESULT SCH_SHEET::Visit( INSPECTOR* aInspector, const void* aTestData, if( SEARCH_QUIT == aInspector->Inspect( this, aTestData ) ) return SEARCH_QUIT; } - else if( stype == SCH_SHEET_LABEL_T ) + else if( stype == SCH_SHEET_PIN_T ) { // Test the bounding boxes of sheet labels. - for( size_t i = 0; i < m_labels.size(); i++ ) + for( size_t i = 0; i < m_pins.size(); i++ ) { - if( SEARCH_QUIT == aInspector->Inspect( &m_labels[ i ], aTestData ) ) + if( SEARCH_QUIT == aInspector->Inspect( &m_pins[ i ], aTestData ) ) return SEARCH_QUIT; } } @@ -1023,7 +1023,7 @@ void SCH_SHEET::Show( int nestLevel, std::ostream& os ) << TO_UTF8( m_SheetName ) << '"' << ">\n"; // show all the pins, and check the linked list integrity - BOOST_FOREACH( SCH_SHEET_PIN& label, m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN& label, m_pins ) { label.Show( nestLevel + 1, os ); } diff --git a/eeschema/sch_sheet.h b/eeschema/sch_sheet.h index 0333b82449..103396677b 100644 --- a/eeschema/sch_sheet.h +++ b/eeschema/sch_sheet.h @@ -38,7 +38,7 @@ private: ///< 0 is reserved for the sheet name. ///< 1 is reserve for the sheet file name. int m_Edge; /* For pin labels only: sheet edge (0 to 3) of the pin - * m_Edge define on which edge the pin is positionned: + * m_Edge define on which edge the pin is positioned: * 0: pin on left side * 1: pin on right side * 2: pin on top side @@ -74,7 +74,7 @@ public: int aColor = -1 ); /** - * Function CreateGraphicShape (virual) + * Function CreateGraphicShape (virtual) * Calculates the graphic shape (a polygon) associated to the text * @param aCorner_list = a buffer to fill with polygon corners coordinates * @param aPos = Position of the shape @@ -101,7 +101,7 @@ public: /** * Function ConstraintOnEdge - * is used to adjust label position to egde based on proximity to vertical / horizontal edge + * is used to adjust label position to edge based on proximity to vertical / horizontal edge * of the parent sheet. */ void ConstraintOnEdge( wxPoint Pos ); @@ -126,12 +126,12 @@ public: bool Save( FILE* aFile ) const; /** - * Load schematic sheet hierarchical lable from \a aLine in a .sch file. + * Load schematic sheet hierarchical label from \a aLine in a .sch file. * * @param aLine - Essentially this is file to read the sheet hierarchical label from. * @param aErrorMsg - Description of the error if an error occurs while loading the sheet * hierarchical label. - * @return True if the sheet heirarchical label loaded successfully. + * @return True if the sheet hierarchical label loaded successfully. */ virtual bool Load( LINE_READER& aLine, wxString& aErrorMsg ); @@ -192,7 +192,7 @@ public: }; -typedef boost::ptr_vector SCH_SHEET_PIN_LIST; +typedef boost::ptr_vector SCH_SHEET_PINS; /* class SCH_SHEET @@ -202,19 +202,19 @@ typedef boost::ptr_vector SCH_SHEET_PIN_LIST; class SCH_SHEET : public SCH_ITEM { - SCH_SCREEN* m_AssociatedScreen; ///< Screen that contains the physical data for - ///< the sheet. In complex hierarchies multiple - ///< sheets can share a common screen. - SCH_SHEET_PIN_LIST m_labels; ///< List of sheet connection points. - wxString m_FileName; /* also in SCH_SCREEN (redundant), - * but need it here for loading after - * reading the sheet description from - * file. */ + SCH_SCREEN* m_AssociatedScreen; ///< Screen that contains the physical data for + ///< the sheet. In complex hierarchies multiple + ///< sheets can share a common screen. + SCH_SHEET_PINS m_pins; ///< List of sheet connection points. + wxString m_FileName; /* also in SCH_SCREEN (redundant), + * but need it here for loading after + * reading the sheet description from + * file. */ public: - wxString m_SheetName; /* this is equivalent to C101 for - * components: it is stored in F0 ... - * of the file. */ + wxString m_SheetName; /* this is equivalent to C101 for + * components: it is stored in F0 ... + * of the file. */ public: int m_SheetNameSize; /* Size (height) of the text, used to * draw the sheet name */ @@ -286,64 +286,64 @@ public: bool IsVerticalOrientation(); /** - * Add aLabel to this sheet. + * Add aSheetPin to the sheet. * - * Note: Once a label is added to the sheet, it is owned by the sheet. - * Do not delete the label object or you will likely get a segfault - * when this sheet is destroyed. + * Note: Once a sheet pin is added to the sheet, it is owned by the sheet. + * Do not delete the sheet pin object or you will likely get a segfault + * when the sheet is destroyed. * - * @param aLabel - The label to add to the sheet. + * @param aSheetPin The sheet pin item to add to the sheet. */ - void AddLabel( SCH_SHEET_PIN* aLabel ); + void AddPin( SCH_SHEET_PIN* aSheetPin ); - SCH_SHEET_PIN_LIST& GetSheetPins() { return m_labels; } + SCH_SHEET_PINS& GetPins() { return m_pins; } - SCH_SHEET_PIN_LIST& GetSheetPins() const + SCH_SHEET_PINS& GetPins() const { - return const_cast< SCH_SHEET_PIN_LIST& >( m_labels ); + return const_cast< SCH_SHEET_PINS& >( m_pins ); } /** - * Remove a sheet label from this sheet. + * Remove \a aSheetPin from the sheet. * - * @param aSheetLabel - The sheet label to remove from the list. + * @param aSheetPin The sheet pin item to remove from the sheet. */ - void RemoveLabel( SCH_SHEET_PIN* aSheetLabel ); + void RemovePin( SCH_SHEET_PIN* aSheetPin ); /** * Delete sheet label which do not have a corresponding hierarchical label. * * Note: Make sure you save a copy of the sheet in the undo list before calling - * CleanupSheet() otherwise any unrefernced sheet labels will be lost. + * CleanupSheet() otherwise any unreferenced sheet labels will be lost. */ void CleanupSheet(); /** - * Return the label found at aPosition in this sheet. + * Return the sheet pin item found at \a aPosition in the sheet. * - * @param aPosition - The position to check for a label. + * @param aPosition The position to check for a sheet pin. * - * @return The label found at aPosition or NULL if no label is found. + * @return The sheet pin found at \a aPosition or NULL if no sheet pin is found. */ - SCH_SHEET_PIN* GetLabel( const wxPoint& aPosition ); + SCH_SHEET_PIN* GetPin( const wxPoint& aPosition ); /** - * Checks if a label already exists with aName. + * Checks if the sheet already has a sheet pin named \a aName. * - * @param aName - Name of label to search for. + * @param aName Name of the sheet pin to search for. * - * @return - True if label found, otherwise false. + * @return True if sheet pin with \a aName is found, otherwise false. */ - bool HasLabel( const wxString& aName ); + bool HasPin( const wxString& aName ); - bool HasLabels() { return !m_labels.empty(); } + bool HasPins() { return !m_pins.empty(); } /** * Check all sheet labels against schematic for undefined hierarchical labels. * * @return True if there are any undefined labels. */ - bool HasUndefinedLabels(); + bool HasUndefinedPins(); /** * Function GetPenSize @@ -453,9 +453,9 @@ public: { m_Pos += aMoveVector; - BOOST_FOREACH( SCH_SHEET_PIN & label, m_labels ) + BOOST_FOREACH( SCH_SHEET_PIN& pin, m_pins ) { - label.Move( aMoveVector ); + pin.Move( aMoveVector ); } } @@ -531,13 +531,13 @@ public: protected: /** - * Renumber labels in list. + * Renumber the sheet pins in the sheet. * - * This method is used internally by SCH_SHEET to update the label numbering - * when the label list changes. Make sure you call this method any time a - * label is added or removed. + * This method is used internally by SCH_SHEET to update the pin numbering + * when the pin list changes. Make sure you call this method any time a + * sheet pin is added or removed. */ - void renumberLabels(); + void renumberPins(); private: virtual bool doHitTest( const wxPoint& aPoint, int aAccuracy ) const; diff --git a/eeschema/sch_sheet_pin.cpp b/eeschema/sch_sheet_pin.cpp index 8d57286ce0..1b9148b605 100644 --- a/eeschema/sch_sheet_pin.cpp +++ b/eeschema/sch_sheet_pin.cpp @@ -19,6 +19,7 @@ #include "trigo.h" #include "richio.h" #include "class_sch_screen.h" +#include "wxEeschemaStruct.h" #include "general.h" #include "protos.h" @@ -37,7 +38,7 @@ */ SCH_SHEET_PIN::SCH_SHEET_PIN( SCH_SHEET* parent, const wxPoint& pos, const wxString& text ) : - SCH_HIERLABEL( pos, text, SCH_SHEET_LABEL_T ) + SCH_HIERLABEL( pos, text, SCH_SHEET_PIN_T ) { SetParent( parent ); wxASSERT( parent ); @@ -112,6 +113,40 @@ void SCH_SHEET_PIN::SetNumber( int aNumber ) } +void SCH_SHEET_PIN::Place( SCH_EDIT_FRAME* aFrame, wxDC* aDC ) +{ + SCH_SHEET* sheet = (SCH_SHEET*) GetParent(); + + wxCHECK_RET( (sheet != NULL) && (sheet->Type() == SCH_SHEET_T), + wxT( "Cannot place sheet pin in invalid schematic sheet object." ) ); + + SAFE_DELETE( g_ItemToUndoCopy ); + + int flags = m_Flags; + m_Flags = 0; + + if( flags & IS_NEW ) + { + aFrame->SaveCopyInUndoList( sheet, UR_CHANGED ); + sheet->AddPin( this ); + } + else // pin sheet was existing and only moved + { + wxPoint tmp = m_Pos; + m_Pos = aFrame->GetLastSheetPinPosition(); + SetEdge( aFrame->GetLastSheetPinEdge() ); + aFrame->SaveCopyInUndoList( sheet, UR_CHANGED ); + m_Pos = tmp; + } + + ConstraintOnEdge( aFrame->GetScreen()->GetCrossHairPosition() ); + + sheet->Draw( aFrame->DrawPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); + aFrame->DrawPanel->SetMouseCapture( NULL, NULL ); + aFrame->DrawPanel->EndMouseCapture(); +} + + void SCH_SHEET_PIN::SetEdge( int aEdge ) { SCH_SHEET* Sheet = (SCH_SHEET*) GetParent(); @@ -462,7 +497,7 @@ void SCH_SHEET_PIN::GetEndPoints( std::vector & aItemList ) wxString SCH_SHEET_PIN::GetSelectMenuText() const { wxString tmp; - tmp.Printf( _( "Hierarchical Sheet Label %s" ), GetChars( GetText() ) ); + tmp.Printf( _( "Hierarchical Sheet Pin %s" ), GetChars( GetText() ) ); return tmp; } diff --git a/eeschema/schedit.cpp b/eeschema/schedit.cpp index 6a79f1c98d..c1753caced 100644 --- a/eeschema/schedit.cpp +++ b/eeschema/schedit.cpp @@ -53,8 +53,8 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_SCH_END_SHEET: case ID_POPUP_SCH_RESIZE_SHEET: case ID_POPUP_IMPORT_GLABEL: - case ID_POPUP_SCH_EDIT_PINSHEET: - case ID_POPUP_SCH_MOVE_PINSHEET: + case ID_POPUP_SCH_EDIT_SHEET_PIN: + case ID_POPUP_SCH_MOVE_SHEET_PIN: case ID_POPUP_SCH_MOVE_ITEM_REQUEST: case ID_POPUP_SCH_MOVE_CMP_REQUEST: case ID_POPUP_SCH_DRAG_CMP_REQUEST: @@ -227,7 +227,7 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_IMPORT_GLABEL: if( item != NULL && item->Type() == SCH_SHEET_T ) - screen->SetCurItem( Import_PinSheet( (SCH_SHEET*) item, &dc ) ); + screen->SetCurItem( ImportSheetPin( (SCH_SHEET*) item, &dc ) ); break; case ID_POPUP_SCH_CLEANUP_SHEET: @@ -235,7 +235,7 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) { SCH_SHEET* sheet = (SCH_SHEET*) item; - if( !sheet->HasUndefinedLabels() ) + if( !sheet->HasUndefinedPins() ) { DisplayInfoMessage( this, _( "There are no undefined labels in this sheet to clean up." ) ); @@ -253,13 +253,13 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) } break; - case ID_POPUP_SCH_EDIT_PINSHEET: - Edit_PinSheet( (SCH_SHEET_PIN*) item, &dc ); + case ID_POPUP_SCH_EDIT_SHEET_PIN: + EditSheetPin( (SCH_SHEET_PIN*) item, &dc ); break; - case ID_POPUP_SCH_MOVE_PINSHEET: + case ID_POPUP_SCH_MOVE_SHEET_PIN: DrawPanel->MoveCursorToCrossHair(); - StartMove_PinSheet( (SCH_SHEET_PIN*) item, &dc ); + MoveSheetPin( (SCH_SHEET_PIN*) item, &dc ); break; case ID_POPUP_SCH_DRAG_CMP_REQUEST: @@ -498,7 +498,7 @@ void SCH_EDIT_FRAME::Process_Move_Item( SCH_ITEM* DrawStruct, wxDC* DC ) break; case SCH_MARKER_T: - case SCH_SHEET_LABEL_T: + case SCH_SHEET_PIN_T: default: wxString msg; msg.Printf( wxT( "SCH_EDIT_FRAME::Move_Item Error: Bad DrawType %d" ), @@ -596,7 +596,7 @@ void SCH_EDIT_FRAME::OnSelectTool( wxCommandEvent& aEvent ) SetToolID( id, wxCURSOR_PENCIL, _( "Add sheet" ) ); break; - case ID_SHEET_LABEL_BUTT: + case ID_SHEET_PIN_BUTT: SetToolID( id, wxCURSOR_PENCIL, _( "Add sheet pins" ) ); break; diff --git a/eeschema/schematic_undo_redo.cpp b/eeschema/schematic_undo_redo.cpp index 0e54d0bc0a..1a545fb784 100644 --- a/eeschema/schematic_undo_redo.cpp +++ b/eeschema/schematic_undo_redo.cpp @@ -160,7 +160,7 @@ void SwapData( EDA_ITEM* aItem, EDA_ITEM* aImage ) EXCHG( SOURCE->m_Pos, DEST->m_Pos ); break; - case SCH_SHEET_LABEL_T: + case SCH_SHEET_PIN_T: #undef SOURCE #undef DEST #define SOURCE ( (SCH_SHEET_PIN*) aItem ) diff --git a/eeschema/sheet.cpp b/eeschema/sheet.cpp index 582763a975..10ae33dc0c 100644 --- a/eeschema/sheet.cpp +++ b/eeschema/sheet.cpp @@ -329,12 +329,12 @@ void SCH_EDIT_FRAME::ReSizeSheet( SCH_SHEET* aSheet, wxDC* aDC ) s_PreviousSheetWidth = SHEET_MIN_WIDTH; s_PreviousSheetHeight = SHEET_MIN_HEIGHT; - BOOST_FOREACH( SCH_SHEET_PIN sheetLabel, aSheet->GetSheetPins() ) + BOOST_FOREACH( SCH_SHEET_PIN sheetPin, aSheet->GetPins() ) { s_PreviousSheetWidth = MAX( s_PreviousSheetWidth, - ( sheetLabel.GetLength() + 1 ) * sheetLabel.m_Size.x ); + ( sheetPin.GetLength() + 1 ) * sheetPin.m_Size.x ); s_PreviousSheetHeight = MAX( s_PreviousSheetHeight, - sheetLabel.m_Pos.y - aSheet->m_Pos.y ); + sheetPin.m_Pos.y - aSheet->m_Pos.y ); } DrawPanel->SetMouseCapture( MoveOrResizeSheet, ExitSheet ); diff --git a/eeschema/sheetlab.cpp b/eeschema/sheetlab.cpp index d60c1b9d1a..475540c369 100644 --- a/eeschema/sheetlab.cpp +++ b/eeschema/sheetlab.cpp @@ -19,122 +19,89 @@ #include "dialogs/dialog_sch_edit_sheet_pin.h" -static void ExitPinSheet( EDA_DRAW_PANEL* Panel, wxDC* DC ); -static void Move_PinSheet( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition, - bool aErase ); - - -static int s_CurrentTypeLabel = NET_INPUT; -static wxSize NetSheetTextSize( DEFAULT_SIZE_TEXT, DEFAULT_SIZE_TEXT ); -static wxPoint s_InitialPosition; // remember the initial value of the pin label when moving it -static int s_InitialEdge; +int SCH_EDIT_FRAME::m_lastSheetPinType = NET_INPUT; +wxSize SCH_EDIT_FRAME::m_lastSheetPinTextSize( DEFAULT_SIZE_TEXT, DEFAULT_SIZE_TEXT ); +wxPoint SCH_EDIT_FRAME::m_lastSheetPinPosition; +int SCH_EDIT_FRAME::m_lastSheetPinEdge; /* Called when aborting a move pinsheet label * delete a new pin sheet label, or restire its old position */ -static void ExitPinSheet( EDA_DRAW_PANEL* Panel, wxDC* DC ) +static void abortSheetPinMove( EDA_DRAW_PANEL* aPanel, wxDC* aDC ) { - SCH_SHEET_PIN* SheetLabel = (SCH_SHEET_PIN*) Panel->GetScreen()->GetCurItem(); + wxCHECK_RET( (aPanel != NULL) && (aDC != NULL), wxT( "Invalid panel or device context." ) ); - if( SheetLabel == NULL ) - return; + SCH_EDIT_FRAME* frame = (SCH_EDIT_FRAME*) aPanel->GetParent(); + SCH_SHEET_PIN* sheetPin = (SCH_SHEET_PIN*) aPanel->GetScreen()->GetCurItem(); - if( SheetLabel->IsNew() ) + wxCHECK_RET( (frame != NULL) && (sheetPin != NULL) && (sheetPin->Type() == SCH_SHEET_PIN_T), + wxT( "Invalid frame or sheet pin." ) ); + + sheetPin->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); + + if( sheetPin->IsNew() ) { - SheetLabel->Draw( Panel, DC, wxPoint( 0, 0 ), g_XorMode ); - SAFE_DELETE( SheetLabel ); + SAFE_DELETE( sheetPin ); } else { - SheetLabel->Draw( Panel, DC, wxPoint( 0, 0 ), g_XorMode ); - SheetLabel->m_Pos = s_InitialPosition; - // Restore edge position: - SheetLabel->SetEdge( s_InitialEdge ); - SheetLabel->Draw( Panel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); - SheetLabel->m_Flags = 0; + sheetPin->m_Pos = frame->GetLastSheetPinPosition(); + sheetPin->SetEdge( frame->GetLastSheetPinEdge() ); + sheetPin->Draw( aPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); + sheetPin->ClearFlags(); } - Panel->GetScreen()->SetCurItem( NULL ); + aPanel->GetScreen()->SetCurItem( NULL ); } -void SCH_SHEET_PIN::Place( SCH_EDIT_FRAME* frame, wxDC* DC ) +static void moveSheetPin( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition, + bool aErase ) { - SCH_SHEET* Sheet = (SCH_SHEET*) GetParent(); + SCH_SHEET_PIN* sheetPin = (SCH_SHEET_PIN*) aPanel->GetScreen()->GetCurItem(); - wxASSERT( Sheet != NULL && Sheet->Type() == SCH_SHEET_T ); - SAFE_DELETE( g_ItemToUndoCopy ); - - int flags = m_Flags; - m_Flags = 0; - - if( flags & IS_NEW ) - { - frame->SaveCopyInUndoList( Sheet, UR_CHANGED ); - Sheet->AddLabel( this ); - } - else // pin sheet was existing and only moved - { - wxPoint tmp = m_Pos; - m_Pos = s_InitialPosition; - SetEdge( s_InitialEdge ); - frame->SaveCopyInUndoList( Sheet, UR_CHANGED ); - m_Pos = tmp; - } - - ConstraintOnEdge( frame->GetScreen()->GetCrossHairPosition() ); - - Sheet->Draw( frame->DrawPanel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); - frame->DrawPanel->SetMouseCapture( NULL, NULL ); - frame->DrawPanel->EndMouseCapture(); -} - - -void SCH_EDIT_FRAME::StartMove_PinSheet( SCH_SHEET_PIN* SheetLabel, wxDC* DC ) -{ - NetSheetTextSize = SheetLabel->m_Size; - s_CurrentTypeLabel = SheetLabel->m_Shape; - SheetLabel->m_Flags |= IS_MOVED; - s_InitialPosition = SheetLabel->m_Pos; - s_InitialEdge = SheetLabel->GetEdge(); - - DrawPanel->SetMouseCapture( Move_PinSheet, ExitPinSheet ); - DrawPanel->m_mouseCaptureCallback( DrawPanel, DC, wxDefaultPosition, true ); -} - - -static void Move_PinSheet( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition, - bool aErase ) -{ - SCH_SHEET_PIN* SheetLabel = (SCH_SHEET_PIN*) aPanel->GetScreen()->GetCurItem(); - - if( SheetLabel == NULL ) + if( sheetPin == NULL || sheetPin->Type() != SCH_SHEET_PIN_T ) return; if( aErase ) - SheetLabel->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); + sheetPin->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); - SheetLabel->ConstraintOnEdge( aPanel->GetScreen()->GetCrossHairPosition() ); - - SheetLabel->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); + sheetPin->ConstraintOnEdge( aPanel->GetScreen()->GetCrossHairPosition() ); + sheetPin->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); } -int SCH_EDIT_FRAME::Edit_PinSheet( SCH_SHEET_PIN* aLabel, wxDC* aDC ) +void SCH_EDIT_FRAME::MoveSheetPin( SCH_SHEET_PIN* aSheetPin, wxDC* aDC ) { - if( aLabel == NULL ) + wxCHECK_RET( (aSheetPin != NULL) && (aSheetPin->Type() == SCH_SHEET_PIN_T), + wxT( "Cannot move invalid schematic sheet pin object." ) ); + + m_lastSheetPinTextSize = aSheetPin->m_Size; + m_lastSheetPinType = aSheetPin->m_Shape; + m_lastSheetPinPosition = aSheetPin->m_Pos; + m_lastSheetPinEdge = aSheetPin->GetEdge(); + aSheetPin->SetFlags( IS_MOVED ); + + DrawPanel->SetMouseCapture( moveSheetPin, abortSheetPinMove ); + moveSheetPin( DrawPanel, aDC, wxDefaultPosition, true ); +} + + +int SCH_EDIT_FRAME::EditSheetPin( SCH_SHEET_PIN* aSheetPin, wxDC* aDC ) +{ + if( aSheetPin == NULL ) return wxID_CANCEL; DIALOG_SCH_EDIT_SHEET_PIN dlg( this ); - dlg.SetLabelName( aLabel->m_Text ); - dlg.SetTextHeight( ReturnStringFromValue( g_UserUnit, aLabel->m_Size.y, m_InternalUnits ) ); + dlg.SetLabelName( aSheetPin->m_Text ); + dlg.SetTextHeight( ReturnStringFromValue( g_UserUnit, aSheetPin->m_Size.y, m_InternalUnits ) ); dlg.SetTextHeightUnits( GetUnitsLabel( g_UserUnit ) ); - dlg.SetTextWidth( ReturnStringFromValue( g_UserUnit, aLabel->m_Size.x, m_InternalUnits ) ); + dlg.SetTextWidth( ReturnStringFromValue( g_UserUnit, aSheetPin->m_Size.x, m_InternalUnits ) ); dlg.SetTextWidthUnits( GetUnitsLabel( g_UserUnit ) ); - dlg.SetConnectionType( aLabel->m_Shape ); + dlg.SetConnectionType( aSheetPin->m_Shape ); /* This ugly hack fixes a bug in wxWidgets 2.8.7 and likely earlier versions for * the flex grid sizer in wxGTK that prevents the last column from being sized @@ -149,98 +116,93 @@ int SCH_EDIT_FRAME::Edit_PinSheet( SCH_SHEET_PIN* aLabel, wxDC* aDC ) return wxID_CANCEL; if( aDC ) - aLabel->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); + aSheetPin->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); - aLabel->m_Text = dlg.GetLabelName(); - aLabel->m_Size.y = ReturnValueFromString( g_UserUnit, dlg.GetTextHeight(), m_InternalUnits ); - aLabel->m_Size.x = ReturnValueFromString( g_UserUnit, dlg.GetTextWidth(), m_InternalUnits ); - aLabel->m_Shape = dlg.GetConnectionType(); + aSheetPin->m_Text = dlg.GetLabelName(); + aSheetPin->m_Size.y = ReturnValueFromString( g_UserUnit, dlg.GetTextHeight(), m_InternalUnits ); + aSheetPin->m_Size.x = ReturnValueFromString( g_UserUnit, dlg.GetTextWidth(), m_InternalUnits ); + aSheetPin->m_Shape = dlg.GetConnectionType(); if( aDC ) - aLabel->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); + aSheetPin->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); return wxID_OK; } -/* Add a new sheet pin to the sheet at the current cursor position. - */ -SCH_SHEET_PIN* SCH_EDIT_FRAME::Create_PinSheet( SCH_SHEET* Sheet, wxDC* DC ) +SCH_SHEET_PIN* SCH_EDIT_FRAME::CreateSheetPin( SCH_SHEET* aSheet, wxDC* aDC ) { - wxString Line, Text; - SCH_SHEET_PIN* NewSheetLabel; + wxString line; + SCH_SHEET_PIN* sheetPin; - NewSheetLabel = new SCH_SHEET_PIN( Sheet, wxPoint( 0, 0 ), Line ); - NewSheetLabel->m_Flags = IS_NEW; - NewSheetLabel->m_Size = NetSheetTextSize; - NewSheetLabel->m_Shape = s_CurrentTypeLabel; + sheetPin = new SCH_SHEET_PIN( aSheet, wxPoint( 0, 0 ), line ); + sheetPin->SetFlags( IS_NEW ); + sheetPin->m_Size = m_lastSheetPinTextSize; + sheetPin->m_Shape = m_lastSheetPinType; - int diag = Edit_PinSheet( NewSheetLabel, NULL ); + int response = EditSheetPin( sheetPin, NULL ); - if( NewSheetLabel->m_Text.IsEmpty() || (diag == wxID_CANCEL) ) + if( sheetPin->m_Text.IsEmpty() || (response == wxID_CANCEL) ) { - delete NewSheetLabel; + delete sheetPin; return NULL; } - GetScreen()->SetCurItem( NewSheetLabel ); - s_CurrentTypeLabel = NewSheetLabel->m_Shape; + GetScreen()->SetCurItem( sheetPin ); + m_lastSheetPinType = sheetPin->m_Shape; + m_lastSheetPinTextSize = sheetPin->m_Size; - DrawPanel->SetMouseCapture( Move_PinSheet, ExitPinSheet ); - DrawPanel->m_mouseCaptureCallback( DrawPanel, DC, wxDefaultPosition, true ); + DrawPanel->SetMouseCapture( moveSheetPin, abortSheetPinMove ); + moveSheetPin( DrawPanel, aDC, wxDefaultPosition, false ); OnModify(); - return NewSheetLabel; + return sheetPin; } -/* Automatically create a sheet labels from global labels for each node in - * the corresponding hierarchy. - */ -SCH_SHEET_PIN* SCH_EDIT_FRAME::Import_PinSheet( SCH_SHEET* Sheet, wxDC* DC ) +SCH_SHEET_PIN* SCH_EDIT_FRAME::ImportSheetPin( SCH_SHEET* aSheet, wxDC* aDC ) { - EDA_ITEM* DrawStruct; - SCH_SHEET_PIN* NewSheetLabel; - SCH_HIERLABEL* HLabel = NULL; + EDA_ITEM* item; + SCH_SHEET_PIN* sheetPin; + SCH_HIERLABEL* label = NULL; - if( !Sheet->GetScreen() ) + if( !aSheet->GetScreen() ) return NULL; - DrawStruct = Sheet->GetScreen()->GetDrawItems(); - HLabel = NULL; + item = aSheet->GetScreen()->GetDrawItems(); - for( ; DrawStruct != NULL; DrawStruct = DrawStruct->Next() ) + for( ; item != NULL; item = item->Next() ) { - if( DrawStruct->Type() != SCH_HIERARCHICAL_LABEL_T ) + if( item->Type() != SCH_HIERARCHICAL_LABEL_T ) continue; - HLabel = (SCH_HIERLABEL*) DrawStruct; + label = (SCH_HIERLABEL*) item; /* A global label has been found: check if there a corresponding sheet label. */ - if( !Sheet->HasLabel( HLabel->m_Text ) ) + if( !aSheet->HasPin( label->m_Text ) ) break; - HLabel = NULL; + label = NULL; } - if( HLabel == NULL ) + if( label == NULL ) { - DisplayInfoMessage( this, _( "No new hierarchical labels found" ) ); + DisplayInfoMessage( this, _( "No new hierarchical labels found." ) ); return NULL; } OnModify(); SAFE_DELETE( g_ItemToUndoCopy ); - SaveCopyInUndoList( Sheet, UR_CHANGED ); + SaveCopyInUndoList( aSheet, UR_CHANGED ); - NewSheetLabel = new SCH_SHEET_PIN( Sheet, wxPoint( 0, 0 ), HLabel->m_Text ); - NewSheetLabel->m_Flags = IS_NEW; - NewSheetLabel->m_Size = NetSheetTextSize; - s_CurrentTypeLabel = NewSheetLabel->m_Shape = HLabel->m_Shape; + sheetPin = new SCH_SHEET_PIN( aSheet, wxPoint( 0, 0 ), label->m_Text ); + sheetPin->SetFlags( IS_NEW ); + sheetPin->m_Size = m_lastSheetPinTextSize; + m_lastSheetPinType = sheetPin->m_Shape = label->m_Shape; - GetScreen()->SetCurItem( NewSheetLabel ); - DrawPanel->SetMouseCapture( Move_PinSheet, ExitPinSheet ); - Move_PinSheet( DrawPanel, DC, wxDefaultPosition, false ); + GetScreen()->SetCurItem( sheetPin ); + DrawPanel->SetMouseCapture( moveSheetPin, abortSheetPinMove ); + moveSheetPin( DrawPanel, aDC, wxDefaultPosition, false ); - return NewSheetLabel; + return sheetPin; } diff --git a/eeschema/tool_sch.cpp b/eeschema/tool_sch.cpp index b2ece7351d..591f282bad 100644 --- a/eeschema/tool_sch.cpp +++ b/eeschema/tool_sch.cpp @@ -175,11 +175,11 @@ void SCH_EDIT_FRAME::ReCreateVToolbar() m_VToolBar->AddTool( ID_IMPORT_HLABEL_BUTT, wxEmptyString, wxBitmap( import_hierarchical_label_xpm ), - HELP_IMPORT_PINSHEET, wxITEM_CHECK ); + HELP_IMPORT_SHEETPIN, wxITEM_CHECK ); - m_VToolBar->AddTool( ID_SHEET_LABEL_BUTT, wxEmptyString, + m_VToolBar->AddTool( ID_SHEET_PIN_BUTT, wxEmptyString, wxBitmap( add_hierar_pin_xpm ), - HELP_PLACE_PINSHEET, wxITEM_CHECK ); + HELP_PLACE_SHEETPIN, wxITEM_CHECK ); m_VToolBar->AddTool( ID_LINE_COMMENT_BUTT, wxEmptyString, wxBitmap( add_dashed_line_xpm ), diff --git a/include/base_struct.h b/include/base_struct.h index 28ceee3937..624a1c5905 100644 --- a/include/base_struct.h +++ b/include/base_struct.h @@ -61,7 +61,7 @@ enum KICAD_T { SCH_HIERARCHICAL_LABEL_T, SCH_FIELD_T, SCH_COMPONENT_T, - SCH_SHEET_LABEL_T, + SCH_SHEET_PIN_T, SCH_SHEET_T, // General diff --git a/include/wxEeschemaStruct.h b/include/wxEeschemaStruct.h index 97b2b380bb..dcb17c004d 100644 --- a/include/wxEeschemaStruct.h +++ b/include/wxEeschemaStruct.h @@ -96,6 +96,12 @@ private: int m_repeatLabelDelta; ///< Repeat label number increment step. SCH_COLLECTOR m_collectedItems; ///< List of collected items. + static int m_lastSheetPinType; ///< Last sheet pin type. + static wxSize m_lastSheetPinTextSize; ///< Last sheet pin text size. + static wxPoint m_lastSheetPinPosition; ///< Last sheet pin position. + static int m_lastSheetPinEdge; ///< Last sheet edge a sheet pin was placed. + + public: SCH_EDIT_FRAME( wxWindow* father, const wxString& title, @@ -528,15 +534,48 @@ private: public: bool EditSheet( SCH_SHEET* Sheet, wxDC* DC ); + wxPoint GetLastSheetPinPosition() const { return m_lastSheetPinPosition; } + + int GetLastSheetPinEdge() const { return m_lastSheetPinEdge; } + private: void StartMoveSheet( SCH_SHEET* sheet, wxDC* DC ); - SCH_SHEET_PIN* Create_PinSheet( SCH_SHEET* Sheet, wxDC* DC ); - int Edit_PinSheet( SCH_SHEET_PIN* SheetLabel, wxDC* DC ); - void StartMove_PinSheet( SCH_SHEET_PIN* SheetLabel, - wxDC* DC ); - void Place_PinSheet( SCH_SHEET_PIN* SheetLabel, - wxDC* DC ); - SCH_SHEET_PIN* Import_PinSheet( SCH_SHEET* Sheet, wxDC* DC ); + + /** + * Function CreateSheetPin + * creates a new SCH_SHEET_PIN object and add it to \a aSheet at the current cursor position. + * @param aSheet The sheet to add the new sheet pin to. + * @param aDC The device context to draw on. + * @return The new sheet pin object created or NULL if the task was aborted by the user. + */ + SCH_SHEET_PIN* CreateSheetPin( SCH_SHEET* aSheet, wxDC* aDC ); + + /** + * Function EditSheetPin + * displays the dialog for editing the parameters of \a aSheetPin. + * @param aSheetPin The sheet pin item to edit. + * @param aDC The device context to draw on. + * @return The user response from the edit dialog. + */ + int EditSheetPin( SCH_SHEET_PIN* aSheetPin, wxDC* aDC ); + + /** + * Function MoveSheetPin + * moves \a aSheetPin within it's parent sheet object. + * @param aSheetPin The sheet pin item to move. + * @param aDC The device context to draw on. + */ + void MoveSheetPin( SCH_SHEET_PIN* aSheetPin, wxDC* aDC ); + + /** + * Function ImportSheetPin + * automatically creates a sheet pin from the hierarchical labels in the schematic + * referenced by \a aSheet. + * @param aSheet The sheet to import the new sheet pin to. + * @param aDC The device context to draw on. + * @return The new sheet pin object importd or NULL if the task was aborted by the user. + */ + SCH_SHEET_PIN* ImportSheetPin( SCH_SHEET* aSheet, wxDC* aDC ); public: /**