Files
comaps/iphone/Maps/UI/BottomMenu/Menu/Cells/BottomMenuLayersCell.swift
Yannik Bloscheck 0dd8059814 WIP: Modes
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2026-01-19 21:44:14 +01:00

126 lines
3.5 KiB
Swift

import UIKit
class BottomMenuLayersCell: UITableViewCell {
@IBOutlet weak var closeButton: CircleImageButton!
@IBOutlet private var defaultButton: BottomMenuLayerButton! {
didSet {
updateDefaultButton()
}
}
@IBOutlet private var hikingButton: BottomMenuLayerButton! {
didSet {
updateHikingButton()
}
}
@IBOutlet private var cyclingButton: BottomMenuLayerButton! {
didSet {
updateCyclingButton()
}
}
@IBOutlet private var drivingButton: BottomMenuLayerButton! {
didSet {
updateDrivingButton()
}
}
@IBOutlet private var publicTransportButton: BottomMenuLayerButton! {
didSet {
updatePublicTransportButton()
}
}
var onClose: (()->())?
override func awakeFromNib() {
super.awakeFromNib()
MapOverlayManager.add(self)
closeButton.setImage(UIImage(named: "ic_close"))
setupButtons()
}
private func setupButtons() {
defaultButton.setupWith(image: UIImage(resource: .btnMenuOutdoors), text: L("button_layer_default"))
hikingButton.setupWith(image: UIImage(resource: .btnMenuOutdoors), text: L("button_layer_hiking"))
cyclingButton.setupWith(image: UIImage(resource: .btnMenuOutdoors), text: L("button_layer_cycling"))
drivingButton.setupWith(image: UIImage(resource: .btnMenuOutdoors), text: L("button_layer_driving"))
publicTransportButton.setupWith(image: UIImage(resource: .btnMenuOutdoors), text: L("button_layer_publictransport"))
}
deinit {
MapOverlayManager.remove(self)
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
private func updateDefaultButton() {
defaultButton.setStyleAndApply(styleFor(MapOverlayManager.mapMode() == .default))
}
private func updateHikingButton() {
hikingButton.setStyleAndApply(styleFor(MapOverlayManager.mapMode() == .hiking))
}
private func updateCyclingButton() {
cyclingButton.setStyleAndApply(styleFor(MapOverlayManager.mapMode() == .cycling))
}
private func updateDrivingButton() {
drivingButton.setStyleAndApply(styleFor(MapOverlayManager.mapMode() == .driving))
}
private func updatePublicTransportButton() {
publicTransportButton.setStyleAndApply(styleFor(MapOverlayManager.mapMode() == .publicTransport))
}
@IBAction func onCloseButtonPressed(_ sender: Any) {
onClose?()
}
@IBAction func onDefaultButton(_ sender: Any) {
MapOverlayManager.setMapMode(MapMode.default)
}
@IBAction func onHikingButton(_ sender: Any) {
MapOverlayManager.setMapMode(MapMode.hiking)
}
@IBAction func onCyclingButton(_ sender: Any) {
MapOverlayManager.setMapMode(MapMode.cycling)
}
@IBAction func onDrivingButton(_ sender: Any) {
MapOverlayManager.setMapMode(MapMode.driving)
}
@IBAction func onPublicTransportButton(_ sender: Any) {
MapOverlayManager.setMapMode(MapMode.publicTransport)
}
}
extension BottomMenuLayersCell: MapOverlayManagerObserver {
func onMapModeUpdated() {
updateDefaultButton()
updateHikingButton()
updateCyclingButton()
updateDrivingButton()
updatePublicTransportButton()
}
}
private extension BottomMenuLayersCell {
func styleFor(_ enabled: Bool) -> MapStyleSheet {
enabled ? .mapMenuButtonEnabled : .mapMenuButtonDisabled
}
}
private extension BottomMenuLayerButton {
func setupWith(image: UIImage, text: String) {
self.image = image
spacing = 10
numberOfLines = 2
localizedText = text
}
}