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

📄 proginfoedit.cpp

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

void CProgInfoEdit::SaveProgInfo()
{
	char bufsz[64];
	int index, seleted;
	
	if(!m_pSatTp) return;

	UpdateData();

	if(m_op_type == AddNode || m_op_type == InsNode) AllocProgNode();

	if((m_pSatTp->type == TP_INFO_TYPE) && (m_op_type == AddNode || m_op_type == InsNode))
	{
		index = GetProgNodeIndex(PKEYZ_TP_ID);
		if(index != -1)
		{
			sprintf(bufsz, "%d", m_pSatTp->tp_id);
			BOOL bRet = SetProgNodeData(PKEYZ_TP_ID, bufsz);
		}
	}
	if((m_pSatTp->type == SAT_INFO_TYPE || m_pSatTp->type == TP_INFO_TYPE) && (m_op_type == AddNode || m_op_type == InsNode))
	{
		index = GetProgNodeIndex(PKEYZ_SAT_ID);
		if(index != -1)
		{
			sprintf(bufsz, "%d", m_pSatTp->sat_id);
			BOOL bRet = SetProgNodeData(PKEYZ_SAT_ID, bufsz);
		}
	}

	CDbParser *pDbparser = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
	int temp_offset = GetProgNodeOffset();
	if(m_op_type == AddNode || m_op_type == InsNode)//make prog_id
	{
		
		int index_sat = pDbparser->GetProgNodeIndex(PKEYZ_SAT_ID, TRUE);
		int index_tp = pDbparser->GetProgNodeIndex(PKEYZ_TP_ID, TRUE);
		index = pDbparser->GetProgNodeIndex(PKEYZ_PROG_ID, TRUE);				
		int prog_id = pDbparser->AllocPID(PROG_NODE, m_pSatTp);//temp solution
//		prog_id |= m_pSatTp->sat_id << (NODE_ID_PG_BIT+NODE_ID_TP_BIT);
//		prog_id |= m_pSatTp->tp_id << NODE_ID_PG_BIT;
//		sprintf(bufsz, "%d", prog_id);
//		pDbparser->SetNodeData(PROG_NODE, temp_offset, index, bufsz, TRUE);
		sprintf(bufsz, "%d", m_pSatTp->sat_id);
		pDbparser->SetNodeData(PROG_NODE, temp_offset, index_sat, bufsz, TRUE);
		sprintf(bufsz, "%d", m_pSatTp->tp_id);
		pDbparser->SetNodeData(PROG_NODE, temp_offset, index_tp, bufsz, TRUE);
		sprintf(bufsz, "%d", prog_id);
		pDbparser->SetNodeData(PROG_NODE, temp_offset, index, bufsz, TRUE);
	}

	index = GetProgNodeIndex(PKEYZ_SERVICE_NAME);
	if(index != -1)
	{
		CDbParser *pDbparser = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
		index = pDbparser->GetProgNodeIndex(PKEYZ_NAME_LEN, TRUE);
		int temp_offset = GetProgNodeOffset();
		
		int nNameLen = m_channel_name.GetLength()*2;
		sprintf(bufsz, "%d", nNameLen);
		pDbparser->SetNodeData(PROG_NODE, temp_offset, index, bufsz, TRUE);
		BOOL bRet = SetProgNodeData(PKEYZ_SERVICE_NAME, (char *)(LPCSTR)m_channel_name);
	}
	
	index = GetProgNodeIndex(PKEYZ_TV_RADIO);
	if(index != -1)
	{
		seleted = m_prog_type.GetCurSel();

		long type_val = m_prog_type.GetItemData(seleted);
		sprintf(bufsz, "%d", type_val);

		BOOL bRet = SetProgNodeData(PKEYZ_TV_RADIO, bufsz);
	}

	index = GetProgNodeIndex(PKEYZ_VIDEO_PID);
	if(index != -1)
	{
		sprintf(bufsz, "%d", m_video_pid);

		BOOL bRet = SetProgNodeData(PKEYZ_VIDEO_PID, bufsz);
	}

	int nAudioPIDCount = 1;

	index = GetProgNodeIndex(PKEYZ_AUDIO_PID1);
	if(index != -1)
	{
		if((m_audio_pid < 32 || m_audio_pid > 8191) && m_audio_pid)
		{
			AfxMessageBox("Audio Pid1 invalid");
			m_audio_pid = 0;
		}

		sprintf(bufsz, "%d", m_audio_pid);

		BOOL bRet = SetProgNodeData(PKEYZ_AUDIO_PID1, bufsz);
	}

	index = GetProgNodeIndex(PKEYZ_AUDIO_PID2);
	if(index != -1)
	{
		if((m_audio_pid2 < 32 || m_audio_pid2 > 8191) && m_audio_pid2)
		{
			AfxMessageBox("Audio Pid2 invalid");
			m_audio_pid2 = 0;
		}

		sprintf(bufsz, "%d", m_audio_pid2);

		BOOL bRet = SetProgNodeData(PKEYZ_AUDIO_PID2, bufsz);
		nAudioPIDCount++;
	}

	index = GetProgNodeIndex(PKEYZ_AUDIO_PID3);
	if(index != -1)
	{
		if((m_audio_pid3 < 32 || m_audio_pid3 > 8191) && m_audio_pid3)
		{
			AfxMessageBox("Audio Pid3 invalid");
			m_audio_pid3 = 0;
		}

		sprintf(bufsz, "%d", m_audio_pid3);

		BOOL bRet = SetProgNodeData(PKEYZ_AUDIO_PID3, bufsz);
		nAudioPIDCount++;
	}

	index = pDbparser->GetProgNodeIndex(PKEYZ_AUDIO_COUNT, TRUE);
	if( index != -1 )
	{
		sprintf(bufsz, "%d", nAudioPIDCount);
		BOOL bRet = pDbparser->SetNodeData(PROG_NODE, temp_offset, index, bufsz, TRUE);
	}

	index = GetProgNodeIndex(PKEYZ_PCR_PID);
	if(index != -1)
	{
		sprintf(bufsz, "%d", m_pcr_pid);

		BOOL bRet = SetProgNodeData(PKEYZ_PCR_PID, bufsz);
	}

	index = GetProgNodeIndex(PKEYZ_FAV_GROUP);
	if(index != -1)
	{
//		seleted = m_favor_grp.GetCurSel();
//
//		long favor_val = m_favor_grp.GetItemData(seleted);
		int nCount = m_favor_grp.GetCount();
		long favor_val = 0;
		COMBOBOXEXITEM comb_item;
		int itemdata;
		for(int i = 0; i < nCount; i++)
		{
			comb_item.mask = CBEIF_IMAGE | CBEIF_SELECTEDIMAGE;
			comb_item.iItem = i;
			m_favor_grp.GetItem(&comb_item);
			if( comb_item.iImage == 1)//selected
			{
				itemdata = m_favor_grp.GetItemData(i);
				favor_val = favor_val | itemdata;
			}
		}
		
		sprintf(bufsz, "%u", favor_val);		

		BOOL bRet = SetProgNodeData(PKEYZ_FAV_GROUP, bufsz);
	}

//	index = GetProgNodeIndex(PKEYZ_FAV_GROUP0);
//	if(index != -1)
//	{
//		seleted = m_favor_tag.GetCurSel();
//
//		long favor_tag = m_favor_tag.GetItemData(seleted);
//		sprintf(bufsz, "%d", favor_tag);
//
//		BOOL bRet = SetProgNodeData(PKEYZ_FAV_GROUP0, bufsz);
//	}

	index = GetProgNodeIndex(PKEYZ_SCRAMBLE);
	if(index != -1)
	{
		seleted = m_prog_scramble.GetCurSel();

		long scram_val = m_prog_scramble.GetItemData(seleted);
		sprintf(bufsz, "%d", scram_val);

		BOOL bRet = SetProgNodeData(PKEYZ_SCRAMBLE, bufsz);
	}

	index = GetProgNodeIndex(PKEYZ_PRESET_FLAG);
	if(index != -1)
	{
		seleted = m_channel_factory.GetCurSel();

		long factory_val = m_channel_factory.GetItemData(seleted);
		sprintf(bufsz, "%d", factory_val);

		BOOL bRet = SetProgNodeData(PKEYZ_PRESET_FLAG, bufsz);
	}

	index = GetProgNodeIndex(PKEYZ_PROG_NUMBER);
	if(index != -1)
	{
		sprintf(bufsz, "%d", m_program_number);

		BOOL bRet = SetProgNodeData(PKEYZ_PROG_NUMBER, bufsz);
	}
	g_bModifyed = true;
}

