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 10cdf0e10cSrcweir * 11*f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 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. 19cdf0e10cSrcweir * 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 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 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 } 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 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 452cdf0e10cSrcweir SvxNumValueSet::~SvxNumValueSet() 453cdf0e10cSrcweir { 454cdf0e10cSrcweir delete pVDev; 455cdf0e10cSrcweir } 456cdf0e10cSrcweir /* -----------------------------30.01.01 16:24-------------------------------- 457cdf0e10cSrcweir 458cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 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 ---------------------------------------------------------------------------*/ 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 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 515cdf0e10cSrcweir SvxBmpNumValueSet::~SvxBmpNumValueSet() 516cdf0e10cSrcweir { 517cdf0e10cSrcweir GalleryExplorer::EndLocking(GALLERY_THEME_BULLETS); 518cdf0e10cSrcweir aFormatTimer.Stop(); 519cdf0e10cSrcweir } 520cdf0e10cSrcweir /*-----------------13.02.97 09.41------------------- 521cdf0e10cSrcweir 522cdf0e10cSrcweir --------------------------------------------------*/ 523cdf0e10cSrcweir 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 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