| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef __FRAMEWORK_HELPER_OFRAMES_HXX_ |
| #define __FRAMEWORK_HELPER_OFRAMES_HXX_ |
| |
| //_________________________________________________________________________________________________________________ |
| // my own includes |
| //_________________________________________________________________________________________________________________ |
| |
| #include <classes/framecontainer.hxx> |
| #include <threadhelp/threadhelpbase.hxx> |
| #include <macros/generic.hxx> |
| #include <macros/xinterface.hxx> |
| #include <macros/xtypeprovider.hxx> |
| #include <macros/debug.hxx> |
| #include <general.h> |
| |
| //_________________________________________________________________________________________________________________ |
| // interface includes |
| //_________________________________________________________________________________________________________________ |
| #include <com/sun/star/lang/XMultiServiceFactory.hpp> |
| #include <com/sun/star/frame/XFrames.hpp> |
| #include <com/sun/star/frame/XFrame.hpp> |
| |
| //_________________________________________________________________________________________________________________ |
| // other includes |
| //_________________________________________________________________________________________________________________ |
| #include <cppuhelper/implbase1.hxx> |
| #include <cppuhelper/weakref.hxx> |
| |
| //_________________________________________________________________________________________________________________ |
| // namespace |
| //_________________________________________________________________________________________________________________ |
| |
| namespace framework{ |
| |
| //_________________________________________________________________________________________________________________ |
| // exported const |
| //_________________________________________________________________________________________________________________ |
| |
| //_________________________________________________________________________________________________________________ |
| // exported definitions |
| //_________________________________________________________________________________________________________________ |
| |
| /*-************************************************************************************************************//** |
| @short implement XFrames, XIndexAccess and XElementAccess interfaces as helper for services |
| @descr Use this class as helper for these interfaces. We share mutex and framecontainer with ouer owner. |
| The framecontainer is a member of it from type "FrameContainer". That means; |
| we have the same information as ouer owner. In current implementation we use mutex and lock-mechanism |
| to prevent against compete access. In future we plan support of semaphore! |
| |
| @devstatus deprecated |
| @implements XInterface |
| XFrames |
| XIndexAccess |
| XElementAccess |
| @base OWeakObject |
| |
| @ATTENTION Don't use this class as direct member - use it dynamicly. Do not derive from this class. |
| We hold a weakreference to ouer owner not to ouer superclass. |
| |
| @devstatus deprecated |
| *//*-*************************************************************************************************************/ |
| |
| class OFrames : private ThreadHelpBase , // Must be the first of baseclasses - Is necessary for right initialization of objects! |
| public ::cppu::WeakImplHelper1< ::com::sun::star::frame::XFrames > |
| { |
| //------------------------------------------------------------------------------------------------------------- |
| // public methods |
| //------------------------------------------------------------------------------------------------------------- |
| |
| public: |
| |
| //--------------------------------------------------------------------------------------------------------- |
| // constructor / destructor |
| //--------------------------------------------------------------------------------------------------------- |
| |
| /*-****************************************************************************************************//** |
| @short standard ctor |
| @descr These initialize a new instance of this class with all needed informations for work. |
| We share framecontainer with owner implementation! It's a threadsafe container. |
| |
| @seealso - |
| |
| @param "xFactory" , reference to factory which has created ouer owner(!). We can use these to create new uno-services. |
| @param "xOwner" , reference to ouer owner. We hold a wekreference to prevent us against cross-references! |
| @param "pFrameContainer" , pointer to shared framecontainer of owner. It's valid only, if weakreference is valid! |
| @return - |
| |
| @onerror - |
| *//*-*****************************************************************************************************/ |
| |
| OFrames( const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory , |
| const css::uno::Reference< css::frame::XFrame >& xOwner , |
| FrameContainer* pFrameContainer ); |
| |
| //--------------------------------------------------------------------------------------------------------- |
| // XFrames |
| //--------------------------------------------------------------------------------------------------------- |
| |
| /*-****************************************************************************************************//** |
| @short append frame to container |
| @descr We share the container with ouer owner. We can do this only, if no lock is set on container. |
| Valid references are accepted only! |
| |
| @seealso class FrameContainer |
| |
| @param "xFrame", reference to an existing frame to append. |
| @return - |
| |
| @onerror We do nothing in release or throw an assert in debug version. |
| *//*-*****************************************************************************************************/ |
| |
| virtual void SAL_CALL append( const css::uno::Reference< css::frame::XFrame >& xFrame ) throw( css::uno::RuntimeException ); |
| |
| /*-****************************************************************************************************//** |
| @short remove frame from container |
| @descr This is the companion to append(). We only accept valid references and don't work, if |
| a lock is set. |
| |
| @seealso class FrameContainer |
| |
| @param "xFrame", reference to an existing frame to remove. |
| @return - |
| |
| @onerror We do nothing in release or throw an assert in debug version. |
| *//*-*****************************************************************************************************/ |
| |
| virtual void SAL_CALL remove( const css::uno::Reference< css::frame::XFrame >& xFrame ) throw( css::uno::RuntimeException ); |
| |
| /*-****************************************************************************************************//** |
| @short return list of all applicable frames for given flags |
| @descr Call these to get a list of all frames, which are match with given search flags. |
| |
| @seealso - |
| |
| @param "nSearchFlag", flags to search right frames. |
| @return A list of founded frames. |
| |
| @onerror An empty list is returned. |
| *//*-*****************************************************************************************************/ |
| |
| virtual css::uno::Sequence< css::uno::Reference< css::frame::XFrame > > SAL_CALL queryFrames( sal_Int32 nSearchFlags ) throw( css::uno::RuntimeException ); |
| |
| //--------------------------------------------------------------------------------------------------------- |
| // XIndexAccess |
| //--------------------------------------------------------------------------------------------------------- |
| |
| /*-****************************************************************************************************//** |
| @short get count of all current frames in container |
| @descr This is the beginning of full index-access. With a count you can step over all items in container. |
| Next call shuoƶd be getByIndex(). But these mechanism works only, if no lock in container is set! |
| |
| @seealso class FrameContainer |
| @seealso method getByIndex() |
| |
| @param - |
| @return Count of current items in container. |
| |
| @onerror If a lock is set, we return 0 for prevent further access! |
| *//*-*****************************************************************************************************/ |
| |
| virtual sal_Int32 SAL_CALL getCount() throw( css::uno::RuntimeException ); |
| |
| /*-****************************************************************************************************//** |
| @short get specified container item by index |
| @descr If you called getCount() successful - this method return the specified element as an Any. |
| You must observe the range from 0 to count-1! Otherwise an IndexOutOfBoundsException is thrown. |
| |
| @seealso class FrameContainer |
| @seealso method getCount() |
| |
| @param "nIndex", valid index to get container item. |
| @return A container item (specified by index) wrapped in an Any. |
| |
| @onerror If a lock is set, we return an empty Any! |
| @onerror If index out of range, an IndexOutOfBoundsException is thrown. |
| *//*-*****************************************************************************************************/ |
| |
| virtual css::uno::Any SAL_CALL getByIndex( sal_Int32 nIndex ) throw( css::lang::IndexOutOfBoundsException , |
| css::lang::WrappedTargetException , |
| css::uno::RuntimeException ); |
| |
| //--------------------------------------------------------------------------------------------------------- |
| // XElementAccess |
| //--------------------------------------------------------------------------------------------------------- |
| |
| /*-****************************************************************************************************//** |
| @short get uno-type of all container items |
| @descr In current implementation type is fixed to XFrame! |
| (container-lock is ignored) |
| |
| @seealso - |
| |
| @param - |
| @return A uno-type descriptor. |
| |
| @onerror - |
| *//*-*****************************************************************************************************/ |
| |
| virtual css::uno::Type SAL_CALL getElementType() throw( css::uno::RuntimeException ); |
| |
| /*-****************************************************************************************************//** |
| @short get fill state of current container |
| @descr Call these to get information about, if items exist in container or not. |
| (container-lock is ignored) |
| |
| @seealso - |
| |
| @param - |
| @return sal_True, if container contains some items. |
| @return sal_False, otherwise. |
| |
| @onerror We return sal_False. |
| *//*-*****************************************************************************************************/ |
| |
| virtual sal_Bool SAL_CALL hasElements() throw( css::uno::RuntimeException ); |
| |
| //------------------------------------------------------------------------------------------------------------- |
| // protected methods |
| //------------------------------------------------------------------------------------------------------------- |
| |
| protected: |
| |
| /*-****************************************************************************************************//** |
| @short standard destructor |
| @descr This method destruct an instance of this class and clear some member. |
| This method is protected, because its not allowed to use this class as a member! |
| You MUST use a dynamical instance (pointer). That's the reason for a protected dtor. |
| |
| @seealso - |
| |
| @param - |
| @return - |
| |
| @onerror - |
| *//*-*****************************************************************************************************/ |
| |
| virtual ~OFrames(); |
| |
| /*-****************************************************************************************************//** |
| @short reset instance to default values |
| @descr There are two ways to delete an instance of this class.<BR> |
| 1) delete with destructor<BR> |
| 2) dispose from parent or factory ore ...<BR> |
| This method do the same for both ways! It free used memory and release references ... |
| |
| @seealso method dispose() (if it exist!) |
| @seealso destructor ~TaskEnumeration() |
| |
| @param - |
| |
| @return - |
| |
| @onerror - |
| *//*-*****************************************************************************************************/ |
| |
| virtual void impl_resetObject(); |
| |
| //------------------------------------------------------------------------------------------------------------- |
| // private methods |
| //------------------------------------------------------------------------------------------------------------- |
| |
| private: |
| |
| /*-****************************************************************************************************//** |
| @short append one sequence to another |
| @descr There is no operation to add to sequences! Use this helper-method to do this. |
| |
| @seealso class Sequence |
| |
| @param "seqDestination", reference to sequence on which operation will append the other sequence. |
| @param "seqSource" , reference to sequence for append. |
| @return "seqDestination" is parameter AND return value at the same time. |
| |
| @onerror - |
| *//*-*****************************************************************************************************/ |
| |
| void impl_appendSequence( css::uno::Sequence< css::uno::Reference< css::frame::XFrame > >& seqDestination , |
| const css::uno::Sequence< css::uno::Reference< css::frame::XFrame > >& seqSource ); |
| |
| //------------------------------------------------------------------------------------------------------------- |
| // debug methods |
| // (should be private everyway!) |
| //------------------------------------------------------------------------------------------------------------- |
| |
| /*-****************************************************************************************************//** |
| @short debug-method to check incoming parameter of some other mehods of this class |
| @descr The following methods are used to check parameters for other methods |
| of this class. The return value is used directly for an ASSERT(...). |
| |
| @seealso ASSERTs in implementation! |
| |
| @param references to checking variables |
| @return sal_False ,on invalid parameter |
| @return sal_True ,otherwise |
| |
| @onerror - |
| *//*-*****************************************************************************************************/ |
| |
| #ifdef ENABLE_ASSERTIONS |
| |
| private: |
| |
| static sal_Bool impldbg_checkParameter_OFramesCtor ( const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory , |
| const css::uno::Reference< css::frame::XFrame >& xOwner , |
| FrameContainer* pFrameContainer ); |
| static sal_Bool impldbg_checkParameter_append ( const css::uno::Reference< css::frame::XFrame >& xFrame ); |
| static sal_Bool impldbg_checkParameter_remove ( const css::uno::Reference< css::frame::XFrame >& xFrame ); |
| static sal_Bool impldbg_checkParameter_queryFrames ( sal_Int32 nSearchFlags ); |
| |
| #endif // #ifdef ENABLE_ASSERTIONS |
| |
| //------------------------------------------------------------------------------------------------------------- |
| // variables |
| // (should be private everyway!) |
| //------------------------------------------------------------------------------------------------------------- |
| |
| private: |
| |
| css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory ; /// reference to global servicemanager |
| css::uno::WeakReference< css::frame::XFrame > m_xOwner ; /// reference to owner of this instance (Hold no hard reference!) |
| FrameContainer* m_pFrameContainer ; /// with owner shared list to hold all direct childs of an XFramesSupplier |
| sal_Bool m_bRecursiveSearchProtection ; /// flag to protect against recursive searches of frames at parents |
| |
| }; // class OFrames |
| |
| } // namespace framework |
| |
| #endif // #ifndef __FRAMEWORK_HELPER_OFRAMES_HXX_ |