⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 navigator.cpp

📁 AliEditor_Source code
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	pNodeMapping = new int[count + 1];
	memset(pNodeMapping, -1, sizeof(int) * (count + 1));
	
	char bufsz[1024];
	int i, s;

	for(i = 0, s = 0; i < pdbheader->rec_length, s < count; i++)
	{
		if(pdbheader->precord[i] == -1) continue;
		
		BOOL bRet = pFrm->m_dbParser.GetNodeData(PROG_NODE, i, sat_index, bufsz);//prog
		if(!bRet) continue;

		idv = pFrm->m_dbParser.GetDataValue(bufsz);

		if(idv != sat_id) continue;

//		BOOL Ret = pFrm->m_dbParser.GetNodeData(PROG_NODE, i,tp_index, bufsz);//prog
//		if(!Ret) continue;
//
//		idv = pFrm->m_dbParser.GetDataValue(bufsz);

		if(s < count)	pNodeMapping[s] = i;
		else 
		{
			ASSERT(0);//bug
		}

		s++;
	}

//	BOOL bSuccess = SortProgMapping(pNodeMapping, s);
//	ASSERT(bSuccess);

	return pNodeMapping;
}

//%brief Total program number of a TP
int CNavigator::GetProgCountByTpID(int tp_id, int *pNodeMappingOfSat, int ProgCountOfSat)
{
	int idv;
	int tp_index;
	db_header_t *pdbheader = NULL;

	if(!pNodeMappingOfSat || !ProgCountOfSat) return 0;

	CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd();
	tp_index = pFrm->m_dbParser.GetTpIdIndexOfProgNode();//tp id of prog
	if(tp_index == -1) return 0;

	char bufsz[1024];
	int i, s;

	for(i = 0, s = 0; i < ProgCountOfSat; i++)
	{
		if(pNodeMappingOfSat[i] == -1) break;

		BOOL bRet = pFrm->m_dbParser.GetNodeData(PROG_NODE, pNodeMappingOfSat[i], tp_index, bufsz);//prog
		if(!bRet) continue;

		idv = pFrm->m_dbParser.GetDataValue(bufsz);

		if(idv != tp_id) continue;

		s++;
	}

	return s;
}
//get prog node mapping by tp id
int *CNavigator::GetProgMappingByTpID(int tp_id, int *pNodeMappingOfSat, int ProgCountOfSat)
{
	int idv;
	int tp_index;
	int *pNodeMapping = NULL;
	db_header_t *pdbheader = NULL;

	if(!pNodeMappingOfSat || !ProgCountOfSat) return NULL;
	CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd();

	tp_index = pFrm->m_dbParser.GetTpIdIndexOfProgNode();//tp id of prog
	if(tp_index == -1) return NULL;

	int count = GetProgCountByTpID(tp_id, pNodeMappingOfSat, ProgCountOfSat);//prog count by tp id
	if(count <= 0) return NULL;

	pNodeMapping = new int[count + 1];
	memset(pNodeMapping, -1, sizeof(int) * (count + 1));
	
	char bufsz[1024];
	int i, s;

	for(i = 0, s = 0; i < ProgCountOfSat, s < count; i++)
	{
		if(pNodeMappingOfSat[i] == -1) continue;

		BOOL bRet = pFrm->m_dbParser.GetNodeData(PROG_NODE, pNodeMappingOfSat[i], tp_index, bufsz);//prog
		if(!bRet) continue;

		idv = pFrm->m_dbParser.GetDataValue(bufsz);

		if(idv != tp_id) continue;

		if(s < count)	pNodeMapping[s] = pNodeMappingOfSat[i];//mapping
	//	if(s < count)	pNodeMapping[s] = i;//error
		else 
		{
			ASSERT(0);//bug
		}

		s++;
	}

//	BOOL bSuccess = SortProgMapping(pNodeMapping, s);
//	ASSERT(bSuccess);

	return pNodeMapping;
}
int *CNavigator::GetProgMappingByGroup(int* pCount, int nOffset)
{
	if( nOffset < 0 || nOffset > 32 )
		return NULL;

	int *pNodeMapping = NULL;
	int nCount = 0;
	*pCount = 0;

	CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd();
	int nIndex = pFrm->m_dbParser.GetProgNodeIndex(PKEYZ_FAV_GROUP, TRUE);
	int prog_count = pFrm->m_dbParser.m_progheader.rec_length;
	
	int nFavoriteTarg = 0x00000001 << (nOffset-1);
	int nFavorite;
	char bufsz[64];

	for(int i = 0; i < prog_count; i++)
	{
		pFrm->m_dbParser.GetNodeData(PROG_NODE, i, nIndex, bufsz, 0, TRUE);
		//nFavorite = pFrm->m_dbParser.GetDataValue(bufsz);
		nFavorite = atoi(bufsz);
		if( (nFavorite & nFavoriteTarg) || (nOffset == 0 && nFavorite != 0) )
			nCount++;
	}
	*pCount = nCount;
	if( nCount == 0 )
		return NULL;

	pNodeMapping = new int[nCount + 1];
	memset(pNodeMapping, -1, sizeof(int) * (nCount + 1));
	nCount = 0;
	for(i = 0; i < prog_count; i++)
	{
		pFrm->m_dbParser.GetNodeData(PROG_NODE, i, nIndex, bufsz, 0, TRUE);
		//nFavorite = pFrm->m_dbParser.GetDataValue(bufsz);
		nFavorite = atoi(bufsz);
		if( (nFavorite & nFavoriteTarg) || (nOffset == 0 && nFavorite != 0) )
		{
			pNodeMapping[nCount] = i;
			nCount++;
		}
	}
	return pNodeMapping;
}
void CNavigator::CreateModProgMapping(SatTPMod *pSatTp)
{
	if( pSatTp->type == ALL_SERVICES_TYPE)
	{
		if( pSatTp->pProgMapping )
			delete []pSatTp->pProgMapping;
		pSatTp->prog_count = GetProgCount();
		pSatTp->pProgMapping = GetProgMapping();
	}
	else if(pSatTp->type == ALL_SAT_INFO_TYPE)
	{
		return;
	}
	else if(pSatTp->type == SAT_INFO_TYPE )
	{
		if(pSatTp->pProgMapping)
		{
			delete []pSatTp->pProgMapping;
		}
		pSatTp->prog_count = GetProgCountBySatID(pSatTp->sat_id);
		pSatTp->pProgMapping = GetProgMappingBySatID(pSatTp->sat_id);
	}
	else if(pSatTp->type == TP_INFO_TYPE )
	{
		if( pSatTp->pProgMapping)
		{
			delete []pSatTp->pProgMapping;
			pSatTp->pProgMapping = NULL;
		}
		
		if( pSatTp->pFatherMod->pProgMapping )
		{
			delete []pSatTp->pFatherMod->pProgMapping;
			pSatTp->pFatherMod->pProgMapping = NULL;
		}
		pSatTp->pFatherMod->prog_count = GetProgCountBySatID(pSatTp->pFatherMod->sat_id);
		pSatTp->pFatherMod->pProgMapping = GetProgMappingBySatID(pSatTp->pFatherMod->sat_id);		
		
		pSatTp->prog_count = GetProgCountByTpID(pSatTp->tp_id, pSatTp->pFatherMod->pProgMapping, pSatTp->pFatherMod->prog_count);
		pSatTp->pProgMapping = GetProgMappingByTpID(pSatTp->tp_id, pSatTp->pFatherMod->pProgMapping, pSatTp->pFatherMod->prog_count);
	}
	else if(pSatTp->type == FAVORITE_ROOT_TYPE)
	{
		if( pSatTp->pProgMapping )
			delete []pSatTp->pProgMapping;
		pSatTp->pProgMapping = GetProgMappingByGroup(&pSatTp->prog_count);
	}
	else if(pSatTp->type == FAVORITE_GROUP_TYPE)
	{
		if( pSatTp->pProgMapping)
			delete []pSatTp->pProgMapping;
//		if( pSatTp->pFatherMod->pProgMapping )
//			delete []pSatTp->pFatherMod->pProgMapping;
		pSatTp->pProgMapping = GetProgMappingByGroup(&pSatTp->prog_count, pSatTp->offset);
	}
}
BOOL CNavigator::DeleteTreeItem(HTREEITEM hTreeItem)
{
	CTreeCtrl &m_tree = GetTreeCtrl();

	if(m_tree.ItemHasChildren(hTreeItem))
	{
		HTREEITEM hNextItem;
		HTREEITEM hChildItem = m_tree.GetChildItem(hTreeItem);

		while (hChildItem != NULL)
		{
			hNextItem = m_tree.GetNextItem(hChildItem, TVGN_NEXT);
			
			DeleteTreeItem(hChildItem);

			hChildItem = hNextItem;
		}
	}

	DeleteOneItem(hTreeItem);

	m_tree.DeleteItem(hTreeItem);

	return TRUE;
}
BOOL CNavigator::DeleteOneItem(HTREEITEM hTreeItem)
{
	SatTPMod *pSatTpMod;

	if(!hTreeItem) return FALSE;

	CAliEditorView *pEditView = ((CMainFrame *)AfxGetMainWnd())->GetEditorView();
	if(!pEditView) return FALSE;

	CTreeCtrl &m_tree = GetTreeCtrl();

	pSatTpMod= (SatTPMod *)m_tree.GetItemData(hTreeItem);

	if(pSatTpMod->type == SAT_INFO_TYPE)
	{
		((CMainFrame*)AfxGetMainWnd())->m_dbParser.FreeNode(SAT_NODE, pSatTpMod->offset);
	}
	else if(pSatTpMod->type == TP_INFO_TYPE)
	{
		((CMainFrame*)AfxGetMainWnd())->m_dbParser.FreeNode(TP_NODE, pSatTpMod->offset);
	}
	
	if(pSatTpMod->pNameStr) delete pSatTpMod->pNameStr; 
	pSatTpMod->pNameStr = NULL;

//	if(pSatTpMod->pSatMapping)
//	{
//		for(int i = 0; i < pSatTpMod->sat_count; i++)
//		{
//			if(pSatTpMod->pSatMapping[i] == -1) break;
//			
//			((CMainFrame*)AfxGetMainWnd())->m_dbParser.FreeNode(SAT_NODE, pSatTpMod->pSatMapping[i]);
//		}
//
//		delete[] pSatTpMod->pSatMapping; ///
//
//		pSatTpMod->pSatMapping = NULL;
//	}


//	if(pSatTpMod->pTpMapping)
//	{
//		for(int i = 0; i < pSatTpMod->tp_count; i++)
//		{
//			if(pSatTpMod->pTpMapping[i] == -1) break;
//			
//			((CMainFrame*)AfxGetMainWnd())->m_dbParser.FreeNode(TP_NODE, pSatTpMod->pTpMapping[i]);
//		}
//		
//		delete[] pSatTpMod->pTpMapping; ////
//		
//		pSatTpMod->pTpMapping = NULL;
//	}

	if(pSatTpMod->pProgMapping)
	{
		for(int i = 0; i < pSatTpMod->prog_count; i++)
		{
			if(pSatTpMod->pProgMapping[i] == -1) continue;
			
			((CMainFrame*)AfxGetMainWnd())->m_dbParser.FreeNode(PROG_NODE, pSatTpMod->pProgMapping[i]);
		}
		
		delete[] pSatTpMod->pProgMapping; ///

		pSatTpMod->pProgMapping = NULL;
	}

	delete pSatTpMod;

	//pEditView->m_dirty_flag = 0;
	
	return TRUE;
}

