175 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //========= Copyright Valve Corporation, All rights reserved. ============//
 | |
| //
 | |
| // Purpose: An object that is used, when modifying the state of the document,
 | |
| //			to collect information about what objects changed and how they changed.
 | |
| //			This aggregate info is then passed to CMapDoc::UpdateObjects which performs
 | |
| //			post processing and view updates.
 | |
| //
 | |
| // $NoKeywords: $
 | |
| //=============================================================================//
 | |
| 
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // Purpose: Iterates the list of updated objects.
 | |
| //-----------------------------------------------------------------------------
 | |
| POSITION CUpdateHint::GetHeadPosition(int nIndex)
 | |
| {
 | |
| 	return(m_NotifyList[nIndex].Objects.GetHeadPosition());
 | |
| }
 | |
| 
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // Purpose: Iterates the list of updated objects.
 | |
| //-----------------------------------------------------------------------------
 | |
| CMapClass *CUpdateHint::GetNext(POSITION &pos)
 | |
| {
 | |
| 	return(m_NotifyList[nIndex].Objects.GetNext(pos));
 | |
| }
 | |
| 
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // Purpose: Returns the notification code for this update.
 | |
| //-----------------------------------------------------------------------------
 | |
| int CUpdateHint::GetNotifyCode(void)
 | |
| {
 | |
| 	return(m_NotifyList[nIndex].nCode);
 | |
| }
 | |
| 
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // Purpose: Returns the current update region.
 | |
| //-----------------------------------------------------------------------------
 | |
| BoundBox const &CUpdateHint::GetUpdateRegion(void)
 | |
| {
 | |
| 	return(m_UpdateRegion);
 | |
| }
 | |
| 
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // Purpose: Prepares to update an object.
 | |
| // Input  : pObject - Object that will be updated.
 | |
| //-----------------------------------------------------------------------------
 | |
| void CUpdateHint::PreUpdateObject(CMapClass *pObject)
 | |
| {
 | |
| 	if (pObject != NULL)
 | |
| 	{
 | |
| 		CMapObjectList TempList;
 | |
| 		TempList.AddTail(pObject);
 | |
| 		PreUpdateObjects(&TempList);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PreUpdateObjects(NULL);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // Purpose: Prepares to update the list of objects.
 | |
| // Input  : pObjects - List of objects, NULL if none.
 | |
| //-----------------------------------------------------------------------------
 | |
| void CUpdateHint::PreUpdateObjects(CMapObjectList *pObjects)
 | |
| {
 | |
| 	if (pObjects != NULL)
 | |
| 	{
 | |
| 		POSITION pos = pObjects->GetHeadPosition();
 | |
| 		while (pos != NULL)
 | |
| 		{
 | |
| 			CMapClass *pObject = pObjects->GetNext(pos);
 | |
| 			if (pObject != NULL)
 | |
| 			{
 | |
| 				m_UpdateRegion.UpdateBounds(pObject);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // Purpose: Prepares to update an object.
 | |
| // Input  : pObject - Object that will be updated.
 | |
| //-----------------------------------------------------------------------------
 | |
| void CUpdateHint::PostUpdateObject(CMapClass *pObject, int nNotifyCode)
 | |
| {
 | |
| 	if (pObject != NULL)
 | |
| 	{
 | |
| 		CMapObjectList TempList;
 | |
| 		TempList.AddTail(pObject);
 | |
| 		PostUpdateObjects(&TempList, nNotifyCode);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PostUpdateObjects(NULL, nNotifyCode);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // Purpose: Prepares to update the list of objects.
 | |
| // Input  : pObjects - List of objects, NULL if none.
 | |
| //-----------------------------------------------------------------------------
 | |
| void CUpdateHint::PostUpdateObjects(CMapObjectList *pObjects, int nNotifyCode)
 | |
| {
 | |
| 	int nIndex = 0;
 | |
| 	bool bFound = false;
 | |
| 		
 | |
| 	while (!bFound && (nIndex < m_ListEntries))
 | |
| 	{
 | |
| 		if (m_NotifyList[nIndex].nCode == nNotifyCode)
 | |
| 		{
 | |
| 			bFound = true;
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			nIndex++;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if ((!bFound && (nIndex < MAX_NOTIFY_CODES))
 | |
| 	{
 | |
| 		if (nIndex < MAX_NOTIFY_CODES)
 | |
| 		{
 | |
| 			m_ListEntries++;
 | |
| 		}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		ASSERT(nIndex < MAX_NOTIFY_CODES);
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	m_NotifyList[nIndex].Objects.AddTail(pObjects);
 | |
| 
 | |
| 	if (pObjects != NULL)
 | |
| 	{
 | |
| 		POSITION pos = pObjects->GetHeadPosition();
 | |
| 		while (pos != NULL)
 | |
| 		{
 | |
| 			CMapClass *pObject = pObjects->GetNext(pos);
 | |
| 			if (pObject != NULL)
 | |
| 			{
 | |
| 				m_UpdateRegion.UpdateBounds(pObject);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // Purpose: 
 | |
| //-----------------------------------------------------------------------------
 | |
| void CUpdateHint::Reset(void)
 | |
| {
 | |
| 	m_Objects.RemoveAll();
 | |
| 	m_UpdateRegion.ResetBounds();
 | |
| }
 | |
| 
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| // Purpose: 
 | |
| //-----------------------------------------------------------------------------
 | |
| void CUpdateHint::UpdateBounds(BoundBox &bbox)
 | |
| {
 | |
| 	m_UpdateRegion.UpdateBounds(&bbox);
 | |
| }
 |