]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/log.h
Convert wxFSW_EVENT_{WARNING,ERROR} to string correctly.
[wxWidgets.git] / interface / wx / log.h
index c440515b0e7479625c072082e6d1b9d51311bed8..998f0159590acb5c810df9d6aa46163ab92a7c5b 100644 (file)
@@ -6,6 +6,7 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
+#if wxUSE_BASE
 
 /**
     Different standard log levels (you may also define your own) used with
 
 /**
     Different standard log levels (you may also define your own) used with
@@ -68,8 +69,6 @@ public:
     wxThreadIdType threadId;
 };
 
     wxThreadIdType threadId;
 };
 
-
-
 /**
     @class wxLogFormatter
 
 /**
     @class wxLogFormatter
 
@@ -170,12 +169,12 @@ protected:
 
     wxLog class defines the interface for the <em>log targets</em> used by wxWidgets
     logging functions as explained in the @ref overview_log.
 
     wxLog class defines the interface for the <em>log targets</em> used by wxWidgets
     logging functions as explained in the @ref overview_log.
-    
+
     The only situations when you need to directly use this class is when you want
     to derive your own log target because the existing ones don't satisfy your
     needs.
 
     The only situations when you need to directly use this class is when you want
     to derive your own log target because the existing ones don't satisfy your
     needs.
 
-    Otherwise, it is completely hidden behind the @ref group_funcmacro_log "wxLogXXX() functions" 
+    Otherwise, it is completely hidden behind the @ref group_funcmacro_log "wxLogXXX() functions"
     and you may not even know about its existence.
 
     @note For console-mode applications, the default target is wxLogStderr, so
     and you may not even know about its existence.
 
     @note For console-mode applications, the default target is wxLogStderr, so
@@ -184,7 +183,7 @@ protected:
     @library{wxbase}
     @category{logging}
 
     @library{wxbase}
     @category{logging}
 
-    @see @ref overview_log, @ref group_funcmacro_log "wxLogXXX() functions" 
+    @see @ref overview_log, @ref group_funcmacro_log "wxLogXXX() functions"
 */
 class wxLog
 {
 */
 class wxLog
 {
@@ -193,7 +192,7 @@ public:
         @name Trace mask functions
     */
     //@{
         @name Trace mask functions
     */
     //@{
-    
+
     /**
         Add the @a mask to the list of allowed masks for wxLogTrace().
 
     /**
         Add the @a mask to the list of allowed masks for wxLogTrace().
 
@@ -229,7 +228,7 @@ public:
         @see AddTraceMask()
     */
     static void RemoveTraceMask(const wxString& mask);
         @see AddTraceMask()
     */
     static void RemoveTraceMask(const wxString& mask);
-    
+
     //@}
 
 
     //@}
 
 
@@ -238,11 +237,11 @@ public:
         @name Log target functions
     */
     //@{
         @name Log target functions
     */
     //@{
-    
+
     /**
         Instructs wxLog to not create new log targets on the fly if there is none
     /**
         Instructs wxLog to not create new log targets on the fly if there is none
-        currently (see GetActiveTarget()). 
-        
+        currently (see GetActiveTarget()).
+
         (Almost) for internal use only: it is supposed to be called by the
         application shutdown code (where you don't want the log target to be
         automatically created anymore).
         (Almost) for internal use only: it is supposed to be called by the
         application shutdown code (where you don't want the log target to be
         automatically created anymore).
@@ -305,7 +304,7 @@ public:
         @since 2.9.1
      */
     static wxLog *SetThreadActiveTarget(wxLog *logger);
         @since 2.9.1
      */
     static wxLog *SetThreadActiveTarget(wxLog *logger);
-    
+
     /**
         Flushes the current log target if any, does nothing if there is none.
 
     /**
         Flushes the current log target if any, does nothing if there is none.
 
@@ -316,7 +315,7 @@ public:
         thread has its own logger set with SetThreadActiveTarget().
     */
     static void FlushActive();
         thread has its own logger set with SetThreadActiveTarget().
     */
     static void FlushActive();
-    
+
     /**
         Resumes logging previously suspended by a call to Suspend().
         All messages logged in the meanwhile will be flushed soon.
     /**
         Resumes logging previously suspended by a call to Suspend().
         All messages logged in the meanwhile will be flushed soon.
@@ -338,16 +337,16 @@ public:
         @see Resume(), wxLogNull
     */
     static void Suspend();
         @see Resume(), wxLogNull
     */
     static void Suspend();
-    
+
     //@}
     //@}
-    
+
 
 
     /**
         @name Log level functions
     */
     //@{
 
 
     /**
         @name Log level functions
     */
     //@{
-    
+
     /**
         Returns the current log level limit.
 
     /**
         Returns the current log level limit.
 
@@ -357,7 +356,7 @@ public:
         @see SetLogLevel(), IsLevelEnabled()
     */
     static wxLogLevel GetLogLevel();
         @see SetLogLevel(), IsLevelEnabled()
     */
     static wxLogLevel GetLogLevel();
-    
+
     /**
         Returns true if logging at this level is enabled for the current thread.
 
     /**
         Returns true if logging at this level is enabled for the current thread.
 
@@ -400,7 +399,7 @@ public:
         @see SetComponentLevel()
     */
     static void SetLogLevel(wxLogLevel logLevel);
         @see SetComponentLevel()
     */
     static void SetLogLevel(wxLogLevel logLevel);
-    
+
     //@}
 
 
     //@}
 
 
@@ -409,7 +408,7 @@ public:
         @name Enable/disable features functions
     */
     //@{
         @name Enable/disable features functions
     */
     //@{
-    
+
     /**
         Globally enable or disable logging.
 
     /**
         Globally enable or disable logging.
 
@@ -430,7 +429,7 @@ public:
         @see IsLevelEnabled(), EnableLogging()
      */
     static bool IsEnabled();
         @see IsLevelEnabled(), EnableLogging()
      */
     static bool IsEnabled();
-    
+
     /**
         Returns whether the repetition counting mode is enabled.
     */
     /**
         Returns whether the repetition counting mode is enabled.
     */
@@ -442,7 +441,7 @@ public:
         repetitions is logged.
     */
     static void SetRepetitionCounting(bool repetCounting = true);
         repetitions is logged.
     */
     static void SetRepetitionCounting(bool repetCounting = true);
-    
+
     /**
         Returns the current timestamp format string.
 
     /**
         Returns the current timestamp format string.
 
@@ -473,7 +472,7 @@ public:
         @since 2.9.0
     */
     static void DisableTimestamp();
         @since 2.9.0
     */
     static void DisableTimestamp();
-    
+
     /**
         Returns whether the verbose mode is currently active.
     */
     /**
         Returns whether the verbose mode is currently active.
     */
@@ -482,16 +481,16 @@ public:
     /**
         Activates or deactivates verbose mode in which the verbose messages are
         logged as the normal ones instead of being silently dropped.
     /**
         Activates or deactivates verbose mode in which the verbose messages are
         logged as the normal ones instead of being silently dropped.
-        
+
         The verbose messages are the trace messages which are not disabled in the
         release mode and are generated by wxLogVerbose().
         The verbose messages are the trace messages which are not disabled in the
         release mode and are generated by wxLogVerbose().
-        
+
         @see @ref overview_log
     */
     static void SetVerbose(bool verbose = true);
         @see @ref overview_log
     */
     static void SetVerbose(bool verbose = true);
-    
+
     //@}
     //@}
-    
+
 
     /**
         Sets the specified formatter as the active one.
 
     /**
         Sets the specified formatter as the active one.
@@ -505,7 +504,7 @@ public:
         @since 2.9.4
     */
     wxLogFormatter *SetFormatter(wxLogFormatter* formatter);
         @since 2.9.4
     */
     wxLogFormatter *SetFormatter(wxLogFormatter* formatter);
-    
+
 
     /**
         Some of wxLog implementations, most notably the standard wxLogGui class,
 
     /**
         Some of wxLog implementations, most notably the standard wxLogGui class,
@@ -518,7 +517,7 @@ public:
         version first, before doing anything else.
     */
     virtual void Flush();
         version first, before doing anything else.
     */
     virtual void Flush();
-    
+
     /**
         Log the given record.
 
     /**
         Log the given record.
 
@@ -686,6 +685,33 @@ public:
 
 
 
 
 
 
+/**
+    @class wxLogInterposer
+
+    A special version of wxLogChain which uses itself as the new log target.
+    It forwards log messages to the previously installed one in addition to
+    processing them itself.
+
+    Unlike wxLogChain which is usually used directly as is, this class must be
+    derived from to implement wxLog::DoLog and/or wxLog::DoLogString methods.
+
+    wxLogInterposer destroys the previous log target in its destructor.
+    If you don't want this to happen, use wxLogInterposerTemp instead.
+
+    @library{wxbase}
+    @category{logging}
+*/
+class wxLogInterposer : public wxLogChain
+{
+public:
+    /**
+        The default constructor installs this object as the current active log target.
+    */
+    wxLogInterposer();
+};
+
+
+
 /**
     @class wxLogInterposerTemp
 
 /**
     @class wxLogInterposerTemp
 
@@ -710,7 +736,6 @@ public:
 };
 
 
 };
 
 
-
 /**
     @class wxLogStream
 
 /**
     @class wxLogStream
 
@@ -803,33 +828,6 @@ public:
 
 
 
 
 
 
-/**
-    @class wxLogInterposer
-
-    A special version of wxLogChain which uses itself as the new log target.
-    It forwards log messages to the previously installed one in addition to
-    processing them itself.
-
-    Unlike wxLogChain which is usually used directly as is, this class must be
-    derived from to implement wxLog::DoLog and/or wxLog::DoLogString methods.
-
-    wxLogInterposer destroys the previous log target in its destructor.
-    If you don't want this to happen, use wxLogInterposerTemp instead.
-
-    @library{wxbase}
-    @category{logging}
-*/
-class wxLogInterposer : public wxLogChain
-{
-public:
-    /**
-        The default constructor installs this object as the current active log target.
-    */
-    wxLogInterposer();
-};
-
-
-
 /**
     @class wxLogNull
 
 /**
     @class wxLogNull
 
@@ -892,6 +890,303 @@ public:
     ~wxLogNull();
 };
 
     ~wxLogNull();
 };
 
+#endif // wxUSE_BASE
+
+#if wxUSE_GUI
+
+/**
+    @class wxLogWindow
+
+    This class represents a background log window: to be precise, it collects all
+    log messages in the log frame which it manages but also passes them on to the
+    log target which was active at the moment of its creation. This allows you, for
+    example, to show all the log messages in a frame but still continue to process
+    them normally by showing the standard log dialog.
+
+    @library{wxcore}
+    @category{logging}
+
+    @see wxLogTextCtrl
+*/
+class wxLogWindow : public wxLogInterposer
+{
+public:
+    /**
+        Creates the log frame window and starts collecting the messages in it.
+
+        @param pParent
+            The parent window for the log frame, may be @NULL
+        @param szTitle
+            The title for the log frame
+        @param show
+            @true to show the frame initially (default), otherwise
+            Show() must be called later.
+        @param passToOld
+            @true to process the log messages normally in addition to logging them
+            in the log frame (default), @false to only log them in the log frame.
+            Note that if no targets were set using wxLog::SetActiveTarget() then
+            wxLogWindow simply becomes the active one and messages won't be passed
+            to other targets.
+    */
+    wxLogWindow(wxWindow* pParent, const wxString& szTitle, bool show = true,
+                bool passToOld = true);
+
+    /**
+        Returns the associated log frame window. This may be used to position or resize
+        it but use Show() to show or hide it.
+    */
+    wxFrame* GetFrame() const;
+
+    /**
+        Called if the user closes the window interactively, will not be
+        called if it is destroyed for another reason (such as when program
+        exits).
+
+        Return @true from here to allow the frame to close, @false to
+        prevent this from happening.
+
+        @see OnFrameDelete()
+    */
+    virtual bool OnFrameClose(wxFrame* frame);
+
+    /**
+        Called immediately after the log frame creation allowing for
+        any extra initializations.
+    */
+    virtual void OnFrameCreate(wxFrame* frame);
+
+    /**
+        Called right before the log frame is going to be deleted: will
+        always be called unlike OnFrameClose().
+    */
+    virtual void OnFrameDelete(wxFrame* frame);
+
+    /**
+        Shows or hides the frame.
+    */
+    void Show(bool show = true);
+};
+
+
+
+/**
+    @class wxLogGui
+
+    This is the default log target for the GUI wxWidgets applications.
+
+    Please see @ref overview_log_customize for explanation of how to change the
+    default log target.
+
+    An object of this class is used by default to show the log messages created
+    by using wxLogMessage(), wxLogError() and other logging functions. It
+    doesn't display the messages logged by them immediately however but
+    accumulates all messages logged during an event handler execution and then
+    shows them all at once when its Flush() method is called during the idle
+    time processing. This has the important advantage of showing only a single
+    dialog to the user even if several messages were logged because of a single
+    error as it often happens (e.g. a low level function could log a message
+    because it failed to open a file resulting in its caller logging another
+    message due to the failure of higher level operation requiring the use of
+    this file). If you need to force the display of all previously logged
+    messages immediately you can use wxLog::FlushActive() to force the dialog
+    display.
+
+    Also notice that if an error message is logged when several informative
+    messages had been already logged before, the informative messages are
+    discarded on the assumption that they are not useful -- and may be
+    confusing and hence harmful -- any more after the error. The warning
+    and error messages are never discarded however and any informational
+    messages logged after the first error one are also kept (as they may
+    contain information about the error recovery). You may override DoLog()
+    method to change this behaviour.
+
+    At any rate, it is possible that that several messages were accumulated
+    before this class Flush() method is called. If this is the case, Flush()
+    uses a custom dialog which shows the last message directly and allows the
+    user to view the previously logged ones by expanding the "Details"
+    wxCollapsiblePane inside it. This custom dialog also provides the buttons
+    for copying the log messages to the clipboard and saving them to a file.
+
+    However if only a single message is present when Flush() is called, just a
+    wxMessageBox() is used to show it. This has the advantage of being closer
+    to the native behaviour but it doesn't give the user any possibility to
+    copy or save the message (except for the recent Windows versions where @c
+    Ctrl-C may be pressed in the message box to copy its contents to the
+    clipboard) so you may want to override DoShowSingleLogMessage() to
+    customize wxLogGui -- the dialogs sample shows how to do this.
+
+    @library{wxcore}
+    @category{logging}
+*/
+class wxLogGui : public wxLog
+{
+public:
+    /**
+        Default constructor.
+    */
+    wxLogGui();
+
+    /**
+        Presents the accumulated log messages, if any, to the user.
+
+        This method is called during the idle time and should show any messages
+        accumulated in wxLogGui#m_aMessages field to the user.
+     */
+    virtual void Flush();
+
+protected:
+    /**
+        Returns the appropriate title for the dialog.
+
+        The title is constructed from wxApp::GetAppDisplayName() and the
+        severity string (e.g. "error" or "warning") appropriate for the current
+        wxLogGui#m_bErrors and wxLogGui#m_bWarnings values.
+     */
+    wxString GetTitle() const;
+
+    /**
+        Returns wxICON_ERROR, wxICON_WARNING or wxICON_INFORMATION depending on
+        the current maximal severity.
+
+        This value is suitable to be used in the style parameter of
+        wxMessageBox() function.
+     */
+    int GetSeverityIcon() const;
+
+    /**
+        Forgets all the currently stored messages.
+
+        If you override Flush() (and don't call the base class version), you
+        must call this method to avoid messages being logged over and over
+        again.
+     */
+    void Clear();
+
+
+    /**
+        All currently accumulated messages.
+
+        This array may be empty if no messages were logged.
+
+        @see m_aSeverity, m_aTimes
+     */
+    wxArrayString m_aMessages;
+
+    /**
+        The severities of each logged message.
+
+        This array is synchronized with wxLogGui#m_aMessages, i.e. the n-th
+        element of this array corresponds to the severity of the n-th message.
+        The possible severity values are @c wxLOG_XXX constants, e.g.
+        wxLOG_Error, wxLOG_Warning, wxLOG_Message etc.
+     */
+    wxArrayInt m_aSeverity;
+
+    /**
+        The time stamps of each logged message.
+
+        The elements of this array are time_t values corresponding to the time
+        when the message was logged.
+     */
+    wxArrayLong m_aTimes;
+
+    /**
+        True if there any error messages.
+     */
+    bool m_bErrors;
+
+    /**
+        True if there any warning messages.
+
+        If both wxLogGui#m_bErrors and this member are false, there are only
+        informational messages to be shown.
+     */
+    bool m_bWarnings;
+
+    /**
+        True if there any messages to be shown to the user.
+
+        This variable is used instead of simply checking whether
+        wxLogGui#m_aMessages array is empty to allow blocking further calls to
+        Flush() while a log dialog is already being shown, even if the messages
+        array hasn't been emptied yet.
+     */
+    bool m_bHasMessages;
+
+private:
+    /**
+        Method called by Flush() to show a single log message.
+
+        This function can be overridden to show the message in a different way.
+        By default a simple wxMessageBox() call is used.
+
+        @param message
+            The message to show (it can contain multiple lines).
+        @param title
+            The suggested title for the dialog showing the message, see
+            GetTitle().
+        @param style
+            One of @c wxICON_XXX constants, see GetSeverityIcon().
+     */
+    virtual void DoShowSingleLogMessage(const wxString& message,
+                                        const wxString& title,
+                                        int style);
+
+    /**
+        Method called by Flush() to show multiple log messages.
+
+        This function can be overridden to show the messages in a different way.
+        By default a special log dialog showing the most recent message and
+        allowing the user to expand it to view the previously logged ones is
+        used.
+
+        @param messages
+            Array of messages to show; it contains more than one element.
+        @param severities
+            Array of message severities containing @c wxLOG_XXX values.
+        @param times
+            Array of time_t values indicating when each message was logged.
+        @param title
+            The suggested title for the dialog showing the message, see
+            GetTitle().
+        @param style
+            One of @c wxICON_XXX constants, see GetSeverityIcon().
+     */
+    virtual void DoShowMultipleLogMessages(const wxArrayString& messages,
+                                           const wxArrayInt& severities,
+                                           const wxArrayLong& times,
+                                           const wxString& title,
+                                           int style);
+};
+
+
+
+/**
+    @class wxLogTextCtrl
+
+    Using these target all the log messages can be redirected to a text control.
+    The text control must have been created with @c wxTE_MULTILINE style by the
+    caller previously.
+
+    @library{wxcore}
+    @category{logging}
+
+    @see wxTextCtrl, wxStreamToTextRedirector
+*/
+class wxLogTextCtrl : public wxLog
+{
+public:
+    /**
+        Constructs a log target which sends all the log messages to the given text
+        control. The @a textctrl parameter cannot be @NULL.
+    */
+    wxLogTextCtrl(wxTextCtrl* pTextCtrl);
+};
+
+
+#endif // wxUSE_GUI
+
+#if wxUSE_BASE
 
 
 // ============================================================================
 
 
 // ============================================================================
@@ -1157,3 +1452,4 @@ void wxVLogSysError(const char* formatString, va_list argPtr);
 
 //@}
 
 
 //@}
 
+#endif // wxUSE_BASE