// PlugTest.h : main header file for the PLUGTEST DLL
//

#if !defined(AFX_REPLICATE_H__C870A7E1_E46A_11d1_A330_00A0249C7DE2__INCLUDED_)
#define AFX_REPLICATE_H__C870A7E1_E46A_11d1_A330_00A0249C7DE2__INCLUDED_



#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#ifndef __AFXWIN_H__
	#error include 'stdafx.h' before including this file for PCH
#endif

#include "AnimationSuite.h"


/////////////////////////////////////////////////////////////////////////////
// CPlugTestApp
// See PlugTest.cpp for the implementation of this class
//

#ifndef __REPLICATE__
#define __REPLICATE__


class RepReduceStatus:
	public KeyReduceStatus
{
public:
	
	RepReduceStatus()
	{
		
	}

	void Init(int total)
	{
		
	}

	int Progress(int p){return KEYREDUCE_CONTINUE;};
};
/////////////////////////////////////////////////////////////////////////////
// PlugPanel, manage the Plugins' display panel


class ReplicatePanel : public UtilityObj {
	protected:
		IUtil*			m_iu;
		HWND			m_hPanel;

	public:
		Interface*		m_ip;

        // Constructor & Destructor
        ReplicatePanel() {};
        virtual ~ReplicatePanel() {};

		// Overides of the UtilityObj class
		void BeginEditParams(Interface* ip, IUtil* iu);
		void EndEditParams(Interface* ip, IUtil* iu);
		void DeleteThis()						{}
		void Init(HWND hWnd);
		void Destroy(HWND hWnd);

		//Specific Methods
		void Replicate();
		void Bake();
		void DeleteMeAndMyChildren(INode *node);
		INode *CopyMeAndMyChildren(INode *copy_node);

		INode *CopyNode(INode *copy_node);
		
		void StripBones(INode *node);
		void CopyAnimation(INode *source, INode *target,JointEditDialog *dialog,int = 1);
		int HasKnownControler(INode *node);
		
		void OptimizeAnimation(INode *copy_node, int &current_node, int total_nodes, JointEditDialog *dialog);
		
};


/////////////////////////////////////////////////////////////////////////////
// 3DS Max Standard Select-by-name Dialog Box Callback Class
class TestHitByNameDlgCallback : public HitByNameDlgCallback
{
	public:
		virtual TCHAR* dialogTitle()		{ return _T("Select a Node to copy");}
		virtual TCHAR* buttonText()			{ return _T("Select");}
		virtual BOOL useFilter()			{return FALSE;}
		virtual BOOL useProc()				{ return TRUE;}
		virtual void proc(INodeTab &nodeTab){NodeTab = nodeTab;}
		virtual BOOL singleSelect()			{return TRUE;}

	public:
		INodeTab	NodeTab;
};


/////////////////////////////////////////////////////////////////////////////

#endif

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_REPLICATE_H__C870A7E1_E46A_11d1_A330_00A0249C7DE2__INCLUDED_)
