From 49766f0c78015831f8be57349317f0d1c8228327 Mon Sep 17 00:00:00 2001 From: Ruben Beltran del Rio Date: Fri, 11 Jul 2025 14:55:46 +0200 Subject: Add QuickLook settings --- Map/Data/UserPreferences.swift | 43 ++++++++++++++++- Map/Localizable.xcstrings | 55 ++++++++++++++++++++++ Map/Map.entitlements | 4 ++ .../Preferences/GeneralPreferencesView.swift | 30 ++++++++++++ 4 files changed, 131 insertions(+), 1 deletion(-) (limited to 'Map') diff --git a/Map/Data/UserPreferences.swift b/Map/Data/UserPreferences.swift index 56582e3..01c4f37 100644 --- a/Map/Data/UserPreferences.swift +++ b/Map/Data/UserPreferences.swift @@ -15,6 +15,24 @@ import Foundation +// MARK: - Enums +enum QuickLookPreviewStyle: String, CaseIterable, Codable { + case map = "map" + case highlightedText = "highlighted_text" + case plainText = "plain_text" + + var localizedName: String { + switch self { + case .map: + return String(localized: "preferences.quick_look.preview_style.map") + case .highlightedText: + return String(localized: "preferences.quick_look.preview_style.highlighted_text") + case .plainText: + return String(localized: "preferences.quick_look.preview_style.plain_text") + } + } +} + // MARK: - JSON Export/Import Structures struct UserPreferencesJSON: Codable { // MARK: - Map Preferences @@ -41,6 +59,9 @@ struct UserPreferencesJSON: Codable { // MARK: - UI Preferences var viewStyle: String? var zoom: Double? + + // MARK: - QuickLook Preferences + var quickLookPreviewStyle: String? } struct UserPreferences: Codable { @@ -70,6 +91,9 @@ struct UserPreferences: Codable { var viewStyle: String var zoom: Double + // MARK: - QuickLook Preferences + var quickLookPreviewStyle: String + // MARK: - Default Values struct Defaults { static let showMapBackground = true @@ -88,6 +112,8 @@ struct UserPreferences: Codable { static let viewStyle = "horizontal" static let zoom = 1.0 + static let quickLookPreviewStyle = QuickLookPreviewStyle.map.rawValue + // Computed properties for complex defaults static var mapTemplates: Data { let defaultTemplate = Template( @@ -133,6 +159,8 @@ struct UserPreferences: Codable { self.viewStyle = Defaults.viewStyle self.zoom = Defaults.zoom + + self.quickLookPreviewStyle = Defaults.quickLookPreviewStyle } // MARK: - JSON Methods @@ -157,7 +185,8 @@ struct UserPreferences: Codable { mapTemplates: templatesFromData(mapTemplates), customStages: stagesFromData(customStages), viewStyle: viewStyle, - zoom: zoom + zoom: zoom, + quickLookPreviewStyle: quickLookPreviewStyle ) let data = try encoder.encode(jsonPrefs) @@ -220,6 +249,9 @@ struct UserPreferences: Codable { if let value = jsonPrefs.zoom { self.zoom = value } + if let value = jsonPrefs.quickLookPreviewStyle { + self.quickLookPreviewStyle = value + } apply() return true @@ -267,6 +299,7 @@ struct UserPreferences: Codable { // MARK: - Apply to UserDefaults private func apply() { let defaults = UserDefaults.standard + let sharedDefaults = UserDefaults(suiteName: "group.systems.tranquil.Map") // Map Preferences defaults.set(showMapBackground, forKey: "showMapBackground") @@ -292,6 +325,10 @@ struct UserPreferences: Codable { // UI Preferences defaults.set(viewStyle, forKey: "viewStyle") defaults.set(zoom, forKey: "zoom") + + // QuickLook Preferences - write to both standard and shared UserDefaults + defaults.set(quickLookPreviewStyle, forKey: "quickLookPreviewStyle") + sharedDefaults?.set(quickLookPreviewStyle, forKey: "quickLookPreviewStyle") } // MARK: - Load from UserDefaults @@ -340,6 +377,10 @@ struct UserPreferences: Codable { preferences.viewStyle = defaults.object(forKey: "viewStyle") as? String ?? Defaults.viewStyle preferences.zoom = defaults.object(forKey: "zoom") as? Double ?? Defaults.zoom + // QuickLook Preferences + preferences.quickLookPreviewStyle = + defaults.object(forKey: "quickLookPreviewStyle") as? String ?? Defaults.quickLookPreviewStyle + return preferences } } diff --git a/Map/Localizable.xcstrings b/Map/Localizable.xcstrings index 13932a4..dda0deb 100644 --- a/Map/Localizable.xcstrings +++ b/Map/Localizable.xcstrings @@ -735,6 +735,61 @@ } } }, + "preferences.quick_look.preview_style.highlighted_text" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Highlighted Text" + } + } + } + }, + "preferences.quick_look.preview_style.map" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Map" + } + } + } + }, + "preferences.quick_look.preview_style.plain_text" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Plain Text" + } + } + } + }, + "preferences.quick_look.preview_style.title" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preview maps in QuickLook as:" + } + } + } + }, + "preferences.quick_look.title" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickLook:" + } + } + } + }, "preferences.stages.column.name" : { "extractionState" : "manual", "localizations" : { diff --git a/Map/Map.entitlements b/Map/Map.entitlements index d363e1c..91680ad 100644 --- a/Map/Map.entitlements +++ b/Map/Map.entitlements @@ -4,6 +4,10 @@ com.apple.security.app-sandbox + com.apple.security.application-groups + + group.systems.tranquil.Map + com.apple.security.files.user-selected.read-write com.apple.security.network.client diff --git a/Map/Presentation/Preferences/GeneralPreferencesView.swift b/Map/Presentation/Preferences/GeneralPreferencesView.swift index a70d608..b5b781d 100644 --- a/Map/Presentation/Preferences/GeneralPreferencesView.swift +++ b/Map/Presentation/Preferences/GeneralPreferencesView.swift @@ -25,8 +25,38 @@ struct GeneralPreferencesView: View { @State private var showingExportFailedAlert = false @State private var exportShouldReset = false + @AppStorage("quickLookPreviewStyle", store: UserDefaults(suiteName: "group.systems.tranquil.Map")) + private var quickLookPreviewStyle: String = UserPreferences.Defaults.quickLookPreviewStyle + var body: some View { VStack(alignment: .center, spacing: Dimensions.Spacing.loose) { + // QuickLook section + HStack(alignment: .firstTextBaseline, spacing: Dimensions.Spacing.regular) { + Text("preferences.quick_look.title") + .font(.Theme.Body.emphasized) + .frame(maxWidth: 250, alignment: .trailing) + + VStack(alignment: .leading, spacing: Dimensions.Spacing.regular) { + + Text("preferences.quick_look.preview_style.title") + .font(.Theme.Body.regular) + + Picker("", selection: $quickLookPreviewStyle) { + ForEach(QuickLookPreviewStyle.allCases, id: \.rawValue) { style in + Text(style.localizedName) + .tag(style.rawValue) + } + } + .pickerStyle(.menu) + .frame(maxWidth: 250) + .padding(.leading, -Dimensions.Spacing.regular) + + } + .frame(maxWidth: .infinity, alignment: .leading) + } + + Divider() + HStack(alignment: .firstTextBaseline, spacing: Dimensions.Spacing.regular) { Text("preferences.general.preferences.title") .font(.Theme.Body.emphasized) -- cgit