/*********************************************************/
//	MainFrame.cpp
//		Source File for ImageSDKLibrary Sample's MainFrame class.
//
//		This file defines the basic interface of Nikon File Library.
//
//		Copyright(c) 1999-2007, Nikon Corporation - All rights reserved.
/*********************************************************/
#include "stdafx.h"
#include "NkILSample.h"

#include "MainFrm.h"
#include "NkILSampleView.h"
#include "NkILSamplePreferenceDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define INITIAL_FRM_WIDTH		800			// initial window width, use setting registry doesn't exist 
#define INITIAL_FRM_HEIGHT		600			// initial window height, use setting registry doesn't exist 
#define INITIAL_APP_POSITION	100			// initial APP position, when APP start
#define MAX_PATH				260			// max size of file path
#define BOUNDARY_10				10
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	ON_WM_CREATE()
	ON_WM_DROPFILES()
	ON_WM_CLOSE()	
	ON_WM_MENUSELECT()	
	ON_COMMAND( ID_FILE_OPEN, OnFileOpen )		
	ON_COMMAND( ID_VIEW_PREFERENCE, OnPreferenceDlg )
	ON_COMMAND( ID_VIEW_SETTINGS1PANE, OnShowSet1Pane )
	ON_COMMAND( ID_VIEW_INFOPANE, OnShowInfoPane )
	ON_COMMAND( ID_VIEW_SETTINGS2PANE, OnShowSet2Pane )
	ON_MESSAGE( MSG_WM_DELETE_SET1DLG, OnDeleteSettings1Dialog )	
	ON_MESSAGE( MSG_WM_APPLY_SET1DLG, OnGetSet1DlgData )	
	ON_MESSAGE( MSG_WM_DELETE_SET2DLG, OnDeleteSettings2Dialog )	
	ON_MESSAGE( MSG_WM_APPLY_SET2DLG, OnGetSet2DlgData )
	ON_MESSAGE( MSG_WM_DELETE_INFODLG, OnDeleteImageInfoDialog )
	ON_UPDATE_COMMAND_UI( ID_VIEW_SETTINGS1PANE, OnUpdateSet1Pane )
	ON_UPDATE_COMMAND_UI( ID_VIEW_SETTINGS2PANE, OnUpdateSet2Pane )
	ON_UPDATE_COMMAND_UI( ID_VIEW_INFOPANE, OnUpdateInfoPane )

END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
};

// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{	
	m_pSet1Dlg		= NULL;
	m_pSet2Dlg		= NULL;	
	m_pInfoDlg		= NULL;
	m_pDoc			= NULL;	

	m_Set1Rect.SetRect( 0, 0, 0, 0 );
}

CMainFrame::~CMainFrame()
{	
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if (!m_wndStatusBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM | CBRS_NOALIGN ) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;								 // fail to create
	}		

	/////////////////////////////////////////////////
	// get initial frame size from registry 
	/////////////////////////////////////////////////

	HKEY hkResult;								// hundle of registry key
	// open registory
	CString strSubKey;
	strSubKey.LoadString( IDS_REGPREFERENCE );	// get address of subkey from string table
	long lOpenResult = RegOpenKeyEx( HKEY_CURRENT_USER, strSubKey, 0, KEY_ALL_ACCESS, &hkResult );
	long lFrameWidth = 0, lFrameHeight = 0;
	CString strTemp;
	// check registry is opened
	if( ERROR_SUCCESS == lOpenResult )
	{
		// registry opened		
		strTemp.LoadString( IDS_PREFERENCE_WIDTH );	// get string for width
		// access registry and get size info
		DWORD dwSize = sizeof(long);			// size of requested parameter
		if( ERROR_SUCCESS != RegQueryValueEx( hkResult, strTemp, 0, NULL, (LPBYTE)&lFrameWidth, (LPDWORD)&dwSize ))
		{
			lFrameWidth = 0;					// failed to get value		
		}
		strTemp.LoadString( IDS_PREFERENCE_HEIGHT );	// get string for height
		if( ERROR_SUCCESS != RegQueryValueEx( hkResult, strTemp, 0, NULL, (LPBYTE)&lFrameHeight, (LPDWORD)&dwSize ))
		{
			lFrameHeight = 0;					// failed to get value			
		}
		RegCloseKey( hkResult );				// close key
	}

	// if registry doesn't exist or value got is irigal, set default value 
	if( ERROR_SUCCESS != lOpenResult || lFrameWidth <= 0 || lFrameHeight <= 0 )
	{		
		lFrameWidth		= INITIAL_FRM_WIDTH;
		lFrameHeight	= INITIAL_FRM_HEIGHT;
	}

	// set window position and size
	MoveWindow( INITIAL_APP_POSITION, INITIAL_APP_POSITION, lFrameWidth, lFrameHeight ); 

	// set initial title
	strTemp.LoadString(IDS_LIBRARYNAME);
	SetWindowText(strTemp);
	
	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	cs.style ^= FWS_ADDTOTITLE;					// delete "Untitled"
	cs.dwExStyle |= WS_EX_ACCEPTFILES;			// permit drop file

	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;	

	return TRUE;
}


// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

///////////////////////////////////////////////////////////////////////
// OnFileOpen
// open file selected from filedialog
void CMainFrame::OnFileOpen()
{	
	// create filedialog indicated extension
	CFileDialog filedialog( true, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,		
		"Image Files (*.jpg, *.tif, *.nef)|*.jpg; *.tif; *.nef||",NULL, 0);
	// show filedialog and select image file
	if( IDOK == filedialog.DoModal() )
	{			
		// open image file
		if( !OpenFile( filedialog.GetPathName() ) )
		{
			return;
		}		
	}	
}
// OnFileOpen
///////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////
// OnDropFile
// open file dropped to application
void CMainFrame::OnDropFiles(HDROP hDropInfo)
{	
	// get file path 
	char* pFilePath[MAX_PATH] = {0};
	DragQueryFile( hDropInfo, 0, (LPSTR)pFilePath, MAX_PATH );
	CString strFilePath = (char*)pFilePath;
	// load image file
	if( !OpenFile( strFilePath ) )
	{
		return;
	}		
	
	CFrameWnd::OnDropFiles( hDropInfo );
}
// OnDropFile
///////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////
// OnClose
// end process
void CMainFrame::OnClose()
{
	/////////////////////////////////////////////////
	// set current frame size to registry 
	/////////////////////////////////////////////////

	HKEY hkResult;										// hundle of registry key	
	CString strSubKey;
	strSubKey.LoadString( IDS_REGPREFERENCE );			// get address of subkey from string table

	// open registory. if not exist, create new	
	long lOpenResult = RegCreateKeyEx(HKEY_CURRENT_USER, strSubKey, 0, "", REG_OPTION_NON_VOLATILE,
										KEY_ALL_ACCESS, NULL, &hkResult, NULL);	

	// check registry is opened or created
	if( ERROR_SUCCESS == lOpenResult )
	{
		// get current frame size and  maximize
		WINDOWPLACEMENT wndpl;
		GetWindowPlacement( &wndpl );
		long lFrameWidth	= wndpl.rcNormalPosition.right - wndpl.rcNormalPosition.left;
		long lFrameHeight	= wndpl.rcNormalPosition.bottom - wndpl.rcNormalPosition.top;
		// check maximize or not
		long bMaximize = (wndpl.showCmd & IDS_PREFERENCE_MAXIMIZE) ? TRUE : FALSE;
		
		CString strTemp;
		strTemp.LoadString( IDS_PREFERENCE_WIDTH );		// get string for width
		// access registry and get size info
		DWORD dwSize = sizeof(long);					// size of requested parameter
		RegSetValueEx( hkResult, strTemp, 0, REG_DWORD, (CONST BYTE*)&lFrameWidth, dwSize );
		strTemp.LoadString( IDS_PREFERENCE_HEIGHT );	// get string for height
		RegSetValueEx( hkResult, strTemp, 0, REG_DWORD, (CONST BYTE*)&lFrameHeight, dwSize );

		// set flag of maxmize
		strTemp.LoadString( IDS_PREFERENCE_MAXIMIZE );		// get string for flag of maximize
		RegSetValueEx( hkResult, strTemp, 0, REG_DWORD, (CONST BYTE*)&bMaximize, dwSize );		

		RegCloseKey( hkResult );						// close registry
	}	
	DeleteAllDlg();										// delete showing dialog 
	CFrameWnd::OnClose();
}
// OnClose
///////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////
// OnMenuSelect
void CMainFrame::OnMenuSelect( UINT nItemID, UINT nFlags, HMENU hSysMenu )
{	
	ShowStatusBar();		// rewrite statusbar 
}
// OnMenuSelect
///////////////////////////////////////////////////////////////////////

