//----------------------------------------------------------------------------- // 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; } } } }