xref: /trunk/main/framework/source/classes/framecontainer.cxx (revision a79a404b26934743545c6dafbc11b12ece90a8e1)
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 
31cdf0e10cSrcweir #ifndef __FRAMEWORK_FRAMECONTAINER_HXX_
32cdf0e10cSrcweir #include <classes/framecontainer.hxx>
33cdf0e10cSrcweir #endif
34cdf0e10cSrcweir #include <threadhelp/writeguard.hxx>
35cdf0e10cSrcweir #include <threadhelp/readguard.hxx>
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #ifndef __FRAMEWORK_COMMANDS_HXX_
38cdf0e10cSrcweir #include <commands.h>
39cdf0e10cSrcweir #endif
40cdf0e10cSrcweir 
41cdf0e10cSrcweir //_________________________________________________________________________________________________________________
42cdf0e10cSrcweir // interface includes
43cdf0e10cSrcweir //_________________________________________________________________________________________________________________
44cdf0e10cSrcweir 
45cdf0e10cSrcweir #ifndef _COM_SUN_STAR_FRAME_FRAMESEARCH_FLAG_HPP_
46cdf0e10cSrcweir #include <com/sun/star/frame/FrameSearchFlag.hpp>
47cdf0e10cSrcweir #endif
48cdf0e10cSrcweir 
49cdf0e10cSrcweir //_________________________________________________________________________________________________________________
50cdf0e10cSrcweir // includes of other projects
51cdf0e10cSrcweir //_________________________________________________________________________________________________________________
52cdf0e10cSrcweir #include <vcl/svapp.hxx>
53cdf0e10cSrcweir 
54cdf0e10cSrcweir //_________________________________________________________________________________________________________________
55cdf0e10cSrcweir // namespace
56cdf0e10cSrcweir //_________________________________________________________________________________________________________________
57cdf0e10cSrcweir 
58cdf0e10cSrcweir namespace framework{
59cdf0e10cSrcweir 
60cdf0e10cSrcweir //_________________________________________________________________________________________________________________
61cdf0e10cSrcweir // non exported const
62cdf0e10cSrcweir //_________________________________________________________________________________________________________________
63cdf0e10cSrcweir 
64cdf0e10cSrcweir //_________________________________________________________________________________________________________________
65cdf0e10cSrcweir // non exported definitions
66cdf0e10cSrcweir //_________________________________________________________________________________________________________________
67cdf0e10cSrcweir 
68cdf0e10cSrcweir //_________________________________________________________________________________________________________________
69cdf0e10cSrcweir // declarations
70cdf0e10cSrcweir //_________________________________________________________________________________________________________________
71cdf0e10cSrcweir 
72cdf0e10cSrcweir /**-***************************************************************************************************************
73cdf0e10cSrcweir     @short      initialize an empty container
74cdf0e10cSrcweir     @descr      The container will be empty then - special features (e.g. the async quit mechanism) are disabled.
75cdf0e10cSrcweir 
76ee65694aSmseidel     @threadsafe not necessary - it's not a singleton
77cdf0e10cSrcweir     @modified   01.07.2002 14:42,as96863
78cdf0e10cSrcweir  *****************************************************************************************************************/
FrameContainer()79cdf0e10cSrcweir FrameContainer::FrameContainer()
80cdf0e10cSrcweir         // initialize base classes first.
81*a79a404bSmseidel         // Order is necessary for right initialization of his and OUR member... m_aLock
82cdf0e10cSrcweir         : ThreadHelpBase ( &Application::GetSolarMutex()                  )
83cdf0e10cSrcweir /*DEPRECATEME
84cdf0e10cSrcweir         , m_bAsyncQuit   ( sal_False                                      ) // default must be "disabled"!
85cdf0e10cSrcweir         , m_aAsyncCall   ( LINK( this, FrameContainer, implts_asyncQuit ) )
86cdf0e10cSrcweir */
87cdf0e10cSrcweir {
88cdf0e10cSrcweir }
89cdf0e10cSrcweir 
90cdf0e10cSrcweir /**-***************************************************************************************************************
91cdf0e10cSrcweir     @short      deinitialize may a filled container
92ee65694aSmseidel     @descr      Special features (if the currently are running) will be disabled and we free all used other resources.
93cdf0e10cSrcweir 
94ee65694aSmseidel     @threadsafe not necessary - it's not a singleton
95cdf0e10cSrcweir     @modified   01.07.2002 14:43,as96863
96cdf0e10cSrcweir  *****************************************************************************************************************/
~FrameContainer()97cdf0e10cSrcweir FrameContainer::~FrameContainer()
98cdf0e10cSrcweir {
99cdf0e10cSrcweir     // Don't forget to free memory!
100cdf0e10cSrcweir     m_aContainer.clear();
101cdf0e10cSrcweir     m_xActiveFrame.clear();
102cdf0e10cSrcweir }
103cdf0e10cSrcweir 
104cdf0e10cSrcweir /**-***************************************************************************************************************
105cdf0e10cSrcweir     @short      append a new frame to the container
106ee65694aSmseidel     @descr      We accept the incoming frame only, if it's a valid reference and doesn't exist already.
107cdf0e10cSrcweir 
108cdf0e10cSrcweir     @param      xFrame
109cdf0e10cSrcweir                     frame, which should be added to this container
110cdf0e10cSrcweir                     Must be a valid reference.
111cdf0e10cSrcweir 
112cdf0e10cSrcweir     @threadsafe yes
113cdf0e10cSrcweir     @modified   01.07.2002 14:44,as96863
114cdf0e10cSrcweir  *****************************************************************************************************************/
append(const css::uno::Reference<css::frame::XFrame> & xFrame)115cdf0e10cSrcweir void FrameContainer::append( const css::uno::Reference< css::frame::XFrame >& xFrame )
116cdf0e10cSrcweir {
117cdf0e10cSrcweir     if (xFrame.is() && ! exist(xFrame))
118cdf0e10cSrcweir     {
119cdf0e10cSrcweir         /* SAFE { */
120cdf0e10cSrcweir         WriteGuard aWriteLock( m_aLock );
121cdf0e10cSrcweir         m_aContainer.push_back( xFrame );
122cdf0e10cSrcweir         aWriteLock.unlock();
123cdf0e10cSrcweir         /* } SAFE */
124cdf0e10cSrcweir     }
125cdf0e10cSrcweir }
126cdf0e10cSrcweir 
127cdf0e10cSrcweir /**-***************************************************************************************************************
128cdf0e10cSrcweir     @short      remove a frame from the container
129cdf0e10cSrcweir     @descr      In case we remove the last frame and our internal special feature (the async quit mechanism)
130cdf0e10cSrcweir                 was enabled by the desktop instance, we start it.
131cdf0e10cSrcweir 
132cdf0e10cSrcweir     @param      xFrame
133cdf0e10cSrcweir                     frame, which should be deleted from this container
134cdf0e10cSrcweir                     Must be a valid reference.
135cdf0e10cSrcweir 
136cdf0e10cSrcweir     @threadsafe yes
137cdf0e10cSrcweir     @modified   01.07.2002 14:52,as96863
138cdf0e10cSrcweir  *****************************************************************************************************************/
remove(const css::uno::Reference<css::frame::XFrame> & xFrame)139cdf0e10cSrcweir void FrameContainer::remove( const css::uno::Reference< css::frame::XFrame >& xFrame )
140cdf0e10cSrcweir {
141cdf0e10cSrcweir     /* SAFE { */
142*a79a404bSmseidel     // write lock necessary for following erase()!
143cdf0e10cSrcweir     WriteGuard aWriteLock( m_aLock );
144cdf0e10cSrcweir 
145cdf0e10cSrcweir     TFrameIterator aSearchedItem = ::std::find( m_aContainer.begin(), m_aContainer.end(), xFrame );
146cdf0e10cSrcweir     if (aSearchedItem!=m_aContainer.end())
147cdf0e10cSrcweir     {
148cdf0e10cSrcweir         m_aContainer.erase( aSearchedItem );
149cdf0e10cSrcweir 
150cdf0e10cSrcweir         // If removed frame was the current active frame - reset state variable.
151cdf0e10cSrcweir         if (m_xActiveFrame==xFrame)
152cdf0e10cSrcweir             m_xActiveFrame = css::uno::Reference< css::frame::XFrame >();
153cdf0e10cSrcweir 
154cdf0e10cSrcweir         // We don't need the write lock any longer...
155cdf0e10cSrcweir         // downgrade to read access.
156cdf0e10cSrcweir         aWriteLock.downgrade();
157cdf0e10cSrcweir /*DEPRECATEME
158cdf0e10cSrcweir         // If last frame was removed and special quit mode is enabled by the desktop
159cdf0e10cSrcweir         // we must terminate the application by using this asynchronous callback!
160cdf0e10cSrcweir         if (m_aContainer.size()<1 && m_bAsyncQuit)
161cdf0e10cSrcweir             m_aAsyncCall.Post(0);
162cdf0e10cSrcweir */
163cdf0e10cSrcweir     }
164cdf0e10cSrcweir 
165cdf0e10cSrcweir     aWriteLock.unlock();
166cdf0e10cSrcweir     // } SAFE
167cdf0e10cSrcweir }
168cdf0e10cSrcweir 
169cdf0e10cSrcweir /**-***************************************************************************************************************
170*a79a404bSmseidel     @short      check if the given frame currently exists inside the container
171cdf0e10cSrcweir     @descr      -
172cdf0e10cSrcweir 
173cdf0e10cSrcweir     @param      xFrame
174cdf0e10cSrcweir                     reference to the queried frame
175cdf0e10cSrcweir 
176ee65694aSmseidel     @return     <TRUE/> if frame is part of this container
177ee65694aSmseidel                 <FALSE/> otherwise
178cdf0e10cSrcweir 
179cdf0e10cSrcweir     @threadsafe yes
180cdf0e10cSrcweir     @modified   01.07.2002 14:55,as96863
181cdf0e10cSrcweir  *****************************************************************************************************************/
exist(const css::uno::Reference<css::frame::XFrame> & xFrame) const182cdf0e10cSrcweir sal_Bool FrameContainer::exist( const css::uno::Reference< css::frame::XFrame >& xFrame ) const
183cdf0e10cSrcweir {
184cdf0e10cSrcweir     /* SAFE { */
185cdf0e10cSrcweir     ReadGuard aReadLock( m_aLock );
186cdf0e10cSrcweir     return( ::std::find( m_aContainer.begin(), m_aContainer.end(), xFrame ) != m_aContainer.end() );
187cdf0e10cSrcweir     /* } SAFE */
188cdf0e10cSrcweir }
189cdf0e10cSrcweir 
190cdf0e10cSrcweir /**-***************************************************************************************************************
191cdf0e10cSrcweir     @short      delete all existing items of the container
192cdf0e10cSrcweir     @descr      -
193cdf0e10cSrcweir 
194cdf0e10cSrcweir     @threadsafe yes
195cdf0e10cSrcweir     @modified   01.07.2002 15:00,as96863
196cdf0e10cSrcweir  *****************************************************************************************************************/
clear()197cdf0e10cSrcweir void FrameContainer::clear()
198cdf0e10cSrcweir {
199cdf0e10cSrcweir     // SAFE {
200cdf0e10cSrcweir     WriteGuard aWriteLock( m_aLock );
201cdf0e10cSrcweir 
202cdf0e10cSrcweir     // Clear the container...
203cdf0e10cSrcweir     m_aContainer.clear();
204cdf0e10cSrcweir     // ...and don't forget to reset the active frame.
205*a79a404bSmseidel     // It's a reference to a valid container item.
206cdf0e10cSrcweir     // But no container item => no active frame!
207cdf0e10cSrcweir     m_xActiveFrame = css::uno::Reference< css::frame::XFrame >();
208cdf0e10cSrcweir /*DEPRECATEME
209cdf0e10cSrcweir     // If special quit mode is used - we must terminate the desktop.
210cdf0e10cSrcweir     // He is the owner of this container and can't work without any visible tasks/frames!
211cdf0e10cSrcweir     if (m_bAsyncQuit)
212cdf0e10cSrcweir         m_aAsyncCall.Post(0);
213cdf0e10cSrcweir */
214cdf0e10cSrcweir 
215cdf0e10cSrcweir     aWriteLock.unlock();
216cdf0e10cSrcweir     // } SAFE
217cdf0e10cSrcweir }
218cdf0e10cSrcweir 
219cdf0e10cSrcweir /**-***************************************************************************************************************
220cdf0e10cSrcweir     @short      returns count of all current existing frames
221cdf0e10cSrcweir     @descr      -
222cdf0e10cSrcweir 
223cdf0e10cSrcweir     @deprecated This value can't be guaranteed for multithreading environments.
224cdf0e10cSrcweir                 So it will be marked as deprecated and should be replaced by "getAllElements()".
225cdf0e10cSrcweir 
226cdf0e10cSrcweir     @return     the count of existing container items
227cdf0e10cSrcweir 
228cdf0e10cSrcweir     @threadsafe yes
229cdf0e10cSrcweir     @modified   01.07.2002 15:00,as96863
230cdf0e10cSrcweir  *****************************************************************************************************************/
getCount() const231cdf0e10cSrcweir sal_uInt32 FrameContainer::getCount() const
232cdf0e10cSrcweir {
233cdf0e10cSrcweir     /* SAFE { */
234cdf0e10cSrcweir     ReadGuard aReadLock( m_aLock );
235cdf0e10cSrcweir     return( (sal_uInt32)m_aContainer.size() );
236cdf0e10cSrcweir     /* } SAFE */
237cdf0e10cSrcweir }
238cdf0e10cSrcweir 
239cdf0e10cSrcweir /**-***************************************************************************************************************
240cdf0e10cSrcweir     @short      returns one item of this container
241cdf0e10cSrcweir     @descr      -
242cdf0e10cSrcweir 
243cdf0e10cSrcweir     @deprecated This value can't be guaranteed for multithreading environments.
244cdf0e10cSrcweir                 So it will be marked as deprecated and should be replaced by "getAllElements()".
245cdf0e10cSrcweir 
246cdf0e10cSrcweir     @param      nIndex
247ee65694aSmseidel                     a value between 0 and (getCount()-1) to address one container item
248cdf0e10cSrcweir 
249ee65694aSmseidel     @return     a reference to a frame inside the container, which matches with given index
250cdf0e10cSrcweir 
251cdf0e10cSrcweir     @threadsafe yes
252cdf0e10cSrcweir     @modified   01.07.2002 15:03,as96863
253cdf0e10cSrcweir  *****************************************************************************************************************/
operator [](sal_uInt32 nIndex) const254cdf0e10cSrcweir css::uno::Reference< css::frame::XFrame > FrameContainer::operator[]( sal_uInt32 nIndex ) const
255cdf0e10cSrcweir {
256cdf0e10cSrcweir 
257cdf0e10cSrcweir     css::uno::Reference< css::frame::XFrame > xFrame;
258cdf0e10cSrcweir     try
259cdf0e10cSrcweir     {
260cdf0e10cSrcweir         // Get element form container WITH automatic test of ranges!
261cdf0e10cSrcweir         // If index not valid, a out_of_range exception is thrown.
262cdf0e10cSrcweir         /* SAFE { */
263cdf0e10cSrcweir         ReadGuard aReadLock( m_aLock );
264cdf0e10cSrcweir         xFrame = m_aContainer.at( nIndex );
265cdf0e10cSrcweir         aReadLock.unlock();
266cdf0e10cSrcweir         /* } SAFE */
267cdf0e10cSrcweir     }
268cdf0e10cSrcweir     catch( std::out_of_range& )
269cdf0e10cSrcweir     {
270cdf0e10cSrcweir         // The index is not valid for current container-content - we must handle this case!
271cdf0e10cSrcweir         // We can return the default value...
272ee65694aSmseidel         LOG_EXCEPTION( "FrameContainer::operator[]", "Exception caught...", DECLARE_ASCII("::std::out_of_range") )
273cdf0e10cSrcweir     }
274cdf0e10cSrcweir     return xFrame;
275cdf0e10cSrcweir }
276cdf0e10cSrcweir 
277cdf0e10cSrcweir /**-***************************************************************************************************************
278cdf0e10cSrcweir     @short      returns a snapshot of all currently existing frames inside this container
279cdf0e10cSrcweir     @descr      Should be used to replace the deprecated functions getCount()/operator[]!
280cdf0e10cSrcweir 
28107a3d7f1SPedro Giffuni     @return     a list of all frame references inside this container
282cdf0e10cSrcweir 
283cdf0e10cSrcweir     @threadsafe yes
284cdf0e10cSrcweir     @modified   01.07.2002 15:09,as96863
285cdf0e10cSrcweir  *****************************************************************************************************************/
getAllElements() const286cdf0e10cSrcweir css::uno::Sequence< css::uno::Reference< css::frame::XFrame > > FrameContainer::getAllElements() const
287cdf0e10cSrcweir {
288cdf0e10cSrcweir     /* SAFE { */
289cdf0e10cSrcweir     ReadGuard aReadLock( m_aLock );
290cdf0e10cSrcweir 
291cdf0e10cSrcweir     sal_Int32                                                       nPosition = 0;
292cdf0e10cSrcweir     css::uno::Sequence< css::uno::Reference< css::frame::XFrame > > lElements ( (sal_uInt32)m_aContainer.size() );
293cdf0e10cSrcweir     for (TConstFrameIterator pItem=m_aContainer.begin(); pItem!=m_aContainer.end(); ++pItem)
294cdf0e10cSrcweir         lElements[nPosition++] = *pItem;
295cdf0e10cSrcweir 
296cdf0e10cSrcweir     aReadLock.unlock();
297cdf0e10cSrcweir     /* } SAFE */
298cdf0e10cSrcweir 
299cdf0e10cSrcweir     return lElements;
300cdf0e10cSrcweir }
301cdf0e10cSrcweir 
302cdf0e10cSrcweir /**-***************************************************************************************************************
303cdf0e10cSrcweir     @short      set the given frame as the new active one inside this container
304cdf0e10cSrcweir     @descr      We accept this frame only, if it's already a part of this container.
305cdf0e10cSrcweir 
306cdf0e10cSrcweir     @param      xFrame
307cdf0e10cSrcweir                     reference to the new active frame
308cdf0e10cSrcweir                     Must be a valid reference and already part of this container.
309cdf0e10cSrcweir 
310cdf0e10cSrcweir     @threadsafe yes
311cdf0e10cSrcweir     @modified   01.07.2002 15:11,as96863
312cdf0e10cSrcweir  *****************************************************************************************************************/
setActive(const css::uno::Reference<css::frame::XFrame> & xFrame)313cdf0e10cSrcweir void FrameContainer::setActive( const css::uno::Reference< css::frame::XFrame >& xFrame )
314cdf0e10cSrcweir {
315cdf0e10cSrcweir     if ( !xFrame.is() || exist(xFrame) )
316cdf0e10cSrcweir     {
317cdf0e10cSrcweir         /* SAFE { */
318cdf0e10cSrcweir         WriteGuard aWriteLock( m_aLock );
319cdf0e10cSrcweir         m_xActiveFrame = xFrame;
320cdf0e10cSrcweir         aWriteLock.unlock();
321cdf0e10cSrcweir         /* } SAFE */
322cdf0e10cSrcweir     }
323cdf0e10cSrcweir }
324cdf0e10cSrcweir 
325cdf0e10cSrcweir /**-***************************************************************************************************************
326cdf0e10cSrcweir     @short      returns the current active frame of this container
327cdf0e10cSrcweir     @descr      Value can be null in case the frame was removed from the container and nobody
328*a79a404bSmseidel                 from outside decides which of all others should be the new one...
329cdf0e10cSrcweir 
330cdf0e10cSrcweir     @return     a reference to the current active frame
331cdf0e10cSrcweir                 Value can be NULL!
332cdf0e10cSrcweir 
333cdf0e10cSrcweir     @threadsafe yes
334cdf0e10cSrcweir     @modified   01.07.2002 15:11,as96863
335cdf0e10cSrcweir  *****************************************************************************************************************/
getActive() const336cdf0e10cSrcweir css::uno::Reference< css::frame::XFrame > FrameContainer::getActive() const
337cdf0e10cSrcweir {
338cdf0e10cSrcweir     /* SAFE { */
339cdf0e10cSrcweir     ReadGuard aReadLock( m_aLock );
340cdf0e10cSrcweir     return m_xActiveFrame;
341cdf0e10cSrcweir     /* } SAFE */
342cdf0e10cSrcweir }
343cdf0e10cSrcweir 
344cdf0e10cSrcweir /**-***************************************************************************************************************
345cdf0e10cSrcweir     @short      implements a simple search based on current container items
346cdf0e10cSrcweir     @descr      It can be used for findFrame() and implements a deep down search.
347cdf0e10cSrcweir 
348cdf0e10cSrcweir     @param      sName
349cdf0e10cSrcweir                     target name, which is searched
350cdf0e10cSrcweir 
351cdf0e10cSrcweir     @return     reference to the found frame or NULL if not.
352cdf0e10cSrcweir 
353cdf0e10cSrcweir     @threadsafe yes
354cdf0e10cSrcweir     @modified   01.07.2002 15:22,as96863
355cdf0e10cSrcweir  *****************************************************************************************************************/
searchOnAllChildrens(const::rtl::OUString & sName) const356cdf0e10cSrcweir css::uno::Reference< css::frame::XFrame > FrameContainer::searchOnAllChildrens( const ::rtl::OUString& sName ) const
357cdf0e10cSrcweir {
358cdf0e10cSrcweir     /* SAFE { */
359cdf0e10cSrcweir     ReadGuard aReadLock( m_aLock );
360cdf0e10cSrcweir 
361cdf0e10cSrcweir     // Step over all child frames. But if direct child isn't the right one search on his children first - before
362cdf0e10cSrcweir     // you go to next direct child of this container!
363cdf0e10cSrcweir     css::uno::Reference< css::frame::XFrame > xSearchedFrame;
364cdf0e10cSrcweir     for( TConstFrameIterator pIterator=m_aContainer.begin(); pIterator!=m_aContainer.end(); ++pIterator )
365cdf0e10cSrcweir     {
366cdf0e10cSrcweir         if ((*pIterator)->getName()==sName)
367cdf0e10cSrcweir         {
368cdf0e10cSrcweir             xSearchedFrame = *pIterator;
369cdf0e10cSrcweir             break;
370cdf0e10cSrcweir         }
371cdf0e10cSrcweir         else
372cdf0e10cSrcweir         {
373cdf0e10cSrcweir             xSearchedFrame = (*pIterator)->findFrame( sName, css::frame::FrameSearchFlag::CHILDREN );
374cdf0e10cSrcweir             if (xSearchedFrame.is())
375cdf0e10cSrcweir                 break;
376cdf0e10cSrcweir         }
377cdf0e10cSrcweir     }
378cdf0e10cSrcweir     aReadLock.unlock();
379cdf0e10cSrcweir     /* } SAFE */
380cdf0e10cSrcweir     return xSearchedFrame;
381cdf0e10cSrcweir }
382cdf0e10cSrcweir 
383cdf0e10cSrcweir /**-***************************************************************************************************************
384cdf0e10cSrcweir     @short      implements a simple search based on current container items
385cdf0e10cSrcweir     @descr      It can be used for findFrame() and search on members of this container only!
386cdf0e10cSrcweir 
387cdf0e10cSrcweir     @param      sName
388cdf0e10cSrcweir                     target name, which is searched
389cdf0e10cSrcweir 
390cdf0e10cSrcweir     @return     reference to the found frame or NULL if not.
391cdf0e10cSrcweir 
392cdf0e10cSrcweir     @threadsafe yes
393cdf0e10cSrcweir     @modified   01.07.2002 15:22,as96863
394cdf0e10cSrcweir  *****************************************************************************************************************/
searchOnDirectChildrens(const::rtl::OUString & sName) const395cdf0e10cSrcweir css::uno::Reference< css::frame::XFrame > FrameContainer::searchOnDirectChildrens( const ::rtl::OUString& sName ) const
396cdf0e10cSrcweir {
397cdf0e10cSrcweir     /* SAFE { */
398cdf0e10cSrcweir     ReadGuard aReadLock( m_aLock );
399cdf0e10cSrcweir 
400cdf0e10cSrcweir     css::uno::Reference< css::frame::XFrame > xSearchedFrame;
401cdf0e10cSrcweir     for( TConstFrameIterator pIterator=m_aContainer.begin(); pIterator!=m_aContainer.end(); ++pIterator )
402cdf0e10cSrcweir     {
403cdf0e10cSrcweir         if ((*pIterator)->getName()==sName)
404cdf0e10cSrcweir         {
405cdf0e10cSrcweir             xSearchedFrame = *pIterator;
406cdf0e10cSrcweir             break;
407cdf0e10cSrcweir         }
408cdf0e10cSrcweir     }
409cdf0e10cSrcweir     aReadLock.unlock();
410cdf0e10cSrcweir     /* } SAFE */
411cdf0e10cSrcweir     return xSearchedFrame;
412cdf0e10cSrcweir }
413cdf0e10cSrcweir 
414*a79a404bSmseidel } // namespace framework
415