00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "DlgVidMan.h"
00009 #include "Downloads_VideoPreview.h"
00010 #include "plugincmds.h"
00011
00012 #ifdef _DEBUG
00013 #define new DEBUG_NEW
00014 #undef THIS_FILE
00015 static char THIS_FILE[] = __FILE__;
00016 #endif
00017
00018 CDlgVidMan::CDlgVidMan(CWnd* pParent )
00019 : CDialog(CDlgVidMan::IDD, pParent)
00020 {
00021 m_bMute = FALSE;
00022 m_bInFVDownloads = FALSE;
00023 }
00024
00025 void CDlgVidMan::DoDataExchange(CDataExchange* pDX)
00026 {
00027 CDialog::DoDataExchange(pDX);
00028
00029 DDX_Control(pDX, IDC_VOLUME, m_wndVol);
00030
00031 }
00032
00033 BEGIN_MESSAGE_MAP(CDlgVidMan, CDialog)
00034
00035 ON_WM_CTLCOLOR()
00036 ON_COMMAND(ID_DLD_VID_PLAY, OnPlay)
00037 ON_COMMAND(ID_DLD_VID_PAUSE, OnPause)
00038 ON_COMMAND(ID_DLD_VID_STOP, OnStop)
00039 ON_COMMAND(ID_DLD_VID_MUTE, OnMute)
00040 ON_WM_HSCROLL()
00041 ON_WM_SIZE()
00042 ON_BN_CLICKED(IDC_CONVERT, OnConvert)
00043 ON_BN_CLICKED(IDC_SWITCH_AUTO, OnSwitchAuto)
00044
00045 END_MESSAGE_MAP()
00046
00047 HBRUSH CDlgVidMan::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
00048 {
00049 HBRUSH hbr = m_brClrWindow;
00050 pDC->SetBkMode (TRANSPARENT);
00051 if (GetDlgItem (IDC__FILENAME)->m_hWnd == pWnd->m_hWnd)
00052 SelectObject (pDC->m_hDC, m_fntBold);
00053 return hbr;
00054
00055 }
00056
00057 BOOL CDlgVidMan::OnInitDialog()
00058 {
00059 CDialog::OnInitDialog();
00060
00061 m_wndVol.SetRange (0, 100);
00062 m_wndVol.SetPos (_App.MP_Volume ());
00063 UpdateVolumePerc ();
00064
00065 CreateBars ();
00066 Update ();
00067
00068 LOGFONT lf;
00069 GetFont ()->GetLogFont (&lf);
00070 lf.lfWeight = FW_BOLD;
00071 m_fntBold.CreateFontIndirect (&lf);
00072
00073 m_brClrWindow.CreateSolidBrush (GetSysColor (COLOR_WINDOW));
00074
00075 m_bMute = _App.MP_Mute ();
00076 UpdateMuteImage ();
00077
00078 if (m_bInFVDownloads)
00079 {
00080 GetDlgItem (IDC_SWITCH_AUTO)->ShowWindow (SW_HIDE);
00081 }
00082 else
00083 {
00084 if (_App.View_AutoSwitchToMediaPreview ())
00085 CheckDlgButton (IDC_SWITCH_AUTO, BST_CHECKED);
00086 }
00087
00088 ApplyLanguage ();
00089
00090 return TRUE;
00091 }
00092
00093 void CDlgVidMan::CreateBars()
00094 {
00095 RECT rc = {0, 0, 0, 0};
00096
00097 m_barMan.SetSizes (CSize (23, 23), CSize (16, 16));
00098 m_barMan.CreateEx (this, TBSTYLE_FLAT|TBSTYLE_TRANSPARENT,
00099 WS_CHILD | WS_VISIBLE | CCS_NORESIZE | CCS_TOP | CCS_NODIVIDER | CBRS_TOOLTIPS,
00100 CRect (0,0,0,0), 0x10ff);
00101
00102 m_imgMan.Create (16, 16, ILC_COLOR24 | ILC_MASK, 3, 1);
00103 CBitmap bmp;
00104 bmp.Attach (SBMP (IDB_VIDMAN));
00105 m_imgMan.Add (&bmp, RGB (255, 0, 255));
00106 m_barMan.GetToolBarCtrl ().SetImageList (&m_imgMan);
00107
00108 m_dimgMan.Create (16, 16, ILC_COLOR24 | ILC_MASK, 3, 1);
00109 CBitmap bmp1;
00110 bmp1.Attach (SBMP (IDB_VIDMAN_D));
00111 m_dimgMan.Add (&bmp1, RGB (255, 0, 255));
00112 m_barMan.GetToolBarCtrl ().SetDisabledImageList (&m_dimgMan);
00113
00114 UINT uIDs [] = {
00115 ID_DLD_VID_PLAY, ID_DLD_VID_STOP
00116 };
00117 m_barMan.SetButtons (uIDs, sizeof (uIDs) / sizeof (UINT));
00118
00119 GetDlgItem (IDC__TOOL)->GetWindowRect (&rc);
00120 GetDlgItem (IDC__TOOL)->ShowWindow (SW_HIDE);
00121 ScreenToClient (&rc);
00122 m_barMan.MoveWindow (rc.left, rc.top, rc.right-rc.left, 25);
00123
00124
00125 m_barMute.SetSizes (CSize (23, 23), CSize (16, 16));
00126 m_barMute.CreateEx (this, TBSTYLE_FLAT|TBSTYLE_TRANSPARENT,
00127 WS_CHILD | WS_VISIBLE | CCS_NORESIZE | CCS_TOP | CCS_NODIVIDER | CBRS_TOOLTIPS);
00128
00129 m_imgMute.Create (16, 16, ILC_COLOR24 | ILC_MASK, 2, 1);
00130 CBitmap bmp2;
00131 bmp2.Attach (SBMP(IDB_MUTE));
00132 m_imgMute.Add (&bmp2, RGB (255, 0, 255));
00133 m_barMute.GetToolBarCtrl ().SetImageList (&m_imgMute);
00134
00135 UINT uID = ID_DLD_VID_MUTE;
00136 m_barMute.SetButtons (&uID, 1);
00137
00138 GetDlgItem (IDC__MUTE)->GetWindowRect (&rc);
00139 GetDlgItem (IDC__MUTE)->ShowWindow (SW_HIDE);
00140 ScreenToClient (&rc);
00141 m_barMute.MoveWindow (rc.left, rc.top, rc.right-rc.left, 25);
00142 }
00143
00144 void CDlgVidMan::UpdateEnabled()
00145 {
00146 vmsDownloadSmartPtr dld = m_parent->Get_ActiveDownload ();
00147 GetDlgItem (IDC_CONVERT)->EnableWindow (dld != NULL && dld->pMgr->IsDone ());
00148
00149 m_wndVol.EnableWindow (m_parent->IsMuteAvail ());
00150 }
00151
00152 void CDlgVidMan::Update()
00153 {try{
00154
00155 if (IsWindowVisible () == FALSE)
00156 return;
00157
00158 BOOL bPlaying = m_parent->IsPlaying ();
00159
00160 UINT nIdNow, nStyle; int iImage;
00161 m_barMan.GetButtonInfo (0, nIdNow, nStyle, iImage);
00162 UINT nIdReq = bPlaying ? ID_DLD_VID_PAUSE : ID_DLD_VID_PLAY;
00163 if (nIdNow != nIdReq)
00164 m_barMan.SetButtonInfo (0, nIdReq, nStyle, bPlaying ? 2 : 0);
00165
00166 SetDlgItemText (IDC__FILENAME, m_parent->Get_FileName ());
00167
00168 char szDim [100];
00169 CString str;
00170 UINT64 u;
00171 float val;
00172
00173 u = m_parent->Get_FileSize ();
00174 if (u)
00175 {
00176 if (u == _UI64_MAX)
00177 str = "?";
00178 else
00179 {
00180 BytesToXBytes (u, &val, szDim);
00181 str.Format ("%.*g %s", val > 999 ? 4 : 3, val, szDim);
00182 }
00183 }
00184 else
00185 str = "";
00186 SetDlgItemText (IDC__SIZEVAL, str);
00187
00188 u = m_parent->Get_AvailFileSize ();
00189 if (u || m_parent->Get_FileSize ())
00190 {
00191 BytesToXBytes (u, &val, szDim);
00192 str.Format ("%.*g %s", val > 999 ? 4 : 3, val, szDim);
00193 }
00194 else
00195 str = "";
00196 SetDlgItemText (IDC__SIZEAVAILVAL, str);
00197
00198 SetDlgItemText (IDC__DURATIONVAL, m_parent->GetDuration ());
00199
00200 UpdateEnabled ();
00201
00202 }catch (...){}
00203 }
00204
00205 void CDlgVidMan::OnPlay()
00206 {
00207 if (m_parent->IsPlaying ())
00208 m_parent->Pause ();
00209 else
00210 m_parent->Play ();
00211
00212 Update ();
00213 }
00214
00215 void CDlgVidMan::OnPause()
00216 {
00217 m_parent->Pause ();
00218 Update ();
00219 }
00220
00221 void CDlgVidMan::OnStop()
00222 {
00223 m_parent->Stop ();
00224 Update ();
00225 }
00226
00227 void CDlgVidMan::OnMute()
00228 {
00229 if (m_bMute)
00230 {
00231
00232
00233 m_bMute = FALSE;
00234 UpdateMuteImage ();
00235
00236 if (m_wndVol.GetPos () == 0)
00237 m_wndVol.SetPos (20);
00238 ApplyVolume ();
00239 }
00240 else
00241 {
00242 m_parent->Set_Volume (-10000);
00243 m_bMute = TRUE;
00244 UpdateMuteImage ();
00245 }
00246 }
00247
00248 void CDlgVidMan::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
00249 {
00250 if (pScrollBar->m_hWnd == m_wndVol.m_hWnd)
00251 {
00252 if (m_bMute && m_wndVol.GetPos ())
00253 {
00254 m_bMute = FALSE;
00255 UpdateMuteImage ();
00256 }
00257
00258 ApplyVolume ();
00259 UpdateVolumePerc ();
00260
00261 if (nSBCode == SB_ENDSCROLL && m_wndVol.GetPos () == 0)
00262 OnMute ();
00263 }
00264
00265 CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
00266 }
00267
00268 void CDlgVidMan::ApplyVolume()
00269 {
00270 m_parent->Set_Volume (m_wndVol.GetPos () * 50 - 5000);
00271 }
00272
00273 void CDlgVidMan::ApplyVolumeSettings()
00274 {
00275 if (m_bMute)
00276 m_parent->Set_Volume (-10000);
00277 else
00278 ApplyVolume ();
00279 }
00280
00281 void CDlgVidMan::UpdateVolumePerc()
00282 {
00283 CString str;
00284 str.Format ("%d%%", m_wndVol.GetPos ());
00285 SetDlgItemText (IDC__VOLPERC, str);
00286 }
00287
00288 void CDlgVidMan::UpdateCommand(UINT nID, BOOL *pbEnabled, BOOL *pbChecked)
00289 {
00290 BOOL bHasDld = m_parent->Get_ActiveDownload () != NULL;
00291 BOOL bPlaying = m_parent->IsPlaying () || m_parent->IsPaused ();
00292
00293 *pbChecked = FALSE;
00294
00295 switch (nID)
00296 {
00297 case ID_DLD_VID_PAUSE:
00298 *pbEnabled = bHasDld && bPlaying && m_parent->IsPauseAvail ();
00299 break;
00300
00301 case ID_DLD_VID_PLAY:
00302 *pbEnabled = bHasDld;
00303 break;
00304
00305 case ID_DLD_VID_STOP:
00306 *pbEnabled = bHasDld && bPlaying;
00307 break;
00308
00309 case ID_DLD_VID_MUTE:
00310 *pbEnabled = m_parent->IsMuteAvail ();
00311 *pbChecked = m_bMute;
00312 break;
00313 }
00314 }
00315
00316 void CDlgVidMan::UpdateMuteImage()
00317 {
00318 m_barMute.SetButtonInfo (0, ID_DLD_VID_MUTE, TBBS_BUTTON,
00319 m_bMute ? 1 : 0);
00320 }
00321
00322 void CDlgVidMan::SaveSettings()
00323 {
00324 _App.MP_Mute (m_bMute);
00325 _App.MP_Volume (m_wndVol.GetPos ());
00326 }
00327
00328 BOOL CDlgVidMan::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
00329 {
00330 LPNMHDR nm = (LPNMHDR) lParam;
00331
00332 int nID = 0;
00333
00334 if (nm->code == TBN_GETINFOTIPA)
00335 {
00336 if (nm->hwndFrom == m_barMute.m_hWnd)
00337 nID = ID_DLD_VID_MUTE;
00338 else if (nm->hwndFrom == m_barMan.m_hWnd)
00339 nID = ((LPNMTBGETINFOTIPA) nm)->iItem;
00340 }
00341
00342 if (nID == 0)
00343 return CDialog::OnNotify(wParam, lParam, pResult);
00344
00345 switch (nm->code)
00346 {
00347 case TBN_GETINFOTIPA:
00348 {
00349 LPNMTBGETINFOTIPA inf = (LPNMTBGETINFOTIPA) nm;
00350
00351 switch (nID)
00352 {
00353 case ID_DLD_VID_MUTE:
00354 strcpy (inf->pszText, LS (L_MUTE));
00355 break;
00356
00357 case ID_DLD_VID_PLAY:
00358 strcpy (inf->pszText, LS (L_PLAY));
00359 break;
00360
00361 case ID_DLD_VID_PAUSE:
00362 strcpy (inf->pszText, LS (L_PAUSE));
00363 break;
00364
00365 case ID_DLD_VID_STOP:
00366 strcpy (inf->pszText, LS (L_STOP));
00367 break;
00368
00369 }
00370 }
00371 break;
00372 }
00373
00374 *pResult = TRUE;
00375
00376 return TRUE;
00377 }
00378
00379 void CDlgVidMan::OnSize(UINT nType, int cx, int cy)
00380 {
00381 CDialog::OnSize(nType, cx, cy);
00382 }
00383
00384 void CDlgVidMan::ApplyLanguage()
00385 {
00386 fsDlgLngInfo lnginfo [] = {
00387 fsDlgLngInfo (IDC__MEDIAINFO, L_MEDIAINFO),
00388 fsDlgLngInfo (IDC__SIZE, L_DLGSIZE),
00389 fsDlgLngInfo (IDC__SIZEAVAIL, L_DLGAVAILABLE),
00390 fsDlgLngInfo (IDC__VOLUME, L_DLGVOLUME),
00391 fsDlgLngInfo (IDC__DURATION, L_DLGDURATION),
00392 fsDlgLngInfo (IDC_CONVERT, L_CONVERT),
00393 fsDlgLngInfo (IDC_SWITCH_AUTO, L_SWITCH_TO_TAB_AUTO),
00394 };
00395
00396 _LngMgr.ApplyLanguage (this, lnginfo, sizeof (lnginfo) / sizeof (fsDlgLngInfo), 0);
00397 }
00398
00399 void CDlgVidMan::OnConvert()
00400 {
00401 if (_AppMgr.IsMediaFeaturesInstalled () == FALSE)
00402 {
00403 _AppMgr.ShowInstallMediaFeaturesMessage ();
00404 return;
00405 }
00406
00407 vmsDownloadSmartPtr dld = m_parent->Get_ActiveDownload ();
00408 if (dld != NULL)
00409 _MediaConvertMgr.ConvertMediaFile (dld, MCM_OS_SHOW_OPTIONS_UI);
00410 }
00411
00412 void CDlgVidMan::Convert()
00413 {
00414 PostMessage (WM_COMMAND, IDC_CONVERT);
00415 }
00416
00417 void CDlgVidMan::OnSwitchAuto()
00418 {
00419 _App.View_AutoSwitchToMediaPreview (
00420 IsDlgButtonChecked (IDC_SWITCH_AUTO) == BST_CHECKED);
00421 }
00422