feat: complete legacy parity and modernize operator UI

This commit is contained in:
2026-07-22 12:34:46 +09:00
parent fc4007d676
commit 939c252d23
149 changed files with 26515 additions and 1736 deletions

View File

@@ -137,9 +137,11 @@ public sealed partial class MainWindow
},
_ => throw new ArgumentOutOfRangeException(nameof(kind))
};
SaveOperatorSettings(
next,
$"{OperatorFolderLabel(kind)} 폴더를 저장했습니다. 앱을 다시 시작하면 적용됩니다.");
var savedMessage = kind == LegacyOperatorFolderKind.Design &&
validated.MissingOptionalExternalAssetCount > 0
? $"디자인 폴더를 저장했습니다. 외부 영상 {validated.MissingOptionalExternalAssetCount}개가 없어 관련 장면만 제한됩니다. 앱을 다시 시작하면 적용됩니다."
: $"{OperatorFolderLabel(kind)} 폴더를 저장했습니다. 앱을 다시 시작하면 적용됩니다.";
SaveOperatorSettings(next, savedMessage);
}
catch (OperationCanceledException) when (cancellationToken.IsCancellationRequested)
{
@@ -251,7 +253,7 @@ public sealed partial class MainWindow
LegacyOperatorSettingsFolderKind.Scene,
_operatorSettings.SceneDirectory,
"앱 기본 디자인 폴더",
"필수 장면 확인됨");
"활성 장면·기본 자산 확인됨");
_resourceFolderSnapshot = CreateOperatorFolderSnapshot(
LegacyOperatorSettingsFolderKind.Resource,
_operatorSettings.ResourceDirectory,
@@ -290,8 +292,9 @@ public sealed partial class MainWindow
!LegacyOperatorFolderValidator.TryValidate(
kind,
defaultPath,
out _,
out _))
out var defaultFolder,
out _) ||
defaultFolder is null)
{
return new LegacyOperatorFolderSnapshot(
defaultDisplay,
@@ -304,7 +307,7 @@ public sealed partial class MainWindow
defaultDisplay,
IsCustom: false,
IsValid: true,
validStatus);
FolderStatus(kind, defaultFolder, validStatus));
}
var validation = LegacyOperatorFolderValidator.Validate(kind, configuredPath);
@@ -320,7 +323,7 @@ public sealed partial class MainWindow
var status = kind == LegacyOperatorSettingsFolderKind.Resource &&
validation.Folder.DatabaseIniDetected
? "UI·DB 설정 검증됨"
: validStatus;
: FolderStatus(kind, validation.Folder, validStatus);
return new LegacyOperatorFolderSnapshot(
validation.Folder.AbbreviatedPath,
IsCustom: true,
@@ -328,6 +331,15 @@ public sealed partial class MainWindow
status);
}
private static string FolderStatus(
LegacyOperatorSettingsFolderKind kind,
LegacyOperatorValidatedFolder folder,
string validStatus) =>
kind == LegacyOperatorSettingsFolderKind.Scene &&
folder.MissingOptionalExternalAssetCount > 0
? $"핵심 자산 확인됨 · 외부 영상 {folder.MissingOptionalExternalAssetCount}개 제외"
: validStatus;
private LegacyOperatorSettingsSnapshot CreateOperatorSettingsSnapshot() => new(
Volatile.Read(ref _operatorSettingsRevision),
_designFolderSnapshot,