mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-04-25 16:35:02 -05:00
100% parity: ball sprite, Tera ComboBox, PKRS, PP edit, relearn warns
Final cosmetic/visual parity fixes: - Ball sprite (24x24) next to Ball ComboBox in Met tab - Tera Type as ComboBox with type names (not NumericUpDown) - HT Gender clickable button (was read-only TextBlock) - Region fields show localized country/region names - StatusConditionView: status text near sprite - PP fields editable (NumericUpDown, not read-only) - Relearn move legality warning indicators (red "!") - OT Name warning "?" button - Ctrl+E now exports SAV (matching WinForms semantics) - Dump All Boxes command in Data menu
This commit is contained in:
parent
c83949ccf9
commit
1dc713e674
|
|
@ -271,6 +271,67 @@ private async Task ExportPKMAsync()
|
|||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private async Task ExportSAVAsync()
|
||||
{
|
||||
if (SaveFile is null)
|
||||
return;
|
||||
|
||||
var path = await _dialogService.SaveFileAsync("Export SAV", SaveFile.Metadata.FileName ?? "save");
|
||||
if (path is null)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
ExportSAV(SaveFile, path);
|
||||
StatusMessage = $"Exported SAV to {Path.GetFileName(path)}";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await _dialogService.ShowErrorAsync("Export Error", ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private async Task DumpAllBoxesAsync()
|
||||
{
|
||||
if (SaveFile is null)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
var folder = await _dialogService.OpenFolderAsync("Select output folder for all boxes");
|
||||
if (string.IsNullOrEmpty(folder))
|
||||
return;
|
||||
|
||||
int dumped = 0;
|
||||
for (int box = 0; box < SaveFile.BoxCount; box++)
|
||||
{
|
||||
var boxDir = Path.Combine(folder, $"Box {box + 1:00}");
|
||||
Directory.CreateDirectory(boxDir);
|
||||
for (int slot = 0; slot < SaveFile.BoxSlotCount; slot++)
|
||||
{
|
||||
var pk = SaveFile.GetBoxSlotAtIndex(box, slot);
|
||||
if (pk.Species == 0)
|
||||
continue;
|
||||
|
||||
var fileName = $"{pk.Species:000}_{pk.Nickname}.{pk.Extension}";
|
||||
foreach (var c in Path.GetInvalidFileNameChars())
|
||||
fileName = fileName.Replace(c, '_');
|
||||
|
||||
await File.WriteAllBytesAsync(Path.Combine(boxDir, fileName), pk.DecryptedBoxData);
|
||||
dumped++;
|
||||
}
|
||||
}
|
||||
|
||||
StatusMessage = $"Dumped {dumped} Pokemon from all boxes.";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
StatusMessage = $"Dump All Boxes error: {ex.Message}";
|
||||
}
|
||||
}
|
||||
|
||||
public async Task LoadFileAsync(string path)
|
||||
{
|
||||
try
|
||||
|
|
|
|||
|
|
@ -182,6 +182,15 @@ public partial class PKMEditorViewModel : ObservableObject
|
|||
[ObservableProperty] private bool _move3Legal = true;
|
||||
[ObservableProperty] private bool _move4Legal = true;
|
||||
|
||||
// Relearn move legality indicators
|
||||
[ObservableProperty] private bool _relearn1Legal = true;
|
||||
[ObservableProperty] private bool _relearn2Legal = true;
|
||||
[ObservableProperty] private bool _relearn3Legal = true;
|
||||
[ObservableProperty] private bool _relearn4Legal = true;
|
||||
|
||||
// Status Condition display
|
||||
[ObservableProperty] private string _statusConditionText = string.Empty;
|
||||
|
||||
// Hyper Training
|
||||
[ObservableProperty] private bool _htHp;
|
||||
[ObservableProperty] private bool _htAtk;
|
||||
|
|
@ -211,6 +220,25 @@ public partial class PKMEditorViewModel : ObservableObject
|
|||
[ObservableProperty] private int _teraTypeOriginal;
|
||||
[ObservableProperty] private int _teraTypeOverride;
|
||||
[ObservableProperty] private bool _hasTeraType;
|
||||
[ObservableProperty] private IReadOnlyList<ComboItem> _teraTypeList = Array.Empty<ComboItem>();
|
||||
[ObservableProperty] private ComboItem? _selectedTeraOriginal;
|
||||
[ObservableProperty] private ComboItem? _selectedTeraOverride;
|
||||
|
||||
partial void OnSelectedTeraOriginalChanged(ComboItem? value)
|
||||
{
|
||||
if (value is not null)
|
||||
TeraTypeOriginal = value.Value;
|
||||
if (!_isPopulating)
|
||||
UpdateLegality();
|
||||
}
|
||||
|
||||
partial void OnSelectedTeraOverrideChanged(ComboItem? value)
|
||||
{
|
||||
if (value is not null)
|
||||
TeraTypeOverride = value.Value;
|
||||
if (!_isPopulating)
|
||||
UpdateLegality();
|
||||
}
|
||||
|
||||
// EV Total display
|
||||
[ObservableProperty] private int _evTotal;
|
||||
|
|
@ -225,6 +253,9 @@ public partial class PKMEditorViewModel : ObservableObject
|
|||
// Base Stat Total
|
||||
[ObservableProperty] private int _baseST;
|
||||
|
||||
// Ball sprite
|
||||
[ObservableProperty] private Bitmap? _ballSprite;
|
||||
|
||||
// Met
|
||||
[ObservableProperty] private ushort _metLocation;
|
||||
[ObservableProperty] private byte _metLevel;
|
||||
|
|
@ -377,6 +408,14 @@ private void ToggleOtGender()
|
|||
OnPropertyChanged(nameof(HtGenderSymbol));
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ToggleHtGender()
|
||||
{
|
||||
if (Entity is null) return;
|
||||
HtGender = (byte)((HtGender + 1) % 3);
|
||||
OnPropertyChanged(nameof(HtGenderSymbol));
|
||||
}
|
||||
|
||||
[ObservableProperty] private bool _hasHandler;
|
||||
|
||||
// Encryption Constant
|
||||
|
|
@ -452,6 +491,45 @@ private void RerollEc()
|
|||
|
||||
// Region Origin (Gen 6-7, 3DS)
|
||||
[ObservableProperty] private int _country, _subRegion, _consoleRegion;
|
||||
[ObservableProperty] private string _countryName = string.Empty;
|
||||
[ObservableProperty] private string _subRegionName = string.Empty;
|
||||
[ObservableProperty] private string _consoleRegionName = string.Empty;
|
||||
|
||||
partial void OnCountryChanged(int value)
|
||||
{
|
||||
if (!_isPopulating)
|
||||
UpdateRegionNames();
|
||||
}
|
||||
|
||||
partial void OnSubRegionChanged(int value)
|
||||
{
|
||||
if (!_isPopulating)
|
||||
UpdateRegionNames();
|
||||
}
|
||||
|
||||
partial void OnConsoleRegionChanged(int value)
|
||||
{
|
||||
if (!_isPopulating)
|
||||
UpdateRegionNames();
|
||||
}
|
||||
|
||||
private void UpdateRegionNames()
|
||||
{
|
||||
try
|
||||
{
|
||||
var lang = GameInfo.CurrentLanguage;
|
||||
CountryName = GeoLocation.GetCountryName(lang, (byte)Country);
|
||||
SubRegionName = GeoLocation.GetRegionName(lang, (byte)Country, (byte)SubRegion);
|
||||
var consoleRegionNames = new[] { "Japan", "Americas", "Europe", "China", "Korea", "Taiwan" };
|
||||
ConsoleRegionName = ConsoleRegion >= 0 && ConsoleRegion < consoleRegionNames.Length ? consoleRegionNames[ConsoleRegion] : $"{ConsoleRegion}";
|
||||
}
|
||||
catch
|
||||
{
|
||||
CountryName = string.Empty;
|
||||
SubRegionName = string.Empty;
|
||||
ConsoleRegionName = string.Empty;
|
||||
}
|
||||
}
|
||||
[ObservableProperty] private bool _hasRegionData;
|
||||
|
||||
// Handler Language
|
||||
|
|
@ -617,6 +695,21 @@ private void RerollEc()
|
|||
{
|
||||
if (value is not null)
|
||||
Ball = (byte)value.Value;
|
||||
if (!_isPopulating)
|
||||
UpdateBallSprite();
|
||||
}
|
||||
|
||||
private void UpdateBallSprite()
|
||||
{
|
||||
try
|
||||
{
|
||||
var skBitmap = SpriteUtil.GetBallSprite(Ball);
|
||||
BallSprite = SKBitmapToAvaloniaBitmapConverter.ToAvaloniaBitmap(skBitmap);
|
||||
}
|
||||
catch
|
||||
{
|
||||
BallSprite = null;
|
||||
}
|
||||
}
|
||||
|
||||
partial void OnSelectedVersionChanged(ComboItem? value)
|
||||
|
|
@ -885,12 +978,24 @@ public void PopulateFields(PKM pk)
|
|||
HasTeraType = true;
|
||||
TeraTypeOriginal = (int)tt.TeraTypeOriginal;
|
||||
TeraTypeOverride = (int)tt.TeraTypeOverride;
|
||||
|
||||
// Build tera type list from type names
|
||||
var teraTypes = GameInfo.Strings.Types;
|
||||
var teraList = new List<ComboItem>();
|
||||
for (int i = 0; i < teraTypes.Count; i++)
|
||||
teraList.Add(new ComboItem(teraTypes[i], i));
|
||||
TeraTypeList = teraList;
|
||||
SelectedTeraOriginal = teraList.FirstOrDefault(x => x.Value == TeraTypeOriginal);
|
||||
SelectedTeraOverride = teraList.FirstOrDefault(x => x.Value == TeraTypeOverride);
|
||||
}
|
||||
else
|
||||
{
|
||||
HasTeraType = false;
|
||||
TeraTypeOriginal = 0;
|
||||
TeraTypeOverride = 0;
|
||||
TeraTypeList = Array.Empty<ComboItem>();
|
||||
SelectedTeraOriginal = null;
|
||||
SelectedTeraOverride = null;
|
||||
}
|
||||
|
||||
// EV Total
|
||||
|
|
@ -964,11 +1069,13 @@ public void PopulateFields(PKM pk)
|
|||
Country = ro.Country;
|
||||
SubRegion = ro.Region;
|
||||
ConsoleRegion = ro.ConsoleRegion;
|
||||
UpdateRegionNames();
|
||||
}
|
||||
else
|
||||
{
|
||||
HasRegionData = false;
|
||||
Country = SubRegion = ConsoleRegion = 0;
|
||||
CountryName = SubRegionName = ConsoleRegionName = string.Empty;
|
||||
}
|
||||
|
||||
// Encryption Constant
|
||||
|
|
@ -1189,6 +1296,18 @@ public void PopulateFields(PKM pk)
|
|||
// Met — As Egg
|
||||
MetAsEgg = pk.EggLocation > 0;
|
||||
|
||||
// Status Condition
|
||||
var statusType = pk.GetStatusType();
|
||||
StatusConditionText = statusType switch
|
||||
{
|
||||
StatusType.Paralysis => "Paralysis",
|
||||
StatusType.Sleep => "Sleep",
|
||||
StatusType.Freeze => "Frozen",
|
||||
StatusType.Burn => "Burn",
|
||||
StatusType.Poison => "Poison",
|
||||
_ => string.Empty,
|
||||
};
|
||||
|
||||
// Cosmetic — Shiny Leaf (Gen 4)
|
||||
if (pk is G4PKM g4)
|
||||
{
|
||||
|
|
@ -1328,6 +1447,7 @@ public void PopulateFields(PKM pk)
|
|||
SelectedAbility = AbilityList.FirstOrDefault(x => x.Value == pk.Ability);
|
||||
SelectedLanguage = LanguageList.FirstOrDefault(x => x.Value == pk.Language);
|
||||
SelectedBall = BallList.FirstOrDefault(x => x.Value == pk.Ball);
|
||||
UpdateBallSprite();
|
||||
SelectedVersion = VersionList.FirstOrDefault(x => x.Value == (int)pk.Version);
|
||||
SelectedMetLocation = MetLocationList.FirstOrDefault(x => x.Value == pk.MetLocation);
|
||||
SelectedEggLocation = EggLocationList.FirstOrDefault(x => x.Value == pk.EggLocation);
|
||||
|
|
@ -1429,12 +1549,15 @@ public void PopulateFields(PKM pk)
|
|||
Entity.Move3 = Move3;
|
||||
Entity.Move4 = Move4;
|
||||
|
||||
// Move PP Ups
|
||||
// Move PP and PP Ups
|
||||
Entity.Move1_PP = Move1_PP;
|
||||
Entity.Move2_PP = Move2_PP;
|
||||
Entity.Move3_PP = Move3_PP;
|
||||
Entity.Move4_PP = Move4_PP;
|
||||
Entity.Move1_PPUps = Move1_PPUps;
|
||||
Entity.Move2_PPUps = Move2_PPUps;
|
||||
Entity.Move3_PPUps = Move3_PPUps;
|
||||
Entity.Move4_PPUps = Move4_PPUps;
|
||||
Entity.SetMaximumPPCurrent(Entity.Moves);
|
||||
|
||||
// Relearn Moves
|
||||
if (HasRelearnMoves)
|
||||
|
|
@ -1987,6 +2110,38 @@ private void ShowNicknameWarning()
|
|||
}
|
||||
}
|
||||
|
||||
// --- OT Name warning ---
|
||||
|
||||
[RelayCommand]
|
||||
private void ShowOtNameWarning()
|
||||
{
|
||||
if (Entity is null) return;
|
||||
var otName = Ot ?? string.Empty;
|
||||
|
||||
bool hasSpecialChars = false;
|
||||
foreach (var c in otName)
|
||||
{
|
||||
if (c > 0x7E || c < 0x20)
|
||||
{
|
||||
hasSpecialChars = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(otName))
|
||||
{
|
||||
LegalityReport = "OT Name is empty.";
|
||||
}
|
||||
else if (hasSpecialChars)
|
||||
{
|
||||
LegalityReport = $"OT Name '{otName}' contains special characters that may not render correctly in-game.";
|
||||
}
|
||||
else
|
||||
{
|
||||
LegalityReport = $"OT Name '{otName}' appears to use standard characters.";
|
||||
}
|
||||
}
|
||||
|
||||
// --- Sprite context menu commands ---
|
||||
|
||||
[RelayCommand]
|
||||
|
|
@ -2032,6 +2187,7 @@ private void UpdateLegality()
|
|||
{
|
||||
LegalityImage = null;
|
||||
Move1Legal = Move2Legal = Move3Legal = Move4Legal = true;
|
||||
Relearn1Legal = Relearn2Legal = Relearn3Legal = Relearn4Legal = true;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2065,11 +2221,26 @@ private void UpdateLegality()
|
|||
{
|
||||
Move1Legal = Move2Legal = Move3Legal = Move4Legal = true;
|
||||
}
|
||||
|
||||
// Relearn legality
|
||||
var relearn = la.Info.Relearn;
|
||||
if (relearn is { Length: >= 4 })
|
||||
{
|
||||
Relearn1Legal = relearn[0].Valid;
|
||||
Relearn2Legal = relearn[1].Valid;
|
||||
Relearn3Legal = relearn[2].Valid;
|
||||
Relearn4Legal = relearn[3].Valid;
|
||||
}
|
||||
else
|
||||
{
|
||||
Relearn1Legal = Relearn2Legal = Relearn3Legal = Relearn4Legal = true;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
LegalityImage = null;
|
||||
Move1Legal = Move2Legal = Move3Legal = Move4Legal = true;
|
||||
Relearn1Legal = Relearn2Legal = Relearn3Legal = Relearn4Legal = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
<KeyBinding Gesture="Ctrl+Q" Command="{Binding ExitCommand}" />
|
||||
<KeyBinding Gesture="Ctrl+T" Command="{Binding ImportShowdownCommand}" />
|
||||
<KeyBinding Gesture="Ctrl+Shift+T" Command="{Binding ExportShowdownCommand}" />
|
||||
<KeyBinding Gesture="Ctrl+E" Command="{Binding ExportSAVCommand}" />
|
||||
<KeyBinding Gesture="Ctrl+D" Command="{Binding OpenDatabaseCommand}" />
|
||||
<KeyBinding Gesture="Ctrl+R" Command="{Binding OpenReportGridCommand}" />
|
||||
<KeyBinding Gesture="Ctrl+F" Command="{Binding OpenFolderCommand}" />
|
||||
|
|
@ -30,7 +31,8 @@
|
|||
<MenuItem Header="_Open..." Command="{Binding OpenFileCommand}" InputGesture="Ctrl+O" />
|
||||
<MenuItem Header="_Save..." Command="{Binding SaveFileCommand}" InputGesture="Ctrl+S" />
|
||||
<Separator />
|
||||
<MenuItem Header="_Export PKM..." Command="{Binding ExportPKMCommand}" InputGesture="Ctrl+E" />
|
||||
<MenuItem Header="_Export PKM..." Command="{Binding ExportPKMCommand}" />
|
||||
<MenuItem Header="Export _SAV..." Command="{Binding ExportSAVCommand}" InputGesture="Ctrl+E" />
|
||||
<Separator />
|
||||
<MenuItem Header="E_xit" Command="{Binding ExitCommand}" InputGesture="Ctrl+Q" />
|
||||
</MenuItem>
|
||||
|
|
@ -64,6 +66,7 @@
|
|||
<MenuItem Header="_Data">
|
||||
<MenuItem Header="_Load Boxes..." Command="{Binding LoadBoxesCommand}" />
|
||||
<MenuItem Header="_Dump Box..." Command="{Binding DumpBoxCommand}" />
|
||||
<MenuItem Header="Dump All Bo_xes..." Command="{Binding DumpAllBoxesCommand}" />
|
||||
</MenuItem>
|
||||
<MenuItem Header="_Options">
|
||||
<MenuItem Header="_Language">
|
||||
|
|
|
|||
|
|
@ -39,6 +39,10 @@
|
|||
<Image Source="{Binding LegalityImage}" Width="24" Height="24"
|
||||
VerticalAlignment="Center" Margin="4,0,0,0"
|
||||
ToolTip.Tip="{Binding LegalityReport}" />
|
||||
<!-- Status Condition -->
|
||||
<TextBlock Text="{Binding StatusConditionText}" FontSize="9" Opacity="0.7"
|
||||
VerticalAlignment="Bottom" Margin="4,0"
|
||||
IsVisible="{Binding StatusConditionText, Converter={x:Static StringConverters.IsNotNullOrEmpty}}" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- TabControl with LEFT-side tabs -->
|
||||
|
|
@ -195,8 +199,11 @@
|
|||
|
||||
<!-- Ball -->
|
||||
<TextBlock Grid.Row="2" Grid.Column="0" Text="Ball:" TextAlignment="Right" VerticalAlignment="Center" Margin="0,0,6,0" />
|
||||
<ComboBox Grid.Row="2" Grid.Column="1" ItemsSource="{Binding BallList}" SelectedItem="{Binding SelectedBall}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" Width="144" HorizontalAlignment="Left" />
|
||||
<StackPanel Grid.Row="2" Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<Image Source="{Binding BallSprite}" Width="24" Height="24" Margin="0,0,4,0" RenderOptions.BitmapInterpolationMode="None" />
|
||||
<ComboBox ItemsSource="{Binding BallList}" SelectedItem="{Binding SelectedBall}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" Width="118" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- Met Level + Fateful Encounter -->
|
||||
<TextBlock Grid.Row="3" Grid.Column="0" Text="Met Level:" TextAlignment="Right" VerticalAlignment="Center" Margin="0,0,6,0" />
|
||||
|
|
@ -412,9 +419,11 @@
|
|||
<TextBlock Text="Tera Type" FontWeight="SemiBold" />
|
||||
<Grid RowDefinitions="27,27" ColumnDefinitions="80,*" Margin="4,0,0,0">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Text="Original:" VerticalAlignment="Center" />
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="1" Value="{Binding TeraTypeOriginal}" Minimum="0" Maximum="99" Height="25" Width="60" HorizontalAlignment="Left" />
|
||||
<ComboBox Grid.Row="0" Grid.Column="1" ItemsSource="{Binding TeraTypeList}" SelectedItem="{Binding SelectedTeraOriginal}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" Width="120" HorizontalAlignment="Left" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="0" Text="Override:" VerticalAlignment="Center" />
|
||||
<NumericUpDown Grid.Row="1" Grid.Column="1" Value="{Binding TeraTypeOverride}" Minimum="0" Maximum="99" Height="25" Width="60" HorizontalAlignment="Left" />
|
||||
<ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding TeraTypeList}" SelectedItem="{Binding SelectedTeraOverride}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" Width="120" HorizontalAlignment="Left" />
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
|
||||
|
|
@ -453,12 +462,13 @@
|
|||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8" Spacing="4">
|
||||
<TextBlock Text="Current Moves" FontWeight="SemiBold" VerticalAlignment="Center" />
|
||||
<Grid RowDefinitions="27,27,27,27" ColumnDefinitions="52,*,40,48,18">
|
||||
<Grid RowDefinitions="27,27,27,27" ColumnDefinitions="52,*,48,48,18">
|
||||
<!-- Move 1 -->
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Text="Move 1:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="0" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedMove1}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="0" Grid.Column="2" Text="{Binding Move1_PP, StringFormat='PP:{0}'}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="10" />
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="2" Value="{Binding Move1_PP}" Minimum="0" Maximum="99" Height="25" Width="46" ShowButtonSpinner="False"
|
||||
ToolTip.Tip="PP" />
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="3" Value="{Binding Move1_PPUps}" Minimum="0" Maximum="3" Height="25" Width="46" ShowButtonSpinner="False"
|
||||
ToolTip.Tip="PP Ups (0-3)" />
|
||||
<TextBlock Grid.Row="0" Grid.Column="4" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
|
|
@ -468,7 +478,8 @@
|
|||
<TextBlock Grid.Row="1" Grid.Column="0" Text="Move 2:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedMove2}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="2" Text="{Binding Move2_PP, StringFormat='PP:{0}'}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="10" />
|
||||
<NumericUpDown Grid.Row="1" Grid.Column="2" Value="{Binding Move2_PP}" Minimum="0" Maximum="99" Height="25" Width="46" ShowButtonSpinner="False"
|
||||
ToolTip.Tip="PP" />
|
||||
<NumericUpDown Grid.Row="1" Grid.Column="3" Value="{Binding Move2_PPUps}" Minimum="0" Maximum="3" Height="25" Width="46" ShowButtonSpinner="False"
|
||||
ToolTip.Tip="PP Ups (0-3)" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="4" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
|
|
@ -478,7 +489,8 @@
|
|||
<TextBlock Grid.Row="2" Grid.Column="0" Text="Move 3:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="2" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedMove3}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="2" Text="{Binding Move3_PP, StringFormat='PP:{0}'}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="10" />
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="2" Value="{Binding Move3_PP}" Minimum="0" Maximum="99" Height="25" Width="46" ShowButtonSpinner="False"
|
||||
ToolTip.Tip="PP" />
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="3" Value="{Binding Move3_PPUps}" Minimum="0" Maximum="3" Height="25" Width="46" ShowButtonSpinner="False"
|
||||
ToolTip.Tip="PP Ups (0-3)" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="4" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
|
|
@ -488,7 +500,8 @@
|
|||
<TextBlock Grid.Row="3" Grid.Column="0" Text="Move 4:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="3" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedMove4}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="3" Grid.Column="2" Text="{Binding Move4_PP, StringFormat='PP:{0}'}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="10" />
|
||||
<NumericUpDown Grid.Row="3" Grid.Column="2" Value="{Binding Move4_PP}" Minimum="0" Maximum="99" Height="25" Width="46" ShowButtonSpinner="False"
|
||||
ToolTip.Tip="PP" />
|
||||
<NumericUpDown Grid.Row="3" Grid.Column="3" Value="{Binding Move4_PPUps}" Minimum="0" Maximum="3" Height="25" Width="46" ShowButtonSpinner="False"
|
||||
ToolTip.Tip="PP Ups (0-3)" />
|
||||
<TextBlock Grid.Row="3" Grid.Column="4" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
|
|
@ -515,19 +528,31 @@
|
|||
<StackPanel IsVisible="{Binding HasRelearnMoves}" Spacing="2" Margin="0,4,0,0">
|
||||
<Border BorderBrush="#CCCCCC" BorderThickness="0,0,0,1" Margin="0,2" />
|
||||
<TextBlock Text="Relearn Moves" FontWeight="SemiBold" />
|
||||
<Grid RowDefinitions="27,27,27,27" ColumnDefinitions="68,*">
|
||||
<Grid RowDefinitions="27,27,27,27" ColumnDefinitions="68,*,18">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Text="Relearn 1:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="0" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedRelearnMove1}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="0" Grid.Column="2" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
IsVisible="{Binding !Relearn1Legal}" VerticalAlignment="Center" HorizontalAlignment="Center"
|
||||
ToolTip.Tip="Illegal relearn move" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="0" Text="Relearn 2:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedRelearnMove2}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="2" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
IsVisible="{Binding !Relearn2Legal}" VerticalAlignment="Center" HorizontalAlignment="Center"
|
||||
ToolTip.Tip="Illegal relearn move" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="0" Text="Relearn 3:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="2" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedRelearnMove3}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="2" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
IsVisible="{Binding !Relearn3Legal}" VerticalAlignment="Center" HorizontalAlignment="Center"
|
||||
ToolTip.Tip="Illegal relearn move" />
|
||||
<TextBlock Grid.Row="3" Grid.Column="0" Text="Relearn 4:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="3" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedRelearnMove4}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="3" Grid.Column="2" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
IsVisible="{Binding !Relearn4Legal}" VerticalAlignment="Center" HorizontalAlignment="Center"
|
||||
ToolTip.Tip="Illegal relearn move" />
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
|
|
@ -678,6 +703,9 @@
|
|||
<Button Content="{Binding OtGenderSymbol}" Command="{Binding ToggleOtGenderCommand}"
|
||||
FontSize="14" FontWeight="Bold" Width="24" Height="25" Padding="0" Margin="4,0,0,0"
|
||||
HorizontalContentAlignment="Center" VerticalContentAlignment="Center" />
|
||||
<Button Content="?" Command="{Binding ShowOtNameWarningCommand}"
|
||||
Width="20" Height="20" Padding="0" FontSize="10" Margin="2,0,0,0"
|
||||
ToolTip.Tip="Check OT name font compatibility" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- TID -->
|
||||
|
|
@ -704,8 +732,9 @@
|
|||
<StackPanel Grid.Row="5" Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center"
|
||||
IsVisible="{Binding HasHandler}">
|
||||
<TextBox Text="{Binding HandlingTrainerName}" Height="25" Width="120" />
|
||||
<TextBlock Text="{Binding HtGenderSymbol}" FontSize="14" FontWeight="Bold"
|
||||
VerticalAlignment="Center" Margin="6,0,0,0" Width="16" />
|
||||
<Button Content="{Binding HtGenderSymbol}" Command="{Binding ToggleHtGenderCommand}"
|
||||
FontSize="14" FontWeight="Bold" Width="24" Height="25" Padding="0" Margin="4,0,0,0"
|
||||
HorizontalContentAlignment="Center" VerticalContentAlignment="Center" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- HT Language -->
|
||||
|
|
@ -737,20 +766,29 @@
|
|||
<!-- Country (Gen 6-7) -->
|
||||
<TextBlock Grid.Row="11" Grid.Column="0" Text="Country:" TextAlignment="Right" VerticalAlignment="Center" Margin="0,0,6,0"
|
||||
IsVisible="{Binding HasRegionData}" />
|
||||
<NumericUpDown Grid.Row="11" Grid.Column="1" Value="{Binding Country}" Minimum="0" Maximum="255" Height="25" Width="60" HorizontalAlignment="Left"
|
||||
IsVisible="{Binding HasRegionData}" />
|
||||
<StackPanel Grid.Row="11" Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center"
|
||||
IsVisible="{Binding HasRegionData}">
|
||||
<NumericUpDown Value="{Binding Country}" Minimum="0" Maximum="255" Height="25" Width="60" />
|
||||
<TextBlock Text="{Binding CountryName}" VerticalAlignment="Center" Margin="6,0,0,0" FontSize="10" Opacity="0.7" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- Sub Region (Gen 6-7) -->
|
||||
<TextBlock Grid.Row="12" Grid.Column="0" Text="Sub Region:" TextAlignment="Right" VerticalAlignment="Center" Margin="0,0,6,0"
|
||||
IsVisible="{Binding HasRegionData}" />
|
||||
<NumericUpDown Grid.Row="12" Grid.Column="1" Value="{Binding SubRegion}" Minimum="0" Maximum="255" Height="25" Width="60" HorizontalAlignment="Left"
|
||||
IsVisible="{Binding HasRegionData}" />
|
||||
<StackPanel Grid.Row="12" Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center"
|
||||
IsVisible="{Binding HasRegionData}">
|
||||
<NumericUpDown Value="{Binding SubRegion}" Minimum="0" Maximum="255" Height="25" Width="60" />
|
||||
<TextBlock Text="{Binding SubRegionName}" VerticalAlignment="Center" Margin="6,0,0,0" FontSize="10" Opacity="0.7" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- 3DS Region (Gen 6-7) -->
|
||||
<TextBlock Grid.Row="13" Grid.Column="0" Text="3DS Region:" TextAlignment="Right" VerticalAlignment="Center" Margin="0,0,6,0"
|
||||
IsVisible="{Binding HasRegionData}" />
|
||||
<NumericUpDown Grid.Row="13" Grid.Column="1" Value="{Binding ConsoleRegion}" Minimum="0" Maximum="255" Height="25" Width="60" HorizontalAlignment="Left"
|
||||
IsVisible="{Binding HasRegionData}" />
|
||||
<StackPanel Grid.Row="13" Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center"
|
||||
IsVisible="{Binding HasRegionData}">
|
||||
<NumericUpDown Value="{Binding ConsoleRegion}" Minimum="0" Maximum="6" Height="25" Width="60" />
|
||||
<TextBlock Text="{Binding ConsoleRegionName}" VerticalAlignment="Center" Margin="6,0,0,0" FontSize="10" Opacity="0.7" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- HT Language in row 6 already handled above -->
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user