diff --git a/Sources/Controllers/TargetMenu/OATransportStopsBaseController.mm b/Sources/Controllers/TargetMenu/OATransportStopsBaseController.mm index 3345944d56..61d6588c3f 100644 --- a/Sources/Controllers/TargetMenu/OATransportStopsBaseController.mm +++ b/Sources/Controllers/TargetMenu/OATransportStopsBaseController.mm @@ -234,6 +234,7 @@ - (void) addRoutes:(NSMutableArray *)routes dataInterfac } r.distance = dist; + [r initStopIndex]; [routes addObject:r]; } } diff --git a/Sources/Controllers/TargetMenu/Routing/OATransportDetailsTableViewController.mm b/Sources/Controllers/TargetMenu/Routing/OATransportDetailsTableViewController.mm index 64e2e78957..5281a5ec5b 100644 --- a/Sources/Controllers/TargetMenu/Routing/OATransportDetailsTableViewController.mm +++ b/Sources/Controllers/TargetMenu/Routing/OATransportDetailsTableViewController.mm @@ -145,6 +145,7 @@ - (void)addLastItems:(NSMutableArray *)arr end:(OARTargetPoint *)end routeRes:(c - (void)buildCollapsibleCells:(NSMutableArray *)arr color:(UIColor *)color segment:(const std::shared_ptr &)segment stopType:(OATransportStopType *)stopType stops:(const std::vector, std::allocator > > &)stops section:(NSInteger)section { OATransportStopRoute *r = [[OATransportStopRoute alloc] init]; r.type = stopType; + [r initStopIndex]; NSMutableDictionary *collapsableCell = [NSMutableDictionary new]; NSMutableArray *subItems = [NSMutableArray new]; NSMutableArray *indexPaths = [NSMutableArray new]; diff --git a/Sources/Controllers/TargetMenu/Transport/OATransportRouteController.mm b/Sources/Controllers/TargetMenu/Transport/OATransportRouteController.mm index 69ac3b9323..bf620a0e11 100644 --- a/Sources/Controllers/TargetMenu/Transport/OATransportRouteController.mm +++ b/Sources/Controllers/TargetMenu/Transport/OATransportRouteController.mm @@ -71,19 +71,20 @@ - (void) leftControlButtonPressed { int previousStop = [self getPreviousStop]; if (previousStop != -1) - [self showTransportStop:_transportRoute.route->forwardStops[previousStop]]; + [self showTransportStop:_transportRoute.route->forwardStops[previousStop] stopIndex:previousStop]; } - (void) rightControlButtonPressed { int nextStop = [self getNextStop]; if (nextStop != -1) - [self showTransportStop:_transportRoute.route->forwardStops[nextStop]]; + [self showTransportStop:_transportRoute.route->forwardStops[nextStop] stopIndex:nextStop]; } -- (void) showTransportStop:(std::shared_ptr)stop +- (void) showTransportStop:(std::shared_ptr)stop stopIndex:(int)stopIndex { _transportRoute.stop = stop; + [_transportRoute setStopIndex:stopIndex]; _transportRoute.refStop = stop; [self refreshContextMenu]; @@ -189,22 +190,10 @@ - (ETopToolbarType) topToolbarType return ETopToolbarTypeFixed; } -- (int) getCurrentStop -{ - const auto& stops = _transportRoute.route->forwardStops; - for (int i = 0; i < stops.size(); i++) - { - auto stop = stops[i]; - if (stop->getName(_lang, _transliterate) == _transportRoute.stop->getName(_lang, _transliterate)) - return i; - } - return -1; -} - - (int) getNextStop { const auto& stops = _transportRoute.route->forwardStops; - int currentPos = [self getCurrentStop]; + int currentPos = [_transportRoute getStopIndex]; if (currentPos != -1 && currentPos + 1 < stops.size()) return currentPos + 1; @@ -213,7 +202,7 @@ - (int) getNextStop - (int) getPreviousStop { - int currentPos = [self getCurrentStop]; + int currentPos = [_transportRoute getStopIndex]; if (currentPos > 0) return currentPos - 1; @@ -223,7 +212,7 @@ - (int) getPreviousStop - (void) buildRows:(NSMutableArray *)rows { const auto& stops = _transportRoute.route->forwardStops; - int currentStop = [self getCurrentStop]; + int currentStop = [_transportRoute getStopIndex]; UIImage *defaultIcon = [OATargetInfoViewController getIcon:[NSString stringWithFormat:@"%@.png", !_transportRoute.type ? @"mx_route_bus_ref" : _transportRoute.type.resId]]; int startPosition = 0; if (!_transportRoute.showWholeRoute && currentStop > 1) @@ -324,7 +313,7 @@ - (void)onRowClick:(OATargetMenuViewController *)sender rowInfo:(OARowInfo *)row const auto& stops = _transportRoute.route->forwardStops; int index = [[rowInfo.key substringFromIndex:5] intValue]; if (index < stops.size()) - [self showTransportStop:stops[index]]; + [self showTransportStop:stops[index] stopIndex:-1]; } } diff --git a/Sources/Transport/OATransportStopRoute.h b/Sources/Transport/OATransportStopRoute.h index d686e152c4..3033835fce 100644 --- a/Sources/Transport/OATransportStopRoute.h +++ b/Sources/Transport/OATransportStopRoute.h @@ -24,6 +24,7 @@ UIKIT_EXTERN NSString *const OATransportStopRouteArrow; @property (nonatomic) NSString *desc; @property (nonatomic, assign) std::shared_ptr route; @property (nonatomic, assign) std::shared_ptr stop; +@property (nonatomic) int stopIndex; @property (nonatomic) int distance; @property (nonatomic) BOOL showWholeRoute; @@ -32,6 +33,10 @@ UIKIT_EXTERN NSString *const OATransportStopRouteArrow; - (UIColor *) getColor:(BOOL)nightMode; - (NSString *) getTypeStr; +- (void) initStopIndex; +- (int) getStopIndex; +- (void) setStopIndex:(int)stopIndex; + - (OATransportStopRoute *) clone; @end diff --git a/Sources/Transport/OATransportStopRoute.mm b/Sources/Transport/OATransportStopRoute.mm index 087af2c33e..baed2e13bf 100644 --- a/Sources/Transport/OATransportStopRoute.mm +++ b/Sources/Transport/OATransportStopRoute.mm @@ -15,6 +15,7 @@ #import "OAColors.h" #import "OAUtilities.h" #import "OAOsmAndFormatter.h" +#import "OAAppSettings.h" #include #include @@ -32,6 +33,16 @@ @interface OATransportStopRoute () @implementation OATransportStopRoute +- (instancetype) init +{ + self = [super init]; + if (self) + { + _stopIndex = -1; + } + return self; +} + - (NSString *) getDescription:(BOOL)useDistance { OsmAndAppInstance app = [OsmAndApp instance]; @@ -169,9 +180,50 @@ - (OATransportStopRoute *) clone res.stop = self.stop; res.type = self.type; res.desc = self.desc; + res.stopIndex = self.stopIndex; res.distance = self.distance; res.showWholeRoute = self. showWholeRoute; return res; } +- (void) initStopIndex +{ + if (_route == nullptr || _stop == nullptr) + return; + + NSString *_prefLang = [OAAppSettings sharedManager].settingPrefMapLanguage.get; + BOOL _transliterate = [OAAppSettings sharedManager].settingMapLanguageTranslit.get; + QString _lang = QString::fromNSString(_prefLang); + + auto& stops = _route->forwardStops; + for (int i = 0; i < stops.size(); i++) + { + auto stop = stops[i]; + if (_stop->getName(_lang, _transliterate) == stop->getName(_lang, _transliterate)) + { + _stopIndex = i; + break; + } + } + if (_stopIndex == -1) + _stopIndex = 0; +} + +- (int) getStopIndex +{ + if (_stopIndex == -1) + [self initStopIndex]; + return _stopIndex; +} + +- (void) setStopIndex:(int)stopIndex +{ + if (_route == nullptr || _stop == nullptr) + return; + if (_stopIndex == -1) + [self initStopIndex]; + else if (_stopIndex < _route->forwardStops.size()) + _stopIndex = stopIndex; +} + @end