16d739b60SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 36d739b60SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 46d739b60SAndrew Rist * or more contributor license agreements. See the NOTICE file 56d739b60SAndrew Rist * distributed with this work for additional information 66d739b60SAndrew Rist * regarding copyright ownership. The ASF licenses this file 76d739b60SAndrew Rist * to you under the Apache License, Version 2.0 (the 86d739b60SAndrew Rist * "License"); you may not use this file except in compliance 96d739b60SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 116d739b60SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 136d739b60SAndrew Rist * Unless required by applicable law or agreed to in writing, 146d739b60SAndrew Rist * software distributed under the License is distributed on an 156d739b60SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 166d739b60SAndrew Rist * KIND, either express or implied. See the License for the 176d739b60SAndrew Rist * specific language governing permissions and limitations 186d739b60SAndrew Rist * under the License. 19cdf0e10cSrcweir * 206d739b60SAndrew Rist *************************************************************/ 216d739b60SAndrew Rist 226d739b60SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_framework.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 28cdf0e10cSrcweir // my own includes 29cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 30cdf0e10cSrcweir #include <helper/oframes.hxx> 31cdf0e10cSrcweir 32cdf0e10cSrcweir #ifndef _FRAMEWORK_THREADHELP_RESETABLEGUARD_HXX_ 33cdf0e10cSrcweir #include <threadhelp/resetableguard.hxx> 34cdf0e10cSrcweir #endif 35cdf0e10cSrcweir 36cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 37cdf0e10cSrcweir // interface includes 38cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 39cdf0e10cSrcweir #include <com/sun/star/frame/XDesktop.hpp> 40cdf0e10cSrcweir #include <com/sun/star/frame/FrameSearchFlag.hpp> 41cdf0e10cSrcweir 42cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 43cdf0e10cSrcweir // includes of other projects 44cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 45cdf0e10cSrcweir #include <vcl/svapp.hxx> 46cdf0e10cSrcweir 47cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 48cdf0e10cSrcweir // namespace 49cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 50cdf0e10cSrcweir 51cdf0e10cSrcweir namespace framework{ 52cdf0e10cSrcweir 53cdf0e10cSrcweir using namespace ::com::sun::star::container ; 54cdf0e10cSrcweir using namespace ::com::sun::star::frame ; 55cdf0e10cSrcweir using namespace ::com::sun::star::lang ; 56cdf0e10cSrcweir using namespace ::com::sun::star::uno ; 57cdf0e10cSrcweir using namespace ::cppu ; 58cdf0e10cSrcweir using namespace ::osl ; 59cdf0e10cSrcweir using namespace ::rtl ; 60cdf0e10cSrcweir using namespace ::std ; 61cdf0e10cSrcweir using namespace ::vos ; 62cdf0e10cSrcweir 63cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 64cdf0e10cSrcweir // non exported const 65cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 66cdf0e10cSrcweir 67cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 68cdf0e10cSrcweir // non exported definitions 69cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 70cdf0e10cSrcweir 71cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 72cdf0e10cSrcweir // declarations 73cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 74cdf0e10cSrcweir 75cdf0e10cSrcweir //***************************************************************************************************************** 76cdf0e10cSrcweir // constructor 77cdf0e10cSrcweir //***************************************************************************************************************** 78cdf0e10cSrcweir OFrames::OFrames( const css::uno::Reference< XMultiServiceFactory >& xFactory , 79cdf0e10cSrcweir const css::uno::Reference< XFrame >& xOwner , 80cdf0e10cSrcweir FrameContainer* pFrameContainer ) 81cdf0e10cSrcweir // Init baseclasses first 82cdf0e10cSrcweir : ThreadHelpBase ( &Application::GetSolarMutex() ) 83cdf0e10cSrcweir // Init member 84cdf0e10cSrcweir , m_xFactory ( xFactory ) 85cdf0e10cSrcweir , m_xOwner ( xOwner ) 86cdf0e10cSrcweir , m_pFrameContainer ( pFrameContainer ) 87cdf0e10cSrcweir , m_bRecursiveSearchProtection( sal_False ) 88cdf0e10cSrcweir { 89cdf0e10cSrcweir // Safe impossible cases 90cdf0e10cSrcweir // Method is not defined for ALL incoming parameters! 91cdf0e10cSrcweir LOG_ASSERT( impldbg_checkParameter_OFramesCtor( xFactory, xOwner, pFrameContainer ), "OFrames::OFrames()\nInvalid parameter detected!\n" ) 92cdf0e10cSrcweir } 93cdf0e10cSrcweir 94cdf0e10cSrcweir //***************************************************************************************************************** 95cdf0e10cSrcweir // (proteced!) destructor 96cdf0e10cSrcweir //***************************************************************************************************************** 97cdf0e10cSrcweir OFrames::~OFrames() 98cdf0e10cSrcweir { 99cdf0e10cSrcweir // Reset instance, free memory .... 100cdf0e10cSrcweir impl_resetObject(); 101cdf0e10cSrcweir } 102cdf0e10cSrcweir 103cdf0e10cSrcweir //***************************************************************************************************************** 104cdf0e10cSrcweir // XFrames 105cdf0e10cSrcweir //***************************************************************************************************************** 106cdf0e10cSrcweir void SAL_CALL OFrames::append( const css::uno::Reference< XFrame >& xFrame ) throw( RuntimeException ) 107cdf0e10cSrcweir { 108cdf0e10cSrcweir // Ready for multithreading 109cdf0e10cSrcweir ResetableGuard aGuard( m_aLock ); 110cdf0e10cSrcweir 111cdf0e10cSrcweir // Safe impossible cases 112cdf0e10cSrcweir // Method is not defined for ALL incoming parameters! 113cdf0e10cSrcweir LOG_ASSERT( impldbg_checkParameter_append( xFrame ), "OFrames::append()\nInvalid parameter detected!\n" ) 114cdf0e10cSrcweir 115cdf0e10cSrcweir // Do the follow only, if owner instance valid! 116cdf0e10cSrcweir // Lock owner for follow operations - make a "hard reference"! 117cdf0e10cSrcweir css::uno::Reference< XFramesSupplier > xOwner( m_xOwner.get(), UNO_QUERY ); 118cdf0e10cSrcweir if ( xOwner.is() == sal_True ) 119cdf0e10cSrcweir { 120cdf0e10cSrcweir // Append frame to the end of the container ... 121cdf0e10cSrcweir m_pFrameContainer->append( xFrame ); 122cdf0e10cSrcweir // Set owner of this instance as parent of the new frame in container! 123cdf0e10cSrcweir xFrame->setCreator( xOwner ); 124cdf0e10cSrcweir } 125b12a77c9Smseidel // Else; Do nothing! Our owner is dead. 126b12a77c9Smseidel LOG_ASSERT( !(xOwner.is()==sal_False), "OFrames::append()\nOur owner is dead - you can't append any frames ...!\n" ) 127cdf0e10cSrcweir } 128cdf0e10cSrcweir 129cdf0e10cSrcweir //***************************************************************************************************************** 130cdf0e10cSrcweir // XFrames 131cdf0e10cSrcweir //***************************************************************************************************************** 132cdf0e10cSrcweir void SAL_CALL OFrames::remove( const css::uno::Reference< XFrame >& xFrame ) throw( RuntimeException ) 133cdf0e10cSrcweir { 134cdf0e10cSrcweir // Ready for multithreading 135cdf0e10cSrcweir ResetableGuard aGuard( m_aLock ); 136cdf0e10cSrcweir 137cdf0e10cSrcweir // Safe impossible cases 138cdf0e10cSrcweir // Method is not defined for ALL incoming parameters! 139cdf0e10cSrcweir LOG_ASSERT( impldbg_checkParameter_remove( xFrame ), "OFrames::remove()\nInvalid parameter detected!\n" ) 140cdf0e10cSrcweir 141cdf0e10cSrcweir // Do the follow only, if owner instance valid! 142cdf0e10cSrcweir // Lock owner for follow operations - make a "hard reference"! 143cdf0e10cSrcweir css::uno::Reference< XFramesSupplier > xOwner( m_xOwner.get(), UNO_QUERY ); 144cdf0e10cSrcweir if ( xOwner.is() == sal_True ) 145cdf0e10cSrcweir { 146cdf0e10cSrcweir // Search frame and remove it from container ... 147cdf0e10cSrcweir m_pFrameContainer->remove( xFrame ); 148cdf0e10cSrcweir // Don't reset owner-property of removed frame! 149cdf0e10cSrcweir // This must do the caller of this method himself. 150cdf0e10cSrcweir // See documentation of interface XFrames for further informations. 151cdf0e10cSrcweir } 152b12a77c9Smseidel // Else; Do nothing! Our owner is dead. 153b12a77c9Smseidel LOG_ASSERT( !(xOwner.is()==sal_False), "OFrames::remove()\nOur owner is dead - you can't remove any frames ...!\n" ) 154cdf0e10cSrcweir } 155cdf0e10cSrcweir 156cdf0e10cSrcweir //***************************************************************************************************************** 157cdf0e10cSrcweir // XFrames 158cdf0e10cSrcweir //***************************************************************************************************************** 159cdf0e10cSrcweir Sequence< css::uno::Reference< XFrame > > SAL_CALL OFrames::queryFrames( sal_Int32 nSearchFlags ) throw( RuntimeException ) 160cdf0e10cSrcweir { 161cdf0e10cSrcweir // Ready for multithreading 162cdf0e10cSrcweir ResetableGuard aGuard( m_aLock ); 163cdf0e10cSrcweir 164cdf0e10cSrcweir // Safe impossible cases 165cdf0e10cSrcweir // Method is not defined for ALL incoming parameters! 166cdf0e10cSrcweir LOG_ASSERT( impldbg_checkParameter_queryFrames( nSearchFlags ), "OFrames::queryFrames()\nInvalid parameter detected!\n" ) 167cdf0e10cSrcweir 168cdf0e10cSrcweir // Set default return value. (empty sequence) 169cdf0e10cSrcweir Sequence< css::uno::Reference< XFrame > > seqFrames; 170cdf0e10cSrcweir 171cdf0e10cSrcweir // Do the follow only, if owner instance valid. 172cdf0e10cSrcweir // Lock owner for follow operations - make a "hard reference"! 173cdf0e10cSrcweir css::uno::Reference< XFrame > xOwner( m_xOwner.get(), UNO_QUERY ); 174cdf0e10cSrcweir if ( xOwner.is() == sal_True ) 175cdf0e10cSrcweir { 176cdf0e10cSrcweir // Work only, if search was not started here ...! 177cdf0e10cSrcweir if( m_bRecursiveSearchProtection == sal_False ) 178cdf0e10cSrcweir { 179cdf0e10cSrcweir // This class is a helper for services, which must implement XFrames. 180cdf0e10cSrcweir // His parent and childs are MY parent and childs to. 181cdf0e10cSrcweir // All searchflags are supported by this implementation! 182cdf0e10cSrcweir // If some flags should not be supported - don't call me with this flags!!! 183cdf0e10cSrcweir 184cdf0e10cSrcweir //_____________________________________________________________________________________________________________ 185cdf0e10cSrcweir // Search with AUTO-flag is not supported yet! 186cdf0e10cSrcweir // We think about right implementation. 187cdf0e10cSrcweir LOG_ASSERT( !(nSearchFlags & FrameSearchFlag::AUTO), "OFrames::queryFrames()\nSearch with AUTO-flag is not supported yet!\nWe think about right implementation.\n" ) 188cdf0e10cSrcweir // If searched for tasks ... 189cdf0e10cSrcweir // Its not supported yet. 190cdf0e10cSrcweir LOG_ASSERT( !(nSearchFlags & FrameSearchFlag::AUTO), "OFrames::queryFrames()\nSearch for tasks not supported yet!\n" ) 191cdf0e10cSrcweir 192cdf0e10cSrcweir //_____________________________________________________________________________________________________________ 193cdf0e10cSrcweir // Search for ALL and GLOBAL is superflous! 194cdf0e10cSrcweir // We support all necessary flags, from which these two flags are derived. 195cdf0e10cSrcweir // ALL = PARENT + SELF + CHILDREN + SIBLINGS 196cdf0e10cSrcweir // GLOBAL = ALL + TASKS 197cdf0e10cSrcweir 198cdf0e10cSrcweir //_____________________________________________________________________________________________________________ 199cdf0e10cSrcweir // Add parent to list ... if any exist! 200cdf0e10cSrcweir if( nSearchFlags & FrameSearchFlag::PARENT ) 201cdf0e10cSrcweir { 202cdf0e10cSrcweir css::uno::Reference< XFrame > xParent( xOwner->getCreator(), UNO_QUERY ); 203cdf0e10cSrcweir if( xParent.is() == sal_True ) 204cdf0e10cSrcweir { 205cdf0e10cSrcweir Sequence< css::uno::Reference< XFrame > > seqParent( 1 ); 206cdf0e10cSrcweir seqParent[0] = xParent; 207cdf0e10cSrcweir impl_appendSequence( seqFrames, seqParent ); 208cdf0e10cSrcweir } 209cdf0e10cSrcweir } 210cdf0e10cSrcweir 211cdf0e10cSrcweir //_____________________________________________________________________________________________________________ 212cdf0e10cSrcweir // Add owner to list if SELF is searched. 213cdf0e10cSrcweir if( nSearchFlags & FrameSearchFlag::SELF ) 214cdf0e10cSrcweir { 215cdf0e10cSrcweir Sequence< css::uno::Reference< XFrame > > seqSelf( 1 ); 216cdf0e10cSrcweir seqSelf[0] = xOwner; 217cdf0e10cSrcweir impl_appendSequence( seqFrames, seqSelf ); 218cdf0e10cSrcweir } 219cdf0e10cSrcweir 220cdf0e10cSrcweir //_____________________________________________________________________________________________________________ 221cdf0e10cSrcweir // Add SIBLINGS to list. 222cdf0e10cSrcweir if( nSearchFlags & FrameSearchFlag::SIBLINGS ) 223cdf0e10cSrcweir { 224cdf0e10cSrcweir // Else; start a new search. 225cdf0e10cSrcweir // Protect this instance against recursive calls from parents. 226cdf0e10cSrcweir m_bRecursiveSearchProtection = sal_True; 227cdf0e10cSrcweir // Ask parent of my owner for frames and append results to return list. 228cdf0e10cSrcweir css::uno::Reference< XFramesSupplier > xParent( xOwner->getCreator(), UNO_QUERY ); 229cdf0e10cSrcweir // If a parent exist ... 230cdf0e10cSrcweir if ( xParent.is() == sal_True ) 231cdf0e10cSrcweir { 232cdf0e10cSrcweir // ... ask him for right frames. 233cdf0e10cSrcweir impl_appendSequence( seqFrames, xParent->getFrames()->queryFrames( nSearchFlags ) ); 234cdf0e10cSrcweir } 235cdf0e10cSrcweir // We have all searched informations. 236cdf0e10cSrcweir // Reset protection-mode. 237cdf0e10cSrcweir m_bRecursiveSearchProtection = sal_False; 238cdf0e10cSrcweir } 239cdf0e10cSrcweir 240cdf0e10cSrcweir //_____________________________________________________________________________________________________________ 241cdf0e10cSrcweir // If searched for children, step over all elements in container and collect the informations. 242cdf0e10cSrcweir if ( nSearchFlags & FrameSearchFlag::CHILDREN ) 243cdf0e10cSrcweir { 244cdf0e10cSrcweir // Don't search for parents, siblings and self at childrens! 245cdf0e10cSrcweir // These things are supported by this instance himself. 246cdf0e10cSrcweir sal_Int32 nChildSearchFlags = FrameSearchFlag::SELF | FrameSearchFlag::CHILDREN; 247cdf0e10cSrcweir // Step over all items of container and ask childrens for frames. 248cdf0e10cSrcweir sal_uInt32 nCount = m_pFrameContainer->getCount(); 249cdf0e10cSrcweir for ( sal_uInt32 nIndex=0; nIndex<nCount; ++nIndex ) 250cdf0e10cSrcweir { 251cdf0e10cSrcweir // We don't must control this conversion. 252cdf0e10cSrcweir // We have done this at append()! 253cdf0e10cSrcweir css::uno::Reference< XFramesSupplier > xItem( (*m_pFrameContainer)[nIndex], UNO_QUERY ); 254cdf0e10cSrcweir impl_appendSequence( seqFrames, xItem->getFrames()->queryFrames( nChildSearchFlags ) ); 255cdf0e10cSrcweir } 256cdf0e10cSrcweir } 257cdf0e10cSrcweir } 258cdf0e10cSrcweir } 259b12a77c9Smseidel // Else; Do nothing! Our owner is dead. 260b12a77c9Smseidel LOG_ASSERT( !(xOwner.is()==sal_False), "OFrames::queryFrames()\nOur owner is dead - you can't query for frames ...!\n" ) 261cdf0e10cSrcweir 262de337080SJohn Bampton // Return result of this operation. 263cdf0e10cSrcweir return seqFrames; 264cdf0e10cSrcweir } 265cdf0e10cSrcweir 266cdf0e10cSrcweir //***************************************************************************************************************** 267cdf0e10cSrcweir // XIndexAccess 268cdf0e10cSrcweir //***************************************************************************************************************** 269cdf0e10cSrcweir sal_Int32 SAL_CALL OFrames::getCount() throw( RuntimeException ) 270cdf0e10cSrcweir { 271cdf0e10cSrcweir // Ready for multithreading 272cdf0e10cSrcweir ResetableGuard aGuard( m_aLock ); 273cdf0e10cSrcweir 274cdf0e10cSrcweir // Set default return value. 275cdf0e10cSrcweir sal_Int32 nCount = 0; 276cdf0e10cSrcweir 277cdf0e10cSrcweir // Do the follow only, if owner instance valid. 278cdf0e10cSrcweir // Lock owner for follow operations - make a "hard reference"! 279cdf0e10cSrcweir css::uno::Reference< XFrame > xOwner( m_xOwner.get(), UNO_QUERY ); 280cdf0e10cSrcweir if ( xOwner.is() == sal_True ) 281cdf0e10cSrcweir { 282cdf0e10cSrcweir // Set CURRENT size of container for return. 283cdf0e10cSrcweir nCount = m_pFrameContainer->getCount(); 284cdf0e10cSrcweir } 285cdf0e10cSrcweir 286cdf0e10cSrcweir // Return result. 287cdf0e10cSrcweir return nCount; 288cdf0e10cSrcweir } 289cdf0e10cSrcweir 290cdf0e10cSrcweir //***************************************************************************************************************** 291cdf0e10cSrcweir // XIndexAccess 292cdf0e10cSrcweir //***************************************************************************************************************** 293cdf0e10cSrcweir Any SAL_CALL OFrames::getByIndex( sal_Int32 nIndex ) throw( IndexOutOfBoundsException , 294cdf0e10cSrcweir WrappedTargetException , 295cdf0e10cSrcweir RuntimeException ) 296cdf0e10cSrcweir { 297cdf0e10cSrcweir // Ready for multithreading 298cdf0e10cSrcweir ResetableGuard aGuard( m_aLock ); 299cdf0e10cSrcweir 300cdf0e10cSrcweir sal_uInt32 nCount = m_pFrameContainer->getCount(); 301cdf0e10cSrcweir if ( nIndex < 0 || ( sal::static_int_cast< sal_uInt32 >( nIndex ) >= nCount )) 302cdf0e10cSrcweir throw IndexOutOfBoundsException( OUString::createFromAscii( "OFrames::getByIndex - Index out of bounds" ), 303cdf0e10cSrcweir (OWeakObject *)this ); 304cdf0e10cSrcweir 305cdf0e10cSrcweir // Set default return value. 306cdf0e10cSrcweir Any aReturnValue; 307cdf0e10cSrcweir 308cdf0e10cSrcweir // Do the follow only, if owner instance valid. 309cdf0e10cSrcweir // Lock owner for follow operations - make a "hard reference"! 310cdf0e10cSrcweir css::uno::Reference< XFrame > xOwner( m_xOwner.get(), UNO_QUERY ); 311cdf0e10cSrcweir if ( xOwner.is() == sal_True ) 312cdf0e10cSrcweir { 313cdf0e10cSrcweir // Get element form container. 314cdf0e10cSrcweir // (If index not valid, FrameContainer return NULL!) 315cdf0e10cSrcweir aReturnValue <<= (*m_pFrameContainer)[nIndex]; 316cdf0e10cSrcweir } 317cdf0e10cSrcweir 318cdf0e10cSrcweir // Return result of this operation. 319cdf0e10cSrcweir return aReturnValue; 320cdf0e10cSrcweir } 321cdf0e10cSrcweir 322cdf0e10cSrcweir //***************************************************************************************************************** 323cdf0e10cSrcweir // XElementAccess 324cdf0e10cSrcweir //***************************************************************************************************************** 325cdf0e10cSrcweir Type SAL_CALL OFrames::getElementType() throw( RuntimeException ) 326cdf0e10cSrcweir { 327cdf0e10cSrcweir // This "container" support XFrame-interfaces only! 328cdf0e10cSrcweir return ::getCppuType( (const css::uno::Reference< XFrame >*)NULL ); 329cdf0e10cSrcweir } 330cdf0e10cSrcweir 331cdf0e10cSrcweir //***************************************************************************************************************** 332cdf0e10cSrcweir // XElementAccess 333cdf0e10cSrcweir //***************************************************************************************************************** 334cdf0e10cSrcweir sal_Bool SAL_CALL OFrames::hasElements() throw( RuntimeException ) 335cdf0e10cSrcweir { 336cdf0e10cSrcweir // Ready for multithreading 337cdf0e10cSrcweir ResetableGuard aGuard( m_aLock ); 338cdf0e10cSrcweir 339cdf0e10cSrcweir // Set default return value. 340cdf0e10cSrcweir sal_Bool bHasElements = sal_False; 341cdf0e10cSrcweir // Do the follow only, if owner instance valid. 342cdf0e10cSrcweir // Lock owner for follow operations - make a "hard reference"! 343cdf0e10cSrcweir css::uno::Reference< XFrame > xOwner( m_xOwner.get(), UNO_QUERY ); 344cdf0e10cSrcweir if ( xOwner.is() == sal_True ) 345cdf0e10cSrcweir { 346cdf0e10cSrcweir // If some elements exist ... 347cdf0e10cSrcweir if ( m_pFrameContainer->getCount() > 0 ) 348cdf0e10cSrcweir { 349cdf0e10cSrcweir // ... change this state value! 350cdf0e10cSrcweir bHasElements = sal_True; 351cdf0e10cSrcweir } 352cdf0e10cSrcweir } 353cdf0e10cSrcweir // Return result of this operation. 354cdf0e10cSrcweir return bHasElements; 355cdf0e10cSrcweir } 356cdf0e10cSrcweir 357cdf0e10cSrcweir //***************************************************************************************************************** 358cdf0e10cSrcweir // proteced method 359cdf0e10cSrcweir //***************************************************************************************************************** 360cdf0e10cSrcweir void OFrames::impl_resetObject() 361cdf0e10cSrcweir { 362cdf0e10cSrcweir // Attention: 363cdf0e10cSrcweir // Write this for multiple calls - NOT AT THE SAME TIME - but for more then one call again)! 364cdf0e10cSrcweir // It exist two ways to call this method. From destructor and from disposing(). 3652e3a1b6eSmseidel // I can't say, which one is the first. Normally the disposing-call - but other way .... 366cdf0e10cSrcweir 367cdf0e10cSrcweir // This instance can't work if the weakreference to owner is invalid! 368cdf0e10cSrcweir // Destroy this to reset this object. 369cdf0e10cSrcweir m_xOwner = WeakReference< XFrame >(); 370cdf0e10cSrcweir // Reset pointer to shared container to! 371cdf0e10cSrcweir m_pFrameContainer = NULL; 372cdf0e10cSrcweir } 373cdf0e10cSrcweir 374cdf0e10cSrcweir //***************************************************************************************************************** 375cdf0e10cSrcweir // private method 376cdf0e10cSrcweir //***************************************************************************************************************** 377cdf0e10cSrcweir void OFrames::impl_appendSequence( Sequence< css::uno::Reference< XFrame > >& seqDestination , 378cdf0e10cSrcweir const Sequence< css::uno::Reference< XFrame > >& seqSource ) 379cdf0e10cSrcweir { 380cdf0e10cSrcweir // Get some informations about the sequences. 381cdf0e10cSrcweir sal_Int32 nSourceCount = seqSource.getLength(); 382cdf0e10cSrcweir sal_Int32 nDestinationCount = seqDestination.getLength(); 383cdf0e10cSrcweir const css::uno::Reference< XFrame >* pSourceAccess = seqSource.getConstArray(); 384cdf0e10cSrcweir css::uno::Reference< XFrame >* pDestinationAccess = seqDestination.getArray(); 385cdf0e10cSrcweir 386cdf0e10cSrcweir // Get memory for result list. 387cdf0e10cSrcweir Sequence< css::uno::Reference< XFrame > > seqResult ( nSourceCount + nDestinationCount ); 388cdf0e10cSrcweir css::uno::Reference< XFrame >* pResultAccess = seqResult.getArray(); 389cdf0e10cSrcweir sal_Int32 nResultPosition = 0; 390cdf0e10cSrcweir 391cdf0e10cSrcweir // Copy all items from first sequence. 392cdf0e10cSrcweir for ( sal_Int32 nSourcePosition=0; nSourcePosition<nSourceCount; ++nSourcePosition ) 393cdf0e10cSrcweir { 394cdf0e10cSrcweir pResultAccess[nResultPosition] = pSourceAccess[nSourcePosition]; 395cdf0e10cSrcweir ++nResultPosition; 396cdf0e10cSrcweir } 397cdf0e10cSrcweir 398cdf0e10cSrcweir // Don't manipulate nResultPosition between these two loops! 399cdf0e10cSrcweir // Its the current position in the result list. 400cdf0e10cSrcweir 401cdf0e10cSrcweir // Copy all items from second sequence. 402cdf0e10cSrcweir for ( sal_Int32 nDestinationPosition=0; nDestinationPosition<nDestinationCount; ++nDestinationPosition ) 403cdf0e10cSrcweir { 404cdf0e10cSrcweir pResultAccess[nResultPosition] = pDestinationAccess[nDestinationPosition]; 405cdf0e10cSrcweir ++nResultPosition; 406cdf0e10cSrcweir } 407cdf0e10cSrcweir 408cdf0e10cSrcweir // Return result of this operation. 409cdf0e10cSrcweir seqDestination.realloc( 0 ); 410cdf0e10cSrcweir seqDestination = seqResult; 411cdf0e10cSrcweir } 412cdf0e10cSrcweir 413cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 414cdf0e10cSrcweir // debug methods 415cdf0e10cSrcweir //_________________________________________________________________________________________________________________ 416cdf0e10cSrcweir 417cdf0e10cSrcweir /*----------------------------------------------------------------------------------------------------------------- 418cdf0e10cSrcweir The follow methods checks the parameter for other functions. If a parameter or his value is non valid, 419cdf0e10cSrcweir we return "sal_False". (else sal_True) This mechanism is used to throw an ASSERT! 420cdf0e10cSrcweir 421cdf0e10cSrcweir ATTENTION 422cdf0e10cSrcweir 42307a3d7f1SPedro Giffuni If you miss a test for one of this parameters, contact the author or add it himself !(?) 424cdf0e10cSrcweir But ... look for right testing! See using of this methods! 425cdf0e10cSrcweir -----------------------------------------------------------------------------------------------------------------*/ 426cdf0e10cSrcweir 427cdf0e10cSrcweir #ifdef ENABLE_ASSERTIONS 428cdf0e10cSrcweir 429cdf0e10cSrcweir //***************************************************************************************************************** 430cdf0e10cSrcweir // An instance of this class can only work with valid initialization. 431*5e7dbebbSJohn Bampton // We share the mutex with our owner class, need a valid factory to instantiate new services and 432b12a77c9Smseidel // use the access to our owner for some operations. 433cdf0e10cSrcweir sal_Bool OFrames::impldbg_checkParameter_OFramesCtor( const css::uno::Reference< XMultiServiceFactory >& xFactory , 434cdf0e10cSrcweir const css::uno::Reference< XFrame >& xOwner , 435cdf0e10cSrcweir FrameContainer* pFrameContainer ) 436cdf0e10cSrcweir { 437cdf0e10cSrcweir // Set default return value. 438cdf0e10cSrcweir sal_Bool bOK = sal_True; 439cdf0e10cSrcweir // Check parameter. 440cdf0e10cSrcweir if ( 441cdf0e10cSrcweir ( &xFactory == NULL ) || 442cdf0e10cSrcweir ( &xOwner == NULL ) || 443cdf0e10cSrcweir ( xFactory.is() == sal_False ) || 444cdf0e10cSrcweir ( xOwner.is() == sal_False ) || 445cdf0e10cSrcweir ( pFrameContainer == NULL ) 446cdf0e10cSrcweir ) 447cdf0e10cSrcweir { 448cdf0e10cSrcweir bOK = sal_False ; 449cdf0e10cSrcweir } 450cdf0e10cSrcweir // Return result of check. 451cdf0e10cSrcweir return bOK ; 452cdf0e10cSrcweir } 453cdf0e10cSrcweir 454cdf0e10cSrcweir //***************************************************************************************************************** 455cdf0e10cSrcweir // Its only allowed to add valid references to container. 456cdf0e10cSrcweir // AND - alle frames must support XFrames-interface! 457cdf0e10cSrcweir sal_Bool OFrames::impldbg_checkParameter_append( const css::uno::Reference< XFrame >& xFrame ) 458cdf0e10cSrcweir { 459cdf0e10cSrcweir // Set default return value. 460cdf0e10cSrcweir sal_Bool bOK = sal_True; 461cdf0e10cSrcweir // Check parameter. 462cdf0e10cSrcweir if ( 463cdf0e10cSrcweir ( &xFrame == NULL ) || 464cdf0e10cSrcweir ( xFrame.is() == sal_False ) 465cdf0e10cSrcweir ) 466cdf0e10cSrcweir { 467cdf0e10cSrcweir bOK = sal_False ; 468cdf0e10cSrcweir } 469cdf0e10cSrcweir // Return result of check. 470cdf0e10cSrcweir return bOK ; 471cdf0e10cSrcweir } 472cdf0e10cSrcweir 473cdf0e10cSrcweir //***************************************************************************************************************** 474cdf0e10cSrcweir // Its only allowed to add valid references to container... 475cdf0e10cSrcweir // ... => You can only delete valid references! 476cdf0e10cSrcweir sal_Bool OFrames::impldbg_checkParameter_remove( const css::uno::Reference< XFrame >& xFrame ) 477cdf0e10cSrcweir { 478cdf0e10cSrcweir // Set default return value. 479cdf0e10cSrcweir sal_Bool bOK = sal_True; 480cdf0e10cSrcweir // Check parameter. 481cdf0e10cSrcweir if ( 482cdf0e10cSrcweir ( &xFrame == NULL ) || 483cdf0e10cSrcweir ( xFrame.is() == sal_False ) 484cdf0e10cSrcweir ) 485cdf0e10cSrcweir { 486cdf0e10cSrcweir bOK = sal_False ; 487cdf0e10cSrcweir } 488cdf0e10cSrcweir // Return result of check. 489cdf0e10cSrcweir return bOK ; 490cdf0e10cSrcweir } 491cdf0e10cSrcweir 492cdf0e10cSrcweir //***************************************************************************************************************** 493cdf0e10cSrcweir // A search for frames must initiate with right flags. 494cdf0e10cSrcweir // Some one are superflous and not supported yet. But here we control only the range of incoming parameter! 495cdf0e10cSrcweir sal_Bool OFrames::impldbg_checkParameter_queryFrames( sal_Int32 nSearchFlags ) 496cdf0e10cSrcweir { 497cdf0e10cSrcweir // Set default return value. 498cdf0e10cSrcweir sal_Bool bOK = sal_True; 499cdf0e10cSrcweir // Check parameter. 500cdf0e10cSrcweir if ( 501cdf0e10cSrcweir ( nSearchFlags != FrameSearchFlag::AUTO ) && 502cdf0e10cSrcweir ( !( nSearchFlags & FrameSearchFlag::PARENT ) ) && 503cdf0e10cSrcweir ( !( nSearchFlags & FrameSearchFlag::SELF ) ) && 504cdf0e10cSrcweir ( !( nSearchFlags & FrameSearchFlag::CHILDREN ) ) && 505cdf0e10cSrcweir ( !( nSearchFlags & FrameSearchFlag::CREATE ) ) && 506cdf0e10cSrcweir ( !( nSearchFlags & FrameSearchFlag::SIBLINGS ) ) && 507cdf0e10cSrcweir ( !( nSearchFlags & FrameSearchFlag::TASKS ) ) && 508cdf0e10cSrcweir ( !( nSearchFlags & FrameSearchFlag::ALL ) ) && 509cdf0e10cSrcweir ( !( nSearchFlags & FrameSearchFlag::GLOBAL ) ) 510cdf0e10cSrcweir ) 511cdf0e10cSrcweir { 512cdf0e10cSrcweir bOK = sal_False ; 513cdf0e10cSrcweir } 514cdf0e10cSrcweir // Return result of check. 515cdf0e10cSrcweir return bOK ; 516cdf0e10cSrcweir } 517cdf0e10cSrcweir 518cdf0e10cSrcweir #endif // #ifdef ENABLE_ASSERTIONS 519cdf0e10cSrcweir 520cdf0e10cSrcweir } // namespace framework 521