sw/inc/unostyle.hxx | 61 -- sw/source/core/unocore/unostyle.cxx | 1025 ++++++++++++++++-------------------- 2 files changed, 463 insertions(+), 623 deletions(-)
New commits: commit 13c8fe55de98560e136b741addbf8f78fd934bd5 Author: Bjoern Michaelsen <[email protected]> Date: Sun Nov 29 00:59:50 2015 +0100 our little MSVC cant read C++11 proper and has special needs instead ... Change-Id: Ibc5ed9406679f469a7d4855f08f1a8c23c7239ef diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 734f075..d789611 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -115,22 +115,23 @@ namespace {} }; static const std::vector<StyleFamilyEntry>* our_pStyleFamilyEntries; - constexpr sal_uInt16 nPoolChrNormalRange = RES_POOLCHR_NORMAL_END - RES_POOLCHR_NORMAL_BEGIN; - constexpr sal_uInt16 nPoolChrHtmlRange = RES_POOLCHR_HTML_END - RES_POOLCHR_HTML_BEGIN; - constexpr sal_uInt16 nPoolCollTextRange = RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN; - constexpr sal_uInt16 nPoolCollListsRange = RES_POOLCOLL_LISTS_END - RES_POOLCOLL_LISTS_BEGIN; - constexpr sal_uInt16 nPoolCollExtraRange = RES_POOLCOLL_EXTRA_END - RES_POOLCOLL_EXTRA_BEGIN; - constexpr sal_uInt16 nPoolCollRegisterRange = RES_POOLCOLL_REGISTER_END - RES_POOLCOLL_REGISTER_BEGIN; - constexpr sal_uInt16 nPoolCollDocRange = RES_POOLCOLL_DOC_END - RES_POOLCOLL_DOC_BEGIN; - constexpr sal_uInt16 nPoolCollHtmlRange = RES_POOLCOLL_HTML_END - RES_POOLCOLL_HTML_BEGIN; - constexpr sal_uInt16 nPoolFrameRange = RES_POOLFRM_END - RES_POOLFRM_BEGIN; - constexpr sal_uInt16 nPoolPageRange = RES_POOLPAGE_END - RES_POOLPAGE_BEGIN; - constexpr sal_uInt16 nPoolNumRange = RES_POOLNUMRULE_END - RES_POOLNUMRULE_BEGIN; - constexpr sal_uInt16 nPoolCollListsStackedStart = nPoolCollTextRange; - constexpr sal_uInt16 nPoolCollExtraStackedStart = nPoolCollListsStackedStart + nPoolCollListsRange; - constexpr sal_uInt16 nPoolCollRegisterStackedStart = nPoolCollExtraStackedStart + nPoolCollExtraRange; - constexpr sal_uInt16 nPoolCollDocStackedStart = nPoolCollRegisterStackedStart + nPoolCollRegisterRange; - constexpr sal_uInt16 nPoolCollHtmlStackedStart = nPoolCollDocStackedStart + nPoolCollDocRange; + // these should really be constexprs, but MSVC still is apparently too stupid for them + #define nPoolChrNormalRange (RES_POOLCHR_NORMAL_END - RES_POOLCHR_NORMAL_BEGIN) + #define nPoolChrHtmlRange (RES_POOLCHR_HTML_END - RES_POOLCHR_HTML_BEGIN) + #define nPoolCollTextRange ( RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN) + #define nPoolCollListsRange ( RES_POOLCOLL_LISTS_END - RES_POOLCOLL_LISTS_BEGIN) + #define nPoolCollExtraRange ( RES_POOLCOLL_EXTRA_END - RES_POOLCOLL_EXTRA_BEGIN) + #define nPoolCollRegisterRange ( RES_POOLCOLL_REGISTER_END - RES_POOLCOLL_REGISTER_BEGIN) + #define nPoolCollDocRange ( RES_POOLCOLL_DOC_END - RES_POOLCOLL_DOC_BEGIN) + #define nPoolCollHtmlRange ( RES_POOLCOLL_HTML_END - RES_POOLCOLL_HTML_BEGIN) + #define nPoolFrameRange ( RES_POOLFRM_END - RES_POOLFRM_BEGIN) + #define nPoolPageRange ( RES_POOLPAGE_END - RES_POOLPAGE_BEGIN) + #define nPoolNumRange ( RES_POOLNUMRULE_END - RES_POOLNUMRULE_BEGIN) + #define nPoolCollListsStackedStart ( nPoolCollTextRange) + #define nPoolCollExtraStackedStart ( nPoolCollListsStackedStart + nPoolCollListsRange) + #define nPoolCollRegisterStackedStart ( nPoolCollExtraStackedStart + nPoolCollExtraRange) + #define nPoolCollDocStackedStart ( nPoolCollRegisterStackedStart + nPoolCollRegisterRange) + #define nPoolCollHtmlStackedStart ( nPoolCollDocStackedStart + nPoolCollDocRange) } static const std::vector<StyleFamilyEntry>* lcl_GetStyleFamilyEntries(); @@ -397,7 +398,7 @@ static sal_Int32 lcl_GetCountOrName(const SwDoc&, OUString*, sal_Int32); template<> sal_Int32 lcl_GetCountOrName<SFX_STYLE_FAMILY_CHAR>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) { - constexpr sal_Int32 nBaseCount = nPoolChrHtmlRange + nPoolCollTextRange; + const sal_uInt16 nBaseCount = nPoolChrHtmlRange + nPoolCollTextRange; nIndex -= nBaseCount; sal_Int32 nCount = 0; for(auto pFormat : *rDoc.GetCharFormats()) @@ -423,7 +424,7 @@ sal_Int32 lcl_GetCountOrName<SFX_STYLE_FAMILY_CHAR>(const SwDoc& rDoc, OUString* template<> sal_Int32 lcl_GetCountOrName<SFX_STYLE_FAMILY_PARA>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) { - constexpr sal_Int32 nBaseCount = nPoolCollHtmlStackedStart + nPoolCollHtmlRange; + const sal_uInt16 nBaseCount = nPoolCollHtmlStackedStart + nPoolCollHtmlRange; nIndex -= nBaseCount; sal_Int32 nCount = 0; for(auto pColl : *rDoc.GetTextFormatColls()) commit 7cb3a2c35e29207008bac44d7ace10ca9e866d99 Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 18:01:02 2015 +0100 use a range template for the frame,page,pseudo translations Change-Id: I50698023c006025bad4ae5d9a632c20b8f897006 diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 6d5c4db..734f075 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -551,27 +551,11 @@ sal_uInt16 lcl_TranslateIndex<SFX_STYLE_FAMILY_PARA>(const sal_uInt16 nIndex) throw lang::IndexOutOfBoundsException(); } -template<> -sal_uInt16 lcl_TranslateIndex<SFX_STYLE_FAMILY_FRAME>(const sal_uInt16 nIndex) -{ - if(nIndex < nPoolFrameRange) - return nIndex + RES_POOLFRM_BEGIN; - throw lang::IndexOutOfBoundsException(); -} - -template<> -sal_uInt16 lcl_TranslateIndex<SFX_STYLE_FAMILY_PAGE>(const sal_uInt16 nIndex) -{ - if(nIndex < nPoolPageRange) - return nIndex + RES_POOLPAGE_BEGIN; - throw lang::IndexOutOfBoundsException(); -} - -template<> -sal_uInt16 lcl_TranslateIndex<SFX_STYLE_FAMILY_PSEUDO>(const sal_uInt16 nIndex) +template<sal_uInt16 nRangeBegin, sal_uInt16 nRangeSize> +static sal_uInt16 lcl_TranslateIndexRange(const sal_uInt16 nIndex) { - if(nIndex < nPoolNumRange) - return nIndex + RES_POOLNUMRULE_BEGIN; + if(nIndex < nRangeSize) + return nIndex + nRangeBegin; throw lang::IndexOutOfBoundsException(); } @@ -758,11 +742,11 @@ static const std::vector<StyleFamilyEntry>* lcl_GetStyleFamilyEntries() if(!our_pStyleFamilyEntries) { our_pStyleFamilyEntries = new std::vector<StyleFamilyEntry>{ - { SFX_STYLE_FAMILY_CHAR, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, "CharacterStyles", STR_STYLE_FAMILY_CHARACTER, &lcl_GetCountOrName<SFX_STYLE_FAMILY_CHAR>, &lcl_CreateStyle<SFX_STYLE_FAMILY_CHAR>, &lcl_TranslateIndex<SFX_STYLE_FAMILY_CHAR> }, - { SFX_STYLE_FAMILY_PARA, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, "ParagraphStyles", STR_STYLE_FAMILY_PARAGRAPH, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PARA>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PARA>, &lcl_TranslateIndex<SFX_STYLE_FAMILY_PARA> }, - { SFX_STYLE_FAMILY_PAGE, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, "PageStyles", STR_STYLE_FAMILY_PAGE, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PAGE>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PAGE>, &lcl_TranslateIndex<SFX_STYLE_FAMILY_PAGE> }, - { SFX_STYLE_FAMILY_FRAME, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, "FrameStyles", STR_STYLE_FAMILY_FRAME, &lcl_GetCountOrName<SFX_STYLE_FAMILY_FRAME>, &lcl_CreateStyle<SFX_STYLE_FAMILY_FRAME>, &lcl_TranslateIndex<SFX_STYLE_FAMILY_FRAME> }, - { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PSEUDO>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PSEUDO>, &lcl_TranslateIndex<SFX_STYLE_FAMILY_PSEUDO> } + { SFX_STYLE_FAMILY_CHAR, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, "CharacterStyles", STR_STYLE_FAMILY_CHARACTER, &lcl_GetCountOrName<SFX_STYLE_FAMILY_CHAR>, &lcl_CreateStyle<SFX_STYLE_FAMILY_CHAR>, &lcl_TranslateIndex<SFX_STYLE_FAMILY_CHAR> }, + { SFX_STYLE_FAMILY_PARA, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, "ParagraphStyles", STR_STYLE_FAMILY_PARAGRAPH, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PARA>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PARA>, &lcl_TranslateIndex<SFX_STYLE_FAMILY_PARA> }, + { SFX_STYLE_FAMILY_PAGE, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, "PageStyles", STR_STYLE_FAMILY_PAGE, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PAGE>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PAGE>, &lcl_TranslateIndexRange<RES_POOLPAGE_BEGIN, nPoolPageRange> }, + { SFX_STYLE_FAMILY_FRAME, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, "FrameStyles", STR_STYLE_FAMILY_FRAME, &lcl_GetCountOrName<SFX_STYLE_FAMILY_FRAME>, &lcl_CreateStyle<SFX_STYLE_FAMILY_FRAME>, &lcl_TranslateIndexRange<RES_POOLFRM_BEGIN, nPoolFrameRange> }, + { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PSEUDO>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PSEUDO>, &lcl_TranslateIndexRange<RES_POOLNUMRULE_BEGIN, nPoolNumRange> } }; } return our_pStyleFamilyEntries; commit 939657e7c8beca46f0b84faf7a89cda8b789e2f5 Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 17:50:13 2015 +0100 use the entry vector for lcl_TranslateIndex dispatch Change-Id: I4a8361821b9a5af2a59ad29684ee243d2f4591ed diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 7e57dd8..6d5c4db 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -96,19 +96,22 @@ namespace { using GetCountOrName_t = std::function<sal_Int32 (const SwDoc&, OUString*, sal_Int32)>; using CreateStyle_t = std::function<uno::Reference<css::style::XStyle>(SfxStyleSheetBasePool*, SwDocShell*, const OUString&)>; + using TranslateIndex_t = std::function<sal_uInt16(const sal_uInt16)>; SfxStyleFamily m_eFamily; SwGetPoolIdFromName m_aPoolId; OUString m_sName; sal_uInt32 m_nResId; GetCountOrName_t m_fGetCountOrName; CreateStyle_t m_fCreateStyle; - StyleFamilyEntry(SfxStyleFamily eFamily, SwGetPoolIdFromName aPoolId, OUString const& sName, sal_uInt32 nResId, GetCountOrName_t fGetCountOrName, CreateStyle_t fCreateStyle) + TranslateIndex_t m_fTranslateIndex; + StyleFamilyEntry(SfxStyleFamily eFamily, SwGetPoolIdFromName aPoolId, OUString const& sName, sal_uInt32 nResId, GetCountOrName_t fGetCountOrName, CreateStyle_t fCreateStyle, TranslateIndex_t fTranslateIndex) : m_eFamily(eFamily) , m_aPoolId(aPoolId) , m_sName(sName) , m_nResId(nResId) , m_fGetCountOrName(fGetCountOrName) , m_fCreateStyle(fCreateStyle) + , m_fTranslateIndex(fTranslateIndex) {} }; static const std::vector<StyleFamilyEntry>* our_pStyleFamilyEntries; @@ -515,6 +518,63 @@ template<> uno::Reference< css::style::XStyle> lcl_CreateStyle<SFX_STYLE_FAMILY_PAGE>(SfxStyleSheetBasePool* pBasePool, SwDocShell* pDocShell, const OUString& sStyleName) { return new SwXPageStyle(*pBasePool, pDocShell, SFX_STYLE_FAMILY_PAGE, sStyleName); }; +template<enum SfxStyleFamily> +static sal_uInt16 lcl_TranslateIndex(const sal_uInt16 nIndex); + +template<> +sal_uInt16 lcl_TranslateIndex<SFX_STYLE_FAMILY_CHAR>(const sal_uInt16 nIndex) +{ + static_assert(nPoolChrNormalRange > 0 && nPoolChrHtmlRange > 0, "invalid pool range"); + if(nIndex < nPoolChrNormalRange) + return nIndex + RES_POOLCHR_NORMAL_BEGIN; + else if(nIndex < (nPoolChrHtmlRange+nPoolChrNormalRange)) + return nIndex + RES_POOLCHR_HTML_BEGIN + nPoolChrNormalRange; + throw lang::IndexOutOfBoundsException(); +} + +template<> +sal_uInt16 lcl_TranslateIndex<SFX_STYLE_FAMILY_PARA>(const sal_uInt16 nIndex) +{ + static_assert(nPoolCollTextRange > 0 && nPoolCollListsRange > 0 && nPoolCollExtraRange > 0 && nPoolCollRegisterRange > 0 && nPoolCollDocRange > 0 && nPoolCollHtmlRange > 0, "weird pool range"); + if(nIndex < nPoolCollListsStackedStart) + return nIndex + RES_POOLCOLL_TEXT_BEGIN; + else if(nIndex < nPoolCollExtraStackedStart) + return nIndex + RES_POOLCOLL_LISTS_BEGIN + nPoolCollListsStackedStart; + else if(nIndex < nPoolCollRegisterStackedStart) + return nIndex + RES_POOLCOLL_EXTRA_BEGIN + nPoolCollExtraStackedStart; + else if(nIndex < nPoolCollDocStackedStart) + return nIndex + RES_POOLCOLL_REGISTER_BEGIN + nPoolCollRegisterStackedStart; + else if(nIndex < nPoolCollHtmlStackedStart) + return nIndex + RES_POOLCOLL_DOC_BEGIN + nPoolCollDocStackedStart; + else if(nIndex < nPoolCollHtmlStackedStart + nPoolCollTextRange) + return nIndex + RES_POOLCOLL_HTML_BEGIN + nPoolCollHtmlStackedStart; + throw lang::IndexOutOfBoundsException(); +} + +template<> +sal_uInt16 lcl_TranslateIndex<SFX_STYLE_FAMILY_FRAME>(const sal_uInt16 nIndex) +{ + if(nIndex < nPoolFrameRange) + return nIndex + RES_POOLFRM_BEGIN; + throw lang::IndexOutOfBoundsException(); +} + +template<> +sal_uInt16 lcl_TranslateIndex<SFX_STYLE_FAMILY_PAGE>(const sal_uInt16 nIndex) +{ + if(nIndex < nPoolPageRange) + return nIndex + RES_POOLPAGE_BEGIN; + throw lang::IndexOutOfBoundsException(); +} + +template<> +sal_uInt16 lcl_TranslateIndex<SFX_STYLE_FAMILY_PSEUDO>(const sal_uInt16 nIndex) +{ + if(nIndex < nPoolNumRange) + return nIndex + RES_POOLNUMRULE_BEGIN; + throw lang::IndexOutOfBoundsException(); +} + uno::Any XStyleFamily::getByIndex(sal_Int32 nIndex) throw( lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) { @@ -524,58 +584,10 @@ uno::Any XStyleFamily::getByIndex(sal_Int32 nIndex) if(!m_pBasePool) throw uno::RuntimeException(); OUString sStyleName; - switch(m_rEntry.m_eFamily) + try { - case SFX_STYLE_FAMILY_CHAR: - { - static_assert(nPoolChrNormalRange > 0 && nPoolChrHtmlRange > 0, "invalid pool range"); - const sal_uInt16 nIndex16 = static_cast<sal_uInt16>(nIndex); - if(nIndex16 < nPoolChrNormalRange) - SwStyleNameMapper::FillUIName(static_cast<sal_uInt16>(RES_POOLCHR_NORMAL_BEGIN + nIndex), sStyleName); - else if(nIndex16 < (nPoolChrHtmlRange+nPoolChrNormalRange)) - SwStyleNameMapper::FillUIName(RES_POOLCHR_HTML_BEGIN + nPoolChrNormalRange + nIndex, sStyleName ); - } - break; - case SFX_STYLE_FAMILY_PARA: - { - static_assert(nPoolCollTextRange > 0 && nPoolCollListsRange > 0 && nPoolCollExtraRange > 0 && nPoolCollRegisterRange > 0 && nPoolCollDocRange > 0 && nPoolCollHtmlRange > 0, "weird pool range"); - const sal_uInt16 nIndex16 = static_cast<sal_uInt16>(nIndex); - if(nIndex16 < nPoolCollListsStackedStart) - SwStyleNameMapper::FillUIName(RES_POOLCOLL_TEXT_BEGIN + nIndex16, sStyleName); - else if(nIndex16 < nPoolCollExtraStackedStart) - SwStyleNameMapper::FillUIName(RES_POOLCOLL_LISTS_BEGIN + nPoolCollListsStackedStart + nIndex16, sStyleName); - else if(nIndex16 < nPoolCollRegisterStackedStart) - SwStyleNameMapper::FillUIName(RES_POOLCOLL_EXTRA_BEGIN + nPoolCollExtraStackedStart + nIndex16, sStyleName); - else if(nIndex16 < nPoolCollDocStackedStart) - SwStyleNameMapper::FillUIName(RES_POOLCOLL_REGISTER_BEGIN + nPoolCollRegisterStackedStart + nIndex16, sStyleName); - else if(nIndex16 < nPoolCollHtmlStackedStart) - SwStyleNameMapper::FillUIName(RES_POOLCOLL_DOC_BEGIN + nPoolCollDocStackedStart + nIndex16, sStyleName); - else if(nIndex16 < nPoolCollHtmlStackedStart + nPoolCollTextRange) - SwStyleNameMapper::FillUIName(RES_POOLCOLL_HTML_BEGIN + nPoolCollHtmlStackedStart + nIndex16, sStyleName); - } - break; - case SFX_STYLE_FAMILY_FRAME: - { - if(nIndex < nPoolFrameRange) - SwStyleNameMapper::FillUIName(static_cast<sal_uInt16>(RES_POOLFRM_BEGIN + nIndex), sStyleName); - } - break; - case SFX_STYLE_FAMILY_PAGE: - { - if(nIndex < nPoolPageRange) - SwStyleNameMapper::FillUIName(static_cast<sal_uInt16>(RES_POOLPAGE_BEGIN + nIndex), sStyleName); - } - break; - case SFX_STYLE_FAMILY_PSEUDO: - { - if(nIndex < nPoolNumRange) - SwStyleNameMapper::FillUIName(static_cast<sal_uInt16>(RES_POOLNUMRULE_BEGIN + nIndex), sStyleName); - } - break; - - default: - ; - } + SwStyleNameMapper::FillUIName(m_rEntry.m_fTranslateIndex(nIndex), sStyleName); + } catch(...) {} if (sStyleName.isEmpty()) GetCountOrName(&sStyleName, nIndex); @@ -746,11 +758,11 @@ static const std::vector<StyleFamilyEntry>* lcl_GetStyleFamilyEntries() if(!our_pStyleFamilyEntries) { our_pStyleFamilyEntries = new std::vector<StyleFamilyEntry>{ - { SFX_STYLE_FAMILY_CHAR, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, "CharacterStyles", STR_STYLE_FAMILY_CHARACTER, &lcl_GetCountOrName<SFX_STYLE_FAMILY_CHAR>, &lcl_CreateStyle<SFX_STYLE_FAMILY_CHAR> }, - { SFX_STYLE_FAMILY_PARA, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, "ParagraphStyles", STR_STYLE_FAMILY_PARAGRAPH, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PARA>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PARA> }, - { SFX_STYLE_FAMILY_PAGE, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, "PageStyles", STR_STYLE_FAMILY_PAGE, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PAGE>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PAGE> }, - { SFX_STYLE_FAMILY_FRAME, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, "FrameStyles", STR_STYLE_FAMILY_FRAME, &lcl_GetCountOrName<SFX_STYLE_FAMILY_FRAME>, &lcl_CreateStyle<SFX_STYLE_FAMILY_FRAME> }, - { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PSEUDO>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PSEUDO> } + { SFX_STYLE_FAMILY_CHAR, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, "CharacterStyles", STR_STYLE_FAMILY_CHARACTER, &lcl_GetCountOrName<SFX_STYLE_FAMILY_CHAR>, &lcl_CreateStyle<SFX_STYLE_FAMILY_CHAR>, &lcl_TranslateIndex<SFX_STYLE_FAMILY_CHAR> }, + { SFX_STYLE_FAMILY_PARA, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, "ParagraphStyles", STR_STYLE_FAMILY_PARAGRAPH, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PARA>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PARA>, &lcl_TranslateIndex<SFX_STYLE_FAMILY_PARA> }, + { SFX_STYLE_FAMILY_PAGE, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, "PageStyles", STR_STYLE_FAMILY_PAGE, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PAGE>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PAGE>, &lcl_TranslateIndex<SFX_STYLE_FAMILY_PAGE> }, + { SFX_STYLE_FAMILY_FRAME, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, "FrameStyles", STR_STYLE_FAMILY_FRAME, &lcl_GetCountOrName<SFX_STYLE_FAMILY_FRAME>, &lcl_CreateStyle<SFX_STYLE_FAMILY_FRAME>, &lcl_TranslateIndex<SFX_STYLE_FAMILY_FRAME> }, + { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PSEUDO>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PSEUDO>, &lcl_TranslateIndex<SFX_STYLE_FAMILY_PSEUDO> } }; } return our_pStyleFamilyEntries; commit 6521acdabcdceba0b53a6453ec513c3894a8e77a Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 16:09:46 2015 +0100 remove copy patsa Change-Id: I753786b6d3e92f0ebd609cc4430887fd7e2c2f81 diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index d8de4dc..7e57dd8 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -581,13 +581,7 @@ uno::Any XStyleFamily::getByIndex(sal_Int32 nIndex) if(sStyleName.isEmpty()) throw lang::IndexOutOfBoundsException(); - SfxStyleSheetBase* pBase = m_pBasePool->Find(sStyleName, m_rEntry.m_eFamily); - if(!pBase) - throw uno::RuntimeException(); - uno::Reference<style::XStyle> xStyle = _FindStyle(sStyleName); - if(!xStyle.is()) - xStyle = m_rEntry.m_fCreateStyle(m_pBasePool, m_pDocShell, m_rEntry.m_eFamily == SFX_STYLE_FAMILY_FRAME ? pBase->GetName() : sStyleName); - return uno::makeAny(xStyle); + return getByName(sStyleName); } uno::Any XStyleFamily::getByName(const OUString& rName) commit e5e3730265431541c1b0d53e1a5c409204c425f4 Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 15:48:46 2015 +0100 use entries to create styles Change-Id: Ie68277b2ca9f4a82d048c7b74ab6705e8ca164b2 diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 2be224d..d8de4dc 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -94,18 +94,21 @@ namespace { struct StyleFamilyEntry { - using GetCountOrName_t = std::function< sal_Int32 (const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex)>; + using GetCountOrName_t = std::function<sal_Int32 (const SwDoc&, OUString*, sal_Int32)>; + using CreateStyle_t = std::function<uno::Reference<css::style::XStyle>(SfxStyleSheetBasePool*, SwDocShell*, const OUString&)>; SfxStyleFamily m_eFamily; SwGetPoolIdFromName m_aPoolId; OUString m_sName; sal_uInt32 m_nResId; GetCountOrName_t m_fGetCountOrName; - StyleFamilyEntry(SfxStyleFamily eFamily, SwGetPoolIdFromName aPoolId, OUString const& sName, sal_uInt32 nResId, GetCountOrName_t fGetCountOrName) + CreateStyle_t m_fCreateStyle; + StyleFamilyEntry(SfxStyleFamily eFamily, SwGetPoolIdFromName aPoolId, OUString const& sName, sal_uInt32 nResId, GetCountOrName_t fGetCountOrName, CreateStyle_t fCreateStyle) : m_eFamily(eFamily) , m_aPoolId(aPoolId) , m_sName(sName) , m_nResId(nResId) , m_fGetCountOrName(fGetCountOrName) + , m_fCreateStyle(fCreateStyle) {} }; static const std::vector<StyleFamilyEntry>* our_pStyleFamilyEntries; @@ -500,6 +503,17 @@ sal_Int32 lcl_GetCountOrName<SFX_STYLE_FAMILY_PSEUDO>(const SwDoc& rDoc, OUStrin return nCount + nPoolNumRange; } +template<enum SfxStyleFamily eFamily> +static uno::Reference< css::style::XStyle> lcl_CreateStyle(SfxStyleSheetBasePool* pBasePool, SwDocShell* pDocShell, const OUString& sStyleName) + { return new SwXStyle(*pBasePool, eFamily, pDocShell->GetDoc(), sStyleName); }; + +template<> +uno::Reference< css::style::XStyle> lcl_CreateStyle<SFX_STYLE_FAMILY_FRAME>(SfxStyleSheetBasePool* pBasePool, SwDocShell* pDocShell, const OUString& sStyleName) + { return new SwXFrameStyle(*pBasePool, pDocShell->GetDoc(), sStyleName); }; + +template<> +uno::Reference< css::style::XStyle> lcl_CreateStyle<SFX_STYLE_FAMILY_PAGE>(SfxStyleSheetBasePool* pBasePool, SwDocShell* pDocShell, const OUString& sStyleName) + { return new SwXPageStyle(*pBasePool, pDocShell, SFX_STYLE_FAMILY_PAGE, sStyleName); }; uno::Any XStyleFamily::getByIndex(sal_Int32 nIndex) throw( lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) @@ -572,19 +586,7 @@ uno::Any XStyleFamily::getByIndex(sal_Int32 nIndex) throw uno::RuntimeException(); uno::Reference<style::XStyle> xStyle = _FindStyle(sStyleName); if(!xStyle.is()) - { - switch(m_rEntry.m_eFamily) - { - case SFX_STYLE_FAMILY_PAGE: - xStyle = new SwXPageStyle(*m_pBasePool, m_pDocShell, m_rEntry.m_eFamily, sStyleName); - break; - case SFX_STYLE_FAMILY_FRAME: - xStyle = new SwXFrameStyle(*m_pBasePool, m_pDocShell->GetDoc(), pBase->GetName()); - break; - default: - xStyle = new SwXStyle(*m_pBasePool, m_rEntry.m_eFamily, m_pDocShell->GetDoc(), sStyleName); - } - } + xStyle = m_rEntry.m_fCreateStyle(m_pBasePool, m_pDocShell, m_rEntry.m_eFamily == SFX_STYLE_FAMILY_FRAME ? pBase->GetName() : sStyleName); return uno::makeAny(xStyle); } @@ -602,19 +604,7 @@ uno::Any XStyleFamily::getByName(const OUString& rName) throw container::NoSuchElementException(); uno::Reference<style::XStyle> xStyle = _FindStyle(sStyleName); if(!xStyle.is()) - { - switch(m_rEntry.m_eFamily) - { - case SFX_STYLE_FAMILY_PAGE: - xStyle = new SwXPageStyle(*m_pBasePool, m_pDocShell, m_rEntry.m_eFamily, sStyleName); - break; - case SFX_STYLE_FAMILY_FRAME: - xStyle = new SwXFrameStyle(*m_pBasePool, m_pDocShell->GetDoc(), pBase->GetName()); - break; - default: - xStyle = new SwXStyle(*m_pBasePool, m_rEntry.m_eFamily, m_pDocShell->GetDoc(), sStyleName); - } - } + xStyle = m_rEntry.m_fCreateStyle(m_pBasePool, m_pDocShell, m_rEntry.m_eFamily == SFX_STYLE_FAMILY_FRAME ? pBase->GetName() : sStyleName); return uno::makeAny(xStyle); } @@ -762,11 +752,11 @@ static const std::vector<StyleFamilyEntry>* lcl_GetStyleFamilyEntries() if(!our_pStyleFamilyEntries) { our_pStyleFamilyEntries = new std::vector<StyleFamilyEntry>{ - { SFX_STYLE_FAMILY_CHAR, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, "CharacterStyles", STR_STYLE_FAMILY_CHARACTER, &lcl_GetCountOrName<SFX_STYLE_FAMILY_CHAR> }, - { SFX_STYLE_FAMILY_PARA, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, "ParagraphStyles", STR_STYLE_FAMILY_PARAGRAPH, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PARA> }, - { SFX_STYLE_FAMILY_PAGE, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, "PageStyles", STR_STYLE_FAMILY_PAGE, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PAGE> }, - { SFX_STYLE_FAMILY_FRAME, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, "FrameStyles", STR_STYLE_FAMILY_FRAME, &lcl_GetCountOrName<SFX_STYLE_FAMILY_FRAME> }, - { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PSEUDO> } + { SFX_STYLE_FAMILY_CHAR, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, "CharacterStyles", STR_STYLE_FAMILY_CHARACTER, &lcl_GetCountOrName<SFX_STYLE_FAMILY_CHAR>, &lcl_CreateStyle<SFX_STYLE_FAMILY_CHAR> }, + { SFX_STYLE_FAMILY_PARA, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, "ParagraphStyles", STR_STYLE_FAMILY_PARAGRAPH, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PARA>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PARA> }, + { SFX_STYLE_FAMILY_PAGE, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, "PageStyles", STR_STYLE_FAMILY_PAGE, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PAGE>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PAGE> }, + { SFX_STYLE_FAMILY_FRAME, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, "FrameStyles", STR_STYLE_FAMILY_FRAME, &lcl_GetCountOrName<SFX_STYLE_FAMILY_FRAME>, &lcl_CreateStyle<SFX_STYLE_FAMILY_FRAME> }, + { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PSEUDO>, &lcl_CreateStyle<SFX_STYLE_FAMILY_PSEUDO> } }; } return our_pStyleFamilyEntries; commit 7b72e851e57cdfe4fb5933f539764fcd66bd02fd Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 14:59:18 2015 +0100 use the entry vector for lcl_GetCountOrName dispatch - since the "entries" gain virtual functions now, it might make sense to make the entries proper classes. Lets see. Change-Id: I9ffae682869bc7560ee108c120efe6b65ea6c82f diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 89423c2..2be224d 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -94,15 +94,18 @@ namespace { struct StyleFamilyEntry { + using GetCountOrName_t = std::function< sal_Int32 (const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex)>; SfxStyleFamily m_eFamily; SwGetPoolIdFromName m_aPoolId; OUString m_sName; sal_uInt32 m_nResId; - StyleFamilyEntry(SfxStyleFamily eFamily, SwGetPoolIdFromName aPoolId, OUString const& sName, sal_uInt32 nResId) + GetCountOrName_t m_fGetCountOrName; + StyleFamilyEntry(SfxStyleFamily eFamily, SwGetPoolIdFromName aPoolId, OUString const& sName, sal_uInt32 nResId, GetCountOrName_t fGetCountOrName) : m_eFamily(eFamily) , m_aPoolId(aPoolId) , m_sName(sName) , m_nResId(nResId) + , m_fGetCountOrName(fGetCountOrName) {} }; static const std::vector<StyleFamilyEntry>* our_pStyleFamilyEntries; @@ -143,7 +146,8 @@ namespace sw SwDocShell* m_pDocShell; SwXStyle* _FindStyle(const OUString& rStyleName) const; - sal_Int32 GetCountOrName(OUString* pString, sal_Int32 nIndex = SAL_MAX_INT32); + sal_Int32 GetCountOrName(OUString* pString, sal_Int32 nIndex = SAL_MAX_INT32) + { return m_rEntry.m_fGetCountOrName(*m_pDocShell->GetDoc(), pString, nIndex); }; static const StyleFamilyEntry& InitEntry(SfxStyleFamily eFamily) { auto pEntries = lcl_GetStyleFamilyEntries(); @@ -382,10 +386,10 @@ static bool lcl_GetHeaderFooterItem( } template<enum SfxStyleFamily> -static sal_Int32 lcl_GetCountOrNameImpl(const SwDoc&, OUString*, sal_Int32); +static sal_Int32 lcl_GetCountOrName(const SwDoc&, OUString*, sal_Int32); template<> -sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_CHAR>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) +sal_Int32 lcl_GetCountOrName<SFX_STYLE_FAMILY_CHAR>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) { constexpr sal_Int32 nBaseCount = nPoolChrHtmlRange + nPoolCollTextRange; nIndex -= nBaseCount; @@ -411,7 +415,7 @@ sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_CHAR>(const SwDoc& rDoc, OUStr } template<> -sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PARA>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) +sal_Int32 lcl_GetCountOrName<SFX_STYLE_FAMILY_PARA>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) { constexpr sal_Int32 nBaseCount = nPoolCollHtmlStackedStart + nPoolCollHtmlRange; nIndex -= nBaseCount; @@ -433,7 +437,7 @@ sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PARA>(const SwDoc& rDoc, OUStr } template<> -sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_FRAME>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) +sal_Int32 lcl_GetCountOrName<SFX_STYLE_FAMILY_FRAME>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) { nIndex -= nPoolFrameRange; sal_Int32 nCount = 0; @@ -454,7 +458,7 @@ sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_FRAME>(const SwDoc& rDoc, OUSt } template<> -sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PAGE>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) +sal_Int32 lcl_GetCountOrName<SFX_STYLE_FAMILY_PAGE>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) { nIndex -= nPoolPageRange; sal_Int32 nCount = 0; @@ -476,7 +480,7 @@ sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PAGE>(const SwDoc& rDoc, OUStr } template<> -sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PSEUDO>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) +sal_Int32 lcl_GetCountOrName<SFX_STYLE_FAMILY_PSEUDO>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) { nIndex -= nPoolNumRange; sal_Int32 nCount = 0; @@ -496,25 +500,6 @@ sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PSEUDO>(const SwDoc& rDoc, OUS return nCount + nPoolNumRange; } -sal_Int32 XStyleFamily::GetCountOrName(OUString* pString, sal_Int32 nIndex) -{ - const auto& rDoc = *m_pDocShell->GetDoc(); - switch(m_rEntry.m_eFamily) - { - case SFX_STYLE_FAMILY_CHAR: - return lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_CHAR>(rDoc, pString, nIndex); - case SFX_STYLE_FAMILY_PARA: - return lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PARA>(rDoc, pString, nIndex); - case SFX_STYLE_FAMILY_FRAME: - return lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_FRAME>(rDoc, pString, nIndex); - case SFX_STYLE_FAMILY_PAGE: - return lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PAGE>(rDoc, pString, nIndex); - case SFX_STYLE_FAMILY_PSEUDO: - return lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PSEUDO>(rDoc, pString, nIndex); - default: - return 0; - } -} uno::Any XStyleFamily::getByIndex(sal_Int32 nIndex) throw( lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) @@ -777,11 +762,11 @@ static const std::vector<StyleFamilyEntry>* lcl_GetStyleFamilyEntries() if(!our_pStyleFamilyEntries) { our_pStyleFamilyEntries = new std::vector<StyleFamilyEntry>{ - { SFX_STYLE_FAMILY_CHAR, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, "CharacterStyles", STR_STYLE_FAMILY_CHARACTER }, - { SFX_STYLE_FAMILY_PARA, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, "ParagraphStyles", STR_STYLE_FAMILY_PARAGRAPH }, - { SFX_STYLE_FAMILY_PAGE, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, "PageStyles", STR_STYLE_FAMILY_PAGE }, - { SFX_STYLE_FAMILY_FRAME, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, "FrameStyles", STR_STYLE_FAMILY_FRAME }, - { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING } + { SFX_STYLE_FAMILY_CHAR, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, "CharacterStyles", STR_STYLE_FAMILY_CHARACTER, &lcl_GetCountOrName<SFX_STYLE_FAMILY_CHAR> }, + { SFX_STYLE_FAMILY_PARA, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, "ParagraphStyles", STR_STYLE_FAMILY_PARAGRAPH, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PARA> }, + { SFX_STYLE_FAMILY_PAGE, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, "PageStyles", STR_STYLE_FAMILY_PAGE, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PAGE> }, + { SFX_STYLE_FAMILY_FRAME, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, "FrameStyles", STR_STYLE_FAMILY_FRAME, &lcl_GetCountOrName<SFX_STYLE_FAMILY_FRAME> }, + { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING, &lcl_GetCountOrName<SFX_STYLE_FAMILY_PSEUDO> } }; } return our_pStyleFamilyEntries; commit 92d57e6f6dda37696c1211b46af85b8387716f8f Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 14:36:45 2015 +0100 tdf#38835: use singleton instead of static Change-Id: Id200dd245043537d288e30118debe2b338cf1774 diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index fd7cd02..89423c2 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -105,13 +105,7 @@ namespace , m_nResId(nResId) {} }; - static const std::vector<StyleFamilyEntry> our_vStyleFamilyEntries { - { SFX_STYLE_FAMILY_CHAR, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, "CharacterStyles", STR_STYLE_FAMILY_CHARACTER }, - { SFX_STYLE_FAMILY_PARA, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, "ParagraphStyles", STR_STYLE_FAMILY_PARAGRAPH }, - { SFX_STYLE_FAMILY_PAGE, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, "PageStyles", STR_STYLE_FAMILY_PAGE }, - { SFX_STYLE_FAMILY_FRAME, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, "FrameStyles", STR_STYLE_FAMILY_FRAME }, - { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING } - }; + static const std::vector<StyleFamilyEntry>* our_pStyleFamilyEntries; constexpr sal_uInt16 nPoolChrNormalRange = RES_POOLCHR_NORMAL_END - RES_POOLCHR_NORMAL_BEGIN; constexpr sal_uInt16 nPoolChrHtmlRange = RES_POOLCHR_HTML_END - RES_POOLCHR_HTML_BEGIN; constexpr sal_uInt16 nPoolCollTextRange = RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN; @@ -129,6 +123,7 @@ namespace constexpr sal_uInt16 nPoolCollDocStackedStart = nPoolCollRegisterStackedStart + nPoolCollRegisterRange; constexpr sal_uInt16 nPoolCollHtmlStackedStart = nPoolCollDocStackedStart + nPoolCollDocRange; } +static const std::vector<StyleFamilyEntry>* lcl_GetStyleFamilyEntries(); using namespace ::com::sun::star; @@ -151,9 +146,10 @@ namespace sw sal_Int32 GetCountOrName(OUString* pString, sal_Int32 nIndex = SAL_MAX_INT32); static const StyleFamilyEntry& InitEntry(SfxStyleFamily eFamily) { - const auto pEntry = std::find_if(our_vStyleFamilyEntries.begin(), our_vStyleFamilyEntries.end(), + auto pEntries = lcl_GetStyleFamilyEntries(); + const auto pEntry = std::find_if(pEntries->begin(), pEntries->end(), [eFamily] (const StyleFamilyEntry& e) { return e.m_eFamily == eFamily; }); - assert(pEntry != our_vStyleFamilyEntries.end()); + assert(pEntry != pEntries->end()); return *pEntry; } public: @@ -262,42 +258,46 @@ uno::Any SAL_CALL SwXStyleFamilies::getByName(const OUString& Name) SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); - const auto pEntry = std::find_if(our_vStyleFamilyEntries.begin(), our_vStyleFamilyEntries.end(), + auto pEntries(lcl_GetStyleFamilyEntries()); + const auto pEntry = std::find_if(pEntries->begin(), pEntries->end(), [&Name] (const StyleFamilyEntry& e) { return e.m_sName == Name; }); - if(pEntry == our_vStyleFamilyEntries.end()) + if(pEntry == pEntries->end()) throw container::NoSuchElementException(); - return getByIndex(pEntry-our_vStyleFamilyEntries.begin()); + return getByIndex(pEntry-pEntries->begin()); } uno::Sequence< OUString > SwXStyleFamilies::getElementNames() throw( uno::RuntimeException, std::exception ) { - uno::Sequence< OUString > aNames(our_vStyleFamilyEntries.size()); - std::transform(our_vStyleFamilyEntries.begin(), our_vStyleFamilyEntries.end(), + auto pEntries(lcl_GetStyleFamilyEntries()); + uno::Sequence<OUString> aNames(pEntries->size()); + std::transform(pEntries->begin(), pEntries->end(), aNames.begin(), [] (const StyleFamilyEntry& e) { return e.m_sName; }); return aNames; } sal_Bool SwXStyleFamilies::hasByName(const OUString& Name) throw( uno::RuntimeException, std::exception ) { - const auto pEntry = std::find_if(our_vStyleFamilyEntries.begin(), our_vStyleFamilyEntries.end(), + auto pEntries(lcl_GetStyleFamilyEntries()); + const auto pEntry = std::find_if(pEntries->begin(), pEntries->end(), [&Name] (const StyleFamilyEntry& e) { return e.m_sName == Name; }); - return pEntry != our_vStyleFamilyEntries.end(); + return pEntry != pEntries->end(); } sal_Int32 SwXStyleFamilies::getCount() throw( uno::RuntimeException, std::exception ) { - return our_vStyleFamilyEntries.size(); + return lcl_GetStyleFamilyEntries()->size(); } uno::Any SwXStyleFamilies::getByIndex(sal_Int32 nIndex) throw( lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) { + auto pEntries(lcl_GetStyleFamilyEntries()); SolarMutexGuard aGuard; - if(nIndex < 0 || nIndex >= static_cast<sal_Int32>(our_vStyleFamilyEntries.size())) + if(nIndex < 0 || nIndex >= static_cast<sal_Int32>(pEntries->size())) throw lang::IndexOutOfBoundsException(); if(!IsValid()) throw uno::RuntimeException(); - auto eFamily = our_vStyleFamilyEntries[nIndex].m_eFamily; + auto eFamily = (*pEntries)[nIndex].m_eFamily; assert(eFamily != SFX_STYLE_FAMILY_ALL); auto& rxFamily = m_vFamilies[eFamily]; if(!rxFamily.is()) @@ -772,6 +772,21 @@ SwXStyle* XStyleFamily::_FindStyle(const OUString& rStyleName) const return nullptr; } +static const std::vector<StyleFamilyEntry>* lcl_GetStyleFamilyEntries() +{ + if(!our_pStyleFamilyEntries) + { + our_pStyleFamilyEntries = new std::vector<StyleFamilyEntry>{ + { SFX_STYLE_FAMILY_CHAR, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, "CharacterStyles", STR_STYLE_FAMILY_CHARACTER }, + { SFX_STYLE_FAMILY_PARA, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, "ParagraphStyles", STR_STYLE_FAMILY_PARAGRAPH }, + { SFX_STYLE_FAMILY_PAGE, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, "PageStyles", STR_STYLE_FAMILY_PAGE }, + { SFX_STYLE_FAMILY_FRAME, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, "FrameStyles", STR_STYLE_FAMILY_FRAME }, + { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING } + }; + } + return our_pStyleFamilyEntries; +} + class SwStyleProperties_Impl { const PropertyEntryVector_t aPropertyEntries; @@ -886,9 +901,10 @@ void SwStyleProperties_Impl::GetProperty( const OUString &rPropertyName, const u static SwGetPoolIdFromName lcl_GetSwEnumFromSfxEnum(SfxStyleFamily eFamily) { - const auto pEntry = std::find_if(our_vStyleFamilyEntries.begin(), our_vStyleFamilyEntries.end(), + auto pEntries(lcl_GetStyleFamilyEntries()); + const auto pEntry = std::find_if(pEntries->begin(), pEntries->end(), [eFamily] (const StyleFamilyEntry& e) { return e.m_eFamily == eFamily; }); - if(pEntry != our_vStyleFamilyEntries.end()) + if(pEntry != pEntries->end()) return pEntry->m_aPoolId; SAL_WARN("sw.uno", "someone asking for all styles in unostyle.cxx!" ); return nsSwGetPoolIdFromName::GET_POOLID_CHRFMT; commit b7ffa8be976a5a6e49bbadf4af80a5fd889c4502 Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 14:11:47 2015 +0100 keep a reference to the static entry data for the family Change-Id: I9171202fb5c6e32016550243a027001e5c910c3c diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 849f4f1..fd7cd02 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -108,9 +108,9 @@ namespace static const std::vector<StyleFamilyEntry> our_vStyleFamilyEntries { { SFX_STYLE_FAMILY_CHAR, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, "CharacterStyles", STR_STYLE_FAMILY_CHARACTER }, { SFX_STYLE_FAMILY_PARA, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, "ParagraphStyles", STR_STYLE_FAMILY_PARAGRAPH }, - { SFX_STYLE_FAMILY_PAGE, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, "PageStyles", STR_STYLE_FAMILY_PAGE}, - { SFX_STYLE_FAMILY_FRAME, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, "FrameStyles", STR_STYLE_FAMILY_FRAME}, - { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING} + { SFX_STYLE_FAMILY_PAGE, nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC, "PageStyles", STR_STYLE_FAMILY_PAGE }, + { SFX_STYLE_FAMILY_FRAME, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, "FrameStyles", STR_STYLE_FAMILY_FRAME }, + { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING } }; constexpr sal_uInt16 nPoolChrNormalRange = RES_POOLCHR_NORMAL_END - RES_POOLCHR_NORMAL_BEGIN; constexpr sal_uInt16 nPoolChrHtmlRange = RES_POOLCHR_HTML_END - RES_POOLCHR_HTML_BEGIN; @@ -143,16 +143,22 @@ namespace sw >, public SfxListener { - SfxStyleFamily m_eFamily; - SfxStyleSheetBasePool* m_pBasePool; - SwDocShell* m_pDocShell; + const StyleFamilyEntry& m_rEntry; + SfxStyleSheetBasePool* m_pBasePool; + SwDocShell* m_pDocShell; - SwXStyle* _FindStyle(const OUString& rStyleName) const; + SwXStyle* _FindStyle(const OUString& rStyleName) const; sal_Int32 GetCountOrName(OUString* pString, sal_Int32 nIndex = SAL_MAX_INT32); - + static const StyleFamilyEntry& InitEntry(SfxStyleFamily eFamily) + { + const auto pEntry = std::find_if(our_vStyleFamilyEntries.begin(), our_vStyleFamilyEntries.end(), + [eFamily] (const StyleFamilyEntry& e) { return e.m_eFamily == eFamily; }); + assert(pEntry != our_vStyleFamilyEntries.end()); + return *pEntry; + } public: XStyleFamily(SwDocShell* pDocShell, const SfxStyleFamily eFamily) - : m_eFamily(eFamily) + : m_rEntry(InitEntry(eFamily)) , m_pBasePool(pDocShell->GetStyleSheetPool()) , m_pDocShell(pDocShell) { @@ -228,16 +234,6 @@ namespace sw using sw::XStyleFamily; -static SwGetPoolIdFromName lcl_GetSwEnumFromSfxEnum(SfxStyleFamily eFamily) -{ - const auto pEntry = std::find_if(our_vStyleFamilyEntries.begin(), our_vStyleFamilyEntries.end(), - [eFamily] (const StyleFamilyEntry& e) { return e.m_eFamily == eFamily; }); - if(pEntry != our_vStyleFamilyEntries.end()) - return pEntry->m_aPoolId; - SAL_WARN("sw.uno", "someone asking for all styles in unostyle.cxx!" ); - return nsSwGetPoolIdFromName::GET_POOLID_CHRFMT; -} - OUString SwXStyleFamilies::getImplementationName() throw( uno::RuntimeException, std::exception ) { return {"SwXStyleFamilies"}; } @@ -503,7 +499,7 @@ sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PSEUDO>(const SwDoc& rDoc, OUS sal_Int32 XStyleFamily::GetCountOrName(OUString* pString, sal_Int32 nIndex) { const auto& rDoc = *m_pDocShell->GetDoc(); - switch(m_eFamily) + switch(m_rEntry.m_eFamily) { case SFX_STYLE_FAMILY_CHAR: return lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_CHAR>(rDoc, pString, nIndex); @@ -529,7 +525,7 @@ uno::Any XStyleFamily::getByIndex(sal_Int32 nIndex) if(!m_pBasePool) throw uno::RuntimeException(); OUString sStyleName; - switch(m_eFamily) + switch(m_rEntry.m_eFamily) { case SFX_STYLE_FAMILY_CHAR: { @@ -586,22 +582,22 @@ uno::Any XStyleFamily::getByIndex(sal_Int32 nIndex) if(sStyleName.isEmpty()) throw lang::IndexOutOfBoundsException(); - SfxStyleSheetBase* pBase = m_pBasePool->Find(sStyleName, m_eFamily); + SfxStyleSheetBase* pBase = m_pBasePool->Find(sStyleName, m_rEntry.m_eFamily); if(!pBase) throw uno::RuntimeException(); uno::Reference<style::XStyle> xStyle = _FindStyle(sStyleName); if(!xStyle.is()) { - switch(m_eFamily) + switch(m_rEntry.m_eFamily) { case SFX_STYLE_FAMILY_PAGE: - xStyle = new SwXPageStyle(*m_pBasePool, m_pDocShell, m_eFamily, sStyleName); + xStyle = new SwXPageStyle(*m_pBasePool, m_pDocShell, m_rEntry.m_eFamily, sStyleName); break; case SFX_STYLE_FAMILY_FRAME: xStyle = new SwXFrameStyle(*m_pBasePool, m_pDocShell->GetDoc(), pBase->GetName()); break; default: - xStyle = new SwXStyle(*m_pBasePool, m_eFamily, m_pDocShell->GetDoc(), sStyleName); + xStyle = new SwXStyle(*m_pBasePool, m_rEntry.m_eFamily, m_pDocShell->GetDoc(), sStyleName); } } return uno::makeAny(xStyle); @@ -612,26 +608,26 @@ uno::Any XStyleFamily::getByName(const OUString& rName) { SolarMutexGuard aGuard; OUString sStyleName; - SwStyleNameMapper::FillUIName(rName, sStyleName, lcl_GetSwEnumFromSfxEnum(m_eFamily), true); + SwStyleNameMapper::FillUIName(rName, sStyleName, m_rEntry.m_aPoolId, true); if(!m_pBasePool) throw uno::RuntimeException(); - m_pBasePool->SetSearchMask(m_eFamily); + m_pBasePool->SetSearchMask(m_rEntry.m_eFamily); SfxStyleSheetBase* pBase = m_pBasePool->Find(sStyleName); if(!pBase) throw container::NoSuchElementException(); uno::Reference<style::XStyle> xStyle = _FindStyle(sStyleName); if(!xStyle.is()) { - switch(m_eFamily) + switch(m_rEntry.m_eFamily) { case SFX_STYLE_FAMILY_PAGE: - xStyle = new SwXPageStyle(*m_pBasePool, m_pDocShell, m_eFamily, sStyleName); + xStyle = new SwXPageStyle(*m_pBasePool, m_pDocShell, m_rEntry.m_eFamily, sStyleName); break; case SFX_STYLE_FAMILY_FRAME: xStyle = new SwXFrameStyle(*m_pBasePool, m_pDocShell->GetDoc(), pBase->GetName()); break; default: - xStyle = new SwXStyle(*m_pBasePool, m_eFamily, m_pDocShell->GetDoc(), sStyleName); + xStyle = new SwXStyle(*m_pBasePool, m_rEntry.m_eFamily, m_pDocShell->GetDoc(), sStyleName); } } return uno::makeAny(xStyle); @@ -643,11 +639,11 @@ uno::Sequence<OUString> XStyleFamily::getElementNames() throw( uno::RuntimeExcep if(!m_pBasePool) throw uno::RuntimeException(); std::vector<OUString> vRet; - SfxStyleSheetIteratorPtr pIt = m_pBasePool->CreateIterator(m_eFamily, SFXSTYLEBIT_ALL); + SfxStyleSheetIteratorPtr pIt = m_pBasePool->CreateIterator(m_rEntry.m_eFamily, SFXSTYLEBIT_ALL); for (SfxStyleSheetBase* pStyle = pIt->First(); pStyle; pStyle = pIt->Next()) { OUString sName; - SwStyleNameMapper::FillProgName(pStyle->GetName(), sName, lcl_GetSwEnumFromSfxEnum(m_eFamily), true); + SwStyleNameMapper::FillProgName(pStyle->GetName(), sName, m_rEntry.m_aPoolId, true); vRet.push_back(sName); } return comphelper::containerToSequence(vRet); @@ -659,8 +655,8 @@ sal_Bool XStyleFamily::hasByName(const OUString& rName) throw( uno::RuntimeExcep if(!m_pBasePool) throw uno::RuntimeException(); OUString sStyleName; - SwStyleNameMapper::FillUIName(rName, sStyleName, lcl_GetSwEnumFromSfxEnum(m_eFamily), true); - m_pBasePool->SetSearchMask(m_eFamily); + SwStyleNameMapper::FillUIName(rName, sStyleName, m_rEntry.m_aPoolId, true); + m_pBasePool->SetSearchMask(m_rEntry.m_eFamily); SfxStyleSheetBase* pBase = m_pBasePool->Find(sStyleName); return nullptr != pBase; } @@ -673,8 +669,8 @@ void XStyleFamily::insertByName(const OUString& rName, const uno::Any& rElement) if(!m_pBasePool) throw uno::RuntimeException(); OUString sStyleName; - SwStyleNameMapper::FillUIName(rName, sStyleName, lcl_GetSwEnumFromSfxEnum(m_eFamily), true); - m_pBasePool->SetSearchMask(m_eFamily); + SwStyleNameMapper::FillUIName(rName, sStyleName, m_rEntry.m_aPoolId, true); + m_pBasePool->SetSearchMask(m_rEntry.m_eFamily); SfxStyleSheetBase* pBase = m_pBasePool->Find(sStyleName); SfxStyleSheetBase* pUINameBase = m_pBasePool->Find( sStyleName ); if(pBase || pUINameBase) @@ -689,23 +685,23 @@ void XStyleFamily::insertByName(const OUString& rName, const uno::Any& rElement) sal::static_int_cast< sal_IntPtr >( xStyleTunnel->getSomething( SwXStyle::getUnoTunnelId()) )); } - if (!pNewStyle || !pNewStyle->IsDescriptor() || pNewStyle->GetFamily() != m_eFamily) + if (!pNewStyle || !pNewStyle->IsDescriptor() || pNewStyle->GetFamily() != m_rEntry.m_eFamily) throw lang::IllegalArgumentException(); sal_uInt16 nMask = SFXSTYLEBIT_ALL; - if(m_eFamily == SFX_STYLE_FAMILY_PARA && !pNewStyle->IsConditional()) + if(m_rEntry.m_eFamily == SFX_STYLE_FAMILY_PARA && !pNewStyle->IsConditional()) nMask &= ~SWSTYLEBIT_CONDCOLL; - m_pBasePool->Make(sStyleName, m_eFamily, nMask); + m_pBasePool->Make(sStyleName, m_rEntry.m_eFamily, nMask); pNewStyle->SetDoc(m_pDocShell->GetDoc(), m_pBasePool); pNewStyle->SetStyleName(sStyleName); const OUString sParentStyleName(pNewStyle->GetParentStyleName()); if (!sParentStyleName.isEmpty()) { - m_pBasePool->SetSearchMask(m_eFamily); + m_pBasePool->SetSearchMask(m_rEntry.m_eFamily); SfxStyleSheetBase* pParentBase = m_pBasePool->Find(sParentStyleName); - if(pParentBase && pParentBase->GetFamily() == m_eFamily && + if(pParentBase && pParentBase->GetFamily() == m_rEntry.m_eFamily && &pParentBase->GetPool() == m_pBasePool) - m_pBasePool->SetParent(m_eFamily, sStyleName, sParentStyleName); + m_pBasePool->SetParent(m_rEntry.m_eFamily, sStyleName, sParentStyleName); } // after all, we still need to apply the properties of the descriptor pNewStyle->ApplyDescriptorProperties(); @@ -717,7 +713,7 @@ void XStyleFamily::replaceByName(const OUString& rName, const uno::Any& rElement SolarMutexGuard aGuard; if(!m_pBasePool) throw uno::RuntimeException(); - m_pBasePool->SetSearchMask(m_eFamily); + m_pBasePool->SetSearchMask(m_rEntry.m_eFamily); SfxStyleSheetBase* pBase = m_pBasePool->Find(rName); // replacements only for userdefined styles if(!pBase) @@ -745,9 +741,9 @@ void XStyleFamily::removeByName(const OUString& rName) throw( container::NoSuchE SolarMutexGuard aGuard; if(!m_pBasePool) throw uno::RuntimeException(); - m_pBasePool->SetSearchMask(m_eFamily); + m_pBasePool->SetSearchMask(m_rEntry.m_eFamily); OUString sName; - SwStyleNameMapper::FillUIName(rName, sName, lcl_GetSwEnumFromSfxEnum(m_eFamily), true); + SwStyleNameMapper::FillUIName(rName, sName, m_rEntry.m_aPoolId, true); SfxStyleSheetBase* pBase = m_pBasePool->Find( sName ); if(!pBase) throw container::NoSuchElementException(); @@ -759,10 +755,7 @@ uno::Any SAL_CALL XStyleFamily::getPropertyValue( const OUString& sPropertyName if(sPropertyName != "DisplayName") throw beans::UnknownPropertyException( "unknown property: " + sPropertyName, static_cast<OWeakObject *>(this) ); SolarMutexGuard aGuard; - const auto pEntry = std::find_if(our_vStyleFamilyEntries.begin(), our_vStyleFamilyEntries.end(), - [this] (const StyleFamilyEntry& e) { return m_eFamily == e.m_eFamily; }); - assert(pEntry != our_vStyleFamilyEntries.end()); // invalid family - return uno::makeAny(SW_RESSTR(pEntry->m_nResId)); + return uno::makeAny(SW_RESSTR(m_rEntry.m_nResId)); } @@ -773,7 +766,7 @@ SwXStyle* XStyleFamily::_FindStyle(const OUString& rStyleName) const { SfxListener* pListener = m_pBasePool->GetListener(i); SwXStyle* pTempStyle = dynamic_cast<SwXStyle*>(pListener); - if(pTempStyle && pTempStyle->GetFamily() == m_eFamily && pTempStyle->GetStyleName() == rStyleName) + if(pTempStyle && pTempStyle->GetFamily() == m_rEntry.m_eFamily && pTempStyle->GetStyleName() == rStyleName) return pTempStyle; } return nullptr; @@ -891,6 +884,16 @@ void SwStyleProperties_Impl::GetProperty( const OUString &rPropertyName, const u rAny = rxPropertySet->getPropertyValue( rPropertyName ); } +static SwGetPoolIdFromName lcl_GetSwEnumFromSfxEnum(SfxStyleFamily eFamily) +{ + const auto pEntry = std::find_if(our_vStyleFamilyEntries.begin(), our_vStyleFamilyEntries.end(), + [eFamily] (const StyleFamilyEntry& e) { return e.m_eFamily == eFamily; }); + if(pEntry != our_vStyleFamilyEntries.end()) + return pEntry->m_aPoolId; + SAL_WARN("sw.uno", "someone asking for all styles in unostyle.cxx!" ); + return nsSwGetPoolIdFromName::GET_POOLID_CHRFMT; +} + namespace { class theSwXStyleUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theSwXStyleUnoTunnelId > {}; commit 9f030d0898e2b5c91160d4228392797dc1b77ca5 Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 12:39:43 2015 +0100 use Families instead of the generic 'Container' Change-Id: I009002621a5481b91e14a215237278d56d742579 diff --git a/sw/inc/unostyle.hxx b/sw/inc/unostyle.hxx index 0d2deb7..90807ba 100644 --- a/sw/inc/unostyle.hxx +++ b/sw/inc/unostyle.hxx @@ -66,7 +66,7 @@ class SwXStyleFamilies : public cppu::WeakImplHelper { SwDocShell* m_pDocShell; - std::map<SfxStyleFamily, css::uno::Reference<css::container::XNameContainer>> m_vContainers; + std::map<SfxStyleFamily, css::uno::Reference<css::container::XNameContainer>> m_vFamilies; protected: virtual ~SwXStyleFamilies(); public: diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 11e2451..849f4f1 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -303,10 +303,10 @@ uno::Any SwXStyleFamilies::getByIndex(sal_Int32 nIndex) throw uno::RuntimeException(); auto eFamily = our_vStyleFamilyEntries[nIndex].m_eFamily; assert(eFamily != SFX_STYLE_FAMILY_ALL); - auto& rxContainer = m_vContainers[eFamily]; - if(!rxContainer.is()) - rxContainer = new XStyleFamily(m_pDocShell, eFamily); - return uno::makeAny(rxContainer); + auto& rxFamily = m_vFamilies[eFamily]; + if(!rxFamily.is()) + rxFamily = new XStyleFamily(m_pDocShell, eFamily); + return uno::makeAny(rxFamily); } uno::Type SwXStyleFamilies::getElementType() commit 2056e3123f83a957290098a495d8759c9033eb26 Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 04:56:38 2015 +0100 typo: m_nRedId => m_nResId Change-Id: I0659155b19870117e97f691aa4fdceee8f2d4c08 diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 5236631..11e2451 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -97,12 +97,12 @@ namespace SfxStyleFamily m_eFamily; SwGetPoolIdFromName m_aPoolId; OUString m_sName; - sal_uInt32 m_nRedId; - StyleFamilyEntry(SfxStyleFamily eFamily, SwGetPoolIdFromName aPoolId, OUString const & sName, sal_uInt32 nResId) + sal_uInt32 m_nResId; + StyleFamilyEntry(SfxStyleFamily eFamily, SwGetPoolIdFromName aPoolId, OUString const& sName, sal_uInt32 nResId) : m_eFamily(eFamily) , m_aPoolId(aPoolId) , m_sName(sName) - , m_nRedId(nResId) + , m_nResId(nResId) {} }; static const std::vector<StyleFamilyEntry> our_vStyleFamilyEntries { @@ -762,7 +762,7 @@ uno::Any SAL_CALL XStyleFamily::getPropertyValue( const OUString& sPropertyName const auto pEntry = std::find_if(our_vStyleFamilyEntries.begin(), our_vStyleFamilyEntries.end(), [this] (const StyleFamilyEntry& e) { return m_eFamily == e.m_eFamily; }); assert(pEntry != our_vStyleFamilyEntries.end()); // invalid family - return uno::makeAny(SW_RESSTR(pEntry->m_nRedId)); + return uno::makeAny(SW_RESSTR(pEntry->m_nResId)); } commit bdb6e648d20ec4cb8bbc62308e2368531ea1e42b Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 04:55:01 2015 +0100 clean up and reduce indent levels Change-Id: I5aa38475eff213620b29e89a0df0833c95207a91 diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index d3cda09..5236631 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -466,16 +466,14 @@ sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PAGE>(const SwDoc& rDoc, OUStr for(size_t i = 0; i < nArrLen; ++i) { const SwPageDesc& rDesc = rDoc.GetPageDesc(i); - - if ( IsPoolUserFormat ( rDesc.GetPoolFormatId() ) ) + if(!IsPoolUserFormat(rDesc.GetPoolFormatId())) + continue; + if(nIndex == nCount) { - if ( nIndex == nCount ) - { - *pString = rDesc.GetName(); - break; - } - ++nCount; + *pString = rDesc.GetName(); + break; } + ++nCount; } nCount += nPoolPageRange; return nCount; commit 0d05bb47c40566cc183c4c13cc93ad87f167d8f3 Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 04:50:28 2015 +0100 add ranges for pages, frames, nums Change-Id: Id3c0f39b076bd3908d3ac4154e72ee14ca3963ae diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 7159210..d3cda09 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -120,6 +120,9 @@ namespace constexpr sal_uInt16 nPoolCollRegisterRange = RES_POOLCOLL_REGISTER_END - RES_POOLCOLL_REGISTER_BEGIN; constexpr sal_uInt16 nPoolCollDocRange = RES_POOLCOLL_DOC_END - RES_POOLCOLL_DOC_BEGIN; constexpr sal_uInt16 nPoolCollHtmlRange = RES_POOLCOLL_HTML_END - RES_POOLCOLL_HTML_BEGIN; + constexpr sal_uInt16 nPoolFrameRange = RES_POOLFRM_END - RES_POOLFRM_BEGIN; + constexpr sal_uInt16 nPoolPageRange = RES_POOLPAGE_END - RES_POOLPAGE_BEGIN; + constexpr sal_uInt16 nPoolNumRange = RES_POOLNUMRULE_END - RES_POOLNUMRULE_BEGIN; constexpr sal_uInt16 nPoolCollListsStackedStart = nPoolCollTextRange; constexpr sal_uInt16 nPoolCollExtraStackedStart = nPoolCollListsStackedStart + nPoolCollListsRange; constexpr sal_uInt16 nPoolCollRegisterStackedStart = nPoolCollExtraStackedStart + nPoolCollExtraRange; @@ -436,8 +439,7 @@ sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PARA>(const SwDoc& rDoc, OUStr template<> sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_FRAME>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) { - constexpr sal_Int32 nBaseCount = RES_POOLFRM_END - RES_POOLFRM_BEGIN; - nIndex -= nBaseCount; + nIndex -= nPoolFrameRange; sal_Int32 nCount = 0; for(const auto pFormat : *rDoc.GetFrameFormats()) { @@ -452,15 +454,14 @@ sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_FRAME>(const SwDoc& rDoc, OUSt } nCount++; } - return nCount + nBaseCount; + return nCount + nPoolFrameRange; } template<> sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PAGE>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) { + nIndex -= nPoolPageRange; sal_Int32 nCount = 0; - const sal_Int32 nBaseCount = RES_POOLPAGE_END - RES_POOLPAGE_BEGIN; - nIndex = nIndex - nBaseCount; const size_t nArrLen = rDoc.GetPageDescCnt(); for(size_t i = 0; i < nArrLen; ++i) { @@ -476,15 +477,14 @@ sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PAGE>(const SwDoc& rDoc, OUStr ++nCount; } } - nCount += nBaseCount; + nCount += nPoolPageRange; return nCount; } template<> sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PSEUDO>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) { - constexpr sal_Int32 nBaseCount = RES_POOLNUMRULE_END - RES_POOLNUMRULE_BEGIN; - nIndex -= nBaseCount; + nIndex -= nPoolNumRange; sal_Int32 nCount = 0; for(const auto pRule : rDoc.GetNumRuleTable()) { @@ -499,7 +499,7 @@ sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PSEUDO>(const SwDoc& rDoc, OUS } ++nCount; } - return nCount + nBaseCount; + return nCount + nPoolNumRange; } sal_Int32 XStyleFamily::GetCountOrName(OUString* pString, sal_Int32 nIndex) @@ -563,20 +563,20 @@ uno::Any XStyleFamily::getByIndex(sal_Int32 nIndex) break; case SFX_STYLE_FAMILY_FRAME: { - if(nIndex < (RES_POOLFRM_END - RES_POOLFRM_BEGIN)) + if(nIndex < nPoolFrameRange) SwStyleNameMapper::FillUIName(static_cast<sal_uInt16>(RES_POOLFRM_BEGIN + nIndex), sStyleName); } break; case SFX_STYLE_FAMILY_PAGE: { - if(nIndex < (RES_POOLPAGE_END - RES_POOLPAGE_BEGIN )) + if(nIndex < nPoolPageRange) SwStyleNameMapper::FillUIName(static_cast<sal_uInt16>(RES_POOLPAGE_BEGIN + nIndex), sStyleName); } break; case SFX_STYLE_FAMILY_PSEUDO: { - if(nIndex < (RES_POOLNUMRULE_END - RES_POOLNUMRULE_BEGIN)) - SwStyleNameMapper::FillUIName ( static_cast< sal_uInt16 >(RES_POOLNUMRULE_BEGIN + nIndex), sStyleName ); + if(nIndex < nPoolNumRange) + SwStyleNameMapper::FillUIName(static_cast<sal_uInt16>(RES_POOLNUMRULE_BEGIN + nIndex), sStyleName); } break; commit 9c852dd419bc3b30e1e4ed69be3ba8132b4f2e65 Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 04:36:50 2015 +0100 make GetCountOrName a private member to reduce args Change-Id: I72430f032d032f825034ec00d662ceaaa6a4dc62 diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 86b1819..7159210 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -145,6 +145,8 @@ namespace sw SwDocShell* m_pDocShell; SwXStyle* _FindStyle(const OUString& rStyleName) const; + sal_Int32 GetCountOrName(OUString* pString, sal_Int32 nIndex = SAL_MAX_INT32); + public: XStyleFamily(SwDocShell* pDocShell, const SfxStyleFamily eFamily) : m_eFamily(eFamily) @@ -157,7 +159,11 @@ namespace sw virtual ~XStyleFamily() {}; //XIndexAccess - virtual sal_Int32 SAL_CALL getCount() throw( uno::RuntimeException, std::exception ) override; + virtual sal_Int32 SAL_CALL getCount() throw( uno::RuntimeException, std::exception ) override + { + SolarMutexGuard aGuard; + return GetCountOrName(nullptr); + }; virtual uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) throw( lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) override; //XElementAccess @@ -496,9 +502,10 @@ sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PSEUDO>(const SwDoc& rDoc, OUS return nCount + nBaseCount; } -static sal_Int32 lcl_GetCountOrName(const SwDoc& rDoc, SfxStyleFamily eFamily, OUString* pString, sal_Int32 nIndex = SAL_MAX_INT32) +sal_Int32 XStyleFamily::GetCountOrName(OUString* pString, sal_Int32 nIndex) { - switch(eFamily) + const auto& rDoc = *m_pDocShell->GetDoc(); + switch(m_eFamily) { case SFX_STYLE_FAMILY_CHAR: return lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_CHAR>(rDoc, pString, nIndex); @@ -515,12 +522,6 @@ static sal_Int32 lcl_GetCountOrName(const SwDoc& rDoc, SfxStyleFamily eFamily, O } } -sal_Int32 XStyleFamily::getCount() throw( uno::RuntimeException, std::exception ) -{ - SolarMutexGuard aGuard; - return lcl_GetCountOrName(*m_pDocShell->GetDoc(), m_eFamily, nullptr); -} - uno::Any XStyleFamily::getByIndex(sal_Int32 nIndex) throw( lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) { @@ -583,7 +584,7 @@ uno::Any XStyleFamily::getByIndex(sal_Int32 nIndex) ; } if (sStyleName.isEmpty()) - lcl_GetCountOrName(*m_pDocShell->GetDoc(), m_eFamily, &sStyleName, nIndex); + GetCountOrName(&sStyleName, nIndex); if(sStyleName.isEmpty()) throw lang::IndexOutOfBoundsException(); commit 71a7e566397773765e2c80a2944d194861cf7e45 Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 04:03:47 2015 +0100 consolidate range voodoo Change-Id: I76c64f15cd94ea281e44ddd488bc7eb7abc1575d diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 8ed8eed..86b1819 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -112,6 +112,19 @@ namespace { SFX_STYLE_FAMILY_FRAME, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, "FrameStyles", STR_STYLE_FAMILY_FRAME}, { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING} }; + constexpr sal_uInt16 nPoolChrNormalRange = RES_POOLCHR_NORMAL_END - RES_POOLCHR_NORMAL_BEGIN; + constexpr sal_uInt16 nPoolChrHtmlRange = RES_POOLCHR_HTML_END - RES_POOLCHR_HTML_BEGIN; + constexpr sal_uInt16 nPoolCollTextRange = RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN; + constexpr sal_uInt16 nPoolCollListsRange = RES_POOLCOLL_LISTS_END - RES_POOLCOLL_LISTS_BEGIN; + constexpr sal_uInt16 nPoolCollExtraRange = RES_POOLCOLL_EXTRA_END - RES_POOLCOLL_EXTRA_BEGIN; + constexpr sal_uInt16 nPoolCollRegisterRange = RES_POOLCOLL_REGISTER_END - RES_POOLCOLL_REGISTER_BEGIN; + constexpr sal_uInt16 nPoolCollDocRange = RES_POOLCOLL_DOC_END - RES_POOLCOLL_DOC_BEGIN; + constexpr sal_uInt16 nPoolCollHtmlRange = RES_POOLCOLL_HTML_END - RES_POOLCOLL_HTML_BEGIN; + constexpr sal_uInt16 nPoolCollListsStackedStart = nPoolCollTextRange; + constexpr sal_uInt16 nPoolCollExtraStackedStart = nPoolCollListsStackedStart + nPoolCollListsRange; + constexpr sal_uInt16 nPoolCollRegisterStackedStart = nPoolCollExtraStackedStart + nPoolCollExtraRange; + constexpr sal_uInt16 nPoolCollDocStackedStart = nPoolCollRegisterStackedStart + nPoolCollRegisterRange; + constexpr sal_uInt16 nPoolCollHtmlStackedStart = nPoolCollDocStackedStart + nPoolCollDocRange; } using namespace ::com::sun::star; @@ -346,30 +359,6 @@ uno::Sequence< beans::PropertyValue > SwXStyleFamilies::getStyleLoaderOptions() return aSeq; } -// Already implemented autostyle families: 3 -#define AUTOSTYLE_FAMILY_COUNT 3 -const IStyleAccess::SwAutoStyleFamily aAutoStyleByIndex[] = -{ - IStyleAccess::AUTO_STYLE_CHAR, - IStyleAccess::AUTO_STYLE_RUBY, - IStyleAccess::AUTO_STYLE_PARA -}; - -class SwAutoStylesEnumImpl -{ - std::vector<SfxItemSet_Pointer_t> mAutoStyles; - std::vector<SfxItemSet_Pointer_t>::iterator aIter; - SwDoc* pDoc; - IStyleAccess::SwAutoStyleFamily eFamily; -public: - SwAutoStylesEnumImpl( SwDoc* pInitDoc, IStyleAccess::SwAutoStyleFamily eFam ); - bool hasMoreElements() { return aIter != mAutoStyles.end(); } - SfxItemSet_Pointer_t nextElement() { return *(aIter++); } - IStyleAccess::SwAutoStyleFamily getFamily() const { return eFamily; } - SwDoc* getDoc() const { return pDoc; } -}; - - static bool lcl_GetHeaderFooterItem( SfxItemSet const& rSet, OUString const& rPropName, bool const bFooter, SvxSetItem const*& o_rpItem) @@ -393,9 +382,7 @@ static sal_Int32 lcl_GetCountOrNameImpl(const SwDoc&, OUString*, sal_Int32); template<> sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_CHAR>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) { - constexpr sal_Int32 nBaseCount = - RES_POOLCHR_HTML_END - RES_POOLCHR_HTML_BEGIN + - RES_POOLCHR_NORMAL_END - RES_POOLCHR_NORMAL_BEGIN; + constexpr sal_Int32 nBaseCount = nPoolChrHtmlRange + nPoolCollTextRange; nIndex -= nBaseCount; sal_Int32 nCount = 0; for(auto pFormat : *rDoc.GetCharFormats()) @@ -421,13 +408,7 @@ sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_CHAR>(const SwDoc& rDoc, OUStr template<> sal_Int32 lcl_GetCountOrNameImpl<SFX_STYLE_FAMILY_PARA>(const SwDoc& rDoc, OUString* pString, sal_Int32 nIndex) { - constexpr sal_Int32 nBaseCount = - RES_POOLCOLL_HTML_END - RES_POOLCOLL_HTML_BEGIN + - RES_POOLCOLL_DOC_END - RES_POOLCOLL_DOC_BEGIN + - RES_POOLCOLL_REGISTER_END - RES_POOLCOLL_REGISTER_BEGIN + - RES_POOLCOLL_EXTRA_END - RES_POOLCOLL_EXTRA_BEGIN + - RES_POOLCOLL_LISTS_END - RES_POOLCOLL_LISTS_BEGIN + - RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN; + constexpr sal_Int32 nBaseCount = nPoolCollHtmlStackedStart + nPoolCollHtmlRange; nIndex -= nBaseCount; sal_Int32 nCount = 0; for(auto pColl : *rDoc.GetTextFormatColls()) @@ -553,29 +534,17 @@ uno::Any XStyleFamily::getByIndex(sal_Int32 nIndex) { case SFX_STYLE_FAMILY_CHAR: { - constexpr sal_Int32 nPoolChrNormalRange = RES_POOLCHR_NORMAL_END - RES_POOLCHR_NORMAL_BEGIN; - constexpr sal_Int32 nPoolChrHtmlRange = RES_POOLCHR_HTML_END - RES_POOLCHR_HTML_BEGIN; static_assert(nPoolChrNormalRange > 0 && nPoolChrHtmlRange > 0, "invalid pool range"); - if(nIndex < nPoolChrNormalRange) + const sal_uInt16 nIndex16 = static_cast<sal_uInt16>(nIndex); + if(nIndex16 < nPoolChrNormalRange) SwStyleNameMapper::FillUIName(static_cast<sal_uInt16>(RES_POOLCHR_NORMAL_BEGIN + nIndex), sStyleName); - else if(nIndex < (nPoolChrHtmlRange+nPoolChrNormalRange)) + else if(nIndex16 < (nPoolChrHtmlRange+nPoolChrNormalRange)) SwStyleNameMapper::FillUIName(RES_POOLCHR_HTML_BEGIN + nPoolChrNormalRange + nIndex, sStyleName ); } break; case SFX_STYLE_FAMILY_PARA: { - constexpr sal_uInt16 nPoolCollTextRange = RES_POOLCOLL_TEXT_END - RES_POOLCOLL_TEXT_BEGIN; - constexpr sal_uInt16 nPoolCollListsRange = RES_POOLCOLL_LISTS_END - RES_POOLCOLL_LISTS_BEGIN; - constexpr sal_uInt16 nPoolCollExtraRange = RES_POOLCOLL_EXTRA_END - RES_POOLCOLL_EXTRA_BEGIN; - constexpr sal_uInt16 nPoolCollRegisterRange = RES_POOLCOLL_REGISTER_END - RES_POOLCOLL_REGISTER_BEGIN; - constexpr sal_uInt16 nPoolCollDocRange = RES_POOLCOLL_DOC_END - RES_POOLCOLL_DOC_BEGIN; - constexpr sal_uInt16 nPoolCollHtmlRange = RES_POOLCOLL_HTML_END - RES_POOLCOLL_HTML_BEGIN; static_assert(nPoolCollTextRange > 0 && nPoolCollListsRange > 0 && nPoolCollExtraRange > 0 && nPoolCollRegisterRange > 0 && nPoolCollDocRange > 0 && nPoolCollHtmlRange > 0, "weird pool range"); - constexpr sal_uInt16 nPoolCollListsStackedStart = nPoolCollTextRange; - constexpr sal_uInt16 nPoolCollExtraStackedStart = nPoolCollListsStackedStart + nPoolCollListsRange; - constexpr sal_uInt16 nPoolCollRegisterStackedStart = nPoolCollExtraStackedStart + nPoolCollExtraRange; - constexpr sal_uInt16 nPoolCollDocStackedStart = nPoolCollRegisterStackedStart + nPoolCollRegisterRange; - constexpr sal_uInt16 nPoolCollHtmlStackedStart = nPoolCollDocStackedStart + nPoolCollDocRange; const sal_uInt16 nIndex16 = static_cast<sal_uInt16>(nIndex); if(nIndex16 < nPoolCollListsStackedStart) SwStyleNameMapper::FillUIName(RES_POOLCOLL_TEXT_BEGIN + nIndex16, sStyleName); @@ -3814,6 +3783,29 @@ uno::Reference< container::XNameReplace > SwXFrameStyle::getEvents( ) throw(uno return new SwFrameStyleEventDescriptor( *this ); } +// Already implemented autostyle families: 3 +#define AUTOSTYLE_FAMILY_COUNT 3 +const IStyleAccess::SwAutoStyleFamily aAutoStyleByIndex[] = +{ + IStyleAccess::AUTO_STYLE_CHAR, + IStyleAccess::AUTO_STYLE_RUBY, + IStyleAccess::AUTO_STYLE_PARA +}; + +class SwAutoStylesEnumImpl +{ + std::vector<SfxItemSet_Pointer_t> mAutoStyles; + std::vector<SfxItemSet_Pointer_t>::iterator aIter; + SwDoc* pDoc; + IStyleAccess::SwAutoStyleFamily eFamily; +public: + SwAutoStylesEnumImpl( SwDoc* pInitDoc, IStyleAccess::SwAutoStyleFamily eFam ); + bool hasMoreElements() { return aIter != mAutoStyles.end(); } + SfxItemSet_Pointer_t nextElement() { return *(aIter++); } + IStyleAccess::SwAutoStyleFamily getFamily() const { return eFamily; } + SwDoc* getDoc() const { return pDoc; } +}; + SwXAutoStyles::SwXAutoStyles(SwDocShell& rDocShell) : SwUnoCollection(rDocShell.GetDoc()), m_pDocShell( &rDocShell ) { commit 812e92b012569e42c31f70f53e641d4137267623 Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 03:52:40 2015 +0100 inline trivial functions Change-Id: I00a75c846ca86dc05f42211c700561c066f85586 diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index 1202f04..8ed8eed 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -133,16 +133,29 @@ namespace sw SwXStyle* _FindStyle(const OUString& rStyleName) const; public: - XStyleFamily(SwDocShell* pDocShell, const SfxStyleFamily eFamily); - virtual ~XStyleFamily(); + XStyleFamily(SwDocShell* pDocShell, const SfxStyleFamily eFamily) + : m_eFamily(eFamily) + , m_pBasePool(pDocShell->GetStyleSheetPool()) + , m_pDocShell(pDocShell) + { + StartListening(*m_pBasePool); + } + + virtual ~XStyleFamily() {}; //XIndexAccess virtual sal_Int32 SAL_CALL getCount() throw( uno::RuntimeException, std::exception ) override; virtual uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) throw( lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) override; //XElementAccess - virtual uno::Type SAL_CALL SAL_CALL getElementType( ) throw(uno::RuntimeException, std::exception) override; - virtual sal_Bool SAL_CALL SAL_CALL hasElements( ) throw(uno::RuntimeException, std::exception) override; + virtual uno::Type SAL_CALL SAL_CALL getElementType( ) throw(uno::RuntimeException, std::exception) override + { return cppu::UnoType<style::XStyle>::get(); }; + virtual sal_Bool SAL_CALL SAL_CALL hasElements( ) throw(uno::RuntimeException, std::exception) override + { + if(!m_pBasePool) + throw uno::RuntimeException(); + return true; + } //XNameAccess virtual uno::Any SAL_CALL getByName(const OUString& Name) throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) override; @@ -155,26 +168,43 @@ namespace sw virtual void SAL_CALL removeByName(const OUString& Name) throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) override; //XPropertySet - virtual uno::Reference< beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw (uno::RuntimeException, std::exception) override; - virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const uno::Any& aValue ) throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override; + virtual uno::Reference< beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw (uno::RuntimeException, std::exception) override + { return {}; }; + virtual void SAL_CALL setPropertyValue( const OUString&, const uno::Any&) throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override + { SAL_WARN("sw.uno", "###unexpected!"); }; virtual uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override; - virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const uno::Reference< beans::XPropertyChangeListener >& xListener ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override; - virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const uno::Reference< beans::XPropertyChangeListener >& aListener ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override; - virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const uno::Reference< beans::XVetoableChangeListener >& aListener ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override; - virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const uno::Reference< beans::XVetoableChangeListener >& aListener ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override; + virtual void SAL_CALL addPropertyChangeListener( const OUString&, const uno::Reference<beans::XPropertyChangeListener>&) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override + { SAL_WARN("sw.uno", "###unexpected!"); }; + virtual void SAL_CALL removePropertyChangeListener( const OUString&, const uno::Reference<beans::XPropertyChangeListener>&) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override + { SAL_WARN("sw.uno", "###unexpected!"); }; + virtual void SAL_CALL addVetoableChangeListener(const OUString&, const uno::Reference<beans::XVetoableChangeListener>&) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override + { SAL_WARN("sw.uno", "###unexpected!"); }; + virtual void SAL_CALL removeVetoableChangeListener(const OUString&, const uno::Reference<beans::XVetoableChangeListener>&) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override + { SAL_WARN("sw.uno", "###unexpected!"); }; //SfxListener - virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override + { + const SfxSimpleHint *pHint = dynamic_cast<const SfxSimpleHint*>( &rHint ); + if(pHint && (pHint->GetId() & SFX_HINT_DYING)) + { + m_pBasePool = nullptr, m_pDocShell = nullptr; + EndListening(rBC); + } + } //XServiceInfo - virtual OUString SAL_CALL getImplementationName() throw( uno::RuntimeException, std::exception ) override; - virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw( uno::RuntimeException, std::exception ) override; - virtual uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw( uno::RuntimeException, std::exception ) override; + virtual OUString SAL_CALL getImplementationName() throw( uno::RuntimeException, std::exception ) override + { return {"XStyleFamily"}; }; + virtual sal_Bool SAL_CALL supportsService(const OUString& rServiceName) throw( uno::RuntimeException, std::exception ) override + { return cppu::supportsService(this, rServiceName); }; + virtual uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw( uno::RuntimeException, std::exception ) override + { return { "com.sun.star.style.StyleFamily" }; } }; } -using sw::XStyleFamily; +using sw::XStyleFamily; static SwGetPoolIdFromName lcl_GetSwEnumFromSfxEnum(SfxStyleFamily eFamily) { @@ -316,17 +346,6 @@ uno::Sequence< beans::PropertyValue > SwXStyleFamilies::getStyleLoaderOptions() return aSeq; } -OUString XStyleFamily::getImplementationName() throw( uno::RuntimeException, std::exception ) - { return {"XStyleFamily"}; } - -sal_Bool XStyleFamily::supportsService(const OUString& rServiceName) throw( uno::RuntimeException, std::exception ) -{ - return cppu::supportsService(this, rServiceName); -} - -uno::Sequence< OUString > XStyleFamily::getSupportedServiceNames() throw( uno::RuntimeException, std::exception ) - { return { "com.sun.star.style.StyleFamily" }; } - // Already implemented autostyle families: 3 #define AUTOSTYLE_FAMILY_COUNT 3 const IStyleAccess::SwAutoStyleFamily aAutoStyleByIndex[] = @@ -350,18 +369,6 @@ public: SwDoc* getDoc() const { return pDoc; } }; -XStyleFamily::XStyleFamily(SwDocShell* pDocSh, const SfxStyleFamily eFamily) : - m_eFamily(eFamily), - m_pBasePool(pDocSh->GetStyleSheetPool()), - m_pDocShell(pDocSh) -{ - StartListening(*m_pBasePool); -} - -XStyleFamily::~XStyleFamily() -{ - -} static bool lcl_GetHeaderFooterItem( SfxItemSet const& rSet, OUString const& rPropName, bool const bFooter, @@ -690,15 +697,6 @@ sal_Bool XStyleFamily::hasByName(const OUString& rName) throw( uno::RuntimeExcep return nullptr != pBase; } -uno::Type XStyleFamily::getElementType() throw( uno::RuntimeException, std::exception ) - { return cppu::UnoType<style::XStyle>::get(); } - -sal_Bool XStyleFamily::hasElements() throw( uno::RuntimeException, std::exception ) -{ - if(!m_pBasePool) - throw uno::RuntimeException(); - return true; -} void XStyleFamily::insertByName(const OUString& rName, const uno::Any& rElement) throw( lang::IllegalArgumentException, container::ElementExistException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) @@ -788,12 +786,6 @@ void XStyleFamily::removeByName(const OUString& rName) throw( container::NoSuchE m_pBasePool->Remove(pBase); } -uno::Reference<beans::XPropertySetInfo> SAL_CALL XStyleFamily::getPropertySetInfo( ) throw (uno::RuntimeException, std::exception) - { return {}; } - -void SAL_CALL XStyleFamily::setPropertyValue( const OUString&, const uno::Any& ) throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException, std::exception) - { SAL_WARN("sw.uno", "###unexpected!"); } - uno::Any SAL_CALL XStyleFamily::getPropertyValue( const OUString& sPropertyName ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) { if(sPropertyName != "DisplayName") @@ -805,28 +797,6 @@ uno::Any SAL_CALL XStyleFamily::getPropertyValue( const OUString& sPropertyName return uno::makeAny(SW_RESSTR(pEntry->m_nRedId)); } -void SAL_CALL XStyleFamily::addPropertyChangeListener( const OUString&, const uno::Reference< beans::XPropertyChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) - { SAL_WARN("sw.uno", "###unexpected!"); } - -void SAL_CALL XStyleFamily::removePropertyChangeListener( const OUString&, const uno::Reference< beans::XPropertyChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) - { SAL_WARN("sw.uno", "###unexpected!"); } - -void SAL_CALL XStyleFamily::addVetoableChangeListener( const OUString&, const uno::Reference< beans::XVetoableChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) - { SAL_WARN("sw.uno", "###unexpected!"); } - -void SAL_CALL XStyleFamily::removeVetoableChangeListener( const OUString&, const uno::Reference< beans::XVetoableChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) - { SAL_WARN("sw.uno", "###unexpected!"); } - -void XStyleFamily::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) -{ - const SfxSimpleHint *pHint = dynamic_cast<const SfxSimpleHint*>( &rHint ); - if( pHint && ( pHint->GetId() & SFX_HINT_DYING ) ) - { - m_pBasePool = nullptr; - m_pDocShell = nullptr; - EndListening(rBC); - } -} SwXStyle* XStyleFamily::_FindStyle(const OUString& rStyleName) const { commit a8ce94f6283b8bf682ebf9095e8c34b9952eb85f Author: Bjoern Michaelsen <[email protected]> Date: Sat Nov 28 03:32:29 2015 +0100 SwXStyleFamily=>sw::XStyleFamily Change-Id: I334c4db5113902668d6967719c65ba403e9dde65 diff --git a/sw/inc/unostyle.hxx b/sw/inc/unostyle.hxx index b2b2359..0d2deb7 100644 --- a/sw/inc/unostyle.hxx +++ b/sw/inc/unostyle.hxx @@ -49,7 +49,10 @@ class SwStyleProperties_Impl; class SwAutoStylesEnumImpl; class IStyleAccess; class SfxItemSet; -class SwXStyleFamily; +namespace sw +{ + class XStyleFamily; +}; typedef std::shared_ptr<SfxItemSet> SfxItemSet_Pointer_t; class SwXStyleFamilies : public cppu::WeakImplHelper @@ -109,7 +112,7 @@ class SwXStyle : public cppu::WeakImplHelper public SfxListener, public SwClient { - friend class SwXStyleFamily; + friend class sw::XStyleFamily; SwDoc* m_pDoc; OUString m_sStyleName; SfxStyleSheetBasePool* m_pBasePool; diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx index de07866..1202f04 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -113,62 +113,69 @@ namespace { SFX_STYLE_FAMILY_PSEUDO, nsSwGetPoolIdFromName::GET_POOLID_NUMRULE, "NumberingStyles", STR_STYLE_FAMILY_NUMBERING} }; } -class SwXStyleFamily : public cppu::WeakImplHelper -< - css::container::XNameContainer, - css::lang::XServiceInfo, - css::container::XIndexAccess, - css::beans::XPropertySet ->, - public SfxListener -{ - SfxStyleFamily m_eFamily; - SfxStyleSheetBasePool* m_pBasePool; - SwDocShell* m_pDocShell; - - SwXStyle* _FindStyle(const OUString& rStyleName) const; -public: - SwXStyleFamily(SwDocShell* pDocShell, const SfxStyleFamily eFamily); - virtual ~SwXStyleFamily(); - - //XIndexAccess - virtual sal_Int32 SAL_CALL getCount() throw( css::uno::RuntimeException, std::exception ) override; - virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) throw( css::lang::IndexOutOfBoundsException, css::lang::WrappedTargetException, css::uno::RuntimeException, std::exception ) override; - - //XElementAccess - virtual css::uno::Type SAL_CALL SAL_CALL getElementType( ) throw(css::uno::RuntimeException, std::exception) override; - virtual sal_Bool SAL_CALL SAL_CALL hasElements( ) throw(css::uno::RuntimeException, std::exception) override; - - //XNameAccess - virtual css::uno::Any SAL_CALL getByName(const OUString& Name) throw( css::container::NoSuchElementException, css::lang::WrappedTargetException, css::uno::RuntimeException, std::exception ) override; - virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() throw( css::uno::RuntimeException, std::exception ) override; - virtual sal_Bool SAL_CALL hasByName(const OUString& Name) throw( css::uno::RuntimeException, std::exception ) override; - - //XNameContainer - virtual void SAL_CALL insertByName(const OUString& Name, const css::uno::Any& Element) throw( css::lang::IllegalArgumentException, css::container::ElementExistException, css::lang::WrappedTargetException, css::uno::RuntimeException, std::exception ) override; - virtual void SAL_CALL replaceByName(const OUString& Name, const css::uno::Any& Element) throw( css::lang::IllegalArgumentException, css::container::NoSuchElementException, css::lang::WrappedTargetException, css::uno::RuntimeException, std::exception ) override; - virtual void SAL_CALL removeByName(const OUString& Name) throw( css::container::NoSuchElementException, css::lang::WrappedTargetException, css::uno::RuntimeException, std::exception ) override; - - //XPropertySet - virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw (css::uno::RuntimeException, std::exception) override; - virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) throw (css::beans::UnknownPropertyException, css::beans::PropertyVetoException, css::lang::IllegalArgumentException, css::lang::WrappedTargetException, css::uno::RuntimeException, std::exception) override; - virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) throw (css::beans::UnknownPropertyException, css::lang::WrappedTargetException, css::uno::RuntimeException, std::exception) override; - virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) throw (css::beans::UnknownPropertyException, css::lang::WrappedTargetException, css::uno::RuntimeException, std::exception) override; - virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) throw (css::beans::UnknownPropertyException, css::lang::WrappedTargetException, css::uno::RuntimeException, std::exception) override; - virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) throw (css::beans::UnknownPropertyException, css::lang::WrappedTargetException, css::uno::RuntimeException, std::exception) override; - virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) throw (css::beans::UnknownPropertyException, css::lang::WrappedTargetException, css::uno::RuntimeException, std::exception) override; - - //SfxListener - virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; - - //XServiceInfo - virtual OUString SAL_CALL getImplementationName() throw( css::uno::RuntimeException, std::exception ) override; - virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw( css::uno::RuntimeException, std::exception ) override; - virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw( css::uno::RuntimeException, std::exception ) override; -}; using namespace ::com::sun::star; +namespace sw +{ + class XStyleFamily : public cppu::WeakImplHelper + < + container::XNameContainer, + lang::XServiceInfo, + container::XIndexAccess, + beans::XPropertySet + >, + public SfxListener + { + SfxStyleFamily m_eFamily; + SfxStyleSheetBasePool* m_pBasePool; + SwDocShell* m_pDocShell; + + SwXStyle* _FindStyle(const OUString& rStyleName) const; + public: + XStyleFamily(SwDocShell* pDocShell, const SfxStyleFamily eFamily); + virtual ~XStyleFamily(); + + //XIndexAccess + virtual sal_Int32 SAL_CALL getCount() throw( uno::RuntimeException, std::exception ) override; + virtual uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) throw( lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) override; + + //XElementAccess + virtual uno::Type SAL_CALL SAL_CALL getElementType( ) throw(uno::RuntimeException, std::exception) override; + virtual sal_Bool SAL_CALL SAL_CALL hasElements( ) throw(uno::RuntimeException, std::exception) override; + + //XNameAccess + virtual uno::Any SAL_CALL getByName(const OUString& Name) throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) override; + virtual uno::Sequence< OUString > SAL_CALL getElementNames() throw( uno::RuntimeException, std::exception ) override; + virtual sal_Bool SAL_CALL hasByName(const OUString& Name) throw( uno::RuntimeException, std::exception ) override; + + //XNameContainer + virtual void SAL_CALL insertByName(const OUString& Name, const uno::Any& Element) throw( lang::IllegalArgumentException, container::ElementExistException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) override; + virtual void SAL_CALL replaceByName(const OUString& Name, const uno::Any& Element) throw( lang::IllegalArgumentException, container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) override; + virtual void SAL_CALL removeByName(const OUString& Name) throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException, std::exception ) override; + + //XPropertySet + virtual uno::Reference< beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw (uno::RuntimeException, std::exception) override; + virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const uno::Any& aValue ) throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override; + virtual uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override; + virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const uno::Reference< beans::XPropertyChangeListener >& xListener ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override; + virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const uno::Reference< beans::XPropertyChangeListener >& aListener ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override; + virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const uno::Reference< beans::XVetoableChangeListener >& aListener ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override; + virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const uno::Reference< beans::XVetoableChangeListener >& aListener ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception) override; + + //SfxListener + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; + + //XServiceInfo + virtual OUString SAL_CALL getImplementationName() throw( uno::RuntimeException, std::exception ) override; + virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw( uno::RuntimeException, std::exception ) override; + virtual uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw( uno::RuntimeException, std::exception ) override; + }; + +} +using sw::XStyleFamily; + + static SwGetPoolIdFromName lcl_GetSwEnumFromSfxEnum(SfxStyleFamily eFamily) { const auto pEntry = std::find_if(our_vStyleFamilyEntries.begin(), our_vStyleFamilyEntries.end(), @@ -246,7 +253,7 @@ uno::Any SwXStyleFamilies::getByIndex(sal_Int32 nIndex) assert(eFamily != SFX_STYLE_FAMILY_ALL); auto& rxContainer = m_vContainers[eFamily]; if(!rxContainer.is()) - rxContainer = new SwXStyleFamily(m_pDocShell, eFamily); ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
