Persist project display options and toggle map tools

This commit is contained in:
livio committed 2026-09-21 14:27:45 +02:00
1 parent 06050b05f5
commit 32a36c98ec
6 files changed
+177 -52

No files matched your search

+88 -4
View File
@@ -190,7 +190,7 @@
<span>Mostra superficie, perimetro e lati</span>
</label>
<button class="secondary-command" aria-pressed="@DrawToolsVisible" @onclick="ToggleDrawTools">
@(DrawToolsVisible ? "Nascondi barra completa" : "Mostra barra completa")
@(DrawToolsVisible ? "Nascondi strumenti sulla mappa" : "Mostra strumenti sulla mappa")
</button>
<button class="danger-command" @onclick="ClearDrawings">Elimina disegni e POI</button>
</section>
@@ -263,7 +263,7 @@
</label>
<label>
Trasparenza catasto
<input type="range" min="0" max="1" step="0.05" value="0.75" @onchange="ChangeCadastreOpacity" />
<input type="range" min="0" max="1" step="0.05" value="@CadastralOpacity.ToString(System.Globalization.CultureInfo.InvariantCulture)" @onchange="ChangeCadastreOpacity" />
</label>
</section>
@@ -361,6 +361,7 @@
private string SelectedParcelNumber { get; set; } = string.Empty;
private string CatalogMessage { get; set; } = string.Empty;
private double? CatalogFraction { get; set; }
private double CadastralOpacity { get; set; } = 0.75;
private bool CatalogBusy { get; set; }
private bool GpsActive { get; set; }
private bool ShowGpsPosition { get; set; } = true;
@@ -460,6 +461,43 @@
}
}
private async Task ConfigureProjectMapProviderAsync(string snapshot)
{
string? baseLayer = null;
try
{
using var document = System.Text.Json.JsonDocument.Parse(snapshot);
if (document.RootElement.TryGetProperty("displayOptions", out var displayOptions)
&& displayOptions.TryGetProperty("baseLayer", out var baseLayerProperty))
{
baseLayer = baseLayerProperty.GetString();
}
}
catch
{
return;
}
try
{
if (baseLayer?.StartsWith("google-", StringComparison.Ordinal) == true
&& !string.IsNullOrWhiteSpace(GoogleMapsApiKey))
{
await JS.InvokeVoidAsync("lmeMap.configureGoogleMaps", GoogleMapsApiKey.Trim());
}
if (baseLayer?.StartsWith("azure-", StringComparison.Ordinal) == true
&& !string.IsNullOrWhiteSpace(AzureMapsSubscriptionKey))
{
await JS.InvokeVoidAsync("lmeMap.configureAzureMaps", AzureMapsSubscriptionKey.Trim());
}
}
catch
{
// Loading continues with the default map if the saved provider is unavailable.
}
}
private async Task CenterOnInitialLocationAsync()
{
NetworkLocationSnapshot? networkLocation = null;
@@ -976,7 +1014,9 @@
try
{
var snapshot = await ProjectStorageService.LoadAsync(project.Id);
ShowImportedSheetLayer = await JS.InvokeAsync<bool>("lmeMap.loadProjectSnapshot", snapshot, project.Name);
await ConfigureProjectMapProviderAsync(snapshot);
var displayOptions = await JS.InvokeAsync<ProjectDisplayOptions>("lmeMap.loadProjectSnapshot", snapshot, project.Name);
ApplyProjectDisplayOptions(displayOptions);
NewProjectName = project.Name;
IncludeCadastralParcels = project.IncludesCadastralParcels;
ActiveTab = "map";
@@ -993,6 +1033,25 @@
}
}
private void ApplyProjectDisplayOptions(ProjectDisplayOptions options)
{
SelectedBaseLayer = options.BaseLayer;
CadastralOpacity = options.CadastreOpacity;
IncludeKmlSheetLayer = options.IncludeKmlSheetLayer;
ShowImportedSheetLayer = options.ImportedSheetsVisible;
ShowImportedMeasurements = options.ShowImportedMeasurements;
ShowDrawingMeasurements = options.ShowDrawingMeasurements;
DrawToolsVisible = options.DrawToolsVisible;
ShowGpsPosition = options.GpsPositionVisible;
TrailEnabled = options.TrailEnabled;
var activeLayers = (options.CadastreLayers ?? []).ToHashSet(StringComparer.Ordinal);
foreach (var layer in CadastralLayers)
{
layer.Enabled = activeLayers.Contains(layer.Key);
}
}
private async Task DeleteProject()
{
var project = Projects.FirstOrDefault(item => item.Id == SelectedProjectId);
@@ -1114,7 +1173,18 @@
await JS.InvokeVoidAsync("lmeMap.showInfo", $"Chiave Azure Maps non salvata: {error.GetBaseException().Message}");
}
}
private Task ChangeCadastreOpacity(ChangeEventArgs args) => JS.InvokeVoidAsync("lmeMap.setCadastreOpacity", args.Value?.ToString()).AsTask();
private async Task ChangeCadastreOpacity(ChangeEventArgs args)
{
var text = args.Value?.ToString();
if (!double.TryParse(text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out var value)
&& !double.TryParse(text, out value))
{
return;
}
CadastralOpacity = Math.Clamp(value, 0, 1);
await JS.InvokeVoidAsync("lmeMap.setCadastreOpacity", CadastralOpacity);
}
private async Task ToggleCadastreLayer(CadastralLayer layer, ChangeEventArgs args)
{
@@ -1149,6 +1219,20 @@
public string Detail { get; } = detail;
}
private sealed class ProjectDisplayOptions
{
public string BaseLayer { get; init; } = "satellite";
public double CadastreOpacity { get; init; } = 0.75;
public string[] CadastreLayers { get; init; } = [];
public bool IncludeKmlSheetLayer { get; init; }
public bool ImportedSheetsVisible { get; init; }
public bool ShowImportedMeasurements { get; init; }
public bool ShowDrawingMeasurements { get; init; } = true;
public bool DrawToolsVisible { get; init; }
public bool GpsPositionVisible { get; init; } = true;
public bool TrailEnabled { get; init; }
}
public ValueTask DisposeAsync()
{
CancelCatalogWork();