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

📄 alieditorview.cpp

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