1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef INCLUDED_DFF_HXX 25 #define INCLUDED_DFF_HXX 26 27 #include <vector> 28 #include <WW8StructBase.hxx> 29 #include <WW8ResourceModelImpl.hxx> 30 31 namespace writerfilter { 32 namespace doctok 33 { 34 using std::vector; 35 36 class DffBlock; 37 38 class DffRecord : public WW8StructBase, public writerfilter::Reference<Properties>, 39 public Sprm 40 { 41 bool bInitialized; 42 public: 43 typedef boost::shared_ptr<DffRecord> Pointer_t; 44 45 protected: 46 typedef vector<Pointer_t> Records_t; 47 Records_t mRecords; 48 49 void initChildren(); 50 51 public: 52 53 DffRecord(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount); 54 DffRecord(WW8StructBase * pParent, sal_uInt32 nOffset, sal_uInt32 nCount); ~DffRecord()55 virtual ~DffRecord() {} 56 57 bool isContainer() const; 58 sal_uInt32 calcSize() const; 59 60 sal_uInt32 getVersion() const; 61 sal_uInt32 getInstance() const; 62 sal_uInt32 getRecordType() const; 63 clone() const64 virtual DffRecord * clone() const { return new DffRecord(*this); } 65 66 virtual void resolveLocal(Properties & rHandler); 67 virtual void resolveChildren(Properties & rHandler); 68 69 Records_t findRecords(sal_uInt32 nType, bool bRecursive = true, 70 bool bAny = false); 71 72 void findRecords 73 (sal_uInt32 nType, Records_t & rRecords, 74 bool bRecursive = true, bool bAny = false); 75 76 Records_t::iterator begin(); 77 Records_t::iterator end(); 78 79 sal_uInt32 getShapeType(); 80 sal_uInt32 getShapeId(); 81 sal_uInt32 getShapeBid(); 82 83 /* Properties methods */ 84 virtual void resolve(Properties & rHandler); 85 virtual string getType() const; 86 87 /* Sprm methods */ getId() const88 virtual sal_uInt32 getId() const { return getRecordType(); } 89 virtual Value::Pointer_t getValue(); 90 virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary(); 91 virtual writerfilter::Reference<Stream>::Pointer_t getStream(); 92 virtual writerfilter::Reference<Properties>::Pointer_t getProps(); 93 94 virtual string toString() const; 95 virtual string getName() const; 96 97 virtual Kind getKind(); 98 99 friend class DffBlock; 100 }; 101 102 typedef vector<DffRecord::Pointer_t> Records_t; 103 104 class DffBlock : public WW8StructBase, 105 public writerfilter::Reference<Properties> 106 { 107 bool bInitialized; 108 sal_uInt32 mnPadding; 109 110 Records_t mRecords; 111 112 protected: 113 void initChildren(); 114 115 public: 116 typedef boost::shared_ptr<DffBlock> Pointer_t; 117 118 DffBlock(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount, sal_uInt32 nPadding); 119 DffBlock(WW8StructBase * pParent, sal_uInt32 nOffset, sal_uInt32 nCount, sal_uInt32 nPadding); 120 DffBlock(const DffBlock & rSrc); ~DffBlock()121 virtual ~DffBlock() {} 122 123 Records_t findRecords(sal_uInt32 nType, bool bRecursive = true, 124 bool bAny = false); 125 126 void findRecords(sal_uInt32 nType, Records_t & rRecords, 127 bool bRecursive = true, bool bAny = false); 128 129 DffRecord::Pointer_t getShape(sal_uInt32 nSpid); 130 DffRecord::Pointer_t getBlip(sal_uInt32 nBlip); 131 132 Records_t::iterator begin(); 133 Records_t::iterator end(); 134 135 /* Properties methods */ 136 virtual void resolve(Properties & rHandler); 137 virtual string getType() const; 138 }; 139 140 DffRecord * 141 createDffRecord(WW8StructBase * pParent, sal_uInt32 nOffset, 142 sal_uInt32 * nSize = NULL); 143 DffRecord * 144 createDffRecord(WW8Stream & rStream, sal_uInt32 nOffset, 145 sal_uInt32 * nSize = NULL); 146 147 }} 148 149 #endif 150