#include "StdAfx.h"
#include ".\workspacestringlist.h"
#include "workspace.h"

CWorkspaceStringList::CWorkspaceStringList(CString listName)
{
	m_listName = listName;
}

CWorkspaceStringList::~CWorkspaceStringList(void)
{
}

CWorkspaceStringList::CWorkspaceStringList(CWorkspaceAccess &other, CString listName)
{
	m_listName = listName;
	CWorkspaceAccess::operator=(other.GetAccess(listName));
}

//////////////////////////////////////////////////////////////////////////////
//	取得
//////////////////////////////////////////////////////////////////////////////
/*!
	個数の取得
*/
int CWorkspaceStringList::GetItemCount()
{
	return(GetKeyCount());
}

/*!
	アイテムの取得
*/
CString CWorkspaceStringList::GetItem(int index)
{
	//	全てのサブノードを取得
	CStringArray	list;
	GetAllKey(list);

	//	対象を取得
	return(GetKeyStr(list[index],""));
}

/*!
	アイテムの設定
*/
void CWorkspaceStringList::SetItem(int index, CString str)
{
	//	全てのサブノードを取得
	CStringArray	list;
	GetAllKey(list);

	//	対象を上書き
	SetKeyStr(list[index], str);
}

/*!
	アイテムを追加
*/
void CWorkspaceStringList::AddNewItem(CString str, int checkExist, int noCase)
{
	//	重なってる？
	if(checkExist)
		if(FindIndex(str, noCase) != -1)
			return;

	int itemNo = 0;
	CString	name;

	//	重なっていない名前を探す
	CStringArray	list;
	GetAllKey(list);
	while(1)
	{
		//	ないか検索
		int loopFlag = 0;
		name.Format("%s_%04d", m_listName, itemNo);
		for(int i=0; i<list.GetSize(); i++)
		{
			if(name.CompareNoCase(list[i]) == 0)
				loopFlag = 1;
		}

		//	なかった
		if(loopFlag == 0)
			break;

		//	あった
		itemNo ++;
	}
	
	SetKeyStr(name, str);
}

/*!
	アイテムの削除
*/
void CWorkspaceStringList::DeleteItem(int index)
{
	//	全てのサブノードを取得
	CStringArray	list;
	GetAllKey(list);

	//	対象を削除
	DeleteKey(list[index]);
}

/*!
	まとめて追加
*/
void CWorkspaceStringList::AddList(CStringArray &list, int checkExist, int noCase)
{
	for(int i=0;i<list.GetSize();i++)
		AddNewItem(list[i], checkExist, noCase);
}

/*!
	まとめて取得
*/
void CWorkspaceStringList::GetList(CStringArray &list)
{
	list.RemoveAll();

	//	全てのサブノードを取得
	CKeyDataArray	keyList;
	CopyAllKeys(keyList);

	for(int i=0;i<keyList.GetSize();i++)
		list.Add(keyList[i].m_data);
}

/*!
	検索
*/
int CWorkspaceStringList::FindIndex(CString str, int noCase)
{
	return(m_root->FindKeyData(m_path, str, noCase));
}


/*!
	パス検索
*/
int CWorkspaceStringList::FindPath(CString path, int eqPath)
{
	return(m_root->FindKeyDataPath(m_path, path, eqPath));
}
