You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
6.7 KiB
C++
208 lines
6.7 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkOutputWindow.h
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
/**
|
|
* @class vtkOutputWindow
|
|
* @brief base class for writing debug output to a console
|
|
*
|
|
* This class is used to encapsulate all text output, so that it will work
|
|
* with operating systems that have a stdout and stderr, and ones that
|
|
* do not. (i.e windows does not). Sub-classes can be provided which can
|
|
* redirect the output to a window.
|
|
*/
|
|
|
|
#ifndef vtkOutputWindow_h
|
|
#define vtkOutputWindow_h
|
|
|
|
#include "vtkCommonCoreModule.h" // For export macro
|
|
#include "vtkDebugLeaksManager.h" // Must be included before singletons
|
|
#include "vtkObject.h"
|
|
|
|
class VTKCOMMONCORE_EXPORT vtkOutputWindowCleanup
|
|
{
|
|
public:
|
|
vtkOutputWindowCleanup();
|
|
~vtkOutputWindowCleanup();
|
|
|
|
private:
|
|
vtkOutputWindowCleanup(const vtkOutputWindowCleanup& other) = delete;
|
|
vtkOutputWindowCleanup& operator=(const vtkOutputWindowCleanup& rhs) = delete;
|
|
};
|
|
|
|
class vtkOutputWindowPrivateAccessor;
|
|
class VTKCOMMONCORE_EXPORT vtkOutputWindow : public vtkObject
|
|
{
|
|
public:
|
|
// Methods from vtkObject
|
|
vtkTypeMacro(vtkOutputWindow, vtkObject);
|
|
/**
|
|
* Print ObjectFactor to stream.
|
|
*/
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
/**
|
|
* Creates a new instance of vtkOutputWindow. Note this *will* create a new
|
|
* instance using the vtkObjectFactor. If you want to access the global
|
|
* instance, use `GetInstance` instead.
|
|
*/
|
|
static vtkOutputWindow* New();
|
|
|
|
/**
|
|
* Return the singleton instance with no reference counting.
|
|
*/
|
|
static vtkOutputWindow* GetInstance();
|
|
/**
|
|
* Supply a user defined output window. Call ->Delete() on the supplied
|
|
* instance after setting it.
|
|
*/
|
|
static void SetInstance(vtkOutputWindow* instance);
|
|
|
|
//@{
|
|
/**
|
|
* Display the text. Four virtual methods exist, depending on the type of
|
|
* message to display. This allows redirection or reformatting of the
|
|
* messages. The default implementation uses DisplayText for all.
|
|
* Consequently, subclasses can simply override DisplayText and use
|
|
* `GetCurrentMessageType` to determine the type of message that's being reported.
|
|
*/
|
|
virtual void DisplayText(const char*);
|
|
virtual void DisplayErrorText(const char*);
|
|
virtual void DisplayWarningText(const char*);
|
|
virtual void DisplayGenericWarningText(const char*);
|
|
virtual void DisplayDebugText(const char*);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* If PromptUser is set to true then each time a line of text
|
|
* is displayed, the user is asked if they want to keep getting
|
|
* messages.
|
|
*
|
|
* Note that PromptUser has not effect of messages displayed by directly
|
|
* calling `DisplayText`. The prompt is never shown for such messages.
|
|
*
|
|
*/
|
|
vtkBooleanMacro(PromptUser, bool);
|
|
vtkSetMacro(PromptUser, bool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Historically (VTK 8.1 and earlier), when printing messages to terminals,
|
|
* vtkOutputWindow would always post messages to `cerr`. Setting this to true
|
|
* restores that incorrect behavior. When false (default),
|
|
* vtkOutputWindow uses `cerr` for debug, error and warning messages, and
|
|
* `cout` for text messages.
|
|
*
|
|
* @deprecated use `SetDisplayModeToAlwaysStdErr` instead.
|
|
*/
|
|
VTK_LEGACY(void SetUseStdErrorForAllMessages(bool));
|
|
VTK_LEGACY(bool GetUseStdErrorForAllMessages());
|
|
VTK_LEGACY(void UseStdErrorForAllMessagesOn());
|
|
VTK_LEGACY(void UseStdErrorForAllMessagesOff());
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Flag indicates how the vtkOutputWindow handles displaying of text to
|
|
* `stderr` / `stdout`. Default is `DEFAULT` except in
|
|
* `vtkWin32OutputWindow` where on non dashboard runs, the default is
|
|
* `NEVER`.
|
|
*
|
|
* `NEVER` indicates that the messages should never be forwarded to the
|
|
* standard output/error streams.
|
|
*
|
|
* `ALWAYS` will result in error/warning/debug messages being posted to the
|
|
* standard error stream, while text messages to standard output stream.
|
|
*
|
|
* `ALWAYS_STDERR` will result in all messages being posted to the standard
|
|
* error stream (this was default behavior in VTK 8.1 and earlier).
|
|
*
|
|
* `DEFAULT` is similar to `ALWAYS` except when logging is enabled. If
|
|
* logging is enabled, messages posted to the output window using VTK error/warning macros such as
|
|
* `vtkErrorMacro`, `vtkWarningMacro` etc. will not posted on any of the output streams. This is
|
|
* done to avoid duplicate messages on these streams since these macros also result in add items
|
|
* to the log.
|
|
*
|
|
* @note vtkStringOutputWindow does not result this flag as is never forwards
|
|
* any text to the output streams.
|
|
*/
|
|
enum DisplayModes
|
|
{
|
|
DEFAULT = -1,
|
|
NEVER = 0,
|
|
ALWAYS = 1,
|
|
ALWAYS_STDERR = 2
|
|
};
|
|
vtkSetClampMacro(DisplayMode, int, DEFAULT, ALWAYS_STDERR);
|
|
vtkGetMacro(DisplayMode, int);
|
|
void SetDisplayModeToDefault() { this->SetDisplayMode(vtkOutputWindow::DEFAULT); }
|
|
void SetDisplayModeToNever() { this->SetDisplayMode(vtkOutputWindow::NEVER); }
|
|
void SetDisplayModeToAlways() { this->SetDisplayMode(vtkOutputWindow::ALWAYS); }
|
|
void SetDisplayModeToAlwaysStdErr() { this->SetDisplayMode(vtkOutputWindow::ALWAYS_STDERR); }
|
|
//@}
|
|
protected:
|
|
vtkOutputWindow();
|
|
~vtkOutputWindow() override;
|
|
|
|
enum MessageTypes
|
|
{
|
|
MESSAGE_TYPE_TEXT,
|
|
MESSAGE_TYPE_ERROR,
|
|
MESSAGE_TYPE_WARNING,
|
|
MESSAGE_TYPE_GENERIC_WARNING,
|
|
MESSAGE_TYPE_DEBUG
|
|
};
|
|
|
|
/**
|
|
* Returns the current message type. Useful in subclasses that simply want to
|
|
* override `DisplayText` and also know what type of message is being
|
|
* processed.
|
|
*/
|
|
vtkGetMacro(CurrentMessageType, MessageTypes);
|
|
|
|
enum class StreamType
|
|
{
|
|
Null,
|
|
StdOutput,
|
|
StdError,
|
|
};
|
|
|
|
/**
|
|
* Returns the standard output stream to post the message of the given type
|
|
* on.
|
|
*/
|
|
virtual StreamType GetDisplayStream(MessageTypes msgType) const;
|
|
|
|
bool PromptUser;
|
|
|
|
private:
|
|
static vtkOutputWindow* Instance;
|
|
MessageTypes CurrentMessageType;
|
|
int DisplayMode;
|
|
int InStandardMacros; // used to suppress display to output streams from standard macros when
|
|
// logging is enabled.
|
|
|
|
friend class vtkOutputWindowPrivateAccessor;
|
|
|
|
private:
|
|
vtkOutputWindow(const vtkOutputWindow&) = delete;
|
|
void operator=(const vtkOutputWindow&) = delete;
|
|
};
|
|
|
|
// Uses schwartz counter idiom for singleton management
|
|
static vtkOutputWindowCleanup vtkOutputWindowCleanupInstance;
|
|
|
|
#endif
|