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

📄 alieditorview.cpp

📁 AliEditor_Source code
💻 CPP
📖 第 1 页 / 共 3 页
字号:

	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 + -