22 #include <com/sun/star/beans/XPropertySet.hpp>
23 #include <com/sun/star/document/XRedlinesSupplier.hpp>
24 #include <com/sun/star/frame/XModel.hpp>
25 #include <com/sun/star/text/XTextRangeCompare.hpp>
30 typedef std::vector< uno::Reference< beans::XPropertySet > >
RevisionMap;
34 class RedlinesEnumeration :
public ::cppu::WeakImplHelper< container::XEnumeration >
37 RevisionMap::iterator mIt;
39 explicit RedlinesEnumeration(
RevisionMap&& sMap ) : mRevisionMap( std::move(sMap) ), mIt( mRevisionMap.begin() ) {}
40 virtual sal_Bool SAL_CALL hasMoreElements( )
override
42 return ( mIt != mRevisionMap.end() );
44 virtual uno::Any SAL_CALL nextElement( )
override
46 if ( !hasMoreElements() )
47 throw container::NoSuchElementException();
48 uno::Reference< beans::XPropertySet > xRevision( *mIt++ );
53 class RevisionCollectionHelper :
public ::cppu::WeakImplHelper< container::XIndexAccess,
54 container::XEnumerationAccess >
59 RevisionCollectionHelper(
const uno::Reference< frame::XModel >&
xModel,
const uno::Reference< text::XTextRange >& xTextRange );
63 virtual sal_Bool SAL_CALL hasElements( )
override {
return ( !mRevisionMap.empty() ); }
65 virtual ::sal_Int32 SAL_CALL getCount( )
override {
return mRevisionMap.size(); }
66 virtual uno::Any SAL_CALL getByIndex( ::sal_Int32
Index )
override
69 throw lang::IndexOutOfBoundsException();
71 return uno::Any( mRevisionMap[ Index ] );
75 virtual uno::Reference< container::XEnumeration > SAL_CALL createEnumeration( )
override
77 return new RedlinesEnumeration( std::vector(mRevisionMap) );
83 RevisionCollectionHelper::RevisionCollectionHelper(
const uno::Reference< frame::XModel >& xModel,
const uno::Reference< text::XTextRange >& xTextRange )
85 uno::Reference< text::XTextRangeCompare > xTRC( xTextRange->getText(), uno::UNO_QUERY_THROW );
86 uno::Reference< document::XRedlinesSupplier > xRedlinesSupp( xModel, uno::UNO_QUERY_THROW );
87 uno::Reference< container::XIndexAccess > xRedlines( xRedlinesSupp->getRedlines(), uno::UNO_QUERY_THROW );
88 sal_Int32
nCount = xRedlines->getCount();
89 for( sal_Int32 index = 0;
index < nCount;
index++ )
91 uno::Reference< text::XTextRange > xRedlineRange( xRedlines->getByIndex( index ), uno::UNO_QUERY_THROW );
92 if( xTRC->compareRegionStarts( xTextRange, xRedlineRange ) >= 0 && xTRC->compareRegionEnds( xTextRange, xRedlineRange ) <= 0 )
94 uno::Reference< beans::XPropertySet > xRedlineProps( xRedlineRange, uno::UNO_QUERY_THROW );
95 mRevisionMap.push_back( xRedlineProps );
104 uno::Reference< frame::XModel >
m_xModel;
107 RevisionsEnumeration(
const uno::Reference< XHelperInterface >& xParent,
const uno::Reference< uno::XComponentContext >& xContext,
const uno::Reference< container::XEnumeration >& xEnumeration,
const uno::Reference< frame::XModel >& xModel ) :
EnumerationHelperImpl( xParent, xContext, xEnumeration ), m_xModel( xModel ) {}
109 virtual uno::Any SAL_CALL nextElement( )
override
111 uno::Reference< beans::XPropertySet > xRevision( m_xEnumeration->nextElement(), uno::UNO_QUERY_THROW );
112 return uno::Any( uno::Reference< word::XRevision > (
new SwVbaRevision( m_xParent, m_xContext, m_xModel, xRevision ) ) );
119 SwVbaRevisions::SwVbaRevisions(
const uno::Reference< XHelperInterface >& xParent,
const uno::Reference< uno::XComponentContext > & xContext,
const uno::Reference< frame::XModel >& xModel,
const uno::Reference< text::XTextRange >& xTextRange ):
SwVbaRevisions_BASE( xParent, xContext, new RevisionCollectionHelper( xModel, xTextRange ) ),
mxModel( xModel )
123 SwVbaRevisions::SwVbaRevisions(
const uno::Reference< XHelperInterface >& xParent,
const uno::Reference< uno::XComponentContext > & xContext,
const uno::Reference< frame::XModel >& xModel,
const uno::Reference< container::XIndexAccess >& xIndexAccess ):
SwVbaRevisions_BASE( xParent, xContext, xIndexAccess ),
mxModel( xModel )
133 uno::Reference< container::XEnumeration >
136 uno::Reference< container::XEnumerationAccess > xEnumAccess(
m_xIndexAccess, uno::UNO_QUERY_THROW );
137 return new RevisionsEnumeration(
this,
mxContext, xEnumAccess->createEnumeration(),
mxModel );
143 uno::Reference< beans::XPropertySet > xRevision( aSource, uno::UNO_QUERY_THROW );
151 std::vector< uno::Reference< word::XRevision > > aRevisions;
153 while( xEnumeration->hasMoreElements() )
155 uno::Reference< word::XRevision > xRevision( xEnumeration->nextElement(), uno::UNO_QUERY_THROW );
156 aRevisions.push_back( xRevision );
159 for(
const auto& xRevision : aRevisions )
165 throw uno::RuntimeException();
171 return "SwVbaRevisions";
174 css::uno::Sequence<OUString>
177 static uno::Sequence< OUString >
const sNames
179 "ooo.vba.word.Revisions"
Reference< frame::XModel > m_xModel
css::uno::Reference< css::container::XIndexAccess > m_xIndexAccess
css::uno::Reference< css::frame::XModel2 > mxModel
SwVbaRevisions(const css::uno::Reference< ov::XHelperInterface > &xParent, const css::uno::Reference< css::uno::XComponentContext > &xContext, const css::uno::Reference< css::frame::XModel > &xModel, const css::uno::Reference< css::text::XTextRange > &xTextRange)
virtual css::uno::Any createCollectionObject(const css::uno::Any &aSource) override
virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() override
std::vector< uno::Reference< beans::XPropertySet > > RevisionMap
css::uno::Type const & get()
virtual OUString getServiceImplName() override
css::uno::Reference< css::uno::XComponentContext > mxContext
css::uno::Reference< css::frame::XModel > mxModel
virtual void SAL_CALL AcceptAll() override
Reference< XModel > xModel
virtual void SAL_CALL RejectAll() override
virtual css::uno::Type SAL_CALL getElementType() override
virtual css::uno::Sequence< OUString > getServiceNames() override