📄 alieditorview.cpp
字号:
}
nIndex = m_list.GetItemCount();
}
else
{
ProgMod *pProg = NULL;
pProg = (ProgMod *)m_list.GetItemData(nIndex);
if(!pProg) return;
nMapOffset = pProg->mapping_offset;
pSatTpMod = pProg->pSatTP;
if(!pSatTpMod) return;
}
if(pSatTpMod->type != TP_INFO_TYPE) return;
CProgInfoEdit dlg;
dlg.m_nEditedIndex = nMapOffset;
dlg.m_pSatTp = pSatTpMod;
dlg.m_op_type = InsNode;
if(dlg.DoModal() == IDOK)
{
// UpdateProgNodeInArea(pProg->mapping_offset, pSatTpMod->prog_count - 1, nIndex, pSatTpMod);
//由于All service 和各个卫星上的channel以序号order来区分,这个功能不再需要
// if(pSatTpMod->type == SAT_INFO_TYPE || pSatTpMod->type == TP_INFO_TYPE)
// {
// RearrageHeaderAddr();
// }
// BOOL bRet = RereshSatNodeMappingWithTp(pSatTpMod->nItemFather);
// UpdateAllServiceMappingInfo();
// SetVisitedFlag(ALL_SERVICES_TYPE, 0);
// SetVisitedFlag(SAT_INFO_TYPE, 0);
UpdateListView(pSatTpMod);
SetCurSel(nIndex, TRUE);
//m_dirty_flag = 1;
}
}
void CAliEditorView::OnDelChannel()
{
// TODO: Add your command handler code here
int times;
int nMinIndex = 999999;
SatTPMod *pSatTpMod = NULL;
// SatTPMod *pAllServiceSatTpMod = GetAllServiceSatTPMod();
CListCtrl &m_list = GetListCtrl();
int nCount = m_list.GetItemCount();
POSITION pos = m_list.GetFirstSelectedItemPosition();
if (pos == NULL)
{
TRACE0("No items were selected!\n");
}
else
{
times = 0;
ProgMod *pProgMod = NULL;
while (pos)
{
int nItem = m_list.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
int nIndex = nItem;
if(nIndex == -1)
{
AfxMessageBox("del failed 0");
return;
}
pProgMod = (ProgMod *)m_list.GetItemData(nIndex);
if(!pProgMod)
{
AfxMessageBox("del failed 1");
return;
}
pSatTpMod = pProgMod->pSatTP;
if(!pSatTpMod)
{
AfxMessageBox("del failed 2");
return;
}
if(pProgMod->mapping_offset >= pSatTpMod->prog_count)
{
AfxMessageBox("del failed 3");
return;
}
if(!pSatTpMod->pProgMapping)
{
AfxMessageBox("del failed 4");
return;
}
((CMainFrame*)AfxGetMainWnd())->m_dbParser.m_progheader.precord[pSatTpMod->pProgMapping[pProgMod->mapping_offset]] = -1;
//((CMainFrame*)AfxGetMainWnd())->m_dbParser.m_progheader.rec_num--;
pSatTpMod->pProgMapping[pProgMod->mapping_offset] = -1;//free it in mapping
if(nItem < nMinIndex) nMinIndex = nItem;
times++;
}
UpdateListView(pProgMod->pSatTP);
if( nMinIndex > 0 )
SetCurSel(nMinIndex-1, TRUE);
else if( nCount > times )
{
SetCurSel(0, TRUE);
}
g_bModifyed = true;
}
return;
}
int CAliEditorView::GetProgFieldIndex(char *keysz, BOOL bFull)
{
NodeField **pNode = m_strlines.GetNodeFieldInfo(PROG_NODE, bFull);
if(!pNode) return -1;
int i = 0;
while(pNode[i])
{
if(!strcmp(pNode[i]->name, keysz))
{
return i;
}
i++;
}
return -1;
}
void CAliEditorView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CListView::OnRButtonDown(nFlags, point);
CTreeCtrl &m_TreeCtrl = ((CMainFrame *)AfxGetMainWnd())->GetNavigator()->GetTreeCtrl();
HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
if(!hItem) return;
SatTPMod *pSatTpMod = NULL;
pSatTpMod = (SatTPMod *)m_TreeCtrl.GetItemData(hItem);
if(!pSatTpMod) return;
CListCtrl &m_list = GetListCtrl();
int nIndex = GetCurSel();
UINT uFlags;
int nItem = m_list.HitTest(point, &uFlags);
if( pSatTpMod->type == FAVORITE_ROOT_TYPE)
{
return;
}
else if( pSatTpMod->type == FAVORITE_GROUP_TYPE)
{
HMENU hMenu = LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MENU_FAV));
if( GetCurSel() < 0 )
EnableMenuItem(hMenu, IDM_REMOVEITEM_FAV_GROUP, MF_GRAYED);
ClientToScreen(&point);
TrackPopupMenuEx(GetSubMenu(hMenu, 0), TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this->m_hWnd, NULL);
}
else
{
HMENU hMenu = LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_LIST_MENU));
if(nIndex == -1 || !(TVHT_ONITEM & uFlags))
{
EnableMenuItem(hMenu, IDM_EDIT_CHANNEL, MF_GRAYED);
// EnableMenuItem(hMenu, IDM_INSERT_CHANNEL, MF_GRAYED);
EnableMenuItem(hMenu, IDM_DEL_CHANNEL, MF_GRAYED);
EnableMenuItem(hMenu, IDM_MOVE_UP_CHANNEL, MF_GRAYED);
EnableMenuItem(hMenu, IDM_MOVE_DOWN_CHANNEL, MF_GRAYED);
EnableMenuItem(hMenu, IDM_MOVE_CHANNEL, MF_GRAYED);
EnableMenuItem(hMenu, IDM_SWITCH_CHANNEL, MF_GRAYED);
}
else
{
int count = m_list.GetItemCount();
if(count == 1)
{
EnableMenuItem(hMenu, IDM_MOVE_CHANNEL, MF_GRAYED);
EnableMenuItem(hMenu, IDM_SWITCH_CHANNEL, MF_GRAYED);
}
if(count -1 == nIndex)
{
EnableMenuItem(hMenu, IDM_MOVE_DOWN_CHANNEL, MF_GRAYED);
}
if(0 == nIndex)
{
EnableMenuItem(hMenu, IDM_MOVE_UP_CHANNEL, MF_GRAYED);
}
}
switch(pSatTpMod->type)
{
case ALL_SERVICES_TYPE:
// EnableMenuItem(hMenu, IDM_APPEND_CHANNEL, MF_GRAYED);
EnableMenuItem(hMenu, IDM_INSERT_CHANNEL, MF_GRAYED);
// EnableMenuItem(hMenu, IDM_MOVE_UP_CHANNEL, MF_GRAYED);
// EnableMenuItem(hMenu, IDM_MOVE_DOWN_CHANNEL, MF_GRAYED);
// EnableMenuItem(hMenu, IDM_MOVE_CHANNEL, MF_GRAYED);
// EnableMenuItem(hMenu, IDM_SWITCH_CHANNEL, MF_GRAYED);
break;
case SAT_INFO_TYPE:
// EnableMenuItem(hMenu, IDM_APPEND_CHANNEL, MF_GRAYED);
EnableMenuItem(hMenu, IDM_INSERT_CHANNEL, MF_GRAYED);
// EnableMenuItem(hMenu, IDM_MOVE_UP_CHANNEL, MF_GRAYED);
// EnableMenuItem(hMenu, IDM_MOVE_DOWN_CHANNEL, MF_GRAYED);
// EnableMenuItem(hMenu, IDM_MOVE_CHANNEL, MF_GRAYED);
// EnableMenuItem(hMenu, IDM_SWITCH_CHANNEL, MF_GRAYED);
break;
case ALL_SAT_INFO_TYPE:
case LNB_INFO_TYPE:
// case USERBOX_INFO_TYPE:
return;
case TP_INFO_TYPE:
break;
}
ClientToScreen(&point);
TrackPopupMenuEx(GetSubMenu(hMenu, 0), TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this->m_hWnd, NULL);
}
}
void CAliEditorView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CListView::OnKeyDown(nChar, nRepCnt, nFlags);
BOOL bEdit = TRUE;
BOOL bAppend = TRUE;
BOOL bInsert = TRUE;
BOOL bDelete = TRUE;
BOOL bMoveUp = TRUE;
BOOL bMoveDown = TRUE;
SatTPMod *pSatTpMod = NULL;
CListCtrl &m_list = GetListCtrl();
int nIndex = GetCurSel();
CTreeCtrl &m_TreeCtrl = ((CMainFrame *)AfxGetMainWnd())->GetNavigator()->GetTreeCtrl();
HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
if(!hItem) return;
pSatTpMod = (SatTPMod *)m_TreeCtrl.GetItemData(hItem);
if(!pSatTpMod) return;
int count = m_list.GetItemCount();
if(count == 0) return;
if(count == 1)
{
bMoveUp = FALSE;
bMoveDown = FALSE;
}
if(count -1 == nIndex)
{
bMoveDown = FALSE;
}
if(0 == nIndex)
{
bMoveUp = FALSE;
}
switch(pSatTpMod->type)
{
case ALL_SERVICES_TYPE:
case SAT_INFO_TYPE:
bAppend = FALSE;
bInsert = FALSE;
bMoveUp = FALSE;
bMoveDown = FALSE;
break;
case LNB_INFO_TYPE:
case ALL_SAT_INFO_TYPE:
// case USERBOX_INFO_TYPE:
return;
case TP_INFO_TYPE:
break;
}
// if(nChar == VK_UP)
// {
// int nIndex = GetCurSel();
// if(nIndex>0) SetCurSel(nIndex);
// }
// else if(nChar == VK_DOWN)
// {
// int nIndex = GetCurSel();
// int count = m_list.GetItemCount();
// if (nIndex+1<count)
// SetCurSel(nIndex);
// }
if(nChar == VK_DELETE)
{
if(bDelete) OnDelChannel();
}
else if(nChar == VK_RETURN)
{
OnEditChannel();
}
else if(nChar == VK_INSERT)
{
if(bInsert) OnInsertChannel();
}
else if(nChar == VK_SUBTRACT || nChar == 0xbd)
{
OnMoveUpChannel();
}
else if(nChar == VK_ADD || nChar == 0xbb)
{
OnMoveDownChannel();
}
else if(nChar == VK_DIVIDE)
{
//OnFindChannel();
}
else if(nChar == VK_F3)
{
//FindNextChannel(m_strFind, m_bPartial);
}
}
int CAliEditorView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CListView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
return 0;
}
void CAliEditorView::OnSize(UINT nType, int cx, int cy)
{
CListView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
//this->ScrollToPosition(CPoint::CPoint(0, 0));
}
void CAliEditorView::OnEidtFavGroup()
{
// TODO: Add your command handler code here
CTreeCtrl &m_TreeCtrl = ((CMainFrame *)AfxGetMainWnd())->GetNavigator()->GetTreeCtrl();
HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
if(!hItem)
return;
SatTPMod * pSatTpMod = (SatTPMod *)m_TreeCtrl.GetItemData(hItem);
if(!pSatTpMod)
return;
CDlgFavoriteEdit dlg;
dlg.m_pSatTpMod = pSatTpMod;
if( dlg.DoModal() != IDOK )
return;
g_bModifyed = true;
if( pSatTpMod->pProgMapping )
delete []pSatTpMod->pProgMapping;
pSatTpMod->pProgMapping = ((CMainFrame *)AfxGetMainWnd())->GetNavigator()->GetProgMappingByGroup(&pSatTpMod->prog_count, pSatTpMod->offset);
UpdateListView(pSatTpMod);
}
void CAliEditorView::OnRemoveitemFavGroup()
{
// TODO: Add your command handler code here
CTreeCtrl &m_TreeCtrl = ((CMainFrame *)AfxGetMainWnd())->GetNavigator()->GetTreeCtrl();
HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
if(!hItem)
return;
SatTPMod * pSatTpMod = (SatTPMod *)m_TreeCtrl.GetItemData(hItem);
if(!pSatTpMod || pSatTpMod->offset < 1 || pSatTpMod->offset > 32)
return;
CListCtrl &m_list = GetListCtrl();
// int nIndex = GetCurSel();
// if( nIndex == -1 )
// return;
CDbParser* pdbParser = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
int index_fav = pdbParser->GetProgNodeIndex(PKEYZ_FAV_GROUP, TRUE);
char bufsz[256];
int nBitTrue = 0x00000001 << (pSatTpMod->offset -1);
POSITION pos = m_list.GetFirstSelectedItemPosition();
ProgMod *pProg;
int offset;
while( pos )
{
int nItem = m_list.GetNextSelectedItem(pos);
pProg = (ProgMod *)m_list.GetItemData(nItem);
offset = pSatTpMod->pProgMapping[pProg->mapping_offset];
pdbParser->GetNodeData(PROG_NODE, offset, index_fav, bufsz, 0, TRUE);
//int nFav = pdbParser->GetDataValue(bufsz);
int nFav = atoi(bufsz);
nFav = nFav & (~nBitTrue);//对应的bit置0
sprintf(bufsz, "%u", nFav);
pdbParser->SetNodeData(PROG_NODE, offset, index_fav, bufsz, TRUE);
}
if( pSatTpMod->pProgMapping )
delete []pSatTpMod->pProgMapping;
pSatTpMod->pProgMapping = ((CMainFrame *)AfxGetMainWnd())->GetNavigator()->GetProgMappingByGroup(&pSatTpMod->prog_count, pSatTpMod->offset);
g_bModifyed = true;
UpdateListView(pSatTpMod);
g_bModifyed = true;
}
void CAliEditorView::OnRenameFavGroup()
{
// TODO: Add your command handler code here
RenameFavGroup();
}
void CAliEditorView::RenameFavGroup()
{
CTreeCtrl &TreeCtrl = ((CMainFrame *)AfxGetMainWnd())->GetNavigator()->GetTreeCtrl();
HTREEITEM hItem = TreeCtrl.GetSelectedItem();
if(!hItem)
return;
SatTPMod * pSatTpMod = (SatTPMod *)TreeCtrl.GetItemData(hItem);
if(!pSatTpMod || pSatTpMod->type !=FAVORITE_GROUP_TYPE || pSatTpMod->offset < 1 )
return;
CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd();
chunk_item_list* pFavor = pFrm->m_dbParser.m_pFavoriteGroup;
if( !pFavor )
return;
int offset = pSatTpMod->offset - 1;
CDlgGroupRename dlg;
dlg.m_strName = pFavor->pItems[offset];
if( dlg.DoModal() == IDOK )
{
int len = dlg.m_strName.GetLength() < (pFavor->nItemLen-1) ? dlg.m_strName.GetLength() : (pFavor->nItemLen-1);
memcpy(pFavor->pItems[offset], dlg.m_strName.GetBuffer(0), len);
pFavor->pItems[offset][len] = 0;
TreeCtrl.SetItemText(hItem, pFavor->pItems[offset]);
g_bModifyed = true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -