Files
comaps/iphone/Maps/UI/MainButton.swift
Yannik Bloscheck bff4b2348a [ios] WIP: Switching main/map buttons to SwiftUI
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-07 21:07:34 +01:00

80 lines
3.4 KiB
Swift

import SwiftUI
/// View for a main button
struct MainButton: View {
// MARK: Properties
/// The kind
var kind: MainButton.Kind
/// The actual view
var body: some View {
if kind != .hidden {
Button {
if kind == .addPlace {
if let controlsManager = MWMMapViewControlsManager.manager() as? BottomMenuDelegate {
controlsManager.addPlace()
}
} else if kind == .recordTrack {
let trackRecorder: TrackRecordingManager = .shared
switch trackRecorder.recordingState {
case .active:
MapViewController.shared()?.showTrackRecordingPlacePage()
case .inactive:
trackRecorder.start { result in
switch result {
case .success:
MapViewController.shared()?.showTrackRecordingPlacePage()
case .failure:
break
}
}
}
} else if kind == .search {
if let searchManager = MapViewController.shared()?.searchManager {
if searchManager.isSearching {
searchManager.close()
} else {
searchManager.startSearching(isRouting: false)
}
}
} else if kind == .bookmarks {
MapViewController.shared()?.bookmarksCoordinator.open()
} else if kind == .settings {
MapViewController.shared()?.openSettings()
} else if kind == .help {
MapViewController.shared()?.openAbout()
} else if kind == .more {
if let controlsManager = MWMMapViewControlsManager.manager() {
if controlsManager.menuState == .active {
controlsManager.menuState = .inactive
} else if controlsManager.menuState == .inactive {
controlsManager.menuState = .active
}
}
} else if kind == .layers {
if MapOverlayManager.trafficEnabled() || MapOverlayManager.transitEnabled() || MapOverlayManager.isoLinesEnabled() || MapOverlayManager.outdoorEnabled() {
MapOverlayManager.setTrafficEnabled(false)
MapOverlayManager.setTransitEnabled(false)
MapOverlayManager.setIsoLinesEnabled(false)
MapOverlayManager.setOutdoorEnabled(false)
} else {
MWMMapViewControlsManager.manager()?.menuState = .layers
}
}
} label: {
Label {
Text(kind.description)
} icon: {
if kind != .layers, let image = kind.image {
image
}
}
}
.buttonStyle(FloatingButtonStyle(isRound: false))
.frame(minWidth: 44, idealWidth: 44, minHeight: 44, idealHeight: 44)
}
}
}