int CProgInfoEdit::GetCurSel(combox_t *pcmt, int count, DWORD data)
{
	int sel = -1;
	for(int i = 0; i < count; i++)
	{
		if(pcmt[i].data == data) 
		{
			sel = i;
			break;
		}
	}

	return sel;
}

BOOL CProgInfoEdit::SetProgNodeData(const char*keysz, char*bufsz)
{
	CDbParser *dbParser = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
	int index, offset;
	if(m_prog_offset == -1) return FALSE;

	index = GetProgNodeIndex(keysz);
	if(index == -1) return FALSE;

	CAliEditorView *pEditView = ((CMainFrame *)AfxGetMainWnd())->GetEditorView();
	if(!pEditView) return FALSE;

	offset = GetProgNodeOffset();
	if(offset == -1) return FALSE;

	return dbParser->SetNodeData(PROG_NODE, offset, index, bufsz);
}

BOOL CProgInfoEdit::GetProgNodeData(const char*keysz, char*bufsz)
{
	CDbParser *dbParser = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
	int index, offset;
	if(m_prog_offset == -1) return FALSE;

	index = GetProgNodeIndex(keysz);
	if(index == -1) return FALSE;

	CAliEditorView *pEditView = ((CMainFrame *)AfxGetMainWnd())->GetEditorView();
	if(!pEditView) return FALSE;

	offset = GetProgNodeOffset();
	if(offset == -1) return FALSE;

	return dbParser->GetNodeData(PROG_NODE, offset, index, bufsz);
}

