~brian-sidebotham/wxwidgets-cmake/wxpython-2.9.4

« back to all changes in this revision

Viewing changes to include/wx/msgout.h

  • Committer: Brian Sidebotham
  • Date: 2013-08-03 14:30:08 UTC
  • Revision ID: brian.sidebotham@gmail.com-20130803143008-c7806tkych1tp6fc
Initial import into Bazaar

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
///////////////////////////////////////////////////////////////////////////////
 
2
// Name:        wx/msgout.h
 
3
// Purpose:     wxMessageOutput class. Shows a message to the user
 
4
// Author:      Mattia Barbon
 
5
// Modified by:
 
6
// Created:     17.07.02
 
7
// RCS-ID:      $Id: msgout.h 61459 2009-07-18 23:22:51Z VZ $
 
8
// Copyright:   (c) Mattia Barbon
 
9
// Licence:     wxWindows licence
 
10
///////////////////////////////////////////////////////////////////////////////
 
11
 
 
12
#ifndef _WX_MSGOUT_H_
 
13
#define _WX_MSGOUT_H_
 
14
 
 
15
// ----------------------------------------------------------------------------
 
16
// headers
 
17
// ----------------------------------------------------------------------------
 
18
 
 
19
#include "wx/defs.h"
 
20
#include "wx/chartype.h"
 
21
#include "wx/strvararg.h"
 
22
 
 
23
// ----------------------------------------------------------------------------
 
24
// wxMessageOutput is a class abstracting formatted output target, i.e.
 
25
// something you can printf() to
 
26
// ----------------------------------------------------------------------------
 
27
 
 
28
// NB: VC6 has a bug that causes linker errors if you have template methods
 
29
//     in a class using __declspec(dllimport). The solution is to split such
 
30
//     class into two classes, one that contains the template methods and does
 
31
//     *not* use WXDLLIMPEXP_BASE and another class that contains the rest
 
32
//     (with DLL linkage).
 
33
class wxMessageOutputBase
 
34
{
 
35
public:
 
36
    virtual ~wxMessageOutputBase() { }
 
37
 
 
38
    // show a message to the user
 
39
    // void Printf(const wxString& format, ...) = 0;
 
40
    WX_DEFINE_VARARG_FUNC_VOID(Printf, 1, (const wxFormatString&),
 
41
                               DoPrintfWchar, DoPrintfUtf8)
 
42
#ifdef __WATCOMC__
 
43
    // workaround for http://bugzilla.openwatcom.org/show_bug.cgi?id=351
 
44
    WX_VARARG_WATCOM_WORKAROUND(void, Printf, 1, (const wxString&),
 
45
                                (wxFormatString(f1)));
 
46
    WX_VARARG_WATCOM_WORKAROUND(void, Printf, 1, (const wxCStrData&),
 
47
                                (wxFormatString(f1)));
 
48
    WX_VARARG_WATCOM_WORKAROUND(void, Printf, 1, (const char*),
 
49
                                (wxFormatString(f1)));
 
50
    WX_VARARG_WATCOM_WORKAROUND(void, Printf, 1, (const wchar_t*),
 
51
                                (wxFormatString(f1)));
 
52
#endif
 
53
 
 
54
    // called by DoPrintf() to output formatted string but can also be called
 
55
    // directly if no formatting is needed
 
56
    virtual void Output(const wxString& str) = 0;
 
57
 
 
58
protected:
 
59
    // NB: this is pure virtual so that it can be implemented in dllexported
 
60
    //     wxMessagOutput class
 
61
#if !wxUSE_UTF8_LOCALE_ONLY
 
62
    virtual void DoPrintfWchar(const wxChar *format, ...) = 0;
 
63
#endif
 
64
#if wxUSE_UNICODE_UTF8
 
65
    virtual void DoPrintfUtf8(const char *format, ...) = 0;
 
66
#endif
 
67
};
 
68
 
 
69
#ifdef __VISUALC__
 
70
    // "non dll-interface class 'wxStringPrintfMixin' used as base interface
 
71
    // for dll-interface class 'wxString'" -- this is OK in our case
 
72
    #pragma warning (push)
 
73
    #pragma warning (disable:4275)
 
74
#endif
 
75
 
 
76
class WXDLLIMPEXP_BASE wxMessageOutput : public wxMessageOutputBase
 
