Support of page styles without header/footer on first page

Import/export to/from docx/rtf supported.
Unit test available.

Change-Id: I12065ba4fb050d7dfc013eda704ebe2acb53c88e
Signed-off-by: Oliver Specht <oliver.specht@cib.de>
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/3580
Tested-by: Michael Stahl <michael.stahl@collabora.com>
Reviewed-by: Michael Stahl <michael.stahl@collabora.com>
(cherry picked from commit b8af8f046a098c67d7caf44dc70d1db5cabf24e2)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/206698
Tested-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
This commit is contained in:
Oliver Specht
2026-06-18 12:17:01 +02:00
committed by Xisco Fauli
parent b1712dadb7
commit 5dd328effe
31 changed files with 478 additions and 50 deletions
+2
View File
@@ -69,6 +69,7 @@ protected:
std::unique_ptr<weld::CheckButton> m_xTurnOnBox;
std::unique_ptr<weld::CheckButton> m_xCntSharedBox;
std::unique_ptr<weld::CheckButton> m_xCntSharedFirstBox;
std::unique_ptr<weld::CheckButton> m_xCntNoFirstBox;
std::unique_ptr<weld::Label> m_xLMLbl;
std::unique_ptr<weld::MetricSpinButton>m_xLMEdit;
std::unique_ptr<weld::Label> m_xRMLbl;
@@ -86,6 +87,7 @@ protected:
void InitHandler();
void TurnOn(const weld::Toggleable* pButton);
DECL_LINK(TurnOnHdl, weld::Toggleable&, void);
DECL_LINK(FirstPageHdl, weld::Toggleable&, void);
DECL_DLLPRIVATE_LINK(BackgroundHdl, weld::Button&, void);
DECL_DLLPRIVATE_LINK(ValueChangeHdl, weld::MetricSpinButton&, void);
void RangeHdl();
+3 -1
View File
@@ -1126,8 +1126,10 @@ class XFillGradientItem;
#define SID_RESET_AUTOFORMATS ( SID_SVX_START + 1258 )
#define SID_ATTR_PAGE_NO_FIRST ( SID_SVX_START + 1259 )
// IMPORTANT NOTE: adjust SID_SVX_FIRSTFREE, when adding new slot id
#define SID_SVX_FIRSTFREE ( SID_SVX_START + 1258 + 1 )
#define SID_SVX_FIRSTFREE ( SID_SVX_START + 1259 + 1 )
// Overflow check for slot IDs
#if SID_SVX_FIRSTFREE > SID_SVX_END
@@ -36,6 +36,8 @@ class XMLOFF_DLLPUBLIC XMLTextMasterPageContext : public SvXMLStyleContext
OUString m_sFollow;
OUString m_sPageMasterName;
OUString m_sDrawingPageStyle;
OUString m_sIsFirstPageFooterShared;
OUString m_sIsFirstPageHeaderShared;
css::uno::Reference < css::style::XStyle > m_xStyle;
@@ -47,6 +49,7 @@ class XMLOFF_DLLPUBLIC XMLTextMasterPageContext : public SvXMLStyleContext
bool m_bInsertFooterFirst;
bool m_bHeaderInserted;
bool m_bFooterInserted;
bool m_bHeaderFirstAvailable;
SAL_DLLPRIVATE css::uno::Reference< css::style::XStyle > Create();
protected:
+2
View File
@@ -922,6 +922,7 @@ namespace xmloff::token {
XML_FONTWORK_STYLE,
XML_FOOTER,
XML_FOOTER_FIRST,
XML_IS_FIRST_PAGE_FOOTER_SHARED,
XML_FOOTER_LEFT,
XML_FOOTER_STYLE,
XML_FOOTER_VISIBLE,
@@ -1024,6 +1025,7 @@ namespace xmloff::token {
XML_HATCHSTYLE_TRIPLE,
XML_HEADER,
XML_HEADER_FIRST,
XML_IS_FIRST_PAGE_HEADER_SHARED,
XML_HEADER_LEFT,
XML_HEADER_STYLE,
XML_HEADERS,
@@ -4419,4 +4419,19 @@ xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.
<rng:ref name="office-change-info"/>
</rng:element>
</rng:define>
<!-- TODO: no proposal for loext:is-first-page-header-shared and loext:is-first-page-footer-shared -->
<!-- enables empty header/footer on first page -->
<rng:define name="style-master-page-attlist" combine="interleave">
<rng:optional>
<rng:attribute name="loext:is-first-page-header-shared">
<!-- default value: false -->
<rng:ref name="boolean"/>
</rng:attribute>
</rng:optional>
<rng:optional>
<rng:attribute name="loext:is-first-page-footer-shared">
<rng:ref name="boolean"/>
</rng:attribute>
</rng:optional>
</rng:define>
</rng:grammar>
+61 -2
View File
@@ -133,6 +133,7 @@ SvxHFPage::SvxHFPage(weld::Container* pPage, weld::DialogController* pController
, mbEnableDrawingLayerFillStyles(false)
, m_xCntSharedBox(m_xBuilder->weld_check_button(u"checkSameLR"_ustr))
, m_xCntSharedFirstBox(m_xBuilder->weld_check_button(u"checkSameFP"_ustr))
, m_xCntNoFirstBox(m_xBuilder->weld_check_button(u"checkNoFP"_ustr))
, m_xLMLbl(m_xBuilder->weld_label(u"labelLeftMarg"_ustr))
, m_xLMEdit(m_xBuilder->weld_metric_spin_button(u"spinMargLeft"_ustr, FieldUnit::CM))
, m_xRMLbl(m_xBuilder->weld_label(u"labelRightMarg"_ustr))
@@ -164,6 +165,7 @@ SvxHFPage::SvxHFPage(weld::Container* pPage, weld::DialogController* pController
on both the Header and Footer tabs */
m_xCntSharedBox->set_help_id( u"SVX_HID_FOOTER_CHECKSAMELR"_ustr );
m_xCntSharedFirstBox->set_help_id( u"SVX_HID_FOOTER_CHECKSAMEFP"_ustr );
m_xCntNoFirstBox->set_help_id( u"SVX_HID_FOOTER_CHECKNOFP"_ustr );
m_xLMEdit->set_help_id( u"SVX_HID_FOOTER_SPINMARGLEFT"_ustr );
m_xRMEdit->set_help_id( u"SVX_HID_FOOTER_SPINMARGRIGHT"_ustr );
m_xDistEdit->set_help_id( u"SVX_HID_FOOTER_SPINSPACING"_ustr );
@@ -175,6 +177,7 @@ SvxHFPage::SvxHFPage(weld::Container* pPage, weld::DialogController* pController
// uitest
m_xCntSharedBox->set_buildable_name(m_xCntSharedBox->get_buildable_name() + "-footer");
m_xCntSharedFirstBox->set_buildable_name(m_xCntSharedFirstBox->get_buildable_name() + "-footer");
m_xCntNoFirstBox->set_buildable_name(m_xCntNoFirstBox->get_buildable_name() + "-footer");
}
else //Header
{
@@ -186,7 +189,11 @@ SvxHFPage::SvxHFPage(weld::Container* pPage, weld::DialogController* pController
// uitest
m_xCntSharedBox->set_buildable_name(m_xCntSharedBox->get_buildable_name() + "-header");
m_xCntSharedFirstBox->set_buildable_name(m_xCntSharedFirstBox->get_buildable_name() + "-header");
m_xCntNoFirstBox->set_buildable_name(m_xCntNoFirstBox->get_buildable_name() + "-header");
}
//TODO: hide only or move following controls?
if (m_bIsCalc)
m_xCntNoFirstBox->hide();
m_xTurnOnBox->show();
InitHandler();
@@ -217,6 +224,7 @@ bool SvxHFPage::FillItemSet( SfxItemSet* rSet )
const sal_uInt16 nWDynSpacing = GetWhich(SID_ATTR_HDFT_DYNAMIC_SPACING);
const sal_uInt16 nWShared = GetWhich(SID_ATTR_PAGE_SHARED);
const sal_uInt16 nWSharedFirst = GetWhich( SID_ATTR_PAGE_SHARED_FIRST );
const sal_uInt16 nWNoFirst = GetWhich( SID_ATTR_PAGE_NO_FIRST );
const sal_uInt16 nWBrush = GetWhich(SID_ATTR_BRUSH);
const sal_uInt16 nWBox = GetWhich(SID_ATTR_BORDER_OUTER);
const sal_uInt16 nWBoxInfo = GetWhich(SID_ATTR_BORDER_INNER);
@@ -236,6 +244,7 @@ bool SvxHFPage::FillItemSet( SfxItemSet* rSet )
aSet.MergeRange(nWDynamic, nWDynamic);
aSet.MergeRange(nWShared, nWShared);
aSet.MergeRange(nWSharedFirst, nWSharedFirst);
aSet.MergeRange(nWNoFirst, nWNoFirst);
aSet.MergeRange(nWBrush, nWBrush);
aSet.MergeRange(nWBoxInfo, nWBoxInfo);
aSet.MergeRange(nWBox, nWBox);
@@ -254,14 +263,15 @@ bool SvxHFPage::FillItemSet( SfxItemSet* rSet )
aSet.Put( SfxBoolItem( nWDynamic, m_xHeightDynBtn->get_active() ) );
aSet.Put( SfxBoolItem( nWShared, m_xCntSharedBox->get_active() ) );
if(m_xCntSharedFirstBox->get_visible())
aSet.Put(SfxBoolItem(nWSharedFirst, m_xCntSharedFirstBox->get_active()));
aSet.Put(SfxBoolItem(nWSharedFirst, m_xCntSharedFirstBox->get_active()));
if (m_xCntNoFirstBox->get_visible())
aSet.Put(SfxBoolItem(nWNoFirst, m_xCntNoFirstBox->get_active()));
if (m_xDynSpacingCB->get_visible() && SfxItemPool::IsWhich(nWDynSpacing))
{
std::unique_ptr<SfxBoolItem> pBoolItem(static_cast<SfxBoolItem*>(pPool->GetUserOrPoolDefaultItem(nWDynSpacing).Clone()));
pBoolItem->SetValue(m_xDynSpacingCB->get_active());
aSet.Put(std::move(pBoolItem));
}
// Size
SvxSizeItem aSizeItem( static_cast<const SvxSizeItem&>(rOldSet.Get( nWSize )) );
Size aSize( aSizeItem.GetSize() );
@@ -441,6 +451,10 @@ void SvxHFPage::Reset( const SfxItemSet* rSet )
void SvxHFPage::InitHandler()
{
m_xTurnOnBox->connect_toggled(LINK(this, SvxHFPage, TurnOnHdl));
m_xCntSharedFirstBox->connect_toggled(LINK(this, SvxHFPage, FirstPageHdl));
m_xCntNoFirstBox->connect_toggled(LINK(this, SvxHFPage, FirstPageHdl));
m_xDistEdit->connect_value_changed(LINK(this, SvxHFPage, ValueChangeHdl));
m_xHeightEdit->connect_value_changed(LINK(this,SvxHFPage,ValueChangeHdl));
@@ -472,6 +486,8 @@ void SvxHFPage::TurnOn(const weld::Toggleable* pBox)
{
m_xCntSharedBox->set_sensitive(true);
m_xCntSharedFirstBox->set_sensitive(true);
m_xCntNoFirstBox->set_sensitive(true);
FirstPageHdl(*m_xCntNoFirstBox);
}
m_xBackgroundBtn->set_sensitive(true);
}
@@ -512,6 +528,7 @@ void SvxHFPage::TurnOn(const weld::Toggleable* pBox)
m_xCntSharedBox->set_sensitive(false);
m_xBackgroundBtn->set_sensitive(false);
m_xCntSharedFirstBox->set_sensitive(false);
m_xCntNoFirstBox->set_sensitive(false);
}
else
m_xTurnOnBox->set_active(true);
@@ -524,6 +541,12 @@ IMPL_LINK(SvxHFPage, TurnOnHdl, weld::Toggleable&, rBox, void)
TurnOn(&rBox);
}
IMPL_LINK_NOARG(SvxHFPage, FirstPageHdl, weld::Toggleable&, void)
{
m_xCntSharedFirstBox->set_sensitive(!m_xCntNoFirstBox->get_active());
m_xCntNoFirstBox->set_sensitive(!m_bIsCalc && !m_xCntSharedFirstBox->get_active());
}
IMPL_LINK_NOARG(SvxHFPage, BackgroundHdl, weld::Button&, void)
{
if(!m_pBBSet)
@@ -829,6 +852,7 @@ void SvxHFPage::ActivatePage( const SfxItemSet& rSet )
{
m_xCntSharedBox->set_sensitive(true);
m_xCntSharedFirstBox->set_sensitive(true);
m_xCntNoFirstBox->set_sensitive(true);
}
if (const SvxSizeItem* pItem = GetItem( rSet, SID_ATTR_PAGE_SIZE ))
@@ -843,6 +867,9 @@ void SvxHFPage::ActivatePage( const SfxItemSet& rSet )
std::optional<bool> oNonActivatedFirstShared; // only used by Writer
bool bActivatedFirstShared = true; // default value
const sal_uInt16 nSidAttrPageSharedFirst = GetWhich(SID_ATTR_PAGE_SHARED_FIRST);
std::optional<bool> oNonActivatedNoFirst; // only used by Writer
bool bActivatedNoFirst = false; // default value
const sal_uInt16 nSidAttrPageNoFirst = GetWhich(SID_ATTR_PAGE_NO_FIRST);
// Evaluate Header attribute
const SvxSetItem* pSetItem = nullptr;
@@ -879,6 +906,17 @@ void SvxHFPage::ActivatePage( const SfxItemSet& rSet )
else
oNonActivatedFirstShared = pSharedFirst->GetValue();
}
const SfxBoolItem* pNoFirst = nullptr;
if (rHeaderSet.HasItem(nSidAttrPageNoFirst))
pNoFirst
= static_cast<const SfxBoolItem*>(&rHeaderSet.Get(nSidAttrPageNoFirst));
if (pNoFirst)
{
if (SID_ATTR_PAGE_HEADERSET == m_nId)
bActivatedNoFirst = pNoFirst->GetValue();
else
oNonActivatedNoFirst = pNoFirst->GetValue();
}
}
else
pSetItem = nullptr;
@@ -892,6 +930,7 @@ void SvxHFPage::ActivatePage( const SfxItemSet& rSet )
{
m_xCntSharedBox->set_sensitive(false);
m_xCntSharedFirstBox->set_sensitive(false);
m_xCntNoFirstBox->set_sensitive(false);
}
}
pSetItem = nullptr;
@@ -928,6 +967,17 @@ void SvxHFPage::ActivatePage( const SfxItemSet& rSet )
else
oNonActivatedFirstShared = pSharedFirst->GetValue();
}
const SfxBoolItem* pNoFirst = nullptr;
if (rFooterSet.HasItem(nSidAttrPageNoFirst))
pNoFirst
= static_cast<const SfxBoolItem*>(&rFooterSet.Get(nSidAttrPageNoFirst));
if (pNoFirst)
{
if (SID_ATTR_PAGE_FOOTERSET == m_nId)
bActivatedNoFirst = pNoFirst->GetValue();
else
oNonActivatedNoFirst = pNoFirst->GetValue();
}
}
else
pSetItem = nullptr;
@@ -941,6 +991,7 @@ void SvxHFPage::ActivatePage( const SfxItemSet& rSet )
{
m_xCntSharedBox->set_sensitive(false);
m_xCntSharedFirstBox->set_sensitive(false);
m_xCntNoFirstBox->set_sensitive(false);
}
}
@@ -948,6 +999,14 @@ void SvxHFPage::ActivatePage( const SfxItemSet& rSet )
m_xCntSharedFirstBox->set_active(
oNonActivatedFirstShared.has_value() ? *oNonActivatedFirstShared : bActivatedFirstShared);
m_xCntNoFirstBox->set_active(
oNonActivatedNoFirst.has_value() ? *oNonActivatedNoFirst : bActivatedNoFirst);
m_xCntSharedFirstBox->set_sensitive(m_xTurnOnBox->get_active() &&
!m_xCntNoFirstBox->get_active());
m_xCntNoFirstBox->set_sensitive(m_xTurnOnBox->get_active() &&
!m_xCntSharedFirstBox->get_active());
if (const SfxBoolItem* pBoolItem = GetItem( rSet, SID_ATTR_PAGE_EXT1 ))
{
m_aBspWin.SetTable( true );
+29 -13
View File
@@ -98,7 +98,7 @@
</packing>
</child>
<child>
<!-- n-columns=2 n-rows=9 -->
<!-- n-columns=2 n-rows=10 -->
<object class="GtkGrid" id="grid5">
<property name="visible">True</property>
<property name="can-focus">False</property>
@@ -139,7 +139,23 @@
<property name="width">2</property>
</packing>
</child>
<child>
<child>
<object class="GtkCheckButton" id="checkNoFP">
<property name="label" translatable="yes" context="headfootformatpage|checkNoFP">No content on first page</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="hexpand">True</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">2</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="labelLeftMarg">
<property name="visible">True</property>
<property name="can-focus">False</property>
@@ -151,7 +167,7 @@
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">2</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
@@ -166,7 +182,7 @@
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">2</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
@@ -181,7 +197,7 @@
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">3</property>
<property name="top-attach">4</property>
</packing>
</child>
<child>
@@ -196,7 +212,7 @@
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">3</property>
<property name="top-attach">4</property>
</packing>
</child>
<child>
@@ -211,7 +227,7 @@
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">4</property>
<property name="top-attach">5</property>
</packing>
</child>
<child>
@@ -226,7 +242,7 @@
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">4</property>
<property name="top-attach">5</property>
</packing>
</child>
<child>
@@ -240,7 +256,7 @@
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">5</property>
<property name="top-attach">6</property>
<property name="width">2</property>
</packing>
</child>
@@ -257,7 +273,7 @@
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">6</property>
<property name="top-attach">7</property>
</packing>
</child>
<child>
@@ -272,7 +288,7 @@
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">6</property>
<property name="top-attach">7</property>
</packing>
</child>
<child>
@@ -287,7 +303,7 @@
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">7</property>
<property name="top-attach">8</property>
<property name="width">2</property>
</packing>
</child>
@@ -328,7 +344,7 @@
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">8</property>
<property name="top-attach">9</property>
<property name="width">2</property>
</packing>
</child>
+5 -1
View File
@@ -126,9 +126,11 @@ enum class UseOnPage : sal_uInt16
HeaderShare = 0x0040,
FooterShare = 0x0080,
FirstShare = 0x0100,
WithoutFirst = 0x0200,
NoHeaderShare = 0xFFBF, ///< For internal use only.
NoFooterShare = 0xFF7F, ///< For internal use only.
NoFirstShare = 0xFEFF
NoFirstShare = 0xFEFF,
NotWithoutFirst= 0xFDFF
};
namespace o3tl {
template<> struct typed_flags<UseOnPage> : is_typed_flags<UseOnPage, 0xffff> {};
@@ -212,6 +214,8 @@ public:
inline void ChgFooterShare( bool bNew );
bool IsFirstShared() const;
void ChgFirstShare( bool bNew );
bool IsWithoutFirst() const;
void ChgWithoutFirst( bool bNew );
bool IsHidden() const { return m_IsHidden; }
void SetHidden(bool const bValue) { m_IsHidden = bValue; }
+1
View File
@@ -887,6 +887,7 @@ inline constexpr OUString UNO_NAME_LINE_WIDTH = u"LineWidth"_ustr;
inline constexpr OUString UNO_NAME_PARA_CONTEXT_MARGIN = u"ParaContextMargin"_ustr;
inline constexpr OUString UNO_NAME_PARAGRAPH_STYLE_NAME = u"ParagraphStyleName"_ustr;
inline constexpr OUString UNO_NAME_FIRST_IS_SHARED = u"FirstIsShared"_ustr;
inline constexpr OUString UNO_NAME_NO_FIRST = u"NoFirst"_ustr;
inline constexpr OUString UNO_NAME_HEADER_TEXT_FIRST = u"HeaderTextFirst"_ustr;
inline constexpr OUString UNO_NAME_FOOTER_TEXT_FIRST = u"FooterTextFirst"_ustr;
inline constexpr OUString UNO_NAME_INITIALS = u"Initials"_ustr;
@@ -115,11 +115,9 @@ CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testHeaderFooterWithSpecialFirstPage_OOXM
{
xmlDocUniquePtr pXmlDoc = parseLayoutDump();
// check first page
assertXPath(pXmlDoc, "/root/page[1]/header");
assertXPath(pXmlDoc, "/root/page[1]/footer");
assertXPath(pXmlDoc, "/root/page[1]/header/txt/text()", 0);
assertXPath(pXmlDoc, "/root/page[1]/footer/txt/text()", 0);
// check first page -> no header and footer
assertXPath(pXmlDoc, "/root/page[1]/header", 0);
assertXPath(pXmlDoc, "/root/page[1]/footer", 0);
// check second page in the same way
assertXPath(pXmlDoc, "/root/page[2]/header");
assertXPath(pXmlDoc, "/root/page[2]/footer");
@@ -650,10 +648,7 @@ CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstPageFooterEnabled)
// Footer shouldn't be enabled on first page, but then on the other pages
auto verify = [this]() {
xmlDocUniquePtr pXmlDoc = parseLayoutDump();
// TODO
// It's currently not possible to disable the header on first page only.
//assertXPath(pXmlDoc, "/root/page[1]/footer/txt", 0);
assertXPath(pXmlDoc, "/root/page[1]/footer/txt");
assertXPath(pXmlDoc, "/root/page[1]/footer/txt", 0);
};
createSwDoc("TestFirstFooterDisabled.docx");
verify();
@@ -273,6 +273,46 @@ CPPUNIT_TEST_FIXTURE(Test, testFrameprPagebreakStyle)
// i.e. the page break was lost, the document didn't have the correct page count.
CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(2), pLastPage->GetPhyPageNum());
}
CPPUNIT_TEST_FIXTURE(Test, emptyHeaderFirstPageRtf)
{
// Given a document with <w:sectPr> containing <w:titlePg/>
// but no
// <w:headerReference w:type="first" r:id=".."/>
// <w:footerReference w:type="first" r:id=".."/>
createSwDoc("NoFirstPageHeadFooter.rtf");
uno::Reference<style::XStyleFamiliesSupplier> xStyleFamiliesSupplier(mxComponent,
uno::UNO_QUERY);
uno::Reference<container::XNameAccess> xStyleFamilies
= xStyleFamiliesSupplier->getStyleFamilies();
uno::Reference<container::XNameAccess> xStyleFamily(
xStyleFamilies->getByName(u"PageStyles"_ustr), uno::UNO_QUERY);
uno::Reference<beans::XPropertySet> xPageStyle(xStyleFamily->getByName(u"Standard"_ustr),
uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xPageStyle, u"FirstIsShared"_ustr));
CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xPageStyle, u"NoFirst"_ustr));
}
CPPUNIT_TEST_FIXTURE(Test, emptyHeaderFirstPageDocx)
{
// Given a document with <w:sectPr> containing <w:titlePg/>
// but no
// <w:headerReference w:type="first" r:id=".."/>
// <w:footerReference w:type="first" r:id=".."/>
createSwDoc("NoFirstPageHeadFooter.docx");
uno::Reference<style::XStyleFamiliesSupplier> xStyleFamiliesSupplier(mxComponent,
uno::UNO_QUERY);
uno::Reference<container::XNameAccess> xStyleFamilies
= xStyleFamiliesSupplier->getStyleFamilies();
uno::Reference<container::XNameAccess> xStyleFamily(
xStyleFamilies->getByName(u"PageStyles"_ustr), uno::UNO_QUERY);
uno::Reference<beans::XPropertySet> xPageStyle(xStyleFamily->getByName(u"Standard"_ustr),
uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xPageStyle, u"FirstIsShared"_ustr));
CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xPageStyle, u"NoFirst"_ustr));
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Binary file not shown.
+146
View File
@@ -0,0 +1,146 @@
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31505\stshfloch46\stshfhich46\stshfbi31507\deflang1031\deflangfe1041\themelang1031\themelangfe1041\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f35\fbidi \fswiss\fcharset128\fprq2{\*\panose 020b0400000000000000}Yu Gothic{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}
{\f46\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Liberation Sans;}{\f48\fbidi \fswiss\fcharset128\fprq2{\*\panose 020b0400000000000000}@Yu Gothic;}
{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \fswiss\fcharset128\fprq2{\*\panose 020b0300000000000000}Yu Gothic Light{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e Light};}
{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2 Aptos Display;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbminor\f31505\fbidi \fswiss\fcharset128\fprq2{\*\panose 020b0400000000000000}Yu Gothic{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2 Aptos;}
{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f49\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f50\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\f52\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f53\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f54\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f55\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\f56\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f57\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f59\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f60\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}
{\f62\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f63\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f66\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f67\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}
{\f71\fbidi \fswiss\fcharset0\fprq2 Yu Gothic Western{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}{\f69\fbidi \fswiss\fcharset238\fprq2 Yu Gothic CE{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}
{\f70\fbidi \fswiss\fcharset204\fprq2 Yu Gothic Cyr{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}{\f72\fbidi \fswiss\fcharset161\fprq2 Yu Gothic Greek{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}
{\f73\fbidi \fswiss\fcharset162\fprq2 Yu Gothic Tur{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}{\f76\fbidi \fswiss\fcharset186\fprq2 Yu Gothic Baltic{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}
{\f79\fbidi \fswiss\fcharset238\fprq2 Liberation Sans CE;}{\f80\fbidi \fswiss\fcharset204\fprq2 Liberation Sans Cyr;}{\f82\fbidi \fswiss\fcharset161\fprq2 Liberation Sans Greek;}{\f83\fbidi \fswiss\fcharset162\fprq2 Liberation Sans Tur;}
{\f84\fbidi \fswiss\fcharset177\fprq2 Liberation Sans (Hebrew);}{\f86\fbidi \fswiss\fcharset186\fprq2 Liberation Sans Baltic;}{\f87\fbidi \fswiss\fcharset163\fprq2 Liberation Sans (Vietnamese);}{\f91\fbidi \fswiss\fcharset0\fprq2 @Yu Gothic Western;}
{\f89\fbidi \fswiss\fcharset238\fprq2 @Yu Gothic CE;}{\f90\fbidi \fswiss\fcharset204\fprq2 @Yu Gothic Cyr;}{\f92\fbidi \fswiss\fcharset161\fprq2 @Yu Gothic Greek;}{\f93\fbidi \fswiss\fcharset162\fprq2 @Yu Gothic Tur;}
{\f96\fbidi \fswiss\fcharset186\fprq2 @Yu Gothic Baltic;}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fdbmajor\f31520\fbidi \fswiss\fcharset0\fprq2 Yu Gothic Light Western{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e Light};}{\fdbmajor\f31518\fbidi \fswiss\fcharset238\fprq2 Yu Gothic Light CE{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e Light};}
{\fdbmajor\f31519\fbidi \fswiss\fcharset204\fprq2 Yu Gothic Light Cyr{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e Light};}
{\fdbmajor\f31521\fbidi \fswiss\fcharset161\fprq2 Yu Gothic Light Greek{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e Light};}
{\fdbmajor\f31522\fbidi \fswiss\fcharset162\fprq2 Yu Gothic Light Tur{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e Light};}
{\fdbmajor\f31525\fbidi \fswiss\fcharset186\fprq2 Yu Gothic Light Baltic{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e Light};}{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Aptos Display CE;}
{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Aptos Display Cyr;}{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Aptos Display Greek;}{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Aptos Display Tur;}
{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Aptos Display Baltic;}{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Aptos Display (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fdbminor\f31560\fbidi \fswiss\fcharset0\fprq2 Yu Gothic Western{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}{\fdbminor\f31558\fbidi \fswiss\fcharset238\fprq2 Yu Gothic CE{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}
{\fdbminor\f31559\fbidi \fswiss\fcharset204\fprq2 Yu Gothic Cyr{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}{\fdbminor\f31561\fbidi \fswiss\fcharset161\fprq2 Yu Gothic Greek{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}
{\fdbminor\f31562\fbidi \fswiss\fcharset162\fprq2 Yu Gothic Tur{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}{\fdbminor\f31565\fbidi \fswiss\fcharset186\fprq2 Yu Gothic Baltic{\*\falt \'9f\'e0\'83\'53\'83\'56\'83\'62\'83\'4e};}
{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Aptos CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Aptos Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Aptos Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Aptos Tur;}
{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Aptos Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Aptos (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green0\blue0;\red0\green0\blue0;
\caccentone\ctint255\cshade191\red15\green71\blue97;\ctextone\ctint166\cshade255\red89\green89\blue89;\ctextone\ctint216\cshade255\red39\green39\blue39;\ctextone\ctint191\cshade255\red64\green64\blue64;}{\*\defchp
\fs24\kerning2\loch\af46\hich\af46\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa160\sl278\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa160\sl278\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0 \fs24\lang1031\langfe1041\kerning2\loch\f46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041 \snext0 \sqformat \spriority0
Normal;}{\s1\ql \li0\ri0\sb360\sa80\sl278\slmult1\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31503\afs40\alang1025 \ltrch\fcs0
\fs40\cf19\lang1031\langfe1041\kerning2\loch\f31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1041 \sbasedon0 \snext0 \slink15 \sqformat \spriority9 \styrsid2981384 heading 1;}{\s2\ql \li0\ri0\sb160\sa80\sl278\slmult1
\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31503\afs32\alang1025 \ltrch\fcs0
\fs32\cf19\lang1031\langfe1041\kerning2\loch\f31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1041 \sbasedon0 \snext0 \slink16 \ssemihidden \sunhideused \sqformat \spriority9 \styrsid2981384 heading 2;}{\s3\ql \li0\ri0\sb160\sa80\sl278\slmult1
\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31503\afs28\alang1025 \ltrch\fcs0
\fs28\cf19\lang1031\langfe1041\kerning2\loch\f31506\hich\af31506\dbch\af31501\cgrid\langnp1031\langfenp1041 \sbasedon0 \snext0 \slink17 \ssemihidden \sunhideused \sqformat \spriority9 \styrsid2981384 heading 3;}{\s4\ql \li0\ri0\sb80\sa40\sl278\slmult1
\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel3\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ai\af31503\afs24\alang1025 \ltrch\fcs0
\i\fs24\cf19\lang1031\langfe1041\kerning2\loch\f31506\hich\af31506\dbch\af31501\cgrid\langnp1031\langfenp1041 \sbasedon0 \snext0 \slink18 \ssemihidden \sunhideused \sqformat \spriority9 \styrsid2981384 heading 4;}{\s5\ql \li0\ri0\sb80\sa40\sl278\slmult1
\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel4\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31503\afs24\alang1025 \ltrch\fcs0
\fs24\cf19\lang1031\langfe1041\kerning2\loch\f31506\hich\af31506\dbch\af31501\cgrid\langnp1031\langfenp1041 \sbasedon0 \snext0 \slink19 \ssemihidden \sunhideused \sqformat \spriority9 \styrsid2981384 heading 5;}{\s6\ql \li0\ri0\sb40\sl278\slmult1
\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel5\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ai\af31503\afs24\alang1025 \ltrch\fcs0
\i\fs24\cf20\lang1031\langfe1041\kerning2\loch\f31506\hich\af31506\dbch\af31501\cgrid\langnp1031\langfenp1041 \sbasedon0 \snext0 \slink20 \ssemihidden \sunhideused \sqformat \spriority9 \styrsid2981384 heading 6;}{\s7\ql \li0\ri0\sb40\sl278\slmult1
\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel6\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31503\afs24\alang1025 \ltrch\fcs0
\fs24\cf20\lang1031\langfe1041\kerning2\loch\f31506\hich\af31506\dbch\af31501\cgrid\langnp1031\langfenp1041 \sbasedon0 \snext0 \slink21 \ssemihidden \sunhideused \sqformat \spriority9 \styrsid2981384 heading 7;}{\s8\ql \li0\ri0\sl278\slmult1
\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel7\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ai\af31503\afs24\alang1025 \ltrch\fcs0
\i\fs24\cf21\lang1031\langfe1041\kerning2\loch\f31506\hich\af31506\dbch\af31501\cgrid\langnp1031\langfenp1041 \sbasedon0 \snext0 \slink22 \ssemihidden \sunhideused \sqformat \spriority9 \styrsid2981384 heading 8;}{\s9\ql \li0\ri0\sl278\slmult1
\keep\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel8\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31503\afs24\alang1025 \ltrch\fcs0
\fs24\cf21\lang1031\langfe1041\kerning2\loch\f31506\hich\af31506\dbch\af31501\cgrid\langnp1031\langfenp1041 \sbasedon0 \snext0 \slink23 \ssemihidden \sunhideused \sqformat \spriority9 \styrsid2981384 heading 9;}{\*\cs10 \additive
\ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa160\sl278\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0 \fs24\lang1031\langfe1041\kerning2\loch\f46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041 \snext11 \ssemihidden \sunhideused
Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \af31503\afs40 \ltrch\fcs0 \fs40\cf19\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink1 \spriority9 \styrsid2981384 \'dcberschrift 1 Zchn;}{\*\cs16 \additive \rtlch\fcs1 \af31503\afs32 \ltrch\fcs0
\fs32\cf19\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink2 \ssemihidden \spriority9 \styrsid2981384 \'dcberschrift 2 Zchn;}{\*\cs17 \additive \rtlch\fcs1 \af31503\afs28 \ltrch\fcs0 \fs28\cf19\loch\f31506\hich\af31506\dbch\af31501
\sbasedon10 \slink3 \ssemihidden \spriority9 \styrsid2981384 \'dcberschrift 3 Zchn;}{\*\cs18 \additive \rtlch\fcs1 \ai\af31503 \ltrch\fcs0 \i\cf19\loch\f31506\hich\af31506\dbch\af31501 \sbasedon10 \slink4 \ssemihidden \spriority9 \styrsid2981384
\'dcberschrift 4 Zchn;}{\*\cs19 \additive \rtlch\fcs1 \af31503 \ltrch\fcs0 \cf19\loch\f31506\hich\af31506\dbch\af31501 \sbasedon10 \slink5 \ssemihidden \spriority9 \styrsid2981384 \'dcberschrift 5 Zchn;}{\*\cs20 \additive \rtlch\fcs1 \ai\af31503
\ltrch\fcs0 \i\cf20\loch\f31506\hich\af31506\dbch\af31501 \sbasedon10 \slink6 \ssemihidden \spriority9 \styrsid2981384 \'dcberschrift 6 Zchn;}{\*\cs21 \additive \rtlch\fcs1 \af31503 \ltrch\fcs0 \cf20\loch\f31506\hich\af31506\dbch\af31501
\sbasedon10 \slink7 \ssemihidden \spriority9 \styrsid2981384 \'dcberschrift 7 Zchn;}{\*\cs22 \additive \rtlch\fcs1 \ai\af31503 \ltrch\fcs0 \i\cf21\loch\f31506\hich\af31506\dbch\af31501 \sbasedon10 \slink8 \ssemihidden \spriority9 \styrsid2981384
\'dcberschrift 8 Zchn;}{\*\cs23 \additive \rtlch\fcs1 \af31503 \ltrch\fcs0 \cf21\loch\f31506\hich\af31506\dbch\af31501 \sbasedon10 \slink9 \ssemihidden \spriority9 \styrsid2981384 \'dcberschrift 9 Zchn;}{
\s24\ql \li0\ri0\sa80\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\contextualspace \rtlch\fcs1 \af31503\afs56\alang1025 \ltrch\fcs0
\fs56\expnd-2\expndtw-10\lang1031\langfe1041\kerning28\loch\f31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1041 \sbasedon0 \snext0 \slink25 \sqformat \spriority10 \styrsid2981384 Title;}{\*\cs25 \additive \rtlch\fcs1 \af31503\afs56 \ltrch\fcs0
\fs56\expnd-2\expndtw-10\kerning28\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink24 \spriority10 \styrsid2981384 Titel Zchn;}{\s26\ql \li0\ri0\sa160\sl278\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ilvl1\adjustright\rin0\lin0\itap0
\rtlch\fcs1 \af31503\afs28\alang1025 \ltrch\fcs0 \fs28\expnd3\expndtw15\cf20\lang1031\langfe1041\kerning2\loch\f31506\hich\af31506\dbch\af31501\cgrid\langnp1031\langfenp1041 \sbasedon0 \snext0 \slink27 \sqformat \spriority11 \styrsid2981384 Subtitle;}{\*
\cs27 \additive \rtlch\fcs1 \af31503\afs28 \ltrch\fcs0 \fs28\expnd3\expndtw15\cf20\loch\f31506\hich\af31506\dbch\af31501 \sbasedon10 \slink26 \spriority11 \styrsid2981384 Untertitel Zchn;}{\s28\qc \li0\ri0\sb160\sa160\sl278\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ai\af31507\afs24\alang1025 \ltrch\fcs0 \i\fs24\cf22\lang1031\langfe1041\kerning2\loch\f46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041
\sbasedon0 \snext0 \slink29 \sqformat \spriority29 \styrsid2981384 Quote;}{\*\cs29 \additive \rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\cf22 \sbasedon10 \slink28 \spriority29 \styrsid2981384 Zitat Zchn;}{\s30\ql \li720\ri0\sa160\sl278\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace \rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0 \fs24\lang1031\langfe1041\kerning2\loch\f46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041
\sbasedon0 \snext30 \sqformat \spriority34 \styrsid2981384 List Paragraph;}{\*\cs31 \additive \rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\cf19 \sbasedon10 \sqformat \spriority21 \styrsid2981384 Intense Emphasis;}{\s32\qc \li864\ri864\sb360\sa360\sl278\slmult1
\widctlpar\brdrt\brdrs\brdrw10\brsp200\brdrcf19 \brdrb\brdrs\brdrw10\brsp200\brdrcf19 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin864\lin864\itap0 \rtlch\fcs1 \ai\af31507\afs24\alang1025 \ltrch\fcs0
\i\fs24\cf19\lang1031\langfe1041\kerning2\loch\f46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041 \sbasedon0 \snext0 \slink33 \sqformat \spriority30 \styrsid2981384 Intense Quote;}{\*\cs33 \additive \rtlch\fcs1 \ai\af0 \ltrch\fcs0 \i\cf19
\sbasedon10 \slink32 \spriority30 \styrsid2981384 Intensives Zitat Zchn;}{\*\cs34 \additive \rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b\scaps\expnd1\expndtw5\cf19 \sbasedon10 \sqformat \spriority32 \styrsid2981384 Intense Reference;}{\s35\ql \li0\ri0\widctlpar
\tqc\tx4513\tqr\tx9026\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0 \fs24\lang1031\langfe1041\kerning2\loch\f46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041
\sbasedon0 \snext35 \slink36 \sunhideused \styrsid2981384 header;}{\*\cs36 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \sbasedon10 \slink35 \styrsid2981384 Kopfzeile Zchn;}{\s37\ql \li0\ri0\widctlpar
\tqc\tx4513\tqr\tx9026\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0 \fs24\lang1031\langfe1041\kerning2\loch\f46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041
\sbasedon0 \snext37 \slink38 \sunhideused \styrsid2981384 footer;}{\*\cs38 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \sbasedon10 \slink37 \styrsid2981384 Fu\'dfzeile Zchn;}}{\*\rsidtbl \rsid534836\rsid748818\rsid1056961\rsid2321316\rsid2981384\rsid5734155
\rsid5767624\rsid6838659\rsid8217171\rsid8653403\rsid15952640}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Oliver Specht}{\operator Oliver Specht}
{\creatim\yr2026\mo5\dy29\hr9\min16}{\revtim\yr2026\mo5\dy29\hr9\min16}{\version2}{\edmins0}{\nofpages2}{\nofwords9}{\nofchars59}{\*\company CIB Group}{\nofcharsws67}{\vern15}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}
\paperw11906\paperh16838\margl1417\margr1417\margt1417\margb1134\gutter0\ltrsect
\deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0
\showxmlerrors1\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1417\dgvorigin1417\dghshow1\dgvshow1
\jexpand\viewkind1\viewscale110\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct
\asianbrkrule\rsidroot2981384\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0
{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0{\*\ftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2981384 \rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0
\fs24\lang1031\langfe1041\kerning2\loch\af46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid6838659 \chftnsep
\par }}{\*\ftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2981384 \rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0
\fs24\lang1031\langfe1041\kerning2\loch\af46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid6838659 \chftnsepc
\par }}{\*\aftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2981384 \rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0
\fs24\lang1031\langfe1041\kerning2\loch\af46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid6838659 \chftnsep
\par }}{\*\aftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2981384 \rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0
\fs24\lang1031\langfe1041\kerning2\loch\af46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid6838659 \chftnsepc
\par }}\ltrpar \sectd \ltrsect\linex0\headery708\footery708\colsx708\endnhere\titlepg\sectlinegrid360\sectdefaultcl\sectrsid2981384\sftnbj {\headerr \ltrpar \pard\plain \ltrpar\s35\ql \li0\ri0\widctlpar
\tqc\tx4513\tqr\tx9026\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0 \fs24\lang1031\langfe1041\kerning2\loch\af46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041 {\rtlch\fcs1 \af31507
\ltrch\fcs0 \insrsid2981384 \hich\af46\dbch\af31505\loch\f46 Follow page header
\par }}{\footerr \ltrpar \pard\plain \ltrpar\s37\ql \fi708\li0\ri0\widctlpar\tqc\tx4513\tqr\tx9026\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2981384 \rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0
\fs24\lang1031\langfe1041\kerning2\loch\af46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid2981384 \hich\af46\dbch\af31505\loch\f46 Follow page footer
\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}
{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8
\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa160\sl278\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0 \fs24\lang1031\langfe1041\kerning2\loch\af46\hich\af46\dbch\af31505\cgrid\langnp1031\langfenp1041 {\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1033\langfe1041\langnp1033\insrsid2981384\charrsid2981384 \hich\af46\dbch\af31505\loch\f46 Header/footer only not on f}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1041\langnp1033\insrsid2981384 \hich\af46\dbch\af31505\loch\f46 irst page}{
\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1041\langnp1033\insrsid534836
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1041\langnp1033\insrsid2981384
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \lang1033\langfe1041\langnp1033\insrsid2981384\charrsid2981384
\par }
}
+21 -5
View File
@@ -260,13 +260,20 @@ void SwDoc::CopyMasterHeader(const SwPageDesc &rChged, const SwFormatHeader &rHe
// If it already has one and it points to the same Section as the
// Right one, it needs to get an own Header.
// The content is evidently copied.
const SwFormatHeader &rFormatHead = rDescFrameFormat.GetHeader();
if ( !rFormatHead.IsActive() )
if (bFirst && rChged.IsWithoutFirst())
{
if (rFormatHead.IsActive())
{
SwFormatHeader* pHead = new SwFormatHeader(false);
rDescFrameFormat.SetFormatAttr( *pHead );
}
}
else if ( !rFormatHead.IsActive() )
{
SwFormatHeader aHead( getIDocumentLayoutAccess().MakeLayoutFormat( RndStdIds::HEADERL, nullptr ) );
rDescFrameFormat.SetFormatAttr( aHead );
// take over additional attributes (margins, borders ...)
::lcl_DescSetAttr( *rHead.GetHeaderFormat(), *aHead.GetHeaderFormat(), false);
}
else
{
@@ -339,7 +346,15 @@ void SwDoc::CopyMasterFooter(const SwPageDesc &rChged, const SwFormatFooter &rFo
// it needs to get an own one.
// The content is evidently copied.
const SwFormatFooter &rFormatFoot = rDescFrameFormat.GetFooter();
if ( !rFormatFoot.IsActive() )
if (bFirst && rChged.IsWithoutFirst())
{
if (rFormatFoot.IsActive())
{
SwFormatFooter* pFoot = new SwFormatFooter(false);
rDescFrameFormat.SetFormatAttr( *pFoot );
}
}
else if ( !rFormatFoot.IsActive() )
{
SwFormatFooter aFoot( getIDocumentLayoutAccess().MakeLayoutFormat( RndStdIds::FOOTER, nullptr ) );
rDescFrameFormat.SetFormatAttr( aFoot );
@@ -421,7 +436,7 @@ void SwDoc::ChgPageDesc( size_t i, const SwPageDesc &rChged )
const SwFormatFooter& rFirstMasterFoot = rChged.GetFirstMaster().GetFooter();
const SwFormatFooter& rFirstLeftFoot = rChged.GetFirstLeft().GetFooter();
const bool bStashLeftFoot = !rDesc.IsFooterShared() && rChged.IsFooterShared();
const bool bStashFirstMasterFoot = !rDesc.IsFirstShared() && rChged.IsFirstShared();
const bool bStashFirstMasterFoot = (!rDesc.IsFirstShared() && rChged.IsFirstShared()) || (!rDesc.IsWithoutFirst() && rChged.IsWithoutFirst());
const bool bStashFirstLeftFoot = (!rDesc.IsFooterShared() && rChged.IsFooterShared()) || (!rDesc.IsFirstShared() && rChged.IsFirstShared());
if (bStashLeftFoot && rLeftFoot.GetRegisteredIn() && !rDesc.HasStashedFormat(false, true, false))
rDesc.StashFrameFormat(rChged.GetLeft(), false, true, false);
@@ -605,6 +620,7 @@ void SwDoc::ChgPageDesc( size_t i, const SwPageDesc &rChged )
rDesc.ChgFooterShare( rChged.IsFooterShared() );
// there is just one first shared flag for both header and footer?
rDesc.ChgFirstShare( rChged.IsFirstShared() );
rDesc.ChgWithoutFirst( rChged.IsWithoutFirst() );
if ( rDesc.GetName() != rChged.GetName() )
rDesc.SetName( rChged.GetName() );
+2 -2
View File
@@ -1515,7 +1515,7 @@ void SwDoc::CopyPageDesc( const SwPageDesc& rSrcDesc, SwPageDesc& rDstDesc,
CopyHeader( rSrcDesc.GetLeft(), rDstDesc.GetLeft() );
else
rDstDesc.GetLeft().SetFormatAttr( rDstDesc.GetMaster().GetHeader() );
if( !rDstDesc.IsFirstShared() )
if( !rDstDesc.IsFirstShared() && !rDstDesc.IsWithoutFirst() )
{
CopyHeader( rSrcDesc.GetFirstMaster(), rDstDesc.GetFirstMaster() );
rDstDesc.GetFirstLeft().SetFormatAttr(rDstDesc.GetFirstMaster().GetHeader());
@@ -1530,7 +1530,7 @@ void SwDoc::CopyPageDesc( const SwPageDesc& rSrcDesc, SwPageDesc& rDstDesc,
CopyFooter( rSrcDesc.GetLeft(), rDstDesc.GetLeft() );
else
rDstDesc.GetLeft().SetFormatAttr( rDstDesc.GetMaster().GetFooter() );
if( !rDstDesc.IsFirstShared() )
if( !rDstDesc.IsFirstShared() && !rDstDesc.IsWithoutFirst() )
{
CopyFooter( rSrcDesc.GetFirstMaster(), rDstDesc.GetFirstMaster() );
rDstDesc.GetFirstLeft().SetFormatAttr(rDstDesc.GetFirstMaster().GetFooter());
+13
View File
@@ -424,6 +424,19 @@ void SwPageDesc::ChgFirstShare( bool bNew )
m_eUse &= UseOnPage::NoFirstShare;
}
bool SwPageDesc::IsWithoutFirst() const
{
return bool(m_eUse & UseOnPage::WithoutFirst);
}
void SwPageDesc::ChgWithoutFirst( bool bNew )
{
if ( bNew )
m_eUse |= UseOnPage::WithoutFirst;
else
m_eUse &= UseOnPage::NotWithoutFirst;
}
bool SwPageDesc::SetFormatAttrOnAll(const SfxItemSet& rSet, const bool bHeader)
{
if( !rSet.Count() )
+18 -6
View File
@@ -73,6 +73,11 @@ SwUndoPageDesc::SwUndoPageDesc(const SwPageDesc & _aOld,
m_bExchange = false;
if( ( rOldHead.IsActive() || rOldFoot.IsActive() ) && ( rOldDesc.IsFirstShared() != rNewDesc.IsFirstShared() ) )
m_bExchange = false;
if( ( rOldHead.IsActive() || rOldFoot.IsActive() ) && ( rOldDesc.IsWithoutFirst() != rNewDesc.IsWithoutFirst() ) )
m_bExchange = false;
if (!rNewDesc.IsFirstShared() && rOldDesc.IsWithoutFirst() == rNewDesc.IsWithoutFirst())
m_bExchange = false;
if( !m_bExchange )
return;
@@ -166,12 +171,15 @@ void SwUndoPageDesc::ExchangeContentNodes( SwPageDesc& rSource, SwPageDesc &rDes
if (!rDest.IsFirstShared())
{
// Same procedure for unshared header...
const SwFormatHeader& rSourceFirstMasterHead = rSource.GetFirstMaster().GetHeader();
pItem = rDest.GetFirstMaster().GetAttrSet().GetItemIfSet( RES_HEADER, false );
const SwFrameFormat & rSourceMasterHead =
rSource.IsWithoutFirst() ? rSource.GetMaster() :
rSource.GetFirstMaster();
const SwFormatHeader& rSourceFirstMasterHead = rSourceMasterHead.GetHeader();
pItem = rSourceMasterHead.GetAttrSet().GetItemIfSet( RES_HEADER, false );
pNewItem.reset(pItem->Clone());
pNewFormat = pNewItem->GetHeaderFormat();
pNewFormat->SetFormatAttr( rSourceFirstMasterHead.GetHeaderFormat()->GetContent() );
pItem = rSource.GetFirstMaster().GetAttrSet().GetItemIfSet( RES_HEADER, false );
pItem = rSourceMasterHead.GetAttrSet().GetItemIfSet( RES_HEADER, false );
pNewItem.reset(pItem->Clone());
pNewFormat = pNewItem->GetHeaderFormat();
pNewFormat->SetFormatAttr( SwFormatContent() );
@@ -209,12 +217,16 @@ void SwUndoPageDesc::ExchangeContentNodes( SwPageDesc& rSource, SwPageDesc &rDes
if (rDest.IsFirstShared())
return;
const SwFormatFooter& rSourceFirstMasterFoot = rSource.GetFirstMaster().GetFooter();
pItem = rDest.GetFirstMaster().GetAttrSet().GetItemIfSet( RES_FOOTER, false );
const SwFrameFormat & rSourceMasterFoot =
rSource.IsWithoutFirst() ? rSource.GetMaster() :
rSource.GetFirstMaster();
const SwFormatFooter& rSourceFirstMasterFoot = rSourceMasterFoot.GetFooter();
pItem = rSourceMasterFoot.GetAttrSet().GetItemIfSet( RES_FOOTER, false );
pNewItem.reset(pItem->Clone());
pNewFormat = pNewItem->GetFooterFormat();
pNewFormat->SetFormatAttr( rSourceFirstMasterFoot.GetFooterFormat()->GetContent() );
pItem = rSource.GetFirstMaster().GetAttrSet().GetItemIfSet( RES_FOOTER, false );
pItem = rSourceMasterFoot.GetAttrSet().GetItemIfSet( RES_FOOTER, false );
pNewItem.reset(pItem->Clone());
pNewFormat = pNewItem->GetFooterFormat();
pNewFormat->SetFormatAttr( SwFormatContent() );
+1
View File
@@ -514,6 +514,7 @@ std::span<const SfxItemPropertyMapEntry> SwUnoPropertyMapProvider::GetPageStyleP
{ UNO_NAME_FIRST_IS_SHARED, SID_ATTR_PAGE_SHARED_FIRST, cppu::UnoType<bool>::get(), PROPERTY_NONE, 0 },
{ UNO_NAME_NO_FIRST, SID_ATTR_PAGE_NO_FIRST, cppu::UnoType<bool>::get(), PROPERTY_NONE, 0 },
//UUU use real WhichIDs for Footer, see Header (above) for more infos
{ UNO_NAME_FOOTER_BACK_COLOR, RES_BACKGROUND, cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE ,MID_BACK_COLOR },
+19 -6
View File
@@ -853,7 +853,7 @@ static bool lcl_GetHeaderFooterItem(
bFooter ? SID_ATTR_PAGE_FOOTERSET : SID_ATTR_PAGE_HEADERSET,
false);
if (!o_rpItem &&
rPropName == UNO_NAME_FIRST_IS_SHARED)
(rPropName == UNO_NAME_FIRST_IS_SHARED || rPropName == UNO_NAME_NO_FIRST))
{ // fdo#79269 header may not exist, check footer then
o_rpItem = rSet.GetItemIfSet(
(!bFooter) ? SID_ATTR_PAGE_FOOTERSET : SID_ATTR_PAGE_HEADERSET,
@@ -2604,7 +2604,8 @@ static const SfxItemSet* lcl_GetItemsetForProperty(const SfxItemSet& rSet, SfxSt
if(eFamily != SfxStyleFamily::Page)
return &rSet;
const bool isFooter = o3tl::starts_with(rPropertyName, u"Footer");
if(!isFooter && !o3tl::starts_with(rPropertyName, u"Header") && rPropertyName != UNO_NAME_FIRST_IS_SHARED)
if(!isFooter && !o3tl::starts_with(rPropertyName, u"Header") &&
rPropertyName != UNO_NAME_FIRST_IS_SHARED && rPropertyName != UNO_NAME_NO_FIRST)
return &rSet;
const SvxSetItem* pSetItem;
if(!lcl_GetHeaderFooterItem(rSet, rPropertyName, isFooter, pSetItem))
@@ -3011,7 +3012,9 @@ void SwXPageStyle::SetPropertyValues_Impl(const uno::Sequence<OUString>& rProper
const bool bHeader(rPropName.startsWith("Header"));
const bool bFooter(rPropName.startsWith("Footer"));
const bool bFirstIsShared(rPropName == UNO_NAME_FIRST_IS_SHARED);
if(bHeader || bFooter || bFirstIsShared)
const bool bNoFirst(rPropName == UNO_NAME_NO_FIRST);
if(bHeader || bFooter || bFirstIsShared || bNoFirst)
{
switch(pEntry->nWID)
{
@@ -3024,6 +3027,7 @@ void SwXPageStyle::SetPropertyValues_Impl(const uno::Sequence<OUString>& rProper
case SID_ATTR_PAGE_DYNAMIC:
case SID_ATTR_PAGE_SHARED:
case SID_ATTR_PAGE_SHARED_FIRST:
case SID_ATTR_PAGE_NO_FIRST:
case SID_ATTR_PAGE_SIZE:
case RES_HEADER_FOOTER_EAT_SPACING:
{
@@ -3033,7 +3037,7 @@ void SwXPageStyle::SetPropertyValues_Impl(const uno::Sequence<OUString>& rProper
{
PutItemToSet(pSetItem, *pPropSet, *pEntry, rValues[nProp], aBaseImpl);
if (pEntry->nWID == SID_ATTR_PAGE_SHARED_FIRST)
if (pEntry->nWID == SID_ATTR_PAGE_SHARED_FIRST || pEntry->nWID == SID_ATTR_PAGE_NO_FIRST)
{
// Need to add this to the other as well
pSetItem = aBaseImpl.GetItemSet().GetItemIfSet(
@@ -3057,7 +3061,8 @@ void SwXPageStyle::SetPropertyValues_Impl(const uno::Sequence<OUString>& rProper
SID_ATTR_BORDER_INNER,SID_ATTR_BORDER_INNER, // [10023
SID_ATTR_PAGE_SIZE,SID_ATTR_PAGE_SIZE, // [10051
SID_ATTR_PAGE_ON,SID_ATTR_PAGE_SHARED, // [10060
SID_ATTR_PAGE_SHARED_FIRST,SID_ATTR_PAGE_SHARED_FIRST>
SID_ATTR_PAGE_SHARED_FIRST,SID_ATTR_PAGE_SHARED_FIRST,
SID_ATTR_PAGE_NO_FIRST,SID_ATTR_PAGE_NO_FIRST>
(*aBaseImpl.GetItemSet().GetPool()));
// set correct parent to get the XFILL_NONE FillStyle as needed
@@ -3070,6 +3075,7 @@ void SwXPageStyle::SetPropertyValues_Impl(const uno::Sequence<OUString>& rProper
aTempSet.Put(SvxULSpaceItem(RES_UL_SPACE));
aTempSet.Put(SfxBoolItem(SID_ATTR_PAGE_SHARED, true));
aTempSet.Put(SfxBoolItem(SID_ATTR_PAGE_SHARED_FIRST, true));
aTempSet.Put(SfxBoolItem(SID_ATTR_PAGE_NO_FIRST, false));
aTempSet.Put(SfxBoolItem(SID_ATTR_PAGE_DYNAMIC, true));
SvxSetItem aNewSetItem(bFooter ? SID_ATTR_PAGE_FOOTERSET : SID_ATTR_PAGE_HEADERSET, aTempSet);
@@ -3128,6 +3134,9 @@ void SwXPageStyle::SetPropertyValues_Impl(const uno::Sequence<OUString>& rProper
}
}
continue;
//case SID_ATTR_PAGE_NO_FIRST:
// aBaseImpl.GetItemSet().Put(SfxBoolItem(SID_ATTR_PAGE_NO_FIRST, rValues[nProp].get<bool>()));
// break;
default: ;
}
}
@@ -3136,6 +3145,7 @@ void SwXPageStyle::SetPropertyValues_Impl(const uno::Sequence<OUString>& rProper
case SID_ATTR_PAGE_DYNAMIC:
case SID_ATTR_PAGE_SHARED:
case SID_ATTR_PAGE_SHARED_FIRST:
case SID_ATTR_PAGE_NO_FIRST:
case SID_ATTR_PAGE_ON:
case RES_HEADER_FOOTER_EAT_SPACING:
// these slots are exclusive to Header/Footer, thus this is an error
@@ -3256,7 +3266,8 @@ uno::Sequence<uno::Any> SwXPageStyle::GetPropertyValues_Impl(const uno::Sequence
const bool bHeader(rPropName.startsWith("Header"));
const bool bFooter(rPropName.startsWith("Footer"));
const bool bFirstIsShared(rPropName == UNO_NAME_FIRST_IS_SHARED);
if(bHeader || bFooter || bFirstIsShared)
const bool bNoFirst(rPropName == UNO_NAME_NO_FIRST);
if(bHeader || bFooter || bFirstIsShared || bNoFirst)
{
switch(pEntry->nWID)
{
@@ -3269,6 +3280,7 @@ uno::Sequence<uno::Any> SwXPageStyle::GetPropertyValues_Impl(const uno::Sequence
case SID_ATTR_PAGE_DYNAMIC:
case SID_ATTR_PAGE_SHARED:
case SID_ATTR_PAGE_SHARED_FIRST:
case SID_ATTR_PAGE_NO_FIRST:
case SID_ATTR_PAGE_SIZE:
case RES_HEADER_FOOTER_EAT_SPACING:
{
@@ -3341,6 +3353,7 @@ uno::Sequence<uno::Any> SwXPageStyle::GetPropertyValues_Impl(const uno::Sequence
case SID_ATTR_PAGE_DYNAMIC:
case SID_ATTR_PAGE_SHARED:
case SID_ATTR_PAGE_SHARED_FIRST:
case SID_ATTR_PAGE_NO_FIRST:
case SID_ATTR_PAGE_ON:
case RES_HEADER_FOOTER_EAT_SPACING:
throw beans::UnknownPropertyException( "Unknown property: " + rPropName, getXWeak() );
@@ -281,6 +281,7 @@ void SwHeaderFooterWin::SetOffset(Point aOffset)
// Compute the text to show
const SwPageFrame* pPageFrame = SwFrameMenuButtonBase::GetPageFrame(m_pFrame);
const SwPageDesc* pDesc = pPageFrame->GetPageDesc();
//TODO: handle on/off state first vs. follow pages
bool bIsFirst = !pDesc->IsFirstShared() && pPageFrame->OnFirstPage();
bool bIsLeft = !pDesc->IsHeaderShared() && !pPageFrame->OnRightPage();
bool bIsRight = !pDesc->IsHeaderShared() && pPageFrame->OnRightPage();
+12 -2
View File
@@ -387,6 +387,8 @@ void ItemSetToPageDesc(const SfxItemSet& rSet, SwPageDesc& rPageDesc, bool bAppl
rPageDesc.ChgHeaderShare(rHeaderSet.Get(SID_ATTR_PAGE_SHARED).GetValue());
rPageDesc.ChgFirstShare(static_cast<const SfxBoolItem&>(
rHeaderSet.Get(SID_ATTR_PAGE_SHARED_FIRST)).GetValue());
rPageDesc.ChgWithoutFirst(static_cast<const SfxBoolItem&>(
rHeaderSet.Get(SID_ATTR_PAGE_NO_FIRST)).GetValue());
bFirstShare = true;
}
else
@@ -422,6 +424,8 @@ void ItemSetToPageDesc(const SfxItemSet& rSet, SwPageDesc& rPageDesc, bool bAppl
{
rPageDesc.ChgFirstShare(static_cast<const SfxBoolItem&>(
rFooterSet.Get(SID_ATTR_PAGE_SHARED_FIRST)).GetValue());
rPageDesc.ChgWithoutFirst(static_cast<const SfxBoolItem&>(
rFooterSet.Get(SID_ATTR_PAGE_NO_FIRST)).GetValue());
}
}
else
@@ -562,7 +566,8 @@ void PageDescToItemSet( const SwPageDesc& rPageDesc, SfxItemSet& rSet)
SID_ATTR_BORDER_INNER,SID_ATTR_BORDER_INNER, // [10023
SID_ATTR_PAGE_SIZE,SID_ATTR_PAGE_SIZE, // [10051
SID_ATTR_PAGE_ON,SID_ATTR_PAGE_SHARED, // [10060
SID_ATTR_PAGE_SHARED_FIRST,SID_ATTR_PAGE_SHARED_FIRST>(*rSet.GetPool()));
SID_ATTR_PAGE_SHARED_FIRST,SID_ATTR_PAGE_SHARED_FIRST,
SID_ATTR_PAGE_NO_FIRST,SID_ATTR_PAGE_NO_FIRST>(*rSet.GetPool()));
// set correct parent to get the XFILL_NONE FillStyle as needed
aHeaderSet.SetParent(&rMaster.GetDoc().GetDfltFrameFormat()->GetAttrSet());
@@ -581,6 +586,8 @@ void PageDescToItemSet( const SwPageDesc& rPageDesc, SfxItemSet& rSet)
aHeaderSet.Put(aShared);
SfxBoolItem aFirstShared(SID_ATTR_PAGE_SHARED_FIRST, rPageDesc.IsFirstShared());
aHeaderSet.Put(aFirstShared);
SfxBoolItem aWithoutFirst(SID_ATTR_PAGE_NO_FIRST, rPageDesc.IsWithoutFirst());
aHeaderSet.Put(aWithoutFirst);
// Size
SvxSizeItem aSize(SID_ATTR_PAGE_SIZE, rFrameSize.GetSize());
@@ -611,7 +618,8 @@ void PageDescToItemSet( const SwPageDesc& rPageDesc, SfxItemSet& rSet)
SID_ATTR_BORDER_INNER,SID_ATTR_BORDER_INNER, // [10023
SID_ATTR_PAGE_SIZE,SID_ATTR_PAGE_SIZE, // [10051
SID_ATTR_PAGE_ON,SID_ATTR_PAGE_SHARED, // [10060
SID_ATTR_PAGE_SHARED_FIRST,SID_ATTR_PAGE_SHARED_FIRST>(*rSet.GetPool()));
SID_ATTR_PAGE_SHARED_FIRST,SID_ATTR_PAGE_SHARED_FIRST,
SID_ATTR_PAGE_NO_FIRST,SID_ATTR_PAGE_NO_FIRST>(*rSet.GetPool()));
// set correct parent to get the XFILL_NONE FillStyle as needed
aFooterSet.SetParent(&rMaster.GetDoc().GetDfltFrameFormat()->GetAttrSet());
@@ -630,6 +638,8 @@ void PageDescToItemSet( const SwPageDesc& rPageDesc, SfxItemSet& rSet)
aFooterSet.Put(aShared);
SfxBoolItem aFirstShared(SID_ATTR_PAGE_SHARED_FIRST, rPageDesc.IsFirstShared());
aFooterSet.Put(aFirstShared);
SfxBoolItem aWithoutFirst(SID_ATTR_PAGE_NO_FIRST, rPageDesc.IsWithoutFirst());
aFooterSet.Put(aWithoutFirst);
// Size
SvxSizeItem aSize(SID_ATTR_PAGE_SIZE, rFrameSize.GetSize());
+10 -3
View File
@@ -2327,10 +2327,17 @@ void SwWrtShell::ChangeHeaderOrFooter(
{
bChgd = true;
SwFrameFormat &rMaster = aDesc.GetMaster();
if(bHeader)
rMaster.SetFormatAttr( SwFormatHeader( bOn ));
if (bOn && aDesc.IsWithoutFirst())
{
aDesc.ChgWithoutFirst(false);
}
else
rMaster.SetFormatAttr( SwFormatFooter( bOn ));
{
if (bHeader)
rMaster.SetFormatAttr( SwFormatHeader( bOn ));
else
rMaster.SetFormatAttr( SwFormatFooter( bOn ));
}
if( bOn )
{
// keep in sync with FN_PGNUMBER_WIZARD
@@ -4147,7 +4147,10 @@ void DomainMapper_Impl::PushPageHeaderFooter(PagePartType ePagePartType, PageTyp
pSectionContext->m_bHadFirstHeader = true;
}
else
{
pSectionContext->m_bFirstFooter = true;
pSectionContext->m_bHadFirstFooter = true;
}
prepareHeaderFooterContent(xPageStyle, ePagePartType, ePropTextFirst, true);
}
@@ -20,6 +20,7 @@
#include <svl/sharedstring.hxx>
#include "PropertyIds.hxx"
#include <unordered_map>
#include <unoprnms.hxx>
namespace writerfilter::dmapper{
@@ -204,6 +205,7 @@ const OUString & getPropertyName( PropertyIds eId )
{ PROP_HEADER_IS_SHARED, u"HeaderIsShared"_ustr},
{ PROP_HEADER_IS_ON, u"HeaderIsOn"_ustr},
{ PROP_FIRST_IS_SHARED, u"FirstIsShared"_ustr},
{ PROP_FIRST_EMPTY, UNO_NAME_NO_FIRST},
{ PROP_FOOTER_TEXT_LEFT, u"FooterTextLeft"_ustr},
{ PROP_FOOTER_TEXT_FIRST, u"FooterTextFirst"_ustr},
{ PROP_FOOTER_TEXT, u"FooterText"_ustr},
@@ -166,6 +166,7 @@ enum PropertyIds
,PROP_FIRST_LINE_OFFSET
,PROP_FIRST_PAGE
,PROP_FIRST_IS_SHARED
,PROP_FIRST_EMPTY
,PROP_FOOTER_BODY_DISTANCE
,PROP_FOOTER_DYNAMIC_SPACING
,PROP_FOOTER_HEIGHT
@@ -545,6 +545,7 @@ void SectionPropertyMap::setHeaderFooterProperties(DomainMapper_Impl& rDM_Impl)
const OUString& sHeaderIsShared = getPropertyName(PROP_HEADER_IS_SHARED);
const OUString& sFooterIsShared = getPropertyName(PROP_FOOTER_IS_SHARED);
const OUString& sFirstIsShared = getPropertyName(PROP_FIRST_IS_SHARED);
const OUString& sFirstEmpty = getPropertyName(PROP_FIRST_EMPTY);
m_aPageStyle->getPropertyValue(sHeaderIsOn) >>= bHasHeader;
m_aPageStyle->getPropertyValue(sFooterIsOn) >>= bHasFooter;
@@ -598,6 +599,11 @@ void SectionPropertyMap::setHeaderFooterProperties(DomainMapper_Impl& rDM_Impl)
{
m_aPageStyle->setPropertyValue(sHeaderIsOn, uno::Any(false));
}
else if (m_bTitlePage && !m_bHadFirstHeader && !m_bHadFirstFooter)
{
m_aPageStyle->setPropertyValue(sFirstIsShared, uno::Any(false));
m_aPageStyle->setPropertyValue(sFirstEmpty, uno::Any(true));
}
}
void SectionPropertyMap::SetBorder( BorderPosition ePos, sal_Int32 nLineDistance, const table::BorderLine2& rBorderLine, bool bShadow )
@@ -1074,7 +1080,10 @@ void copyHeaderFooter(const DomainMapper_Impl& rDM_Impl,
if (bCopyLeftHeader && bEvenAndOdd)
copyHeaderFooterTextProperty(xPreviousStyle, xStyle, PROP_HEADER_TEXT_LEFT);
if (bCopyFirstHeader && bTitlePage)
{
xStyle->setPropertyValue(getPropertyName(PROP_FIRST_EMPTY), uno::Any(false));
copyHeaderFooterTextProperty(xPreviousStyle, xStyle, PROP_HEADER_TEXT_FIRST);
}
}
if (bPreviousHasFooter && bCopyFooter)
@@ -1084,7 +1093,10 @@ void copyHeaderFooter(const DomainMapper_Impl& rDM_Impl,
if (bCopyLeftFooter && bEvenAndOdd)
copyHeaderFooterTextProperty(xPreviousStyle, xStyle, PROP_FOOTER_TEXT_LEFT);
if (bCopyFirstFooter && bTitlePage)
{
xStyle->setPropertyValue(getPropertyName(PROP_FIRST_EMPTY), uno::Any(false));
copyHeaderFooterTextProperty(xPreviousStyle, xStyle, PROP_FOOTER_TEXT_FIRST);
}
}
}
@@ -447,6 +447,7 @@ public:
bool m_bRightHeader = false;
bool m_bRightFooter = false;
bool m_bHadFirstHeader = false;
bool m_bHadFirstFooter = false;
bool m_bHadLeftHeader = false;
bool m_bHadRightHeader = false;
+2
View File
@@ -934,6 +934,7 @@ namespace xmloff::token {
TOKEN( "fontwork-style", XML_FONTWORK_STYLE ),
TOKEN( "footer", XML_FOOTER ),
TOKEN( "footer-first", XML_FOOTER_FIRST ),
TOKEN( "is-first-page-footer-shared", XML_IS_FIRST_PAGE_FOOTER_SHARED ),
TOKEN( "footer-left", XML_FOOTER_LEFT ),
TOKEN( "footer-style", XML_FOOTER_STYLE ),
TOKEN( "footer-visible", XML_FOOTER_VISIBLE ),
@@ -1036,6 +1037,7 @@ namespace xmloff::token {
TOKEN( "triple", XML_HATCHSTYLE_TRIPLE ),
TOKEN( "header", XML_HEADER ),
TOKEN( "header-first", XML_HEADER_FIRST ),
TOKEN( "is-first-page-header-shared", XML_IS_FIRST_PAGE_HEADER_SHARED ),
TOKEN( "header-left", XML_HEADER_LEFT ),
TOKEN( "header-style", XML_HEADER_STYLE ),
TOKEN( "headers", XML_HEADERS ),
+30
View File
@@ -43,6 +43,8 @@ using namespace ::xmloff::token;
constexpr OUString gsIsPhysical( u"IsPhysical"_ustr );
constexpr OUString gsFollowStyle( u"FollowStyle"_ustr );
constexpr OUString gsFirstShareContent( u"FirstIsShared"_ustr );
constexpr OUString gsNoFirst( u"NoFirst"_ustr );
namespace {
@@ -174,6 +176,34 @@ bool XMLPageExport::exportStyle(
}
}
//attributes to define shared/hidden headers/footers in Writer
if( xPropSetInfo->hasPropertyByName( gsNoFirst ) )
{
Any aAny;
//same flag footer/header
bool bFirstShared = false;
aAny = xPropSet->getPropertyValue( gsFirstShareContent );
aAny >>= bFirstShared;
bool bWithoutFirstHeader = false;
aAny = xPropSet->getPropertyValue( gsNoFirst );
aAny >>= bWithoutFirstHeader;
//TODO: version and odf extension ticket id
if( GetExport().getSaneDefaultVersion() & SvtSaveOptions::ODFSVER_EXTENDED)
GetExport().AddAttribute(XML_NAMESPACE_LO_EXT, XML_IS_FIRST_PAGE_HEADER_SHARED,
!bFirstShared && bWithoutFirstHeader ? XML_FALSE
: XML_TRUE);
bool bWithoutFirstFooter = false;
aAny = xPropSet->getPropertyValue( gsNoFirst );
aAny >>= bWithoutFirstFooter;
//TODO: version and odf extension ticket id
if( GetExport().getSaneDefaultVersion() & SvtSaveOptions::ODFSVER_EXTENDED)
GetExport().AddAttribute(XML_NAMESPACE_LO_EXT, XML_IS_FIRST_PAGE_FOOTER_SHARED,
!bFirstShared && bWithoutFirstFooter ? XML_FALSE
: XML_TRUE);
}
SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_STYLE,
XML_MASTER_PAGE, true, true );
@@ -65,6 +65,8 @@ Reference < XStyle > XMLTextMasterPageContext::Create()
}
constexpr OUString gsFollowStyle( u"FollowStyle"_ustr );
constexpr OUString gsNoFirst( u"NoFirst"_ustr );
constexpr OUString gsFirstShareContent(u"FirstIsShared"_ustr);
XMLTextMasterPageContext::XMLTextMasterPageContext( SvXMLImport& rImport,
sal_Int32 /*nElement*/,
@@ -79,6 +81,7 @@ XMLTextMasterPageContext::XMLTextMasterPageContext( SvXMLImport& rImport,
, m_bInsertFooterFirst( false )
, m_bHeaderInserted( false )
, m_bFooterInserted( false )
, m_bHeaderFirstAvailable( false )
{
OUString sName, sDisplayName;
for (auto &aIter : sax_fastparser::castToFastAttributeList( xAttrList ))
@@ -98,6 +101,14 @@ XMLTextMasterPageContext::XMLTextMasterPageContext( SvXMLImport& rImport,
case XML_ELEMENT(STYLE, XML_PAGE_LAYOUT_NAME):
m_sPageMasterName = aValue;
break;
case XML_ELEMENT(STYLE, XML_IS_FIRST_PAGE_FOOTER_SHARED):
case XML_ELEMENT(LO_EXT, XML_IS_FIRST_PAGE_FOOTER_SHARED):
m_sIsFirstPageFooterShared = aValue;
break;
case XML_ELEMENT(STYLE, XML_IS_FIRST_PAGE_HEADER_SHARED):
case XML_ELEMENT(LO_EXT, XML_IS_FIRST_PAGE_HEADER_SHARED):
m_sIsFirstPageHeaderShared = aValue;
break;
case XML_ELEMENT(DRAW, XML_STYLE_NAME):
m_sDrawingPageStyle = aValue;
break;
@@ -210,6 +221,7 @@ css::uno::Reference< css::xml::sax::XFastContextHandler > XMLTextMasterPageConte
break;
case XML_ELEMENT(LO_EXT, XML_HEADER_FIRST):
case XML_ELEMENT(STYLE, XML_HEADER_FIRST):
m_bHeaderFirstAvailable = true;
if( m_bInsertHeaderFirst && m_bHeaderInserted )
bInsert = bFirst = true;
break;
@@ -295,6 +307,11 @@ void XMLTextMasterPageContext::Finish( bool bOverwrite )
{
xPropSet->setPropertyValue( u"Hidden"_ustr, uno::Any( IsHidden( ) ) );
}
if (xPropSetInfo->hasPropertyByName( gsNoFirst) && !m_bHeaderFirstAvailable && IsXMLToken(m_sIsFirstPageHeaderShared, XML_FALSE))
{
xPropSet->setPropertyValue( gsFirstShareContent, Any(false) );
xPropSet->setPropertyValue( gsNoFirst, Any(true) );
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+2
View File
@@ -839,6 +839,7 @@ fontwork-start
fontwork-style
footer
footer-first
is-first-page-footer-shared
footer-left
footer-style
footer-visible
@@ -941,6 +942,7 @@ hatch-table
triple
header
header-first
is-first-page-header-shared
header-left
header-style
headers