/*=========================================================================

	AllFiles.CPP	

	Author:  Gary 
	Created: 011200
	Project: SpongeBob
	Purpose: File cycler stuff

===========================================================================*/

					
/*----------------------------------------------------------------------
	Includes
	-------- */

#include <vector>
#include <gtypes.h>
#include <gstring.hpp>
#include <misc.hpp>
#include <gfname.hpp>
#include <pcre.h>

#include "sprset.h"

#include	"AllFiles.h"

/*----------------------------------------------------------------------
	Function:	void AllFiles::AddFile(const char * Name)
	Purpose:	Add a file to the list, it takes all the current
				properties that the AllFiles object has.
	Params:		Name of file to add
  ---------------------------------------------------------------------- */
int	AllFiles::AddFile(const char * Name)
{
int	ListSize=AllFileInfos.size();
	DoCycle(Name,RecurseFiles);
	return(ListSize);
}

/*----------------------------------------------------------------------
	Function:	void AllFiles::FileCallback(char const * FName,int FileNum)
  ---------------------------------------------------------------------- */
//#include <gintex.h>
#include <algorithm>

void AllFiles::FileCallback(char const * FName,int FileNum)
{
	FileInfo	MyInfo;
	bool		ThisZeroColZero;


	GFName		FileName(FName);

	GString		Ext(FileName.Ext());
	
	Ext.Lower();
	GFName	Name(FName);

	if (Name.File()[0]=='+')
		ThisZeroColZero=true;
	else
		ThisZeroColZero=ZeroColZero;

	if (Name.File()[0]=='!')
		m_allocateAs16bit=true;
	else
		m_allocateAs16bit=false;

	if (Name.File()[0] == '@')
	{
		ThisZeroColZero = true;
		m_allocateAs16bit = true;
	}

	GString TheFile(FName);
	TheFile.Lower();
		
	MyInfo.SetInfo(TheFile,CrossHair,ThisZeroColZero,MoveUVs,AllowRotate,ShrinkToFit,m_allocateAs16bit);
	if (DebugFlag) cout<<"Add image file "<<TheFile<<endl;

	if (ForceOffsets)
		MyInfo.SetForceOffsets(XOff,YOff);
	
	AllFileInfos.resize(AllFileInfos.size()+1);
	AllFileInfos[AllFileInfos.size()-1]=MyInfo;

}

int	AllFiles::AddMemFrame(char const * FName,Frame &Frame)
{
	FileInfo	MyInfo;
	bool		ThisZeroColZero;
	GFName	Name(FName);

		if (Name.File()[0]=='+')
			ThisZeroColZero=true;
		else
			ThisZeroColZero=ZeroColZero;

		if (Name.File()[0]=='!')
			m_allocateAs16bit=true;
		else
			m_allocateAs16bit=false;

		if (Name.File()[0] == '@')
		{
			ThisZeroColZero = true;
			m_allocateAs16bit = true;
		}

		GString TheFile(FName);
		TheFile.Lower();
			
		MyInfo.SetInfo(TheFile,CrossHair,ThisZeroColZero,MoveUVs,AllowRotate,ShrinkToFit,m_allocateAs16bit,&Frame);
		if (DebugFlag) cout<<"Add MemFrame "<<TheFile<<endl;

		if (ForceOffsets)
			MyInfo.SetForceOffsets(XOff,YOff);
int	ListSize=AllFileInfos.size();
		AllFileInfos.resize(ListSize+1);
		AllFileInfos[ListSize]=MyInfo;
	return(ListSize);
}

/*----------------------------------------------------------------------
	Function:	void AllFiles::FileCallback(char const * FName,int FileNum)
  ---------------------------------------------------------------------- */
void AllFiles::SortOrder()
{
	if (!m_noSort)
		{
		int i,j;
		FileInfo MyInfo;
		int count = AllFileInfos.size();

		for (i=0; i<count; i++)
			{
			for (j=0; j<count; j++)
				{
				if (strcmp(AllFileInfos[i].GetFileName(), AllFileInfos[j].GetFileName())<0)
					{
					MyInfo = AllFileInfos[i];
					AllFileInfos[i] = AllFileInfos[j];
					AllFileInfos[j] = MyInfo;
					}
				}
			}
		}
}

/*===========================================================================
 end */