summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/unotools/compatibility.hxx4
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Compatibility.xcs8
-rw-r--r--sw/source/core/doc/DocumentSettingManager.cxx2
-rw-r--r--sw/source/core/view/viewsh.cxx5
-rw-r--r--sw/source/ui/config/optcomp.cxx48
-rw-r--r--sw/uiconfig/swriter/ui/optcompatpage.ui1
-rw-r--r--unotools/source/config/compatibility.cxx2
7 files changed, 62 insertions, 8 deletions
diff --git a/include/unotools/compatibility.hxx b/include/unotools/compatibility.hxx
index 24f2da53e590..812b8cc480bd 100644
--- a/include/unotools/compatibility.hxx
+++ b/include/unotools/compatibility.hxx
@@ -62,6 +62,10 @@ class UNOTOOLS_DLLPUBLIC SvtCompatibilityEntry
MsWordTrailingBlanks,
SubtractFlysAnchoredAtFlys,
EmptyDbFieldHidesPara,
+ /// special entry: optcomp.cxx converts the other values to
+ /// integers but not this one because it doesn't have its own
+ /// checkbox, so keep it at the end!
+ AddTableLineSpacing,
/* Should be at the end. Do not remove it. */
INVALID
diff --git a/officecfg/registry/schema/org/openoffice/Office/Compatibility.xcs b/officecfg/registry/schema/org/openoffice/Office/Compatibility.xcs
index 71007f80c22e..77d33d1fbc0c 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Compatibility.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Compatibility.xcs
@@ -76,7 +76,13 @@
</prop>
<prop oor:name="AddTableSpacing" oor:type="xs:boolean" oor:nillable="false">
<info>
- <desc>???</desc>
+ <desc>Add paragraph and table spacing at bottom of table cells</desc>
+ </info>
+ <value>true</value>
+ </prop>
+ <prop oor:name="AddTableLineSpacing" oor:type="xs:boolean" oor:nillable="false">
+ <info>
+ <desc>Add paragraph line spacing at bottom of table cells</desc>
</info>
<value>true</value>
</prop>
diff --git a/sw/source/core/doc/DocumentSettingManager.cxx b/sw/source/core/doc/DocumentSettingManager.cxx
index dbb5f2f5121b..5d6a0ba7df1c 100644
--- a/sw/source/core/doc/DocumentSettingManager.cxx
+++ b/sw/source/core/doc/DocumentSettingManager.cxx
@@ -112,7 +112,7 @@ sw::DocumentSettingManager::DocumentSettingManager(SwDoc &rDoc)
mbAddExternalLeading = !aOptions.GetDefault( SvtCompatibilityEntry::Index::NoExtLeading );
mbOldLineSpacing = aOptions.GetDefault( SvtCompatibilityEntry::Index::UseLineSpacing );
mbAddParaSpacingToTableCells = aOptions.GetDefault( SvtCompatibilityEntry::Index::AddTableSpacing );
- mbAddParaLineSpacingToTableCells = aOptions.GetDefault( SvtCompatibilityEntry::Index::AddTableSpacing ); // FIXME? separate UI?
+ mbAddParaLineSpacingToTableCells = aOptions.GetDefault( SvtCompatibilityEntry::Index::AddTableLineSpacing );
mbUseFormerObjectPos = aOptions.GetDefault( SvtCompatibilityEntry::Index::UseObjectPositioning );
mbUseFormerTextWrapping = aOptions.GetDefault( SvtCompatibilityEntry::Index::UseOurTextWrapping );
mbConsiderWrapOnObjPos = aOptions.GetDefault( SvtCompatibilityEntry::Index::ConsiderWrappingStyle );
diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx
index 6ce52e5e041c..bf160861ee3c 100644
--- a/sw/source/core/view/viewsh.cxx
+++ b/sw/source/core/view/viewsh.cxx
@@ -833,10 +833,13 @@ void SwViewShell::SetUseVirDev( bool bNewVirtual )
void SwViewShell::SetAddParaSpacingToTableCells( bool _bAddParaSpacingToTableCells )
{
IDocumentSettingAccess& rIDSA = getIDocumentSettingAccess();
- if ( rIDSA.get(DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS) != _bAddParaSpacingToTableCells )
+ if (rIDSA.get(DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS) != _bAddParaSpacingToTableCells
+ || rIDSA.get(DocumentSettingId::ADD_PARA_LINE_SPACING_TO_TABLE_CELLS) != _bAddParaSpacingToTableCells)
{
SwWait aWait( *GetDoc()->GetDocShell(), true );
rIDSA.set(DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS, _bAddParaSpacingToTableCells );
+ // note: the dialog can't change the value to indeterminate, so only false/false and true/true
+ rIDSA.set(DocumentSettingId::ADD_PARA_LINE_SPACING_TO_TABLE_CELLS, _bAddParaSpacingToTableCells );
const SwInvalidateFlags nInv = SwInvalidateFlags::PrtArea;
lcl_InvalidateAllContent( *this, nInv );
}
diff --git a/sw/source/ui/config/optcomp.cxx b/sw/source/ui/config/optcomp.cxx
index 9ae91126e608..8c2c821570ad 100644
--- a/sw/source/ui/config/optcomp.cxx
+++ b/sw/source/ui/config/optcomp.cxx
@@ -72,7 +72,9 @@ SwCompatibilityOptPage::SwCompatibilityOptPage(weld::Container* pPage, weld::Dia
m_xGlobalOptionsCLB->set_column_fixed_widths(aWidths);
int nPos = 0;
- for ( int i = static_cast<int>(SvtCompatibilityEntry::Index::Module) + 1; i < static_cast<int>(SvtCompatibilityEntry::Index::INVALID); ++i )
+ for (int i = static_cast<int>(SvtCompatibilityEntry::Index::Module) + 1;
+ i < static_cast<int>(SvtCompatibilityEntry::Index::INVALID) - 1; // omit AddTableLineSpacing
+ ++i)
{
int nCoptIdx = i - 2; /* Do not consider "Name" & "Module" indexes */
@@ -122,6 +124,7 @@ static sal_uLong convertBools2Ulong_Impl
bool _bNoExtLeading,
bool _bUseLineSpacing,
bool _bAddTableSpacing,
+ bool _bAddTableLineSpacing,
bool _bUseObjPos,
bool _bUseOurTextWrapping,
bool _bConsiderWrappingStyle,
@@ -156,6 +159,9 @@ static sal_uLong convertBools2Ulong_Impl
if ( _bAddTableSpacing )
nRet |= nSetBit;
nSetBit = nSetBit << 1;
+ if (_bAddTableLineSpacing)
+ nRet |= nSetBit;
+ nSetBit = nSetBit << 1;
if ( _bUseObjPos )
nRet |= nSetBit;
nSetBit = nSetBit << 1;
@@ -253,6 +259,7 @@ void SwCompatibilityOptPage::InitControls( const SfxItemSet& rSet )
aEntry.getValue<bool>( SvtCompatibilityEntry::Index::NoExtLeading ),
aEntry.getValue<bool>( SvtCompatibilityEntry::Index::UseLineSpacing ),
aEntry.getValue<bool>( SvtCompatibilityEntry::Index::AddTableSpacing ),
+ aEntry.getValue<bool>(SvtCompatibilityEntry::Index::AddTableLineSpacing),
aEntry.getValue<bool>( SvtCompatibilityEntry::Index::UseObjectPositioning ),
aEntry.getValue<bool>( SvtCompatibilityEntry::Index::UseOurTextWrapping ),
aEntry.getValue<bool>( SvtCompatibilityEntry::Index::ConsiderWrappingStyle ),
@@ -288,6 +295,15 @@ IMPL_LINK_NOARG(SwCompatibilityOptPage, UseAsDefaultHdl, weld::Button&, void)
int nCoptIdx = i + 2; /* Consider "Name" & "Module" indexes */
pItem->setValue<bool>( SvtCompatibilityEntry::Index(nCoptIdx), bChecked );
+ if (nCoptIdx == int(SvtCompatibilityEntry::Index::AddTableSpacing))
+ {
+ bool const isLineSpacing = m_xOptionsLB->get_toggle(i, 0) == TRISTATE_TRUE;
+ pItem->setValue<bool>(SvtCompatibilityEntry::Index::AddTableLineSpacing, isLineSpacing);
+ }
+ else
+ {
+ assert(m_xOptionsLB->get_toggle(i, 0) != TRISTATE_INDET);
+ }
}
}
@@ -302,7 +318,17 @@ void SwCompatibilityOptPage::SetCurrentOptions( sal_uLong nOptions )
for (int i = 0; i < nCount; ++i)
{
bool bChecked = ( ( nOptions & 0x00000001 ) == 0x00000001 );
- m_xOptionsLB->set_toggle(i, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
+ TriState value = bChecked ? TRISTATE_TRUE : TRISTATE_FALSE;
+ if (i == int(SvtCompatibilityEntry::Index::AddTableSpacing) - 2)
+ { // hack: map 2 bools to 1 tristate
+ nOptions = nOptions >> 1;
+ if (value == TRISTATE_TRUE
+ && (nOptions & 0x00000001) != 0x00000001) // ADD_PARA_LINE_SPACING_TO_TABLE_CELLS
+ {
+ value = TRISTATE_INDET; // 3 values possible here
+ }
+ }
+ m_xOptionsLB->set_toggle(i, value, 0);
nOptions = nOptions >> 1;
}
}
@@ -321,6 +347,7 @@ sal_uLong SwCompatibilityOptPage::GetDocumentOptions() const
!rIDocumentSettingAccess.get( DocumentSettingId::ADD_EXT_LEADING ),
rIDocumentSettingAccess.get( DocumentSettingId::OLD_LINE_SPACING ),
rIDocumentSettingAccess.get( DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS ),
+ rIDocumentSettingAccess.get( DocumentSettingId::ADD_PARA_LINE_SPACING_TO_TABLE_CELLS ),
rIDocumentSettingAccess.get( DocumentSettingId::USE_FORMER_OBJECT_POS ),
rIDocumentSettingAccess.get( DocumentSettingId::USE_FORMER_TEXT_WRAPPING ),
rIDocumentSettingAccess.get( DocumentSettingId::CONSIDER_WRAP_ON_OBJECT_POSITION ),
@@ -356,10 +383,21 @@ bool SwCompatibilityOptPage::FillItemSet( SfxItemSet* )
for (int i = 0; i < nCount; ++i)
{
- bool bChecked = m_xOptionsLB->get_toggle(i, 0) == TRISTATE_TRUE;
- bool bSavedChecked = ( ( nSavedOptions & 0x00000001 ) == 0x00000001 );
- if ( bChecked != bSavedChecked )
+ TriState const current = m_xOptionsLB->get_toggle(i, 0);
+ TriState saved = ((nSavedOptions & 0x00000001) == 0x00000001) ? TRISTATE_TRUE : TRISTATE_FALSE;
+ if (i == int(SvtCompatibilityEntry::Index::AddTableSpacing) - 2)
+ { // hack: map 2 bools to 1 tristate
+ nSavedOptions = nSavedOptions >> 1;
+ if (saved == TRISTATE_TRUE
+ && ((nSavedOptions & 0x00000001) != 0x00000001))
+ {
+ saved = TRISTATE_INDET;
+ }
+ }
+ if (current != saved)
{
+ bool const bChecked(current != TRISTATE_FALSE);
+ assert(current != TRISTATE_INDET); // can't *change* it to that
int nCoptIdx = i + 2; /* Consider "Name" & "Module" indexes */
switch ( SvtCompatibilityEntry::Index(nCoptIdx) )
{
diff --git a/sw/uiconfig/swriter/ui/optcompatpage.ui b/sw/uiconfig/swriter/ui/optcompatpage.ui
index 29a5c6eaee75..1018dcc5e979 100644
--- a/sw/uiconfig/swriter/ui/optcompatpage.ui
+++ b/sw/uiconfig/swriter/ui/optcompatpage.ui
@@ -229,6 +229,7 @@
<attributes>
<attribute name="visible">3</attribute>
<attribute name="active">0</attribute>
+ <attribute name="inconsistent">4</attribute>
</attributes>
</child>
</object>
diff --git a/unotools/source/config/compatibility.cxx b/unotools/source/config/compatibility.cxx
index a71c8ac39c8d..5556a0a231d4 100644
--- a/unotools/source/config/compatibility.cxx
+++ b/unotools/source/config/compatibility.cxx
@@ -66,6 +66,7 @@ SvtCompatibilityEntry::SvtCompatibilityEntry()
setValue<bool>( Index::MsWordTrailingBlanks, false );
setValue<bool>( Index::SubtractFlysAnchoredAtFlys, false );
setValue<bool>( Index::EmptyDbFieldHidesPara, true );
+ setValue<bool>( Index::AddTableLineSpacing, false );
setDefaultEntry( false );
}
@@ -94,6 +95,7 @@ OUString SvtCompatibilityEntry::getName( const Index rIdx )
"MsWordCompTrailingBlanks",
"SubtractFlysAnchoredAtFlys",
"EmptyDbFieldHidesPara",
+ "AddTableLineSpacing",
};
/* Size of sPropertyName array not equal size of the SvtCompatibilityEntry::Index enum class */