1 /*=========================================================================
2  *
3  *  Copyright Insight Software Consortium
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *         http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  *=========================================================================*/
18 /*=========================================================================
19  *
20  *  Portions of this file are subject to the VTK Toolkit Version 3 copyright.
21  *
22  *  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
23  *
24  *  For complete copyright, license and disclaimer of warranty information
25  *  please refer to the NOTICE file at the top of the ITK source tree.
26  *
27  *=========================================================================*/
28 #ifndef itkLoggerOutput_h
29 #define itkLoggerOutput_h
30 
31 #include "itkOutputWindow.h"
32 #include "itkLogger.h"
33 
34 namespace itk
35 {
36 /** \class LoggerOutput
37  * \brief Used for overriding itk::OutputWindow to redirect
38  *        messages to itk::Logger.
39  *
40  * Text messages that the system should display to the user are sent to
41  * this object (or subclasses of this object).
42  *
43  *
44  * \author Hee-Su Kim, Compute Science Dept. Kyungpook National University,
45  *                     ISIS Center, Georgetown University.
46  *
47  * \ingroup OSSystemObjects
48  * \ingroup ITKCommon
49  */
50 class ITKCommon_EXPORT LoggerOutput:public OutputWindow
51 {
52 public:
53   /** Standard class type aliases. */
54   using Self = LoggerOutput;
55   using Superclass = OutputWindow;
56   using Pointer = SmartPointer< Self >;
57   using ConstPointer = SmartPointer< const Self >;
58 
59   /** Run-time type information (and related methods). */
60   itkTypeMacro(LoggerOutput, OutputWindow);
61 
62   itkNewMacro(LoggerOutput);
63 
64   using LoggerType = Logger *;
65 
66   /** Send a string to display. */
67   void DisplayText(const char *t) override;
68 
69   /** Send a string as an error message to display.
70    * The default implementation calls DisplayText() but subclasses
71    * could present this message differently. */
72   void DisplayErrorText(const char *t) override;
73 
74   /** Send a string as a warningmessage to display.
75    * The default implementation calls DisplayText() but subclasses
76    * could present this message differently. */
77   void DisplayWarningText(const char *t) override;
78 
79   /** Send a string as a message to display.
80    * The default implementation calls DisplayText() but subclasses
81    * could present this message differently. */
82   void DisplayGenericOutputText(const char *t) override;
83 
84   /** Send a string as a debug message to display.
85    * The default implementation calls DisplayText() but subclasses
86    * could present this message differently. */
87   void DisplayDebugText(const char *t) override;
88 
89   itkSetMacro(Logger, LoggerType);
90 
91   itkGetConstMacro(Logger, LoggerType);
92 
OverrideITKWindow()93   virtual void OverrideITKWindow()
94   {
95     itk::OutputWindow::SetInstance(this);
96   }
97 
98 protected:
LoggerOutput()99   LoggerOutput() {}
100   ~LoggerOutput() override = default;
101   void PrintSelf(std::ostream & os, Indent indent) const override;
102 
103 private:
104   Logger *m_Logger{nullptr};
105 };
106 } // end namespace itk
107 
108 #endif  // itkLoggerOutput_h
109