Files
MrbWebLibre/apps/weblibre/lib/features/gestures/data/models/gesture_action.dart
T

227 lines
5.3 KiB
Dart

/*
* Copyright (c) 2024-2026 Fabian Freund.
*
* This file is part of WebLibre
* (see https://weblibre.eu).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import 'package:flutter/material.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
/// Actions that can be bound to a touch gesture.
///
/// Each value carries a human-readable [title]/[description] for the settings
/// UI and an [icon] mirroring the action's representation elsewhere in the app
/// (contextual toolbar, browser menu sheet). The dispatcher resolves each value
/// against the currently selected tab.
enum GestureAction {
// Navigation
back(
'Back',
'Go back in history',
Icons.arrow_back,
GestureActionCategory.navigation,
),
forward(
'Forward',
'Go forward in history',
Icons.arrow_forward,
GestureActionCategory.navigation,
),
reload(
'Reload',
'Reload the current page',
Icons.refresh,
GestureActionCategory.navigation,
),
// Scrolling
scrollTop(
'Scroll to Top',
'Jump to the top of the page',
Icons.vertical_align_top,
GestureActionCategory.scrolling,
),
scrollBottom(
'Scroll to Bottom',
'Jump to the bottom of the page',
Icons.vertical_align_bottom,
GestureActionCategory.scrolling,
),
pageUp(
'Page Up',
'Scroll up by one screen',
MdiIcons.chevronDoubleUp,
GestureActionCategory.scrolling,
),
pageDown(
'Page Down',
'Scroll down by one screen',
MdiIcons.chevronDoubleDown,
GestureActionCategory.scrolling,
),
// Tabs
newTab(
'New Tab',
'Open a new tab',
MdiIcons.tabPlus,
GestureActionCategory.tabs,
),
closeTab(
'Close Tab',
'Close the current tab',
MdiIcons.tabMinus,
GestureActionCategory.tabs,
),
duplicateTab(
'Duplicate Tab',
'Open a copy of the current tab',
MdiIcons.contentDuplicate,
GestureActionCategory.tabs,
),
nextTab(
'Next Tab',
'Switch to the next tab',
Icons.skip_next,
GestureActionCategory.tabs,
),
previousTab(
'Previous Tab',
'Switch to the previous tab',
Icons.skip_previous,
GestureActionCategory.tabs,
),
lastUsedTab(
'Last Used Tab',
'Switch to the previously used tab',
Icons.swap_horiz,
GestureActionCategory.tabs,
),
togglePinTab(
'Pin / Unpin Tab',
'Toggle the pinned state of the current tab',
MdiIcons.pin,
GestureActionCategory.tabs,
),
// Page tools
toggleReaderMode(
'Reader Mode',
'Toggle reader mode for the current page',
MdiIcons.bookOpenOutline,
GestureActionCategory.page,
),
toggleDesktopMode(
'Desktop Site',
'Toggle desktop site for the current page',
Icons.desktop_windows,
GestureActionCategory.page,
),
findInPage(
'Find in Page',
'Open find in page',
Icons.find_in_page,
GestureActionCategory.page,
),
increaseFontSize(
'Increase Font',
'Increase the page font size',
MdiIcons.formatFontSizeIncrease,
GestureActionCategory.page,
),
decreaseFontSize(
'Decrease Font',
'Decrease the page font size',
MdiIcons.formatFontSizeDecrease,
GestureActionCategory.page,
),
toggleBookmark(
'Bookmark',
'Bookmark or unbookmark the current page',
Icons.bookmark_border,
GestureActionCategory.page,
),
translatePage(
'Translate',
'Open the page translation sheet',
Icons.translate,
GestureActionCategory.page,
),
// Open
showHome(
'Home',
'Open the home screen',
Icons.home_outlined,
GestureActionCategory.open,
),
showHistory(
'History',
'Open browsing history',
Icons.history,
GestureActionCategory.open,
),
showBookmarks(
'Bookmarks',
'Open bookmarks',
MdiIcons.bookmarkMultiple,
GestureActionCategory.open,
),
// App
toggleTabBar(
'Hide / Show Tab Bar',
'Hide the tab bar, or bring it back',
MdiIcons.dockBottom,
GestureActionCategory.app,
),
moveToBackground(
'Minimize',
'Send WebLibre to the background',
MdiIcons.arrowCollapseDown,
GestureActionCategory.app,
),
quitBrowser(
'Quit',
'Close all tabs and quit WebLibre',
MdiIcons.power,
GestureActionCategory.app,
);
final String title;
final String description;
final IconData icon;
/// Grouping used to organise actions in the bindings list and picker.
final GestureActionCategory category;
const GestureAction(this.title, this.description, this.icon, this.category);
}
/// High-level grouping of [GestureAction]s for the settings UI.
enum GestureActionCategory {
navigation('Navigation'),
scrolling('Scrolling'),
tabs('Tabs'),
page('Page'),
open('Open'),
app('App');
final String label;
const GestureActionCategory(this.label);
}