Skip to content

Refactor map objects selecting #4611

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 38 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
da96403
draft commit
nnngrach May 9, 2025
c40fba2
refactor
nnngrach May 14, 2025
4b56e11
bugfix
nnngrach May 14, 2025
dc544f3
sync code
nnngrach May 14, 2025
7e96a60
update map poi search
nnngrach May 15, 2025
8d51b8e
code sync
nnngrach May 16, 2025
41f058f
refactor
nnngrach May 16, 2025
76180e7
refactor
nnngrach May 19, 2025
e1a5d81
refactor
nnngrach May 19, 2025
c1e2901
refactor
nnngrach May 19, 2025
e50c23e
code sync
nnngrach May 19, 2025
6463f4a
code sync
nnngrach May 20, 2025
70e63ad
debug
nnngrach May 20, 2025
0d23fa7
debug
nnngrach May 21, 2025
6e51364
layers selecting implementation
nnngrach May 26, 2025
d00d9a6
wpt layer sync
nnngrach May 26, 2025
aa94c94
map markers layer sync
nnngrach May 27, 2025
e271dd8
bugfix
nnngrach May 27, 2025
0afdfc0
add osm notes selection
nnngrach May 28, 2025
2da9584
sync mapillary layer
nnngrach May 29, 2025
6682665
gpx layer update
nnngrach May 30, 2025
d79a304
refactor
nnngrach Jun 2, 2025
621d723
deleted old code
nnngrach Jun 2, 2025
a478b2a
clean code
nnngrach Jun 2, 2025
12a229c
wiki point context menu fixes
nnngrach Jun 2, 2025
0614622
Update OAPOI.mm
nnngrach Jun 2, 2025
6954fb0
Update OAPOI.mm
nnngrach Jun 2, 2025
3edbbad
Merge branch 'master' into select_ski_tracks_on_map
nnngrach Jun 2, 2025
aa2fc0a
merge conflict fix
nnngrach Jun 2, 2025
e1d2efb
review fix
nnngrach Jun 4, 2025
4ab8b34
review fix
nnngrach Jun 4, 2025
c3fa963
yellow warning fix.
nnngrach Jun 4, 2025
585d8e5
review fix
nnngrach Jun 4, 2025
4b819a3
review fix
nnngrach Jun 4, 2025
3167fa7
review fix
nnngrach Jun 4, 2025
deeed19
review fix
nnngrach Jun 5, 2025
4ecbf5f
refactor isEmpty() methods
nnngrach Jun 5, 2025
24a9451
Update OAWikiMenuViewController.m
nnngrach Jun 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions OsmAnd.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -8135,6 +8135,8 @@
32C1C4E92DD4C4F200A053D4 /* OAMapSelectionResult.mm */,
32C1C4EA2DD4C4F200A053D4 /* OAPlaceDetailsObject.h */,
32C1C4EB2DD4C4F200A053D4 /* OAPlaceDetailsObject.mm */,
DA5A7F0C26C563A400F274C7 /* OASelectedGPXHelper.h */,
DA5A7F1426C563A400F274C7 /* OASelectedGPXHelper.mm */,
32F6B4292DEDD703002DBCEE /* OASelectedGpxPoint.h */,
32F6B42A2DEDD709002DBCEE /* OASelectedGpxPoint.mm */,
32F6B4262DEDD637002DBCEE /* OASelectedMapObject.h */,
Expand Down Expand Up @@ -12529,8 +12531,6 @@
children = (
32C1C4EC2DD4C4F200A053D4 /* Helpers */,
DA5A7ECE26C563A400F274C7 /* Layers */,
46E32494284A6AC800F95084 /* Toolbars */,
DA5A7F1526C563A400F274C7 /* Widgets */,
DA5A7F0226C563A400F274C7 /* OADestination.h */,
DA5A7F1026C563A400F274C7 /* OADestination.mm */,
DA5A857426C5680700F274C7 /* OADestinationBarWidget.xib */,
Expand Down Expand Up @@ -12567,11 +12567,11 @@
DA21F1BA29BA101E004985BA /* OANetworkRouteDrawable.mm */,
DA35963029B0A00A009DF4D6 /* OARouteKey.h */,
DA35963129B0A00A009DF4D6 /* OARouteKey.mm */,
DA5A7F0C26C563A400F274C7 /* OASelectedGPXHelper.h */,
DA5A7F1426C563A400F274C7 /* OASelectedGPXHelper.mm */,
DA5A7F0F26C563A400F274C7 /* OAToolbarViewController.h */,
DA5A7F1126C563A400F274C7 /* OAToolbarViewController.mm */,
DA5A7F0026C563A400F274C7 /* OAToolbarViewController.xib */,
46E32494284A6AC800F95084 /* Toolbars */,
DA5A7F1526C563A400F274C7 /* Widgets */,
);
path = Map;
sourceTree = "<group>";
Expand All @@ -12584,6 +12584,8 @@
DA5A7EE326C563A400F274C7 /* OAContextMenuLayer.h */,
DA5A7EEF26C563A400F274C7 /* OAContextMenuLayer.mm */,
DA5A7EF426C563A400F274C7 /* OAContextMenuProvider.h */,
C5DF39B32DBB6CA800332496 /* OACoordinatesGridLayer.h */,
C5DF39B42DBB6CA800332496 /* OACoordinatesGridLayer.mm */,
DA5A7EEA26C563A400F274C7 /* OADestinationsLayer.h */,
DA5A7EE626C563A400F274C7 /* OADestinationsLayer.mm */,
DA5A7EF626C563A400F274C7 /* OADownloadedRegionsLayer.h */,
Expand Down Expand Up @@ -12637,8 +12639,6 @@
8A3BE84E27DBB2AC00C5DFE2 /* OAWeatherContourLayer.mm */,
8AE943B127A28BE900961319 /* OAWeatherRasterLayer.h */,
8AE943B227A28BE900961319 /* OAWeatherRasterLayer.mm */,
C5DF39B32DBB6CA800332496 /* OACoordinatesGridLayer.h */,
C5DF39B42DBB6CA800332496 /* OACoordinatesGridLayer.mm */,
);
path = Layers;
sourceTree = "<group>";
Expand Down
8 changes: 7 additions & 1 deletion Sources/Controllers/Map/Helpers/OAClickableWay.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,16 @@
// Copyright © 2025 OsmAnd. All rights reserved.
//

