This commit is contained in:
Hakoyu 2023-11-05 22:39:01 +08:00
parent 2d72f2d46f
commit 7e94da39c4
10 changed files with 103 additions and 29 deletions

View File

@ -15,7 +15,6 @@ namespace VPet.ModMaker.Models;
public class ModMaker : MainPlugin public class ModMaker : MainPlugin
{ {
public ILine Set; public ILine Set;
public override string PluginName => "ModMaker"; public override string PluginName => "ModMaker";
public ModMakerWindow Maker; public ModMakerWindow Maker;
@ -38,7 +37,7 @@ public class ModMaker : MainPlugin
Setting(); Setting();
}; };
modset.Items.Add(menuset); modset.Items.Add(menuset);
Application.Current.Resources.MergedDictionaries.Add(new ModMakerStyles()); Application.Current.Resources.MergedDictionaries.Add(Utils.ModMakerStyles);
} }
public override void Setting() public override void Setting()

View File

@ -26,6 +26,8 @@ public static class Utils
public const int DecodePixelHeight = 250; public const int DecodePixelHeight = 250;
public static char[] Separator { get; } = new char[] { '_' }; public static char[] Separator { get; } = new char[] { '_' };
public static ModMakerStyles ModMakerStyles { get; } = new ModMakerStyles();
//public static BitmapImage LoadImageToStream(string imagePath) //public static BitmapImage LoadImageToStream(string imagePath)
//{ //{
// BitmapImage bitmapImage = new(); // BitmapImage bitmapImage = new();

View File

@ -124,7 +124,7 @@
<Compile Include="Models\ModModel\SelectTextModel.cs" /> <Compile Include="Models\ModModel\SelectTextModel.cs" />
<Compile Include="Models\ModModel\WorkModel.cs" /> <Compile Include="Models\ModModel\WorkModel.cs" />
<Compile Include="SimpleObservable\ObservableCommandT.cs" /> <Compile Include="SimpleObservable\ObservableCommandT.cs" />
<Compile Include="Styles.cs" /> <Compile Include="ModMakerStyles.cs" />
<Compile Include="ViewModels\ModEdit\AddCultureWindowVM.cs" /> <Compile Include="ViewModels\ModEdit\AddCultureWindowVM.cs" />
<Compile Include="ViewModels\ModEdit\AnimeEdit\FoodAnimeEditWindowVM.cs" /> <Compile Include="ViewModels\ModEdit\AnimeEdit\FoodAnimeEditWindowVM.cs" />
<Compile Include="ViewModels\ModEdit\AnimeEdit\AnimeEditWindowVM.cs" /> <Compile Include="ViewModels\ModEdit\AnimeEdit\AnimeEditWindowVM.cs" />

View File

@ -1,7 +1,9 @@
using HKW.HKWViewModels.SimpleObservable; using HKW.HKWViewModels.SimpleObservable;
using LinePutScript.Localization.WPF;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Globalization;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -27,15 +29,45 @@ public class AddCultureWindowVM
/// </summary> /// </summary>
public ObservableValue<string> Culture { get; } = new(); public ObservableValue<string> Culture { get; } = new();
/// <summary>
/// 当前文化全名
/// </summary>
public ObservableValue<string> CultureFullName { get; } = new(UnknownCulture);
/// <summary> /// <summary>
/// 搜索文化 /// 搜索文化
/// </summary> /// </summary>
public ObservableValue<string> Search { get; } = new(); public ObservableValue<string> Search { get; } = new();
public static string UnknownCulture = "未知文化".Translate();
public AddCultureWindowVM() public AddCultureWindowVM()
{ {
ShowCultures.Value = AllCultures; ShowCultures.Value = AllCultures;
Search.ValueChanged += Search_ValueChanged; Search.ValueChanged += Search_ValueChanged;
Culture.ValueChanged += Culture_ValueChanged;
}
private void Culture_ValueChanged(string oldValue, string newValue)
{
if (string.IsNullOrWhiteSpace(newValue))
{
CultureFullName.Value = UnknownCulture;
return;
}
CultureInfo info = null!;
try
{
info = CultureInfo.GetCultureInfo(newValue);
}
catch
{
CultureFullName.Value = UnknownCulture;
}
if (info is not null)
{
CultureFullName.Value = info.GetFullInfo();
}
} }
private void Search_ValueChanged(string oldValue, string newValue) private void Search_ValueChanged(string oldValue, string newValue)

View File

@ -15,6 +15,8 @@ using System.Windows;
using System.IO; using System.IO;
using LinePutScript.Localization.WPF; using LinePutScript.Localization.WPF;
using Panuon.WPF.UI; using Panuon.WPF.UI;
using VPet.ModMaker.Views.ModEdit.I18nEdit;
using System.Globalization;
namespace VPet.ModMaker.ViewModels.ModEdit; namespace VPet.ModMaker.ViewModels.ModEdit;
@ -65,6 +67,11 @@ public class ModEditWindowVM
/// 保存至命令 /// 保存至命令
/// </summary> /// </summary>
public ObservableCommand SaveToCommand { get; } = new(); public ObservableCommand SaveToCommand { get; } = new();
/// <summary>
/// 编辑多语言内容
/// </summary>
public ObservableCommand EditI18nCommand { get; } = new();
#endregion #endregion
public ModEditWindowVM(ModEditWindow window) public ModEditWindowVM(ModEditWindow window)
@ -75,11 +82,25 @@ public class ModEditWindowVM
AddCultureCommand.ExecuteEvent += AddCulture; AddCultureCommand.ExecuteEvent += AddCulture;
EditCultureCommand.ExecuteEvent += EditCulture; EditCultureCommand.ExecuteEvent += EditCulture;
RemoveCultureCommand.ExecuteEvent += RemoveCulture; RemoveCultureCommand.ExecuteEvent += RemoveCulture;
EditI18nCommand.ExecuteEvent += EditI18n;
SaveCommand.ExecuteEvent += Save; SaveCommand.ExecuteEvent += Save;
SaveToCommand.ExecuteEvent += SaveTo; SaveToCommand.ExecuteEvent += SaveTo;
} }
private void EditI18n()
{
var window = new I18nEditWindow();
foreach (var culture in I18nHelper.Current.CultureNames)
window.AddCulture(culture);
//if (window.IsCancel)
// return;
//I18nHelper.Current.CultureNames.Add(window.ViewModel.Culture.Value);
//if (I18nHelper.Current.CultureNames.Count == 1)
// I18nHelper.Current.CultureName.Value = window.ViewModel.Culture.Value;
window.ShowDialog();
}
/// <summary> /// <summary>
/// 关闭 /// 关闭
/// </summary> /// </summary>

View File

@ -14,15 +14,11 @@
d:DataContext="{d:DesignInstance Type=vm:AddCultureWindowVM}" d:DataContext="{d:DesignInstance Type=vm:AddCultureWindowVM}"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<Window.Resources> <Grid>
<ResourceDictionary Source="/VPet-Simulator.Windows.Interface;component/ResourceStyle.xaml" />
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition /> <ColumnDefinition />
<ColumnDefinition Width="Auto" MinWidth="100" /> <ColumnDefinition Width="Auto" MinWidth="100" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition /> <RowDefinition />
@ -32,12 +28,27 @@
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition /> <RowDefinition />
<RowDefinition /> <RowDefinition />
<RowDefinition />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Label Content="{ll:Str 当前文化}" />
<TextBlock
Grid.Column="1"
Margin="10,0,0,0"
VerticalAlignment="Center"
Text="{Binding CultureFullName.Value}" />
</Grid>
<TextBox <TextBox
x:Name="TextBox_Lang" x:Name="TextBox_Lang"
Grid.Row="1"
pu:TextBoxHelper.Watermark="{ll:Str 文化名称}" pu:TextBoxHelper.Watermark="{ll:Str 文化名称}"
Style="{DynamicResource StandardTextBoxStyle}"
Text="{Binding Culture.Value, UpdateSourceTrigger=PropertyChanged}" /> Text="{Binding Culture.Value, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="1"> <TextBlock Grid.Row="2">
<Hyperlink Click="Hyperlink_Click"> <Hyperlink Click="Hyperlink_Click">
<TextBlock Text="{ll:Str 详情请参阅 Windows 支持的语言/区域名称列表中的“语言标记”列}" /> <TextBlock Text="{ll:Str 详情请参阅 Windows 支持的语言/区域名称列表中的“语言标记”列}" />
</Hyperlink> </Hyperlink>
@ -53,14 +64,16 @@
Margin="10" Margin="10"
Click="Button_Cancel_Click" Click="Button_Cancel_Click"
Content="{ll:Str 取消}" Content="{ll:Str 取消}"
IsCancel="True" /> IsCancel="True"
Style="{DynamicResource ThemedButtonStyle}" />
<Button <Button
x:Name="Button_Yes" x:Name="Button_Yes"
Grid.Column="1" Grid.Column="1"
Margin="10" Margin="10"
Click="Button_Yes_Click" Click="Button_Yes_Click"
Content="{ll:Str 确定}" Content="{ll:Str 确定}"
IsDefault="True" /> IsDefault="True"
Style="{DynamicResource ThemedButtonStyle}" />
</Grid> </Grid>
</Grid> </Grid>
<Grid Grid.Column="1"> <Grid Grid.Column="1">
@ -68,7 +81,10 @@
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition /> <RowDefinition />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBox pu:TextBoxHelper.Watermark="{ll:Str 搜索}" Text="{Binding Search.Value, UpdateSourceTrigger=PropertyChanged}" /> <TextBox
pu:TextBoxHelper.Watermark="{ll:Str 搜索}"
Style="{DynamicResource StandardTextBoxStyle}"
Text="{Binding Search.Value, UpdateSourceTrigger=PropertyChanged}" />
<ListBox <ListBox
Grid.Row="1" Grid.Row="1"
ItemsSource="{Binding ShowCultures.Value}" ItemsSource="{Binding ShowCultures.Value}"

View File

@ -51,29 +51,31 @@ public partial class I18nEditWindow : WindowX
/// 添加文化列 /// 添加文化列
/// </summary> /// </summary>
/// <param name="culture"></param> /// <param name="culture"></param>
public void AddCulture(CultureInfo culture) public void AddCulture(string culture)
{ {
// 文化数据列 // 文化数据列
var column = new DataGridTextColumn() var column = new DataGridTextColumn()
{ {
Header = culture.GetFullInfo(), MaxWidth = 200,
Binding = new Binding(string.Format(ValueBindingFormat, culture.Name)) Header = culture,
Binding = new Binding(string.Format(ValueBindingFormat, culture))
{ {
Mode = BindingMode.TwoWay Mode = BindingMode.TwoWay
} },
ElementStyle = (Style)Utils.ModMakerStyles["TextBlock_LeftCenter"],
}; };
DataGrid_Datas.Columns.Add(column); DataGrid_Datas.Columns.Add(column);
_dataGridI18nColumns.Add(culture.Name, column); _dataGridI18nColumns.Add(culture, column);
} }
/// <summary> /// <summary>
/// 删除文化列 /// 删除文化列
/// </summary> /// </summary>
/// <param name="culture"></param> /// <param name="culture"></param>
public void RemoveCulture(CultureInfo culture) public void RemoveCulture(string culture)
{ {
DataGrid_Datas.Columns.Remove(_dataGridI18nColumns[culture.Name]); DataGrid_Datas.Columns.Remove(_dataGridI18nColumns[culture]);
_dataGridI18nColumns.Remove(culture.Name); _dataGridI18nColumns.Remove(culture);
} }
/// <summary> /// <summary>
@ -81,14 +83,14 @@ public partial class I18nEditWindow : WindowX
/// </summary> /// </summary>
/// <param name="oldCulture"></param> /// <param name="oldCulture"></param>
/// <param name="newCulture"></param> /// <param name="newCulture"></param>
public void ReplaceCulture(CultureInfo oldCulture, CultureInfo newCulture) public void ReplaceCulture(string oldCulture, string newCulture)
{ {
//if (_dataGridI18nColumns.ContainsKey(newCultureName)) //if (_dataGridI18nColumns.ContainsKey(newCultureName))
// throw new(); // throw new();
var column = _dataGridI18nColumns[oldCulture.Name]; var column = _dataGridI18nColumns[oldCulture];
column.Header = newCulture.GetFullInfo(); column.Header = newCulture;
column.Binding = new Binding(string.Format(ValueBindingFormat, newCulture.Name)); column.Binding = new Binding(string.Format(ValueBindingFormat, newCulture));
_dataGridI18nColumns.Remove(oldCulture.Name); _dataGridI18nColumns.Remove(oldCulture);
_dataGridI18nColumns.Add(newCulture.Name, column); _dataGridI18nColumns.Add(newCulture, column);
} }
} }

View File

@ -304,6 +304,11 @@
</ListBox.ItemContainerStyle> </ListBox.ItemContainerStyle>
</ListBox> </ListBox>
<StackPanel Grid.Row="2"> <StackPanel Grid.Row="2">
<Button
x:Name="Button_EditI18n"
Command="{Binding EditI18nCommand}"
Content="{ll:Str 编辑多语言内容}"
Style="{DynamicResource ThemedButtonStyle}" />
<Button <Button
x:Name="Button_Save" x:Name="Button_Save"
Command="{Binding SaveCommand}" Command="{Binding SaveCommand}"

View File

@ -16,9 +16,6 @@
Style="{DynamicResource WindowXStyle}" Style="{DynamicResource WindowXStyle}"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
mc:Ignorable="d"> mc:Ignorable="d">
<Window.Resources>
<ResourceDictionary Source="/VPet-Simulator.Windows.Interface;component/ResourceStyle.xaml" />
</Window.Resources>
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition /> <ColumnDefinition />