/**************************************************************
 *
 * 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 INCLUDED_SLIDESHOW_HYPERLINKHANDLER_HXX
#define INCLUDED_SLIDESHOW_HYPERLINKHANDLER_HXX

#include <boost/shared_ptr.hpp>


/* Definition of EventHandler interface */

namespace slideshow
{
    namespace internal
    {

        /** Interface for handling hyperlink clicks.

        	Classes implementing this interface can be added to an
        	EventMultiplexer object, and are called from there to
        	handle hyperlink events.
         */
        class HyperlinkHandler
        {
        public:
            /** Handle the event.

                @param rLink
                The actual hyperlink URI

            	@return true, if this handler has successfully
            	processed the event. When this method returns false,
            	possibly other, less prioritized handlers are called,
            	too.
             */
            virtual bool handleHyperlink( ::rtl::OUString const& rLink ) = 0;
        };

        typedef ::boost::shared_ptr< HyperlinkHandler > HyperlinkHandlerSharedPtr;

    }
}

#endif /* INCLUDED_SLIDESHOW_HYPERLINKHANDLER_HXX */
