Move Use45Limit processing to VIEWER_TOOLS.

(We need it for the ruler in footprint preview
widgets.)

Fixes https://gitlab.com/kicad/code/kicad/-/issues/20668
This commit is contained in:
Jeff Young 2025-04-16 18:09:25 +01:00
parent 6bc9653029
commit 194ee9ef25
7 changed files with 32 additions and 23 deletions

View File

@ -54,6 +54,9 @@ CVPCB_SETTINGS::CVPCB_SETTINGS() :
m_params.emplace_back( new PARAM<bool>( "footprint_viewer.autozoom", m_params.emplace_back( new PARAM<bool>( "footprint_viewer.autozoom",
&m_FootprintViewerAutoZoomOnSelect, true ) ); &m_FootprintViewerAutoZoomOnSelect, true ) );
m_params.emplace_back( new PARAM<bool>( "footprint_viewer.use_45_limit",
&m_ViewersDisplay.m_Use45Limit, true ) );
m_params.emplace_back( new PARAM<bool>( "footprint_viewer.show_pad_fill", m_params.emplace_back( new PARAM<bool>( "footprint_viewer.show_pad_fill",
&m_ViewersDisplay.m_DisplayPadFill, true ) ); &m_ViewersDisplay.m_DisplayPadFill, true ) );

View File

@ -777,6 +777,8 @@ void FOOTPRINT_CHOOSER_FRAME::setupUIConditions()
mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCH ) ) ); mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCH ) ) );
mgr->SetConditions( ACTIONS::milsUnits, CHECK( cond.Units( EDA_UNITS::MILS ) ) ); mgr->SetConditions( ACTIONS::milsUnits, CHECK( cond.Units( EDA_UNITS::MILS ) ) );
mgr->SetConditions( PCB_ACTIONS::toggleHV45Mode, CHECK( cond.Get45degMode() ) );
mgr->SetConditions( PCB_ACTIONS::showPadNumbers, CHECK( cond.PadNumbersDisplay() ) ); mgr->SetConditions( PCB_ACTIONS::showPadNumbers, CHECK( cond.PadNumbersDisplay() ) );
mgr->SetConditions( PCB_ACTIONS::padDisplayMode, CHECK( !cond.PadFillDisplay() ) ); mgr->SetConditions( PCB_ACTIONS::padDisplayMode, CHECK( !cond.PadFillDisplay() ) );
mgr->SetConditions( PCB_ACTIONS::textOutlines, CHECK( !cond.TextFillDisplay() ) ); mgr->SetConditions( PCB_ACTIONS::textOutlines, CHECK( !cond.TextFillDisplay() ) );

View File

@ -110,6 +110,7 @@ class PCB_VIEWERS_SETTINGS_BASE : public APP_SETTINGS_BASE
public: public:
struct VIEWERS_DISPLAY_OPTIONS struct VIEWERS_DISPLAY_OPTIONS
{ {
bool m_Use45Limit;
bool m_DisplayGraphicsFill; bool m_DisplayGraphicsFill;
bool m_DisplayTextFill; bool m_DisplayTextFill;
bool m_DisplayPadNumbers; bool m_DisplayPadNumbers;

View File

@ -2113,25 +2113,6 @@ int DRAWING_TOOL::SetAnchor( const TOOL_EVENT& aEvent )
} }
int DRAWING_TOOL::ToggleHV45Mode( const TOOL_EVENT& toolEvent )
{
#define TOGGLE( a ) a = !a
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
if( frame()->IsType( FRAME_PCB_EDITOR ) )
TOGGLE( mgr.GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" )->m_Use45DegreeLimit );
else
TOGGLE( mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" )->m_Use45Limit );
UpdateStatusBar();
return 0;
#undef TOGGLE
}
/** /**
* Update a #PCB_SHAPE from the current state of a #TWO_POINT_GEOMETRY_MANAGER. * Update a #PCB_SHAPE from the current state of a #TWO_POINT_GEOMETRY_MANAGER.
*/ */
@ -4169,8 +4150,6 @@ void DRAWING_TOOL::setTransitions()
Go( &DRAWING_TOOL::PlaceImportedGraphics, PCB_ACTIONS::placeImportedGraphics.MakeEvent() ); Go( &DRAWING_TOOL::PlaceImportedGraphics, PCB_ACTIONS::placeImportedGraphics.MakeEvent() );
Go( &DRAWING_TOOL::SetAnchor, PCB_ACTIONS::setAnchor.MakeEvent() ); Go( &DRAWING_TOOL::SetAnchor, PCB_ACTIONS::setAnchor.MakeEvent() );
Go( &DRAWING_TOOL::ToggleHV45Mode, PCB_ACTIONS::toggleHV45Mode.MakeEvent() );
Go( &DRAWING_TOOL::PlaceTuningPattern, PCB_ACTIONS::tuneSingleTrack.MakeEvent() ); Go( &DRAWING_TOOL::PlaceTuningPattern, PCB_ACTIONS::tuneSingleTrack.MakeEvent() );
Go( &DRAWING_TOOL::PlaceTuningPattern, PCB_ACTIONS::tuneDiffPair.MakeEvent() ); Go( &DRAWING_TOOL::PlaceTuningPattern, PCB_ACTIONS::tuneDiffPair.MakeEvent() );
Go( &DRAWING_TOOL::PlaceTuningPattern, PCB_ACTIONS::tuneSkew.MakeEvent() ); Go( &DRAWING_TOOL::PlaceTuningPattern, PCB_ACTIONS::tuneSkew.MakeEvent() );

View File

@ -203,8 +203,10 @@ bool PCB_EDITOR_CONDITIONS::get45degModeFunc( const SELECTION& aSelection, PCB_B
if( aFrame->IsType( FRAME_PCB_EDITOR ) ) if( aFrame->IsType( FRAME_PCB_EDITOR ) )
return mgr.GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" )->m_Use45DegreeLimit; return mgr.GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" )->m_Use45DegreeLimit;
else else if( aFrame->IsType( FRAME_FOOTPRINT_EDITOR ) )
return mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" )->m_Use45Limit; return mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" )->m_Use45Limit;
else
return aFrame->GetViewerSettingsBase()->m_ViewersDisplay.m_Use45Limit;
} }

