ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
ecvConsole.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 // CV_CORE_LIB
11 #include <CVLog.h>
12 
13 // Qt
14 #include <QFile>
15 #include <QListWidget>
16 #include <QMutex>
17 #include <QTimer>
18 
19 class MainWindow;
20 class QTextStream;
21 
24 class ecvCustomQListWidget : public QListWidget {
25  Q_OBJECT
26 
27 public:
28  ecvCustomQListWidget(QWidget* parent = nullptr);
29 
30 protected:
31  void keyPressEvent(QKeyEvent* event) override;
32 };
33 
35 class ecvConsole : public QObject, public CVLog {
36  Q_OBJECT
37 
38 public:
40  ~ecvConsole() override;
41 
43 
51  static void Init(QListWidget* textDisplay = nullptr,
52  QWidget* parentWidget = nullptr,
53  MainWindow* parentWindow = nullptr,
54  bool redirectToStdOut = false);
55 
57 
60  static ecvConsole* TheInstance(bool autoInit = true);
61 
63  static void ReleaseInstance(bool flush = true);
64 
66  void setAutoRefresh(bool state);
67 
69 
73  bool setLogFile(const QString& logPrefix);
74 
76  static void EnableQtMessages(bool state);
77 
80  static bool QtMessagesEnabled() { return s_showQtMessagesInConsole; }
81 
83  inline QWidget* parentWidget() { return m_parentWidget; }
84 
85 public slots:
86 
88  void refresh();
89 
90 protected:
92  static QString generateLogFileName(const QString& prefix);
93 
95  static QString getLogDirectory();
97 
100  ecvConsole();
101 
102  // inherited from CVLog
103  void logMessage(const QString& message, int level) override;
104 
106  QListWidget* m_textDisplay;
107 
109  QWidget* m_parentWidget;
110 
113 
115  QMutex m_mutex;
116 
118  using ConsoleItemType = QPair<QString, int>;
119 
121  QVector<ConsoleItemType> m_queue;
122 
124  QTimer m_timer;
125 
127  QFile m_logFile;
129  QTextStream* m_logStream;
130 
133  static bool s_redirectToStdOut;
134 };
MouseEvent event
#define slots
Main log interface.
Definition: CVLog.h:25
static CVLog * TheInstance()
Returns the static and unique instance.
Definition: CVLog.cpp:53
Console.
Definition: ecvConsole.h:35
ecvConsole()
Default constructor.
Definition: ecvConsole.cpp:99
static QString getLogDirectory()
Get appropriate log directory path (handles permissions on Ubuntu)
Definition: ecvConsole.cpp:357
QWidget * m_parentWidget
Parent widget.
Definition: ecvConsole.h:109
static void ReleaseInstance(bool flush=true)
Releases unique instance.
Definition: ecvConsole.cpp:90
QMutex m_mutex
Mutex for concurrent thread access to console.
Definition: ecvConsole.h:115
static void Init(QListWidget *textDisplay=nullptr, QWidget *parentWidget=nullptr, MainWindow *parentWindow=nullptr, bool redirectToStdOut=false)
Inits console (and optionaly associates it with a text output widget)
Definition: ecvConsole.cpp:178
MainWindow * m_parentWindow
Parent window (if any)
Definition: ecvConsole.h:112
static void EnableQtMessages(bool state)
Whether to show Qt messages (qDebug / qWarning / etc.) in Console.
Definition: ecvConsole.cpp:170
QPair< QString, int > ConsoleItemType
Queue element type (message + color)
Definition: ecvConsole.h:118
QTextStream * m_logStream
Log file stream.
Definition: ecvConsole.h:129
bool setLogFile(const QString &logPrefix)
Sets log file with prefix (generates timestamped log file like glog)
Definition: ecvConsole.cpp:454
QTimer m_timer
Timer for auto-refresh.
Definition: ecvConsole.h:124
void refresh()
Refreshes console (display all messages still in queue)
Definition: ecvConsole.cpp:224
static bool s_showQtMessagesInConsole
Whether to show Qt messages (qDebug / qWarning / etc.) in Console.
Definition: ecvConsole.h:132
static bool QtMessagesEnabled()
Definition: ecvConsole.h:80
~ecvConsole() override
Destructor.
Definition: ecvConsole.cpp:105
static QString generateLogFileName(const QString &prefix)
Generate log file name with timestamp and pid.
Definition: ecvConsole.cpp:345
QWidget * parentWidget()
Returns the parent widget (if any)
Definition: ecvConsole.h:83
QFile m_logFile
Log file.
Definition: ecvConsole.h:127
static bool s_redirectToStdOut
Definition: ecvConsole.h:133
QListWidget * m_textDisplay
Associated text display widget.
Definition: ecvConsole.h:106
void logMessage(const QString &message, int level) override
Generic message logging method.
Definition: ecvConsole.cpp:276
void setAutoRefresh(bool state)
Sets auto-refresh state.
Definition: ecvConsole.cpp:214
QVector< ConsoleItemType > m_queue
Queue for incoming messages.
Definition: ecvConsole.h:121
void keyPressEvent(QKeyEvent *event) override
Definition: ecvConsole.cpp:64
ecvCustomQListWidget(QWidget *parent=nullptr)
Definition: ecvConsole.cpp:61