![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /********************************************************************* 00002 ** Copyright (c) 2001 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: baseSymbolMapper.h,v $ $Revision: 1.55 $ $State: Exp $ 00007 *********************************************************************/ 00008 00011 00012 #ifndef BASESYMBOLMAPPER_H 00013 #define BASESYMBOLMAPPER_H 00014 00015 #include "symbolMapper/symbolDesc.h" 00016 #include "symbolMapper/mapReader.h" 00017 #include "symbology/symbol.h" 00018 #include "symbolDrawerInterface/nullDrawer.h" 00019 #include "symbolDrawer/ttsDrawer.h" 00020 #include "symbolMapper/baseMapper.h" 00021 #include "ngutil/orderedKeyList.h" 00022 #include "geometry/point.h" 00023 00024 #include <QtCore/QObject> 00025 #include <QtCore/QHash> 00026 #include <QtGui/QColor> 00027 #include <QtGui/QPixmap> 00028 00029 class DtSymbol; 00030 class DtObjectType; 00031 class DtSymbolDrawer; 00032 class DtDrawerColl; 00033 class DtModelData; 00034 class DtBaseSymbolMapper; 00035 class DtCompassModelData; 00036 class DtDrawerKey; 00037 class DtEntityMapperKey; 00038 class DtCompositeSymbol; 00039 class DtTTSSymbol; 00040 class DtTerrainModelData; 00041 class DtNameLabelSymbol; 00042 class DtEnvironmentalModelData; 00043 00045 typedef DtSymbol* (*DtSymbolCreatorCallback)(const DtBaseSymbolMapper* mapper, const DtModelData& data, void* usr); 00046 typedef void (*DtPostSymbolCreateCallbackFcn)(DtSymbol*, const DtModelData&, const DtBaseSymbolMapper*, void* usr); 00047 00048 #include "symbolMapper/symbolMapperDefines.h" 00049 00050 const int DtCacheMainSymbolAsBitmap = 0x00000001; 00051 const int DtCacheNameLabelAsBitmap = 0x00000002; 00052 const int DtCacheLabelLabelAsBitmap = 0x00000004; 00053 00054 class DT_DLL_symbolMapper DtCreateCallbackInfo 00055 { 00056 public: 00057 DtCreateCallbackInfo(DtSymbolCreatorCallback fcn, void *usr); 00058 DtCreateCallbackInfo(const DtCreateCallbackInfo& orig) : 00059 myCallback(orig.myCallback), 00060 myUserData(orig.myUserData) 00061 { 00062 } 00063 00064 virtual ~DtCreateCallbackInfo(); 00065 00066 virtual DtSymbolCreatorCallback callback(); 00067 virtual void* usertoLatin1(); 00068 00069 protected: 00070 DtSymbolCreatorCallback myCallback; 00071 void* myUserData; 00072 }; 00073 00074 typedef QHash<int, DtCreateCallbackInfo> DtSymbolCreators; 00075 00076 class DT_DLL_symbolMapper DtPostCreateCallbackInfo 00077 { 00078 public: 00079 DtPostCreateCallbackInfo(int iType, DtPostSymbolCreateCallbackFcn fcn, void *usr); 00080 DtPostCreateCallbackInfo(const DtPostCreateCallbackInfo& orig) : 00081 myCallback(orig.myCallback), 00082 myUserData(orig.myUserData), 00083 myType(orig.myType) 00084 { 00085 } 00086 00087 virtual ~DtPostCreateCallbackInfo(); 00088 00089 virtual DtPostSymbolCreateCallbackFcn callback(); 00090 virtual void* usertoLatin1(); 00091 virtual int type(); 00092 00093 protected: 00094 DtPostSymbolCreateCallbackFcn myCallback; 00095 void* myUserData; 00096 int myType; 00097 }; 00098 00099 class DT_DLL_symbolMapper DtMapReaderCallbackInfo 00100 { 00101 public: 00102 DtMapReaderCallbackInfo(DtMapReaderCreatorFcn fcn); 00103 DtMapReaderCallbackInfo(const DtMapReaderCallbackInfo& orig) : 00104 myCallback(orig.myCallback) {}; 00105 00106 virtual ~DtMapReaderCallbackInfo(); 00107 00108 virtual DtMapReaderCreatorFcn callback(); 00109 virtual void setCallback(DtMapReaderCreatorFcn fcn); 00110 00111 protected: 00112 DtMapReaderCreatorFcn myCallback; 00113 }; 00114 00115 typedef QHash<QString, DtMapReaderCallbackInfo> DtMapReaders; 00116 00117 class DT_DLL_symbolMapper DtObjectColor : public DtEntityMapperKey 00118 { 00119 public: 00120 DtObjectColor() : myColor(255, 0, 0) {}; 00121 DtObjectColor(const DtEntityMapperKey& key) : DtEntityMapperKey(key), myColor(255, 0, 0) {}; 00122 DtObjectColor(const DtObjectColor& c) : DtEntityMapperKey(c), myColor(c.myColor) {}; 00123 00124 QColor myColor; 00125 }; 00126 00145 class DT_DLL_symbolMapper DtBaseSymbolMapper : public DtBaseMapper 00146 { 00147 Q_OBJECT 00148 00149 public: 00150 DtBaseSymbolMapper(); 00151 00155 DtBaseSymbolMapper(DtBaseSymbolMapper*); 00156 00157 virtual ~DtBaseSymbolMapper(); 00158 00161 virtual DtSymbol* createSymbol(const DtModelData& d); 00162 00163 virtual void setDrawerColl(DtDrawerColl* dc); 00164 virtual DtDrawerColl* drawerColl() const; 00165 00167 virtual bool init(); 00168 00178 virtual bool load(const char* filename, bool replace = false); 00179 00183 virtual bool save(const char* filename); 00184 00185 virtual bool addSymbolToList(DtDescriptor* sd, bool replace = false); 00186 virtual bool addSymbolToList(DtSymbolDescriptor* sd, bool replace = false); 00187 00189 virtual DtSymbolDescriptor* getStringKeyedSymbolDesc(const QString& key) const; 00190 virtual void addStringKeyedSymbolToList(DtSymbolDescriptor* desc); 00191 00195 virtual void getSymbolDescriptors(DtSDList* list) const; 00196 00199 virtual DtSymbolDescriptor* fullLookup(const QString& key) const; 00200 00201 virtual DtSymbolDrawer* lookupDrawer(const DtDrawerKey& key, DtSymbolDescriptor* symDesc); 00202 virtual DtSymbolDrawer* lookupDrawer(DtSymbolDescriptor* symDesc); 00203 00204 virtual DtTTSDrawer& labelDrawer(); 00205 virtual QColor labelColor() const; 00206 00208 virtual void removeEntries(const DtBaseSymbolMapper& mapper); 00209 virtual void removeAllEntries(const DtSDList& mapper); 00210 00212 virtual void removeEntry(DtSymbolDescriptor* sd); 00213 00214 virtual const DtSDList& entities() const; 00215 00216 virtual int defaultTransparencyFor(const DtEntityMapperKey& key) const; 00217 00219 virtual void postLoadCleanup(); 00220 00222 virtual QPixmap getIcon(const DtModelData* d); 00223 virtual void setIconSize(const QSize size); 00224 virtual QSize iconSize() const; 00225 00226 virtual QPixmap finalizeSymbolPixmap(const DtSymbol*) const; 00227 00228 const QString& filename() const; 00229 00230 virtual void clear(); 00231 00232 public: 00234 virtual void addSymbolCreateCallback(int type, DtSymbolCreatorCallback fcn, void* usr = NULL); 00235 virtual void removeSymbolCreateCallback(int type); 00236 00237 virtual DtSymbolDescriptor* getSymbolDesc(const DtEntityMapperKey& key) const; 00238 virtual DtSymbolDescriptor* getSymbolDesc(const DtModelData& data) const; 00239 00240 virtual DtCompositeSymbol* createSymbolOfType(const DtEntityMapperKey& type, 00241 int force, DtSymbolCreatorFcn fcn); 00242 00245 virtual void addPostCreateCallback(int iType, DtPostSymbolCreateCallbackFcn fcn, void* usr); 00246 00248 virtual void removePostCreateCallback(int iType, DtPostSymbolCreateCallbackFcn fcn, void* usr); 00249 00252 virtual void removeAllPostCreateCallbacks(); 00253 00255 virtual DtSymbol* createMainSymbol(const DtEntityMapperKey& emk, int force); 00256 00257 public: 00258 00260 static DtBaseSymbolMapper* create(); 00261 00263 static void addReader(QString extension, DtMapReaderCreatorFcn fcn); 00264 00267 static void cleanupReaders(); 00268 00269 public: 00270 virtual DtMapReader* createReader(QString extension); 00271 00273 virtual QColor defaultColorFor(const DtEntityMapperKey& key) const; 00274 virtual QColor defaultColorFor(const DtModelData& data) const; 00275 00276 virtual DtTTSSymbol* createLabelSymbol(); 00277 00278 //Since the base mapper loads the map readers, it also needs 00279 //the media mappers so that it can pass it to it. 00280 //Ideally however, I would not have the symbol mapper create the map 00281 //reader. They should be separate. 00282 virtual void setMediaMapper(DtBaseMapper* map); 00283 00285 virtual void addColor(const DtEntityMapperKey&, const QColor&); 00286 00287 virtual void addNameLabel(DtNameLabelSymbol* symbol); 00288 virtual void addLabelLabel(DtNameLabelSymbol* symbol); 00289 00290 virtual void chainSymbolMapper(DtBaseSymbolMapper*); 00291 00292 virtual void clearCache(); 00293 00295 virtual void setDeleteChainedMappers(bool); 00296 virtual bool deleteChainedMappers() const; 00297 00300 virtual void setCacheSymbolOptions(int); 00301 int cacheSymbolOptions() const; 00302 virtual DtSymbol* createSymbolFromDescription(DtSymbolDescriptor* symDesc, const DtEntityMapperKey& key); 00303 00304 public: 00307 virtual DtEnvironmentalModelData* createObject(const QString& object, QVector<DtPoint>& points, 00308 const QString& name = QString::null); 00309 00310 public slots: 00311 virtual void setLabelColor(const QColor& color); 00312 virtual void setUsingAnimation(bool b); 00313 virtual void removeChainedMapper(QObject*); 00314 00315 signals: 00316 void labelColorChanged(const QColor& color); 00317 00318 protected: 00319 00321 virtual void modifySymbol(DtSymbol* symbol, DtSymbolDescriptor* symDesc, int force, const DtEntityMapperKey& emk); 00322 00323 virtual void removeEntry(DtSymbolDescriptor* sd, DtSDList& list); 00324 00325 virtual void invokePostCreateCallbacks(DtSymbol*, const DtModelData&); 00326 00327 virtual bool addEntry(DtSymbolDescriptor* sd, DtSDList& list, bool replace); 00328 00329 private: 00330 DtBaseSymbolMapper(const DtBaseSymbolMapper& orig); 00331 DtBaseSymbolMapper& operator=(const DtBaseSymbolMapper orig); 00332 00333 protected: 00334 DtSymbolCreators myCreators; 00335 DtDrawerColl* myDrawerCollection; 00336 DtSDList myEntitySDList; 00337 DtSDList myOrderedList; 00338 QHash<QString, DtSymbolDescriptor*> myStringKeyedSDList; 00339 00340 DtNullDrawer myNullDrawer; 00341 DtTTSDrawer myLabelDrawer; 00342 00343 DtBaseMapper* myMediaMapper; 00344 DtOrderedKeyList<DtObjectColor*> myColors; 00345 00346 QColor myLabelColor; 00347 00348 bool myUsingAnimation; 00349 00350 static DtMapReaders* myMapReaders; 00351 00352 QSize myIconSize; 00353 QHash<QString, QPixmap*> myIconCache; 00354 00355 QList<DtPostCreateCallbackInfo> myPostCreateCallbacks; 00356 00357 static const QSize theDefaultIconSize; 00358 00359 QString myFilename; 00360 00361 DtPtrQList<DtBaseSymbolMapper*> myChainedMappers; 00362 00363 bool myDeleteChainedMappers; 00364 QString myComment; 00365 00366 int myCacheSymbolOptions; 00367 00370 DtBaseSymbolMapper* myParent; 00371 }; 00372 00373 inline const QString& DtBaseSymbolMapper::filename() const 00374 { 00375 return myFilename; 00376 } 00377 00378 inline int DtBaseSymbolMapper::cacheSymbolOptions() const 00379 { 00380 return myCacheSymbolOptions; 00381 } 00382 00383 #endif