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
00032
00033
00034
00035
00036
00037
00038 #ifndef STAR_ITEM_POOL_HXX
00039 # define STAR_ITEM_POOL_HXX
00040
00041 #include <map>
00042 #include <set>
00043 #include <vector>
00044
00045 #include <libstaroffice/STOFFDocument.hxx>
00046
00047 #include "STOFFDebug.hxx"
00048 #include "STOFFEntry.hxx"
00049 #include "STOFFInputStream.hxx"
00050
00051 class StarAttribute;
00052 class StarItem;
00053 class StarItemSet;
00054 class StarItemStyle;
00055
00056 namespace StarItemPoolInternal
00057 {
00058 struct State;
00059 }
00060
00061 class StarAttribute;
00062 class StarObject;
00063 class StarZone;
00064
00070 class StarItemPool
00071 {
00072 public:
00073 friend struct StarItemPoolInternal::State;
00075 enum Type { T_ChartPool, T_EditEnginePool, T_SpreadsheetPool, T_VCControlPool, T_WriterPool, T_XOutdevPool, T_Unknown };
00077 StarItemPool(StarObject &document, Type type);
00079 virtual ~StarItemPool();
00080
00082 void clean();
00084 void addSecondaryPool(shared_ptr<StarItemPool> secondary);
00086 bool isSecondaryPool() const;
00088 bool read(StarZone &zone);
00090 int getVersion() const;
00092 Type getType() const;
00094 bool isInside() const
00095 {
00096 return m_isInside;
00097 }
00099 bool readStyles(StarZone &zone, StarObject &doc);
00103 void updateStyles();
00105 void updateUsingStyles(StarItemSet &itemSet) const;
00107 void defineGraphicStyle(STOFFListenerPtr listener, librevenge::RVNGString const &styleName, StarObject &object) const
00108 {
00109 std::set<librevenge::RVNGString> done;
00110 defineGraphicStyle(listener, styleName, object, done);
00111 }
00113 void defineParagraphStyle(STOFFListenerPtr listener, librevenge::RVNGString const &styleName, StarObject &object) const
00114 {
00115 std::set<librevenge::RVNGString> done;
00116 defineParagraphStyle(listener, styleName, object, done);
00117 }
00119 StarItemStyle const *findStyleWithFamily(librevenge::RVNGString const &style, int family) const;
00121 shared_ptr<StarAttribute> readAttribute(StarZone &zone, int which, int vers, long endPos);
00123 shared_ptr<StarItem> readItem(StarZone &zone, bool isDirect, long endPos);
00125 shared_ptr<StarItem> loadSurrogate(StarZone &zone, uint16_t &nWhich, bool localId, libstoff::DebugStream &f);
00127 bool loadSurrogate(StarItem &item);
00128
00129 protected:
00131 void defineGraphicStyle(STOFFListenerPtr listener, librevenge::RVNGString const &styleName, StarObject &object, std::set<librevenge::RVNGString> &done) const;
00133 void defineParagraphStyle(STOFFListenerPtr listener, librevenge::RVNGString const &styleName, StarObject &object, std::set<librevenge::RVNGString> &done) const;
00135 bool readV1(StarZone &zone, StarItemPool *master);
00137 bool readV2(StarZone &zone, StarItemPool *master);
00138
00140 shared_ptr<StarItem> createItem(int which, int surrogateId, bool localId);
00141
00142
00143
00144
00145 private:
00147 bool m_isInside;
00149 shared_ptr<StarItemPoolInternal::State> m_state;
00150 };
00151 #endif
00152