android: Update app-specific/MIME type icons
[LibreOffice.git] / writerfilter / source / dmapper / PropertyMap.hxx
blob650a51506bf8e3109147b9c7a39c38d78c5afb42
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
19 #pragma once
21 #include <rtl/ustring.hxx>
22 #include <tools/ref.hxx>
23 #include <com/sun/star/uno/Sequence.hxx>
24 #include <com/sun/star/beans/PropertyValue.hpp>
25 #include <com/sun/star/beans/XPropertySet.hpp>
26 #include <com/sun/star/table/BorderLine2.hpp>
27 #include <com/sun/star/text/WrapTextMode.hpp>
28 #include <com/sun/star/uno/Any.h>
29 #include <com/sun/star/drawing/XShape.hpp>
30 #include "PropertyIds.hxx"
31 #include <memory>
32 #include <optional>
33 #include <map>
34 #include <utility>
35 #include <vector>
36 #include <set>
37 #include <deque>
39 namespace com::sun::star {
40 namespace beans {
41 struct PropertyValue;
43 namespace container {
44 class XNameContainer;
46 namespace lang {
47 class XMultiServiceFactory;
49 namespace text {
50 class XTextRange;
51 class XTextColumns;
52 class XFootnote;
54 namespace table {
55 struct BorderLine2;
56 struct ShadowFormat;
60 namespace writerfilter::dmapper {
62 class DomainMapper_Impl;
63 struct FloatingTableInfo;
64 struct AnchoredObjectInfo;
66 enum BorderPosition
68 BORDER_LEFT,
69 BORDER_RIGHT,
70 BORDER_TOP,
71 BORDER_BOTTOM
74 enum GrabBagType
76 NO_GRAB_BAG,
77 ROW_GRAB_BAG,
78 CELL_GRAB_BAG,
79 PARA_GRAB_BAG,
80 CHAR_GRAB_BAG
83 struct RedlineParams : public SvRefBase
85 OUString m_sAuthor;
86 OUString m_sDate;
87 sal_Int32 m_nToken;
89 // This can hold properties of runs that had formatted 'track changes' properties
90 css::uno::Sequence< css::beans::PropertyValue > m_aRevertProperties;
93 typedef tools::SvRef< RedlineParams > RedlineParamsPtr;
95 class PropValue
97 private:
98 css::uno::Any m_aValue;
99 GrabBagType m_GrabBagType;
100 bool m_bIsDocDefault;
102 public:
103 PropValue( css::uno::Any aValue, GrabBagType i_GrabBagType, bool bDocDefault )
104 : m_aValue(std::move( aValue ))
105 , m_GrabBagType( i_GrabBagType )
106 , m_bIsDocDefault( bDocDefault )
110 PropValue( css::uno::Any aValue, GrabBagType i_GrabBagType )
111 : m_aValue(std::move( aValue ))
112 , m_GrabBagType( i_GrabBagType )
113 , m_bIsDocDefault( false )
117 PropValue()
118 : m_aValue()
119 , m_GrabBagType( NO_GRAB_BAG )
120 , m_bIsDocDefault( false )
124 const css::uno::Any& getValue() const { return m_aValue; }
126 GrabBagType getGrabBagType() const { return m_GrabBagType; }
128 bool getIsDocDefault() const { return m_bIsDocDefault; }
131 class PropertyMap;
132 typedef tools::SvRef< PropertyMap > PropertyMapPtr;
134 class PropertyMap : public SvRefBase
136 private:
137 // Cache the property values for the GetPropertyValues() call(s).
138 std::vector< css::beans::PropertyValue > m_aValues;
140 // marks context as footnote context - ::text( ) events contain either the footnote character or can be ignored
141 // depending on sprmCSymbol
142 css::uno::Reference< css::text::XFootnote > m_xFootnote;
143 OUString m_sFootnoteCharStyleName;
144 std::map< PropertyIds, PropValue > m_vMap;
145 std::vector< RedlineParamsPtr > m_aRedlines;
147 public:
148 typedef std::pair< PropertyIds, css::uno::Any > Property;
150 PropertyMap() {}
152 // Sequence: Grab Bags: The CHAR_GRAB_BAG has Name "CharInteropGrabBag" and the PARA_GRAB_BAG has Name "ParaInteropGrabBag"
153 // the contained properties are their Value.
154 css::uno::Sequence< css::beans::PropertyValue > GetPropertyValues( bool bCharGrabBag = true );
156 std::vector< PropertyIds > GetPropertyIds();
158 // Add property, optionally overwriting existing attributes
159 void Insert( PropertyIds eId, const css::uno::Any& rAny, bool bOverwrite = true, GrabBagType i_GrabBagType = NO_GRAB_BAG, bool bDocDefault = false );
161 // Remove a named property from *this, does nothing if the property id has not been set
162 void Erase( PropertyIds eId);
164 // Imports properties from pMap (bOverwrite==false means m_bIsDocDefault=true setting)
165 void InsertProps( const PropertyMapPtr& rMap, const bool bOverwrite = true );
167 // Returns a copy of the property if it exists, .first is its PropertyIds and .second is its Value (type css::uno::Any)
168 std::optional< Property > getProperty( PropertyIds eId ) const;
170 // Has the property named been set (via Insert)?
171 bool isSet( PropertyIds eId ) const;
172 bool isDocDefault( PropertyIds eId ) const;
174 const css::uno::Reference< css::text::XFootnote >& GetFootnote() const { return m_xFootnote; }
175 const OUString& GetFootnoteStyle() const { return m_sFootnoteCharStyleName; }
177 void SetFootnote(const css::uno::Reference< css::text::XFootnote >& xFootnote, const OUString& sStyleName)
179 m_xFootnote = xFootnote;
180 m_sFootnoteCharStyleName = sStyleName;
183 virtual void insertTableProperties( const PropertyMap*, const bool bOverwrite = true );
185 const std::vector< RedlineParamsPtr >& Redlines() const { return m_aRedlines; }
187 std::vector< RedlineParamsPtr >& Redlines() { return m_aRedlines; }
189 void printProperties();
191 #ifdef DBG_UTIL
192 void dumpXml() const;
193 #endif
195 static css::table::ShadowFormat getShadowFromBorder( const css::table::BorderLine2& rBorder );
197 protected:
198 void Invalidate()
200 if ( m_aValues.size() )
201 m_aValues.clear();
205 class SectionPropertyMap : public PropertyMap
207 public:
208 enum class BorderApply
210 ToAllInSection = 0,
211 ToFirstPageInSection = 1,
212 ToAllButFirstInSection = 2
214 enum class BorderOffsetFrom
216 Text = 0,
217 Edge = 1,
219 private:
220 #ifdef DBG_UTIL
221 sal_Int32 m_nDebugSectionNumber;
222 #endif
224 // 'temporarily' the section page settings are imported as page styles
225 // empty strings mark page settings as not yet imported
227 bool m_bIsFirstSection;
228 css::uno::Reference< css::text::XTextRange > m_xStartingRange;
230 OUString m_sFirstPageStyleName;
231 OUString m_sFollowPageStyleName;
232 css::uno::Reference< css::beans::XPropertySet > m_aFirstPageStyle;
233 css::uno::Reference< css::beans::XPropertySet > m_aFollowPageStyle;
235 std::optional< css::table::BorderLine2 > m_oBorderLines[4];
236 sal_Int32 m_nBorderDistances[4];
237 BorderApply m_eBorderApply;
238 BorderOffsetFrom m_eBorderOffsetFrom;
239 bool m_bBorderShadows[4];
241 bool m_bTitlePage;
242 sal_Int16 m_nColumnCount;
243 sal_Int32 m_nColumnDistance;
244 css::uno::Reference< css::beans::XPropertySet > m_xColumnContainer;
245 std::vector< sal_Int32 > m_aColWidth;
246 std::vector< sal_Int32 > m_aColDistance;
248 bool m_bSeparatorLineIsOn;
249 bool m_bEvenlySpaced;
251 sal_Int32 m_nPageNumber;
252 // Page number type is a value from css::style::NumberingType.
253 sal_Int16 m_nPageNumberType;
254 sal_Int32 m_nBreakType;
256 sal_Int32 m_nLeftMargin;
257 sal_Int32 m_nRightMargin;
258 sal_Int32 m_nGutterMargin;
259 sal_Int32 m_nTopMargin;
260 sal_Int32 m_nBottomMargin;
261 sal_Int32 m_nHeaderTop;
262 sal_Int32 m_nHeaderBottom;
264 sal_Int32 m_nGridType;
265 sal_Int32 m_nGridLinePitch;
266 sal_Int32 m_nDxtCharSpace;
267 bool m_bGridSnapToChars;
269 // line numbering
270 sal_Int32 m_nLnnMod;
271 sal_uInt32 m_nLnc;
272 sal_Int32 m_ndxaLnn;
273 sal_Int32 m_nLnnMin;
275 bool m_bDynamicHeightTop;
276 bool m_bDynamicHeightBottom;
278 std::vector<css::uno::Reference<css::drawing::XShape>> m_xRelativeWidthShapes;
280 // The "Link To Previous" flag indicates whether the header/footer
281 // content should be taken from the previous section
282 bool m_bDefaultHeaderLinkToPrevious;
283 bool m_bEvenPageHeaderLinkToPrevious;
284 bool m_bFirstPageHeaderLinkToPrevious;
285 bool m_bDefaultFooterLinkToPrevious;
286 bool m_bEvenPageFooterLinkToPrevious;
287 bool m_bFirstPageFooterLinkToPrevious;
289 void ApplyProperties_( const css::uno::Reference< css::beans::XPropertySet >& xStyle );
291 void DontBalanceTextColumns();
293 /// Apply section-specific properties: only valid to use after PageStyle has been determined by InheritOrFinalizePageStyles
294 void ApplySectionProperties( const css::uno::Reference< css::beans::XPropertySet >& xSection, DomainMapper_Impl& rDM_Impl );
296 /// Check if document is protected. If so, ensure a section exists, and apply its protected value.
297 void ApplyProtectionProperties( css::uno::Reference< css::beans::XPropertySet >& xSection, DomainMapper_Impl& rDM_Impl );
299 css::uno::Reference< css::text::XTextColumns > ApplyColumnProperties( const css::uno::Reference< css::beans::XPropertySet >& xFollowPageStyle,
300 DomainMapper_Impl& rDM_Impl);
302 void CopyLastHeaderFooter( bool bFirstPage, DomainMapper_Impl& rDM_Impl );
304 static void CopyHeaderFooter( const DomainMapper_Impl& rDM_Impl,
305 const css::uno::Reference< css::beans::XPropertySet >& xPrevStyle,
306 const css::uno::Reference< css::beans::XPropertySet >& xStyle,
307 bool bOmitRightHeader = false, bool bOmitLeftHeader = false,
308 bool bOmitRightFooter = false, bool bOmitLeftFooter = false );
310 static void CopyHeaderFooterTextProperty( const css::uno::Reference< css::beans::XPropertySet >& xPrevStyle,
311 const css::uno::Reference< css::beans::XPropertySet >& xStyle,
312 PropertyIds ePropId );
314 void PrepareHeaderFooterProperties( bool bFirstPage );
316 bool HasHeader( bool bFirstPage ) const;
317 bool HasFooter( bool bFirstPage ) const;
319 static void SetBorderDistance( const css::uno::Reference< css::beans::XPropertySet >& xStyle,
320 PropertyIds eMarginId,
321 PropertyIds eDistId,
322 sal_Int32 nDistance,
323 BorderOffsetFrom eOffsetFrom,
324 sal_uInt32 nLineWidth,
325 DomainMapper_Impl& rDM_Impl );
327 /// Increases paragraph spacing according to Word 2013+ needs if necessary.
328 void HandleIncreasedAnchoredObjectSpacing(DomainMapper_Impl& rDM_Impl);
330 public:
331 enum PageType
333 PAGE_FIRST,
334 PAGE_LEFT,
335 PAGE_RIGHT
338 explicit SectionPropertyMap( bool bIsFirstSection );
340 bool IsFirstSection() const { return m_bIsFirstSection; }
342 void SetStart( const css::uno::Reference< css::text::XTextRange >& xRange ) { m_xStartingRange = xRange; }
344 const css::uno::Reference< css::text::XTextRange >& GetStartingRange() const { return m_xStartingRange; }
346 css::uno::Reference< css::beans::XPropertySet > GetPageStyle( DomainMapper_Impl& rDM_Impl, bool bFirst );
348 const OUString& GetPageStyleName( bool bFirstPage = false )
350 return bFirstPage ? m_sFirstPageStyleName : m_sFollowPageStyleName;
353 // @throws css::beans::UnknownPropertyException
354 // @throws css::beans::PropertyVetoException
355 // @throws css::lang::IllegalArgumentException
356 // @throws css::lang::WrappedTargetException
357 // @throws css::uno::RuntimeException
358 void InheritOrFinalizePageStyles( DomainMapper_Impl& rDM_Impl );
360 void SetBorder( BorderPosition ePos, sal_Int32 nLineDistance, const css::table::BorderLine2& rBorderLine, bool bShadow );
361 void SetBorderApply( BorderApply nSet ) { m_eBorderApply = nSet; }
362 void SetBorderOffsetFrom( BorderOffsetFrom nSet ) { m_eBorderOffsetFrom = nSet; }
364 void SetColumnCount( sal_Int16 nCount ) { m_nColumnCount = nCount; }
365 sal_Int16 ColumnCount() const { return m_nColumnCount; }
367 void SetColumnDistance( sal_Int32 nDist ) { m_nColumnDistance = nDist; }
368 void AppendColumnWidth( sal_Int32 nWidth ) { m_aColWidth.push_back( nWidth ); }
369 void AppendColumnSpacing( sal_Int32 nDist ) { m_aColDistance.push_back( nDist ); }
371 void SetTitlePage( bool bSet ) { m_bTitlePage = bSet; }
372 void SetSeparatorLine( bool bSet ) { m_bSeparatorLineIsOn = bSet; }
373 void SetEvenlySpaced( bool bSet ) { m_bEvenlySpaced = bSet; }
374 void SetPageNumber( sal_Int32 nSet ) { m_nPageNumber = nSet; }
375 void SetPageNumberType( sal_Int32 nSet ) { m_nPageNumberType = nSet; }
376 void SetBreakType( sal_Int32 nSet ) { m_nBreakType = nSet; }
377 // GetBreakType returns -1 if the breakType has not yet been identified for the section
378 sal_Int32 GetBreakType() const { return m_nBreakType; }
380 void SetLeftMargin( sal_Int32 nSet ) { m_nLeftMargin = nSet; }
381 sal_Int32 GetLeftMargin() const { return m_nLeftMargin; }
382 void SetRightMargin( sal_Int32 nSet ) { m_nRightMargin = nSet; }
383 sal_Int32 GetRightMargin() const { return m_nRightMargin; }
384 void SetTopMargin(sal_Int32 nSet) { m_bDynamicHeightTop = nSet >= 0; m_nTopMargin = std::abs(nSet); }
385 void SetBottomMargin( sal_Int32 nSet ) { m_bDynamicHeightBottom = nSet >= 0; m_nBottomMargin = std::abs(nSet); }
386 void SetHeaderTop( sal_Int32 nSet ) { m_nHeaderTop = nSet; }
387 void SetHeaderBottom( sal_Int32 nSet ) { m_nHeaderBottom = nSet; }
388 void SetGutterMargin( sal_Int32 nGutterMargin ) { m_nGutterMargin = nGutterMargin; }
389 sal_Int32 GetPageWidth() const;
391 void SetGridType( sal_Int32 nSet ) { m_nGridType = nSet; }
392 void SetGridLinePitch( sal_Int32 nSet ) { m_nGridLinePitch = nSet; }
393 void SetGridSnapToChars( bool bSet ) { m_bGridSnapToChars = bSet; }
394 void SetDxtCharSpace( sal_Int32 nSet ) { m_nDxtCharSpace = nSet; }
396 void SetLnnMod( sal_Int32 nValue ) { m_nLnnMod = nValue; }
397 void SetLnc( sal_Int32 nValue ) { m_nLnc = nValue; }
398 void SetdxaLnn( sal_Int32 nValue ) { m_ndxaLnn = nValue; }
399 void SetLnnMin( sal_Int32 nValue ) { m_nLnnMin = nValue; }
401 void addRelativeWidthShape( css::uno::Reference<css::drawing::XShape> xShape ) { m_xRelativeWidthShapes.push_back( xShape ); }
403 // determine which style gets the borders
404 void ApplyBorderToPageStyles( DomainMapper_Impl &rDM_Impl,
405 BorderApply eBorderApply, BorderOffsetFrom eOffsetFrom );
407 void CloseSectionGroup( DomainMapper_Impl& rDM_Impl );
408 // Handling of margins, header and footer for any kind of sections breaks.
409 void HandleMarginsHeaderFooter( bool bFirstPage, DomainMapper_Impl& rDM_Impl );
410 void ClearHeaderFooterLinkToPrevious( bool bHeader, PageType eType );
413 void BeforeConvertToTextFrame(std::deque<css::uno::Any>& rFramedRedlines, std::vector<sal_Int32>& redPos, std::vector<sal_Int32>& redLen, std::vector<OUString>& redCell, std::vector<OUString>& redTable);
415 void AfterConvertToTextFrame(DomainMapper_Impl& rDM_Impl, std::deque<css::uno::Any>& aFramedRedlines, std::vector<sal_Int32>& redPos, std::vector<sal_Int32>& redLen, std::vector<OUString>& redCell, std::vector<OUString>& redTable);
417 class ParagraphProperties : public SvRefBase
419 private:
420 bool m_bFrameMode;
421 sal_Int32 m_nDropCap; // drop, margin ST_DropCap
422 sal_Int32 m_nLines; // number of lines of the drop cap
423 sal_Int32 m_w; // width
424 sal_Int32 m_h; // height
425 css::text::WrapTextMode m_nWrap; // from ST_Wrap around, auto, none, notBeside, through, tight
426 sal_Int32 m_hAnchor; // page, from ST_HAnchor margin, page, text
427 sal_Int32 m_vAnchor; // around from ST_VAnchor margin, page, text
428 sal_Int32 m_x; // x-position
429 bool m_bxValid;
430 sal_Int32 m_y; // y-position
431 bool m_byValid;
432 sal_Int32 m_hSpace; // frame padding h
433 sal_Int32 m_vSpace; // frame padding v
434 sal_Int32 m_hRule; // from ST_HeightRule exact, atLeast, auto
435 sal_Int32 m_xAlign; // from ST_XAlign center, inside, left, outside, right
436 sal_Int32 m_yAlign; // from ST_YAlign bottom, center, inline, inside, outside, top
437 sal_Int8 m_nDropCapLength; // number of characters
438 OUString m_sParaStyleName;
439 OUString m_sParaId; // [MS-DOCX] sect. 2.2.4 "p and tr Extensions"
441 css::uno::Reference< css::text::XTextRange > m_xStartingRange; // start of a frame
442 css::uno::Reference< css::text::XTextRange > m_xEndingRange; // end of the frame
443 sal_Int32 m_nListId = -1;
445 public:
446 ParagraphProperties();
448 ParagraphProperties(ParagraphProperties const &) = default;
449 ParagraphProperties(ParagraphProperties &&) = default;
450 ParagraphProperties & operator =(ParagraphProperties const &) = default;
451 ParagraphProperties & operator =(ParagraphProperties &&) = default;
453 sal_Int32 GetListId() const { return m_nListId; }
454 void SetListId( sal_Int32 nId ) { m_nListId = nId; }
456 bool IsFrameMode() const { return m_bFrameMode; }
457 void SetFrameMode( bool set = true ) { m_bFrameMode = set; }
459 sal_Int32 GetDropCap() const { return m_nDropCap; }
460 void SetDropCap( sal_Int32 nSet ) { m_nDropCap = nSet; }
462 sal_Int32 GetLines() const { return m_nLines; }
463 void SetLines( sal_Int32 nSet ) { m_nLines = nSet; }
465 sal_Int32 Getw() const { return m_w; }
466 void Setw( sal_Int32 nSet ) { m_w = nSet; }
468 sal_Int32 Geth() const { return m_h; }
469 void Seth( sal_Int32 nSet ) { m_h = nSet; }
471 css::text::WrapTextMode GetWrap() const { return m_nWrap; }
472 void SetWrap( css::text::WrapTextMode nSet ) { m_nWrap = nSet; }
474 sal_Int32 GethAnchor() const { return m_hAnchor; }
475 void SethAnchor( sal_Int32 nSet ) { m_hAnchor = nSet; }
477 sal_Int32 GetvAnchor() const { return m_vAnchor; }
478 void SetvAnchor( sal_Int32 nSet ) { m_vAnchor = nSet; }
480 sal_Int32 Getx() const { return m_x; }
481 void Setx( sal_Int32 nSet ) { m_x = nSet; m_bxValid = true; }
482 bool IsxValid() const { return m_bxValid; }
484 sal_Int32 Gety() const { return m_y; }
485 void Sety( sal_Int32 nSet ) { m_y = nSet; m_byValid = true; }
486 bool IsyValid() const { return m_byValid; }
488 void SethSpace( sal_Int32 nSet ) { m_hSpace = nSet; }
489 sal_Int32 GethSpace() const { return m_hSpace; }
491 sal_Int32 GetvSpace() const { return m_vSpace; }
492 void SetvSpace( sal_Int32 nSet ) { m_vSpace = nSet; }
494 sal_Int32 GethRule() const { return m_hRule; }
495 void SethRule( sal_Int32 nSet ) { m_hRule = nSet; }
497 sal_Int32 GetxAlign() const { return m_xAlign; }
498 void SetxAlign( sal_Int32 nSet ) { m_xAlign = nSet; }
500 sal_Int32 GetyAlign() const { return m_yAlign; }
501 void SetyAlign( sal_Int32 nSet ) { m_yAlign = nSet; }
503 sal_Int8 GetDropCapLength() const { return m_nDropCapLength; }
504 void SetDropCapLength( sal_Int8 nSet ) { m_nDropCapLength = nSet; }
506 const css::uno::Reference< css::text::XTextRange >& GetStartingRange() const { return m_xStartingRange; }
507 void SetStartingRange( const css::uno::Reference< css::text::XTextRange >& xSet ) { m_xStartingRange = xSet; }
509 const css::uno::Reference< css::text::XTextRange >& GetEndingRange() const { return m_xEndingRange; }
510 void SetEndingRange( const css::uno::Reference< css::text::XTextRange >& xSet ) { m_xEndingRange = xSet; }
512 const OUString& GetParaStyleName() const { return m_sParaStyleName; }
513 void SetParaStyleName( const OUString& rSet ) { m_sParaStyleName = rSet; }
515 const OUString& GetParaId() const { return m_sParaId; }
516 void SetParaId(const OUString& rSet) { m_sParaId = rSet; }
518 void ResetFrameProperties();
521 typedef tools::SvRef< ParagraphProperties > ParagraphPropertiesPtr;
523 class ParagraphPropertiesPropertyMap: public PropertyMap {
524 public:
525 ParagraphProperties & props() { return m_props; }
527 ParagraphProperties const & props() const { return m_props; }
529 private:
530 ParagraphProperties m_props;
533 /*-------------------------------------------------------------------------
534 property map of a stylesheet
535 -----------------------------------------------------------------------*/
537 #define WW_OUTLINE_MAX sal_Int16( 9 )
538 #define WW_OUTLINE_MIN sal_Int16( 0 )
540 class StyleSheetPropertyMap
541 : public ParagraphPropertiesPropertyMap
543 private:
544 sal_Int16 mnListLevel;
545 sal_Int16 mnOutlineLevel;
547 public:
548 explicit StyleSheetPropertyMap();
550 sal_Int16 GetListLevel() const { return mnListLevel; }
551 void SetListLevel( sal_Int16 nLevel ) { mnListLevel = nLevel; }
553 sal_Int16 GetOutlineLevel() const { return mnOutlineLevel; }
554 void SetOutlineLevel(sal_Int16 nLevel) { if (nLevel <= WW_OUTLINE_MAX) mnOutlineLevel = nLevel; }
557 class ParagraphPropertyMap
558 : public ParagraphPropertiesPropertyMap
560 public:
561 explicit ParagraphPropertyMap() {}
564 class TablePropertyMap
565 : public PropertyMap
567 public:
568 enum TablePropertyMapTarget
570 TablePropertyMapTarget_START,
571 CELL_MAR_LEFT = TablePropertyMapTarget_START,
572 CELL_MAR_RIGHT,
573 CELL_MAR_TOP,
574 CELL_MAR_BOTTOM,
575 TABLE_WIDTH,
576 TABLE_WIDTH_TYPE,
577 LEFT_MARGIN,
578 HORI_ORIENT,
579 TablePropertyMapTarget_MAX
582 private:
583 struct ValidValue
585 sal_Int32 nValue;
586 bool bValid;
588 ValidValue()
589 : nValue( 0 )
590 , bValid( false )
595 ValidValue m_aValidValues[TablePropertyMapTarget_MAX];
597 public:
598 explicit TablePropertyMap() {}
600 bool getValue( TablePropertyMapTarget eWhich, sal_Int32& nFill );
601 void setValue( TablePropertyMapTarget eWhich, sal_Int32 nSet );
603 virtual void insertTableProperties( const PropertyMap*, const bool bOverwrite = true ) override;
606 typedef tools::SvRef< TablePropertyMap > TablePropertyMapPtr;
608 /// Information about a paragraph to be finished after a table end.
609 struct TableParagraph
611 css::uno::Reference<css::text::XTextRange> m_rStartParagraph;
612 css::uno::Reference<css::text::XTextRange> m_rEndParagraph;
613 PropertyMapPtr m_pPropertyMap;
614 css::uno::Reference<css::beans::XPropertySet> m_rPropertySet;
617 typedef std::shared_ptr< std::vector<TableParagraph> > TableParagraphVectorPtr;
619 } // namespace writerfilter::dmapper
621 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */