MICROWAVE_TOOL_INFO getMicrowaveItemCreator( PCB_EDIT_FRAME& frame, int aParam )
{
    MICROWAVE_TOOL_INFO info;

    switch( aParam )
    {
    case MWAVE_TOOL_SIMPLE_ID::GAP:
        info.name =  _( "Add Gap" );
        info.toolId = ID_PCB_MUWAVE_TOOL_GAP_CMD;
        info.creatorFunc = [&frame] () {
            return std::unique_ptr<MODULE>( frame.Create_MuWaveComponent( 0 ) );
        };
        break;

    case MWAVE_TOOL_SIMPLE_ID::STUB:
        info.name =  _( "Add Stub" );
        info.toolId = ID_PCB_MUWAVE_TOOL_STUB_CMD;
        info.creatorFunc = [&frame] () {
            return std::unique_ptr<MODULE>( frame.Create_MuWaveComponent( 1 ) );
        };
        break;

    case MWAVE_TOOL_SIMPLE_ID::STUB_ARC:
        info.name =  _( "Add Stub (Arc)" );
        info.toolId = ID_PCB_MUWAVE_TOOL_STUB_ARC_CMD;
        info.creatorFunc = [&frame] () {
            return std::unique_ptr<MODULE>( frame.Create_MuWaveComponent( 2 ) );
        };
        break;

    case MWAVE_TOOL_SIMPLE_ID::FUNCTION_SHAPE:
        info.name =  _( "Add Polynomial Shape" );
        info.toolId = ID_PCB_MUWAVE_TOOL_FUNCTION_SHAPE_CMD;
        info.creatorFunc = [&frame] () {
            return std::unique_ptr<MODULE>( frame.Create_MuWavePolygonShape() );
        };
        break;

    default:
        // Avoid uninitilized value:
        info.toolId = 0;
        // info.name is already set to empty string
        break;
    };

    return info;
}