improve wxMessageOutputBest console output under Windows (closes 9146)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53730 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-05-23 23:28:13 +00:00
parent e9863f4ea1
commit 784ee7d511
7 changed files with 363 additions and 59 deletions

View File

@@ -100,21 +100,6 @@ private:
#pragma warning (default:4275)
#endif
// ----------------------------------------------------------------------------
// implementation showing the message to the user in "best" possible way: uses
// native message box if available (currently only under Windows) and stderr
// otherwise; unlike wxMessageOutputMessageBox this class is always safe to use
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_BASE wxMessageOutputBest : public wxMessageOutput
{
public:
wxMessageOutputBest() { }
protected:
virtual void Output(const wxString& str);
};
// ----------------------------------------------------------------------------
// implementation which sends output to stderr
// ----------------------------------------------------------------------------
@@ -126,6 +111,34 @@ public:
protected:
virtual void Output(const wxString& str);
// return the string with "\n" appended if it doesn't already terminate
// with it (in which case it's returned unchanged)
wxString AppendLineFeedIfNeeded(const wxString& str);
};
// ----------------------------------------------------------------------------
// implementation showing the message to the user in "best" possible way:
// uses stderr or message box if available according to the flag given to ctor.
// ----------------------------------------------------------------------------
enum wxMessageOutputFlags
{
wxMSGOUT_PREFER_STDERR = 0, // use stderr if available (this is the default)
wxMSGOUT_PREFER_MSGBOX = 1 // always use message box if available
};
class WXDLLIMPEXP_BASE wxMessageOutputBest : public wxMessageOutputStderr
{
public:
wxMessageOutputBest(wxMessageOutputFlags flags = wxMSGOUT_PREFER_STDERR)
: m_flags(flags) { }
protected:
virtual void Output(const wxString& str);
private:
wxMessageOutputFlags m_flags;
};
// ----------------------------------------------------------------------------
@@ -149,7 +162,7 @@ protected:
// implementation using the native way of outputting debug messages
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_BASE wxMessageOutputDebug : public wxMessageOutput
class WXDLLIMPEXP_BASE wxMessageOutputDebug : public wxMessageOutputStderr
{
public:
wxMessageOutputDebug() { }
@@ -171,5 +184,4 @@ protected:
virtual void Output(const wxString& str);
};
#endif
// _WX_MSGOUT_H_
#endif // _WX_MSGOUT_H_

View File

@@ -65,6 +65,23 @@ public:
virtual GSocketManager *GetSocketManager() { return ms_manager; }
#endif // wxUSE_SOCKETS
#ifndef __WXWINCE__
// console helpers
// ---------------
// this method can be overridden by a derived class to always return true
// or false to force [not] using the console for output to stderr
//
// by default console applications always return true from here while the
// GUI ones only return true if they're being run from console and there is
// no other activity happening in this console
virtual bool CanUseStderr() = 0;
// write text to the console, return true if ok or false on error
virtual bool WriteToStderr(const wxString& text) = 0;
#endif // !__WXWINCE__
protected:
// implementation of WaitForThread() for the console applications which is
// also used by the GUI code if it doesn't [yet|already} dispatch events

View File

@@ -28,6 +28,10 @@ public:
#endif
virtual bool DoMessageFromThreadWait();
virtual WXDWORD WaitForThread(WXHANDLE hThread);
#ifndef __WXWINCE__
virtual bool CanUseStderr() { return true; }
virtual bool WriteToStderr(const wxString& text);
#endif // !__WXWINCE__
};
#if wxUSE_GUI
@@ -45,9 +49,13 @@ public:
virtual bool DoMessageFromThreadWait();
virtual wxPortId GetToolkitVersion(int *majVer = NULL, int *minVer = NULL) const;
virtual WXDWORD WaitForThread(WXHANDLE hThread);
#ifndef __WXWINCE__
virtual bool CanUseStderr();
virtual bool WriteToStderr(const wxString& text);
#endif // !__WXWINCE__
};
#endif // wxUSE_GUI
#endif // _WX_MSW_APPTRAIT_H_