## Public API Reference

- Main Page
- Classes
- Files

# physicallayer/propclas.h

    00001 /*
    00002     Crystal Space Entity Layer
    00003     Copyright (C) 2001 by Jorrit Tyberghein
    00004
    00005     This library is free software; you can redistribute it and/or
    00006     modify it under the terms of the GNU Library General Public
    00007     License as published by the Free Software Foundation; either
    00008     version 2 of the License, or (at your option) any later version.
    00009
    00010     This library is distributed in the hope that it will be useful,
    00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00013     Library General Public License for more details.
    00014
    00015     You should have received a copy of the GNU Library General Public
    00016     License along with this library; if not, write to the Free
    00017     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    00018 */
    00019
    00020 #ifndef __CEL_PL_PROPCLASS__
    00021 #define __CEL_PL_PROPCLASS__
    00022
    00023 #include "cstypes.h"
    00024 #include "csutil/scf.h"
    00025 #include "csutil/strset.h"
    00026 #include "csutil/ref.h"
    00027 #include "physicallayer/datatype.h"
    00028 #include "physicallayer/entity.h"
    00029 #include "physicallayer/persist.h"
    00030
    00031 struct iCelPropertyClassList;
    00032
    00039 #define CEL_QUERY_PROPCLASS(PcList,Interface)                               \
    00040   (celQueryPropertyClass<Interface> (PcList))
    00041
    00046 #define CEL_QUERY_PROPCLASS_TAG(PcList,Interface,Tag)                       \
    00047   (celQueryPropertyClassTag<Interface> (PcList,Tag))
    00048
    00055 #define CEL_QUERY_PROPCLASS_ENT(Ent,Interface)                              \
    00056   (celQueryPropertyClassEntity<Interface> (Ent))
    00057
    00062 #define CEL_QUERY_PROPCLASS_TAG_ENT(Ent,Interface,Tag)                      \
    00063   CEL_QUERY_PROPCLASS_TAG((Ent)->GetPropertyClassList(),Interface,Tag)
    00064
    00068 #define CEL_REMOVE_PROPCLASS(PcList,Interface)                              \
    00069   ((PcList)->RemoveByInterface (scfInterfaceTraits<Interface>::GetID(),           \
    00070                                 scfInterfaceTraits<Interface>::GetVersion()))
    00071
    00076 #define CEL_REMOVE_PROPCLASS_TAG(PcList,Interface,Tag)                      \
    00077   ((PcList)->RemoveByInterfaceAndTag (                                      \
    00078         scfInterfaceTraits<Interface>::GetID(),                                     \
    00079         scfInterfaceTraits<Interface>::GetVersion(), Tag))
    00080
    00084 #define CEL_REMOVE_PROPCLASS_ENT(Ent, Interface)                            \
    00085   CEL_REMOVE_PROPCLASS((Ent)->GetPropertyClassList(),Interface)
    00086
    00091 #define CEL_REMOVE_PROPCLASS_TAG_ENT(Ent,Interface,Tag)                     \
    00092   CEL_REMOVE_PROPCLASS_TAG((Ent)->GetPropertyClassList(),Interface,Tag)
    00093
    00094 class csVector3;
    00095 class csColor;
    00096 struct iCelEntity;
    00097 struct iCelDataBuffer;
    00098 struct iCelPropertyChangeCallback;
    00099 struct iCelParameterBlock;
    00100
    00105 struct iCelPropertyClass : public virtual iBase
    00106 {
    00107   SCF_INTERFACE (iCelPropertyClass, 0, 0, 7);
    00108
    00112   virtual const char* GetName () const = 0;
    00113
    00120   virtual void SetTag (const char* tagname) = 0;
    00121
    00126   virtual const char* GetTag () const = 0;
    00127
    00131   virtual iCelEntity* GetEntity () = 0;
    00132
    00136   virtual void SetEntity (iCelEntity* entity) = 0;
    00137
    00146   virtual csPtr<iCelDataBuffer> SaveFirstPass () = 0;
    00147
    00153   virtual bool LoadFirstPass (iCelDataBuffer* databuf) = 0;
    00154
    00158   virtual csPtr<iCelDataBuffer> Save () = 0;
    00159
    00163   virtual bool Load (iCelDataBuffer* databuf) = 0;
    00164
    00172   virtual bool AddPropertyChangeCallback (iCelPropertyChangeCallback* cb) = 0;
    00173
    00180   virtual bool RemovePropertyChangeCallback (
    00181         iCelPropertyChangeCallback* cb) = 0;
    00182
    00196   virtual bool SetProperty (csStringID propertyID, long value) = 0;
    00197
    00201   virtual bool SetProperty (csStringID propertyID, float value) = 0;
    00202
    00206   virtual bool SetProperty (csStringID propertyID, bool value) = 0;
    00207
    00211   virtual bool SetProperty (csStringID propertyID, const char* value) = 0;
    00212
    00216   virtual bool SetProperty (csStringID propertyID, const csVector2& value) = 0;
    00217
    00221   virtual bool SetProperty (csStringID propertyID, const csVector3& value) = 0;
    00222
    00226   virtual bool SetProperty (csStringID propertyID, const csColor& value) = 0;
    00227
    00231   virtual bool SetProperty (csStringID propertyID,
    00232         iCelPropertyClass* value) = 0;
    00233
    00237   virtual bool SetProperty (csStringID propertyID, iCelEntity* entity) = 0;
    00238
    00255   virtual celDataType GetPropertyOrActionType (
    00256         csStringID propertyID) = 0;
    00257
    00261   virtual bool IsPropertyReadOnly (csStringID propertyID) = 0;
    00262
    00266   virtual long GetPropertyLong (csStringID propertyID) = 0;
    00267
    00271   virtual float GetPropertyFloat (csStringID propertyID) = 0;
    00272
    00276   virtual bool GetPropertyBool (csStringID propertyID) = 0;
    00277
    00281   virtual const char* GetPropertyString (csStringID propertyID) = 0;
    00282
    00286   virtual bool GetPropertyVector (csStringID propertyID, csVector2& v) = 0;
    00287
    00291   virtual bool GetPropertyVector (csStringID propertyID, csVector3& v) = 0;
    00292
    00296   virtual bool GetPropertyColor (csStringID propertyID, csColor& v) = 0;
    00297
    00301   virtual iCelPropertyClass* GetPropertyPClass (csStringID propertyID) = 0;
    00302
    00306   virtual iCelEntity* GetPropertyEntity (csStringID propertyID) = 0;
    00307
    00311   virtual bool PerformAction (csStringID actionID,
    00312         iCelParameterBlock* params) = 0;
    00313
    00317   virtual size_t GetPropertyAndActionCount () const = 0;
    00318
    00322   virtual csStringID GetPropertyOrActionID (size_t i) = 0;
    00323
    00327   virtual const char* GetPropertyOrActionDescription (csStringID) = 0;
    00328
    00336   virtual void PropertyClassesHaveChanged () = 0;
    00337
    00342   virtual csPtr<iCelDataBuffer> GetPersistentData (
    00343         celPersistenceType persistence_type) = 0;
    00344
    00356   virtual celPersistenceResult SetPersistentData (csTicks data_time,
    00357         iCelDataBuffer* data, celPersistenceType persistence_type) = 0;
    00358 };
    00359
    00360
    00361 SCF_VERSION (iCelPropertyClassList, 0, 0, 2);
    00362
    00366 struct iCelPropertyClassList : public iBase
    00367 {
    00371   virtual size_t GetCount () const = 0;
    00372
    00376   virtual iCelPropertyClass* Get (size_t n) const = 0;
    00377
    00381   virtual size_t Add (iCelPropertyClass* obj) = 0;
    00382
    00386   virtual bool Remove (iCelPropertyClass* obj) = 0;
    00387
    00391   virtual bool Remove (size_t n) = 0;
    00392
    00396   virtual bool RemoveByInterface (scfInterfaceID scf_id, int iVersion) = 0;
    00397
    00402   virtual bool RemoveByInterfaceAndTag (scfInterfaceID scf_id,
    00403         int iVersion, const char* tag) = 0;
    00404
    00408   virtual void RemoveAll () = 0;
    00409
    00413   virtual size_t Find (iCelPropertyClass* obj) const = 0;
    00414
    00421   virtual iCelPropertyClass* FindByName (const char *name) const = 0;
    00422
    00427   virtual iCelPropertyClass* FindByNameAndTag (const char *name,
    00428         const char* tag) const = 0;
    00429
    00437   virtual iBase* FindByInterface (
    00438         scfInterfaceID id, int version) const = 0;
    00439
    00444   virtual iBase* FindByInterfaceAndTag (
    00445         scfInterfaceID id, int version, const char* tag) const = 0;
    00446 };
    00447
    00452 template<class Interface>
    00453 inline csPtr<Interface> celQueryPropertyClassTag (
    00454   iCelPropertyClassList* plist, const char* tag)
    00455 {
    00456   iBase* base = plist->FindByInterfaceAndTag (
    00457     scfInterfaceTraits<Interface>::GetID (),
    00458     scfInterfaceTraits<Interface>::GetVersion (),
    00459     tag);
    00460
    00461   if (base == 0) return csPtr<Interface> (0);
    00462
    00463   Interface* x = (Interface*)base->QueryInterface (
    00464     scfInterfaceTraits<Interface>::GetID (),
    00465     scfInterfaceTraits<Interface>::GetVersion ());
    00466
    00467   base->DecRef ();      // Release our base interface.
    00468   return csPtr<Interface> (x);
    00469 }
    00470
    00477 template<class Interface>
    00478 inline csPtr<Interface> celQueryPropertyClass (
    00479   iCelPropertyClassList* plist)
    00480 {
    00481   iBase* base = plist->FindByInterface (
    00482     scfInterfaceTraits<Interface>::GetID (),
    00483     scfInterfaceTraits<Interface>::GetVersion ());
    00484
    00485   if (base == 0) return csPtr<Interface> (0);
    00486
    00487   Interface* x = (Interface*)base->QueryInterface (
    00488     scfInterfaceTraits<Interface>::GetID (),
    00489     scfInterfaceTraits<Interface>::GetVersion ());
    00490
    00491   base->DecRef ();      // Release our base interface.
    00492   return csPtr<Interface> (x);
    00493 }
    00494
    00501 template<class Interface>
    00502 inline csPtr<Interface> celQueryPropertyClassEntity (
    00503   iCelEntity* entity)
    00504 {
    00505   return celQueryPropertyClass<Interface> (entity->GetPropertyClassList ());
    00506 }
    00507
    00508 #endif // __CEL_PL_PROPCLASS__
    00509