diff options
-rw-r--r-- | fpicker/source/office/fpinteraction.hxx | 130 | ||||
-rw-r--r-- | fpicker/source/office/fps_office.cxx | 52 | ||||
-rw-r--r-- | fpicker/source/office/fpsmartcontent.cxx | 338 |
3 files changed, 520 insertions, 0 deletions
diff --git a/fpicker/source/office/fpinteraction.hxx b/fpicker/source/office/fpinteraction.hxx new file mode 100644 index 000000000000..9596e4c2755d --- /dev/null +++ b/fpicker/source/office/fpinteraction.hxx @@ -0,0 +1,130 @@ +/************************************************************************* + * + * $RCSfile: fpinteraction.hxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: obo $ $Date: 2005-04-13 08:52:54 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 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 + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef SVTOOLS_FILEPICKER_INTERACTION_HXX +#define SVTOOLS_FILEPICKER_INTERACTION_HXX + +#ifndef _CPPUHELPER_IMPLBASE1_HXX_ +#include <cppuhelper/implbase1.hxx> +#endif +#ifndef _COM_SUN_STAR_TASK_XINTERACTIONHANDLER_HPP_ +#include <com/sun/star/task/XInteractionHandler.hpp> +#endif + +//........................................................................ +namespace svt +{ +//........................................................................ + + //==================================================================== + //= OFilePickerInteractionHandler + //==================================================================== + typedef ::cppu::WeakImplHelper1 < ::com::sun::star::task::XInteractionHandler + > OFilePickerInteractionHandler_Base; + + /** a InteractionHandler implementation which extends another handler with some customizability + */ + class OFilePickerInteractionHandler : public OFilePickerInteractionHandler_Base + { + public: + /** flags, which indicates special handled interactions + These values will be used combained as flags - so they must + in range [2^n]! + */ + enum EInterceptedInteractions + { + E_NOINTERCEPTION = 0, + E_DOESNOTEXIST = 1 + // next values [2,4,8,16 ...]! + }; + + protected: + ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler > m_xMaster ; // our master handler + ::com::sun::star::uno::Any m_aException ; // the last handled request + sal_Bool m_bUsed ; // indicates using of this interaction handler instance + EInterceptedInteractions m_eInterceptions ; // enable/disable interception of some special interactions + + public: + OFilePickerInteractionHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& _rxMaster ); + + // some generic functions + void enableInterceptions( EInterceptedInteractions eInterceptions ); + sal_Bool wasUsed () const; + void resetUseState (); + void forgetRequest (); + + // functions to analyze last cached request + sal_Bool wasAccessDenied() const; + + protected: + // XInteractionHandler + virtual void SAL_CALL handle( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& _rxRequest ) throw (::com::sun::star::uno::RuntimeException); + + private: + ~OFilePickerInteractionHandler(); + }; + +//........................................................................ +} // namespace svt +//........................................................................ + +#endif // SVTOOLS_FILEPICKER_INTERACTION_HXX + diff --git a/fpicker/source/office/fps_office.cxx b/fpicker/source/office/fps_office.cxx new file mode 100644 index 000000000000..05f5e2d435eb --- /dev/null +++ b/fpicker/source/office/fps_office.cxx @@ -0,0 +1,52 @@ + +#ifndef _SAL_TYPES_H_ +#include "sal/types.h" +#endif + +#ifndef _CPPUHELPER_IMPLEMENTATIONENTRY_HXX_ +#include "cppuhelper/implementationentry.hxx" +#endif + +#include "OfficeFilePicker.hxx" +#include "OfficeFolderPicker.hxx" + +static cppu::ImplementationEntry g_entries[] = +{ + { + SvtFilePicker::impl_createInstance, + SvtFilePicker::impl_getStaticImplementationName, + SvtFilePicker::impl_getStaticSupportedServiceNames, + cppu::createSingleComponentFactory, 0, 0 + }, + { + SvtFolderPicker::impl_createInstance, + SvtFolderPicker::impl_getStaticImplementationName, + SvtFolderPicker::impl_getStaticSupportedServiceNames, + cppu::createSingleComponentFactory, 0, 0 + }, + { 0, 0, 0, 0, 0, 0 } +}; + +extern "C" +{ +SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment ( + const sal_Char ** ppEnvTypeName, uno_Environment ** /* ppEnv */) +{ + *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; +} + +SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo ( + void * pServiceManager, void * pRegistryKey) +{ + return cppu::component_writeInfoHelper ( + pServiceManager, pRegistryKey, g_entries); +} + +SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory ( + const sal_Char * pImplementationName, void * pServiceManager, void * pRegistryKey) +{ + return cppu::component_getFactoryHelper ( + pImplementationName, pServiceManager, pRegistryKey, g_entries); +} + +} // extern "C" diff --git a/fpicker/source/office/fpsmartcontent.cxx b/fpicker/source/office/fpsmartcontent.cxx new file mode 100644 index 000000000000..1c4242523c73 --- /dev/null +++ b/fpicker/source/office/fpsmartcontent.cxx @@ -0,0 +1,338 @@ +/************************************************************************* + * + * $RCSfile: fpsmartcontent.cxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: obo $ $Date: 2005-04-13 08:53:24 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 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 + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef SVTOOLS_SOURCE_FILEPICKER_FPSMARTCONTENT_HXX +#include "fpsmartcontent.hxx" +#endif + +/** === begin UNO includes === **/ +#ifndef _COM_SUN_STAR_UCB_XCONTENTCREATOR_HPP_ +#include <com/sun/star/ucb/XContentCreator.hpp> +#endif +#ifndef _COM_SUN_STAR_CONTAINER_XCHILD_HPP_ +#include <com/sun/star/container/XChild.hpp> +#endif +#ifndef _COM_SUN_STAR_UCB_CONTENTINFOATTRIBUTE_HPP_ +#include <com/sun/star/ucb/ContentInfoAttribute.hpp> +#endif +/** === end UNO includes === **/ + +#ifndef _UNOTOOLS_PROCESSFACTORY_HXX +#include <comphelper/processfactory.hxx> +#endif +#ifndef _UCBHELPER_COMMANDENVIRONMENT_HXX +#include <ucbhelper/commandenvironment.hxx> +#endif + +#ifndef _SOLAR_H +#include <tools/solar.h> +#endif +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif +#ifndef _STRING_HXX +#include <tools/string.hxx> +#endif + +//........................................................................ +namespace svt +{ +//........................................................................ + + using namespace ::com::sun::star::uno; + using namespace ::com::sun::star::task; + using namespace ::com::sun::star::ucb; + using namespace ::com::sun::star::lang; + using namespace ::com::sun::star::container; + + //==================================================================== + //= SmartContent + //==================================================================== + //-------------------------------------------------------------------- + SmartContent::SmartContent() + :m_pContent( NULL ) + ,m_eState( NOT_BOUND ) + ,m_pOwnInteraction( NULL ) + { + } + + //-------------------------------------------------------------------- + SmartContent::SmartContent( const ::rtl::OUString& _rInitialURL ) + :m_pContent( NULL ) + ,m_eState( NOT_BOUND ) + { + bindTo( _rInitialURL ); + } + + //-------------------------------------------------------------------- + SmartContent::~SmartContent() + { + DELETEZ( m_pContent ); + } + + //-------------------------------------------------------------------- + void SmartContent::enableOwnInteractionHandler(::svt::OFilePickerInteractionHandler::EInterceptedInteractions eInterceptions) + { + Reference< XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory(); + Reference< XInteractionHandler > xGlobalInteractionHandler = Reference< XInteractionHandler >( + xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.task.InteractionHandler") ) ), UNO_QUERY ); + + m_pOwnInteraction = new ::svt::OFilePickerInteractionHandler(xGlobalInteractionHandler); + m_pOwnInteraction->enableInterceptions(eInterceptions); + m_xOwnInteraction = m_pOwnInteraction; + + m_xCmdEnv = new ::ucb::CommandEnvironment( m_xOwnInteraction, Reference< XProgressHandler >() ); + } + + //-------------------------------------------------------------------- + void SmartContent::enableDefaultInteractionHandler() + { + // Don't free the memory here! It will be done by the next + // call automaticly - releasing of the uno reference ... + m_pOwnInteraction = NULL; + m_xOwnInteraction = Reference< XInteractionHandler >(); + + Reference< XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory(); + Reference< XInteractionHandler > xGlobalInteractionHandler = Reference< XInteractionHandler >( + xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.task.InteractionHandler") ) ), UNO_QUERY ); + m_xCmdEnv = new ucb::CommandEnvironment( xGlobalInteractionHandler, Reference< XProgressHandler >() ); + } + + //-------------------------------------------------------------------- + ::svt::OFilePickerInteractionHandler* SmartContent::getOwnInteractionHandler() const + { + if (!m_xOwnInteraction.is()) + return NULL; + return m_pOwnInteraction; + } + + //-------------------------------------------------------------------- + void SmartContent::bindTo( const ::rtl::OUString& _rURL ) + { + if ( getURL() == _rURL ) + // nothing to do, regardless of the state + return; + + DELETEZ( m_pContent ); + m_eState = INVALID; // default to INVALID + m_sURL = _rURL; + + if ( m_sURL.getLength() ) + { + try + { + m_pContent = new ::ucb::Content( _rURL, m_xCmdEnv ); + m_eState = UNKNOWN; + // from now on, the state is unknown -> we cannot know for sure if the content + // is really valid (some UCP's only tell this when asking for properties, not upon + // creation) + } + catch( ContentCreationException& ) + { + } + catch( Exception& ) + { + DBG_ERROR( "SmartContent::bindTo: unexpected exception caught!" ); + } + } + else + { + m_eState = NOT_BOUND; + } + + + // don't forget to reset the may internal used interaction handler ... + // But do it only for our own specialized interaction helper! + ::svt::OFilePickerInteractionHandler* pHandler = getOwnInteractionHandler(); + if (pHandler) + { + pHandler->resetUseState(); + pHandler->forgetRequest(); + } + } + + //-------------------------------------------------------------------- + sal_Bool SmartContent::implIs( const ::rtl::OUString& _rURL, Type _eType ) + { + // bind to this content + bindTo( _rURL ); + + // did we survive this? + if ( isInvalid() || !isBound() ) + return sal_False; + + DBG_ASSERT( m_pContent, "SmartContent::implIs: inconsistence!" ); + // if, after an bindTo, we don't have a content, then we should be INVALID, or at least + // NOT_BOUND (the latter happens, for example, if somebody tries to ask for an empty URL) + + sal_Bool bIs = sal_False; + try + { + if ( Folder == _eType ) + bIs = m_pContent->isFolder(); + else + bIs = m_pContent->isDocument(); + + // from here on, we definately know that the content is valid + m_eState = VALID; + } + catch( Exception& ) + { + // now we're definately invalid + m_eState = INVALID; + } + return bIs; + } + + //-------------------------------------------------------------------- + void SmartContent::getTitle( ::rtl::OUString& /* [out] */ _rTitle ) + { + if ( !isBound() || isInvalid() ) + return; + + try + { + ::rtl::OUString sTitle; + m_pContent->getPropertyValue( ::rtl::OUString::createFromAscii( "Title" ) ) >>= sTitle; + _rTitle = sTitle; + + // from here on, we definately know that the content is valid + m_eState = VALID; + } + catch( ::com::sun::star::uno::Exception& ) + { + // now we're definately invalid + m_eState = INVALID; + } + } + + //-------------------------------------------------------------------- + sal_Bool SmartContent::hasParentFolder( ) + { + if ( !isBound() || isInvalid() ) + return sal_False; + + sal_Bool bRet = sal_False; + try + { + Reference< XChild > xChild( m_pContent->get(), UNO_QUERY ); + if ( xChild.is() ) + { + Reference< XContent > xParent( xChild->getParent(), UNO_QUERY ); + if ( xParent.is() ) + { + String aParentURL = String( xParent->getIdentifier()->getContentIdentifier() ); + bRet = ( aParentURL.Len() > 0 && aParentURL != (String)(m_pContent->getURL()) ); + + // now we're definately valid + m_eState = VALID; + } + } + } + catch( const Exception& ) + { + // now we're definately invalid + m_eState = INVALID; + } + return bRet; + } + + //-------------------------------------------------------------------- + sal_Bool SmartContent::canCreateFolder( ) + { + if ( !isBound() || isInvalid() ) + return sal_False; + + sal_Bool bRet = sal_False; + try + { + Reference< XContentCreator > xCreator = Reference< XContentCreator >( m_pContent->get(), UNO_QUERY ); + if ( xCreator.is() ) + { + Sequence< ContentInfo > aInfo = xCreator->queryCreatableContentsInfo(); + const ContentInfo* pInfo = aInfo.getConstArray(); + sal_Int32 nCount = aInfo.getLength(); + for ( sal_Int32 i = 0; i < nCount; ++i, ++pInfo ) + { + // Simply look for the first KIND_FOLDER... + if ( pInfo->Attributes & ContentInfoAttribute::KIND_FOLDER ) + { + bRet = sal_True; + break; + } + } + + // now we're definately valid + m_eState = VALID; + } + } + catch( Exception& ) + { + // now we're definately invalid + m_eState = INVALID; + } + return bRet; + } + +//........................................................................ +} // namespace svt +//........................................................................ + |