Skip to content

Commit

Permalink
feat: [CastViewer] Add special symbols table
Browse files Browse the repository at this point in the history
  • Loading branch information
InuInu2022 committed Jul 2, 2024
1 parent c48de95 commit 8e18441
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 0 deletions.
35 changes: 35 additions & 0 deletions viewer/CastViewer/CastViewer.Core/Model/SpSymbolTableColumn.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using CevioCasts;

namespace CastViewer.Core.Model;

public record SpSymbolTableColumn
(
Category Cat,
string CastName,
Product Product,
IEnumerable<DisplaySpSymbol> SpSymbols
)
{
public string Category { get; } = Cat switch
{
CevioCasts.Category.SingerSong => "Song",
CevioCasts.Category.TextVocal => "Talk",
_ => "ERROR"
};
public string? LabelFalsetto { get; } = GetName(SpSymbols, ["$", "$", "※"]);
public string? LabelAtmark { get; } = GetName(SpSymbols, ["@", "@"]);
public string? LabelCaret { get; } = GetName(SpSymbols, ["^", "^"]);
public string? LabelPercent { get; } = GetName(SpSymbols, ["%", "%"]);
public string? LabelEqual { get; } = GetName(SpSymbols, ["=", "="]);
public string? LabelUnderscore { get; } = GetName(SpSymbols, ["_","_"]);

private static string GetName(IEnumerable<DisplaySpSymbol> spSymbols, IReadOnlyList<string> labels)
{
var symbol = spSymbols
.FirstOrDefault(s => s.Symbols?.Any(v => labels.Contains(v)) == true);
var label = symbol?.Names?[0]
?? string.Empty;
var version = symbol?.Versions?.Count == 1 ? symbol?.Versions?.LastOrDefault() ?? string.Empty : string.Empty;
return (version is []) ? label : $"{label} ({version})";
}
}
30 changes: 30 additions & 0 deletions viewer/CastViewer/CastViewer/ViewModels/MainViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ public class MainViewModel : ViewModelBase
// ------------- table tab --------------- //
public TabItem? SelectedTableTab { get; set; }
public ObservableCollection<EmotionTableColumn>? EmotionTableCastList { get; set; } = [];
public ObservableCollection<SpSymbolTableColumn>? SpSymbolTableCastList { get; private set; } = [];

public MainViewModel()
{
Expand Down Expand Up @@ -566,6 +567,29 @@ private ValueTask ShowEmotionTableAsync(DataGrid grid)
return default;
}

private ValueTask ShowSpSymbolTableAsync(DataGrid grid)
{
var casts = CastList
.Where(c => c.SpSymbols?.Count != 0)
.ToList()
.Select(c => new SpSymbolTableColumn(
Cat: c.Category,
CastName: c.Names?[0] ?? "NO NAME",
Product: c.Product,
SpSymbols: [.. c.SpSymbols]
))
;
SpSymbolTableCastList = [.. casts];
grid.ItemsSource = new DataGridCollectionView(SpSymbolTableCastList)
{
GroupDescriptions =
{
new DataGridPathGroupDescription("Product")
}
};
return default;
}

[PropertyChanged(nameof(SelectedPlotTab))]
[SuppressMessage("","IDE0051")]
private async ValueTask SelectedPlotTabChangedAsync(TabItem value)
Expand Down Expand Up @@ -616,6 +640,12 @@ private async ValueTask SelectedTableTabChangedAsync(TabItem value)
break;
}

case "SpSymbolTab":
{
await ShowSpSymbolTableAsync(grid);
break;
}

default:
break;
}
Expand Down
28 changes: 28 additions & 0 deletions viewer/CastViewer/CastViewer/Views/MainView.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,34 @@
</DataGrid.Columns>
</DataGrid>
</TabItem>
<TabItem
Header="Special symbols"
Name="SpSymbolTab"
FontSize="16"
>
<DataGrid
x:DataType="cvm:SpSymbolTableColumn"
Margin="20"
AutoGenerateColumns="False"
IsReadOnly="True"
CanUserReorderColumns="True"
CanUserResizeColumns="True"
GridLinesVisibility="All"
FrozenColumnCount="3"
BorderThickness="1" BorderBrush="Gray">
<DataGrid.Columns>
<DataGridTextColumn Header="Type" Binding="{Binding Category}"/>
<DataGridTextColumn Header="Name" Binding="{Binding CastName}"/>
<DataGridTextColumn Header="Product" Binding="{Binding Product}" />
<DataGridTextColumn Header="※ $ $" Binding="{Binding LabelFalsetto}" />
<DataGridTextColumn Header="@ @" Binding="{Binding LabelAtmark}" />
<DataGridTextColumn Header="^ ^" Binding="{Binding LabelCaret}" />
<DataGridTextColumn Header="% %" Binding="{Binding LabelPercent}" />
<DataGridTextColumn Header="= =" Binding="{Binding LabelEqual}" />
<DataGridTextColumn Header="_ _" Binding="{Binding LabelUnderscore}" />
</DataGrid.Columns>
</DataGrid>
</TabItem>
</TabControl>
</TabItem>
</TabControl>
Expand Down

0 comments on commit 8e18441

Please sign in to comment.