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