//====================================================================
// function name		：OnShowSet1Pane
// function abstract	：create and show Settings1Dialog
// parameter			：none
// return value			：none
//====================================================================
void CMainFrame::OnShowSet1Pane()
{
	// put up now, no create 
	if( NULL == m_pSet1Dlg )
	{
		// create dialog class object
		if( m_pSet1Dlg = new CNkILSampleSet1Dlg( this ))
		{			
			SetSet1DlgInfo();		// set data to dialog
			// show daialog
			m_pSet1Dlg->Create(m_pSet1Dlg->IDD);
			
			// get dialogsize only once
			if( 0 == m_Set1Rect.Width() )
			{
				CRect recDlg;
				m_pSet1Dlg->GetWindowRect( recDlg );
				m_Set1Rect.right	= recDlg.Width();
				m_Set1Rect.bottom	= recDlg.Height();
			}
			m_pSet1Dlg->MoveWindow( m_Set1Rect );
			m_pSet1Dlg->ShowWindow( SW_SHOW );	// display wiondow						
		}
		else
		{
			return;
		}
	}
	else
	{
		OnDeleteSettings1Dialog( 0, 0 );		// delete dialog
	}
}
// OnShowSet1Pane
///////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////
// OnDeleteSettings1Dialog
// delete settings1 dialog
LRESULT CMainFrame::OnDeleteSettings1Dialog(UINT wParam, LONG lParam)
{
	if( NULL != m_pSet1Dlg )
	{
		// delete CNkILSampleSet1Dlg object
		m_pSet1Dlg->DestroyWindow();			
		delete m_pSet1Dlg;
		m_pSet1Dlg = NULL;
	}
	return 0;
}
// OnDeleteSettings1Dialog
///////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////
// OnUpdateSet1Pane
// update settings1pane control at menu
void CMainFrame::OnUpdateSet1Pane(CCmdUI *pCmdUI)
{
	// if CNkILSampleDoc isn't exist, disable command
	if( !m_pDoc->IsOpenedFile() )
	{
		pCmdUI->Enable(false);
		return;
	}
	else
	{
		pCmdUI->Enable( true );
	}
	// if dialog doesn't exist, unset check 
	bool bEnable = ( m_pSet1Dlg == NULL ) ? false : true;
	pCmdUI->SetCheck( bEnable );				  	 
}
// OnUpdateSet1Pane
///////////////////////////////////////////////////////////////////////

