//-----------------------------------------------------------------------------
// Purpose: 
// Output : Returns true on success, false on failure.
//-----------------------------------------------------------------------------
bool COP_Groups::SaveData(void)
{
	if (!IsWindow(m_hWnd))
	{
		return(false);
	}

	//
	// Apply the dialog data to all the objects being edited.
	//
	POSITION pos = m_pObjectList->GetHeadPosition();
	while (pos != NULL)
	{
		CMapClass *pObject = m_pObjectList->GetNext(pos);

		// get current selection
		int iSel = m_cGroups.GetCurSel();

		// find ID from selection (in listbox data)
		DWORD id = m_cGroups.GetItemData(iSel);
		if (id == NO_GROUP_ID && pObject->GetVisGroup())
		{
			pObject->SetVisGroup(NULL);
		}
		else if (id != VALUE_DIFFERENT_ID)
		{
			CVisGroup *pGroup = CMapDoc::GetActiveMapDoc()->VisGroups_GroupForID(id);
			pObject->SetVisGroup(pGroup);
		}
	}

	return(true);
}
//-----------------------------------------------------------------------------
// Purpose: 
// Input  : Mode - 
//			pData - 
//-----------------------------------------------------------------------------
void COP_Groups::UpdateData(int Mode, PVOID pData)
{
	static BOOL bDiffSelected = FALSE;

	if(!IsWindow(m_hWnd) || !pData)
	{
		return;
	}

	CMapClass *pObject = (CMapClass*) pData;

	CMapWorld * pWorld = GetActiveWorld();

	if(Mode == LoadData || Mode == LoadFirstData)
	{
		if(Mode == LoadFirstData)
		{
			UpdateGrouplist();

			// loading the first object -> just select the group
			CVisGroup *pGroup = pObject->GetVisGroup();
			if (pGroup != NULL)
			{
				int iSize = m_cGroups.GetCount();
				DWORD id = pGroup->GetID();
				for(int i = 0; i < iSize; i++)
				{
					DWORD itemid = 	m_cGroups.GetItemData(i);
					if(itemid == id)
					{
						m_cGroups.SetCurSel(i);
						break;
					}
				}
			}
			else
			{
				m_cGroups.SelectString(-1, NO_GROUP_STRING);
			}

			bDiffSelected = FALSE;
		}
		else if(!bDiffSelected)
		{
			// loading the next object -> if the group is not the same
			//  as the currently selected group, set it to "(different)"
			int iSel = m_cGroups.GetCurSel();
			DWORD id;
			ASSERT(iSel != -1);
			id = m_cGroups.GetItemData(iSel);

			// if NOT any of the following -> 
			//  1. no object group, and id is at no_group_id,
			//  2. object has group, and id is set at that group
			// then set value_different_string!

			if (!((!pObject->GetVisGroup() && id == NO_GROUP_ID) ||
				(pObject->GetVisGroup() && id == pObject->GetVisGroup()->GetID())))
			{
				m_cGroups.SelectString(-1, VALUE_DIFFERENT_STRING);
				bDiffSelected = TRUE;
			}
		}
	}
}