| /************************************************************** |
| * |
| * 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. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_slideshow.hxx" |
| |
| #include <canvas/debug.hxx> |
| #include <unoviewcontainer.hxx> |
| |
| #include <boost/bind.hpp> |
| |
| #include <algorithm> |
| |
| |
| using namespace ::com::sun::star; |
| |
| // ----------------------------------------------------------------------------- |
| |
| namespace slideshow |
| { |
| namespace internal |
| { |
| UnoViewContainer::UnoViewContainer() : |
| maViews() |
| { |
| } |
| |
| bool UnoViewContainer::addView( const UnoViewSharedPtr& rView ) |
| { |
| // check whether same view is already added |
| const UnoViewVector::iterator aEnd( maViews.end() ); |
| |
| // already added? |
| if( ::std::find_if( maViews.begin(), |
| aEnd, |
| ::boost::bind( |
| ::std::equal_to< uno::Reference< presentation::XSlideShowView > >(), |
| ::boost::cref( rView->getUnoView() ), |
| ::boost::bind( |
| &UnoView::getUnoView, |
| _1 ) ) ) != aEnd ) |
| { |
| // yes, nothing to do |
| return false; |
| } |
| |
| // add locally |
| maViews.push_back( rView ); |
| |
| return true; |
| } |
| |
| UnoViewSharedPtr UnoViewContainer::removeView( const uno::Reference< presentation::XSlideShowView >& xView ) |
| { |
| // check whether same view is already added |
| const UnoViewVector::iterator aEnd( maViews.end() ); |
| UnoViewVector::iterator aIter; |
| |
| // added in the first place? |
| if( (aIter=::std::find_if( maViews.begin(), |
| aEnd, |
| ::boost::bind( |
| ::std::equal_to< uno::Reference< presentation::XSlideShowView > >(), |
| ::boost::cref( xView ), |
| ::boost::bind( |
| &UnoView::getUnoView, |
| _1 ) ) ) ) == aEnd ) |
| { |
| // nope, nothing to do |
| return UnoViewSharedPtr(); |
| } |
| |
| OSL_ENSURE( |
| ::std::count_if( |
| maViews.begin(), |
| aEnd, |
| ::boost::bind( |
| ::std::equal_to< uno::Reference< presentation::XSlideShowView > >(), |
| ::boost::cref( xView ), |
| ::boost::bind( |
| &UnoView::getUnoView, |
| _1 ))) == 1, |
| "UnoViewContainer::removeView(): View was added multiple times" ); |
| |
| UnoViewSharedPtr pView( *aIter ); |
| |
| // actually erase from container |
| maViews.erase( aIter ); |
| |
| return pView; |
| } |
| |
| bool UnoViewContainer::removeView( const UnoViewSharedPtr& rView ) |
| { |
| // remove locally |
| const UnoViewVector::iterator aEnd( maViews.end() ); |
| UnoViewVector::iterator aIter; |
| if( (aIter=::std::find( maViews.begin(), |
| aEnd, |
| rView )) == aEnd ) |
| { |
| // view seemingly was not added, failed |
| return false; |
| } |
| |
| OSL_ENSURE( ::std::count( maViews.begin(), |
| aEnd, |
| rView ) == 1, |
| "UnoViewContainer::removeView(): View was added multiple times" ); |
| |
| // actually erase from container |
| maViews.erase( aIter ); |
| |
| return true; |
| } |
| |
| void UnoViewContainer::dispose() |
| { |
| ::std::for_each( maViews.begin(), |
| maViews.end(), |
| ::boost::mem_fn(&UnoView::_dispose) ); |
| maViews.clear(); |
| } |
| } |
| } |