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

📄 mainfrm.cpp

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		switch (info.od_type) {		case GF_STREAM_AUDIO:			pMenu = pSelect->GetSubMenu(0);			if (!info.owns_service) sprintf(szLabel, "Audio #%d", pMenu->GetMenuItemCount() + 1);			pMenu->AppendMenu(MF_ENABLED, ID_SELOBJ_0 + i, szLabel);			break;		case GF_STREAM_VISUAL:			pMenu = pSelect->GetSubMenu(1);			if (!info.owns_service) sprintf(szLabel, "Video #%d", pMenu->GetMenuItemCount() + 1);			pMenu->AppendMenu(MF_ENABLED, ID_SELOBJ_0 + i, szLabel);			break;		case GF_STREAM_TEXT:			nb_subs ++;			pMenu = pSelect->GetSubMenu(2);			if (!info.owns_service) sprintf(szLabel, "Subtitle #%d", pMenu->GetMenuItemCount() + 1);			pMenu->AppendMenu(MF_ENABLED, ID_SELOBJ_0 + i, szLabel);			break;		}	}	if (m_bFirstStreamQuery) {		m_bFirstStreamQuery = 0;		if (!nb_subs && app->m_LookForSubtitles) LookForSubtitles();	}}BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam){	int ID = LOWORD(wParam);	WinGPAC *app = GetApp();	if ( (ID>=ID_VP_0) && (ID<=ID_VP_0+nb_viewpoints)) {		ID -= ID_VP_0;		gf_term_set_viewpoint(app->m_term, ID+1, NULL);		return TRUE;	}	if ( (ID>=ID_NAV_PREV_0) && (ID<=ID_NAV_PREV_9)) {		ID -= ID_NAV_PREV_0;		s32 prev = m_pPlayList->m_cur_entry - ID;		if (prev>=0) {			m_pPlayList->m_cur_entry = prev;			m_pPlayList->PlayPrev();		}		return TRUE;	}	if ( (ID>=ID_NAV_NEXT_0) && (ID<=ID_NAV_NEXT_9)) {		ID -= ID_NAV_NEXT_0;		u32 next = m_pPlayList->m_cur_entry + ID;		if (next < gf_list_count(m_pPlayList->m_entries) ) {			m_pPlayList->m_cur_entry = next;			m_pPlayList->PlayNext();		}		return TRUE;	}	if ( (ID>=ID_SELOBJ_0) && (ID<=ID_SELOBJ_9)) {		ID -= ID_SELOBJ_0;		GF_ObjectManager *root_od = gf_term_get_root_object(app->m_term);		if (!root_od) return TRUE;		GF_ObjectManager *odm = gf_term_get_object(app->m_term, root_od, ID);		gf_term_select_object(app->m_term, odm);		return TRUE;	}	if ( (ID>=ID_SETCHAP_FIRST) && (ID<=ID_SETCHAP_LAST)) {		ID -= ID_SETCHAP_FIRST;		gf_term_play_from_time(app->m_term, (u32) (1000*m_chapters_start[ID]), 0);		return TRUE;	}	return CFrameWnd::OnCommand(wParam, lParam);}void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT ID, BOOL bSys){	WinGPAC *app = GetApp();	/*viewport list*/	if (pPopupMenu->GetMenuItemID(0)==ID_VP_0) {		for (int i=0; i<nb_viewpoints; i++) {			const char *szName;			Bool bound;			GF_Err e = gf_term_get_viewpoint(app->m_term, i+1, &szName, &bound);			pPopupMenu->EnableMenuItem(i, MF_BYPOSITION);			if (bound) pPopupMenu->CheckMenuItem(i, MF_BYPOSITION | MF_CHECKED);		}		return;	}	/*navigation*/	if ((pPopupMenu->GetMenuItemID(0)==ID_NAV_PREV_0) || (pPopupMenu->GetMenuItemID(0)==ID_NAV_NEXT_0)) {		int count = pPopupMenu->GetMenuItemCount();		for (int i=0; i<count; i++) {			pPopupMenu->EnableMenuItem(i, MF_BYPOSITION);				}		return;	}	/*stream selection*/	if (pPopupMenu->m_hMenu == GetMenu()->GetSubMenu(2)->m_hMenu) {		if (!app->m_isopen || !gf_term_get_option(app->m_term, GF_OPT_CAN_SELECT_STREAMS)) {			pPopupMenu->EnableMenuItem(0, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);		} else {			pPopupMenu->EnableMenuItem(0, MF_BYPOSITION | MF_ENABLED);		}	}	if ((pPopupMenu->GetMenuItemID(0)>=ID_SELOBJ_0) && (pPopupMenu->GetMenuItemID(0)<=ID_SELOBJ_9)) {		GF_ObjectManager *root_od = gf_term_get_root_object(app->m_term);		if (!root_od) return;		int count = pPopupMenu->GetMenuItemCount();		for (int i=0; i<count; i++) {			u32 id = pPopupMenu->GetMenuItemID(i) - ID_SELOBJ_0;			GF_ObjectManager *odm = gf_term_get_object(app->m_term, root_od, id);			if (!odm) {				pPopupMenu->EnableMenuItem(i, MF_DISABLED | MF_BYPOSITION);			} else {				ODInfo info;				gf_term_get_object_info(app->m_term, odm, &info);				pPopupMenu->EnableMenuItem(i, MF_BYPOSITION);				pPopupMenu->CheckMenuItem(i, MF_BYPOSITION | (info.status ? MF_CHECKED : MF_UNCHECKED) );			}		}		return;	}	/*chapters*/	if (pPopupMenu->m_hMenu == GetMenu()->GetSubMenu(2)->m_hMenu) {		if (!app->m_isopen || !m_num_chapters) {			pPopupMenu->EnableMenuItem(1, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);		} else {			pPopupMenu->EnableMenuItem(1, MF_BYPOSITION | MF_ENABLED);		}	}	if ((pPopupMenu->GetMenuItemID(0)>=ID_SETCHAP_FIRST) && (pPopupMenu->GetMenuItemID(0)<=ID_SETCHAP_LAST)) {		Double now = gf_term_get_time_in_ms(app->m_term);		now /= 1000;		int count = pPopupMenu->GetMenuItemCount();		for (int i=0; i<count; i++) {			u32 id = pPopupMenu->GetMenuItemID(i) - ID_SETCHAP_FIRST;			pPopupMenu->EnableMenuItem(i, MF_BYPOSITION);			Bool is_current = 0;			if (m_chapters_start[id]<=now) {				if (id+1<m_num_chapters) {					if (m_chapters_start[id+1]>now) is_current = 1;				} else {					is_current = 1;				}			}			pPopupMenu->CheckMenuItem(i, MF_BYPOSITION | (is_current ? MF_CHECKED : MF_UNCHECKED));		}		return;	}	/*default*/	CFrameWnd::OnInitMenuPopup(pPopupMenu, ID, bSys);}void CMainFrame::OnCollideDisp() {	gf_term_set_option(GetApp()->m_term, GF_OPT_COLLISION, GF_COLLISION_DISPLACEMENT);}void CMainFrame::OnUpdateCollideDisp(CCmdUI* pCmdUI) {	WinGPAC *gpac = GetApp(); 	pCmdUI->Enable(gpac->m_isopen);		pCmdUI->SetCheck( (gf_term_get_option(gpac->m_term, GF_OPT_COLLISION) == GF_COLLISION_DISPLACEMENT) ? 1 : 0);}void CMainFrame::OnCollideNone() {	gf_term_set_option(GetApp()->m_term, GF_OPT_COLLISION, GF_COLLISION_NONE);}void CMainFrame::OnUpdateCollideNone(CCmdUI* pCmdUI) {	WinGPAC *gpac = GetApp(); 	pCmdUI->Enable(gpac->m_isopen);		pCmdUI->SetCheck( (gf_term_get_option(gpac->m_term, GF_OPT_COLLISION) == GF_COLLISION_NONE) ? 1 : 0);}void CMainFrame::OnCollideReg() {	gf_term_set_option(GetApp()->m_term, GF_OPT_COLLISION, GF_COLLISION_NORMAL);}void CMainFrame::OnUpdateCollideReg(CCmdUI* pCmdUI) {	WinGPAC *gpac = GetApp(); 	pCmdUI->Enable(gpac->m_isopen);		pCmdUI->SetCheck( (gf_term_get_option(gpac->m_term, GF_OPT_COLLISION) == GF_COLLISION_NORMAL) ? 1 : 0);}void CMainFrame::OnHeadlight() {	WinGPAC *app = GetApp();	Bool val = !gf_term_get_option(app->m_term, GF_OPT_HEADLIGHT);	gf_term_set_option(app->m_term, GF_OPT_HEADLIGHT, val);}void CMainFrame::OnUpdateHeadlight(CCmdUI* pCmdUI) {	WinGPAC *app = GetApp();	pCmdUI->Enable(FALSE);	if (!app->m_isopen) return;	u32 type = gf_term_get_option(app->m_term, GF_OPT_NAVIGATION_TYPE);	if (type!=GF_NAVIGATE_TYPE_3D) return;	pCmdUI->Enable(TRUE);	pCmdUI->SetCheck(gf_term_get_option(app->m_term, GF_OPT_HEADLIGHT) ? 1 : 0);}void CMainFrame::OnGravity() {	WinGPAC *app = GetApp();	Bool val = gf_term_get_option(app->m_term, GF_OPT_GRAVITY) ? 0 : 1;	gf_term_set_option(app->m_term, GF_OPT_GRAVITY, val);}void CMainFrame::OnUpdateGravity(CCmdUI* pCmdUI) {	WinGPAC *app = GetApp();	pCmdUI->Enable(FALSE);	if (!app->m_isopen) return;	u32 type = gf_term_get_option(app->m_term, GF_OPT_NAVIGATION_TYPE);	if (type!=GF_NAVIGATE_TYPE_3D) return;	type = gf_term_get_option(app->m_term, GF_OPT_NAVIGATION);	if (type != GF_NAVIGATE_WALK) return;	pCmdUI->Enable(TRUE);	pCmdUI->SetCheck(gf_term_get_option(app->m_term, GF_OPT_GRAVITY) ? 1 : 0);}BOOL CMainFrame::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) {	if (((LPNMHDR)lParam)->code == TBN_DROPDOWN) {		RECT rc;		s32 i, count, start;		POINT pt;		CMenu *pPopup = new CMenu();		pPopup->CreatePopupMenu();		m_wndToolBar.GetWindowRect(&rc);		pt.y = rc.bottom;		pt.x = rc.left;		m_wndToolBar.GetToolBarCtrl().GetItemRect(0, &rc);		pt.x += (rc.right - rc.left);		m_wndToolBar.GetToolBarCtrl().GetItemRect(1, &rc);		pt.x += (rc.right - rc.left);		count = gf_list_count(m_pPlayList->m_entries);		if ( ((LPNMTOOLBAR)lParam)->iItem == ID_NAV_PREV) {			start = m_pPlayList->m_cur_entry - 1;			for (i=0; i<10; i++) {				if (start - i < 0) break;				if (start - i >= count) break;				PLEntry *ple = (PLEntry *) gf_list_get(m_pPlayList->m_entries, start - i);				pPopup->AppendMenu(MF_STRING | MF_ENABLED, ID_NAV_PREV_0 + i, ple->m_disp_name);			}		} else {			start = m_pPlayList->m_cur_entry + 1;			for (i=0; i<10; i++) {				if (start + i >= count) break;				PLEntry *ple = (PLEntry *) gf_list_get(m_pPlayList->m_entries, start + i);				pPopup->AppendMenu(MF_STRING | MF_ENABLED, ID_NAV_NEXT_0 + i, ple->m_disp_name);			}			m_wndToolBar.GetToolBarCtrl().GetItemRect(2, &rc);			pt.x += (rc.right - rc.left);		}		pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this);		delete pPopup;		return FALSE;	}	return CFrameWnd::OnNotify(wParam, lParam, pResult);}void CMainFrame::OnNavNext() {	WinGPAC *app = GetApp();	/*don't play if last could trigger playlist loop*/	if ((m_pPlayList->m_cur_entry<0) || (gf_list_count(m_pPlayList->m_entries) == 1 + (u32) m_pPlayList->m_cur_entry)) return;	m_pPlayList->PlayNext();}void CMainFrame::OnUpdateNavNext(CCmdUI* pCmdUI) {	if (m_pPlayList->m_cur_entry<0) pCmdUI->Enable(FALSE);	else if ((u32) m_pPlayList->m_cur_entry + 1 == gf_list_count(m_pPlayList->m_entries) ) pCmdUI->Enable(FALSE);	else pCmdUI->Enable(TRUE);}void CMainFrame::OnNavPrev() {	WinGPAC *app = GetApp();	if (m_pPlayList->m_cur_entry<=0) return;	m_pPlayList->PlayPrev();}void CMainFrame::OnUpdateNavPrev(CCmdUI* pCmdUI) {	if (m_pPlayList->m_cur_entry<=0) pCmdUI->Enable(FALSE);	else pCmdUI->Enable(TRUE);}void CMainFrame::OnClearNav() {	m_pPlayList->ClearButPlaying();}void CMainFrame::OnViewPlaylist() {	m_pPlayList->ShowWindow(m_pPlayList->IsWindowVisible() ? SW_HIDE : SW_SHOW);}void CMainFrame::OnUpdateViewPlaylist(CCmdUI* pCmdUI) {	pCmdUI->SetCheck(m_pPlayList->IsWindowVisible() ? 1 : 0);}void CMainFrame::OnPlaylistLoop() {	GetApp()->m_Loop = !GetApp()->m_Loop;}void CMainFrame::OnUpdatePlaylistLoop(CCmdUI* pCmdUI) {	pCmdUI->SetCheck(GetApp()->m_Loop ? 1 : 0);}void CMainFrame::OnAddSubtitle() {	CFileDialog fd(TRUE,NULL,NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, "All Subtitles|*.srt;*.sub;*.ttxt;*.xml|SRT Subtitles|*.srt|SUB Subtitles|*.sub|3GPP TimedText|*.ttxt|QuckTime TeXML|*.xml|");	if (fd.DoModal() != IDOK) return;	AddSubtitle(fd.GetPathName(), 1);}void CMainFrame::AddSubtitle(const char *fileName, Bool auto_play){	gf_term_add_object(GetApp()->m_term, fileName, auto_play);}static Bool subs_enum_dir_item(void *cbck, char *item_name, char *item_path){	CMainFrame *_this = (CMainFrame *)cbck;	_this->AddSubtitle(item_path, 0);	return 0;}void CMainFrame::LookForSubtitles(){	char dir[GF_MAX_PATH];	CString url = m_pPlayList->GetURL();	strcpy(dir, url);	char *sep = strrchr(dir, '\\');	if (!sep) ::GetCurrentDirectory(GF_MAX_PATH, dir);	else sep[0] = 0;	gf_enum_directory(dir, 0, subs_enum_dir_item, this, "ttxt;srt");}void CMainFrame::OnCacheEnable(){	WinGPAC *app = GetApp();	u32 state = gf_term_get_option(app->m_term, GF_OPT_MEDIA_CACHE);	if (state==GF_MEDIA_CACHE_DISABLED) {		gf_term_set_option(app->m_term, GF_OPT_MEDIA_CACHE, GF_MEDIA_CACHE_ENABLED);	} else if (state==GF_MEDIA_CACHE_DISABLED) {		gf_term_set_option(app->m_term, GF_OPT_MEDIA_CACHE, GF_MEDIA_CACHE_DISABLED);	}}void CMainFrame::OnUpdateCacheEnable(CCmdUI* pCmdUI) {	WinGPAC *app = GetApp();	u32 state = gf_term_get_option(app->m_term, GF_OPT_MEDIA_CACHE);	switch (state) {	case GF_MEDIA_CACHE_ENABLED:		pCmdUI->SetText("Enabled"); 		pCmdUI->Enable(TRUE); 		break;	case GF_MEDIA_CACHE_RUNNING: 		pCmdUI->SetText("Running");		pCmdUI->Enable(FALSE); 		break;	case GF_MEDIA_CACHE_DISABLED: 		pCmdUI->SetText("Disabled");		break;	}}void CMainFrame::OnUpdateCacheStop(CCmdUI* pCmdUI) {	WinGPAC *app = GetApp();	u32 state = gf_term_get_option(app->m_term, GF_OPT_MEDIA_CACHE);	pCmdUI->Enable( (state==GF_MEDIA_CACHE_RUNNING) ? TRUE : FALSE);}void CMainFrame::OnCacheStop(){	WinGPAC *app = GetApp();	gf_term_set_option(app->m_term, GF_OPT_MEDIA_CACHE, GF_MEDIA_CACHE_DISABLED);}void CMainFrame::OnCacheAbort(){	WinGPAC *app = GetApp();	gf_term_set_option(app->m_term, GF_OPT_MEDIA_CACHE, GF_MEDIA_CACHE_DISCARD);}void CMainFrame::OnFileExit() {	DestroyWindow();}void CMainFrame::BuildChapterList(Bool reset_only){	CMenu *pChaps;	ODInfo odi;	NetInfoCommand com;	WinGPAC *app = GetApp();	/*THIS IS HARCODED FROM THE MENU LAYOUT */	pChaps = GetMenu()->GetSubMenu(2)->GetSubMenu(1);	while (pChaps->GetMenuItemCount()) pChaps->DeleteMenu(0, MF_BYPOSITION);	if (m_chapters_start) free(m_chapters_start);	m_chapters_start = NULL;	m_num_chapters = 0;	if (reset_only) return;	GF_ObjectManager *root_od = gf_term_get_root_object(app->m_term);	if (!root_od) return;	if (gf_term_get_object_info(app->m_term, root_od, &odi) != GF_OK) return;	u32 count = gf_list_count(odi.od->OCIDescriptors);	m_num_chapters = 0;	for (u32 i=0; i<count; i++) {		char szLabel[1024];		GF_Segment *seg = (GF_Segment *) gf_list_get(odi.od->OCIDescriptors, i);		if (seg->tag != GF_ODF_SEGMENT_TAG) continue;		if (seg->SegmentName && strlen((const char *)seg->SegmentName)) {			strcpy(szLabel, (const char *) seg->SegmentName);		} else {			sprintf(szLabel, "Chapter #%02d", m_num_chapters+1);		}		pChaps->AppendMenu(MF_ENABLED, ID_SETCHAP_FIRST + m_num_chapters, szLabel);		m_chapters_start = (Double *) realloc(m_chapters_start, sizeof(Double)*(m_num_chapters+1));		m_chapters_start[m_num_chapters] = seg->startTime;		m_num_chapters++;	}	/*get any service info*/	if (!m_bStartupFile && gf_term_get_service_info(app->m_term, root_od, &com) == GF_OK) {		CString title("");		if (com.track_info) { title.Format("%02d ", (u32) (com.track_info>>16) ); }		if (com.artist) { title += com.artist; title += " "; }		if (com.name) { title += com.name; title += " "; }		if (com.album) { title += "("; title += com.album; title += ")"; }				if (title.GetLength()) SetWindowText(title);	}}void CMainFrame::OnViewCPU(){	m_show_rti = !m_show_rti;}void CMainFrame::OnUpdateViewCPU(CCmdUI* pCmdUI) {	pCmdUI->Enable(TRUE);	pCmdUI->SetCheck(m_show_rti);}

⌨️ 快捷键说明

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