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


namespace slideshow
{
    class SlideShowException {};

    /** This exception is thrown, when the Shape class was not
        able to convert an API object into our internal
        representation.
     */
    struct ShapeLoadFailedException : public SlideShowException {};

    /** This exception is thrown, when the SMIL arithmetic expression
        parser failed to parse a string.
     */
    struct ParseError : public SlideShowException
    {
        ParseError() {}
        explicit ParseError( const char* ) {}
    };

}

#endif /* INCLUDED_SLIDESHOW_SLIDESHOWEXCEPTIONS_HXX */
