lipsync/trunk/LipSync/Editor/PositionConverter.cs

68 lines
2.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* PositionConverter.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.ComponentModel;
namespace LipSync {
public class PositionConverter : ExpandableObjectConverter {
//コンバータがオブジェクトを指定した型に変換できるか
//変換できる時はTrueを返す
//ここでは、CustomClass型のオブジェクトには変換可能とする
public override bool CanConvertTo( ITypeDescriptorContext context, Type destinationType ) {
if ( destinationType == typeof( Position ) ) {
return true;
}
return base.CanConvertTo( context, destinationType );
}
//指定した値オブジェクトを、指定した型に変換する
//CustomClass型のオブジェクトをString型に変換する方法を提供する
public override object ConvertTo( ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType ) {
if ( destinationType == typeof( string ) && value is Position ) {
Position cc = (Position)value;
return cc.X + ", " + cc.Y;
}
return base.ConvertTo( context, culture, value, destinationType );
}
//コンバータが特定の型のオブジェクトをコンバータの型に変換できるか
//変換できる時はTrueを返す
//ここでは、String型のオブジェクトなら変換可能とする
public override bool CanConvertFrom( ITypeDescriptorContext context, Type sourceType ) {
if ( sourceType == typeof( string ) ) {
return true;
}
return base.CanConvertFrom( context, sourceType );
}
//指定した値をコンバータの型に変換する
//String型のオブジェクトをCustomClass型に変換する方法を提供する
public override object ConvertFrom( ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value ) {
if ( value is string ) {
string[] ss = value.ToString().Split( new char[] { ',' }, 2 );
Position cc = new Position( 0f, 0f );
try {
cc.X = float.Parse( ss[0] );
cc.Y = float.Parse( ss[1] );
} catch {
}
return cc;
}
return base.ConvertFrom( context, culture, value );
}
}
}