aves/lib/model/actions/entry_actions.dart
2023-02-05 17:02:44 +01:00

352 lines
10 KiB
Dart

import 'package:aves/theme/colors.dart';
import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:flutter/widgets.dart';
enum EntryAction {
info,
addShortcut,
copyToClipboard,
delete,
restore,
convert,
print,
rename,
copy,
move,
share,
toggleFavourite,
// raster
rotateCCW,
rotateCW,
flip,
// vector
viewSource,
// video
videoCaptureFrame,
videoSelectStreams,
videoSetSpeed,
videoToggleMute,
videoSettings,
videoTogglePlay,
videoReplay10,
videoSkip10,
// external
edit,
open,
openVideo,
openMap,
setAs,
// platform
rotateScreen,
// metadata
editDate,
editLocation,
editTitleDescription,
editRating,
editTags,
removeMetadata,
exportMetadata,
// metadata / GeoTIFF
showGeoTiffOnMap,
// metadata / motion photo
convertMotionPhotoToStillImage,
viewMotionPhotoVideo,
// debug
debug,
}
class EntryActions {
static const topLevel = [
EntryAction.info,
EntryAction.share,
EntryAction.edit,
EntryAction.rename,
EntryAction.delete,
EntryAction.copy,
EntryAction.move,
EntryAction.toggleFavourite,
EntryAction.rotateScreen,
EntryAction.viewSource,
];
static const export = [
...exportInternal,
...exportExternal,
];
static const exportInternal = [
EntryAction.convert,
EntryAction.addShortcut,
EntryAction.copyToClipboard,
EntryAction.print,
];
static const exportExternal = [
EntryAction.open,
EntryAction.openMap,
EntryAction.setAs,
];
static const pageActions = [
EntryAction.videoCaptureFrame,
EntryAction.videoSelectStreams,
EntryAction.videoSetSpeed,
EntryAction.videoToggleMute,
EntryAction.videoSettings,
EntryAction.videoTogglePlay,
EntryAction.videoReplay10,
EntryAction.videoSkip10,
EntryAction.rotateCCW,
EntryAction.rotateCW,
EntryAction.flip,
];
static const trashed = [
EntryAction.delete,
EntryAction.restore,
EntryAction.debug,
];
static const video = [
EntryAction.videoCaptureFrame,
EntryAction.videoToggleMute,
EntryAction.videoSetSpeed,
EntryAction.videoSelectStreams,
EntryAction.videoSettings,
];
static const videoPlayback = [
EntryAction.videoReplay10,
EntryAction.videoTogglePlay,
EntryAction.videoSkip10,
];
static const commonMetadataActions = [
EntryAction.editDate,
EntryAction.editLocation,
EntryAction.editTitleDescription,
EntryAction.editRating,
EntryAction.editTags,
EntryAction.removeMetadata,
EntryAction.exportMetadata,
];
static const formatSpecificMetadataActions = [
EntryAction.showGeoTiffOnMap,
EntryAction.convertMotionPhotoToStillImage,
EntryAction.viewMotionPhotoVideo,
];
}
extension ExtraEntryAction on EntryAction {
String getText(BuildContext context) {
switch (this) {
case EntryAction.info:
return context.l10n.entryActionInfo;
case EntryAction.addShortcut:
return context.l10n.collectionActionAddShortcut;
case EntryAction.copyToClipboard:
return context.l10n.entryActionCopyToClipboard;
case EntryAction.delete:
return context.l10n.entryActionDelete;
case EntryAction.restore:
return context.l10n.entryActionRestore;
case EntryAction.convert:
return context.l10n.entryActionConvert;
case EntryAction.print:
return context.l10n.entryActionPrint;
case EntryAction.rename:
return context.l10n.entryActionRename;
case EntryAction.copy:
return context.l10n.collectionActionCopy;
case EntryAction.move:
return context.l10n.collectionActionMove;
case EntryAction.share:
return context.l10n.entryActionShare;
case EntryAction.toggleFavourite:
// different data depending on toggle state
return context.l10n.entryActionAddFavourite;
// raster
case EntryAction.rotateCCW:
return context.l10n.entryActionRotateCCW;
case EntryAction.rotateCW:
return context.l10n.entryActionRotateCW;
case EntryAction.flip:
return context.l10n.entryActionFlip;
// vector
case EntryAction.viewSource:
return context.l10n.entryActionViewSource;
// video
case EntryAction.videoCaptureFrame:
return context.l10n.videoActionCaptureFrame;
case EntryAction.videoToggleMute:
// different data depending on toggle state
return context.l10n.videoActionMute;
case EntryAction.videoSelectStreams:
return context.l10n.videoActionSelectStreams;
case EntryAction.videoSetSpeed:
return context.l10n.videoActionSetSpeed;
case EntryAction.videoSettings:
return context.l10n.videoActionSettings;
case EntryAction.videoTogglePlay:
// different data depending on toggle state
return context.l10n.videoActionPlay;
case EntryAction.videoReplay10:
return context.l10n.videoActionReplay10;
case EntryAction.videoSkip10:
return context.l10n.videoActionSkip10;
// external
case EntryAction.edit:
return context.l10n.entryActionEdit;
case EntryAction.open:
case EntryAction.openVideo:
return context.l10n.entryActionOpen;
case EntryAction.openMap:
return context.l10n.entryActionOpenMap;
case EntryAction.setAs:
return context.l10n.entryActionSetAs;
// platform
case EntryAction.rotateScreen:
return context.l10n.entryActionRotateScreen;
// metadata
case EntryAction.editDate:
return context.l10n.entryInfoActionEditDate;
case EntryAction.editLocation:
return context.l10n.entryInfoActionEditLocation;
case EntryAction.editTitleDescription:
return context.l10n.entryInfoActionEditTitleDescription;
case EntryAction.editRating:
return context.l10n.entryInfoActionEditRating;
case EntryAction.editTags:
return context.l10n.entryInfoActionEditTags;
case EntryAction.removeMetadata:
return context.l10n.entryInfoActionRemoveMetadata;
case EntryAction.exportMetadata:
return context.l10n.entryInfoActionExportMetadata;
// metadata / GeoTIFF
case EntryAction.showGeoTiffOnMap:
return context.l10n.entryActionShowGeoTiffOnMap;
// metadata / motion photo
case EntryAction.convertMotionPhotoToStillImage:
return context.l10n.entryActionConvertMotionPhotoToStillImage;
case EntryAction.viewMotionPhotoVideo:
return context.l10n.entryActionViewMotionPhotoVideo;
// debug
case EntryAction.debug:
return 'Debug';
}
}
Widget getIcon() {
final child = Icon(getIconData());
switch (this) {
case EntryAction.debug:
return ShaderMask(
shaderCallback: AvesColorsData.debugGradient.createShader,
blendMode: BlendMode.srcIn,
child: child,
);
default:
return child;
}
}
IconData getIconData() {
switch (this) {
case EntryAction.info:
return AIcons.info;
case EntryAction.addShortcut:
return AIcons.addShortcut;
case EntryAction.copyToClipboard:
return AIcons.clipboard;
case EntryAction.delete:
return AIcons.delete;
case EntryAction.restore:
return AIcons.restore;
case EntryAction.convert:
return AIcons.convert;
case EntryAction.print:
return AIcons.print;
case EntryAction.rename:
return AIcons.name;
case EntryAction.copy:
return AIcons.copy;
case EntryAction.move:
return AIcons.move;
case EntryAction.share:
return AIcons.share;
case EntryAction.toggleFavourite:
// different data depending on toggle state
return AIcons.favourite;
// raster
case EntryAction.rotateCCW:
return AIcons.rotateLeft;
case EntryAction.rotateCW:
return AIcons.rotateRight;
case EntryAction.flip:
return AIcons.flip;
// vector
case EntryAction.viewSource:
return AIcons.vector;
// video
case EntryAction.videoCaptureFrame:
return AIcons.captureFrame;
case EntryAction.videoToggleMute:
// different data depending on toggle state
return AIcons.mute;
case EntryAction.videoSelectStreams:
return AIcons.streams;
case EntryAction.videoSetSpeed:
return AIcons.speed;
case EntryAction.videoSettings:
return AIcons.videoSettings;
case EntryAction.videoTogglePlay:
// different data depending on toggle state
return AIcons.play;
case EntryAction.videoReplay10:
return AIcons.replay10;
case EntryAction.videoSkip10:
return AIcons.skip10;
// external
case EntryAction.edit:
return AIcons.edit;
case EntryAction.open:
case EntryAction.openVideo:
return AIcons.openOutside;
case EntryAction.openMap:
return AIcons.map;
case EntryAction.setAs:
return AIcons.setAs;
// platform
case EntryAction.rotateScreen:
return AIcons.rotateScreen;
// metadata
case EntryAction.editDate:
return AIcons.date;
case EntryAction.editLocation:
return AIcons.location;
case EntryAction.editTitleDescription:
return AIcons.description;
case EntryAction.editRating:
return AIcons.editRating;
case EntryAction.editTags:
return AIcons.editTags;
case EntryAction.removeMetadata:
return AIcons.clear;
case EntryAction.exportMetadata:
return AIcons.fileExport;
// metadata / GeoTIFF
case EntryAction.showGeoTiffOnMap:
return AIcons.map;
// metadata / motion photo
case EntryAction.convertMotionPhotoToStillImage:
return AIcons.convertToStillImage;
case EntryAction.viewMotionPhotoVideo:
return AIcons.openVideo;
// debug
case EntryAction.debug:
return AIcons.debug;
}
}
}