From 66bb8f719e4a755fe4dcfb44b74bafc916fe7837 Mon Sep 17 00:00:00 2001 From: ocealot Date: Sun, 25 Feb 2024 15:06:28 -0500 Subject: [PATCH] more scd ui tweaks --- .../Formats/ScdFormat/Sound/ScdSoundEntry.cs | 2 +- .../ScdFormat/Sound/SoundRandomTracks.cs | 49 +++++++++---------- .../Formats/ScdFormat/Sound/SoundTracks.cs | 49 ++++++++----------- 3 files changed, 45 insertions(+), 55 deletions(-) diff --git a/VFXEditor/Formats/ScdFormat/Sound/ScdSoundEntry.cs b/VFXEditor/Formats/ScdFormat/Sound/ScdSoundEntry.cs index 4b8eae6a..b9a452f0 100644 --- a/VFXEditor/Formats/ScdFormat/Sound/ScdSoundEntry.cs +++ b/VFXEditor/Formats/ScdFormat/Sound/ScdSoundEntry.cs @@ -106,7 +106,7 @@ public override void Read( BinaryReader reader ) { } public override void Write( BinaryWriter writer ) { - writer.Write( ( byte )( RandomTracksEnabled ? RandomTracks.Tracks.Count : Tracks.Entries.Count ) ); + writer.Write( ( byte )( RandomTracksEnabled ? RandomTracks.Entries.Count : Tracks.Entries.Count ) ); BusNumber.Write( writer ); Priority.Write( writer ); Type.Write( writer ); diff --git a/VFXEditor/Formats/ScdFormat/Sound/SoundRandomTracks.cs b/VFXEditor/Formats/ScdFormat/Sound/SoundRandomTracks.cs index 5ee6d2c6..7047ae33 100644 --- a/VFXEditor/Formats/ScdFormat/Sound/SoundRandomTracks.cs +++ b/VFXEditor/Formats/ScdFormat/Sound/SoundRandomTracks.cs @@ -1,24 +1,35 @@ -using ImGuiNET; using Dalamud.Interface.Utility.Raii; +using ImGuiNET; using System.Collections.Generic; using System.IO; -using VfxEditor.Data.Command.ListCommands; using VfxEditor.Parsing; using VfxEditor.Parsing.Int; -using VfxEditor.Utils; +using VfxEditor.Ui.Components.Tables; +using VfxEditor.Ui.Interfaces; namespace VfxEditor.ScdFormat { public class SoundRandomTracks { - public List Tracks = new(); + public readonly List Entries = new(); + private readonly CommandTable EntryTable; + public readonly ParsedInt CycleInterval = new( "Cycle Interval" ); public readonly ParsedShort CycleNumPlayTrack = new( "Cycle Play Track" ); public readonly ParsedShort CycleRange = new( "Cycle Range" ); + public SoundRandomTracks() { + EntryTable = new( "Entries", true, false, Entries, new() { + ( "Track Index", ImGuiTableColumnFlags.None, -1 ), + ( "Audio Index", ImGuiTableColumnFlags.None, -1 ), + ( "Limit", ImGuiTableColumnFlags.None, -1 ), + }, + () => new() ); + } + public void Read( BinaryReader reader, SoundType type, byte trackCount ) { for( var i = 0; i < trackCount; i++ ) { var newTrack = new RandomTrackInfo(); newTrack.Read( reader ); - Tracks.Add( newTrack ); + Entries.Add( newTrack ); } if( type == SoundType.Cycle ) { @@ -29,7 +40,7 @@ public void Read( BinaryReader reader, SoundType type, byte trackCount ) { } public void Write( BinaryWriter writer, SoundType type ) { - Tracks.ForEach( x => x.Write( writer ) ); + Entries.ForEach( x => x.Write( writer ) ); if( type == SoundType.Cycle ) { CycleInterval.Write( writer ); @@ -49,30 +60,13 @@ public void Draw( SoundType type ) { ImGui.SetCursorPosY( ImGui.GetCursorPosY() + 3 ); - for( var idx = 0; idx < Tracks.Count; idx++ ) { - if( ImGui.CollapsingHeader( $"Track #{idx}", ImGuiTreeNodeFlags.DefaultOpen ) ) { - using var __ = ImRaii.PushId( idx ); - using var indent = ImRaii.PushIndent(); - - if( UiUtils.RemoveButton( "Delete", true ) ) { // REMOVE - CommandManager.Add( new ListRemoveCommand( Tracks, Tracks[idx] ) ); - break; - } - - Tracks[idx].Draw(); - ImGui.SetCursorPosY( ImGui.GetCursorPosY() + 3 ); - } - } - - if( ImGui.Button( "+ New" ) ) { // NEW - CommandManager.Add( new ListAddCommand( Tracks, new RandomTrackInfo() ) ); - } + EntryTable.Draw(); } } - public class RandomTrackInfo { + public class RandomTrackInfo : IUiItem { public readonly SoundTrackInfo Track = new(); - public readonly ParsedShort2 Limit = new( "Limit" ); + public readonly ParsedShort2 Limit = new( "##Limit" ); public void Read( BinaryReader reader ) { Track.Read( reader ); @@ -86,6 +80,9 @@ public void Write( BinaryWriter writer ) { public void Draw() { Track.Draw(); + + ImGui.TableNextColumn(); + ImGui.SetNextItemWidth( 150 ); Limit.Draw(); } } diff --git a/VFXEditor/Formats/ScdFormat/Sound/SoundTracks.cs b/VFXEditor/Formats/ScdFormat/Sound/SoundTracks.cs index 1f837f86..e7f1f0e1 100644 --- a/VFXEditor/Formats/ScdFormat/Sound/SoundTracks.cs +++ b/VFXEditor/Formats/ScdFormat/Sound/SoundTracks.cs @@ -1,14 +1,22 @@ -using Dalamud.Interface.Utility.Raii; using ImGuiNET; using System.Collections.Generic; using System.IO; -using VfxEditor.Data.Command.ListCommands; using VfxEditor.Parsing; -using VfxEditor.Utils; +using VfxEditor.Ui.Components.Tables; +using VfxEditor.Ui.Interfaces; namespace VfxEditor.ScdFormat { public class SoundTracks { - public List Entries = new(); + public readonly List Entries = new(); + private readonly CommandTable EntryTable; + + public SoundTracks() { + EntryTable = new( "Entries", true, false, Entries, new() { + ( "Track Index", ImGuiTableColumnFlags.None, -1 ), + ( "Audio Index", ImGuiTableColumnFlags.None, -1 ), + }, + () => new() ); + } public void Read( BinaryReader reader, byte entryCount ) { for( var i = 0; i < entryCount; i++ ) { @@ -23,33 +31,13 @@ public void Write( BinaryWriter writer ) { } public void Draw() { - using var _ = ImRaii.PushId( "Entries" ); - - ImGui.SetCursorPosY( ImGui.GetCursorPosY() + 3 ); - - for( var idx = 0; idx < Entries.Count; idx++ ) { - if( ImGui.CollapsingHeader( $"Entry #{idx}", ImGuiTreeNodeFlags.DefaultOpen ) ) { - using var __ = ImRaii.PushId( idx ); - using var indent = ImRaii.PushIndent(); - - if( UiUtils.RemoveButton( "Delete", true ) ) { // REMOVE - CommandManager.Add( new ListRemoveCommand( Entries, Entries[idx] ) ); - } - - Entries[idx].Draw(); - ImGui.SetCursorPosY( ImGui.GetCursorPosY() + 3 ); - } - } - - if( ImGui.Button( "+ New" ) ) { // NEW - CommandManager.Add( new ListAddCommand( Entries, new SoundTrackInfo() ) ); - } + EntryTable.Draw(); } } - public class SoundTrackInfo { - public readonly ParsedShort TrackIdx = new( "Track Index" ); - public readonly ParsedShort AudioIdx = new( "Audio Index" ); + public class SoundTrackInfo : IUiItem { + public readonly ParsedShort TrackIdx = new( "##Track" ); + public readonly ParsedShort AudioIdx = new( "##Audio" ); public void Read( BinaryReader reader ) { TrackIdx.Read( reader ); @@ -62,7 +50,12 @@ public void Write( BinaryWriter writer ) { } public void Draw() { + ImGui.TableNextColumn(); + ImGui.SetNextItemWidth( 100 ); TrackIdx.Draw(); + + ImGui.TableNextColumn(); + ImGui.SetNextItemWidth( 100 ); AudioIdx.Draw(); } }