xref: /AOO41X/main/basctl/source/basicide/scriptdocument.cxx (revision 0848378beb0d0fcd9a9bf3cafa6204dbc20d39f7)
131598a22SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
331598a22SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
431598a22SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
531598a22SAndrew Rist  * distributed with this work for additional information
631598a22SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
731598a22SAndrew Rist  * to you under the Apache License, Version 2.0 (the
831598a22SAndrew Rist  * "License"); you may not use this file except in compliance
931598a22SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
1131598a22SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
1331598a22SAndrew Rist  * Unless required by applicable law or agreed to in writing,
1431598a22SAndrew Rist  * software distributed under the License is distributed on an
1531598a22SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1631598a22SAndrew Rist  * KIND, either express or implied.  See the License for the
1731598a22SAndrew Rist  * specific language governing permissions and limitations
1831598a22SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
2031598a22SAndrew Rist  *************************************************************/
2131598a22SAndrew Rist 
2231598a22SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_basctl.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "scriptdocument.hxx"
28cdf0e10cSrcweir #include "basobj.hxx"
29cdf0e10cSrcweir #include "basidesh.hrc"
30cdf0e10cSrcweir #include "iderid.hxx"
31cdf0e10cSrcweir #include "dlgeddef.hxx"
32cdf0e10cSrcweir #include "localizationmgr.hxx"
33cdf0e10cSrcweir #include "doceventnotifier.hxx"
34cdf0e10cSrcweir #include "documentenumeration.hxx"
35cdf0e10cSrcweir 
36cdf0e10cSrcweir /** === begin UNO includes === **/
37cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
38cdf0e10cSrcweir #include <com/sun/star/script/XLibraryContainer2.hpp>
39cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
40cdf0e10cSrcweir #include <com/sun/star/uri/XUriReferenceFactory.hpp>
41cdf0e10cSrcweir #include <com/sun/star/util/XMacroExpander.hpp>
42cdf0e10cSrcweir #include <com/sun/star/document/MacroExecMode.hpp>
43cdf0e10cSrcweir #include <com/sun/star/document/XEventBroadcaster.hpp>
44cdf0e10cSrcweir #include <com/sun/star/frame/XStorable.hpp>
45cdf0e10cSrcweir #include <com/sun/star/util/XModifiable.hpp>
46cdf0e10cSrcweir #include <com/sun/star/frame/XDispatchProvider.hpp>
47cdf0e10cSrcweir #include <com/sun/star/frame/FrameSearchFlag.hpp>
48cdf0e10cSrcweir #include <com/sun/star/frame/XDesktop.hpp>
49cdf0e10cSrcweir #include <com/sun/star/frame/XModel2.hpp>
50cdf0e10cSrcweir #include <com/sun/star/awt/XWindow2.hpp>
51cdf0e10cSrcweir #include <com/sun/star/document/XEmbeddedScripts.hpp>
52cdf0e10cSrcweir #include <com/sun/star/script/vba/XVBACompatibility.hpp>
53cdf0e10cSrcweir #include <com/sun/star/script/vba/XVBAModuleInfo.hpp>
54cdf0e10cSrcweir /** === end UNO includes === **/
55cdf0e10cSrcweir 
56cdf0e10cSrcweir #include <sfx2/objsh.hxx>
57cdf0e10cSrcweir #include <sfx2/app.hxx>
58cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
59cdf0e10cSrcweir #include <sfx2/bindings.hxx>
60cdf0e10cSrcweir #include <sfx2/docfile.hxx>
61cdf0e10cSrcweir 
62cdf0e10cSrcweir #include <vcl/svapp.hxx>
63cdf0e10cSrcweir 
64cdf0e10cSrcweir #include <basic/basicmanagerrepository.hxx>
65cdf0e10cSrcweir 
66cdf0e10cSrcweir #include <xmlscript/xmldlg_imexp.hxx>
67cdf0e10cSrcweir 
68cdf0e10cSrcweir #include <unotools/syslocale.hxx>
69cdf0e10cSrcweir 
70cdf0e10cSrcweir #include <unotools/collatorwrapper.hxx>
71cdf0e10cSrcweir 
72cdf0e10cSrcweir #include <tools/diagnose_ex.h>
73cdf0e10cSrcweir #include <tools/urlobj.hxx>
74cdf0e10cSrcweir 
75cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
76cdf0e10cSrcweir #include <comphelper/documentinfo.hxx>
77cdf0e10cSrcweir #include <comphelper/componentcontext.hxx>
78cdf0e10cSrcweir 
79cdf0e10cSrcweir #include <vos/mutex.hxx>
80cdf0e10cSrcweir 
81cdf0e10cSrcweir #include <cppuhelper/implbase1.hxx>
82cdf0e10cSrcweir 
83cdf0e10cSrcweir #include <rtl/uri.hxx>
84cdf0e10cSrcweir #include <rtl/bootstrap.hxx>
85cdf0e10cSrcweir 
86cdf0e10cSrcweir #include <osl/process.h>
87cdf0e10cSrcweir #include <osl/file.hxx>
88cdf0e10cSrcweir 
89cdf0e10cSrcweir #include <algorithm>
90cdf0e10cSrcweir #include <functional>
91cdf0e10cSrcweir #include <set>
92cdf0e10cSrcweir 
93cdf0e10cSrcweir //........................................................................
94cdf0e10cSrcweir namespace basctl
95cdf0e10cSrcweir {
96cdf0e10cSrcweir //........................................................................
97cdf0e10cSrcweir 
98cdf0e10cSrcweir     /** === begin UNO using === **/
99cdf0e10cSrcweir     using ::com::sun::star::uno::Sequence;
100cdf0e10cSrcweir     using ::com::sun::star::uno::Reference;
101cdf0e10cSrcweir     using ::com::sun::star::frame::XModel;
102cdf0e10cSrcweir     using ::com::sun::star::beans::XPropertySet;
103cdf0e10cSrcweir     using ::com::sun::star::script::XLibraryContainer;
104cdf0e10cSrcweir     using ::com::sun::star::uno::UNO_QUERY_THROW;
105cdf0e10cSrcweir     using ::com::sun::star::uno::UNO_SET_THROW;
106cdf0e10cSrcweir     using ::com::sun::star::beans::XPropertySetInfo;
107cdf0e10cSrcweir     using ::com::sun::star::uno::Exception;
108cdf0e10cSrcweir     using ::com::sun::star::container::XNameContainer;
109cdf0e10cSrcweir     using ::com::sun::star::container::NoSuchElementException;
110cdf0e10cSrcweir     using ::com::sun::star::uno::UNO_QUERY;
111cdf0e10cSrcweir     using ::com::sun::star::task::XStatusIndicator;
112cdf0e10cSrcweir     using ::com::sun::star::uno::makeAny;
113cdf0e10cSrcweir     using ::com::sun::star::script::XLibraryContainer2;
114cdf0e10cSrcweir     using ::com::sun::star::lang::XMultiServiceFactory;
115cdf0e10cSrcweir     using ::com::sun::star::uri::XUriReferenceFactory;
116cdf0e10cSrcweir     using ::com::sun::star::uri::XUriReference;
117cdf0e10cSrcweir     using ::com::sun::star::uno::XComponentContext;
118cdf0e10cSrcweir     using ::com::sun::star::util::XMacroExpander;
119cdf0e10cSrcweir     using ::com::sun::star::io::XInputStreamProvider;
120cdf0e10cSrcweir     using ::com::sun::star::uno::Any;
121cdf0e10cSrcweir     using ::com::sun::star::io::XInputStream;
122cdf0e10cSrcweir     using ::com::sun::star::frame::XStorable;
123cdf0e10cSrcweir     using ::com::sun::star::util::XModifiable;
124cdf0e10cSrcweir     using ::com::sun::star::frame::XController;
125cdf0e10cSrcweir     using ::com::sun::star::frame::XFrame;
126cdf0e10cSrcweir     using ::com::sun::star::util::URL;
127cdf0e10cSrcweir     using ::com::sun::star::frame::XDispatchProvider;
128cdf0e10cSrcweir     using ::com::sun::star::frame::XDispatch;
129cdf0e10cSrcweir     using ::com::sun::star::beans::PropertyValue;
130cdf0e10cSrcweir     using ::com::sun::star::frame::XDesktop;
131cdf0e10cSrcweir     using ::com::sun::star::container::XEnumerationAccess;
132cdf0e10cSrcweir     using ::com::sun::star::container::XEnumeration;
133cdf0e10cSrcweir     using ::com::sun::star::frame::XModel2;
134cdf0e10cSrcweir     using ::com::sun::star::awt::XWindow2;
135cdf0e10cSrcweir     using ::com::sun::star::document::XEventListener;
136cdf0e10cSrcweir     using ::com::sun::star::lang::EventObject;
137cdf0e10cSrcweir     using ::com::sun::star::uno::RuntimeException;
138cdf0e10cSrcweir     using ::com::sun::star::document::XEventBroadcaster;
139cdf0e10cSrcweir     using ::com::sun::star::document::XEmbeddedScripts;
140cdf0e10cSrcweir     using ::com::sun::star::script::ModuleInfo;
141cdf0e10cSrcweir     using ::com::sun::star::script::vba::XVBACompatibility;
142cdf0e10cSrcweir     using ::com::sun::star::script::vba::XVBAModuleInfo;
143cdf0e10cSrcweir     /** === end UNO using === **/
144cdf0e10cSrcweir     namespace MacroExecMode = ::com::sun::star::document::MacroExecMode;
145cdf0e10cSrcweir     namespace FrameSearchFlag = ::com::sun::star::frame::FrameSearchFlag;
146cdf0e10cSrcweir 
147cdf0e10cSrcweir     //====================================================================
148cdf0e10cSrcweir     //= helper
149cdf0e10cSrcweir     //====================================================================
150cdf0e10cSrcweir     namespace
151cdf0e10cSrcweir     {
152cdf0e10cSrcweir         //................................................................
StringCompareLessThan(const String & lhs,const String & rhs)153cdf0e10cSrcweir         static bool StringCompareLessThan( const String& lhs, const String& rhs )
154cdf0e10cSrcweir         {
155cdf0e10cSrcweir 		    return ( lhs.CompareIgnoreCaseToAscii( rhs ) == COMPARE_LESS );
156cdf0e10cSrcweir         }
157cdf0e10cSrcweir 
158cdf0e10cSrcweir         //................................................................
159cdf0e10cSrcweir         class FilterDocuments : public docs::IDocumentDescriptorFilter
160cdf0e10cSrcweir         {
161cdf0e10cSrcweir         public:
FilterDocuments(bool _bFilterInvisible)162cdf0e10cSrcweir             FilterDocuments( bool _bFilterInvisible ) : m_bFilterInvisible( _bFilterInvisible ) { }
163cdf0e10cSrcweir 
164cdf0e10cSrcweir             virtual bool    includeDocument( const docs::DocumentDescriptor& _rDocument ) const;
165cdf0e10cSrcweir 
166cdf0e10cSrcweir         private:
167cdf0e10cSrcweir             bool    impl_isDocumentVisible_nothrow( const docs::DocumentDescriptor& _rDocument ) const;
168cdf0e10cSrcweir 
169cdf0e10cSrcweir         private:
170cdf0e10cSrcweir             bool    m_bFilterInvisible;
171cdf0e10cSrcweir         };
172cdf0e10cSrcweir 
173cdf0e10cSrcweir         //................................................................
impl_isDocumentVisible_nothrow(const docs::DocumentDescriptor & _rDocument) const174cdf0e10cSrcweir         bool FilterDocuments::impl_isDocumentVisible_nothrow( const docs::DocumentDescriptor& _rDocument ) const
175cdf0e10cSrcweir         {
176cdf0e10cSrcweir             try
177cdf0e10cSrcweir             {
178cdf0e10cSrcweir                 for (   docs::Controllers::const_iterator controller = _rDocument.aControllers.begin();
179cdf0e10cSrcweir                         controller != _rDocument.aControllers.end();
180cdf0e10cSrcweir                         ++controller
181cdf0e10cSrcweir                     )
182cdf0e10cSrcweir                 {
183cdf0e10cSrcweir                     Reference< XFrame > xFrame( (*controller)->getFrame(), UNO_SET_THROW );
184cdf0e10cSrcweir                     Reference< XWindow2 > xContainer( xFrame->getContainerWindow(), UNO_QUERY_THROW );
185cdf0e10cSrcweir                     if ( xContainer->isVisible() )
186cdf0e10cSrcweir                         return true;
187cdf0e10cSrcweir                 }
188cdf0e10cSrcweir             }
189cdf0e10cSrcweir             catch( const Exception& )
190cdf0e10cSrcweir             {
191cdf0e10cSrcweir             	DBG_UNHANDLED_EXCEPTION();
192cdf0e10cSrcweir             }
193cdf0e10cSrcweir             return false;
194cdf0e10cSrcweir         }
195cdf0e10cSrcweir 
196cdf0e10cSrcweir         //................................................................
includeDocument(const docs::DocumentDescriptor & _rDocument) const197cdf0e10cSrcweir         bool FilterDocuments::includeDocument( const docs::DocumentDescriptor& _rDocument ) const
198cdf0e10cSrcweir         {
199cdf0e10cSrcweir             Reference< XEmbeddedScripts > xScripts( _rDocument.xModel, UNO_QUERY );
200cdf0e10cSrcweir             if ( !xScripts.is() )
201cdf0e10cSrcweir                 return false;
202cdf0e10cSrcweir             if ( !m_bFilterInvisible || impl_isDocumentVisible_nothrow( _rDocument ) )
203cdf0e10cSrcweir                 return true;
204cdf0e10cSrcweir             return false;
205cdf0e10cSrcweir         }
206cdf0e10cSrcweir 
207cdf0e10cSrcweir         //................................................................
lcl_getAllModels_throw(docs::Documents & _out_rModels,bool _bVisibleOnly)208cdf0e10cSrcweir         void lcl_getAllModels_throw( docs::Documents& _out_rModels, bool _bVisibleOnly )
209cdf0e10cSrcweir         {
210cdf0e10cSrcweir             _out_rModels.clear();
211cdf0e10cSrcweir 
212cdf0e10cSrcweir             ::comphelper::ComponentContext aContext( ::comphelper::getProcessServiceFactory() );
213cdf0e10cSrcweir             FilterDocuments aFilter( _bVisibleOnly );
214cdf0e10cSrcweir             docs::DocumentEnumeration aEnum( aContext, &aFilter );
215cdf0e10cSrcweir 
216cdf0e10cSrcweir             aEnum.getDocuments( _out_rModels );
217cdf0e10cSrcweir         }
218cdf0e10cSrcweir     }
219cdf0e10cSrcweir 
220cdf0e10cSrcweir     //====================================================================
221cdf0e10cSrcweir     //= ScriptDocument_Impl - declaration
222cdf0e10cSrcweir     //====================================================================
223cdf0e10cSrcweir     class ScriptDocument_Impl : public DocumentEventListener
224cdf0e10cSrcweir     {
225cdf0e10cSrcweir     private:
226cdf0e10cSrcweir         bool                            m_bIsApplication;
227cdf0e10cSrcweir         bool                            m_bValid;
228cdf0e10cSrcweir         bool                            m_bDocumentClosed;
229cdf0e10cSrcweir         Reference< XModel >             m_xDocument;
230cdf0e10cSrcweir         Reference< XModifiable >        m_xDocModify;
231cdf0e10cSrcweir         Reference< XEmbeddedScripts >   m_xScriptAccess;
232cdf0e10cSrcweir         ::std::auto_ptr< DocumentEventNotifier >
233cdf0e10cSrcweir                                         m_pDocListener;
234cdf0e10cSrcweir 
235cdf0e10cSrcweir     public:
236cdf0e10cSrcweir         ScriptDocument_Impl( );
237cdf0e10cSrcweir         ScriptDocument_Impl( const Reference< XModel >& _rxDocument );
238cdf0e10cSrcweir         ~ScriptDocument_Impl();
239cdf0e10cSrcweir 
240cdf0e10cSrcweir         /** determines whether the instance refers to a valid "document" with script and
241cdf0e10cSrcweir             dialog libraries
242cdf0e10cSrcweir         */
isValid() const243cdf0e10cSrcweir         inline  bool    isValid()       const   { return m_bValid; }
244cdf0e10cSrcweir         /** determines whether the instance refers to a non-closed document
245cdf0e10cSrcweir         */
isAlive() const246cdf0e10cSrcweir         inline  bool    isAlive()       const   { return m_bValid ? ( m_bIsApplication ? true : !m_bDocumentClosed ) : false; }
247cdf0e10cSrcweir         /// determines whether the "document" refers to the application in real
isApplication() const248cdf0e10cSrcweir         inline  bool    isApplication() const   { return m_bValid && m_bIsApplication; }
249cdf0e10cSrcweir         /// determines whether the document refers to a real document (instead of the application)
isDocument() const250cdf0e10cSrcweir         inline  bool    isDocument()    const   { return m_bValid && !m_bIsApplication; }
251cdf0e10cSrcweir 
252cdf0e10cSrcweir         /** invalidates the instance
253cdf0e10cSrcweir         */
254cdf0e10cSrcweir         void    invalidate();
255cdf0e10cSrcweir 
256cdf0e10cSrcweir         const Reference< XModel >&
getDocumentRef() const257cdf0e10cSrcweir                         getDocumentRef() const { return m_xDocument; }
258cdf0e10cSrcweir 
259cdf0e10cSrcweir         /// returns a library container belonging to the document
260cdf0e10cSrcweir         Reference< XLibraryContainer >
261cdf0e10cSrcweir                     getLibraryContainer( LibraryContainerType _eType ) const;
262cdf0e10cSrcweir 
263cdf0e10cSrcweir         /// determines whether a given library is part of the shared installation
264cdf0e10cSrcweir         bool        isLibraryShared( const ::rtl::OUString& _rLibName, LibraryContainerType _eType );
265cdf0e10cSrcweir 
266cdf0e10cSrcweir         /** returns the current frame of the document
267cdf0e10cSrcweir 
268cdf0e10cSrcweir             To be called for documents only, not for the application.
269cdf0e10cSrcweir 
270cdf0e10cSrcweir             If <FALSE/> is returned, an assertion will be raised in non-product builds.
271cdf0e10cSrcweir         */
272cdf0e10cSrcweir         bool        getCurrentFrame( Reference< XFrame >& _out_rxFrame ) const;
273cdf0e10cSrcweir 
274cdf0e10cSrcweir         // versions with the same signature/semantics as in ScriptDocument itself
275cdf0e10cSrcweir         bool        isReadOnly() const;
276cdf0e10cSrcweir         bool        isInVBAMode() const;
277cdf0e10cSrcweir         BasicManager*
278cdf0e10cSrcweir                     getBasicManager() const;
279cdf0e10cSrcweir         Reference< XModel >
280cdf0e10cSrcweir                     getDocument() const;
281cdf0e10cSrcweir         void        setDocumentModified() const;
282cdf0e10cSrcweir         bool        isDocumentModified() const;
283cdf0e10cSrcweir         bool        saveDocument( const Reference< XStatusIndicator >& _rxStatusIndicator ) const;
284cdf0e10cSrcweir 
285cdf0e10cSrcweir         ::rtl::OUString
286cdf0e10cSrcweir                     getTitle() const;
287cdf0e10cSrcweir         ::rtl::OUString
288cdf0e10cSrcweir                     getURL() const;
289cdf0e10cSrcweir 
290cdf0e10cSrcweir         bool        allowMacros() const;
291cdf0e10cSrcweir 
292cdf0e10cSrcweir         Reference< XNameContainer >
293cdf0e10cSrcweir                     getLibrary( LibraryContainerType _eType, const ::rtl::OUString& _rLibName, bool _bLoadLibrary ) const
294cdf0e10cSrcweir                         SAL_THROW((NoSuchElementException));
295cdf0e10cSrcweir         bool        hasLibrary( LibraryContainerType _eType, const ::rtl::OUString& _rLibName ) const;
296cdf0e10cSrcweir         Reference< XNameContainer >
297cdf0e10cSrcweir                     getOrCreateLibrary( LibraryContainerType _eType, const ::rtl::OUString& _rLibName ) const;
298cdf0e10cSrcweir 
299cdf0e10cSrcweir         void        loadLibraryIfExists( LibraryContainerType _eType, const ::rtl::OUString& _rLibrary );
300cdf0e10cSrcweir 
301cdf0e10cSrcweir         bool        removeModuleOrDialog( LibraryContainerType _eType, const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModuleName );
302cdf0e10cSrcweir         bool        hasModuleOrDialog( LibraryContainerType _eType, const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModName ) const;
303cdf0e10cSrcweir         bool        getModuleOrDialog( LibraryContainerType _eType, const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rObjectName, Any& _out_rModuleOrDialog );
304cdf0e10cSrcweir         bool        renameModuleOrDialog( LibraryContainerType _eType, const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rOldName, const ::rtl::OUString& _rNewName, const Reference< XNameContainer >& _rxExistingDialogModel );
305cdf0e10cSrcweir         bool        createModule( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModName, bool _bCreateMain, ::rtl::OUString& _out_rNewModuleCode ) const;
306cdf0e10cSrcweir         bool        insertModuleOrDialog( LibraryContainerType _eType, const ::rtl::OUString& _rObjectName, const ::rtl::OUString& _rModName, const Any& _rElement ) const;
307cdf0e10cSrcweir         bool        updateModule( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModName, const ::rtl::OUString& _rModuleCode ) const;
308cdf0e10cSrcweir         bool        createDialog( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rDialogName, Reference< XInputStreamProvider >& _out_rDialogProvider ) const;
309cdf0e10cSrcweir 
310cdf0e10cSrcweir     protected:
311cdf0e10cSrcweir         // DocumentEventListener
312cdf0e10cSrcweir         virtual void onDocumentCreated( const ScriptDocument& _rDocument );
313cdf0e10cSrcweir         virtual void onDocumentOpened( const ScriptDocument& _rDocument );
314cdf0e10cSrcweir         virtual void onDocumentSave( const ScriptDocument& _rDocument );
315cdf0e10cSrcweir         virtual void onDocumentSaveDone( const ScriptDocument& _rDocument );
316cdf0e10cSrcweir         virtual void onDocumentSaveAs( const ScriptDocument& _rDocument );
317cdf0e10cSrcweir         virtual void onDocumentSaveAsDone( const ScriptDocument& _rDocument );
318cdf0e10cSrcweir         virtual void onDocumentClosed( const ScriptDocument& _rDocument );
319cdf0e10cSrcweir         virtual void onDocumentTitleChanged( const ScriptDocument& _rDocument );
320cdf0e10cSrcweir         virtual void onDocumentModeChanged( const ScriptDocument& _rDocument );
321cdf0e10cSrcweir 
322cdf0e10cSrcweir     private:
323cdf0e10cSrcweir         bool        impl_initDocument_nothrow( const Reference< XModel >& _rxModel );
324cdf0e10cSrcweir     };
325cdf0e10cSrcweir 
326cdf0e10cSrcweir     //====================================================================
327cdf0e10cSrcweir     //= ScriptDocument_Impl - implementation
328cdf0e10cSrcweir     //====================================================================
329cdf0e10cSrcweir     //--------------------------------------------------------------------
ScriptDocument_Impl()330cdf0e10cSrcweir     ScriptDocument_Impl::ScriptDocument_Impl()
331cdf0e10cSrcweir         :m_bIsApplication( true )
332cdf0e10cSrcweir         ,m_bValid( true )
333cdf0e10cSrcweir         ,m_bDocumentClosed( false )
334cdf0e10cSrcweir     {
335cdf0e10cSrcweir     }
336cdf0e10cSrcweir 
337cdf0e10cSrcweir     //--------------------------------------------------------------------
ScriptDocument_Impl(const Reference<XModel> & _rxDocument)338cdf0e10cSrcweir     ScriptDocument_Impl::ScriptDocument_Impl( const Reference< XModel >& _rxDocument )
339cdf0e10cSrcweir         :m_bIsApplication( false )
340cdf0e10cSrcweir         ,m_bValid( false )
341cdf0e10cSrcweir         ,m_bDocumentClosed( false )
342cdf0e10cSrcweir     {
343cdf0e10cSrcweir         if ( _rxDocument.is() )
344cdf0e10cSrcweir         {
345cdf0e10cSrcweir             if ( impl_initDocument_nothrow( _rxDocument ) )
346cdf0e10cSrcweir             {
347cdf0e10cSrcweir             }
348cdf0e10cSrcweir         }
349cdf0e10cSrcweir     }
350cdf0e10cSrcweir 
351cdf0e10cSrcweir     //--------------------------------------------------------------------
~ScriptDocument_Impl()352cdf0e10cSrcweir     ScriptDocument_Impl::~ScriptDocument_Impl()
353cdf0e10cSrcweir     {
354cdf0e10cSrcweir         invalidate();
355cdf0e10cSrcweir     }
356cdf0e10cSrcweir 
357cdf0e10cSrcweir     //--------------------------------------------------------------------
invalidate()358cdf0e10cSrcweir     void ScriptDocument_Impl::invalidate()
359cdf0e10cSrcweir     {
360cdf0e10cSrcweir         m_bIsApplication = false;
361cdf0e10cSrcweir         m_bValid = false;
362cdf0e10cSrcweir         m_bDocumentClosed = false;
363cdf0e10cSrcweir 
364cdf0e10cSrcweir         m_xDocument.clear();
365cdf0e10cSrcweir         m_xDocModify.clear();
366cdf0e10cSrcweir         m_xScriptAccess.clear();
367cdf0e10cSrcweir 
368cdf0e10cSrcweir         if ( m_pDocListener.get() )
369cdf0e10cSrcweir             m_pDocListener->dispose();
370cdf0e10cSrcweir     }
371cdf0e10cSrcweir 
372cdf0e10cSrcweir     //--------------------------------------------------------------------
impl_initDocument_nothrow(const Reference<XModel> & _rxModel)373cdf0e10cSrcweir     bool ScriptDocument_Impl::impl_initDocument_nothrow( const Reference< XModel >& _rxModel )
374cdf0e10cSrcweir     {
375cdf0e10cSrcweir         try
376cdf0e10cSrcweir         {
377cdf0e10cSrcweir             m_xDocument.set     ( _rxModel, UNO_SET_THROW );
378cdf0e10cSrcweir             m_xDocModify.set    ( _rxModel, UNO_QUERY_THROW );
379cdf0e10cSrcweir             m_xScriptAccess.set ( _rxModel, UNO_QUERY );
380cdf0e10cSrcweir 
381cdf0e10cSrcweir             m_bValid = m_xScriptAccess.is();
382cdf0e10cSrcweir 
383cdf0e10cSrcweir             if ( m_bValid )
384cdf0e10cSrcweir                 m_pDocListener.reset( new DocumentEventNotifier( *this, _rxModel ) );
385cdf0e10cSrcweir         }
386cdf0e10cSrcweir         catch( const Exception& )
387cdf0e10cSrcweir         {
388cdf0e10cSrcweir             DBG_UNHANDLED_EXCEPTION();
389cdf0e10cSrcweir             m_bValid = false;
390cdf0e10cSrcweir         }
391cdf0e10cSrcweir 
392cdf0e10cSrcweir         if ( !m_bValid )
393cdf0e10cSrcweir         {
394cdf0e10cSrcweir             invalidate();
395cdf0e10cSrcweir         }
396cdf0e10cSrcweir 
397cdf0e10cSrcweir         return m_bValid;
398cdf0e10cSrcweir     }
399cdf0e10cSrcweir     //--------------------------------------------------------------------
getLibraryContainer(LibraryContainerType _eType) const400cdf0e10cSrcweir     Reference< XLibraryContainer > ScriptDocument_Impl::getLibraryContainer( LibraryContainerType _eType ) const
401cdf0e10cSrcweir     {
402cdf0e10cSrcweir         OSL_ENSURE( isValid(), "ScriptDocument_Impl::getLibraryContainer: invalid!" );
403cdf0e10cSrcweir 
404cdf0e10cSrcweir         Reference< XLibraryContainer > xContainer;
405cdf0e10cSrcweir         if ( !isValid() )
406cdf0e10cSrcweir             return xContainer;
407cdf0e10cSrcweir 
408cdf0e10cSrcweir         try
409cdf0e10cSrcweir         {
410cdf0e10cSrcweir             if ( isApplication() )
411cdf0e10cSrcweir                 xContainer.set( _eType == E_SCRIPTS ? SFX_APP()->GetBasicContainer() : SFX_APP()->GetDialogContainer(), UNO_QUERY_THROW );
412cdf0e10cSrcweir             else
413cdf0e10cSrcweir             {
414cdf0e10cSrcweir                 xContainer.set(
415cdf0e10cSrcweir                     _eType == E_SCRIPTS ? m_xScriptAccess->getBasicLibraries() : m_xScriptAccess->getDialogLibraries(),
416cdf0e10cSrcweir                     UNO_QUERY_THROW );
417cdf0e10cSrcweir             }
418cdf0e10cSrcweir         }
419cdf0e10cSrcweir         catch( const Exception& )
420cdf0e10cSrcweir         {
421cdf0e10cSrcweir             DBG_UNHANDLED_EXCEPTION();
422cdf0e10cSrcweir         }
423cdf0e10cSrcweir         return xContainer;
424cdf0e10cSrcweir     }
425cdf0e10cSrcweir 
426cdf0e10cSrcweir     //--------------------------------------------------------------------
isReadOnly() const427cdf0e10cSrcweir     bool ScriptDocument_Impl::isReadOnly() const
428cdf0e10cSrcweir     {
429cdf0e10cSrcweir         OSL_ENSURE( isValid(), "ScriptDocument_Impl::isReadOnly: invalid state!" );
430cdf0e10cSrcweir         OSL_ENSURE( !isApplication(), "ScriptDocument_Impl::isReadOnly: not allowed to be called for the application!" );
431cdf0e10cSrcweir 
432cdf0e10cSrcweir         bool bIsReadOnly = true;
433cdf0e10cSrcweir         if ( isValid() && !isApplication() )
434cdf0e10cSrcweir         {
435cdf0e10cSrcweir             try
436cdf0e10cSrcweir             {
437cdf0e10cSrcweir                 // note that XStorable is required by the OfficeDocument service
438cdf0e10cSrcweir                 Reference< XStorable > xDocStorable( m_xDocument, UNO_QUERY_THROW );
439cdf0e10cSrcweir                 bIsReadOnly = xDocStorable->isReadonly();
440cdf0e10cSrcweir             }
441cdf0e10cSrcweir             catch( const Exception& )
442cdf0e10cSrcweir             {
443cdf0e10cSrcweir         	    DBG_UNHANDLED_EXCEPTION();
444cdf0e10cSrcweir             }
445cdf0e10cSrcweir         }
446cdf0e10cSrcweir         return bIsReadOnly;
447cdf0e10cSrcweir     }
448cdf0e10cSrcweir 
isInVBAMode() const449cdf0e10cSrcweir     bool ScriptDocument_Impl::isInVBAMode() const
450cdf0e10cSrcweir     {
451cdf0e10cSrcweir         bool bResult = false;
452cdf0e10cSrcweir #ifdef FUTURE_VBA_CWS
453cdf0e10cSrcweir         if ( !isApplication() )
454cdf0e10cSrcweir         {
455cdf0e10cSrcweir             Reference< XVBACompatibility > xVBACompat( getLibraryContainer( E_SCRIPTS ), UNO_QUERY );
456cdf0e10cSrcweir             if ( xVBACompat.is() )
457cdf0e10cSrcweir                 bResult = xVBACompat->getVBACompatibilityMode();
458cdf0e10cSrcweir         }
459cdf0e10cSrcweir #endif
460cdf0e10cSrcweir         return bResult;
461cdf0e10cSrcweir     }
462cdf0e10cSrcweir 
463cdf0e10cSrcweir     //--------------------------------------------------------------------
getBasicManager() const464cdf0e10cSrcweir     BasicManager* ScriptDocument_Impl::getBasicManager() const
465cdf0e10cSrcweir     {
466cdf0e10cSrcweir         OSL_ENSURE( isValid(), "ScriptDocument_Impl::getBasicManager: invalid state!" );
467cdf0e10cSrcweir         if ( !isValid() )
468cdf0e10cSrcweir             return NULL;
469cdf0e10cSrcweir 
470cdf0e10cSrcweir         if ( isApplication() )
471cdf0e10cSrcweir             return SFX_APP()->GetBasicManager();
472cdf0e10cSrcweir 
473cdf0e10cSrcweir         return ::basic::BasicManagerRepository::getDocumentBasicManager( m_xDocument );
474cdf0e10cSrcweir     }
475cdf0e10cSrcweir 
476cdf0e10cSrcweir     //--------------------------------------------------------------------
getDocument() const477cdf0e10cSrcweir     Reference< XModel > ScriptDocument_Impl::getDocument() const
478cdf0e10cSrcweir     {
479cdf0e10cSrcweir         OSL_ENSURE( isValid(), "ScriptDocument_Impl::getDocument: invalid state!" );
480cdf0e10cSrcweir         OSL_ENSURE( isDocument(), "ScriptDocument_Impl::getDocument: for documents only!" );
481cdf0e10cSrcweir         if ( !isValid() || !isDocument() )
482cdf0e10cSrcweir             return NULL;
483cdf0e10cSrcweir 
484cdf0e10cSrcweir         return m_xDocument;
485cdf0e10cSrcweir     }
486cdf0e10cSrcweir 
487cdf0e10cSrcweir     //--------------------------------------------------------------------
getLibrary(LibraryContainerType _eType,const::rtl::OUString & _rLibName,bool _bLoadLibrary) const488cdf0e10cSrcweir     Reference< XNameContainer > ScriptDocument_Impl::getLibrary( LibraryContainerType _eType, const ::rtl::OUString& _rLibName, bool _bLoadLibrary ) const
489cdf0e10cSrcweir         SAL_THROW((NoSuchElementException))
490cdf0e10cSrcweir     {
491cdf0e10cSrcweir         OSL_ENSURE( isValid(), "ScriptDocument_Impl::getLibrary: invalid state!" );
492cdf0e10cSrcweir 
493cdf0e10cSrcweir         Reference< XNameContainer > xContainer;
494cdf0e10cSrcweir         try
495cdf0e10cSrcweir         {
496cdf0e10cSrcweir 	        Reference< XLibraryContainer > xLibContainer = getLibraryContainer( _eType );
497cdf0e10cSrcweir             if ( isValid() )
498cdf0e10cSrcweir             {
499cdf0e10cSrcweir                 if ( xLibContainer.is() )
500cdf0e10cSrcweir                     xContainer.set( xLibContainer->getByName( _rLibName ), UNO_QUERY_THROW );
501cdf0e10cSrcweir             }
502cdf0e10cSrcweir 
503cdf0e10cSrcweir             if ( !xContainer.is() )
504cdf0e10cSrcweir                 throw NoSuchElementException();
505cdf0e10cSrcweir 
506cdf0e10cSrcweir 	        // load library
507cdf0e10cSrcweir 	        if ( _bLoadLibrary && !xLibContainer->isLibraryLoaded( _rLibName ) )
508cdf0e10cSrcweir 		        xLibContainer->loadLibrary( _rLibName );
509cdf0e10cSrcweir         }
510cdf0e10cSrcweir         catch( const NoSuchElementException& )
511cdf0e10cSrcweir         {
512cdf0e10cSrcweir             throw;  // allowed to leave
513cdf0e10cSrcweir         }
514cdf0e10cSrcweir         catch( const Exception& )
515cdf0e10cSrcweir         {
516cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
517cdf0e10cSrcweir         }
518cdf0e10cSrcweir 
519cdf0e10cSrcweir         return xContainer;
520cdf0e10cSrcweir     }
521cdf0e10cSrcweir 
522cdf0e10cSrcweir     //--------------------------------------------------------------------
hasLibrary(LibraryContainerType _eType,const::rtl::OUString & _rLibName) const523cdf0e10cSrcweir     bool ScriptDocument_Impl::hasLibrary( LibraryContainerType _eType, const ::rtl::OUString& _rLibName ) const
524cdf0e10cSrcweir     {
525cdf0e10cSrcweir 	    bool bHas = false;
526cdf0e10cSrcweir         try
527cdf0e10cSrcweir         {
528cdf0e10cSrcweir 	        Reference< XLibraryContainer > xLibContainer = getLibraryContainer( _eType );
529cdf0e10cSrcweir 	        bHas = xLibContainer.is() && xLibContainer->hasByName( _rLibName );
530cdf0e10cSrcweir         }
531cdf0e10cSrcweir         catch( const Exception& )
532cdf0e10cSrcweir         {
533cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
534cdf0e10cSrcweir         }
535cdf0e10cSrcweir         return bHas;
536cdf0e10cSrcweir     }
537cdf0e10cSrcweir 
538cdf0e10cSrcweir     //--------------------------------------------------------------------
getOrCreateLibrary(LibraryContainerType _eType,const::rtl::OUString & _rLibName) const539cdf0e10cSrcweir     Reference< XNameContainer > ScriptDocument_Impl::getOrCreateLibrary( LibraryContainerType _eType, const ::rtl::OUString& _rLibName ) const
540cdf0e10cSrcweir     {
541cdf0e10cSrcweir 	    Reference< XNameContainer > xLibrary;
542cdf0e10cSrcweir         try
543cdf0e10cSrcweir         {
544cdf0e10cSrcweir 	        Reference< XLibraryContainer > xLibContainer( getLibraryContainer( _eType ), UNO_QUERY_THROW );
545cdf0e10cSrcweir             if ( xLibContainer->hasByName( _rLibName ) )
546cdf0e10cSrcweir                 xLibrary.set( xLibContainer->getByName( _rLibName ), UNO_QUERY_THROW );
547cdf0e10cSrcweir             else
548cdf0e10cSrcweir 		        xLibrary.set( xLibContainer->createLibrary( _rLibName ), UNO_QUERY_THROW );
549cdf0e10cSrcweir 
550cdf0e10cSrcweir             if ( !xLibContainer->isLibraryLoaded( _rLibName ) )
551cdf0e10cSrcweir 		        xLibContainer->loadLibrary( _rLibName );
552cdf0e10cSrcweir         }
553cdf0e10cSrcweir         catch( const Exception& )
554cdf0e10cSrcweir         {
555cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
556cdf0e10cSrcweir         }
557cdf0e10cSrcweir         return xLibrary;
558cdf0e10cSrcweir     }
559cdf0e10cSrcweir 
560cdf0e10cSrcweir     //--------------------------------------------------------------------
loadLibraryIfExists(LibraryContainerType _eType,const::rtl::OUString & _rLibrary)561cdf0e10cSrcweir     void ScriptDocument_Impl::loadLibraryIfExists( LibraryContainerType _eType, const ::rtl::OUString& _rLibrary )
562cdf0e10cSrcweir     {
563cdf0e10cSrcweir         try
564cdf0e10cSrcweir         {
565cdf0e10cSrcweir             Reference< XLibraryContainer > xLibContainer( getLibraryContainer( _eType ) );
566cdf0e10cSrcweir 	        if ( xLibContainer.is() && xLibContainer->hasByName( _rLibrary ) && !xLibContainer->isLibraryLoaded( _rLibrary ) )
567cdf0e10cSrcweir                 xLibContainer->loadLibrary( _rLibrary );
568cdf0e10cSrcweir         }
569cdf0e10cSrcweir         catch( const Exception& )
570cdf0e10cSrcweir         {
571cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
572cdf0e10cSrcweir         }
573cdf0e10cSrcweir     }
574cdf0e10cSrcweir 
575cdf0e10cSrcweir     //--------------------------------------------------------------------
removeModuleOrDialog(LibraryContainerType _eType,const::rtl::OUString & _rLibName,const::rtl::OUString & _rModuleName)576cdf0e10cSrcweir     bool ScriptDocument_Impl::removeModuleOrDialog( LibraryContainerType _eType, const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModuleName )
577cdf0e10cSrcweir     {
578cdf0e10cSrcweir         OSL_ENSURE( isValid(), "ScriptDocument_Impl::removeModuleOrDialog: invalid!" );
579cdf0e10cSrcweir         if ( isValid() )
580cdf0e10cSrcweir         {
581cdf0e10cSrcweir             try
582cdf0e10cSrcweir             {
583cdf0e10cSrcweir 	            Reference< XNameContainer > xLib( getLibrary( _eType, _rLibName, sal_True ) );
584cdf0e10cSrcweir 	            if ( xLib.is() )
585cdf0e10cSrcweir 	            {
586cdf0e10cSrcweir 		            xLib->removeByName( _rModuleName );
587cdf0e10cSrcweir                     return true;
588cdf0e10cSrcweir 	            }
589cdf0e10cSrcweir             }
590cdf0e10cSrcweir             catch( const Exception& )
591cdf0e10cSrcweir             {
592cdf0e10cSrcweir             	DBG_UNHANDLED_EXCEPTION();
593cdf0e10cSrcweir             }
594cdf0e10cSrcweir         }
595cdf0e10cSrcweir 		return false;
596cdf0e10cSrcweir     }
597cdf0e10cSrcweir 
598cdf0e10cSrcweir     //--------------------------------------------------------------------
hasModuleOrDialog(LibraryContainerType _eType,const::rtl::OUString & _rLibName,const::rtl::OUString & _rModName) const599cdf0e10cSrcweir     bool ScriptDocument_Impl::hasModuleOrDialog( LibraryContainerType _eType, const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModName ) const
600cdf0e10cSrcweir     {
601cdf0e10cSrcweir         OSL_ENSURE( isValid(), "ScriptDocument_Impl::hasModuleOrDialog: invalid!" );
602cdf0e10cSrcweir         if ( !isValid() )
603cdf0e10cSrcweir             return false;
604cdf0e10cSrcweir 
605cdf0e10cSrcweir         try
606cdf0e10cSrcweir         {
607cdf0e10cSrcweir 	        Reference< XNameContainer > xLib( getLibrary( _eType, _rLibName, sal_True ) );
608cdf0e10cSrcweir 	        if ( xLib.is() )
609cdf0e10cSrcweir 		        return xLib->hasByName( _rModName );
610cdf0e10cSrcweir         }
611cdf0e10cSrcweir         catch( const Exception& )
612cdf0e10cSrcweir         {
613cdf0e10cSrcweir             DBG_UNHANDLED_EXCEPTION();
614cdf0e10cSrcweir         }
615cdf0e10cSrcweir         return false;
616cdf0e10cSrcweir     }
617cdf0e10cSrcweir 
618cdf0e10cSrcweir     //--------------------------------------------------------------------
getModuleOrDialog(LibraryContainerType _eType,const::rtl::OUString & _rLibName,const::rtl::OUString & _rObjectName,Any & _out_rModuleOrDialog)619cdf0e10cSrcweir     bool ScriptDocument_Impl::getModuleOrDialog( LibraryContainerType _eType, const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rObjectName, Any& _out_rModuleOrDialog )
620cdf0e10cSrcweir     {
621cdf0e10cSrcweir         OSL_ENSURE( isValid(), "ScriptDocument_Impl::getModuleOrDialog: invalid!" );
622cdf0e10cSrcweir         if ( !isValid() )
623cdf0e10cSrcweir             return false;
624cdf0e10cSrcweir 
625cdf0e10cSrcweir         _out_rModuleOrDialog.clear();
626cdf0e10cSrcweir         try
627cdf0e10cSrcweir         {
628cdf0e10cSrcweir 	        Reference< XNameContainer > xLib( getLibrary( _eType, _rLibName, sal_True ), UNO_QUERY_THROW );
629cdf0e10cSrcweir             if ( xLib->hasByName( _rObjectName ) )
630cdf0e10cSrcweir             {
631cdf0e10cSrcweir                 _out_rModuleOrDialog = xLib->getByName( _rObjectName );
632cdf0e10cSrcweir                 return true;
633cdf0e10cSrcweir 	        }
634cdf0e10cSrcweir         }
635cdf0e10cSrcweir         catch( const Exception& )
636cdf0e10cSrcweir         {
637cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
638cdf0e10cSrcweir         }
639cdf0e10cSrcweir         return false;
640cdf0e10cSrcweir     }
641cdf0e10cSrcweir 
642cdf0e10cSrcweir     //--------------------------------------------------------------------
renameModuleOrDialog(LibraryContainerType _eType,const::rtl::OUString & _rLibName,const::rtl::OUString & _rOldName,const::rtl::OUString & _rNewName,const Reference<XNameContainer> & _rxExistingDialogModel)643cdf0e10cSrcweir     bool ScriptDocument_Impl::renameModuleOrDialog( LibraryContainerType _eType, const ::rtl::OUString& _rLibName,
644cdf0e10cSrcweir         const ::rtl::OUString& _rOldName, const ::rtl::OUString& _rNewName, const Reference< XNameContainer >& _rxExistingDialogModel )
645cdf0e10cSrcweir     {
646cdf0e10cSrcweir         OSL_ENSURE( isValid(), "ScriptDocument_Impl::renameModuleOrDialog: invalid!" );
647cdf0e10cSrcweir         if ( !isValid() )
648cdf0e10cSrcweir             return false;
649cdf0e10cSrcweir 
650cdf0e10cSrcweir         try
651cdf0e10cSrcweir         {
652cdf0e10cSrcweir             Reference< XNameContainer > xLib( getLibrary( _eType, _rLibName, sal_True ), UNO_QUERY_THROW );
653cdf0e10cSrcweir 
654cdf0e10cSrcweir 		    // get element
655cdf0e10cSrcweir 		    Any aElement( xLib->getByName( _rOldName ) );
656cdf0e10cSrcweir 
657cdf0e10cSrcweir 		    // remove element from container
658cdf0e10cSrcweir 		    xLib->removeByName( _rOldName );
659cdf0e10cSrcweir 
660cdf0e10cSrcweir             // if it's a dialog, import and export, to reflect the new name
661cdf0e10cSrcweir             if ( _eType == E_DIALOGS )
662cdf0e10cSrcweir             {
663cdf0e10cSrcweir 		        // create dialog model
664cdf0e10cSrcweir                 ::comphelper::ComponentContext aContext( ::comphelper::getProcessServiceFactory() );
665cdf0e10cSrcweir                 Reference< XNameContainer > xDialogModel;
666cdf0e10cSrcweir                 if ( _rxExistingDialogModel.is() )
667cdf0e10cSrcweir                     xDialogModel = _rxExistingDialogModel;
668cdf0e10cSrcweir                 else
669cdf0e10cSrcweir                     if ( !aContext.createComponent( "com.sun.star.awt.UnoControlDialogModel", xDialogModel ) )
670cdf0e10cSrcweir                         return false;
671cdf0e10cSrcweir 
672cdf0e10cSrcweir                 // import dialog model
673cdf0e10cSrcweir                 Reference< XInputStreamProvider > xISP( aElement, UNO_QUERY_THROW );
674cdf0e10cSrcweir                 if ( !_rxExistingDialogModel.is() )
675cdf0e10cSrcweir                 {
676cdf0e10cSrcweir                     Reference< XInputStream > xInput( xISP->createInputStream(), UNO_QUERY_THROW );
677cdf0e10cSrcweir     			    ::xmlscript::importDialogModel( xInput, xDialogModel, aContext.getUNOContext() );
678cdf0e10cSrcweir                 }
679cdf0e10cSrcweir 
680cdf0e10cSrcweir 			    // set new name as property
681cdf0e10cSrcweir 			    Reference< XPropertySet > xDlgPSet( xDialogModel, UNO_QUERY_THROW );
682cdf0e10cSrcweir 			    xDlgPSet->setPropertyValue( DLGED_PROP_NAME, makeAny( _rNewName ) );
683cdf0e10cSrcweir 
684cdf0e10cSrcweir 			    // export dialog model
685cdf0e10cSrcweir 			    xISP = ::xmlscript::exportDialogModel( xDialogModel, aContext.getUNOContext() );
686cdf0e10cSrcweir 			    aElement <<= xISP;
687cdf0e10cSrcweir             }
688cdf0e10cSrcweir 
689cdf0e10cSrcweir 		    // insert element by new name in container
690cdf0e10cSrcweir             else if ( _eType == E_SCRIPTS )
691cdf0e10cSrcweir             {
692cdf0e10cSrcweir                 Reference< XVBAModuleInfo > xVBAModuleInfo( xLib, UNO_QUERY );
693cdf0e10cSrcweir                 if ( xVBAModuleInfo->hasModuleInfo( _rOldName ) )
694cdf0e10cSrcweir                 {
695cdf0e10cSrcweir                     ModuleInfo sModuleInfo = xVBAModuleInfo->getModuleInfo( _rOldName );
696cdf0e10cSrcweir                     xVBAModuleInfo->removeModuleInfo( _rOldName );
697cdf0e10cSrcweir                     xVBAModuleInfo->insertModuleInfo( _rNewName, sModuleInfo );
698cdf0e10cSrcweir                 }
699cdf0e10cSrcweir             }
700cdf0e10cSrcweir 		    xLib->insertByName( _rNewName, aElement );
701cdf0e10cSrcweir             return true;
702cdf0e10cSrcweir         }
703cdf0e10cSrcweir         catch( const Exception& )
704cdf0e10cSrcweir         {
705cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
706cdf0e10cSrcweir         }
707cdf0e10cSrcweir         return false;
708cdf0e10cSrcweir     }
709cdf0e10cSrcweir 
710cdf0e10cSrcweir     //--------------------------------------------------------------------
createModule(const::rtl::OUString & _rLibName,const::rtl::OUString & _rModName,bool _bCreateMain,::rtl::OUString & _out_rNewModuleCode) const711cdf0e10cSrcweir     bool ScriptDocument_Impl::createModule( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModName, bool _bCreateMain, ::rtl::OUString& _out_rNewModuleCode ) const
712cdf0e10cSrcweir     {
713cdf0e10cSrcweir         _out_rNewModuleCode = ::rtl::OUString();
714cdf0e10cSrcweir         try
715cdf0e10cSrcweir         {
716cdf0e10cSrcweir 	        Reference< XNameContainer > xLib( getLibrary( E_SCRIPTS, _rLibName, sal_True ) );
717cdf0e10cSrcweir 	        if ( !xLib.is() || xLib->hasByName( _rModName ) )
718cdf0e10cSrcweir                 return false;
719cdf0e10cSrcweir 
720cdf0e10cSrcweir 		    // create new module
721cdf0e10cSrcweir 		    _out_rNewModuleCode = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "REM  *****  BASIC  *****\n\n" ) );
722cdf0e10cSrcweir 		    if ( _bCreateMain )
723cdf0e10cSrcweir 			    _out_rNewModuleCode += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Sub Main\n\nEnd Sub\n" ) );
724cdf0e10cSrcweir 
725cdf0e10cSrcweir 		    // insert module into library
726cdf0e10cSrcweir 		    xLib->insertByName( _rModName, makeAny( _out_rNewModuleCode ) );
727cdf0e10cSrcweir         }
728cdf0e10cSrcweir         catch( const Exception& )
729cdf0e10cSrcweir         {
730cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
731cdf0e10cSrcweir             return false;
732cdf0e10cSrcweir         }
733cdf0e10cSrcweir 
734cdf0e10cSrcweir 	    return true;
735cdf0e10cSrcweir     }
736cdf0e10cSrcweir 
737cdf0e10cSrcweir     //--------------------------------------------------------------------
insertModuleOrDialog(LibraryContainerType _eType,const::rtl::OUString & _rLibName,const::rtl::OUString & _rObjectName,const Any & _rElement) const738cdf0e10cSrcweir     bool ScriptDocument_Impl::insertModuleOrDialog( LibraryContainerType _eType, const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rObjectName, const Any& _rElement ) const
739cdf0e10cSrcweir     {
740cdf0e10cSrcweir         try
741cdf0e10cSrcweir         {
742cdf0e10cSrcweir             Reference< XNameContainer > xLib( getOrCreateLibrary( _eType, _rLibName ), UNO_QUERY_THROW );
743cdf0e10cSrcweir 	        if ( xLib->hasByName( _rObjectName ) )
744cdf0e10cSrcweir                 return false;
745cdf0e10cSrcweir 
746cdf0e10cSrcweir             xLib->insertByName( _rObjectName, _rElement );
747cdf0e10cSrcweir             return true;
748cdf0e10cSrcweir         }
749cdf0e10cSrcweir         catch( const Exception& )
750cdf0e10cSrcweir         {
751cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
752cdf0e10cSrcweir         }
753cdf0e10cSrcweir         return false;
754cdf0e10cSrcweir     }
755cdf0e10cSrcweir 
756cdf0e10cSrcweir     //--------------------------------------------------------------------
updateModule(const::rtl::OUString & _rLibName,const::rtl::OUString & _rModName,const::rtl::OUString & _rModuleCode) const757cdf0e10cSrcweir     bool ScriptDocument_Impl::updateModule( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModName, const ::rtl::OUString& _rModuleCode ) const
758cdf0e10cSrcweir     {
759cdf0e10cSrcweir         try
760cdf0e10cSrcweir         {
761cdf0e10cSrcweir             Reference< XNameContainer > xLib( getOrCreateLibrary( E_SCRIPTS, _rLibName ), UNO_QUERY_THROW );
762cdf0e10cSrcweir 	        if ( !xLib->hasByName( _rModName ) )
763cdf0e10cSrcweir                 return false;
764cdf0e10cSrcweir             xLib->replaceByName( _rModName, makeAny( _rModuleCode ) );
765cdf0e10cSrcweir             return true;
766cdf0e10cSrcweir         }
767cdf0e10cSrcweir         catch( const Exception& )
768cdf0e10cSrcweir         {
769cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
770cdf0e10cSrcweir         }
771cdf0e10cSrcweir         return false;
772cdf0e10cSrcweir     }
773cdf0e10cSrcweir 
774cdf0e10cSrcweir     //--------------------------------------------------------------------
createDialog(const::rtl::OUString & _rLibName,const::rtl::OUString & _rDialogName,Reference<XInputStreamProvider> & _out_rDialogProvider) const775cdf0e10cSrcweir     bool ScriptDocument_Impl::createDialog( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rDialogName, Reference< XInputStreamProvider >& _out_rDialogProvider ) const
776cdf0e10cSrcweir     {
777cdf0e10cSrcweir         try
778cdf0e10cSrcweir         {
779cdf0e10cSrcweir 	        Reference< XNameContainer > xLib( getLibrary( E_DIALOGS, _rLibName, sal_True ), UNO_QUERY_THROW );
780cdf0e10cSrcweir 
781cdf0e10cSrcweir 	        // create dialog
782cdf0e10cSrcweir 	        _out_rDialogProvider.clear();
783cdf0e10cSrcweir 	        if ( xLib->hasByName( _rDialogName ) )
784cdf0e10cSrcweir                 return false;
785cdf0e10cSrcweir 
786cdf0e10cSrcweir             // create new dialog model
787cdf0e10cSrcweir             ::comphelper::ComponentContext aContext( ::comphelper::getProcessServiceFactory() );
788cdf0e10cSrcweir             Reference< XNameContainer > xDialogModel;
789cdf0e10cSrcweir             if ( !aContext.createComponent( "com.sun.star.awt.UnoControlDialogModel", xDialogModel ) )
790cdf0e10cSrcweir                 return false;
791cdf0e10cSrcweir 
792cdf0e10cSrcweir 		    // set name property
793cdf0e10cSrcweir 		    Reference< XPropertySet > xDlgPSet( xDialogModel, UNO_QUERY_THROW );
794cdf0e10cSrcweir 		    xDlgPSet->setPropertyValue( DLGED_PROP_NAME, makeAny( _rDialogName ) );
795cdf0e10cSrcweir 
796cdf0e10cSrcweir 		    // export dialog model
797cdf0e10cSrcweir             _out_rDialogProvider = ::xmlscript::exportDialogModel( xDialogModel, aContext.getUNOContext() );
798cdf0e10cSrcweir 
799cdf0e10cSrcweir 		    // insert dialog into library
800cdf0e10cSrcweir 		    xLib->insertByName( _rDialogName, makeAny( _out_rDialogProvider ) );
801cdf0e10cSrcweir         }
802cdf0e10cSrcweir         catch( const Exception& )
803cdf0e10cSrcweir         {
804cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
805cdf0e10cSrcweir         }
806cdf0e10cSrcweir 
807cdf0e10cSrcweir 	    return _out_rDialogProvider.is();
808cdf0e10cSrcweir     }
809cdf0e10cSrcweir 
810cdf0e10cSrcweir     //--------------------------------------------------------------------
setDocumentModified() const811cdf0e10cSrcweir     void ScriptDocument_Impl::setDocumentModified() const
812cdf0e10cSrcweir     {
813cdf0e10cSrcweir         OSL_ENSURE( isValid() && isDocument(), "ScriptDocument_Impl::setDocumentModified: only to be called for real documents!" );
814cdf0e10cSrcweir         if ( isValid() && isDocument() )
815cdf0e10cSrcweir         {
816cdf0e10cSrcweir             try
817cdf0e10cSrcweir             {
818cdf0e10cSrcweir                 m_xDocModify->setModified( sal_True );
819cdf0e10cSrcweir             }
820cdf0e10cSrcweir             catch( const Exception& )
821cdf0e10cSrcweir             {
822cdf0e10cSrcweir             	DBG_UNHANDLED_EXCEPTION();
823cdf0e10cSrcweir             }
824cdf0e10cSrcweir         }
825cdf0e10cSrcweir     }
826cdf0e10cSrcweir 
827cdf0e10cSrcweir     //--------------------------------------------------------------------
isDocumentModified() const828cdf0e10cSrcweir     bool ScriptDocument_Impl::isDocumentModified() const
829cdf0e10cSrcweir     {
830cdf0e10cSrcweir         OSL_ENSURE( isValid() && isDocument(), "ScriptDocument_Impl::isDocumentModified: only to be called for real documents!" );
831cdf0e10cSrcweir         bool bIsModified = false;
832cdf0e10cSrcweir         if ( isValid() && isDocument() )
833cdf0e10cSrcweir         {
834cdf0e10cSrcweir             try
835cdf0e10cSrcweir             {
836cdf0e10cSrcweir                 bIsModified = m_xDocModify->isModified();
837cdf0e10cSrcweir             }
838cdf0e10cSrcweir             catch( const Exception& )
839cdf0e10cSrcweir             {
840cdf0e10cSrcweir             	DBG_UNHANDLED_EXCEPTION();
841cdf0e10cSrcweir             }
842cdf0e10cSrcweir         }
843cdf0e10cSrcweir         return bIsModified;
844cdf0e10cSrcweir     }
845cdf0e10cSrcweir 
846cdf0e10cSrcweir     //--------------------------------------------------------------------
saveDocument(const Reference<XStatusIndicator> & _rxStatusIndicator) const847cdf0e10cSrcweir     bool ScriptDocument_Impl::saveDocument( const Reference< XStatusIndicator >& _rxStatusIndicator ) const
848cdf0e10cSrcweir     {
849cdf0e10cSrcweir         Reference< XFrame > xFrame;
850cdf0e10cSrcweir         if ( !getCurrentFrame( xFrame ) )
851cdf0e10cSrcweir             return false;
852cdf0e10cSrcweir 
853cdf0e10cSrcweir         Sequence< PropertyValue > aArgs;
854cdf0e10cSrcweir         if ( _rxStatusIndicator.is() )
855cdf0e10cSrcweir         {
856cdf0e10cSrcweir             aArgs.realloc(1);
857cdf0e10cSrcweir             aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "StatusIndicator" ) );
858cdf0e10cSrcweir             aArgs[0].Value <<= _rxStatusIndicator;
859cdf0e10cSrcweir         }
860cdf0e10cSrcweir 
861cdf0e10cSrcweir         try
862cdf0e10cSrcweir         {
863cdf0e10cSrcweir             URL aURL;
864cdf0e10cSrcweir             aURL.Complete = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:Save" ) );
865cdf0e10cSrcweir             aURL.Main = aURL.Complete;
866cdf0e10cSrcweir             aURL.Protocol = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:" ) );
867cdf0e10cSrcweir             aURL.Path = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Save" ) );
868cdf0e10cSrcweir 
869cdf0e10cSrcweir             Reference< XDispatchProvider > xDispProv( xFrame, UNO_QUERY_THROW );
870cdf0e10cSrcweir             Reference< XDispatch > xDispatch(
871cdf0e10cSrcweir                 xDispProv->queryDispatch( aURL, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "_self" ) ), FrameSearchFlag::AUTO ),
872cdf0e10cSrcweir                 UNO_SET_THROW );
873cdf0e10cSrcweir 
874cdf0e10cSrcweir             xDispatch->dispatch( aURL, aArgs );
875cdf0e10cSrcweir         }
876cdf0e10cSrcweir         catch( const Exception& )
877cdf0e10cSrcweir         {
878cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
879cdf0e10cSrcweir             return false;
880cdf0e10cSrcweir         }
881cdf0e10cSrcweir 
882cdf0e10cSrcweir         return true;
883cdf0e10cSrcweir     }
884cdf0e10cSrcweir 
885cdf0e10cSrcweir     //--------------------------------------------------------------------
getTitle() const886cdf0e10cSrcweir     ::rtl::OUString ScriptDocument_Impl::getTitle() const
887cdf0e10cSrcweir     {
888cdf0e10cSrcweir         OSL_PRECOND( isValid() && isDocument(), "ScriptDocument_Impl::getTitle: for documents only!" );
889cdf0e10cSrcweir 
890cdf0e10cSrcweir         ::rtl::OUString sTitle;
891cdf0e10cSrcweir         if ( isValid() && isDocument() )
892cdf0e10cSrcweir         {
893cdf0e10cSrcweir             sTitle = ::comphelper::DocumentInfo::getDocumentTitle( m_xDocument );
894cdf0e10cSrcweir         }
895cdf0e10cSrcweir         return sTitle;
896cdf0e10cSrcweir     }
897cdf0e10cSrcweir 
898cdf0e10cSrcweir     //--------------------------------------------------------------------
getURL() const899cdf0e10cSrcweir     ::rtl::OUString ScriptDocument_Impl::getURL() const
900cdf0e10cSrcweir     {
901cdf0e10cSrcweir         OSL_PRECOND( isValid() && isDocument(), "ScriptDocument_Impl::getURL: for documents only!" );
902cdf0e10cSrcweir 
903cdf0e10cSrcweir         ::rtl::OUString sURL;
904cdf0e10cSrcweir         if ( isValid() && isDocument() )
905cdf0e10cSrcweir         {
906cdf0e10cSrcweir             try
907cdf0e10cSrcweir             {
908cdf0e10cSrcweir                 sURL = m_xDocument->getURL();
909cdf0e10cSrcweir             }
910cdf0e10cSrcweir             catch( const Exception& )
911cdf0e10cSrcweir             {
912cdf0e10cSrcweir             	DBG_UNHANDLED_EXCEPTION();
913cdf0e10cSrcweir             }
914cdf0e10cSrcweir         }
915cdf0e10cSrcweir         return sURL;
916cdf0e10cSrcweir     }
917cdf0e10cSrcweir 
918cdf0e10cSrcweir     //--------------------------------------------------------------------
allowMacros() const919cdf0e10cSrcweir     bool ScriptDocument_Impl::allowMacros() const
920cdf0e10cSrcweir     {
921cdf0e10cSrcweir         OSL_ENSURE( isValid() && isDocument(), "ScriptDocument_Impl::allowMacros: for documents only!" );
922cdf0e10cSrcweir         bool bAllow = false;
923cdf0e10cSrcweir         if ( isValid() && isDocument() )
924cdf0e10cSrcweir         {
925cdf0e10cSrcweir             try
926cdf0e10cSrcweir             {
927cdf0e10cSrcweir                 bAllow = m_xScriptAccess->getAllowMacroExecution();
928cdf0e10cSrcweir             }
929cdf0e10cSrcweir             catch( const Exception& )
930cdf0e10cSrcweir             {
931cdf0e10cSrcweir             	DBG_UNHANDLED_EXCEPTION();
932cdf0e10cSrcweir             }
933cdf0e10cSrcweir         }
934cdf0e10cSrcweir         return bAllow;
935cdf0e10cSrcweir     }
936cdf0e10cSrcweir 
937cdf0e10cSrcweir     //--------------------------------------------------------------------
getCurrentFrame(Reference<XFrame> & _out_rxFrame) const938cdf0e10cSrcweir     bool ScriptDocument_Impl::getCurrentFrame( Reference< XFrame >& _out_rxFrame ) const
939cdf0e10cSrcweir     {
940cdf0e10cSrcweir         _out_rxFrame.clear();
941cdf0e10cSrcweir         OSL_PRECOND( isValid() && isDocument(), "ScriptDocument_Impl::getCurrentFrame: documents only!" );
942cdf0e10cSrcweir         if ( !isValid() || !isDocument() )
943cdf0e10cSrcweir             return false;
944cdf0e10cSrcweir 
945cdf0e10cSrcweir         try
946cdf0e10cSrcweir         {
947cdf0e10cSrcweir             Reference< XModel > xDocument( m_xDocument, UNO_SET_THROW );
948cdf0e10cSrcweir             Reference< XController > xController( xDocument->getCurrentController(), UNO_SET_THROW );
949cdf0e10cSrcweir             _out_rxFrame.set( xController->getFrame(), UNO_SET_THROW );
950cdf0e10cSrcweir         }
951cdf0e10cSrcweir         catch( const Exception& )
952cdf0e10cSrcweir         {
953cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
954cdf0e10cSrcweir         }
955cdf0e10cSrcweir 
956cdf0e10cSrcweir         return _out_rxFrame.is();
957cdf0e10cSrcweir     }
958cdf0e10cSrcweir 
959cdf0e10cSrcweir     //--------------------------------------------------------------------
isLibraryShared(const::rtl::OUString & _rLibName,LibraryContainerType _eType)960cdf0e10cSrcweir     bool ScriptDocument_Impl::isLibraryShared( const ::rtl::OUString& _rLibName, LibraryContainerType _eType )
961cdf0e10cSrcweir     {
962cdf0e10cSrcweir         bool bIsShared = false;
963cdf0e10cSrcweir         try
964cdf0e10cSrcweir         {
965cdf0e10cSrcweir             Reference< XLibraryContainer2 > xLibContainer( getLibraryContainer( _eType ), UNO_QUERY_THROW );
966cdf0e10cSrcweir 
967cdf0e10cSrcweir             if ( !xLibContainer->hasByName( _rLibName ) || !xLibContainer->isLibraryLink( _rLibName ) )
968cdf0e10cSrcweir                 return false;
969cdf0e10cSrcweir             ::rtl::OUString aFileURL;
970cdf0e10cSrcweir             Reference< XMultiServiceFactory > xMSF( ::comphelper::getProcessServiceFactory() );
971cdf0e10cSrcweir             Reference< XUriReferenceFactory > xUriFac;
972cdf0e10cSrcweir             if ( xMSF.is() )
973cdf0e10cSrcweir             {
974cdf0e10cSrcweir                 xUriFac.set(
975cdf0e10cSrcweir                     xMSF->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.uri.UriReferenceFactory" ) ) ),
976cdf0e10cSrcweir                     UNO_QUERY_THROW );
977cdf0e10cSrcweir             }
978cdf0e10cSrcweir 
979cdf0e10cSrcweir             ::rtl::OUString aLinkURL( xLibContainer->getLibraryLinkURL( _rLibName ) );
980cdf0e10cSrcweir             Reference< XUriReference > xUriRef( xUriFac->parse( aLinkURL ), UNO_QUERY_THROW );
981cdf0e10cSrcweir 
982cdf0e10cSrcweir             ::rtl::OUString aScheme = xUriRef->getScheme();
983cdf0e10cSrcweir             if ( aScheme.equalsIgnoreAsciiCaseAscii( "file" ) )
984cdf0e10cSrcweir             {
985cdf0e10cSrcweir                 aFileURL = aLinkURL;
986cdf0e10cSrcweir             }
987cdf0e10cSrcweir             else if ( aScheme.equalsIgnoreAsciiCaseAscii( "vnd.sun.star.pkg" ) )
988cdf0e10cSrcweir             {
989cdf0e10cSrcweir                 ::rtl::OUString aAuthority = xUriRef->getAuthority();
990cdf0e10cSrcweir                 if ( aAuthority.matchIgnoreAsciiCaseAsciiL( RTL_CONSTASCII_STRINGPARAM( "vnd.sun.star.expand:" ) ) )
991cdf0e10cSrcweir                 {
992cdf0e10cSrcweir                     ::rtl::OUString aDecodedURL( aAuthority.copy( sizeof ( "vnd.sun.star.expand:" ) - 1 ) );
993cdf0e10cSrcweir                     aDecodedURL = ::rtl::Uri::decode( aDecodedURL, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
994cdf0e10cSrcweir                     Reference< XComponentContext > xContext;
995cdf0e10cSrcweir                     Reference< XPropertySet > xProps( xMSF, UNO_QUERY_THROW );
996cdf0e10cSrcweir                     xContext.set( xProps->getPropertyValue( ::rtl::OUString::createFromAscii( "DefaultContext" ) ), UNO_QUERY_THROW );
997cdf0e10cSrcweir                     Reference< XMacroExpander > xMacroExpander(
998cdf0e10cSrcweir                         xContext->getValueByName(
999cdf0e10cSrcweir                         ::rtl::OUString::createFromAscii( "/singletons/com.sun.star.util.theMacroExpander" ) ),
1000cdf0e10cSrcweir                         UNO_QUERY_THROW );
1001cdf0e10cSrcweir                     aFileURL = xMacroExpander->expandMacros( aDecodedURL );
1002cdf0e10cSrcweir                 }
1003cdf0e10cSrcweir             }
1004cdf0e10cSrcweir 
1005*0848378bSHerbert Dürr             if ( !aFileURL.isEmpty() )
1006cdf0e10cSrcweir             {
1007cdf0e10cSrcweir                 ::osl::DirectoryItem aFileItem;
1008cdf0e10cSrcweir                 ::osl::FileStatus aFileStatus( FileStatusMask_FileURL );
1009cdf0e10cSrcweir                 OSL_VERIFY( ::osl::DirectoryItem::get( aFileURL, aFileItem ) == ::osl::FileBase::E_None );
1010cdf0e10cSrcweir                 OSL_VERIFY( aFileItem.getFileStatus( aFileStatus ) == ::osl::FileBase::E_None );
1011cdf0e10cSrcweir                 ::rtl::OUString aCanonicalFileURL( aFileStatus.getFileURL() );
1012cdf0e10cSrcweir 
1013cdf0e10cSrcweir                 ::rtl::OUString aSearchURL1( RTL_CONSTASCII_USTRINGPARAM( "share/basic" ) );
1014cdf0e10cSrcweir 				::rtl::OUString aSearchURL2( RTL_CONSTASCII_USTRINGPARAM( "share/uno_packages" ) );
1015cdf0e10cSrcweir 				::rtl::OUString aSearchURL3( RTL_CONSTASCII_USTRINGPARAM( "share/extensions" ) );
1016cdf0e10cSrcweir 				if( aCanonicalFileURL.indexOf( aSearchURL1 ) != -1 ||
1017cdf0e10cSrcweir                     aCanonicalFileURL.indexOf( aSearchURL2 ) != -1 ||
1018cdf0e10cSrcweir                     aCanonicalFileURL.indexOf( aSearchURL3 ) != -1 )
1019cdf0e10cSrcweir                         bIsShared = true;
1020cdf0e10cSrcweir             }
1021cdf0e10cSrcweir         }
1022cdf0e10cSrcweir         catch( const Exception& )
1023cdf0e10cSrcweir         {
1024cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
1025cdf0e10cSrcweir         }
1026cdf0e10cSrcweir 
1027cdf0e10cSrcweir         return bIsShared;
1028cdf0e10cSrcweir     }
1029cdf0e10cSrcweir 
1030cdf0e10cSrcweir     //--------------------------------------------------------------------
onDocumentCreated(const ScriptDocument &)1031cdf0e10cSrcweir     void ScriptDocument_Impl::onDocumentCreated( const ScriptDocument& /*_rDocument*/ )
1032cdf0e10cSrcweir     {
1033cdf0e10cSrcweir         // not interested in
1034cdf0e10cSrcweir     }
1035cdf0e10cSrcweir 
1036cdf0e10cSrcweir     //--------------------------------------------------------------------
onDocumentOpened(const ScriptDocument &)1037cdf0e10cSrcweir     void ScriptDocument_Impl::onDocumentOpened( const ScriptDocument& /*_rDocument*/ )
1038cdf0e10cSrcweir     {
1039cdf0e10cSrcweir         // not interested in
1040cdf0e10cSrcweir     }
1041cdf0e10cSrcweir 
1042cdf0e10cSrcweir     //--------------------------------------------------------------------
onDocumentSave(const ScriptDocument &)1043cdf0e10cSrcweir     void ScriptDocument_Impl::onDocumentSave( const ScriptDocument& /*_rDocument*/ )
1044cdf0e10cSrcweir     {
1045cdf0e10cSrcweir         // not interested in
1046cdf0e10cSrcweir     }
1047cdf0e10cSrcweir 
1048cdf0e10cSrcweir     //--------------------------------------------------------------------
onDocumentSaveDone(const ScriptDocument &)1049cdf0e10cSrcweir     void ScriptDocument_Impl::onDocumentSaveDone( const ScriptDocument& /*_rDocument*/ )
1050cdf0e10cSrcweir     {
1051cdf0e10cSrcweir         // not interested in
1052cdf0e10cSrcweir     }
1053cdf0e10cSrcweir 
1054cdf0e10cSrcweir     //--------------------------------------------------------------------
onDocumentSaveAs(const ScriptDocument &)1055cdf0e10cSrcweir     void ScriptDocument_Impl::onDocumentSaveAs( const ScriptDocument& /*_rDocument*/ )
1056cdf0e10cSrcweir     {
1057cdf0e10cSrcweir         // not interested in
1058cdf0e10cSrcweir     }
1059cdf0e10cSrcweir 
1060cdf0e10cSrcweir     //--------------------------------------------------------------------
onDocumentSaveAsDone(const ScriptDocument &)1061cdf0e10cSrcweir     void ScriptDocument_Impl::onDocumentSaveAsDone( const ScriptDocument& /*_rDocument*/ )
1062cdf0e10cSrcweir     {
1063cdf0e10cSrcweir         // not interested in
1064cdf0e10cSrcweir     }
1065cdf0e10cSrcweir 
1066cdf0e10cSrcweir     //--------------------------------------------------------------------
onDocumentClosed(const ScriptDocument & _rDocument)1067cdf0e10cSrcweir     void ScriptDocument_Impl::onDocumentClosed( const ScriptDocument& _rDocument )
1068cdf0e10cSrcweir     {
1069cdf0e10cSrcweir         DBG_TESTSOLARMUTEX();
1070cdf0e10cSrcweir         OSL_PRECOND( isValid(), "ScriptDocument_Impl::onDocumentClosed: should not be listening if I'm not valid!" );
1071cdf0e10cSrcweir 
1072cdf0e10cSrcweir         bool bMyDocument = m_xDocument == _rDocument.getDocument();
1073cdf0e10cSrcweir         OSL_PRECOND( bMyDocument, "ScriptDocument_Impl::onDocumentClosed: didn't want to know *this*!" );
1074cdf0e10cSrcweir         if ( bMyDocument )
1075cdf0e10cSrcweir         {
1076cdf0e10cSrcweir             m_bDocumentClosed = true;
1077cdf0e10cSrcweir         }
1078cdf0e10cSrcweir     }
1079cdf0e10cSrcweir 
1080cdf0e10cSrcweir     //--------------------------------------------------------------------
onDocumentTitleChanged(const ScriptDocument &)1081cdf0e10cSrcweir     void ScriptDocument_Impl::onDocumentTitleChanged( const ScriptDocument& /*_rDocument*/ )
1082cdf0e10cSrcweir     {
1083cdf0e10cSrcweir         // not interested in
1084cdf0e10cSrcweir     }
1085cdf0e10cSrcweir 
1086cdf0e10cSrcweir     //--------------------------------------------------------------------
onDocumentModeChanged(const ScriptDocument &)1087cdf0e10cSrcweir     void ScriptDocument_Impl::onDocumentModeChanged( const ScriptDocument& /*_rDocument*/ )
1088cdf0e10cSrcweir     {
1089cdf0e10cSrcweir         // not interested in
1090cdf0e10cSrcweir     }
1091cdf0e10cSrcweir 
1092cdf0e10cSrcweir     //====================================================================
1093cdf0e10cSrcweir     //= ScriptDocument
1094cdf0e10cSrcweir     //====================================================================
1095cdf0e10cSrcweir     //--------------------------------------------------------------------
ScriptDocument()1096cdf0e10cSrcweir     ScriptDocument::ScriptDocument()
1097cdf0e10cSrcweir         :m_pImpl( new ScriptDocument_Impl() )
1098cdf0e10cSrcweir     {
1099cdf0e10cSrcweir     }
1100cdf0e10cSrcweir 
1101cdf0e10cSrcweir     //--------------------------------------------------------------------
ScriptDocument(ScriptDocument::SpecialDocument _eType)1102cdf0e10cSrcweir     ScriptDocument::ScriptDocument( ScriptDocument::SpecialDocument _eType )
1103cdf0e10cSrcweir         :m_pImpl( new ScriptDocument_Impl( Reference< XModel >() ) )
1104cdf0e10cSrcweir     {
1105cdf0e10cSrcweir         OSL_ENSURE( _eType == NoDocument, "ScriptDocument::ScriptDocument: unknown SpecialDocument type!" );
1106cdf0e10cSrcweir         (void)_eType;
1107cdf0e10cSrcweir     }
1108cdf0e10cSrcweir 
1109cdf0e10cSrcweir     //--------------------------------------------------------------------
ScriptDocument(const Reference<XModel> & _rxDocument)1110cdf0e10cSrcweir     ScriptDocument::ScriptDocument( const Reference< XModel >& _rxDocument )
1111cdf0e10cSrcweir         :m_pImpl( new ScriptDocument_Impl( _rxDocument ) )
1112cdf0e10cSrcweir     {
1113cdf0e10cSrcweir         OSL_ENSURE( _rxDocument.is(), "ScriptDocument::ScriptDocument: document must not be NULL!" );
1114cdf0e10cSrcweir             // a NULL document results in an uninitialized instance, and for this
1115cdf0e10cSrcweir             // purpose, there is a dedicated constructor
1116cdf0e10cSrcweir     }
1117cdf0e10cSrcweir 
1118cdf0e10cSrcweir     //--------------------------------------------------------------------
ScriptDocument(const ScriptDocument & _rSource)1119cdf0e10cSrcweir     ScriptDocument::ScriptDocument( const ScriptDocument& _rSource )
1120cdf0e10cSrcweir         :m_pImpl( _rSource.m_pImpl )
1121cdf0e10cSrcweir     {
1122cdf0e10cSrcweir     }
1123cdf0e10cSrcweir 
1124cdf0e10cSrcweir     //--------------------------------------------------------------------
~ScriptDocument()1125cdf0e10cSrcweir     ScriptDocument::~ScriptDocument()
1126cdf0e10cSrcweir     {
1127cdf0e10cSrcweir     }
1128cdf0e10cSrcweir 
1129cdf0e10cSrcweir     //--------------------------------------------------------------------
getApplicationScriptDocument()1130cdf0e10cSrcweir     const ScriptDocument& ScriptDocument::getApplicationScriptDocument()
1131cdf0e10cSrcweir     {
1132cdf0e10cSrcweir         static ScriptDocument s_aApplicationScripts;
1133cdf0e10cSrcweir         return s_aApplicationScripts;
1134cdf0e10cSrcweir     }
1135cdf0e10cSrcweir 
1136cdf0e10cSrcweir     //--------------------------------------------------------------------
getDocumentForBasicManager(const BasicManager * _pManager)1137cdf0e10cSrcweir     ScriptDocument ScriptDocument::getDocumentForBasicManager( const BasicManager* _pManager )
1138cdf0e10cSrcweir     {
1139cdf0e10cSrcweir         if ( _pManager == SFX_APP()->GetBasicManager() )
1140cdf0e10cSrcweir             return getApplicationScriptDocument();
1141cdf0e10cSrcweir 
1142cdf0e10cSrcweir         docs::Documents aDocuments;
1143cdf0e10cSrcweir         lcl_getAllModels_throw( aDocuments, false );
1144cdf0e10cSrcweir 
1145cdf0e10cSrcweir         for (   docs::Documents::const_iterator doc = aDocuments.begin();
1146cdf0e10cSrcweir                 doc != aDocuments.end();
1147cdf0e10cSrcweir                 ++doc
1148cdf0e10cSrcweir             )
1149cdf0e10cSrcweir         {
1150cdf0e10cSrcweir             const BasicManager* pDocBasicManager = ::basic::BasicManagerRepository::getDocumentBasicManager( doc->xModel );
1151cdf0e10cSrcweir 		    if  (   ( pDocBasicManager != SFX_APP()->GetBasicManager() )
1152cdf0e10cSrcweir                 &&  ( pDocBasicManager == _pManager )
1153cdf0e10cSrcweir                 )
1154cdf0e10cSrcweir 		    {
1155cdf0e10cSrcweir 			    return ScriptDocument( doc->xModel );
1156cdf0e10cSrcweir 		    }
1157cdf0e10cSrcweir         }
1158cdf0e10cSrcweir 
1159cdf0e10cSrcweir         OSL_ENSURE( false, "ScriptDocument::getDocumentForBasicManager: did not find a document for this manager!" );
1160cdf0e10cSrcweir 	    return ScriptDocument( NoDocument );
1161cdf0e10cSrcweir     }
1162cdf0e10cSrcweir 
1163cdf0e10cSrcweir     //--------------------------------------------------------------------
getDocumentWithURLOrCaption(const::rtl::OUString & _rUrlOrCaption)1164cdf0e10cSrcweir     ScriptDocument ScriptDocument::getDocumentWithURLOrCaption( const ::rtl::OUString& _rUrlOrCaption )
1165cdf0e10cSrcweir     {
1166cdf0e10cSrcweir         ScriptDocument aDocument( getApplicationScriptDocument() );
1167*0848378bSHerbert Dürr         if ( _rUrlOrCaption.isEmpty() )
1168cdf0e10cSrcweir             return aDocument;
1169cdf0e10cSrcweir 
1170cdf0e10cSrcweir         docs::Documents aDocuments;
1171cdf0e10cSrcweir         lcl_getAllModels_throw( aDocuments, false );
1172cdf0e10cSrcweir 
1173cdf0e10cSrcweir         for (   docs::Documents::const_iterator doc = aDocuments.begin();
1174cdf0e10cSrcweir                 doc != aDocuments.end();
1175cdf0e10cSrcweir                 ++doc
1176cdf0e10cSrcweir             )
1177cdf0e10cSrcweir         {
1178cdf0e10cSrcweir             const ScriptDocument aCheck = ScriptDocument( doc->xModel );
1179cdf0e10cSrcweir             if  (   _rUrlOrCaption == aCheck.getTitle()
1180cdf0e10cSrcweir                 ||  _rUrlOrCaption == aCheck.getURL()
1181cdf0e10cSrcweir                 )
1182cdf0e10cSrcweir             {
1183cdf0e10cSrcweir                 aDocument = aCheck;
1184cdf0e10cSrcweir                 break;
1185cdf0e10cSrcweir             }
1186cdf0e10cSrcweir         }
1187cdf0e10cSrcweir 
1188cdf0e10cSrcweir         return aDocument;
1189cdf0e10cSrcweir     }
1190cdf0e10cSrcweir 
1191cdf0e10cSrcweir     //--------------------------------------------------------------------
1192cdf0e10cSrcweir     namespace
1193cdf0e10cSrcweir     {
1194cdf0e10cSrcweir         struct DocumentTitleLess : public ::std::binary_function< ScriptDocument, ScriptDocument, bool >
1195cdf0e10cSrcweir         {
DocumentTitleLessbasctl::__anon44530b5e0211::DocumentTitleLess1196cdf0e10cSrcweir             DocumentTitleLess( const CollatorWrapper& _rCollator )
1197cdf0e10cSrcweir                 :m_aCollator( _rCollator )
1198cdf0e10cSrcweir             {
1199cdf0e10cSrcweir             }
1200cdf0e10cSrcweir 
operator ()basctl::__anon44530b5e0211::DocumentTitleLess1201cdf0e10cSrcweir             bool operator()( const ScriptDocument& _lhs, const ScriptDocument& _rhs ) const
1202cdf0e10cSrcweir             {
1203cdf0e10cSrcweir                 return m_aCollator.compareString( _lhs.getTitle(), _rhs.getTitle() ) < 0;
1204cdf0e10cSrcweir             }
1205cdf0e10cSrcweir         private:
1206cdf0e10cSrcweir             const CollatorWrapper   m_aCollator;
1207cdf0e10cSrcweir         };
1208cdf0e10cSrcweir     }
1209cdf0e10cSrcweir 
1210cdf0e10cSrcweir     //--------------------------------------------------------------------
getAllScriptDocuments(ScriptDocument::ScriptDocumentList _eListType)1211cdf0e10cSrcweir     ScriptDocuments ScriptDocument::getAllScriptDocuments( ScriptDocument::ScriptDocumentList _eListType )
1212cdf0e10cSrcweir     {
1213cdf0e10cSrcweir         ScriptDocuments aScriptDocs;
1214cdf0e10cSrcweir 
1215cdf0e10cSrcweir         // include application?
1216cdf0e10cSrcweir         if ( _eListType == AllWithApplication )
1217cdf0e10cSrcweir             aScriptDocs.push_back( getApplicationScriptDocument() );
1218cdf0e10cSrcweir 
1219cdf0e10cSrcweir         // obtain documents
1220cdf0e10cSrcweir         try
1221cdf0e10cSrcweir         {
1222cdf0e10cSrcweir             docs::Documents aDocuments;
1223cdf0e10cSrcweir             lcl_getAllModels_throw( aDocuments, true /* exclude invisible */ );
1224cdf0e10cSrcweir 
1225cdf0e10cSrcweir             for (   docs::Documents::const_iterator doc = aDocuments.begin();
1226cdf0e10cSrcweir                     doc != aDocuments.end();
1227cdf0e10cSrcweir                     ++doc
1228cdf0e10cSrcweir                 )
1229cdf0e10cSrcweir             {
1230cdf0e10cSrcweir                 // exclude documents without script/library containers
1231cdf0e10cSrcweir                 ScriptDocument aDoc( doc->xModel );
1232cdf0e10cSrcweir                 if ( !aDoc.isValid() )
1233cdf0e10cSrcweir                     continue;
1234cdf0e10cSrcweir 
1235cdf0e10cSrcweir                 aScriptDocs.push_back( aDoc );
1236cdf0e10cSrcweir             }
1237cdf0e10cSrcweir         }
1238cdf0e10cSrcweir         catch( const Exception& )
1239cdf0e10cSrcweir         {
1240cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
1241cdf0e10cSrcweir         }
1242cdf0e10cSrcweir 
1243cdf0e10cSrcweir         // sort document list by doc title?
1244cdf0e10cSrcweir         if ( _eListType == DocumentsSorted )
1245cdf0e10cSrcweir         {
1246cdf0e10cSrcweir             CollatorWrapper aCollator( ::comphelper::getProcessServiceFactory() );
1247cdf0e10cSrcweir             aCollator.loadDefaultCollator( SvtSysLocale().GetLocaleData().getLocale(), 0 );
1248cdf0e10cSrcweir             ::std::sort( aScriptDocs.begin(), aScriptDocs.end(), DocumentTitleLess( aCollator ) );
1249cdf0e10cSrcweir         }
1250cdf0e10cSrcweir 
1251cdf0e10cSrcweir         return aScriptDocs;
1252cdf0e10cSrcweir     }
1253cdf0e10cSrcweir 
1254cdf0e10cSrcweir     //--------------------------------------------------------------------
operator ==(const ScriptDocument & _rhs) const1255cdf0e10cSrcweir     bool ScriptDocument::operator==( const ScriptDocument& _rhs ) const
1256cdf0e10cSrcweir     {
1257cdf0e10cSrcweir         return m_pImpl->getDocumentRef() == _rhs.m_pImpl->getDocumentRef();
1258cdf0e10cSrcweir     }
1259cdf0e10cSrcweir 
1260cdf0e10cSrcweir     //--------------------------------------------------------------------
hashCode() const1261cdf0e10cSrcweir     sal_Int32 ScriptDocument::hashCode() const
1262cdf0e10cSrcweir     {
1263cdf0e10cSrcweir         return sal::static_int_cast<sal_Int32>(reinterpret_cast< sal_IntPtr >( m_pImpl->getDocumentRef().get() ));
1264cdf0e10cSrcweir     }
1265cdf0e10cSrcweir 
1266cdf0e10cSrcweir     //--------------------------------------------------------------------
isValid() const1267cdf0e10cSrcweir     bool ScriptDocument::isValid() const
1268cdf0e10cSrcweir     {
1269cdf0e10cSrcweir         return m_pImpl->isValid();
1270cdf0e10cSrcweir     }
1271cdf0e10cSrcweir 
1272cdf0e10cSrcweir     //--------------------------------------------------------------------
isAlive() const1273cdf0e10cSrcweir     bool ScriptDocument::isAlive() const
1274cdf0e10cSrcweir     {
1275cdf0e10cSrcweir         return m_pImpl->isAlive();
1276cdf0e10cSrcweir     }
1277cdf0e10cSrcweir 
1278cdf0e10cSrcweir     //--------------------------------------------------------------------
getLibraryContainer(LibraryContainerType _eType) const1279cdf0e10cSrcweir     Reference< XLibraryContainer > ScriptDocument::getLibraryContainer( LibraryContainerType _eType ) const
1280cdf0e10cSrcweir     {
1281cdf0e10cSrcweir         return m_pImpl->getLibraryContainer( _eType );
1282cdf0e10cSrcweir     }
1283cdf0e10cSrcweir 
1284cdf0e10cSrcweir     //--------------------------------------------------------------------
getLibrary(LibraryContainerType _eType,const::rtl::OUString & _rLibName,bool _bLoadLibrary) const1285cdf0e10cSrcweir     Reference< XNameContainer > ScriptDocument::getLibrary( LibraryContainerType _eType, const ::rtl::OUString& _rLibName, bool _bLoadLibrary ) const
1286cdf0e10cSrcweir         SAL_THROW((NoSuchElementException))
1287cdf0e10cSrcweir     {
1288cdf0e10cSrcweir         return m_pImpl->getLibrary( _eType, _rLibName, _bLoadLibrary );
1289cdf0e10cSrcweir     }
1290cdf0e10cSrcweir 
1291cdf0e10cSrcweir     //--------------------------------------------------------------------
hasLibrary(LibraryContainerType _eType,const::rtl::OUString & _rLibName) const1292cdf0e10cSrcweir     bool ScriptDocument::hasLibrary( LibraryContainerType _eType, const ::rtl::OUString& _rLibName ) const
1293cdf0e10cSrcweir     {
1294cdf0e10cSrcweir         return m_pImpl->hasLibrary( _eType, _rLibName );
1295cdf0e10cSrcweir     }
1296cdf0e10cSrcweir 
1297cdf0e10cSrcweir     //--------------------------------------------------------------------
getOrCreateLibrary(LibraryContainerType _eType,const::rtl::OUString & _rLibName) const1298cdf0e10cSrcweir     Reference< XNameContainer > ScriptDocument::getOrCreateLibrary( LibraryContainerType _eType, const ::rtl::OUString& _rLibName ) const
1299cdf0e10cSrcweir     {
1300cdf0e10cSrcweir         return m_pImpl->getOrCreateLibrary( _eType, _rLibName );
1301cdf0e10cSrcweir     }
1302cdf0e10cSrcweir 
1303cdf0e10cSrcweir     //--------------------------------------------------------------------
loadLibraryIfExists(LibraryContainerType _eType,const::rtl::OUString & _rLibrary)1304cdf0e10cSrcweir     void ScriptDocument::loadLibraryIfExists( LibraryContainerType _eType, const ::rtl::OUString& _rLibrary )
1305cdf0e10cSrcweir     {
1306cdf0e10cSrcweir         m_pImpl->loadLibraryIfExists( _eType, _rLibrary );
1307cdf0e10cSrcweir     }
1308cdf0e10cSrcweir 
1309cdf0e10cSrcweir     //--------------------------------------------------------------------
getObjectNames(LibraryContainerType _eType,const::rtl::OUString & _rLibName) const1310cdf0e10cSrcweir     Sequence< ::rtl::OUString > ScriptDocument::getObjectNames( LibraryContainerType _eType, const ::rtl::OUString& _rLibName ) const
1311cdf0e10cSrcweir     {
1312cdf0e10cSrcweir         Sequence< ::rtl::OUString > aModuleNames;
1313cdf0e10cSrcweir 
1314cdf0e10cSrcweir         try
1315cdf0e10cSrcweir         {
1316cdf0e10cSrcweir             if ( hasLibrary( _eType, _rLibName ) )
1317cdf0e10cSrcweir             {
1318cdf0e10cSrcweir                 Reference< XNameContainer > xLib( getLibrary( _eType, _rLibName, false ) );
1319cdf0e10cSrcweir 	            if ( xLib.is() )
1320cdf0e10cSrcweir 		            aModuleNames = xLib->getElementNames();
1321cdf0e10cSrcweir             }
1322cdf0e10cSrcweir         }
1323cdf0e10cSrcweir         catch( const Exception& )
1324cdf0e10cSrcweir         {
1325cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
1326cdf0e10cSrcweir         }
1327cdf0e10cSrcweir 
1328cdf0e10cSrcweir 		// sort
1329cdf0e10cSrcweir         ::std::sort( aModuleNames.getArray() , aModuleNames.getArray() + aModuleNames.getLength() , StringCompareLessThan );
1330cdf0e10cSrcweir 
1331cdf0e10cSrcweir         return aModuleNames;
1332cdf0e10cSrcweir     }
1333cdf0e10cSrcweir 
1334cdf0e10cSrcweir     //--------------------------------------------------------------------
createObjectName(LibraryContainerType _eType,const::rtl::OUString & _rLibName) const1335cdf0e10cSrcweir     ::rtl::OUString ScriptDocument::createObjectName( LibraryContainerType _eType, const ::rtl::OUString& _rLibName ) const
1336cdf0e10cSrcweir     {
1337cdf0e10cSrcweir         ::rtl::OUString aObjectName;
1338cdf0e10cSrcweir 
1339cdf0e10cSrcweir         ::rtl::OUString aBaseName = _eType == E_SCRIPTS
1340cdf0e10cSrcweir             ?   ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Module" ) )
1341cdf0e10cSrcweir             :   ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Dialog" ) );
1342cdf0e10cSrcweir 
1343cdf0e10cSrcweir         Sequence< ::rtl::OUString > aUsedNames( getObjectNames( _eType, _rLibName ) );
1344cdf0e10cSrcweir         ::std::set< ::rtl::OUString > aUsedNamesCheck;
1345cdf0e10cSrcweir         ::std::copy( aUsedNames.getConstArray(), aUsedNames.getConstArray() + aUsedNames.getLength(),
1346cdf0e10cSrcweir             ::std::insert_iterator< ::std::set< ::rtl::OUString > >( aUsedNamesCheck, aUsedNamesCheck.begin() ) );
1347cdf0e10cSrcweir 
1348cdf0e10cSrcweir 	    bool bValid = false;
1349cdf0e10cSrcweir 	    sal_uInt16 i = 1;
1350cdf0e10cSrcweir 	    while ( !bValid )
1351cdf0e10cSrcweir 	    {
1352cdf0e10cSrcweir 		    aObjectName = aBaseName;
1353cdf0e10cSrcweir 		    aObjectName += String::CreateFromInt32( i );
1354cdf0e10cSrcweir 
1355cdf0e10cSrcweir             if ( aUsedNamesCheck.find( aObjectName ) == aUsedNamesCheck.end() )
1356cdf0e10cSrcweir 			    bValid = sal_True;
1357cdf0e10cSrcweir 
1358cdf0e10cSrcweir 		    ++i;
1359cdf0e10cSrcweir 	    }
1360cdf0e10cSrcweir 
1361cdf0e10cSrcweir 	    return aObjectName;
1362cdf0e10cSrcweir     }
1363cdf0e10cSrcweir 
1364cdf0e10cSrcweir     //--------------------------------------------------------------------
getLibraryNames() const1365cdf0e10cSrcweir     Sequence< ::rtl::OUString > ScriptDocument::getLibraryNames() const
1366cdf0e10cSrcweir     {
1367cdf0e10cSrcweir         return BasicIDE::GetMergedLibraryNames( getLibraryContainer( E_SCRIPTS ), getLibraryContainer( E_DIALOGS ) );
1368cdf0e10cSrcweir     }
1369cdf0e10cSrcweir 
1370cdf0e10cSrcweir     //--------------------------------------------------------------------
isReadOnly() const1371cdf0e10cSrcweir     bool ScriptDocument::isReadOnly() const
1372cdf0e10cSrcweir     {
1373cdf0e10cSrcweir         return m_pImpl->isReadOnly();
1374cdf0e10cSrcweir     }
1375cdf0e10cSrcweir 
1376cdf0e10cSrcweir     //--------------------------------------------------------------------
isApplication() const1377cdf0e10cSrcweir     bool ScriptDocument::isApplication() const
1378cdf0e10cSrcweir     {
1379cdf0e10cSrcweir         return m_pImpl->isApplication();
1380cdf0e10cSrcweir     }
1381cdf0e10cSrcweir 
isInVBAMode() const1382cdf0e10cSrcweir     bool ScriptDocument::isInVBAMode() const
1383cdf0e10cSrcweir     {
1384cdf0e10cSrcweir         return m_pImpl->isInVBAMode();
1385cdf0e10cSrcweir     }
1386cdf0e10cSrcweir 
1387cdf0e10cSrcweir     //--------------------------------------------------------------------
getBasicManager() const1388cdf0e10cSrcweir     BasicManager* ScriptDocument::getBasicManager() const
1389cdf0e10cSrcweir     {
1390cdf0e10cSrcweir         return m_pImpl->getBasicManager();
1391cdf0e10cSrcweir     }
1392cdf0e10cSrcweir 
1393cdf0e10cSrcweir     //--------------------------------------------------------------------
getDocument() const1394cdf0e10cSrcweir     Reference< XModel > ScriptDocument::getDocument() const
1395cdf0e10cSrcweir     {
1396cdf0e10cSrcweir         return m_pImpl->getDocument();
1397cdf0e10cSrcweir     }
1398cdf0e10cSrcweir 
1399cdf0e10cSrcweir     //--------------------------------------------------------------------
getDocumentOrNull() const1400cdf0e10cSrcweir     Reference< XModel > ScriptDocument::getDocumentOrNull() const
1401cdf0e10cSrcweir     {
1402cdf0e10cSrcweir         if ( isDocument() )
1403cdf0e10cSrcweir             return m_pImpl->getDocument();
1404cdf0e10cSrcweir         return NULL;
1405cdf0e10cSrcweir     }
1406cdf0e10cSrcweir 
1407cdf0e10cSrcweir     //--------------------------------------------------------------------
removeModule(const::rtl::OUString & _rLibName,const::rtl::OUString & _rModuleName) const1408cdf0e10cSrcweir     bool ScriptDocument::removeModule( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModuleName ) const
1409cdf0e10cSrcweir     {
1410cdf0e10cSrcweir         return m_pImpl->removeModuleOrDialog( E_SCRIPTS, _rLibName, _rModuleName );
1411cdf0e10cSrcweir     }
1412cdf0e10cSrcweir 
1413cdf0e10cSrcweir     //--------------------------------------------------------------------
hasModule(const::rtl::OUString & _rLibName,const::rtl::OUString & _rModuleName) const1414cdf0e10cSrcweir     bool ScriptDocument::hasModule( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModuleName ) const
1415cdf0e10cSrcweir     {
1416cdf0e10cSrcweir         return m_pImpl->hasModuleOrDialog( E_SCRIPTS, _rLibName, _rModuleName );
1417cdf0e10cSrcweir     }
1418cdf0e10cSrcweir 
1419cdf0e10cSrcweir     //--------------------------------------------------------------------
getModule(const::rtl::OUString & _rLibName,const::rtl::OUString & _rModName,::rtl::OUString & _out_rModuleSource) const1420cdf0e10cSrcweir     bool ScriptDocument::getModule( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModName, ::rtl::OUString& _out_rModuleSource ) const
1421cdf0e10cSrcweir     {
1422cdf0e10cSrcweir         Any aCode;
1423cdf0e10cSrcweir         if ( !m_pImpl->getModuleOrDialog( E_SCRIPTS, _rLibName, _rModName, aCode ) )
1424cdf0e10cSrcweir             return false;
1425cdf0e10cSrcweir         OSL_VERIFY( aCode >>= _out_rModuleSource );
1426cdf0e10cSrcweir         return true;
1427cdf0e10cSrcweir     }
1428cdf0e10cSrcweir 
1429cdf0e10cSrcweir     //--------------------------------------------------------------------
renameModule(const::rtl::OUString & _rLibName,const::rtl::OUString & _rOldName,const::rtl::OUString & _rNewName) const1430cdf0e10cSrcweir     bool ScriptDocument::renameModule( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rOldName, const ::rtl::OUString& _rNewName ) const
1431cdf0e10cSrcweir     {
1432cdf0e10cSrcweir         return m_pImpl->renameModuleOrDialog( E_SCRIPTS, _rLibName, _rOldName, _rNewName, NULL );
1433cdf0e10cSrcweir     }
1434cdf0e10cSrcweir 
1435cdf0e10cSrcweir     //--------------------------------------------------------------------
createModule(const::rtl::OUString & _rLibName,const::rtl::OUString & _rModName,bool _bCreateMain,::rtl::OUString & _out_rNewModuleCode) const1436cdf0e10cSrcweir     bool ScriptDocument::createModule( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModName, bool _bCreateMain, ::rtl::OUString& _out_rNewModuleCode ) const
1437cdf0e10cSrcweir     {
1438cdf0e10cSrcweir         if ( !m_pImpl->createModule( _rLibName, _rModName, _bCreateMain, _out_rNewModuleCode ) )
1439cdf0e10cSrcweir             return false;
1440cdf0e10cSrcweir 
1441cdf0e10cSrcweir         // doc shell modified
1442cdf0e10cSrcweir 		BasicIDE::MarkDocumentModified( *const_cast< ScriptDocument* >( this ) );    // here?
1443cdf0e10cSrcweir         return true;
1444cdf0e10cSrcweir     }
1445cdf0e10cSrcweir 
1446cdf0e10cSrcweir     //--------------------------------------------------------------------
insertModule(const::rtl::OUString & _rLibName,const::rtl::OUString & _rModName,const::rtl::OUString & _rModuleCode) const1447cdf0e10cSrcweir     bool ScriptDocument::insertModule( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModName, const ::rtl::OUString& _rModuleCode ) const
1448cdf0e10cSrcweir     {
1449cdf0e10cSrcweir         return m_pImpl->insertModuleOrDialog( E_SCRIPTS, _rLibName, _rModName, makeAny( _rModuleCode ) );
1450cdf0e10cSrcweir     }
1451cdf0e10cSrcweir 
1452cdf0e10cSrcweir     //--------------------------------------------------------------------
updateModule(const::rtl::OUString & _rLibName,const::rtl::OUString & _rModName,const::rtl::OUString & _rModuleCode) const1453cdf0e10cSrcweir     bool ScriptDocument::updateModule( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rModName, const ::rtl::OUString& _rModuleCode ) const
1454cdf0e10cSrcweir     {
1455cdf0e10cSrcweir         return m_pImpl->updateModule( _rLibName, _rModName, _rModuleCode );
1456cdf0e10cSrcweir     }
1457cdf0e10cSrcweir 
1458cdf0e10cSrcweir     //--------------------------------------------------------------------
removeDialog(const::rtl::OUString & _rLibName,const::rtl::OUString & _rDialogName) const1459cdf0e10cSrcweir     bool ScriptDocument::removeDialog( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rDialogName ) const
1460cdf0e10cSrcweir     {
1461cdf0e10cSrcweir         return m_pImpl->removeModuleOrDialog( E_DIALOGS, _rLibName, _rDialogName );
1462cdf0e10cSrcweir     }
1463cdf0e10cSrcweir 
1464cdf0e10cSrcweir     //--------------------------------------------------------------------
hasDialog(const::rtl::OUString & _rLibName,const::rtl::OUString & _rDialogName) const1465cdf0e10cSrcweir     bool ScriptDocument::hasDialog( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rDialogName ) const
1466cdf0e10cSrcweir     {
1467cdf0e10cSrcweir         return m_pImpl->hasModuleOrDialog( E_DIALOGS, _rLibName, _rDialogName );
1468cdf0e10cSrcweir     }
1469cdf0e10cSrcweir 
1470cdf0e10cSrcweir     //--------------------------------------------------------------------
getDialog(const::rtl::OUString & _rLibName,const::rtl::OUString & _rDialogName,Reference<XInputStreamProvider> & _out_rDialogProvider) const1471cdf0e10cSrcweir     bool ScriptDocument::getDialog( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rDialogName, Reference< XInputStreamProvider >& _out_rDialogProvider ) const
1472cdf0e10cSrcweir     {
1473cdf0e10cSrcweir         Any aCode;
1474cdf0e10cSrcweir         if ( !m_pImpl->getModuleOrDialog( E_DIALOGS, _rLibName, _rDialogName, aCode ) )
1475cdf0e10cSrcweir             return false;
1476cdf0e10cSrcweir         OSL_VERIFY( aCode >>= _out_rDialogProvider );
1477cdf0e10cSrcweir         return _out_rDialogProvider.is();
1478cdf0e10cSrcweir     }
1479cdf0e10cSrcweir 
1480cdf0e10cSrcweir     //--------------------------------------------------------------------
renameDialog(const::rtl::OUString & _rLibName,const::rtl::OUString & _rOldName,const::rtl::OUString & _rNewName,const Reference<XNameContainer> & _rxExistingDialogModel) const1481cdf0e10cSrcweir     bool ScriptDocument::renameDialog( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rOldName, const ::rtl::OUString& _rNewName, const Reference< XNameContainer >& _rxExistingDialogModel ) const
1482cdf0e10cSrcweir     {
1483cdf0e10cSrcweir         return m_pImpl->renameModuleOrDialog( E_DIALOGS, _rLibName, _rOldName, _rNewName, _rxExistingDialogModel );
1484cdf0e10cSrcweir     }
1485cdf0e10cSrcweir 
1486cdf0e10cSrcweir     //--------------------------------------------------------------------
createDialog(const::rtl::OUString & _rLibName,const::rtl::OUString & _rDialogName,Reference<XInputStreamProvider> & _out_rDialogProvider) const1487cdf0e10cSrcweir     bool ScriptDocument::createDialog( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rDialogName, Reference< XInputStreamProvider >& _out_rDialogProvider ) const
1488cdf0e10cSrcweir     {
1489cdf0e10cSrcweir         if ( !m_pImpl->createDialog( _rLibName, _rDialogName, _out_rDialogProvider ) )
1490cdf0e10cSrcweir             return false;
1491cdf0e10cSrcweir 
1492cdf0e10cSrcweir 		BasicIDE::MarkDocumentModified( *const_cast< ScriptDocument* >( this ) );    // here?
1493cdf0e10cSrcweir         return true;
1494cdf0e10cSrcweir     }
1495cdf0e10cSrcweir 
1496cdf0e10cSrcweir     //--------------------------------------------------------------------
insertDialog(const::rtl::OUString & _rLibName,const::rtl::OUString & _rDialogName,const Reference<XInputStreamProvider> & _rxDialogProvider) const1497cdf0e10cSrcweir     bool ScriptDocument::insertDialog( const ::rtl::OUString& _rLibName, const ::rtl::OUString& _rDialogName, const Reference< XInputStreamProvider >& _rxDialogProvider ) const
1498cdf0e10cSrcweir     {
1499cdf0e10cSrcweir         return m_pImpl->insertModuleOrDialog( E_DIALOGS, _rLibName, _rDialogName, makeAny( _rxDialogProvider ) );
1500cdf0e10cSrcweir     }
1501cdf0e10cSrcweir 
1502cdf0e10cSrcweir     //--------------------------------------------------------------------
setDocumentModified() const1503cdf0e10cSrcweir     void ScriptDocument::setDocumentModified() const
1504cdf0e10cSrcweir     {
1505cdf0e10cSrcweir         m_pImpl->setDocumentModified();
1506cdf0e10cSrcweir     }
1507cdf0e10cSrcweir 
1508cdf0e10cSrcweir     //--------------------------------------------------------------------
isDocumentModified() const1509cdf0e10cSrcweir     bool ScriptDocument::isDocumentModified() const
1510cdf0e10cSrcweir     {
1511cdf0e10cSrcweir         return m_pImpl->isDocumentModified();
1512cdf0e10cSrcweir     }
1513cdf0e10cSrcweir 
1514cdf0e10cSrcweir     //--------------------------------------------------------------------
saveDocument(const Reference<XStatusIndicator> & _rxStatusIndicator) const1515cdf0e10cSrcweir     bool ScriptDocument::saveDocument( const Reference< XStatusIndicator >& _rxStatusIndicator ) const
1516cdf0e10cSrcweir     {
1517cdf0e10cSrcweir         return m_pImpl->saveDocument( _rxStatusIndicator );
1518cdf0e10cSrcweir     }
1519cdf0e10cSrcweir 
1520cdf0e10cSrcweir     //--------------------------------------------------------------------
getLibraryLocation(const::rtl::OUString & _rLibName) const1521cdf0e10cSrcweir     LibraryLocation ScriptDocument::getLibraryLocation( const ::rtl::OUString& _rLibName ) const
1522cdf0e10cSrcweir     {
1523cdf0e10cSrcweir         LibraryLocation eLocation = LIBRARY_LOCATION_UNKNOWN;
1524*0848378bSHerbert Dürr         if ( !_rLibName.isEmpty() )
1525cdf0e10cSrcweir         {
1526cdf0e10cSrcweir             if ( isDocument() )
1527cdf0e10cSrcweir             {
1528cdf0e10cSrcweir                 eLocation = LIBRARY_LOCATION_DOCUMENT;
1529cdf0e10cSrcweir             }
1530cdf0e10cSrcweir             else
1531cdf0e10cSrcweir             {
1532cdf0e10cSrcweir                 if  (  ( hasLibrary( E_SCRIPTS, _rLibName ) && !m_pImpl->isLibraryShared( _rLibName, E_SCRIPTS ) )
1533cdf0e10cSrcweir                     || ( hasLibrary( E_DIALOGS, _rLibName ) && !m_pImpl->isLibraryShared( _rLibName, E_DIALOGS ) )
1534cdf0e10cSrcweir                     )
1535cdf0e10cSrcweir                 {
1536cdf0e10cSrcweir                     eLocation = LIBRARY_LOCATION_USER;
1537cdf0e10cSrcweir                 }
1538cdf0e10cSrcweir                 else
1539cdf0e10cSrcweir                 {
1540cdf0e10cSrcweir                     eLocation = LIBRARY_LOCATION_SHARE;
1541cdf0e10cSrcweir                 }
1542cdf0e10cSrcweir             }
1543cdf0e10cSrcweir         }
1544cdf0e10cSrcweir 
1545cdf0e10cSrcweir         return eLocation;
1546cdf0e10cSrcweir     }
1547cdf0e10cSrcweir 
1548cdf0e10cSrcweir     //--------------------------------------------------------------------
getTitle(LibraryLocation _eLocation,LibraryType _eType) const1549cdf0e10cSrcweir     ::rtl::OUString ScriptDocument::getTitle( LibraryLocation _eLocation, LibraryType _eType ) const
1550cdf0e10cSrcweir     {
1551cdf0e10cSrcweir         ::rtl::OUString aTitle;
1552cdf0e10cSrcweir 
1553cdf0e10cSrcweir         switch ( _eLocation )
1554cdf0e10cSrcweir         {
1555cdf0e10cSrcweir             case LIBRARY_LOCATION_USER:
1556cdf0e10cSrcweir             {
1557cdf0e10cSrcweir                 switch ( _eType )
1558cdf0e10cSrcweir                 {
1559cdf0e10cSrcweir                 case LIBRARY_TYPE_MODULE:   aTitle = String( IDEResId( RID_STR_USERMACROS ) ); break;
1560cdf0e10cSrcweir                 case LIBRARY_TYPE_DIALOG:   aTitle = String( IDEResId( RID_STR_USERDIALOGS ) ); break;
1561cdf0e10cSrcweir                 case LIBRARY_TYPE_ALL:      aTitle = String( IDEResId( RID_STR_USERMACROSDIALOGS ) ); break;
1562cdf0e10cSrcweir                 default:
1563cdf0e10cSrcweir                     break;
1564cdf0e10cSrcweir             }
1565cdf0e10cSrcweir             break;
1566cdf0e10cSrcweir             case LIBRARY_LOCATION_SHARE:
1567cdf0e10cSrcweir             {
1568cdf0e10cSrcweir                 switch ( _eType )
1569cdf0e10cSrcweir                 {
1570cdf0e10cSrcweir                 case LIBRARY_TYPE_MODULE:   aTitle = String( IDEResId( RID_STR_SHAREMACROS ) ); break;
1571cdf0e10cSrcweir                 case LIBRARY_TYPE_DIALOG:   aTitle = String( IDEResId( RID_STR_SHAREDIALOGS ) ); break;
1572cdf0e10cSrcweir                 case LIBRARY_TYPE_ALL:      aTitle = String( IDEResId( RID_STR_SHAREMACROSDIALOGS ) ); break;
1573cdf0e10cSrcweir                 default:
1574cdf0e10cSrcweir                     break;
1575cdf0e10cSrcweir                 }
1576cdf0e10cSrcweir             }
1577cdf0e10cSrcweir             break;
1578cdf0e10cSrcweir             case LIBRARY_LOCATION_DOCUMENT:
1579cdf0e10cSrcweir                 aTitle = getTitle();
1580cdf0e10cSrcweir                 break;
1581cdf0e10cSrcweir 		    default:
1582cdf0e10cSrcweir                 break;
1583cdf0e10cSrcweir             }
1584cdf0e10cSrcweir         }
1585cdf0e10cSrcweir 
1586cdf0e10cSrcweir         return aTitle;
1587cdf0e10cSrcweir     }
1588cdf0e10cSrcweir 
1589cdf0e10cSrcweir     //--------------------------------------------------------------------
getTitle() const1590cdf0e10cSrcweir     ::rtl::OUString ScriptDocument::getTitle() const
1591cdf0e10cSrcweir     {
1592cdf0e10cSrcweir         return m_pImpl->getTitle();
1593cdf0e10cSrcweir     }
1594cdf0e10cSrcweir 
1595cdf0e10cSrcweir     //--------------------------------------------------------------------
getURL() const1596cdf0e10cSrcweir     ::rtl::OUString ScriptDocument::getURL() const
1597cdf0e10cSrcweir     {
1598cdf0e10cSrcweir         return m_pImpl->getURL();
1599cdf0e10cSrcweir     }
1600cdf0e10cSrcweir 
1601cdf0e10cSrcweir     //--------------------------------------------------------------------
isActive() const1602cdf0e10cSrcweir     bool ScriptDocument::isActive() const
1603cdf0e10cSrcweir     {
1604cdf0e10cSrcweir         bool bIsActive( false );
1605cdf0e10cSrcweir         try
1606cdf0e10cSrcweir         {
1607cdf0e10cSrcweir             Reference< XFrame > xFrame;
1608cdf0e10cSrcweir             if ( m_pImpl->getCurrentFrame( xFrame ) )
1609cdf0e10cSrcweir                 bIsActive = xFrame->isActive();
1610cdf0e10cSrcweir         }
1611cdf0e10cSrcweir         catch( const Exception& )
1612cdf0e10cSrcweir         {
1613cdf0e10cSrcweir         	DBG_UNHANDLED_EXCEPTION();
1614cdf0e10cSrcweir         }
1615cdf0e10cSrcweir         return bIsActive;
1616cdf0e10cSrcweir     }
1617cdf0e10cSrcweir 
1618cdf0e10cSrcweir     //--------------------------------------------------------------------
allowMacros() const1619cdf0e10cSrcweir     bool ScriptDocument::allowMacros() const
1620cdf0e10cSrcweir     {
1621cdf0e10cSrcweir         return m_pImpl->allowMacros();
1622cdf0e10cSrcweir     }
1623cdf0e10cSrcweir 
1624cdf0e10cSrcweir //........................................................................
1625cdf0e10cSrcweir } // namespace basctl
1626cdf0e10cSrcweir //........................................................................
1627