//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void COP_Groups::UpdateGrouplist(void)
{
	CMapDoc *pDoc = CMapDoc::GetActiveMapDoc();
	if (pDoc == NULL)
	{
		return;
	}

	if(!::IsWindow(m_cGroups.m_hWnd))
		return;

	int iSel = m_cGroups.GetCurSel();
	DWORD oldselid = 0xffffffff;
	if(iSel != LB_ERR)
		oldselid = m_cGroups.GetItemData(iSel);

	m_cGroups.ResetContent();

	if (IsMultiEdit())
	{
		m_cGroups.InsertString(0, VALUE_DIFFERENT_STRING);
		m_cGroups.SetItemData(0, VALUE_DIFFERENT_ID);
	}

	m_cGroups.InsertString(0, NO_GROUP_STRING);
	m_cGroups.SetItemData(0, NO_GROUP_ID);

	POSITION pos = pDoc->VisGroups_GetHeadPosition();
	while (pos != NULL)
	{
		CVisGroup *pGroup = pDoc->VisGroups_GetNext(pos);

		int iIndex = m_cGroups.AddString(pGroup->GetName());
		m_cGroups.SetItemData(iIndex, pGroup->GetID());
	}

	// restore old selection based on stored id
	iSel = 0;
	int iSize = m_cGroups.GetCount();
	for(int i = 0; i < iSize; i++)
	{
		if(m_cGroups.GetItemData(i) == oldselid)
		{
			iSel = i;
			break;
		}
	}

	m_cGroups.SetCurSel(iSel);
	m_cGroups.Invalidate();
}