Guiliani  Version 2.4 revision 5970 (build 3)
GUITrace.h
1 /*
2 * Copyright (C) TES Electronic Solutions GmbH,
3 * All Rights Reserved.
4 * Contact: info@guiliani.de
5 *
6 * This file is part of the Guiliani HMI framework
7 * for the development of graphical user interfaces on embedded systems.
8 */
9 
10 #ifndef GUITRACE__H_
11 #define GUITRACE__H_
12 
13 #include "GUIObserver.h"
14 #include "GUISubject.h"
15 #include "eC_Semaphore.h"
16 #include "GUIConfig.h"
17 
19 class eC_File;
20 class eC_PlatformFile;
21 
27 #define GUILOG(Level, Message) GUILOG_##Level(Message)
28 
29 // The concatenate defines will be replaced with the correct Log methods
30 // or with no operation to minimize the code, if only error level is set,
31 // or if trace is switched off.
32 //------------------------------------------------------------------------------------
33 #if (GUI_TRACE_LEVEL == GUI_TRACE_DEBUG)
34 #define GUILOG_GUI_TRACE_DEBUG(Message) CGUITrace::GetInstance().Log("DEBUG: ", Message)
35 #define GUILOG_GUI_TRACE_WARNING(Message) CGUITrace::GetInstance().Log("WARNING: ", Message)
36 #define GUILOG_GUI_TRACE_ERROR(Message) CGUITrace::GetInstance().Log("ERROR: ", Message,eC_String(__FILE__), eC_String(__LINE__))
37 #define GUILOG_THROW_EXCEPTION(Exception, ErrorMessage) {CGUITrace::GetInstance().Log("ERROR: ", ErrorMessage,eC_String(__FILE__), eC_String(__LINE__)); throw Exception;}
38 
39 #elif (GUI_TRACE_LEVEL == GUI_TRACE_WARNING)
40 #define GUILOG_GUI_TRACE_DEBUG(Message) {}
41 #define GUILOG_GUI_TRACE_WARNING(Message) CGUITrace::GetInstance().Log("WARNING: ", Message)
42 #define GUILOG_GUI_TRACE_ERROR(Message) CGUITrace::GetInstance().Log("ERROR: ", Message)
43 #define GUILOG_THROW_EXCEPTION(Exception, ErrorMessage) {CGUITrace::GetInstance().Log("ERROR: ", ErrorMessage); throw Exception;}
44 
45 #elif (GUI_TRACE_LEVEL == GUI_TRACE_ERROR)
46 #define GUILOG_GUI_TRACE_DEBUG(Message) {}
47 #define GUILOG_GUI_TRACE_WARNING(Message) {}
48 #define GUILOG_GUI_TRACE_ERROR(Message) CGUITrace::GetInstance().Log("ERROR: ", Message)
49 #define GUILOG_THROW_EXCEPTION(Exception, ErrorMessage) {CGUITrace::GetInstance().Log("ERROR: ", ErrorMessage); throw Exception;}
50 
51 #else // Trace is switched off
52 #define GUILOG_GUI_TRACE_DEBUG(Message) {}
53 #define GUILOG_GUI_TRACE_WARNING(Message) {}
54 #define GUILOG_GUI_TRACE_ERROR(Message) {}
55 #define GUILOG_THROW_EXCEPTION(Exception, ErrorMessage) {throw Exception;}
56 //------------------------------------------------------------------------------------
57 #endif
58 
59 // If GUI trace is set off, the GUI_REG_... defines are not needed, so they will be
60 // replaced with no operation and the whole class definition is not needed.
61 //------------------------------------------------------------------------------------
62 #if (GUI_TRACE_LEVEL == GUI_TRACE_OFF)
63 #define GUI_REG_STDOUT_TRACE() {}
64 #define GUI_REG_FILE_TRACE(FILE) {}
65 #define GUI_REG_DEBUGGER_TRACE() {}
66 #else
67 #define GUI_REG_STDOUT_TRACE() CGUITrace::GetInstance().CreateStdOutTrace();
68 #define GUI_REG_FILE_TRACE(FILE) CGUITrace::GetInstance().CreateFileTrace(FILE);
69 #define GUI_REG_DEBUGGER_TRACE() CGUITrace::GetInstance().CreateDebuggerTrace();
70 #endif
71 
80 #define GUILOGMETHODENTRY CGUITrace::GetInstance().Log("GUILOGMETHODENTRY: ", "Method "+eC_String(__FUNCTION__)+" called. Timestamp: "+GETTIMER.GetTime()+"ms \n", eC_String(__FILE__), eC_String(__LINE__));
81 
88 #define GUILOGMESSAGE(Message) CGUITrace::GetInstance().Log("INFO: ", Message)
89 
177 class CGUITrace : public CGUISubject
178 {
179 public:
186  {
187  static CGUITrace kTrace;
188  return kTrace;
189  }
190 
195  ~CGUITrace();
196 
205  void Log(
206  const eC_String& rkLogStr, const eC_String& rkOutputStr,
207  const eC_String& rkFileName = "", const eC_String& rkLineNumber = "");
208 
210  void CreateStdOutTrace();
211 
215  void CreateFileTrace(const eC_String &TraceFileName);
216 
218  void CreateDebuggerTrace();
219 
226  static void PrintObjectTree(CGUIObject* pObj);
227 
232  {
233  GUITRACE_NOT_ACTIVE = 0,
235  };
236 
242  void SetTraceActive(GUITraceActivation_t eTraceActive);
243 
248 
249 private:
253  CGUITrace();
254 
259  CGUITrace(const CGUITrace& kSource);
260 
266  CGUITrace& operator=(const CGUITrace& kSource);
267 
271  class CFileTrace : public CGUIObserver
272  {
273  public:
278  CFileTrace(const eC_String& rkTraceFileName);
279 
280  virtual void OnNotification(const eC_String& rkTraceString);
281 
282  ~CFileTrace();
283 
284  private:
288  CFileTrace();
289 
294  CFileTrace(const CFileTrace& kSource);
295 
301  CFileTrace& operator=(const CFileTrace& kSource);
302 
303  eC_File *m_pkTraceFile;
304  };
305 
309  class CStdOutTrace : public CGUIObserver
310  {
311  public:
312  CStdOutTrace():CGUIObserver(){}
313  virtual void OnNotification(const eC_String& rkTraceString);
314  ~CStdOutTrace(){}
315  };
316 
320  class CDebuggerTrace : public CGUIObserver
321  {
322  public:
323  CDebuggerTrace():CGUIObserver(){}
324  virtual void OnNotification(const eC_String& rkTraceString);
325  ~CDebuggerTrace(){}
326 
327  private:
332  CDebuggerTrace(const CDebuggerTrace& kSource);
333 
339  CDebuggerTrace& operator=(const CDebuggerTrace& kSource);
340  };
341 
348  static void PrintCompositeDebugTree(const CGUICompositeObject* pObj, eC_Int ilvl);
349 
350  CStdOutTrace *m_pkStdOutTrace;
351  CFileTrace *m_pkFileTrace;
352  CDebuggerTrace *m_pkDebuggerTrace;
355  eC_Semaphore m_kSem;
356 
357  GUITraceActivation_t m_eTraceActive;
358 };
359 
360 #endif
This is the Guiliani base class all controls are derived from.
Definition: GUIObject.h:78
Guiliani Trace component for platform independent logging of debug/error information to various targe...
Definition: GUITrace.h:177
~CGUITrace()
Definition: GUITrace.cpp:184
GUITraceActivation_t GetTraceActive()
Definition: GUITrace.cpp:218
static void PrintObjectTree(CGUIObject *pObj)
Definition: GUITrace.cpp:195
void CreateDebuggerTrace()
Definition: GUITrace.cpp:119
static CGUITrace & GetInstance()
Definition: GUITrace.h:185
Messages will not be logged.
Definition: GUITrace.h:234
void CreateFileTrace(const eC_String &TraceFileName)
Definition: GUITrace.cpp:110
This is the Guiliani base class for all composite objects.
Definition: GUICompositeObject.h:67
GUITraceActivation_t
Definition: GUITrace.h:231
void CreateStdOutTrace()
Definition: GUITrace.cpp:101
Observer Base class for Observer-Design-Pattern within Guiliani.
Definition: GUIObserver.h:27
void SetTraceActive(GUITraceActivation_t eTraceActive)
Definition: GUITrace.cpp:213
void Log(const eC_String &rkLogStr, const eC_String &rkOutputStr, const eC_String &rkFileName="", const eC_String &rkLineNumber="")
Definition: GUITrace.cpp:69
Subject Base class for Observer-Design-Pattern within Guiliani.
Definition: GUISubject.h:33