//====================================================================
// function name		：OnGetSet1DlgData
// function abstract	：get data ImageInfoDialog and set document class
// parameter			：wParam	enum value for check kind of struct
//						  lParam	pointer of each data struct
// return value			：none
//====================================================================
LRESULT CMainFrame::OnGetSet1DlgData(UINT wParam, LONG lParam)
{		
	// set value of dialog and redisplay image
	m_pDoc->SetSettings1Info( (unsigned long)wParam, (void*)lParam );

	// get changed image info from CNkILSampleDoc
	if( !SetSet1DlgInfo())
	{
		delete m_pSet1Dlg;
		m_pSet1Dlg = NULL;
		return 0;
	}
	
	m_pSet1Dlg->InitSet1DlgStatus();		// update dialog status	
	ShowStatusBar();						// update statusbar

	if( NULL != m_pInfoDlg )
	{
		SetInfoDlgInfo();					// set data to dialog
		m_pInfoDlg->UpdateImageInfoPage();	// update all info of dialog
	}
	return 0;
}
// OnGetSet1DlgData
///////////////////////////////////////////////////////////////////////

//====================================================================
// function name		：OnShowSet2Pane
// function abstract	：create and show Settings2Dialog
// parameter			：none
// return value			：none
//====================================================================
void CMainFrame::OnShowSet2Pane()
{
	// if displaying now, no create 
	if( NULL == m_pSet2Dlg )
	{
		// create dialog class object
		if( m_pSet2Dlg = new CNkILSampleSet2Dlg( this ))
		{		
			// set data to dialog
			if( !SetSet2DlgInfo())
			{
				delete m_pSet2Dlg;
				m_pSet2Dlg = NULL;
				return;
			}
			// get data and set to Settings2Dialog
			ILSample_WBRange			StrWBRange  = {0};
			if( !m_pDoc->GetWBTempInfo( &StrWBRange ))
			{
				delete m_pSet2Dlg;
				m_pSet2Dlg = NULL;
				return;
			}
			if( !m_pSet2Dlg->InitParameter( kILSample_WB_RangeInfo, &StrWBRange ))
			{
				delete m_pSet2Dlg;
				m_pSet2Dlg = NULL;
				return;
			} 
			bool bIsApply = m_pDoc->IsApplyPictCtrl();			// true : apply picturecontrol, false : apply colormode
			if( !m_pSet2Dlg->InitParameter( kILSample_Apply_PictureCtrl, &bIsApply ))
			{
				delete m_pSet2Dlg;
				m_pSet2Dlg = NULL;
				return;
			}	
			
			// show daialog
			m_pSet2Dlg->Create( m_pSet2Dlg->IDD );

			// get dialog size
			CRect recDlg;
			m_pSet2Dlg->GetWindowRect( recDlg );
			unsigned long ulWidth	= recDlg.Width();
			unsigned long ulHeight	= recDlg.Height();
			// get display size
			CDC* pDC = GetDC();
			int nDispWidth	= pDC->GetDeviceCaps( HORZRES );			
			// move dialog to right edge
			recDlg.top		= 0;
			recDlg.bottom	= ulHeight;
			recDlg.left		= nDispWidth - ulWidth;
			recDlg.right	= nDispWidth;
			m_pSet2Dlg->MoveWindow( recDlg );

			m_pSet2Dlg->ShowWindow(SW_SHOW);	// display dialog
		}
		else
		{
			return;
		}
	}
	else
	{
		OnDeleteSettings2Dialog( 0, 0 );		// delete dialog
	}
}
// OnShowSet2Pane
///////////////////////////////////////////////////////////////////////

//====================================================================
// function name		：OnDeleteSettings2Dialog
// function abstract	：delete RawAdjustDialog
// parameter			：wParam	parameter send with message
//						  lParam	parameter send with message
// return value			：result of message processing
//====================================================================
LRESULT CMainFrame::OnDeleteSettings2Dialog(UINT wParam, LONG lParam)
{
	if( NULL != m_pSet2Dlg )
	{
		// delete CNkILSampleSet2Dlg object
		m_pSet2Dlg->DestroyWindow();			
		delete m_pSet2Dlg;						
		m_pSet2Dlg = NULL;
	}
	return 0;
}
// OnDeleteSettings2Dialog
///////////////////////////////////////////////////////////////////////

//====================================================================
// function name		：OnUpdateSet2Pane
// function abstract	：switch check status
// parameter			：pCmdUI	pointer of CCmdUI class
// return value			：none
//====================================================================
void CMainFrame::OnUpdateSet2Pane(CCmdUI *pCmdUI)
{
	// if CNkILSampleDoc isn't exist, disable control
	if( !m_pDoc->IsOpenedFile() )
	{
		pCmdUI->Enable(false);
		return;
	}

	// if image is only nef, enable control
	bool bEnable = ( kNkfl_FileFormat_NEF_RAW == GetFormat() || kNkfl_FileFormat_NEF_COMP == GetFormat() ) ? true : false;
	pCmdUI->Enable(bEnable);

	// if dialog doesn't exist, unset check
	bEnable = ( m_pSet2Dlg == NULL ) ? false : true;	
	pCmdUI->SetCheck(bEnable);
}
// OnUpdateSet2Pane
///////////////////////////////////////////////////////////////////////

//====================================================================
// function name		：OnGetSet2DlgData
// function abstract	：get data set RawAdjustDialog 
// parameter			：wParam	enum value for check kind of struct
//						  lParam	pointer of each data struct
// return value			：none
//====================================================================
LRESULT CMainFrame::OnGetSet2DlgData(UINT wParam, LONG lParam)
{	
	m_pDoc->SetSettings2Info( (unsigned long)wParam, (void*)lParam );
	
	SetSet2DlgInfo();						// get and set raw adjust info to dialog	
	m_pSet2Dlg->InitSet2DlgStatus();		// update setting2dialog status
	ShowStatusBar();						// update statusbar

	// update setting1 dialog if showing it
	if( NULL != m_pSet1Dlg )
	{
		SetSet1DlgInfo();					// set data to dialog
		m_pSet1Dlg->InitSet1DlgStatus();	// update dialog status	
	}
	if( NULL != m_pInfoDlg )
	{
		SetInfoDlgInfo();					// set data to dialog
		m_pInfoDlg->UpdateImageInfoPage();	// update all info of dialog
	}
	return 0;
}
// OnGetSet2DlgData
///////////////////////////////////////////////////////////////////////

//====================================================================
// function name		：OnShowInfoPane
// function abstract	：create and show propertysheet
// parameter			：none
// return value			：none
//====================================================================
void CMainFrame::OnShowInfoPane()
{
	// put up now, no create 
	if( NULL == m_pInfoDlg )
	{
		// get string for display at property sheet
		CString strTitle;
		strTitle.LoadString( IDS_PROPERTY_TITLE );
		// create dialog class object
		if( m_pInfoDlg = new CNkILSamplePropertySheet( IDS_PROPERTY_TITLE, this ))
		{
			// set info to imageinfo dialog
			if( SetInfoDlgInfo() )
			{					
				m_pInfoDlg->Create( this );		// show daialog
				// get dialog size
				CRect recDlg;
				m_pInfoDlg->GetWindowRect( recDlg );
				unsigned long ulWidth	= recDlg.Width();
				unsigned long ulHeight	= recDlg.Height();
				// diplay dialog under setting1 dialog
				recDlg.left		= 0;
				recDlg.right	= ulWidth;
				recDlg.top		= m_Set1Rect.bottom;
				recDlg.bottom	= recDlg.top + ulHeight;				
				m_pInfoDlg->MoveWindow( recDlg );				
			}									
		}
		else
		{
			return;
		}
	}
	else
	{
		OnDeleteImageInfoDialog( 0, 0 );		// delete dialog
	}
}
// OnShowInfoPane
//////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////
// OnDeleteImageInfoDialog
// delete ImageInf dialog
LRESULT CMainFrame::OnDeleteImageInfoDialog( UINT wParam, LONG lParam )
{
	if( NULL != m_pInfoDlg )
	{
		// delete CNkILSampleSet1Dlg object
		m_pInfoDlg->DestroyWindow();			
		delete m_pInfoDlg;
		m_pInfoDlg = NULL;
	}
	return 0;
}
// OnDeleteImageInfoDialog
///////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// OnUpdateInfoPane
// update infopane control at menu
void CMainFrame::OnUpdateInfoPane(CCmdUI *pCmdUI)
{
	// if CNkILSampleDoc isn't exist, disable command
	if( !m_pDoc->IsOpenedFile() )
	{
		pCmdUI->Enable(false);
		return;
	}
	else
	{
		pCmdUI->Enable( true );
	}
	// if dialog doesn't exist, unset check 
	bool bEnable = ( m_pInfoDlg == NULL ) ? false : true;
	pCmdUI->SetCheck( bEnable );	
}
// OnUpdateInfoPane
//////////////////////////////////////////////////////////////////////

