diff --git a/assets/i18n/de.json b/assets/i18n/de.json index 2946e9a58..1949c11fc 100644 --- a/assets/i18n/de.json +++ b/assets/i18n/de.json @@ -1919,5 +1919,19 @@ "assigning_tiled_maps_success": "Tiled maps successfully assigned", "assigning_tiled_maps_error": "Error while assigning Tiled maps", "max_trainer_party_size": "Max trainer party size", - "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings" -} + "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings", + "keyboard_shortcuts": "Keyboard Shortcuts", + "shortcut_category_default": "Default shortcuts", + "shortcut_category_navigation": "Navigation", + "shortcut_category_miscellaneous": "Miscellaneous", + "shortcut_save_project": "Save Project Changes", + "shortcut_create_entry": "Create a new database entry", + "shortcut_copy_id": "Copy the selected database entry ID", + "shortcut_start_debug": "Start the game in debug mode", + "shortcut_navigate_list": "Navigate between items in a list", + "shortcut_navigate_secondary_list": "Navigate between items in a secondary list", + "shortcut_toggle_fullscreen": "Toggle Fullscreen", + "shortcut_minimize_window": "Minimize Window", + "shortcut_open_devtools": "Open Developer Tools", + "app_settings": "App Settings" +} \ No newline at end of file diff --git a/assets/i18n/en.json b/assets/i18n/en.json index 9a6fabd5b..c841b44f6 100644 --- a/assets/i18n/en.json +++ b/assets/i18n/en.json @@ -1919,5 +1919,19 @@ "assigning_tiled_maps_success": "Tiled maps successfully assigned", "assigning_tiled_maps_error": "Error while assigning Tiled maps", "max_trainer_party_size": "Max trainer party size", - "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings" + "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings", + "keyboard_shortcuts": "Keyboard Shortcuts", + "shortcut_category_default": "Default shortcuts", + "shortcut_category_navigation": "Navigation", + "shortcut_category_miscellaneous": "Miscellaneous", + "shortcut_save_project": "Save Project Changes", + "shortcut_create_entry": "Create a new database entry", + "shortcut_copy_id": "Copy the selected database entry ID", + "shortcut_start_debug": "Start the game in debug mode", + "shortcut_navigate_list": "Navigate between items in a list", + "shortcut_navigate_secondary_list": "Navigate between items in a secondary list", + "shortcut_toggle_fullscreen": "Toggle Fullscreen", + "shortcut_minimize_window": "Minimize Window", + "shortcut_open_devtools": "Open Developer Tools", + "app_settings": "App Settings" } diff --git a/assets/i18n/es.json b/assets/i18n/es.json index 46e80a02c..fc0d0675a 100644 --- a/assets/i18n/es.json +++ b/assets/i18n/es.json @@ -1919,5 +1919,19 @@ "assigning_tiled_maps_success": "Tiled maps successfully assigned", "assigning_tiled_maps_error": "Error while assigning Tiled maps", "max_trainer_party_size": "Max trainer party size", - "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings" -} + "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings", + "keyboard_shortcuts": "Keyboard Shortcuts", + "shortcut_category_default": "Default shortcuts", + "shortcut_category_navigation": "Navigation", + "shortcut_category_miscellaneous": "Miscellaneous", + "shortcut_save_project": "Save Project Changes", + "shortcut_create_entry": "Create a new database entry", + "shortcut_copy_id": "Copy the selected database entry ID", + "shortcut_start_debug": "Start the game in debug mode", + "shortcut_navigate_list": "Navigate between items in a list", + "shortcut_navigate_secondary_list": "Navigate between items in a secondary list", + "shortcut_toggle_fullscreen": "Toggle Fullscreen", + "shortcut_minimize_window": "Minimize Window", + "shortcut_open_devtools": "Open Developer Tools", + "app_settings": "App Settings" +} \ No newline at end of file diff --git a/assets/i18n/fr.json b/assets/i18n/fr.json index 83e9fe1a0..289c944e1 100644 --- a/assets/i18n/fr.json +++ b/assets/i18n/fr.json @@ -1919,5 +1919,19 @@ "assigning_tiled_maps_success": "Cartes Tiled assignées avec succès", "assigning_tiled_maps_error": "Erreur lors de l'assignation des cartes Tiled", "max_trainer_party_size": "Nombre maximum de créatures dans l'équipe d'un dresseur", - "add_trainer_party_max_size_to_settings": "Ajout de la taille maximale de l'équipe d'un dresseur aux paramètres du projet" + "add_trainer_party_max_size_to_settings": "Ajout de la taille maximale de l'équipe d'un dresseur aux paramètres du projet", + "keyboard_shortcuts": "Raccourcis clavier", + "shortcut_category_default": "Raccourcis par défaut", + "shortcut_category_navigation": "Navigation", + "shortcut_category_miscellaneous": "Divers", + "shortcut_save_project": "Sauvegarder les modifications apportées au projet", + "shortcut_create_entry": "Créer un nouvel élément dans la base de données", + "shortcut_copy_id": "Copier l'identifiant d'une entrée de la base de données", + "shortcut_start_debug": "Démarrer le jeu en mode debug", + "shortcut_navigate_list": "Naviguer entre les éléments d'une liste", + "shortcut_navigate_secondary_list": "Naviguer entre les éléments d'une liste secondaire", + "shortcut_toggle_fullscreen": "Afficher en plein écran", + "shortcut_minimize_window": "Réduire la fenêtre", + "shortcut_open_devtools": "Afficher les Developer Tools", + "app_settings": "Parametres de L'appli" } diff --git a/assets/i18n/it.json b/assets/i18n/it.json index f99f14d6e..4d1d1be05 100644 --- a/assets/i18n/it.json +++ b/assets/i18n/it.json @@ -1919,5 +1919,19 @@ "assigning_tiled_maps_success": "Tiled maps successfully assigned", "assigning_tiled_maps_error": "Error while assigning Tiled maps", "max_trainer_party_size": "Max trainer party size", - "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings" -} + "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings", + "keyboard_shortcuts": "Keyboard Shortcuts", + "shortcut_category_default": "Default shortcuts", + "shortcut_category_navigation": "Navigation", + "shortcut_category_miscellaneous": "Miscellaneous", + "shortcut_save_project": "Save Project Changes", + "shortcut_create_entry": "Create a new database entry", + "shortcut_copy_id": "Copy the selected database entry ID", + "shortcut_start_debug": "Start the game in debug mode", + "shortcut_navigate_list": "Navigate between items in a list", + "shortcut_navigate_secondary_list": "Navigate between items in a secondary list", + "shortcut_toggle_fullscreen": "Toggle Fullscreen", + "shortcut_minimize_window": "Minimize Window", + "shortcut_open_devtools": "Open Developer Tools", + "app_settings": "App Settings" +} \ No newline at end of file diff --git a/assets/i18n/ja.json b/assets/i18n/ja.json index 76c221ce7..28f0a84f1 100644 --- a/assets/i18n/ja.json +++ b/assets/i18n/ja.json @@ -1919,5 +1919,19 @@ "assigning_tiled_maps_success": "Tiled maps successfully assigned", "assigning_tiled_maps_error": "Error while assigning Tiled maps", "max_trainer_party_size": "Max trainer party size", - "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings" -} + "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings", + "keyboard_shortcuts": "Keyboard Shortcuts", + "shortcut_category_default": "Default shortcuts", + "shortcut_category_navigation": "Navigation", + "shortcut_category_miscellaneous": "Miscellaneous", + "shortcut_save_project": "Save Project Changes", + "shortcut_create_entry": "Create a new database entry", + "shortcut_copy_id": "Copy the selected database entry ID", + "shortcut_start_debug": "Start the game in debug mode", + "shortcut_navigate_list": "Navigate between items in a list", + "shortcut_navigate_secondary_list": "Navigate between items in a secondary list", + "shortcut_toggle_fullscreen": "Toggle Fullscreen", + "shortcut_minimize_window": "Minimize Window", + "shortcut_open_devtools": "Open Developer Tools", + "app_settings": "App Settings" +} \ No newline at end of file diff --git a/assets/i18n/nl.json b/assets/i18n/nl.json index 6d56e2006..98a43a535 100644 --- a/assets/i18n/nl.json +++ b/assets/i18n/nl.json @@ -1919,5 +1919,19 @@ "assigning_tiled_maps_success": "Tiled maps successfully assigned", "assigning_tiled_maps_error": "Error while assigning Tiled maps", "max_trainer_party_size": "Max trainer party size", - "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings" -} + "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings", + "keyboard_shortcuts": "Keyboard Shortcuts", + "shortcut_category_default": "Default shortcuts", + "shortcut_category_navigation": "Navigation", + "shortcut_category_miscellaneous": "Miscellaneous", + "shortcut_save_project": "Save Project Changes", + "shortcut_create_entry": "Create a new database entry", + "shortcut_copy_id": "Copy the selected database entry ID", + "shortcut_start_debug": "Start the game in debug mode", + "shortcut_navigate_list": "Navigate between items in a list", + "shortcut_navigate_secondary_list": "Navigate between items in a secondary list", + "shortcut_toggle_fullscreen": "Toggle Fullscreen", + "shortcut_minimize_window": "Minimize Window", + "shortcut_open_devtools": "Open Developer Tools", + "app_settings": "App Settings" +} \ No newline at end of file diff --git a/assets/i18n/pt.json b/assets/i18n/pt.json index 9eb2d65cb..5b4014f2c 100644 --- a/assets/i18n/pt.json +++ b/assets/i18n/pt.json @@ -1919,5 +1919,19 @@ "assigning_tiled_maps_success": "Tiled maps successfully assigned", "assigning_tiled_maps_error": "Error while assigning Tiled maps", "max_trainer_party_size": "Max trainer party size", - "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings" -} + "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings", + "keyboard_shortcuts": "Keyboard Shortcuts", + "shortcut_category_default": "Default shortcuts", + "shortcut_category_navigation": "Navigation", + "shortcut_category_miscellaneous": "Miscellaneous", + "shortcut_save_project": "Save Project Changes", + "shortcut_create_entry": "Create a new database entry", + "shortcut_copy_id": "Copy the selected database entry ID", + "shortcut_start_debug": "Start the game in debug mode", + "shortcut_navigate_list": "Navigate between items in a list", + "shortcut_navigate_secondary_list": "Navigate between items in a secondary list", + "shortcut_toggle_fullscreen": "Toggle Fullscreen", + "shortcut_minimize_window": "Minimize Window", + "shortcut_open_devtools": "Open Developer Tools", + "app_settings": "App Settings" +} \ No newline at end of file diff --git a/assets/i18n/zh_Hans.json b/assets/i18n/zh_Hans.json index 659098d73..f1b784de0 100644 --- a/assets/i18n/zh_Hans.json +++ b/assets/i18n/zh_Hans.json @@ -1919,5 +1919,19 @@ "assigning_tiled_maps_success": "Tiled maps successfully assigned", "assigning_tiled_maps_error": "Error while assigning Tiled maps", "max_trainer_party_size": "Max trainer party size", - "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings" -} + "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings", + "keyboard_shortcuts": "Keyboard Shortcuts", + "shortcut_category_default": "Default shortcuts", + "shortcut_category_navigation": "Navigation", + "shortcut_category_miscellaneous": "Miscellaneous", + "shortcut_save_project": "Save Project Changes", + "shortcut_create_entry": "Create a new database entry", + "shortcut_copy_id": "Copy the selected database entry ID", + "shortcut_start_debug": "Start the game in debug mode", + "shortcut_navigate_list": "Navigate between items in a list", + "shortcut_navigate_secondary_list": "Navigate between items in a secondary list", + "shortcut_toggle_fullscreen": "Toggle Fullscreen", + "shortcut_minimize_window": "Minimize Window", + "shortcut_open_devtools": "Open Developer Tools", + "app_settings": "App Settings" +} \ No newline at end of file diff --git a/assets/i18n/zh_Hant.json b/assets/i18n/zh_Hant.json index 8f37a9b6a..a9a3d51a2 100644 --- a/assets/i18n/zh_Hant.json +++ b/assets/i18n/zh_Hant.json @@ -1919,5 +1919,19 @@ "assigning_tiled_maps_success": "Tiled maps successfully assigned", "assigning_tiled_maps_error": "Error while assigning Tiled maps", "max_trainer_party_size": "Max trainer party size", - "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings" -} + "add_trainer_party_max_size_to_settings": "Add trainer party max size to settings", + "keyboard_shortcuts": "Keyboard Shortcuts", + "shortcut_category_default": "Default shortcuts", + "shortcut_category_navigation": "Navigation", + "shortcut_category_miscellaneous": "Miscellaneous", + "shortcut_save_project": "Save Project Changes", + "shortcut_create_entry": "Create a new database entry", + "shortcut_copy_id": "Copy the selected database entry ID", + "shortcut_start_debug": "Start the game in debug mode", + "shortcut_navigate_list": "Navigate between items in a list", + "shortcut_navigate_secondary_list": "Navigate between items in a secondary list", + "shortcut_toggle_fullscreen": "Toggle Fullscreen", + "shortcut_minimize_window": "Minimize Window", + "shortcut_open_devtools": "Open Developer Tools", + "app_settings": "App Settings" +} \ No newline at end of file diff --git a/src/views/components/database/dataBlocks/DataFieldsetField.tsx b/src/views/components/database/dataBlocks/DataFieldsetField.tsx index 0347c2e01..fbbec2e39 100644 --- a/src/views/components/database/dataBlocks/DataFieldsetField.tsx +++ b/src/views/components/database/dataBlocks/DataFieldsetField.tsx @@ -2,7 +2,7 @@ import { IClickable } from '@hooks/useShortcutNavigation'; import React, { ReactNode } from 'react'; import styled from 'styled-components'; -/* eslint-disable react/require-default-props */ +// eslint-disable react/require-default-props type FieldSize = 's' | 'm'; type FieldsetProps = { @@ -65,7 +65,7 @@ export const FieldData = styled.span` } `; -const FieldCode = styled.span` +export const FieldCode = styled.span` border-radius: 4px; padding: 4px 8px; ${(props) => props.theme.fonts.codeRegular}; diff --git a/src/views/components/settings/SettingsNavigation.tsx b/src/views/components/settings/SettingsNavigation.tsx index 505232c21..259434870 100644 --- a/src/views/components/settings/SettingsNavigation.tsx +++ b/src/views/components/settings/SettingsNavigation.tsx @@ -1,7 +1,7 @@ -import React from 'react'; import { NavigationDatabaseStyle } from '@components/database/navigation/NavigationDatabase/NavigationDatabaseStyle'; import { NavigationDatabaseGroup } from '@components/database/navigation/NavigationDatabaseGroup'; import { NavigationDatabaseItem } from '@components/database/navigation/NavigationDatabaseItem'; +import React from 'react'; import { useTranslation } from 'react-i18next'; export const SettingsNavigation = () => { @@ -11,6 +11,9 @@ export const SettingsNavigation = () => { + + + diff --git a/src/views/pages/settings/Settings.Router.page.tsx b/src/views/pages/settings/Settings.Router.page.tsx index a9d1ffb6f..d419db74b 100644 --- a/src/views/pages/settings/Settings.Router.page.tsx +++ b/src/views/pages/settings/Settings.Router.page.tsx @@ -1,9 +1,10 @@ +import { PageWithMenu, PageWithMenuProps } from '@components/pages'; +import { SettingsNavigation } from '@components/settings'; import React from 'react'; import { Navigate, Route, Routes } from 'react-router-dom'; -import { SettingsNavigation } from '@components/settings'; -import { SettingsMapsPage } from './Settings.maps.page'; import { SettingsLanguagePage } from './Settings.language.page'; -import { PageWithMenu, PageWithMenuProps } from '@components/pages'; +import { SettingsMapsPage } from './Settings.maps.page'; +import { SettingsShortcutsPage } from './Settings.shortcuts.page'; const SettingsPageWithMenu = ({ children }: Omit) => ( }>{children} @@ -29,6 +30,14 @@ const SettingsRouterComponent = () => { } /> + + + + } + /> ); }; diff --git a/src/views/pages/settings/Settings.shortcuts.page.tsx b/src/views/pages/settings/Settings.shortcuts.page.tsx new file mode 100644 index 000000000..d25bceaed --- /dev/null +++ b/src/views/pages/settings/Settings.shortcuts.page.tsx @@ -0,0 +1,102 @@ +import { FieldCode } from '@components/database/dataBlocks/DataFieldsetField'; +import { InputWithLeftLabelContainer, Label } from '@components/inputs'; +import { PageEditor, PageTemplate } from '@components/pages'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import styled from 'styled-components'; + +interface ShortcutGroup { + categoryKey: string; + shortcuts: { labelKey: string; mac: string; other: string }[]; +} + +const isMac = window.api.platform === 'darwin'; + +const formatKey = (key: string): string => { + if (isMac) { + if (key === 'Option') return '⌥ Opt'; + if (key === 'Cmd') return '⌘ Cmd'; + if (key === 'Ctrl') return '⌃ Ctrl'; + if (key === 'Shift') return '⇧ Shift'; + } + return key; +}; + +const parseCombinations = (shortcutStr: string): string[][] => { + return shortcutStr.split(' / ').map((combo) => combo.split(' + ').map((key) => key.trim())); +}; + +const SHORTCUTS_DATA: ShortcutGroup[] = [ + { + categoryKey: 'shortcut_category_default', + shortcuts: [ + { labelKey: 'shortcut_save_project', mac: 'Cmd + S', other: 'Ctrl + S' }, + { labelKey: 'shortcut_create_entry', mac: 'Cmd + N', other: 'Ctrl + N' }, + { labelKey: 'shortcut_copy_id', mac: 'Option + Shift + C', other: 'Ctrl + Shift + C' }, + { labelKey: 'shortcut_start_debug', mac: 'Cmd + P', other: 'Ctrl + P' }, + ], + }, + { + categoryKey: 'shortcut_category_navigation', + shortcuts: [ + { labelKey: 'shortcut_navigate_list', mac: 'Option + \u2190 / Option + \u2192', other: 'Ctrl + \u2190 / Ctrl + \u2192' }, + { + labelKey: 'shortcut_navigate_secondary_list', + mac: 'Option + Shift + \u2190 / Option + Shift + \u2192', + other: 'Ctrl + Alt + \u2190 / Ctrl + Alt + \u2192', + }, + ], + }, + { + categoryKey: 'shortcut_category_miscellaneous', + shortcuts: [ + { labelKey: 'shortcut_toggle_fullscreen', mac: 'Ctrl + Cmd + F', other: 'F11' }, + { labelKey: 'shortcut_minimize_window', mac: 'Cmd + H', other: 'Ctrl + H' }, + { labelKey: 'shortcut_open_devtools', mac: 'Cmd + Option + I', other: 'Ctrl + Alt + I' }, + ], + }, +]; + +const ShortcutRow = styled.div` + display: flex; + gap: 6px; + align-items: center; + justify-content: flex-end; +`; + +const ShortcutStack = styled.div` + display: flex; + flex-direction: column; + gap: 4px; + align-items: flex-end; +`; + +export const SettingsShortcutsPage = () => { + const { t } = useTranslation(); + + return ( + + {SHORTCUTS_DATA.map((group) => ( + + {group.shortcuts.map((shortcut) => { + const combinations = parseCombinations(isMac ? shortcut.mac : shortcut.other); + return ( + + + + {combinations.map((keys, rowIdx) => ( + + {keys.map((key, keyIdx) => ( + {formatKey(key)} + ))} + + ))} + + + ); + })} + + ))} + + ); +};