diff options
Diffstat (limited to 'sd/source/core/stlsheet.cxx')
-rw-r--r-- | sd/source/core/stlsheet.cxx | 126 |
1 files changed, 77 insertions, 49 deletions
diff --git a/sd/source/core/stlsheet.cxx b/sd/source/core/stlsheet.cxx index 3cd669294b1a..585d0b6cbfae 100644 --- a/sd/source/core/stlsheet.cxx +++ b/sd/source/core/stlsheet.cxx @@ -580,55 +580,76 @@ bool SdStyleSheet::HasClearParentSupport() const return true; } -void SdStyleSheet::SetHelpId( const OUString& r, sal_uLong nId ) +namespace { - SfxStyleSheet::SetHelpId( r, nId ); +struct ApiNameMap +{ + OUStringLiteral mpApiName; + sal_uInt32 mnHelpId; +} const pApiNameMap[] + = { { OUStringLiteral("title"), HID_PSEUDOSHEET_TITLE }, + { OUStringLiteral("subtitle"), HID_PSEUDOSHEET_SUBTITLE }, + { OUStringLiteral("background"), HID_PSEUDOSHEET_BACKGROUND }, + { OUStringLiteral("backgroundobjects"), HID_PSEUDOSHEET_BACKGROUNDOBJECTS }, + { OUStringLiteral("notes"), HID_PSEUDOSHEET_NOTES }, + { OUStringLiteral("standard"), HID_STANDARD_STYLESHEET_NAME }, + { OUStringLiteral("objectwitharrow"), HID_POOLSHEET_OBJWITHARROW }, + { OUStringLiteral("objectwithshadow"), HID_POOLSHEET_OBJWITHSHADOW }, + { OUStringLiteral("objectwithoutfill"), HID_POOLSHEET_OBJWITHOUTFILL }, + { OUStringLiteral("text"), HID_POOLSHEET_TEXT }, + { OUStringLiteral("textbody"), HID_POOLSHEET_TEXTBODY }, + { OUStringLiteral("textbodyjustfied"), HID_POOLSHEET_TEXTBODY_JUSTIFY }, + { OUStringLiteral("textbodyindent"), HID_POOLSHEET_TEXTBODY_INDENT }, + { OUStringLiteral("title"), HID_POOLSHEET_TITLE }, + { OUStringLiteral("title1"), HID_POOLSHEET_TITLE1 }, + { OUStringLiteral("title2"), HID_POOLSHEET_TITLE2 }, + { OUStringLiteral("headline"), HID_POOLSHEET_HEADLINE }, + { OUStringLiteral("headline1"), HID_POOLSHEET_HEADLINE1 }, + { OUStringLiteral("headline2"), HID_POOLSHEET_HEADLINE2 }, + { OUStringLiteral("measure"), HID_POOLSHEET_MEASURE } }; + +OUString GetApiNameForHelpId(sal_uLong nId) +{ + if ((nId >= HID_PSEUDOSHEET_OUTLINE1) && (nId <= HID_PSEUDOSHEET_OUTLINE9)) + return "outline" + OUStringLiteral1('1' + (nId - HID_PSEUDOSHEET_OUTLINE1)); - if( (nId >= HID_PSEUDOSHEET_OUTLINE1) && ( nId <= HID_PSEUDOSHEET_OUTLINE9 ) ) - { - msApiName = "outline"; - msApiName += OUStringLiteral1( '1' + (nId - HID_PSEUDOSHEET_OUTLINE1) ); - } - else + for (const auto& i : pApiNameMap) + if (nId == i.mnHelpId) + return i.mpApiName; + + return OUString(); +} + +sal_uInt32 GetHelpIdForApiName(const OUString& sName) +{ + OUString sRest; + if (sName.startsWith("outline", &sRest)) { - static struct ApiNameMap + if (sRest.getLength() == 1) { - OUStringLiteral mpApiName; - sal_uInt32 mnHelpId; - } - const pApiNameMap[] = - { - { OUStringLiteral("title"), HID_PSEUDOSHEET_TITLE }, - { OUStringLiteral("subtitle"), HID_PSEUDOSHEET_SUBTITLE }, - { OUStringLiteral("background"), HID_PSEUDOSHEET_BACKGROUND }, - { OUStringLiteral("backgroundobjects"),HID_PSEUDOSHEET_BACKGROUNDOBJECTS }, - { OUStringLiteral("notes"), HID_PSEUDOSHEET_NOTES }, - { OUStringLiteral("standard"), HID_STANDARD_STYLESHEET_NAME }, - { OUStringLiteral("objectwitharrow"), HID_POOLSHEET_OBJWITHARROW }, - { OUStringLiteral("objectwithshadow"), HID_POOLSHEET_OBJWITHSHADOW }, - { OUStringLiteral("objectwithoutfill"),HID_POOLSHEET_OBJWITHOUTFILL }, - { OUStringLiteral("text"), HID_POOLSHEET_TEXT }, - { OUStringLiteral("textbody"), HID_POOLSHEET_TEXTBODY }, - { OUStringLiteral("textbodyjustfied"), HID_POOLSHEET_TEXTBODY_JUSTIFY }, - { OUStringLiteral("textbodyindent"), HID_POOLSHEET_TEXTBODY_INDENT }, - { OUStringLiteral("title"), HID_POOLSHEET_TITLE }, - { OUStringLiteral("title1"), HID_POOLSHEET_TITLE1 }, - { OUStringLiteral("title2"), HID_POOLSHEET_TITLE2 }, - { OUStringLiteral("headline"), HID_POOLSHEET_HEADLINE }, - { OUStringLiteral("headline1"), HID_POOLSHEET_HEADLINE1 }, - { OUStringLiteral("headline2"), HID_POOLSHEET_HEADLINE2 }, - { OUStringLiteral("measure"), HID_POOLSHEET_MEASURE } - }; - - for (std::size_t i = 0; i != SAL_N_ELEMENTS(pApiNameMap); ++i) - { - if( nId == pApiNameMap[i].mnHelpId ) - { - msApiName = pApiNameMap[i].mpApiName; - break; - } + sal_Unicode ch = sRest.toChar(); + if ('1' <= ch && ch <= '9') + return HID_PSEUDOSHEET_OUTLINE1 + ch - '1'; } + // No other pre-defined names start with "outline" + return 0; } + + for (const auto& i : pApiNameMap) + if (sName == i.mpApiName) + return i.mnHelpId; + + return 0; +} +} + +void SdStyleSheet::SetHelpId( const OUString& r, sal_uLong nId ) +{ + SfxStyleSheet::SetHelpId( r, nId ); + + const OUString sNewApiName = GetApiNameForHelpId(nId); + if (!sNewApiName.isEmpty()) + msApiName = sNewApiName; } OUString SdStyleSheet::GetFamilyString( SfxStyleFamily eFamily ) @@ -828,6 +849,18 @@ Sequence< OUString > SAL_CALL SdStyleSheet::getSupportedServiceNames() return aNameSequence; } +bool SdStyleSheet::SetName(const OUString& rNewName, bool bReindexNow) +{ + const bool bResult = SfxUnoStyleSheet::SetName(rNewName, bReindexNow); + // Don't overwrite predefined API names + if (bResult && GetHelpIdForApiName(msApiName) == 0) + { + msApiName = rNewName; + Broadcast(SfxHint(SfxHintId::DataChanged)); + } + return bResult; +} + // XNamed OUString SAL_CALL SdStyleSheet::getName() { @@ -840,12 +873,7 @@ void SAL_CALL SdStyleSheet::setName( const OUString& rName ) { SolarMutexGuard aGuard; throwIfDisposed(); - - if( SetName( rName ) ) - { - msApiName = rName; - Broadcast(SfxHint(SfxHintId::DataChanged)); - } + SetName(rName); } // XStyle |