diff options
author | Muhammet Kara <muhammet.kara@collabora.com> | 2019-06-24 01:46:42 +0300 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2019-09-30 21:50:39 +0200 |
commit | 5a76cbb3570437f2eea4549b97dc6e08068d7a59 (patch) | |
tree | 6e9062275f312dc3482f7c570e21de5e71b53e2f /sw/source | |
parent | eda88cd2eb4cba8f1a3482a3d1bfda66d29f3aab (diff) |
Sync page orientation of Endnote page
Description:
When changing the default page style to have a different orientation,
end-notes are placed on a page with a custom ‘Endnote’ page style.
This style does not inherit its orientation from the default style.
Repro:
Create a blank document, insert→End Note, Format→Page in the first page,
select the Page tab, and alter the Orientation to Landscape, ‘Ok’.
The End-note page should update its orientation too.
NB. If the Endnote page style is manually set to a different value
in a document template it will remain in the selected orientation.
After this patch, Default style and the Endnote style have their
orientations synced after each run of the Format > Page dialog.
Ideally, this should be solved by resolving tdf#41316 on master:
Page styles should support hierarchical parent-child relationships
(like paragraph or character styles)
Change-Id: I255b470d1aebb897f50a4a74b8678b771ffbab28
Reviewed-on: https://gerrit.libreoffice.org/79869
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'sw/source')
-rw-r--r-- | sw/source/uibase/app/docst.cxx | 86 |
1 files changed, 85 insertions, 1 deletions
diff --git a/sw/source/uibase/app/docst.cxx b/sw/source/uibase/app/docst.cxx index 806c38b64bf2..59dfb6bbbfd5 100644 --- a/sw/source/uibase/app/docst.cxx +++ b/sw/source/uibase/app/docst.cxx @@ -86,6 +86,7 @@ #include <paratr.hxx> #include <tblafmt.hxx> #include <sfx2/watermarkitem.hxx> +#include <strings.hrc> using namespace ::com::sun::star; @@ -641,6 +642,71 @@ IMPL_LINK_NOARG(ApplyStyle, ApplyHdl, LinkParamNone*, void) pWrtShell->EndAllAction(); } +namespace +{ +/// Checks if there is an Endnote page style in use, and makes sure it has the same orientation +/// with the Default (Standard) page style. +void syncEndnoteOrientation(const uno::Reference< style::XStyleFamiliesSupplier >& xStyleFamSupp) +{ + if (!xStyleFamSupp.is()) + { + SAL_WARN("sw.ui", "Ref to XStyleFamiliesSupplier is null."); + return; + } + uno::Reference<container::XNameAccess> xStyleFamilies( + xStyleFamSupp->getStyleFamilies(), uno::UNO_QUERY); + + if (!xStyleFamilies.is()) + return; + + uno::Reference<container::XNameAccess> xPageStyles(xStyleFamilies->getByName("PageStyles"), + uno::UNO_QUERY); + + if (!xPageStyles.is()) + return; + + uno::Reference<css::style::XStyle> xEndnotePageStyle(xPageStyles->getByName("Endnote"), + uno::UNO_QUERY); + + if (!xEndnotePageStyle.is()) + return; + + // Language-independent name of the "Default Style" is "Standard" + uno::Reference<css::style::XStyle> xDefaultPageStyle(xPageStyles->getByName("Standard"), + uno::UNO_QUERY); + if (!xDefaultPageStyle.is()) + return; + + if (xEndnotePageStyle->isUserDefined() || !xEndnotePageStyle->isInUse()) + return; + + uno::Reference<beans::XPropertySet> xEndnotePagePropSet(xPageStyles->getByName("Endnote"), uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> xDefaultPagePropSet(xPageStyles->getByName("Standard"), uno::UNO_QUERY); + + if (!xEndnotePagePropSet.is() || !xDefaultPagePropSet.is()) + { + SAL_WARN("sw.ui", "xEndnotePagePropSet or xDefaultPagePropSet is null."); + return; + } + + sal_Int32 nWidth, nHeight; + bool bIsDefLandScape, bIsEndLandScape; + + xDefaultPagePropSet->getPropertyValue("IsLandscape") >>= bIsDefLandScape; + xEndnotePagePropSet->getPropertyValue("IsLandscape") >>= bIsEndLandScape; + + if (bIsDefLandScape == bIsEndLandScape) + return; + + xEndnotePagePropSet->getPropertyValue("Width") >>= nWidth; + xEndnotePagePropSet->getPropertyValue("Height") >>= nHeight; + + xEndnotePagePropSet->setPropertyValue("IsLandscape", css::uno::toAny(bIsDefLandScape)); + xEndnotePagePropSet->setPropertyValue("Width", css::uno::toAny(nHeight)); + xEndnotePagePropSet->setPropertyValue("Height", css::uno::toAny(nWidth)); +} +} + void SwDocShell::Edit( const OUString &rName, const OUString &rParent, @@ -830,7 +896,12 @@ void SwDocShell::Edit( pReq->Ignore(); // the 'old' request is not relevant any more } - pDlg->StartExecuteAsync([bModified, bNew, nFamily, nSlot, nNewStyleUndoId, pApplyStyleHelper, pRequest, xTmp, this](sal_Int32 nResult){ + bool bIsDefaultPage = nFamily == SfxStyleFamily::Page + && rName == SwResId(STR_POOLPAGE_STANDARD) + && pStyle->IsUsed() + && !pStyle->IsUserDefined(); + + pDlg->StartExecuteAsync([bIsDefaultPage, bModified, bNew, nFamily, nSlot, nNewStyleUndoId, pApplyStyleHelper, pRequest, xTmp, this](sal_Int32 nResult){ if (RET_OK == nResult) pApplyStyleHelper->apply(); @@ -865,6 +936,19 @@ void SwDocShell::Edit( if (pRequest) pRequest->Done(); + + if (bIsDefaultPage && bModified) + { + uno::Reference< style::XStyleFamiliesSupplier > xStyleFamSupp(GetModel(), uno::UNO_QUERY); + + if (!xStyleFamSupp.is()) + { + SAL_WARN("sw.ui", "Ref to XStyleFamiliesSupplier is null."); + return; + } + + syncEndnoteOrientation(xStyleFamSupp); + } }); } else |