NS_ASSUME_NONNULL_BEGIN


@interface OAClickableWay : NSObject

@property (nonatomic) long long osmId;

- (NSString *) getGpxFileName;
- (NSString *)getGpxFileName;

@end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use macros in .h files

NS_ASSUME_NONNULL_BEGIN
NS_ASSUME_NONNULL_END

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • (NSString *)getGpxFileName;



NS_ASSUME_NONNULL_END
4 changes: 2 additions & 2 deletions Sources/Controllers/Map/Helpers/OAClickableWayHelper+cpp.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@

@interface OAClickableWayHelper(cpp)

- (BOOL) isClickableWay:(const std::shared_ptr<const OsmAnd::MapObject>)obfMapObject tags:(NSDictionary<NSString *, NSString *> *)tags;
- (BOOL)isClickableWay:(const std::shared_ptr<const OsmAnd::MapObject>)obfMapObject tags:(NSDictionary<NSString *, NSString *> *)tags;

- (OAClickableWay *) loadClickableWay:(CLLocation *)selectedLatLon obfMapObject:(const std::shared_ptr<const OsmAnd::MapObject>)obfMapObject tags:(NSDictionary<NSString *, NSString *> *)tags;
- (OAClickableWay *)loadClickableWay:(CLLocation *)selectedLatLon obfMapObject:(const std::shared_ptr<const OsmAnd::MapObject>)obfMapObject tags:(NSDictionary<NSString *, NSString *> *)tags;

