1 /*
2  *   libpal - Automated Placement of Labels Library
3  *
4  *   Copyright (C) 2008 Maxence Laurent, MIS-TIC, HEIG-VD
5  *                      University of Applied Sciences, Western Switzerland
6  *                      http://www.hes-so.ch
7  *
8  *   Contact:
9  *      maxence.laurent <at> heig-vd <dot> ch
10  *    or
11  *      eric.taillard <at> heig-vd <dot> ch
12  *
13  * This file is part of libpal.
14  *
15  * libpal is free software: you can redistribute it and/or modify
16  * it under the terms of the GNU General Public License as published by
17  * the Free Software Foundation, either version 3 of the License, or
18  * (at your option) any later version.
19  *
20  * libpal is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23  * GNU General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License
26  * along with libpal.  If not, see <http://www.gnu.org/licenses/>.
27  *
28  */
29 
30 #ifndef PAL_EXCEPTION_H
31 #define PAL_EXCEPTION_H
32 
33 #include <exception>
34 
35 
36 namespace pal
37 {
38 
39   /**
40    * \brief Various Exceptions
41    * \ingroup core
42    */
43   class PalException
44   {
45     public:
46 
47       /**
48        * \brief Thrown when a feature is not yet implemented
49        * \ingroup core
50       */
51       class NotImplemented : public std::exception
52       {
what()53           const char *what() const throw() override
54           {
55             return "Not yet implemented... sorry";
56           }
57       };
58 
59       /**
60        * \brief Try to access an unknown feature
61        * \ingroup core
62       */
63       class UnknownFeature : public std::exception
64       {
what()65           const char *what() const throw() override
66           {
67             return "Feature not found";
68           }
69       };
70 
71       /**
72        * \brief Try to access an unknown layer
73        * \ingroup core
74       */
75       class UnknownLayer : public std::exception
76       {
what()77           const char *what() const throw() override
78           {
79             return "Layer not found";
80           }
81       };
82 
83       /**
84        * \brief layer already exists
85        * \ingroup core
86       */
87       class LayerExists : public std::exception
88       {
what()89           const char *what() const throw() override
90           {
91             return "Layers names must be unique";
92           }
93       };
94 
95       /**
96        * \brief features already exists
97        * \ingroup core
98       */
99       class FeatureExists : public std::exception
100       {
what()101           const char *what() const throw() override
102           {
103             return "Features IDs must be unique within a layer";
104           }
105       };
106 
107       /**
108        * \brief thrown when a value is not in the valid scale range\
109        * \ingroup core
110        *
111        *  It can be thrown by :
112        *
113        * - pal::Layer::setFeatureLabelSize if either the height or the width of the label is < 0
114        * - pal::Layer::setFeatureDistlabel is distlable < 0
115        */
116       class ValueNotInRange : public std::exception
117       {
what()118           const char *what() const throw() override
119           {
120             return "value not allowed";
121           }
122       };
123   };
124 
125 } // namespace
126 
127 #endif
128