View File

@ -105,6 +105,23 @@ template<class T> void Flip( T& aValue )
} }
int PCB_VIEWER_TOOLS::ToggleHV45Mode( const TOOL_EVENT& toolEvent )
{
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
if( frame()->IsType( FRAME_PCB_EDITOR ) )
Flip( mgr.GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" )->m_Use45DegreeLimit );
else if( frame()->IsType( FRAME_FOOTPRINT_EDITOR ) )
Flip( mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" )->m_Use45Limit );
else
Flip( frame()->GetViewerSettingsBase()->m_ViewersDisplay.m_Use45Limit );
frame()->UpdateStatusBar();
return 0;
}
int PCB_VIEWER_TOOLS::ShowPadNumbers( const TOOL_EVENT& aEvent ) int PCB_VIEWER_TOOLS::ShowPadNumbers( const TOOL_EVENT& aEvent )
{ {
PCB_VIEWERS_SETTINGS_BASE* cfg = frame()->GetViewerSettingsBase(); PCB_VIEWERS_SETTINGS_BASE* cfg = frame()->GetViewerSettingsBase();
@ -331,8 +348,10 @@ int PCB_VIEWER_TOOLS::MeasureTool( const TOOL_EVENT& aEvent )
if( frame()->IsType( FRAME_PCB_EDITOR ) ) if( frame()->IsType( FRAME_PCB_EDITOR ) )
force45Deg = mgr.GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" )->m_Use45DegreeLimit; force45Deg = mgr.GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" )->m_Use45DegreeLimit;
else else if( frame()->IsType( FRAME_FOOTPRINT_EDITOR ) )
force45Deg = mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" )->m_Use45Limit; force45Deg = mgr.GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>( "fpedit" )->m_Use45Limit;
else
force45Deg = frame()->GetViewerSettingsBase()->m_ViewersDisplay.m_Use45Limit;
twoPtMgr.SetAngleSnap( force45Deg ); twoPtMgr.SetAngleSnap( force45Deg );
twoPtMgr.SetEnd( cursorPos ); twoPtMgr.SetEnd( cursorPos );
@ -421,6 +440,8 @@ void PCB_VIEWER_TOOLS::setTransitions()
// clang-format off // clang-format off
Go( &PCB_VIEWER_TOOLS::Show3DViewer, ACTIONS::show3DViewer.MakeEvent() ); Go( &PCB_VIEWER_TOOLS::Show3DViewer, ACTIONS::show3DViewer.MakeEvent() );
Go( &PCB_VIEWER_TOOLS::ToggleHV45Mode, PCB_ACTIONS::toggleHV45Mode.MakeEvent() );
// Display modes // Display modes
Go( &PCB_VIEWER_TOOLS::ShowPadNumbers, PCB_ACTIONS::showPadNumbers.MakeEvent() ); Go( &PCB_VIEWER_TOOLS::ShowPadNumbers, PCB_ACTIONS::showPadNumbers.MakeEvent() );
Go( &PCB_VIEWER_TOOLS::PadDisplayMode, PCB_ACTIONS::padDisplayMode.MakeEvent() ); Go( &PCB_VIEWER_TOOLS::PadDisplayMode, PCB_ACTIONS::padDisplayMode.MakeEvent() );

View File

@ -54,6 +54,7 @@ public:
///< Launch a tool to measure between points. ///< Launch a tool to measure between points.
int MeasureTool( const TOOL_EVENT& aEvent ); int MeasureTool( const TOOL_EVENT& aEvent );
int ToggleHV45Mode( const TOOL_EVENT& aEvent );
// Display modes // Display modes
int ShowPadNumbers( const TOOL_EVENT& aEvent ); int ShowPadNumbers( const TOOL_EVENT& aEvent );