diff --git a/CHANGELOG.md b/CHANGELOG.md index f2854897e..47407e43b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,8 @@ All notable changes to this project will be documented in this file. ### Added -- edit location via GPX +- Metadata: edit location via GPX +- Metadata: toggle for all types in removal dialog ### Changed diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 937f33be2..dc058d564 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -518,6 +518,7 @@ "editEntryRatingDialogTitle": "Rating", "removeEntryMetadataDialogTitle": "Metadata Removal", + "removeEntryMetadataDialogAll": "All", "removeEntryMetadataDialogMore": "More", "removeEntryMetadataMotionPhotoXmpWarningDialogMessage": "XMP is required to play the video inside a motion photo.\n\nAre you sure you want to remove it?", diff --git a/lib/widgets/dialogs/entry_editors/remove_metadata_dialog.dart b/lib/widgets/dialogs/entry_editors/remove_metadata_dialog.dart index 7ed6cb274..adebe6649 100644 --- a/lib/widgets/dialogs/entry_editors/remove_metadata_dialog.dart +++ b/lib/widgets/dialogs/entry_editors/remove_metadata_dialog.dart @@ -29,7 +29,7 @@ class RemoveEntryMetadataDialog extends StatefulWidget { } class _RemoveEntryMetadataDialogState extends State { - late final List _mainOptions, _moreOptions; + late final List _allOptions, _mainOptions, _moreOptions; final Set _types = {}; bool _showMore = false; final ValueNotifier _isValidNotifier = ValueNotifier(false); @@ -37,10 +37,11 @@ class _RemoveEntryMetadataDialogState extends State { @override void initState() { super.initState(); - final byMain = groupBy([ + _allOptions = [ ...MetadataTypes.common, if (widget.showJpegTypes) ...MetadataTypes.jpeg, - ], MetadataTypes.main.contains); + ]; + final byMain = groupBy(_allOptions, MetadataTypes.main.contains); _mainOptions = (byMain[true] ?? [])..sort(_compareTypeText); _moreOptions = (byMain[false] ?? [])..sort(_compareTypeText); _validate(); @@ -59,6 +60,17 @@ class _RemoveEntryMetadataDialogState extends State { return AvesDialog( title: l10n.removeEntryMetadataDialogTitle, scrollableContent: [ + SwitchListTile( + value: _types.length == _allOptions.length, + onChanged: (selected) { + selected ? _types.addAll(_allOptions) : _types.clear(); + setState(_validate); + }, + title: Align( + alignment: Alignment.centerLeft, + child: Text(l10n.removeEntryMetadataDialogAll), + ), + ), ..._mainOptions.map(_toTile), if (_moreOptions.isNotEmpty) Padding( @@ -131,8 +143,7 @@ class _RemoveEntryMetadataDialogState extends State { value: _types.contains(type), onChanged: (selected) { selected ? _types.add(type) : _types.remove(type); - _validate(); - setState(() {}); + setState(_validate); }, title: Align( alignment: Alignment.centerLeft,