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

📄 proginfoedit.cpp

📁 AliEditor_Source code
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ProgInfoEdit.cpp : implementation file
//

#include "stdafx.h"
#include "AliEditor.h"
#include "ProgInfoEdit.h"
#include "AliEditorView.h"

#include "MainFrm.h"
#include "StringLine.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CProgInfoEdit dialog//


CProgInfoEdit::CProgInfoEdit(CWnd* pParent /*=NULL*/)
	: CDialog(CProgInfoEdit::IDD, pParent)
{
	//{{AFX_DATA_INIT(CProgInfoEdit)
	m_channel_name = _T("");
	m_pcr_pid = 0;
	m_video_pid = 0;
	m_audio_pid = 0;
	m_audio_pid2 = 0;
	m_audio_pid3 = 0;
	m_program_number = 0;
	//}}AFX_DATA_INIT
	m_op_type = AddNode;
	m_pSatTp = NULL;
	m_prog_offset = -1;

	m_user_mode = CANCEL;
}


void CProgInfoEdit::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CProgInfoEdit)
	DDX_Control(pDX, IDC_FAVORITE_GROUP, m_favor_grp);
	DDX_Control(pDX, IDC_PROGRAM_NUMBER, m_prog_number_ctrl);
	DDX_Control(pDX, IDC_PCR_PID, m_pcr_pid_ctrl);
	DDX_Control(pDX, IDC_AUDIO_PID3, m_audio_pid3_ctrl);
	DDX_Control(pDX, IDC_AUDIO_PID2, m_audio_pid2_ctrl);
	DDX_Control(pDX, IDC_AUDIO_PID, m_audio_pid1_ctrl);
	DDX_Control(pDX, IDC_VIDEO_PID, m_video_pid_ctrl);
	DDX_Control(pDX, IDC_CHANNEL_FACTORY, m_channel_factory);
	DDX_Control(pDX, IDC_CHANNEL_TYPE, m_prog_type);
	DDX_Control(pDX, IDC_CHANNEL_SCRAMBLE, m_prog_scramble);
	DDX_Text(pDX, IDC_CHANNEL_NAME, m_channel_name);
	DDV_MaxChars(pDX, m_channel_name, 17);
	DDX_Text(pDX, IDC_PCR_PID, m_pcr_pid);
	DDX_Text(pDX, IDC_VIDEO_PID, m_video_pid);
	DDX_Text(pDX, IDC_AUDIO_PID, m_audio_pid);
	DDX_Text(pDX, IDC_AUDIO_PID2, m_audio_pid2);
	DDX_Text(pDX, IDC_AUDIO_PID3, m_audio_pid3);
	DDX_Text(pDX, IDC_PROGRAM_NUMBER, m_program_number);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CProgInfoEdit, CDialog)
	//{{AFX_MSG_MAP(CProgInfoEdit)
	ON_WM_CLOSE()
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_CHANNEL_RESET, OnChannelReset)
	ON_CBN_SELCHANGE(IDC_CHANNEL_TYPE, OnSelchangeChannelType)
	ON_EN_CHANGE(IDC_PROGRAM_NUMBER, OnChangeProgramNumber)
	ON_CBN_SELCHANGE(IDC_FAVORITE_GROUP, OnSelchangeFavoriteGroup)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CProgInfoEdit message handlers

BOOL CProgInfoEdit::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	switch(m_op_type)
	{
	case AddNode://add

		m_prog_offset = 0;

		for(m_prog_offset = 0; m_prog_offset < m_pSatTp->prog_count; m_prog_offset++)
		{
			if(m_pSatTp->pProgMapping[m_prog_offset] == -1) break;
		}
		
		AddProgInfo();
		break;

	case InsNode://add
		m_prog_offset = m_nEditedIndex;//m_pProg->mapping_offset;

		AddProgInfo();
		break;

	case EditNode://edit
		m_prog_offset = m_nEditedIndex;//m_pProg->mapping_offset;

		EditProgInfo();
		break;

	default:
		break;
	}

	UpdateData(FALSE);

	m_bmpslist.Create(IDB_BITMAP_MULTICHECK, 16, 0, RGB(0, 255, 0));
	m_favor_grp.SetImageList(&m_bmpslist);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

