Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/components/home/preview_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ class _PreviewCardState extends State<PreviewCard> {

@override
Widget build(BuildContext context) {
expanded.value = widget.selected;
final theme = Theme.of(context);
final colorScheme = theme.colorScheme;
final disableAnimations = MediaQuery.disableAnimationsOf(context);
Expand Down
40 changes: 40 additions & 0 deletions lib/components/home/select_all_button.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import 'package:flutter/material.dart';
import 'package:saber/i18n/strings.g.dart';

class SelectAllNotesButton extends StatelessWidget {
const SelectAllNotesButton({
super.key,
required this.selectedFiles,
required this.allFiles,
required this.selectAll,
required this.deselectAll,
});

final List<String> selectedFiles;
final List<String> allFiles;
final void Function() selectAll;
final void Function() deselectAll;

bool get areAllFilesSelected {
for (String file in allFiles) {
if (!selectedFiles.contains(file)) return false;
}
return true;
}

@override
Widget build(BuildContext context) {
return IconButton(
padding: EdgeInsets.zero,
tooltip:
areAllFilesSelected ? t.home.deselectAllNotes : t.home.selectAllNotes,
onPressed: () {
if (areAllFilesSelected)
deselectAll();
else
selectAll();
},
icon: Icon(areAllFilesSelected ? Icons.deselect : Icons.select_all),
);
}
}
2 changes: 2 additions & 0 deletions lib/i18n/en.i18n.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ home:
renamedTo: Note will be renamed to $newName
multipleRenamedTo: "The following notes will be renamed:"
numberRenamedTo: $n notes will be renamed to avoid conflicts
selectAllNotes: Select all
deselectAllNotes: Deselect all
deleteNote: Delete note
renameFolder:
renameFolder: Rename folder
Expand Down
2 changes: 2 additions & 0 deletions lib/i18n/it.i18n.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ home:
renamedTo: La nota verrà rinominata in $newName
multipleRenamedTo: "Le note seguenti verranno rinominate:"
numberRenamedTo: $n le note verranno rinominate per evitare conflitti
selectAllNotes: Seleziona tutto
deselectAllNotes: Deseleziona tutto
deleteNote: Elimina nota
renameFolder:
renameFolder: Rinomina cartella
Expand Down
2 changes: 2 additions & 0 deletions lib/i18n/strings_en.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ class TranslationsHomeEn {
late final TranslationsHomeNewFolderEn newFolder = TranslationsHomeNewFolderEn.internal(_root);
late final TranslationsHomeRenameNoteEn renameNote = TranslationsHomeRenameNoteEn.internal(_root);
late final TranslationsHomeMoveNoteEn moveNote = TranslationsHomeMoveNoteEn.internal(_root);
String get selectAllNotes => 'Select all';
String get deselectAllNotes => 'Deselect all';
String get deleteNote => 'Delete note';
late final TranslationsHomeRenameFolderEn renameFolder = TranslationsHomeRenameFolderEn.internal(_root);
late final TranslationsHomeDeleteFolderEn deleteFolder = TranslationsHomeDeleteFolderEn.internal(_root);
Expand Down
2 changes: 2 additions & 0 deletions lib/i18n/strings_it.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ class _TranslationsHomeIt extends TranslationsHomeEn {
@override late final _TranslationsHomeNewFolderIt newFolder = _TranslationsHomeNewFolderIt._(_root);
@override late final _TranslationsHomeRenameNoteIt renameNote = _TranslationsHomeRenameNoteIt._(_root);
@override late final _TranslationsHomeMoveNoteIt moveNote = _TranslationsHomeMoveNoteIt._(_root);
@override String get selectAllNotes => 'Seleziona tutto';
@override String get deselectAllNotes => 'Deseleziona tutto';
@override String get deleteNote => 'Elimina nota';
@override late final _TranslationsHomeRenameFolderIt renameFolder = _TranslationsHomeRenameFolderIt._(_root);
@override late final _TranslationsHomeDeleteFolderIt deleteFolder = _TranslationsHomeDeleteFolderIt._(_root);
Expand Down
24 changes: 20 additions & 4 deletions lib/pages/home/browse.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import 'package:saber/components/home/move_note_button.dart';
import 'package:saber/components/home/new_note_button.dart';
import 'package:saber/components/home/no_files.dart';
import 'package:saber/components/home/rename_note_button.dart';
import 'package:saber/components/home/select_all_button.dart';
import 'package:saber/components/home/syncing_button.dart';
import 'package:saber/data/file_manager/file_manager.dart';
import 'package:saber/data/routes.dart';
Expand All @@ -31,6 +32,13 @@ class BrowsePage extends StatefulWidget {
class _BrowsePageState extends State<BrowsePage> {
DirectoryChildren? children;

List<String> get notesInCwd {
return [
for (String filePath in children?.files ?? const [])
"${path ?? ""}/$filePath",
];
}

final List<String?> pathHistory = [];
String? path;

Expand Down Expand Up @@ -185,10 +193,7 @@ class _BrowsePageState extends State<BrowsePage> {
),
sliver: MasonryFiles(
crossAxisCount: crossAxisCount,
files: [
for (String filePath in children?.files ?? const [])
"${path ?? ""}/$filePath",
],
files: notesInCwd,
selectedFiles: selectedFiles,
),
),
Expand Down Expand Up @@ -234,6 +239,17 @@ class _BrowsePageState extends State<BrowsePage> {
},
icon: const Icon(Icons.delete_forever),
),
SelectAllNotesButton(
selectedFiles: selectedFiles.value,
allFiles: notesInCwd,
selectAll: () => {
selectedFiles.value.clear(),
for (String filePath in notesInCwd)
selectedFiles.value.add(filePath),
setState(() {})
},
deselectAll: () => {selectedFiles.value = []},
),
ExportNoteButton(
selectedFiles: selectedFiles.value,
),
Expand Down
12 changes: 12 additions & 0 deletions lib/pages/home/recent_notes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:saber/components/home/masonry_files.dart';
import 'package:saber/components/home/move_note_button.dart';
import 'package:saber/components/home/new_note_button.dart';
import 'package:saber/components/home/rename_note_button.dart';
import 'package:saber/components/home/select_all_button.dart';
import 'package:saber/components/home/syncing_button.dart';
import 'package:saber/components/home/welcome.dart';
import 'package:saber/data/file_manager/file_manager.dart';
Expand Down Expand Up @@ -203,6 +204,17 @@ class _RecentPageState extends State<RecentPage> {
},
icon: const Icon(Icons.delete_forever),
),
SelectAllNotesButton(
selectedFiles: selectedFiles.value,
allFiles: filePaths,
selectAll: () => {
selectedFiles.value.clear(),
for (String file in filePaths)
selectedFiles.value.add(file),
setState(() {}),
},
deselectAll: () => selectedFiles.value = [],
),
ExportNoteButton(
selectedFiles: selectedFiles.value,
),
Expand Down