diff options
author | Noel Power <noel.power@novell.com> | 2011-02-24 09:43:39 +0000 |
---|---|---|
committer | Noel Power <noel.power@novell.com> | 2011-02-24 09:43:39 +0000 |
commit | 9730be282ad786d3f9b006dc31696493eee3616c (patch) | |
tree | da81e7e85ec99ce61b37034c8d9843357989e707 /writerfilter | |
parent | 51576337ac12b0135ac3c72a135d99259ef2d98a (diff) |
more form field fixes
writerfilter/source/dmapper/DomainMapper_Impl.cxx: really use enhanced Text
Form field, also cleaned using enhanced fields or not logic a little more and
finally got rid of the "com.sun.star.text.FormFieldmark.xxx" type services as I
realised these weren't necessary
writerfilter/source/dmapper/FormControlHelper.cxx: added support for Text Form
in the processField method
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 66 | ||||
-rw-r--r-- | writerfilter/source/dmapper/FormControlHelper.cxx | 27 |
2 files changed, 61 insertions, 32 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 434369078b48..3e57a568c27b 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -136,6 +136,22 @@ void lcl_handleDropdownField( const uno::Reference< beans::XPropertySet >& rxFie } } +void lcl_handleTextField( const uno::Reference< beans::XPropertySet >& rxFieldProps, FFDataHandler::Pointer_t pFFDataHandler, PropertyNameSupplier& rPropNameSupplier ) +{ + if ( rxFieldProps.is() ) + { + rxFieldProps->setPropertyValue + (rPropNameSupplier.GetName(PROP_HINT), + uno::makeAny(pFFDataHandler->getStatusText())); + rxFieldProps->setPropertyValue + (rPropNameSupplier.GetName(PROP_HELP), + uno::makeAny(pFFDataHandler->getHelpText())); + rxFieldProps->setPropertyValue + (rPropNameSupplier.GetName(PROP_CONTENT), + uno::makeAny(pFFDataHandler->getTextDefault())); + } +} + struct FieldConversion { ::rtl::OUString sWordCommand; @@ -1904,8 +1920,9 @@ const FieldConversionMap_t & lcl_GetEnhancedFieldConversion() { static const FieldConversion aEnhancedFields[] = { - {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMCHECKBOX")), "ODFFormCheckbox", "", FIELD_FORMCHECKBOX}, - {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMDROPDOWN")), "ODFFormListbox", "", FIELD_FORMDROPDOWN}, + {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMCHECKBOX")), "FormFieldmark", "", FIELD_FORMCHECKBOX}, + {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMDROPDOWN")), "FormFieldmark", "", FIELD_FORMDROPDOWN}, + {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMTEXT")), "Fieldmark", "", FIELD_FORMTEXT}, }; size_t nConversions = SAL_N_ELEMENTS(aEnhancedFields); @@ -2350,20 +2367,22 @@ void DomainMapper_Impl::CloseFieldCommand() case FIELD_DOCPROPERTY: case FIELD_TOC: case FIELD_TC: + bCreateField = false; + break; case FIELD_FORMCHECKBOX : + case FIELD_FORMTEXT : case FIELD_FORMDROPDOWN : { - // If we use 'enhanced' fields then FIELD_FORMCHECKBOX - // & FIELD_FORMDROPDOWN are treated specially - if ( m_bUsingEnhancedFields && ( aIt->second.eFieldId == FIELD_FORMCHECKBOX || aIt->second.eFieldId == FIELD_FORMDROPDOWN ) ) + // If we use 'enhanced' fields then FIELD_FORMCHECKBOX, + // FIELD_FORMTEXT & FIELD_FORMDROPDOWN are treated specially + if ( m_bUsingEnhancedFields ) { bCreateField = false; bCreateEnhancedField = true; } - // if we aren't using enhanced fields and this is a - // drown down then *don't* set bCreateField to false.. - // we want to create the field - else if ( aIt->second.eFieldId != FIELD_FORMDROPDOWN ) + // for non enhanced fields checkboxes are displayed + // as an awt control not a field + else if ( aIt->second.eFieldId == FIELD_FORMCHECKBOX ) bCreateField = false; break; } @@ -2377,7 +2396,6 @@ void DomainMapper_Impl::CloseFieldCommand() OUString sServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.")); if ( bCreateEnhancedField ) { - sServiceName += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("FormFieldmark.")); FieldConversionMap_t aEnhancedFieldConversionMap = lcl_GetEnhancedFieldConversion(); FieldConversionMap_t::iterator aEnhancedIt = aEnhancedFieldConversionMap.find(sCommand); if ( aEnhancedIt != aEnhancedFieldConversionMap.end()) @@ -2478,6 +2496,7 @@ void DomainMapper_Impl::CloseFieldCommand() case FIELD_FORMULA : break; case FIELD_FORMCHECKBOX : case FIELD_FORMDROPDOWN : + case FIELD_FORMTEXT : { uno::Reference< text::XTextField > xTextField( xFieldInterface, uno::UNO_QUERY ); if ( !xTextField.is() ) @@ -2500,25 +2519,14 @@ void DomainMapper_Impl::CloseFieldCommand() } } else - lcl_handleDropdownField( xFieldProperties, pContext->getFFDataHandler() ); + { + if ( aIt->second.eFieldId == FIELD_FORMDROPDOWN ) + lcl_handleDropdownField( xFieldProperties, pContext->getFFDataHandler() ); + else + lcl_handleTextField( xFieldProperties, pContext->getFFDataHandler(), rPropNameSupplier ); + } } break; - case FIELD_FORMTEXT : - { - FFDataHandler::Pointer_t pFFDataHandler - (pContext->getFFDataHandler()); - - xFieldProperties->setPropertyValue - (rPropNameSupplier.GetName(PROP_HINT), - uno::makeAny(pFFDataHandler->getStatusText())); - xFieldProperties->setPropertyValue - (rPropNameSupplier.GetName(PROP_HELP), - uno::makeAny(pFFDataHandler->getHelpText())); - xFieldProperties->setPropertyValue - (rPropNameSupplier.GetName(PROP_CONTENT), - uno::makeAny(pFFDataHandler->getTextDefault())); - } - break; case FIELD_GOTOBUTTON : break; case FIELD_HYPERLINK: { @@ -2895,8 +2903,8 @@ void DomainMapper_Impl::PopFieldContext() xToInsert.set(xFormField, uno::UNO_QUERY); if ( xFormField.is() && xToInsert.is() ) { - uno::Reference< text::XTextAppendAndConvert > xTextAppendAndConvert( xTextAppend, uno::UNO_QUERY_THROW ); - xTextAppendAndConvert->appendTextContent( xToInsert, uno::Sequence< beans::PropertyValue >() ); + xCrsr->gotoEnd( true ); + xToInsert->attach( uno::Reference< text::XTextRange >( xCrsr, uno::UNO_QUERY_THROW )); pFormControlHelper->processField( xFormField ); } else diff --git a/writerfilter/source/dmapper/FormControlHelper.cxx b/writerfilter/source/dmapper/FormControlHelper.cxx index 0af763753077..1f7a5b5029aa 100644 --- a/writerfilter/source/dmapper/FormControlHelper.cxx +++ b/writerfilter/source/dmapper/FormControlHelper.cxx @@ -223,9 +223,31 @@ bool FormControlHelper::createCheckbox(uno::Reference<text::XTextRange> xTextRan bool FormControlHelper::processField(uno::Reference<text::XFormField> xFormField) { - if (m_pImpl->m_eFieldId == FIELD_FORMCHECKBOX ) + uno::Reference<container::XNameContainer> xNameCont = xFormField->getParameters(); + if (m_pImpl->m_eFieldId == FIELD_FORMTEXT ) { - xFormField->setFieldType( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("vnd.oasis.opendocument.field.FORMCHECKBOX"))); + xFormField->setFieldType( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(ODF_FORMTEXT))); + if ( xNameCont.is() ) + { + if ( m_pFFData->getName().getLength() ) + { + if ( xNameCont->hasByName( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(ODF_FORMTEXT_NAME)) ) ) + xNameCont->replaceByName( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(ODF_FORMTEXT_NAME)), uno::makeAny( m_pFFData->getName() ) ); + else + xNameCont->insertByName( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(ODF_FORMTEXT_NAME)), uno::makeAny( m_pFFData->getName() ) ); + } + if ( m_pFFData->getTextDefault().getLength() ) + { + if ( xNameCont->hasByName( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(ODF_FORMTEXT_DEFAULT)) ) ) + xNameCont->replaceByName( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(ODF_FORMTEXT_DEFAULT)), uno::makeAny( m_pFFData->getTextDefault() ) ); + else + xNameCont->insertByName( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(ODF_FORMTEXT_DEFAULT)), uno::makeAny( m_pFFData->getTextDefault() ) ); + } + } + } + else if (m_pImpl->m_eFieldId == FIELD_FORMCHECKBOX ) + { + xFormField->setFieldType( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(ODF_FORMCHECKBOX))); uno::Reference<beans::XPropertySet> xPropSet(xFormField, uno::UNO_QUERY); uno::Any aAny; aAny <<= m_pFFData->getCheckboxChecked(); @@ -236,7 +258,6 @@ bool FormControlHelper::processField(uno::Reference<text::XFormField> xFormField else if (m_pImpl->m_eFieldId == FIELD_FORMDROPDOWN ) { xFormField->setFieldType( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(ODF_FORMDROPDOWN))); - uno::Reference<container::XNameContainer> xNameCont = xFormField->getParameters(); if ( xNameCont.is() ) { uno::Sequence< rtl::OUString > sItems; |