Browse Source

Support translation in tool context menus that are long-lived.

(The specialized ones are OK as they're created
for each use.)

Also, enum maps must be untranslated.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/21859
pull/19/head
Jeff Young 2 months ago
parent
commit
2fe7219474
  1. 4
      3d-viewer/3d_viewer/tools/eda_3d_controller.cpp
  2. 8
      common/eda_shape.cpp
  3. 12
      common/eda_text.cpp
  4. 12
      eeschema/sch_field.cpp
  5. 14
      eeschema/sch_label.cpp
  6. 18
      eeschema/sch_line.cpp
  7. 8
      eeschema/sch_pin.cpp
  8. 6
      eeschema/sch_shape.cpp
  9. 8
      eeschema/tools/sch_edit_tool.cpp
  10. 8
      include/tool/action_menu.h
  11. 8
      pcbnew/footprint.cpp
  12. 6
      pcbnew/pcb_barcode.cpp
  13. 8
      pcbnew/pcb_table.cpp
  14. 8
      pcbnew/pcb_textbox.cpp
  15. 2
      pcbnew/router/router_tool.cpp
  16. 2
      pcbnew/tools/align_distribute_tool.cpp
  17. 3
      pcbnew/tools/board_inspection_tool.cpp
  18. 2
      pcbnew/tools/convert_tool.cpp
  19. 4
      pcbnew/tools/edit_tool.cpp

4
3d-viewer/3d_viewer/tools/eda_3d_controller.cpp

@ -39,7 +39,7 @@
bool EDA_3D_CONTROLLER::Init()
{
std::shared_ptr<ACTION_MENU> rotateSubmenu = std::make_shared<ACTION_MENU>( true, this );
rotateSubmenu->SetTitle( _( "Rotate Board" ) );
rotateSubmenu->SetUntranslatedTitle( _HKI( "Rotate Board" ) );
rotateSubmenu->SetIcon( BITMAPS::rotate_cw );
m_menu->RegisterSubMenu( rotateSubmenu );
@ -53,7 +53,7 @@ bool EDA_3D_CONTROLLER::Init()
rotateSubmenu->Add( EDA_3D_ACTIONS::rotateZCCW );
std::shared_ptr<ACTION_MENU> moveSubmenu = std::make_shared<ACTION_MENU>( true, this );
moveSubmenu->SetTitle( _( "Move Board" ) );
moveSubmenu->SetUntranslatedTitle( _HKI( "Move Board" ) );
moveSubmenu->SetIcon( BITMAPS::move );
m_menu->RegisterSubMenu( moveSubmenu );

8
common/eda_shape.cpp

@ -2655,10 +2655,10 @@ static struct EDA_SHAPE_DESC
if( lineStyleEnum.Choices().GetCount() == 0 )
{
lineStyleEnum.Map( LINE_STYLE::SOLID, _HKI( "Solid" ) )
.Map( LINE_STYLE::DASH, _HKI( "Dashed" ) )
.Map( LINE_STYLE::DOT, _HKI( "Dotted" ) )
.Map( LINE_STYLE::DASHDOT, _HKI( "Dash-Dot" ) )
lineStyleEnum.Map( LINE_STYLE::SOLID, _HKI( "Solid" ) )
.Map( LINE_STYLE::DASH, _HKI( "Dashed" ) )
.Map( LINE_STYLE::DOT, _HKI( "Dotted" ) )
.Map( LINE_STYLE::DASHDOT, _HKI( "Dash-Dot" ) )
.Map( LINE_STYLE::DASHDOTDOT, _HKI( "Dash-Dot-Dot" ) );
}

12
common/eda_text.cpp

@ -1337,18 +1337,18 @@ static struct EDA_TEXT_DESC
if( h_inst.Choices().GetCount() == 0)
{
h_inst.Map( GR_TEXT_H_ALIGN_LEFT, _( "Left" ) );
h_inst.Map( GR_TEXT_H_ALIGN_CENTER, _( "Center" ) );
h_inst.Map( GR_TEXT_H_ALIGN_RIGHT, _( "Right" ) );
h_inst.Map( GR_TEXT_H_ALIGN_LEFT, _HKI( "Left" ) );
h_inst.Map( GR_TEXT_H_ALIGN_CENTER, _HKI( "Center" ) );
h_inst.Map( GR_TEXT_H_ALIGN_RIGHT, _HKI( "Right" ) );
}
auto& v_inst = ENUM_MAP<GR_TEXT_V_ALIGN_T>::Instance();
if( v_inst.Choices().GetCount() == 0)
{
v_inst.Map( GR_TEXT_V_ALIGN_TOP, _( "Top" ) );
v_inst.Map( GR_TEXT_V_ALIGN_CENTER, _( "Center" ) );
v_inst.Map( GR_TEXT_V_ALIGN_BOTTOM, _( "Bottom" ) );
v_inst.Map( GR_TEXT_V_ALIGN_TOP, _HKI( "Top" ) );
v_inst.Map( GR_TEXT_V_ALIGN_CENTER, _HKI( "Center" ) );
v_inst.Map( GR_TEXT_V_ALIGN_BOTTOM, _HKI( "Bottom" ) );
}
PROPERTY_MANAGER& propMgr = PROPERTY_MANAGER::Instance();

12
eeschema/sch_field.cpp

@ -1629,18 +1629,18 @@ static struct SCH_FIELD_DESC
if( h_inst.Choices().GetCount() == 0)
{
h_inst.Map( GR_TEXT_H_ALIGN_LEFT, _( "Left" ) );
h_inst.Map( GR_TEXT_H_ALIGN_CENTER, _( "Center" ) );
h_inst.Map( GR_TEXT_H_ALIGN_RIGHT, _( "Right" ) );
h_inst.Map( GR_TEXT_H_ALIGN_LEFT, _HKI( "Left" ) );
h_inst.Map( GR_TEXT_H_ALIGN_CENTER, _HKI( "Center" ) );
h_inst.Map( GR_TEXT_H_ALIGN_RIGHT, _HKI( "Right" ) );
}
auto& v_inst = ENUM_MAP<GR_TEXT_V_ALIGN_T>::Instance();
if( v_inst.Choices().GetCount() == 0)
{
v_inst.Map( GR_TEXT_V_ALIGN_TOP, _( "Top" ) );
v_inst.Map( GR_TEXT_V_ALIGN_CENTER, _( "Center" ) );
v_inst.Map( GR_TEXT_V_ALIGN_BOTTOM, _( "Bottom" ) );
v_inst.Map( GR_TEXT_V_ALIGN_TOP, _HKI( "Top" ) );
v_inst.Map( GR_TEXT_V_ALIGN_CENTER, _HKI( "Center" ) );
v_inst.Map( GR_TEXT_V_ALIGN_BOTTOM, _HKI( "Bottom" ) );
}
PROPERTY_MANAGER& propMgr = PROPERTY_MANAGER::Instance();

14
eeschema/sch_label.cpp

@ -2406,11 +2406,11 @@ static struct SCH_LABEL_DESC
if( labelShapeEnum.Choices().GetCount() == 0 )
{
labelShapeEnum.Map( LABEL_SHAPE::LABEL_INPUT, _HKI( "Input" ) )
.Map( LABEL_SHAPE::LABEL_OUTPUT, _HKI( "Output" ) )
.Map( LABEL_SHAPE::LABEL_BIDI, _HKI( "Bidirectional" ) )
labelShapeEnum.Map( LABEL_SHAPE::LABEL_INPUT, _HKI( "Input" ) )
.Map( LABEL_SHAPE::LABEL_OUTPUT, _HKI( "Output" ) )
.Map( LABEL_SHAPE::LABEL_BIDI, _HKI( "Bidirectional" ) )
.Map( LABEL_SHAPE::LABEL_TRISTATE, _HKI( "Tri-state" ) )
.Map( LABEL_SHAPE::LABEL_PASSIVE, _HKI( "Passive" ) );
.Map( LABEL_SHAPE::LABEL_PASSIVE, _HKI( "Passive" ) );
}
PROPERTY_MANAGER& propMgr = PROPERTY_MANAGER::Instance();
@ -2461,9 +2461,9 @@ static struct SCH_DIRECTIVE_LABEL_DESC
if( flagShapeEnum.Choices().GetCount() == 0 )
{
flagShapeEnum.Map( FLAG_SHAPE::FLAG_DOT, _HKI( "Dot" ) )
.Map( FLAG_SHAPE::FLAG_CIRCLE, _HKI( "Circle" ) )
.Map( FLAG_SHAPE::FLAG_DIAMOND, _HKI( "Diamond" ) )
flagShapeEnum.Map( FLAG_SHAPE::FLAG_DOT, _HKI( "Dot" ) )
.Map( FLAG_SHAPE::FLAG_CIRCLE, _HKI( "Circle" ) )
.Map( FLAG_SHAPE::FLAG_DIAMOND, _HKI( "Diamond" ) )
.Map( FLAG_SHAPE::FLAG_RECTANGLE, _HKI( "Rectangle" ) );
}

18
eeschema/sch_line.cpp

@ -1232,10 +1232,10 @@ static struct SCH_LINE_DESC
if( lineStyleEnum.Choices().GetCount() == 0 )
{
lineStyleEnum.Map( LINE_STYLE::SOLID, _HKI( "Solid" ) )
.Map( LINE_STYLE::DASH, _HKI( "Dashed" ) )
.Map( LINE_STYLE::DOT, _HKI( "Dotted" ) )
.Map( LINE_STYLE::DASHDOT, _HKI( "Dash-Dot" ) )
lineStyleEnum.Map( LINE_STYLE::SOLID, _HKI( "Solid" ) )
.Map( LINE_STYLE::DASH, _HKI( "Dashed" ) )
.Map( LINE_STYLE::DOT, _HKI( "Dotted" ) )
.Map( LINE_STYLE::DASHDOT, _HKI( "Dash-Dot" ) )
.Map( LINE_STYLE::DASHDOTDOT, _HKI( "Dash-Dot-Dot" ) );
}
@ -1243,11 +1243,11 @@ static struct SCH_LINE_DESC
if( wireLineStyleEnum.Choices().GetCount() == 0 )
{
wireLineStyleEnum.Map( WIRE_STYLE::DEFAULT, _HKI( "Default" ) )
.Map( WIRE_STYLE::SOLID, _HKI( "Solid" ) )
.Map( WIRE_STYLE::DASH, _HKI( "Dashed" ) )
.Map( WIRE_STYLE::DOT, _HKI( "Dotted" ) )
.Map( WIRE_STYLE::DASHDOT, _HKI( "Dash-Dot" ) )
wireLineStyleEnum.Map( WIRE_STYLE::DEFAULT, _HKI( "Default" ) )
.Map( WIRE_STYLE::SOLID, _HKI( "Solid" ) )
.Map( WIRE_STYLE::DASH, _HKI( "Dashed" ) )
.Map( WIRE_STYLE::DOT, _HKI( "Dotted" ) )
.Map( WIRE_STYLE::DASHDOT, _HKI( "Dash-Dot" ) )
.Map( WIRE_STYLE::DASHDOTDOT, _HKI( "Dash-Dot-Dot" ) );
}

8
eeschema/sch_pin.cpp

@ -1883,10 +1883,10 @@ static struct SCH_PIN_DESC
if( orientationEnum.Choices().GetCount() == 0 )
{
orientationEnum.Map( PIN_ORIENTATION::PIN_RIGHT, _( "Right" ) )
.Map( PIN_ORIENTATION::PIN_LEFT, _( "Left" ) )
.Map( PIN_ORIENTATION::PIN_UP, _( "Up" ) )
.Map( PIN_ORIENTATION::PIN_DOWN, _( "Down" ) );
orientationEnum.Map( PIN_ORIENTATION::PIN_RIGHT, _HKI( "Right" ) )
.Map( PIN_ORIENTATION::PIN_LEFT, _HKI( "Left" ) )
.Map( PIN_ORIENTATION::PIN_UP, _HKI( "Up" ) )
.Map( PIN_ORIENTATION::PIN_DOWN, _HKI( "Down" ) );
}
auto isSymbolEditor =

6
eeschema/sch_shape.cpp

@ -514,10 +514,10 @@ static struct SCH_SHAPE_DESC
if( fillEnum.Choices().GetCount() == 0 )
{
fillEnum.Map( FILL_T::NO_FILL, _HKI( "None" ) )
.Map( FILL_T::FILLED_SHAPE, _HKI( "Body outline color" ) )
fillEnum.Map( FILL_T::NO_FILL, _HKI( "None" ) )
.Map( FILL_T::FILLED_SHAPE, _HKI( "Body outline color" ) )
.Map( FILL_T::FILLED_WITH_BG_BODYCOLOR, _HKI( "Body background color" ) )
.Map( FILL_T::FILLED_WITH_COLOR, _HKI( "Fill color" ) );
.Map( FILL_T::FILLED_WITH_COLOR, _HKI( "Fill color" ) );
}
PROPERTY_MANAGER& propMgr = PROPERTY_MANAGER::Instance();

8
eeschema/tools/sch_edit_tool.cpp

@ -607,7 +607,7 @@ bool SCH_EDIT_TOOL::Init()
[&]()
{
CONDITIONAL_MENU* menu = new CONDITIONAL_MENU( moveTool );
menu->SetTitle( _( "Transform Selection" ) );
menu->SetUntranslatedTitle( _HKI( "Transform Selection" ) );
menu->AddItem( SCH_ACTIONS::rotateCCW, orientCondition );
menu->AddItem( SCH_ACTIONS::rotateCW, orientCondition );
@ -621,7 +621,7 @@ bool SCH_EDIT_TOOL::Init()
[&]()
{
CONDITIONAL_MENU* menu = new CONDITIONAL_MENU( moveTool );
menu->SetTitle( _( "Attributes" ) );
menu->SetUntranslatedTitle( _HKI( "Attributes" ) );
menu->AddCheckItem( SCH_ACTIONS::setExcludeFromSimulation, S_C::ShowAlways );
menu->AddCheckItem( SCH_ACTIONS::setExcludeFromBOM, S_C::ShowAlways );
@ -635,7 +635,7 @@ bool SCH_EDIT_TOOL::Init()
[&]()
{
CONDITIONAL_MENU* menu = new CONDITIONAL_MENU( m_selectionTool );
menu->SetTitle( _( "Edit Main Fields" ) );
menu->SetUntranslatedTitle( _HKI( "Edit Main Fields" ) );
menu->AddItem( SCH_ACTIONS::editReference, S_C::SingleSymbol, 200 );
menu->AddItem( SCH_ACTIONS::editValue, S_C::SingleSymbol, 200 );
@ -648,7 +648,7 @@ bool SCH_EDIT_TOOL::Init()
[&]()
{
CONDITIONAL_MENU* menu = new CONDITIONAL_MENU( m_selectionTool );
menu->SetTitle( _( "Change To" ) );
menu->SetUntranslatedTitle( _HKI( "Change To" ) );
menu->SetIcon( BITMAPS::right );
menu->AddItem( SCH_ACTIONS::toLabel, toLabelCondition );

8
include/tool/action_menu.h

@ -61,6 +61,7 @@ public:
* @param aTitle is the new title.
*/
void SetTitle( const wxString& aTitle ) override;
void SetUntranslatedTitle( const wxString& aTitle ) { m_untranslatedTitle = aTitle; }
// Yes, it hides a non-virtual method in the parent class.
wxString GetTitle() const { return m_title; }
@ -170,7 +171,11 @@ public:
/**
* Used by some menus to just-in-time translate their titles.
*/
virtual void UpdateTitle() {}
virtual void UpdateTitle()
{
if( !m_untranslatedTitle.IsEmpty() )
m_title = wxGetTranslation( m_untranslatedTitle );
}
/**
* Clear the dirty flag on the menu and all descendants.
@ -265,6 +270,7 @@ protected:
/// Menu title.
wxString m_title;
wxString m_untranslatedTitle;
/// Optional icon.
BITMAPS m_icon;

8
pcbnew/footprint.cpp

@ -4365,10 +4365,10 @@ static struct FOOTPRINT_DESC
if( zcMap.Choices().GetCount() == 0 )
{
zcMap.Undefined( ZONE_CONNECTION::INHERITED );
zcMap.Map( ZONE_CONNECTION::INHERITED, _HKI( "Inherited" ) )
.Map( ZONE_CONNECTION::NONE, _HKI( "None" ) )
.Map( ZONE_CONNECTION::THERMAL, _HKI( "Thermal reliefs" ) )
.Map( ZONE_CONNECTION::FULL, _HKI( "Solid" ) )
zcMap.Map( ZONE_CONNECTION::INHERITED, _HKI( "Inherited" ) )
.Map( ZONE_CONNECTION::NONE, _HKI( "None" ) )
.Map( ZONE_CONNECTION::THERMAL, _HKI( "Thermal reliefs" ) )
.Map( ZONE_CONNECTION::FULL, _HKI( "Solid" ) )
.Map( ZONE_CONNECTION::THT_THERMAL, _HKI( "Thermal reliefs for PTH" ) );
}

6
pcbnew/pcb_barcode.cpp

@ -662,9 +662,9 @@ static struct PCB_BARCODE_DESC
{
eccMap.Undefined( BARCODE_ECC_T::L );
eccMap.Map( BARCODE_ECC_T::L, _HKI( "L (Low)" ) )
.Map( BARCODE_ECC_T::M, _HKI( "M (Medium)" ) )
.Map( BARCODE_ECC_T::Q, _HKI( "Q (Quartile)" ) )
.Map( BARCODE_ECC_T::H, _HKI( "H (High)" ) );
.Map( BARCODE_ECC_T::M, _HKI( "M (Medium)" ) )
.Map( BARCODE_ECC_T::Q, _HKI( "Q (Quartile)" ) )
.Map( BARCODE_ECC_T::H, _HKI( "H (High)" ) );
}
auto hasKnockout = []( INSPECTABLE* aItem ) -> bool

8
pcbnew/pcb_table.cpp

@ -647,10 +647,10 @@ static struct PCB_TABLE_DESC
if( lineStyleEnum.Choices().GetCount() == 0 )
{
lineStyleEnum.Map( LINE_STYLE::SOLID, _HKI( "Solid" ) )
.Map( LINE_STYLE::DASH, _HKI( "Dashed" ) )
.Map( LINE_STYLE::DOT, _HKI( "Dotted" ) )
.Map( LINE_STYLE::DASHDOT, _HKI( "Dash-Dot" ) )
lineStyleEnum.Map( LINE_STYLE::SOLID, _HKI( "Solid" ) )
.Map( LINE_STYLE::DASH, _HKI( "Dashed" ) )
.Map( LINE_STYLE::DOT, _HKI( "Dotted" ) )
.Map( LINE_STYLE::DASHDOT, _HKI( "Dash-Dot" ) )
.Map( LINE_STYLE::DASHDOTDOT, _HKI( "Dash-Dot-Dot" ) );
}

8
pcbnew/pcb_textbox.cpp

@ -817,10 +817,10 @@ static struct PCB_TEXTBOX_DESC
if( lineStyleEnum.Choices().GetCount() == 0 )
{
lineStyleEnum.Map( LINE_STYLE::SOLID, _HKI( "Solid" ) )
.Map( LINE_STYLE::DASH, _HKI( "Dashed" ) )
.Map( LINE_STYLE::DOT, _HKI( "Dotted" ) )
.Map( LINE_STYLE::DASHDOT, _HKI( "Dash-Dot" ) )
lineStyleEnum.Map( LINE_STYLE::SOLID, _HKI( "Solid" ) )
.Map( LINE_STYLE::DASH, _HKI( "Dashed" ) )
.Map( LINE_STYLE::DOT, _HKI( "Dotted" ) )
.Map( LINE_STYLE::DASHDOT, _HKI( "Dash-Dot" ) )
.Map( LINE_STYLE::DASHDOTDOT, _HKI( "Dash-Dot-Dot" ) );
}

2
pcbnew/router/router_tool.cpp

@ -504,7 +504,7 @@ bool ROUTER_TOOL::Init()
wxASSERT( frame );
auto& menu = m_menu->GetMenu();
menu.SetTitle( _( "Interactive Router" ) );
menu.SetUntranslatedTitle( _HKI( "Interactive Router" ) );
m_trackViaMenu = std::make_shared<TRACK_WIDTH_MENU>( *frame );
m_trackViaMenu->SetTool( this );

2
pcbnew/tools/align_distribute_tool.cpp

@ -61,7 +61,7 @@ bool ALIGN_DISTRIBUTE_TOOL::Init()
// Create a context menu and make it available through selection tool
m_placementMenu = new CONDITIONAL_MENU( this );
m_placementMenu->SetIcon( BITMAPS::align_items );
m_placementMenu->SetTitle( _( "Align/Distribute" ) );
m_placementMenu->SetUntranslatedTitle( _HKI( "Align/Distribute" ) );
const auto canAlign = SELECTION_CONDITIONS::MoreThan( 1 );
const auto canDistribute = SELECTION_CONDITIONS::MoreThan( 2 );

3
pcbnew/tools/board_inspection_tool.cpp

@ -61,7 +61,8 @@ BOARD_INSPECTION_TOOL::BOARD_INSPECTION_TOOL() :
class NET_CONTEXT_MENU : public ACTION_MENU
{
public:
NET_CONTEXT_MENU() : ACTION_MENU( true )
NET_CONTEXT_MENU() :
ACTION_MENU( true )
{
SetIcon( BITMAPS::show_ratsnest );
SetTitle( _( "Net Inspection Tools" ) );

2
pcbnew/tools/convert_tool.cpp

@ -263,7 +263,7 @@ bool CONVERT_TOOL::Init()
// Create a context menu and make it available through selection tool
m_menu = new CONDITIONAL_MENU( this );
m_menu->SetIcon( BITMAPS::convert );
m_menu->SetTitle( _( "Create from Selection" ) );
m_menu->SetUntranslatedTitle( _HKI( "Create from Selection" ) );
static const std::vector<KICAD_T> padTypes = { PCB_PAD_T };
static const std::vector<KICAD_T> toArcTypes = { PCB_ARC_T,

4
pcbnew/tools/edit_tool.cpp

@ -127,7 +127,7 @@ static std::shared_ptr<CONDITIONAL_MENU> makePositioningToolsMenu( TOOL_INTERACT
auto menu = std::make_shared<CONDITIONAL_MENU>( aTool );
menu->SetIcon( BITMAPS::special_tools );
menu->SetTitle( _( "Positioning Tools" ) );
menu->SetUntranslatedTitle( _HKI( "Positioning Tools" ) );
auto notMovingCondition = []( const SELECTION& aSelection )
{
@ -149,7 +149,7 @@ static std::shared_ptr<CONDITIONAL_MENU> makeShapeModificationMenu( TOOL_INTERAC
{
auto menu = std::make_shared<CONDITIONAL_MENU>( aTool );
menu->SetTitle( _( "Shape Modification" ) );
menu->SetUntranslatedTitle( _HKI( "Shape Modification" ) );
static const std::vector<KICAD_T> filletChamferTypes = { PCB_SHAPE_LOCATE_POLY_T,
PCB_SHAPE_LOCATE_RECT_T,

Loading…
Cancel
Save