1 /* 2 * This file is part of the Code::Blocks IDE and licensed under the GNU Lesser General Public License, version 3 3 * http://www.gnu.org/licenses/lgpl-3.0.html 4 */ 5 6 #ifndef LOGGER_H 7 #define LOGGER_H 8 9 #include "prep.h" 10 #include <wx/string.h> 11 #include "settings.h" // DLLIMPORT 12 13 class wxMenu; 14 class wxWindow; 15 16 namespace 17 { 18 static wxString temp_string(_T('\0'), 250); 19 static wxString newline_string(_T("\n")); 20 } 21 22 /** The base class for all kinds of loggers, see loggers.h for its derived classes */ 23 class DLLIMPORT Logger 24 { 25 public: 26 /* 27 * The ubiquitous, standard log levels to use are: info, warning, error, critical 28 * 29 * info - I'm telling you, but you probably won't bother reading anyway. 30 * warning - You should know about this. I'm telling you now, so you can't sue me later. 31 * error - Something failed, but the world is not going to end. 32 * critical - Something failed, and it hit you right in the eye. It really hurts, you have to do something. 33 * 34 * Other log levels are for special uses and may have side effects that you don't know about, 35 * and they may not work like expected under the specific conditions they run in... don't use them. 36 */ 37 enum level { caption, info, warning, success, error, critical, failure, pagetitle, spacer, asterisk }; 38 enum { num_levels = asterisk +1 }; 39 40 struct Feature 41 { 42 enum Enum 43 { 44 IsWrappable = 0, 45 CanClear, 46 CanCopy, 47 Additional 48 }; 49 }; 50 Logger()51 Logger() {} ~Logger()52 virtual ~Logger() {} 53 54 /* Logger writers: 55 * This is the One Function you must implement. Everything else is optional or bull. 56 * It must be possible to call this function in presence and in absence of GUI without crashing the application. 57 * It is not necessary to provide any actual output at all times, but it must be 100% safe to call this function at all times. 58 * You may not throw from this function, it must return in finite time, and it must not call logging functions (to prevent infinite recursion). 59 * Other than that, you can do anything you want with the log messages that you receive. 60 */ 61 virtual void Append(const wxString& msg, Logger::level lv = info) = 0; 62 Clear()63 virtual void Clear() {} 64 virtual void CopyContentsToClipboard(cb_optional bool selectionOnly = false) {} 65 UpdateSettings()66 virtual void UpdateSettings() {} CreateControl(cb_optional wxWindow * parent)67 virtual wxWindow* CreateControl(cb_optional wxWindow* parent) { return nullptr; } 68 GetWrapMode()69 virtual bool GetWrapMode() const { return false; } HasFeature(cb_optional Feature::Enum feature)70 virtual bool HasFeature(cb_optional Feature::Enum feature) const { return false; } AppendAdditionalMenuItems(cb_optional wxMenu & menu)71 virtual void AppendAdditionalMenuItems(cb_optional wxMenu &menu) {} 72 }; 73 74 #endif 75