77#include < QCoreApplication>
88#include < QMenuBar>
99#include < QDir>
10+ #include " Common/Cpp/Logging/GlobalLogger.h"
1011#include " CommonFramework/Globals.h"
1112#include " CommonFramework/GlobalSettingsPanel.h"
1213#include " CommonFramework/Windows/DpiScaler.h"
1314#include " CommonFramework/Windows/WindowTracker.h"
1415#include " CommonFramework/Windows/MainWindow.h"
1516#include " CommonFramework/Options/ResolutionOption.h"
16- #include " CommonFramework/Tools/GlobalThreadPools.h"
1717#include " FileWindowLogger.h"
1818
19- #include < iostream>
20- using std::cout;
21- using std::endl;
22-
2319namespace PokemonAutomation {
2420
2521
26- Logger& global_logger_raw (){
27- auto get_log_filepath = [&](){
28- QString application_name (QCoreApplication::applicationName ());
29- if (application_name.size () == 0 ){
30- application_name = " SerialPrograms" ;
31- }
32- return USER_FILE_PATH () + (application_name + " .log" ).toStdString ();
33- };
34-
35- static FileWindowLogger logger (get_log_filepath (), LOG_HISTORY_LINES );
36- return logger;
37- }
38- FileWindowLogger::~FileWindowLogger (){
39- stop ();
40- m_file_logger.remove_listener (*this );
41- }
42- void FileWindowLogger::stop (){
43- m_file_logger.stop ();
44- }
45-
46-
47- FileWindowLogger::FileWindowLogger (const std::string& path, size_t max_queue_size)
48- : m_file_logger(
49- GlobalThreadPools::unlimited_normal (),
50- FileLoggerConfig{
51- .file_path = path,
52- .max_queue_size = max_queue_size,
53- .max_file_size_bytes = 50 * 1024 * 1024 , // 50MB
54- .last_log_max_lines = max_queue_size,
55- }
56- )
57- {
58- m_file_logger.add_listener (*this );
59- }
60-
61- void FileWindowLogger::operator +=(FileWindowLoggerWindow& widget){
62- std::lock_guard<Mutex> lg (m_window_lock);
63- m_windows.insert (&widget);
64- }
65-
66- void FileWindowLogger::operator -=(FileWindowLoggerWindow& widget){
67- std::lock_guard<Mutex> lg (m_window_lock);
68- m_windows.erase (&widget);
69- }
70-
71- void FileWindowLogger::log (const std::string& msg, Color color){
72- m_file_logger.log (msg, color);
73- }
74-
75- void FileWindowLogger::log (std::string&& msg, Color color){
76- m_file_logger.log (std::move (msg), color);
77- }
78-
79- std::vector<std::string> FileWindowLogger::get_last () const {
80- return m_file_logger.get_last ();
81- }
82-
83- void FileWindowLogger::on_log (const std::string& msg, Color color){
22+ void FileWindowLoggerWindow::on_log (const std::string& msg, Color color){
8423 // This is called from FileLogger's background thread.
8524 // Format the message for Qt display and send to all windows.
86- std::lock_guard<Mutex> lg (m_window_lock);
87- if (!m_windows.empty ()){
88- QString str = to_window_str (msg, color);
89- for (FileWindowLoggerWindow* window : m_windows){
90- window->log (str);
91- }
92- }
25+ emit signal_log (to_window_str (msg, color));
9326}
9427
95- QString FileWindowLogger ::to_window_str (const std::string& msg, Color color){
28+ QString FileWindowLoggerWindow ::to_window_str (const std::string& msg, Color color){
9629 // Convert message to HTML for display in QTextEdit.
9730 // Replace spaces with and newlines with <br>.
9831 std::string str;
@@ -118,10 +51,11 @@ QString FileWindowLogger::to_window_str(const std::string& msg, Color color){
11851}
11952
12053
121- FileWindowLoggerWindow::FileWindowLoggerWindow (FileWindowLogger& logger, QWidget* parent)
54+ FileWindowLoggerWindow::FileWindowLoggerWindow (QWidget* parent)
12255 : QMainWindow(parent)
123- , m_logger(logger )
56+ , m_logger(dynamic_cast <FileLogger&>(global_logger_raw()) )
12457{
58+ m_logger.add_listener (*this );
12559 if (objectName ().isEmpty ()){
12660 setObjectName (QString::fromUtf8 (" TextWindow" ));
12761 }
@@ -156,7 +90,6 @@ FileWindowLoggerWindow::FileWindowLoggerWindow(FileWindowLogger& logger, QWidget
15690 GlobalSettings::instance ().LOG_WINDOW_SIZE ->X_POS .add_listener (*this );
15791 GlobalSettings::instance ().LOG_WINDOW_SIZE ->Y_POS .add_listener (*this );
15892
159- m_logger += *this ;
16093 log (" ================================================================================" );
16194 log (" <b>Window Startup...</b>" );
16295 log (" Current path: " + QDir::currentPath ());
@@ -168,7 +101,7 @@ FileWindowLoggerWindow::FileWindowLoggerWindow(FileWindowLogger& logger, QWidget
168101
169102FileWindowLoggerWindow::~FileWindowLoggerWindow (){
170103 remove_window (*this );
171- m_logger -= *this ;
104+ m_logger. remove_listener ( *this ) ;
172105 GlobalSettings::instance ().LOG_WINDOW_SIZE ->WIDTH .remove_listener (*this );
173106 GlobalSettings::instance ().LOG_WINDOW_SIZE ->HEIGHT .remove_listener (*this );
174107 GlobalSettings::instance ().LOG_WINDOW_SIZE ->X_POS .remove_listener (*this );
0 commit comments