LPCTSTR PlayListPane::GetTitle(UINT idx) { PrgAPI* pAPI = PRGAPI(); switch (idx % 5) { case 0: return pAPI->GetString(IDS_PLAYLIST); break;//=== Show the default (at the end) case 1: { MediaPlayer* pl = pAPI->GetMediaPlayer(); INT ACmode = 0; MediaPlayerNextMode mpm = pl->GetNextMode(&ACmode); if (mpm == MPNM_AutoContinue) { //INT mode = pAPI->GetOption(OPT_PL_AutoContinueMode); _sntprintf(m_stringBuffer, 500, _T("%s: %s [%s]"), pAPI->GetString(IDS_MODE), pAPI->GetStringForPlayListMode(mpm), pAPI->GetStringForRandomMode(RandomTrackModeEnum(ACmode))); } else _sntprintf(m_stringBuffer, 500, _T("%s: %s"), pAPI->GetString(IDS_MODE), pAPI->GetStringForPlayListMode(MediaPlayerNextMode(mpm))); } break; case 2: { MediaPlayer* pl = pAPI->GetMediaPlayer(); INT totalTracks = pl->GetPlayListCount(); _sntprintf(m_stringBuffer, 500, _T("%s: %d"), pAPI->GetString(IDS_TRACKS), totalTracks); } break; case 3: { MediaPlayer* pl = pAPI->GetMediaPlayer(); INT totalTracks = pl->GetPlayListCount(); INT totalSeconds = 0; MediaPlayListItem mpli; BOOL bHasZeroLength = FALSE; for (INT i = 0; i < totalTracks; i++) { if (pl->GetPlayListItem(mpli, i)) { if (mpli.length == 0) bHasZeroLength = TRUE; totalSeconds += mpli.length; } } TCHAR time[40]; if (totalSeconds >= 3600) _sntprintf(time, 40, _T("%d:%02d:%02d"), INT (totalSeconds / 3600), INT((totalSeconds % 3600)/60), INT(totalSeconds) % 60); else _sntprintf(time, 40, _T("%d:%02d"), INT (totalSeconds / 60), INT(totalSeconds) % 60); _sntprintf(m_stringBuffer, 500, _T("%s: %s%s"), pAPI->GetString(IDS_DURATION), time, bHasZeroLength ? _T(" +") : _T("")); } break; case 4: _sntprintf(m_stringBuffer, 500, _T("%s: [F4]"), pAPI->GetString(IDS_FOCUS)); break; default: ASSERT(0); return NULL; } return m_stringBuffer; }
void TrayToolTipDlg::Draw(CDC& dc) { TRACEST(_T("TrayToolTipDlg::Draw")); CRect rcMemDC(0, 0, m_ff.GetWidth(), m_ff.GetHeight()); PrgAPI* pAPI = PRGAPI(); MediaPlayer* pMP = pAPI->GetMediaPlayer(); //FullTrackRecordSP m_rec; MediaPlayListItem mpli; BOOL mpliIsValid = FALSE; INT playListPos = pMP->GetPlayListPos(); if (playListPos != -1) mpliIsValid = pMP->GetPlayListItem(mpli, playListPos); CRect rcCalc(rcMemDC); dc.SetBkMode(TRANSPARENT); dc.SelectStockObject(NULL_BRUSH); dc.SelectStockObject(DC_PEN); INT maxTextWidth = 0; m_pictureWidth = 0; INT textLine1Width = 0; INT textLine2Width = 0; using namespace Gdiplus; Graphics graphics(dc.GetSafeHdc()); graphics.SetSmoothingMode(SmoothingModeAntiAlias); graphics.SetInterpolationMode(InterpolationModeHighQualityBicubic); COLORREF outlineColor = RGB(220,220,220); INT r = GetRValue(m_colors[COL_TitleText]) + GetGValue(m_colors[COL_TitleText]) + GetBValue(m_colors[COL_TitleText]); if (r > (256 * 3) / 2) outlineColor = RGB(30,30,30); if (mpliIsValid == FALSE) { Gdiplus::SolidBrush br(GdiplusUtilities::COLORREF2Color(m_colors[COL_Bk])); graphics.FillRectangle(&br, GdiplusUtilities::RECT2GdiplusRect(rcMemDC)); //rcMemDC.bottom = GetTotalHeight(); //CFont* pOldFont = dc.SelectObject(&m_font[FNT_Title]); //dc.SetTextColor(m_colors[COL_TitleText]); //rcMemDC.right = m_minWidth; //dc.DrawText(CTeenSpiritApp::sAppTitle, -1, &rcMemDC, DT_SINGLELINE | DT_END_ELLIPSIS | DT_VCENTER | DT_NOPREFIX | DT_CENTER); //dc.SelectObject(pOldFont); //maxTextWidth = rcCalc.Width(); CRect rcItem = rcMemDC; rcItem.bottom = GetTotalHeight() - 30; rcItem.right = m_minWidth; LOGFONT lf; m_font[FNT_Title].GetLogFont(&lf); GdiplusUtilities::DrawTextOutline(graphics, CTeenSpiritApp::sAppTitle, _tcslen(CTeenSpiritApp::sAppTitle), &rcItem, DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_CENTER, lf, m_colors[COL_TitleText], outlineColor, 2); } else { SQLManager* pSM = pAPI->GetSQLManager(); FullTrackRecordSP rec; BOOL bRecIsValid = pSM->GetFullTrackRecordByLocation(rec, mpli.url); if (bRecIsValid) { mpli.artist = rec->artist.name.c_str(); mpli.title = rec->track.name.c_str(); mpli.rating = rec->track.rating; if (mpli.length == 0) mpli.length = rec->track.duration; } //=== Picture if (bRecIsValid) { LocalPictureManager* pLPM = pAPI->GetLocalPictureManager(); SQLManager* pSM = pAPI->GetSQLManager(); LPCTSTR imgPath = NULL; FullAlbumRecordSP albumRec; if (pSM->GetFullAlbumRecordByID(albumRec, rec->album.ID)) { imgPath = pLPM->GetMainAlbumPicture(albumRec->artist.name.c_str(), albumRec->album.name.c_str(), TRUE); if (imgPath == NULL) imgPath = pLPM->GetMainArtistPicture(albumRec->artist.name.c_str(), TRUE); } if (imgPath != NULL) { GdiPlusPicDrawer pic; pic.GetDrawParams().zoomLockMode = GdiPlusPicDrawer::ZLM_FillArea; pic.GetDrawParams().positionY = 0; CRect rcPicture; if (pic.LoadFile(imgPath)) { INT pictureHeight = rcMemDC.Height() - 2 * s_marginHeight; CSize sz = pic.GetPictureSize(); m_pictureWidth = pictureHeight * sz.cx / sz.cy; if (m_pictureWidth > 2 * pictureHeight) m_pictureWidth = 2 * pictureHeight; else if (m_pictureWidth < pictureHeight) m_pictureWidth = pictureHeight; rcPicture.left = s_marginWidth; rcPicture.top = s_marginHeight; rcPicture.right = rcPicture.left + m_pictureWidth; rcPicture.bottom = rcPicture.top + pictureHeight; pic.Draw(graphics, GdiplusUtilities::RECT2GdiplusRect(rcMemDC)); Gdiplus::SolidBrush br(GdiplusUtilities::COLORREF2Color(m_colors[COL_Bk], 50)); graphics.FillRectangle(&br, GdiplusUtilities::RECT2GdiplusRect(rcMemDC)); if (pic.Draw(graphics, GdiplusUtilities::RECT2GdiplusRect(rcPicture))) { dc.SelectStockObject(NULL_BRUSH); dc.SelectStockObject(DC_PEN); dc.SetDCPenColor(m_colors[COL_PictureBorder]); dc.Rectangle(&rcPicture); //INT shadowDist = 4; //COLORREF clrSshadow = DarkenColor(m_colors[COL_Bk2], .8); //dc.SelectStockObject(DC_BRUSH); //dc.SelectStockObject(NULL_PEN); //dc.SetDCBrushColor(clrSshadow); //dc.Rectangle(rcPicture.left + shadowDist, rcPicture.bottom, rcPicture.right + shadowDist, rcPicture.bottom + shadowDist); //dc.Rectangle(rcPicture.right, rcPicture.top + shadowDist, rcPicture.right + shadowDist, rcPicture.bottom + shadowDist); } } } else { Gdiplus::SolidBrush br(GdiplusUtilities::COLORREF2Color(m_colors[COL_Bk])); graphics.FillRectangle(&br, GdiplusUtilities::RECT2GdiplusRect(rcMemDC)); } } INT totalFontHeight = m_fontHeight[FNT_Title] + m_fontHeight[FNT_Subtitle];// + m_fontHeight[FNT_Text]; CRect rcItem(rcMemDC); LOGFONT lf; //=== AppTitle rcItem.top = s_internalMarginHeight; rcItem.left += s_marginWidth + m_pictureWidth + s_marginWidth; rcItem.right -= s_marginWidth; rcItem.bottom = rcItem.top + m_fontHeight[FNT_AppTitle]; //m_font[FNT_AppTitle].GetLogFont(&lf); //GdiplusUtilities::DrawTextOutline(graphics, CTeenSpiritApp::sAppTitle, _tcslen(CTeenSpiritApp::sAppTitle), &rcItem, // DT_SINGLELINE | DT_END_ELLIPSIS | DT_VCENTER | DT_NOPREFIX | DT_LEFT, // lf, m_colors[COL_TitleText], outlineColor, 2); //=== Title rcItem.top = 10; rcItem.bottom = rcItem.top + m_fontHeight[FNT_Title]; m_font[FNT_Title].GetLogFont(&lf); //Gdiplus::RectF rf = GdiplusUtilities::DrawTextMeasure(graphics, mpli.title, _tcslen(mpli.title), lf); CRect rcCalc; GdiplusUtilities::DrawTextOutline(graphics, mpli.title, _tcslen(mpli.title), &rcItem, DT_SINGLELINE | DT_END_ELLIPSIS | DT_VCENTER | DT_NOPREFIX | DT_LEFT, lf, m_colors[COL_TitleText], outlineColor, 2, FALSE, &rcCalc); INT textWidth = rcCalc.Width(); maxTextWidth = textWidth; //=== SubTitle rcItem.top = rcItem.bottom + 3 * s_internalMarginHeight; rcItem.bottom = rcItem.top + m_fontHeight[FNT_Subtitle]; m_font[FNT_Subtitle].GetLogFont(&lf); //rf = GdiplusUtilities::DrawTextMeasure(graphics, mpli.artist, _tcslen(mpli.artist), lf); GdiplusUtilities::DrawTextOutline(graphics, mpli.artist, _tcslen(mpli.artist), &rcItem, DT_SINGLELINE | DT_END_ELLIPSIS | DT_VCENTER | DT_NOPREFIX | DT_LEFT, lf, m_colors[COL_SubTitleText], outlineColor, 2, FALSE, &rcCalc); textWidth = rcCalc.Width(); if (textWidth > maxTextWidth) maxTextWidth = textWidth; maxTextWidth += 4 * s_marginWidth; // dc.SelectObject(pOldBrush); // dc.SelectObject(pOldPen); } INT buttonsWidth = SBTN_Last * s_systemButtonWidth + s_distanceBetweenButtonsWidth + BTN_Last * s_normalButtonWidth; if (buttonsWidth > maxTextWidth) maxTextWidth = buttonsWidth; INT desiredWith = s_marginWidth + m_pictureWidth + s_marginWidth + maxTextWidth + s_marginWidth; if (desiredWith > m_maxWidth) desiredWith = m_maxWidth; else if (desiredWith < m_minWidth) desiredWith = m_minWidth; CRect rcWindow; GetWindowRect(&rcWindow); if (rcWindow.Width() != desiredWith) { m_windowWidth = desiredWith; SetWindowPos(NULL, rcWindow.right - desiredWith, rcWindow.top, m_windowWidth, GetTotalHeight(), SWP_NOACTIVATE | SWP_NOZORDER); } m_bDataAreInvalid = FALSE; //=== Text 20% //if (m_hits > 0) //{ // rcItem.top = rcItem.bottom; // rcItem.bottom = rcItem.top + rc.Height() * m_fontHeight[FNT_Text] / totalFontHeight; // dc.SelectObject(&m_font[FNT_Text]); // TCHAR text[500]; // _sntprintf(text, 500, _T("%s: %d %s: %d"), pAPI->GetString(IDS_RANK), m_rank, pAPI->GetString(IDS_HITS), m_hits); // dc.DrawText(text, -1, &rcItem, DT_SINGLELINE | DT_END_ELLIPSIS | DT_VCENTER | DT_NOPREFIX | DT_LEFT); //} }
LRESULT CTeenSpiritDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if (message == WM_GETTEXT && wParam > GTB_First && wParam < GTB_Last && lParam != 0)//External commands interface { INT ret = 0; LPCTSTR str = NULL; LPTSTR externalBuffer = (LPTSTR) lParam; externalBuffer[0] = 0; MediaPlayer* pPlayer = PRGAPI()->GetMediaPlayer(); INT curTrack = pPlayer->GetPlayListPos(); if (curTrack >= 0) { MediaPlayListItem mpli; if (pPlayer->GetPlayListItem(mpli, curTrack)) { switch (wParam) { case GTB_Artist: str = mpli.artist; break; case GTB_Title: str = mpli.title; break; default: ASSERT(0); break; } } } if (str == NULL) return 0; _tcsncpy(externalBuffer, str, wParam); return _tcslen(str); } else if (message == WM_COMMAND)//External commands interface { MediaPlayer* pPlayer = PRGAPI()->GetMediaPlayer(); if (pPlayer != NULL) { BOOL bHandled = TRUE; switch (wParam) { case EXTERNALCOMMAND_Play: //Returns 0 on success pPlayer->Start(); break; case EXTERNALCOMMAND_Pause: //Returns 0 on success pPlayer->Pause(); break; case EXTERNALCOMMAND_Stop: //Returns 0 on success pPlayer->Stop(); break; case EXTERNALCOMMAND_Next: //Returns 0 on success pPlayer->Next(); break; case GTB_Artist: case EXTERNALCOMMAND_Previous: //Returns 0 on success pPlayer->Previous(); break; case EXTERNALCOMMAND_ShowHidePlayer: //lparam=1 to show. 0 to hide. Returns 0 on success if (IsWindowVisible() && lParam == 0) PostMessage(WM_SYSCOMMAND, SC_MINIMIZE); else if (!IsWindowVisible() && lParam == 1) PostMessage(WM_SYSCOMMAND, SC_RESTORE); break; case EXTERNALCOMMAND_GetVolume: //Return vol 0-100. Returns 0-100 on success return pPlayer->GetVolume(); case EXTERNALCOMMAND_SetVolume: //lParam is the new value(0-100) retunrns 0 on success pPlayer->SetVolume(lParam); PRGAPI()->GetStateManager()->SendMessage(SM_PlayerVolumeChanged); break; case EXTERNALCOMMAND_GetMute: //Returns 1 on mute ON. 0 on Mute off return pPlayer->GetMute(); case EXTERNALCOMMAND_SetMute: //lparam=1 for mute ON. 0 Returns 0 on success pPlayer->SetMute(lParam != 0); PRGAPI()->GetStateManager()->PostMessage(SM_PlayerSettingsChanged); break; case EXTERNALCOMMAND_GetMediaLength: //returns the number of seconds return INT(pPlayer->GetMediaLength()); case EXTERNALCOMMAND_GetMediaPos: //returns the number of seconds return INT(pPlayer->GetMediaPos()); case EXTERNALCOMMAND_SetMediaPos: //lparam=1 for mute ON. 0 Returns 0 on success pPlayer->SetMediaPos(lParam); break; default: bHandled = FALSE; } if (bHandled) return 0; } } else if (message == WM_KEYDOWN || message == WM_SYSKEYDOWN) { TRACE(_T("CTeenSpiritDlg::WindowProc. KeyDown: %d-%d\r\n"), wParam, lParam); } return CDialog::WindowProc(message, wParam, lParam); }
BOOL CTeenSpiritDlg::OnStateChanged(UINT stateMessage) { if (stateMessage == SM_MediaChanged) { MediaPlayListItem mpli; PrgAPI* pAPI = PRGAPI(); MediaPlayer* pMP = pAPI->GetMediaPlayer(); INT nPos = pMP->GetPlayListPos(); if (nPos != -1 && pMP->GetPlayListItem(mpli, nPos)) { if (mpli.artist == NULL) mpli.artist = _T(""); if (mpli.title == NULL) mpli.title = mpli.url; //=== Show Tray ToolTip //pAPI->GetTrayToolTipDlg()->OnMediaChanged(pAPI->GetOption(OPT_GEN_ShowToolTipOnMediaChanged)); //==== NOTIFIERS TrackerTrack track; track.artist = mpli.artist; track.title = mpli.title; track.rating = mpli.rating; track.length = (UINT)pMP->GetMediaLength(); pAPI->GetTracker()->SubmitTrack(ITracker::ACT_Started, track, GetCurrentUnixTimeStamp()); } return TRUE; } // case SM_MediaChanged: // { // MediaPlayer* pPlayer = pAPI->GetMediaPlayer(); // INT curMediaIdx = pPlayer->GetPlayListPos(); // if (curMediaIdx >= 0) // { // MediaPlayListItem mpli; // if (pPlayer->GetPlayListItem(mpli, curMediaIdx)) // { // //==== NOTIFIERS // if (mpli.artist == NULL) mpli.artist = _T(""); // if (mpli.title == NULL) mpli.title = mpli.url; // TrackerTrack track; // track.artist = mpli.artist; // track.title = mpli.title; // track.rating = mpli.rating; // track.length = (UINT)pPlayer->GetMediaLength(); // pAPI->GetTracker()->SubmitTrack(ITracker::ACT_Started, track, GetCurrentUnixTimeStamp()); // //==== Info Control // if (pAPI->GetOption(OPT_VIEWER_Auto))// m_ViewerPane.GetAutoViewerMode()) // { // TrackTypesEnum tt = GetTrackType(mpli.url); // if (tt < TTYPE_FIRSTVIDEO) // { // m_ViewerPane.SetMode(CViewerPane::MOD_NormalInfo); // } // else if (tt < TTYPE_FIRSTVIRTUAL) // { // m_ViewerPane.SetMode(CViewerPane::MOD_Visualizations); // } // else // { // m_ViewerPane.SetMode(CViewerPane::MOD_Browser); // } // } // if (m_ViewerPane.GetMode() == CViewerPane::MOD_NormalInfo && pAPI->GetOption(OPT_VIEWER_SyncWithPlayer)) // { // MediaPlayListItem mpli; // if (pPlayer->GetPlayListItem(mpli, curMediaIdx)) // { // FullTrackRecordSP rec; // if (pAPI->GetSQLManager()->GetFullTrackRecordByLocation(rec, mpli.url)) // { // CInfoCtrl* pIC = m_ViewerPane.GetInfoControl(); // if (pIC != NULL) // { // pIC->SetActiveItem(rec); // pIC->SetStyle(IT_Track); // pIC->Refresh(100); // } // } // } // } // } // // } // // } // // break; return FALSE; }
BOOL MenuManager::HandlePlayerCommands(MediaPlayer& player, MenuCommandsEnum cmd, INT playlistPos) { TRACEST(_T("MenuManager::HandlePlayerCommands")); PrgAPI* pAPI = PRGAPI(); ActionManager* pAM = pAPI->GetActionManager(); switch (cmd) { //=== Play Control ========================================= case MENU_PlayControl: player.Start(); break; case MENU_PauseControl: if (player.GetPlayState() == PS_Paused) player.Start(); else player.Pause(); break; case MENU_StopControl: player.Stop(); break; case MENU_NextControl: player.Next(); break; case MENU_PrevControl: player.Previous(); break; //=== Playlist Serialization ========================================= case MENU_LoadList: pAM->InsertPlayList(&player, -1); break; case MENU_SaveList: pAM->SavePlayList(&player); break; case MENU_InsertList: pAM->InsertPlayList(&player, playlistPos); break; default: //=== PlayModes ========================================= if (cmd>= MENU_PlayModesHolder && cmd < MENU_PlayModesHolder + MPNM_Last) player.SetNextMode(MediaPlayerNextMode(cmd - MENU_PlayModesHolder), -1); else if (cmd >= MENU_AutoContinueModeHolder && cmd < MENU_AutoContinueModeHolder + RTM_Last) { player.SetNextMode(player.GetNextMode(NULL), cmd - MENU_AutoContinueModeHolder); } //=== Rating ========================================= else if (cmd>= MENU_RatingHolder && cmd <= MENU_RatingHolder + 5) { int idx = playlistPos; if (idx >= 0) { SQLManager* pSM = PRGAPI()->GetSQLManager(); MediaPlayListItem mpli; if (player.GetPlayListItem(mpli, idx)) { FullTrackRecordSP rec; if (pSM->GetFullTrackRecordByLocation(rec, mpli.url)) { FullTrackRecordCollection col; col.push_back(rec); ActionManager* pAM = PRGAPI()->GetActionManager(); pAM->SetTrackRating(col, Stars2Rating((FLOAT)(cmd - MENU_RatingHolder))); } } } } else return FALSE; } return TRUE; }