WRAP_CLASS("itk::GDCMImageIO")

  SET(MANAGED_WRAPPER_TEMPLATE ${MANAGED_ITK_SOURCE_COMMON_PATH}/itkManagedImageIOBase_WRAPPER.cxx.in)
  SET(WRAP_TEMPLATE_LIST )

  BEGIN_MANAGED_PROPERTY("RescaleSlope" GET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get the Rescale Slope DICOM value.")
    SET(MANAGED_PROPERTY_TYPE      "double")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetRescaleSlope();")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("RescaleIntercept" GET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get the Rescale Intercept DICOM value.")
    SET(MANAGED_PROPERTY_TYPE      "double")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetRescaleIntercept();")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("UIDPrefix" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the DICOM UID prefix. By default this is the ITK root id. This default can be overriden if the exam is for example part of an existing study.")
    SET(MANAGED_PROPERTY_TYPE      "String^")
    SET(MANAGED_PROPERTY_GET_BODY  "return gcnew String( m_PointerToNative->GetUIDPrefix() );")
    SET(MANAGED_PROPERTY_SET_BODY  "std::string stdvalue; ManagedTypes::ToNativeString( value, stdvalue ); m_PointerToNative->SetUIDPrefix( stdvalue.c_str() );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("StudyInstanceUID" GET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get the DICOM Study Instance UID.")
    SET(MANAGED_PROPERTY_TYPE      "String^")
    SET(MANAGED_PROPERTY_GET_BODY  "return gcnew String( m_PointerToNative->GetStudyInstanceUID() );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("SeriesInstanceUID" GET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get the DICOM Series Instance UID.")
    SET(MANAGED_PROPERTY_TYPE      "String^")
    SET(MANAGED_PROPERTY_GET_BODY  "return gcnew String( m_PointerToNative->GetSeriesInstanceUID() );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("FrameOfReferenceInstanceUID" GET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get the DICOM Frame Of Reference Instance UID.")
    SET(MANAGED_PROPERTY_TYPE      "String^")
    SET(MANAGED_PROPERTY_GET_BODY  "return gcnew String( m_PointerToNative->GetFrameOfReferenceInstanceUID() );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("KeepOriginalUID" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set if the original DICOM UID of the input files should be preserved.")
    SET(MANAGED_PROPERTY_TYPE      "bool")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetKeepOriginalUID();")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetKeepOriginalUID( value );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("LoadSequences" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set if sequences in the DICOM file should be parsed. Defaults to the value of LoadSequencesDefault. Loading DICOM files is faster when sequences are not needed.")
    SET(MANAGED_PROPERTY_TYPE      "bool")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetLoadSequences();")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetLoadSequences( value );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_PROPERTY("LoadPrivateTags" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set if Parse any private tags in the DICOM file. Defaults to the value of LoadPrivateTagsDefault. Loading DICOM files is faster when private tags are not needed.")
    SET(MANAGED_PROPERTY_TYPE      "bool")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetLoadPrivateTags();")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetLoadPrivateTags( value );")
  END_MANAGED_PROPERTY()

  SET(body "")
  SET(body "${body}///<summary>A managed enumerated type for the compression type.</summary>\n")
  SET(body "${body}\tpublic enum class CompressionTypeEnum\n")
  SET(body "${body}\t{\n")
  SET(body "${body}\t\tJPEG = 0,\n")
  SET(body "${body}\t\tJPEG2000\n")
  SET(body "${body}\t};\n")
  SET(MANAGED_EXTRA_TYPE_CONFIG ${body})

  BEGIN_MANAGED_PROPERTY("CompressionType" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the compression type, such as JPEG2000.")
    SET(MANAGED_PROPERTY_TYPE      "CompressionTypeEnum")
    SET(MANAGED_PROPERTY_GET_BODY  "return (CompressionTypeEnum)m_PointerToNative->GetCompressionType();")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetCompressionType( (NativeType::TCompressionType)value );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_METHOD_NO_INTERFACE("GetValueFromTag")
    SET(MANAGED_METHOD_SUMMARY         "Method to retrieve an arbitrary DICOM value based on a DICOM Tag (eg '0123|4567'). WARNING: You need to use the lower case for hex 0x[a-f], for instance: '0020|000d' instead of '0020|000D' (the latter won't work).")
    SET(MANAGED_METHOD_RETURN_TYPE     "bool")
    SET(MANAGED_METHOD_PARAMS          "String^ tag, [System::Runtime::InteropServices::Out] String^% value")
    SET(MANAGED_METHOD_TYPE_BODY       "std::string stdtag; std::string stdvalue; ManagedTypes::ToNativeString( tag, stdtag ); ManagedTypes::ToNativeString( value, stdvalue ); bool result = m_PointerToNative->GetValueFromTag( stdtag, stdvalue ); value = gcnew String( stdvalue.c_str() ); return result;")
  END_MANAGED_METHOD_NO_INTERFACE()

  BEGIN_MANAGED_METHOD_NO_INTERFACE("GetLabelFromTag")
    SET(MANAGED_METHOD_SUMMARY         "Method for consulting the DICOM dictionary and recovering the text description of a field using its numeric tag represented as a string. If the tagkey is not found in the dictionary then this static method return false and the value 'Unknown' in the labelId. If the tagkey is found then this static method returns true and the actual string descriptor of the tagkey is returned in the variable labelId.")
    SET(MANAGED_METHOD_RETURN_TYPE     "bool")
    SET(MANAGED_METHOD_PARAMS          "String^ tag, [System::Runtime::InteropServices::Out] String^% labelId")
    SET(MANAGED_METHOD_TYPE_BODY       "std::string stdtag; std::string stdlabelid; ManagedTypes::ToNativeString( tag, stdtag ); ManagedTypes::ToNativeString( labelId, stdlabelid ); bool result = m_PointerToNative->GetLabelFromTag( stdtag, stdlabelid ); labelId = gcnew String( stdlabelid.c_str() ); return result;")
  END_MANAGED_METHOD_NO_INTERFACE()

END_WRAP_CLASS()