combox_t type_combox[] =
{
	{1,		"TV"		},
	{0,		"Radio"		},
};

combox_t favor_combox[] =
{
	//{0,		"None"		},
	{1,		"Sport"		},
	{2,		"News"		},
	{4,		"Music"		},
	{8,		"Movie"		},
	{16,	"Shopping"	},
	{32,	"Education"	},
	{64,	"Leisure"	},
};
cook_node_t cook_favor[32];
combox_t favor_tag_combox[] =
{
	{0,		"No"		},
	{1,		"Yes"		},
};

combox_t scramble_combox[] =
{
	{0,		"No"		},
	{1,		"Yes"		},
};

combox_t factory_combox[] =
{
	{0,		"No"		},
	{1,		"Yes"		},
};

void CProgInfoEdit::InitCombox()
{
	int i;

	m_prog_type.ResetContent();
	
	for(i = 0; i < sizeof(type_combox) / sizeof(combox_t); i++)
	{
		m_prog_type.AddString(type_combox[i].bufsz);
		m_prog_type.SetItemData(i, type_combox[i].data);
	}

	m_favor_grp.ResetContent();
	int nItemData;
	COMBOBOXEXITEM comb_item;
	comb_item.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE;
	for(i = 0; i < 32; i++)
	{
		//m_favor_grp.AddString(cook_favor[i].cooksz);
		//nItemData = atoi(cook_favor[i].bufsz);
		//m_favor_grp.SetItemData(i,nItemData);
		comb_item.iItem = i;
		comb_item.iImage = 0;
		comb_item.iSelectedImage = 0;
		comb_item.pszText = cook_favor[i].cooksz;
		int nRet = m_favor_grp.InsertItem(&comb_item);
		nItemData = atoi(cook_favor[i].bufsz);
		m_favor_grp.SetItemData(i, nItemData);
	}

	m_prog_scramble.ResetContent();
	
	for(i = 0; i < sizeof(scramble_combox) / sizeof(combox_t); i++)
	{
		m_prog_scramble.AddString(scramble_combox[i].bufsz);
		m_prog_scramble.SetItemData(i, scramble_combox[i].data);
	}

	m_channel_factory.ResetContent();
	
	for(i = 0; i < sizeof(factory_combox) / sizeof(combox_t); i++)
	{
		m_channel_factory.AddString(factory_combox[i].bufsz);
		m_channel_factory.SetItemData(i, factory_combox[i].data);
	}
}

//const char prog_template_buf[256] =
//{
//	0x00, 0x00, 0xA0, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0xA0, 0x00, 0x00, 0x00, 
//	0x00, 0x00, 0xFF, 0x1F, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
//	0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
//	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//};

void CProgInfoEdit::AddProgInfo()
{
	if(!m_pSatTp) return;

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

	InitCombox();

	m_channel_name = "New Channel";

	if(pEditView->m_av_type == 1)
	{
		m_prog_type.SetCurSel(0);

		m_prog_type.EnableWindow(FALSE);

		m_video_pid = 0;

	}
	else if(pEditView->m_av_type == 0)
	{
		m_prog_type.SetCurSel(1);
		m_prog_type.EnableWindow(FALSE);

		m_video_pid = 8191;
		CWnd *pWnd = GetDlgItem(IDC_VIDEO_PID);
		if(pWnd) pWnd->EnableWindow(FALSE);
	}
	else
	{
		m_prog_type.SetCurSel(0);
		m_prog_type.EnableWindow(TRUE);

		CWnd *pWnd = GetDlgItem(IDC_VIDEO_PID);
		if(pWnd) pWnd->EnableWindow(TRUE);

		m_video_pid = 0;
	}

	m_audio_pid = 0;
	
	m_audio_pid2 = 0;

	m_audio_pid3 = 0;

	m_pcr_pid = 0;

//	m_favor_grp.SetCurSel(0);

//	m_favor_tag.SetCurSel(0);

	m_prog_scramble.SetCurSel(0);

	m_channel_factory.SetCurSel(0);

	m_program_number = 0;
}

void CProgInfoEdit::EditProgInfo()
{
	BOOL bRet;
	char bufsz[64];
	if(!m_pSatTp) return;

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

	InitCombox();

	bRet = GetProgNodeData(PKEYZ_SERVICE_NAME, bufsz);

	if(bRet) m_channel_name = bufsz;

	bRet = GetProgNodeData(PKEYZ_TV_RADIO, bufsz);

	if(bRet)
	{
		long type_val = pEditView->GetDataValue(bufsz);
		int type_sel = GetCurSel(type_combox, sizeof(type_combox) / sizeof(combox_t), type_val);
		if(type_sel != -1) m_prog_type.SetCurSel(type_sel);

		if(type_sel == 1)
		{
			CWnd *pWnd = GetDlgItem(IDC_VIDEO_PID);
			if(pWnd) pWnd->EnableWindow(FALSE);
		}
		else if(type_sel == 0)
		{
			CWnd *pWnd = GetDlgItem(IDC_VIDEO_PID);
			if(pWnd) pWnd->EnableWindow(TRUE);
		}
	}

	if(pEditView->m_av_type == 1)
	{
		m_prog_type.EnableWindow(FALSE);

	}
	else if(pEditView->m_av_type == 0)
	{
		m_prog_type.EnableWindow(FALSE);

		m_video_pid = 8191;
		CWnd *pWnd = GetDlgItem(IDC_VIDEO_PID);
		if(pWnd) pWnd->EnableWindow(FALSE);
	}
	else
	{
		m_prog_type.EnableWindow(TRUE);
	}

	bRet = GetProgNodeData(PKEYZ_VIDEO_PID, bufsz);
	if(bRet) m_video_pid = pEditView->GetDataValue(bufsz);

	bRet = GetProgNodeData(PKEYZ_AUDIO_PID1, bufsz);
	if(bRet)  m_audio_pid = pEditView->GetDataValue(bufsz);

	bRet = GetProgNodeData(PKEYZ_AUDIO_PID2, bufsz);
	if(bRet)  m_audio_pid2 = pEditView->GetDataValue(bufsz);

	bRet = GetProgNodeData(PKEYZ_AUDIO_PID3, bufsz);
	if(bRet)  m_audio_pid3 = pEditView->GetDataValue(bufsz);

	bRet = GetProgNodeData(PKEYZ_PCR_PID, bufsz);
	if(bRet)  m_pcr_pid = pEditView->GetDataValue(bufsz);

	long select_val = 0;
	int selected = 0;
	bRet = GetProgNodeData(PKEYZ_FAV_GROUP, bufsz);
	if(bRet)
	{
		//select_val = pEditView->GetDataValue(bufsz);		
		select_val = atoi(bufsz);
		//selected = GetCurSel(favor_combox, sizeof(favor_combox) / sizeof(combox_t), select_val);
		//if(selected != -1) m_favor_grp.SetCurSel(selected);
		int nCount = m_favor_grp.GetCount();
		int nItemData;
		for(int i = 0; i < nCount; i++)
		{
			nItemData = m_favor_grp.GetItemData(i);
			if( select_val & nItemData )//修改选中的项的image
			{
				COMBOBOXEXITEM comb_item;
				comb_item.mask = CBEIF_IMAGE | CBEIF_SELECTEDIMAGE;
				comb_item.iItem = i;
				BOOL bReturn = m_favor_grp.GetItem(&comb_item);
				comb_item.iImage = 1;
				comb_item.iSelectedImage = 1;
				bReturn = m_favor_grp.SetItem(&comb_item);
			}			
		}
	}

//	bRet = GetProgNodeData(PKEYZ_FAV_GROUP0, bufsz);
//	if(bRet)
//	{
//		select_val = pEditView->GetDataValue(bufsz);
//		selected = GetCurSel(favor_tag_combox, sizeof(favor_tag_combox) / sizeof(combox_t), select_val);
//		if(selected != -1) m_favor_tag.SetCurSel(selected);
//	}

	bRet = GetProgNodeData(PKEYZ_SCRAMBLE, bufsz);
	if(bRet)
	{
		select_val = pEditView->GetDataValue(bufsz);
		selected = GetCurSel(scramble_combox, sizeof(scramble_combox) / sizeof(combox_t), select_val);
		if(selected != -1) m_prog_scramble.SetCurSel(selected);
	}

	bRet = GetProgNodeData(PKEYZ_PRESET_FLAG, bufsz);
	if(bRet)
	{
		select_val = pEditView->GetDataValue(bufsz);
		selected = GetCurSel(factory_combox, sizeof(factory_combox) / sizeof(combox_t), select_val);
		if(selected != -1) m_channel_factory.SetCurSel(selected);
	}

	bRet = GetProgNodeData(PKEYZ_PROG_NUMBER, bufsz);
	if(bRet)  m_program_number = pEditView->GetDataValue(bufsz);

	if(m_program_number)
	{
		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);
	}
}

