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

📄 navigator.cpp

📁 AliEditor_Source code
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	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 + -