collection: added option to not group

This commit is contained in:
Thibault Deckers 2020-08-01 21:34:06 +09:00
parent 936a004923
commit 5f3d4e5946
3 changed files with 29 additions and 13 deletions

View file

@ -85,6 +85,8 @@ class CollectionLens with ChangeNotifier, CollectionActivityMixin, CollectionSel
bool get showHeaders { bool get showHeaders {
if (sortFactor == SortFactor.size) return false; if (sortFactor == SortFactor.size) return false;
if (sortFactor == SortFactor.date && groupFactor == GroupFactor.none) return false;
final albumSections = sortFactor == SortFactor.name || (sortFactor == SortFactor.date && groupFactor == GroupFactor.album); final albumSections = sortFactor == SortFactor.name || (sortFactor == SortFactor.date && groupFactor == GroupFactor.album);
final filterByAlbum = filters.any((f) => f is AlbumFilter); final filterByAlbum = filters.any((f) => f is AlbumFilter);
if (albumSections && filterByAlbum) return false; if (albumSections && filterByAlbum) return false;
@ -160,6 +162,11 @@ class CollectionLens with ChangeNotifier, CollectionActivityMixin, CollectionSel
case GroupFactor.day: case GroupFactor.day:
sections = groupBy<ImageEntry, DateTime>(_filteredEntries, (entry) => entry.dayTaken); sections = groupBy<ImageEntry, DateTime>(_filteredEntries, (entry) => entry.dayTaken);
break; break;
case GroupFactor.none:
sections = Map.fromEntries([
MapEntry(null, _filteredEntries),
]);
break;
} }
break; break;
case SortFactor.size: case SortFactor.size:
@ -209,7 +216,7 @@ class CollectionLens with ChangeNotifier, CollectionActivityMixin, CollectionSel
enum SortFactor { date, size, name } enum SortFactor { date, size, name }
enum GroupFactor { album, month, day } enum GroupFactor { none, album, month, day }
enum Activity { browse, select } enum Activity { browse, select }

View file

@ -271,6 +271,10 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
value: CollectionAction.groupByDay, value: CollectionAction.groupByDay,
child: MenuRow(text: 'Group by day', checked: collection.groupFactor == GroupFactor.day), child: MenuRow(text: 'Group by day', checked: collection.groupFactor == GroupFactor.day),
), ),
PopupMenuItem(
value: CollectionAction.groupByNone,
child: MenuRow(text: 'Do not group', checked: collection.groupFactor == GroupFactor.none),
),
PopupMenuDivider(), PopupMenuDivider(),
] ]
: []; : [];
@ -329,6 +333,10 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
settings.collectionGroupFactor = GroupFactor.day; settings.collectionGroupFactor = GroupFactor.day;
collection.group(GroupFactor.day); collection.group(GroupFactor.day);
break; break;
case CollectionAction.groupByNone:
settings.collectionGroupFactor = GroupFactor.none;
collection.group(GroupFactor.none);
break;
case CollectionAction.sortByDate: case CollectionAction.sortByDate:
settings.collectionSortFactor = SortFactor.date; settings.collectionSortFactor = SortFactor.date;
collection.sort(SortFactor.date); collection.sort(SortFactor.date);
@ -375,6 +383,7 @@ enum CollectionAction {
groupByAlbum, groupByAlbum,
groupByMonth, groupByMonth,
groupByDay, groupByDay,
groupByNone,
sortByDate, sortByDate,
sortBySize, sortBySize,
sortByName, sortByName,

View file

@ -29,18 +29,18 @@ class SectionHeader extends StatelessWidget {
Widget header; Widget header;
switch (collection.sortFactor) { switch (collection.sortFactor) {
case SortFactor.date: case SortFactor.date:
if (collection.sortFactor == SortFactor.date) { switch (collection.groupFactor) {
switch (collection.groupFactor) { case GroupFactor.album:
case GroupFactor.album: header = _buildAlbumSectionHeader();
header = _buildAlbumSectionHeader(); break;
break; case GroupFactor.month:
case GroupFactor.month: header = MonthSectionHeader(key: ValueKey(sectionKey), date: sectionKey as DateTime);
header = MonthSectionHeader(key: ValueKey(sectionKey), date: sectionKey as DateTime); break;
break; case GroupFactor.day:
case GroupFactor.day: header = DaySectionHeader(key: ValueKey(sectionKey), date: sectionKey as DateTime);
header = DaySectionHeader(key: ValueKey(sectionKey), date: sectionKey as DateTime); break;
break; case GroupFactor.none:
} break;
} }
break; break;
case SortFactor.size: case SortFactor.size: