// ---------------------------------------------------------------------------- // void pxLogConsole::DoLogRecord(wxLogLevel level, const wxString &message, const wxLogRecordInfo &info) { switch ( level ) { case wxLOG_Trace: case wxLOG_Debug: { wxString str; TimeStamp( &str ); MSW_OutputDebugString( str + message + L"\n" ); } break; case wxLOG_FatalError: // This one is unused by wx, and unused by PCSX2 (we prefer exceptions, thanks). pxFailDev( "Stop using FatalError and use assertions or exceptions instead." ); break; case wxLOG_Status: // Also unsed by wx, and unused by PCSX2 also (we prefer direct API calls to our main window!) pxFailDev( "Stop using wxLogStatus just access the Pcsx2App functions directly instead." ); break; case wxLOG_Info: if ( !GetVerbose() ) return; // fallthrough! case wxLOG_Message: Console.WriteLn( L"[wx] %s", WX_STR(message)); break; case wxLOG_Error: Console.Error(L"[wx] %s", WX_STR(message)); break; case wxLOG_Warning: Console.Warning(L"[wx] %s", WX_STR(message)); break; } }
void pxLogConsole::DoLog( wxLogLevel level, const wxChar *szString, time_t t ) { wxString message(szString); #else void pxLogConsole::DoLogRecord(wxLogLevel level, const wxString &message, const wxLogRecordInfo &info) { #endif switch ( level ) { case wxLOG_Trace: case wxLOG_Debug: { wxString str; TimeStamp( &str ); MSW_OutputDebugString( str + message + L"\n" ); } break; case wxLOG_FatalError: // This one is unused by wx, and unused by PCSX2 (we prefer exceptions, thanks). pxFailDev( "Stop using FatalError and use assertions or exceptions instead." ); break; case wxLOG_Status: // Also unsed by wx, and unused by PCSX2 also (we prefer direct API calls to our main window!) pxFailDev( "Stop using wxLogStatus just access the Pcsx2App functions directly instead." ); break; case wxLOG_Info: if ( !GetVerbose() ) return; // fallthrough! case wxLOG_Message: Console.WriteLn( L"[wx] %s", WX_STR(message)); break; case wxLOG_Error: Console.Error(L"[wx] %s", WX_STR(message)); break; case wxLOG_Warning: Console.Warning(L"[wx] %s", WX_STR(message)); break; } } // ---------------------------------------------------------------------------- void ConsoleTestThread::ExecuteTaskInThread() { static int numtrack = 0; while( !m_done ) { // Two lines, both formatted, and varied colors. This makes for a fairly realistic // worst case scenario (without being entirely unrealistic). Console.WriteLn( L"This is a threaded logging test. Something bad could happen... %d", ++numtrack ); Console.Warning( L"Testing high stress loads %s", L"(multi-color)" ); Yield( 0 ); } } // ---------------------------------------------------------------------------- // Pass an uninitialized file object. The function will ask the user for the // filename and try to open it. It returns true on success (file was opened), // false if file couldn't be opened/created and -1 if the file selection // dialog was canceled. // static bool OpenLogFile(wxFile& file, wxString& filename, wxWindow *parent) { filename = wxSaveFileSelector(L"log", L"txt", L"log.txt", parent); if ( !filename ) return false; // canceled if( wxFile::Exists(filename) ) { bool bAppend = false; wxString strMsg; strMsg.Printf(L"Append log to file '%s' (choosing [No] will overwrite it)?", filename.c_str()); switch ( Msgbox::ShowModal( _("Save log question"), strMsg, MsgButtons().YesNo().Cancel() ) ) { case wxID_YES: bAppend = true; break; case wxID_NO: bAppend = false; break; case wxID_CANCEL: return false; default: pxFailDev( "invalid message box return value" ); } return ( bAppend ) ? file.Open(filename, wxFile::write_append) : file.Create(filename, true /* overwrite */); } return file.Create(filename); }