BOOL CNavigator::RefreshTpItemName(HTREEITEM hTreeItem)
{
	CTreeCtrl &theTree = GetTreeCtrl();

	if(!theTree.ItemHasChildren(hTreeItem))
	{
	//	AfxMessageBox("Tp item : 0x0");
		return FALSE;
	}

	SatTPMod *pSatTp = NULL;

	SatTPMod *pSatTpMod = (SatTPMod *)theTree.GetItemData(hTreeItem);
	if(pSatTpMod->type != SAT_INFO_TYPE) return FALSE;

	HTREEITEM hChildItem = theTree.GetChildItem(hTreeItem);

	int count = 1;

	while (hChildItem != NULL)
	{
		CString tmpstr;
		CString strText;

		strText = theTree.GetItemText(hChildItem);

		int pos = strText.Find("TP", 0);
		if(pos > 0)
		{
			strText.Delete(0, pos);

			tmpstr.Format("[ %d ]  ", count);
			tmpstr = tmpstr + strText;

			theTree.SetItemText(hChildItem, tmpstr);

			pSatTp = (SatTPMod *)theTree.GetItemData(hChildItem);
			if(pSatTp)
			{
				if(pSatTp->pNameStr) delete pSatTp->pNameStr;
				pSatTp->pNameStr =  new CString(tmpstr);
			}
		}

		hChildItem = theTree.GetNextItem(hChildItem, TVGN_NEXT);

		count++;
	}

//	theTree.Expand(hTreeItem, TVE_COLLAPSE);
//	theTree.Expand(hTreeItem, TVE_EXPAND);
	
	::SendMessage(this->m_hWnd, WM_MOUSELEAVE, 0, 0);

	return TRUE;
}

