From fbbb642c0c7b1d6ebe231efec09163d213eea55c Mon Sep 17 00:00:00 2001 From: Seth Hillbrand <seth@kipro-pcb.com> Date: Mon, 30 Dec 2024 15:41:42 -0800 Subject: [PATCH] Move all nlnav to unique_ptrs 7daded7c60878b2372b2cbecfd96654dfb7344fc moved them to bare pointers but this was not required to allow forward declarations. We only need to place the CTOR/DTOR fully in the cpp file where the nlnav headers are included --- 3d-viewer/3d_viewer/eda_3d_viewer_frame.cpp | 7 ++----- 3d-viewer/3d_viewer/eda_3d_viewer_frame.h | 2 +- 3d-viewer/dialogs/panel_preview_3d_model.cpp | 14 ++++++++++---- 3d-viewer/dialogs/panel_preview_3d_model.h | 2 +- eeschema/sch_base_frame.cpp | 10 ++++------ eeschema/sch_base_frame.h | 2 +- include/pcb_base_frame.h | 2 +- pcbnew/pcb_base_frame.cpp | 12 ++++-------- 8 files changed, 24 insertions(+), 27 deletions(-) diff --git a/3d-viewer/3d_viewer/eda_3d_viewer_frame.cpp b/3d-viewer/3d_viewer/eda_3d_viewer_frame.cpp index 463fb9209f..073e91ec29 100644 --- a/3d-viewer/3d_viewer/eda_3d_viewer_frame.cpp +++ b/3d-viewer/3d_viewer/eda_3d_viewer_frame.cpp @@ -94,8 +94,7 @@ EDA_3D_VIEWER_FRAME::EDA_3D_VIEWER_FRAME( KIWAY* aKiway, PCB_BASE_FRAME* aParent m_mainToolBar( nullptr ), m_canvas( nullptr ), m_currentCamera( m_trackBallCamera ), - m_trackBallCamera( 2 * RANGE_SCALE_3D ), - m_spaceMouse( nullptr ) + m_trackBallCamera( 2 * RANGE_SCALE_3D ) { wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER_FRAME::EDA_3D_VIEWER_FRAME %s" ), aTitle ); @@ -187,7 +186,7 @@ EDA_3D_VIEWER_FRAME::EDA_3D_VIEWER_FRAME( KIWAY* aKiway, PCB_BASE_FRAME* aParent try { - m_spaceMouse = new NL_3D_VIEWER_PLUGIN( m_canvas ); + m_spaceMouse = std::make_unique<NL_3D_VIEWER_PLUGIN>( m_canvas ); } catch( const std::system_error& e ) { @@ -203,8 +202,6 @@ EDA_3D_VIEWER_FRAME::EDA_3D_VIEWER_FRAME( KIWAY* aKiway, PCB_BASE_FRAME* aParent EDA_3D_VIEWER_FRAME::~EDA_3D_VIEWER_FRAME() { - delete m_spaceMouse; - Prj().GetProjectFile().m_Viewports3D = m_appearancePanel->GetUserViewports(); m_canvas->SetEventDispatcher( nullptr ); diff --git a/3d-viewer/3d_viewer/eda_3d_viewer_frame.h b/3d-viewer/3d_viewer/eda_3d_viewer_frame.h index 6a98590446..f184582dad 100644 --- a/3d-viewer/3d_viewer/eda_3d_viewer_frame.h +++ b/3d-viewer/3d_viewer/eda_3d_viewer_frame.h @@ -180,7 +180,7 @@ private: bool m_disable_ray_tracing; - NL_3D_VIEWER_PLUGIN* m_spaceMouse; + std::unique_ptr<NL_3D_VIEWER_PLUGIN> m_spaceMouse; /** * Trace mask used to enable or disable the trace output of this class. diff --git a/3d-viewer/dialogs/panel_preview_3d_model.cpp b/3d-viewer/dialogs/panel_preview_3d_model.cpp index cc019b162a..04833484ef 100644 --- a/3d-viewer/dialogs/panel_preview_3d_model.cpp +++ b/3d-viewer/dialogs/panel_preview_3d_model.cpp @@ -130,8 +130,15 @@ PANEL_PREVIEW_3D_MODEL::PANEL_PREVIEW_3D_MODEL( wxWindow* aParent, PCB_BASE_FRAM m_boardAdapter, m_currentCamera, PROJECT_PCB::Get3DCacheManager( &aFrame->Prj() ) ); - m_spaceMouse = new NL_FOOTPRINT_PROPERTIES_PLUGIN( m_previewPane ); - m_spaceMouse->SetFocus( true ); + try + { + m_spaceMouse = std::make_unique<NL_FOOTPRINT_PROPERTIES_PLUGIN>( m_previewPane ); + m_spaceMouse->SetFocus( true ); + } + catch( const std::system_error& e ) + { + wxLogTrace( wxT( "KI_TRACE_NAVLIB" ), e.what() ); + } m_boardAdapter.SetBoard( m_dummyBoard ); m_boardAdapter.m_IsBoardView = false; @@ -180,7 +187,6 @@ PANEL_PREVIEW_3D_MODEL::~PANEL_PREVIEW_3D_MODEL() if( m_boardAdapter.m_Cfg ) m_boardAdapter.m_Cfg->m_Render = m_initialRender; - delete m_spaceMouse; delete m_dummyBoard; delete m_previewPane; } @@ -625,7 +631,7 @@ void PANEL_PREVIEW_3D_MODEL::onUnitsChanged( wxCommandEvent& aEvent ) void PANEL_PREVIEW_3D_MODEL::onPanelShownEvent( wxCommandEvent& aEvent ) { - if( m_spaceMouse != nullptr ) + if( m_spaceMouse ) { m_spaceMouse->SetFocus( static_cast<bool>( aEvent.GetInt() ) ); } diff --git a/3d-viewer/dialogs/panel_preview_3d_model.h b/3d-viewer/dialogs/panel_preview_3d_model.h index 9f5f6a0256..cc6e7f3a92 100644 --- a/3d-viewer/dialogs/panel_preview_3d_model.h +++ b/3d-viewer/dialogs/panel_preview_3d_model.h @@ -226,7 +226,7 @@ private: /// The 3d viewer Render initial settings (must be saved and restored) EDA_3D_VIEWER_SETTINGS::RENDER_SETTINGS m_initialRender; - NL_FOOTPRINT_PROPERTIES_PLUGIN* m_spaceMouse; + std::unique_ptr<NL_FOOTPRINT_PROPERTIES_PLUGIN> m_spaceMouse; }; #endif // PANEL_PREVIEW_3D_MODEL_H diff --git a/eeschema/sch_base_frame.cpp b/eeschema/sch_base_frame.cpp index b385aa252e..462015a4eb 100644 --- a/eeschema/sch_base_frame.cpp +++ b/eeschema/sch_base_frame.cpp @@ -99,8 +99,7 @@ SCH_BASE_FRAME::SCH_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aWindo EDA_DRAW_FRAME( aKiway, aParent, aWindowType, aTitle, aPosition, aSize, aStyle, aFrameName, schIUScale ), m_base_frame_defaults( nullptr, "base_Frame_defaults" ), - m_selectionFilterPanel( nullptr ), - m_spaceMouse( nullptr ) + m_selectionFilterPanel( nullptr ) { if( ( aStyle & wxFRAME_NO_TASKBAR ) == 0 ) createCanvas(); @@ -123,10 +122,9 @@ SCH_BASE_FRAME::SCH_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aWindo } +/// Needs to be in the cpp file to encode the sizeof() for std::unique_ptr SCH_BASE_FRAME::~SCH_BASE_FRAME() -{ - delete m_spaceMouse; -} +{} SCH_SCREEN* SCH_BASE_FRAME::GetScreen() const @@ -377,7 +375,7 @@ void SCH_BASE_FRAME::ActivateGalCanvas() try { if( !m_spaceMouse ) - m_spaceMouse = new NL_SCHEMATIC_PLUGIN(); + m_spaceMouse = std::make_unique<NL_SCHEMATIC_PLUGIN>(); m_spaceMouse->SetCanvas( GetCanvas() ); } diff --git a/eeschema/sch_base_frame.h b/eeschema/sch_base_frame.h index d14b0f3311..8b412613c9 100644 --- a/eeschema/sch_base_frame.h +++ b/eeschema/sch_base_frame.h @@ -307,7 +307,7 @@ private: wxDateTime m_watcherLastModified; wxTimer m_watcherDebounceTimer; - NL_SCHEMATIC_PLUGIN* m_spaceMouse; + std::unique_ptr<NL_SCHEMATIC_PLUGIN> m_spaceMouse; }; #endif // SCH_BASE_FRAME_H_ diff --git a/include/pcb_base_frame.h b/include/pcb_base_frame.h index 2159074d30..0a8a0abe0b 100644 --- a/include/pcb_base_frame.h +++ b/include/pcb_base_frame.h @@ -428,7 +428,7 @@ protected: PCB_ORIGIN_TRANSFORMS m_originTransforms; private: - NL_PCBNEW_PLUGIN* m_spaceMouse; + std::unique_ptr<NL_PCBNEW_PLUGIN> m_spaceMouse; std::unique_ptr<wxFileSystemWatcher> m_watcher; wxFileName m_watcherFileName; diff --git a/pcbnew/pcb_base_frame.cpp b/pcbnew/pcb_base_frame.cpp index 13480a4343..9a8bddb287 100644 --- a/pcbnew/pcb_base_frame.cpp +++ b/pcbnew/pcb_base_frame.cpp @@ -81,8 +81,7 @@ PCB_BASE_FRAME::PCB_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame EDA_DRAW_FRAME( aKiway, aParent, aFrameType, aTitle, aPos, aSize, aStyle, aFrameName, pcbIUScale ), m_pcb( nullptr ), - m_originTransforms( *this ), - m_spaceMouse( nullptr ) + m_originTransforms( *this ) { m_watcherDebounceTimer.Bind( wxEVT_TIMER, &PCB_BASE_FRAME::OnFpChangeDebounceTimer, this ); } @@ -90,9 +89,6 @@ PCB_BASE_FRAME::PCB_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame PCB_BASE_FRAME::~PCB_BASE_FRAME() { - delete m_spaceMouse; - m_spaceMouse = nullptr; - // Ensure m_canvasType is up to date, to save it in config if( GetCanvas() ) m_canvasType = GetCanvas()->GetBackend(); @@ -132,7 +128,7 @@ void PCB_BASE_FRAME::handleIconizeEvent( wxIconizeEvent& aEvent ) { EDA_DRAW_FRAME::handleIconizeEvent( aEvent ); - if( m_spaceMouse != nullptr && aEvent.IsIconized() ) + if( m_spaceMouse && aEvent.IsIconized() ) m_spaceMouse->SetFocus( false ); } @@ -1040,9 +1036,9 @@ void PCB_BASE_FRAME::ActivateGalCanvas() try { - if( m_spaceMouse == nullptr ) + if( !m_spaceMouse ) { - m_spaceMouse = new NL_PCBNEW_PLUGIN( GetCanvas() ); + m_spaceMouse = std::make_unique<NL_PCBNEW_PLUGIN>( GetCanvas() ); } } catch( const std::system_error& e )