Go to the documentation of this file.00001
00002
00003
00004
00005
00009
00010 #ifndef lgrAnnotationFactory_H_
00011 #define lgrAnnotationFactory_H_
00012
00013 #include "lgrAnn.h"
00014
00015 #include <list>
00016 #include <map>
00017 #include <QtCore/QString>
00018 #include <QtCore/QStringList>
00019 #include <vlutil/vlString.h>
00020
00021 class QPainter;
00022 class QWidget;
00023 class DtEnvObject;
00024
00025 namespace MAKLogger
00026 {
00027 class DtLgrAnnotation;
00028 class DtLgrAnnotationManager;
00029 class DtLgrAnnotationSliderBar;
00030 class DtLgrGuiModel;
00031 class DtSliderBar;
00032 class DtTimeComponent;
00033
00036 class DT_DLL_LGRANN DtLgrAnnotationDefinition
00037 {
00038 public:
00039
00042 typedef DtLgrAnnotation* (*AnnotationCreator)(QWidget*,DtLgrGuiModel*);
00043
00045 typedef void (*AnnotationModifier)(QWidget*,DtLgrAnnotation*,DtLgrGuiModel*);
00046
00049 typedef DtLgrAnnotation* (*AnnotationLoader)(const DtEnvObject* object);
00050
00052 typedef DtLgrAnnotationSliderBar* (*AnnotationBarCreator)(DtLgrAnnotation* annotation);
00053
00055 typedef DtLgrAnnotation* (*AnnotationConvertor)(const DtLgrAnnotation* annotation);
00056
00057 DtLgrAnnotationDefinition();
00058
00059 DtLgrAnnotationDefinition(QString guiTypeName,
00060 QString accelerator,QString icon,DtString type,
00061 AnnotationCreator creator, AnnotationModifier modifier,
00062 AnnotationLoader loader,AnnotationBarCreator barCreator);
00063
00065 DtLgrAnnotationDefinition(const DtLgrAnnotationDefinition& copy);
00066
00068 DtLgrAnnotationDefinition& operator=(const DtLgrAnnotationDefinition& copy);
00069 ~DtLgrAnnotationDefinition();
00070
00073 QString myGuiTypeName;
00074
00076 QString myGuiAccelerator;
00077
00079 QString myGuiIcon;
00080
00082 DtString myType;
00083
00085 AnnotationCreator myCreator;
00086
00088 AnnotationModifier myModifier;
00089
00091 AnnotationLoader myLoader;
00092
00094 AnnotationBarCreator myBarCreator;
00095 };
00096
00097 typedef std::map<DtString,DtLgrAnnotationDefinition> DtAnnotationTypeMap;
00098
00101 class DT_DLL_LGRANN DtLgrAnnotationFactory
00102 {
00103 private:
00105 DtLgrAnnotationFactory();
00107 ~DtLgrAnnotationFactory();
00109 DtLgrAnnotationFactory(const DtLgrAnnotationFactory&);
00111 DtLgrAnnotationFactory& operator=(const DtLgrAnnotationFactory&);
00112
00113 public:
00114
00116 static const DtAnnotationTypeMap& annotationTypesMap();
00117
00119 static const QStringList& annotationTypeNames();
00120
00122 static DtLgrAnnotation* createAnnotation(const DtString& type,
00123 QWidget* parent,DtLgrGuiModel* model);
00124
00126 static void editAnnotation(QWidget* parent,DtLgrAnnotation*,
00127 DtLgrGuiModel* model);
00128
00132 static DtLgrAnnotation* convertAnnotation( const DtString& type,
00133 const DtLgrAnnotation* source);
00134
00137 static DtLgrAnnotation* loadAnnotation(const DtEnvObject* object);
00138
00140 static DtLgrAnnotationSliderBar* createSliderBar(DtLgrAnnotation*);
00141
00143 static bool isAnnotationType(const DtString& type);
00144
00147 static void registerAnnotationType(const DtLgrAnnotationDefinition&
00148 typeDefinition);
00149
00150 static void registerAnnotationConversion(const DtString& destinationType,
00151 const DtString& sourceType,DtLgrAnnotationDefinition::AnnotationConvertor function);
00152
00154 static const std::list<DtString>& availableConversions(const DtString& sourceType);
00155
00156 protected:
00157
00161 static DtLgrAnnotationDefinition& getKnownDefinition(const DtString& type);
00162
00163 static DtString conversionKey(const DtString& destType,
00164 const DtString& srcType);
00165
00167 static std::list<DtString> theAnnotationTypeList;
00168 static QStringList theAnnotationTypeNames;
00169
00171 static DtAnnotationTypeMap theAnnotationTypes;
00172
00173 typedef std::map<DtString,DtLgrAnnotationDefinition::AnnotationConvertor> ConvertorMap;
00174 typedef std::map<DtString, std::list<DtString> > ConversionListMap;
00175
00177 static ConvertorMap theConvertorMap;
00178 static ConversionListMap theConversionListMap;
00179 };
00180 }
00181
00182 #endif