-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add tutorial mapping editing on Avalonia branch (#451)
- Loading branch information
Showing
4 changed files
with
136 additions
and
0 deletions.
There are no files selected for viewing
60 changes: 60 additions & 0 deletions
60
src/SerialLoops/ViewModels/Dialogs/EditTutorialMappingsDialogViewModel.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
using System.Collections.ObjectModel; | ||
using System.IO; | ||
using System.Linq; | ||
using System.Windows.Input; | ||
using HaruhiChokuretsuLib.Archive.Event; | ||
using HaruhiChokuretsuLib.Util; | ||
using ReactiveUI; | ||
using ReactiveUI.Fody.Helpers; | ||
using SerialLoops.Lib; | ||
using SerialLoops.Lib.Items; | ||
using SerialLoops.ViewModels.Panels; | ||
using SerialLoops.Views.Dialogs; | ||
using IO = SerialLoops.Lib.IO; | ||
|
||
namespace SerialLoops.ViewModels.Dialogs; | ||
|
||
public class EditTutorialMappingsDialogViewModel : ViewModelBase | ||
{ | ||
public ObservableCollection<TutorialMapping> Tutorials { get; } | ||
|
||
public ICommand SaveCommand { get; } | ||
public ICommand CancelCommand { get; } | ||
|
||
public EditTutorialMappingsDialogViewModel(Project project, EditorTabsPanelViewModel tabs, ILogger log) | ||
{ | ||
Tutorials = new(project.TutorialFile.Tutorials.Where(t => t.AssociatedScript > 0) | ||
.Select(t => new TutorialMapping(t, project, tabs))); | ||
|
||
SaveCommand = ReactiveCommand.Create<EditTutorialMappingsDialog>(dialog => | ||
{ | ||
foreach (TutorialMapping tutorial in Tutorials) | ||
{ | ||
project.TutorialFile.Tutorials.First(t => t.Id == tutorial.Flag) | ||
.AssociatedScript = (short)tutorial.Script.Event.Index; | ||
} | ||
IO.WriteStringFile(Path.Combine("assets", "events", $"{project.TutorialFile.Index:X3}.s"), | ||
project.TutorialFile.GetSource([]), project, log); | ||
dialog.Close(); | ||
}); | ||
CancelCommand = ReactiveCommand.Create<EditTutorialMappingsDialog>(dialog => dialog.Close()); | ||
} | ||
} | ||
|
||
public class TutorialMapping(Tutorial tutorial, Project project, EditorTabsPanelViewModel tabs) : ReactiveObject | ||
{ | ||
public EditorTabsPanelViewModel Tabs { get; } = tabs; | ||
|
||
public ObservableCollection<ScriptItem> Scripts { get; } = new(project.Items | ||
.Where(i => i.Type == ItemDescription.ItemType.Script) | ||
.Cast<ScriptItem>()); | ||
|
||
[Reactive] | ||
public int Flag { get; set; } = tutorial.Id; | ||
|
||
public string TutorialName => $"Tutorial {Flag}"; | ||
|
||
[Reactive] | ||
public ScriptItem Script { get; set; } = (ScriptItem)project.Items.First(i => | ||
i.Type == ItemDescription.ItemType.Script && ((ScriptItem)i).Event.Index == tutorial.AssociatedScript); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
56 changes: 56 additions & 0 deletions
56
src/SerialLoops/Views/Dialogs/EditTutorialMappingsDialog.axaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
<Window xmlns="https://github.com/avaloniaui" | ||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | ||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | ||
xmlns:vm="using:SerialLoops.ViewModels.Dialogs" | ||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | ||
xmlns:assets="using:SerialLoops.Assets" | ||
xmlns:controls="using:SerialLoops.Controls" | ||
xmlns:gbox="using:GroupBox.Avalonia.Controls" | ||
xmlns:li="using:SerialLoops.Lib.Items" | ||
MinWidth="400" MinHeight="600" | ||
Width="400" Height="600" | ||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" | ||
x:DataType="vm:EditTutorialMappingsDialogViewModel" | ||
x:Class="SerialLoops.Views.Dialogs.EditTutorialMappingsDialog" | ||
Title="{x:Static assets:Strings.Edit_Tutorial_Mappings}" | ||
Name="Dialog"> | ||
<Grid RowDefinitions="*,Auto"> | ||
<ScrollViewer Grid.Row="0"> | ||
<ItemsRepeater ItemsSource="{Binding Tutorials}"> | ||
<ItemsRepeater.Layout> | ||
<StackLayout Orientation="Vertical" Spacing="15"/> | ||
</ItemsRepeater.Layout> | ||
<ItemsRepeater.ItemTemplate> | ||
<DataTemplate DataType="vm:TutorialMapping"> | ||
<gbox:GroupBox Header="{Binding TutorialName}" Theme="{StaticResource GroupBoxClassic}"> | ||
<StackPanel Orientation="Horizontal" Margin="10" Spacing="5"> | ||
<TextBlock Text="{x:Static assets:Strings.Associated_Script}"/> | ||
<ComboBox ItemsSource="{Binding Scripts}" SelectedItem="{Binding Script}"> | ||
<ComboBox.ItemTemplate> | ||
<DataTemplate DataType="li:ScriptItem"> | ||
<TextBlock Text="{Binding DisplayName}"/> | ||
</DataTemplate> | ||
</ComboBox.ItemTemplate> | ||
<ComboBox.ItemContainerTheme> | ||
<ControlTheme TargetType="ComboBoxItem" x:DataType="li:ScriptItem" BasedOn="{StaticResource {x:Type ComboBoxItem}}"> | ||
<Setter Property="TextSearch.Text" Value="{Binding DisplayName}" /> | ||
</ControlTheme> | ||
</ComboBox.ItemContainerTheme> | ||
</ComboBox> | ||
<controls:ItemLink Item="{Binding Script}" Tabs="{Binding Tabs}"/> | ||
</StackPanel> | ||
</gbox:GroupBox> | ||
</DataTemplate> | ||
</ItemsRepeater.ItemTemplate> | ||
</ItemsRepeater> | ||
</ScrollViewer> | ||
|
||
<StackPanel Grid.Row="1" Orientation="Horizontal" Spacing="3"> | ||
<Button Content="{x:Static assets:Strings.Save}" Command="{Binding SaveCommand}" | ||
CommandParameter="{Binding #Dialog}" HorizontalAlignment="Right"/> | ||
<Button Content="{x:Static assets:Strings.Cancel}" Command="{Binding CancelCommand}" | ||
CommandParameter="{Binding #Dialog}" HorizontalAlignment="Right"/> | ||
</StackPanel> | ||
</Grid> | ||
</Window> | ||
|
12 changes: 12 additions & 0 deletions
12
src/SerialLoops/Views/Dialogs/EditTutorialMappingsDialog.axaml.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
using Avalonia.Controls; | ||
|
||
namespace SerialLoops.Views.Dialogs; | ||
|
||
public partial class EditTutorialMappingsDialog : Window | ||
{ | ||
public EditTutorialMappingsDialog() | ||
{ | ||
InitializeComponent(); | ||
} | ||
} | ||
|