xref: /trunk/main/svx/source/xoutdev/xpool.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_svx.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include <svx/xtable.hxx>
32*cdf0e10cSrcweir #include "svx/xattr.hxx"
33*cdf0e10cSrcweir #include <svx/xpool.hxx>
34*cdf0e10cSrcweir #include <svx/svdattr.hxx>
35*cdf0e10cSrcweir #include <svx/svxids.hrc>
36*cdf0e10cSrcweir #include <svl/itemset.hxx>
37*cdf0e10cSrcweir 
38*cdf0e10cSrcweir /*************************************************************************
39*cdf0e10cSrcweir |*
40*cdf0e10cSrcweir |* Konstruktor
41*cdf0e10cSrcweir |*
42*cdf0e10cSrcweir \************************************************************************/
43*cdf0e10cSrcweir 
44*cdf0e10cSrcweir XOutdevItemPool::XOutdevItemPool(
45*cdf0e10cSrcweir     SfxItemPool* _pMaster,
46*cdf0e10cSrcweir     sal_uInt16 nAttrStart,
47*cdf0e10cSrcweir     sal_uInt16 nAttrEnd,
48*cdf0e10cSrcweir     sal_Bool bLoadRefCounts)
49*cdf0e10cSrcweir :   SfxItemPool(String("XOutdevItemPool", gsl_getSystemTextEncoding()), nAttrStart, nAttrEnd, 0L, 0L, bLoadRefCounts)
50*cdf0e10cSrcweir {
51*cdf0e10cSrcweir     // prepare some defaults
52*cdf0e10cSrcweir     const XubString aNullStr;
53*cdf0e10cSrcweir     const Bitmap aNullBmp;
54*cdf0e10cSrcweir     const basegfx::B2DPolyPolygon aNullPol;
55*cdf0e10cSrcweir     const Color aNullLineCol(RGB_Color(COL_BLACK));
56*cdf0e10cSrcweir     const Color aNullFillCol(RGB_COLORDATA( 153, 204, 255 ));
57*cdf0e10cSrcweir     const Color aNullShadowCol(RGB_Color(COL_LIGHTGRAY));
58*cdf0e10cSrcweir     const XDash aNullDash;
59*cdf0e10cSrcweir     const XGradient aNullGrad(aNullLineCol, RGB_Color(COL_WHITE));
60*cdf0e10cSrcweir     const XHatch aNullHatch(aNullLineCol);
61*cdf0e10cSrcweir 
62*cdf0e10cSrcweir     // get master pointer, evtl. add myself to the end of the pools
63*cdf0e10cSrcweir     if(!_pMaster)
64*cdf0e10cSrcweir     {
65*cdf0e10cSrcweir         _pMaster = this;
66*cdf0e10cSrcweir     }
67*cdf0e10cSrcweir     else
68*cdf0e10cSrcweir     {
69*cdf0e10cSrcweir         SfxItemPool* pParent = _pMaster;
70*cdf0e10cSrcweir 
71*cdf0e10cSrcweir         while(pParent->GetSecondaryPool())
72*cdf0e10cSrcweir         {
73*cdf0e10cSrcweir             pParent = pParent->GetSecondaryPool();
74*cdf0e10cSrcweir         }
75*cdf0e10cSrcweir 
76*cdf0e10cSrcweir         pParent->SetSecondaryPool(this);
77*cdf0e10cSrcweir     }
78*cdf0e10cSrcweir 
79*cdf0e10cSrcweir     // prepare PoolDefaults
80*cdf0e10cSrcweir     mppLocalPoolDefaults = new SfxPoolItem*[GetLastWhich() - GetFirstWhich() + 1];
81*cdf0e10cSrcweir 
82*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_LINESTYLE          -XATTR_START] = new XLineStyleItem;
83*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_LINEDASH           -XATTR_START] = new XLineDashItem(this,aNullDash);
84*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_LINEWIDTH          -XATTR_START] = new XLineWidthItem;
85*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_LINECOLOR          -XATTR_START] = new XLineColorItem(aNullStr,aNullLineCol);
86*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_LINESTART          -XATTR_START] = new XLineStartItem(this,aNullPol);
87*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_LINEEND            -XATTR_START] = new XLineEndItem  (this,aNullPol);
88*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_LINESTARTWIDTH     -XATTR_START] = new XLineStartWidthItem;
89*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_LINEENDWIDTH       -XATTR_START] = new XLineEndWidthItem;
90*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_LINESTARTCENTER    -XATTR_START] = new XLineStartCenterItem;
91*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_LINEENDCENTER      -XATTR_START] = new XLineEndCenterItem;
92*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_LINETRANSPARENCE   -XATTR_START] = new XLineTransparenceItem;
93*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_LINEJOINT            -XATTR_START] = new XLineJointItem;
94*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLSTYLE                -XATTR_START] = new XFillStyleItem;
95*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLCOLOR                -XATTR_START] = new XFillColorItem   (aNullStr,aNullFillCol);
96*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLGRADIENT         -XATTR_START] = new XFillGradientItem(this,aNullGrad);
97*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLHATCH                -XATTR_START] = new XFillHatchItem   (this,aNullHatch);
98*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLBITMAP               -XATTR_START] = new XFillBitmapItem  (this,aNullBmp);
99*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLTRANSPARENCE     -XATTR_START] = new XFillTransparenceItem;
100*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_GRADIENTSTEPCOUNT        -XATTR_START] = new XGradientStepCountItem;
101*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLBMP_TILE         -XATTR_START] = new XFillBmpTileItem;
102*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLBMP_POS          -XATTR_START] = new XFillBmpPosItem;
103*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLBMP_SIZEX            -XATTR_START] = new XFillBmpSizeXItem;
104*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLBMP_SIZEY            -XATTR_START] = new XFillBmpSizeYItem;
105*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLBMP_SIZELOG      -XATTR_START] = new XFillBmpSizeLogItem;
106*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLBMP_TILEOFFSETX  -XATTR_START] = new XFillBmpTileOffsetXItem;
107*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLBMP_TILEOFFSETY  -XATTR_START] = new XFillBmpTileOffsetYItem;
108*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLBMP_STRETCH      -XATTR_START] = new XFillBmpStretchItem;
109*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLBMP_POSOFFSETX       -XATTR_START] = new XFillBmpPosOffsetXItem;
110*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLBMP_POSOFFSETY       -XATTR_START] = new XFillBmpPosOffsetYItem;
111*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLFLOATTRANSPARENCE    -XATTR_START] = new XFillFloatTransparenceItem( this, aNullGrad, sal_False );
112*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_SECONDARYFILLCOLOR       -XATTR_START] = new XSecondaryFillColorItem(aNullStr, aNullFillCol);
113*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FILLBACKGROUND           -XATTR_START] = new XFillBackgroundItem;
114*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FORMTXTSTYLE       -XATTR_START] = new XFormTextStyleItem;
115*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FORMTXTADJUST      -XATTR_START] = new XFormTextAdjustItem;
116*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FORMTXTDISTANCE    -XATTR_START] = new XFormTextDistanceItem;
117*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FORMTXTSTART       -XATTR_START] = new XFormTextStartItem;
118*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FORMTXTMIRROR      -XATTR_START] = new XFormTextMirrorItem;
119*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FORMTXTOUTLINE     -XATTR_START] = new XFormTextOutlineItem;
120*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FORMTXTSHADOW      -XATTR_START] = new XFormTextShadowItem;
121*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FORMTXTSHDWCOLOR   -XATTR_START] = new XFormTextShadowColorItem(aNullStr,aNullShadowCol);
122*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FORMTXTSHDWXVAL    -XATTR_START] = new XFormTextShadowXValItem;
123*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FORMTXTSHDWYVAL    -XATTR_START] = new XFormTextShadowYValItem;
124*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FORMTXTSTDFORM     -XATTR_START] = new XFormTextStdFormItem;
125*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FORMTXTHIDEFORM    -XATTR_START] = new XFormTextHideFormItem;
126*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTR_FORMTXTSHDWTRANSP  -XATTR_START] = new XFormTextShadowTranspItem;
127*cdf0e10cSrcweir 
128*cdf0e10cSrcweir     // create SetItems
129*cdf0e10cSrcweir     SfxItemSet* pSet=new SfxItemSet(*_pMaster, XATTR_LINE_FIRST, XATTR_LINE_LAST);
130*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTRSET_LINE - XATTR_START] = new XLineAttrSetItem(pSet);
131*cdf0e10cSrcweir     pSet=new SfxItemSet(*_pMaster, XATTR_FILL_FIRST, XATTR_FILL_LAST);
132*cdf0e10cSrcweir     mppLocalPoolDefaults[XATTRSET_FILL - XATTR_START] = new XFillAttrSetItem(pSet);
133*cdf0e10cSrcweir 
134*cdf0e10cSrcweir     // create ItemInfos
135*cdf0e10cSrcweir     mpLocalItemInfos = new SfxItemInfo[GetLastWhich() - GetFirstWhich() + 1];
136*cdf0e10cSrcweir     for(sal_uInt16 i(GetFirstWhich()); i <= GetLastWhich(); i++)
137*cdf0e10cSrcweir     {
138*cdf0e10cSrcweir         mpLocalItemInfos[i - XATTR_START]._nSID = 0;
139*cdf0e10cSrcweir         mpLocalItemInfos[i - XATTR_START]._nFlags = SFX_ITEM_POOLABLE;
140*cdf0e10cSrcweir     }
141*cdf0e10cSrcweir 
142*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_LINESTYLE        -XATTR_START]._nSID = SID_ATTR_LINE_STYLE;
143*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_LINEDASH         -XATTR_START]._nSID = SID_ATTR_LINE_DASH;
144*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_LINEWIDTH        -XATTR_START]._nSID = SID_ATTR_LINE_WIDTH;
145*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_LINECOLOR        -XATTR_START]._nSID = SID_ATTR_LINE_COLOR;
146*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_LINESTART        -XATTR_START]._nSID = SID_ATTR_LINE_START;
147*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_LINEEND          -XATTR_START]._nSID = SID_ATTR_LINE_END;
148*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_LINESTARTWIDTH   -XATTR_START]._nSID = SID_ATTR_LINE_STARTWIDTH;
149*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_LINEENDWIDTH     -XATTR_START]._nSID = SID_ATTR_LINE_ENDWIDTH;
150*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_LINESTARTCENTER  -XATTR_START]._nSID = SID_ATTR_LINE_STARTCENTER;
151*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_LINEENDCENTER    -XATTR_START]._nSID = SID_ATTR_LINE_ENDCENTER;
152*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FILLSTYLE        -XATTR_START]._nSID = SID_ATTR_FILL_STYLE;
153*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FILLCOLOR        -XATTR_START]._nSID = SID_ATTR_FILL_COLOR;
154*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FILLGRADIENT     -XATTR_START]._nSID = SID_ATTR_FILL_GRADIENT;
155*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FILLHATCH        -XATTR_START]._nSID = SID_ATTR_FILL_HATCH;
156*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FILLBITMAP       -XATTR_START]._nSID = SID_ATTR_FILL_BITMAP;
157*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FORMTXTSTYLE     -XATTR_START]._nSID = SID_FORMTEXT_STYLE;
158*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FORMTXTADJUST    -XATTR_START]._nSID = SID_FORMTEXT_ADJUST;
159*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FORMTXTDISTANCE  -XATTR_START]._nSID = SID_FORMTEXT_DISTANCE;
160*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FORMTXTSTART     -XATTR_START]._nSID = SID_FORMTEXT_START;
161*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FORMTXTMIRROR    -XATTR_START]._nSID = SID_FORMTEXT_MIRROR;
162*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FORMTXTOUTLINE   -XATTR_START]._nSID = SID_FORMTEXT_OUTLINE;
163*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FORMTXTSHADOW    -XATTR_START]._nSID = SID_FORMTEXT_SHADOW;
164*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FORMTXTSHDWCOLOR -XATTR_START]._nSID = SID_FORMTEXT_SHDWCOLOR;
165*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FORMTXTSHDWXVAL  -XATTR_START]._nSID = SID_FORMTEXT_SHDWXVAL;
166*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FORMTXTSHDWYVAL  -XATTR_START]._nSID = SID_FORMTEXT_SHDWYVAL;
167*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FORMTXTSTDFORM   -XATTR_START]._nSID = SID_FORMTEXT_STDFORM;
168*cdf0e10cSrcweir     mpLocalItemInfos[XATTR_FORMTXTHIDEFORM  -XATTR_START]._nSID = SID_FORMTEXT_HIDEFORM;
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir     // if it's my own creation level, set Defaults and ItemInfos
171*cdf0e10cSrcweir     if(XATTR_START == GetFirstWhich() && XATTR_END == GetLastWhich())
172*cdf0e10cSrcweir     {
173*cdf0e10cSrcweir         SetDefaults(mppLocalPoolDefaults);
174*cdf0e10cSrcweir         SetItemInfos(mpLocalItemInfos);
175*cdf0e10cSrcweir     }
176*cdf0e10cSrcweir }
177*cdf0e10cSrcweir 
178*cdf0e10cSrcweir /*************************************************************************
179*cdf0e10cSrcweir |*
180*cdf0e10cSrcweir |* copy ctor, sorgt dafuer, dass die static defaults gecloned werden
181*cdf0e10cSrcweir |*            (Parameter 2 = sal_True)
182*cdf0e10cSrcweir |*
183*cdf0e10cSrcweir \************************************************************************/
184*cdf0e10cSrcweir 
185*cdf0e10cSrcweir XOutdevItemPool::XOutdevItemPool(const XOutdevItemPool& rPool)
186*cdf0e10cSrcweir :   SfxItemPool(rPool, sal_True),
187*cdf0e10cSrcweir     mppLocalPoolDefaults(0L),
188*cdf0e10cSrcweir     mpLocalItemInfos(0L)
189*cdf0e10cSrcweir {
190*cdf0e10cSrcweir }
191*cdf0e10cSrcweir 
192*cdf0e10cSrcweir /*************************************************************************
193*cdf0e10cSrcweir |*
194*cdf0e10cSrcweir |* Clone()
195*cdf0e10cSrcweir |*
196*cdf0e10cSrcweir \************************************************************************/
197*cdf0e10cSrcweir 
198*cdf0e10cSrcweir SfxItemPool* XOutdevItemPool::Clone() const
199*cdf0e10cSrcweir {
200*cdf0e10cSrcweir     return new XOutdevItemPool(*this);
201*cdf0e10cSrcweir }
202*cdf0e10cSrcweir 
203*cdf0e10cSrcweir /*************************************************************************
204*cdf0e10cSrcweir |*
205*cdf0e10cSrcweir |* Destruktor
206*cdf0e10cSrcweir |*
207*cdf0e10cSrcweir \************************************************************************/
208*cdf0e10cSrcweir 
209*cdf0e10cSrcweir XOutdevItemPool::~XOutdevItemPool()
210*cdf0e10cSrcweir {
211*cdf0e10cSrcweir     Delete();
212*cdf0e10cSrcweir 
213*cdf0e10cSrcweir     // remove own static defaults
214*cdf0e10cSrcweir     if(mppLocalPoolDefaults)
215*cdf0e10cSrcweir     {
216*cdf0e10cSrcweir         SfxPoolItem** ppDefaultItem = mppLocalPoolDefaults;
217*cdf0e10cSrcweir         for(sal_uInt16 i(GetLastWhich() - GetFirstWhich() + 1); i; --i, ++ppDefaultItem)
218*cdf0e10cSrcweir         {
219*cdf0e10cSrcweir             if ( *ppDefaultItem ) //Teile schon von abgel. Klasse abgeraeumt!
220*cdf0e10cSrcweir             {
221*cdf0e10cSrcweir                 SetRefCount( **ppDefaultItem, 0 );
222*cdf0e10cSrcweir                 delete *ppDefaultItem;
223*cdf0e10cSrcweir             }
224*cdf0e10cSrcweir         }
225*cdf0e10cSrcweir 
226*cdf0e10cSrcweir         delete[] mppLocalPoolDefaults;
227*cdf0e10cSrcweir     }
228*cdf0e10cSrcweir 
229*cdf0e10cSrcweir     if(mpLocalItemInfos)
230*cdf0e10cSrcweir     {
231*cdf0e10cSrcweir         delete[] mpLocalItemInfos;
232*cdf0e10cSrcweir     }
233*cdf0e10cSrcweir }
234*cdf0e10cSrcweir 
235*cdf0e10cSrcweir // eof
236