diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2018-10-17 23:04:19 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2018-10-18 13:28:06 +0200 |
commit | 8ea9de4f7a7bec1ba6e20defa243655f7c3e0db8 (patch) | |
tree | f3c86191b1d37937ef22e435f50ade30bf391a36 /writerfilter/source | |
parent | 2e57dac3b44a17d4c45f242059d43225e79174e3 (diff) |
Turn BorderHandler::BorderPosition into scoped enum
...to avoid -Werror,-Wshadow from Clang trunk with
<https://reviews.llvm.org/D52400> "Improve -Wshadow warnings with enumerators",
warning about shadowing of BORDER_TOP/LEFT/BOTTOM/RIGHT in enum BorderPosition
in writerfilter/source/dmapper/PropertyMap.hxx.
Also, BorderPosition can apparently be made a private member of BorderHandler,
which gives extra confidence that any other uses of BORDER_TOP/LEFT/BOTTOM/RIGHT
across writerfilter/source/dmapper/ indeed meant to reference the other enum
BorderPosition.
And change BorderHandler::lcl_sprm to return early in default case, to avoid
having to come up with some new BorderPosition sentinel value to represent
"invalid pos".
Change-Id: I31e535326627cec25a17b99485bf7cf56f4c66d3
Reviewed-on: https://gerrit.libreoffice.org/61896
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'writerfilter/source')
-rw-r--r-- | writerfilter/source/dmapper/BorderHandler.cxx | 64 | ||||
-rw-r--r-- | writerfilter/source/dmapper/BorderHandler.hxx | 24 |
2 files changed, 43 insertions, 45 deletions
diff --git a/writerfilter/source/dmapper/BorderHandler.cxx b/writerfilter/source/dmapper/BorderHandler.cxx index 0a07c9753393..ec37f8aa26e3 100644 --- a/writerfilter/source/dmapper/BorderHandler.cxx +++ b/writerfilter/source/dmapper/BorderHandler.cxx @@ -21,6 +21,8 @@ #include "PropertyMap.hxx" #include "ConversionHelper.hxx" #include <com/sun/star/table/BorderLine2.hpp> +#include <o3tl/enumarray.hxx> +#include <o3tl/enumrange.hxx> #include <ooxml/resourceids.hxx> #include <filter/msfilter/util.hxx> #include <comphelper/sequence.hxx> @@ -42,9 +44,8 @@ m_nLineDistance(0), m_bShadow(false), m_bOOXML( bOOXML ) { - const int nBorderCount(BORDER_COUNT); - std::fill_n(m_aFilledLines, nBorderCount, false); - std::fill_n(m_aBorderLines, nBorderCount, table::BorderLine2()); + m_aFilledLines.fill(false); + m_aBorderLines.fill(table::BorderLine2()); } BorderHandler::~BorderHandler() @@ -90,73 +91,70 @@ void BorderHandler::lcl_attribute(Id rName, Value & rVal) void BorderHandler::lcl_sprm(Sprm & rSprm) { - BorderPosition pos = BORDER_COUNT; // invalid pos + BorderPosition pos; const bool rtl = false; // TODO detect OUString aBorderPos; switch( rSprm.getId()) { case NS_ooxml::LN_CT_TblBorders_top: - pos = BORDER_TOP; + pos = BorderPosition::Top; aBorderPos = "top"; break; case NS_ooxml::LN_CT_TblBorders_start: - pos = rtl ? BORDER_RIGHT : BORDER_LEFT; + pos = rtl ? BorderPosition::Right : BorderPosition::Left; aBorderPos = "start"; break; case NS_ooxml::LN_CT_TblBorders_left: - pos = BORDER_LEFT; + pos = BorderPosition::Left; aBorderPos = "left"; break; case NS_ooxml::LN_CT_TblBorders_bottom: - pos = BORDER_BOTTOM; + pos = BorderPosition::Bottom; aBorderPos = "bottom"; break; case NS_ooxml::LN_CT_TblBorders_end: - pos = rtl ? BORDER_LEFT : BORDER_RIGHT; + pos = rtl ? BorderPosition::Left : BorderPosition::Right; aBorderPos = "end"; break; case NS_ooxml::LN_CT_TblBorders_right: - pos = BORDER_RIGHT; + pos = BorderPosition::Right; aBorderPos = "right"; break; case NS_ooxml::LN_CT_TblBorders_insideH: - pos = BORDER_HORIZONTAL; + pos = BorderPosition::Horizontal; aBorderPos = "insideH"; break; case NS_ooxml::LN_CT_TblBorders_insideV: - pos = BORDER_VERTICAL; + pos = BorderPosition::Vertical; aBorderPos = "insideV"; break; default: - break; + return; } - if( pos != BORDER_COUNT ) + writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps(); + if( pProperties.get()) { - writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps(); - if( pProperties.get()) + std::vector<beans::PropertyValue> aSavedGrabBag; + if (!m_aInteropGrabBagName.isEmpty()) { - std::vector<beans::PropertyValue> aSavedGrabBag; - if (!m_aInteropGrabBagName.isEmpty()) - { - aSavedGrabBag = m_aInteropGrabBag; - m_aInteropGrabBag.clear(); - } - pProperties->resolve(*this); - if (!m_aInteropGrabBagName.isEmpty()) - { - aSavedGrabBag.push_back(getInteropGrabBag(aBorderPos)); - m_aInteropGrabBag = aSavedGrabBag; - } + aSavedGrabBag = m_aInteropGrabBag; + m_aInteropGrabBag.clear(); + } + pProperties->resolve(*this); + if (!m_aInteropGrabBagName.isEmpty()) + { + aSavedGrabBag.push_back(getInteropGrabBag(aBorderPos)); + m_aInteropGrabBag = aSavedGrabBag; } - ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor, - m_aBorderLines[ pos ], m_bOOXML ); - m_aFilledLines[ pos ] = true; } + ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor, + m_aBorderLines[ pos ], m_bOOXML ); + m_aFilledLines[ pos ] = true; } PropertyMapPtr BorderHandler::getProperties() { - static const PropertyIds aPropNames[BORDER_COUNT] = + static const o3tl::enumarray<BorderPosition, PropertyIds> aPropNames = { PROP_TOP_BORDER, PROP_LEFT_BORDER, @@ -169,7 +167,7 @@ PropertyMapPtr BorderHandler::getProperties() // don't fill in default properties if( m_bOOXML ) { - for( sal_Int32 nProp = 0; nProp < BORDER_COUNT; ++nProp) + for( auto nProp: o3tl::enumrange<BorderPosition>()) { if ( m_aFilledLines[nProp] ) { pPropertyMap->Insert( aPropNames[nProp], uno::makeAny( m_aBorderLines[nProp] ) ); diff --git a/writerfilter/source/dmapper/BorderHandler.hxx b/writerfilter/source/dmapper/BorderHandler.hxx index b3d3ea7d0266..9d8001d51050 100644 --- a/writerfilter/source/dmapper/BorderHandler.hxx +++ b/writerfilter/source/dmapper/BorderHandler.hxx @@ -24,6 +24,7 @@ #include <memory> #include <com/sun/star/table/BorderLine2.hpp> #include <com/sun/star/beans/PropertyValue.hpp> +#include <o3tl/enumarray.hxx> namespace writerfilter { namespace dmapper @@ -31,20 +32,19 @@ namespace dmapper class PropertyMap; class BorderHandler : public LoggedProperties { -public: +private: //todo: order is a guess - enum BorderPosition + enum class BorderPosition { - BORDER_TOP, - BORDER_LEFT, - BORDER_BOTTOM, - BORDER_RIGHT, - BORDER_HORIZONTAL, - BORDER_VERTICAL, - BORDER_COUNT + Top, + Left, + Bottom, + Right, + Horizontal, + Vertical, + LAST = Vertical }; -private: //values of the current border sal_Int32 m_nLineWidth; sal_Int32 m_nLineType; @@ -53,8 +53,8 @@ private: bool m_bShadow; bool const m_bOOXML; - bool m_aFilledLines[BORDER_COUNT]; - css::table::BorderLine2 m_aBorderLines[BORDER_COUNT]; + o3tl::enumarray<BorderPosition, bool> m_aFilledLines; + o3tl::enumarray<BorderPosition, css::table::BorderLine2> m_aBorderLines; OUString m_aInteropGrabBagName; std::vector<css::beans::PropertyValue> m_aInteropGrabBag; void appendGrabBag(const OUString& aKey, const OUString& aValue); |