// Copyright (C) 2024 Rubén Beltrán del Río // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see https://map.tranquil.systems. import SwiftUI struct MapPreferencesView: View { @AppStorage("showMapBackground") private var showBackground = UserPreferences.Defaults .showMapBackground @AppStorage("useCustomFont") private var useCustomFont = UserPreferences.Defaults.useCustomFont @AppStorage("customFontName") private var customFontName = UserPreferences.Defaults.customFontName @AppStorage("defaultExportFormat") private var defaultExportFormat = UserPreferences.Defaults .defaultExportFormat @AppStorage("useSmartLabelPositioning") private var useSmartLabelPositioning = UserPreferences .Defaults.useSmartLabelPositioning var body: some View { VStack(alignment: .center, spacing: Dimensions.Spacing.loose) { HStack(alignment: .firstTextBaseline, spacing: Dimensions.Spacing.regular) { Text("preferences.map.map_style.title") .font(.Theme.Body.emphasized) .frame(maxWidth: 250, alignment: .trailing) VStack(alignment: .leading, spacing: Dimensions.Spacing.cozy) { Toggle( isOn: $showBackground, label: { Text("preferences.map.map_style.show_background") .font(.Theme.Body.regular) }) Toggle( isOn: $useSmartLabelPositioning, label: { Text("preferences.map.map_style.use_smart_label_positioning") .font(.Theme.Body.regular) }) Toggle( isOn: $useCustomFont, label: { Text("preferences.map.map_style.use_custom_font") .font(.Theme.Body.regular) }) Picker("", selection: $customFontName) { ForEach(NSFontManager.shared.availableFontFamilies, id: \.self) { fontFamily in Text(fontFamily).tag(fontFamily) } } .pickerStyle(MenuPickerStyle()) .frame(maxWidth: 250) .padding(.leading, -Dimensions.Spacing.regular) .disabled(!useCustomFont) } .frame(maxWidth: .infinity, alignment: .leading) } Divider() HStack(alignment: .firstTextBaseline, spacing: Dimensions.Spacing.regular) { Text("preferences.map.export.title") .font(.Theme.Body.emphasized) .frame(maxWidth: 250, alignment: .trailing) VStack(alignment: .leading, spacing: Dimensions.Spacing.cozy) { Text("preferences.map.export.default_format") .font(.Theme.Body.regular) Picker("", selection: $defaultExportFormat) { ForEach(ExportFormats.allCases, id: \.self) { exportFormat in Text(exportFormat.title).tag(exportFormat.rawValue) } } .pickerStyle(MenuPickerStyle()) .frame(maxWidth: 250) .padding(.leading, -Dimensions.Spacing.regular) } .frame(maxWidth: .infinity, alignment: .leading) } Spacer() }.padding(.vertical, Dimensions.Spacing.loose) .padding(.horizontal, Dimensions.Spacing.indulgent) } } #Preview { MapPreferencesView() }