From a3a73ef5ddb3d7705b41cfc34ea67136e650a6d1 Mon Sep 17 00:00:00 2001 From: Wayne Stambaugh Date: Mon, 10 Jan 2011 11:50:40 -0500 Subject: [PATCH] EESchema block code cleaning and other minor fixes. * Move update block pick list code to SCH_SCREEN object. * Remove redundant drawing function RedrawOneStruct(). * Change context menu text "Noconn" to "No Connect". * Change context menu text "GLabel" to "Global Label". --- common/sch_item_struct.cpp | 2 +- eeschema/block.cpp | 8 ++-- eeschema/bus-wire-junction.cpp | 18 ++++----- eeschema/busentry.cpp | 13 +++--- eeschema/dangling_ends.cpp | 4 +- .../dialog_edit_component_in_schematic.cpp | 4 +- eeschema/edit_label.cpp | 18 ++++----- eeschema/eeredraw.cpp | 11 ----- eeschema/events_called_functions_for_edit.cpp | 4 +- eeschema/locate.cpp | 40 ------------------- eeschema/onrightclick.cpp | 4 +- eeschema/protos.h | 9 ----- eeschema/sch_screen.cpp | 23 +++++++++++ eeschema/sheet.cpp | 12 +++--- eeschema/sheetlab.cpp | 16 ++++---- include/class_sch_screen.h | 7 ++++ 16 files changed, 82 insertions(+), 111 deletions(-) diff --git a/common/sch_item_struct.cpp b/common/sch_item_struct.cpp index d0e558bc8f..f90271319f 100644 --- a/common/sch_item_struct.cpp +++ b/common/sch_item_struct.cpp @@ -74,7 +74,7 @@ void SCH_ITEM::Place( SCH_EDIT_FRAME* frame, wxDC* DC ) if( DC ) { frame->DrawPanel->CursorOff( DC ); // Erase schematic cursor - RedrawOneStruct( frame->DrawPanel, DC, this, GR_DEFAULT_DRAWMODE ); + Draw( frame->DrawPanel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); frame->DrawPanel->CursorOn( DC ); // Display schematic cursor } } diff --git a/eeschema/block.cpp b/eeschema/block.cpp index b84de207d5..9d52dde72c 100644 --- a/eeschema/block.cpp +++ b/eeschema/block.cpp @@ -240,7 +240,7 @@ bool SCH_EDIT_FRAME::HandleBlockEnd( wxDC* DC ) case BLOCK_MIRROR_Y: case BLOCK_MOVE: /* Move */ case BLOCK_COPY: /* Copy */ - PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() ); + GetScreen()->UpdatePickList(); // fall through case BLOCK_PRESELECT_MOVE: /* Move with preselection list*/ if( block->GetCount() ) @@ -261,7 +261,7 @@ bool SCH_EDIT_FRAME::HandleBlockEnd( wxDC* DC ) break; case BLOCK_DELETE: /* Delete */ - PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() ); + GetScreen()->UpdatePickList(); DrawAndSizingBlockOutlines( DrawPanel, DC, false ); if( block->GetCount() ) @@ -276,7 +276,7 @@ bool SCH_EDIT_FRAME::HandleBlockEnd( wxDC* DC ) break; case BLOCK_SAVE: /* Save */ - PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() ); + GetScreen()->UpdatePickList(); DrawAndSizingBlockOutlines( DrawPanel, DC, false ); if( block->GetCount() ) @@ -374,7 +374,7 @@ void SCH_EDIT_FRAME::HandleBlockEndByPopUp( int Command, wxDC* DC ) BreakSegmentOnJunction( GetScreen() ); - PickItemsInBlock( GetScreen()->m_BlockLocate, GetScreen() ); + GetScreen()->UpdatePickList(); if( block->GetCount() ) { diff --git a/eeschema/bus-wire-junction.cpp b/eeschema/bus-wire-junction.cpp index dfd6f14aaa..ab0b6c5f08 100644 --- a/eeschema/bus-wire-junction.cpp +++ b/eeschema/bus-wire-junction.cpp @@ -91,7 +91,7 @@ static void DrawSegment( WinEDA_DrawPanel* aPanel, wxDC* aDC, bool aErase ) while( segment ) { if( !segment->IsNull() ) // Redraw if segment length != 0 - RedrawOneStruct( aPanel, aDC, segment, g_XorMode, color ); + segment->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode, color ); segment = segment->Next(); } @@ -109,7 +109,7 @@ static void DrawSegment( WinEDA_DrawPanel* aPanel, wxDC* aDC, bool aErase ) while( segment ) { if( !segment->IsNull() ) // Redraw if segment length != 0 - RedrawOneStruct( aPanel, aDC, segment, g_XorMode, color ); + segment->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode, color ); segment = segment->Next(); } @@ -216,7 +216,7 @@ void SCH_EDIT_FRAME::BeginSegment( wxDC* DC, int type ) oldsegment->SetNext( GetScreen()->GetDrawItems() ); GetScreen()->SetDrawItems( oldsegment ); DrawPanel->CursorOff( DC ); // Erase schematic cursor - RedrawOneStruct( DrawPanel, DC, oldsegment, GR_DEFAULT_DRAWMODE ); + oldsegment->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); DrawPanel->CursorOn( DC ); // Display schematic cursor /* Create a new segment, and chain it after the current new segment */ @@ -456,10 +456,10 @@ static void Show_Polyline_in_Ghost( WinEDA_DrawPanel* panel, wxDC* DC, bool eras } if( erase ) - RedrawOneStruct( panel, DC, NewPoly, g_XorMode, color ); + NewPoly->Draw( panel, DC, wxPoint( 0, 0 ), g_XorMode, color ); NewPoly->m_PolyPoints[idx] = endpos; - RedrawOneStruct( panel, DC, NewPoly, g_XorMode, color ); + NewPoly->Draw( panel, DC, wxPoint( 0, 0 ), g_XorMode, color ); } @@ -505,7 +505,7 @@ SCH_JUNCTION* SCH_EDIT_FRAME::CreateNewJunctionStruct( wxDC* DC, g_ItemToRepeat = NewJunction; DrawPanel->CursorOff( DC ); // Erase schematic cursor - RedrawOneStruct( DrawPanel, DC, NewJunction, GR_DEFAULT_DRAWMODE ); + NewJunction->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); DrawPanel->CursorOn( DC ); // Display schematic cursor NewJunction->SetNext( GetScreen()->GetDrawItems() ); @@ -528,7 +528,7 @@ SCH_NO_CONNECT* SCH_EDIT_FRAME::CreateNewNoConnectStruct( wxDC* DC ) g_ItemToRepeat = NewNoConnect; DrawPanel->CursorOff( DC ); // Erase schematic cursor - RedrawOneStruct( DrawPanel, DC, NewNoConnect, GR_DEFAULT_DRAWMODE ); + NewNoConnect->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); DrawPanel->CursorOn( DC ); // Display schematic cursor NewNoConnect->SetNext( GetScreen()->GetDrawItems() ); @@ -585,7 +585,7 @@ void SCH_EDIT_FRAME::RepeatDrawItem( wxDC* DC ) g_ItemToRepeat->m_Flags = IS_NEW; ( (SCH_COMPONENT*) g_ItemToRepeat )->m_TimeStamp = GetTimeStamp(); g_ItemToRepeat->Move( pos ); - RedrawOneStruct( DrawPanel, DC, g_ItemToRepeat, g_XorMode ); + g_ItemToRepeat->Draw( DrawPanel, DC, wxPoint( 0, 0 ), g_XorMode ); StartMovePart( (SCH_COMPONENT*) g_ItemToRepeat, DC ); return; } @@ -605,7 +605,7 @@ void SCH_EDIT_FRAME::RepeatDrawItem( wxDC* DC ) g_ItemToRepeat->SetNext( GetScreen()->GetDrawItems() ); GetScreen()->SetDrawItems( g_ItemToRepeat ); TestDanglingEnds( GetScreen()->GetDrawItems(), NULL ); - RedrawOneStruct( DrawPanel, DC, g_ItemToRepeat, GR_DEFAULT_DRAWMODE ); + g_ItemToRepeat->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); SaveCopyInUndoList( g_ItemToRepeat, UR_NEW ); g_ItemToRepeat->m_Flags = 0; } diff --git a/eeschema/busentry.cpp b/eeschema/busentry.cpp index 8a3f997461..ffb1a62424 100644 --- a/eeschema/busentry.cpp +++ b/eeschema/busentry.cpp @@ -27,7 +27,8 @@ static void ExitBusEntry( WinEDA_DrawPanel* Panel, wxDC* DC ) if( BusEntry ) { - RedrawOneStruct( Panel, DC, BusEntry, g_XorMode ); + BusEntry->Draw( Panel, DC, wxPoint( 0, 0 ), g_XorMode ); + if( BusEntry->m_Flags & IS_NEW ) { delete BusEntry; @@ -36,7 +37,7 @@ static void ExitBusEntry( WinEDA_DrawPanel* Panel, wxDC* DC ) else { BusEntry->m_Pos = ItemInitialPosition; - RedrawOneStruct( Panel, DC, BusEntry, GR_DEFAULT_DRAWMODE ); + BusEntry->Draw( Panel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); BusEntry->m_Flags = 0; } } @@ -58,11 +59,11 @@ static void ShowWhileMoving( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) /* Erase the last segment position. */ if( erase ) - RedrawOneStruct( panel, DC, BusEntry, g_XorMode ); + BusEntry->Draw( panel, DC, wxPoint( 0, 0 ), g_XorMode ); /* Redraw at the new position. */ BusEntry->m_Pos = screen->m_Curseur; - RedrawOneStruct( panel, DC, BusEntry, g_XorMode ); + BusEntry->Draw( panel, DC, wxPoint( 0, 0 ), g_XorMode ); } @@ -121,7 +122,7 @@ void SCH_EDIT_FRAME::SetBusEntryShape( wxDC* DC, SCH_BUS_ENTRY* BusEntry, int en if( BusEntry->m_Flags == 0 ) SaveCopyInUndoList( BusEntry, UR_CHANGED ); - RedrawOneStruct( DrawPanel, DC, BusEntry, g_XorMode ); + BusEntry->Draw( DrawPanel, DC, wxPoint( 0, 0 ), g_XorMode ); switch( entry_shape ) { @@ -137,7 +138,7 @@ void SCH_EDIT_FRAME::SetBusEntryShape( wxDC* DC, SCH_BUS_ENTRY* BusEntry, int en } TestDanglingEnds( GetScreen()->GetDrawItems(), NULL ); - RedrawOneStruct( DrawPanel, DC, BusEntry, g_XorMode ); + BusEntry->Draw( DrawPanel, DC, wxPoint( 0, 0 ), g_XorMode ); OnModify( ); } diff --git a/eeschema/dangling_ends.cpp b/eeschema/dangling_ends.cpp index 764e2ede1e..8f375bae07 100644 --- a/eeschema/dangling_ends.cpp +++ b/eeschema/dangling_ends.cpp @@ -44,8 +44,8 @@ void SCH_EDIT_FRAME::TestDanglingEnds( SCH_ITEM* aDrawList, wxDC* aDC ) { if( item->IsDanglingStateChanged( endPoints ) && aDC != NULL ) { - RedrawOneStruct( DrawPanel, aDC, item, g_XorMode ); - RedrawOneStruct( DrawPanel, aDC, item, GR_DEFAULT_DRAWMODE ); + item->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); + item->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); } } } diff --git a/eeschema/dialogs/dialog_edit_component_in_schematic.cpp b/eeschema/dialogs/dialog_edit_component_in_schematic.cpp index e18925a6f4..47d103908f 100644 --- a/eeschema/dialogs/dialog_edit_component_in_schematic.cpp +++ b/eeschema/dialogs/dialog_edit_component_in_schematic.cpp @@ -823,7 +823,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::SetInitCmp( wxCommandEvent& event ) INSTALL_DC( dc, m_Parent->DrawPanel ); - RedrawOneStruct( m_Parent->DrawPanel, &dc, m_Cmp, g_XorMode ); + m_Cmp->Draw( m_Parent->DrawPanel, &dc, wxPoint( 0, 0 ), g_XorMode ); // Initialize field values to default values found in library: LIB_FIELD& refField = entry->GetReferenceField(); @@ -838,6 +838,6 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::SetInitCmp( wxCommandEvent& event ) m_Parent->OnModify( ); - RedrawOneStruct( m_Parent->DrawPanel, &dc, m_Cmp, GR_DEFAULT_DRAWMODE ); + m_Cmp->Draw( m_Parent->DrawPanel, &dc, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); EndModal( 1 ); } diff --git a/eeschema/edit_label.cpp b/eeschema/edit_label.cpp index 3008101bf5..4cbfd78412 100644 --- a/eeschema/edit_label.cpp +++ b/eeschema/edit_label.cpp @@ -89,7 +89,7 @@ void SCH_EDIT_FRAME::ChangeTextOrient( SCH_TEXT* TextStruct, wxDC* DC ) /* Erase old text */ DrawPanel->CursorOff( DC ); - RedrawOneStruct( DrawPanel, DC, TextStruct, g_XorMode ); + TextStruct->Draw( DrawPanel, DC, wxPoint( 0, 0 ), g_XorMode ); int orient; @@ -109,7 +109,7 @@ void SCH_EDIT_FRAME::ChangeTextOrient( SCH_TEXT* TextStruct, wxDC* DC ) } OnModify( ); - RedrawOneStruct( DrawPanel, DC, TextStruct, g_XorMode ); + TextStruct->Draw( DrawPanel, DC, wxPoint( 0, 0 ), g_XorMode ); DrawPanel->CursorOn( DC ); } @@ -153,7 +153,7 @@ SCH_TEXT* SCH_EDIT_FRAME::CreateNewText( wxDC* DC, int type ) NewText->m_Size.x = NewText->m_Size.y = g_DefaultTextLabelSize; NewText->m_Flags = IS_NEW | IS_MOVED; - RedrawOneStruct( DrawPanel, DC, NewText, g_XorMode ); + NewText->Draw( DrawPanel, DC, wxPoint( 0, 0 ), g_XorMode ); EditSchematicText( NewText ); if( NewText->m_Text.IsEmpty() ) @@ -171,7 +171,7 @@ SCH_TEXT* SCH_EDIT_FRAME::CreateNewText( wxDC* DC, int type ) lastGlobalLabelShape = NewText->m_Shape; } - RedrawOneStruct( DrawPanel, DC, NewText, GR_DEFAULT_DRAWMODE ); + NewText->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); DrawPanel->ManageCurseur = ShowWhileMoving; DrawPanel->ForceCloseManageCurseur = ExitMoveTexte; @@ -190,7 +190,7 @@ static void ShowWhileMoving( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) /* "Undraw" the current text at its old position*/ if( erase ) - RedrawOneStruct( panel, DC, TextStruct, g_XorMode ); + TextStruct->Draw( panel, DC, wxPoint( 0, 0 ), g_XorMode ); /* redraw the text */ switch( TextStruct->Type() ) @@ -206,7 +206,7 @@ static void ShowWhileMoving( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) break; } - RedrawOneStruct( panel, DC, TextStruct, g_XorMode ); + TextStruct->Draw( panel, DC, wxPoint( 0, 0 ), g_XorMode ); } @@ -227,7 +227,7 @@ static void ExitMoveTexte( WinEDA_DrawPanel* Panel, wxDC* DC ) /* "Undraw" the text, and delete it if new (i.e. it was being just * created)*/ - RedrawOneStruct( Panel, DC, Struct, g_XorMode ); + Struct->Draw( Panel, DC, wxPoint( 0, 0 ), g_XorMode ); if( Struct->m_Flags & IS_NEW ) { @@ -254,7 +254,7 @@ static void ExitMoveTexte( WinEDA_DrawPanel* Panel, wxDC* DC ) break; } - RedrawOneStruct( Panel, DC, Struct, GR_DEFAULT_DRAWMODE ); + Struct->Draw( Panel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); Struct->m_Flags = 0; } } @@ -367,6 +367,6 @@ void SCH_EDIT_FRAME::ConvertTextType( SCH_TEXT* Text, wxDC* DC, int newtype ) StartMoveTexte( newtext, DC ); } - RedrawOneStruct( DrawPanel, DC, newtext, GR_DEFAULT_DRAWMODE ); + newtext->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); DrawPanel->CursorOn( DC ); // redraw schematic cursor } diff --git a/eeschema/eeredraw.cpp b/eeschema/eeredraw.cpp index 2f0777ece1..10c53f5a21 100644 --- a/eeschema/eeredraw.cpp +++ b/eeschema/eeredraw.cpp @@ -145,14 +145,3 @@ void RedrawStructList( WinEDA_DrawPanel* panel, wxDC* DC, Structlist = Structlist->Next(); } } - - -/* Routine to redraw on schematic object. */ -void RedrawOneStruct( WinEDA_DrawPanel* panel, wxDC* DC, - SCH_ITEM* Struct, int DrawMode, int Color ) -{ - if( Struct == NULL ) - return; - - Struct->Draw( panel, DC, wxPoint( 0, 0 ), DrawMode, Color ); -} diff --git a/eeschema/events_called_functions_for_edit.cpp b/eeschema/events_called_functions_for_edit.cpp index fca844941f..ae3afa9f0b 100644 --- a/eeschema/events_called_functions_for_edit.cpp +++ b/eeschema/events_called_functions_for_edit.cpp @@ -42,7 +42,7 @@ void SCH_EDIT_FRAME::OnCopySchematicItemRequest( wxCommandEvent& event ) /* Redraw the original part, because StartMovePart() erased * it from screen */ - RedrawOneStruct( DrawPanel, &dc, curr_item, GR_DEFAULT_DRAWMODE ); + curr_item->Draw( DrawPanel, &dc, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); } break; @@ -55,7 +55,7 @@ void SCH_EDIT_FRAME::OnCopySchematicItemRequest( wxCommandEvent& event ) newitem->m_Flags = IS_NEW; StartMoveTexte( newitem, &dc ); /* Redraw the original part in XOR mode */ - RedrawOneStruct( DrawPanel, &dc, curr_item, g_XorMode ); + curr_item->Draw( DrawPanel, &dc, wxPoint( 0, 0 ), g_XorMode ); } break; diff --git a/eeschema/locate.cpp b/eeschema/locate.cpp index f6101b8d7c..3a3e29582c 100644 --- a/eeschema/locate.cpp +++ b/eeschema/locate.cpp @@ -118,46 +118,6 @@ SCH_ITEM* PickStruct( const wxPoint& refpos, SCH_SCREEN* screen, int SearchMask } -/** - * Function PickStruct - * Search items in a block - * @return items count - * @param aBlock a BLOCK_SELECTOR that gives the search area boundary - * @param aScreen - The screen to pick items from. - * list of items is stored in aBlock - */ -int PickItemsInBlock( BLOCK_SELECTOR& aBlock, SCH_SCREEN* aScreen ) -{ - int itemcount = 0; - - if( aScreen == NULL ) - return itemcount; - - EDA_Rect area; - area.SetOrigin( aBlock.GetOrigin()); - area.SetSize( aBlock.GetSize() ); - area.Normalize(); - - ITEM_PICKER picker; - SCH_ITEM* item = aScreen->GetDrawItems(); - - for( ; item != NULL; item = item->Next() ) - { - // an item is picked if its bounding box intersects the reference area - if( item->HitTest( area ) ) - { - /* Put this structure in the picked list: */ - picker.m_PickedItem = item; - picker.m_PickedItemType = item->Type(); - aBlock.PushItem( picker ); - itemcount++; - } - } - - return itemcount; -} - - /***************************************************************************** * Routine to search all objects for the closest point to a given point, in * * drawing space, and snap it to that points if closer than SnapDistance. * diff --git a/eeschema/onrightclick.cpp b/eeschema/onrightclick.cpp index 4f6ca9e4e3..f7a7640a7d 100644 --- a/eeschema/onrightclick.cpp +++ b/eeschema/onrightclick.cpp @@ -118,7 +118,7 @@ bool SCH_EDIT_FRAME::OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ) { case SCH_NO_CONNECT_T: - ADD_MENUITEM( PopMenu, ID_POPUP_SCH_DELETE, _( "Delete Noconn" ), delete_xpm ); + ADD_MENUITEM( PopMenu, ID_POPUP_SCH_DELETE, _( "Delete No Connect" ), delete_xpm ); break; case SCH_JUNCTION_T: @@ -477,7 +477,7 @@ void AddMenusForText( wxMenu* PopMenu, SCH_TEXT* Text ) ADD_MENUITEM( menu_change_type, ID_POPUP_SCH_CHANGE_TYPE_TEXT_TO_HLABEL, _( "Change to Hierarchical Label" ), label2glabel_xpm ); ADD_MENUITEM( menu_change_type, ID_POPUP_SCH_CHANGE_TYPE_TEXT_TO_GLABEL, - _( "Change to Glabel" ), label2glabel_xpm ); + _( "Change to Global Label" ), label2glabel_xpm ); ADD_MENUITEM_WITH_SUBMENU( PopMenu, menu_change_type, ID_POPUP_SCH_CHANGE_TYPE_TEXT, _( "Change Type" ), gl_change_xpm ); } diff --git a/eeschema/protos.h b/eeschema/protos.h index 74c3f6986c..8967dd85ab 100644 --- a/eeschema/protos.h +++ b/eeschema/protos.h @@ -84,9 +84,6 @@ SCH_ITEM* DuplicateStruct( SCH_ITEM* DrawStruct, bool aClone = false ); SCH_COMPONENT* LocateSmallestComponent( SCH_SCREEN* Screen ); -/* Find the item within block selection. */ -int PickItemsInBlock( BLOCK_SELECTOR& aBlock, SCH_SCREEN* screen ); - /* function PickStruct: * Search at location pos * @@ -119,7 +116,6 @@ int PickItemsInBlock( BLOCK_SELECTOR& aBlock, SCH_SCREEN* screen ); */ SCH_ITEM* PickStruct( const wxPoint& refpos, SCH_SCREEN* screen, int SearchMask ); - SCH_SHEET_PIN* LocateSheetLabel( SCH_SHEET* Sheet, const wxPoint& pos ); LIB_PIN* LocateAnyPin( SCH_ITEM* DrawList, const wxPoint& RefPos, @@ -138,11 +134,6 @@ void RedrawStructList( WinEDA_DrawPanel* panel, SCH_ITEM* Structs, int DrawMode, int Color = -1 ); -void RedrawOneStruct( WinEDA_DrawPanel* panel, - wxDC* DC, - SCH_ITEM* Struct, - int DrawMode, - int Color = -1 ); /**************/ /* EELAYER.CPP */ diff --git a/eeschema/sch_screen.cpp b/eeschema/sch_screen.cpp index 7569f75e2e..6315bd822b 100644 --- a/eeschema/sch_screen.cpp +++ b/eeschema/sch_screen.cpp @@ -524,6 +524,29 @@ void SCH_SCREEN::addConnectedItemsToBlock( const wxPoint& position ) } +int SCH_SCREEN::UpdatePickList() +{ + ITEM_PICKER picker; + EDA_Rect area; + area.SetOrigin( m_BlockLocate.GetOrigin()); + area.SetSize( m_BlockLocate.GetSize() ); + area.Normalize(); + + for( SCH_ITEM* item = GetDrawItems(); item != NULL; item = item->Next() ) + { + // An item is picked if its bounding box intersects the reference area. + if( item->HitTest( area ) ) + { + picker.m_PickedItem = item; + picker.m_PickedItemType = item->Type(); + m_BlockLocate.PushItem( picker ); + } + } + + return m_BlockLocate.GetCount(); +} + + /******************************************************************/ /* Class SCH_SCREENS to handle the list of screens in a hierarchy */ /******************************************************************/ diff --git a/eeschema/sheet.cpp b/eeschema/sheet.cpp index 9836cd3509..f928a9ad37 100644 --- a/eeschema/sheet.cpp +++ b/eeschema/sheet.cpp @@ -42,7 +42,7 @@ bool SCH_EDIT_FRAME::EditSheet( SCH_SHEET* aSheet, wxDC* aDC ) return false; /* Get the new texts */ - RedrawOneStruct( DrawPanel, aDC, aSheet, g_XorMode ); + aSheet->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); DrawPanel->m_IgnoreMouseEvents = true; @@ -137,7 +137,7 @@ structures and cannot be undone.\nOk to continue renaming?" ); DrawPanel->MouseToCursorSchema(); DrawPanel->m_IgnoreMouseEvents = false; - RedrawOneStruct( DrawPanel, aDC, aSheet, GR_DEFAULT_DRAWMODE ); + aSheet->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); return edit; } @@ -153,7 +153,7 @@ static void MoveOrResizeSheet( WinEDA_DrawPanel* aPanel, wxDC* aDC, bool aErase SCH_SHEET* sheet = (SCH_SHEET*) screen->GetCurItem(); if( aErase ) - RedrawOneStruct( aPanel, aDC, sheet, g_XorMode ); + sheet->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); if( sheet->m_Flags & IS_RESIZED ) { @@ -167,7 +167,7 @@ static void MoveOrResizeSheet( WinEDA_DrawPanel* aPanel, wxDC* aDC, bool aErase sheet->Move( moveVector ); } - RedrawOneStruct( aPanel, aDC, sheet, g_XorMode ); + sheet->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); } @@ -182,7 +182,7 @@ static void ExitSheet( WinEDA_DrawPanel* aPanel, wxDC* aDC ) if( sheet->m_Flags & IS_NEW ) { - RedrawOneStruct( aPanel, aDC, sheet, g_XorMode ); + sheet->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); SAFE_DELETE( sheet ); } else if( (sheet->m_Flags & (IS_RESIZED|IS_MOVED)) ) @@ -190,7 +190,7 @@ static void ExitSheet( WinEDA_DrawPanel* aPanel, wxDC* aDC ) wxPoint curspos = screen->m_Curseur; aPanel->GetScreen()->m_Curseur = s_OldPos; MoveOrResizeSheet( aPanel, aDC, true ); - RedrawOneStruct( aPanel, aDC, sheet, GR_DEFAULT_DRAWMODE ); + sheet->Draw( aPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); sheet->m_Flags = 0; screen->m_Curseur = curspos; } diff --git a/eeschema/sheetlab.cpp b/eeschema/sheetlab.cpp index 3816b54a96..4d2bad344e 100644 --- a/eeschema/sheetlab.cpp +++ b/eeschema/sheetlab.cpp @@ -41,17 +41,17 @@ static void ExitPinSheet( WinEDA_DrawPanel* Panel, wxDC* DC ) if( SheetLabel->m_Flags & IS_NEW ) { - RedrawOneStruct( Panel, DC, SheetLabel, g_XorMode ); + SheetLabel->Draw( Panel, DC, wxPoint( 0, 0 ), g_XorMode ); SAFE_DELETE( SheetLabel ); } else { - RedrawOneStruct( Panel, DC, SheetLabel, g_XorMode ); + SheetLabel->Draw( Panel, DC, wxPoint( 0, 0 ), g_XorMode ); SheetLabel->m_Pos = s_InitialPosition; // Restore edge position: SheetLabel->SetEdge( s_InitialEdge ); - RedrawOneStruct( Panel, DC, SheetLabel, GR_DEFAULT_DRAWMODE ); + SheetLabel->Draw( Panel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); SheetLabel->m_Flags = 0; } @@ -87,7 +87,7 @@ void SCH_SHEET_PIN::Place( SCH_EDIT_FRAME* frame, wxDC* DC ) ConstraintOnEdge( frame->GetScreen()->m_Curseur ); - RedrawOneStruct( frame->DrawPanel, DC, Sheet, GR_DEFAULT_DRAWMODE ); + Sheet->Draw( frame->DrawPanel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); frame->DrawPanel->ManageCurseur = NULL; frame->DrawPanel->ForceCloseManageCurseur = NULL; } @@ -115,11 +115,11 @@ static void Move_PinSheet( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ) return; if( erase ) - RedrawOneStruct( panel, DC, SheetLabel, g_XorMode ); + SheetLabel->Draw( panel, DC, wxPoint( 0, 0 ), g_XorMode ); SheetLabel->ConstraintOnEdge( panel->GetScreen()->m_Curseur ); - RedrawOneStruct( panel, DC, SheetLabel, g_XorMode ); + SheetLabel->Draw( panel, DC, wxPoint( 0, 0 ), g_XorMode ); } @@ -129,7 +129,7 @@ int SCH_EDIT_FRAME::Edit_PinSheet( SCH_SHEET_PIN* aLabel, wxDC* aDC ) return wxID_CANCEL; if( aDC ) - RedrawOneStruct( DrawPanel, aDC, aLabel, g_XorMode ); + aLabel->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), g_XorMode ); DIALOG_SCH_EDIT_SHEET_PIN dlg( this ); @@ -158,7 +158,7 @@ int SCH_EDIT_FRAME::Edit_PinSheet( SCH_SHEET_PIN* aLabel, wxDC* aDC ) aLabel->m_Shape = dlg.GetConnectionType(); if( aDC ) - RedrawOneStruct( DrawPanel, aDC, aLabel, GR_DEFAULT_DRAWMODE ); + aLabel->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); return wxID_OK; } diff --git a/include/class_sch_screen.h b/include/class_sch_screen.h index 4aec26c9f7..5c36820dbc 100644 --- a/include/class_sch_screen.h +++ b/include/class_sch_screen.h @@ -153,6 +153,13 @@ public: */ void SelectBlockItems(); + /** + * Function UpdatePickList + * adds all the items in the screen within the block selection rectangle to the pick list. + * @return The number of items in the pick list. + */ + int UpdatePickList(); + virtual void AddItem( SCH_ITEM* aItem ) { BASE_SCREEN::AddItem( (EDA_ITEM*) aItem ); } virtual void InsertItem( EDA_ITEMS::iterator aIter, SCH_ITEM* aItem ) {