BOOL CNavigator::EditSatInfo(SatTPMod *pSatTpMod)
{
	CSatInfoEdit dlg;

	dlg.m_op_type = EditNode;
	dlg.m_pSatTp = pSatTpMod;

	if(dlg.DoModal() == IDOK) return TRUE;
	else return FALSE;
}
BOOL CNavigator::AddSatNode(SatTPMod *pSatTpMod)
{
	CAliEditorView *pEditView = ((CMainFrame *)AfxGetMainWnd())->GetEditorView();
	if(!pEditView) return FALSE;

	CSatInfoEdit dlg;

	pSatTpMod->type = SAT_INFO_TYPE;

	dlg.m_op_type = AddNode;
	dlg.m_pSatTp = pSatTpMod;

	if(dlg.DoModal() == IDOK)
	{
		//pEditView->m_dirty_flag = 1;
		
		return TRUE;
	}

	return FALSE;
}
BOOL CNavigator::EditTpInfo(SatTPMod *pSatTpMod)
{
	CTpInfoEdit dlg;

	dlg.m_op_type = EditNode;
	dlg.m_pSatTp = pSatTpMod;

	if(dlg.DoModal() == IDOK)
	{
		return TRUE;
	}
	
	return FALSE;
}
BOOL CNavigator::AddTpNode(SatTPMod *pSatTpMod, int nCount)
{
	CAliEditorView *pEditView = ((CMainFrame *)AfxGetMainWnd())->GetEditorView();
	if(!pEditView) return FALSE;

	CTpInfoEdit dlg;
	
	pSatTpMod->type = TP_INFO_TYPE;

	dlg.m_op_type = AddNode;
	dlg.m_pSatTp = pSatTpMod;
	dlg.m_nOrder = nCount+1;

	if(dlg.DoModal() == IDOK)
	{
		//pEditView->m_dirty_flag = 1;
		return TRUE;
	}

	return FALSE;
}
void CNavigator::SwitchTwoItem(UINT nCode)
{
	CTreeCtrl &theTree = GetTreeCtrl();
	HTREEITEM hItem = theTree.GetSelectedItem();
	if(!hItem) 
		return;
	SatTPMod* pMod = (SatTPMod*)theTree.GetItemData(hItem);
	CString str = theTree.GetItemText(hItem);
	
	CDbParser *pDb = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
	db_header_t *pHeader = NULL;
	if( pMod->type == SAT_INFO_TYPE )
	{
		pHeader = &pDb->m_satheader;
	}
	else if( pMod->type == TP_INFO_TYPE )
	{
		pHeader = &pDb->m_tpheader;
	}
	else
	{
		return;
	}

	HTREEITEM hNextItem = theTree.GetNextItem(hItem, nCode);
	if(!hNextItem) 
		return;	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -