Guiliani  Version 2.6 revision 7136 (documentation build 22)
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
21class eC_File;
22class 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
194class CGUITrace : public CGUISubject
195{
196 friend class CGUIComponentManager;
197
198public:
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,
246 GUITRACE_ACTIVE = 1
247 };
248
254 void SetTraceActive(GUITraceActivation_t eTraceActive);
255
260
261private:
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() :
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
341private:
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
372private:
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
central component-manager
Definition: GUIComponentManager.h:62
This is the Guiliani base class for all composite objects.
Definition: GUICompositeObject.h:70
This is the Guiliani base class all controls are derived from.
Definition: GUIObject.h:81
Observer Base class for Observer-Design-Pattern within Guiliani.
Definition: GUIObserver.h:28
virtual void OnNotification()
Called by CGUISubject whenever an observed object triggers an update.
Definition: GUIObserver.h:39
Subject Base class for Observer-Design-Pattern within Guiliani.
Definition: GUISubject.h:34
Guiliani Trace component for platform independent logging of debug/error information to various targe...
Definition: GUITrace.h:195
static void CreateInstance()
Definition: GUITrace.cpp:73
void Log(const eC_String &rkLogStr, const eC_String &rkOutputStr, const eC_String &rkFileName="", const eC_String &rkLineNumber="")
Definition: GUITrace.cpp:111
GUITraceActivation_t
Definition: GUITrace.h:244
@ GUITRACE_ACTIVE
Messages will not be logged.
Definition: GUITrace.h:246
void CreateFileTrace(const eC_String &TraceFileName)
Definition: GUITrace.cpp:155
static void PrintObjectTree(CGUIObject *pObj)
Definition: GUITrace.cpp:220
void SetTraceActive(GUITraceActivation_t eTraceActive)
Definition: GUITrace.cpp:239
static void DeleteInstance()
Definition: GUITrace.cpp:79
void CreateDebuggerTrace()
Definition: GUITrace.cpp:164
void CreateStdOutTrace()
Definition: GUITrace.cpp:146
GUITraceActivation_t GetTraceActive()
Definition: GUITrace.cpp:244