tdf#56126 - Changed separator for conditional fields
In order to support the previosuly used vertical separator. Change-Id: I62d05a1ce9e95d34879ac2970c57fd0e4f78f987 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198813 Tested-by: Jenkins Reviewed-by: Andreas Heinisch <andreas.heinisch@yahoo.de>
This commit is contained in:
@@ -129,6 +129,7 @@ const char cSequenceMarkSeparator = '!';
|
||||
sal_Unicode const toxMarkSeparator = '\u0019';
|
||||
|
||||
#define DB_DELIM u'\x00ff' // Database <-> table separator.
|
||||
#define CONDITIONAL_FIELD_SEPARATOR u'\0'
|
||||
|
||||
enum class SetAttrMode
|
||||
{
|
||||
|
||||
@@ -119,6 +119,32 @@ CPPUNIT_TEST_FIXTURE(Test, testInsertRefmark)
|
||||
CPPUNIT_ASSERT_EQUAL(u"aaabbbccc"_ustr, pTextNode->GetText());
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(Test, testTdf56126InsertConditionalFieldWithVerticalSeparator)
|
||||
{
|
||||
// Create an empty document
|
||||
createSwDoc();
|
||||
SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
|
||||
|
||||
// Insert a conditional field containing exactly two dots for its condition
|
||||
SwFieldMgr aFieldMgr(pWrtShell);
|
||||
SwInsertField_Data aFieldData(SwFieldTypesEnum::ConditionalText, 0, u"true"_ustr,
|
||||
u"foo|bar"_ustr, 0);
|
||||
CPPUNIT_ASSERT(aFieldMgr.InsertField(aFieldData));
|
||||
pWrtShell->SttEndDoc(true);
|
||||
|
||||
// Without the accompanying fix in place, this test would have failed with:
|
||||
// - Expected: foo|bar
|
||||
// - Actual : foo
|
||||
// i.e. the conditional text after the vertical separator disappeared
|
||||
CPPUNIT_ASSERT_EQUAL(u"foo|bar"_ustr, pWrtShell->GetCurField()->ExpandField(true, nullptr));
|
||||
|
||||
// Reload document in order to check if the new separator will be saved in ODT
|
||||
saveAndReload(TestFilter::ODT);
|
||||
pWrtShell = getSwDocShell()->GetWrtShell();
|
||||
pWrtShell->SttEndDoc(true);
|
||||
CPPUNIT_ASSERT_EQUAL(u"foo|bar"_ustr, pWrtShell->GetCurField()->ExpandField(true, nullptr));
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(Test, testTdf68364InsertConditionalFieldWithTwoDots)
|
||||
{
|
||||
// Create an empty document
|
||||
|
||||
@@ -1352,14 +1352,14 @@ SwHiddenTextField::SwHiddenTextField( SwHiddenTextFieldType* pFieldType,
|
||||
if(m_nSubType == SwFieldTypesEnum::ConditionalText)
|
||||
{
|
||||
sal_Int32 nPos = 0;
|
||||
m_aTRUEText = rStr.getToken(0, '|', nPos);
|
||||
m_aTRUEText = rStr.getToken(0, CONDITIONAL_FIELD_SEPARATOR, nPos);
|
||||
|
||||
if(nPos != -1)
|
||||
{
|
||||
m_aFALSEText = rStr.getToken(0, '|', nPos);
|
||||
m_aFALSEText = rStr.getToken(0, CONDITIONAL_FIELD_SEPARATOR, nPos);
|
||||
if(nPos != -1)
|
||||
{
|
||||
m_aContent = rStr.getToken(0, '|', nPos);
|
||||
m_aContent = rStr.getToken(0, CONDITIONAL_FIELD_SEPARATOR, nPos);
|
||||
m_bValid = true;
|
||||
}
|
||||
}
|
||||
@@ -1493,7 +1493,7 @@ void SwHiddenTextField::SetPar2(const OUString& rStr)
|
||||
{
|
||||
if (m_nSubType == SwFieldTypesEnum::ConditionalText)
|
||||
{
|
||||
sal_Int32 nPos = rStr.indexOf('|');
|
||||
sal_Int32 nPos = rStr.indexOf(CONDITIONAL_FIELD_SEPARATOR);
|
||||
if (nPos == -1)
|
||||
m_aTRUEText = rStr;
|
||||
else
|
||||
@@ -1513,7 +1513,7 @@ OUString SwHiddenTextField::GetPar2() const
|
||||
{
|
||||
return m_aTRUEText;
|
||||
}
|
||||
return m_aTRUEText + "|" + m_aFALSEText;
|
||||
return OUString::Concat(m_aTRUEText) + OUStringChar(CONDITIONAL_FIELD_SEPARATOR) + m_aFALSEText;
|
||||
}
|
||||
|
||||
SwFieldTypesEnum SwHiddenTextField::GetSubType() const
|
||||
|
||||
@@ -3501,7 +3501,7 @@ void AttributeOutputBase::TextField( const SwFormatField& rField )
|
||||
{
|
||||
OUString aCond = pField->GetPar1();
|
||||
OUString aTrueFalse = pField->GetPar2();
|
||||
sal_Int32 nPos = aTrueFalse.indexOf('|');
|
||||
sal_Int32 nPos = aTrueFalse.indexOf(CONDITIONAL_FIELD_SEPARATOR);
|
||||
OUString aTrue;
|
||||
OUString aFalse;
|
||||
if (nPos == -1)
|
||||
|
||||
@@ -334,8 +334,10 @@ IMPL_LINK_NOARG(SwFieldFuncPage, TypeHdl, weld::TreeView&, void)
|
||||
if (IsFieldEdit())
|
||||
{
|
||||
sal_Int32 nIdx{ 0 };
|
||||
m_xCond1ED->set_text(GetCurField()->GetPar2().getToken(0, '|', nIdx));
|
||||
m_xCond2ED->set_text(GetCurField()->GetPar2().getToken(0, '|', nIdx));
|
||||
m_xCond1ED->set_text(
|
||||
GetCurField()->GetPar2().getToken(0, CONDITIONAL_FIELD_SEPARATOR, nIdx));
|
||||
m_xCond2ED->set_text(
|
||||
GetCurField()->GetPar2().getToken(0, CONDITIONAL_FIELD_SEPARATOR, nIdx));
|
||||
}
|
||||
|
||||
bName = bValue = true;
|
||||
@@ -548,7 +550,8 @@ bool SwFieldFuncPage::FillItemSet(SfxItemSet* )
|
||||
break;
|
||||
|
||||
case SwFieldTypesEnum::ConditionalText:
|
||||
aVal = m_xCond1ED->get_text() + "|" + m_xCond2ED->get_text();
|
||||
aVal = OUString::Concat(m_xCond1ED->get_text())
|
||||
+ OUStringChar(CONDITIONAL_FIELD_SEPARATOR) + m_xCond2ED->get_text();
|
||||
break;
|
||||
case SwFieldTypesEnum::Dropdown :
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user