//====================================================================
// function name		：OnPreferenceDlg
// function abstract	：create and show preference dialog
// parameter			：none
// return value			：none
//====================================================================
void CMainFrame::OnPreferenceDlg()
{	
	CNkILSamplePreferenceDlg	PreferenceDlg;	// create preference dialog object

	/////////////////////////////////////////////////
	// get current preference data from registry 
	/////////////////////////////////////////////////

	HKEY hkResult;							// hundle of registry key	
	CString strSubKey, strTemp, strFilePath;
	unsigned long ulMemSize = 0;
	char pPath[ MAX_PATH ] = {0};

	// open registory
	strSubKey.LoadString(IDS_REGPREFERENCE);// get address of subkey from string table
	long lOpenResult = RegOpenKeyEx(HKEY_CURRENT_USER, strSubKey, 0, KEY_ALL_ACCESS, &hkResult);	
	// check registry is opened
	if( ERROR_SUCCESS == lOpenResult )
	{
		// registry opened, access registry and get data	
		// get VMMemory size
		DWORD dwSize = sizeof(long);		// set size of ulMemSize parameter
		strTemp.LoadString( IDS_PREFERENCE_VMMEMORYSIZE );
		RegQueryValueEx( hkResult, strTemp, 0, NULL, (LPBYTE)&ulMemSize, (LPDWORD)&dwSize );
		
		// get VMFilePath					
		dwSize = MAX_PATH;					// set max size of strFilePath		
		strTemp.LoadString( IDS_PREFERENCE_VMFILEPATH );
		RegQueryValueEx( hkResult, strTemp, 0, NULL, (LPBYTE)pPath, (LPDWORD)&dwSize );
		strFilePath = pPath;		
		
		RegCloseKey( hkResult );			// close key
	}		

	// set current preference data to dialog object
	PreferenceDlg.SetPreferenceData( strFilePath, ulMemSize );	
	
	/////////////////////////////////////////////////
	// show preference dialog and set data to registry 
	/////////////////////////////////////////////////

	if( PreferenceDlg.DoModal() == IDOK )	// show dialog
	{
		// get preference data from dialog
		PreferenceDlg.GetPreferenceData( &strFilePath, &ulMemSize );		

		// open registory. if not exist, create new	
		lOpenResult = RegCreateKeyEx(HKEY_CURRENT_USER, strSubKey, 0, "", REG_OPTION_NON_VOLATILE,
															KEY_ALL_ACCESS, NULL, &hkResult, NULL);	
		// check registry is opened or created
		if( ERROR_SUCCESS == lOpenResult )
		{
			DWORD dwSize = MAX_PATH;		// set max size of strFilePath
			// set VMFilePath to registry
			strTemp.LoadString( IDS_PREFERENCE_VMFILEPATH );
			RegSetValueEx( hkResult, strTemp, 0, REG_SZ, (LPBYTE)strFilePath.GetString(), dwSize );

			// get VMMemory size
			dwSize = sizeof(long);			// set size of ulMemSize parameter
			strTemp.LoadString( IDS_PREFERENCE_VMMEMORYSIZE );
			RegSetValueEx( hkResult, strTemp, 0, REG_DWORD, (LPBYTE)&ulMemSize, dwSize );

			RegCloseKey( hkResult );		// close key	
		}
	}	
}
// OnPreferenceDlg
//////////////////////////////////////////////////////////////////////

