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