GPL + CeCILL Header change
[scilab.git] / scilab / modules / scicos / src / cpp / LoggerView.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2014-2014 - Scilab Enterprises - Clement DAVID
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  * === LICENSE_END ===
14  *
15  */
16
17 #ifndef LOGGERVIEW_HXX_
18 #define LOGGERVIEW_HXX_
19
20 #include <cwchar>
21 #include <string>
22 #include <sstream>
23
24 #include "View.hxx"
25 #include "utilities.hxx"
26
27 namespace org_scilab_modules_scicos
28 {
29
30 enum LogLevel
31 {
32     LOG_UNDEF = -1,   //!< Undefined value
33     LOG_TRACE = 0,    //!< more detailed information. Expect these to be written to logs only.
34     LOG_DEBUG = 1,    //!< detailed information on the flow through the system. Expect these to be written to logs only.
35     LOG_INFO = 2,    //!< Interesting runtime events (startup/shutdown). Expect these to be immediately visible on a console, so be conservative and keep to a minimum.
36     LOG_WARNING = 3,    //!<
37     LOG_ERROR = 4,    //!< Other runtime errors or unexpected conditions. Expect these to be immediately visible on a status console.
38     LOG_FATAL = 5,    //!< Severe errors that cause premature termination. Expect these to be immediately visible on a status console.
39 };
40
41 class LoggerView: public View
42 {
43 public:
44     LoggerView();
45     ~LoggerView();
46
47     /*
48      * Implement a classical Logger interface
49      */
50
51     static enum LogLevel indexOf(const wchar_t* name);
52     static const wchar_t* toString(enum LogLevel level);
53     static const char* toDisplay(enum LogLevel level);
54
55     enum LogLevel getLevel() const
56     {
57         return m_level;
58     }
59     void setLevel(enum LogLevel level)
60     {
61         this->m_level = level;
62     }
63
64     void log(enum LogLevel level, const std::stringstream& msg);
65     void log(enum LogLevel level, const std::string& msg);
66     void log(enum LogLevel level, const char* msg, ...);
67     void log(enum LogLevel level, const wchar_t* msg, ...);
68
69     /*
70      * Implement the Logger as a View
71      */
72
73     void objectCreated(const ScicosID& uid, kind_t k);
74     void objectReferenced(const ScicosID& uid, kind_t k, unsigned refCount);
75     void objectUnreferenced(const ScicosID& uid, kind_t k, unsigned refCount);
76     void objectDeleted(const ScicosID& uid, kind_t k);
77     void propertyUpdated(const ScicosID& uid, kind_t k, object_properties_t p, update_status_t u);
78
79 private:
80     enum LogLevel m_level;
81 };
82
83 } /* namespace org_scilab_modules_scicos */
84
85 #endif /* LOGGERVIEW_HXX_ */