/************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org 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 version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_basic.hxx" #include "errobject.hxx" #include #include #include "sbintern.hxx" #include "runtime.hxx" using namespace ::com::sun::star; using namespace ::ooo; typedef ::cppu::WeakImplHelper2< vba::XErrObject, script::XDefaultProperty > ErrObjectImpl_BASE; class ErrObject : public ErrObjectImpl_BASE { rtl::OUString m_sHelpFile; rtl::OUString m_sSource; rtl::OUString m_sDescription; sal_Int32 m_nNumber; sal_Int32 m_nHelpContext; bool mbIsInError; public: ErrObject(); ~ErrObject(); // Attributes virtual ::sal_Int32 SAL_CALL getNumber() throw (uno::RuntimeException); virtual void SAL_CALL setNumber( ::sal_Int32 _number ) throw (uno::RuntimeException); virtual ::sal_Int32 SAL_CALL getHelpContext() throw (uno::RuntimeException); virtual void SAL_CALL setHelpContext( ::sal_Int32 _helpcontext ) throw (uno::RuntimeException); virtual ::rtl::OUString SAL_CALL getHelpFile() throw (uno::RuntimeException); virtual void SAL_CALL setHelpFile( const ::rtl::OUString& _helpfile ) throw (uno::RuntimeException); virtual ::rtl::OUString SAL_CALL getDescription() throw (uno::RuntimeException); virtual void SAL_CALL setDescription( const ::rtl::OUString& _description ) throw (uno::RuntimeException); virtual ::rtl::OUString SAL_CALL getSource() throw (uno::RuntimeException); virtual void SAL_CALL setSource( const ::rtl::OUString& _source ) throw (uno::RuntimeException); // Methods virtual void SAL_CALL Clear( ) throw (uno::RuntimeException); virtual void SAL_CALL Raise( const uno::Any& Number, const uno::Any& Source, const uno::Any& Description, const uno::Any& HelpFile, const uno::Any& HelpContext ) throw (uno::RuntimeException); // XDefaultProperty virtual ::rtl::OUString SAL_CALL getDefaultPropertyName( ) throw (uno::RuntimeException); }; ErrObject::~ErrObject() { } ErrObject::ErrObject() : m_nNumber(0), m_nHelpContext(0), mbIsInError(false) { } sal_Int32 SAL_CALL ErrObject::getNumber() throw (uno::RuntimeException) { return m_nNumber; } void SAL_CALL ErrObject::setNumber( ::sal_Int32 _number ) throw (uno::RuntimeException) { // m_nNumber = _number; if ( !mbIsInError ) Raise( uno::makeAny( _number ), uno::Any(), uno::Any(), uno::Any(), uno::Any() ); } ::sal_Int32 SAL_CALL ErrObject::getHelpContext() throw (uno::RuntimeException) { return m_nHelpContext; } void SAL_CALL ErrObject::setHelpContext( ::sal_Int32 _helpcontext ) throw (uno::RuntimeException) { m_nHelpContext = _helpcontext; } ::rtl::OUString SAL_CALL ErrObject::getHelpFile() throw (uno::RuntimeException) { return m_sHelpFile; } void SAL_CALL ErrObject::setHelpFile( const ::rtl::OUString& _helpfile ) throw (uno::RuntimeException) { m_sHelpFile = _helpfile; } ::rtl::OUString SAL_CALL ErrObject::getDescription() throw (uno::RuntimeException) { return m_sDescription; } void SAL_CALL ErrObject::setDescription( const ::rtl::OUString& _description ) throw (uno::RuntimeException) { m_sDescription = _description; } ::rtl::OUString SAL_CALL ErrObject::getSource() throw (uno::RuntimeException) { return m_sSource; } void SAL_CALL ErrObject::setSource( const ::rtl::OUString& _source ) throw (uno::RuntimeException) { m_sSource = _source; } // Methods void SAL_CALL ErrObject::Clear( ) throw (uno::RuntimeException) { m_sHelpFile = rtl::OUString(); m_sSource = m_sHelpFile; m_sDescription = m_sSource; m_nNumber = 0; m_nHelpContext = 0; } void SAL_CALL ErrObject::Raise( const uno::Any& Number, const uno::Any& Source, const uno::Any& Description, const uno::Any& HelpFile, const uno::Any& HelpContext ) throw (uno::RuntimeException) { if ( !Number.hasValue() ) throw uno::RuntimeException( rtl::OUString::createFromAscii("Missing Required Paramater"), uno::Reference< uno::XInterface >() ); mbIsInError = true; Clear(); Description >>= m_sDescription; Source >>= m_sSource; HelpFile >>= m_sHelpFile; HelpContext >>= m_nHelpContext; Number >>= m_nNumber; if ( m_nNumber ) { SbError n = StarBASIC::GetSfxFromVBError( m_nNumber ); if ( !n ) n = m_nNumber; // force orig number, probably should have a specific table of vb ( localized ) errors pINST->Error( n, m_sDescription ); } mbIsInError = false; } // XDefaultProperty ::rtl::OUString SAL_CALL ErrObject::getDefaultPropertyName( ) throw (uno::RuntimeException) { static rtl::OUString sDfltPropName( RTL_CONSTASCII_USTRINGPARAM("Number") ); return sDfltPropName; } // SbxErrObject SbxErrObject::SbxErrObject( const String& rName, const Any& rUnoObj ): SbUnoObject( rName, rUnoObj ) { OSL_TRACE("SbxErrObject::SbxErrObject ctor"); rUnoObj >>= m_xErr; if ( m_xErr.is() ) SetDfltProperty( uno::Reference< script::XDefaultProperty >( m_xErr, uno::UNO_QUERY_THROW )->getDefaultPropertyName() ) ; } SbxErrObject::~SbxErrObject() { OSL_TRACE("SbxErrObject::~SbxErrObject dtor"); } uno::Reference< vba::XErrObject > SbxErrObject::getUnoErrObject() { SbxVariable* pVar = getErrObject(); SbxErrObject* pGlobErr = static_cast< SbxErrObject* >( pVar ); return pGlobErr->m_xErr; } SbxVariableRef SbxErrObject::getErrObject() { static SbxVariableRef pGlobErr = new SbxErrObject( String( RTL_CONSTASCII_USTRINGPARAM("Err")), uno::makeAny( uno::Reference< vba::XErrObject >( new ErrObject() ) ) ); return pGlobErr; }