@end
10 changes: 8 additions & 2 deletions Sources/Controllers/Map/Helpers/OAClickableWayHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,18 @@

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN


@class OAClickableWay, OARenderedObject;

@interface OAClickableWayHelper : NSObject

- (id) getContextMenuProvider;
- (id)getContextMenuProvider;

- (BOOL) isClickableWay:(OARenderedObject *)renderedObject;
- (BOOL)isClickableWay:(OARenderedObject *)renderedObject;

@end


NS_ASSUME_NONNULL_END
25 changes: 19 additions & 6 deletions Sources/Controllers/Map/Helpers/OAClickableWayHelper.mm
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,20 @@ - (instancetype) init

- (void) commonInit
{
_clickableTags = [NSSet setWithObjects:@"piste:type", @"piste:difficulty", @"mtb:scale", @"dirtbike:scale", nil];
_requiredTagsAny = [NSSet setWithObjects:@"name", @"ref", @"piste:name", @"mtb:name", nil];
_clickableTags = [NSSet setWithArray:@[
@"piste:type",
@"piste:difficulty",
@"mtb:scale",
@"dirtbike:scale"
]];

_requiredTagsAny = [NSSet setWithArray:@[
@"name",
@"ref",
@"piste:name",
@"mtb:name"
]];

_forbiddenTags = @{
@"area": @"yes",
@"access": @"no",
Expand Down Expand Up @@ -89,11 +101,12 @@ - (OAClickableWay *) loadClickableWay:(CLLocation *)selectedLatLon obfMapObject:

- (BOOL) isClickableWayTags:(NSDictionary<NSString *, NSString *> *)tags
{
for (NSString *forbiddenKey in _forbiddenTags.allKeys)
for (NSString *forbiddenKey in _forbiddenTags)
{
NSString *forbiddenValue = _forbiddenTags[forbiddenKey];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add NSString *tagValue = tags[forbiddenKey];

if ([forbiddenValue isEqualToString:tags[forbiddenKey]] ||
([@"*" isEqualToString:forbiddenValue] && tags[forbiddenKey]))
NSString *tagValue = tags[forbiddenKey];
if ([forbiddenValue isEqualToString:tagValue] ||
([@"*" isEqualToString:forbiddenValue] && tagValue))
{
return NO;
}
Expand All @@ -103,7 +116,7 @@ - (BOOL) isClickableWayTags:(NSDictionary<NSString *, NSString *> *)tags
{
if (tags[required])
{
for (NSString *key in tags.allKeys)
for (NSString *key in tags)
{
if ([_clickableTags containsObject:key])
return YES;
Expand Down
19 changes: 12 additions & 7 deletions Sources/Controllers/Map/Helpers/OAMapSelectionHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,22 @@
// Copyright © 2025 OsmAnd. All rights reserved.
//

NS_ASSUME_NONNULL_BEGIN

@class OAMapSelectionResult, OAPOI;

@interface OAMapSelectionHelper : NSObject
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

up (macros)


- (OAMapSelectionResult *) collectObjectsFromMap:(CGPoint)point showUnknownLocation:(BOOL)showUnknownLocation;
- (OAMapSelectionResult *)collectObjectsFromMap:(CGPoint)point showUnknownLocation:(BOOL)showUnknownLocation;

+ (OAPOI *) findAmenity:(CLLocation *)latLon names:(NSArray<NSString *> *)names obfId:(uint64_t)obfId;
+ (OAPOI *) findAmenity:(CLLocation *)latLon names:(NSArray<NSString *> *)names obfId:(uint64_t)obfId radius:(int)radius;
+ (NSArray<OAPOI *> *) findAmenities:(CLLocation *)latLon;
+ (OAPOI *) findAmenityByOsmId:(CLLocation *)latLon obfId:(uint64_t)obfId;
+ (OAPOI *) findAmenityByOsmId:(NSArray<OAPOI *> *)amenities obfId:(uint64_t)obfId point:(CLLocation *)point;
+ (OAPOI *) findAmenityByName:(NSArray<OAPOI *> *)amenities names:(NSArray<NSString *> *)names;
+ (OAPOI *)findAmenity:(CLLocation *)latLon names:(NSArray<NSString *> *)names obfId:(uint64_t)obfId;
+ (OAPOI *)findAmenity:(CLLocation *)latLon names:(NSArray<NSString *> *)names obfId:(uint64_t)obfId radius:(int)radius;
+ (NSArray<OAPOI *> *)findAmenities:(CLLocation *)latLon;
+ (OAPOI *)findAmenityByOsmId:(CLLocation *)latLon obfId:(uint64_t)obfId;
+ (OAPOI *)findAmenityByOsmId:(NSArray<OAPOI *> *)amenities obfId:(uint64_t)obfId point:(CLLocation *)point;
+ (OAPOI *)findAmenityByName:(NSArray<OAPOI *> *)amenities names:(NSArray<NSString *> *)names;

@end


NS_ASSUME_NONNULL_END
18 changes: 10 additions & 8 deletions Sources/Controllers/Map/Helpers/OAMapSelectionHelper.mm
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ - (void) collectObjectsFromLayers:(OAMapSelectionResult *)result unknownLocation

for (OAMapLayer *layer in layers)
{
//Android doesn't have that layer here
// Android doesn't have that layer here
if ([layer isKindOfClass:OAOsmBugsLayer.class])
continue;

Expand Down Expand Up @@ -251,7 +251,7 @@ - (CLLocation *) parsePoiLatLon:(NSString *)value
if (!value)
return nil;

OASKGeoParsedPoint * p = [OASKMapUtils.shared decodeShortLinkStringS:value];
OASKGeoParsedPoint *p = [OASKMapUtils.shared decodeShortLinkStringS:value];
return [[CLLocation alloc] initWithLatitude:p.getLatitude longitude:p.getLongitude];
}

Expand Down Expand Up @@ -303,7 +303,7 @@ - (void) addRenderedObject:(OAMapSelectionResult *)result symbolInfo:(OsmAnd::IM
{
[renderedObject setIconRes:rasterMapSymbol->content.toNSString()];
}
for (NSString *key in tags.allKeys)
for (NSString *key in tags)
{
renderedObject.tags[key] = tags[key];

Expand Down Expand Up @@ -405,9 +405,9 @@ - (BOOL) isUniqueTravelGpx:(NSMutableArray<OASelectedMapObject *> *)selectedObje
[selectedObject.provider isKindOfClass:OAGPXLayer.class])
{
NSArray *pair = (NSArray *)selectedObject.object;
if ([pair[0] isKindOfClass:OATravelGpx.class])
if ([pair firstObject] && [[pair firstObject] isKindOfClass:OATravelGpx.class])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's better to extract [pair firstObject] into a let variable. Also, checking with if ([yourLet isKindOfClass:OATravelGpx.class]) {} is sufficient.

{
OATravelGpx *gpx = pair[0];
OATravelGpx *gpx = [pair firstObject];

// TODO: test this isEqual method
if (travelGpx == gpx)
Expand Down Expand Up @@ -555,7 +555,7 @@ - (void) processTransportStops:(NSMutableArray<OASelectedMapObject *> *)selected
return tagsMap;
}

+ (OAPOI *) findAmenity:(CLLocation *)latLon names:(NSMutableArray<NSString *> *)names obfId:(uint64_t)obfId
+ (OAPOI *) findAmenity:(CLLocation *)latLon names:(NSArray<NSString *> *)names obfId:(uint64_t)obfId
{
int searchRadius = [ObfConstants isIdFromRelation:obfId >> AMENITY_ID_RIGHT_SHIFT] ?
AMENITY_SEARCH_RADIUS_FOR_RELATION :
Expand All @@ -570,7 +570,8 @@ + (OAPOI *) findAmenity:(CLLocation *)latLon names:(NSArray<NSString *> *)names
OsmAnd::PointI point31 = OsmAnd::Utilities::convertLatLonTo31(OsmAnd::LatLon(latLon.coordinate.latitude, latLon.coordinate.longitude));
OsmAnd::AreaI rect = (OsmAnd::AreaI)OsmAnd::Utilities::boundingBox31FromAreaInMeters(radius, point31);

NSArray<OAPOI *> *amenities = [OAPOIHelper findPOI:OASearchPoiTypeFilter.acceptAllPoiTypeFilter additionalFilter:nil bbox31:rect currentLocation:point31 includeTravel:YES matcher:nil publish:nil];
BOOL (^nilBlock)(OAPOI *poi) = nil;
NSArray<OAPOI *> *amenities = [OAPOIHelper findPOI:OASearchPoiTypeFilter.acceptAllPoiTypeFilter additionalFilter:nil bbox31:rect currentLocation:point31 includeTravel:YES matcher:nil publish:nilBlock];
OAPOI *amenity = [self findAmenityByOsmId:amenities obfId:osmId point:latLon];

if (!amenity && names.count > 0)
Expand All @@ -584,7 +585,8 @@ + (OAPOI *) findAmenity:(CLLocation *)latLon names:(NSArray<NSString *> *)names
{
OsmAnd::PointI point31 = OsmAnd::Utilities::convertLatLonTo31(OsmAnd::LatLon(latLon.coordinate.latitude, latLon.coordinate.longitude));
OsmAnd::AreaI rect = (OsmAnd::AreaI)OsmAnd::Utilities::boundingBox31FromAreaInMeters(AMENITY_SEARCH_RADIUS, point31);
return [OAPOIHelper findPOI:OASearchPoiTypeFilter.acceptAllPoiTypeFilter additionalFilter:nil bbox31:rect currentLocation:point31 includeTravel:YES matcher:nil publish:nil];
BOOL (^nilBlock)(OAPOI *poi) = nil;
return [OAPOIHelper findPOI:[OASearchPoiTypeFilter acceptAllPoiTypeFilter] additionalFilter:nil bbox31:rect currentLocation:point31 includeTravel:YES matcher:nil publish:nilBlock];
}

+ (OAPOI *) findAmenityByOsmId:(CLLocation *)latLon obfId:(uint64_t)obfId
Expand Down
22 changes: 14 additions & 8 deletions Sources/Controllers/Map/Helpers/OAMapSelectionResult.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,23 @@

#import "OAContextMenuProvider.h"

NS_ASSUME_NONNULL_BEGIN


@interface OAMapSelectionResult : NSObject

@property CLLocation *objectLatLon;

- (instancetype) initWithPoint:(CGPoint)point;
- (CGPoint) getPoint;
- (CLLocation *) getPointLatLon;
- (NSMutableArray<OASelectedMapObject *> *) getAllObjects;
- (NSMutableArray<OASelectedMapObject *> *) getProcessedObjects;
- (void) collect:(id)object provider:(id)provider;
- (void) groupByOsmIdAndWikidataId;
- (BOOL) isEmpty;
- (instancetype)initWithPoint:(CGPoint)point;
- (CGPoint)getPoint;
- (CLLocation *)getPointLatLon;
- (NSMutableArray<OASelectedMapObject *> *)getAllObjects;
- (NSMutableArray<OASelectedMapObject *> *)getProcessedObjects;
- (void)collect:(id)object provider:(id _Nullable)provider;
- (void)groupByOsmIdAndWikidataId;
- (BOOL)isEmpty;

@end


NS_ASSUME_NONNULL_END
26 changes: 16 additions & 10 deletions Sources/Controllers/Map/Helpers/OAPlaceDetailsObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@

#import "OAContextMenuProvider.h"

NS_ASSUME_NONNULL_BEGIN


@class OAPOI, OASelectedMapObject, OAPlaceDetailsObject;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

macros


@interface OAPlaceDetailsObject : NSObject
Expand All @@ -16,17 +19,20 @@
@property (nonatomic, readonly) NSMutableSet<NSString *> *wikidataIds;
@property (nonatomic, readonly) NSMutableArray<OASelectedMapObject *> *selectedObjects;

- (instancetype) initWithObject:(id<OAContextMenuProvider>)object provider:(id<OAContextMenuProvider>)provider;
- (instancetype)initWithObject:(id<OAContextMenuProvider>)object provider:(id<OAContextMenuProvider>)provider;

- (OAPOI *) getSyntheticAmenity;
- (CLLocation *) getLocation;
- (NSMutableArray<OASelectedMapObject *> *) getSelectedObjects;
- (void) addObject:(id)object provider:(id<OAContextMenuProvider>)provider;
- (BOOL) overlapsWith:(id)object;
- (void) merge:(OAPlaceDetailsObject*)other;
- (void) combineData;
- (void) processAmenity:(OAPOI *)amenity contentLocales:(NSMutableSet<NSString *> *)contentLocales;
- (OAPOI *)getSyntheticAmenity;
- (CLLocation *)getLocation;
- (NSMutableArray<OASelectedMapObject *> *)getSelectedObjects;
- (void)addObject:(id)object provider:(id<OAContextMenuProvider>)provider;
- (BOOL)overlapsWith:(id)object;
- (void)merge:(OAPlaceDetailsObject*)other;
- (void)combineData;
- (void)processAmenity:(OAPOI *)amenity contentLocales:(NSMutableSet<NSString *> *)contentLocales;

+ (BOOL) shouldSkip:(id) object;
+ (BOOL)shouldSkip:(id) object;

@end


NS_ASSUME_NONNULL_END
10 changes: 5 additions & 5 deletions Sources/Controllers/Map/Helpers/OAPlaceDetailsObject.mm
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ - (void) addObject:(id)object provider:(id<OAContextMenuProvider>)provider
}
if ([object isKindOfClass:OAPOI.class])
{
OAPOI *amenity = (OAPOI*) object;
OAPOI *amenity = (OAPOI *) object;
NSString *wikidata = [amenity getWikidata];
if (![NSString isEmpty:wikidata])
{
Expand All @@ -93,7 +93,7 @@ - (BOOL) overlapsWith:(id)object
NSString *wikidata = nil;
if ([object isKindOfClass:OAPOI.class])
{
OAPOI *amenity = (OAPOI*) object;
OAPOI *amenity = (OAPOI *) object;
wikidata = [amenity getWikidata];
if (![NSString isEmpty:wikidata])
{
Expand All @@ -120,7 +120,7 @@ - (void) combineData
id object = selectedObject.object;
if ([object isKindOfClass:OAPOI.class])
{
OAPOI *amenity = (OAPOI*) object;
OAPOI *amenity = (OAPOI *) object;
[self processAmenity:amenity contentLocales:contentLocales];
}
}
Expand Down Expand Up @@ -174,12 +174,12 @@ - (void) processAmenity:(OAPOI *)amenity contentLocales:(NSMutableSet<NSString *
{
[_syntheticAmenity setTravelEloNumber:travelElo];
}
NSMutableArray<NSNumber *> * x= amenity.x;
NSMutableArray<NSNumber *> *x = amenity.x;
if ([NSArray isEmpty:_syntheticAmenity.x] && ![NSArray isEmpty:x])
{
[_syntheticAmenity.x addObjectsFromArray:x];
}
NSMutableArray<NSNumber *> * y= amenity.y;
NSMutableArray<NSNumber *> *y = amenity.y;
if ([NSArray isEmpty:_syntheticAmenity.y] && ![NSArray isEmpty:y])
{
[_syntheticAmenity.y addObjectsFromArray:y];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

NS_ASSUME_NONNULL_BEGIN


@class OASGpxFile, OASWptPt;

@interface OASelectedGPXHelper : NSObject
Expand All @@ -38,4 +39,5 @@ NS_ASSUME_NONNULL_BEGIN

@end


NS_ASSUME_NONNULL_END
Loading