📄 navigator.cpp
字号:
SatTPMod* pModNext = (SatTPMod*)theTree.GetItemData(hNextItem);
CString strNext = theTree.GetItemText(hNextItem);
//交换
//1 record
int temp_addr = pHeader->precord[pMod->offset];
pHeader->precord[pMod->offset] = pHeader->precord[pModNext->offset];
pHeader->precord[pModNext->offset] = temp_addr;
//offset of tree item
temp_addr = pMod->offset;
pMod->offset = pModNext->offset;
pModNext->offset = temp_addr;
//string
CString strResl;
int pos = str.Find("TP");
int posn = strNext.Find("TP");
//theTree.SetItemText(hItem, strNext);
strResl = str.Left(pos) + strNext.Right( (strNext.GetLength() - posn) );
theTree.SetItemText(hItem, strResl);
//theTree.SetItemText(hNextItem, str);
strResl = strNext.Left(posn) + str.Right( (str.GetLength() - pos) );
theTree.SetItemText(hNextItem, strResl);
//pData
theTree.SetItemData(hItem, (DWORD)pModNext);
theTree.SetItemData(hNextItem, (DWORD)pMod);
if(pMod->type == SAT_INFO_TYPE)
{
if( theTree.ItemHasChildren(hItem) )
{
SatTPMod* pTempMod;
HTREEITEM hItemChild = theTree.GetChildItem(hItem);
HTREEITEM hItemTemp;
while(hItemChild)
{
hItemTemp = theTree.GetNextItem(hItemChild, TVGN_NEXT);
pTempMod = (SatTPMod*)theTree.GetItemData(hItemChild);
if( pTempMod )
delete pTempMod;
theTree.DeleteItem(hItemChild);
hItemChild = hItemTemp;
}
}
InitTpNodeInfo(hItem, pModNext);
if( theTree.ItemHasChildren(hNextItem) )
{
SatTPMod* pTempMod;
HTREEITEM hItemChild = theTree.GetChildItem(hNextItem);
HTREEITEM hItemTemp;
while(hItemChild)
{
hItemTemp = theTree.GetNextItem(hItemChild, TVGN_NEXT);
pTempMod = (SatTPMod*)theTree.GetItemData(hItemChild);
if( pTempMod )
delete pTempMod;
theTree.DeleteItem(hItemChild);
hItemChild = hItemTemp;
}
}
InitTpNodeInfo(hNextItem, pMod);
}
else if( pMod->type == TP_INFO_TYPE )
{
;
}
else
{
ASSERT(FALSE);
}
theTree.SelectItem(hNextItem);
}
void CNavigator::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
if( g_bNodifySelChange )
return;
CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd();
HTREEITEM hItem = pNMTreeView->itemNew.hItem;
CTreeCtrl &tree = GetTreeCtrl();
SatTPMod *pSatTp = (SatTPMod*)tree.GetItemData(hItem);
//pFrm->GetBackDropView()->SetCurrentView(pSatTp->type);
::SetCursor(g_hCSBusy);
::SetClassLong(GetSafeHwnd(), GCL_HCURSOR, NULL);
CreateModProgMapping(pSatTp);
pFrm->GetEditorView()->UpdateListView(pSatTp);
// if( pSatTp->type <= TP_INFO_TYPE )
// {
// pFrm->GetEditorView()->UpdateListView(pSatTp);
// }
// else if( pSatTp->type == FAVORITE_ROOT_TYPE )
// {
// if( pFrm->m_dbParser.m_pFavoriteGroup )
// {
// //pFrm->GetBackDropView()->UpdateFavoriteGroup(pFrm->m_dbParser.m_pFavoriteGroup);
// }
// }
::SetCursor(g_hCSNormal);
::SetClassLong(GetSafeHwnd(), GCL_HCURSOR, NULL);
}
void CNavigator::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CTreeView::OnRButtonDown(nFlags, point);
CTreeCtrl &theTree = GetTreeCtrl();
UINT uFlags;
HTREEITEM hItem = theTree.HitTest(point, &uFlags);
if(!hItem || !(TVHT_ONITEM & uFlags)) return;
theTree.SelectItem(hItem);
SatTPMod *pSatTpMod = (SatTPMod *)theTree.GetItemData(hItem);
if(!pSatTpMod) return;
HMENU hMenu = LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_SAT_MENU));
int nOrder, nCount;
HTREEITEM hParentItem = NULL;
switch(pSatTpMod->type)
{
case ALL_SERVICES_TYPE:
return;
break;
case LNB_INFO_TYPE:
return;
break;
case ALL_SAT_INFO_TYPE:
EnableMenuItem(hMenu, IDM_EDIT_INFO, MF_GRAYED);
EnableMenuItem(hMenu, IDM_DEL_INFO, MF_GRAYED);
EnableMenuItem(hMenu, IDM_MOVE_UP, MF_GRAYED);
EnableMenuItem(hMenu, IDM_MOVE_DOWN, MF_GRAYED);
// EnableMenuItem(hMenu, IDM_MOVE_INFO, MF_GRAYED);
break;
case TP_INFO_TYPE:
EnableMenuItem(hMenu, IDM_ADD_INFO, MF_GRAYED);
case SAT_INFO_TYPE:
hParentItem = theTree.GetParentItem(hItem);
ASSERT(hParentItem);
nCount = GetChildItemCount(hParentItem);
nOrder = GetItemOrder(hItem);
if(nOrder == 0)
{
EnableMenuItem(hMenu, IDM_MOVE_UP, MF_GRAYED);
}
if(nOrder == nCount - 1)
{
EnableMenuItem(hMenu, IDM_MOVE_DOWN, MF_GRAYED);
}
// if(nCount == 1)
// {
// EnableMenuItem(hMenu, IDM_MOVE_INFO, MF_GRAYED);
// }
break;
// case USERBOX_INFO_TYPE:
// return;
// break;
default:
return;
break;
}
ClientToScreen(&point);
TrackPopupMenuEx(GetSubMenu(hMenu, 0), TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this->m_hWnd, NULL);
}
void CNavigator::OnEditInfo()
{
// TODO: Add your command handler code here
BOOL bRet;
CTreeCtrl &theTree = GetTreeCtrl();
HTREEITEM hItem = theTree.GetSelectedItem();
if(!hItem) return;
SatTPMod *pSatTpMod = (SatTPMod *)theTree.GetItemData(hItem);
if(!pSatTpMod) return;
CAliEditorView *pEditView = ((CMainFrame *)AfxGetMainWnd())->GetEditorView();
if(!pEditView) return;
switch(pSatTpMod->type)
{
case ALL_SERVICES_TYPE:
return;
break;
case LNB_INFO_TYPE:
return;
break;
case ALL_SAT_INFO_TYPE:
break;
case SAT_INFO_TYPE:
bRet = EditSatInfo(pSatTpMod);
if(!bRet) break;
if(pSatTpMod->pNameStr)
{
theTree.SetItemText(hItem, *pSatTpMod->pNameStr);
}
// pEditView->m_dirty_flag = 1;
break;
case TP_INFO_TYPE:
bRet = EditTpInfo(pSatTpMod);
if(!bRet) break;
if(pSatTpMod->pNameStr)
{
theTree.SetItemText(hItem, *pSatTpMod->pNameStr);
}
// pEditView->m_dirty_flag = 1;
break;
// case USERBOX_INFO_TYPE:
// return;
// break;
default:
break;
}
}
void CNavigator::OnAddInfo()
{
// TODO: Add your command handler code here
BOOL bRet;
CTreeCtrl &theTree = GetTreeCtrl();
HTREEITEM hItem = theTree.GetSelectedItem();
if(!hItem) return;
SatTPMod *pSatTpMod = (SatTPMod *)theTree.GetItemData(hItem);
if(!pSatTpMod) return;
// CAliEditorView *pEditView = ((CMainFrame *)AfxGetMainWnd())->GetEditorView();
// if(!pEditView) return;
int count = GetChildItemCount(hItem);
SatTPMod *pNewSatTpMod = NULL;
switch(pSatTpMod->type)
{
case ALL_SERVICES_TYPE:
return;
break;
case LNB_INFO_TYPE:
return;
break;
case ALL_SAT_INFO_TYPE:
pNewSatTpMod = new SatTPMod;
if(!pNewSatTpMod) return;
memset(pNewSatTpMod, 0, sizeof(SatTPMod));
// pNewSatTpMod->sat_id = count + 1;
pNewSatTpMod->nItemFather = hItem;
bRet = AddSatNode(pNewSatTpMod);
if(!bRet)
{
delete pNewSatTpMod;
pNewSatTpMod = NULL;
break;
}
if(pNewSatTpMod->pNameStr)
{
HTREEITEM subItem = theTree.InsertItem(*pNewSatTpMod->pNameStr, hItem);
theTree.SetItemData(subItem, (DWORD)pNewSatTpMod);
}
break;
case SAT_INFO_TYPE:
pNewSatTpMod = new SatTPMod;
if(!pNewSatTpMod) return;
memset(pNewSatTpMod, 0, sizeof(SatTPMod));
pNewSatTpMod->sat_id = pSatTpMod->sat_id;
//pNewSatTpMod->tp_id = count + 1;
pNewSatTpMod->nItemFather = hItem;
pNewSatTpMod->pFatherMod = pSatTpMod;
bRet = AddTpNode(pNewSatTpMod, count);
if(!bRet)
{
delete pNewSatTpMod;
pNewSatTpMod = NULL;
break;
}
if(pNewSatTpMod->pNameStr)
{
HTREEITEM subItem = theTree.InsertItem(*pNewSatTpMod->pNameStr, hItem);
theTree.SetItemData(subItem, (DWORD)pNewSatTpMod);
}
break;
case TP_INFO_TYPE:
break;
// case USERBOX_INFO_TYPE:
// return;
// break;
default:
break;
}
}
void CNavigator::OnDelInfo()
{
// TODO: Add your command handler code here
int type;
HTREEITEM hFather;
CTreeCtrl &theTree = GetTreeCtrl();
HTREEITEM hItem = theTree.GetSelectedItem();
if(!hItem) return;
SatTPMod *pSatTpMod = (SatTPMod *)theTree.GetItemData(hItem);
if(!pSatTpMod) return;
CAliEditorView *pEditView = ((CMainFrame *)AfxGetMainWnd())->GetEditorView();
if(!pEditView) return;
CString strItem = theTree.GetItemText(hItem);
CString strDelInfo;
strDelInfo.Format("Are you sure to delete \" %s \"", strItem);
if( AfxMessageBox(strDelInfo, MB_YESNO) != IDYES )
return;
type = pSatTpMod->type;
hFather = pSatTpMod->nItemFather;
DeleteTreeItem(hItem);
if(type == TP_INFO_TYPE)
{
if(!hFather)
{
AfxMessageBox("Sat item : 0x0");
return;
}
RefreshTpItemName(hFather);
}
}
void CNavigator::OnMoveDown()
{
// TODO: Add your command handler code here
SwitchTwoItem(TVGN_NEXT);
}
void CNavigator::OnMoveUp()
{
// TODO: Add your command handler code here
SwitchTwoItem(TVGN_PREVIOUS);
}
//void CNavigator::OnMoveInfo()
//{
// // TODO: Add your command handler code here
//
//}
void CNavigator::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CTreeCtrl &theTree = GetTreeCtrl();
HTREEITEM hItem = theTree.GetSelectedItem();
if(!hItem)
return;
SatTPMod *pSatTpMod = (SatTPMod *)theTree.GetItemData(hItem);
if(!pSatTpMod)
return;
HTREEITEM hParentItem = theTree.GetParentItem(hItem);
int nOrder = 0;
int nCount = 0;
switch(nChar)
{
case VK_RETURN:
if( pSatTpMod->type == SAT_INFO_TYPE || pSatTpMod->type == TP_INFO_TYPE)
{
OnEditInfo();
}
else if( pSatTpMod->type == FAVORITE_GROUP_TYPE )
{
((CMainFrame*)AfxGetMainWnd())->GetEditorView()->RenameFavGroup();
}
break;
case VK_INSERT:
if( pSatTpMod->type == ALL_SAT_INFO_TYPE || pSatTpMod->type == SAT_INFO_TYPE)
{
OnAddInfo();
}
break;
case VK_DELETE:
if( pSatTpMod->type == SAT_INFO_TYPE || pSatTpMod->type == TP_INFO_TYPE)
{
OnDelInfo();
}
break;
case VK_SUBTRACT:
case 0xbd:
if( pSatTpMod->type == SAT_INFO_TYPE || pSatTpMod->type == TP_INFO_TYPE)
{
ASSERT(hParentItem);
nOrder = GetItemOrder(hItem);
if( nOrder > 0 )
{
OnMoveUp();
}
}
break;
case VK_ADD:
case 0xbb:
if( pSatTpMod->type == SAT_INFO_TYPE || pSatTpMod->type == TP_INFO_TYPE)
{
ASSERT(hParentItem);
nCount = GetChildItemCount(hParentItem);
nOrder = GetItemOrder(hItem);
if( nOrder < nCount -1)
{
OnMoveDown();
}
}
break;
default:
return;
}
CTreeView::OnKeyDown(nChar, nRepCnt, nFlags);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -