Fix dangerous static_cast-ing to wrong type.

This commit is contained in:
Jeff Young 2019-06-10 00:21:50 +01:00
parent 1f6a5c92d7
commit bb96255a03
14 changed files with 59 additions and 32 deletions

View File

@ -63,7 +63,9 @@ static DRILL_PRECISION precisionListForMetric( 3, 3 );
*/ */
int PCB_EDITOR_CONTROL::GenerateDrillFiles( const TOOL_EVENT& aEvent ) int PCB_EDITOR_CONTROL::GenerateDrillFiles( const TOOL_EVENT& aEvent )
{ {
DIALOG_GENDRILL dlg( frame(), frame() ); PCB_EDIT_FRAME* editFrame = getEditFrame<PCB_EDIT_FRAME>();
DIALOG_GENDRILL dlg( editFrame, editFrame );
dlg.ShowModal(); dlg.ShowModal();
return 0; return 0;
} }

View File

@ -60,7 +60,9 @@ DIALOG_GLOBAL_DELETION::DIALOG_GLOBAL_DELETION( PCB_EDIT_FRAME* parent ) :
int GLOBAL_EDIT_TOOL::GlobalDeletions( const TOOL_EVENT& aEvent ) int GLOBAL_EDIT_TOOL::GlobalDeletions( const TOOL_EVENT& aEvent )
{ {
DIALOG_GLOBAL_DELETION dlg( frame() ); PCB_EDIT_FRAME* editFrame = getEditFrame<PCB_EDIT_FRAME>();
DIALOG_GLOBAL_DELETION dlg( editFrame );
dlg.SetCurrentLayer( frame()->GetActiveLayer() ); dlg.SetCurrentLayer( frame()->GetActiveLayer() );
dlg.ShowModal(); dlg.ShowModal();
return 0; return 0;

View File

@ -410,9 +410,10 @@ bool DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::TransferDataFromWindow()
int GLOBAL_EDIT_TOOL::EditTextAndGraphics( const TOOL_EVENT& aEvent ) int GLOBAL_EDIT_TOOL::EditTextAndGraphics( const TOOL_EVENT& aEvent )
{ {
DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS dlg( frame() ); PCB_EDIT_FRAME* editFrame = getEditFrame<PCB_EDIT_FRAME>();
dlg.ShowModal(); DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS dlg( editFrame );
dlg.ShowModal();
return 0; return 0;
} }

View File

@ -371,9 +371,10 @@ void DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::OnSizeNetclassGrid( wxSizeEvent& event
int GLOBAL_EDIT_TOOL::EditTracksAndVias( const TOOL_EVENT& aEvent ) int GLOBAL_EDIT_TOOL::EditTracksAndVias( const TOOL_EVENT& aEvent )
{ {
DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS dlg( frame() ); PCB_EDIT_FRAME* editFrame = getEditFrame<PCB_EDIT_FRAME>();
dlg.ShowQuasiModal(); // QuasiModal required for NET_SELECTOR DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS dlg( editFrame );
dlg.ShowQuasiModal(); // QuasiModal required for NET_SELECTOR
return 0; return 0;
} }

View File

@ -21,7 +21,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#include <pcb_edit_frame.h> #include <pcb_base_edit_frame.h>
#include <grid_layer_box_helpers.h> #include <grid_layer_box_helpers.h>
#include <class_drawsegment.h> #include <class_drawsegment.h>
#include <class_track.h> #include <class_track.h>
@ -69,7 +69,7 @@ public:
}; };
DIALOG_SWAP_LAYERS::DIALOG_SWAP_LAYERS( PCB_EDIT_FRAME* aParent, PCB_LAYER_ID* aArray ) : DIALOG_SWAP_LAYERS::DIALOG_SWAP_LAYERS( PCB_BASE_EDIT_FRAME* aParent, PCB_LAYER_ID* aArray ) :
DIALOG_SWAP_LAYERS_BASE( aParent ), DIALOG_SWAP_LAYERS_BASE( aParent ),
m_parent( aParent ), m_parent( aParent ),
m_layerDestinations( aArray ) m_layerDestinations( aArray )

View File

@ -33,13 +33,13 @@ class LAYER_GRID_TABLE;
class DIALOG_SWAP_LAYERS : public DIALOG_SWAP_LAYERS_BASE class DIALOG_SWAP_LAYERS : public DIALOG_SWAP_LAYERS_BASE
{ {
private: private:
PCB_EDIT_FRAME* m_parent; PCB_BASE_EDIT_FRAME* m_parent;
PCB_LAYER_ID* m_layerDestinations; PCB_LAYER_ID* m_layerDestinations;
LAYER_GRID_TABLE* m_gridTable; LAYER_GRID_TABLE* m_gridTable;
public: public:
DIALOG_SWAP_LAYERS( PCB_EDIT_FRAME* aParent, PCB_LAYER_ID* aArray ); DIALOG_SWAP_LAYERS( PCB_BASE_EDIT_FRAME* aParent, PCB_LAYER_ID* aArray );
~DIALOG_SWAP_LAYERS() override; ~DIALOG_SWAP_LAYERS() override;
private: private:

View File

@ -407,7 +407,9 @@ static bool HasNonSMDPins( MODULE* aModule )
int PCB_EDITOR_CONTROL::GeneratePosFile( const TOOL_EVENT& aEvent ) int PCB_EDITOR_CONTROL::GeneratePosFile( const TOOL_EVENT& aEvent )
{ {
DIALOG_GEN_FOOTPRINT_POSITION dlg( frame() ); PCB_EDIT_FRAME* editFrame = getEditFrame<PCB_EDIT_FRAME>();
DIALOG_GEN_FOOTPRINT_POSITION dlg( editFrame );
dlg.ShowModal(); dlg.ShowModal();
return 0; return 0;
} }

View File

@ -757,10 +757,12 @@ bool ROUTER_TOOL::prepareInteractive()
return false; return false;
} }
frame()->SetActiveLayer( ToLAYER_ID( routingLayer ) ); PCB_EDIT_FRAME* editFrame = getEditFrame<PCB_EDIT_FRAME>();
editFrame->SetActiveLayer( ToLAYER_ID( routingLayer ) );
// Force layer visible // Force layer visible
frame()->GetLayerManager()->SetLayerVisible( routingLayer, true ); editFrame->GetLayerManager()->SetLayerVisible( routingLayer, true );
// for some reason I don't understand, GetNetclass() may return null sometimes... // for some reason I don't understand, GetNetclass() may return null sometimes...
if( m_startItem && m_startItem->Net() >= 0 && if( m_startItem && m_startItem->Net() >= 0 &&
@ -768,10 +770,10 @@ bool ROUTER_TOOL::prepareInteractive()
{ {
highlightNet( true, m_startItem->Net() ); highlightNet( true, m_startItem->Net() );
// Update track width and via size shown in main toolbar comboboxes // Update track width and via size shown in main toolbar comboboxes
frame()->SetCurrentNetClass( m_startItem->Parent()->GetNetClass()->GetName() ); editFrame->SetCurrentNetClass( m_startItem->Parent()->GetNetClass()->GetName() );
} }
else else
frame()->SetCurrentNetClass( NETCLASS::Default ); editFrame->SetCurrentNetClass( NETCLASS::Default );
controls()->ForceCursorPosition( false ); controls()->ForceCursorPosition( false );
controls()->SetAutoPan( true ); controls()->SetAutoPan( true );

View File

@ -1549,7 +1549,7 @@ int DRAWING_TOOL::DrawVia( const TOOL_EVENT& aEvent )
{ {
GRID_HELPER m_gridHelper; GRID_HELPER m_gridHelper;
VIA_PLACER( PCB_EDIT_FRAME* aFrame ) : m_gridHelper( aFrame ) VIA_PLACER( PCB_BASE_EDIT_FRAME* aFrame ) : m_gridHelper( aFrame )
{} {}
TRACK* findTrack( VIA* aVia ) TRACK* findTrack( VIA* aVia )

View File

@ -143,7 +143,8 @@ int GLOBAL_EDIT_TOOL::ExchangeFootprints( const TOOL_EVENT& aEvent )
// invoke the exchange dialog process // invoke the exchange dialog process
{ {
DIALOG_EXCHANGE_FOOTPRINTS dialog( frame(), mod, updateMode, currentMode ); PCB_EDIT_FRAME* editFrame = getEditFrame<PCB_EDIT_FRAME>();
DIALOG_EXCHANGE_FOOTPRINTS dialog( editFrame, mod, updateMode, currentMode );
dialog.ShowQuasiModal(); dialog.ShowQuasiModal();
} }

View File

@ -506,14 +506,14 @@ int PCB_EDITOR_CONTROL::Plot( const TOOL_EVENT& aEvent )
int PCB_EDITOR_CONTROL::BoardSetup( const TOOL_EVENT& aEvent ) int PCB_EDITOR_CONTROL::BoardSetup( const TOOL_EVENT& aEvent )
{ {
frame()->DoShowBoardSetupDialog(); getEditFrame<PCB_EDIT_FRAME>()->DoShowBoardSetupDialog();
return 0; return 0;
} }
int PCB_EDITOR_CONTROL::ImportNetlist( const TOOL_EVENT& aEvent ) int PCB_EDITOR_CONTROL::ImportNetlist( const TOOL_EVENT& aEvent )
{ {
frame()->InstallNetlistFrame(); getEditFrame<PCB_EDIT_FRAME>()->InstallNetlistFrame();
return 0; return 0;
} }
@ -532,7 +532,7 @@ int PCB_EDITOR_CONTROL::ImportSpecctraSession( const TOOL_EVENT& aEvent )
wxT( ".ses" ), wxT( "*.ses" ), frame(), wxFD_OPEN, false ); wxT( ".ses" ), wxT( "*.ses" ), frame(), wxFD_OPEN, false );
if( !fullFileName.IsEmpty() ) if( !fullFileName.IsEmpty() )
frame()->ImportSpecctraSession( fullFileName ); getEditFrame<PCB_EDIT_FRAME>()->ImportSpecctraSession( fullFileName );
return 0; return 0;
} }
@ -550,7 +550,7 @@ int PCB_EDITOR_CONTROL::ExportSpecctraDSN( const TOOL_EVENT& aEvent )
frame(), wxFD_SAVE | wxFD_OVERWRITE_PROMPT, false ); frame(), wxFD_SAVE | wxFD_OVERWRITE_PROMPT, false );
if( !fullFileName.IsEmpty() ) if( !fullFileName.IsEmpty() )
frame()->ExportSpecctraFile( fullFileName ); getEditFrame<PCB_EDIT_FRAME>()->ExportSpecctraFile( fullFileName );
return 0; return 0;
} }
@ -596,14 +596,14 @@ int PCB_EDITOR_CONTROL::UpdatePCBFromSchematic( const TOOL_EVENT& aEvent )
int PCB_EDITOR_CONTROL::ToggleLayersManager( const TOOL_EVENT& aEvent ) int PCB_EDITOR_CONTROL::ToggleLayersManager( const TOOL_EVENT& aEvent )
{ {
frame()->ToggleLayersManager(); getEditFrame<PCB_EDIT_FRAME>()->ToggleLayersManager();
return 0; return 0;
} }
int PCB_EDITOR_CONTROL::ToggleMicrowaveToolbar( const TOOL_EVENT& aEvent ) int PCB_EDITOR_CONTROL::ToggleMicrowaveToolbar( const TOOL_EVENT& aEvent )
{ {
frame()->ToggleMicrowaveToolbar(); getEditFrame<PCB_EDIT_FRAME>()->ToggleMicrowaveToolbar();
return 0; return 0;
} }

View File

@ -55,7 +55,7 @@ struct INTERACTIVE_PLACER_BASE
virtual void SnapItem( BOARD_ITEM *aItem ); virtual void SnapItem( BOARD_ITEM *aItem );
virtual bool PlaceItem( BOARD_ITEM *aItem, BOARD_COMMIT& aCommit ); virtual bool PlaceItem( BOARD_ITEM *aItem, BOARD_COMMIT& aCommit );
PCB_EDIT_FRAME* m_frame; PCB_BASE_EDIT_FRAME* m_frame;
BOARD* m_board; BOARD* m_board;
int m_modifiers; int m_modifiers;
}; };
@ -134,14 +134,28 @@ protected:
virtual void setTransitions() override; virtual void setTransitions() override;
KIGFX::PCB_VIEW* view() const { return static_cast<KIGFX::PCB_VIEW*>( getView() ); } KIGFX::PCB_VIEW* view() const
KIGFX::VIEW_CONTROLS* controls() const { return getViewControls(); } {
PCB_EDIT_FRAME* frame() const { return getEditFrame<PCB_EDIT_FRAME>(); } return static_cast<KIGFX::PCB_VIEW*>( getView() );
}
KIGFX::VIEW_CONTROLS* controls() const
{
return getViewControls();
}
PCB_BASE_EDIT_FRAME* frame() const
{
return getEditFrame<PCB_BASE_EDIT_FRAME>();
}
BOARD* board() const { return getModel<BOARD>(); } BOARD* board() const { return getModel<BOARD>(); }
MODULE* module() const MODULE* module() const
{ {
return board()->GetFirstModule(); return board()->GetFirstModule();
} }
PCB_DISPLAY_OPTIONS* displayOptions() const; PCB_DISPLAY_OPTIONS* displayOptions() const;
PCB_DRAW_PANEL_GAL* canvas() const; PCB_DRAW_PANEL_GAL* canvas() const;
const PCBNEW_SELECTION& selection() const; const PCBNEW_SELECTION& selection() const;

View File

@ -127,7 +127,7 @@ int ZONE_FILLER_TOOL::ZoneFillAll( const TOOL_EVENT& aEvent )
filler.SetProgressReporter( progressReporter.get() ); filler.SetProgressReporter( progressReporter.get() );
if( filler.Fill( toFill ) ) if( filler.Fill( toFill ) )
frame()->m_ZoneFillsDirty = false; getEditFrame<PCB_EDIT_FRAME>()->m_ZoneFillsDirty = false;
canvas()->Refresh(); canvas()->Refresh();

View File

@ -43,7 +43,9 @@
*/ */
int GLOBAL_EDIT_TOOL::CleanupTracksAndVias( const TOOL_EVENT& aEvent ) int GLOBAL_EDIT_TOOL::CleanupTracksAndVias( const TOOL_EVENT& aEvent )
{ {
DIALOG_CLEANUP_TRACKS_AND_VIAS dlg( frame() ); PCB_EDIT_FRAME* editFrame = getEditFrame<PCB_EDIT_FRAME>();
DIALOG_CLEANUP_TRACKS_AND_VIAS dlg( editFrame );
dlg.ShowModal(); dlg.ShowModal();
return 0; return 0;
} }