00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef LOG4QT_LOGERROR_H
00026 #define LOG4QT_LOGERROR_H
00027
00028
00029
00030
00031
00032
00033 #include <QtCore/QString>
00034 #include <QtCore/QVariant>
00035
00036
00037
00038
00039
00040
00041 namespace Log4Qt
00042 {
00061 #define LOG4QT_ERROR(message, code, context) \
00062 LogError(message, code, #code, context)
00063
00084 #define LOG4QT_QCLASS_ERROR(message, code) \
00085 LogError(message, code, #code, this->metaObject()->className())
00086
00122 class LogError
00123 {
00124 public:
00125
00133 enum Encoding
00134 {
00136 LATIN1,
00141 CODECFORTR,
00143 UNICODEUTF8,
00144 };
00145 Q_ENUMS(Encoding)
00146
00147
00153 LogError();
00154
00167 LogError(const QString &rMessage,
00168 int code = 0,
00169 const QString &rSymbol = QString(),
00170 const QString &rContext = QString());
00171
00188 LogError(const char *pMessage,
00189 int code = 0,
00190 const char *pSymbol = 0,
00191 const char *pContext = 0,
00192 Encoding encoding = LATIN1);
00193
00194
00195
00196
00197
00203 int code() const;
00204
00210 QString context() const;
00211
00217 QString message() const;
00218
00224 QString symbol() const;
00225
00235 QString translatedMessage() const;
00236
00242 void setCode(int code);
00243
00254 void setContext(const QString &rClassName);
00255
00261 void setMessage(const QString &rMessage);
00262
00268 void setSymbol(const QString &rSymbol);
00269
00278 static LogError lastError();
00279
00287 static void setLastError(const LogError &rLogError);
00288
00295 LogError &addArg(const QVariant &rArg);
00296
00300 LogError &addArg(int arg);
00301
00305 LogError &addArg(const QString &rArg);
00306
00313 LogError &addCausingError(const LogError &rLogError);
00314
00320 QList<QVariant> args() const;
00321
00327 QList<LogError> causingErrors() const;
00328
00334 void clearArgs();
00335
00341 void clearCausingErrors();
00342
00349 bool isEmpty() const;
00350
00357 QString messageWithArgs() const;
00358
00365 QString translatedMessageWithArgs() const;
00366
00373 LogError &operator<<(const QVariant &rArg);
00374
00378 LogError &operator<<(int arg);
00379
00383 LogError &operator<<(const QString &rArg);
00384
00402 QString toString() const;
00403
00404 private:
00405 QString insertArgs(const QString &rMessage) const;
00406 QString cleanMessage(const QString &rMessage);
00407
00408 private:
00409 int mCode;
00410 QString mContext;
00411 QString mMessage;
00412 QString mSymbol;
00413 QList<QVariant> mArgs;
00414 QList<LogError> mCausingErrors;
00415
00416 #ifndef QT_NO_DATASTREAM
00417
00418 friend QDataStream &operator<<(QDataStream &rStream,
00419 const LogError &rLogError);
00420 friend QDataStream &operator>>(QDataStream &rStream,
00421 LogError &rLogError);
00422 #endif // QT_NO_DATASTREAM
00423 };
00424
00425
00426
00427
00428
00429
00430 #ifndef QT_NO_DATASTREAM
00431
00437 QDataStream &operator<<(QDataStream &rStream,
00438 const LogError &rLogError);
00439
00446 QDataStream &operator>>(QDataStream &rStream,
00447 LogError &rLogError);
00448 #endif // QT_NO_DATASTREAM
00449
00450 #ifndef QT_NO_DEBUG_STREAM
00451
00467 QDebug operator<<(QDebug debug,
00468 const LogError &rLogError);
00469 #endif // QT_NO_DEBUG_STREAM
00470
00471
00472
00473
00474
00475
00476 inline int LogError::code() const
00477 { return mCode; }
00478
00479 inline QString LogError::context() const
00480 { return mContext; }
00481
00482 inline QString LogError::message() const
00483 { return mMessage; }
00484
00485 inline QString LogError::symbol() const
00486 { return mSymbol; }
00487
00488 inline void LogError::setCode(int code)
00489 { mCode = code; }
00490
00491 inline void LogError::setContext(const QString &rContext)
00492 { mContext = rContext; }
00493
00494 inline void LogError::setMessage(const QString &rMessage)
00495 { mMessage = cleanMessage(rMessage); }
00496
00497 inline void LogError::setSymbol(const QString &rSymbol)
00498 { mSymbol = rSymbol; }
00499
00500 inline LogError &LogError::addArg(const QVariant &rArg)
00501 { mArgs << rArg; return *this; }
00502
00503 inline LogError &LogError::addArg(int arg)
00504 { mArgs << QVariant(arg); return *this; }
00505
00506 inline LogError &LogError::addArg(const QString &rArg)
00507 { mArgs << QVariant(rArg); return *this; }
00508
00509 inline LogError &LogError::addCausingError(const LogError &rLogError)
00510 { mCausingErrors << rLogError; return *this; }
00511
00512 inline QList<QVariant> LogError::args() const
00513 { return mArgs; }
00514
00515 inline void LogError::clearArgs()
00516 { mArgs.clear(); }
00517
00518 inline void LogError::clearCausingErrors()
00519 { mCausingErrors.clear(); }
00520
00521 inline QList<LogError> LogError::causingErrors() const
00522 { return mCausingErrors; }
00523
00524 inline bool LogError::isEmpty() const
00525 { return mCode || !mMessage.isEmpty(); }
00526
00527 inline QString LogError::messageWithArgs() const
00528 { return insertArgs(message()); }
00529
00530 inline QString LogError::translatedMessageWithArgs() const
00531 { return insertArgs(translatedMessage()); }
00532
00533 inline LogError &LogError::operator<<(const QVariant &rArg)
00534 { return addArg(rArg); }
00535
00536 inline LogError &LogError::operator<<(int arg)
00537 { return addArg(arg); }
00538
00539 inline LogError &LogError::operator<<(const QString &rArg)
00540 { return addArg(rArg); }
00541
00542
00543 }
00544
00545
00546 Q_DECLARE_METATYPE(Log4Qt::LogError)
00547 Q_DECLARE_TYPEINFO(Log4Qt::LogError, Q_MOVABLE_TYPE);
00548
00549
00550 #endif // LOG4QT_ERROR_H