mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-31 10:03:46 +00:00
[ios] Format all Obj C code via clang-format
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
This commit is contained in:
@@ -2,12 +2,12 @@
|
||||
#import "MWMAddPlaceNavigationBar.h"
|
||||
#import "MWMMapDownloadDialog.h"
|
||||
#import "MWMMapViewControlsManager+AddPlace.h"
|
||||
#import "MWMMapWidgetsHelper.h"
|
||||
#import "MWMNetworkPolicy+UI.h"
|
||||
#import "MWMPlacePageManager.h"
|
||||
#import "MWMPlacePageProtocol.h"
|
||||
#import "MWMSideButtons.h"
|
||||
#import "MWMTrafficButtonViewController.h"
|
||||
#import "MWMMapWidgetsHelper.h"
|
||||
#import "MapViewController.h"
|
||||
#import "MapsAppDelegate.h"
|
||||
#import "SwiftBridge.h"
|
||||
@@ -22,8 +22,9 @@
|
||||
|
||||
#include "map/place_page_info.hpp"
|
||||
|
||||
namespace {
|
||||
NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
namespace
|
||||
{
|
||||
NSString * const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
} // namespace
|
||||
|
||||
@interface MWMMapViewControlsManager () <BottomMenuDelegate>
|
||||
@@ -45,11 +46,13 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
|
||||
@implementation MWMMapViewControlsManager
|
||||
|
||||
+ (MWMMapViewControlsManager *)manager {
|
||||
+ (MWMMapViewControlsManager *)manager
|
||||
{
|
||||
return [MapViewController sharedController].controlsManager;
|
||||
}
|
||||
|
||||
- (instancetype)initWithParentController:(MapViewController *)controller {
|
||||
- (instancetype)initWithParentController:(MapViewController *)controller
|
||||
{
|
||||
if (!controller)
|
||||
return nil;
|
||||
self = [super init];
|
||||
@@ -67,29 +70,31 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
return self;
|
||||
}
|
||||
|
||||
- (UIStatusBarStyle)preferredStatusBarStyle {
|
||||
- (UIStatusBarStyle)preferredStatusBarStyle
|
||||
{
|
||||
BOOL const isNavigationUnderStatusBar = self.navigationManager.state != MWMNavigationDashboardStateHidden &&
|
||||
self.navigationManager.state != MWMNavigationDashboardStateNavigation;
|
||||
BOOL const isMenuViewUnderStatusBar = self.menuState == MWMBottomMenuStateActive;
|
||||
BOOL const isDirectionViewUnderStatusBar = !self.isDirectionViewHidden;
|
||||
BOOL const isAddPlaceUnderStatusBar =
|
||||
[self.ownerController.view hasSubviewWithViewClass:[MWMAddPlaceNavigationBar class]];
|
||||
[self.ownerController.view hasSubviewWithViewClass:[MWMAddPlaceNavigationBar class]];
|
||||
BOOL const isNightMode = [UIColor isNightMode];
|
||||
BOOL const isSomethingUnderStatusBar = isNavigationUnderStatusBar ||
|
||||
isDirectionViewUnderStatusBar || isMenuViewUnderStatusBar ||
|
||||
isAddPlaceUnderStatusBar;
|
||||
BOOL const isSomethingUnderStatusBar = isNavigationUnderStatusBar || isDirectionViewUnderStatusBar ||
|
||||
isMenuViewUnderStatusBar || isAddPlaceUnderStatusBar;
|
||||
|
||||
return isSomethingUnderStatusBar || isNightMode ? UIStatusBarStyleLightContent : UIStatusBarStyleDefault;
|
||||
}
|
||||
|
||||
#pragma mark - Layout
|
||||
|
||||
- (UIView *)anchorView {
|
||||
- (UIView *)anchorView
|
||||
{
|
||||
return self.tabBarController.view;
|
||||
}
|
||||
|
||||
- (void)viewWillTransitionToSize:(CGSize)size
|
||||
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
|
||||
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
|
||||
{
|
||||
[self.trafficButton viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
||||
[self.trackRecordingButton viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
||||
[self.tabBarController viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
||||
@@ -97,14 +102,16 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
|
||||
#pragma mark - MWMPlacePageViewManager
|
||||
|
||||
- (void)searchOnMap:(SearchQuery *)query {
|
||||
- (void)searchOnMap:(SearchQuery *)query
|
||||
{
|
||||
if (![self search:query])
|
||||
return;
|
||||
|
||||
[self.searchManager startSearchingWithIsRouting:NO];
|
||||
}
|
||||
|
||||
- (BOOL)search:(SearchQuery *)query {
|
||||
- (BOOL)search:(SearchQuery *)query
|
||||
{
|
||||
if (query.text.length == 0)
|
||||
return NO;
|
||||
|
||||
@@ -114,22 +121,26 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
}
|
||||
|
||||
#pragma mark - BottomMenu
|
||||
- (void)actionDownloadMaps:(MWMMapDownloaderMode)mode {
|
||||
- (void)actionDownloadMaps:(MWMMapDownloaderMode)mode
|
||||
{
|
||||
[self.ownerController openMapsDownloader:mode];
|
||||
}
|
||||
|
||||
- (void)didFinishAddingPlace {
|
||||
- (void)didFinishAddingPlace
|
||||
{
|
||||
self.isAddingPlace = NO;
|
||||
self.trafficButtonHidden = NO;
|
||||
self.menuState = MWMBottomMenuStateInactive;
|
||||
}
|
||||
|
||||
- (void)addPlace {
|
||||
- (void)addPlace
|
||||
{
|
||||
[self addPlace:NO position:nullptr];
|
||||
}
|
||||
|
||||
- (void)addPlace:(BOOL)isBusiness position:(m2::PointD const *)optionalPosition {
|
||||
MapViewController *ownerController = self.ownerController;
|
||||
- (void)addPlace:(BOOL)isBusiness position:(m2::PointD const *)optionalPosition
|
||||
{
|
||||
MapViewController * ownerController = self.ownerController;
|
||||
|
||||
self.isAddingPlace = YES;
|
||||
[self.searchManager close];
|
||||
@@ -139,25 +150,24 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
[ownerController dismissPlacePage];
|
||||
|
||||
[MWMAddPlaceNavigationBar showInSuperview:ownerController.view
|
||||
isBusiness:isBusiness
|
||||
position:optionalPosition
|
||||
doneBlock:^{
|
||||
if ([MWMFrameworkHelper canEditMapAtViewportCenter])
|
||||
[ownerController performSegueWithIdentifier:kMapToCategorySelectorSegue sender:nil];
|
||||
else
|
||||
[ownerController.alertController presentIncorrectFeauturePositionAlert];
|
||||
isBusiness:isBusiness
|
||||
position:optionalPosition
|
||||
doneBlock:^{
|
||||
if ([MWMFrameworkHelper canEditMapAtViewportCenter])
|
||||
[ownerController performSegueWithIdentifier:kMapToCategorySelectorSegue sender:nil];
|
||||
else
|
||||
[ownerController.alertController presentIncorrectFeauturePositionAlert];
|
||||
|
||||
[self didFinishAddingPlace];
|
||||
}
|
||||
cancelBlock:^{
|
||||
[self didFinishAddingPlace];
|
||||
}];
|
||||
[self didFinishAddingPlace];
|
||||
}
|
||||
cancelBlock:^{ [self didFinishAddingPlace]; }];
|
||||
[ownerController setNeedsStatusBarAppearanceUpdate];
|
||||
}
|
||||
|
||||
#pragma mark - MWMNavigationDashboardManager
|
||||
|
||||
- (void)setDisableStandbyOnRouteFollowing:(BOOL)disableStandbyOnRouteFollowing {
|
||||
- (void)setDisableStandbyOnRouteFollowing:(BOOL)disableStandbyOnRouteFollowing
|
||||
{
|
||||
if (_disableStandbyOnRouteFollowing == disableStandbyOnRouteFollowing)
|
||||
return;
|
||||
_disableStandbyOnRouteFollowing = disableStandbyOnRouteFollowing;
|
||||
@@ -169,7 +179,8 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
|
||||
#pragma mark - Routing
|
||||
|
||||
- (void)onRoutePrepare {
|
||||
- (void)onRoutePrepare
|
||||
{
|
||||
auto nm = self.navigationManager;
|
||||
[nm onRoutePrepare];
|
||||
[nm onRoutePointsUpdated];
|
||||
@@ -177,18 +188,21 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
self.promoButton.hidden = YES;
|
||||
}
|
||||
|
||||
- (void)onRouteRebuild {
|
||||
- (void)onRouteRebuild
|
||||
{
|
||||
[self.ownerController.bookmarksCoordinator close];
|
||||
[self.navigationManager onRoutePlanning];
|
||||
self.promoButton.hidden = YES;
|
||||
}
|
||||
|
||||
- (void)onRouteReady:(BOOL)hasWarnings {
|
||||
- (void)onRouteReady:(BOOL)hasWarnings
|
||||
{
|
||||
[self.navigationManager onRouteReady:hasWarnings];
|
||||
self.promoButton.hidden = YES;
|
||||
}
|
||||
|
||||
- (void)onRouteStart {
|
||||
- (void)onRouteStart
|
||||
{
|
||||
self.hidden = NO;
|
||||
self.sideButtons.zoomHidden = self.zoomHidden;
|
||||
self.sideButtonsHidden = NO;
|
||||
@@ -198,7 +212,8 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
self.promoButton.hidden = YES;
|
||||
}
|
||||
|
||||
- (void)onRouteStop {
|
||||
- (void)onRouteStop
|
||||
{
|
||||
self.sideButtons.zoomHidden = self.zoomHidden;
|
||||
[self.navigationManager onRouteStop];
|
||||
self.disableStandbyOnRouteFollowing = NO;
|
||||
@@ -208,20 +223,24 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
- (MWMSideButtons *)sideButtons {
|
||||
- (MWMSideButtons *)sideButtons
|
||||
{
|
||||
if (!_sideButtons)
|
||||
_sideButtons = [[MWMSideButtons alloc] initWithParentView:self.ownerController.controlsView];
|
||||
return _sideButtons;
|
||||
}
|
||||
|
||||
- (MWMTrafficButtonViewController *)trafficButton {
|
||||
- (MWMTrafficButtonViewController *)trafficButton
|
||||
{
|
||||
if (!_trafficButton)
|
||||
_trafficButton = [[MWMTrafficButtonViewController alloc] init];
|
||||
return _trafficButton;
|
||||
}
|
||||
|
||||
- (BottomTabBarViewController *)tabBarController {
|
||||
if (!_tabBarController) {
|
||||
- (BottomTabBarViewController *)tabBarController
|
||||
{
|
||||
if (!_tabBarController)
|
||||
{
|
||||
MapViewController * ownerController = _ownerController;
|
||||
_tabBarController = [BottomTabBarBuilder buildWithMapViewController:ownerController controlsManager:self];
|
||||
[ownerController addChildViewController:_tabBarController];
|
||||
@@ -232,13 +251,15 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
return _tabBarController;
|
||||
}
|
||||
|
||||
- (id<MWMPlacePageProtocol>)placePageManager {
|
||||
- (id<MWMPlacePageProtocol>)placePageManager
|
||||
{
|
||||
if (!_placePageManager)
|
||||
_placePageManager = [[MWMPlacePageManager alloc] init];
|
||||
return _placePageManager;
|
||||
}
|
||||
|
||||
- (MWMNavigationDashboardManager *)navigationManager {
|
||||
- (MWMNavigationDashboardManager *)navigationManager
|
||||
{
|
||||
if (!_navigationManager)
|
||||
_navigationManager = [[MWMNavigationDashboardManager alloc] initWithParentView:self.ownerController.controlsView];
|
||||
return _navigationManager;
|
||||
@@ -246,7 +267,8 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
|
||||
@synthesize menuState = _menuState;
|
||||
|
||||
- (void)setHidden:(BOOL)hidden {
|
||||
- (void)setHidden:(BOOL)hidden
|
||||
{
|
||||
if (_hidden == hidden)
|
||||
return;
|
||||
// Do not hide the controls view during the place adding process.
|
||||
@@ -257,77 +279,84 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
|
||||
self.menuState = hidden ? MWMBottomMenuStateHidden : MWMBottomMenuStateInactive;
|
||||
}
|
||||
|
||||
- (void)setZoomHidden:(BOOL)zoomHidden {
|
||||
- (void)setZoomHidden:(BOOL)zoomHidden
|
||||
{
|
||||
_zoomHidden = zoomHidden;
|
||||
self.sideButtons.zoomHidden = zoomHidden;
|
||||
}
|
||||
|
||||
- (void)setSideButtonsHidden:(BOOL)sideButtonsHidden {
|
||||
- (void)setSideButtonsHidden:(BOOL)sideButtonsHidden
|
||||
{
|
||||
_sideButtonsHidden = sideButtonsHidden;
|
||||
self.sideButtons.hidden = self.hidden || sideButtonsHidden;
|
||||
}
|
||||
|
||||
- (void)setTrafficButtonHidden:(BOOL)trafficButtonHidden {
|
||||
- (void)setTrafficButtonHidden:(BOOL)trafficButtonHidden
|
||||
{
|
||||
BOOL const isNavigation = self.navigationManager.state == MWMNavigationDashboardStateNavigation;
|
||||
_trafficButtonHidden = isNavigation || trafficButtonHidden;
|
||||
self.trafficButton.hidden = self.hidden || _trafficButtonHidden;
|
||||
}
|
||||
|
||||
- (void)setTrackRecordingButtonState:(TrackRecordingButtonState)state {
|
||||
if (!_trackRecordingButton) {
|
||||
- (void)setTrackRecordingButtonState:(TrackRecordingButtonState)state
|
||||
{
|
||||
if (!_trackRecordingButton)
|
||||
_trackRecordingButton = [[TrackRecordingButtonViewController alloc] init];
|
||||
}
|
||||
[self.trackRecordingButton setState:state completion:^{
|
||||
[MWMMapWidgetsHelper updateLayoutForAvailableArea];
|
||||
}];
|
||||
[self.trackRecordingButton setState:state completion:^{ [MWMMapWidgetsHelper updateLayoutForAvailableArea]; }];
|
||||
if (state == TrackRecordingButtonStateClosed)
|
||||
_trackRecordingButton = nil;
|
||||
}
|
||||
|
||||
- (void)setMenuState:(MWMBottomMenuState)menuState {
|
||||
- (void)setMenuState:(MWMBottomMenuState)menuState
|
||||
{
|
||||
_menuState = menuState;
|
||||
MapViewController * ownerController = _ownerController;
|
||||
switch (_menuState) {
|
||||
case MWMBottomMenuStateActive:
|
||||
_tabBarController.isHidden = NO;
|
||||
if (_menuController == nil) {
|
||||
_menuController = [BottomMenuBuilder buildMenuWithMapViewController:ownerController
|
||||
switch (_menuState)
|
||||
{
|
||||
case MWMBottomMenuStateActive:
|
||||
_tabBarController.isHidden = NO;
|
||||
if (_menuController == nil)
|
||||
{
|
||||
_menuController = [BottomMenuBuilder buildMenuWithMapViewController:ownerController
|
||||
controlsManager:self
|
||||
delegate:self];
|
||||
[ownerController presentViewController:_menuController animated:YES completion:nil];
|
||||
}
|
||||
break;
|
||||
case MWMBottomMenuStateLayers:
|
||||
_tabBarController.isHidden = NO;
|
||||
if (_menuController == nil)
|
||||
{
|
||||
_menuController = [BottomMenuBuilder buildLayersWithMapViewController:ownerController
|
||||
controlsManager:self
|
||||
delegate:self];
|
||||
[ownerController presentViewController:_menuController animated:YES completion:nil];
|
||||
}
|
||||
break;
|
||||
case MWMBottomMenuStateLayers:
|
||||
_tabBarController.isHidden = NO;
|
||||
if (_menuController == nil) {
|
||||
_menuController = [BottomMenuBuilder buildLayersWithMapViewController:ownerController
|
||||
controlsManager:self
|
||||
delegate:self];
|
||||
[ownerController presentViewController:_menuController animated:YES completion:nil];
|
||||
}
|
||||
break;
|
||||
case MWMBottomMenuStateInactive:
|
||||
_tabBarController.isHidden = NO;
|
||||
if (_menuController != nil) {
|
||||
[_menuController dismissViewControllerAnimated:YES completion:nil];
|
||||
_menuController = nil;
|
||||
}
|
||||
break;
|
||||
case MWMBottomMenuStateHidden:
|
||||
_tabBarController.isHidden = YES;
|
||||
if (_menuController != nil) {
|
||||
[_menuController dismissViewControllerAnimated:YES completion:nil];
|
||||
_menuController = nil;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
[ownerController presentViewController:_menuController animated:YES completion:nil];
|
||||
}
|
||||
break;
|
||||
case MWMBottomMenuStateInactive:
|
||||
_tabBarController.isHidden = NO;
|
||||
if (_menuController != nil)
|
||||
{
|
||||
[_menuController dismissViewControllerAnimated:YES completion:nil];
|
||||
_menuController = nil;
|
||||
}
|
||||
break;
|
||||
case MWMBottomMenuStateHidden:
|
||||
_tabBarController.isHidden = YES;
|
||||
if (_menuController != nil)
|
||||
{
|
||||
[_menuController dismissViewControllerAnimated:YES completion:nil];
|
||||
_menuController = nil;
|
||||
}
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - MWMFeatureHolder
|
||||
|
||||
- (id<MWMFeatureHolder>)featureHolder {
|
||||
- (id<MWMFeatureHolder>)featureHolder
|
||||
{
|
||||
return self.placePageManager;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,11 +37,15 @@ NSString * const kUDDidShowLongTapToShowSideButtonsToast = @"kUDDidShowLongTapTo
|
||||
|
||||
@implementation MWMSideButtons
|
||||
|
||||
- (UIView *)view {
|
||||
- (UIView *)view
|
||||
{
|
||||
return self.sideView;
|
||||
}
|
||||
|
||||
+ (MWMSideButtons *)buttons { return [MWMMapViewControlsManager manager].sideButtons; }
|
||||
+ (MWMSideButtons *)buttons
|
||||
{
|
||||
return [MWMMapViewControlsManager manager].sideButtons;
|
||||
}
|
||||
- (instancetype)initWithParentView:(UIView *)view
|
||||
{
|
||||
self = [super init];
|
||||
@@ -56,7 +60,10 @@ NSString * const kUDDidShowLongTapToShowSideButtonsToast = @"kUDDidShowLongTapTo
|
||||
return self;
|
||||
}
|
||||
|
||||
+ (void)updateAvailableArea:(CGRect)frame { [[self buttons].sideView updateAvailableArea:frame]; }
|
||||
+ (void)updateAvailableArea:(CGRect)frame
|
||||
{
|
||||
[[self buttons].sideView updateAvailableArea:frame];
|
||||
}
|
||||
|
||||
- (void)zoomIn
|
||||
{
|
||||
@@ -82,22 +89,25 @@ NSString * const kUDDidShowLongTapToShowSideButtonsToast = @"kUDDidShowLongTapTo
|
||||
[locBtn.imageView stopRotation];
|
||||
switch (state)
|
||||
{
|
||||
case MWMMyPositionModePendingPosition:
|
||||
{
|
||||
[locBtn setStyleNameAndApply: @"ButtonPending"];
|
||||
[locBtn.imageView startRotation:1];
|
||||
break;
|
||||
}
|
||||
case MWMMyPositionModeNotFollow:
|
||||
case MWMMyPositionModeNotFollowNoPosition: [locBtn setStyleNameAndApply: @"ButtonGetPosition"]; break;
|
||||
case MWMMyPositionModeFollow: [locBtn setStyleNameAndApply: @"ButtonFollow"]; break;
|
||||
case MWMMyPositionModeFollowAndRotate: [locBtn setStyleNameAndApply: @"ButtonFollowAndRotate"]; break;
|
||||
case MWMMyPositionModePendingPosition:
|
||||
{
|
||||
[locBtn setStyleNameAndApply:@"ButtonPending"];
|
||||
[locBtn.imageView startRotation:1];
|
||||
break;
|
||||
}
|
||||
case MWMMyPositionModeNotFollow:
|
||||
case MWMMyPositionModeNotFollowNoPosition: [locBtn setStyleNameAndApply:@"ButtonGetPosition"]; break;
|
||||
case MWMMyPositionModeFollow: [locBtn setStyleNameAndApply:@"ButtonFollow"]; break;
|
||||
case MWMMyPositionModeFollowAndRotate: [locBtn setStyleNameAndApply:@"ButtonFollowAndRotate"]; break;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Actions
|
||||
|
||||
- (IBAction)zoomTouchDown:(UIButton *)sender { self.zoomSwipeEnabled = YES; }
|
||||
- (IBAction)zoomTouchDown:(UIButton *)sender
|
||||
{
|
||||
self.zoomSwipeEnabled = YES;
|
||||
}
|
||||
- (IBAction)zoomTouchUpInside:(UIButton *)sender
|
||||
{
|
||||
self.zoomSwipeEnabled = NO;
|
||||
@@ -107,14 +117,16 @@ NSString * const kUDDidShowLongTapToShowSideButtonsToast = @"kUDDidShowLongTapTo
|
||||
[self zoomOut];
|
||||
}
|
||||
|
||||
- (IBAction)zoomTouchUpOutside:(UIButton *)sender { self.zoomSwipeEnabled = NO; }
|
||||
- (IBAction)zoomTouchUpOutside:(UIButton *)sender
|
||||
{
|
||||
self.zoomSwipeEnabled = NO;
|
||||
}
|
||||
- (IBAction)zoomSwipe:(UIPanGestureRecognizer *)sender
|
||||
{
|
||||
if (!self.zoomSwipeEnabled)
|
||||
return;
|
||||
UIView * const superview = self.sideView.superview;
|
||||
CGFloat const translation =
|
||||
-[sender translationInView:superview].y / superview.bounds.size.height;
|
||||
CGFloat const translation = -[sender translationInView:superview].y / superview.bounds.size.height;
|
||||
|
||||
CGFloat const scaleFactor = exp(translation);
|
||||
GetFramework().Scale(scaleFactor, false);
|
||||
@@ -128,7 +140,10 @@ NSString * const kUDDidShowLongTapToShowSideButtonsToast = @"kUDDidShowLongTapTo
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
- (BOOL)zoomHidden { return self.sideView.zoomHidden; }
|
||||
- (BOOL)zoomHidden
|
||||
{
|
||||
return self.sideView.zoomHidden;
|
||||
}
|
||||
- (void)setZoomHidden:(BOOL)zoomHidden
|
||||
{
|
||||
if ([MWMRouter isRoutingActive])
|
||||
@@ -137,8 +152,11 @@ NSString * const kUDDidShowLongTapToShowSideButtonsToast = @"kUDDidShowLongTapTo
|
||||
self.sideView.zoomHidden = [MWMSettings zoomButtonsEnabled] ? zoomHidden : YES;
|
||||
}
|
||||
|
||||
- (BOOL)hidden { return self.sideView.hidden; }
|
||||
- (void)setHidden:(BOOL)hidden
|
||||
- (BOOL)hidden
|
||||
{
|
||||
return self.sideView.hidden;
|
||||
}
|
||||
- (void)setHidden:(BOOL)hidden
|
||||
{
|
||||
if (!self.hidden && hidden)
|
||||
[Toast showWithText:L(@"long_tap_toast")];
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
#import "MWMSideButtonsView.h"
|
||||
#import "MWMButton.h"
|
||||
#import "MWMRouter.h"
|
||||
#import "MWMMapViewControlsCommon.h"
|
||||
#import "MWMRouter.h"
|
||||
|
||||
#include "base/math.hpp"
|
||||
|
||||
namespace {
|
||||
namespace
|
||||
{
|
||||
CGFloat const kLocationButtonSpacingMax = 52;
|
||||
CGFloat const kLocationButtonSpacingMin = 8;
|
||||
CGFloat const kButtonsTopOffset = 6;
|
||||
@@ -14,9 +15,9 @@ CGFloat const kButtonsBottomOffset = 6;
|
||||
|
||||
@interface MWMSideButtonsView ()
|
||||
|
||||
@property(weak, nonatomic) IBOutlet MWMButton *zoomIn;
|
||||
@property(weak, nonatomic) IBOutlet MWMButton *zoomOut;
|
||||
@property(weak, nonatomic) IBOutlet MWMButton *location;
|
||||
@property(weak, nonatomic) IBOutlet MWMButton * zoomIn;
|
||||
@property(weak, nonatomic) IBOutlet MWMButton * zoomOut;
|
||||
@property(weak, nonatomic) IBOutlet MWMButton * location;
|
||||
|
||||
@property(nonatomic) CGRect availableArea;
|
||||
|
||||
@@ -24,19 +25,25 @@ CGFloat const kButtonsBottomOffset = 6;
|
||||
|
||||
@implementation MWMSideButtonsView
|
||||
|
||||
- (void)awakeFromNib {
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
[super awakeFromNib];
|
||||
self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||||
}
|
||||
|
||||
- (void)layoutSubviews {
|
||||
- (void)layoutSubviews
|
||||
{
|
||||
CGFloat spacing = self.availableHeight - self.zoomOut.maxY - self.location.height;
|
||||
spacing = math::Clamp(spacing, kLocationButtonSpacingMin, kLocationButtonSpacingMax);
|
||||
|
||||
if (!IPAD && (UIDevice.currentDevice.orientation == UIDeviceOrientationLandscapeLeft || UIDevice.currentDevice.orientation == UIDeviceOrientationLandscapeRight) && [MWMRouter isRoutingActive]) {
|
||||
if (!IPAD &&
|
||||
(UIDevice.currentDevice.orientation == UIDeviceOrientationLandscapeLeft ||
|
||||
UIDevice.currentDevice.orientation == UIDeviceOrientationLandscapeRight) &&
|
||||
[MWMRouter isRoutingActive])
|
||||
{
|
||||
spacing = spacing - 36;
|
||||
}
|
||||
|
||||
|
||||
self.location.minY = self.zoomOut.maxY + spacing;
|
||||
self.bounds = {{}, {self.zoomOut.width, self.location.maxY}};
|
||||
if (self.zoomHidden)
|
||||
@@ -47,14 +54,18 @@ CGFloat const kButtonsBottomOffset = 6;
|
||||
[super layoutSubviews];
|
||||
}
|
||||
|
||||
- (void)layoutXPosition:(BOOL)hidden {
|
||||
if (UIApplication.sharedApplication.userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft) {
|
||||
- (void)layoutXPosition:(BOOL)hidden
|
||||
{
|
||||
if (UIApplication.sharedApplication.userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft)
|
||||
{
|
||||
if (hidden)
|
||||
self.maxX = 0;
|
||||
else
|
||||
self.minX = self.availableArea.origin.x + kViewControlsOffsetToBounds;
|
||||
} else {
|
||||
const auto availableAreaMaxX = self.availableArea.origin.x + self.availableArea.size.width;
|
||||
}
|
||||
else
|
||||
{
|
||||
auto const availableAreaMaxX = self.availableArea.origin.x + self.availableArea.size.width;
|
||||
if (hidden)
|
||||
self.minX = self.superview.width;
|
||||
else
|
||||
@@ -62,80 +73,84 @@ CGFloat const kButtonsBottomOffset = 6;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)layoutYPosition {
|
||||
- (void)layoutYPosition
|
||||
{
|
||||
CGFloat const centerShift = (self.height - self.zoomIn.midY - self.zoomOut.midY) / 2;
|
||||
[UIView animateWithDuration:kDefaultAnimationDuration
|
||||
animations:^{
|
||||
self.midY = centerShift + self.superview.height / 2;
|
||||
if ([MWMRouter isRoutingActive]) {
|
||||
self.midY = self.midY - 18;
|
||||
}
|
||||
if (self.maxY > self.bottomBound)
|
||||
self.maxY = self.bottomBound;
|
||||
}];
|
||||
self.midY = centerShift + self.superview.height / 2;
|
||||
if ([MWMRouter isRoutingActive])
|
||||
self.midY = self.midY - 18;
|
||||
if (self.maxY > self.bottomBound)
|
||||
self.maxY = self.bottomBound;
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)fadeZoomButtonsShow:(BOOL)show {
|
||||
- (void)fadeZoomButtonsShow:(BOOL)show
|
||||
{
|
||||
CGFloat const alpha = show ? 1.0 : 0.0;
|
||||
[UIView animateWithDuration:kDefaultAnimationDuration
|
||||
animations:^{
|
||||
self.zoomIn.alpha = alpha;
|
||||
self.zoomOut.alpha = alpha;
|
||||
}];
|
||||
self.zoomIn.alpha = alpha;
|
||||
self.zoomOut.alpha = alpha;
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)fadeLocationButtonShow:(BOOL)show {
|
||||
[UIView animateWithDuration:kDefaultAnimationDuration
|
||||
animations:^{
|
||||
self.location.alpha = show ? 1.0 : 0.0;
|
||||
}];
|
||||
- (void)fadeLocationButtonShow:(BOOL)show
|
||||
{
|
||||
[UIView animateWithDuration:kDefaultAnimationDuration animations:^{ self.location.alpha = show ? 1.0 : 0.0; }];
|
||||
}
|
||||
|
||||
// Show/hide zoom and location buttons depending on available vertical space.
|
||||
- (void)animate {
|
||||
- (void)animate
|
||||
{
|
||||
[self layoutYPosition];
|
||||
|
||||
BOOL const isZoomHidden = self.zoomIn.alpha == 0.0;
|
||||
BOOL const willZoomHide = (self.location.maxY > self.availableHeight);
|
||||
if (willZoomHide != isZoomHidden)
|
||||
[self fadeZoomButtonsShow: !willZoomHide];
|
||||
[self fadeZoomButtonsShow:!willZoomHide];
|
||||
|
||||
BOOL const isLocationHidden = self.location.alpha == 0.0;
|
||||
BOOL const willLocationHide = (self.location.height > self.availableHeight);
|
||||
if (willLocationHide != isLocationHidden)
|
||||
[self fadeLocationButtonShow: !willLocationHide];
|
||||
[self fadeLocationButtonShow:!willLocationHide];
|
||||
}
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
- (void)setZoomHidden:(BOOL)zoomHidden {
|
||||
- (void)setZoomHidden:(BOOL)zoomHidden
|
||||
{
|
||||
_zoomHidden = zoomHidden;
|
||||
self.zoomIn.hidden = zoomHidden;
|
||||
self.zoomOut.hidden = zoomHidden;
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (void)setHidden:(BOOL)hidden animated:(BOOL)animated {
|
||||
if (animated) {
|
||||
- (void)setHidden:(BOOL)hidden animated:(BOOL)animated
|
||||
{
|
||||
if (animated)
|
||||
{
|
||||
if (self.hidden == hidden)
|
||||
return;
|
||||
// Side buttons should be visible during any our show/hide anamation.
|
||||
// Visibility should be detemined by alpha, not self.hidden.
|
||||
self.hidden = NO;
|
||||
[UIView animateWithDuration:kDefaultAnimationDuration
|
||||
animations:^{
|
||||
self.alpha = hidden ? 0.0 : 1.0;
|
||||
[self layoutXPosition:hidden];
|
||||
}
|
||||
completion:^(BOOL finished) {
|
||||
self.hidden = hidden;
|
||||
}];
|
||||
} else {
|
||||
animations:^{
|
||||
self.alpha = hidden ? 0.0 : 1.0;
|
||||
[self layoutXPosition:hidden];
|
||||
}
|
||||
completion:^(BOOL finished) { self.hidden = hidden; }];
|
||||
}
|
||||
else
|
||||
{
|
||||
self.hidden = hidden;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)updateAvailableArea:(CGRect)frame {
|
||||
- (void)updateAvailableArea:(CGRect)frame
|
||||
{
|
||||
if (CGRectEqualToRect(self.availableArea, frame))
|
||||
return;
|
||||
// If during our show/hide animation position is changed it is corrupted.
|
||||
@@ -155,14 +170,17 @@ CGFloat const kButtonsBottomOffset = 6;
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (CGFloat)availableHeight {
|
||||
- (CGFloat)availableHeight
|
||||
{
|
||||
return self.availableArea.size.height - kButtonsTopOffset - kButtonsBottomOffset;
|
||||
}
|
||||
|
||||
- (CGFloat)topBound {
|
||||
- (CGFloat)topBound
|
||||
{
|
||||
return self.availableArea.origin.y + kButtonsTopOffset;
|
||||
}
|
||||
- (CGFloat)bottomBound {
|
||||
- (CGFloat)bottomBound
|
||||
{
|
||||
auto const area = self.availableArea;
|
||||
return area.origin.y + area.size.height - kButtonsBottomOffset;
|
||||
}
|
||||
|
||||
@@ -2,22 +2,20 @@
|
||||
#import "MWMZoomButtonsView.h"
|
||||
#import "Statistics.h"
|
||||
|
||||
|
||||
#include "Framework.h"
|
||||
#include "platform/settings.hpp"
|
||||
#include "indexer/scales.hpp"
|
||||
#include "platform/settings.hpp"
|
||||
|
||||
static NSString * const kMWMZoomButtonsViewNibName = @"MWMZoomButtonsView";
|
||||
|
||||
@interface MWMZoomButtons ()
|
||||
|
||||
@interface MWMZoomButtons()
|
||||
@property(nonatomic) IBOutlet MWMZoomButtonsView * zoomView;
|
||||
@property(weak, nonatomic) IBOutlet UIButton * zoomInButton;
|
||||
@property(weak, nonatomic) IBOutlet UIButton * zoomOutButton;
|
||||
|
||||
@property (nonatomic) IBOutlet MWMZoomButtonsView * zoomView;
|
||||
@property (weak, nonatomic) IBOutlet UIButton * zoomInButton;
|
||||
@property (weak, nonatomic) IBOutlet UIButton * zoomOutButton;
|
||||
|
||||
@property (nonatomic) BOOL zoomSwipeEnabled;
|
||||
@property (nonatomic, readonly) BOOL isZoomEnabled;
|
||||
@property(nonatomic) BOOL zoomSwipeEnabled;
|
||||
@property(nonatomic, readonly) BOOL isZoomEnabled;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#import "Common.h"
|
||||
#import "MWMZoomButtonsView.h"
|
||||
#import "Common.h"
|
||||
#import "MWMMapViewControlsCommon.h"
|
||||
|
||||
static CGFloat const kZoomViewOffsetToTopBound = 12.0;
|
||||
@@ -7,9 +7,9 @@ static CGFloat const kZoomViewOffsetToBottomBound = 40.0;
|
||||
static CGFloat const kZoomViewOffsetToFrameBound = 294.0;
|
||||
static CGFloat const kZoomViewHideBoundPercent = 0.4;
|
||||
|
||||
@interface MWMZoomButtonsView()
|
||||
@interface MWMZoomButtonsView ()
|
||||
|
||||
@property (nonatomic) CGRect defaultBounds;
|
||||
@property(nonatomic) CGRect defaultBounds;
|
||||
|
||||
@end
|
||||
|
||||
@@ -39,7 +39,8 @@ static CGFloat const kZoomViewHideBoundPercent = 0.4;
|
||||
|
||||
- (void)layoutYPosition
|
||||
{
|
||||
CGFloat const maxY = MIN(self.superview.height - kZoomViewOffsetToFrameBound, self.bottomBound - kZoomViewOffsetToBottomBound);
|
||||
CGFloat const maxY =
|
||||
MIN(self.superview.height - kZoomViewOffsetToFrameBound, self.bottomBound - kZoomViewOffsetToBottomBound);
|
||||
self.minY = MAX(maxY - self.height, self.topBound + kZoomViewOffsetToTopBound);
|
||||
}
|
||||
|
||||
@@ -59,7 +60,8 @@ static CGFloat const kZoomViewHideBoundPercent = 0.4;
|
||||
{
|
||||
CGFloat const hideBound = kZoomViewHideBoundPercent * self.superview.height;
|
||||
BOOL const isHidden = self.alpha == 0.0;
|
||||
BOOL const willHide = (self.bottomBound < hideBound) || (self.defaultBounds.size.height > self.bottomBound - self.topBound);
|
||||
BOOL const willHide =
|
||||
(self.bottomBound < hideBound) || (self.defaultBounds.size.height > self.bottomBound - self.topBound);
|
||||
if (willHide)
|
||||
{
|
||||
if (!isHidden)
|
||||
@@ -84,15 +86,12 @@ static CGFloat const kZoomViewHideBoundPercent = 0.4;
|
||||
if (!hidden)
|
||||
self.hidden = NO;
|
||||
[self layoutXPosition:!hidden];
|
||||
[UIView animateWithDuration:framesDuration(kMenuViewHideFramesCount) animations:^
|
||||
{
|
||||
[self layoutXPosition:hidden];
|
||||
}
|
||||
completion:^(BOOL finished)
|
||||
{
|
||||
if (hidden)
|
||||
self.hidden = YES;
|
||||
}];
|
||||
[UIView animateWithDuration:framesDuration(kMenuViewHideFramesCount)
|
||||
animations:^{ [self layoutXPosition:hidden]; }
|
||||
completion:^(BOOL finished) {
|
||||
if (hidden)
|
||||
self.hidden = YES;
|
||||
}];
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -10,16 +10,19 @@
|
||||
#import "SwiftBridge.h"
|
||||
#import "base/assert.hpp"
|
||||
|
||||
namespace {
|
||||
namespace
|
||||
{
|
||||
CGFloat const kTopOffset = 6;
|
||||
|
||||
NSArray<UIImage *> *imagesWithName(NSString *name) {
|
||||
NSArray<UIImage *> * imagesWithName(NSString * name)
|
||||
{
|
||||
NSUInteger const imagesCount = 3;
|
||||
NSMutableArray<UIImage *> *images = [NSMutableArray arrayWithCapacity:imagesCount];
|
||||
NSString *mode = [UIColor isNightMode] ? @"dark" : @"light";
|
||||
for (NSUInteger i = 1; i <= imagesCount; i += 1) {
|
||||
NSString *imageName = [NSString stringWithFormat:@"%@_%@_%@", name, mode, @(i).stringValue];
|
||||
[images addObject:static_cast<UIImage *_Nonnull>([UIImage imageNamed:imageName])];
|
||||
NSMutableArray<UIImage *> * images = [NSMutableArray arrayWithCapacity:imagesCount];
|
||||
NSString * mode = [UIColor isNightMode] ? @"dark" : @"light";
|
||||
for (NSUInteger i = 1; i <= imagesCount; i += 1)
|
||||
{
|
||||
NSString * imageName = [NSString stringWithFormat:@"%@_%@_%@", name, mode, @(i).stringValue];
|
||||
[images addObject:static_cast<UIImage * _Nonnull>([UIImage imageNamed:imageName])];
|
||||
}
|
||||
return [images copy];
|
||||
}
|
||||
@@ -27,28 +30,31 @@ NSArray<UIImage *> *imagesWithName(NSString *name) {
|
||||
|
||||
@interface MWMMapViewControlsManager ()
|
||||
|
||||
@property(nonatomic) MWMTrafficButtonViewController *trafficButton;
|
||||
@property(nonatomic) MWMTrafficButtonViewController * trafficButton;
|
||||
|
||||
@end
|
||||
|
||||
@interface MWMTrafficButtonViewController () <MWMMapOverlayManagerObserver, ThemeListener>
|
||||
|
||||
@property(nonatomic) NSLayoutConstraint *topOffset;
|
||||
@property(nonatomic) NSLayoutConstraint *leftOffset;
|
||||
@property(nonatomic) NSLayoutConstraint * topOffset;
|
||||
@property(nonatomic) NSLayoutConstraint * leftOffset;
|
||||
@property(nonatomic) CGRect availableArea;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MWMTrafficButtonViewController
|
||||
|
||||
+ (MWMTrafficButtonViewController *)controller {
|
||||
+ (MWMTrafficButtonViewController *)controller
|
||||
{
|
||||
return [MWMMapViewControlsManager manager].trafficButton;
|
||||
}
|
||||
|
||||
- (instancetype)init {
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
MapViewController *ovc = [MapViewController sharedController];
|
||||
if (self)
|
||||
{
|
||||
MapViewController * ovc = [MapViewController sharedController];
|
||||
[ovc addChildViewController:self];
|
||||
[ovc.controlsView addSubview:self.view];
|
||||
[self configLayout];
|
||||
@@ -59,18 +65,21 @@ NSArray<UIImage *> *imagesWithName(NSString *name) {
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
- (void)dealloc
|
||||
{
|
||||
[StyleManager.shared removeListener:self];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated {
|
||||
- (void)viewWillDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewWillDisappear:animated];
|
||||
[Toast hideAll];
|
||||
}
|
||||
|
||||
- (void)configLayout {
|
||||
UIView *sv = self.view;
|
||||
UIView *ov = sv.superview;
|
||||
- (void)configLayout
|
||||
{
|
||||
UIView * sv = self.view;
|
||||
UIView * ov = sv.superview;
|
||||
|
||||
self.topOffset = [sv.topAnchor constraintEqualToAnchor:ov.topAnchor constant:kTopOffset];
|
||||
self.topOffset.active = YES;
|
||||
@@ -78,12 +87,14 @@ NSArray<UIImage *> *imagesWithName(NSString *name) {
|
||||
self.leftOffset.active = YES;
|
||||
}
|
||||
|
||||
- (void)setHidden:(BOOL)hidden {
|
||||
- (void)setHidden:(BOOL)hidden
|
||||
{
|
||||
_hidden = hidden;
|
||||
[self refreshLayout];
|
||||
}
|
||||
|
||||
- (void)refreshLayout {
|
||||
- (void)refreshLayout
|
||||
{
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
auto const availableArea = self.availableArea;
|
||||
auto const fitInAvailableArea = CGRectGetMaxY(self.view.frame) < CGRectGetMaxY(availableArea) + kTopOffset;
|
||||
@@ -97,102 +108,111 @@ NSArray<UIImage *> *imagesWithName(NSString *name) {
|
||||
});
|
||||
}
|
||||
|
||||
- (void)handleTrafficState:(MWMMapOverlayTrafficState)state {
|
||||
MWMButton *btn = (MWMButton *)self.view;
|
||||
UIImageView *iv = btn.imageView;
|
||||
switch (state) {
|
||||
case MWMMapOverlayTrafficStateDisabled:
|
||||
CHECK(false, ("Incorrect traffic manager state."));
|
||||
break;
|
||||
case MWMMapOverlayTrafficStateEnabled:
|
||||
btn.imageName = @"btn_traffic_on";
|
||||
break;
|
||||
case MWMMapOverlayTrafficStateWaitingData:
|
||||
iv.animationImages = imagesWithName(@"btn_traffic_update");
|
||||
iv.animationDuration = 0.8;
|
||||
[iv startAnimating];
|
||||
break;
|
||||
case MWMMapOverlayTrafficStateOutdated:
|
||||
btn.imageName = @"btn_traffic_outdated";
|
||||
break;
|
||||
case MWMMapOverlayTrafficStateNoData:
|
||||
btn.imageName = @"btn_traffic_on";
|
||||
[Toast showWithText:L(@"traffic_data_unavailable")];
|
||||
break;
|
||||
case MWMMapOverlayTrafficStateNetworkError:
|
||||
[MWMMapOverlayManager setTrafficEnabled:NO];
|
||||
[[MWMAlertViewController activeAlertController] presentNoConnectionAlert];
|
||||
break;
|
||||
case MWMMapOverlayTrafficStateExpiredData:
|
||||
btn.imageName = @"btn_traffic_outdated";
|
||||
[Toast showWithText:L(@"traffic_update_maps_text")];
|
||||
break;
|
||||
case MWMMapOverlayTrafficStateExpiredApp:
|
||||
btn.imageName = @"btn_traffic_outdated";
|
||||
[Toast showWithText:L(@"traffic_update_app_message")];
|
||||
break;
|
||||
- (void)handleTrafficState:(MWMMapOverlayTrafficState)state
|
||||
{
|
||||
MWMButton * btn = (MWMButton *)self.view;
|
||||
UIImageView * iv = btn.imageView;
|
||||
switch (state)
|
||||
{
|
||||
case MWMMapOverlayTrafficStateDisabled: CHECK(false, ("Incorrect traffic manager state.")); break;
|
||||
case MWMMapOverlayTrafficStateEnabled: btn.imageName = @"btn_traffic_on"; break;
|
||||
case MWMMapOverlayTrafficStateWaitingData:
|
||||
iv.animationImages = imagesWithName(@"btn_traffic_update");
|
||||
iv.animationDuration = 0.8;
|
||||
[iv startAnimating];
|
||||
break;
|
||||
case MWMMapOverlayTrafficStateOutdated: btn.imageName = @"btn_traffic_outdated"; break;
|
||||
case MWMMapOverlayTrafficStateNoData:
|
||||
btn.imageName = @"btn_traffic_on";
|
||||
[Toast showWithText:L(@"traffic_data_unavailable")];
|
||||
break;
|
||||
case MWMMapOverlayTrafficStateNetworkError:
|
||||
[MWMMapOverlayManager setTrafficEnabled:NO];
|
||||
[[MWMAlertViewController activeAlertController] presentNoConnectionAlert];
|
||||
break;
|
||||
case MWMMapOverlayTrafficStateExpiredData:
|
||||
btn.imageName = @"btn_traffic_outdated";
|
||||
[Toast showWithText:L(@"traffic_update_maps_text")];
|
||||
break;
|
||||
case MWMMapOverlayTrafficStateExpiredApp:
|
||||
btn.imageName = @"btn_traffic_outdated";
|
||||
[Toast showWithText:L(@"traffic_update_app_message")];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)handleIsolinesState:(MWMMapOverlayIsolinesState)state {
|
||||
switch (state) {
|
||||
case MWMMapOverlayIsolinesStateDisabled:
|
||||
break;
|
||||
case MWMMapOverlayIsolinesStateEnabled:
|
||||
if (![MWMMapOverlayManager isolinesVisible])
|
||||
[Toast showWithText:L(@"isolines_toast_zooms_1_10")];
|
||||
break;
|
||||
case MWMMapOverlayIsolinesStateExpiredData:
|
||||
[MWMAlertViewController.activeAlertController presentInfoAlert:L(@"isolines_activation_error_dialog")];
|
||||
[MWMMapOverlayManager setIsoLinesEnabled:NO];
|
||||
break;
|
||||
case MWMMapOverlayIsolinesStateNoData:
|
||||
[MWMAlertViewController.activeAlertController presentInfoAlert:L(@"isolines_location_error_dialog")];
|
||||
[MWMMapOverlayManager setIsoLinesEnabled:NO];
|
||||
break;
|
||||
- (void)handleIsolinesState:(MWMMapOverlayIsolinesState)state
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
case MWMMapOverlayIsolinesStateDisabled: break;
|
||||
case MWMMapOverlayIsolinesStateEnabled:
|
||||
if (![MWMMapOverlayManager isolinesVisible])
|
||||
[Toast showWithText:L(@"isolines_toast_zooms_1_10")];
|
||||
break;
|
||||
case MWMMapOverlayIsolinesStateExpiredData:
|
||||
[MWMAlertViewController.activeAlertController presentInfoAlert:L(@"isolines_activation_error_dialog")];
|
||||
[MWMMapOverlayManager setIsoLinesEnabled:NO];
|
||||
break;
|
||||
case MWMMapOverlayIsolinesStateNoData:
|
||||
[MWMAlertViewController.activeAlertController presentInfoAlert:L(@"isolines_location_error_dialog")];
|
||||
[MWMMapOverlayManager setIsoLinesEnabled:NO];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)applyTheme {
|
||||
MWMButton *btn = static_cast<MWMButton *>(self.view);
|
||||
UIImageView *iv = btn.imageView;
|
||||
- (void)applyTheme
|
||||
{
|
||||
MWMButton * btn = static_cast<MWMButton *>(self.view);
|
||||
UIImageView * iv = btn.imageView;
|
||||
|
||||
// Traffic state machine: https://confluence.mail.ru/pages/viewpage.action?pageId=103680959
|
||||
[iv stopAnimating];
|
||||
if ([MWMMapOverlayManager trafficEnabled]) {
|
||||
if ([MWMMapOverlayManager trafficEnabled])
|
||||
{
|
||||
[self handleTrafficState:[MWMMapOverlayManager trafficState]];
|
||||
} else if ([MWMMapOverlayManager transitEnabled]) {
|
||||
}
|
||||
else if ([MWMMapOverlayManager transitEnabled])
|
||||
{
|
||||
btn.imageName = @"btn_subway_on";
|
||||
if ([MWMMapOverlayManager transitState] == MWMMapOverlayTransitStateNoData)
|
||||
[Toast showWithText:L(@"subway_data_unavailable")];
|
||||
} else if ([MWMMapOverlayManager isoLinesEnabled]) {
|
||||
}
|
||||
else if ([MWMMapOverlayManager isoLinesEnabled])
|
||||
{
|
||||
btn.imageName = @"btn_isoMap_on";
|
||||
[self handleIsolinesState:[MWMMapOverlayManager isolinesState]];
|
||||
} else if ([MWMMapOverlayManager outdoorEnabled]) {
|
||||
}
|
||||
else if ([MWMMapOverlayManager outdoorEnabled])
|
||||
{
|
||||
btn.imageName = @"btn_isoMap_on";
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
btn.imageName = @"btn_layers";
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction)buttonTouchUpInside {
|
||||
BOOL needsToDisableMapLayer =
|
||||
[MWMMapOverlayManager trafficEnabled] ||
|
||||
[MWMMapOverlayManager transitEnabled] ||
|
||||
[MWMMapOverlayManager isoLinesEnabled] ||
|
||||
[MWMMapOverlayManager outdoorEnabled];
|
||||
- (IBAction)buttonTouchUpInside
|
||||
{
|
||||
BOOL needsToDisableMapLayer = [MWMMapOverlayManager trafficEnabled] || [MWMMapOverlayManager transitEnabled] ||
|
||||
[MWMMapOverlayManager isoLinesEnabled] || [MWMMapOverlayManager outdoorEnabled];
|
||||
|
||||
if (needsToDisableMapLayer) {
|
||||
if (needsToDisableMapLayer)
|
||||
{
|
||||
[MWMMapOverlayManager setTrafficEnabled:NO];
|
||||
[MWMMapOverlayManager setTransitEnabled:NO];
|
||||
[MWMMapOverlayManager setIsoLinesEnabled:NO];
|
||||
[MWMMapOverlayManager setOutdoorEnabled:NO];
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
MWMMapViewControlsManager.manager.menuState = MWMBottomMenuStateLayers;
|
||||
}
|
||||
}
|
||||
|
||||
+ (void)updateAvailableArea:(CGRect)frame {
|
||||
+ (void)updateAvailableArea:(CGRect)frame
|
||||
{
|
||||
auto controller = [self controller];
|
||||
if (CGRectEqualToRect(controller.availableArea, frame))
|
||||
return;
|
||||
@@ -202,16 +222,20 @@ NSArray<UIImage *> *imagesWithName(NSString *name) {
|
||||
|
||||
#pragma mark - MWMMapOverlayManagerObserver
|
||||
|
||||
- (void)onTrafficStateUpdated {
|
||||
- (void)onTrafficStateUpdated
|
||||
{
|
||||
[self applyTheme];
|
||||
}
|
||||
- (void)onTransitStateUpdated {
|
||||
- (void)onTransitStateUpdated
|
||||
{
|
||||
[self applyTheme];
|
||||
}
|
||||
- (void)onIsoLinesStateUpdated {
|
||||
- (void)onIsoLinesStateUpdated
|
||||
{
|
||||
[self applyTheme];
|
||||
}
|
||||
- (void)onOutdoorStateUpdated {
|
||||
- (void)onOutdoorStateUpdated
|
||||
{
|
||||
[self applyTheme];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user