int CProgInfoEdit::GetProgNodeIndex(const char *keysz)
{
	CDbParser *dbParser = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
	return dbParser->GetProgNodeIndex(keysz, FALSE);
//	if(!keysz) return -1;
//
//	CAliEditorView *pEditView = ((CMainFrame *)AfxGetMainWnd())->GetEditorView();
//	if(!pEditView) return -1;
//
//	NodeField **pProgNode = pEditView->m_strlines.GetNodeFieldInfo(PROG_NODE);
//	if(!pProgNode) return -1;
//
//	return pEditView->GetIndexOfNodeInfo(pProgNode, keysz);
}

int CProgInfoEdit::GetProgNodeOffset()
{
	if(!m_pSatTp) return -1;

	if(m_pSatTp->prog_count <= m_prog_offset) return -1;
	
	if(!m_pSatTp->pProgMapping) return -1;

	return m_pSatTp->pProgMapping[m_prog_offset];
}

BOOL CProgInfoEdit::CheckPara()
{
	CEdit *pEdit = NULL;

	if(!UpdateData()) return FALSE;

	if(m_channel_name.IsEmpty())
	{
		AfxMessageBox("Empty channel name!");
		return FALSE;
	}

	if(m_program_number) return TRUE;

	int type_sel = m_prog_type.GetCurSel();

	if(type_sel == 0)
	{
		if((m_video_pid < 32 || m_video_pid > 8190))
		{
			AfxMessageBox("Video Pid: [32,  8190]");

			pEdit = (CEdit *)GetDlgItem(IDC_VIDEO_PID);
			ASSERT(pEdit);

			pEdit->SetFocus();
			pEdit->SetSel(0, - 1, TRUE);

			return FALSE;
		}
	}
	else
	{
		if((m_video_pid < 32 || m_video_pid > 8191))
		{
			AfxMessageBox("Video Pid: [32,  8191]");

			pEdit = (CEdit *)GetDlgItem(IDC_VIDEO_PID);
			ASSERT(pEdit);

			pEdit->SetFocus();
			pEdit->SetSel(0, - 1, TRUE);

			return FALSE;
		}
	}

	if((m_audio_pid < 32 || m_audio_pid > 8191))
	{
		AfxMessageBox("Audio Pid1:  [32,  8191]");

		pEdit = (CEdit *)GetDlgItem(IDC_AUDIO_PID);
		ASSERT(pEdit);

		pEdit->SetFocus();
		pEdit->SetSel(0, - 1, TRUE);

		return FALSE;
	}
	if((m_audio_pid3 || m_audio_pid2) && (m_audio_pid2 < 32 || m_audio_pid2 > 8191))
	{
		AfxMessageBox("Audio Pid2:  0 or [32,  8191]");

		pEdit = (CEdit *)GetDlgItem(IDC_AUDIO_PID2);
		ASSERT(pEdit);

		pEdit->SetFocus();
		pEdit->SetSel(0, - 1, TRUE);

		return FALSE;
	}
	if(m_audio_pid3 && (m_audio_pid3 < 32 || m_audio_pid3 > 8191))
	{
		AfxMessageBox("Audio Pid3:  0 or [32,  8191]");

		pEdit = (CEdit *)GetDlgItem(IDC_AUDIO_PID3);
		ASSERT(pEdit);

		pEdit->SetFocus();
		pEdit->SetSel(0, - 1, TRUE);

		return FALSE;
	}

	if((m_pcr_pid < 32 || m_pcr_pid > 8191))
	{
		AfxMessageBox("PCR Pid: [32,  8191]");

		pEdit = (CEdit *)GetDlgItem(IDC_PCR_PID);
		ASSERT(pEdit);

		pEdit->SetFocus();
		pEdit->SetSel(0, - 1, TRUE);

		return FALSE;
	}

	return TRUE;
}

