Guiliani  Version 2.5 revision 6773 (build 33)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 
18 #include "GUIComponentManager.h"
19 
21 class eC_File;
22 class eC_PlatformFile;
23 
29 #define GUILOG(Level, Message) GUILOG_##Level(Message)
30 
31 // The concatenate defines will be replaced with the correct Log methods
32 // or with no operation to minimize the code, if only error level is set,
33 // or if trace is switched off.
34 //------------------------------------------------------------------------------------
35 #if (GUI_TRACE_LEVEL == GUI_TRACE_DEBUG)
36 #define GUILOG_GUI_TRACE_DEBUG(Message) CGUIComponentManager::GetInstance().GetTrace().Log("DEBUG: ", Message)
37 #define GUILOG_GUI_TRACE_WARNING(Message) CGUIComponentManager::GetInstance().GetTrace().Log("WARNING: ", Message)
38 #define GUILOG_GUI_TRACE_ERROR(Message) CGUIComponentManager::GetInstance().GetTrace().Log("ERROR: ", Message,eC_String(__FILE__), eC_String(__LINE__))
39 #ifdef GUILIANI_USE_EXCEPTIONS
40 #define GUILOG_THROW_EXCEPTION(Exception, ErrorMessage) { CGUIComponentManager::GetInstance().GetTrace().Log("ERROR: ", ErrorMessage,eC_String(__FILE__), eC_String(__LINE__)); throw Exception; }
41 #else
42 #define GUILOG_THROW_EXCEPTION(Exception, ErrorMessage) {}
43 #endif
44 #elif (GUI_TRACE_LEVEL == GUI_TRACE_WARNING)
45 #define GUILOG_GUI_TRACE_DEBUG(Message) {}
46 #define GUILOG_GUI_TRACE_WARNING(Message) CGUIComponentManager::GetInstance().GetTrace().Log("WARNING: ", Message)
47 #define GUILOG_GUI_TRACE_ERROR(Message) CGUIComponentManager::GetInstance().GetTrace().Log("ERROR: ", Message)
48 #ifdef GUILIANI_USE_EXCEPTIONS
49 #define GUILOG_THROW_EXCEPTION(Exception, ErrorMessage) { CGUIComponentManager::GetInstance().GetTrace().Log("ERROR: ", ErrorMessage); throw Exception; }
50 #else
51 #define GUILOG_THROW_EXCEPTION(Exception, ErrorMessage) {}
52 #endif
53 
54 #elif (GUI_TRACE_LEVEL == GUI_TRACE_ERROR)
55 #define GUILOG_GUI_TRACE_DEBUG(Message) {}
56 #define GUILOG_GUI_TRACE_WARNING(Message) {}
57 #define GUILOG_GUI_TRACE_ERROR(Message) CGUIComponentManager::GetInstance().GetTrace().Log("ERROR: ", Message)
58 #ifdef GUILIANI_USE_EXCEPTIONS
59 #define GUILOG_THROW_EXCEPTION(Exception, ErrorMessage) { CGUIComponentManager::GetInstance().GetTrace().Log("ERROR: ", ErrorMessage); throw Exception; }
60 #else
61 #define GUILOG_THROW_EXCEPTION(Exception, ErrorMessage) {}
62 #endif
63 
64 #else // Trace is switched off
65 #define GUILOG_GUI_TRACE_DEBUG(Message) {}
66 #define GUILOG_GUI_TRACE_WARNING(Message) {}
67 #define GUILOG_GUI_TRACE_ERROR(Message) {}
68 #ifdef GUILIANI_USE_EXCEPTIONS
69 #define GUILOG_THROW_EXCEPTION(Exception, ErrorMessage) {throw Exception;}
70 #else
71 #define GUILOG_THROW_EXCEPTION(Exception, ErrorMessage) {}
72 #endif
73 //------------------------------------------------------------------------------------
74 #endif
75 
76 // If GUI trace is set off, the GUI_REG_... defines are not needed, so they will be
77 // replaced with no operation and the whole class definition is not needed.
78 //------------------------------------------------------------------------------------
79 #if (GUI_TRACE_LEVEL == GUI_TRACE_OFF)
80 #define GUI_REG_STDOUT_TRACE() {}
81 #define GUI_REG_FILE_TRACE(FILE) {}
82 #define GUI_REG_DEBUGGER_TRACE() {}
83 #else
84 #define GUI_REG_STDOUT_TRACE() CGUIComponentManager::GetInstance().GetTrace().CreateStdOutTrace();
85 #define GUI_REG_FILE_TRACE(FILE) CGUIComponentManager::GetInstance().GetTrace().CreateFileTrace(FILE);
86 #define GUI_REG_DEBUGGER_TRACE() CGUIComponentManager::GetInstance().GetTrace().CreateDebuggerTrace();
87 #endif
88 
97 #define GUILOGMETHODENTRY CGUIComponentManager::GetInstance().GetTrace().Log("GUILOGMETHODENTRY: ", "Method "+eC_String(__FUNCTION__)+" called. Timestamp: "+GETTIMER.GetTime()+"ms \n", eC_String(__FILE__), eC_String(__LINE__));
98 
105 #define GUILOGMESSAGE(Message) CGUIComponentManager::GetInstance().GetTrace().Log("INFO: ", Message)
106 
194 class CGUITrace : public CGUISubject
195 {
196  friend class CGUIComponentManager;
197 
198 public:
201  static void CreateInstance();
202 
205  static void DeleteInstance();
206 
215  void Log(
216  const eC_String& rkLogStr,
217  const eC_String& rkOutputStr,
218  const eC_String& rkFileName = "",
219  const eC_String& rkLineNumber = "");
220 
222  void CreateStdOutTrace();
223 
227  void CreateFileTrace(const eC_String &TraceFileName);
228 
230  void CreateDebuggerTrace();
231 
238  static void PrintObjectTree(CGUIObject* pObj);
239 
244  {
245  GUITRACE_NOT_ACTIVE = 0,
247  };
248 
254  void SetTraceActive(GUITraceActivation_t eTraceActive);
255 
260 
261 private:
265  class CFileTrace : public CGUIObserver
266  {
267  public:
272  CFileTrace(const eC_String& rkTraceFileName);
273 
274  virtual void OnNotification(const eC_String& rkTraceString);
275 
276  ~CFileTrace();
277 
278  private:
282  CFileTrace();
283 
288  CFileTrace(const CFileTrace& kSource);
289 
295  CFileTrace& operator=(const CFileTrace& kSource);
296 
297  eC_File* m_pkTraceFile;
298  };
299 
303  class CStdOutTrace : public CGUIObserver
304  {
305  public:
306  CStdOutTrace() :
307  CGUIObserver()
308  {}
309 
310  virtual void OnNotification(const eC_String& rkTraceString);
311 
312  ~CStdOutTrace()
313  {}
314  };
315 
319  class CDebuggerTrace : public CGUIObserver
320  {
321  public:
322  CDebuggerTrace() :CGUIObserver() {}
323  virtual void OnNotification(const eC_String& rkTraceString);
324  ~CDebuggerTrace() {}
325 
326  private:
331  CDebuggerTrace(const CDebuggerTrace& kSource);
332 
338  CDebuggerTrace& operator=(const CDebuggerTrace& kSource);
339  };
340 
341 private:
345  CGUITrace();
346 
349  virtual ~CGUITrace();
350 
355  CGUITrace(const CGUITrace& kSource);
356 
362  CGUITrace& operator=(const CGUITrace& kSource);
363 
370  static void PrintCompositeDebugTree(const CGUICompositeObject* pObj, eC_Int ilvl);
371 
372 private:
373  static CGUITrace* ms_pkInstance;
374  CStdOutTrace* m_pkStdOutTrace;
375  CFileTrace* m_pkFileTrace;
376  CDebuggerTrace* m_pkDebuggerTrace;
379  eC_Semaphore m_kSem;
380 
381  GUITraceActivation_t m_eTraceActive;
382 };
383 
384 #endif