WIP: track creation and deletion both in frontend and backend.

This commit is contained in:
2025-07-28 01:03:40 +02:00
parent ecadfb7033
commit cb38a509b5
15 changed files with 192 additions and 49 deletions

9
Source/Clip.cs Normal file
View File

@@ -0,0 +1,9 @@
using System;
namespace AudioEditor;
public class Clip
{
public TimeSpan StartTime { get; private set; }
public TimeSpan EndTime { get; private set; }
}

1
Source/Clip.cs.uid Normal file
View File

@@ -0,0 +1 @@
uid://b20juoqt3ac8x

46
Source/Project.cs Normal file
View File

@@ -0,0 +1,46 @@
using System.Collections.Generic;
namespace AudioEditor;
public class Project
{
public int TrackCount => _tracks.Count;
public void AddTrack()
{
var idx = _tracks.Count;
_tracks.Add(new Track(idx, string.Empty));
}
public void DuplicateTrack(int idx)
{
if (idx < 0 && idx > _tracks.Count - 1)
{
return;
}
var track = _tracks[idx];
var duplicate = track.Duplicate();
_tracks.Add(duplicate);
}
public void RenameTrack(int idx, string name)
{
if (idx < 0 && idx > _tracks.Count - 1)
{
return;
}
}
public void DeleteTrack(int idx)
{
if (idx < 0 && idx > _tracks.Count - 1)
{
return;
}
_tracks.RemoveAt(idx);
}
private List<Track> _tracks = new();
}

1
Source/Project.cs.uid Normal file
View File

@@ -0,0 +1 @@
uid://bvgn3tf07jspe

View File

@@ -7,6 +7,9 @@ namespace AudioEditor;
public partial class ProjectController : Node
{
[Signal] public delegate void AudioClipDroppedEventHandler(Vector2 atPosition, string path, string clipName, double startTime, double endTime);
[Signal] public delegate void OnTrackAddedEventHandler(int idx);
[Signal] public delegate void OnTrackRenamedEventHandler(int idx, string name);
[Signal] public delegate void OnTrackDuplicatedEventHandler(int idx);
[Signal] public delegate void OnTrackDeletedEventHandler(int trackIdx);
public override void _Ready()
@@ -14,9 +17,28 @@ public partial class ProjectController : Node
GetWindow().FilesDropped += FilesDropped;
}
public void DeleteTrack(int trackIdx)
public void AddTrack(int idx = 0)
{
_project.AddTrack();
EmitSignal(SignalName.OnTrackAdded, _project.TrackCount - 1);
}
public void DuplicateTrack(int idx)
{
_project.DuplicateTrack(idx);
EmitSignal(SignalName.OnTrackDuplicated, idx);
}
public void RenameTrack(int idx, string name)
{
_project.RenameTrack(idx, name);
EmitSignal(SignalName.OnTrackRenamed, idx, name);
}
public void DeleteTrack(int idx)
{
_project.DeleteTrack(idx);
EmitSignal(SignalName.OnTrackDeleted, idx);
}
public void CreateAudioClipPreview(Control audioClip)
@@ -54,4 +76,6 @@ public partial class ProjectController : Node
EmitSignal(SignalName.AudioClipDropped, mousePosition, path, fileName, 0, waveformInfo.Length.TotalMilliseconds);
}
private Project _project = new();
}

33
Source/Track.cs Normal file
View File

@@ -0,0 +1,33 @@
using System.Collections.Generic;
using System.Linq;
namespace AudioEditor;
public class Track
{
public int Idx { get; private set; }
public string Name { get; private set; }
public Track(int idx, string name)
{
Idx = idx;
Name = name;
}
public Track(int idx, string name, IEnumerable<Clip> clips)
{
Idx = idx;
Name = name;
_clips = clips.ToList();
}
public bool TryAddClip(Clip clip)
{
_clips.Add(clip);
return false;
}
public Track Duplicate() => new(Idx, Name, _clips);
private List<Clip> _clips = new();
}

1
Source/Track.cs.uid Normal file
View File

@@ -0,0 +1 @@
uid://dtk58stvxxdyl