LibreOffice Module svx (master) 1
svxbmpnumvalueset.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <sal/config.h>
21
22#include <svx/dialmgr.hxx>
23#include <svx/strings.hrc>
26#include <svtools/valueset.hxx>
27#include <editeng/numitem.hxx>
28#include <svx/gallery.hxx>
29#include <vcl/event.hxx>
30#include <vcl/graph.hxx>
31#include <vcl/virdev.hxx>
32#include <svx/numvset.hxx>
33#include <com/sun/star/style/NumberingType.hpp>
34#include <com/sun/star/container/XIndexAccess.hpp>
35#include <com/sun/star/text/XNumberingFormatter.hpp>
36#include <com/sun/star/beans/PropertyValue.hpp>
37
38#include <algorithm>
39
40#include <uiobject.hxx>
41
42using namespace com::sun::star::uno;
43using namespace com::sun::star::beans;
44using namespace com::sun::star::lang;
45using namespace com::sun::star::text;
46using namespace com::sun::star::container;
47using namespace com::sun::star::style;
48
49
50// The selection of bullets from the star symbol
52{
53 0x2022,
54 0x25cf,
55 0xe00c,
56 0xe00a,
57 0x2794,
58 0x27a2,
59 0x2717,
60 0x2714
61};
62
64{
65 static vcl::Font aDefBulletFont = []()
66 {
67 static vcl::Font tmp("OpenSymbol", "", Size(0, 14));
68 tmp.SetCharSet( RTL_TEXTENCODING_SYMBOL );
72 tmp.SetTransparent( true );
73 return tmp;
74 }();
75 return aDefBulletFont;
76}
77
78static void lcl_PaintLevel(OutputDevice* pVDev, sal_Int16 nNumberingType,
79 const OUString& rBulletChar, const OUString& rText, const OUString& rFontName,
80 Point& rLeft, vcl::Font& rRuleFont, const vcl::Font& rTextFont)
81{
82
83 if(NumberingType::CHAR_SPECIAL == nNumberingType )
84 {
85 rRuleFont.SetStyleName(rFontName);
86 pVDev->SetFont(rRuleFont);
87 pVDev->DrawText(rLeft, rBulletChar);
88 rLeft.AdjustX(pVDev->GetTextWidth(rBulletChar) );
89 }
90 else
91 {
92 pVDev->SetFont(rTextFont);
93 pVDev->DrawText(rLeft, rText);
94 rLeft.AdjustX(pVDev->GetTextWidth(rText) );
95 }
96}
97
99{
100 RID_SVXSTR_BULLET_DESCRIPTION_0,
101 RID_SVXSTR_BULLET_DESCRIPTION_1,
102 RID_SVXSTR_BULLET_DESCRIPTION_2,
103 RID_SVXSTR_BULLET_DESCRIPTION_3,
104 RID_SVXSTR_BULLET_DESCRIPTION_4,
105 RID_SVXSTR_BULLET_DESCRIPTION_5,
106 RID_SVXSTR_BULLET_DESCRIPTION_6,
107 RID_SVXSTR_BULLET_DESCRIPTION_7
108};
109
111{
112 RID_SVXSTR_SINGLENUM_DESCRIPTION_0,
113 RID_SVXSTR_SINGLENUM_DESCRIPTION_1,
114 RID_SVXSTR_SINGLENUM_DESCRIPTION_2,
115 RID_SVXSTR_SINGLENUM_DESCRIPTION_3,
116 RID_SVXSTR_SINGLENUM_DESCRIPTION_4,
117 RID_SVXSTR_SINGLENUM_DESCRIPTION_5,
118 RID_SVXSTR_SINGLENUM_DESCRIPTION_6,
119 RID_SVXSTR_SINGLENUM_DESCRIPTION_7
120};
121
123{
124 RID_SVXSTR_OUTLINENUM_DESCRIPTION_0,
125 RID_SVXSTR_OUTLINENUM_DESCRIPTION_1,
126 RID_SVXSTR_OUTLINENUM_DESCRIPTION_2,
127 RID_SVXSTR_OUTLINENUM_DESCRIPTION_3,
128 RID_SVXSTR_OUTLINENUM_DESCRIPTION_4,
129 RID_SVXSTR_OUTLINENUM_DESCRIPTION_5,
130 RID_SVXSTR_OUTLINENUM_DESCRIPTION_6,
131 RID_SVXSTR_OUTLINENUM_DESCRIPTION_7
132};
133
135{
136 static const sal_uInt16 aLinesArr[] =
137 {
138 15, 10,
139 20, 30,
140 25, 50,
141 30, 70,
142 35, 90, // up to here line positions
143 5, 10, // character positions
144 10, 30,
145 15, 50,
146 20, 70,
147 25, 90,
148 };
149
150 const Color aBackColor(COL_WHITE);
151 const Color aTextColor(COL_BLACK);
152
153 vcl::RenderContext* pDev = rUDEvt.GetRenderContext();
154 tools::Rectangle aRect = rUDEvt.GetRect();
155 sal_uInt16 nItemId = rUDEvt.GetItemId();
156
157 tools::Long nRectWidth = aRect.GetWidth();
158 tools::Long nRectHeight = aRect.GetHeight();
159 Size aRectSize(nRectWidth, aRect.GetHeight());
160 Point aBLPos = aRect.TopLeft();
161 vcl::Font aOldFont = pDev->GetFont();
162 Color aOldColor = pDev->GetLineColor();
163 pDev->SetLineColor(aTextColor);
165 DefaultFontType::UI_SANS, MsLangId::getConfiguredSystemLanguage(), GetDefaultFontFlags::OnlyOne));
166
167 Size aSize = aFont.GetFontSize();
168
169 vcl::Font aRuleFont( lcl_GetDefaultBulletFont() );
170 aSize.setHeight( nRectHeight/6 );
171 aRuleFont.SetFontSize(aSize);
172 aRuleFont.SetColor(aTextColor);
173 aRuleFont.SetFillColor(aBackColor);
175 aFont = aRuleFont;
177 {
178 aSize.setHeight( nRectHeight/8 );
179 }
180 aFont.SetColor(aTextColor);
181 aFont.SetFillColor(aBackColor);
182 aFont.SetFontSize( aSize );
183 pDev->SetFont(aFont);
184
185 if(!pVDev)
186 {
187 // The lines are only one time in the virtual device, only the outline
188 // page is currently done
190 pVDev->SetMapMode(pDev->GetMapMode());
191 pVDev->EnableRTL( IsRTLEnabled() );
192 pVDev->SetOutputSize( aRectSize );
193 aOrgRect = aRect;
194 pVDev->SetFillColor( aBackColor );
195 pVDev->SetLineColor(COL_LIGHTGRAY);
196 // Draw line only once
198 {
199 Point aStart(aBLPos.X() + nRectWidth *25 / 100,0);
200 Point aEnd(aBLPos.X() + nRectWidth * 9 / 10,0);
201 for( sal_uInt16 i = 11; i < 100; i += 33)
202 {
203 aStart.setY( aBLPos.Y() + nRectHeight * i / 100 );
204 aEnd.setY( aStart.Y() );
205 pVDev->DrawLine(aStart, aEnd);
206 aStart.setY( aBLPos.Y() + nRectHeight * (i + 11) / 100 );
207 aEnd.setY( aStart.Y() );
208 pVDev->DrawLine(aStart, aEnd);
209 }
210 }
211 }
212 pDev->DrawOutDev( aRect.TopLeft(), aRectSize,
213 aOrgRect.TopLeft(), aRectSize,
214 *pVDev );
215 // Now comes the text
216 static constexpr OUStringLiteral sValue(u"Value");
219 {
220 Point aStart(aBLPos.X() + nRectWidth / 9,0);
221 for( sal_uInt16 i = 0; i < 3; i++ )
222 {
223 sal_uInt16 nY = 11 + i * 33;
224 aStart.setY( aBLPos.Y() + nRectHeight * nY / 100 );
225 OUString sText;
227 {
228 sText = OUString( aBulletTypes[nItemId - 1] );
229 aStart.AdjustY( -(pDev->GetTextHeight()/2) );
230 aStart.setX( aBLPos.X() + 5 );
231 }
232 else
233 {
234 if(xFormatter.is() && aNumSettings.getLength() > nItemId - 1)
235 {
236 Sequence<PropertyValue> aLevel = aNumSettings.getConstArray()[nItemId - 1];
237 try
238 {
239 aLevel.realloc(aLevel.getLength() + 1);
240 PropertyValue& rValue = aLevel.getArray()[aLevel.getLength() - 1];
241 rValue.Name = sValue;
242 rValue.Value <<= static_cast<sal_Int32>(i + 1);
243 sText = xFormatter->makeNumberingString( aLevel, aLocale );
244 }
245 catch(Exception&)
246 {
247 TOOLS_WARN_EXCEPTION("svx.dialog", "");
248 }
249 }
250 // start just next to the left edge
251 aStart.setX( aBLPos.X() + 2 );
252 aStart.AdjustY( -(pDev->GetTextHeight()/2) );
253 }
254 pDev->DrawText(aStart, sText);
255 }
256 }
258 {
259 // Outline numbering has to be painted into the virtual device
260 // to get correct lines
261 // has to be made again
262 pVDev->SetLineColor(aBackColor);
263 pVDev->DrawRect(aOrgRect);
264 tools::Long nStartX = aOrgRect.Left();
265 tools::Long nStartY = aOrgRect.Top();
266
267 if(xFormatter.is() && aOutlineSettings.getLength() > nItemId - 1)
268 {
269 Reference<XIndexAccess> xLevel = aOutlineSettings.getArray()[nItemId - 1];
270 try
271 {
272 OUString sLevelTexts[5];
273 OUString sFontNames[5];
274 OUString sBulletChars[5];
275 sal_Int16 aNumberingTypes[5];
276 OUString sPrefixes[5];
277 OUString sSuffixes[5];
278 sal_Int16 aParentNumberings[5];
279
280 sal_Int32 nLevelCount = xLevel->getCount();
281 if(nLevelCount > 5)
282 nLevelCount = 5;
283 for( sal_Int32 i = 0; i < nLevelCount; i++)
284 {
285 tools::Long nTop = nStartY + nRectHeight * (aLinesArr[2 * i + 11])/100 ;
286 Point aLeft(nStartX + nRectWidth * (aLinesArr[2 * i + 10])/ 100, nTop );
287
288 Any aLevelAny = xLevel->getByIndex(i);
290 aLevelAny >>= aLevel;
291 aNumberingTypes[i] = 0;
292 aParentNumberings[i] = 0;
293 for(const PropertyValue& rProp : std::as_const(aLevel))
294 {
295 if ( rProp.Name == "NumberingType" )
296 rProp.Value >>= aNumberingTypes[i];
297 else if ( rProp.Name == "BulletFontName" )
298 rProp.Value >>= sFontNames[i];
299 else if ( rProp.Name == "BulletChar" )
300 rProp.Value >>= sBulletChars[i];
301 else if ( rProp.Name == "Prefix" )
302 rProp.Value >>= sPrefixes[i];
303 else if ( rProp.Name == "Suffix" )
304 rProp.Value >>= sSuffixes[i];
305 else if ( rProp.Name == "ParentNumbering" )
306 rProp.Value >>= aParentNumberings[i];
307 }
309 PropertyValue* pProperties = aProperties.getArray();
310 pProperties[0].Name = "NumberingType";
311 pProperties[0].Value <<= aNumberingTypes[i];
312 pProperties[1].Name = "Value";
313 pProperties[1].Value <<= sal_Int32(1);
314 try
315 {
316 sLevelTexts[i] = xFormatter->makeNumberingString( aProperties, aLocale );
317 }
318 catch(Exception&)
319 {
320 TOOLS_WARN_EXCEPTION("svx.dialog", "");
321 }
322
323 aLeft.AdjustY( -(pDev->GetTextHeight()/2) );
324 if(!sPrefixes[i].isEmpty() &&
325 sPrefixes[i] != " ")
326 {
327 pVDev->SetFont(aFont);
328 pVDev->DrawText(aLeft, sPrefixes[i]);
329 aLeft.AdjustX(pDev->GetTextWidth(sPrefixes[i]) );
330 }
331 if(aParentNumberings[i])
332 {
333 //insert old numberings here
334 sal_Int32 nStartLevel = std::min(static_cast<sal_Int32>(aParentNumberings[i]), i);
335 for(sal_Int32 nParentLevel = i - nStartLevel; nParentLevel < i; nParentLevel++)
336 {
337 OUString sTmp = sLevelTexts[nParentLevel] + ".";
339 aNumberingTypes[nParentLevel],
340 sBulletChars[nParentLevel],
341 sTmp,
342 sFontNames[nParentLevel],
343 aLeft,
344 aRuleFont,
345 aFont);
346 }
347 }
349 aNumberingTypes[i],
350 sBulletChars[i],
351 sLevelTexts[i],
352 sFontNames[i],
353 aLeft,
354 aRuleFont,
355 aFont);
356 if(!sSuffixes[i].isEmpty() &&
357 !sSuffixes[i].startsWith(" "))
358 {
359 pVDev->SetFont(aFont);
360 pVDev->DrawText(aLeft, sSuffixes[i]);
361 aLeft.AdjustX(pDev->GetTextWidth(sSuffixes[i]) );
362 }
363
364 tools::Long nLineTop = nStartY + nRectHeight * aLinesArr[2 * i + 1]/100 ;
365 Point aLineLeft(aLeft.X(), nLineTop );
366 Point aLineRight(nStartX + nRectWidth * 90 /100, nLineTop );
367 pVDev->SetLineColor(COL_LIGHTGRAY);
368 pVDev->DrawLine(aLineLeft, aLineRight);
369 }
370
371 }
372#ifdef DBG_UTIL
373 catch(Exception&)
374 {
375 static bool bAssert = false;
376 if(!bAssert)
377 {
378 TOOLS_WARN_EXCEPTION("svx.dialog", "");
379 bAssert = true;
380 }
381 }
382#else
383 catch(Exception&)
384 {
385 }
386#endif
387 }
388 pDev->DrawOutDev( aRect.TopLeft(), aRectSize,
389 aOrgRect.TopLeft(), aRectSize,
390 *pVDev );
391 }
392
393 pDev->SetFont(aOldFont);
394 pDev->SetLineColor(aOldColor);
395}
396
397SvxNumValueSet::SvxNumValueSet(std::unique_ptr<weld::ScrolledWindow> pScrolledWindow)
398 : ValueSet(std::move(pScrolledWindow))
399 , ePageType(NumberingPageType::BULLET)
400 , pVDev(nullptr)
401{
402}
403
405{
407}
408
410{
412 pVDev = nullptr;
413
414 SetColCount( 4 );
415 SetLineCount( 2 );
418 {
419 for ( sal_uInt16 i = 0; i < 8; i++ )
420 {
421 InsertItem( i + 1, i );
423 }
424 }
425}
426
428{
429}
430
432 const Sequence<Sequence<PropertyValue> >& aNum,
433 Reference<XNumberingFormatter> const & xFormat,
434 const Locale& rLocale )
435{
436 aNumSettings = aNum;
437 xFormatter = xFormat;
438 aLocale = rLocale;
439 if(aNum.getLength() > 8)
441 for ( sal_Int32 i = 0; i < aNum.getLength(); i++ )
442 {
443 InsertItem( i + 1, i );
444 if( i < 8 )
446 }
447}
448
450 Sequence<Reference<XIndexAccess> > const & rOutline,
451 Reference<XNumberingFormatter> const & xFormat,
452 const Locale& rLocale)
453{
454 aOutlineSettings = rOutline;
455 xFormatter = xFormat;
456 aLocale = rLocale;
457 if(aOutlineSettings.getLength() > 8)
459 for ( sal_Int32 i = 0; i < aOutlineSettings.getLength(); i++ )
460 {
461 InsertItem( i + 1, i );
462 if( i < 8 )
464 }
465}
466
467SvxBmpNumValueSet::SvxBmpNumValueSet(std::unique_ptr<weld::ScrolledWindow> pScrolledWindow)
468 : SvxNumValueSet(std::move(pScrolledWindow))
469 , aFormatIdle("SvxBmpNumValueSet FormatIdle")
470 , bGrfNotFound(false)
471{
472}
473
475{
477 bGrfNotFound = false;
480 SetLineCount( 3 );
481 aFormatIdle.SetPriority(TaskPriority::LOWEST);
482 aFormatIdle.SetInvokeHandler(LINK(this, SvxBmpNumValueSet, FormatHdl_Impl));
483}
484
485
487{
490}
491
493{
495
496 tools::Rectangle aRect = rUDEvt.GetRect();
497 vcl::RenderContext* pDev = rUDEvt.GetRenderContext();
498 sal_uInt16 nItemId = rUDEvt.GetItemId();
499 Point aBLPos = aRect.TopLeft();
500
501 tools::Long nRectHeight = aRect.GetHeight();
502 Size aSize(nRectHeight/8, nRectHeight/8);
503
504 Graphic aGraphic;
506 &aGraphic))
507 {
508 bGrfNotFound = true;
509 }
510 else
511 {
512 Point aPos(aBLPos.X() + 5, 0);
513 for( sal_uInt16 i = 0; i < 3; i++ )
514 {
515 sal_uInt16 nY = 11 + i * 33;
516 aPos.setY( aBLPos.Y() + nRectHeight * nY / 100 );
517 aGraphic.Draw(*pDev, aPos, aSize);
518 }
519 }
520}
521
522IMPL_LINK_NOARG(SvxBmpNumValueSet, FormatHdl_Impl, Timer *, void)
523{
524 // only when a graphics was not there, it needs to be formatted
525 if (bGrfNotFound)
526 {
527 SetFormat();
528 bGrfNotFound = false;
529 }
530 Invalidate();
531}
532
533/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
PropertiesInfo aProperties
static bool EndLocking(std::u16string_view rThemeName)
Definition: galexpl.cxx:264
static bool GetGraphicObj(std::u16string_view rThemeName, sal_uInt32 nPos, Graphic *pGraphic)
Definition: galexpl.cxx:138
static bool BeginLocking(std::u16string_view rThemeName)
Definition: galexpl.cxx:239
void Draw(OutputDevice &rOutDev, const Point &rDestPt) const
static LanguageType getConfiguredSystemLanguage()
const vcl::Font & GetFont() const
void SetFont(const vcl::Font &rNewFont)
void SetLineColor()
tools::Long GetTextWidth(const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, vcl::text::TextLayoutCache const *=nullptr, SalLayoutGlyphs const *const pLayoutCache=nullptr) const
const Color & GetLineColor() const
SAL_DLLPRIVATE void DrawOutDev(const Point &, const Size &, const Point &, const Size &, const Printer &)=delete
const MapMode & GetMapMode() const
tools::Long GetTextHeight() const
static vcl::Font GetDefaultFont(DefaultFontType nType, LanguageType eLang, GetDefaultFontFlags nFlags, const OutputDevice *pOutDev=nullptr)
void DrawText(const Point &rStartPt, const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, std::vector< tools::Rectangle > *pVector=nullptr, OUString *pDisplayText=nullptr, const SalLayoutGlyphs *pLayoutCache=nullptr)
constexpr tools::Long Y() const
void setX(tools::Long nX)
void setY(tools::Long nY)
tools::Long AdjustY(tools::Long nVertMove)
tools::Long AdjustX(tools::Long nHorzMove)
constexpr tools::Long X() const
void setHeight(tools::Long nHeight)
virtual ~SvxBmpNumValueSet() override
SvxBmpNumValueSet(std::unique_ptr< weld::ScrolledWindow > pScrolledWindow)
virtual void UserDraw(const UserDrawEvent &rUDEvt) override
static std::unique_ptr< UIObject > create(vcl::Window *pWindow)
Definition: uiobject.cxx:85
NumberingPageType ePageType
Definition: numvset.hxx:51
virtual ~SvxNumValueSet() override
css::uno::Reference< css::text::XNumberingFormatter > xFormatter
Definition: numvset.hxx:55
css::lang::Locale aLocale
Definition: numvset.hxx:56
VclPtr< VirtualDevice > pVDev
Definition: numvset.hxx:53
void SetNumberingSettings(const css::uno::Sequence< css::uno::Sequence< css::beans::PropertyValue > > &aNum, css::uno::Reference< css::text::XNumberingFormatter > const &xFormatter, const css::lang::Locale &rLocale)
virtual FactoryFunction GetUITestFactory() const override
void init(NumberingPageType eType)
tools::Rectangle aOrgRect
Definition: numvset.hxx:52
void SetOutlineNumberingSettings(css::uno::Sequence< css::uno::Reference< css::container::XIndexAccess > > const &rOutline, css::uno::Reference< css::text::XNumberingFormatter > const &xFormatter, const css::lang::Locale &rLocale)
SvxNumValueSet(std::unique_ptr< weld::ScrolledWindow > pScrolledWindow)
css::uno::Sequence< css::uno::Reference< css::container::XIndexAccess > > aOutlineSettings
Definition: numvset.hxx:64
virtual void UserDraw(const UserDrawEvent &rUDEvt) override
css::uno::Sequence< css::uno::Sequence< css::beans::PropertyValue > > aNumSettings
Definition: numvset.hxx:60
void SetPriority(TaskPriority ePriority)
void Stop()
void SetInvokeHandler(const Link< Timer *, void > &rLink)
vcl::RenderContext * GetRenderContext() const
const tools::Rectangle & GetRect() const
sal_uInt16 GetItemId() const
void InsertItem(sal_uInt16 nItemId, const Image &rImage)
void SetItemText(sal_uInt16 nItemId, const OUString &rStr)
void SetStyle(WinBits nStyle)
void SetLineCount(sal_uInt16 nNewLines=0)
WinBits GetStyle() const
void SetColCount(sal_uInt16 nNewCols=1)
static VclPtr< reference_type > Create(Arg &&... arg)
constexpr tools::Long GetWidth() const
constexpr tools::Long Top() const
constexpr Point TopLeft() const
constexpr tools::Long GetHeight() const
constexpr tools::Long Left() const
void SetFontSize(const Size &)
void SetStyleName(const OUString &rStyleName)
void SetPitch(FontPitch ePitch)
void SetTransparent(bool bTransparent)
void SetFillColor(const Color &)
void SetColor(const Color &)
void SetWeight(FontWeight)
void SetFamily(FontFamily)
void SetCharSet(rtl_TextEncoding)
const Size & GetFontSize() const
constexpr ::Color COL_WHITE(0xFF, 0xFF, 0xFF)
constexpr ::Color COL_LIGHTGRAY(0xC0, 0xC0, 0xC0)
constexpr ::Color COL_BLACK(0x00, 0x00, 0x00)
#define TOOLS_WARN_EXCEPTION(area, stream)
OUString SvxResId(TranslateId aId)
Definition: dialmgr.cxx:24
float u
DocumentType eType
PITCH_DONTKNOW
FAMILY_DONTKNOW
WEIGHT_DONTKNOW
#define GALLERY_THEME_BULLETS
Definition: gallery.hxx:29
std::function< std::unique_ptr< UIObject >(vcl::Window *)> FactoryFunction
@ Exception
int i
long Long
NumberingPageType
Definition: numvset.hxx:42
const TranslateId RID_SVXSTR_OUTLINENUM_DESCRIPTIONS[]
const sal_Unicode aBulletTypes[]
static vcl::Font & lcl_GetDefaultBulletFont()
static void lcl_PaintLevel(OutputDevice *pVDev, sal_Int16 nNumberingType, const OUString &rBulletChar, const OUString &rText, const OUString &rFontName, Point &rLeft, vcl::Font &rRuleFont, const vcl::Font &rTextFont)
IMPL_LINK_NOARG(SvxBmpNumValueSet, FormatHdl_Impl, Timer *, void)
const TranslateId RID_SVXSTR_BULLET_DESCRIPTIONS[]
const TranslateId RID_SVXSTR_SINGLENUM_DESCRIPTIONS[]
void SetFormat(LotusContext &rContext, SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt8 nFormat, sal_uInt8 nSt)
sal_uInt16 sal_Unicode
#define WB_ITEMBORDER
#define WB_DOUBLEBORDER
WinBits const WB_VSCROLL