/********************************************************************** *< FILE: marketDefaults.h DESCRIPTION: Market Specific Defaults API CREATED BY: Cleve Ard HISTORY: created 5/19/2003 *> Copyright (c) 2003, All Rights Reserved. **********************************************************************/ #ifndef __MARKETDEFAULTS_H__ #define __MARKETDEFAULTS_H__ class MarketDefaults; // Get the market default settings. We can handle multiple // files, so third parties can add there own market defaults. // Name should be the name, without and extension, for the // default to be retrieved. NULL will retrieve the defaults // for Autodesk/Discreet settings. CoreExport MarketDefaults* GetMarketDefaults(const TCHAR* name = NULL); // Get a filename that is in the current MarketDefaults set. // If the file doesn't exist in the MarketDefaults set and // does exits in the factoryDefaults for the MarketDefaults // set it is copied to the MarketDefault set. CoreExport TSTR GetMarketDefaultsFileName(const TCHAR* name = NULL); // This class is exported from the marketDefaults.dll class MarketDefaults { public: typedef bool (*FloatValidator)(float&); typedef bool (*IntValidator)(int&); typedef bool (*Point3Validator)(Point3&); typedef bool (*Point4Validator)(Point4&); typedef bool (*StringValidator)(TSTR&); typedef bool (*AnimatableValidator)(Animatable*&); typedef bool (*ClassIDValidator)(Class_ID&); // This class generates range checkers for values. template class Range; // This function rejects NULL animatable objects CoreExport static bool CheckNULL(Animatable*& obj); // This function rejects Null strings CoreExport static bool CheckNULL(TSTR& str); // This function rejects Class_ID(0, 0) and // Class_ID(STANDIN_CLASS_ID, 0) CoreExport static bool CheckNULL(Class_ID& id); // High level access to defaults. These return the default // value, based on the class ID of the object and the name // of the setting. A default value is supplied, to be used // when the setting name is not present for the class ID. // The validator and dimension are only used for setting // names that are found. The dimension is used to convert // the UI values in the settings file to internal values // before the validator is called. The validator may change // the value. It returns true if the retrieved value is to // be used, or false if the default value is to be used. virtual int GetInt( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, int defaultValue, IntValidator validator = NULL, int dimension = DIM_NONE ) = 0; int GetTime( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, int defaultValue, IntValidator validator = NULL ) { return GetInt(objectSuperClass, objectClass, name, defaultValue, validator, DIM_TIME); } virtual float GetFloat( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, float defaultValue, FloatValidator validator = NULL, int dimension = DIM_NONE ) = 0; float GetAngle( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, float defaultValue, FloatValidator validator = NULL ) { return GetFloat(objectSuperClass, objectClass, name, defaultValue, validator, DIM_ANGLE); } float GetPercentage( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, float defaultValue, FloatValidator validator = NULL ) { return GetFloat(objectSuperClass, objectClass, name, defaultValue, validator, DIM_PERCENT); } float GetWorld( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, float defaultValue, FloatValidator validator = NULL ) { return GetFloat(objectSuperClass, objectClass, name, defaultValue, validator, DIM_WORLD); } float GetColorChannel( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, float defaultValue, FloatValidator validator = NULL ) { return GetFloat(objectSuperClass, objectClass, name, defaultValue, validator, DIM_COLOR255); } virtual Point3 GetPoint3( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, const Point3& defaultValue, Point3Validator validator = NULL, int dimension = DIM_NONE ) = 0; Point3 GetRGBA( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, const Point3& defaultValue, Point3Validator validator = NULL ) { return GetPoint3(objectSuperClass, objectClass, name, defaultValue, validator, DIM_COLOR255); } virtual Point4 GetPoint4( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, const Point4& defaultValue, Point4Validator validator = NULL, int dimension = DIM_NONE ) = 0; Point4 GetFRGBA( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, const Point4& defaultValue, Point4Validator validator = NULL ) { return GetPoint4(objectSuperClass, objectClass, name, defaultValue, validator, DIM_COLOR); } virtual TSTR GetString( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, const TCHAR* defaultValue, StringValidator validator = NULL ) = 0; virtual Class_ID GetClassID( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, const Class_ID& defaultID, ClassIDValidator validator = NULL ) = 0; virtual Animatable* CreateInstance( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, SClass_ID superClass, const Class_ID& defaultInstance, AnimatableValidator validator = NULL ) = 0; ReferenceTarget* CreateRefTarget( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, SClass_ID superClass, const Class_ID& defaultInstance, AnimatableValidator validator = NULL ) { return static_cast(CreateInstance(objectSuperClass, objectClass, name, superClass, defaultInstance, validator)); } Mtl* CreateMtl( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, const Class_ID& defaultInstance, AnimatableValidator validator = NULL ) { return static_cast(CreateInstance(objectSuperClass, objectClass, name, MATERIAL_CLASS_ID, defaultInstance, validator)); } Texmap* CreateTexmap( SClass_ID objectSuperClass, const Class_ID& objectClass, const TCHAR* name, const Class_ID& defaultInstance, AnimatableValidator validator = NULL ) { return static_cast(CreateInstance(objectSuperClass, objectClass, name, TEXMAP_CLASS_ID, defaultInstance, validator)); } // This is the low level interface into the defaults. // This interface lets you retrive raw values directly from the // defaults. virtual bool SectionExists(const TCHAR* section) = 0; virtual bool SectionExists(SClass_ID sid, const Class_ID& id) = 0; virtual void SetSectionName(const TCHAR* section) = 0; virtual void SetSectionName(SClass_ID sid, const Class_ID& id) = 0; virtual const TCHAR* GetSectionName() = 0; virtual void DeleteSection(const TCHAR* section) = 0; virtual void DeleteSection(SClass_ID sid, const Class_ID& id) = 0; virtual bool KeyExists(const TCHAR* key) = 0; virtual bool DeleteKey(const TCHAR* key) = 0; virtual bool PutInt( const TCHAR* key, int val ) = 0; virtual bool PutIntArray( const TCHAR* key, int ct, const int* array ) = 0; virtual bool PutFloat( const TCHAR* key, float val ) = 0; virtual bool PutFloatArray( const TCHAR* key, int ct, const float* array ) = 0; virtual bool PutString( const TCHAR* key, const TCHAR* str ) = 0; virtual bool GetInt( const TCHAR* key, int& val ) = 0; virtual bool GetIntArray( const TCHAR* key, int& ct, int* array, int arrayCt ) = 0; virtual bool GetFloat( const TCHAR* key, float& val ) = 0; virtual bool GetFloatArray( const TCHAR* key, int& ct, float* array, int arrayCt ) = 0; virtual bool GetString( const TCHAR* key, TCHAR* buf, int bufSize ) = 0; }; // This class generates range checkers for values. template class MarketDefaults::Range { public: // Return whether val is in the range including the endpoints static bool CheckII(T& val); // Return whether val is in the range excluding the low endpoint static bool CheckEI(T& val); // Return whether val is in the range excluding the high endpoint static bool CheckIE(T& val); // Return whether val is in the range excluding the endpoints static bool CheckEE(T& val); // Correct val to fall within the givin range including the endpoints static bool Correct(T& val); // Correct val if it is above the given range. Fail if it is below. static bool CorrectHigh(T& val); // Correct val if it is below the given range. Fail if it is above. static bool CorrectLow(T& val); }; template bool MarketDefaults::Range::CheckII(T& val) { return val >= T(low) && val <= T(high); } template bool MarketDefaults::Range::CheckEI(T& val) { return val > T(low) && val <= T(high); } template bool MarketDefaults::Range::CheckIE(T& val) { return val >= T(low) && val < T(high); } template bool MarketDefaults::Range::CheckEE(T& val) { return val > T(low) && val < T(high); } template bool MarketDefaults::Range::Correct(T& val) { if (val < T(low)) val = T(low); else if (val > T(high)) val = T(high); return true; } template bool MarketDefaults::Range::CorrectHigh(T& val) { if (val < T(low)) return false; if (val > T(high)) val = T(high); return true; } template bool MarketDefaults::Range::CorrectLow(T& val) { if (val > T(high)) return false; if (val < T(low)) val = T(low); return true; } #endif