📄 navigator.cpp
字号:
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 + -