diff options
author | Miklos Vajna <vmiklos@frugalware.org> | 2011-08-10 13:33:00 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@frugalware.org> | 2011-08-10 16:15:23 +0200 |
commit | e20a75a4f3b991f78d67bc333b23d2a9fa9c1470 (patch) | |
tree | 577b3b4f7bd0b4c26417595438ac0395c23d52a9 /writerfilter/source/dmapper/ModelEventListener.cxx | |
parent | ed7b24e4d563dc80be4409d717009a05c9be099a (diff) |
dmapper: implement PAGEREF field
Diffstat (limited to 'writerfilter/source/dmapper/ModelEventListener.cxx')
-rw-r--r-- | writerfilter/source/dmapper/ModelEventListener.cxx | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/writerfilter/source/dmapper/ModelEventListener.cxx b/writerfilter/source/dmapper/ModelEventListener.cxx index c151c5056335..e86aa0195182 100644 --- a/writerfilter/source/dmapper/ModelEventListener.cxx +++ b/writerfilter/source/dmapper/ModelEventListener.cxx @@ -26,9 +26,15 @@ * ************************************************************************/ #include <ModelEventListener.hxx> +#include <PropertyIds.hxx> #include <com/sun/star/document/XEventBroadcaster.hpp> #include <com/sun/star/text/XDocumentIndex.hpp> #include <com/sun/star/text/XDocumentIndexesSupplier.hpp> +#include <com/sun/star/text/XTextFieldsSupplier.hpp> +#include <com/sun/star/util/XRefreshable.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/text/ReferenceFieldPart.hpp> +#include <com/sun/star/text/ReferenceFieldSource.hpp> namespace writerfilter { namespace dmapper { @@ -54,6 +60,8 @@ void ModelEventListener::notifyEvent( const document::EventObject& rEvent ) thro { try { + PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier(); + uno::Reference< text::XDocumentIndexesSupplier> xIndexesSupplier( rEvent.Source, uno::UNO_QUERY ); //remove listener uno::Reference<document::XEventBroadcaster>(rEvent.Source, uno::UNO_QUERY )->removeEventListener( @@ -67,6 +75,26 @@ void ModelEventListener::notifyEvent( const document::EventObject& rEvent ) thro uno::Reference< text::XDocumentIndex> xIndex( xIndexes->getByIndex( nIndex ), uno::UNO_QUERY ); xIndex->update(); } + + // If we have PAGEREF fields, update fields as well. + uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(rEvent.Source, uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xEnumeration(xTextFieldsSupplier->getTextFields()->createEnumeration(), uno::UNO_QUERY); + sal_Int32 nIndex = 0; + while(xEnumeration->hasMoreElements()) + { + uno::Reference<beans::XPropertySet> xPropertySet(xEnumeration->nextElement(), uno::UNO_QUERY); + sal_Int16 nSource; + xPropertySet->getPropertyValue(rPropNameSupplier.GetName(PROP_REFERENCE_FIELD_SOURCE)) >>= nSource; + sal_Int16 nPart; + xPropertySet->getPropertyValue(rPropNameSupplier.GetName(PROP_REFERENCE_FIELD_PART)) >>= nPart; + if (nSource == text::ReferenceFieldSource::BOOKMARK && nPart == text::ReferenceFieldPart::PAGE) + ++nIndex; + } + if (nIndex) + { + uno::Reference<util::XRefreshable> xRefreshable(xTextFieldsSupplier->getTextFields(), uno::UNO_QUERY); + xRefreshable->refresh(); + } } catch( const uno::Exception& rEx ) { |