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 __VSDFIELDLIST_H__
00032 #define __VSDFIELDLIST_H__
00033
00034 #include <vector>
00035 #include <map>
00036 #include <libwpd/libwpd.h>
00037 #include "VSDDocumentStructure.h"
00038 #include "VSDTypes.h"
00039
00040 namespace libvisio
00041 {
00042
00043 class VSDCollector;
00044
00045 class VSDFieldListElement
00046 {
00047 public:
00048 VSDFieldListElement() {}
00049 virtual ~VSDFieldListElement() {}
00050 virtual void handle(VSDCollector *collector) const = 0;
00051 virtual VSDFieldListElement *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 VSDTextField : public VSDFieldListElement
00059 {
00060 public:
00061 VSDTextField(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 ~VSDTextField() {}
00067 void handle(VSDCollector *collector) const;
00068 VSDFieldListElement *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 VSDNumericField : public VSDFieldListElement
00079 {
00080 public:
00081 VSDNumericField(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 ~VSDNumericField() {}
00088 void handle(VSDCollector *collector) const;
00089 VSDFieldListElement *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 VSDFieldList
00103 {
00104 public:
00105 VSDFieldList();
00106 VSDFieldList(const VSDFieldList &fieldList);
00107 ~VSDFieldList();
00108 VSDFieldList &operator=(const VSDFieldList &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(VSDCollector *collector) const;
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.empty());
00123 }
00124 VSDFieldListElement *getElement(unsigned index);
00125 private:
00126 std::map<unsigned, VSDFieldListElement *> m_elements;
00127 std::vector<unsigned> m_elementsOrder;
00128 unsigned m_id, m_level;
00129 };
00130
00131 }
00132
00133 #endif // __VSDFIELDLIST_H__
00134