summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fpicker/source/office/fpinteraction.hxx130
-rw-r--r--fpicker/source/office/fps_office.cxx52
-rw-r--r--fpicker/source/office/fpsmartcontent.cxx338
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
+//........................................................................
+