コード例 #1
0
set<int> CDesertConfigDialog::computeConfigList(HTREEITEM &item, set<int> cfgIds)
{
	set<int> ret_ids;
	if(m_cfgtree.GetCheck(item) && item!=m_cfgTreeRootItem)
	{
		noneChecked = true;
		set<int> curr_ids = dhelper_ptr->getConfigurationsfromElement(cfgTreeMap[item]);

		for(set<int>::iterator it=curr_ids.begin();it!=curr_ids.end();++it)
		{
			if(cfgIds.find((*it))!=cfgIds.end())
				ret_ids.insert((*it));
		}
	}
	else
		ret_ids = cfgIds;

	if(!m_cfgtree.ItemHasChildren(item)) return ret_ids;
		
	std::string itemType = dhelper_ptr->getElementType(cfgTreeMap[item]);
	HTREEITEM hNextItem;
	HTREEITEM hChildItem = m_cfgtree.GetChildItem(item);
	if(itemType=="Alternative" || itemType=="Optional")
	{
		set<int> tmp_ids = ret_ids;
		ret_ids.clear();
		bool changed = false;
		while (hChildItem != NULL)
		{
			set<int> child_ids = computeConfigList(hChildItem, tmp_ids);
			if(child_ids!=tmp_ids || m_cfgtree.GetCheck(hChildItem))
			{
				ret_ids.insert(child_ids.begin(), child_ids.end());
				changed = true;
			}
			hNextItem = m_cfgtree.GetNextItem(hChildItem, TVGN_NEXT);
			hChildItem = hNextItem;
		}
		if(!changed)
			ret_ids = tmp_ids;
	}
	else
	{
		while (hChildItem != NULL)
		{
			ret_ids = computeConfigList(hChildItem, ret_ids);
			hNextItem = m_cfgtree.GetNextItem(hChildItem, TVGN_NEXT);
			hChildItem = hNextItem;
		}
	}
		
	return ret_ids;
}
コード例 #2
0
LRESULT CDesertConfigDialog::OnTreeViewCheckStateChange(WPARAM wParam, LPARAM lParam) 
{ 
	// Handle message here… 
	for(map<HTREEITEM, int>::iterator i=cfgTreeMap.begin();i!=cfgTreeMap.end();++i)
	{
		HTREEITEM node = (*i).first;
		m_cfgtree.SetItemState(node,0, TVIS_BOLD); 
	}
	
	HTREEITEM  changedItem = (HTREEITEM)lParam; 
	bool check=true;
	if(m_cfgtree.GetCheck(changedItem))
		checkItem(changedItem);
	else
	{
		uncheckItem(changedItem);
		check=false;
	}

	set<int> cfgIds;
	for(long i=0;i<cfgSize;++i)
		cfgIds.insert(i);
	noneChecked = false;
	/*if(!noneChecked) 
		cfgIds.clear();
	updateConfigList(cfgIds);
	updateSize(cfgIds.size());*/

	set<int> valid_ids = computeConfigList(m_cfgTreeRootItem, cfgIds);
	if(!noneChecked) 
		 valid_ids.clear();
	updateConfigList( valid_ids, check);
	int cnt = m_cfglist.GetItemCount();
	int checked=0;
	for(int i=0;i<cnt;++i)
	{
		if(m_cfglist.GetCheck(i))
			checked++;
	}
	updateSize( checked);

	return 0;
}