BizHawk/BizHawk.Client.Common/movie/tasproj/TasMovieMarker.cs

152 lines
2.9 KiB
C#
Raw Normal View History

using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BizHawk.Client.Common
{
/// <summary>
/// Represents a TasMovie Marker
/// A marker is a tagged frame with a message
/// </summary>
public class TasMovieMarker
{
private int _frame;
public TasMovieMarker(int frame, string message = "")
{
_frame = frame;
Message = message;
}
/// <summary>
/// Parses a Marker from a line of text
/// </summary>
public TasMovieMarker(string line)
{
var split = line.Split('\t');
_frame = int.Parse(split[0]);
Message = split[1];
}
public virtual int Frame
{
get { return _frame; }
}
public virtual string Message { get; set; }
public override string ToString()
{
return Frame.ToString() + '\t' + Message;
}
public override int GetHashCode()
{
return this.Frame.GetHashCode();
}
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
else if (obj is TasMovieMarker)
{
return this.Frame == (obj as TasMovieMarker).Frame;
}
else
{
return false;
}
}
public static bool operator ==(TasMovieMarker marker, int frame)
{
return marker.Frame == frame;
}
public static bool operator !=(TasMovieMarker marker, int frame)
{
return marker.Frame != frame;
}
}
public class TasMovieMarkerList : List<TasMovieMarker>
{
private readonly TasMovie _movie;
public TasMovieMarkerList(TasMovie movie)
{
_movie = movie;
}
public override string ToString()
{
2014-07-16 02:17:19 +00:00
var sb = new StringBuilder();
foreach (var marker in this)
{
sb.AppendLine(marker.ToString());
}
return sb.ToString();
}
public new void Add(TasMovieMarker item)
{
var existingItem = this.FirstOrDefault(m => m.Frame == item.Frame);
if (existingItem != null)
{
existingItem.Message = item.Message;
}
else
{
base.Add(item);
}
}
public void Add(int frame, string message)
{
Add(new TasMovieMarker(frame, message));
}
public void Remove(int frame)
{
var existingItem = this.FirstOrDefault(m => m.Frame == frame);
if (existingItem != null)
{
this.Remove(existingItem);
}
}
2014-07-13 14:13:20 +00:00
public TasMovieMarker Previous(int currentFrame)
2014-07-17 19:00:28 +00:00
{
return this
.Where(m => m.Frame < currentFrame)
.OrderBy(m => m.Frame)
.LastOrDefault();
}
public TasMovieMarker PreviousOrCurrent(int currentFrame)
2014-07-13 14:13:20 +00:00
{
return this
.Where(m => m.Frame <= currentFrame)
2014-07-13 14:13:20 +00:00
.OrderBy(m => m.Frame)
.LastOrDefault();
2014-07-13 14:13:20 +00:00
}
public TasMovieMarker Next(int currentFrame)
{
return this
.Where(m => m.Frame > currentFrame)
.OrderBy(m => m.Frame)
.FirstOrDefault();
2014-07-13 14:13:20 +00:00
}
2014-07-16 00:10:37 +00:00
public bool IsMarker(int frame)
{
return this.Any(m => m == frame);
}
}
}