From 0d8cb9b53c357059da9a115b9d9ea712d3b404bd Mon Sep 17 00:00:00 2001 From: Wayne Stambaugh Date: Fri, 4 Feb 2011 21:21:11 -0500 Subject: [PATCH] EESchema improvements and other minor fixes. * Remove base screen methods from draw frame object and correct current screen methods in derived objects. * Move restore old wires function code into schematic screen object. * Make add junction method use current screen position instead of store position. * Move poly line ghosting function into the delete current segment method as that was the only place is was being used. * Add method to base schematic object of testing if object has a label that can be incremented. * Simplified the schematic hierarchy traversing code. * PCBNew Doxygen warning fixes. --- common/block_commande.cpp | 19 +-- common/copy_to_clipboard.cpp | 2 +- common/dialogs/dialog_page_settings.cpp | 6 +- common/drawframe.cpp | 27 ++- common/drawpanel.cpp | 2 +- common/worksheet.cpp | 4 +- common/zoom.cpp | 12 +- cvpcb/class_DisplayFootprintsFrame.cpp | 7 +- eeschema/bus-wire-junction.cpp | 157 ++++++------------ eeschema/dialogs/dialog_SVG_print.cpp | 4 +- .../dialogs/dialog_plot_schematic_HPGL.cpp | 11 +- eeschema/eeschema_config.cpp | 8 +- eeschema/hierarch.cpp | 97 +++-------- eeschema/libedit.cpp | 8 +- eeschema/libeditframe.cpp | 2 +- eeschema/libeditframe.h | 2 +- eeschema/onleftclick.cpp | 19 ++- eeschema/sch_screen.cpp | 34 ++++ eeschema/sch_text.h | 2 + eeschema/schedit.cpp | 12 +- eeschema/schframe.cpp | 17 +- eeschema/viewlib_frame.cpp | 2 +- eeschema/viewlib_frame.h | 2 +- gerbview/gerberframe.cpp | 4 +- gerbview/initpcb.cpp | 2 +- include/class_sch_screen.h | 7 + include/sch_item_struct.h | 2 + include/wxBasePcbFrame.h | 8 +- include/wxEeschemaStruct.h | 21 ++- include/wxstruct.h | 8 +- pcbnew/basepcbframe.cpp | 14 +- pcbnew/class_netclass.h | 2 +- pcbnew/dialogs/dialog_SVG_print.cpp | 2 +- pcbnew/help_common_strings.h | 2 +- pcbnew/locate.cpp | 1 + pcbnew/moduleframe.cpp | 9 +- pcbnew/netlist.cpp | 4 +- pcbnew/pcbframe.cpp | 2 +- pcbnew/printout_controler.cpp | 6 +- 39 files changed, 240 insertions(+), 310 deletions(-) diff --git a/common/block_commande.cpp b/common/block_commande.cpp index a1022316f7..f25006f367 100644 --- a/common/block_commande.cpp +++ b/common/block_commande.cpp @@ -166,17 +166,16 @@ void BLOCK_SELECTOR::PushItem( ITEM_PICKER& aItem ) */ bool EDA_DRAW_FRAME::HandleBlockBegin( wxDC* DC, int key, const wxPoint& startpos ) { - BLOCK_SELECTOR* Block = &GetBaseScreen()->m_BlockLocate; + BLOCK_SELECTOR* Block = &GetScreen()->m_BlockLocate; - if( ( Block->m_Command != BLOCK_IDLE ) - || ( Block->m_State != STATE_NO_BLOCK ) ) - return FALSE; + if( ( Block->m_Command != BLOCK_IDLE ) || ( Block->m_State != STATE_NO_BLOCK ) ) + return false; Block->m_Flags = 0; Block->m_Command = (CmdBlockType) ReturnBlockCommand( key ); if( Block->m_Command == 0 ) - return FALSE; + return false; switch( Block->m_Command ) { @@ -205,19 +204,19 @@ bool EDA_DRAW_FRAME::HandleBlockBegin( wxDC* DC, int key, const wxPoint& startpo if( Block->m_ItemsSelection.GetCount() == 0 ) /* No data to paste */ { DisplayError( this, wxT( "No Block to paste" ), 20 ); - GetBaseScreen()->m_BlockLocate.m_Command = BLOCK_IDLE; + GetScreen()->m_BlockLocate.m_Command = BLOCK_IDLE; DrawPanel->ManageCurseur = NULL; - return TRUE; + return true; } if( DrawPanel->ManageCurseur == NULL ) { Block->m_ItemsSelection.ClearItemsList(); DisplayError( this, wxT( "EDA_DRAW_FRAME::HandleBlockBegin() Err: ManageCurseur NULL" ) ); - return TRUE; + return true; } Block->m_State = STATE_BLOCK_MOVE; - DrawPanel->ManageCurseur( DrawPanel, DC, startpos, FALSE ); + DrawPanel->ManageCurseur( DrawPanel, DC, startpos, false ); break; default: @@ -231,7 +230,7 @@ bool EDA_DRAW_FRAME::HandleBlockBegin( wxDC* DC, int key, const wxPoint& startpo } Block->SetMessageBlock( this ); - return TRUE; + return true; } diff --git a/common/copy_to_clipboard.cpp b/common/copy_to_clipboard.cpp index 42dfacfc7f..1cef8b1c85 100644 --- a/common/copy_to_clipboard.cpp +++ b/common/copy_to_clipboard.cpp @@ -30,7 +30,7 @@ void EDA_DRAW_FRAME::CopyToClipboard( wxCommandEvent& event ) if( event.GetId() == ID_GEN_COPY_BLOCK_TO_CLIPBOARD ) { - if( GetBaseScreen()->m_BlockLocate.m_Command != BLOCK_IDLE ) + if( GetScreen()->m_BlockLocate.m_Command != BLOCK_IDLE ) DrawPanel->SetCursor( wxCursor( DrawPanel->m_PanelCursor = DrawPanel->m_PanelDefaultCursor ) ); diff --git a/common/dialogs/dialog_page_settings.cpp b/common/dialogs/dialog_page_settings.cpp index aa0b265f6f..81681f9138 100644 --- a/common/dialogs/dialog_page_settings.cpp +++ b/common/dialogs/dialog_page_settings.cpp @@ -50,7 +50,7 @@ DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* parent ): DIALOG_PAGES_SETTINGS_BASE( parent ) { m_Parent = parent; - m_Screen = m_Parent->GetBaseScreen(); + m_Screen = m_Parent->GetScreen(); m_Modified = 0; m_SelectedSheet = NULL; m_CurrentSelection = 0; @@ -276,10 +276,12 @@ void DIALOG_PAGES_SETTINGS::SearchPageSizeSelection() int ii; m_CurrentSelection = NB_ITEMS - 1; + for( ii = 0; ii < NB_ITEMS; ii++ ) { sheet = SheetList[ii]; - if( m_Parent->GetBaseScreen()->m_CurrentSheetDesc == sheet ) + + if( m_Parent->GetScreen()->m_CurrentSheetDesc == sheet ) m_CurrentSelection = ii; } } diff --git a/common/drawframe.cpp b/common/drawframe.cpp index 2939a9ce6b..4132623564 100644 --- a/common/drawframe.cpp +++ b/common/drawframe.cpp @@ -65,7 +65,7 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( wxWindow* father, int idtype, DrawPanel = NULL; MsgPanel = NULL; - m_CurrentScreen = NULL; + m_currentScreen = NULL; m_ID_current_state = 0; m_ID_last_state = 0; m_HTOOL_current_state = 0; @@ -121,8 +121,7 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( wxWindow* father, int idtype, EDA_DRAW_FRAME::~EDA_DRAW_FRAME() { - if( m_CurrentScreen != NULL ) - delete m_CurrentScreen; + SAFE_DELETE( m_currentScreen ); m_auimgr.UnInit(); } @@ -246,7 +245,7 @@ void EDA_DRAW_FRAME::OnSelectGrid( wxCommandEvent& event ) } } - BASE_SCREEN* screen = GetBaseScreen(); + BASE_SCREEN* screen = GetScreen(); if( screen->GetGridId() == id ) return; @@ -288,13 +287,13 @@ void EDA_DRAW_FRAME::OnSelectZoom( wxCommandEvent& event ) else { id--; - int selectedZoom = GetBaseScreen()->m_ZoomList[id]; + int selectedZoom = GetScreen()->m_ZoomList[id]; - if( GetBaseScreen()->GetZoom() == selectedZoom ) + if( GetScreen()->GetZoom() == selectedZoom ) return; - GetBaseScreen()->m_Curseur = DrawPanel->GetScreenCenterLogicalPosition(); - GetBaseScreen()->SetZoom( selectedZoom ); + GetScreen()->m_Curseur = DrawPanel->GetScreenCenterLogicalPosition(); + GetScreen()->SetZoom( selectedZoom ); RedrawScreen( false ); } } @@ -303,7 +302,7 @@ void EDA_DRAW_FRAME::OnSelectZoom( wxCommandEvent& event ) /* Return the current zoom level */ int EDA_DRAW_FRAME::GetZoom(void) { - return GetBaseScreen()->GetZoom(); + return GetScreen()->GetZoom(); } @@ -455,8 +454,8 @@ wxPoint EDA_DRAW_FRAME::GetGridPosition( const wxPoint& aPosition ) { wxPoint pos = aPosition; - if( m_CurrentScreen != NULL && m_snapToGrid ) - pos = m_CurrentScreen->GetNearestGridPosition( aPosition ); + if( m_currentScreen != NULL && m_snapToGrid ) + pos = m_currentScreen->GetNearestGridPosition( aPosition ); return pos; } @@ -470,7 +469,7 @@ int EDA_DRAW_FRAME::ReturnBlockCommand( int key ) void EDA_DRAW_FRAME::InitBlockPasteInfos() { - GetBaseScreen()->m_BlockLocate.ClearItemsList(); + GetScreen()->m_BlockLocate.ClearItemsList(); DrawPanel->ManageCurseur = NULL; } @@ -490,7 +489,7 @@ void EDA_DRAW_FRAME::AdjustScrollBars() { int unitsX, unitsY, posX, posY; wxSize drawingSize, clientSize; - BASE_SCREEN* screen = GetBaseScreen(); + BASE_SCREEN* screen = GetScreen(); bool noRefresh = true; if( screen == NULL || DrawPanel == NULL ) @@ -627,7 +626,7 @@ void EDA_DRAW_FRAME::UpdateStatusBar() { wxString Line; int dx, dy; - BASE_SCREEN* screen = GetBaseScreen(); + BASE_SCREEN* screen = GetScreen(); if( !screen ) return; diff --git a/common/drawpanel.cpp b/common/drawpanel.cpp index 93e9b7d7bd..a9bf596187 100644 --- a/common/drawpanel.cpp +++ b/common/drawpanel.cpp @@ -110,7 +110,7 @@ BASE_SCREEN* EDA_DRAW_PANEL::GetScreen() { EDA_DRAW_FRAME* parentFrame = m_Parent; - return parentFrame->GetBaseScreen(); + return parentFrame->GetScreen(); } diff --git a/common/worksheet.cpp b/common/worksheet.cpp index c34919e119..98498ac8f6 100644 --- a/common/worksheet.cpp +++ b/common/worksheet.cpp @@ -1576,7 +1576,7 @@ wxString EDA_DRAW_FRAME::GetScreenDesc() { wxString msg; - msg << GetBaseScreen()->m_ScreenNumber << wxT( "/" ) - << GetBaseScreen()->m_NumberOfScreen; + msg << GetScreen()->m_ScreenNumber << wxT( "/" ) + << GetScreen()->m_NumberOfScreen; return msg; } diff --git a/common/zoom.cpp b/common/zoom.cpp index 01d7a9f59f..6f796b191b 100644 --- a/common/zoom.cpp +++ b/common/zoom.cpp @@ -21,7 +21,7 @@ void EDA_DRAW_FRAME::RedrawScreen( bool aWarpPointer ) { - PutOnGrid( &(GetBaseScreen()->m_Curseur) ); + PutOnGrid( &(GetScreen()->m_Curseur) ); AdjustScrollBars(); #if !defined(__WXMAC__) @@ -53,7 +53,7 @@ void EDA_DRAW_FRAME::PutOnGrid( wxPoint* aCoord , wxRealPoint* aGridSize ) { wxCHECK_RET( aCoord != NULL, wxT( "Cannot pull NULL coordinate pointer on grid." ) ); - *aCoord = GetBaseScreen()->GetNearestGridPosition( *aCoord, aGridSize ); + *aCoord = GetScreen()->GetNearestGridPosition( *aCoord, aGridSize ); } @@ -62,7 +62,7 @@ void EDA_DRAW_FRAME::PutOnGrid( wxPoint* aCoord , wxRealPoint* aGridSize ) */ void EDA_DRAW_FRAME::Zoom_Automatique( bool move_mouse_cursor ) { - GetBaseScreen()->SetZoom( BestZoom() ); // Set the best zoom + GetScreen()->SetZoom( BestZoom() ); // Set the best zoom RedrawScreen( move_mouse_cursor ); // Set the best centering and refresh the screen } @@ -85,8 +85,8 @@ void EDA_DRAW_FRAME::Window_Zoom( EDA_Rect& Rect ) bestscale = (double) Rect.GetSize().y / size.y; bestscale = MAX( bestscale, scalex ); - GetBaseScreen()->SetScalingFactor( bestscale ); - GetBaseScreen()->m_Curseur = Rect.Centre(); + GetScreen()->SetScalingFactor( bestscale ); + GetScreen()->m_Curseur = Rect.Centre(); RedrawScreen( TRUE ); } @@ -103,7 +103,7 @@ void EDA_DRAW_FRAME::OnZoom( wxCommandEvent& event ) int i; int id = event.GetId(); bool zoom_at_cursor = false; - BASE_SCREEN* screen = GetBaseScreen(); + BASE_SCREEN* screen = GetScreen(); switch( id ) { diff --git a/cvpcb/class_DisplayFootprintsFrame.cpp b/cvpcb/class_DisplayFootprintsFrame.cpp index 0727c13f89..2140116021 100644 --- a/cvpcb/class_DisplayFootprintsFrame.cpp +++ b/cvpcb/class_DisplayFootprintsFrame.cpp @@ -65,7 +65,7 @@ DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME( WinEDA_CvpcbFrame* father, SetTitle( title ); SetBoard( new BOARD( NULL, this ) ); - SetBaseScreen( new PCB_SCREEN() ); + SetScreen( new PCB_SCREEN() ); LoadSettings(); // Initialize grid id to a default value if not found in config or bad: @@ -126,9 +126,8 @@ DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME( WinEDA_CvpcbFrame* father, DISPLAY_FOOTPRINTS_FRAME::~DISPLAY_FOOTPRINTS_FRAME() { delete GetBoard(); - - delete GetBaseScreen(); - SetBaseScreen( 0 ); + delete GetScreen(); + SetScreen( NULL ); ( (WinEDA_CvpcbFrame*) wxGetApp().GetTopWindow() )->DrawFrame = NULL; } diff --git a/eeschema/bus-wire-junction.cpp b/eeschema/bus-wire-junction.cpp index a6270e581a..ad7d88ac16 100644 --- a/eeschema/bus-wire-junction.cpp +++ b/eeschema/bus-wire-junction.cpp @@ -24,8 +24,6 @@ #include "sch_sheet.h" -/* Routines Locales */ -static void Show_Polyline_in_Ghost( EDA_DRAW_PANEL* panel, wxDC* DC, bool erase ); static void AbortCreateNewLine( EDA_DRAW_PANEL* Panel, wxDC* DC ); static bool IsTerminalPoint( SCH_SCREEN* screen, const wxPoint& pos, int layer ); static bool IsJunctionNeeded( SCH_EDIT_FRAME* frame, wxPoint& pos ); @@ -35,41 +33,6 @@ SCH_ITEM* s_OldWiresList; wxPoint s_ConnexionStartPoint; -/* Replace the wires in screen->GetDrawItems() by s_OldWiresList wires. - */ -static void RestoreOldWires( SCH_SCREEN* screen ) -{ - SCH_ITEM* item; - SCH_ITEM* next_item; - - for( item = screen->GetDrawItems(); item != NULL; item = next_item ) - { - next_item = item->Next(); - - switch( item->Type() ) - { - case SCH_JUNCTION_T: - case SCH_LINE_T: - screen->RemoveFromDrawList( item ); - delete item; - break; - - default: - break; - } - } - - while( s_OldWiresList ) - { - next_item = s_OldWiresList->Next(); - - s_OldWiresList->SetNext( screen->GetDrawItems() ); - screen->SetDrawItems( s_OldWiresList ); - s_OldWiresList = next_item; - } -} - - /** * Mouse capture callback for drawing line segments. */ @@ -249,7 +212,7 @@ void SCH_EDIT_FRAME::BeginSegment( wxDC* DC, int type ) if( oldsegment->m_Start == s_ConnexionStartPoint ) { if( IsJunctionNeeded( this, s_ConnexionStartPoint ) ) - CreateNewJunctionStruct( DC, s_ConnexionStartPoint ); + AddJunction( DC, s_ConnexionStartPoint ); } } } @@ -344,15 +307,15 @@ void SCH_EDIT_FRAME::EndSegment( wxDC* DC ) if( lastsegment ) { if( IsJunctionNeeded( this, end_point ) ) - CreateNewJunctionStruct( DC, end_point ); + AddJunction( DC, end_point ); else if( IsJunctionNeeded( this, alt_end_point ) ) - CreateNewJunctionStruct( DC, alt_end_point ); + AddJunction( DC, alt_end_point ); } /* Automatic place of a junction on the start point if necessary because * the cleanup can suppress intermediate points by merging wire segments */ if( IsJunctionNeeded( this, s_ConnexionStartPoint ) ) - CreateNewJunctionStruct( DC, s_ConnexionStartPoint ); + AddJunction( DC, s_ConnexionStartPoint ); GetScreen()->TestDanglingEnds( DrawPanel, DC ); @@ -431,92 +394,73 @@ static void ComputeBreakPoint( SCH_LINE* segment, const wxPoint& new_pos ) } -/* Drawing Polyline phantom at the displacement of the cursor - */ -static void Show_Polyline_in_Ghost( EDA_DRAW_PANEL* panel, wxDC* DC, bool erase ) -{ - SCH_POLYLINE* NewPoly = (SCH_POLYLINE*) panel->GetScreen()->GetCurItem(); - int color; - wxPoint endpos; - - endpos = panel->GetScreen()->m_Curseur; - color = ReturnLayerColor( NewPoly->GetLayer() ); - - GRSetDrawMode( DC, g_XorMode ); - - int idx = NewPoly->GetCornerCount() - 1; - - if( g_HVLines ) - { - /* Coerce the line to vertical or horizontal one: */ - if( ABS( endpos.x - NewPoly->m_PolyPoints[idx].x ) < - ABS( endpos.y - NewPoly->m_PolyPoints[idx].y ) ) - endpos.x = NewPoly->m_PolyPoints[idx].x; - else - endpos.y = NewPoly->m_PolyPoints[idx].y; - } - - if( erase ) - NewPoly->Draw( panel, DC, wxPoint( 0, 0 ), g_XorMode, color ); - - NewPoly->m_PolyPoints[idx] = endpos; - NewPoly->Draw( panel, DC, wxPoint( 0, 0 ), g_XorMode, color ); -} - - /* * Erase the last trace or the element at the current mouse position. */ void SCH_EDIT_FRAME::DeleteCurrentSegment( wxDC* DC ) { + SCH_SCREEN* screen = GetScreen(); + m_itemToRepeat = NULL; - if( ( GetScreen()->GetCurItem() == NULL ) - || ( ( GetScreen()->GetCurItem()->m_Flags & IS_NEW ) == 0 ) ) - { + if( ( screen->GetCurItem() == NULL ) || !screen->GetCurItem()->IsNew() ) return; - } /* Cancel trace in progress */ - if( GetScreen()->GetCurItem()->Type() == SCH_POLYLINE_T ) + if( screen->GetCurItem()->Type() == SCH_POLYLINE_T ) { - Show_Polyline_in_Ghost( DrawPanel, DC, false ); + SCH_POLYLINE* polyLine = (SCH_POLYLINE*) screen->GetCurItem(); + wxPoint endpos; + + endpos = screen->m_Curseur; + + int idx = polyLine->GetCornerCount() - 1; + + if( g_HVLines ) + { + /* Coerce the line to vertical or horizontal one: */ + if( ABS( endpos.x - polyLine->m_PolyPoints[idx].x ) < + ABS( endpos.y - polyLine->m_PolyPoints[idx].y ) ) + endpos.x = polyLine->m_PolyPoints[idx].x; + else + endpos.y = polyLine->m_PolyPoints[idx].y; + } + + polyLine->m_PolyPoints[idx] = endpos; + polyLine->Draw( DrawPanel, DC, wxPoint( 0, 0 ), g_XorMode ); } else { DrawSegment( DrawPanel, DC, wxDefaultPosition, false ); } - EraseStruct( (SCH_ITEM*) GetScreen()->GetCurItem(), GetScreen() ); + screen->RemoveFromDrawList( screen->GetCurItem() ); DrawPanel->ManageCurseur = NULL; - GetScreen()->SetCurItem( NULL ); + screen->SetCurItem( NULL ); } /* Routine to create new connection struct. */ -SCH_JUNCTION* SCH_EDIT_FRAME::CreateNewJunctionStruct( wxDC* DC, - const wxPoint& pos, - bool PutInUndoList ) +SCH_JUNCTION* SCH_EDIT_FRAME::AddJunction( wxDC* aDC, const wxPoint& aPosition, + bool aPutInUndoList ) { - SCH_JUNCTION* NewJunction; + SCH_JUNCTION* junction = new SCH_JUNCTION( aPosition ); - NewJunction = new SCH_JUNCTION( pos ); + m_itemToRepeat = junction; - m_itemToRepeat = NewJunction; + DrawPanel->CursorOff( aDC ); // Erase schematic cursor + junction->Draw( DrawPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); + DrawPanel->CursorOn( aDC ); // Display schematic cursor - DrawPanel->CursorOff( DC ); // Erase schematic cursor - NewJunction->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); - DrawPanel->CursorOn( DC ); // Display schematic cursor - - NewJunction->SetNext( GetScreen()->GetDrawItems() ); - GetScreen()->SetDrawItems( NewJunction ); + junction->SetNext( GetScreen()->GetDrawItems() ); + GetScreen()->SetDrawItems( junction ); OnModify(); - if( PutInUndoList ) - SaveCopyInUndoList( NewJunction, UR_NEW ); + if( aPutInUndoList ) + SaveCopyInUndoList( junction, UR_NEW ); - return NewJunction; + return junction; } @@ -543,15 +487,15 @@ SCH_NO_CONNECT* SCH_EDIT_FRAME::AddNoConnect( wxDC* aDC, const wxPoint& aPositio */ static void AbortCreateNewLine( EDA_DRAW_PANEL* Panel, wxDC* DC ) { - SCH_SCREEN* Screen = (SCH_SCREEN*) Panel->GetScreen(); + SCH_SCREEN* screen = (SCH_SCREEN*) Panel->GetScreen(); - if( Screen->GetCurItem() ) + if( screen->GetCurItem() ) { Panel->ManageCurseur = NULL; Panel->ForceCloseManageCurseur = NULL; - EraseStruct( (SCH_ITEM*) Screen->GetCurItem(), (SCH_SCREEN*) Screen ); - Screen->SetCurItem( NULL ); - RestoreOldWires( Screen ); + screen->RemoveFromDrawList( (SCH_ITEM*) screen->GetCurItem() ); + screen->SetCurItem( NULL ); + screen->ReplaceWires( s_OldWiresList ); Panel->Refresh(); } else @@ -562,7 +506,7 @@ static void AbortCreateNewLine( EDA_DRAW_PANEL* Panel, wxDC* DC ) } /* Clear m_Flags which is used in edit functions: */ - SCH_ITEM* item = Screen->GetDrawItems(); + SCH_ITEM* item = screen->GetDrawItems(); while( item ) { @@ -596,13 +540,8 @@ void SCH_EDIT_FRAME::RepeatDrawItem( wxDC* DC ) m_itemToRepeat->Move( wxPoint( g_RepeatStep.GetWidth(), g_RepeatStep.GetHeight() ) ); - if( m_itemToRepeat->Type() == SCH_TEXT_T - || m_itemToRepeat->Type() == SCH_LABEL_T - || m_itemToRepeat->Type() == SCH_HIERARCHICAL_LABEL_T - || m_itemToRepeat->Type() == SCH_GLOBAL_LABEL_T ) - { + if( m_itemToRepeat->CanIncrementLabel() ) ( (SCH_TEXT*) m_itemToRepeat )->IncrementLabel(); - } if( m_itemToRepeat ) { diff --git a/eeschema/dialogs/dialog_SVG_print.cpp b/eeschema/dialogs/dialog_SVG_print.cpp index fab9a9005d..d72b1ce692 100644 --- a/eeschema/dialogs/dialog_SVG_print.cpp +++ b/eeschema/dialogs/dialog_SVG_print.cpp @@ -99,8 +99,8 @@ void DIALOG_SVG_PRINT::PrintSVGDoc( bool aPrintAll, bool aPrint_Sheet_Ref ) g_DrawDefaultLineThickness = ReturnValueFromTextCtrl( *m_DialogPenWidth, m_Parent->m_InternalUnits ); - BASE_SCREEN* screen = m_Parent->GetBaseScreen(); - BASE_SCREEN* oldscreen = screen; + SCH_SCREEN* screen = (SCH_SCREEN*) m_Parent->GetScreen(); + SCH_SCREEN* oldscreen = screen; if( aPrintAll && m_Parent->m_Ident == SCHEMATIC_FRAME ) { diff --git a/eeschema/dialogs/dialog_plot_schematic_HPGL.cpp b/eeschema/dialogs/dialog_plot_schematic_HPGL.cpp index e3b8207846..e05ee24619 100644 --- a/eeschema/dialogs/dialog_plot_schematic_HPGL.cpp +++ b/eeschema/dialogs/dialog_plot_schematic_HPGL.cpp @@ -102,8 +102,7 @@ private: void Plot_1_Page_HPGL( const wxString& FileName, SCH_SCREEN* screen, Ki_PageDescr* sheet, wxPoint& offset, double plot_scale ); - void ReturnSheetDims( BASE_SCREEN* screen, wxSize& SheetSize, - wxPoint& SheetOffset ); + void ReturnSheetDims( SCH_SCREEN* screen, wxSize& SheetSize, wxPoint& SheetOffset ); }; /* static members (static to remember last state): */ PageFormatReq DIALOG_PLOT_SCHEMATIC_HPGL:: m_pageSizeSelect = PAGE_DEFAULT; @@ -262,14 +261,14 @@ void DIALOG_PLOT_SCHEMATIC_HPGL::HPGL_Plot( bool aPlotAll ) /* Function calculates the offsets and dimensions of any trace of the * selected sheet */ -void DIALOG_PLOT_SCHEMATIC_HPGL::ReturnSheetDims( BASE_SCREEN* screen, - wxSize& SheetSize, - wxPoint& SheetOffset ) +void DIALOG_PLOT_SCHEMATIC_HPGL::ReturnSheetDims( SCH_SCREEN* screen, + wxSize& SheetSize, + wxPoint& SheetOffset ) { Ki_PageDescr* PlotSheet; if( screen == NULL ) - screen = m_Parent->GetBaseScreen(); + screen = m_Parent->GetScreen(); PlotSheet = screen->m_CurrentSheetDesc; diff --git a/eeschema/eeschema_config.cpp b/eeschema/eeschema_config.cpp index afd034f04a..c2fa1b105d 100644 --- a/eeschema/eeschema_config.cpp +++ b/eeschema/eeschema_config.cpp @@ -176,7 +176,7 @@ void SCH_EDIT_FRAME::OnSetOptions( wxCommandEvent& event ) wxArrayString units; GRIDS grid_list; - GetBaseScreen()->GetGrids( grid_list ); + GetScreen()->GetGrids( grid_list ); DIALOG_EESCHEMA_OPTIONS dlg( this ); @@ -184,7 +184,7 @@ void SCH_EDIT_FRAME::OnSetOptions( wxCommandEvent& event ) units.Add( GetUnitsLabel( MILLIMETRES ) ); dlg.SetUnits( units, g_UserUnit ); - dlg.SetGridSizes( grid_list, GetBaseScreen()->GetGridId() ); + dlg.SetGridSizes( grid_list, GetScreen()->GetGridId() ); dlg.SetLineWidth( g_DrawDefaultLineThickness ); dlg.SetTextSize( g_DefaultTextLabelSize ); dlg.SetRepeatHorizontal( g_RepeatStep.x ); @@ -213,7 +213,7 @@ void SCH_EDIT_FRAME::OnSetOptions( wxCommandEvent& event ) g_UserUnit = (UserUnitType)dlg.GetUnitsSelection(); - GetBaseScreen()->SetGrid( grid_list[ (size_t) dlg.GetGridSelection() ].m_Size ); + GetScreen()->SetGrid( grid_list[ (size_t) dlg.GetGridSelection() ].m_Size ); g_DrawDefaultLineThickness = dlg.GetLineWidth(); g_DefaultTextLabelSize = dlg.GetTextSize(); @@ -384,7 +384,7 @@ bool SCH_EDIT_FRAME::LoadProjectFile( const wxString& CfgFileName, bool ForceRer m_ComponentLibFiles.Add( wxT( "power" ) ); LoadLibraries(); - GetBaseScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId ); + GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId ); return IsRead; } diff --git a/eeschema/hierarch.cpp b/eeschema/hierarch.cpp index de34dca71a..3d41c58ddf 100644 --- a/eeschema/hierarch.cpp +++ b/eeschema/hierarch.cpp @@ -19,8 +19,6 @@ #include "wx/treectrl.h" -static bool UpdateScreenFromSheet( SCH_EDIT_FRAME* frame ); - enum { ID_TREECTRL_HIERARCHY = 1600 @@ -60,8 +58,7 @@ IMPLEMENT_DYNAMIC_CLASS( WinEDA_Tree, wxTreeCtrl ) WinEDA_Tree::WinEDA_Tree( WinEDA_HierFrame* parent ) : - wxTreeCtrl( (wxWindow*)parent, ID_TREECTRL_HIERARCHY, - wxDefaultPosition, wxDefaultSize, + wxTreeCtrl( (wxWindow*)parent, ID_TREECTRL_HIERARCHY, wxDefaultPosition, wxDefaultSize, wxTR_HAS_BUTTONS, wxDefaultValidator, wxT( "HierachyTreeCtrl" ) ) { m_Parent = parent; @@ -103,8 +100,7 @@ private: }; BEGIN_EVENT_TABLE( WinEDA_HierFrame, wxDialog ) - EVT_TREE_ITEM_ACTIVATED( ID_TREECTRL_HIERARCHY, - WinEDA_HierFrame::OnSelect ) + EVT_TREE_ITEM_ACTIVATED( ID_TREECTRL_HIERARCHY, WinEDA_HierFrame::OnSelect ) END_EVENT_TABLE() @@ -179,8 +175,7 @@ void WinEDA_HierFrame::OnQuit( wxCommandEvent& event ) * Schematic * This routine is re-entrant! */ -void WinEDA_HierFrame::BuildSheetsTree( SCH_SHEET_PATH* list, - wxTreeItemId* previousmenu ) +void WinEDA_HierFrame::BuildSheetsTree( SCH_SHEET_PATH* list, wxTreeItemId* previousmenu ) { wxTreeItemId menu; @@ -194,11 +189,13 @@ void WinEDA_HierFrame::BuildSheetsTree( SCH_SHEET_PATH* list, DisplayError( this, msg ); m_nbsheets++; } + return; } maxposx += m_Tree->GetIndent(); SCH_ITEM* schitem = list->LastDrawList(); + while( schitem && m_nbsheets < NB_MAX_SHEET ) { if( schitem->Type() == SCH_SHEET_T ) @@ -209,6 +206,7 @@ void WinEDA_HierFrame::BuildSheetsTree( SCH_SHEET_PATH* list, list->Push( sheet ); m_Tree->SetItemData( menu, new TreeItemData( *list ) ); int ll = m_Tree->GetItemText( menu ).Len(); + #ifdef __WINDOWS__ ll *= 9; // * char width #else @@ -217,15 +215,18 @@ void WinEDA_HierFrame::BuildSheetsTree( SCH_SHEET_PATH* list, ll += maxposx + 20; m_TreeSize.x = MAX( m_TreeSize.x, ll ); m_TreeSize.y += 1; + if( *list == *( m_Parent->GetSheet() ) ) { m_Tree->EnsureVisible( menu ); m_Tree->SelectItem( menu ); } + BuildSheetsTree( list, &menu ); m_Tree->Expand( menu ); list->Pop(); } + schitem = schitem->Next(); } @@ -241,89 +242,35 @@ void WinEDA_HierFrame::OnSelect( wxTreeEvent& event ) { wxTreeItemId ItemSel = m_Tree->GetSelection(); - *(m_Parent->m_CurrentSheet) = - ( (TreeItemData*) m_Tree->GetItemData( ItemSel ) )->m_SheetPath; - UpdateScreenFromSheet( m_Parent ); - Close( TRUE ); + SCH_SHEET* sheet = ( (TreeItemData*) m_Tree->GetItemData( ItemSel ) )->m_SheetPath.Last(); + m_Parent->m_CurrentSheet->Push( sheet ); + m_Parent->DisplayCurrentSheet(); + Close( true ); } -/* Set the current screen to display the parent sheet of the current - * displayed sheet - */ -void SCH_EDIT_FRAME::InstallPreviousSheet() +void SCH_EDIT_FRAME::DisplayCurrentSheet() { - if( m_CurrentSheet->Last() == g_RootSheet ) - return; - m_itemToRepeat = NULL; ClearMsgPanel(); - //make a copy for testing purposes. - m_CurrentSheet->Pop(); + SCH_SCREEN* screen = m_CurrentSheet->LastScreen(); - if( m_CurrentSheet->LastScreen() == NULL ) - { - DisplayError( this, wxT( "InstallPreviousScreen() Error: Sheet not found" ) ); - return; - } - - UpdateScreenFromSheet( this ); -} - - -/* Routine installation of the screen corresponding to the symbol edge Sheet - * Be careful here because the SCH_SHEETs within the GetDrawItems() - * don't actually have a valid m_AssociatedScreen (on purpose -- you need the - * m_SubSheet hierarchy to maintain path info (well, this is but one way to - * maintain path info..) - */ -void SCH_EDIT_FRAME::InstallNextScreen( SCH_SHEET* Sheet ) -{ - if( Sheet == NULL ) - { - DisplayError( this, wxT( "InstallNextScreen() error" ) ); return; - } - - m_CurrentSheet->Push( Sheet ); - m_itemToRepeat = NULL; - ClearMsgPanel(); - UpdateScreenFromSheet( this ); -} - - -/* Find and install the screen on the sheet symbol Sheet. - * If Sheet == NULL installation of the screen base (Root). - */ -static bool UpdateScreenFromSheet( SCH_EDIT_FRAME* frame ) -{ - if( !frame->m_CurrentSheet->LastScreen() ) - { - DisplayError( frame, wxT( "Screen not found for this sheet" ) ); - return false; - } - - SCH_SCREEN* screen = frame->m_CurrentSheet->LastScreen(); - - // Reset display settings of the new screen - // Assumes m_CurrentSheet has already been updated. - frame->ClearMsgPanel(); + SetScreen( screen ); // update the References - frame->m_CurrentSheet->UpdateAllScreenReferences(); - frame->SetSheetNumberAndCount(); - frame->DrawPanel->m_CanStartBlock = -1; + m_CurrentSheet->UpdateAllScreenReferences(); + SetSheetNumberAndCount(); + DrawPanel->m_CanStartBlock = -1; if( screen->m_FirstRedraw ) { screen->m_FirstRedraw = false; - frame->Zoom_Automatique( true ); + Zoom_Automatique( true ); } else { - frame->DrawPanel->MouseToCursorSchema(); - frame->RedrawScreen( true ); + DrawPanel->MouseToCursorSchema(); + RedrawScreen( true ); } - - return true; } diff --git a/eeschema/libedit.cpp b/eeschema/libedit.cpp index 82694fca7a..53c4cdfd42 100644 --- a/eeschema/libedit.cpp +++ b/eeschema/libedit.cpp @@ -68,7 +68,7 @@ void LIB_EDIT_FRAME::LoadOneLibraryPart( wxCommandEvent& event ) DrawPanel->UnManageCursor( 0, wxCURSOR_ARROW ); - if( GetBaseScreen()->IsModify() + if( GetScreen()->IsModify() && !IsOK( this, _( "Current part not saved.\n\nDiscard current changes?" ) ) ) return; @@ -84,7 +84,7 @@ void LIB_EDIT_FRAME::LoadOneLibraryPart( wxCommandEvent& event ) if( i == 0 ) return; - GetBaseScreen()->ClrModify(); + GetScreen()->ClrModify(); m_lastDrawItem = m_drawItem = NULL; // Delete previous library component, if any @@ -179,7 +179,7 @@ bool LIB_EDIT_FRAME::LoadOneLibraryPartAux( LIB_ALIAS* aEntry, CMP_LIBRARY* aLib if( m_component->HasConversion() ) m_showDeMorgan = true; - GetBaseScreen()->ClrModify(); + GetScreen()->ClrModify(); DisplayLibInfos(); UpdateAliasSelectList(); UpdatePartSelectList(); @@ -586,7 +586,7 @@ void LIB_EDIT_FRAME::SaveOnePartInMemory() return; } - GetBaseScreen()->ClrModify(); + GetScreen()->ClrModify(); oldComponent = m_library->FindComponent( m_component->GetName() ); diff --git a/eeschema/libeditframe.cpp b/eeschema/libeditframe.cpp index ca233e001b..a37b13f48b 100644 --- a/eeschema/libeditframe.cpp +++ b/eeschema/libeditframe.cpp @@ -183,7 +183,7 @@ LIB_EDIT_FRAME::LIB_EDIT_FRAME( SCH_EDIT_FRAME* aParent, // Give an icon SetIcon( wxIcon( libedit_xpm ) ); - SetBaseScreen( new SCH_SCREEN() ); + SetScreen( new SCH_SCREEN() ); GetScreen()->m_Center = true; LoadSettings(); diff --git a/eeschema/libeditframe.h b/eeschema/libeditframe.h index 44ded1e5d0..100fba57a1 100644 --- a/eeschema/libeditframe.h +++ b/eeschema/libeditframe.h @@ -99,7 +99,7 @@ public: int BestZoom(); // Returns the best zoom void OnLeftDClick( wxDC* DC, const wxPoint& MousePos ); - SCH_SCREEN* GetScreen() { return (SCH_SCREEN*) GetBaseScreen(); } + SCH_SCREEN* GetScreen() { return (SCH_SCREEN*) EDA_DRAW_FRAME::GetScreen(); } void OnHotKey( wxDC* aDC, int aHotKey, const wxPoint& aPosition, EDA_ITEM* aItem = NULL ); diff --git a/eeschema/onleftclick.cpp b/eeschema/onleftclick.cpp index ba5d0ce5f6..2d78bd5df5 100644 --- a/eeschema/onleftclick.cpp +++ b/eeschema/onleftclick.cpp @@ -96,9 +96,19 @@ void SCH_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition ) item = LocateAndShowItem( aPosition ); if( item && ( item->Type() == SCH_SHEET_T ) ) - InstallNextScreen( (SCH_SHEET*) item ); + { + m_CurrentSheet->Push( (SCH_SHEET*) item ); + DisplayCurrentSheet(); + } else - InstallPreviousSheet(); + { + wxCHECK_RET( m_CurrentSheet->Last() != g_RootSheet, + wxT( "Cannot leave root sheet. Bad Programmer!" ) ); + + m_CurrentSheet->Pop(); + DisplayCurrentSheet(); + } + break; case ID_NOCONN_BUTT: @@ -121,7 +131,7 @@ void SCH_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition ) case ID_JUNCTION_BUTT: if( ( item == NULL ) || ( item->m_Flags == 0 ) ) { - m_itemToRepeat = CreateNewJunctionStruct( aDC, GetScreen()->m_Curseur, true ); + m_itemToRepeat = AddJunction( aDC, gridPosition, true ); GetScreen()->SetCurItem( m_itemToRepeat ); DrawPanel->m_AutoPAN_Request = true; } @@ -336,7 +346,8 @@ void SCH_EDIT_FRAME::OnLeftDClick( wxDC* aDC, const wxPoint& aPosition ) switch( item->Type() ) { case SCH_SHEET_T: - InstallNextScreen( (SCH_SHEET*) item ); + m_CurrentSheet->Push( (SCH_SHEET*) item ); + DisplayCurrentSheet(); break; case SCH_COMPONENT_T: diff --git a/eeschema/sch_screen.cpp b/eeschema/sch_screen.cpp index 761f0df447..d55852bb18 100644 --- a/eeschema/sch_screen.cpp +++ b/eeschema/sch_screen.cpp @@ -137,6 +137,7 @@ void SCH_SCREEN::RemoveFromDrawList( SCH_ITEM * DrawStruct ) DrawList->SetNext( DrawList->Next()->Next() ); break; } + DrawList = DrawList->Next(); } } @@ -210,6 +211,39 @@ SCH_ITEM* SCH_SCREEN::ExtractWires( bool CreateCopy ) } +void SCH_SCREEN::ReplaceWires( SCH_ITEM* aWireList ) +{ + SCH_ITEM* item; + SCH_ITEM* next_item; + + for( item = GetDrawItems(); item != NULL; item = next_item ) + { + next_item = item->Next(); + + switch( item->Type() ) + { + case SCH_JUNCTION_T: + case SCH_LINE_T: + RemoveFromDrawList( item ); + delete item; + break; + + default: + break; + } + } + + while( aWireList ) + { + next_item = aWireList->Next(); + + aWireList->SetNext( GetDrawItems() ); + SetDrawItems( aWireList ); + aWireList = next_item; + } +} + + /* Routine cleaning: * - Includes segments or buses aligned in only 1 segment * - Detects identical objects superimposed diff --git a/eeschema/sch_text.h b/eeschema/sch_text.h index f4e371fe7a..1bd5c918ae 100644 --- a/eeschema/sch_text.h +++ b/eeschema/sch_text.h @@ -200,6 +200,8 @@ public: virtual void GetConnectionPoints( vector< wxPoint >& aPoints ) const; + virtual bool CanIncrementLabel() const { return true; } + #if defined(DEBUG) void Show( int nestLevel, std::ostream& os ); #endif diff --git a/eeschema/schedit.cpp b/eeschema/schedit.cpp index 97102afdcf..dd0e32ff4d 100644 --- a/eeschema/schedit.cpp +++ b/eeschema/schedit.cpp @@ -653,17 +653,19 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_SCH_ENTER_SHEET: { - EDA_ITEM* DrawStruct = screen->GetCurItem(); + EDA_ITEM* item = screen->GetCurItem(); - if( DrawStruct && (DrawStruct->Type() == SCH_SHEET_T) ) + if( item && (item->Type() == SCH_SHEET_T) ) { - InstallNextScreen( (SCH_SHEET*) DrawStruct ); + m_CurrentSheet->Push( (SCH_SHEET*) item ); + DisplayCurrentSheet(); } } break; case ID_POPUP_SCH_LEAVE_SHEET: - InstallPreviousSheet(); + m_CurrentSheet->Pop(); + DisplayCurrentSheet(); break; case ID_POPUP_CLOSE_CURRENT_TOOL: @@ -717,7 +719,7 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_SCH_ADD_JUNCTION: DrawPanel->MouseToCursorSchema(); - screen->SetCurItem( CreateNewJunctionStruct( &dc, screen->m_Curseur, true ) ); + screen->SetCurItem( AddJunction( &dc, screen->m_Curseur, true ) ); screen->TestDanglingEnds( DrawPanel, &dc ); screen->SetCurItem( NULL ); break; diff --git a/eeschema/schframe.cpp b/eeschema/schframe.cpp index 746bc41e86..bfbff46485 100644 --- a/eeschema/schframe.cpp +++ b/eeschema/schframe.cpp @@ -243,19 +243,14 @@ SCH_EDIT_FRAME::SCH_EDIT_FRAME( wxWindow* father, SCH_EDIT_FRAME::~SCH_EDIT_FRAME() { - SAFE_DELETE( g_RootSheet ); + SetScreen( NULL ); SAFE_DELETE( m_CurrentSheet ); // a SCH_SHEET_PATH, on the heap. + SAFE_DELETE( g_RootSheet ); SAFE_DELETE( m_findReplaceData ); CMP_LIBRARY::RemoveAllLibraries(); } -BASE_SCREEN* SCH_EDIT_FRAME::GetBaseScreen() const -{ - return GetScreen(); -} - - SCH_SHEET_PATH* SCH_EDIT_FRAME::GetSheet() { return m_CurrentSheet; @@ -336,11 +331,11 @@ void SCH_EDIT_FRAME::CreateScreens() m_CurrentSheet->Clear(); m_CurrentSheet->Push( g_RootSheet ); - if( GetBaseScreen() == NULL ) - SetBaseScreen( new SCH_SCREEN() ); + if( GetScreen() == NULL ) + SetScreen( new SCH_SCREEN() ); - GetBaseScreen()->SetZoom( 4 * GetBaseScreen()->m_ZoomScalar ); - GetBaseScreen()->m_UndoRedoCountMax = 10; + GetScreen()->SetZoom( 4 * GetScreen()->m_ZoomScalar ); + GetScreen()->m_UndoRedoCountMax = 10; } diff --git a/eeschema/viewlib_frame.cpp b/eeschema/viewlib_frame.cpp index 0a8a537a99..8f4569465c 100644 --- a/eeschema/viewlib_frame.cpp +++ b/eeschema/viewlib_frame.cpp @@ -104,7 +104,7 @@ LIB_VIEW_FRAME::LIB_VIEW_FRAME( wxWindow* father, CMP_LIBRARY* Library, wxSemaph if( m_Semaphore ) SetWindowStyle( GetWindowStyle() | wxSTAY_ON_TOP ); - SetBaseScreen( new SCH_SCREEN() ); + SetScreen( new SCH_SCREEN() ); GetScreen()->m_Center = true; // Center coordinate origins on screen. LoadSettings(); diff --git a/eeschema/viewlib_frame.h b/eeschema/viewlib_frame.h index 6bb5ceff93..4ce54df04b 100644 --- a/eeschema/viewlib_frame.h +++ b/eeschema/viewlib_frame.h @@ -67,7 +67,7 @@ public: void ClickOnCmpList( wxCommandEvent& event ); void OnSetRelativeOffset( wxCommandEvent& event ); - SCH_SCREEN* GetScreen() { return (SCH_SCREEN*) GetBaseScreen(); } + SCH_SCREEN* GetScreen() { return (SCH_SCREEN*) EDA_DRAW_FRAME::GetScreen(); } void GeneralControle( wxDC* aDC, const wxPoint& aPosition ); diff --git a/gerbview/gerberframe.cpp b/gerbview/gerberframe.cpp index c7ebe445e2..4a2ab44279 100644 --- a/gerbview/gerberframe.cpp +++ b/gerbview/gerberframe.cpp @@ -151,7 +151,7 @@ END_EVENT_TABLE() WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father SetIcon( wxICON( icon_gerbview ) ); #endif - SetBaseScreen( ScreenPcb ); + SetScreen( ScreenPcb ); SetBoard( new BOARD( NULL, this ) ); GetBoard()->SetEnabledLayers( FULL_LAYERS ); // All 32 layers enabled at first. @@ -233,7 +233,7 @@ END_EVENT_TABLE() WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father WinEDA_GerberFrame::~WinEDA_GerberFrame() { - SetBaseScreen( ScreenPcb ); + SetScreen( ScreenPcb ); extern PARAM_CFG_BASE* ParamCfgList[]; wxGetApp().SaveCurrentSetupValues( ParamCfgList ); } diff --git a/gerbview/initpcb.cpp b/gerbview/initpcb.cpp index 501827a6e3..c1733c8b3b 100644 --- a/gerbview/initpcb.cpp +++ b/gerbview/initpcb.cpp @@ -44,7 +44,7 @@ bool WinEDA_GerberFrame::Clear_Pcb( bool query ) GetBoard()->m_NbNodes = 0; GetBoard()->m_NbNoconnect = 0; - SetBaseScreen( ScreenPcb ); + SetScreen( ScreenPcb ); GetScreen()->Init(); setActiveLayer(LAYER_N_BACK); syncLayerBox(); diff --git a/include/class_sch_screen.h b/include/class_sch_screen.h index fabda364d6..183b9bd075 100644 --- a/include/class_sch_screen.h +++ b/include/class_sch_screen.h @@ -145,6 +145,13 @@ public: */ SCH_ITEM* ExtractWires( bool aCreateCopy ); + /** + * Function ReplaceWires + * replaces all of the wires and junction in the screen with \a aWireList. + * @param aWireList List of wire to replace the existing wires with. + */ + void ReplaceWires( SCH_ITEM* aWireList ); + /** * Function BreakSegment * checks every wire and bus for a intersection at \a aPoint and break into two segments diff --git a/include/sch_item_struct.h b/include/sch_item_struct.h index f2c3ef6215..bf2be9e467 100644 --- a/include/sch_item_struct.h +++ b/include/sch_item_struct.h @@ -315,6 +315,8 @@ public: return doHitTest( aRect, aContained, aAccuracy ); } + virtual bool CanIncrementLabel() const { return false; } + /** * @note - The DoXXX() functions below are used to enforce the interface while retaining * the ability of change the implementation behavior of derived classes. See diff --git a/include/wxBasePcbFrame.h b/include/wxBasePcbFrame.h index 71344e71f7..4443f8df9f 100644 --- a/include/wxBasePcbFrame.h +++ b/include/wxBasePcbFrame.h @@ -12,6 +12,7 @@ #include "wxstruct.h" #include "base_struct.h" #include "richio.h" +#include "class_pcb_screen.h" #ifndef PCB_INTERNAL_UNIT #define PCB_INTERNAL_UNIT 10000 @@ -19,7 +20,6 @@ /* Forward declarations of classes. */ -class PCB_SCREEN; class WinEDA_Toolbar; class WinEDA_CvpcbFrame; class WinEDA_PcbFrame; @@ -108,13 +108,11 @@ public: virtual void SetToolID( int aId, int aCursor, const wxString& aToolMsg ); virtual void UpdateStatusBar(); - PCB_SCREEN* GetScreen() const + virtual PCB_SCREEN* GetScreen() const { - return (PCB_SCREEN*) EDA_DRAW_FRAME::GetBaseScreen(); + return (PCB_SCREEN*) EDA_DRAW_FRAME::GetScreen(); } - BASE_SCREEN* GetBaseScreen() const; - int BestZoom(); virtual void Show3D_Frame( wxCommandEvent& event ); diff --git a/include/wxEeschemaStruct.h b/include/wxEeschemaStruct.h index 9476fed196..97c4622a68 100644 --- a/include/wxEeschemaStruct.h +++ b/include/wxEeschemaStruct.h @@ -10,11 +10,11 @@ #include "class_undoredo_container.h" #include "template_fieldnames.h" #include "block_commande.h" +#include "class_sch_screen.h" class LIB_EDIT_FRAME; class LIB_VIEW_FRAME; -class SCH_SCREEN; class DRAWSEGMENT; class DrawPickedStruct; class SCH_ITEM; @@ -194,8 +194,6 @@ public: SCH_SCREEN* GetScreen() const; - BASE_SCREEN* GetBaseScreen() const; - virtual wxString GetScreenDesc(); void InstallConfigFrame( wxCommandEvent& event ); @@ -305,12 +303,15 @@ public: * for each sheet annotation starts from sheet number * 100 * ( the first sheet uses 100 to 199, the second 200 to 299 ... ) */ - void AnnotateComponents(bool aAnnotateSchematic, int aSortOption, - int aAlgoOption, - bool aResetAnnotation, bool aRepairsTimestamps ); + void AnnotateComponents( bool aAnnotateSchematic, int aSortOption, int aAlgoOption, + bool aResetAnnotation, bool aRepairsTimestamps ); + // Functions used for hierarchy handling - void InstallPreviousSheet(); - void InstallNextScreen( SCH_SHEET* Sheet ); + /** + * Function DisplayCurrentSheet + * draws the current sheet on the display. + */ + void DisplayCurrentSheet(); /** * Function GetUniqueFilenameForCurrentSheet @@ -457,9 +458,7 @@ private: SCH_NO_CONNECT* AddNoConnect( wxDC* aDC, const wxPoint& aPosition ); // Junction - SCH_JUNCTION* CreateNewJunctionStruct( wxDC* DC, - const wxPoint& pos, - bool PutInUndoList = FALSE ); + SCH_JUNCTION* AddJunction( wxDC* aDC, const wxPoint& aPosition, bool aPutInUndoList = FALSE ); // Text ,label, glabel SCH_TEXT* CreateNewText( wxDC* DC, int type ); diff --git a/include/wxstruct.h b/include/wxstruct.h index 763425065e..3ed5de3881 100644 --- a/include/wxstruct.h +++ b/include/wxstruct.h @@ -242,13 +242,13 @@ protected: int m_GridColor; // Grid color private: - BASE_SCREEN* m_CurrentScreen; ///< current used SCREEN + BASE_SCREEN* m_currentScreen; ///< current used SCREEN bool m_snapToGrid; ///< Indicates if cursor should be snapped to grid. protected: - void SetBaseScreen( BASE_SCREEN* aScreen ) + void SetScreen( BASE_SCREEN* aScreen ) { - m_CurrentScreen = aScreen; + m_currentScreen = aScreen; } public: @@ -266,7 +266,7 @@ public: * is virtual and returns a pointer to a BASE_SCREEN or one of its * derivatives. It may be overloaded by derived classes. */ - virtual BASE_SCREEN* GetBaseScreen() const { return m_CurrentScreen; } + virtual BASE_SCREEN* GetScreen() const { return m_currentScreen; } void OnMenuOpen( wxMenuEvent& event ); void OnMouseEvent( wxMouseEvent& event ); diff --git a/pcbnew/basepcbframe.cpp b/pcbnew/basepcbframe.cpp index 3bc107f790..810072cd23 100644 --- a/pcbnew/basepcbframe.cpp +++ b/pcbnew/basepcbframe.cpp @@ -76,16 +76,11 @@ WinEDA_BasePcbFrame::~WinEDA_BasePcbFrame() } -BASE_SCREEN* WinEDA_BasePcbFrame::GetBaseScreen() const -{ - return GetScreen(); -} - - void WinEDA_BasePcbFrame::SetBoard( BOARD* aBoard ) { if( m_Pcb != g_ModuleEditor_Pcb ) delete m_Pcb; + m_Pcb = aBoard; } @@ -320,12 +315,13 @@ void WinEDA_BasePcbFrame::UpdateStatusBar() if( DisplayOpt.DisplayPolarCood ) // display polar coordinates { - BASE_SCREEN* screen = GetBaseScreen(); + PCB_SCREEN* screen = GetScreen(); + if( !screen ) return; - wxString Line; - double theta, ro; + wxString Line; + double theta, ro; int dx = screen->m_Curseur.x - screen->m_O_Curseur.x; int dy = screen->m_Curseur.y - screen->m_O_Curseur.y; diff --git a/pcbnew/class_netclass.h b/pcbnew/class_netclass.h index 74095b7746..dbd9146ec1 100644 --- a/pcbnew/class_netclass.h +++ b/pcbnew/class_netclass.h @@ -56,7 +56,7 @@ protected: STRINGSET m_Members; ///< names of NET members of this class - /// The units on these parameters is 1/10000 of an inch, see #define PCB_INTERNAL_UNIT + /// The units on these parameters is 1/10000 of an inch, see define #PCB_INTERNAL_UNIT int m_Clearance; ///< clearance when routing diff --git a/pcbnew/dialogs/dialog_SVG_print.cpp b/pcbnew/dialogs/dialog_SVG_print.cpp index 4e0fa6ce61..395dc9986e 100644 --- a/pcbnew/dialogs/dialog_SVG_print.cpp +++ b/pcbnew/dialogs/dialog_SVG_print.cpp @@ -154,7 +154,7 @@ void DIALOG_SVG_PRINT::PrintSVGDoc( bool aPrintAll, bool aPrint_Frame_Ref ) SetPenWidth(); - BASE_SCREEN* screen = m_Parent->GetBaseScreen(); + PCB_SCREEN* screen = m_Parent->GetScreen(); if( aPrintAll ) m_PrintMaskLayer = 0xFFFFFFFF; diff --git a/pcbnew/help_common_strings.h b/pcbnew/help_common_strings.h index c964f296ec..bb8870381b 100644 --- a/pcbnew/help_common_strings.h +++ b/pcbnew/help_common_strings.h @@ -9,7 +9,7 @@ * at run time, on the fly. * So they cannot be static. * - * Therefore they are defined by #define, used inside menu constructors + * Therefore they are defined by \#define, used inside menu constructors */ #define HELP_UNDO _( "Undo last edition" ) diff --git a/pcbnew/locate.cpp b/pcbnew/locate.cpp index b1c3ec5c70..27b2089b4e 100644 --- a/pcbnew/locate.cpp +++ b/pcbnew/locate.cpp @@ -170,6 +170,7 @@ D_PAD* Locate_Pads( MODULE* module, const wxPoint& ref_pos, int masque_layer ) * @param aPosition Flag bits, tuning the search, see pcbnew.h * @param aActiveLayer Layer to test. * @param aVisibleOnly Search only the visible layers if true. + * @param aIgnoreLocked Ignore locked modules when true. * @return MODULE* The best module or NULL if none. */ MODULE* Locate_Prefered_Module( BOARD* aPcb, const wxPoint& aPosition, int aActiveLayer, diff --git a/pcbnew/moduleframe.cpp b/pcbnew/moduleframe.cpp index 37fbc1d274..ac3d12bc34 100644 --- a/pcbnew/moduleframe.cpp +++ b/pcbnew/moduleframe.cpp @@ -175,7 +175,7 @@ WinEDA_ModuleEditFrame::WinEDA_ModuleEditFrame( wxWindow* father, if( s_screenModule == NULL ) s_screenModule = new PCB_SCREEN(); - SetBaseScreen( s_screenModule ); + SetScreen( s_screenModule ); GetBoard()->SetBoardDesignSettings( &s_ModuleEditorDesignSetting ); GetScreen()->SetCurItem( NULL ); LoadSettings(); @@ -241,10 +241,9 @@ WinEDA_ModuleEditFrame::~WinEDA_ModuleEditFrame() * here, because if we reopen the Footprint editor, we expect to find * the last edited item */ - SetBaseScreen( NULL ); /* Do not delete (by the destructor of - * EDA_DRAW_FRAME) the PCB_SCREEN handling - * g_ModuleEditor_Pcb - */ + SetScreen( NULL ); /* Do not delete (by the destructor of EDA_DRAW_FRAME) the + * PCB_SCREEN handling g_ModuleEditor_Pcb + */ WinEDA_BasePcbFrame* frame = (WinEDA_BasePcbFrame*) GetParent(); frame->m_ModuleEditFrame = NULL; diff --git a/pcbnew/netlist.cpp b/pcbnew/netlist.cpp index 2e1991d8cf..3d02442401 100644 --- a/pcbnew/netlist.cpp +++ b/pcbnew/netlist.cpp @@ -142,7 +142,7 @@ FILE * OpenNetlistFile( const wxString& aFullFileName ) * only the netlist will be used * * the format of the netlist is something like: - # EESchema Netlist Version 1.0 generee le 18/5/2005-12:30:22 + * \# EESchema Netlist Version 1.0 generee le 18/5/2005-12:30:22 * ( * ( 40C08647 $noname R20 4,7K {Lib=R} * ( 1 VCC ) @@ -153,7 +153,7 @@ FILE * OpenNetlistFile( const wxString& aFullFileName ) * ( 2 MODA_1 ) * ) * } - * #End + * \#End */ bool WinEDA_PcbFrame::ReadPcbNetlist( const wxString& aNetlistFullFilename, const wxString& aCmpFullFileName, diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index 556b300658..243f299f0c 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -287,7 +287,7 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* parent, SetIcon( wxICON( a_icon_pcbnew ) ); m_InternalUnits = PCB_INTERNAL_UNIT; // Unites internes = 1/10000 inch - SetBaseScreen( ScreenPcb ); + SetScreen( ScreenPcb ); // LoadSettings() *after* creating m_LayersManager, because LoadSettings() // initialize parameters in m_LayersManager diff --git a/pcbnew/printout_controler.cpp b/pcbnew/printout_controler.cpp index 1c009bb38b..cb0b2e9d3f 100644 --- a/pcbnew/printout_controler.cpp +++ b/pcbnew/printout_controler.cpp @@ -119,7 +119,7 @@ void BOARD_PRINTOUT_CONTROLER::DrawPage() double userscale; double DrawZoom = 1; wxDC* dc = GetDC(); - BASE_SCREEN* screen = m_Parent->GetBaseScreen(); + PCB_SCREEN* screen = (PCB_SCREEN*) m_Parent->GetScreen(); bool printMirror = m_PrintParams.m_PrintMirror; wxBusyCursor dummy; @@ -243,7 +243,7 @@ void BOARD_PRINTOUT_CONTROLER::DrawPage() panel->m_ClipBox.SetOrigin( wxPoint( 0, 0 ) ); panel->m_ClipBox.SetSize( wxSize( MAX_VALUE, MAX_VALUE ) ); - m_Parent->GetBaseScreen()->m_IsPrinting = true; + m_Parent->GetScreen()->m_IsPrinting = true; int bg_color = g_DrawBgColor; if( m_PrintParams.m_Print_Sheet_Ref ) @@ -300,7 +300,7 @@ void BOARD_PRINTOUT_CONTROLER::DrawPage() m_Parent->PrintPage( dc, m_PrintParams.m_PrintMaskLayer, printMirror, &m_PrintParams ); g_DrawBgColor = bg_color; - m_Parent->GetBaseScreen()->m_IsPrinting = false; + m_Parent->GetScreen()->m_IsPrinting = false; panel->m_ClipBox = tmp; GRForceBlackPen( false );