34 #include <com/sun/star/text/XBookmarksSupplier.hpp>
35 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
36 #include <com/sun/star/document/XDocumentProperties.hpp>
37 #include <com/sun/star/drawing/XDrawPageSupplier.hpp>
38 #include <com/sun/star/drawing/XControlShape.hpp>
39 #include <com/sun/star/form/XFormsSupplier.hpp>
40 #include <com/sun/star/frame/XStorable.hpp>
41 #include <com/sun/star/document/XRedlinesSupplier.hpp>
42 #include <com/sun/star/util/thePathSettings.hpp>
43 #include <ooo/vba/XControlProvider.hpp>
44 #include <ooo/vba/word/WdProtectionType.hpp>
45 #include <ooo/vba/word/WdSaveFormat.hpp>
46 #include <ooo/vba/word/XDocumentOutgoing.hpp>
63 #include <osl/file.hxx>
71 class SwVbaDocumentOutgoingConnectionPoint :
public cppu::WeakImplHelper<XConnectionPoint>
80 sal_uInt32 SAL_CALL Advise(
const uno::Reference< XSink >& Sink )
override;
81 void SAL_CALL Unadvise( sal_uInt32 Cookie )
override;
86 SwVbaDocument::SwVbaDocument(
const uno::Reference< XHelperInterface >& xParent,
const uno::Reference< uno::XComponentContext >& xContext, uno::Reference< frame::XModel >
const & xModel ):
SwVbaDocument_BASE( xParent, xContext, xModel )
116 if (nNumber < 1 || nNumber >
mvSinks.size())
119 mvSinks[nNumber-1] = uno::Reference< XSink >();
122 uno::Reference< word::XRange > SAL_CALL
125 uno::Reference< text::XTextRange > xStart =
mxTextDocument->getText()->getStart();
126 uno::Reference< text::XTextRange > xEnd;
130 uno::Reference< word::XRange > SAL_CALL
136 sal_Int32 nStart = 0;
143 uno::Reference< text::XTextRange > xStart;
144 uno::Reference< text::XTextRange > xEnd;
145 if( nStart != -1 || nEnd != -1 )
158 if( !xStart.is() && !xEnd.is() )
166 catch(
const uno::Exception&)
179 return xCol->Item( index,
uno::Any() );
188 return xCol->Item( index,
uno::Any() );
195 uno::Reference< text::XBookmarksSupplier > xBookmarksSupplier( getModel(),uno::UNO_QUERY_THROW );
196 uno::Reference<container::XIndexAccess > xBookmarks( xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY_THROW );
198 if ( rIndex.getValueTypeClass() == uno::TypeClass_VOID )
201 return xBookmarksVba->Item( rIndex,
uno::Any() );
207 uno::Reference< css::document::XDocumentPropertiesSupplier > xDocumentPropertiesSupplier( getModel(),uno::UNO_QUERY_THROW );
208 uno::Reference< css::document::XDocumentProperties > xDocumentProperties = xDocumentPropertiesSupplier->getDocumentProperties();
209 uno::Reference< beans::XPropertyAccess > xUserDefined( xDocumentProperties->getUserDefinedProperties(), uno::UNO_QUERY_THROW );
212 if ( rIndex.getValueTypeClass() == uno::TypeClass_VOID )
215 return xVariables->Item( rIndex,
uno::Any() );
223 return xCol->Item( index,
uno::Any() );
232 return xCol->Item( index,
uno::Any() );
241 return xCol->Item( index,
uno::Any() );
248 uno::Reference< drawing::XDrawPageSupplier > xDrawPageSupplier( getModel(), uno::UNO_QUERY_THROW );
249 uno::Reference< container::XIndexAccess > xIndexAccess( xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY_THROW );
254 return xCol->Item( index,
uno::Any() );
263 return xCol->Item( index,
uno::Any() );
272 return xCol->Item( index,
uno::Any() );
279 uno::Reference< XCollection > xCol;
293 return "SwVbaDocument";
299 uno::Reference< word::XTemplate > xTemplate;
300 uno::Reference<css::document::XDocumentPropertiesSupplier>
const xDocPropSupp(
301 getModel(), uno::UNO_QUERY_THROW);
302 uno::Reference< css::document::XDocumentProperties > xDocProps( xDocPropSupp->getDocumentProperties(), uno::UNO_SET_THROW );
303 OUString sTemplateUrl = xDocProps->getTemplateURL();
313 if( !( _attachedtemplate >>= sTemplate ) )
315 throw uno::RuntimeException();
320 bool bIsURL = aObj.
GetProtocol() != INetProtocol::NotValid;
324 osl::FileBase::getFileURLFromSystemPath( sTemplate, aURL );
326 uno::Reference<css::document::XDocumentPropertiesSupplier>
const xDocPropSupp(
327 getModel(), uno::UNO_QUERY_THROW );
328 uno::Reference< css::document::XDocumentProperties > xDocProps( xDocPropSupp->getDocumentProperties(), uno::UNO_SET_THROW );
329 xDocProps->setTemplateURL( aURL );
338 if ( aIndex.hasValue() )
339 return xColl->Item( aIndex,
uno::Any() );
351 return word::WdProtectionType::wdNoProtection;
373 bool IsAutoHyphenation =
false;
375 xParaProps->getPropertyValue(
"ParaIsHyphenation") >>= IsAutoHyphenation;
376 return IsAutoHyphenation;
383 xParaProps->setPropertyValue(
"ParaIsHyphenation",
uno::Any( _autohyphenation ) );
400 sal_Int16 nHyphensLimit = 0;
402 xParaProps->getPropertyValue(
"ParaHyphenationMaxHyphens") >>= nHyphensLimit;
403 return nHyphensLimit;
408 sal_Int16 nHyphensLimit =
static_cast< sal_Int16
>( _consecutivehyphenslimit );
410 xParaProps->setPropertyValue(
"ParaHyphenationMaxHyphens",
uno::Any( nHyphensLimit ) );
424 void SAL_CALL
SwVbaDocument::PrintOut(
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& )
442 uno::Reference< css::document::XRedlinesSupplier > xRedlinesSupp(
mxTextDocument, uno::UNO_QUERY_THROW );
443 uno::Reference< container::XIndexAccess > xRedlines( xRedlinesSupp->getRedlines(), uno::UNO_QUERY_THROW );
446 return xCol->Item( index,
uno::Any() );
453 uno::Reference< text::XTextFramesSupplier > xTextFramesSupp(
mxTextDocument, uno::UNO_QUERY_THROW );
454 uno::Reference< container::XIndexAccess > xFrames( xTextFramesSupp->getTextFrames(), uno::UNO_QUERY_THROW );
457 return xCol->Item( index,
uno::Any() );
462 SwVbaDocument::SaveAs2000(
const uno::Any& FileName,
const uno::Any& FileFormat,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& )
464 SAL_INFO(
"sw.vba",
"Document.SaveAs2000(FileName:=" << FileName <<
",FileFormat:=" << FileFormat <<
")");
468 FileName >>= sFileName;
470 osl::FileBase::getFileURLFromSystemPath( sFileName, sURL );
478 sURL = getModel()->getURL();
480 if ( sURL.isEmpty() )
486 xPathSettings->getPropertyValue(
"Work" ) >>= sPathUrl;
489 sal_Int32
nIndex = sPathUrl.lastIndexOf(
';' );
492 sPathUrl = sPathUrl.copy( nIndex + 1 );
506 sal_Int32 nFileFormat = word::WdSaveFormat::wdFormatDocument;
507 FileFormat >>= nFileFormat;
511 setFilterPropsFromFormat( nFileFormat, storeProps );
513 uno::Reference< frame::XStorable > xStor( getModel(), uno::UNO_QUERY_THROW );
514 xStor->storeAsURL( sURL, storeProps );
518 SwVbaDocument::SaveAs(
const uno::Any& FileName,
const uno::Any& FileFormat,
const uno::Any& LockComments,
const uno::Any& Password,
const uno::Any& AddToRecentFiles,
const uno::Any& WritePassword,
const uno::Any& ReadOnlyRecommended,
const uno::Any& EmbedTrueTypeFonts,
const uno::Any& SaveNativePictureFormat,
const uno::Any& SaveFormsData,
const uno::Any& SaveAsAOCELetter,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& ,
const uno::Any& )
520 return SaveAs2000( FileName, FileFormat, LockComments, Password, AddToRecentFiles, WritePassword, ReadOnlyRecommended, EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData, SaveAsAOCELetter );
533 FileName >>= sFileName;
535 osl::FileBase::getFileURLFromSystemPath( sFileName, sURL );
538 OUString(
"writer_png_Export")) };
540 uno::Reference< frame::XStorable > xStor( getModel(), uno::UNO_QUERY_THROW );
541 xStor->storeToURL( sURL, storeProps );
547 uno::Reference< drawing::XDrawPageSupplier > xDrawPageSupplier(
mxTextDocument, uno::UNO_QUERY_THROW );
548 uno::Reference< container::XIndexAccess > xIndexAccess( xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY_THROW );
550 sal_Int32
nCount = xIndexAccess->getCount();
555 uno::Reference< drawing::XControlShape > xControlShape( aUnoObj, uno::UNO_QUERY );
556 if( xControlShape.is() )
558 uno::Reference< container::XNamed > xNamed( xControlShape->getControl(), uno::UNO_QUERY_THROW );
559 if( sName == xNamed->getName() )
568 uno::Reference< beans::XIntrospectionAccess > SAL_CALL
571 return uno::Reference< beans::XIntrospectionAccess >();
575 SwVbaDocument::invoke(
const OUString& aFunctionName,
const uno::Sequence< uno::Any >& , uno::Sequence< ::sal_Int16 >& , uno::Sequence< uno::Any >& )
577 SAL_INFO(
"sw.vba",
"** will barf " << aFunctionName );
578 throw uno::RuntimeException();
584 throw uno::RuntimeException();
589 uno::Reference< drawing::XControlShape > xControlShape(
getControlShape( aPropertyName ), uno::UNO_QUERY_THROW );
591 uno::Reference<lang::XMultiComponentFactory > xServiceManager(
mxContext->getServiceManager(), uno::UNO_SET_THROW );
592 uno::Reference< XControlProvider > xControlProvider( xServiceManager->createInstanceWithContext(
"ooo.vba.ControlProvider",
mxContext ), uno::UNO_QUERY_THROW );
593 uno::Reference< msforms::XControl > xControl( xControlProvider->createControl( xControlShape, getModel() ) );
606 uno::Reference< container::XNameAccess > xFormControls(
getFormControls() );
607 if ( xFormControls.is() )
608 return xFormControls->hasByName( aName );
612 uno::Reference< container::XNameAccess >
615 uno::Reference< container::XNameAccess > xFormControls;
618 uno::Reference< drawing::XDrawPageSupplier > xDrawPageSupplier(
mxTextDocument, uno::UNO_QUERY_THROW );
619 uno::Reference< form::XFormsSupplier > xFormSupplier( xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY_THROW );
620 uno::Reference< container::XIndexAccess > xIndexAccess( xFormSupplier->getForms(), uno::UNO_QUERY_THROW );
624 xFormControls.set( xIndexAccess->getByIndex(0), uno::UNO_QUERY_THROW );
626 catch(
const uno::Exception&)
629 return xFormControls;
637 return "{82154424-0FBF-11d4-8313-005004526AB4}";
645 return "{82154428-0FBF-11D4-8313-005004526AB4}";
652 { word::XDocumentOutgoing::static_type(),
653 "{82154429-0FBF-11D4-8313-005004526AB4}"
667 i->Call(Method, Arguments);
671 uno::Reference<XConnectionPoint> SAL_CALL
674 uno::Reference<XConnectionPoint> xCP(
new SwVbaDocumentOutgoingConnectionPoint(
this));
680 SwVbaDocumentOutgoingConnectionPoint::SwVbaDocumentOutgoingConnectionPoint(
SwVbaDocument* pDoc ) :
688 SwVbaDocumentOutgoingConnectionPoint::Advise(
const uno::Reference< XSink >& Sink )
690 return mpDoc->AddSink(Sink);
694 SwVbaDocumentOutgoingConnectionPoint::Unadvise( sal_uInt32 Cookie )
696 mpDoc->RemoveSink( Cookie );
699 uno::Sequence< OUString >
704 "ooo.vba.word.Document"
709 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
711 css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any>
const& args)
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * Writer_SwVbaDocument_get_implementation(css::uno::XComponentContext *context, css::uno::Sequence< css::uno::Any > const &args)
virtual sal_Bool SAL_CALL hasMethod(const OUString &aName) override
virtual OUString SAL_CALL getIID() override
uno::Reference< style::XStyle > getDefaultParagraphStyle(const uno::Reference< frame::XModel > &xModel)
css::uno::Reference< css::text::XTextDocument > mxTextDocument
virtual css::uno::Sequence< OUString > getServiceNames() override
static rtl::Reference< SwVbaMailMerge > const & get(const css::uno::Reference< ooo::vba::XHelperInterface > &xParent, const css::uno::Reference< css::uno::XComponentContext > &xContext)
virtual ::sal_Int32 SAL_CALL getHyphenationZone() override
virtual void SAL_CALL SaveAs2000(const css::uno::Any &FileName, const css::uno::Any &FileFormat, const css::uno::Any &LockComments, const css::uno::Any &Password, const css::uno::Any &AddToRecentFiles, const css::uno::Any &WritePassword, const css::uno::Any &ReadOnlyRecommended, const css::uno::Any &EmbedTrueTypeFonts, const css::uno::Any &SaveNativePictureFormat, const css::uno::Any &SaveFormsData, const css::uno::Any &SaveAsAOCELetter) override
virtual css::uno::Any SAL_CALL Paragraphs(const css::uno::Any &rIndex) override
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
WeakReference< XInterface > mxParent
virtual void SAL_CALL setHyphenationZone(::sal_Int32 _hyphenationzone) override
virtual ::sal_Int32 SAL_CALL getConsecutiveHyphensLimit() override
virtual ~SwVbaDocument() override
cppu::ImplInheritanceHelper< VbaDocumentBase, ooo::vba::word::XDocument, ooo::vba::XSinkCaller > SwVbaDocument_BASE
virtual css::uno::Any SAL_CALL Styles(const css::uno::Any &rIndex) override
css::uno::Reference< css::frame::XModel2 > mxModel
virtual void SAL_CALL Protect(::sal_Int32 Type, const css::uno::Any &NOReset, const css::uno::Any &Password, const css::uno::Any &UseIRM, const css::uno::Any &EnforceStyleLock) override
Sequence< OUString > aServiceNames
css::uno::Any getControlShape(std::u16string_view sName)
virtual css::uno::Any SAL_CALL Revisions(const css::uno::Any &aIndex) override
virtual css::uno::Any SAL_CALL Shapes(const css::uno::Any &aIndex) override
virtual css::uno::Reference< ooo::vba::word::XRange > SAL_CALL getContent() override
virtual css::uno::Reference< css::beans::XIntrospectionAccess > SAL_CALL getIntrospection() override
sal_uInt32 AddSink(const css::uno::Reference< ooo::vba::XSink > &xSink)
virtual css::uno::Any SAL_CALL getAttachedTemplate() override
static css::uno::Reference< css::text::XTextRange > getRangeByPosition(const css::uno::Reference< css::text::XText > &rText, sal_Int32 _position)
get a range in a xText by creating a cursor that iterates over the text.
virtual css::uno::Any SAL_CALL Fields(const css::uno::Any &aIndex) override
virtual void SAL_CALL Close(const css::uno::Any &SaveChanges, const css::uno::Any &OriginalFormat, const css::uno::Any &RouteDocument) override
virtual css::uno::Any SAL_CALL Sections(const css::uno::Any &aIndex) override
virtual OUString SAL_CALL GetIIDForClassItselfNotCoclass() override
virtual css::uno::Any SAL_CALL getValue(const OUString &aPropertyName) override
virtual void SAL_CALL setValue(const OUString &aPropertyName, const css::uno::Any &aValue) override
SwVbaDocument(const css::uno::Reference< ooo::vba::XHelperInterface > &xParent, const css::uno::Reference< css::uno::XComponentContext > &m_xContext, css::uno::Reference< css::frame::XModel > const &xModel)
virtual void SAL_CALL Close(const css::uno::Any &bSaveChanges, const css::uno::Any &aFileName, const css::uno::Any &bRouteWorkbook) override
virtual void SAL_CALL SavePreviewPngAs(const css::uno::Any &FileName) override
virtual sal_Bool SAL_CALL getAutoHyphenation() override
uno::Reference< style::XStyle > getCurrentPageStyle(const uno::Reference< frame::XModel > &xModel)
virtual css::uno::Any SAL_CALL invoke(const OUString &aFunctionName, const css::uno::Sequence< css::uno::Any > &aParams, css::uno::Sequence< ::sal_Int16 > &aOutParamIndex, css::uno::Sequence< css::uno::Any > &aOutParam) override
std::vector< css::uno::Reference< ooo::vba::XSink > > mvSinks
virtual void SAL_CALL setProtectionType(::sal_Int32 _protectiontype) override
virtual css::uno::Any SAL_CALL PageSetup() override
virtual css::uno::Reference< ov::XConnectionPoint > SAL_CALL FindConnectionPoint() override
virtual css::uno::Reference< ooo::vba::word::XRange > SAL_CALL Range(const css::uno::Any &rStart, const css::uno::Any &rEnd) override
virtual void SAL_CALL CallSinks(const OUString &Method, css::uno::Sequence< css::uno::Any > &Arguments) override
virtual OUString getServiceImplName() override
virtual void SAL_CALL PrintOut(const css::uno::Any &Background, const css::uno::Any &Append, const css::uno::Any &Range, const css::uno::Any &OutputFileName, const css::uno::Any &From, const css::uno::Any &To, const css::uno::Any &Item, const css::uno::Any &Copies, const css::uno::Any &Pages, const css::uno::Any &PageType, const css::uno::Any &PrintToFile, const css::uno::Any &Collate, const css::uno::Any &FileName, const css::uno::Any &ActivePrinterMacGX, const css::uno::Any &ManualDuplexPrint, const css::uno::Any &PrintZoomColumn, const css::uno::Any &PrintZoomRow, const css::uno::Any &PrintZoomPaperWidth, const css::uno::Any &PrintZoomPaperHeight) override
void RemoveSink(sal_uInt32 nNumber)
virtual css::uno::Any SAL_CALL BuiltInDocumentProperties(const css::uno::Any &index) override
virtual sal_Bool SAL_CALL hasProperty(const OUString &aName) override
virtual void SAL_CALL Activate() override
virtual css::uno::Any SAL_CALL TablesOfContents(const css::uno::Any &aIndex) override
virtual sal_Bool SAL_CALL getUpdateStylesOnOpen() override
void RegisterAutomationDocumentObject(css::uno::Reference< ooo::vba::word::XDocument > const &xDocument)
virtual css::uno::Any SAL_CALL Frames(const css::uno::Any &aIndex) override
virtual void SAL_CALL setAttachedTemplate(const css::uno::Any &_attachedtemplate) override
virtual void SAL_CALL Activate() override
bool SetURL(std::u16string_view rTheAbsURIRef, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8)
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
SwDocShell * getDocShell(const uno::Reference< frame::XModel > &xModel)
virtual css::uno::Any SAL_CALL FormFields(const css::uno::Any &aIndex) override
virtual void SAL_CALL ClosePrintPreview() override
void RegisterAutomationDocumentEventsCaller(css::uno::Reference< ooo::vba::XSinkCaller > const &xCaller)
css::uno::Reference< css::container::XNameAccess > getFormControls() const
virtual css::uno::Reference< ooo::vba::word::XMailMerge > SAL_CALL getMailMerge() override
#define SAL_INFO(area, stream)
INetProtocol GetProtocol() const
virtual void SAL_CALL setUpdateStylesOnOpen(sal_Bool _updatestylesonopen) override
Reference< XComponentContext > getProcessComponentContext()
#define ERRCODE_BASIC_METHOD_FAILED
bool Append(std::u16string_view rTheSegment, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8)
virtual void SAL_CALL SaveAs(const css::uno::Any &FileName, const css::uno::Any &FileFormat, const css::uno::Any &LockComments, const css::uno::Any &Password, const css::uno::Any &AddToRecentFiles, const css::uno::Any &WritePassword, const css::uno::Any &ReadOnlyRecommended, const css::uno::Any &EmbedTrueTypeFonts, const css::uno::Any &SaveNativePictureFormat, const css::uno::Any &SaveFormsData, const css::uno::Any &SaveAsAOCELetter, const css::uno::Any &Encoding, const css::uno::Any &InsertLineBreaks, const css::uno::Any &AllowSubstitutions, const css::uno::Any &LineEnding, const css::uno::Any &AddBiDiMarks) override
virtual ::sal_Int32 SAL_CALL getProtectionType() override
virtual void SAL_CALL PrintPreview() override
Reference< XModel > xModel
virtual css::uno::Any SAL_CALL Tables(const css::uno::Any &aIndex) override
virtual css::uno::Any SAL_CALL CustomDocumentProperties(const css::uno::Any &index) override
void dispatchRequests(const uno::Reference< frame::XModel > &xModel, const OUString &aUrl, const uno::Sequence< beans::PropertyValue > &sProps)
virtual void SAL_CALL setConsecutiveHyphensLimit(::sal_Int32 _consecutivehyphenslimit) override
virtual css::uno::Any SAL_CALL Variables(const css::uno::Any &rIndex) override
virtual ov::TypeAndIID SAL_CALL GetConnectionPoint() override
virtual css::uno::Any SAL_CALL Bookmarks(const css::uno::Any &rIndex) override
virtual void SAL_CALL setAutoHyphenation(sal_Bool _autohyphenation) override