1*f6e50924SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*f6e50924SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*f6e50924SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*f6e50924SAndrew Rist * distributed with this work for additional information
6*f6e50924SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*f6e50924SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*f6e50924SAndrew Rist * "License"); you may not use this file except in compliance
9*f6e50924SAndrew Rist * with the License. You may obtain a copy of the License at
10*f6e50924SAndrew Rist *
11*f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*f6e50924SAndrew Rist *
13*f6e50924SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*f6e50924SAndrew Rist * software distributed under the License is distributed on an
15*f6e50924SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f6e50924SAndrew Rist * KIND, either express or implied. See the License for the
17*f6e50924SAndrew Rist * specific language governing permissions and limitations
18*f6e50924SAndrew Rist * under the License.
19*f6e50924SAndrew Rist *
20*f6e50924SAndrew Rist *************************************************************/
21*f6e50924SAndrew Rist
22*f6e50924SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svx.hxx"
26cdf0e10cSrcweir #include <svx/dialmgr.hxx>
27cdf0e10cSrcweir #ifndef _SVX_DIALOGS_HRC
28cdf0e10cSrcweir #include <svx/dialogs.hrc>
29cdf0e10cSrcweir #endif
30cdf0e10cSrcweir #include <tools/shl.hxx>
31cdf0e10cSrcweir #include <i18npool/mslangid.hxx>
32cdf0e10cSrcweir #include <svtools/valueset.hxx>
33cdf0e10cSrcweir #include <svl/languageoptions.hxx>
34cdf0e10cSrcweir #ifndef _SVX_HELPID_HRC
35cdf0e10cSrcweir #include <helpid.hrc>
36cdf0e10cSrcweir #endif
37cdf0e10cSrcweir #include <editeng/numitem.hxx>
38cdf0e10cSrcweir #include <svl/eitem.hxx>
39cdf0e10cSrcweir #include <vcl/svapp.hxx>
40cdf0e10cSrcweir #include <svx/gallery.hxx>
41cdf0e10cSrcweir #include <svl/urihelper.hxx>
42cdf0e10cSrcweir #include <editeng/brshitem.hxx>
43cdf0e10cSrcweir #include <svl/intitem.hxx>
44cdf0e10cSrcweir #include <sfx2/objsh.hxx>
45cdf0e10cSrcweir #include <vcl/graph.hxx>
46cdf0e10cSrcweir #include <vcl/msgbox.hxx>
47cdf0e10cSrcweir #include <editeng/flstitem.hxx>
48cdf0e10cSrcweir #include <svx/dlgutil.hxx>
49cdf0e10cSrcweir #ifndef _XTABLE_HXX //autogen
50cdf0e10cSrcweir
51cdf0e10cSrcweir #include <svx/xtable.hxx>
52cdf0e10cSrcweir #endif
53cdf0e10cSrcweir #include <svx/drawitem.hxx>
54cdf0e10cSrcweir #include <svx/numvset.hxx>
55cdf0e10cSrcweir #include <svx/htmlmode.hxx>
56cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
57cdf0e10cSrcweir #include <svtools/ctrltool.hxx>
58cdf0e10cSrcweir #include <editeng/unolingu.hxx>
59cdf0e10cSrcweir #include <com/sun/star/style/NumberingType.hpp>
60cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
61cdf0e10cSrcweir #include <com/sun/star/container/XIndexAccess.hpp>
62cdf0e10cSrcweir #include <com/sun/star/text/XDefaultNumberingProvider.hpp>
63cdf0e10cSrcweir #include <com/sun/star/text/XNumberingFormatter.hpp>
64cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp>
65cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
66cdf0e10cSrcweir #include <com/sun/star/text/XNumberingTypeInfo.hpp>
67cdf0e10cSrcweir
68cdf0e10cSrcweir #include <algorithm>
69cdf0e10cSrcweir #include <sfx2/opengrf.hxx>
70cdf0e10cSrcweir
71cdf0e10cSrcweir using namespace com::sun::star::uno;
72cdf0e10cSrcweir using namespace com::sun::star::beans;
73cdf0e10cSrcweir using namespace com::sun::star::lang;
74cdf0e10cSrcweir using namespace com::sun::star::i18n;
75cdf0e10cSrcweir using namespace com::sun::star::text;
76cdf0e10cSrcweir using namespace com::sun::star::container;
77cdf0e10cSrcweir using namespace com::sun::star::style;
78cdf0e10cSrcweir using rtl::OUString;
79cdf0e10cSrcweir
80cdf0e10cSrcweir #define C2U(cChar) OUString::createFromAscii(cChar)
81cdf0e10cSrcweir #define NUM_PAGETYPE_BULLET 0
82cdf0e10cSrcweir #define NUM_PAGETYPE_SINGLENUM 1
83cdf0e10cSrcweir #define NUM_PAGETYPE_NUM 2
84cdf0e10cSrcweir #define NUM_PAGETYPE_BMP 3
85cdf0e10cSrcweir #define PAGETYPE_USER_START 10
86cdf0e10cSrcweir
87cdf0e10cSrcweir #define SHOW_NUMBERING 0
88cdf0e10cSrcweir #define SHOW_BULLET 1
89cdf0e10cSrcweir #define SHOW_BITMAP 2
90cdf0e10cSrcweir
91cdf0e10cSrcweir #define MAX_BMP_WIDTH 16
92cdf0e10cSrcweir #define MAX_BMP_HEIGHT 16
93cdf0e10cSrcweir
94cdf0e10cSrcweir static const sal_Char cNumberingType[] = "NumberingType";
95cdf0e10cSrcweir static const sal_Char cValue[] = "Value";
96cdf0e10cSrcweir static const sal_Char cParentNumbering[] = "ParentNumbering";
97cdf0e10cSrcweir static const sal_Char cPrefix[] = "Prefix";
98cdf0e10cSrcweir static const sal_Char cSuffix[] = "Suffix";
99cdf0e10cSrcweir static const sal_Char cBulletChar[] = "BulletChar";
100cdf0e10cSrcweir static const sal_Char cBulletFontName[] = "BulletFontName";
101cdf0e10cSrcweir
102cdf0e10cSrcweir /* -----------------28.10.98 08:32-------------------
103cdf0e10cSrcweir *
104cdf0e10cSrcweir * --------------------------------------------------*/
105cdf0e10cSrcweir // Die Auswahl an Bullets aus den StarSymbol
106cdf0e10cSrcweir static const sal_Unicode aBulletTypes[] =
107cdf0e10cSrcweir {
108cdf0e10cSrcweir 0x2022,
109cdf0e10cSrcweir 0x25cf,
110cdf0e10cSrcweir 0xe00c,
111cdf0e10cSrcweir 0xe00a,
112cdf0e10cSrcweir 0x2794,
113cdf0e10cSrcweir 0x27a2,
114cdf0e10cSrcweir 0x2717,
115cdf0e10cSrcweir 0x2714
116cdf0e10cSrcweir };
117cdf0e10cSrcweir
lcl_GetDefaultBulletFont()118cdf0e10cSrcweir static Font& lcl_GetDefaultBulletFont()
119cdf0e10cSrcweir {
120cdf0e10cSrcweir static sal_Bool bInit = 0;
121cdf0e10cSrcweir static Font aDefBulletFont( UniString::CreateFromAscii(
122cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM( "StarSymbol" ) ),
123cdf0e10cSrcweir String(), Size( 0, 14 ) );
124cdf0e10cSrcweir if(!bInit)
125cdf0e10cSrcweir {
126cdf0e10cSrcweir aDefBulletFont.SetCharSet( RTL_TEXTENCODING_SYMBOL );
127cdf0e10cSrcweir aDefBulletFont.SetFamily( FAMILY_DONTKNOW );
128cdf0e10cSrcweir aDefBulletFont.SetPitch( PITCH_DONTKNOW );
129cdf0e10cSrcweir aDefBulletFont.SetWeight( WEIGHT_DONTKNOW );
130cdf0e10cSrcweir aDefBulletFont.SetTransparent( sal_True );
131cdf0e10cSrcweir bInit = sal_True;
132cdf0e10cSrcweir }
133cdf0e10cSrcweir return aDefBulletFont;
134cdf0e10cSrcweir }
135cdf0e10cSrcweir
lcl_PaintLevel(OutputDevice * pVDev,sal_Int16 nNumberingType,const OUString & rBulletChar,const OUString & rText,const OUString & rFontName,Point & rLeft,Font & rRuleFont,const Font & rTextFont)136cdf0e10cSrcweir static void lcl_PaintLevel(OutputDevice* pVDev, sal_Int16 nNumberingType,
137cdf0e10cSrcweir const OUString& rBulletChar, const OUString& rText, const OUString& rFontName,
138cdf0e10cSrcweir Point& rLeft, Font& rRuleFont, const Font& rTextFont)
139cdf0e10cSrcweir {
140cdf0e10cSrcweir
141cdf0e10cSrcweir if(NumberingType::CHAR_SPECIAL == nNumberingType )
142cdf0e10cSrcweir {
143cdf0e10cSrcweir rRuleFont.SetStyleName(rFontName);
144cdf0e10cSrcweir pVDev->SetFont(rRuleFont);
145cdf0e10cSrcweir pVDev->DrawText(rLeft, rBulletChar);
146cdf0e10cSrcweir rLeft.X() += pVDev->GetTextWidth(rBulletChar);
147cdf0e10cSrcweir }
148cdf0e10cSrcweir else
149cdf0e10cSrcweir {
150cdf0e10cSrcweir pVDev->SetFont(rTextFont);
151cdf0e10cSrcweir pVDev->DrawText(rLeft, rText);
152cdf0e10cSrcweir rLeft.X() += pVDev->GetTextWidth(rText);
153cdf0e10cSrcweir }
154cdf0e10cSrcweir }
UserDraw(const UserDrawEvent & rUDEvt)155cdf0e10cSrcweir void SvxNumValueSet::UserDraw( const UserDrawEvent& rUDEvt )
156cdf0e10cSrcweir {
157cdf0e10cSrcweir static sal_uInt16 __READONLY_DATA aLinesArr[] =
158cdf0e10cSrcweir {
159cdf0e10cSrcweir 15, 10,
160cdf0e10cSrcweir 20, 30,
161cdf0e10cSrcweir 25, 50,
162cdf0e10cSrcweir 30, 70,
163cdf0e10cSrcweir 35, 90, // up to here line positions
164cdf0e10cSrcweir 05, 10, // character positions
165cdf0e10cSrcweir 10, 30,
166cdf0e10cSrcweir 15, 50,
167cdf0e10cSrcweir 20, 70,
168cdf0e10cSrcweir 25, 90,
169cdf0e10cSrcweir };
170cdf0e10cSrcweir
171cdf0e10cSrcweir const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
172cdf0e10cSrcweir const Color aBackColor = rStyleSettings.GetFieldColor();
173cdf0e10cSrcweir const Color aTextColor = rStyleSettings.GetFieldTextColor();
174cdf0e10cSrcweir
175cdf0e10cSrcweir OutputDevice* pDev = rUDEvt.GetDevice();
176cdf0e10cSrcweir Rectangle aRect = rUDEvt.GetRect();
177cdf0e10cSrcweir sal_uInt16 nItemId = rUDEvt.GetItemId();
178cdf0e10cSrcweir long nRectWidth = aRect.GetWidth();
179cdf0e10cSrcweir long nRectHeight = aRect.GetHeight();
180cdf0e10cSrcweir Size aRectSize(nRectWidth, aRect.GetHeight());
181cdf0e10cSrcweir Point aBLPos = aRect.TopLeft();
182cdf0e10cSrcweir Font aOldFont = pDev->GetFont();
183cdf0e10cSrcweir Color aOldColor = pDev->GetLineColor();
184cdf0e10cSrcweir pDev->SetLineColor(aTextColor);
185cdf0e10cSrcweir Font aFont(OutputDevice::GetDefaultFont(
186cdf0e10cSrcweir DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE));
187cdf0e10cSrcweir
188cdf0e10cSrcweir Size aSize = aFont.GetSize();
189cdf0e10cSrcweir
190cdf0e10cSrcweir Font aRuleFont( lcl_GetDefaultBulletFont() );
191cdf0e10cSrcweir aSize.Height() = nRectHeight/6;
192cdf0e10cSrcweir aRuleFont.SetSize(aSize);
193cdf0e10cSrcweir aRuleFont.SetColor(aTextColor);
194cdf0e10cSrcweir aRuleFont.SetFillColor(aBackColor);
195cdf0e10cSrcweir if(nPageType == NUM_PAGETYPE_BULLET)
196cdf0e10cSrcweir aFont = aRuleFont;
197cdf0e10cSrcweir else if(nPageType == NUM_PAGETYPE_NUM)
198cdf0e10cSrcweir {
199cdf0e10cSrcweir aSize.Height() = nRectHeight/8;
200cdf0e10cSrcweir }
201cdf0e10cSrcweir aFont.SetColor(aTextColor);
202cdf0e10cSrcweir aFont.SetFillColor(aBackColor);
203cdf0e10cSrcweir aFont.SetSize( aSize );
204cdf0e10cSrcweir pDev->SetFont(aFont);
205cdf0e10cSrcweir
206cdf0e10cSrcweir if(!pVDev)
207cdf0e10cSrcweir {
208cdf0e10cSrcweir // Die Linien werden nur einmalig in das VirtualDevice gepainted
209cdf0e10cSrcweir // nur die Gliederungspage bekommt es aktuell
210cdf0e10cSrcweir pVDev = new VirtualDevice(*pDev);
211cdf0e10cSrcweir pVDev->SetMapMode(pDev->GetMapMode());
212cdf0e10cSrcweir pVDev->EnableRTL( IsRTLEnabled() );
213cdf0e10cSrcweir pVDev->SetOutputSize( aRectSize );
214cdf0e10cSrcweir aOrgRect = aRect;
215cdf0e10cSrcweir pVDev->SetFillColor( aBackColor );
216cdf0e10cSrcweir pVDev->DrawRect(aOrgRect);
217cdf0e10cSrcweir
218cdf0e10cSrcweir if(aBackColor == aLineColor)
219cdf0e10cSrcweir aLineColor.Invert();
220cdf0e10cSrcweir pVDev->SetLineColor(aLineColor);
221cdf0e10cSrcweir // Linien nur einmalig Zeichnen
222cdf0e10cSrcweir if(nPageType != NUM_PAGETYPE_NUM)
223cdf0e10cSrcweir {
224cdf0e10cSrcweir Point aStart(aBLPos.X() + nRectWidth *25 / 100,0);
225cdf0e10cSrcweir Point aEnd(aBLPos.X() + nRectWidth * 9 / 10,0);
226cdf0e10cSrcweir for( sal_uInt16 i = 11; i < 100; i += 33)
227cdf0e10cSrcweir {
228cdf0e10cSrcweir aStart.Y() = aEnd.Y() = aBLPos.Y() + nRectHeight * i / 100;
229cdf0e10cSrcweir pVDev->DrawLine(aStart, aEnd);
230cdf0e10cSrcweir aStart.Y() = aEnd.Y() = aBLPos.Y() + nRectHeight * (i + 11) / 100;
231cdf0e10cSrcweir pVDev->DrawLine(aStart, aEnd);
232cdf0e10cSrcweir }
233cdf0e10cSrcweir }
234cdf0e10cSrcweir }
235cdf0e10cSrcweir pDev->DrawOutDev( aRect.TopLeft(), aRectSize,
236cdf0e10cSrcweir aOrgRect.TopLeft(), aRectSize,
237cdf0e10cSrcweir *pVDev );
238cdf0e10cSrcweir // jetzt kommt der Text
239cdf0e10cSrcweir const OUString sValue(C2U(cValue));
240cdf0e10cSrcweir if( NUM_PAGETYPE_SINGLENUM == nPageType ||
241cdf0e10cSrcweir NUM_PAGETYPE_BULLET == nPageType )
242cdf0e10cSrcweir {
243cdf0e10cSrcweir Point aStart(aBLPos.X() + nRectWidth / 9,0);
244cdf0e10cSrcweir for( sal_uInt16 i = 0; i < 3; i++ )
245cdf0e10cSrcweir {
246cdf0e10cSrcweir sal_uInt16 nY = 11 + i * 33;
247cdf0e10cSrcweir aStart.Y() = aBLPos.Y() + nRectHeight * nY / 100;
248cdf0e10cSrcweir String sText;
249cdf0e10cSrcweir if(nPageType == NUM_PAGETYPE_BULLET)
250cdf0e10cSrcweir {
251cdf0e10cSrcweir sText = aBulletTypes[nItemId - 1];
252cdf0e10cSrcweir aStart.Y() -= pDev->GetTextHeight()/2;
253cdf0e10cSrcweir aStart.X() = aBLPos.X() + 5;
254cdf0e10cSrcweir }
255cdf0e10cSrcweir else
256cdf0e10cSrcweir {
257cdf0e10cSrcweir if(xFormatter.is() && aNumSettings.getLength() > nItemId - 1)
258cdf0e10cSrcweir {
259cdf0e10cSrcweir Sequence<PropertyValue> aLevel = aNumSettings.getConstArray()[nItemId - 1];
260cdf0e10cSrcweir try
261cdf0e10cSrcweir {
262cdf0e10cSrcweir aLevel.realloc(aLevel.getLength() + 1);
263cdf0e10cSrcweir PropertyValue& rValue = aLevel.getArray()[aLevel.getLength() - 1];
264cdf0e10cSrcweir rValue.Name = sValue;
265cdf0e10cSrcweir rValue.Value <<= (sal_Int32)(i + 1);
266cdf0e10cSrcweir sText = xFormatter->makeNumberingString( aLevel, aLocale );
267cdf0e10cSrcweir }
268cdf0e10cSrcweir catch(Exception&)
269cdf0e10cSrcweir {
270cdf0e10cSrcweir DBG_ERROR("Exception in DefaultNumberingProvider::makeNumberingString");
271cdf0e10cSrcweir }
272cdf0e10cSrcweir }
273cdf0e10cSrcweir // knapp neben dem linken Rand beginnen
274cdf0e10cSrcweir aStart.X() = aBLPos.X() + 2;
275cdf0e10cSrcweir aStart.Y() -= pDev->GetTextHeight()/2;
276cdf0e10cSrcweir }
277cdf0e10cSrcweir pDev->DrawText(aStart, sText);
278cdf0e10cSrcweir }
279cdf0e10cSrcweir }
280cdf0e10cSrcweir else if(NUM_PAGETYPE_NUM == nPageType )
281cdf0e10cSrcweir {
282cdf0e10cSrcweir // Outline numbering has to be painted into the virtual device
283cdf0e10cSrcweir // to get correct lines
284cdf0e10cSrcweir // has to be made again
285cdf0e10cSrcweir pVDev->DrawRect(aOrgRect);
286cdf0e10cSrcweir long nStartX = aOrgRect.TopLeft().X();
287cdf0e10cSrcweir long nStartY = aOrgRect.TopLeft().Y();
288cdf0e10cSrcweir
289cdf0e10cSrcweir if(xFormatter.is() && aOutlineSettings.getLength() > nItemId - 1)
290cdf0e10cSrcweir {
291cdf0e10cSrcweir Reference<XIndexAccess> xLevel = aOutlineSettings.getArray()[nItemId - 1];
292cdf0e10cSrcweir try
293cdf0e10cSrcweir {
294cdf0e10cSrcweir OUString sLevelTexts[5];
295cdf0e10cSrcweir OUString sFontNames[5];
296cdf0e10cSrcweir OUString sBulletChars[5];
297cdf0e10cSrcweir sal_Int16 aNumberingTypes[5];
298cdf0e10cSrcweir OUString sPrefixes[5];
299cdf0e10cSrcweir OUString sSuffixes[5];
300cdf0e10cSrcweir sal_Int16 aParentNumberings[5];
301cdf0e10cSrcweir
302cdf0e10cSrcweir sal_Int32 nLevelCount = xLevel->getCount();
303cdf0e10cSrcweir if(nLevelCount > 5)
304cdf0e10cSrcweir nLevelCount = 5;
305cdf0e10cSrcweir for( sal_Int32 i = 0; i < nLevelCount && i < 5; i++)
306cdf0e10cSrcweir {
307cdf0e10cSrcweir long nTop = nStartY + nRectHeight * (aLinesArr[2 * i + 11])/100 ;
308cdf0e10cSrcweir Point aLeft(nStartX + nRectWidth * (aLinesArr[2 * i + 10])/ 100, nTop );
309cdf0e10cSrcweir
310cdf0e10cSrcweir Any aLevelAny = xLevel->getByIndex(i);
311cdf0e10cSrcweir Sequence<PropertyValue> aLevel;
312cdf0e10cSrcweir aLevelAny >>= aLevel;
313cdf0e10cSrcweir const PropertyValue* pValues = aLevel.getConstArray();
314cdf0e10cSrcweir aNumberingTypes[i] = 0;
315cdf0e10cSrcweir for(sal_Int32 nProperty = 0; nProperty < aLevel.getLength() - 1; nProperty++)
316cdf0e10cSrcweir {
317cdf0e10cSrcweir if(pValues[nProperty].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cNumberingType)))
318cdf0e10cSrcweir pValues[nProperty].Value >>= aNumberingTypes[i];
319cdf0e10cSrcweir else if(pValues[nProperty].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cBulletFontName)))
320cdf0e10cSrcweir pValues[nProperty].Value >>= sFontNames[i];
321cdf0e10cSrcweir else if(pValues[nProperty].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cBulletChar)))
322cdf0e10cSrcweir pValues[nProperty].Value >>= sBulletChars[i];
323cdf0e10cSrcweir else if(pValues[nProperty].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cPrefix)))
324cdf0e10cSrcweir pValues[nProperty].Value >>= sPrefixes[i];
325cdf0e10cSrcweir else if(pValues[nProperty].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cSuffix)))
326cdf0e10cSrcweir pValues[nProperty].Value >>= sSuffixes[i];
327cdf0e10cSrcweir else if(pValues[nProperty].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cParentNumbering)))
328cdf0e10cSrcweir pValues[nProperty].Value >>= aParentNumberings[i];
329cdf0e10cSrcweir }
330cdf0e10cSrcweir Sequence< PropertyValue > aProperties(2);
331cdf0e10cSrcweir PropertyValue* pProperties = aProperties.getArray();
332cdf0e10cSrcweir pProperties[0].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberingType"));
333cdf0e10cSrcweir pProperties[0].Value <<= aNumberingTypes[i];
334cdf0e10cSrcweir pProperties[1].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Value"));
335cdf0e10cSrcweir pProperties[1].Value <<= (sal_Int32)1;
336cdf0e10cSrcweir try
337cdf0e10cSrcweir {
338cdf0e10cSrcweir sLevelTexts[i] = xFormatter->makeNumberingString( aProperties, aLocale );
339cdf0e10cSrcweir }
340cdf0e10cSrcweir catch(Exception&)
341cdf0e10cSrcweir {
342cdf0e10cSrcweir DBG_ERROR("Exception in DefaultNumberingProvider::makeNumberingString");
343cdf0e10cSrcweir }
344cdf0e10cSrcweir
345cdf0e10cSrcweir aLeft.Y() -= (pDev->GetTextHeight()/2);
346cdf0e10cSrcweir if(sPrefixes[i].getLength() &&
347cdf0e10cSrcweir !sPrefixes[i].equalsAsciiL(" ", 1) &&
348cdf0e10cSrcweir sPrefixes[i].getStr()[0] != 0)
349cdf0e10cSrcweir {
350cdf0e10cSrcweir pVDev->SetFont(aFont);
351cdf0e10cSrcweir pVDev->DrawText(aLeft, sPrefixes[i]);
352cdf0e10cSrcweir aLeft.X() += pDev->GetTextWidth(sPrefixes[i]);
353cdf0e10cSrcweir }
354cdf0e10cSrcweir if(aParentNumberings[i])
355cdf0e10cSrcweir {
356cdf0e10cSrcweir //insert old numberings here
357cdf0e10cSrcweir sal_Int32 nStartLevel = std::min((sal_Int32)aParentNumberings[i], i);
358cdf0e10cSrcweir for(sal_Int32 nParentLevel = i - nStartLevel; nParentLevel < i; nParentLevel++)
359cdf0e10cSrcweir {
360cdf0e10cSrcweir OUString sTmp(sLevelTexts[nParentLevel]);
361cdf0e10cSrcweir sTmp += C2U(".");
362cdf0e10cSrcweir lcl_PaintLevel(pVDev,
363cdf0e10cSrcweir aNumberingTypes[nParentLevel],
364cdf0e10cSrcweir sBulletChars[nParentLevel],
365cdf0e10cSrcweir sTmp,
366cdf0e10cSrcweir sFontNames[nParentLevel],
367cdf0e10cSrcweir aLeft,
368cdf0e10cSrcweir aRuleFont,
369cdf0e10cSrcweir aFont);
370cdf0e10cSrcweir }
371cdf0e10cSrcweir }
372cdf0e10cSrcweir lcl_PaintLevel(pVDev,
373cdf0e10cSrcweir aNumberingTypes[i],
374cdf0e10cSrcweir sBulletChars[i],
375cdf0e10cSrcweir sLevelTexts[i],
376cdf0e10cSrcweir sFontNames[i],
377cdf0e10cSrcweir aLeft,
378cdf0e10cSrcweir aRuleFont,
379cdf0e10cSrcweir aFont);
380cdf0e10cSrcweir if(sSuffixes[i].getLength()&&
381cdf0e10cSrcweir !sSuffixes[i].equalsAsciiL(" ", 1) &&
382cdf0e10cSrcweir sSuffixes[i].getStr()[0] != 0)
383cdf0e10cSrcweir {
384cdf0e10cSrcweir pVDev->SetFont(aFont);
385cdf0e10cSrcweir pVDev->DrawText(aLeft, sSuffixes[i]);
386cdf0e10cSrcweir aLeft.X() += pDev->GetTextWidth(sSuffixes[i]);
387cdf0e10cSrcweir }
388cdf0e10cSrcweir
389cdf0e10cSrcweir long nLineTop = nStartY + nRectHeight * aLinesArr[2 * i + 1]/100 ;
390cdf0e10cSrcweir Point aLineLeft(aLeft.X() /*+ nStartX + nRectWidth * aLinesArr[2 * i]/ 100*/, nLineTop );
391cdf0e10cSrcweir Point aLineRight(nStartX + nRectWidth * 90 /100, nLineTop );
392cdf0e10cSrcweir pVDev->DrawLine(aLineLeft, aLineRight);
393cdf0e10cSrcweir }
394cdf0e10cSrcweir
395cdf0e10cSrcweir }
396cdf0e10cSrcweir #ifdef DBG_UTIL
397cdf0e10cSrcweir catch(Exception&)
398cdf0e10cSrcweir {
399cdf0e10cSrcweir static sal_Bool bAssert = sal_False;
400cdf0e10cSrcweir if(!bAssert)
401cdf0e10cSrcweir {
402cdf0e10cSrcweir DBG_ERROR("exception in ::UserDraw");
403cdf0e10cSrcweir bAssert = sal_True;
404cdf0e10cSrcweir }
405cdf0e10cSrcweir }
406cdf0e10cSrcweir #else
407cdf0e10cSrcweir catch(Exception&)
408cdf0e10cSrcweir {
409cdf0e10cSrcweir }
410cdf0e10cSrcweir #endif
411cdf0e10cSrcweir }
412cdf0e10cSrcweir pDev->DrawOutDev( aRect.TopLeft(), aRectSize,
413cdf0e10cSrcweir aOrgRect.TopLeft(), aRectSize,
414cdf0e10cSrcweir *pVDev );
415cdf0e10cSrcweir }
416cdf0e10cSrcweir
417cdf0e10cSrcweir pDev->SetFont(aOldFont);
418cdf0e10cSrcweir pDev->SetLineColor(aOldColor);
419cdf0e10cSrcweir }
420cdf0e10cSrcweir
421cdf0e10cSrcweir /**************************************************************************/
422cdf0e10cSrcweir /* */
423cdf0e10cSrcweir /* */
424cdf0e10cSrcweir /**************************************************************************/
425cdf0e10cSrcweir
SvxNumValueSet(Window * pParent,const ResId & rResId,sal_uInt16 nType)426cdf0e10cSrcweir SvxNumValueSet::SvxNumValueSet( Window* pParent, const ResId& rResId, sal_uInt16 nType ) :
427cdf0e10cSrcweir
428cdf0e10cSrcweir ValueSet( pParent, rResId ),
429cdf0e10cSrcweir
430cdf0e10cSrcweir aLineColor ( COL_LIGHTGRAY ),
431cdf0e10cSrcweir nPageType ( nType ),
432cdf0e10cSrcweir bHTMLMode ( sal_False ),
433cdf0e10cSrcweir pVDev ( NULL )
434cdf0e10cSrcweir {
435cdf0e10cSrcweir SetColCount( 4 );
436cdf0e10cSrcweir SetLineCount( 2 );
437cdf0e10cSrcweir SetStyle( GetStyle() | WB_ITEMBORDER | WB_DOUBLEBORDER );
438cdf0e10cSrcweir if(NUM_PAGETYPE_BULLET == nType)
439cdf0e10cSrcweir {
440cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < 8; i++ )
441cdf0e10cSrcweir {
442cdf0e10cSrcweir InsertItem( i + 1, i );
443cdf0e10cSrcweir SetItemText( i + 1, SVX_RESSTR( RID_SVXSTR_BULLET_DESCRIPTIONS + i ) );
444cdf0e10cSrcweir }
445cdf0e10cSrcweir }
446cdf0e10cSrcweir }
447cdf0e10cSrcweir
448cdf0e10cSrcweir /*-----------------08.02.97 12.38-------------------
449cdf0e10cSrcweir
450cdf0e10cSrcweir --------------------------------------------------*/
451cdf0e10cSrcweir
~SvxNumValueSet()452cdf0e10cSrcweir SvxNumValueSet::~SvxNumValueSet()
453cdf0e10cSrcweir {
454cdf0e10cSrcweir delete pVDev;
455cdf0e10cSrcweir }
456cdf0e10cSrcweir /* -----------------------------30.01.01 16:24--------------------------------
457cdf0e10cSrcweir
458cdf0e10cSrcweir ---------------------------------------------------------------------------*/
SetNumberingSettings(const Sequence<Sequence<PropertyValue>> & aNum,Reference<XNumberingFormatter> & xFormat,const Locale & rLocale)459cdf0e10cSrcweir void SvxNumValueSet::SetNumberingSettings(
460cdf0e10cSrcweir const Sequence<Sequence<PropertyValue> >& aNum,
461cdf0e10cSrcweir Reference<XNumberingFormatter>& xFormat,
462cdf0e10cSrcweir const Locale& rLocale )
463cdf0e10cSrcweir {
464cdf0e10cSrcweir aNumSettings = aNum;
465cdf0e10cSrcweir xFormatter = xFormat;
466cdf0e10cSrcweir aLocale = rLocale;
467cdf0e10cSrcweir if(aNum.getLength() > 8)
468cdf0e10cSrcweir SetStyle( GetStyle()|WB_VSCROLL);
469cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < aNum.getLength(); i++ )
470cdf0e10cSrcweir {
471cdf0e10cSrcweir InsertItem( i + 1, i );
472cdf0e10cSrcweir if( i < 8 )
473cdf0e10cSrcweir SetItemText( i + 1, SVX_RESSTR( RID_SVXSTR_SINGLENUM_DESCRIPTIONS + i ));
474cdf0e10cSrcweir }
475cdf0e10cSrcweir }
476cdf0e10cSrcweir /* -----------------------------31.01.01 09:50--------------------------------
477cdf0e10cSrcweir
478cdf0e10cSrcweir ---------------------------------------------------------------------------*/
SetOutlineNumberingSettings(Sequence<Reference<XIndexAccess>> & rOutline,Reference<XNumberingFormatter> & xFormat,const Locale & rLocale)479cdf0e10cSrcweir void SvxNumValueSet::SetOutlineNumberingSettings(
480cdf0e10cSrcweir Sequence<Reference<XIndexAccess> >& rOutline,
481cdf0e10cSrcweir Reference<XNumberingFormatter>& xFormat,
482cdf0e10cSrcweir const Locale& rLocale)
483cdf0e10cSrcweir {
484cdf0e10cSrcweir aOutlineSettings = rOutline;
485cdf0e10cSrcweir xFormatter = xFormat;
486cdf0e10cSrcweir aLocale = rLocale;
487cdf0e10cSrcweir if(aOutlineSettings.getLength() > 8)
488cdf0e10cSrcweir SetStyle( GetStyle() | WB_VSCROLL );
489cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < aOutlineSettings.getLength(); i++ )
490cdf0e10cSrcweir {
491cdf0e10cSrcweir InsertItem( i + 1, i );
492cdf0e10cSrcweir if( i < 8 )
493cdf0e10cSrcweir SetItemText( i + 1, SVX_RESSTR( RID_SVXSTR_OUTLINENUM_DESCRIPTIONS + i ));
494cdf0e10cSrcweir }
495cdf0e10cSrcweir }
496cdf0e10cSrcweir
SvxBmpNumValueSet(Window * pParent,const ResId & rResId)497cdf0e10cSrcweir SvxBmpNumValueSet::SvxBmpNumValueSet( Window* pParent, const ResId& rResId/*, const List& rStrNames*/ ) :
498cdf0e10cSrcweir
499cdf0e10cSrcweir SvxNumValueSet( pParent, rResId, NUM_PAGETYPE_BMP ),
500cdf0e10cSrcweir // rStrList ( rStrNames ),
501cdf0e10cSrcweir bGrfNotFound( sal_False )
502cdf0e10cSrcweir
503cdf0e10cSrcweir {
504cdf0e10cSrcweir GalleryExplorer::BeginLocking(GALLERY_THEME_BULLETS);
505cdf0e10cSrcweir SetStyle( GetStyle() | WB_VSCROLL );
506cdf0e10cSrcweir SetLineCount( 3 );
507cdf0e10cSrcweir aFormatTimer.SetTimeout(300);
508cdf0e10cSrcweir aFormatTimer.SetTimeoutHdl(LINK(this, SvxBmpNumValueSet, FormatHdl_Impl));
509cdf0e10cSrcweir }
510cdf0e10cSrcweir
511cdf0e10cSrcweir /*-----------------13.02.97 09.41-------------------
512cdf0e10cSrcweir
513cdf0e10cSrcweir --------------------------------------------------*/
514cdf0e10cSrcweir
~SvxBmpNumValueSet()515cdf0e10cSrcweir SvxBmpNumValueSet::~SvxBmpNumValueSet()
516cdf0e10cSrcweir {
517cdf0e10cSrcweir GalleryExplorer::EndLocking(GALLERY_THEME_BULLETS);
518cdf0e10cSrcweir aFormatTimer.Stop();
519cdf0e10cSrcweir }
520cdf0e10cSrcweir /*-----------------13.02.97 09.41-------------------
521cdf0e10cSrcweir
522cdf0e10cSrcweir --------------------------------------------------*/
523cdf0e10cSrcweir
UserDraw(const UserDrawEvent & rUDEvt)524cdf0e10cSrcweir void SvxBmpNumValueSet::UserDraw( const UserDrawEvent& rUDEvt )
525cdf0e10cSrcweir {
526cdf0e10cSrcweir SvxNumValueSet::UserDraw(rUDEvt);
527cdf0e10cSrcweir
528cdf0e10cSrcweir Rectangle aRect = rUDEvt.GetRect();
529cdf0e10cSrcweir OutputDevice* pDev = rUDEvt.GetDevice();
530cdf0e10cSrcweir sal_uInt16 nItemId = rUDEvt.GetItemId();
531cdf0e10cSrcweir Point aBLPos = aRect.TopLeft();
532cdf0e10cSrcweir
533cdf0e10cSrcweir int nRectHeight = aRect.GetHeight();
534cdf0e10cSrcweir Size aSize(nRectHeight/8, nRectHeight/8);
535cdf0e10cSrcweir
536cdf0e10cSrcweir Graphic aGraphic;
537cdf0e10cSrcweir if(!GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, nItemId - 1,
538cdf0e10cSrcweir &aGraphic, NULL))
539cdf0e10cSrcweir {
540cdf0e10cSrcweir bGrfNotFound = sal_True;
541cdf0e10cSrcweir }
542cdf0e10cSrcweir else
543cdf0e10cSrcweir {
544cdf0e10cSrcweir Point aPos(aBLPos.X() + 5, 0);
545cdf0e10cSrcweir for( sal_uInt16 i = 0; i < 3; i++ )
546cdf0e10cSrcweir {
547cdf0e10cSrcweir sal_uInt16 nY = 11 + i * 33;
548cdf0e10cSrcweir aPos.Y() = aBLPos.Y() + nRectHeight * nY / 100;
549cdf0e10cSrcweir aGraphic.Draw( pDev, aPos, aSize );
550cdf0e10cSrcweir }
551cdf0e10cSrcweir }
552cdf0e10cSrcweir }
553cdf0e10cSrcweir
554cdf0e10cSrcweir /*-----------------14.02.97 07.34-------------------
555cdf0e10cSrcweir
556cdf0e10cSrcweir --------------------------------------------------*/
557cdf0e10cSrcweir
IMPL_LINK(SvxBmpNumValueSet,FormatHdl_Impl,Timer *,EMPTYARG)558cdf0e10cSrcweir IMPL_LINK(SvxBmpNumValueSet, FormatHdl_Impl, Timer*, EMPTYARG)
559cdf0e10cSrcweir {
560cdf0e10cSrcweir // nur, wenn eine Grafik nicht da war, muss formatiert werden
561cdf0e10cSrcweir if(bGrfNotFound)
562cdf0e10cSrcweir {
563cdf0e10cSrcweir bGrfNotFound = sal_False;
564cdf0e10cSrcweir Format();
565cdf0e10cSrcweir }
566cdf0e10cSrcweir Invalidate();
567cdf0e10cSrcweir return 0;
568cdf0e10cSrcweir }
569