示例#1
0
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();
    }
}
示例#3
0
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 );
}
示例#4
0
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();
		}
	}
}