//====================================================================
// function name		：OpenFile
// function abstract	：open image file
// parameter			：strFilePath		path of imagefile
// return value			：true/false
//====================================================================
bool CMainFrame::OpenFile( CString strFilePath )
{	
	//create CNkILSampleDoc object
	if( NULL == m_pDoc )
	{
		m_pDoc = (CNkILSampleDoc*)GetActiveDocument();
	}
	// open file at documentclass
	if( !m_pDoc->OnOpenDocument( strFilePath ))
	{
		return FALSE;
	}					

	return true;
}
// OpenFile
//////////////////////////////////////////////////////////////////////

//====================================================================
// function name		：ShowStatusBar
// function abstract	：rewrite status bar
// parameter			：bDefault		flag of check show default status
// return value			：none
//====================================================================
void CMainFrame::ShowStatusBar( bool bDefault /* = false */ )
{	
	//create CNkILSampleDoc object
	if( NULL == m_pDoc )
	{
		m_pDoc = (CNkILSampleDoc*)GetActiveDocument();
	}
	
	// check show default status or image info
	if( !m_pDoc->IsOpenedFile() || bDefault )
	{
		CString strStatus;
		strStatus.LoadString( AFX_IDS_IDLEMESSAGE );
		m_wndStatusBar.SetPaneText( 0, strStatus );
	}
	else
	{
		unsigned long ulRatio	= (unsigned long)(((CNkILSampleView*)GetActiveView())->GetDispayRatio() * 100.0);	// get current view obfect	
		// boundary of 10
		if( 0 != ulRatio % BOUNDARY_10 )
		{
			ulRatio += ( BOUNDARY_10 - ulRatio % BOUNDARY_10 );
		}
		// get image size
		NkIL_ImageInfo StrInfo	= {0};
		m_pDoc->GetImageInfo( NULL, &StrInfo, NULL );

		// set parameter to CString object
		CString strBar;
		strBar.Format(" (%d x %d) @ %d%%", StrInfo.ulWidth, StrInfo.ulHeight, ulRatio );
		CString strTitle = m_pDoc->GetTitle() + strBar;

		m_wndStatusBar.SetPaneText( 0, strTitle );	// rewrite status bar	
	}	
}
// ShowStatusBar
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// GetFormat
// get image format from document class
unsigned long CMainFrame::GetFormat()
{		
	return m_pDoc->GetFormat();			// return file format 
}
// GetFormat
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// SetFrameStrings
// write statusbar and window title
void CMainFrame::SetFrameStrings( bool bDefault /*= false*/)
{		
	ShowStatusBar( bDefault );			// rewrite statusbar

	// check show default or filename
	if( bDefault )
	{
		CString strTitle;
		strTitle.LoadString( IDS_LIBRARYNAME );
		SetWindowText( strTitle );
	}
	else
	{
		CString strLib;
		strLib.LoadString( IDS_LIBRARYNAME );
		CString strTitle = m_pDoc->GetTitle() + " - " + strLib;	// title is "filename - ImageSDKLib"
		SetWindowText( strTitle );	
	}	
}
// SetFrameStrings
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// SetSet1DlgInfo
// get settings1dialog info and set to settings1dialog
bool CMainFrame::SetSet1DlgInfo()
{
	// get image info from CNkILSampleDoc
	NkIL_ImageInfo			StrImageInfo		= {0};
	ILSample_OutputProfile	StrOutputProfile	= {0};
	unsigned long			ulRawQuality		= 0;
	if( !m_pDoc->GetSettings1Info( &StrImageInfo, &ulRawQuality, &StrOutputProfile ))
	{
		return false;
	}
	// set image infomation to dialog
	if( !m_pSet1Dlg->InitParameter( StrImageInfo, ulRawQuality, StrOutputProfile ))
	{
		return false;
	}
	return true;
}
// SetSet1DlgInfo
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// SetSet2DlgInfo
// get settings2dialog info and set to settings2dialog
bool CMainFrame::SetSet2DlgInfo()
{
	// get raw adjust info from CNkILSampleDoc 
	unsigned long			ulParamSet;
	ILSample_CommonGroup	StrCommon	= {0};
	ILSample_ColorModeGroup	StrColor	= {0};
	NkIL_PicCtrlParam		StrPicture	= {0};
	
	if( !m_pDoc->GetSettings2Info( kILSample_Group_ParamSet, &ulParamSet ))
	{
		return false;
	}
	if( !m_pDoc->GetSettings2Info( kILSample_Group_Common, &StrCommon ))
	{
		return false;
	}
	if( !m_pDoc->GetSettings2Info( kILSample_Group_ColorMode, &StrColor ))
	{
		return false;
	}
	if( !m_pDoc->GetSettings2Info( kILSample_Group_PictureCtrl, &StrPicture ))
	{
		return false;
	}	
	// set raw adjust info to dialog
	if( !m_pSet2Dlg->InitParameter( kILSample_Group_ParamSet, &ulParamSet ))
	{
		return false;
	}
	if( !m_pSet2Dlg->InitParameter( kILSample_Group_Common, &StrCommon ))
	{
		return false;
	}
	if( !m_pSet2Dlg->InitParameter( kILSample_Group_ColorMode, &StrColor ))
	{
		return false;
	}
	if( !m_pSet2Dlg->InitParameter( kILSample_Group_PictureCtrl, &StrPicture ))
	{
		return false;
	}	
	
	return true;
}
// SetSet2DlgInfo
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// SetInfoDlgInfo
// get ImageInfodialog info and set to ImageInfodialog
bool CMainFrame::SetInfoDlgInfo()
{
	// get info set property sheet from CNkILSampleDoc class
	unsigned long	ulFormat;
	NkIL_ImageInfo	StrImageInfo	= {0};
	NkIL_ImageInfo	StrOrgImageInfo	= {0};
	VECTTHUMBINFO	vecThumbInfo;
	VECTCAMERAINFO  vecCameraInfo;
	// image info
	if( !m_pDoc->GetImageInfo( &ulFormat, &StrImageInfo, &StrOrgImageInfo ))
	{
		return false;
	}	
	// thumbnail info
	if( !m_pDoc->GetThumbInfo( &vecThumbInfo ))
	{
		return false;
	}
	// shooting info
	unsigned long ulError = m_pDoc->GetCameraInfo( &vecCameraInfo );
	if( kNkfl_Code_None != ulError && kNkfl_Code_Err_ShootingDataNotFound != ulError )
	{
		return false;
	}

	// set each page's info of property sheet
	m_pInfoDlg->SetAllPageInfo( ulFormat, StrImageInfo, StrOrgImageInfo, vecThumbInfo, vecCameraInfo );
	return true;
}
// SetInfoDlgInfo
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// DisplayAllDlg
// display settings1&2dialog and infomationdialog
void CMainFrame::DisplayAllDlg()
{	
	OnShowSet1Pane();
	OnShowInfoPane();
	if( kNkfl_FileFormat_NEF_RAW == GetFormat() || kNkfl_FileFormat_NEF_COMP == GetFormat() )
	{
		OnShowSet2Pane();		// nef only
	}
}
// DisplayAllDlg
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// DeleteAllDlg
// delete settings1&2dialog and infomationdialog
void CMainFrame::DeleteAllDlg()
{
	// if dialog exist, delete it
	if( NULL != m_pSet1Dlg )
	{
		OnDeleteSettings1Dialog(0, 0);
	}
	if( NULL != m_pSet2Dlg )
	{
		OnDeleteSettings2Dialog(0, 0);
	}
	if( NULL != m_pInfoDlg )
	{
		OnDeleteImageInfoDialog(0, 0);
	}
}
// DeleteAllDlg
//////////////////////////////////////////////////////////////////////