77
{
 
78
public:
 
79
    virtual ~wxMessageOutput() { }
 
80
 
 
81
    // gets the current wxMessageOutput object (may be NULL during
 
82
    // initialization or shutdown)
 
83
    static wxMessageOutput* Get();
 
84
 
 
85
    // sets the global wxMessageOutput instance; returns the previous one
 
86
    static wxMessageOutput* Set(wxMessageOutput* msgout);
 
87
 
 
88
protected:
 
89
#if !wxUSE_UTF8_LOCALE_ONLY
 
90
    virtual void DoPrintfWchar(const wxChar *format, ...);
 
91
#endif
 
92
#if wxUSE_UNICODE_UTF8
 
93
    virtual void DoPrintfUtf8(const char *format, ...);
 
94
#endif
 
95
 
 
96
private:
 
97
    static wxMessageOutput* ms_msgOut;
 
98
};
 
99
 
 
100
#ifdef __VISUALC__
 
101
    #pragma warning (pop)
 
102
#endif
 
103
 
 
104
// ----------------------------------------------------------------------------
 
105
// implementation which sends output to stderr or specified file
 
106
// ----------------------------------------------------------------------------
 
107
 
 
108
class WXDLLIMPEXP_BASE wxMessageOutputStderr : public wxMessageOutput
 
109
{
 
110
public:
 
111
    wxMessageOutputStderr(FILE *fp = stderr) : m_fp(fp) { }
 
112
 
 
113
    virtual void Output(const wxString& str);
 
114
 
 
115
protected:
 
116
    // return the string with "\n" appended if it doesn't already terminate
 
117
    // with it (in which case it's returned unchanged)
 
118
    wxString AppendLineFeedIfNeeded(const wxString& str);
 
119
 
 
120
    FILE *m_fp;
 
121
};
 
122
 
 
123
// ----------------------------------------------------------------------------
 
124
// implementation showing the message to the user in "best" possible way:
 
125
// uses stderr or message box if available according to the flag given to ctor.
 
126
// ----------------------------------------------------------------------------
 
127
 
 
128
enum wxMessageOutputFlags
 
129
{
 
130
    wxMSGOUT_PREFER_STDERR = 0, // use stderr if available (this is the default)
 
131
    wxMSGOUT_PREFER_MSGBOX = 1  // always use message box if available
 
132
};
 
133
 
 
134
class WXDLLIMPEXP_BASE wxMessageOutputBest : public wxMessageOutputStderr
 
135
{
 
136
public:
 
137
    wxMessageOutputBest(wxMessageOutputFlags flags = wxMSGOUT_PREFER_STDERR)
 
138
        : m_flags(flags) { }
 
139
 
 
140
    virtual void Output(const wxString& str);
 
141
 
 
142
private:
 
143
    wxMessageOutputFlags m_flags;
 
144
};
 
145
 
 
146
// ----------------------------------------------------------------------------
 
147
// implementation which shows output in a message box
 
148
// ----------------------------------------------------------------------------
 
149
 
 
150
#if wxUSE_GUI && wxUSE_MSGDLG
 
151
 
 
152
class WXDLLIMPEXP_CORE wxMessageOutputMessageBox : public wxMessageOutput
 
153
{
 
154
public:
 
155
    wxMessageOutputMessageBox() { }
 
156
 
 
157
    virtual void Output(const wxString& str);
 
158
};
 
159
 
 
160
#endif // wxUSE_GUI && wxUSE_MSGDLG
 
161
 
 
162
// ----------------------------------------------------------------------------
 
163
// implementation using the native way of outputting debug messages
 
164
// ----------------------------------------------------------------------------
 
165
 
 
166
class WXDLLIMPEXP_BASE wxMessageOutputDebug : public wxMessageOutputStderr
 
167
{
 
168
public:
 
169
    wxMessageOutputDebug() { }
 
170
 
 
171
    virtual void Output(const wxString& str);
 
172
};
 
173
 
 
174
// ----------------------------------------------------------------------------
 
175
// implementation using wxLog (mainly for backwards compatibility)
 
176
// ----------------------------------------------------------------------------
 
177
 
 
178
class WXDLLIMPEXP_BASE wxMessageOutputLog : public wxMessageOutput
 
179
{
 
180
public:
 
181
    wxMessageOutputLog() { }
 
182
 
 
183
    virtual void Output(const wxString& str);
 
184
};
 
185
 
 
186
#endif // _WX_MSGOUT_H_