void MenuManager::AppendServicesMenu(ITSMenu& mnu, ItemTypeEnum it) { PrgAPI* pAPI = PRGAPI(); ServicesRegistrationSrv* pSRS = pAPI->GetServicesRegistrationSrv(); INT added = 0; for (INT i = 0; i < (INT)pSRS->GetServicesCount(); i++) { ServiceTypeEnum st = STYPE_Unknown; switch (it) { case IT_Artist: st = STYPE_ArtistInfo; break; case IT_Album: st = STYPE_AlbumInfo; break; case IT_Track: st = STYPE_TrackInfo; break; default: ASSERT(0); break; } ServiceInfo si; if (pSRS->GetServiceInfo(i, si) && si.CanHandle(st)) { if ((added-1) % 5 == 0 && added > 1) mnu.AppendMenu(ITSMenu::MIT_Separator, 0, 0); added++; mnu.AppendMenu(ITSMenu::MIT_String, MENU_WebServicesHolder + i, (LPTSTR)si.Name, si.hIcon); } } }
BOOL WebPane::OnButton(UINT idx) { if (idx >= MENU_WebServicesHolder && idx < MENU_WebServicesHolderEnd) { PrgAPI* pAPI = PRGAPI(); ServicesRegistrationSrv* pSRS = pAPI->GetServicesRegistrationSrv(); ServiceInfo si; INT serviceID = idx - MENU_WebServicesHolder; if (pSRS->GetServiceInfo(serviceID, si)) { if (si.CanHandle(STYPE_ArtistInfo)) { if (m_SyncWithArtistService == serviceID) m_SyncWithArtistService = -1; else m_SyncWithArtistService = serviceID; } else if (si.CanHandle(STYPE_AlbumInfo)) { if (m_SyncWithAlbumService == serviceID) m_SyncWithAlbumService = -1; else m_SyncWithAlbumService = serviceID; } else if (si.CanHandle(STYPE_TrackInfo)) { if (m_SyncWithTrackService == serviceID) m_SyncWithTrackService = -1; else m_SyncWithTrackService = serviceID; } else ASSERT(0); } return TRUE; } else { switch (idx) { case MI_SyncWithPlayer: m_bSyncWithPlayer = !m_bSyncWithPlayer; break; case MI_SyncWithSectionChanger: m_bSyncWithSectionsChanger= !m_bSyncWithSectionsChanger; break; case MI_SyncWithTracksChanger: m_bSyncWithTracksChanger = !m_bSyncWithTracksChanger; break; case MI_UseAsWebViewer: { ServicesRegistrationSrv* pSRS = PRGAPI()->GetServicesRegistrationSrv(); ServicesRegistrationSrv::IWebViewer* pViewer = pSRS->GetWebViewer(); if (pViewer != this) pSRS->SetWebViewer(this); else pSRS->SetWebViewer(NULL); } break; default: ASSERT(0); return FALSE; } } return TRUE; }