merge the formfield patch from ooo-build
[ooovba.git] / slideshow / source / engine / unoviewcontainer.cxx
blob6da65de77e9e629abe0215766411f487e688c6f9
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: unoviewcontainer.cxx,v $
10 * $Revision: 1.9 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_slideshow.hxx"
34 #include <canvas/debug.hxx>
35 #include <unoviewcontainer.hxx>
37 #include <boost/bind.hpp>
39 #include <algorithm>
42 using namespace ::com::sun::star;
44 // -----------------------------------------------------------------------------
46 namespace slideshow
48 namespace internal
50 UnoViewContainer::UnoViewContainer() :
51 maViews()
55 bool UnoViewContainer::addView( const UnoViewSharedPtr& rView )
57 // check whether same view is already added
58 const UnoViewVector::iterator aEnd( maViews.end() );
60 // already added?
61 if( ::std::find_if( maViews.begin(),
62 aEnd,
63 ::boost::bind(
64 ::std::equal_to< uno::Reference< presentation::XSlideShowView > >(),
65 ::boost::cref( rView->getUnoView() ),
66 ::boost::bind(
67 &UnoView::getUnoView,
68 _1 ) ) ) != aEnd )
70 // yes, nothing to do
71 return false;
74 // add locally
75 maViews.push_back( rView );
77 return true;
80 UnoViewSharedPtr UnoViewContainer::removeView( const uno::Reference< presentation::XSlideShowView >& xView )
82 // check whether same view is already added
83 const UnoViewVector::iterator aEnd( maViews.end() );
84 UnoViewVector::iterator aIter;
86 // added in the first place?
87 if( (aIter=::std::find_if( maViews.begin(),
88 aEnd,
89 ::boost::bind(
90 ::std::equal_to< uno::Reference< presentation::XSlideShowView > >(),
91 ::boost::cref( xView ),
92 ::boost::bind(
93 &UnoView::getUnoView,
94 _1 ) ) ) ) == aEnd )
96 // nope, nothing to do
97 return UnoViewSharedPtr();
100 OSL_ENSURE(
101 ::std::count_if(
102 maViews.begin(),
103 aEnd,
104 ::boost::bind(
105 ::std::equal_to< uno::Reference< presentation::XSlideShowView > >(),
106 ::boost::cref( xView ),
107 ::boost::bind(
108 &UnoView::getUnoView,
109 _1 ))) == 1,
110 "UnoViewContainer::removeView(): View was added multiple times" );
112 UnoViewSharedPtr pView( *aIter );
114 // actually erase from container
115 maViews.erase( aIter );
117 return pView;
120 bool UnoViewContainer::removeView( const UnoViewSharedPtr& rView )
122 // remove locally
123 const UnoViewVector::iterator aEnd( maViews.end() );
124 UnoViewVector::iterator aIter;
125 if( (aIter=::std::find( maViews.begin(),
126 aEnd,
127 rView )) == aEnd )
129 // view seemingly was not added, failed
130 return false;
133 OSL_ENSURE( ::std::count( maViews.begin(),
134 aEnd,
135 rView ) == 1,
136 "UnoViewContainer::removeView(): View was added multiple times" );
138 // actually erase from container
139 maViews.erase( aIter );
141 return true;
144 void UnoViewContainer::dispose()
146 ::std::for_each( maViews.begin(),
147 maViews.end(),
148 ::boost::mem_fn(&UnoView::_dispose) );
149 maViews.clear();