00001 00023 #ifndef EXCEPTIONS_H 00024 #define EXCEPTIONS_H 00025 00026 #define eThrow(ExceptionClass, details) (throw (ExceptionClass(details, __FILE__, __LINE__))) 00027 00028 class Exception 00029 { 00030 public: 00031 Exception() {}; 00032 Exception(const QString& description, const QString& details, const char* file, int line) 00033 { 00034 m_details = details; 00035 m_description = description; 00036 m_file = file; 00037 m_line = line; 00038 } 00039 static void msgBox(QWidget* widget, const QString& description, const QString& details, const char* file = "", int line = 0) 00040 { 00041 if (file != "" && line != 0) 00042 qDebug() << "Exception thrown in " << file << " at line " << line; 00043 00044 QMessageBox msg(widget); 00045 msg.setWindowTitle("LCDBuilder"); 00046 msg.setWindowIcon(QIcon(":/lcdbuilder_icon.png")); 00047 msg.setIcon(QMessageBox::Warning); 00048 msg.setInformativeText(description); 00049 msg.setDetailedText(details); 00050 msg.exec(); 00051 } 00052 QString details() const { return m_details; } 00053 QString description() const { return m_description; } 00054 const char* file() const { return m_file; } 00055 int line() const { return m_line; } 00056 00057 private: 00058 QString m_details; 00059 QString m_description; 00060 const char* m_file; 00061 int m_line; 00062 }; 00063 00065 class UnsupportedException : public Exception 00066 { 00067 public: 00068 UnsupportedException(const QString& details, const char* file = "", int line = 0) 00069 : Exception("File format / feature / operation not supported", details, file, line) {} 00070 }; 00071 00073 class HardwareUnavailableException : public Exception 00074 { 00075 public: 00076 HardwareUnavailableException(const QString& details, const char* file = "", int line = 0) 00077 : Exception("Sorry, but the hardware is either unavailable, or not responding", details, file, line) {} 00078 }; 00079 00081 class AccessFailureException : public Exception 00082 { 00083 public: 00084 AccessFailureException(const QString& details, const char* file = "", int line = 0) 00085 : Exception("Attempt to access resource failed", details, file, line) {} 00086 }; 00087 00089 class InvalidDataException : public Exception 00090 { 00091 public: 00092 InvalidDataException(const QString& details, const char* file = "", int line = 0) 00093 : Exception("The data currently processed is invalid", details, file, line) {} 00094 }; 00095 00097 00098 class InternalException : public Exception 00099 { 00100 public: 00101 InternalException(const QString& details, const char* file = "", int line = 0) 00102 : Exception("Internal error occured, that should never happend please contact the author", details, file, line) {} 00103 }; 00104 00105 #endif