diff --git a/change_log.txt b/change_log.txt index e3b8656ccf..41d1dbd5a7 100644 --- a/change_log.txt +++ b/change_log.txt @@ -4,13 +4,22 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. +2007-Oct-9 UPDATE Dick Hollenbeck <dick@softplc.com> +================================================================================ ++ pcbnew + changed pcbnew/onrightclick.cpp so that a right click only shows the + Selection Clarification menu if there is no selected object or if the + click is in a position different from where the selection was previously + made. + 2007-Oct-09 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr> ================================================================================ + eeschema: cross-probing minor bug solved ( due to last modification): pins/pads not probed +>>>>>>> .r316 2007-Oct-08 UPDATE Geoff Harland <gharlandau@yahoo.com.au> ================================================================================ + gerbview @@ -32,7 +41,6 @@ email address. - definition CUIVRE_N translated into COPPER_LAYER_N - 2007-Oct-07 UPDATE Geoff Harland <gharlandau@yahoo.com.au> ================================================================================ + all diff --git a/gerbview/controle.cpp b/gerbview/controle.cpp index b95aeabe17..c6c0c59ff6 100644 --- a/gerbview/controle.cpp +++ b/gerbview/controle.cpp @@ -1,11 +1,12 @@ - /********************************************************/ - /* Routines generales de gestion des commandes usuelles */ - /********************************************************/ +/********************************************************/ +/* Routines generales de gestion des commandes usuelles */ +/********************************************************/ + +/* fichier controle.cpp */ - /* fichier controle.cpp */ /* - Routines d'affichage grille, Boite de coordonnees, Curseurs, marqueurs ... -*/ + * Routines d'affichage grille, Boite de coordonnees, Curseurs, marqueurs ... + */ #include "fctsys.h" @@ -21,149 +22,150 @@ /**********************************************************************/ -EDA_BaseStruct * WinEDA_GerberFrame::GerberGeneralLocateAndDisplay() +EDA_BaseStruct* WinEDA_GerberFrame::GerberGeneralLocateAndDisplay() { /**********************************************************************/ -{ - return Locate(CURSEUR_OFF_GRILLE); + return Locate( CURSEUR_OFF_GRILLE ); } +/****************************************************************/ +void WinEDA_BasePcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse ) +/****************************************************************/ -/****************************************************************/ -void WinEDA_BasePcbFrame::GeneralControle(wxDC *DC, wxPoint Mouse) -/****************************************************************/ /* traitement des touches de fonctions utilisees ds tous les menus - Zoom - Redessin d'ecran - Cht Unites - Cht couches - Remise a 0 de l'origine des coordonnees relatives -*/ + * Zoom + * Redessin d'ecran + * Cht Unites + * Cht couches + * Remise a 0 de l'origine des coordonnees relatives + */ { -wxSize delta; -wxPoint curpos, oldpos; -int hotkey = 0; + wxSize delta; + wxPoint curpos, oldpos; + int hotkey = 0; - if( GetScreen()->IsRefreshReq() ) - { - RedrawActiveWindow(DC, TRUE); - // We must return here, instead of proceeding. - // If we let the cursor move during a refresh request, - // the cursor be displayed in the wrong place - // during delayed repaint events that occur when - // you move the mouse when a message dialog is on - // the screen, and then you dismiss the dialog by - // typing the Enter key. - return; - } + if( GetScreen()->IsRefreshReq() ) + { + RedrawActiveWindow( DC, TRUE ); - curpos = DrawPanel->CursorRealPosition(Mouse); - oldpos = GetScreen()->m_Curseur; + // We must return here, instead of proceeding. + // If we let the cursor move during a refresh request, + // the cursor be displayed in the wrong place + // during delayed repaint events that occur when + // you move the mouse when a message dialog is on + // the screen, and then you dismiss the dialog by + // typing the Enter key. + return; + } - delta.x = GetScreen()->GetGrid().x / GetScreen()->GetZoom(); - delta.y = GetScreen()->GetGrid().y / GetScreen()->GetZoom(); - if( delta.x == 0 ) delta.x = 1; - if( delta.y == 0 ) delta.y = 1; + curpos = DrawPanel->CursorRealPosition( Mouse ); + oldpos = GetScreen()->m_Curseur; - switch(g_KeyPressed) - { - case EDA_PANNING_UP_KEY : - OnZoom(ID_ZOOM_PANNING_UP); - curpos = m_CurrentScreen->m_Curseur; - break; + delta.x = GetScreen()->GetGrid().x / GetScreen()->GetZoom(); + delta.y = GetScreen()->GetGrid().y / GetScreen()->GetZoom(); + if( delta.x == 0 ) + delta.x = 1; + if( delta.y == 0 ) + delta.y = 1; - case EDA_PANNING_DOWN_KEY : - OnZoom(ID_ZOOM_PANNING_DOWN); - curpos = m_CurrentScreen->m_Curseur; - break; + switch( g_KeyPressed ) + { + case EDA_PANNING_UP_KEY: + OnZoom( ID_ZOOM_PANNING_UP ); + curpos = m_CurrentScreen->m_Curseur; + break; - case EDA_PANNING_LEFT_KEY : - OnZoom(ID_ZOOM_PANNING_LEFT); - curpos = m_CurrentScreen->m_Curseur; - break; + case EDA_PANNING_DOWN_KEY: + OnZoom( ID_ZOOM_PANNING_DOWN ); + curpos = m_CurrentScreen->m_Curseur; + break; - case EDA_PANNING_RIGHT_KEY : - OnZoom(ID_ZOOM_PANNING_RIGHT); - curpos = m_CurrentScreen->m_Curseur; - break; + case EDA_PANNING_LEFT_KEY: + OnZoom( ID_ZOOM_PANNING_LEFT ); + curpos = m_CurrentScreen->m_Curseur; + break; - case EDA_ZOOM_IN_FROM_MOUSE : - OnZoom(ID_ZOOM_PLUS_KEY); - curpos = GetScreen()->m_Curseur; - break; + case EDA_PANNING_RIGHT_KEY: + OnZoom( ID_ZOOM_PANNING_RIGHT ); + curpos = m_CurrentScreen->m_Curseur; + break; - case EDA_ZOOM_OUT_FROM_MOUSE : - OnZoom(ID_ZOOM_MOINS_KEY); - curpos = GetScreen()->m_Curseur; - break; + case EDA_ZOOM_IN_FROM_MOUSE: + OnZoom( ID_ZOOM_PLUS_KEY ); + curpos = GetScreen()->m_Curseur; + break; - case EDA_ZOOM_CENTER_FROM_MOUSE : - OnZoom(ID_ZOOM_CENTER_KEY); - curpos = GetScreen()->m_Curseur; - break; + case EDA_ZOOM_OUT_FROM_MOUSE: + OnZoom( ID_ZOOM_MOINS_KEY ); + curpos = GetScreen()->m_Curseur; + break; - case WXK_NUMPAD8 : /* Deplacement curseur vers le haut */ - case WXK_UP : - Mouse.y -= delta.y; - DrawPanel->MouseTo(Mouse); - break ; + case EDA_ZOOM_CENTER_FROM_MOUSE: + OnZoom( ID_ZOOM_CENTER_KEY ); + curpos = GetScreen()->m_Curseur; + break; - case WXK_NUMPAD2: /* Deplacement curseur vers le bas */ - case WXK_DOWN: - Mouse.y += delta.y; - DrawPanel->MouseTo(Mouse); - break ; + case WXK_NUMPAD8: /* Deplacement curseur vers le haut */ + case WXK_UP: + Mouse.y -= delta.y; + DrawPanel->MouseTo( Mouse ); + break; - case WXK_NUMPAD4: /* Deplacement curseur vers la gauche */ - case WXK_LEFT : - Mouse.x -= delta.x; - DrawPanel->MouseTo(Mouse); - break ; + case WXK_NUMPAD2: /* Deplacement curseur vers le bas */ + case WXK_DOWN: + Mouse.y += delta.y; + DrawPanel->MouseTo( Mouse ); + break; - case WXK_NUMPAD6: /* Deplacement curseur vers la droite */ - case WXK_RIGHT : - Mouse.x += delta.x; - DrawPanel->MouseTo(Mouse); - break ; + case WXK_NUMPAD4: /* Deplacement curseur vers la gauche */ + case WXK_LEFT: + Mouse.x -= delta.x; + DrawPanel->MouseTo( Mouse ); + break; - default: hotkey = g_KeyPressed; - break; - } + case WXK_NUMPAD6: /* Deplacement curseur vers la droite */ + case WXK_RIGHT: + Mouse.x += delta.x; + DrawPanel->MouseTo( Mouse ); + break; - /* Recalcul de la position du curseur schema */ - GetScreen()->m_Curseur = curpos; - /* Placement sur la grille generale */ - PutOnGrid( & GetScreen()->m_Curseur); + default: + hotkey = g_KeyPressed; + break; + } - if ( (oldpos.x != GetScreen()->m_Curseur.x) || - (oldpos.y != GetScreen()->m_Curseur.y) ) - { - curpos = GetScreen()->m_Curseur; - GetScreen()->m_Curseur = oldpos; - DrawPanel->CursorOff(DC); + /* Recalcul de la position du curseur schema */ + GetScreen()->m_Curseur = curpos; + + /* Placement sur la grille generale */ + PutOnGrid( &GetScreen()->m_Curseur ); - GetScreen()->m_Curseur = curpos; - DrawPanel->CursorOn(DC); + if( (oldpos.x != GetScreen()->m_Curseur.x) + || (oldpos.y != GetScreen()->m_Curseur.y) ) + { + curpos = GetScreen()->m_Curseur; + GetScreen()->m_Curseur = oldpos; + DrawPanel->CursorOff( DC ); - if(DrawPanel->ManageCurseur) - { - DrawPanel->ManageCurseur(DrawPanel, DC, TRUE); - } - } + GetScreen()->m_Curseur = curpos; + DrawPanel->CursorOn( DC ); - if ( hotkey ) - { - OnHotKey(DC, hotkey, NULL); - } + if( DrawPanel->ManageCurseur ) + { + DrawPanel->ManageCurseur( DrawPanel, DC, TRUE ); + } + } + + if( hotkey ) + { + OnHotKey( DC, hotkey, NULL ); + } if( GetScreen()->IsRefreshReq() ) { RedrawActiveWindow( DC, TRUE ); } - SetToolbars(); - Affiche_Status_Box(); /* Affichage des coord curseur */ - + SetToolbars(); + Affiche_Status_Box(); /* Affichage des coord curseur */ } - - diff --git a/pcbnew/controle.cpp b/pcbnew/controle.cpp index 07dad843de..8ed39afd7b 100644 --- a/pcbnew/controle.cpp +++ b/pcbnew/controle.cpp @@ -118,11 +118,9 @@ BOARD_ITEM* WinEDA_BasePcbFrame::PcbGeneralLocateAndDisplay( int aHotKeyCode ) m_Collector->Collect( m_Pcb, scanList, GetScreen()->RefPos( true ), guide ); #if 0 - // debugging: print out the collected items, showing their priority order too. for( int i = 0; i<m_Collector->GetCount(); ++i ) (*m_Collector)[i]->Show( 0, std::cout ); - #endif /* Remove redundancies: most of time, zones are found twice, @@ -170,16 +168,16 @@ BOARD_ITEM* WinEDA_BasePcbFrame::PcbGeneralLocateAndDisplay( int aHotKeyCode ) { wxMenu itemMenu; - /* Give a title to the selection menu. This is also a cancel menu item */ - wxMenuItem * item_title = new wxMenuItem(&itemMenu, -1, _( "Selection Clarification" ) ); + /* Give a title to the selection menu. This is also a cancel menu item */ + wxMenuItem * item_title = new wxMenuItem(&itemMenu, -1, _( "Selection Clarification" ) ); #ifdef __WINDOWS__ - wxFont bold_font(*wxNORMAL_FONT); - bold_font.SetWeight(wxFONTWEIGHT_BOLD); - bold_font.SetStyle( wxFONTSTYLE_ITALIC); - item_title->SetFont(bold_font); + wxFont bold_font(*wxNORMAL_FONT); + bold_font.SetWeight(wxFONTWEIGHT_BOLD); + bold_font.SetStyle( wxFONTSTYLE_ITALIC); + item_title->SetFont(bold_font); #endif - itemMenu.Append(item_title); - itemMenu.AppendSeparator(); + itemMenu.Append(item_title); + itemMenu.AppendSeparator(); int limit = MIN( MAX_ITEMS_IN_PICKER, m_Collector->GetCount() ); @@ -206,8 +204,8 @@ BOARD_ITEM* WinEDA_BasePcbFrame::PcbGeneralLocateAndDisplay( int aHotKeyCode ) // this menu's handler is void WinEDA_BasePcbFrame::ProcessItemSelection() // and it calls SetCurItem() which in turn calls Display_Infos() on the item. - DrawPanel->m_AbortRequest = true; // changed in false if an item - PopupMenu( &itemMenu ); // m_AbortRequest = false if an item is selected + DrawPanel->m_AbortRequest = true; // changed in false if an item + PopupMenu( &itemMenu ); // m_AbortRequest = false if an item is selected DrawPanel->MouseToCursorSchema(); @@ -234,6 +232,7 @@ void WinEDA_BasePcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse ) // Save the board after the time out : int CurrentTime = time( NULL ); + if( !GetScreen()->IsModify() || GetScreen()->IsSave() ) { /* If no change, reset the time out */ @@ -258,10 +257,12 @@ void WinEDA_BasePcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse ) } curpos = DrawPanel->CursorRealPosition( Mouse ); + oldpos = GetScreen()->m_Curseur; delta.x = (int) round( (double) GetScreen()->GetGrid().x / zoom ); delta.y = (int) round( (double) GetScreen()->GetGrid().y / zoom ); + if( delta.x <= 0 ) delta.x = 1; if( delta.y <= 0 ) @@ -361,6 +362,7 @@ void WinEDA_BasePcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse ) if( (m_ID_current_state != ID_TRACK_BUTT ) && (g_MagneticPadOption == capture_cursor_in_track_tool) ) pad = NULL; + if( keep_on_grid ) { if( pad ) // Put cursor on the pad diff --git a/pcbnew/onrightclick.cpp b/pcbnew/onrightclick.cpp index 71a3ad8552..e4412d76c9 100644 --- a/pcbnew/onrightclick.cpp +++ b/pcbnew/onrightclick.cpp @@ -12,6 +12,7 @@ #include "autorout.h" #include "id.h" #include "hotkeys.h" +#include "collectors.h" /* Bitmaps */ #include "bitmaps.h" @@ -159,8 +160,34 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) } } - + /* Select a proper item */ + +#if 1 // try this + wxPoint cursorPos = GetScreen()->m_Curseur; + wxPoint selectPos = m_Collector->GetRefPos(); + + PutOnGrid( &selectPos ); + + // printf( "cursor=(%d, %d) select=(%d,%d)\n", cursorPos.x, cursorPos.y, selectPos.x, selectPos.y ); + + // If there is no selected item or the right click happened at a position + // other than where the selection was made + if( !item || cursorPos != selectPos ) + { + DrawPanel->m_AbortRequest = false; + item = PcbGeneralLocateAndDisplay(); + if( DrawPanel->m_AbortRequest ) + { + DrawPanel->CursorOn( &dc ); + return false; + } + + // SetCurItem( item ); no, PcbGeneralLocateAndDisplay() does this + } + +#else + if( !item || !item->m_Flags ) { DrawPanel->m_AbortRequest = false; @@ -173,6 +200,8 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu ) SetCurItem( item ); } +#endif + item = GetCurItem(); if( item )