///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
 *	FLEXPORTER - a flexible exporter
 *	Copyright (C) 2000-2004 Pierre Terdiman
 *	Homepage: http://www.codercorner.com/Flexporter.htm
 */
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
 *	The Flexporter panel.
 *	\file		FLX_Panel.h
 *	\author		Pierre Terdiman
 *	\date		April, 10, 2000
 */
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Include Guard
#ifndef FLX_DLL_H
#define FLX_DLL_H

	/////////////////////////////////////////////////////////////////////////////
	// Generated by Kinetix's Gencid.exe (in the SDK\Help)
	#define  ICEEXPORTER_CLASS_ID	Class_ID(0x278563d8, 0x5f3b1a6c)
/*
	void LoadLibs(Interface* ip=null);
	void FreeLibs();
*/

	//! Flexporter's panel
	class ExporterPanel : public UtilityObj
	{
		public:
			// Constructor & Destructor
															ExporterPanel();
			virtual											~ExporterPanel();

			override(UtilityObj)			void			BeginEditParams(Interface* ip, IUtil* iu);
			override(UtilityObj)			void			EndEditParams(Interface* ip, IUtil* iu);
			override(UtilityObj)			void			DeleteThis(){}

			// Callbacks
											void			Init(HWND hwnd);
											void			Destroy(HWND hwnd);

			// Specific Methods
											ExporterPanel&	Export(const String& filename, bool scene_file);

		public:
											HINSTANCE		hInstance;
											IUtil*			iu;
											Interface*		ip;
											HWND			hPanel;
//		private:
											void			AddCustomMaterial(BOOL Insert);
//											int				CheckCCIsLoaded(ICustAttribContainer* cc, int which, BOOL Mat);
											bool			HasCustomMaterial(ICustAttribContainer* cc);
	};

	//! Flexporter's descriptor
	class ExporterDesc : public ClassDesc
	{
		public:
											int				IsPublic();
											void*			Create(BOOL loading = FALSE);
											const TCHAR*	ClassName();
											SClass_ID		SuperClassID();
											Class_ID		ClassID();
											const TCHAR*	Category();
	};

	/////////////////////////////////////////////////////////////////////////////
	// 3DS Max Standard Select-by-name Dialog Box Callback Class
	class Selection : public HitByNameDlgCallback
	{
		public:
			override(HitByNameDlgCallback)	TCHAR*			dialogTitle()			{ return _T("Select Nodes to export");	}
			override(HitByNameDlgCallback)	TCHAR*			buttonText()			{ return _T("Export!");					}
			override(HitByNameDlgCallback)	BOOL			useFilter()				{ return TRUE;							}
			override(HitByNameDlgCallback)	BOOL			useProc()				{ return TRUE;							}
			override(HitByNameDlgCallback)	void			proc(INodeTab &nodeTab)	{ NodeTab = nodeTab;					}
			override(HitByNameDlgCallback)	BOOL			singleSelect()			{ return FALSE;							}

			override(HitByNameDlgCallback)	int				filter(INode *node)
															{
																INode* Parent = node->GetParentNode();
																if(!Parent) return TRUE;

																Parent = Parent->GetParentNode();
																if(!Parent)	return TRUE;

																return FALSE;
															}
											bool			Contains(INode* node);
		public:
											INodeTab		NodeTab;
	};

#endif // FLX_DLL_H
