diff options
author | Vladimir Glazounov <vg@openoffice.org> | 2007-04-11 11:50:02 +0000 |
---|---|---|
committer | Vladimir Glazounov <vg@openoffice.org> | 2007-04-11 11:50:02 +0000 |
commit | 28542d5e646cc01d33093fc6a483629526ffabdb (patch) | |
tree | d44a3f088bded6e4efbcb7b20df36f1cafe694b9 /basic | |
parent | cae6a0fef6de8cdf0a318a2cfbe3f8040b2d4434 (diff) |
INTEGRATION: CWS hedaburemove01 (1.1.2); FILE ADDED
2007/04/04 14:55:59 vg 1.1.2.2: resync to SRC680_m207
2006/12/12 16:41:47 vg 1.1.2.1: #i72503# gathered global includes in one place
Diffstat (limited to 'basic')
-rw-r--r-- | basic/inc/basic/basicmanagerrepository.hxx | 158 | ||||
-rw-r--r-- | basic/inc/basic/basmgr.hxx | 274 |
2 files changed, 432 insertions, 0 deletions
diff --git a/basic/inc/basic/basicmanagerrepository.hxx b/basic/inc/basic/basicmanagerrepository.hxx new file mode 100644 index 000000000000..e8e6b0fe04b3 --- /dev/null +++ b/basic/inc/basic/basicmanagerrepository.hxx @@ -0,0 +1,158 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: basicmanagerrepository.hxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2007-04-11 12:49:26 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ + +#ifndef BASICMANAGERREPOSITORY_HXX +#define BASICMANAGERREPOSITORY_HXX + +/** === begin UNO includes === **/ +#ifndef _COM_SUN_STAR_FRAME_XMODEL_HPP_ +#include <com/sun/star/frame/XModel.hpp> +#endif +#ifndef _COM_SUN_STAR_EMBED_XSTORAGE_HPP_ +#include <com/sun/star/embed/XStorage.hpp> +#endif +/** === end UNO includes === **/ + +class BasicManager; + +//........................................................................ +namespace basic +{ +//........................................................................ + + //==================================================================== + //= BasicManagerRepository + //==================================================================== + /** specifies a callback for instances which are interested in BasicManagers + created by the BasicManagerRepository. + */ + class SAL_NO_VTABLE BasicManagerCreationListener + { + public: + /** is called when a BasicManager has been created + + @param _rxForDocument + denotes the document for which the BasicManager has been created. If this is <NULL/>, + then the BasicManager is the application-wide BasicManager. + + @param _pBasicManager + denotes the BasicManager which has been created. The listener might for instance + decide to add global variables to it, or otherwise initialize it. + */ + virtual void onBasicManagerCreated( + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& _rxForDocument, + BasicManager& _rBasicManager + ) = 0; + }; + + //==================================================================== + //= BasicManagerRepository + //==================================================================== + class BasicManagerRepository + { + public: + /** returns the BasicManager belonging to the given document + + If the BasicManager does not yet exist, it is created. In this case, if the application's + BasicManager does not yet exist, it is also created. This is necessary since + the application's BasicManager acts as parent for all document's BasicManagers. + + If you're interested in this case - the implicit creation of the application's BasicManager -, + then you need to register as BasicManagerCreationListener. + + @param _rxDocumentModel + denotes the document model whose BasicManager is to be retrieved. Must not be <NULL/>. + The document should support the XDocumentInfoSupplier interface, for retrieving + its title, which is needed in some error conditions. + Also it <em>must</em> support the XStorageBasedDocument interface, since we + must be able to retrieve the document's storage. If this interface is <em>not</em> + supported, creating a new BasicManager will certainly fail. + + @return + the BasicManager for this model. + + @attention + The returned BasicManager instances is owned by the repository. In particular, + you are not allowed to delete it. Instead, the given model is observed: As soon + as it's closed, the associated BasicManager is deleted. + */ + static BasicManager* getDocumentBasicManager( + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& _rxDocumentModel + ); + + /** returns the application-wide BasicManager + + @param _bCreate + determines whether the BasicManager should be created (<TRUE/>) if it + does not yet exist. + + @attention + If the BasicManager is newly created, then it is still owned by the repository. + In particular, you are not allowed to delete it. Instead, call resetApplicationBasicManager + to release the BasicManager. + */ + static BasicManager* getApplicationBasicManager( bool _bCreate ); + + /** resets the application-wide BasicManager to <NULL/> + */ + static void resetApplicationBasicManager(); + + /** registers a BasicManagerCreationListener instance which is notified whenever + the repository creates a BasicManager instance. + + Note that this listener is <em>not</em> called when somebody else + creates BasicManager instances. + + If the same listener is createed multiple times, it is also notified + multiple times, and needs to be revoked once for each registration. + */ + static void registerCreationListener( + BasicManagerCreationListener& _rListener + ); + + /** reveokes a BasicManagerCreationListener instance which has previously + been registered to be notified about created BasicManager instances. + */ + static void revokeCreationListener( + BasicManagerCreationListener& _rListener + ); + }; + +//........................................................................ +} // namespace basic +//........................................................................ + +#endif // BASICMANAGERREPOSITORY_HXX + diff --git a/basic/inc/basic/basmgr.hxx b/basic/inc/basic/basmgr.hxx new file mode 100644 index 000000000000..3bd3e638da39 --- /dev/null +++ b/basic/inc/basic/basmgr.hxx @@ -0,0 +1,274 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: basmgr.hxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: vg $ $Date: 2007-04-11 12:50:02 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ +// +#ifndef _BASMGR_HXX +#define _BASMGR_HXX + +#ifndef _STRING_HXX //autogen +#include <tools/string.hxx> +#endif +#ifndef _SFXBRDCST_HXX //autogen +#include <svtools/brdcst.hxx> +#endif + +#ifndef _SB_SBSTAR_HXX //autogen +#include <basic/sbstar.hxx> +#endif + +#ifndef _COM_SUN_STAR_SCRIPT_XSTORAGEBASEDLIBRARYCONTAINER_HPP_ +#include <com/sun/star/script/XStorageBasedLibraryContainer.hpp> +#endif +#ifndef _COM_SUN_STAR_SCRIPT_XSTARBASICACCESS_HPP_ +#include <com/sun/star/script/XStarBasicAccess.hpp> +#endif + + +// Basic XML Import/Export +com::sun::star::uno::Reference< com::sun::star::script::XStarBasicAccess > + getStarBasicAccess( BasicManager* pMgr ); + + + +class SotStorage; + +#define BASERR_ID_STDLIBOPEN ERRCODE_BASMGR_STDLIBOPEN +#define BASERR_ID_STDLIBSAVE ERRCODE_BASMGR_STDLIBSAVE +#define BASERR_ID_LIBLOAD ERRCODE_BASMGR_LIBLOAD +#define BASERR_ID_LIBCREATE ERRCODE_BASMGR_LIBCREATE +#define BASERR_ID_LIBSAVE ERRCODE_BASMGR_LIBSAVE +#define BASERR_ID_LIBDEL ERRCODE_BASMGR_LIBDEL +#define BASERR_ID_MGROPEN ERRCODE_BASMGR_MGROPEN +#define BASERR_ID_MGRSAVE ERRCODE_BASMGR_MGRSAVE +#define BASERR_ID_REMOVELIB ERRCODE_BASMGR_REMOVELIB +#define BASERR_ID_UNLOADLIB ERRCODE_BASMGR_UNLOADLIB + +#define BASERR_REASON_OPENSTORAGE 0x0001 +#define BASERR_REASON_OPENLIBSTORAGE 0x0002 +#define BASERR_REASON_OPENMGRSTREAM 0x0004 +#define BASERR_REASON_OPENLIBSTREAM 0x0008 +#define BASERR_REASON_LIBNOTFOUND 0x0010 +#define BASERR_REASON_STORAGENOTFOUND 0x0020 +#define BASERR_REASON_BASICLOADERROR 0x0040 +#define BASERR_REASON_NOSTORAGENAME 0x0080 + +#define BASERR_REASON_STDLIB 0x0100 + +class BasicError +{ +private: + ULONG nErrorId; + USHORT nReason; + String aErrStr; + +public: + BasicError(); + BasicError( const BasicError& rErr ); + BasicError( ULONG nId, USHORT nR, const String& rErrStr ); + + ULONG GetErrorId() const { return nErrorId; } + USHORT GetReason() const { return nReason; } + String GetErrorStr() { return aErrStr; } + + void SetErrorId( ULONG n ) { nErrorId = n; } + void SetReason( USHORT n ) { nReason = n; } + void SetErrorStr( const String& rStr) { aErrStr = rStr; } +}; + + +// + +class BasicLibs; +class ErrorManager; +class BasicLibInfo; +class BasicErrorManager; +namespace basic { class BasicManagerCleaner; } + +// Library password handling for 5.0 documents +class OldBasicPassword +{ +public: + virtual void setLibraryPassword( const String& rLibraryName, const String& rPassword ) = 0; + virtual String getLibraryPassword( const String& rLibraryName ) = 0; + virtual void clearLibraryPassword( const String& rLibraryName ) = 0; + virtual sal_Bool hasLibraryPassword( const String& rLibraryName ) = 0; +}; + +struct LibraryContainerInfo +{ + ::com::sun::star::uno::Reference< com::sun::star::script::XPersistentLibraryContainer > mxScriptCont; + ::com::sun::star::uno::Reference< com::sun::star::script::XPersistentLibraryContainer > mxDialogCont; + OldBasicPassword* mpOldBasicPassword; + + LibraryContainerInfo() + :mpOldBasicPassword( NULL ) + { + } + + LibraryContainerInfo + ( + com::sun::star::uno::Reference< com::sun::star::script::XPersistentLibraryContainer > xScriptCont, + com::sun::star::uno::Reference< com::sun::star::script::XPersistentLibraryContainer > xDialogCont, + OldBasicPassword* pOldBasicPassword + ) + : mxScriptCont( xScriptCont ) + , mxDialogCont( xDialogCont ) + , mpOldBasicPassword( pOldBasicPassword ) + {} +}; + +struct BasicManagerImpl; + + +#define LIB_NOTFOUND 0xFFFF + +class BasicManager : public SfxBroadcaster +{ + friend class LibraryContainer_Impl; + friend class StarBasicAccess_Impl; + friend class BasMgrContainerListenerImpl; + friend class ::basic::BasicManagerCleaner; + +private: + BasicLibs* pLibs; + BasicErrorManager* pErrorMgr; + + String aName; + String maStorageName; + BOOL bBasMgrModified; + + BasicManagerImpl* mpImpl; + + void Init(); + +protected: + BOOL ImpLoadLibary( BasicLibInfo* pLibInfo ) const; + BOOL ImpLoadLibary( BasicLibInfo* pLibInfo, SotStorage* pCurStorage, BOOL bInfosOnly = FALSE ) const; + void ImpCreateStdLib( StarBASIC* pParentFromStdLib ); + void ImpMgrNotLoaded( const String& rStorageName ); + BasicLibInfo* CreateLibInfo(); + void LoadBasicManager( SotStorage& rStorage, const String& rBaseURL, BOOL bLoadBasics = TRUE ); + void LoadOldBasicManager( SotStorage& rStorage ); + BOOL ImplLoadBasic( SvStream& rStrm, StarBASICRef& rOldBasic ) const; + BOOL ImplEncryptStream( SvStream& rStream ) const; + BasicLibInfo* FindLibInfo( StarBASIC* pBasic ) const; + void CheckModules( StarBASIC* pBasic, BOOL bReference ) const; + void SetFlagToAllLibs( short nFlag, BOOL bSet ) const; + BasicManager(); // Nur zum anpassen von Pfaden bei 'Speichern unter'. + ~BasicManager(); + +public: + TYPEINFO(); + BasicManager( SotStorage& rStorage, const String& rBaseURL, StarBASIC* pParentFromStdLib = NULL, String* pLibPath = NULL ); + BasicManager( StarBASIC* pStdLib, String* pLibPath = NULL ); + + /** deletes the given BasicManager instance + + This method is necessary since normally, BasicManager instances are owned by the BasicManagerRepository, + and expected to be deleted by the repository only. However, there exists quite some legacy code, + which needs to explicitly delete a BasicManager itself. This code must not use the (protected) + destructor, but LegacyDeleteBasicManager. + */ + static void LegacyDeleteBasicManager( BasicManager*& _rpManager ); + + void SetStorageName( const String& rName ) { maStorageName = rName; } + String GetStorageName() const { return maStorageName; } + void SetName( const String& rName ) { aName = rName; } + String GetName() const { return aName; } + + + USHORT GetLibCount() const; + StarBASIC* GetLib( USHORT nLib ) const; + StarBASIC* GetLib( const String& rName ) const; + USHORT GetLibId( const String& rName ) const; + + String GetLibName( USHORT nLib ); + + /** announces the library containers which belong to this BasicManager + + The method will automatically add two global constants, BasicLibraries and DialogLibraries, + to the BasicManager. + */ + void SetLibraryContainerInfo( const LibraryContainerInfo& rInfo ); + + const ::com::sun::star::uno::Reference< com::sun::star::script::XPersistentLibraryContainer >& + GetDialogLibraryContainer() const; + const ::com::sun::star::uno::Reference< com::sun::star::script::XPersistentLibraryContainer >& + GetScriptLibraryContainer() const; + + BOOL LoadLib( USHORT nLib ); + BOOL RemoveLib( USHORT nLib, BOOL bDelBasicFromStorage ); + + // Modify-Flag wird nur beim Speichern zurueckgesetzt. + BOOL IsModified() const; + BOOL IsBasicModified() const; + + BOOL HasErrors(); + void ClearErrors(); + BasicError* GetFirstError(); + BasicError* GetNextError(); + + /** inserts a global constant into the basic library, referring to some UNO object + */ + void InsertGlobalUNOConstant( const sal_Char* _pAsciiName, const ::com::sun::star::uno::Any& _rValue ); + + /** determines whether there are password-protected modules whose size exceedes the + legacy module size + @param _out_rModuleNames + takes the names of modules whose size exceeds the legacy limit + */ + bool LegacyPsswdBinaryLimitExceeded( ::com::sun::star::uno::Sequence< rtl::OUString >& _out_rModuleNames ); + +private: + BOOL IsReference( USHORT nLib ); + + BOOL SetLibName( USHORT nLib, const String& rName ); + + StarBASIC* GetStdLib() const; + StarBASIC* AddLib( SotStorage& rStorage, const String& rLibName, BOOL bReference ); + BOOL RemoveLib( USHORT nLib ); + BOOL HasLib( const String& rName ) const; + + StarBASIC* CreateLibForLibContainer( const String& rLibName, + const com::sun::star::uno::Reference< com::sun::star::script::XLibraryContainer >& + xScriptCont ); + // For XML import/export: + StarBASIC* CreateLib( const String& rLibName ); + StarBASIC* CreateLib( const String& rLibName, const String& Password, + const String& LinkTargetURL ); +}; + +void SetAppBasicManager( BasicManager* pBasMgr ); + +#endif //_BASMGR_HXX |