📄 alieditorview.cpp
字号:
m_list.SetItem(&lvm);
lvm.iItem = old;
if(!bClearFoucs)
{
lvm.state = 0;
}
else
{
lvm.state = LVIS_FOCUSED ;
// lvm.state = 0 ;
}
m_list.SetItem(&lvm);
lvm.iItem = index;
lvm.state = LVIS_SELECTED | LVIS_FOCUSED;
m_list.SetItem(&lvm);
m_list.EnsureVisible(index, TRUE);
}
void CAliEditorView::DeleteAllProg()
{
CListCtrl& m_list = GetListCtrl();
for(int k = 0; k < m_list.GetItemCount(); k++)
{
ProgMod *pProg = (ProgMod *)m_list.GetItemData(k);
if(pProg)
delete pProg;
}
m_list.DeleteAllItems();
}
void CAliEditorView::InitFavorGroup()
{
chunk_item_list* pGroup = ((CMainFrame*)AfxGetMainWnd())->m_dbParser.m_pFavoriteGroup;
int nGroupData = 1;
CString strKeyValue;
CString strKeyName;
for(int i = 0; i < 32; i++)
{
if( pGroup && pGroup->pItems && i < pGroup->nItemCount && pGroup->pItems[i] )
{
strcpy(cook_favor[i].cooksz, pGroup->pItems[i]);
}
// else if( i < 7 )
// {
// strcpy(cook_favor[i].cooksz,favor_combox[i].bufsz);
// }
else
{
//sprintf(cook_favor[i].cooksz, "Group%d", i+1);
strKeyName.Format("FavGroup%d", i);
strKeyValue = AfxGetApp()->GetProfileString(_T("Project Favor Group"), strKeyName, NULL);
strcpy(cook_favor[i].cooksz, (LPCSTR)strKeyValue);
}
sprintf(cook_favor[i].bufsz, "%d", nGroupData);
nGroupData = ( nGroupData << 1 );
}
}
void CAliEditorView::UpdateListView(SatTPMod *pSatTpMod)
{
DeleteAllProg();
InitFavorGroup();
m_pCurSat = pSatTpMod;
if( !pSatTpMod )
return;
if( pSatTpMod->type == ALL_SAT_INFO_TYPE )
return;
CListCtrl &m_list = GetListCtrl();
m_list.SetRedraw(FALSE);
int count = m_strlines.GetNodeFieldCount(PROG_NODE);
NodeField **pNode = m_strlines.GetNodeFieldInfo(PROG_NODE);
CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd();
int i, j, s, listcount;
char bufsz[1024];
for(i = 0, s = 0; i < pSatTpMod->prog_count; i++)
{
if(pSatTpMod->pProgMapping[i] == -1)
{
continue;
}
//if record is already deleted
if( pFrm->m_dbParser.m_progheader.precord[pSatTpMod->pProgMapping[i]] == -1)
continue;
if(m_av_type != 2)
{
int index = GetProgFieldIndex(PKEYZ_TV_RADIO);
if(index == -1)
{
AfxMessageBox("Error to get service type");
return;
}
BOOL bRet = pFrm->m_dbParser.GetNodeData(PROG_NODE, pSatTpMod->pProgMapping[i], index, bufsz);
if(!bRet) continue;
int typeval = pFrm->m_dbParser.GetDataValue(bufsz);
if(typeval != m_av_type) continue;
}
BOOL bRet = pFrm->m_dbParser.GetNodeData(PROG_NODE, pSatTpMod->pProgMapping[i], 0, bufsz);//first must valid
if(!bRet) continue;
listcount = m_list.GetItemCount();
if(s >= listcount)
{
m_list.DeleteItem(s);
sprintf(bufsz, "%3d", s + 1);
m_list.InsertItem(s, bufsz);
}
int pos = 1;
for(j = 0; j < count; j++)
{
if(!pNode[j]) break;
if(pNode[j]->field_mask) continue;
if(pNode[j]->field_pos == -1) continue;
BOOL bRet = pFrm->m_dbParser.GetNodeData(PROG_NODE, pSatTpMod->pProgMapping[i], j, bufsz);
if(!bRet) continue;
if(!pNode[j]->field_pos)
{
AfxMessageBox("pos 0 error!");
m_list.SetRedraw(TRUE);
return;
//m_list.InsertItem(i, bufsz);
}
else
{
CString str = CookNodeInfo(bufsz, pNode[j]->field_pos);
m_list.SetItemText(s, pos, str);
}
pos++;
}
ProgMod *pProg = new ProgMod;
pProg->mapping_offset = i;
pProg->pSatTP = pSatTpMod;
//pProg->pRelation = pRelation;
m_list.SetItemData(s, (DWORD)pProg);
s++;
}
m_list.SetRedraw(TRUE);
}
void CAliEditorView::UpdateListItem(SatTPMod *pSatTpMod, int index, int offset)
{
CListCtrl &m_list = GetListCtrl();
int count = m_list.GetHeaderCtrl()->GetItemCount() ; //m_list.GetItemCount();
NodeField** pNode = m_strlines.GetNodeFieldInfo(PROG_NODE);
CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd();
int pos = 1;
char bufsz[1024];
for(int i = 0; i < count; i++)
{
if(!pNode[i]) break;
if(pNode[i]->field_mask) continue;
if(pNode[i]->field_pos == -1) continue;
BOOL bRet = pFrm->m_dbParser.GetNodeData(PROG_NODE, pSatTpMod->pProgMapping[offset], i, bufsz);
if(!bRet) continue;
if(!pNode[i]->field_pos)
{
AfxMessageBox("pos 0 error!");
return;
}
else
{
CString str = CookNodeInfo(bufsz, pNode[i]->field_pos);
m_list.SetItemText(index, pos, str);
}
pos++;
}
}
void CAliEditorView::UpdateListViewByType(int type)
{
m_av_type = type;
UpdateListView(m_pCurSat);
}
cook_node_t cook_type[] =
{
{"1", "TV" },
{"0", "Radio" },
};
cook_node_t cook_favor_tag[] =
{
{"0", "No" },
{"1", "Yes" },
};
cook_node_t cook_scram[] =
{
{"0", "No" },
{"1", "Yes" },
};
cook_node_t cook_factory[] =
{
{"0", "No" },
{"1", "Yes" },
};
char *CAliEditorView::GetCookBuffer(cook_node_t *pcnt, int count, char *bufsz)
{
char *cooksz = NULL;
for(int i = 0; i < count; i++)
{
if(!strcmp(pcnt[i].bufsz, bufsz))
{
cooksz = pcnt[i].cooksz;
break;
}
}
return cooksz;
}
void CAliEditorView::GetGroupCount(char *bufsz)
{
//int nGroup = GetDataValue(bufsz);
int nGroup = atoi(bufsz);
int nCount = 0;
for(int i = 0; i < 32; i++)
{
if( nGroup & 0x00000001 )
{
nCount++;
}
nGroup = (nGroup >> 1);
}
sprintf(bufsz, "%d", nCount);
}
CString CAliEditorView::CookNodeInfo(char *bufsz, int offset)
{
char *cooksz = NULL;
switch(offset)
{
case 1:
cooksz = bufsz;
break;
case 2:
cooksz = GetCookBuffer(cook_type, sizeof(cook_type) / sizeof(cook_node_t), bufsz);
break;
case 3:
case 4:
case 5:
case 6:
case 7:
cooksz = bufsz;
break;
case 9:
//cooksz = GetCookBuffer(cook_favor, sizeof(cook_favor) / sizeof(cook_node_t), bufsz);
GetGroupCount(bufsz);
cooksz = bufsz;
break;
case 10:
cooksz = GetCookBuffer(cook_favor_tag, sizeof(cook_favor_tag) / sizeof(cook_node_t), bufsz);
break;
case 11:
cooksz = GetCookBuffer(cook_scram, sizeof(cook_scram) / sizeof(cook_node_t), bufsz);
break;
case 12:
cooksz = GetCookBuffer(cook_factory, sizeof(cook_factory) / sizeof(cook_node_t), bufsz);
break;
default:
cooksz = bufsz;
break;
}
if(!cooksz) return "";
CString str(cooksz);
return str;
}
BOOL CAliEditorView::EditChannel()
{
CListCtrl &m_list = GetListCtrl();
int nIndex = GetCurSel();
if(nIndex == -1) return FALSE;
ProgMod *pProg = (ProgMod *)m_list.GetItemData(nIndex);
if(!pProg) return FALSE;
CProgInfoEdit dlg;
dlg.m_nEditedIndex = pProg->mapping_offset;
dlg.m_pSatTp = pProg->pSatTP;
dlg.m_op_type = EditNode;
if(dlg.DoModal() == IDOK)
{
//UpdateProgNodeOnlyOne(pProg->mapping_offset, nIndex, pProg->pSatTP);
UpdateListItem(pProg->pSatTP, nIndex, pProg->mapping_offset);
}
return TRUE;
}
void CAliEditorView::OnEditChannel()
{
// TODO: Add your command handler code here
EditChannel();
}
void CAliEditorView::OnMoveChannel()
{
// TODO: Add your command handler code here
CListCtrl &m_list = GetListCtrl();
int nCount = m_list.GetItemCount();
int item = GetCurSel();
if( item < 0 || item > nCount -1 )
return;
CMovePos dlg;
if( dlg.DoModal() == IDOK )
{
dlg.m_other_index--;
if( dlg.m_other_index < 0 || dlg.m_other_index > nCount -1 || dlg.m_other_index == item )
{
return;
}
ProgMod *pMod = (ProgMod*)m_list.GetItemData(item);
ProgMod *pModTarget = (ProgMod*)m_list.GetItemData(dlg.m_other_index);
SatTPMod *pSatTpMod = pMod->pSatTP;
int nOldIndex = pSatTpMod->pProgMapping[pMod->mapping_offset];
int nNewIndex = pSatTpMod->pProgMapping[pModTarget->mapping_offset];
CDbParser *pParser = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
int nAddrSave = -1;
if( nOldIndex > nNewIndex )
{
nAddrSave = pParser->m_progheader.precord[nOldIndex];
for(int i = nOldIndex; i > nNewIndex; i--)
{
pParser->m_progheader.precord[i] = pParser->m_progheader.precord[i-1];
}
pParser->m_progheader.precord[nNewIndex] = nAddrSave;
}
else
{
nAddrSave = pParser->m_progheader.precord[nOldIndex];
for(int i = nOldIndex; i < nNewIndex; i++)
{
pParser->m_progheader.precord[i] = pParser->m_progheader.precord[i+1];
}
pParser->m_progheader.precord[nNewIndex] = nAddrSave;
}
((CMainFrame*)AfxGetMainWnd())->GetNavigator()->CreateModProgMapping(pSatTpMod);
UpdateListView(pSatTpMod);
SetCurSel(dlg.m_other_index, TRUE);
g_bModifyed = true;
}
}
BOOL CAliEditorView::SwitchChannel(int nItem, int nItemTarget)
{
if( nItem < 0 || nItemTarget < 0 )
return FALSE;
CListCtrl &m_list = GetListCtrl();
ProgMod *pMod = (ProgMod*)m_list.GetItemData(nItem);
ProgMod *pModTarget = (ProgMod*)m_list.GetItemData(nItemTarget);
SatTPMod *pSatTpMod = pMod->pSatTP;
int nOff1 = pMod->mapping_offset;
int nOff2 = pModTarget->mapping_offset;
if( nOff1 == -1 || nOff2 == -1 )
return FALSE;
CDbParser *pParser = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
if( pSatTpMod->pProgMapping[nOff1] >= pParser->m_progheader.rec_length ||
pSatTpMod->pProgMapping[nOff2] >= pParser->m_progheader.rec_length )
return FALSE;
int nTempAddr = pParser->m_progheader.precord[pSatTpMod->pProgMapping[nOff1]];
pParser->m_progheader.precord[pSatTpMod->pProgMapping[nOff1]] = pParser->m_progheader.precord[pSatTpMod->pProgMapping[nOff2]];
pParser->m_progheader.precord[pSatTpMod->pProgMapping[nOff2]] = nTempAddr;
//UpdateListView(pSatTpMod);
UpdateListItem(pSatTpMod, nItem, pMod->mapping_offset);
UpdateListItem(pSatTpMod, nItemTarget, pModTarget->mapping_offset);
SetCurSel(nItemTarget, TRUE);
g_bModifyed = true;
return TRUE;
}
void CAliEditorView::OnMoveUpChannel()
{
// TODO: Add your command handler code here
int item = GetCurSel();
if(item < 1 )
return;
SwitchChannel(item, item -1);
}
void CAliEditorView::OnMoveDownChannel()
{
// TODO: Add your command handler code here
CListCtrl &m_list = GetListCtrl();
int nCount = m_list.GetItemCount();
int item = GetCurSel();
if( item < 0 || item >= nCount -1)
return;
SwitchChannel(item, item+1);
}
void CAliEditorView::OnSwitchChannel()
{
// TODO: Add your command handler code here
CListCtrl &m_list = GetListCtrl();
int nCount = m_list.GetItemCount();
int item = GetCurSel();
if( item < 0 || item > nCount -1 )
return;
CMovePos dlg;
if( dlg.DoModal() == IDOK )
{
dlg.m_other_index--;
if( dlg.m_other_index < 0 || dlg.m_other_index > nCount -1 || dlg.m_other_index == item )
{
return;
}
SwitchChannel(item, dlg.m_other_index);
}
}
void CAliEditorView::OnInsertChannel()
{
// TODO: Add your command handler code here
SatTPMod *pSatTpMod = NULL;
CListCtrl &m_list = GetListCtrl();
int nMapOffset = 0;//新建Item的mapping offset
int nIndex = GetCurSel();
if(nIndex == -1)
{
// OnAppendChannel();
CTreeCtrl &m_TreeCtrl = ((CMainFrame *)AfxGetMainWnd())->GetNavigator()->GetTreeCtrl();
HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
if(!hItem) return;
pSatTpMod = (SatTPMod *)m_TreeCtrl.GetItemData(hItem);
if(!pSatTpMod) return;
//Append
for(nMapOffset = pSatTpMod->prog_count; nMapOffset > 0; nMapOffset--)
{
if( pSatTpMod->pProgMapping[nMapOffset-1] != -1 )
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -