xref: /trunk/main/editeng/source/editeng/editobj2.hxx (revision 914d351e5f5b84e4342a86d6ab8d4aca7308b9bd)
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 _EDITOBJ2_HXX
25 #define _EDITOBJ2_HXX
26 
27 #include <baselist.hxx>
28 #include <editeng/editobj.hxx>
29 #include <editdoc.hxx>
30 
31 #include <unotools/fontcvt.hxx>
32 
33 
34 class SfxStyleSheetPool;
35 
36 class XEditAttribute
37 {
38     friend class ContentInfo;   // fuer DTOR
39     friend class BinTextObject; // fuer DTOR
40 
41 private:
42     const SfxPoolItem*  pItem;
43     sal_uInt16              nStart;
44     sal_uInt16              nEnd;
45 
46                         XEditAttribute();
47                         XEditAttribute( const XEditAttribute& rCopyFrom );
48 
49                         ~XEditAttribute();
50 
51 public:
52                         XEditAttribute( const SfxPoolItem& rAttr );
53                         XEditAttribute( const SfxPoolItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
54 
GetItem() const55     const SfxPoolItem*  GetItem() const             { return pItem; }
56 
GetStart()57     sal_uInt16&             GetStart()                  { return nStart; }
GetEnd()58     sal_uInt16&             GetEnd()                    { return nEnd; }
59 
GetStart() const60     sal_uInt16              GetStart() const            { return nStart; }
GetEnd() const61     sal_uInt16              GetEnd() const              { return nEnd; }
62 
GetLen() const63     sal_uInt16              GetLen() const              { return nEnd-nStart; }
64 
65     inline sal_Bool         IsFeature();
66 
67     inline bool         operator==( const XEditAttribute& rCompare );
68 };
69 
operator ==(const XEditAttribute & rCompare)70 inline bool XEditAttribute::operator==( const XEditAttribute& rCompare )
71 {
72     return  (nStart == rCompare.nStart) &&
73             (nEnd == rCompare.nEnd) &&
74             ( (pItem == rCompare.pItem) ||
75             ( pItem->Which() != rCompare.pItem->Which()) ||
76             (*pItem == *rCompare.pItem));
77 }
78 
IsFeature()79 inline sal_Bool XEditAttribute::IsFeature()
80 {
81     sal_uInt16 nWhich = pItem->Which();
82     return  ( ( nWhich >= EE_FEATURE_START ) &&
83               ( nWhich <=  EE_FEATURE_END ) );
84 }
85 
86 typedef XEditAttribute* XEditAttributePtr;
87 SV_DECL_PTRARR( XEditAttributeListImpl, XEditAttributePtr, 0, 4 )
88 
89 class XEditAttributeList : public XEditAttributeListImpl
90 {
91 public:
92     XEditAttribute* FindAttrib( sal_uInt16 nWhich, sal_uInt16 nChar ) const;
93 };
94 
95 struct XParaPortion
96 {
97     long                nHeight;
98     sal_uInt16              nFirstLineOffset;
99 
100     EditLineList        aLines;
101     TextPortionList     aTextPortions;
102 };
103 
104 typedef XParaPortion* XParaPortionPtr;
105 SV_DECL_PTRARR( XBaseParaPortionList, XParaPortionPtr, 0, 4 )
106 
107 class XParaPortionList : public  XBaseParaPortionList
108 {
109     sal_uIntPtr         nRefDevPtr;
110     OutDevType  eRefDevType;
111     MapMode     aRefMapMode;
112     sal_uLong       nPaperWidth;
113 
114 
115 public:
XParaPortionList(OutputDevice * pRefDev,sal_uLong nPW)116             XParaPortionList( OutputDevice* pRefDev, sal_uLong nPW ) :
117                 aRefMapMode( pRefDev->GetMapMode() )
118                 {
119                     nRefDevPtr = (sal_uIntPtr)pRefDev; nPaperWidth = nPW;
120                     eRefDevType = pRefDev->GetOutDevType();
121                 }
122 
GetRefDevPtr() const123     sal_uIntPtr         GetRefDevPtr() const        { return nRefDevPtr; }
GetPaperWidth() const124     sal_uLong           GetPaperWidth() const       { return nPaperWidth; }
GetRefDevType() const125     OutDevType      GetRefDevType() const       { return eRefDevType; }
GetRefMapMode() const126     const MapMode&  GetRefMapMode() const       { return aRefMapMode; }
127 };
128 
129 /* cl removed because not needed anymore since binfilter
130 struct LoadStoreTempInfos
131 {
132     ByteString              aOrgString_Load;
133 
134     FontToSubsFontConverter hOldSymbolConv_Store;
135     sal_Bool                    bSymbolParagraph_Store;
136 
137 
138     LoadStoreTempInfos() { bSymbolParagraph_Store = sal_False; hOldSymbolConv_Store = NULL; }
139 };
140 */
141 
142 class ContentInfo
143 {
144     friend class BinTextObject;
145 
146 private:
147     String              aText;
148     String              aStyle;
149     XEditAttributeList  aAttribs;
150     SfxStyleFamily      eFamily;
151     SfxItemSet          aParaAttribs;
152     WrongList*          pWrongs;
153 
154 /* cl removed because not needed anymore since binfilter
155     LoadStoreTempInfos* pTempLoadStoreInfos;
156 */
157 
158                         ContentInfo( SfxItemPool& rPool );
159                         ContentInfo( const ContentInfo& rCopyFrom, SfxItemPool& rPoolToUse  );
160 
161 public:
162                         ~ContentInfo();
163 
GetText() const164     const String&       GetText()           const   { return aText; }
GetStyle() const165     const String&       GetStyle()          const   { return aStyle; }
GetAttribs() const166     const XEditAttributeList& GetAttribs()  const   { return aAttribs; }
GetParaAttribs() const167     const SfxItemSet&   GetParaAttribs()    const   { return aParaAttribs; }
GetFamily() const168     SfxStyleFamily      GetFamily()         const   { return eFamily; }
169 
GetText()170     String&             GetText()           { return aText; }
GetStyle()171     String&             GetStyle()          { return aStyle; }
GetAttribs()172     XEditAttributeList& GetAttribs()        { return aAttribs; }
GetParaAttribs()173     SfxItemSet&         GetParaAttribs()    { return aParaAttribs; }
GetFamily()174     SfxStyleFamily&     GetFamily()         { return eFamily; }
175 
GetWrongList() const176     WrongList*          GetWrongList() const            { return pWrongs; }
SetWrongList(WrongList * p)177     void                SetWrongList( WrongList* p )    { pWrongs = p; }
178     bool                operator==( const ContentInfo& rCompare ) const;
179 
180     // #i102062#
181     bool isWrongListEqual(const ContentInfo& rCompare) const;
182 };
183 
184 typedef ContentInfo* ContentInfoPtr;
185 
186 typedef BaseList<ContentInfo> ContentInfoList;
187 
188 // MT 05/00: Sollte mal direkt EditTextObjekt werden => keine virtuellen Methoden mehr.
189 
190 class BinTextObject : public EditTextObject, public SfxItemPoolUser
191 {
192     using EditTextObject::operator==;
193     using EditTextObject::isWrongListEqual;
194 
195 private:
196     ContentInfoList         aContents;
197     SfxItemPool*            pPool;
198     sal_Bool                    bOwnerOfPool;
199     XParaPortionList*       pPortionInfo;
200 
201     sal_uInt32              nObjSettings;
202     sal_uInt16                  nMetric;
203     sal_uInt16                  nVersion;
204     sal_uInt16                  nUserType;
205     sal_uInt16                  nScriptType;
206 
207     sal_Bool                    bVertical;
208     sal_Bool                    bStoreUnicodeStrings;
209 
210 protected:
211     void                    DeleteContents();
212     virtual void            StoreData( SvStream& rOStream ) const;
213     virtual void            CreateData( SvStream& rIStream );
214     sal_Bool                    ImpChangeStyleSheets( const String& rOldName, SfxStyleFamily eOldFamily,
215                                         const String& rNewName, SfxStyleFamily eNewFamily );
216 
217 public:
218                             BinTextObject( SfxItemPool* pPool );
219                             BinTextObject( const BinTextObject& );
220     virtual                 ~BinTextObject();
221 
222     virtual EditTextObject* Clone() const;
223 
224     sal_uInt16                  GetUserType() const;
225     void                    SetUserType( sal_uInt16 n );
226 
227     sal_uLong                   GetObjectSettings() const;
228     void                    SetObjectSettings( sal_uLong n );
229 
230     sal_Bool                    IsVertical() const;
231     void                    SetVertical( sal_Bool b );
232 
233     sal_uInt16                  GetScriptType() const;
234     void                    SetScriptType( sal_uInt16 nType );
235 
236     sal_uInt16                  GetVersion() const; // Solange der Outliner keine Recordlaenge speichert
237 
238     ContentInfo*            CreateAndInsertContent();
239     XEditAttribute*         CreateAttrib( const SfxPoolItem& rItem, sal_uInt16 nStart, sal_uInt16 nEnd );
240     void                    DestroyAttrib( XEditAttribute* pAttr );
241 
GetContents()242     ContentInfoList&        GetContents()           { return aContents; }
GetContents() const243     const ContentInfoList&  GetContents() const     { return aContents; }
GetPool() const244     SfxItemPool*            GetPool() const         { return pPool; }
GetPortionInfo() const245     XParaPortionList*       GetPortionInfo() const  { return pPortionInfo; }
SetPortionInfo(XParaPortionList * pP)246     void                    SetPortionInfo( XParaPortionList* pP )
247                                 { pPortionInfo = pP; }
248 
249     virtual sal_uInt32          GetParagraphCount() const;
250     virtual String          GetText( sal_uInt32 nParagraph ) const;
251     virtual void            Insert( const EditTextObject& rObj, sal_uInt32 nPara );
252     virtual EditTextObject* CreateTextObject( sal_uInt32 nPara, sal_uInt32 nParas = 1 ) const;
253     virtual void            RemoveParagraph( sal_uInt32 nPara );
254 
255     virtual sal_Bool            HasPortionInfo() const;
256     virtual void            ClearPortionInfo();
257 
258     virtual sal_Bool            HasOnlineSpellErrors() const;
259 
260     virtual sal_Bool            HasCharAttribs( sal_uInt16 nWhich = 0 ) const;
261     virtual void            GetCharAttribs( sal_uInt32 nPara, EECharAttribArray& rLst ) const;
262 
263     virtual sal_Bool            RemoveCharAttribs( sal_uInt16 nWhich = 0 );
264     virtual sal_Bool            RemoveParaAttribs( sal_uInt16 nWhich = 0 );
265 
266     virtual void            MergeParaAttribs( const SfxItemSet& rAttribs, sal_uInt16 nStart, sal_uInt16 nEnd );
267 
268     virtual sal_Bool            IsFieldObject() const;
269     virtual const SvxFieldItem* GetField() const;
270     virtual sal_Bool            HasField( TypeId Type = NULL ) const;
271 
272     SfxItemSet              GetParaAttribs( sal_uInt32 nPara ) const;
273     void                    SetParaAttribs( sal_uInt32 nPara, const SfxItemSet& rAttribs );
274 
275     virtual sal_Bool            HasStyleSheet( const XubString& rName, SfxStyleFamily eFamily ) const;
276     virtual void            GetStyleSheet( sal_uInt32 nPara, XubString& rName, SfxStyleFamily& eFamily ) const;
277     virtual void            SetStyleSheet( sal_uInt32 nPara, const XubString& rName, const SfxStyleFamily& eFamily );
278     virtual sal_Bool            ChangeStyleSheets(  const XubString& rOldName, SfxStyleFamily eOldFamily,
279                                                 const String& rNewName, SfxStyleFamily eNewFamily );
280     virtual void            ChangeStyleSheetName( SfxStyleFamily eFamily, const XubString& rOldName, const XubString& rNewName );
281 
282     void                    CreateData300( SvStream& rIStream );
283 
HasMetric() const284     sal_Bool                    HasMetric() const           { return nMetric != 0xFFFF; }
GetMetric() const285     sal_uInt16                  GetMetric() const           { return nMetric; }
SetMetric(sal_uInt16 n)286     void                    SetMetric( sal_uInt16 n )       { nMetric = n; }
287 
IsOwnerOfPool() const288     sal_Bool                    IsOwnerOfPool() const       { return bOwnerOfPool; }
StoreUnicodeStrings(sal_Bool b)289     void                    StoreUnicodeStrings( sal_Bool b ) { bStoreUnicodeStrings = b; }
290 
291 /* cl removed because not needed anymore since binfilter
292     void                    PrepareStore( SfxStyleSheetPool* pStyleSheetPool );
293     void                    FinishStore();
294     void                    FinishLoad( SfxStyleSheetPool* pStyleSheetPool );
295 */
296 
297     bool                    operator==( const BinTextObject& rCompare ) const;
298 
299     // #i102062#
300     bool isWrongListEqual(const BinTextObject& rCompare) const;
301 
302     // from SfxItemPoolUser
303     virtual void ObjectInDestruction(const SfxItemPool& rSfxItemPool);
304 };
305 
306 #endif  // _EDITOBJ2_HXX
307