LibreOffice Module framework (master) 1
statusbardocumenthandler.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
21
22#include <com/sun/star/xml/sax/SAXException.hpp>
23#include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp>
24#include <com/sun/star/ui/ItemStyle.hpp>
25#include <com/sun/star/ui/ItemType.hpp>
26#include <com/sun/star/beans/PropertyValue.hpp>
27#include <com/sun/star/container/XIndexAccess.hpp>
28#include <com/sun/star/container/XIndexContainer.hpp>
29
30#include <vcl/status.hxx>
31
34
35using namespace ::com::sun::star::uno;
36using namespace ::com::sun::star::beans;
37using namespace ::com::sun::star::xml::sax;
38using namespace ::com::sun::star::ui;
39using namespace ::com::sun::star::container;
40
41constexpr OUStringLiteral XMLNS_STATUSBAR = u"http://openoffice.org/2001/statusbar";
42constexpr OUStringLiteral XMLNS_XLINK = u"http://www.w3.org/1999/xlink";
43constexpr OUStringLiteral XMLNS_STATUSBAR_PREFIX = u"statusbar:";
44constexpr OUStringLiteral XMLNS_XLINK_PREFIX = u"xlink:";
45
46constexpr OUStringLiteral XMLNS_FILTER_SEPARATOR = u"^";
47
48#define ELEMENT_STATUSBAR "statusbar"
49#define ELEMENT_STATUSBARITEM "statusbaritem"
50
51#define ATTRIBUTE_ALIGN "align"
52#define ATTRIBUTE_STYLE "style"
53#define ATTRIBUTE_URL "href"
54#define ATTRIBUTE_WIDTH "width"
55#define ATTRIBUTE_OFFSET "offset"
56#define ATTRIBUTE_AUTOSIZE "autosize"
57#define ATTRIBUTE_OWNERDRAW "ownerdraw"
58#define ATTRIBUTE_HELPURL "helpid"
59#define ATTRIBUTE_MANDATORY "mandatory"
60
61constexpr OUStringLiteral ELEMENT_NS_STATUSBAR = u"statusbar:statusbar";
62constexpr OUStringLiteral ELEMENT_NS_STATUSBARITEM = u"statusbar:statusbaritem";
63
64constexpr OUStringLiteral ATTRIBUTE_XMLNS_STATUSBAR = u"xmlns:statusbar";
65constexpr OUStringLiteral ATTRIBUTE_XMLNS_XLINK = u"xmlns:xlink";
66
67constexpr OUStringLiteral ATTRIBUTE_BOOLEAN_TRUE = u"true";
68constexpr OUStringLiteral ATTRIBUTE_BOOLEAN_FALSE = u"false";
69
70constexpr OUStringLiteral ATTRIBUTE_ALIGN_LEFT = u"left";
71constexpr OUStringLiteral ATTRIBUTE_ALIGN_RIGHT = u"right";
72constexpr OUStringLiteral ATTRIBUTE_ALIGN_CENTER = u"center";
73
74constexpr OUStringLiteral ATTRIBUTE_STYLE_IN = u"in";
75constexpr OUStringLiteral ATTRIBUTE_STYLE_OUT = u"out";
76constexpr OUStringLiteral ATTRIBUTE_STYLE_FLAT = u"flat";
77
78constexpr OUStringLiteral STATUSBAR_DOCTYPE = u"<!DOCTYPE statusbar:statusbar PUBLIC \"-//OpenOffice.org//DTD OfficeDocument 1.0//EN\" \"statusbar.dtd\">";
79
80namespace framework
81{
82
83// Property names of a menu/menu item ItemDescriptor
84constexpr OUStringLiteral ITEM_DESCRIPTOR_COMMANDURL = u"CommandURL";
85constexpr OUStringLiteral ITEM_DESCRIPTOR_HELPURL = u"HelpURL";
86constexpr OUStringLiteral ITEM_DESCRIPTOR_OFFSET = u"Offset";
87constexpr OUStringLiteral ITEM_DESCRIPTOR_STYLE = u"Style";
88constexpr OUStringLiteral ITEM_DESCRIPTOR_WIDTH = u"Width";
89constexpr OUStringLiteral ITEM_DESCRIPTOR_TYPE = u"Type";
90
92 const Sequence< PropertyValue >& rProp,
93 OUString& rCommandURL,
94 OUString& rHelpURL,
95 sal_Int16& rOffset,
96 sal_Int16& rStyle,
97 sal_Int16& rWidth )
98{
99 for ( const PropertyValue& rEntry : rProp )
100 {
101 if ( rEntry.Name == ITEM_DESCRIPTOR_COMMANDURL )
102 {
103 rEntry.Value >>= rCommandURL;
104 }
105 else if ( rEntry.Name == ITEM_DESCRIPTOR_HELPURL )
106 {
107 rEntry.Value >>= rHelpURL;
108 }
109 else if ( rEntry.Name == ITEM_DESCRIPTOR_OFFSET )
110 {
111 rEntry.Value >>= rOffset;
112 }
113 else if ( rEntry.Name == ITEM_DESCRIPTOR_STYLE )
114 {
115 rEntry.Value >>= rStyle;
116 }
117 else if ( rEntry.Name == ITEM_DESCRIPTOR_WIDTH )
118 {
119 rEntry.Value >>= rWidth;
120 }
121 }
122}
123
124namespace {
125
126struct StatusBarEntryProperty
127{
129 char aEntryName[20];
130};
131
132}
133
135{
147};
148
150 const Reference< XIndexContainer >& rStatusBarItems ) :
151 m_aStatusBarItems( rStatusBarItems )
152{
153 // create hash map
154 for ( int i = 0; i < SB_XML_ENTRY_COUNT; i++ )
155 {
157 {
158 OUString temp = XMLNS_STATUSBAR + XMLNS_FILTER_SEPARATOR +
159 OUString::createFromAscii( StatusBarEntries[i].aEntryName );
160 m_aStatusBarMap.emplace( temp, static_cast<StatusBar_XML_Entry>(i) );
161 }
162 else
163 {
164 OUString temp = XMLNS_XLINK + XMLNS_FILTER_SEPARATOR +
165 OUString::createFromAscii( StatusBarEntries[i].aEntryName );
166 m_aStatusBarMap.emplace( temp, static_cast<StatusBar_XML_Entry>(i) );
167 }
168 }
169
172}
173
175{
176}
177
178// XDocumentHandler
180{
181}
182
184{
186 {
187 OUString aErrorMessage = getErrorLineString() + "No matching start or end element 'statusbar' found!";
188 throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
189 }
190}
191
193 const OUString& aName, const Reference< XAttributeList > &xAttribs )
194{
195 StatusBarHashMap::const_iterator pStatusBarEntry = m_aStatusBarMap.find( aName );
196 if ( pStatusBarEntry == m_aStatusBarMap.end() )
197 return;
198
199 switch ( pStatusBarEntry->second )
200 {
202 {
204 {
205 OUString aErrorMessage = getErrorLineString() + "Element 'statusbar:statusbar' cannot be embedded into 'statusbar:statusbar'!";
206 throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
207 }
208
210 }
211 break;
212
214 {
216 {
217 OUString aErrorMessage = getErrorLineString() + "Element 'statusbar:statusbaritem' must be embedded into element 'statusbar:statusbar'!";
218 throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
219 }
220
222 {
223 OUString aErrorMessage = getErrorLineString() + "Element statusbar:statusbaritem is not a container!";
224 throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
225 }
226
227 OUString aCommandURL;
228 OUString aHelpURL;
229 sal_Int16 nItemBits( ItemStyle::ALIGN_CENTER|ItemStyle::DRAW_IN3D|ItemStyle::MANDATORY );
230 sal_Int16 nWidth( 0 );
231 sal_Int16 nOffset( STATUSBAR_OFFSET );
232 bool bCommandURL( false );
233
235 for ( sal_Int16 n = 0; n < xAttribs->getLength(); n++ )
236 {
237 pStatusBarEntry = m_aStatusBarMap.find( xAttribs->getNameByIndex( n ) );
238 if ( pStatusBarEntry != m_aStatusBarMap.end() )
239 {
240 switch ( pStatusBarEntry->second )
241 {
242 case SB_ATTRIBUTE_URL:
243 {
244 bCommandURL = true;
245 aCommandURL = xAttribs->getValueByIndex( n );
246 }
247 break;
248
250 {
251 if ( xAttribs->getValueByIndex( n ) == ATTRIBUTE_ALIGN_LEFT )
252 {
253 nItemBits |= ItemStyle::ALIGN_LEFT;
254 nItemBits &= ~ItemStyle::ALIGN_CENTER;
255 }
256 else if ( xAttribs->getValueByIndex( n ) == ATTRIBUTE_ALIGN_CENTER )
257 {
258 nItemBits |= ItemStyle::ALIGN_CENTER;
259 nItemBits &= ~ItemStyle::ALIGN_LEFT;
260 }
261 else if ( xAttribs->getValueByIndex( n ) == ATTRIBUTE_ALIGN_RIGHT )
262 {
263 nItemBits |= ItemStyle::ALIGN_RIGHT;
264 }
265 else
266 {
267 OUString aErrorMessage = getErrorLineString() + "Attribute statusbar:align must have one value of 'left','right' or 'center'!";
268 throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
269 }
270 }
271 break;
272
274 {
275 if ( xAttribs->getValueByIndex( n ) == ATTRIBUTE_STYLE_IN )
276 {
277 nItemBits |= ItemStyle::DRAW_IN3D;
278 nItemBits &= ~ItemStyle::DRAW_OUT3D;
279 }
280 else if ( xAttribs->getValueByIndex( n ) == ATTRIBUTE_STYLE_OUT )
281 {
282 nItemBits |= ItemStyle::DRAW_OUT3D;
283 nItemBits &= ~ItemStyle::DRAW_IN3D;
284 }
285 else if ( xAttribs->getValueByIndex( n ) == ATTRIBUTE_STYLE_FLAT )
286 {
287 nItemBits |= ItemStyle::DRAW_FLAT;
288 }
289 else
290 {
291 OUString aErrorMessage = getErrorLineString() + "Attribute statusbar:autosize must have value 'true' or 'false'!";
292 throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
293 }
294 }
295 break;
296
298 {
299 if ( xAttribs->getValueByIndex( n ) == ATTRIBUTE_BOOLEAN_TRUE )
300 nItemBits |= ItemStyle::AUTO_SIZE;
301 else if ( xAttribs->getValueByIndex( n ) == ATTRIBUTE_BOOLEAN_FALSE )
302 nItemBits &= ~ItemStyle::AUTO_SIZE;
303 else
304 {
305 OUString aErrorMessage = getErrorLineString() + "Attribute statusbar:autosize must have value 'true' or 'false'!";
306 throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
307 }
308 }
309 break;
310
312 {
313 if ( xAttribs->getValueByIndex( n ) == ATTRIBUTE_BOOLEAN_TRUE )
314 nItemBits |= ItemStyle::OWNER_DRAW;
315 else if ( xAttribs->getValueByIndex( n ) == ATTRIBUTE_BOOLEAN_FALSE )
316 nItemBits &= ~ItemStyle::OWNER_DRAW;
317 else
318 {
319 OUString aErrorMessage = getErrorLineString() + "Attribute statusbar:ownerdraw must have value 'true' or 'false'!";
320 throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
321 }
322 }
323 break;
324
326 {
327 nWidth = static_cast<sal_Int16>(xAttribs->getValueByIndex( n ).toInt32());
328 }
329 break;
330
332 {
333 nOffset = static_cast<sal_Int16>(xAttribs->getValueByIndex( n ).toInt32());
334 }
335 break;
336
338 {
339 aHelpURL = xAttribs->getValueByIndex( n );
340 }
341 break;
342
344 {
345 if ( xAttribs->getValueByIndex( n ) == ATTRIBUTE_BOOLEAN_TRUE )
346 nItemBits |= ItemStyle::MANDATORY;
347 else if ( xAttribs->getValueByIndex( n ) == ATTRIBUTE_BOOLEAN_FALSE )
348 nItemBits &= ~ItemStyle::MANDATORY;
349 else
350 {
351 OUString aErrorMessage = getErrorLineString() + "Attribute statusbar:mandatory must have value 'true' or 'false'!";
352 throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
353 }
354 }
355 break;
356
357 default:
358 break;
359 }
360 }
361 } // for
362
363 if ( !bCommandURL )
364 {
365 OUString aErrorMessage = getErrorLineString() + "Required attribute statusbar:url must have a value!";
366 throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
367 }
368 else
369 {
370 Sequence< PropertyValue > aStatusbarItemProp{
376 comphelper::makePropertyValue(ITEM_DESCRIPTOR_TYPE, css::ui::ItemType::DEFAULT)
377 };
378
379 m_aStatusBarItems->insertByIndex( m_aStatusBarItems->getCount(), Any( aStatusbarItemProp ) );
380 }
381 }
382 break;
383
384 default:
385 break;
386 }
387}
388
389void SAL_CALL OReadStatusBarDocumentHandler::endElement(const OUString& aName)
390{
391 StatusBarHashMap::const_iterator pStatusBarEntry = m_aStatusBarMap.find( aName );
392 if ( pStatusBarEntry == m_aStatusBarMap.end() )
393 return;
394
395 switch ( pStatusBarEntry->second )
396 {
398 {
400 {
401 OUString aErrorMessage = getErrorLineString() + "End element 'statusbar' found, but no start element 'statusbar'";
402 throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
403 }
404
406 }
407 break;
408
410 {
412 {
413 OUString aErrorMessage = getErrorLineString() + "End element 'statusbar:statusbaritem' found, but no start element 'statusbar:statusbaritem'";
414 throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
415 }
416
418 }
419 break;
420
421 default: break;
422 }
423}
424
425void SAL_CALL OReadStatusBarDocumentHandler::characters(const OUString&)
426{
427}
428
430{
431}
432
434 const OUString& /*aTarget*/, const OUString& /*aData*/ )
435{
436}
437
439 const Reference< XLocator > &xLocator)
440{
441 m_xLocator = xLocator;
442}
443
445{
446 if ( m_xLocator.is() )
447 return "Line: " + OUString::number( m_xLocator->getLineNumber() ) + " - ";
448 else
449 return OUString();
450}
451
452// OWriteStatusBarDocumentHandler
453
455 const Reference< XIndexAccess >& aStatusBarItems,
456 const Reference< XDocumentHandler >& rWriteDocumentHandler ) :
457 m_aStatusBarItems( aStatusBarItems ),
458 m_xWriteDocumentHandler( rWriteDocumentHandler )
459{
460 m_xEmptyList = new ::comphelper::AttributeList;
463}
464
466{
467}
468
470{
471 m_xWriteDocumentHandler->startDocument();
472
473 // write DOCTYPE line!
474 Reference< XExtendedDocumentHandler > xExtendedDocHandler( m_xWriteDocumentHandler, UNO_QUERY );
475 if ( xExtendedDocHandler.is() )
476 {
477 xExtendedDocHandler->unknown( STATUSBAR_DOCTYPE );
478 m_xWriteDocumentHandler->ignorableWhitespace( OUString() );
479 }
480
481 rtl::Reference<::comphelper::AttributeList> pList = new ::comphelper::AttributeList;
482
483 pList->AddAttribute( ATTRIBUTE_XMLNS_STATUSBAR,
485
486 pList->AddAttribute( ATTRIBUTE_XMLNS_XLINK,
487 XMLNS_XLINK );
488
489 m_xWriteDocumentHandler->startElement( ELEMENT_NS_STATUSBAR, pList );
490 m_xWriteDocumentHandler->ignorableWhitespace( OUString() );
491
492 sal_Int32 nItemCount = m_aStatusBarItems->getCount();
493 Any aAny;
494
495 for ( sal_Int32 nItemPos = 0; nItemPos < nItemCount; nItemPos++ )
496 {
497 Sequence< PropertyValue > aProps;
498 aAny = m_aStatusBarItems->getByIndex( nItemPos );
499 if ( aAny >>= aProps )
500 {
501 OUString aCommandURL;
502 OUString aHelpURL;
503 sal_Int16 nStyle( ItemStyle::ALIGN_CENTER|ItemStyle::DRAW_IN3D );
504 sal_Int16 nWidth( 0 );
505 sal_Int16 nOffset( STATUSBAR_OFFSET );
506
508 aProps,
509 aCommandURL,
510 aHelpURL,
511 nOffset,
512 nStyle,
513 nWidth );
514
515 if ( !aCommandURL.isEmpty() )
516 WriteStatusBarItem( aCommandURL, nOffset, nStyle, nWidth );
517 }
518 }
519
520 m_xWriteDocumentHandler->ignorableWhitespace( OUString() );
522 m_xWriteDocumentHandler->ignorableWhitespace( OUString() );
523 m_xWriteDocumentHandler->endDocument();
524}
525
526// protected member functions
527
529 const OUString& rCommandURL,
530 sal_Int16 nOffset,
531 sal_Int16 nStyle,
532 sal_Int16 nWidth )
533{
534 rtl::Reference<::comphelper::AttributeList> pList = new ::comphelper::AttributeList;
535
536 if (m_aAttributeURL.isEmpty() )
537 {
539 }
540
541 // save required attribute (URL)
542 pList->AddAttribute( m_aAttributeURL, rCommandURL );
543
544 // alignment
545 if ( nStyle & ItemStyle::ALIGN_RIGHT )
546 {
547 pList->AddAttribute( m_aXMLStatusBarNS + ATTRIBUTE_ALIGN,
549 }
550 else if ( nStyle & ItemStyle::ALIGN_CENTER )
551 {
552 pList->AddAttribute( m_aXMLStatusBarNS + ATTRIBUTE_ALIGN,
554 }
555 else
556 {
557 pList->AddAttribute( m_aXMLStatusBarNS + ATTRIBUTE_ALIGN,
559 }
560
561 // style ( StatusBarItemBits::In is default )
562 if ( nStyle & ItemStyle::DRAW_FLAT )
563 {
564 pList->AddAttribute( m_aXMLStatusBarNS + ATTRIBUTE_STYLE,
566 }
567 else if ( nStyle & ItemStyle::DRAW_OUT3D )
568 {
569 pList->AddAttribute( m_aXMLStatusBarNS + ATTRIBUTE_STYLE,
571 }
572
573 // autosize (default sal_False)
574 if ( nStyle & ItemStyle::AUTO_SIZE )
575 {
576 pList->AddAttribute( m_aXMLStatusBarNS + ATTRIBUTE_AUTOSIZE,
578 }
579
580 // ownerdraw (default sal_False)
581 if ( nStyle & ItemStyle::OWNER_DRAW )
582 {
583 pList->AddAttribute( m_aXMLStatusBarNS + ATTRIBUTE_OWNERDRAW,
585 }
586
587 // width (default 0)
588 if ( nWidth > 0 )
589 {
590 pList->AddAttribute( m_aXMLStatusBarNS + ATTRIBUTE_WIDTH,
591 OUString::number( nWidth ) );
592 }
593
594 // offset (default STATUSBAR_OFFSET)
595 if ( nOffset != STATUSBAR_OFFSET )
596 {
597 pList->AddAttribute( m_aXMLStatusBarNS + ATTRIBUTE_OFFSET,
598 OUString::number( nOffset ) );
599 }
600
601 // mandatory (default sal_True)
602 if ( !( nStyle & ItemStyle::MANDATORY ) )
603 {
604 pList->AddAttribute( m_aXMLStatusBarNS + ATTRIBUTE_MANDATORY,
606 }
607
608 m_xWriteDocumentHandler->ignorableWhitespace( OUString() );
610 m_xWriteDocumentHandler->ignorableWhitespace( OUString() );
612}
613
614} // namespace framework
615
616/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual void SAL_CALL setDocumentLocator(const css::uno::Reference< css::xml::sax::XLocator > &xLocator) override
virtual void SAL_CALL characters(const OUString &aChars) override
virtual void SAL_CALL processingInstruction(const OUString &aTarget, const OUString &aData) override
virtual void SAL_CALL startElement(const OUString &aName, const css::uno::Reference< css::xml::sax::XAttributeList > &xAttribs) override
virtual void SAL_CALL startDocument() override
css::uno::Reference< css::xml::sax::XLocator > m_xLocator
virtual void SAL_CALL endElement(const OUString &aName) override
virtual void SAL_CALL ignorableWhitespace(const OUString &aWhitespaces) override
OReadStatusBarDocumentHandler(const css::uno::Reference< css::container::XIndexContainer > &aStatusBarItems)
css::uno::Reference< css::container::XIndexContainer > m_aStatusBarItems
css::uno::Reference< css::xml::sax::XDocumentHandler > m_xWriteDocumentHandler
OWriteStatusBarDocumentHandler(const css::uno::Reference< css::container::XIndexAccess > &rStatusBarItems, const css::uno::Reference< css::xml::sax::XDocumentHandler > &rWriteDocHandler)
css::uno::Reference< css::xml::sax::XAttributeList > m_xEmptyList
void WriteStatusBarItem(const OUString &rCommandURL, sal_Int16 nOffset, sal_Int16 nStyle, sal_Int16 nWidth)
css::uno::Reference< css::container::XIndexAccess > m_aStatusBarItems
float u
OUString aName
sal_Int64 n
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
constexpr OUStringLiteral ITEM_DESCRIPTOR_STYLE
constexpr OUStringLiteral ITEM_DESCRIPTOR_COMMANDURL
constexpr OUStringLiteral ITEM_DESCRIPTOR_WIDTH
constexpr OUStringLiteral ITEM_DESCRIPTOR_TYPE
constexpr OUStringLiteral ITEM_DESCRIPTOR_OFFSET
static void ExtractStatusbarItemParameters(const Sequence< PropertyValue > &rProp, OUString &rCommandURL, OUString &rHelpURL, sal_Int16 &rOffset, sal_Int16 &rStyle, sal_Int16 &rWidth)
constexpr OUStringLiteral ITEM_DESCRIPTOR_HELPURL
StatusBarEntryProperty const StatusBarEntries[OReadStatusBarDocumentHandler::SB_XML_ENTRY_COUNT]
int i
#define STATUSBAR_OFFSET
constexpr OUStringLiteral STATUSBAR_DOCTYPE
constexpr OUStringLiteral XMLNS_STATUSBAR
#define ATTRIBUTE_STYLE
constexpr OUStringLiteral ATTRIBUTE_STYLE_IN
#define ELEMENT_STATUSBAR
constexpr OUStringLiteral XMLNS_FILTER_SEPARATOR
#define ATTRIBUTE_ALIGN
#define ATTRIBUTE_MANDATORY
constexpr OUStringLiteral ATTRIBUTE_STYLE_OUT
constexpr OUStringLiteral ATTRIBUTE_BOOLEAN_TRUE
OReadStatusBarDocumentHandler::StatusBar_XML_Namespace nNamespace
#define ATTRIBUTE_HELPURL
#define ATTRIBUTE_OFFSET
constexpr OUStringLiteral ATTRIBUTE_STYLE_FLAT
constexpr OUStringLiteral ATTRIBUTE_ALIGN_RIGHT
#define ATTRIBUTE_AUTOSIZE
constexpr OUStringLiteral ATTRIBUTE_BOOLEAN_FALSE
constexpr OUStringLiteral XMLNS_STATUSBAR_PREFIX
#define ATTRIBUTE_OWNERDRAW
#define ATTRIBUTE_WIDTH
#define ATTRIBUTE_URL
constexpr OUStringLiteral ATTRIBUTE_ALIGN_CENTER
constexpr OUStringLiteral ELEMENT_NS_STATUSBARITEM
constexpr OUStringLiteral ELEMENT_NS_STATUSBAR
constexpr OUStringLiteral ATTRIBUTE_ALIGN_LEFT
char aEntryName[20]
constexpr OUStringLiteral ATTRIBUTE_XMLNS_XLINK
#define ELEMENT_STATUSBARITEM
constexpr OUStringLiteral XMLNS_XLINK_PREFIX
constexpr OUStringLiteral XMLNS_XLINK
constexpr OUStringLiteral ATTRIBUTE_XMLNS_STATUSBAR