SHA256
Fix Custom Preset Label Handling On Language Change
This commit is contained in:
1 parent
8e0639aafa
commit
c56175bbc8
1 file changed
+23
-15
@@ -39,7 +39,7 @@ internal static class RenderConfigWindow
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private static RenderConfig? _uiConfig;
|
private static RenderConfig? _uiConfig;
|
||||||
|
|
||||||
private static RenderConfig UiConfig => _uiConfig ??= new RenderConfig();
|
private static RenderConfig UIConfig => _uiConfig ??= new RenderConfig();
|
||||||
|
|
||||||
// Controls cache for validation & sync
|
// Controls cache for validation & sync
|
||||||
private static O5Slider? _renderFpsSlider;
|
private static O5Slider? _renderFpsSlider;
|
||||||
@@ -120,7 +120,7 @@ internal static class RenderConfigWindow
|
|||||||
ReloadPresetDropdown(GlobalSettings.Current.LastPresetName);
|
ReloadPresetDropdown(GlobalSettings.Current.LastPresetName);
|
||||||
}
|
}
|
||||||
|
|
||||||
var config = UiConfig;
|
var config = UIConfig;
|
||||||
ApplyConfigToUI(config);
|
ApplyConfigToUI(config);
|
||||||
|
|
||||||
SetWindowActive(true);
|
SetWindowActive(true);
|
||||||
@@ -133,7 +133,7 @@ internal static class RenderConfigWindow
|
|||||||
var (_, scrollContent, _) =
|
var (_, scrollContent, _) =
|
||||||
O5Factory.ScrollView(ctx, content, spacing: 10f, padding: 8f);
|
O5Factory.ScrollView(ctx, content, spacing: 10f, padding: 8f);
|
||||||
|
|
||||||
var config = UiConfig;
|
var config = UIConfig;
|
||||||
EnsureDefaultConfig(config);
|
EnsureDefaultConfig(config);
|
||||||
|
|
||||||
double[] renderFpsSnap = { 23.976, 24, 29.97, 30, 59.94, 60, 144,
|
double[] renderFpsSnap = { 23.976, 24, 29.97, 30, 59.94, 60, 144,
|
||||||
@@ -843,7 +843,7 @@ internal static class RenderConfigWindow
|
|||||||
|
|
||||||
private static void TryGoRender()
|
private static void TryGoRender()
|
||||||
{
|
{
|
||||||
var config = UiConfig;
|
var config = UIConfig;
|
||||||
SyncUItoConfig(config);
|
SyncUItoConfig(config);
|
||||||
|
|
||||||
// The encoders use 4:2:0 chroma subsampling, which needs an even width and height.
|
// The encoders use 4:2:0 chroma subsampling, which needs an even width and height.
|
||||||
@@ -967,6 +967,13 @@ internal static class RenderConfigWindow
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether the text is the Custom label of any language. A preset with such a name could not be told apart
|
||||||
|
/// from the Custom entry of the dropdown after a language change.
|
||||||
|
/// </summary>
|
||||||
|
private static bool IsCustomPresetLabel(string text) =>
|
||||||
|
text == CustomPresetLabel || text == "(Modified)" || text == "(수정됨)";
|
||||||
|
|
||||||
private static string CustomPresetLabel => LocalizationManager.Get("ui.render_config.preset_custom");
|
private static string CustomPresetLabel => LocalizationManager.Get("ui.render_config.preset_custom");
|
||||||
|
|
||||||
private static void MarkConfigModified()
|
private static void MarkConfigModified()
|
||||||
@@ -1018,7 +1025,7 @@ internal static class RenderConfigWindow
|
|||||||
SyncUItoConfig(config);
|
SyncUItoConfig(config);
|
||||||
|
|
||||||
var name = _presetNameInput?.Value.Trim();
|
var name = _presetNameInput?.Value.Trim();
|
||||||
if (string.IsNullOrWhiteSpace(name) || name == CustomPresetLabel)
|
if (string.IsNullOrWhiteSpace(name) || IsCustomPresetLabel(name))
|
||||||
{
|
{
|
||||||
CommonWarningDialogUI.ShowDialog(
|
CommonWarningDialogUI.ShowDialog(
|
||||||
LocalizationManager.Get("ui.render_config.validation_title"),
|
LocalizationManager.Get("ui.render_config.validation_title"),
|
||||||
@@ -1200,13 +1207,10 @@ internal static class RenderConfigWindow
|
|||||||
|
|
||||||
private static void OnLanguageChanged(SystemLanguage language)
|
private static void OnLanguageChanged(SystemLanguage language)
|
||||||
{
|
{
|
||||||
if (_configWindow == null) return;
|
if (_configWindow == null || _presetDropdown == null) return;
|
||||||
|
|
||||||
if (_presetDropdown == null) return;
|
// The preset names are not localized, only the Custom label is. A dropdown value that is not a preset name
|
||||||
|
// is the Custom label (of the previous language), which is shown only while the values are modified.
|
||||||
// The preset names are not localized, the Custom label is. The list is rebuilt from the preset names
|
|
||||||
// (which drops the Custom label of the previous language), then the label is decided from the values:
|
|
||||||
// the Custom label of the new language only when the values differ from the last loaded preset.
|
|
||||||
var names = PresetManager.GetPresets().Select(p => p.Name).ToList();
|
var names = PresetManager.GetPresets().Select(p => p.Name).ToList();
|
||||||
if (names.Count == 0)
|
if (names.Count == 0)
|
||||||
{
|
{
|
||||||
@@ -1216,14 +1220,18 @@ internal static class RenderConfigWindow
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var current = _presetDropdown.Value;
|
||||||
|
var isModified = string.IsNullOrEmpty(current) || !names.Contains(current);
|
||||||
|
|
||||||
_presetDropdown.SetValues(names);
|
_presetDropdown.SetValues(names);
|
||||||
var loadedName = _lastLoadedPresetName;
|
if (isModified)
|
||||||
if (!string.IsNullOrEmpty(loadedName) && names.Contains(loadedName))
|
|
||||||
{
|
{
|
||||||
_presetDropdown.Set(loadedName, false);
|
MarkConfigModified();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdatePresetLabel(UiConfig);
|
_presetDropdown.Set(current, false);
|
||||||
|
UpdateDeleteButtonState();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetVersionText()
|
private static string GetVersionText()
|
||||||
|
|||||||
Reference in new issue
Block a user