#1075 metadata: toggle for all types in removal dialog

This commit is contained in:
Thibault Deckers 2025-02-03 19:29:43 +01:00
parent 598b705b36
commit e14a1a0bee
3 changed files with 19 additions and 6 deletions

View file

@ -6,7 +6,8 @@ All notable changes to this project will be documented in this file.
### Added ### Added
- edit location via GPX - Metadata: edit location via GPX
- Metadata: toggle for all types in removal dialog
### Changed ### Changed

View file

@ -518,6 +518,7 @@
"editEntryRatingDialogTitle": "Rating", "editEntryRatingDialogTitle": "Rating",
"removeEntryMetadataDialogTitle": "Metadata Removal", "removeEntryMetadataDialogTitle": "Metadata Removal",
"removeEntryMetadataDialogAll": "All",
"removeEntryMetadataDialogMore": "More", "removeEntryMetadataDialogMore": "More",
"removeEntryMetadataMotionPhotoXmpWarningDialogMessage": "XMP is required to play the video inside a motion photo.\n\nAre you sure you want to remove it?", "removeEntryMetadataMotionPhotoXmpWarningDialogMessage": "XMP is required to play the video inside a motion photo.\n\nAre you sure you want to remove it?",

View file

@ -29,7 +29,7 @@ class RemoveEntryMetadataDialog extends StatefulWidget {
} }
class _RemoveEntryMetadataDialogState extends State<RemoveEntryMetadataDialog> { class _RemoveEntryMetadataDialogState extends State<RemoveEntryMetadataDialog> {
late final List<MetadataType> _mainOptions, _moreOptions; late final List<MetadataType> _allOptions, _mainOptions, _moreOptions;
final Set<MetadataType> _types = {}; final Set<MetadataType> _types = {};
bool _showMore = false; bool _showMore = false;
final ValueNotifier<bool> _isValidNotifier = ValueNotifier(false); final ValueNotifier<bool> _isValidNotifier = ValueNotifier(false);
@ -37,10 +37,11 @@ class _RemoveEntryMetadataDialogState extends State<RemoveEntryMetadataDialog> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
final byMain = groupBy([ _allOptions = [
...MetadataTypes.common, ...MetadataTypes.common,
if (widget.showJpegTypes) ...MetadataTypes.jpeg, if (widget.showJpegTypes) ...MetadataTypes.jpeg,
], MetadataTypes.main.contains); ];
final byMain = groupBy(_allOptions, MetadataTypes.main.contains);
_mainOptions = (byMain[true] ?? [])..sort(_compareTypeText); _mainOptions = (byMain[true] ?? [])..sort(_compareTypeText);
_moreOptions = (byMain[false] ?? [])..sort(_compareTypeText); _moreOptions = (byMain[false] ?? [])..sort(_compareTypeText);
_validate(); _validate();
@ -59,6 +60,17 @@ class _RemoveEntryMetadataDialogState extends State<RemoveEntryMetadataDialog> {
return AvesDialog( return AvesDialog(
title: l10n.removeEntryMetadataDialogTitle, title: l10n.removeEntryMetadataDialogTitle,
scrollableContent: [ 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), ..._mainOptions.map(_toTile),
if (_moreOptions.isNotEmpty) if (_moreOptions.isNotEmpty)
Padding( Padding(
@ -131,8 +143,7 @@ class _RemoveEntryMetadataDialogState extends State<RemoveEntryMetadataDialog> {
value: _types.contains(type), value: _types.contains(type),
onChanged: (selected) { onChanged: (selected) {
selected ? _types.add(type) : _types.remove(type); selected ? _types.add(type) : _types.remove(type);
_validate(); setState(_validate);
setState(() {});
}, },
title: Align( title: Align(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,