diff --git a/Components/MenuHelp.razor b/Components/MenuHelp.razor
index f78c591..808f7e9 100644
--- a/Components/MenuHelp.razor
+++ b/Components/MenuHelp.razor
@@ -83,7 +83,7 @@
"Rinomina cambia il nome del progetto selezionato senza alterarne contenuti e revisioni. Duplica crea invece una copia modificabile, utile prima di una variante importante o quando ricevi un progetto in sola lettura.",
"Archivia nasconde logicamente i lavori conclusi senza eliminarli; Ripristina li riporta tra quelli attivi. Elimina rimuove invece il progetto dall'archivio.",
"Condividi modificabile consente al destinatario di continuare il lavoro; Condividi in sola lettura protegge l'originale e richiede una duplicazione per modificarlo.",
- "Revisioni: seleziona una data e usa Apri revisione per consultarne lo stato oppure Confronta per vedere le differenze con la versione corrente.",
+ "Revisioni: la prima viene creata quando salvi per la seconda volta un progetto gia esistente. L'elenco si aggiorna anche dopo i salvataggi automatici; seleziona una data e usa Apri revisione oppure Confronta.",
"Backup: Crea backup raccoglie tutti i progetti in un file trasferibile. Ripristina backup ricarica un archivio completo; Importa progetto aggiunge invece un singolo progetto condiviso."
],
"tools" =>
diff --git a/Components/Pages/Home.razor b/Components/Pages/Home.razor
index 8246470..ebe56e7 100644
--- a/Components/Pages/Home.razor
+++ b/Components/Pages/Home.razor
@@ -374,6 +374,14 @@
}
+ @if (!string.IsNullOrWhiteSpace(SelectedProjectId) && ProjectVersions.Count == 0)
+ {
+ Non ci sono ancora revisioni: la prima viene creata quando salvi nuovamente un progetto già esistente.
+ }
+ else if (ProjectVersions.Count > 0)
+ {
+ @ProjectVersions.Count revisioni disponibili, ordinate dalla più recente.
+ }
@@ -905,6 +913,7 @@
await JS.InvokeVoidAsync("lmeMap.clearLegacyProjectSnapshot");
await RefreshProjectsAsync();
SelectedProjectId = migrated.Id;
+ await RefreshProjectVersionsAsync(true);
await InvokeAsync(StateHasChanged);
}
catch
@@ -1366,6 +1375,7 @@
{
SelectedProjectId = string.Empty;
}
+ await RefreshProjectVersionsAsync();
ProjectArchiveMessage = Projects.Count == 0
? "Nessun progetto salvato."
: $"{Projects.Count} {(Projects.Count == 1 ? "progetto salvato" : "progetti salvati")} nell'archivio interno.";
@@ -1380,10 +1390,18 @@
{
SelectedProjectId = args.Value?.ToString() ?? string.Empty;
ProjectFolder = SelectedProject?.Folder ?? string.Empty;
- SelectedVersionId = string.Empty;
+ await RefreshProjectVersionsAsync(true);
+ }
+
+ private async Task RefreshProjectVersionsAsync(bool resetSelection = false)
+ {
ProjectVersions = string.IsNullOrWhiteSpace(SelectedProjectId)
? []
: await ProjectStorageService.GetVersionsAsync(SelectedProjectId);
+ if (resetSelection || ProjectVersions.All(version => version.Id != SelectedVersionId))
+ {
+ SelectedVersionId = string.Empty;
+ }
}
private Task UndoMapChange() => JS.InvokeVoidAsync("lmeMap.undoMapChange").AsTask();
@@ -1405,6 +1423,7 @@
await RefreshProjectsAsync();
SelectedProjectId = copy.Id;
ProjectFolder = copy.Folder;
+ await RefreshProjectVersionsAsync(true);
await JS.InvokeVoidAsync("lmeMap.showInfo", $"Progetto duplicato: {copy.Name}.");
}
@@ -1424,6 +1443,7 @@
var renamed = await ProjectStorageService.RenameAsync(project.Id, requestedName);
await RefreshProjectsAsync();
SelectedProjectId = renamed.Id;
+ await RefreshProjectVersionsAsync();
NewProjectName = renamed.Name;
if (!HasUnsavedChanges)
{
@@ -1488,6 +1508,7 @@
var imported = await ProjectStorageService.ImportProjectAsync(path);
await RefreshProjectsAsync();
SelectedProjectId = imported.Id;
+ await RefreshProjectVersionsAsync(true);
await JS.InvokeVoidAsync("lmeMap.showInfo", $"Progetto importato: {imported.Name}.");
}
@@ -1588,6 +1609,7 @@
existing?.Id);
await RefreshProjectsAsync();
SelectedProjectId = saved.Id;
+ await RefreshProjectVersionsAsync();
NewProjectName = saved.Name;
await JS.InvokeVoidAsync("lmeMap.setProjectReadOnly", false);
await JS.InvokeVoidAsync("lmeMap.markProjectSaved");
diff --git a/LMEMappeCatastaliApp.csproj b/LMEMappeCatastaliApp.csproj
index 77c12a7..c18fef1 100644
--- a/LMEMappeCatastaliApp.csproj
+++ b/LMEMappeCatastaliApp.csproj
@@ -28,8 +28,8 @@
com.companyname.lmemappecatastaliapp
- 0.4.6
- 41
+ 0.4.7
+ 42$(ApplicationDisplayVersion)
diff --git a/README.md b/README.md
index bf8f273..d116c3a 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,12 @@
App .NET MAUI Blazor Hybrid per Android, iOS, Mac Catalyst e Windows, pensata per consultare mappe catastali e lavorare sul campo con GPS.
+## Versione 0.4.7
+
+- La ricerca nel pannello Layer conserva correttamente posizione e selezione del cursore durante il filtraggio; digitando `pio` il testo non viene piu invertito in `oip`.
+- L'elenco revisioni viene aggiornato dopo salvataggi manuali e automatici, rinomina, importazione e selezione del progetto.
+- Il pannello Progetti mostra quante revisioni sono disponibili e spiega quando un progetto appena creato non possiede ancora versioni precedenti.
+
## Versione 0.4.6
- `Mostra cornice/layer del foglio` carica dal WFS ufficiale AdE il vero confine `CP:CadastralZoning` di ciascun foglio delle particelle.
diff --git a/Services/MapExportService.cs b/Services/MapExportService.cs
index 492073a..2796fc7 100644
--- a/Services/MapExportService.cs
+++ b/Services/MapExportService.cs
@@ -85,7 +85,7 @@ public sealed class MapExportService
{
var root = new XElement("gpx",
new XAttribute("version", "1.1"),
- new XAttribute("creator", "LME Mappe Catastali 0.4.6"),
+ new XAttribute("creator", "LME Mappe Catastali 0.4.7"),
new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance"),
new XElement("metadata", new XElement("name", name)));
foreach (var feature in features.EnumerateArray())
diff --git a/wwwroot/js/lme-map.js b/wwwroot/js/lme-map.js
index 7bc9b4c..73ef12a 100644
--- a/wwwroot/js/lme-map.js
+++ b/wwwroot/js/lme-map.js
@@ -2019,9 +2019,15 @@ function renderLayerSelectionToolbar() {