Kaydet (Commit) 4edb7599 authored tarafından Balazs Varga's avatar Balazs Varga Kaydeden (comit) László Németh

tdf#118651 OOXML ActiveX textbox: fix multiline support

of textfield component in DOCX/PPTX by handling properties
AX_FLAGS_MULTILINE and AX_FLAGS_WORDWRAP during the import
and export. Both of them need to be enabled to get multiline
textfield in MSO, but LibreOffice has got only one multiline
property. With this fix, LibreOffice imports only really
multiline textfields as multiline, and it doesn't export
multiline textfields as single line anymore.

Change-Id: I9b567c3fcdc5d01a5838a3ec2517579f8d788954
Reviewed-on: https://gerrit.libreoffice.org/57552Reviewed-by: 's avatarLászló Németh <nemeth@numbertext.org>
Tested-by: 's avatarLászló Németh <nemeth@numbertext.org>
üst 1445d84c
...@@ -1768,7 +1768,10 @@ ApiControlType AxTextBoxModel::getControlType() const ...@@ -1768,7 +1768,10 @@ ApiControlType AxTextBoxModel::getControlType() const
void AxTextBoxModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const void AxTextBoxModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
{ {
rPropMap.setProperty( PROP_MultiLine, getFlag( mnFlags, AX_FLAGS_MULTILINE ) ); if (getFlag( mnFlags, AX_FLAGS_MULTILINE ) && getFlag( mnFlags, AX_FLAGS_WORDWRAP ))
rPropMap.setProperty( PROP_MultiLine, true );
else
rPropMap.setProperty( PROP_MultiLine, false );
rPropMap.setProperty( PROP_HideInactiveSelection, getFlag( mnFlags, AX_FLAGS_HIDESELECTION ) ); rPropMap.setProperty( PROP_HideInactiveSelection, getFlag( mnFlags, AX_FLAGS_HIDESELECTION ) );
rPropMap.setProperty( PROP_ReadOnly, getFlag( mnFlags, AX_FLAGS_LOCKED ) ); rPropMap.setProperty( PROP_ReadOnly, getFlag( mnFlags, AX_FLAGS_LOCKED ) );
rPropMap.setProperty( mbAwtModel ? PROP_Text : PROP_DefaultText, maValue ); rPropMap.setProperty( mbAwtModel ? PROP_Text : PROP_DefaultText, maValue );
...@@ -1785,8 +1788,10 @@ void AxTextBoxModel::convertProperties( PropertyMap& rPropMap, const ControlConv ...@@ -1785,8 +1788,10 @@ void AxTextBoxModel::convertProperties( PropertyMap& rPropMap, const ControlConv
void AxTextBoxModel::convertFromProperties( PropertySet& rPropSet, const ControlConverter& rConv ) void AxTextBoxModel::convertFromProperties( PropertySet& rPropSet, const ControlConverter& rConv )
{ {
bool bRes = false; bool bRes = false;
if ( rPropSet.getProperty( bRes, PROP_MultiLine ) ) if ( rPropSet.getProperty( bRes, PROP_MultiLine ) ) {
setFlag( mnFlags, AX_FLAGS_WORDWRAP, bRes ); setFlag( mnFlags, AX_FLAGS_WORDWRAP, bRes );
setFlag( mnFlags, AX_FLAGS_MULTILINE, bRes );
}
if ( rPropSet.getProperty( bRes, PROP_HideInactiveSelection ) ) if ( rPropSet.getProperty( bRes, PROP_HideInactiveSelection ) )
setFlag( mnFlags, AX_FLAGS_HIDESELECTION, bRes ); setFlag( mnFlags, AX_FLAGS_HIDESELECTION, bRes );
if ( rPropSet.getProperty( bRes, PROP_ReadOnly ) ) if ( rPropSet.getProperty( bRes, PROP_ReadOnly ) )
......
...@@ -260,8 +260,9 @@ void SdActiveXControlsTest::testTextBoxProperties() ...@@ -260,8 +260,9 @@ void SdActiveXControlsTest::testTextBoxProperties()
xPropertySet->getPropertyValue("Enabled") >>= bEnabled; xPropertySet->getPropertyValue("Enabled") >>= bEnabled;
CPPUNIT_ASSERT_EQUAL(false, bEnabled); CPPUNIT_ASSERT_EQUAL(false, bEnabled);
// These textfields are not multilines in the pptx testfile
xPropertySet->getPropertyValue("MultiLine") >>= bMultiLine; xPropertySet->getPropertyValue("MultiLine") >>= bMultiLine;
CPPUNIT_ASSERT_EQUAL(true, bMultiLine); CPPUNIT_ASSERT_EQUAL(false, bMultiLine);
xPropertySet->getPropertyValue("TextColor") >>= nColor; xPropertySet->getPropertyValue("TextColor") >>= nColor;
CPPUNIT_ASSERT_EQUAL(sal_Int32(0x404040), nColor); CPPUNIT_ASSERT_EQUAL(sal_Int32(0x404040), nColor);
......
...@@ -934,6 +934,31 @@ DECLARE_OOXMLEXPORT_TEST(testTdf106062_nonHangingFootnote, "tdf106062_nonHanging ...@@ -934,6 +934,31 @@ DECLARE_OOXMLEXPORT_TEST(testTdf106062_nonHangingFootnote, "tdf106062_nonHanging
CPPUNIT_ASSERT_MESSAGE( "Footnote starts with a tab", xTextRange->getString().startsWith("\t") ); CPPUNIT_ASSERT_MESSAGE( "Footnote starts with a tab", xTextRange->getString().startsWith("\t") );
} }
DECLARE_OOXMLEXPORT_TEST( testActiveXTextfield, "activex_textbox.docx" )
{
uno::Reference<drawing::XControlShape> xControlShape( getShape(1), uno::UNO_QUERY );
CPPUNIT_ASSERT( xControlShape.is() );
// Check control type
uno::Reference<beans::XPropertySet> xPropertySet( xControlShape->getControl(), uno::UNO_QUERY );
uno::Reference<lang::XServiceInfo> xServiceInfo( xPropertySet, uno::UNO_QUERY );
CPPUNIT_ASSERT_EQUAL( true, bool( xServiceInfo->supportsService ( "com.sun.star.form.component.TextField" ) ) );
// Check textfield is multi-line
CPPUNIT_ASSERT_EQUAL( true, getProperty<bool>(xPropertySet, "MultiLine") );
uno::Reference<drawing::XControlShape> xControlShape2( getShape(2), uno::UNO_QUERY );
CPPUNIT_ASSERT( xControlShape2.is() );
// Check control type
uno::Reference<beans::XPropertySet> xPropertySet2( xControlShape2->getControl(), uno::UNO_QUERY );
uno::Reference<lang::XServiceInfo> xServiceInfo2( xPropertySet2, uno::UNO_QUERY );
CPPUNIT_ASSERT_EQUAL( true, bool( xServiceInfo2->supportsService ( "com.sun.star.form.component.TextField" ) ) );
// Check textfield is single-line
CPPUNIT_ASSERT_EQUAL( false, getProperty<bool>(xPropertySet2, "MultiLine") );
}
DECLARE_OOXMLEXPORT_TEST( testActiveXCheckbox, "activex_checkbox.docx" ) DECLARE_OOXMLEXPORT_TEST( testActiveXCheckbox, "activex_checkbox.docx" )
{ {
uno::Reference<drawing::XControlShape> xControlShape( getShape(1), uno::UNO_QUERY ); uno::Reference<drawing::XControlShape> xControlShape( getShape(1), uno::UNO_QUERY );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment