This source file includes following definitions.
- DoDataExchange
- BEGIN_MESSAGE_MAP
- OnHScroll
- SetPosition
#include "stdafx.h"
#include "Osmo4.h"
#include "ProgressBar.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
ProgressBar::ProgressBar(CWnd* pParent )
: CDialog(ProgressBar::IDD, pParent)
{
m_grabbed = 0;
m_range_invalidated = 0;
}
void ProgressBar::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TIME, m_Time);
DDX_Control(pDX, IDC_SLIDER, m_Slider);
}
BEGIN_MESSAGE_MAP(ProgressBar, CDialog)
ON_WM_SIZE()
ON_WM_HSCROLL()
END_MESSAGE_MAP()
#define TEXT_RIGHT_PAD 2
void ProgressBar::OnSize(UINT nType, int cx, int cy)
{
u32 tw;
CDialog::OnSize(nType, cx, cy);
if (!m_Slider.m_hWnd) return;
RECT rc;
m_Time.GetClientRect(&rc);
tw = rc.right-rc.left;
rc.left = cx - tw - TEXT_RIGHT_PAD;
rc.right = cx - TEXT_RIGHT_PAD;
m_Time.MoveWindow(&rc);
m_Slider.GetClientRect(&rc);
rc.left = 0;
rc.right = cx - tw - TEXT_RIGHT_PAD;
m_Slider.MoveWindow(&rc);
}
void ProgressBar::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
COsmo4 *app = GetApp();
if (pScrollBar->GetDlgCtrlID() == IDC_SLIDER) {
if (!app->m_can_seek) return;
switch (nSBCode) {
case TB_LINEUP:
case TB_LINEDOWN:
case TB_PAGEUP:
case TB_PAGEDOWN:
case TB_THUMBPOSITION:
case TB_THUMBTRACK:
case TB_TOP:
case TB_BOTTOM:
m_grabbed = 1;
break;
case TB_ENDTRACK:
if (!app->m_open) {
SetPosition(0);
} else {
u32 seek_to = m_Slider.GetPos();
gf_term_play_from_time(app->m_term, seek_to, 0);
}
m_grabbed = 0;
return;
}
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void ProgressBar::SetPosition(u32 now)
{
TCHAR swText[20];
u32 nb_s, nb_m;
COsmo4 *app = GetApp();
if (m_range_invalidated) {
if (app->m_can_seek) {
m_Slider.SetRangeMin(0);
m_Slider.SetRangeMax(app->m_duration);
m_Slider.ShowWindow(SW_SHOWNORMAL);
m_Slider.EnableWindow(TRUE);
} else {
m_Slider.ShowWindow(SW_SHOWNORMAL);
m_Slider.EnableWindow(FALSE);
}
m_range_invalidated = 0;
}
if (now==m_prev_time) return;
if (now<m_prev_time) m_prev_time = 0;
if (!m_prev_time || (m_prev_time + 500 <= now)) {
m_FPS = gf_term_get_framerate(app->m_term, 0);
m_prev_time = now;
}
nb_s = now/1000;
nb_m = nb_s/60;
nb_s -= nb_m*60;
wsprintf(swText, _T("%02d:%02d FPS %02.2f"), nb_m, nb_s, m_FPS);
m_Time.SetWindowText(swText);
if (!m_grabbed) m_Slider.SetPos(now);
}