/*********************************************************/
//	NkILSampleDoc.h
//		Header file of ImageSDKLibrary Sample's Document class.
//
//	Copyright(c) 2007, Nikon Corporation - All rights reserved.
/*********************************************************/


#pragma once
#include "NkImageLibCtrl.h"
// for STL
#include <vector>
#define WB_NEED_RANGE_NUM	8
#define BYTEPIXEL			3
/*********************************************************/
//	Structures.
/*********************************************************/
///////////////////////////////////////////////////////////
//	ILSample_OutputProfile
//
typedef struct ILSample_OutputProfile
{
	unsigned long	ulRenderingIntent;	// eNkflRenderingIntent
	CString			strProfilePath;		// filepath of Profile
} ILSample_OutputProfile;

///////////////////////////////////////////////////////////
//	ILSample_CommonGroup
//
typedef struct ILSample_CommonGroup
{
	double			dbExpComp;
	NkIL_WBInfo		StrWBInfo;
	long			lTint;				// -12 ` 12
	bool			bIsNR;				// flag of apply NR
	unsigned long	ulNRType;			// eNkflNR
	bool			bIsADLight;			// flag of apply ADL
	unsigned long	ulADLight;			// eNkflActiveDLighting
}ILSample_CommonGroup;

///////////////////////////////////////////////////////////
//	ILSample_ColorModeGroup
//
typedef struct ILSample_ColorModeGroup
{
	bool			bIsColorMode;		// flag of apply ColorMode
	unsigned long	ulColorMode;		// eNkflColorMode
	unsigned long	ulSharpness;		// eNkflSharpness
	unsigned long	ulToneComp;			// eNkflToneComp
	long			lHueAdj;			// -9, -6, -3, 0, 3, 6, 9
	unsigned long	ulSaturation;		// eNkflSaturation
	unsigned long	ulFilterEffect;		// eNkflFilterEffect
}ILSample_ColorModeGroup;

///////////////////////////////////////////////////////////
//	ILSample_WBRange
//
typedef struct ILSample_WBRange
{
	unsigned long	ulWBParam[WB_NEED_RANGE_NUM];		//
	unsigned long	ulDefault[WB_NEED_RANGE_NUM];		// default of colortemparature
	unsigned long	ulMinColorTemp[WB_NEED_RANGE_NUM];		
	unsigned long	ulMaxColorTemp[WB_NEED_RANGE_NUM];
}ILSample_WBRange;


#ifdef PICTCTRL
typedef NkflRawDevelopment_RawParameterSet	STRRAWPARAMSET;
#endif
typedef std::vector<NkIL_ImageInfo>			VECTTHUMBINFO;
typedef std::vector< CString >				VECTCAMERAINFO;
/*********************************************************/
//	Enumlation values.
/*********************************************************/
///////////////////////////////////////////////////////////
//	eNkflSetting1
//
enum eNkflSetting1
{
	kILSample_Group_ImageInfo		= 0,		// imageinfo, rotate/flip
	kILSample_Group_RawQuality,		
	kILSample_Group_OutputProfile				// rendering, profile path
};

///////////////////////////////////////////////////////////
//	eNkflSetting2
//
enum eNkflSetting2
{
	kILSample_Group_ParamSet		= 0,
	kILSample_Group_Common,
	kILSample_Group_ColorMode,
	kILSample_Group_PictureCtrl,
	kILSample_Apply_PictureCtrl,
	kILSample_WB_RangeInfo
};

class CNkILSampleDoc : public CDocument
{
// Overrides
public:
	virtual BOOL	OnNewDocument();
	virtual BOOL	OnOpenDocument( LPCTSTR lpszPathName );	
	virtual void	DeleteContents();

	virtual ~CNkILSampleDoc();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif	

	// for Information Didalog
	bool			GetImageInfo( unsigned long *pulFormat, NkIL_ImageInfo* pImageInfo, NkIL_ImageInfo* pOrgImageInfo );
	bool			GetThumbInfo( VECTTHUMBINFO* pThumbInfo );
	unsigned long	GetCameraInfo( VECTCAMERAINFO* pCameraInfo);

	// for Settings Dialog
	bool			GetSettings1Info( NkIL_ImageInfo* pImageInfo, unsigned long* pulRawQuality, ILSample_OutputProfile* pOutputProfile );
	bool			SetSettings1Info( unsigned long ulImageInfo, void* pData );
	bool			GetSettings2Info( unsigned long ulRawDevelopment, void *pData );
	bool			SetSettings2Info( unsigned long ulRawDevelopment, void *pData );	
	void			InitSet1DlgParam();

	unsigned char*	GetImage();		
	bool			GetWBTempInfo( ILSample_WBRange* pStrWBTemp );
	bool			IsOpenedFile();
	unsigned long	GetFormat(){ return m_ulFormat;}
	bool			IsApplyPictCtrl();
	
protected: 
	CNkILSampleDoc();
	DECLARE_DYNCREATE(CNkILSampleDoc)

	bool			LoadImageFile( const char* pFilePath );
	bool			ReloadImage();
	void			DisplayImage( bool bChangeRatio  = true );	
	bool			ReDisplayImage();
	DECLARE_MESSAGE_MAP()	

	CImageLibCtrl		m_ILCtrl;	
	unsigned long		m_ulUserOrientation;	
	unsigned long		m_ulFormat;	
	NkIL_ImageParam		m_StrImage;	
	CSize				m_SetSize;
};


