Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef __VSDXFIELDLIST_H__
00032 #define __VSDXFIELDLIST_H__
00033
00034 #include <vector>
00035 #include <map>
00036 #include <libwpd/libwpd.h>
00037 #include "VSDXDocumentStructure.h"
00038 #include "VSDXTypes.h"
00039
00040 namespace libvisio
00041 {
00042
00043 class VSDXCollector;
00044
00045 class VSDXFieldListElement
00046 {
00047 public:
00048 VSDXFieldListElement() {}
00049 virtual ~VSDXFieldListElement() {}
00050 virtual void handle(VSDXCollector *collector) = 0;
00051 virtual VSDXFieldListElement *clone() = 0;
00052 virtual WPXString getString(const std::map<unsigned, WPXString>&) = 0;
00053 virtual void setNameId(int) = 0;
00054 virtual void setFormat(unsigned short) = 0;
00055 virtual void setValue(double) = 0;
00056 };
00057
00058 class VSDXTextField : public VSDXFieldListElement
00059 {
00060 public:
00061 VSDXTextField(unsigned id, unsigned level, int nameId, int formatStringId)
00062 : m_id(id),
00063 m_level(level),
00064 m_nameId(nameId),
00065 m_formatStringId(formatStringId) {}
00066 ~VSDXTextField() {}
00067 void handle(VSDXCollector *collector);
00068 VSDXFieldListElement *clone();
00069 WPXString getString(const std::map<unsigned, WPXString> &strVec);
00070 void setNameId(int nameId);
00071 void setFormat(unsigned short) {}
00072 void setValue(double) {}
00073 private:
00074 unsigned m_id, m_level;
00075 int m_nameId, m_formatStringId;
00076 };
00077
00078 class VSDXNumericField : public VSDXFieldListElement
00079 {
00080 public:
00081 VSDXNumericField(unsigned id, unsigned level, unsigned short format, double number, int formatStringId)
00082 : m_id(id),
00083 m_level(level),
00084 m_format(format),
00085 m_number(number),
00086 m_formatStringId(formatStringId) {}
00087 ~VSDXNumericField() {}
00088 void handle(VSDXCollector *collector);
00089 VSDXFieldListElement *clone();
00090 WPXString getString(const std::map<unsigned, WPXString> &);
00091 void setNameId(int) {}
00092 void setFormat(unsigned short format);
00093 void setValue(double number);
00094 private:
00095 WPXString datetimeToString(const char *format, double datetime);
00096 unsigned m_id, m_level;
00097 unsigned short m_format;
00098 double m_number;
00099 int m_formatStringId;
00100 };
00101
00102 class VSDXFieldList
00103 {
00104 public:
00105 VSDXFieldList();
00106 VSDXFieldList(const VSDXFieldList &fieldList);
00107 ~VSDXFieldList();
00108 VSDXFieldList &operator=(const VSDXFieldList &fieldList);
00109 void setElementsOrder(const std::vector<unsigned> &m_elementsOrder);
00110 void addFieldList(unsigned id, unsigned level);
00111 void addTextField(unsigned id, unsigned level, int nameId, int formatStringId);
00112 void addNumericField(unsigned id, unsigned level, unsigned short format, double number, int formatStringId);
00113 void addClonedField(unsigned id);
00114 void handle(VSDXCollector *collector);
00115 void clear();
00116 unsigned long size() const
00117 {
00118 return (unsigned long)m_elements.size();
00119 }
00120 bool empty() const
00121 {
00122 return (!m_elements.size());
00123 }
00124 VSDXFieldListElement *getElement(unsigned index);
00125 private:
00126 std::map<unsigned, VSDXFieldListElement *> m_elements;
00127 std::vector<unsigned> m_elementsOrder;
00128 unsigned m_id, m_level;
00129 };
00130
00131 }
00132
00133 #endif // __VSDXFIELDLIST_H__
00134