void CProgInfoEdit::OnOK() 
{
	// TODO: Add extra validation here
	if(!CheckPara()) return;

	m_user_mode = OK;
	
	CDialog::OnOK();
}

void CProgInfoEdit::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	m_user_mode = CLOSE;

	CDialog::OnClose();
}

void CProgInfoEdit::OnDestroy() 
{
	if(m_user_mode == OK) SaveProgInfo();
	
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
}

void CProgInfoEdit::OnCancel() 
{
	// TODO: Add extra cleanup here
	m_user_mode = CANCEL;

	CDialog::OnCancel();
}

void CProgInfoEdit::OnChannelReset() 
{
	// TODO: Add your control notification handler code here
	if(m_op_type == AddNode || m_op_type == InsNode) AddProgInfo();
	else EditProgInfo();
	
	UpdateData(FALSE);
}

void CProgInfoEdit::OnSelchangeChannelType() 
{
	// TODO: Add your control notification handler code here

	CAliEditorView *pEditView = ((CMainFrame *)AfxGetMainWnd())->GetEditorView();
	if(!pEditView) return;
	
	CWnd *pWnd = GetDlgItem(IDC_VIDEO_PID);

	BOOL bRet;
	char bufsz[64];
	if(m_prog_type.GetCurSel() == 0)//TV
	{
		if(pWnd)
		{
			bRet = GetProgNodeData(PKEYZ_VIDEO_PID, bufsz);
			if(bRet) pWnd->SetWindowText(bufsz);
			
			pWnd->EnableWindow(TRUE);
		}
	}
	else
	{
		if(pWnd)
		{
			pWnd->SetWindowText("8191");
			pWnd->EnableWindow(FALSE);
		}
	}
}

void CProgInfoEdit::OnChangeProgramNumber() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	CString str;
	CStringLines m_strlines;
	m_prog_number_ctrl.GetWindowText(str);
	long val = m_strlines.GetDigitValue(str);
	if(val)
	{
		m_video_pid_ctrl.EnableWindow(FALSE);
		m_audio_pid1_ctrl.EnableWindow(FALSE);
		m_audio_pid2_ctrl.EnableWindow(FALSE);
		m_audio_pid3_ctrl.EnableWindow(FALSE);
		m_pcr_pid_ctrl.EnableWindow(FALSE);
	}
	else
	{
		m_video_pid_ctrl.EnableWindow();
		m_audio_pid1_ctrl.EnableWindow();
		m_audio_pid2_ctrl.EnableWindow();
		m_audio_pid3_ctrl.EnableWindow();
		m_pcr_pid_ctrl.EnableWindow();
	}
}

void CProgInfoEdit::OnSelchangeFavoriteGroup() 
{
	// TODO: Add your control notification handler code here
	int i = m_favor_grp.GetCurSel();
	
	COMBOBOXEXITEM comb_item;
	comb_item.mask = CBEIF_IMAGE | CBEIF_SELECTEDIMAGE;
	comb_item.iItem = i;
	BOOL bReturn = m_favor_grp.GetItem(&comb_item);
	if( comb_item.iImage == 1)
	{
		comb_item.iImage = 0;
		comb_item.iSelectedImage = 0;
	}
	else
	{
		comb_item.iImage = 1;
		comb_item.iSelectedImage = 1;
	}	
	bReturn = m_favor_grp.SetItem(&comb_item);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -