1ab6ffd593
Add path editor window, session playback on control/presentation, and RMB controls. Fix live pose clock so motion no longer freezes after ~250ms. Co-authored-by: Cursor <cursoragent@cursor.com>
68 lines
2.7 KiB
TypeScript
68 lines
2.7 KiB
TypeScript
/** Отображаемое имя продукта (с пробелом), не путать с `productName` сборки (`TTRPGPlayer`). */
|
|
export const APP_DISPLAY_NAME_EN = 'TTRPG Player';
|
|
export const APP_DISPLAY_NAME_RU = 'НРИ Плеер';
|
|
|
|
/** Системный идентификатор приложения (exe, AppImage, appId). */
|
|
export const APP_PRODUCT_NAME = 'TTRPGPlayer';
|
|
export const APP_BUNDLE_ID = 'com.ttrpgplayer.app';
|
|
|
|
export function appDisplayNameForLocale(localeTag: string): string {
|
|
const tag = localeTag.trim().toLowerCase();
|
|
if (tag.startsWith('ru')) return APP_DISPLAY_NAME_RU;
|
|
return APP_DISPLAY_NAME_EN;
|
|
}
|
|
|
|
/** Префикс заголовка окон (EN): `TTRPG - Editor`. RU — полное имя «НРИ Плеер». */
|
|
export const APP_WINDOW_BRAND = 'TTRPG';
|
|
|
|
export type AppWindowKind =
|
|
| 'editor'
|
|
| 'presentation'
|
|
| 'control'
|
|
| 'boot'
|
|
| 'sceneDescription'
|
|
| 'materials'
|
|
| 'npcsEditor'
|
|
| 'sceneEditor'
|
|
| 'tokenPathEditor'
|
|
| 'npcs';
|
|
|
|
const WINDOW_SUFFIX: Record<AppWindowKind, { ru: string; en: string }> = {
|
|
editor: { ru: 'Редактор компании', en: 'Campaign editor' },
|
|
presentation: { ru: 'Презентация', en: 'Presentation' },
|
|
control: { ru: 'Пульт управления', en: 'Control deck' },
|
|
boot: { ru: 'Загрузка', en: 'Loading' },
|
|
sceneDescription: { ru: 'Описание сцены', en: 'Scene description' },
|
|
materials: { ru: 'Материалы', en: 'Materials' },
|
|
npcsEditor: { ru: 'НПС', en: 'NPCs' },
|
|
sceneEditor: { ru: 'Редактор сцены', en: 'Scene editor' },
|
|
tokenPathEditor: { ru: 'Движение токена', en: 'Token path' },
|
|
npcs: { ru: 'НПС', en: 'NPCs' },
|
|
};
|
|
|
|
export function windowChromeTitle(kind: AppWindowKind, localeTag: string): string {
|
|
const tag = localeTag.trim().toLowerCase();
|
|
const ru = tag.startsWith('ru');
|
|
const prefix = ru ? APP_DISPLAY_NAME_RU : APP_WINDOW_BRAND;
|
|
const suffix = ru ? WINDOW_SUFFIX[kind].ru : WINDOW_SUFFIX[kind].en;
|
|
return `${prefix} - ${suffix}`;
|
|
}
|
|
|
|
/** Подписи фильтров в системных диалогах выбора файла (main process). */
|
|
export function openDialogFilterLabel(
|
|
kind: 'images' | 'imagesAndVideo' | 'audio' | 'videoAndAudio',
|
|
localeTag: string,
|
|
): string {
|
|
const ru = localeTag.trim().toLowerCase().startsWith('ru');
|
|
switch (kind) {
|
|
case 'imagesAndVideo':
|
|
return ru ? 'Изображения и видео' : 'Images and video';
|
|
case 'audio':
|
|
return ru ? 'Аудио' : 'Audio';
|
|
case 'videoAndAudio':
|
|
return ru ? 'Видео и аудио' : 'Video and audio';
|
|
default:
|
|
return ru ? 'Изображения' : 'Images';
|
|
}
|
|
}
|