diff --git a/change_log.txt b/change_log.txt index 2cad67663c..b74ecdc41e 100644 --- a/change_log.txt +++ b/change_log.txt @@ -5,6 +5,17 @@ Please add newer entries at the top, list the date and your name with email address. +2007-Dec-13 UPDATE Dick Hollenbeck +================================================================================ ++pcbnew + * surbrill.cpp's int WinEDA_PcbFrame::Select_High_Light( wxDC* DC ) + was re-written to use the GENERAL_COLLECTOR, and the scanList is set to + give pads a higher search priority than tracks, vias or pads. + The objective was to use the pad if possible, rather than a track on a pad, + so the pad can be sent to eeschema. Finding the track only (even though + on a pad) would not send anything to eeschema. + + 2007-Dec-12 UPDATE Dick Hollenbeck ================================================================================ +pcbnew @@ -25,8 +36,8 @@ email address. 2007-Dec-09 UPDATE Jean-Pierre Charras ================================================================================ +cvpcb: - listboxes.cpp FootprintListBox::m_ActiveFootprint member was not initialized. - Can crash cvpcb (WINDOWS only, i believe) + listboxes.cpp FootprintListBox::m_ActiveFootprint member was not initialized. + Can crash cvpcb (WINDOWS only, i believe) 2007-Dec-09 UPDATE Jean-Pierre Charras diff --git a/pcbnew/collectors.cpp b/pcbnew/collectors.cpp index d379b8c6fe..6c08704bdb 100644 --- a/pcbnew/collectors.cpp +++ b/pcbnew/collectors.cpp @@ -92,6 +92,16 @@ const KICAD_T GENERAL_COLLECTOR::PadsOrModules[] = { EOT }; + +const KICAD_T GENERAL_COLLECTOR::PadsOrTracks[] = { + TYPEPAD, + TYPEVIA, + TYPETRACK, + TYPEZONE, + EOT +}; + + const KICAD_T GENERAL_COLLECTOR::ModulesAndTheirItems[] = { TYPETEXTEMODULE, TYPEEDGEMODULE, diff --git a/pcbnew/collectors.h b/pcbnew/collectors.h index f3f07b649c..127bcdf0a8 100644 --- a/pcbnew/collectors.h +++ b/pcbnew/collectors.h @@ -226,6 +226,12 @@ public: */ static const KICAD_T PadsOrModules[]; + /** + * A scan list for PADs, TRACKs, VIAs, or ZONEs + */ + static const KICAD_T PadsOrTracks[]; + + /** * A scan list for MODULEs and their items (for Modedit) */ diff --git a/pcbnew/surbrill.cpp b/pcbnew/surbrill.cpp index 9a7c8cf0e1..30e155779f 100644 --- a/pcbnew/surbrill.cpp +++ b/pcbnew/surbrill.cpp @@ -9,6 +9,8 @@ #include "pcbnew.h" #include "protos.h" +#include "collectors.h" + #define Pad_fill (Pad_Fill_Item.State == RUN) @@ -88,32 +90,40 @@ int WinEDA_PcbFrame::Select_High_Light( wxDC* DC ) /* Localise track ou pad et met en surbrillance le net correspondant * Retourne le netcode, ou -1 si pas de net localis�*/ { - TRACK* pt_piste; - D_PAD* pt_pad; - int masquelayer = g_TabOneLayerMask[GetScreen()->m_Active_Layer]; - int code = -1; - if( g_HightLigt_Status ) Hight_Light( DC ); - pt_piste = Locate_Pistes( m_Pcb->m_Track, masquelayer, CURSEUR_OFF_GRILLE ); - if( pt_piste ) + // use this scheme because of pad is higher priority than tracks in the + // search, and finding a pad, instead of a track on a pad, + // allows us to fire a message to eescema. + + GENERAL_COLLECTORS_GUIDE guide = GetCollectorsGuide(); + + // tweak the collector + + m_Collector->Collect( m_Pcb, GENERAL_COLLECTOR::PadsOrTracks, + GetScreen()->RefPos( true ), guide ); + + BOARD_ITEM* item = (*m_Collector)[0]; + + if( item ) { - code = g_HightLigth_NetCode = pt_piste->GetNet(); - Hight_Light( DC ); - } - else - { - pt_pad = Locate_Any_Pad( m_Pcb, CURSEUR_OFF_GRILLE ); - if( pt_pad != NULL ) + switch( item->Type() ) { - code = g_HightLigth_NetCode = pt_pad->GetNet(); + case TYPEPAD: + g_HightLigth_NetCode = ((D_PAD*)item)->GetNet(); Hight_Light( DC ); - SendMessageToEESCHEMA( pt_pad ); + SendMessageToEESCHEMA( item ); + return g_HightLigth_NetCode; + + default: + g_HightLigth_NetCode = ((TRACK*)item)->GetNet(); + Hight_Light( DC ); + return g_HightLigth_NetCode; } } - - return code; + + return -1; // HitTest() failed. }