Refactor SAR marker handling and add template management

- Updated CompassSarList and DetailedCompassDialog to use marker.displayName instead of marker.type.displayName.
- Enhanced DrawingLayer and DrawingMarkersLayer to support simple mode for drawing visibility and interaction.
- Added toggle switches in DrawingToolbar for showing/hiding received drawings and SAR markers.
- Modified MapMarkers to utilize custom emojis and display names for markers.
- Introduced RecipientSelectorSheet for selecting message recipients with search functionality.
- Refactored SarUpdateSheet to use SAR templates instead of marker types, allowing for emoji and name customization.
- Created SarTemplateEditDialog for adding and editing SAR templates with color selection and preview.
This commit is contained in:
Janez T
2025-10-21 23:44:49 +02:00
parent e9d516b749
commit 021ce21cbe
60 changed files with 8736 additions and 1413 deletions

View File

@@ -207,6 +207,16 @@
"description": "Descripción de la configuración de indicadores RX/TX"
},
"simpleMode": "Modo Simple",
"@simpleMode": {
"description": "Configuración para habilitar el modo simple"
},
"simpleModeDescription": "Ocultar información no esencial en mensajes y contactos",
"@simpleModeDescription": {
"description": "Descripción de la configuración del modo simple"
},
"language": "Idioma",
"@language": {
"description": "Etiqueta de la configuración de idioma"
@@ -514,7 +524,7 @@
"description": "Etiqueta del botón de actualizar"
},
"sendDirectMessage": "Enviar mensaje directo",
"sendDirectMessage": "Enviar",
"@sendDirectMessage": {
"description": "Acción para enviar mensaje directo al contacto"
},
@@ -634,6 +644,36 @@
"description": "Acción para borrar todos los dibujos locales"
},
"showReceivedDrawings": "Mostrar dibujos recibidos",
"@showReceivedDrawings": {
"description": "Alternar para mostrar/ocultar dibujos recibidos de otros miembros del equipo"
},
"showingAllDrawings": "Mostrando todos los dibujos",
"@showingAllDrawings": {
"description": "Subtítulo cuando los dibujos recibidos son visibles"
},
"showingOnlyYourDrawings": "Mostrando solo tus dibujos",
"@showingOnlyYourDrawings": {
"description": "Subtítulo cuando los dibujos recibidos están ocultos"
},
"showSarMarkers": "Mostrar marcadores SAR",
"@showSarMarkers": {
"description": "Alternar para mostrar/ocultar marcadores SAR en el mapa"
},
"showingSarMarkers": "Mostrando marcadores SAR",
"@showingSarMarkers": {
"description": "Subtítulo cuando los marcadores SAR son visibles"
},
"hidingSarMarkers": "Ocultando marcadores SAR",
"@hidingSarMarkers": {
"description": "Subtítulo cuando los marcadores SAR están ocultos"
},
"clearAll": "Borrar todo",
"@clearAll": {
"description": "Etiqueta del botón de borrar todo"
@@ -762,6 +802,11 @@
"description": "Etiqueta para la sección de ubicación"
},
"myLocation": "Mi ubicación",
"@myLocation": {
"description": "Etiqueta del botón para insertar la ubicación GPS actual"
},
"fromMap": "Desde el mapa",
"@fromMap": {
"description": "Insignia que muestra que la ubicación es desde un toque en el mapa"
@@ -1125,6 +1170,21 @@
"description": "Etiqueta de precisión GPS"
},
"distance": "Distancia",
"@distance": {
"description": "Etiqueta de distancia en la brújula"
},
"bearing": "Rumbo",
"@bearing": {
"description": "Etiqueta de rumbo en la brújula"
},
"direction": "Dirección",
"@direction": {
"description": "Etiqueta de dirección en la brújula"
},
"filterMarkers": "Filtrar marcadores",
"@filterMarkers": {
"description": "Título del diálogo de filtrar marcadores"
@@ -1538,6 +1598,21 @@
"description": "Nombre de capa de imágenes de satélite ESRI"
},
"googleHybrid": "Google Híbrido",
"@googleHybrid": {
"description": "Nombre de capa Google Híbrido (satélite + etiquetas)"
},
"googleRoadmap": "Google Mapa de Carreteras",
"@googleRoadmap": {
"description": "Nombre de capa Google Mapa de Carreteras"
},
"googleTerrain": "Google Terreno",
"@googleTerrain": {
"description": "Nombre de capa Google Terreno (topográfico)"
},
"downloadVisibleArea": "Descargar área visible",
"@downloadVisibleArea": {
"description": "Tooltip para el botón de descargar área visible"
@@ -1673,6 +1748,11 @@
"description": "Mensaje de información cuando se elimina mensaje"
},
"copyText": "Copiar texto",
"textCopiedToClipboard": "Texto copiado al portapapeles",
"deleteMessage": "Eliminar mensaje",
"deleteMessageConfirmation": "¿Está seguro de que desea eliminar este mensaje?",
"refreshedContacts": "Contactos actualizados",
"@refreshedContacts": {
"description": "Mensaje de éxito cuando se actualizan contactos"
@@ -1901,6 +1981,111 @@
"description": "Mensaje de error cuando falla la eliminación de MBTiles"
},
"importExportCachedTiles": "Importar/Exportar teselas en caché",
"@importExportCachedTiles": {
"description": "Título para sección de importar/exportar"
},
"importExportDescription": "Realice copias de seguridad, comparta y restaure teselas de mapas descargadas entre dispositivos",
"@importExportDescription": {
"description": "Descripción de funcionalidad de importar/exportar"
},
"exportTilesToFile": "Exportar teselas a archivo",
"@exportTilesToFile": {
"description": "Botón para exportar teselas"
},
"importTilesFromFile": "Importar teselas desde archivo",
"@importTilesFromFile": {
"description": "Botón para importar teselas"
},
"selectExportLocation": "Seleccionar ubicación de exportación",
"@selectExportLocation": {
"description": "Título para selector de archivo de exportación"
},
"selectImportFile": "Seleccionar archivo de teselas",
"@selectImportFile": {
"description": "Título para selector de archivo de importación"
},
"exportingTiles": "Exportando teselas...",
"@exportingTiles": {
"description": "Mensaje de estado durante exportación"
},
"importingTiles": "Importando teselas...",
"@importingTiles": {
"description": "Mensaje de estado durante importación"
},
"exportSuccess": "{count} teselas exportadas exitosamente",
"@exportSuccess": {
"description": "Mensaje de éxito después de exportar",
"placeholders": {
"count": {
"type": "int"
}
}
},
"importSuccess": "{count} almacenes importados exitosamente",
"@importSuccess": {
"description": "Mensaje de éxito después de importar",
"placeholders": {
"count": {
"type": "int"
}
}
},
"exportFailed": "Error en exportación: {error}",
"@exportFailed": {
"description": "Mensaje de error cuando falla exportación",
"placeholders": {
"error": {
"type": "String"
}
}
},
"importFailed": "Error en importación: {error}",
"@importFailed": {
"description": "Mensaje de error cuando falla importación",
"placeholders": {
"error": {
"type": "String"
}
}
},
"exportNote": "Crea un archivo comprimido (.fmtc) que se puede compartir e importar en otros dispositivos.",
"@exportNote": {
"description": "Nota sobre funcionalidad de exportación"
},
"importNote": "Importa teselas de mapa desde un archivo previamente exportado. Las teselas se fusionarán con la caché existente.",
"@importNote": {
"description": "Nota sobre funcionalidad de importación"
},
"noTilesToExport": "No hay teselas para exportar",
"@noTilesToExport": {
"description": "Mensaje cuando caché está vacío"
},
"archiveContainsStores": "El archivo contiene {count} almacenes",
"@archiveContainsStores": {
"description": "Información sobre contenido del archivo",
"placeholders": {
"count": {
"type": "int"
}
}
},
"vectorTiles": "Teselas vectoriales",
"@vectorTiles": {
"description": "Etiqueta del tipo de tesela vectorial"
@@ -2134,5 +2319,63 @@
"type": "String"
}
}
}
},
"sarTemplates": "SAR Templates",
"manageSarTemplates": "Manage cursor on target templates",
"addTemplate": "Add Template",
"editTemplate": "Edit Template",
"deleteTemplate": "Delete Template",
"templateName": "Template Name",
"templateNameHint": "e.g. Found Person",
"templateEmoji": "Emoji",
"emojiRequired": "Se requiere emoji",
"nameRequired": "Se requiere nombre",
"templateDescription": "Description (Optional)",
"templateDescriptionHint": "Add additional context...",
"templateColor": "Color",
"previewFormat": "Preview (SAR Message Format)",
"importFromClipboard": "Import",
"exportToClipboard": "Export",
"deleteTemplateConfirmation": "Delete template '{name}'?",
"templateAdded": "Template added",
"templateUpdated": "Template updated",
"templateDeleted": "Template deleted",
"templatesImported": "{count, plural, =0{No templates imported} =1{Imported 1 template} other{Imported {count} templates}}",
"templatesExported": "{count, plural, =1{Exported 1 template to clipboard} other{Exported {count} templates to clipboard}}",
"importFailed": "Import failed: {error}",
"exportFailed": "Export failed: {error}",
"resetToDefaults": "Reset to Defaults",
"resetToDefaultsConfirmation": "This will delete all custom templates and restore the 4 default templates. Continue?",
"reset": "Reset",
"resetComplete": "Templates reset to defaults",
"noTemplates": "No templates available",
"tapAddToCreate": "Tap + to create your first template",
"ok": "OK",
"delete": "Eliminar",
"permissionsSection": "Permisos",
"locationPermission": "Permiso de ubicación",
"checking": "Comprobando...",
"locationPermissionGrantedAlways": "Concedido (Siempre)",
"locationPermissionGrantedWhileInUse": "Concedido (Durante el uso)",
"locationPermissionDeniedTapToRequest": "Denegado - Toca para solicitar",
"locationPermissionPermanentlyDeniedOpenSettings": "Denegado permanentemente - Abrir ajustes",
"locationPermissionDialogContent": "El permiso de ubicación está permanentemente denegado. Por favor, actívalo en la configuración de tu dispositivo para usar el rastreo GPS y compartir ubicación.",
"openSettings": "Abrir ajustes",
"locationPermissionGranted": "¡Permiso de ubicación concedido!",
"locationPermissionRequiredForGps": "El permiso de ubicación es necesario para el rastreo GPS y compartir ubicación.",
"locationPermissionAlreadyGranted": "El permiso de ubicación ya está concedido.",
"sarNavyBlue": "SAR Azul Marino",
"sarNavyBlueDescription": "Modo Profesional/Operaciones",
"selectRecipient": "Seleccionar destinatario",
"broadcastToAllNearby": "Transmitir a todos cercanos",
"searchRecipients": "Buscar destinatarios...",
"noContactsFound": "No se encontraron contactos",
"noRoomsFound": "No se encontraron salas",
"noContactsOrRoomsAvailable": "No hay contactos o salas disponibles",
"messagesWillBeSentToPublicChannel": "Los mensajes se enviarán al canal público",
"newMessage": "Nuevo mensaje",
"channel": "Canal"
}