📄 mainfrm.cpp
字号:
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 + -