BOOL CProgInfoEdit::AllocProgNode()
{
	CDbParser *dbParser = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
	CStringLines *pScripter = &((CMainFrame*)AfxGetMainWnd())->GetEditorView()->m_strlines;
	int i;

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

	int node_offset, map_offset;

//	int nMaxOrder;
//	int nAvailOrder = dbParser->FindAvailableOrder(nMaxOrder);
//	int nProgCount = pEditView->GetAllServiceSatTPMod()->GetProgCount();


	char *buf = dbParser->AllocNode(PROG_NODE, &node_offset);
	if(!buf) return FALSE;

	int node_size = pScripter->GetNodeSize(PROG_NODE);

	memcpy(buf, prog_template_buf, node_size);//make template

	//try to find a free position
	for(i = 0; i < m_pSatTp->prog_count; i++)
	{
		if(m_pSatTp->pProgMapping[i] == -1) break;
	}
	
	map_offset = i;

	//if full, create new 64 node mapping position
	if(map_offset == m_pSatTp->prog_count)
	{
		int *pNewProgMapping = new int[m_pSatTp->prog_count + 64];
		ASSERT(pNewProgMapping);

		memset(pNewProgMapping, -1, sizeof(int) * (m_pSatTp->prog_count + 64));

		if(m_pSatTp->pProgMapping)
		{
			memcpy(pNewProgMapping, m_pSatTp->pProgMapping, sizeof(int) * m_pSatTp->prog_count);
		
			delete[] m_pSatTp->pProgMapping;
		}
		
		m_pSatTp->pProgMapping = pNewProgMapping;

		m_pSatTp->prog_count += 64;
	}

	if(map_offset > m_prog_offset)//
	{
		for(i = map_offset; i > m_prog_offset; i--)
		{
			m_pSatTp->pProgMapping[i] = m_pSatTp->pProgMapping[i - 1];
		}

		map_offset = m_prog_offset;
	}
	else if(map_offset < m_prog_offset)
	{
		ASSERT(0);//bug
	}

	m_pSatTp->pProgMapping[map_offset] = node_offset;

	//%todo PrivateData
//	*(short *)(buf+node_size)=(nAvailOrder!= -1) ? nAvailOrder : (short)nMaxOrder+1;
//	*(short *)(buf+node_size)= (short)nMaxOrder+1;

	int *pProgMapping = m_pSatTp->pProgMapping;

//	char *pc1 = NULL;
//	char *pc2 = NULL;
//	short nOrder1 = 0;
//	short nOrder2 = 0;
//
//	for(i = map_offset; i < m_pSatTp->prog_count - 1; i++)
//	{
//		if(pProgMapping[i] == -1 || pProgMapping[i + 1] == -1) break;
//
//		pc1 = dbParser->GetNodePrivateData(PROG_NODE, pProgMapping[i]);
//
//		ASSERT(pc1);
//		if(!pc1) return FALSE;
//
//		memcpy(&nOrder1, pc1, sizeof(short));
//
//		pc2 = dbParser->GetNodePrivateData(PROG_NODE, pProgMapping[i + 1]);
//
//		ASSERT(pc2);
//		if(!pc2) return FALSE;
//
//		memcpy(&nOrder2, pc2, sizeof(short));
//
//		if(nOrder1 > nOrder2)
//		{
//			dbParser->SetNodePrivateData(PROG_NODE, pProgMapping[i], (char *)&nOrder2);
//			dbParser->SetNodePrivateData(PROG_NODE, pProgMapping[i + 1], (char *)&nOrder1);
//				
//		}
//		else if(nOrder1 == nOrder2)
//		{
//			ASSERT(0);
//			AfxMessageBox("Order Error!");
//			return FALSE;
//		};
//	}

	return TRUE;
}

⌨️ 快捷键说明

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