Skip to content

Commit

Permalink
0.71
Browse files Browse the repository at this point in the history
- Added custom dynamic tables
- Added/fixed TLK string support for custom objects and dynamic tables
- Added support for missing ERF resource types
- Fixed some UI bugs
  • Loading branch information
Cjreek committed Jul 31, 2023
1 parent 866ff0f commit b2cab54
Show file tree
Hide file tree
Showing 119 changed files with 1,813 additions and 237 deletions.
3 changes: 3 additions & 0 deletions eos-edit/App.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@
<DataTemplate DataType="{x:Type dialogVM:CustomObjectInstanceSearchViewModel}">
<dialogViews:ModelSearchView/>
</DataTemplate>
<DataTemplate DataType="{x:Type dialogVM:CustomDynamicTableInstanceSearchViewModel}">
<dialogViews:ModelSearchView/>
</DataTemplate>

<DataTemplate DataType="{x:Type dialogVM:GlobalSearchViewModel}">
<dialogViews:GlobalSearchView/>
Expand Down
10 changes: 8 additions & 2 deletions eos-edit/Assets/CustomDataTemplateResources.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,10 @@
<uc:CustomEnumComboBox CustomEnum="{Binding Property.DataType.CustomType}" SelectedValue="{Binding Value}" IsNullable="True"/>
</DataTemplate>

<DataTemplate x:Key="customDynamicTableTemplate">
<uc:CustomDynamicTableComboBox CustomDynamicTableTemplate="{Binding Property.DataType.CustomType}" SelectedValue="{Binding Value}" IsNullable="True"/>
</DataTemplate>

<DataTemplate x:Key="customObjectVariantTemplate">
<uc:CustomObjectComboBox CustomObjectTemplate="{Binding DataType.CustomType}" SelectedValue="{Binding Value}" IsNullable="True"/>
</DataTemplate>
Expand Down Expand Up @@ -166,7 +170,8 @@
CompanionTemplate="{StaticResource companionTemplate}"
FamiliarTemplate="{StaticResource familiarTemplate}"
CustomObjectTemplate="{StaticResource customObjectVariantTemplate}"
CustomEnumTemplate="{StaticResource customEnumVariantTemplate}"/>
CustomEnumTemplate="{StaticResource customEnumVariantTemplate}"
CustomDynamicTableTemplate="{StaticResource customDynamicTableTemplate}"/>

<DataTemplate x:Key="variantTemplate">
<Grid DataContextChanged="">
Expand Down Expand Up @@ -237,5 +242,6 @@
CompanionTemplate="{StaticResource companionTemplate}"
FamiliarTemplate="{StaticResource familiarTemplate}"
CustomObjectTemplate="{StaticResource customObjectTemplate}"
CustomEnumTemplate="{StaticResource customEnumTemplate}"/>
CustomEnumTemplate="{StaticResource customEnumTemplate}"
CustomDynamicTableTemplate="{StaticResource customDynamicTableTemplate}"/>
</ResourceDictionary>
4 changes: 4 additions & 0 deletions eos-edit/Assets/StyleResources.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -391,4 +391,8 @@
<Style Selector="uc|CustomObjectComboBox">
<Setter Property="Margin" Value="2,0,0,3"/>
</Style>

<Style Selector="uc|CustomDynamicTableComboBox">
<Setter Property="Margin" Value="2,0,0,3"/>
</Style>
</Styles>
8 changes: 6 additions & 2 deletions eos-edit/Extensions/InstancePropertyValueTemplateSelector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,12 @@ public class InstancePropertyValueTemplateSelector : IDataTemplate
public DataTemplate? CompanionTemplate { get; set; }
public DataTemplate? FamiliarTemplate { get; set; }
public DataTemplate? ProgrammedEffectTemplate { get; set; }
public DataTemplate? CustomObjectTemplate { get; set; }
public DataTemplate? CustomEnumTemplate { get; set; }
public DataTemplate? DamageTypeTemplate { get; set; }
public DataTemplate? DamageTypeGroupTemplate { get; set; }
public DataTemplate? CustomObjectTemplate { get; set; }
public DataTemplate? CustomEnumTemplate { get; set; }
public DataTemplate? CustomDynamicTableTemplate { get; set; }


public Control? Build(object? param)
{
Expand Down Expand Up @@ -149,6 +151,8 @@ public bool Match(object? data)
return CustomObjectTemplate ?? ErrorTemplate;
if (dataTypeDef.CustomType is CustomEnum customEnum)
return CustomEnumTemplate ?? ErrorTemplate;
if (dataTypeDef.CustomType is CustomDynamicTable customDynTable)
return CustomDynamicTableTemplate ?? ErrorTemplate;

return ErrorTemplate;
}
Expand Down
36 changes: 36 additions & 0 deletions eos-edit/Usercontrols/CustomDynamicTableComboBox.axaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="using:Eos.Usercontrols"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Eos.Usercontrols.CustomDynamicTableComboBox"
x:Name="ucCustomDynamicTableComboBox">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceInclude Source="/Assets/ConverterResources.axaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>

<Grid DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:CustomDynamicTableComboBox}}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>

<Button x:Name="cbCustomDynamicTables" Grid.Column="0" Click="btSearch_Click" HorizontalContentAlignment="Stretch" MinHeight="22">
<Button.Content>
<TextBlock Text="{Binding ElementName=ucCustomDynamicTableComboBox, Path=SelectedValue.Label}" Margin="3,0,0,0"/>
</Button.Content>
</Button>

<Button x:Name="btClear" Grid.Column="1" Content="🞪" Click="btClear_Click" Margin="2,0,0,0"
Height="{Binding ElementName=cbCustomDynamicTables, Path=Bounds.Height}" Width="{Binding ElementName=cbCustomDynamicTables, Path=Bounds.Height}"
IsVisible="{Binding ElementName=ucCustomDynamicTableComboBox, Path=IsNullable}"/>
<Button x:Name="btGoto" Grid.Column="2" Margin="2,0,0,0" Content="👁" Click="btGoto_Click"
Height="{Binding ElementName=cbCustomDynamicTables, Path=Bounds.Height}" Width="{Binding ElementName=cbCustomDynamicTables, Path=Bounds.Height}"/>
</Grid>
</UserControl>
64 changes: 64 additions & 0 deletions eos-edit/Usercontrols/CustomDynamicTableComboBox.axaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Data;
using Avalonia.Interactivity;
using Eos.Models;
using Eos.Models.Tables;
using Eos.Repositories;
using Eos.Services;
using Eos.ViewModels.Base;
using Eos.ViewModels.Dialogs;

namespace Eos.Usercontrols
{
public partial class CustomDynamicTableComboBox : UserControl
{
public CustomDynamicTableComboBox()
{
InitializeComponent();
}

public static readonly StyledProperty<CustomDynamicTable?> CustomDynamicTableTemplateProperty = AvaloniaProperty.Register<CustomDynamicTableComboBox, CustomDynamicTable?>("CustomDynamicTableTemplate", null);
public static readonly StyledProperty<CustomDynamicTableInstance?> SelectedValueProperty = AvaloniaProperty.Register<CustomDynamicTableComboBox, CustomDynamicTableInstance?>("SelectedValue", null, false, BindingMode.TwoWay);
public static readonly StyledProperty<bool> IsNullableProperty = AvaloniaProperty.Register<CustomDynamicTableComboBox, bool>("IsNullable", true);

public CustomDynamicTable? CustomDynamicTableTemplate
{
get { return GetValue(CustomDynamicTableTemplateProperty); }
set { SetValue(CustomDynamicTableTemplateProperty, value); }
}

public CustomDynamicTableInstance? SelectedValue
{
get { return GetValue(SelectedValueProperty); }
set { SetValue(SelectedValueProperty, value); }
}

public bool IsNullable
{
get { return GetValue(IsNullableProperty); }
set { SetValue(IsNullableProperty, value); }
}

private void btClear_Click(object sender, RoutedEventArgs e)
{
SetValue(SelectedValueProperty, null);
}

private void btSearch_Click(object sender, RoutedEventArgs e)
{
if (CustomDynamicTableTemplate != null)
{
var viewModel = new CustomDynamicTableInstanceSearchViewModel(CustomDynamicTableTemplate, MasterRepository.Project.CustomDynamicTableRepositories[CustomDynamicTableTemplate]);
WindowService.OpenDialog(viewModel);
if (viewModel.ResultModel != null)
SetValue(SelectedValueProperty, viewModel.ResultModel);
}
}

private void btGoto_Click(object sender, RoutedEventArgs e)
{
MessageDispatcher.Send(MessageType.OpenDetail, SelectedValue, true);
}
}
}
2 changes: 1 addition & 1 deletion eos-edit/ViewModels/AppearanceSoundsetViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace Eos.ViewModels
{
internal class AppearanceSoundsetViewModel : DataDetailViewModel<AppearanceSoundset>
public class AppearanceSoundsetViewModel : DataDetailViewModel<AppearanceSoundset>
{
public AppearanceSoundsetViewModel() : base()
{
Expand Down
2 changes: 1 addition & 1 deletion eos-edit/ViewModels/AppearanceViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace Eos.ViewModels
{
internal class AppearanceViewModel : DataDetailViewModel<Appearance>
public class AppearanceViewModel : DataDetailViewModel<Appearance>
{
public AppearanceViewModel() : base()
{
Expand Down
2 changes: 1 addition & 1 deletion eos-edit/ViewModels/AreaEffectViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace Eos.ViewModels
{
internal class AreaEffectViewModel : DataDetailViewModel<AreaEffect>
public class AreaEffectViewModel : DataDetailViewModel<AreaEffect>
{
public AreaEffectViewModel() : base()
{
Expand Down
2 changes: 1 addition & 1 deletion eos-edit/ViewModels/AttackBonusTableViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

namespace Eos.ViewModels
{
internal class AttackBonusTableViewModel : DataDetailViewModel<AttackBonusTable>
public class AttackBonusTableViewModel : DataDetailViewModel<AttackBonusTable>
{
public AttackBonusTableViewModel() : base()
{
Expand Down
2 changes: 1 addition & 1 deletion eos-edit/ViewModels/Base/DataDetailViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

namespace Eos.ViewModels.Base
{
internal abstract class DataDetailViewModel<T> : DataDetailViewModelBase where T : BaseModel, new()
public abstract class DataDetailViewModel<T> : DataDetailViewModelBase where T : BaseModel, new()
{
private T data;
private HashSet<String> headerSourceFields;
Expand Down
5 changes: 5 additions & 0 deletions eos-edit/ViewModels/Base/ViewModelBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,11 @@ protected ViewModelQueryResult DoQuery(String title, String message, ViewModelQu
MessageDispatcher.Send(MessageType.NewCustomDetail, template);
});

public ReactiveCommand<CustomDynamicTable, Unit> NewCustomDynamicTableCommand { get; private set; } = ReactiveCommand.Create<CustomDynamicTable>(template =>
{
MessageDispatcher.Send(MessageType.NewCustomDetail, template);
});

public ReactiveCommand<BaseModel, Unit> OverrideDetailCommand { get; private set; } = ReactiveCommand.Create<BaseModel>(originalModel =>
{
MessageDispatcher.Send(MessageType.OverrideDetail, originalModel);
Expand Down
4 changes: 4 additions & 0 deletions eos-edit/ViewModels/Base/ViewModelFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,12 @@ public static DataDetailViewModelBase CreateViewModel(object model)
return new CustomEnumViewModel(customEnum);
if (model is CustomObject customObject)
return new CustomObjectViewModel(customObject);
if (model is CustomDynamicTable customDynamicTable)
return new CustomDynamicTableViewModel(customDynamicTable);
if (model is CustomObjectInstance customObjectInstance)
return new CustomObjectInstanceViewModel(customObjectInstance);
if (model is CustomDynamicTableInstance customDynamicTableInstance)
return new CustomDynamicTableInstanceViewModel(customDynamicTableInstance);

if (model is ModelExtension extension)
return new ModelExtensionViewModel(extension);
Expand Down
2 changes: 1 addition & 1 deletion eos-edit/ViewModels/BaseItemViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

namespace Eos.ViewModels
{
internal class BaseItemViewModel : DataDetailViewModel<BaseItem>
public class BaseItemViewModel : DataDetailViewModel<BaseItem>
{
public BaseItemViewModel() : base()
{
Expand Down
2 changes: 1 addition & 1 deletion eos-edit/ViewModels/BonusFeatTableViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace Eos.ViewModels
{
internal class BonusFeatTableViewModel : DataDetailViewModel<BonusFeatsTable>
public class BonusFeatTableViewModel : DataDetailViewModel<BonusFeatsTable>
{
public BonusFeatTableViewModel() : base()
{
Expand Down
2 changes: 1 addition & 1 deletion eos-edit/ViewModels/ClassPackageViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace Eos.ViewModels
{
internal class ClassPackageViewModel : DataDetailViewModel<ClassPackage>
public class ClassPackageViewModel : DataDetailViewModel<ClassPackage>
{
public ClassPackageViewModel() : base()
{
Expand Down
2 changes: 1 addition & 1 deletion eos-edit/ViewModels/ClassViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

namespace Eos.ViewModels
{
internal class ClassViewModel : DataDetailViewModel<CharacterClass>
public class ClassViewModel : DataDetailViewModel<CharacterClass>
{
public ClassViewModel() : base()
{
Expand Down
2 changes: 1 addition & 1 deletion eos-edit/ViewModels/CompanionViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

namespace Eos.ViewModels
{
internal class CompanionViewModel : DataDetailViewModel<Companion>
public class CompanionViewModel : DataDetailViewModel<Companion>
{
public CompanionViewModel() : base()
{
Expand Down
81 changes: 81 additions & 0 deletions eos-edit/ViewModels/CustomDynamicTableInstanceViewModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
using Eos.Models;
using Eos.Models.Tables;
using Eos.Types;
using Eos.ViewModels.Base;
using ReactiveUI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive;
using System.Text;
using System.Threading.Tasks;

namespace Eos.ViewModels
{
public class CustomDynamicTableInstanceViewModel : DataDetailViewModel<CustomDynamicTableInstance>
{
public CustomDynamicTableInstanceViewModel() : base()
{
DeleteCustomDynTableItemCommand = ReactiveCommand.Create<CustomDynamicTableInstanceItem>(DeleteCustomDynTableItem);
AddCustomDynTableItemCommand = ReactiveCommand.Create(AddItemPropertyTableItem);

MoveUpCommand = ReactiveCommand.Create<CustomDynamicTableInstanceItem>(MoveUp);
MoveDownCommand = ReactiveCommand.Create<CustomDynamicTableInstanceItem>(MoveDown);
}

public CustomDynamicTableInstanceViewModel(CustomDynamicTableInstance instance) : base(instance)
{
DeleteCustomDynTableItemCommand = ReactiveCommand.Create<CustomDynamicTableInstanceItem>(DeleteCustomDynTableItem);
AddCustomDynTableItemCommand = ReactiveCommand.Create(AddItemPropertyTableItem);

MoveUpCommand = ReactiveCommand.Create<CustomDynamicTableInstanceItem>(MoveUp);
MoveDownCommand = ReactiveCommand.Create<CustomDynamicTableInstanceItem>(MoveDown);
}

protected override HashSet<String> GetHeaderSourceFields()
{
return new HashSet<String>()
{
"Label"
};
}

protected override string GetHeader()
{
return Data.Label;
}

private void AddItemPropertyTableItem()
{
var newItem = new CustomDynamicTableInstanceItem(Data);
Data.Add(newItem);
NotifyPropertyChanged("Data");
}

private void DeleteCustomDynTableItem(CustomDynamicTableInstanceItem item)
{
this.Data.Remove(item);
NotifyPropertyChanged("Data");
}

private void MoveUp(CustomDynamicTableInstanceItem item)
{
var index = Data.Items.IndexOf(item);
if (index > 0)
Data.Items.Move(index, index - 1);
}

private void MoveDown(CustomDynamicTableInstanceItem item)
{
var index = Data.Items.IndexOf(item);
if (index < Data.Items.Count - 1)
Data.Items.Move(index, index + 1);
}

public ReactiveCommand<CustomDynamicTableInstanceItem, Unit> DeleteCustomDynTableItemCommand { get; private set; }
public ReactiveCommand<Unit, Unit> AddCustomDynTableItemCommand { get; private set; }

public ReactiveCommand<CustomDynamicTableInstanceItem, Unit> MoveUpCommand { get; private set; }
public ReactiveCommand<CustomDynamicTableInstanceItem, Unit> MoveDownCommand { get; private set; }
}
}
Loading

0 comments on commit b2cab54

Please sign in to comment.