VR-Forces 4.0.4 Class Documentation
include/symbolMapper/baseSymbolMapper.h
Go to the documentation of this file.
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

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)