/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkMedicalImageReader2.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   vtkMedicalImageReader2
 * @brief   vtkImageReader2 with medical meta data.
 *
 * vtkMedicalImageReader2 is a parent class for medical image readers.
 * It provides a place to store patient information that may be stored
 * in the image header.
 * @sa
 * vtkImageReader2 vtkGESignaReader vtkMedicalImageProperties
 */

#ifndef vtkMedicalImageReader2_h
#define vtkMedicalImageReader2_h

#include "vtkIOImageModule.h" // For export macro
#include "vtkImageReader2.h"

class vtkMedicalImageProperties;

class VTKIOIMAGE_EXPORT vtkMedicalImageReader2 : public vtkImageReader2
{
public:
  static vtkMedicalImageReader2* New();
  vtkTypeMacro(vtkMedicalImageReader2, vtkImageReader2);
  void PrintSelf(ostream& os, vtkIndent indent) override;

  //@{
  /**
   * Get the medical image properties object
   */
  vtkGetObjectMacro(MedicalImageProperties, vtkMedicalImageProperties);
  //@}

  //@{
  /**
   * For backward compatibility, propagate calls to the MedicalImageProperties
   * object.
   */
  virtual void SetPatientName(const char*);
  virtual const char* GetPatientName();
  virtual void SetPatientID(const char*);
  virtual const char* GetPatientID();
  virtual void SetDate(const char*);
  virtual const char* GetDate();
  virtual void SetSeries(const char*);
  virtual const char* GetSeries();
  virtual void SetStudy(const char*);
  virtual const char* GetStudy();
  virtual void SetImageNumber(const char*);
  virtual const char* GetImageNumber();
  virtual void SetModality(const char*);
  virtual const char* GetModality();
  //@}

protected:
  vtkMedicalImageReader2();
  ~vtkMedicalImageReader2() override;

  /**
   * Medical Image properties
   */
  vtkMedicalImageProperties* MedicalImageProperties;

private:
  vtkMedicalImageReader2(const vtkMedicalImageReader2&) = delete;
  void operator=(const vtkMedicalImageReader2&) = delete;
};

#endif
