X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fvalue.cpp;h=d80fbf9df502133d9f442c7aa0b2085960264119;hb=756c0d29ac1742f231e6615f9a577e574e35a4af;hp=b942308ea3dcc97ba4fe6b0dea1cf5815243958a;hpb=e3acc0b267b14fda5db3c7bbb2f218b993ef84b3;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/value.cpp b/synfig-core/trunk/src/synfig/value.cpp index b942308..d80fbf9 100644 --- a/synfig-core/trunk/src/synfig/value.cpp +++ b/synfig-core/trunk/src/synfig/value.cpp @@ -1,20 +1,22 @@ -/* === S I N F G =========================================================== */ +/* === S Y N F I G ========================================================= */ /*! \file value.cpp ** \brief Template Header ** -** $Id: value.cpp,v 1.1.1.1 2005/01/04 01:23:15 darco Exp $ +** $Id$ ** ** \legal -** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007, 2008 Chris Moore ** -** This software and associated documentation -** are CONFIDENTIAL and PROPRIETARY property of -** the above-mentioned copyright holder. +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. ** -** You may not copy, print, publish, or in any -** other way distribute this software without -** a prior written agreement with -** the copyright holder. +** This package 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. See the GNU +** General Public License for more details. ** \endlegal */ /* ========================================================================= */ @@ -43,7 +45,7 @@ #endif -using namespace sinfg; +using namespace synfig; using namespace std; using namespace etl; @@ -64,50 +66,22 @@ ValueBase::ValueBase(Type x): data(0), loop_(0) { - switch(type) { - case TYPE_BOOL: - static_cast(data)=new bool(); - break; - case TYPE_INTEGER: - static_cast(data)=new int(); - break; - case TYPE_ANGLE: - static_cast(data)=new Angle(); - break; - case TYPE_VECTOR: - static_cast(data)=new Vector(); - break; - case TYPE_TIME: - static_cast(data)=new Time(); - break; - case TYPE_REAL: - static_cast(data)=new Real(); - break; - case TYPE_COLOR: - static_cast(data)=new Color(); - break; - case TYPE_SEGMENT: - static_cast(data)=new Segment(); - break; - case TYPE_BLINEPOINT: - static_cast(data)=new BLinePoint(); - break; - case TYPE_LIST: - static_cast(data)=new list_type(); - break; - case TYPE_STRING: - static_cast(data)=new String(); - break; - case TYPE_GRADIENT: - static_cast(data)=new Gradient(); - break; - case TYPE_CANVAS: - static_cast*>(data)=new etl::handle(); - break; - default: - break; + case TYPE_BOOL: data=static_cast(new bool()); break; + case TYPE_INTEGER: data=static_cast(new int()); break; + case TYPE_ANGLE: data=static_cast(new Angle()); break; + case TYPE_VECTOR: data=static_cast(new Vector()); break; + case TYPE_TIME: data=static_cast(new Time()); break; + case TYPE_REAL: data=static_cast(new Real()); break; + case TYPE_COLOR: data=static_cast(new Color()); break; + case TYPE_SEGMENT: data=static_cast(new Segment()); break; + case TYPE_BLINEPOINT: data=static_cast(new BLinePoint()); break; + case TYPE_LIST: data=static_cast(new list_type()); break; + case TYPE_STRING: data=static_cast(new String()); break; + case TYPE_GRADIENT: data=static_cast(new Gradient()); break; + case TYPE_CANVAS: data=static_cast(new etl::handle()); break; + default: break; } } @@ -122,9 +96,6 @@ ValueBase::get(const char*)const return get(String()).c_str(); } - - - void ValueBase::set(Canvas* x) { @@ -145,13 +116,9 @@ ValueBase::set(etl::loose_handle x) { clear(); if(x && x->is_inline()) - { _set(etl::handle(x)); - } else - { _set(etl::loose_handle(x)); - } assert(get(x)==x); } @@ -160,13 +127,9 @@ ValueBase::set(etl::handle x) { clear(); if(x && x->is_inline()) - { _set(etl::handle(x)); - } else - { _set(etl::loose_handle(x)); - } assert(get(x)==x); } @@ -182,6 +145,12 @@ ValueBase::set(const char* x) _set(String(x)); } +void +ValueBase::set(char* x) +{ + _set(String(x)); +} + bool ValueBase::is_valid()const { @@ -223,62 +192,32 @@ ValueBase::clear() { switch(type) { - case TYPE_BOOL: - delete static_cast(data); - break; - case TYPE_INTEGER: - delete static_cast(data); - break; - case TYPE_ANGLE: - delete static_cast(data); - break; - case TYPE_VECTOR: - delete static_cast(data); - break; - case TYPE_TIME: - delete static_cast(data); - break; - case TYPE_REAL: - delete static_cast(data); - break; - case TYPE_COLOR: - delete static_cast(data); - break; - case TYPE_SEGMENT: - delete static_cast(data); - break; - case TYPE_BLINEPOINT: - delete static_cast(data); - break; - case TYPE_LIST: - delete static_cast(data); - break; - case TYPE_STRING: - delete static_cast(data); - break; - case TYPE_GRADIENT: - delete static_cast(data); - break; - - + case TYPE_BOOL: delete static_cast(data); break; + case TYPE_INTEGER: delete static_cast(data); break; + case TYPE_ANGLE: delete static_cast(data); break; + case TYPE_TIME: delete static_cast(data); break; + case TYPE_REAL: delete static_cast(data); break; + case TYPE_VECTOR: delete static_cast(data); break; + case TYPE_COLOR: delete static_cast(data); break; + case TYPE_SEGMENT: delete static_cast(data); break; + case TYPE_BLINEPOINT: delete static_cast(data); break; + case TYPE_LIST: delete static_cast(data); break; case TYPE_CANVAS: { etl::handle canvas(get(etl::loose_handle())); if(canvas && canvas->is_inline()) - { delete static_cast*>(data); - } else - { delete static_cast*>(data); - } break; } + case TYPE_STRING: delete static_cast(data); break; + case TYPE_GRADIENT: delete static_cast(data); break; default: break; } } - + ref_count.detach(); data=0; type=TYPE_NIL; @@ -288,75 +227,80 @@ ValueBase::clear() String ValueBase::type_name(Type id) { + // don't internationalize these type names - they're using in .sif files switch(id) { - case TYPE_REAL: - return "real"; - case TYPE_TIME: - return "time"; - case TYPE_INTEGER: - return "integer"; - case TYPE_BOOL: - return "bool"; - case TYPE_ANGLE: - return "angle"; - case TYPE_VECTOR: - return "vector"; - case TYPE_COLOR: - return "color"; - case TYPE_STRING: - return "string"; - case TYPE_CANVAS: - return "canvas"; - case TYPE_LIST: - return "list"; - case TYPE_SEGMENT: - return "segment"; - case TYPE_GRADIENT: - return "gradient"; - case TYPE_BLINEPOINT: - return "bline_point"; - case TYPE_NIL: - return "nil"; + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_BOOL: return N_("bool"); + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_INTEGER: return N_("integer"); + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_ANGLE: return N_("angle"); + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_TIME: return N_("time"); + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_REAL: return N_("real"); + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_VECTOR: return N_("vector"); + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_COLOR: return N_("color"); + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_SEGMENT: return N_("segment"); + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_BLINEPOINT: return N_("bline_point"); + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_LIST: return N_("list"); + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_CANVAS: return N_("canvas"); + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_STRING: return N_("string"); + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_GRADIENT: return N_("gradient"); + /* TRANSLATORS: this is the name of a type -- see http://synfig.org/Types */ + case TYPE_NIL: return N_("nil"); default: break; } - sinfg::warning("Encountered unknown ValueBase with an Type of %d",id); + synfig::warning("Encountered unknown ValueBase with an Type of %d",id); // assert(0); return "UNKNOWN"; } +String +ValueBase::type_local_name(Type id) +{ + return dgettext("synfig",type_name(id).c_str()); +} + ValueBase::Type ValueBase::ident_type(const String &str) { - if(str=="nil" || str=="null") - return TYPE_NIL; - else if(str=="time" || str==_("time")) - return TYPE_TIME; - else if(str=="real" || str=="float" || str==_("real")) - return TYPE_REAL; - else if(str=="integer" || str=="int" || str==_("integer")) - return TYPE_INTEGER; - else if(str=="bool" || str==_("bool")) - return TYPE_BOOL; - else if(str=="angle" || str=="degrees" || str=="radians" || str=="rotations") - return TYPE_ANGLE; - else if(str=="vector" || str=="point") - return TYPE_VECTOR; - else if(str=="color") - return TYPE_COLOR; - else if(str=="string") - return TYPE_STRING; - else if(str=="canvas") - return TYPE_CANVAS; - else if(str=="list") - return TYPE_LIST; - else if(str=="segment") - return TYPE_SEGMENT; - else if(str=="gradient") - return TYPE_GRADIENT; - else if(str=="bline_point" || str=="blinepoint") - return TYPE_BLINEPOINT; + if(str=="nil" || + str=="null") return TYPE_NIL; + else if(str=="time" || + str==_("time")) return TYPE_TIME; + else if(str=="real" || + str=="float" || + str==_("real")) return TYPE_REAL; + else if(str=="integer" || + str=="int" || + str==_("integer")) return TYPE_INTEGER; + else if(str=="bool" || + str==_("bool")) return TYPE_BOOL; + else if(str=="angle" || + str=="degrees" || + str=="radians" || + str=="rotations") return TYPE_ANGLE; + else if(str=="vector" || + str=="point") return TYPE_VECTOR; + else if(str=="color") return TYPE_COLOR; + else if(str=="string") return TYPE_STRING; + else if(str=="canvas") return TYPE_CANVAS; + else if(str=="list") return TYPE_LIST; + else if(str=="segment") return TYPE_SEGMENT; + else if(str=="gradient") return TYPE_GRADIENT; + else if(str=="bline_point" || + str=="blinepoint") return TYPE_BLINEPOINT; return TYPE_NIL; } @@ -368,39 +312,24 @@ ValueBase::operator==(const ValueBase& rhs)const return false; if(data==rhs.data) return true; - + switch(get_type()) { - case TYPE_TIME: - return get(Time()).is_equal(rhs.get(Time())); - case TYPE_REAL: - return abs(get(Real())-rhs.get(Real()))<=0.00000000000001; - case TYPE_INTEGER: - return get(int())==rhs.get(int()); - case TYPE_BOOL: - return get(bool())==rhs.get(bool()); - case TYPE_ANGLE: - return get(Angle())==rhs.get(Angle()); - case TYPE_VECTOR: - return get(Vector()).is_equal_to(rhs.get(Vector())); - case TYPE_COLOR: - return get(Color())==rhs.get(Color()); - case TYPE_STRING: - return get(String())==rhs.get(String()); - case TYPE_CANVAS: - return get(Canvas::LooseHandle())==rhs.get(Canvas::LooseHandle()); - case TYPE_LIST: - return get_list()==rhs.get_list(); - case TYPE_SEGMENT: -// return get(Segment())==rhs.get(Segment()); - case TYPE_GRADIENT: -// return get(Gradient())==rhs.get(Gradient()); - case TYPE_BLINEPOINT: -// return get(BLinePoint())==rhs.get(BLinePoint()); + case TYPE_TIME: return get(Time()).is_equal(rhs.get(Time())); + case TYPE_REAL: return abs(get(Real())-rhs.get(Real()))<=0.00000000000001; + case TYPE_INTEGER: return get(int())==rhs.get(int()); + case TYPE_BOOL: return get(bool())==rhs.get(bool()); + case TYPE_ANGLE: return get(Angle())==rhs.get(Angle()); + case TYPE_VECTOR: return get(Vector()).is_equal_to(rhs.get(Vector())); + case TYPE_COLOR: return get(Color())==rhs.get(Color()); + case TYPE_STRING: return get(String())==rhs.get(String()); + case TYPE_CANVAS: return get(Canvas::LooseHandle())==rhs.get(Canvas::LooseHandle()); + case TYPE_LIST: return get_list()==rhs.get_list(); + case TYPE_SEGMENT: // return get(Segment())==rhs.get(Segment()); + case TYPE_GRADIENT: // return get(Gradient())==rhs.get(Gradient()); + case TYPE_BLINEPOINT: // return get(BLinePoint())==rhs.get(BLinePoint()); case TYPE_NIL: - default: - return false; - break; + default: return false; } return false; }