lipsync/trunk/LipSync/Editor/Command.cs

317 lines
11 KiB
C#

/*
* Command.cs
* Copyright (c) 2007-2009 kbinani
*
* This file is part of LipSync.
*
* LipSync is free software; you can redistribute it and/or
* modify it under the terms of the BSD License.
*
* LipSync is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
using System;
using System.Drawing;
namespace LipSync {
public class Command {
public TimeTableType target;
public CommandType type;
public TimeTableEntry item;
public TimeTable table;
public TimeTableGroup tablegroup;
public Image image;
public Point position;
public int group;
public int track;
public int entry;
public string str;
public float floatValue;
public Size size;
public Telop telop;
public uint dwRate;
public uint dwScale;
public Color color;
public Command child;
public object[] args;
public static Command GCommandChangeBackgroundColor( Color color ){
Command ret = new Command();
ret.target = TimeTableType.whole;
ret.type = CommandType.changeBackgroundColor;
ret.color = color;
return ret;
}
public static Command GCommandAddTelop( Telop telop ) {
Command ret = new Command();
ret.target = TimeTableType.telop;
ret.type = CommandType.addTelop;
if ( telop != null ) {
ret.telop = (Telop)telop.Clone();
}
return ret;
}
public static Command GCommandAddTelopRange( Telop[] telops ) {
Command ret = new Command();
ret.target = TimeTableType.telop;
ret.type = CommandType.addTelopRange;
ret.args = new object[1];
Telop[] add = new Telop[telops.Length];
for ( int i = 0; i < add.Length; i++ ) {
add[i] = (Telop)telops[i].Clone();
}
ret.args[0] = add;
return ret;
}
public static Command GCommandEditTelop( int id, Telop telop ) {
Command ret = new Command();
ret.target = TimeTableType.telop;
ret.type = CommandType.editTelop;
ret.entry = id;
if ( telop != null ) {
ret.telop = (Telop)telop.Clone();
}
return ret;
}
public static Command GCommandDeleteTelop( Telop item ) {
Command ret = new Command();
ret.target = TimeTableType.telop;
ret.type = CommandType.deleteTelop;
ret.telop = (Telop)item.Clone();
return ret;
}
public static Command GCommandDeleteTelopRange( Telop[] items ) {
Command ret = new Command();
ret.target = TimeTableType.telop;
ret.type = CommandType.deleteTelopRange;
ret.args = new object[1];
Telop[] items2 = new Telop[items.Length];
for ( int i = 0; i < items2.Length; i++ ) {
items2[i] = (Telop)items[i].Clone();
}
ret.args[0] = items2;
return ret;
}
public static Command GCommandDeleteTimeTableGroup( TimeTableType target, int group ) {
Command ret = new Command();
ret.target = target;
ret.type = CommandType.deleteGroup;
ret.group = group;
return ret;
}
public static Command GCommandDeleteTimeTable( TimeTableType target, int group, int track ) {
Command ret = new Command();
ret.target = target;
ret.type = CommandType.deleteTimeTable;
ret.group = group;
ret.track = track;
return ret;
}
public static Command GCommandSetMp3( string file_name ){
Command ret = new Command();
ret.target = TimeTableType.whole;
ret.type = CommandType.setMP3;
ret.str = file_name;
return ret;
}
public static Command GCommandChangeVideoSize( Size size ){
Command ret = new Command();
ret.target = TimeTableType.whole;
ret.type = CommandType.changeVideoSize;
ret.size = size;
return ret;
}
public static Command GCommandShiftTimeTable( TimeTableType target, int track, float floatValue ){
Command ret = new Command();
ret.target = target;
if ( target == TimeTableType.character ) {
ret.group = track;
} else {
ret.track = track;
}
ret.type = CommandType.shiftTimeTable;
ret.floatValue = floatValue;
return ret;
}
public static Command GCommandChangeFps( uint rate, uint scale ){
Command ret = new Command();
ret.target = TimeTableType.whole;
ret.type = CommandType.changeFps;
ret.dwRate = rate;
ret.dwScale = scale;
return ret;
}
public static Command GCommandChangeScale( TimeTableType target, int group, int track, float scale ){
Command ret = new Command();
ret.target = target;
ret.type = CommandType.changeScale;
ret.group = group;
ret.track = track;
ret.floatValue = scale;
return ret;
}
public static Command GCommandChangePluginConfig( int track, string config ) {
Command ret = new Command();
ret.target = TimeTableType.whole;
ret.type = CommandType.changePluginConfig;
ret.track = track;
ret.str = config;
return ret;
}
public static Command GCommandSetAvi( int track, string file_name ){
Command ret = new Command();
ret.target = TimeTableType.another;
ret.type = CommandType.setAvi;
ret.track = track;
ret.str = file_name;
return ret;
}
public static Command GCommandEditTimeTableEntry( TimeTableType target, int group, int track, int entry, TimeTableEntry item ) {
Command ret = new Command();
ret.target = target;
ret.type = CommandType.editEntry;
ret.group = group;
ret.track = track;
ret.entry = entry;
if ( item != null ) {
ret.item = (TimeTableEntry)item.Clone();
}
return ret;
}
public static Command GCommandAddTimeTableEntry( TimeTableType target, int group, int track, TimeTableEntry item ) {
Command ret = new Command();
ret.target = target;
ret.type = CommandType.addEntry;
ret.group = group;
ret.track = track;
if ( item != null ) {
ret.item = (TimeTableEntry)item.Clone();
}
return ret;
}
public static Command GCommandDeleteTimeTableEntry( TimeTableType target, int group, int track, TimeTableEntry item ) {
Command ret = new Command();
ret.target = target;
ret.type = CommandType.deleteEntry;
ret.group = group;
ret.track = track;
if ( item != null ) {
ret.item = (TimeTableEntry)item.Clone();
}
return ret;
}
public static Command GCommandEditTimeTable( TimeTableType target, int group, int track, TimeTable table ) {
Command ret = new Command();
ret.target = target;
ret.type = CommandType.editTimeTable;
ret.group = group;
ret.track = track;
if ( table != null ) {
ret.table = (TimeTable)table.Clone();
}
return ret;
}
public static Command GCommandAddTimeTable( TimeTableType target, int group, int track, TimeTable table ){
Command ret = new Command();
ret.target = target;
ret.type = CommandType.addTimeTable;
ret.group = group;
ret.track = track;
if ( table != null ) {
ret.table = (TimeTable)table.Clone();
}
return ret;
}
public static Command GCommandEditGroup( TimeTableType target, int group, TimeTableGroup table_group ) {
Command ret = new Command();
ret.target = target;
ret.type = CommandType.editGroup;
ret.group = group;
ret.tablegroup = (TimeTableGroup)table_group.Clone();
return ret;
}
public static Command GCommandAddGroup( TimeTableType target, int group, TimeTableGroup tablegroup ){
Command ret = new Command();
ret.target = target;
ret.type = CommandType.addGroup;
ret.group = group;
if ( tablegroup != null ) {
ret.tablegroup = (TimeTableGroup)tablegroup.Clone();
} else {
ret.tablegroup = null;
}
return ret;
}
public static Command GCommandSetImage( int track, Image img ){
Command ret = new Command();
ret.target = TimeTableType.another;
ret.type = CommandType.setImage;
ret.track = track;
if ( img != null ) {
ret.image = (Image)img.Clone();
} else {
ret.image = null;
}
return ret;
}
public static Command GCommandSetPosition( TimeTableType target, int group, int track, Point position ){
Command ret = new Command();
ret.target = target;
ret.type = CommandType.setPosition;
ret.group = group;
ret.track = track;
ret.position = position;
return ret;
}
public static Command GCommandNothing() {
Command ret = new Command();
ret.target = TimeTableType.none;
return ret;
}
private Command() {
}
public override string ToString() {
string res = "";
res += target.ToString();
res += "," + type.ToString();
res += ",group=" + group + ",track=" + track + ";entry=" + entry;
if ( item == null ) {
res += ";item=null";
} else {
res += ";item={begin=" + item.begin + ",end=" + item.end + ",body=" + item.body;
}
return res;
}
}
}