void CPlayerStatusBar::SetStatusTimer(REFERENCE_TIME rtNow, REFERENCE_TIME rtDur, bool fHighPrecision, const GUID* pTimeFormat) { ASSERT(pTimeFormat); ASSERT(rtNow <= rtDur); CString str; CString posstr, durstr, rstr; if (*pTimeFormat == TIME_FORMAT_MEDIA_TIME) { DVD_HMSF_TIMECODE tcNow, tcDur, tcRt; if (fHighPrecision) { tcNow = RT2HMSF(rtNow); tcDur = RT2HMSF(rtDur); tcRt = RT2HMSF(rtDur-rtNow); } else { tcNow = RT2HMS_r(rtNow); tcDur = RT2HMS_r(rtDur); tcRt = RT2HMS_r(rtDur-rtNow); } if (tcDur.bHours > 0 || (rtNow >= rtDur && tcNow.bHours > 0)) { posstr.Format(_T("%02d:%02d:%02d"), tcNow.bHours, tcNow.bMinutes, tcNow.bSeconds); rstr.Format(_T("%02d:%02d:%02d"), tcRt.bHours, tcRt.bMinutes, tcRt.bSeconds); } else { posstr.Format(_T("%02d:%02d"), tcNow.bMinutes, tcNow.bSeconds); rstr.Format(_T("%02d:%02d"), tcRt.bMinutes, tcRt.bSeconds); } if (tcDur.bHours > 0) { durstr.Format(_T("%02d:%02d:%02d"), tcDur.bHours, tcDur.bMinutes, tcDur.bSeconds); } else { durstr.Format(_T("%02d:%02d"), tcDur.bMinutes, tcDur.bSeconds); } if (fHighPrecision) { posstr.AppendFormat(_T(".%03d"), (rtNow/10000)%1000); durstr.AppendFormat(_T(".%03d"), (rtDur/10000)%1000); rstr.AppendFormat(_T(".%03d"), ((rtDur - rtNow)/10000)%1000); } } else if (*pTimeFormat == TIME_FORMAT_FRAME) { posstr.Format(_T("%I64d"), rtNow); durstr.Format(_T("%I64d"), rtDur); rstr.Format(_T("%I64d"), rtDur - rtNow); } if (!AfxGetAppSettings().fRemainingTime) { str = ((rtDur <= 0) || (rtDur < rtNow)) ? posstr : posstr + _T(" / ") + durstr; } else { str = ((rtDur <= 0) || (rtDur < rtNow)) ? posstr : _T("- ") + rstr + _T(" / ") + durstr; } SetStatusTimer(str); }
void CFavoriteOrganizeDlg::SetupList(bool fSave) { int i = m_tab.GetCurSel(); if (fSave) { CAtlList<CString> sl; for (int j = 0; j < m_list.GetItemCount(); j++) { CAtlList<CString> args; ExplodeEsc(m_sl[i].GetAt((POSITION)m_list.GetItemData(j)), args, _T(';')); args.RemoveHead(); args.AddHead(m_list.GetItemText(j, 0)); sl.AddTail(ImplodeEsc(args, _T(';'))); } m_sl[i].RemoveAll(); m_sl[i].AddTailList(&sl); } else { m_list.DeleteAllItems(); POSITION pos = m_sl[i].GetHeadPosition(), tmp; while (pos) { tmp = pos; CAtlList<CString> sl; ExplodeEsc(m_sl[i].GetNext(pos), sl, _T(';'), 3); int n = m_list.InsertItem(m_list.GetItemCount(), sl.RemoveHead()); m_list.SetItemData(n, (DWORD_PTR)tmp); if (!sl.IsEmpty()) { REFERENCE_TIME rt = 0; if (1 == _stscanf_s(sl.GetHead(), _T("%I64d"), &rt) && rt > 0) { DVD_HMSF_TIMECODE hmsf = RT2HMSF(rt); CString str; str.Format(_T("[%02d:%02d:%02d]"), hmsf.bHours, hmsf.bMinutes, hmsf.bSeconds); m_list.SetItemText(n, 1, str); } } } UpdateColumnsSizes(); } }
void CPlayerToolBar::SetStatusTimer(REFERENCE_TIME rtNow, REFERENCE_TIME rtDur, bool fHighPrecision, const GUID* pTimeFormat, double playRate) { ASSERT(pTimeFormat); CString str; CString posstr, durstr; if(*pTimeFormat == TIME_FORMAT_MEDIA_TIME) { DVD_HMSF_TIMECODE tcNow = RT2HMSF(rtNow); DVD_HMSF_TIMECODE tcDur = RT2HMSF(rtDur); if(tcDur.bHours > 0 || (rtNow >= rtDur && tcNow.bHours > 0)) posstr.Format(_T("%02d:%02d:%02d"), tcNow.bHours, tcNow.bMinutes, tcNow.bSeconds); else posstr.Format(_T("%02d:%02d"), tcNow.bMinutes, tcNow.bSeconds); if(tcDur.bHours > 0) durstr.Format(_T("%02d:%02d:%02d"), tcDur.bHours, tcDur.bMinutes, tcDur.bSeconds); else durstr.Format(_T("%02d:%02d"), tcDur.bMinutes, tcDur.bSeconds); if(fHighPrecision) { str.Format(_T("%s.%03d"), posstr, (rtNow/10000)%1000); posstr = str; str.Format(_T("%s.%03d"), durstr, (rtDur/10000)%1000); durstr = str; str.Empty(); } } else if(*pTimeFormat == TIME_FORMAT_FRAME) { posstr.Format(_T("%I64d"), rtNow); durstr.Format(_T("%I64d"), rtDur); } str = (/*start <= 0 &&*/ rtDur <= 0) ? posstr : posstr + _T(" / ") + durstr; SYSTEM_POWER_STATUS status; GetSystemPowerStatus(&status); CString szPower ; if ( status.BatteryFlag != 128 && status.BatteryFlag != 255 && status.BatteryLifePercent < 91 ){ szPower.Format(ResStr(IDS_STATUS_BAR_LABEL_BATTRAY_WITH_PADDING), status.BatteryLifePercent); }else{ //szPower = ResStr(IDS_STATUS_BAR_LABEL_BATTRAY_UNLIMIT); } CString szPlayrate; if(fabs(playRate - 1.0) > 0.02 && playRate > 0.01) { szPlayrate.Format(ResStr(IDS_STATUS_BAR_LABEL_PLAY_SPEED_WITH_PADDING), playRate); } CMainFrame* pFrame = ((CMainFrame*)AfxGetMainWnd()); CString szPlayingFileName = pFrame->GetCurPlayingFileName(); if(!szPlayingFileName.IsEmpty()){ //szPlayingFileName.Append(_T(" ")); } //szPlayingFileName SetStatusTimer( str + szPlayrate + szPower + m_buffering ); }
void CPlayerSeekBar::SetTimecodeTip(){ CString toolTip; CPoint point , screenPos; GetCursorPos(&point); screenPos = point; ScreenToClient(&point); CRect rcClient; if( !rcClient.PtInRect(point)){ //return; } CRect r = GetChannelRect(); if(r.left <= r.right){ __int64 mPos = 0; if(point.x < r.left) mPos = m_start; else if(point.x >= r.right) mPos = m_stop; else { __int64 w = r.right - r.left; if(m_start < m_stop) mPos = (m_start + ((m_stop - m_start) * (point.x - r.left) + (w/2)) / w); } DVD_HMSF_TIMECODE tcNow = RT2HMSF(mPos); if( tcNow.bHours > 0) toolTip.Format(_T("%02d:%02d:%02d"), tcNow.bHours, tcNow.bMinutes, tcNow.bSeconds); else toolTip.Format(_T("%02d:%02d"), tcNow.bMinutes, tcNow.bSeconds); //AfxMessageBox(toolTip); //if(toolTip.IsEmpty()) // toolTip = _T("Unkown"); if(!toolTip.IsEmpty()){ CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd(); pFrame->m_tip.m_text = toolTip; CSize tipsize = pFrame->m_tip.CountSize(); point = screenPos; CRect rcTip ( point.x - tipsize.cx/2 , point.y - tipsize.cy - 6,point.x + tipsize.cx/2 , point.y - 6); //SVP_LogMsg5(_T("Tip %d %d %d %d") , rcTip.left,rcTip.top , rcTip.right,rcTip.left); HMONITOR hMonitor = MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST); MONITORINFO mi; mi.cbSize = sizeof(MONITORINFO); GetMonitorInfo(hMonitor, &mi); if(rcTip.left < mi.rcWork.left){ rcTip.MoveToX(mi.rcWork.left + 3); }else if(rcTip.right > mi.rcWork.right){ rcTip.MoveToX(mi.rcWork.right - rcTip.Width() - 3); } pFrame->m_tip.MoveWindow( rcTip ); pFrame->m_tip.ShowWindow(SW_SHOWNOACTIVATE); pFrame->m_tip.Invalidate(); } } }