-
Notifications
You must be signed in to change notification settings - Fork 4
/
ccConsole.h
121 lines (92 loc) · 3.37 KB
/
ccConsole.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//##########################################################################
//# #
//# CLOUDCOMPARE #
//# #
//# This program is free software; you can redistribute it and/or modify #
//# it under the terms of the GNU General Public License as published by #
//# the Free Software Foundation; version 2 of the License. #
//# #
//# This program is distributed in the hope that it will be useful, #
//# but WITHOUT ANY WARRANTY; without even the implied warranty of #
//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
//# GNU General Public License for more details. #
//# #
//# COPYRIGHT: EDF R&D / TELECOM ParisTech (ENST-TSI) #
//# #
//##########################################################################
#ifndef CC_CONSOLE_HEADER
#define CC_CONSOLE_HEADER
//system
#include <stdio.h>
#include <string.h>
//qCC_db
#include <ccLog.h>
//Qt
#include <QObject>
#include <QMutex>
#include <QStringList>
#include <QTimer>
#include <QVector>
#include <QPair>
#include <QFile>
class QListWidget;
class QWidget;
class MainWindow;
class QTextStream;
//! Console
class ccConsole : public QObject, public ccLog
{
Q_OBJECT
public:
//! Destructor
virtual ~ccConsole();
//! Inits console (and optionaly associates it with a text output widget)
/** WARNING: in release mode, no message will be output if no 'textDisplay'
widget is defined. Moreover, error messages will only appear in a
(blocking) QMessageBox if a 'parentWidget' widget is defined.
In debug mode, all message are sent to system console (with 'printf').
\param textDisplay text output widget (optional)
\param parentWidget parent widget (optional)
\param parentWindow parent window (if any - optional)
**/
static void Init( QListWidget* textDisplay = 0,
QWidget* parentWidget = 0,
MainWindow* parentWindow = 0);
//! Returns the (unique) static instance
static ccConsole* TheInstance();
//! Releases unique instance
static void ReleaseInstance();
//! Sets auto-refresh state
void setAutoRefresh(bool state);
//! Sets log file
bool setLogFile(QString filename);
public slots:
//! Refreshes console (display all messages still in queue)
void refresh();
protected:
//! Default constructor
/** Constructor is protected to avoid using this object as a non static class.
**/
ccConsole();
//inherited from ccLog
virtual void displayMessage(const QString& message, int level);
//! Associated text display widget
QListWidget* m_textDisplay;
//! Parent widget
QWidget* m_parentWidget;
//! Parent window (if any)
MainWindow* m_parentWindow;
//! Mutex for concurrent thread access to console
QMutex m_mutex;
//! Queue element type (message + color)
typedef QPair<QString,int> ConsoleItemType;
//! Queue for incoming messages
QVector<ConsoleItemType> m_queue;
//! Timer for auto-refresh
QTimer m_timer;
//! Log file
QFile m_logFile;
//! Log file stream
QTextStream* m_logStream;
};
#endif