Update unit handling in the preview ruler

* Make the ruler able to switch to mils after creation
* Cleanup an unused flag in Pcbnew dimensions
* Move unit changed notification into EDA_DRAW_FRAME so more
  frames to use it.
* Allow switching units when GerbView ruler tool is active
This commit is contained in:
Ian McInerney 2020-10-04 17:14:37 +01:00
parent 5828416960
commit 3a570c27f0
10 changed files with 30 additions and 19 deletions

View File

@ -188,6 +188,10 @@ bool EDA_DRAW_FRAME::LockFile( const wxString& aFileName )
void EDA_DRAW_FRAME::unitsChangeRefresh() void EDA_DRAW_FRAME::unitsChangeRefresh()
{ {
// Notify all tools the units have changed
if( m_toolManager )
m_toolManager->RunAction( ACTIONS::updateUnits, true );
UpdateStatusBar(); UpdateStatusBar();
UpdateMsgPanel(); UpdateMsgPanel();
} }

View File

@ -473,6 +473,9 @@ TOOL_ACTION ACTIONS::millimetersUnits( "common.Control.metricUnits",
_( "Millimeters" ), _( "Use millimeters" ), _( "Millimeters" ), _( "Use millimeters" ),
unit_mm_xpm, AF_NONE, (void*) EDA_UNITS::MILLIMETRES ); unit_mm_xpm, AF_NONE, (void*) EDA_UNITS::MILLIMETRES );
TOOL_ACTION ACTIONS::updateUnits( "common.Control.updateUnits",
AS_GLOBAL );
TOOL_ACTION ACTIONS::toggleUnits( "common.Control.toggleUnits", TOOL_ACTION ACTIONS::toggleUnits( "common.Control.toggleUnits",
AS_GLOBAL, AS_GLOBAL,
MD_CTRL + 'U', LEGACY_HK_NAME( "Switch Units" ), MD_CTRL + 'U', LEGACY_HK_NAME( "Switch Units" ),

View File

@ -569,7 +569,9 @@ int GERBVIEW_SELECTION_TOOL::MeasureTool( const TOOL_EVENT& aEvent )
Activate(); Activate();
KIGFX::PREVIEW::TWO_POINT_GEOMETRY_MANAGER twoPtMgr; KIGFX::PREVIEW::TWO_POINT_GEOMETRY_MANAGER twoPtMgr;
KIGFX::PREVIEW::RULER_ITEM ruler( twoPtMgr, m_frame->GetUserUnits() );
EDA_UNITS units = m_frame->GetUserUnits();
KIGFX::PREVIEW::RULER_ITEM ruler( twoPtMgr, units );
view.Add( &ruler ); view.Add( &ruler );
view.SetVisible( &ruler, false ); view.SetVisible( &ruler, false );
@ -662,6 +664,17 @@ int GERBVIEW_SELECTION_TOOL::MeasureTool( const TOOL_EVENT& aEvent )
view.Update( &ruler, KIGFX::GEOMETRY ); view.Update( &ruler, KIGFX::GEOMETRY );
} }
else if( evt->IsAction( &ACTIONS::toggleUnits )
|| evt->IsAction( &ACTIONS::updateUnits ) )
{
if( m_frame->GetUserUnits() != units )
{
units = m_frame->GetUserUnits();
ruler.SwitchUnits( units );
view.Update( &ruler, KIGFX::GEOMETRY );
}
}
else if( evt->IsClick( BUT_RIGHT ) ) else if( evt->IsClick( BUT_RIGHT ) )
{ {
m_menu.ShowContextMenu( m_selection ); m_menu.ShowContextMenu( m_selection );

View File

@ -70,13 +70,12 @@ public:
return wxT( "RULER_ITEM" ); return wxT( "RULER_ITEM" );
} }
void SwitchUnits() /**
{ * Switch the ruler units
if( m_userUnits == EDA_UNITS::INCHES ) *
m_userUnits = EDA_UNITS::MILLIMETRES; * @param aUnits is the new unit system the ruler should use
else */
m_userUnits = EDA_UNITS::INCHES; void SwitchUnits( EDA_UNITS aUnits ) { m_userUnits = aUnits; }
}
private: private:
const TWO_POINT_GEOMETRY_MANAGER& m_geomMgr; const TWO_POINT_GEOMETRY_MANAGER& m_geomMgr;

View File

@ -142,6 +142,7 @@ public:
static TOOL_ACTION inchesUnits; static TOOL_ACTION inchesUnits;
static TOOL_ACTION milsUnits; static TOOL_ACTION milsUnits;
static TOOL_ACTION millimetersUnits; static TOOL_ACTION millimetersUnits;
static TOOL_ACTION updateUnits;
static TOOL_ACTION toggleUnits; static TOOL_ACTION toggleUnits;
static TOOL_ACTION togglePolarCoords; static TOOL_ACTION togglePolarCoords;
static TOOL_ACTION resetLocalCoords; static TOOL_ACTION resetLocalCoords;

View File

@ -292,7 +292,6 @@ protected:
wxString m_prefix; ///< String prepended to the value wxString m_prefix; ///< String prepended to the value
wxString m_suffix; ///< String appended to the value wxString m_suffix; ///< String appended to the value
EDA_UNITS m_units; ///< 0 = inches, 1 = mm EDA_UNITS m_units; ///< 0 = inches, 1 = mm
bool m_useMils; ///< If inches, use mils.
bool m_autoUnits; ///< If true, follow the currently selected UI units bool m_autoUnits; ///< If true, follow the currently selected UI units
DIM_UNITS_FORMAT m_unitsFormat; ///< How to render the units suffix DIM_UNITS_FORMAT m_unitsFormat; ///< How to render the units suffix
int m_precision; ///< Number of digits to display after decimal int m_precision; ///< Number of digits to display after decimal

View File

@ -621,10 +621,6 @@ void PCB_BASE_FRAME::unitsChangeRefresh()
{ {
EDA_DRAW_FRAME::unitsChangeRefresh(); // Update the status bar. EDA_DRAW_FRAME::unitsChangeRefresh(); // Update the status bar.
// Notify all tools the units have changed
if( m_toolManager )
m_toolManager->RunAction( PCB_ACTIONS::updateUnits, true );
UpdateGridSelectBox(); UpdateGridSelectBox();
} }

View File

@ -304,9 +304,6 @@ TOOL_ACTION PCB_ACTIONS::properties( "pcbnew.InteractiveEdit.properties",
_( "Properties..." ), _( "Displays item properties dialog" ), _( "Properties..." ), _( "Displays item properties dialog" ),
config_xpm ); config_xpm );
TOOL_ACTION PCB_ACTIONS::updateUnits( "pcbnew.InteractiveEdit.updateUnits",
AS_GLOBAL );
// FOOTPRINT_EDITOR_TOOLS // FOOTPRINT_EDITOR_TOOLS
// //

View File

@ -418,7 +418,6 @@ public:
static TOOL_ACTION selectionTool; static TOOL_ACTION selectionTool;
static TOOL_ACTION pickerTool; static TOOL_ACTION pickerTool;
static TOOL_ACTION measureTool; static TOOL_ACTION measureTool;
static TOOL_ACTION updateUnits;
static TOOL_ACTION drillOrigin; static TOOL_ACTION drillOrigin;
static TOOL_ACTION placeFileOrigin; static TOOL_ACTION placeFileOrigin;
static TOOL_ACTION appendBoard; static TOOL_ACTION appendBoard;

View File

@ -297,12 +297,12 @@ int PCB_VIEWER_TOOLS::MeasureTool( const TOOL_EVENT& aEvent )
} }
else if( evt->IsAction( &ACTIONS::toggleUnits ) else if( evt->IsAction( &ACTIONS::toggleUnits )
|| evt->IsAction( &PCB_ACTIONS::updateUnits ) ) || evt->IsAction( &ACTIONS::updateUnits ) )
{ {
if( frame()->GetUserUnits() != units ) if( frame()->GetUserUnits() != units )
{ {
units = frame()->GetUserUnits(); units = frame()->GetUserUnits();
ruler.SwitchUnits(); ruler.SwitchUnits( units );
view.Update( &ruler, KIGFX::GEOMETRY ); view.Update( &ruler, KIGFX::GEOMETRY );
canvas()->Refresh(); canvas()->Refresh();
} }