// ParameterDialog.h: interface for the CParameterDialog class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PARAMETERDIALOG_H__7E09B741_A330_11D3_B6C8_00902752C68E__INCLUDED_)
#define AFX_PARAMETERDIALOG_H__7E09B741_A330_11D3_B6C8_00902752C68E__INCLUDED_


#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

typedef enum {
	PARAMETER_NOPICK	 =	0,
	PARAMETER_PICKPARAM	 =  1,
	PARAMETER_PICKOBJECT =	2,
	PARAMETER_PICKALL	 =	3,
} PARAMETER_PICK;


#define PARAMETER_RESIZE	 TRUE
#define PARAMETER_NORESIZE	 FALSE

class CParameterDialog;
class CBaseParameterDialog;
class CKeyParameterDialog;

__declspec(dllexport) HWND CreateParameterDialog(HWND parent,CParameterDialog* Dlg,UINT Template,PARAMETER_PICK PickFlags=PARAMETER_NOPICK,CK_CLASSID ckcid=0,BOOL Size=FALSE);
__declspec(dllexport) CKeyParameterDialog* CreateKeyDialog(HWND parent,CKParameter* param);



/////////////////////////////////////////////////////////////////////////////
// CParameterDialog dialog

class AFX_EXT_CLASS CParameterDialog : public CDialog
{
// Construction
public:
	CParameterDialog(CKParameter* Parameter,CK_CLASSID Cid=CKCID_OBJECT);   // standard constructor
	virtual ~CParameterDialog() {}
// Dialog Data
	//{{AFX_DATA(CParameterDialog)
		// NOTE: the ClassWizard will add data members here
	//}}AFX_DATA

	virtual CKBOOL On_Init()									{ return TRUE; }
	virtual CKBOOL On_Cancel()									{ return TRUE; }
	virtual CKBOOL On_UpdateFromParameter(CKParameter* Param){ return TRUE; }
	virtual CKBOOL On_UpdateToParameter(CKParameter* Param)	{ return TRUE; }
	virtual CKBOOL ChangeSize(CKBOOL Max)						{ return TRUE; }
	virtual CK_ID  On_Pick(LPPOINT ClientPoint,int ClassID)				{ return 0; }		
	virtual CK_ID  On_ParameterPick(LPPOINT ScreenPoint,int ParameterType)	{ return 0; }		
// Pre Implemented methods
	virtual CKBOOL On_Ok()										{ return On_UpdateToParameter(NULL); }
	virtual CKBOOL On_PickResult(CK_ID picked,HWND Control,CKBOOL Clicked = FALSE);		
	
	void	StartPick(int PickFilter,CK_CLASSID ckcid, HWND Control,BOOL start=TRUE);
	CKBOOL	NotifyParameterModification(HWND wnd);

	CKObject* CKGetObject(CK_ID id) { return m_Context->GetObject(id); }

public:
	CK_ID					m_EditedParameter;
	CK_CLASSID				m_EditedClassID;
	CKBOOL					m_PickActive;
	CKDWORD					m_PickFilter;
	CK_CLASSID				m_ObjPickCid;
	
	HWND					m_PickControl;
	BOOL					m_PickResult;
	BOOL					m_Maximized;
	CBaseParameterDialog*	m_Owner;
	CWnd*					m_FocusWindow;
	CKContext*				m_Context;

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CParameterDialog)
	public:
	virtual BOOL PreTranslateMessage(MSG* pMsg);
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
	virtual void PostNcDestroy();
	//}}AFX_VIRTUAL

// Implementation
protected:
	// Generated message map functions
	//{{AFX_MSG(CParameterDialog)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};



#endif // !defined(AFX_PARAMETERDIALOG_H__7E09B741_A330_11D3_B6C8_00902752C68E__INCLUDED_)
