bool CGUIWindowPVRRecordings::OnMessage(CGUIMessage &message) { bool bReturn = false; switch (message.GetMessage()) { case GUI_MSG_CLICKED: if (message.GetSenderId() == m_viewControl.GetCurrentControl()) { int iItem = m_viewControl.GetSelectedItem(); if (iItem >= 0 && iItem < m_vecItems->Size()) { switch (message.GetParam1()) { case ACTION_SELECT_ITEM: case ACTION_MOUSE_LEFT_CLICK: case ACTION_PLAY: { CFileItemPtr pItem = m_vecItems->Get(iItem); std::string resumeString = GetResumeString(*pItem); if (!resumeString.empty()) { CContextButtons choices; choices.Add(CONTEXT_BUTTON_RESUME_ITEM, resumeString); choices.Add(CONTEXT_BUTTON_PLAY_ITEM, 12021); int choice = CGUIDialogContextMenu::ShowAndGetChoice(choices); if (choice > 0) OnContextButtonPlay(pItem.get(), (CONTEXT_BUTTON)choice); bReturn = true; } break; } case ACTION_CONTEXT_MENU: case ACTION_MOUSE_RIGHT_CLICK: OnPopupMenu(iItem); bReturn = true; break; case ACTION_SHOW_INFO: ShowRecordingInfo(m_vecItems->Get(iItem).get()); bReturn = true; break; case ACTION_DELETE_ITEM: ActionDeleteRecording(m_vecItems->Get(iItem).get()); bReturn = true; break; default: bReturn = false; break; } } } else if (message.GetSenderId() == CONTROL_BTNGROUPITEMS) { CGUIRadioButtonControl *radioButton = (CGUIRadioButtonControl*) GetControl(CONTROL_BTNGROUPITEMS); g_PVRRecordings->SetGroupItems(radioButton->IsSelected()); Refresh(true); } break; case GUI_MSG_REFRESH_LIST: switch(message.GetParam1()) { case ObservableMessageTimers: case ObservableMessageCurrentItem: { if (IsActive()) SetInvalid(); bReturn = true; break; } case ObservableMessageRecordings: case ObservableMessageTimersReset: { if (IsActive()) Refresh(true); bReturn = true; break; } } break; } return bReturn || CGUIWindowPVRBase::OnMessage(message); }
void CGUIWindowMusicSongs::GetContextButtons(int itemNumber, CContextButtons &buttons) { CFileItemPtr item; if (itemNumber >= 0 && itemNumber < m_vecItems->Size()) item = m_vecItems->Get(itemNumber); if (item) { // are we in the playlists location? bool inPlaylists = m_vecItems->m_strPath.Equals(CUtil::MusicPlaylistsLocation()) || m_vecItems->m_strPath.Equals("special://musicplaylists/"); if (m_vecItems->IsVirtualDirectoryRoot()) { // get the usual music shares, and anything for all media windows CGUIDialogContextMenu::GetContextButtons("music", item, buttons); // enable Rip CD an audio disc if (CDetectDVDMedia::IsDiscInDrive() && item->IsCDDA()) { // those cds can also include Audio Tracks: CDExtra and MixedMode! CCdInfo *pCdInfo = CDetectDVDMedia::GetCdInfo(); if (pCdInfo->IsAudio(1) || pCdInfo->IsCDExtra(1) || pCdInfo->IsMixedMode(1)) buttons.Add(CONTEXT_BUTTON_RIP_CD, 600); } CGUIMediaWindow::GetContextButtons(itemNumber, buttons); } else { CGUIWindowMusicBase::GetContextButtons(itemNumber, buttons); if (item->GetPropertyBOOL("pluginreplacecontextitems")) return; if (!item->IsPlayList()) { if (item->IsAudio() && !item->IsLastFM() && !item->IsShoutCast()) buttons.Add(CONTEXT_BUTTON_SONG_INFO, 658); // Song Info else if (!item->IsParentFolder() && !item->IsLastFM() && !item->IsShoutCast() && !item->m_strPath.Left(3).Equals("new") && item->m_bIsFolder) { #if 0 if (m_musicdatabase.GetAlbumIdByPath(item->m_strPath) > -1) #endif buttons.Add(CONTEXT_BUTTON_INFO, 13351); // Album Info } } // enable Rip CD Audio or Track button if we have an audio disc if (CDetectDVDMedia::IsDiscInDrive() && m_vecItems->IsCDDA()) { // those cds can also include Audio Tracks: CDExtra and MixedMode! CCdInfo *pCdInfo = CDetectDVDMedia::GetCdInfo(); if (pCdInfo->IsAudio(1) || pCdInfo->IsCDExtra(1) || pCdInfo->IsMixedMode(1)) buttons.Add(CONTEXT_BUTTON_RIP_TRACK, 610); } // enable CDDB lookup if the current dir is CDDA if (CDetectDVDMedia::IsDiscInDrive() && m_vecItems->IsCDDA() && (g_settings.m_vecProfiles[g_settings.m_iLastLoadedProfileIndex].canWriteDatabases() || g_passwordManager.bMasterUser)) { buttons.Add(CONTEXT_BUTTON_CDDB, 16002); } if (!item->IsParentFolder() && !item->IsReadOnly()) { // either we're at the playlist location or its been explicitly allowed if (inPlaylists || g_guiSettings.GetBool("filelists.allowfiledeletion")) { buttons.Add(CONTEXT_BUTTON_DELETE, 117); buttons.Add(CONTEXT_BUTTON_RENAME, 118); } } } // Add the scan button(s) CGUIDialogMusicScan *pScanDlg = (CGUIDialogMusicScan *)m_gWindowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN); if (g_guiSettings.GetBool("musiclibrary.enabled") && pScanDlg) { if (pScanDlg->IsScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); // Stop Scanning else if (!inPlaylists && !m_vecItems->IsInternetStream() && !item->IsLastFM() && !item->IsShoutCast() && !item->m_strPath.Equals("add") && !item->IsParentFolder() && (g_settings.m_vecProfiles[g_settings.m_iLastLoadedProfileIndex].canWriteDatabases() || g_passwordManager.bMasterUser)) { buttons.Add(CONTEXT_BUTTON_SCAN, 13352); } } } if (!m_vecItems->IsVirtualDirectoryRoot()) buttons.Add(CONTEXT_BUTTON_SWITCH_MEDIA, 523); CGUIWindowMusicBase::GetNonContextButtons(buttons); }
void CGUIDialogContextMenu::GetContextButtons(const std::string &type, const CFileItemPtr& item, CContextButtons &buttons) { // Next, Add buttons to the ContextMenu that should ONLY be visible for sources and not autosourced items CMediaSource *share = GetShare(type, item.get()); if (CServiceBroker::GetProfileManager().GetCurrentProfile().canWriteSources() || g_passwordManager.bMasterUser) { if (share) { // Note. from now on, remove source & disable plugin should mean the same thing //! @todo might be smart to also combine editing source & plugin settings into one concept/dialog // Note. Temporarily disabled ability to remove plugin sources until installer is operational CURL url(share->strPath); bool isAddon = ADDON::TranslateContent(url.GetProtocol()) != CONTENT_NONE; if (!share->m_ignore && !isAddon) buttons.Add(CONTEXT_BUTTON_EDIT_SOURCE, 1027); // Edit Source if (type != "video") buttons.Add(CONTEXT_BUTTON_SET_DEFAULT, 13335); // Set as Default if (!share->m_ignore && !isAddon) buttons.Add(CONTEXT_BUTTON_REMOVE_SOURCE, 522); // Remove Source buttons.Add(CONTEXT_BUTTON_SET_THUMB, 20019); } if (!GetDefaultShareNameByType(type).empty()) buttons.Add(CONTEXT_BUTTON_CLEAR_DEFAULT, 13403); // Clear Default } if (share && LOCK_MODE_EVERYONE != CServiceBroker::GetProfileManager().GetMasterProfile().getLockMode()) { if (share->m_iHasLock == 0 && (CServiceBroker::GetProfileManager().GetCurrentProfile().canWriteSources() || g_passwordManager.bMasterUser)) buttons.Add(CONTEXT_BUTTON_ADD_LOCK, 12332); else if (share->m_iHasLock == 1) buttons.Add(CONTEXT_BUTTON_REMOVE_LOCK, 12335); else if (share->m_iHasLock == 2) { buttons.Add(CONTEXT_BUTTON_REMOVE_LOCK, 12335); bool maxRetryExceeded = false; if (CServiceBroker::GetSettings().GetInt(CSettings::SETTING_MASTERLOCK_MAXRETRIES) != 0) maxRetryExceeded = (share->m_iBadPwdCount >= CServiceBroker::GetSettings().GetInt(CSettings::SETTING_MASTERLOCK_MAXRETRIES)); if (maxRetryExceeded) buttons.Add(CONTEXT_BUTTON_RESET_LOCK, 12334); else buttons.Add(CONTEXT_BUTTON_CHANGE_LOCK, 12356); } } if (share && !g_passwordManager.bMasterUser && item->m_iHasLock == 1) buttons.Add(CONTEXT_BUTTON_REACTIVATE_LOCK, 12353); }
void CGUIWindowMusicBase::GetNonContextButtons(CContextButtons &buttons) { if (CServiceBroker::GetADSP().IsProcessing()) buttons.Add(CONTEXT_BUTTON_ACTIVE_ADSP_SETTINGS, 15047); }
void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &buttons) { CFileItemPtr item; if (itemNumber >= 0 && itemNumber < m_vecItems->Size()) item = m_vecItems->Get(itemNumber); CGUIWindowVideoBase::GetContextButtons(itemNumber, buttons); if (item && item->GetPropertyBOOL("pluginreplacecontextitems")) return; CVideoDatabaseDirectory dir; NODE_TYPE node = dir.GetDirectoryChildType(m_vecItems->m_strPath); if (!item) { CGUIDialogVideoScan *pScanDlg = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); if (pScanDlg && pScanDlg->IsScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); else buttons.Add(CONTEXT_BUTTON_UPDATE_LIBRARY, 653); } else if (m_vecItems->m_strPath.Equals("sources://video/")) { // get the usual shares CGUIDialogContextMenu::GetContextButtons("video", item, buttons); // add scan button somewhere here CGUIDialogVideoScan *pScanDlg = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); if (pScanDlg && pScanDlg->IsScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); // Stop Scanning if (!item->IsDVD() && item->m_strPath != "add" && (g_settings.GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser)) { CVideoDatabase database; database.Open(); ADDON::ScraperPtr info = database.GetScraperForPath(item->m_strPath); if (!pScanDlg || (pScanDlg && !pScanDlg->IsScanning())) { if (!item->IsLiveTV() && !item->IsPlugin() && !item->IsAddonsPath()) { if (info && info->Content() != CONTENT_NONE) buttons.Add(CONTEXT_BUTTON_SET_CONTENT, 20442); else buttons.Add(CONTEXT_BUTTON_SET_CONTENT, 20333); } } if (info && (!pScanDlg || (pScanDlg && !pScanDlg->IsScanning()))) buttons.Add(CONTEXT_BUTTON_SCAN, 13349); } } else { ADDON::ScraperPtr info; VIDEO::SScanSettings settings; GetScraperForItem(item.get(), info, settings); if (info && info->Content() == CONTENT_TVSHOWS) buttons.Add(CONTEXT_BUTTON_INFO, item->m_bIsFolder ? 20351 : 20352); else if (info && info->Content() == CONTENT_MUSICVIDEOS) buttons.Add(CONTEXT_BUTTON_INFO,20393); else if (!item->m_bIsFolder && !item->m_strPath.Left(19).Equals("newsmartplaylist://")) buttons.Add(CONTEXT_BUTTON_INFO, 13346); if (item->HasVideoInfoTag() && !item->GetVideoInfoTag()->m_strArtist.IsEmpty()) { CMusicDatabase database; database.Open(); if (database.GetArtistByName(item->GetVideoInfoTag()->m_strArtist) > -1) buttons.Add(CONTEXT_BUTTON_GO_TO_ARTIST, 20396); } if (item->HasVideoInfoTag() && item->GetVideoInfoTag()->m_strAlbum.size() > 0) { CMusicDatabase database; database.Open(); if (database.GetAlbumByName(item->GetVideoInfoTag()->m_strAlbum) > -1) buttons.Add(CONTEXT_BUTTON_GO_TO_ALBUM, 20397); } if (item->HasVideoInfoTag() && item->GetVideoInfoTag()->m_strAlbum.size() > 0 && item->GetVideoInfoTag()->m_strArtist.size() > 0 && item->GetVideoInfoTag()->m_strTitle.size() > 0) { CMusicDatabase database; database.Open(); if (database.GetSongByArtistAndAlbumAndTitle(item->GetVideoInfoTag()->m_strArtist, item->GetVideoInfoTag()->m_strAlbum, item->GetVideoInfoTag()->m_strTitle) > -1) { buttons.Add(CONTEXT_BUTTON_PLAY_OTHER, 20398); } } if (!item->IsParentFolder()) { // can we update the database? if (g_settings.GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser) { if (node == NODE_TYPE_TITLE_TVSHOWS) { CGUIDialogVideoScan *pScanDlg = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); if (pScanDlg && pScanDlg->IsScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); else buttons.Add(CONTEXT_BUTTON_UPDATE_TVSHOW, 13349); } if (!item->IsPlugin() && !item->IsLiveTV() && !item->IsAddonsPath() && item->m_strPath != "sources://video/" && item->m_strPath != "special://videoplaylists/") { if (item->m_bIsFolder) { // Have both options for folders since we don't know whether all childs are watched/unwatched buttons.Add(CONTEXT_BUTTON_MARK_UNWATCHED, 16104); //Mark as UnWatched buttons.Add(CONTEXT_BUTTON_MARK_WATCHED, 16103); //Mark as Watched } else { if (item->GetOverlayImage().Equals("OverlayWatched.png")) buttons.Add(CONTEXT_BUTTON_MARK_UNWATCHED, 16104); //Mark as UnWatched else buttons.Add(CONTEXT_BUTTON_MARK_WATCHED, 16103); //Mark as Watched } } if ((node == NODE_TYPE_TITLE_TVSHOWS) || (item->IsVideoDb() && item->HasVideoInfoTag() && !item->m_bIsFolder)) { buttons.Add(CONTEXT_BUTTON_EDIT, 16105); //Edit Title } if (m_database.HasContent(VIDEODB_CONTENT_TVSHOWS) && item->HasVideoInfoTag() && !item->m_bIsFolder && item->GetVideoInfoTag()->m_iEpisode == -1 && item->GetVideoInfoTag()->m_strArtist.IsEmpty() && item->GetVideoInfoTag()->m_iDbId >= 0) // movie entry { if (m_database.IsLinkedToTvshow(item->GetVideoInfoTag()->m_iDbId)) buttons.Add(CONTEXT_BUTTON_UNLINK_MOVIE,20385); buttons.Add(CONTEXT_BUTTON_LINK_MOVIE,20384); } if (node == NODE_TYPE_SEASONS && item->m_bIsFolder) buttons.Add(CONTEXT_BUTTON_SET_SEASON_THUMB, 20371); if (item->m_strPath.Left(14).Equals("videodb://1/7/") && item->m_strPath.size() > 14 && item->m_bIsFolder) // sets { buttons.Add(CONTEXT_BUTTON_EDIT, 16105); buttons.Add(CONTEXT_BUTTON_SET_MOVIESET_THUMB, 20435); buttons.Add(CONTEXT_BUTTON_DELETE, 646); } if (node == NODE_TYPE_ACTOR && !dir.IsAllItem(item->m_strPath) && item->m_bIsFolder) { if (m_vecItems->m_strPath.Left(11).Equals("videodb://3")) // mvids buttons.Add(CONTEXT_BUTTON_SET_ARTIST_THUMB, 13359); else buttons.Add(CONTEXT_BUTTON_SET_ACTOR_THUMB, 20403); } if (item->IsVideoDb() && item->HasVideoInfoTag() && (!item->m_bIsFolder || node == NODE_TYPE_TITLE_TVSHOWS)) { if (info && info->Content() == CONTENT_TVSHOWS) { if(item->GetVideoInfoTag()->m_iBookmarkId != -1 && item->GetVideoInfoTag()->m_iBookmarkId != 0) { buttons.Add(CONTEXT_BUTTON_UNLINK_BOOKMARK, 20405); } } buttons.Add(CONTEXT_BUTTON_DELETE, 646); } // this should ideally be non-contextual (though we need some context for non-tv show node I guess) CGUIDialogVideoScan *pScanDlg = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); if (pScanDlg && pScanDlg->IsScanning()) { if (node != NODE_TYPE_TITLE_TVSHOWS) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); } else buttons.Add(CONTEXT_BUTTON_UPDATE_LIBRARY, 653); } if (!m_vecItems->IsVideoDb() && !m_vecItems->IsVirtualDirectoryRoot()) { // non-video db items, file operations are allowed if (g_guiSettings.GetBool("filelists.allowfiledeletion") && CUtil::SupportsFileOperations(item->m_strPath)) { buttons.Add(CONTEXT_BUTTON_DELETE, 117); buttons.Add(CONTEXT_BUTTON_RENAME, 118); } // add "Set/Change content" to folders if (item->m_bIsFolder && !item->IsPlayList() && !item->IsLiveTV() && !item->IsPlugin() && !item->IsAddonsPath()) { CGUIDialogVideoScan *pScanDlg = (CGUIDialogVideoScan *)g_windowManager.GetWindow(WINDOW_DIALOG_VIDEO_SCAN); if (!pScanDlg || (pScanDlg && !pScanDlg->IsScanning())) { if (info && info->Content() != CONTENT_NONE) buttons.Add(CONTEXT_BUTTON_SET_CONTENT, 20442); else buttons.Add(CONTEXT_BUTTON_SET_CONTENT, 20333); } } } if (item->IsPlugin() || item->m_strPath.Left(9).Equals("script://") || m_vecItems->IsPlugin()) buttons.Add(CONTEXT_BUTTON_PLUGIN_SETTINGS, 1045); } } CGUIWindowVideoBase::GetNonContextButtons(itemNumber, buttons); }
bool CRetroPlayerDialogs::ChooseGameClientDialog(const vector<string> &clientIds, const CFileItem &file, GameClientPtr &result) { CLog::Log(LOGDEBUG, "RetroPlayer: Multiple clients found: %s", StringUtils::Join(clientIds, ", ").c_str()); // Turn ID strings into game client pointers (std::map enables sorting by name) map<string, GameClientPtr> clients; for (vector<string>::const_iterator it = clientIds.begin(); it != clientIds.end(); ++it) { AddonPtr addon; GameClientPtr gc; if (CAddonMgr::Get().GetAddon(*it, addon, ADDON_GAMEDLL)) { gc = boost::dynamic_pointer_cast<CGameClient>(addon); if (gc) { string strName = gc->Name(); // Make lower case for sorting purposes StringUtils::ToLower(strName); clients[strName] = gc; } } } // CContextButtons doesn't support keying by string, only int, so use a // parallel array to track the string values (client name) CContextButtons choicesInt; unsigned int i = 0; vector<string> choicesStr; choicesStr.reserve(clients.size()); for (map<string, GameClientPtr>::const_iterator it = clients.begin(); it != clients.end(); ++it) { string strName = it->second->Name(); choicesInt.Add(i++, strName); // Remember, our map keys are lower case StringUtils::ToLower(strName); choicesStr.push_back(strName); } // i becomes the index of the final item (choice to go to the add-on manager) const unsigned int iAddonMgr = i; choicesInt.Add(iAddonMgr, 24025); // "Manage emulators..." int btnid = CGUIDialogContextMenu::ShowAndGetChoice(choicesInt); if (btnid < 0 || btnid > (int)iAddonMgr) { CLog::Log(LOGDEBUG, "RetroPlayer: User cancelled game client selection"); return false; } else if (btnid == (int)iAddonMgr) { // Queue the file so that if a compatible game client is installed, the // user will be asked to launch the file. CGameManager::Get().SetAutoLaunch(file); CLog::Log(LOGDEBUG, "RetroPlayer: User chose to go to the add-on manager"); CStdStringArray params; params.push_back("addons://all/xbmc.gameclient"); g_windowManager.ActivateWindow(WINDOW_ADDON_BROWSER, params); return false; } else { result = clients[choicesStr[btnid]]; CLog::Log(LOGDEBUG, "RetroPlayer: Using %s", result->ID().c_str()); } return true; }
void CGUIWindowFileManager::OnPopupMenu(int list, int item, bool bContextDriven /* = true */) { if (list < 0 || list >= 2) return ; bool bDeselect = SelectItem(list, item); // calculate the position for our menu float posX = 200; float posY = 100; const CGUIControl *pList = GetControl(CONTROL_LEFT_LIST + list); if (pList) { posX = pList->GetXPosition() + pList->GetWidth() / 2; posY = pList->GetYPosition() + pList->GetHeight() / 2; } CFileItemPtr pItem = m_vecItems[list]->Get(item); if (!pItem.get()) return; if (m_Directory[list]->IsVirtualDirectoryRoot()) { if (item < 0) { // TODO: We should add the option here for shares to be added if there aren't any return ; } // and do the popup menu if (CGUIDialogContextMenu::SourcesMenu("files", pItem, posX, posY)) { m_rootDir.SetSources(*CMediaSourceSettings::Get().GetSources("files")); if (m_Directory[1 - list]->IsVirtualDirectoryRoot()) Refresh(); else Refresh(list); return ; } pItem->Select(false); return ; } // popup the context menu bool showEntry = false; if (item >= m_vecItems[list]->Size()) item = -1; if (item >= 0) showEntry=(!pItem->IsParentFolder() || (pItem->IsParentFolder() && m_vecItems[list]->GetSelectedCount()>0)); // determine available players VECPLAYERCORES vecCores; CPlayerCoreFactory::Get().GetPlayers(*pItem, vecCores); // add the needed buttons CContextButtons choices; if (item >= 0) { //The ".." item is not selectable. Take that into account when figuring out if all items are selected int notSelectable = CSettings::Get().GetBool("filelists.showparentdiritems") ? 1 : 0; if (NumSelected(list) < m_vecItems[list]->Size() - notSelectable) choices.Add(1, 188); // SelectAll if (!pItem->IsParentFolder()) choices.Add(2, XFILE::CFavouritesDirectory::IsFavourite(pItem.get(), GetID()) ? 14077 : 14076); // Add/Remove Favourite if (vecCores.size() > 1) choices.Add(3, 15213); // Play Using... if (CanRename(list) && !pItem->IsParentFolder()) choices.Add(4, 118); // Rename if (CanDelete(list) && showEntry) choices.Add(5, 117); // Delete if (CanCopy(list) && showEntry) choices.Add(6, 115); // Copy if (CanMove(list) && showEntry) choices.Add(7, 116); // Move } if (CanNewFolder(list)) choices.Add(8, 20309); // New Folder if (item >= 0 && pItem->m_bIsFolder && !pItem->IsParentFolder()) choices.Add(9, 13393); // Calculate Size choices.Add(11, 20128); // Go To Root choices.Add(12, 523); // switch media if (CJobManager::GetInstance().IsProcessing("filemanager")) choices.Add(13, 167); int btnid = CGUIDialogContextMenu::ShowAndGetChoice(choices); if (btnid == 1) { OnSelectAll(list); bDeselect=false; } if (btnid == 2) { XFILE::CFavouritesDirectory::AddOrRemove(pItem.get(), GetID()); return; } if (btnid == 3) { VECPLAYERCORES vecCores; CPlayerCoreFactory::Get().GetPlayers(*pItem, vecCores); g_application.m_eForcedNextPlayer = CPlayerCoreFactory::Get().SelectPlayerDialog(vecCores); if (g_application.m_eForcedNextPlayer != EPC_NONE) OnStart(pItem.get()); } if (btnid == 4) OnRename(list); if (btnid == 5) OnDelete(list); if (btnid == 6) OnCopy(list); if (btnid == 7) OnMove(list); if (btnid == 8) OnNewFolder(list); if (btnid == 9) { // setup the progress dialog, and show it CGUIDialogProgress *progress = (CGUIDialogProgress *)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); if (progress) { progress->SetHeading(CVariant{13394}); for (int i=0; i < 3; i++) progress->SetLine(i, CVariant{""}); progress->Open(); } // Calculate folder size for each selected item for (int i=0; i<m_vecItems[list]->Size(); ++i) { CFileItemPtr pItem2=m_vecItems[list]->Get(i); if (pItem2->m_bIsFolder && pItem2->IsSelected()) { int64_t folderSize = CalculateFolderSize(pItem2->GetPath(), progress); if (folderSize >= 0) { pItem2->m_dwSize = folderSize; if (folderSize == 0) pItem2->SetLabel2(StringUtils::SizeToString(folderSize)); else pItem2->SetFileSizeLabel(); } } } if (progress) progress->Close(); } if (btnid == 11) { Update(list,""); return; } if (btnid == 12) { CGUIDialogContextMenu::SwitchMedia("files", m_vecItems[list]->GetPath()); return; } if (btnid == 13) CancelJobs(); if (bDeselect && item >= 0 && item < m_vecItems[list]->Size()) { // deselect item as we didn't do anything pItem->Select(false); } }
bool CGUIDialogAudioDSPManager::OnPopupMenu(int iItem, int listType) { // popup the context menu // grab our context menu CContextButtons buttons; int listSize = 0; CFileItemPtr pItem; if (listType == LIST_ACTIVE) { listSize = m_activeItems[m_iCurrentType]->Size(); pItem = m_activeItems[m_iCurrentType]->Get(iItem); } else if (listType == LIST_AVAILABLE) { listSize = m_availableItems[m_iCurrentType]->Size(); pItem = m_availableItems[m_iCurrentType]->Get(iItem); } if (!pItem) { return false; } // mark the item if (iItem >= 0 && iItem < listSize) { pItem->Select(true); } else { return false; } if (listType == LIST_ACTIVE) { if (listSize > 1) { buttons.Add(CONTEXT_BUTTON_MOVE, 116); /* Move mode up or down */ } buttons.Add(CONTEXT_BUTTON_ACTIVATE, 24021); /* Used to deactivate addon process type */ } else if (listType == LIST_AVAILABLE) { if (m_activeItems[m_iCurrentType]->Size() > 0 && (m_iCurrentType == AE_DSP_MODE_TYPE_INPUT_RESAMPLE || m_iCurrentType == AE_DSP_MODE_TYPE_OUTPUT_RESAMPLE)) { buttons.Add(CONTEXT_BUTTON_ACTIVATE, 15080); /* Used to swap addon resampling process type */ } else { buttons.Add(CONTEXT_BUTTON_ACTIVATE, 24022); /* Used to activate addon process type */ } } if (pItem->GetProperty("SettingsDialog").asInteger() != 0) { buttons.Add(CONTEXT_BUTTON_SETTINGS, 15078); /* Used to activate addon process type help description*/ } if (pItem->GetProperty("Help").asInteger() > 0) { buttons.Add(CONTEXT_BUTTON_HELP, 15062); /* Used to activate addon process type help description*/ } int choice = CGUIDialogContextMenu::ShowAndGetChoice(buttons); // deselect our item if (iItem >= 0 && iItem < listSize) { pItem->Select(false); } if (choice < 0) { return false; } return OnContextButton(iItem, (CONTEXT_BUTTON)choice, listType); }
std::string CGUIDialogSelectGameClient::InstallGameClient(const GameClientVector& installable) { using namespace ADDON; std::string gameClient; //! @todo Switch to add-on browser when more emulators have icons /* std::string chosenClientId; if (CGUIWindowAddonBrowser::SelectAddonID(ADDON_GAMEDLL, chosenClientId, false, true, false, true, false) >= 0 && !chosenClientId.empty()) { CLog::Log(LOGDEBUG, "Select game client dialog: User installed %s", chosenClientId.c_str()); AddonPtr addon; if (CAddonMgr::GetInstance().GetAddon(chosenClientId, addon, ADDON_GAMEDLL)) gameClient = addon->ID(); if (gameClient.empty()) CLog::Log(LOGERROR, "Select game client dialog: Failed to get addon %s", chosenClientId.c_str()); } */ CContextButtons choiceButtons; // Add emulators int i = 0; for (const GameClientPtr& gameClient : installable) choiceButtons.Add(i++, gameClient->Name()); // Add button to browser all emulators const int iAddonBrowser = i++; choiceButtons.Add(iAddonBrowser, 35255); // "Browse all emulators" // Do modal int result = CGUIDialogContextMenu::ShowAndGetChoice(choiceButtons); if (0 <= result && result < static_cast<int>(installable.size())) { std::string gameClientId = installable[result]->ID(); CLog::Log(LOGDEBUG, "Select game client dialog: Installing %s", gameClientId.c_str()); AddonPtr installedAddon; if (CAddonInstaller::GetInstance().InstallModal(gameClientId, installedAddon, false)) { CLog::Log(LOGDEBUG, "Select game client dialog: Successfully installed %s", installedAddon->ID().c_str()); // if the addon is disabled we need to enable it if (CAddonMgr::GetInstance().IsAddonDisabled(installedAddon->ID())) CAddonMgr::GetInstance().EnableAddon(installedAddon->ID()); gameClient = installedAddon->ID(); } else { CLog::Log(LOGERROR, "Select game client dialog: Failed to install %s", gameClientId.c_str()); // "Error" // "Failed to install add-on." HELPERS::ShowOKDialogText(257, 35256); } } else if (result == iAddonBrowser) { ActivateAddonBrowser(); } else { CLog::Log(LOGDEBUG, "Select game client dialog: User cancelled game client installation"); } return gameClient; }
void CGUIWindowPVRGuide::GetContextButtons(int itemNumber, CContextButtons &buttons) { if (itemNumber < 0 || itemNumber >= m_vecItems->Size()) return; CFileItemPtr pItem = m_vecItems->Get(itemNumber); buttons.Add(CONTEXT_BUTTON_PLAY_ITEM, 19000); /* switch channel */ if (pItem->HasEPGInfoTag() && pItem->GetEPGInfoTag()->HasRecording()) buttons.Add(CONTEXT_BUTTON_PLAY_OTHER, 19687); /* play recording */ CFileItemPtr timer = g_PVRTimers->GetTimerForEpgTag(pItem.get()); if (timer && timer->HasPVRTimerInfoTag()) { if (timer->GetPVRTimerInfoTag()->IsRecording()) buttons.Add(CONTEXT_BUTTON_STOP_RECORD, 19059); /* stop recording */ else if (timer->GetPVRTimerInfoTag()->HasTimerType() && !timer->GetPVRTimerInfoTag()->GetTimerType()->IsReadOnly()) buttons.Add(CONTEXT_BUTTON_STOP_RECORD, 19060); /* delete timer */ } else if (pItem->HasEPGInfoTag() && pItem->GetEPGInfoTag()->EndAsLocalTime() > CDateTime::GetCurrentDateTime()) { if (pItem->GetEPGInfoTag()->StartAsLocalTime() < CDateTime::GetCurrentDateTime()) buttons.Add(CONTEXT_BUTTON_START_RECORD, 264); /* record */ buttons.Add(CONTEXT_BUTTON_START_RECORD, 19061); /* add timer */ buttons.Add(CONTEXT_BUTTON_ADVANCED_RECORD, 841); /* add custom timer */ } buttons.Add(CONTEXT_BUTTON_INFO, 19047); /* epg info */ buttons.Add(CONTEXT_BUTTON_FIND, 19003); /* find similar program */ if (m_viewControl.GetCurrentControl() == GUIDE_VIEW_TIMELINE) { buttons.Add(CONTEXT_BUTTON_BEGIN, 19063); /* go to begin */ buttons.Add(CONTEXT_BUTTON_NOW, 19070); /* go to now */ buttons.Add(CONTEXT_BUTTON_END, 19064); /* go to end */ } if (pItem->HasEPGInfoTag() && pItem->GetEPGInfoTag()->HasPVRChannel() && g_PVRClients->HasMenuHooks(pItem->GetEPGInfoTag()->ChannelTag()->ClientID(), PVR_MENUHOOK_EPG)) buttons.Add(CONTEXT_BUTTON_MENU_HOOKS, 19195); /* PVR client specific action */ CGUIWindowPVRBase::GetContextButtons(itemNumber, buttons); }
void CGUIDialogLockSettings::OnSettingAction(const CSetting *setting) { if (setting == NULL) return; CGUIDialogSettingsManualBase::OnSettingAction(setting); const std::string &settingId = setting->GetId(); if (settingId == SETTING_LOCKCODE) { CContextButtons choices; choices.Add(1, 1223); choices.Add(2, 12337); choices.Add(3, 12338); choices.Add(4, 12339); int choice = CGUIDialogContextMenu::ShowAndGetChoice(choices); std::string newPassword; LockType iLockMode = LOCK_MODE_UNKNOWN; bool bResult = false; switch(choice) { case 1: iLockMode = LOCK_MODE_EVERYONE; //Disabled! Need check routine!!! bResult = true; break; case 2: iLockMode = LOCK_MODE_NUMERIC; bResult = CGUIDialogNumeric::ShowAndVerifyNewPassword(newPassword); break; case 3: iLockMode = LOCK_MODE_GAMEPAD; bResult = CGUIDialogGamepad::ShowAndVerifyNewPassword(newPassword); break; case 4: iLockMode = LOCK_MODE_QWERTY; bResult = CGUIKeyboardFactory::ShowAndVerifyNewPassword(newPassword); break; default: break; } if (bResult) { if (iLockMode == LOCK_MODE_EVERYONE) newPassword = "******"; m_locks.code = newPassword; if (m_locks.code == "-") iLockMode = LOCK_MODE_EVERYONE; m_locks.mode = iLockMode; setLockCodeLabel(); setDetailSettingsEnabled(m_locks.mode != LOCK_MODE_EVERYONE); m_changed = true; } } }
void CGUIWindowPVRGuide::GetContextButtons(int itemNumber, CContextButtons &buttons) { if (itemNumber < 0 || itemNumber >= m_vecItems->Size()) return; CFileItemPtr pItem = m_vecItems->Get(itemNumber); buttons.Add(CONTEXT_BUTTON_PLAY_ITEM, 19000); /* Switch channel */ buttons.Add(CONTEXT_BUTTON_INFO, 19047); /* Programme information */ buttons.Add(CONTEXT_BUTTON_FIND, 19003); /* Find similar */ CEpgInfoTagPtr epg(pItem->GetEPGInfoTag()); if (epg) { CPVRTimerInfoTagPtr timer(epg->Timer()); if (timer) { if (timer->GetTimerRuleId() != PVR_TIMER_NO_PARENT) { buttons.Add(CONTEXT_BUTTON_EDIT_TIMER_RULE, 19243); /* Edit timer rule */ buttons.Add(CONTEXT_BUTTON_DELETE_TIMER_RULE, 19295); /* Delete timer rule */ } const CPVRTimerTypePtr timerType(timer->GetTimerType()); if (timerType && !timerType->IsReadOnly()) buttons.Add(CONTEXT_BUTTON_EDIT_TIMER, 19242); /* Edit timer */ if (timer->IsRecording()) buttons.Add(CONTEXT_BUTTON_STOP_RECORD, 19059); /* Stop recording */ else { if (timerType && !timerType->IsReadOnly()) buttons.Add(CONTEXT_BUTTON_DELETE_TIMER, 19060); /* Delete timer */ } } else if (g_PVRClients->SupportsTimers()) { if (epg->EndAsLocalTime() > CDateTime::GetCurrentDateTime()) buttons.Add(CONTEXT_BUTTON_START_RECORD, 264); /* Record */ buttons.Add(CONTEXT_BUTTON_ADD_TIMER, 19061); /* Add timer */ } if (epg->HasRecording()) buttons.Add(CONTEXT_BUTTON_PLAY_OTHER, 19687); /* Play recording */ } if (m_viewControl.GetCurrentControl() == GUIDE_VIEW_TIMELINE) { buttons.Add(CONTEXT_BUTTON_BEGIN, 19063); /* Go to begin */ buttons.Add(CONTEXT_BUTTON_NOW, 19070); /* Go to now */ buttons.Add(CONTEXT_BUTTON_END, 19064); /* Go to end */ } if (epg) { CPVRChannelPtr channel(epg->ChannelTag()); if (channel && g_PVRClients->HasMenuHooks(channel->ClientID(), PVR_MENUHOOK_EPG)) buttons.Add(CONTEXT_BUTTON_MENU_HOOKS, 19195); /* PVR client specific action */ } CGUIWindowPVRBase::GetContextButtons(itemNumber, buttons); }
void CMediaSettings::OnSettingAction(const CSetting *setting) { if (setting == NULL) return; const std::string &settingId = setting->GetId(); if (settingId == CSettings::SETTING_KARAOKE_EXPORT) { CContextButtons choices; choices.Add(1, g_localizeStrings.Get(22034)); choices.Add(2, g_localizeStrings.Get(22035)); int retVal = CGUIDialogContextMenu::ShowAndGetChoice(choices); if ( retVal > 0 ) { std::string path(CProfilesManager::GetInstance().GetDatabaseFolder()); VECSOURCES shares; g_mediaManager.GetLocalDrives(shares); if (CGUIDialogFileBrowser::ShowAndGetDirectory(shares, g_localizeStrings.Get(661), path, true)) { CMusicDatabase musicdatabase; musicdatabase.Open(); if ( retVal == 1 ) { path = URIUtils::AddFileToFolder(path, "karaoke.html"); musicdatabase.ExportKaraokeInfo( path, true ); } else { path = URIUtils::AddFileToFolder(path, "karaoke.csv"); musicdatabase.ExportKaraokeInfo( path, false ); } musicdatabase.Close(); } } } else if (settingId == CSettings::SETTING_KARAOKE_IMPORTCSV) { std::string path(CProfilesManager::GetInstance().GetDatabaseFolder()); VECSOURCES shares; g_mediaManager.GetLocalDrives(shares); if (CGUIDialogFileBrowser::ShowAndGetFile(shares, "karaoke.csv", g_localizeStrings.Get(651) , path)) { CMusicDatabase musicdatabase; musicdatabase.Open(); musicdatabase.ImportKaraokeInfo(path); musicdatabase.Close(); } } else if (settingId == CSettings::SETTING_MUSICLIBRARY_CLEANUP) { if (CGUIDialogYesNo::ShowAndGetInput(CVariant{313}, CVariant{333})) g_application.StartMusicCleanup(true); } else if (settingId == CSettings::SETTING_MUSICLIBRARY_EXPORT) CBuiltins::Execute("exportlibrary(music)"); else if (settingId == CSettings::SETTING_MUSICLIBRARY_IMPORT) { std::string path; VECSOURCES shares; g_mediaManager.GetLocalDrives(shares); g_mediaManager.GetNetworkLocations(shares); g_mediaManager.GetRemovableDrives(shares); if (CGUIDialogFileBrowser::ShowAndGetFile(shares, "musicdb.xml", g_localizeStrings.Get(651) , path)) { CMusicDatabase musicdatabase; musicdatabase.Open(); musicdatabase.ImportFromXML(path); musicdatabase.Close(); } } else if (settingId == CSettings::SETTING_VIDEOLIBRARY_CLEANUP) { if (CGUIDialogYesNo::ShowAndGetInput(CVariant{313}, CVariant{333})) g_application.StartVideoCleanup(true); } else if (settingId == CSettings::SETTING_VIDEOLIBRARY_EXPORT) CBuiltins::Execute("exportlibrary(video)"); else if (settingId == CSettings::SETTING_VIDEOLIBRARY_IMPORT) { std::string path; VECSOURCES shares; g_mediaManager.GetLocalDrives(shares); g_mediaManager.GetNetworkLocations(shares); g_mediaManager.GetRemovableDrives(shares); if (CGUIDialogFileBrowser::ShowAndGetDirectory(shares, g_localizeStrings.Get(651) , path)) { CVideoDatabase videodatabase; videodatabase.Open(); videodatabase.ImportFromXML(path); videodatabase.Close(); } } }
void CGUIWindowPrograms::GetContextButtons(int itemNumber, CContextButtons &buttons) { if (itemNumber < 0 || itemNumber >= m_vecItems->Size()) return; CFileItemPtr item = m_vecItems->Get(itemNumber); if (item && !item->GetPropertyBOOL("pluginreplacecontextitems")) { if ( m_vecItems->IsVirtualDirectoryRoot() ) { CGUIDialogContextMenu::GetContextButtons("programs", item, buttons); } else { if (item->IsXBE() || item->IsShortCut()) { if (CFile::Exists("special://xbmc/system/scripts/XBMC4Gamers Extras/Synopsis/default.py") || CFile::Exists("special://xbmc/system/scripts/Synopsis/default.py")) { buttons.Add(CONTEXT_BUTTON_SYNOPSIS, "Synopsis"); // Synopsis } CStdString strLaunch = g_localizeStrings.Get(518); // Launch if (g_guiSettings.GetBool("myprograms.gameautoregion")) { int iRegion = GetRegion(itemNumber); if (iRegion == VIDEO_NTSCM) strLaunch += " (NTSC-M)"; if (iRegion == VIDEO_NTSCJ) strLaunch += " (NTSC-J)"; if (iRegion == VIDEO_PAL50) strLaunch += " (PAL)"; if (iRegion == VIDEO_PAL60) strLaunch += " (PAL-60)"; } buttons.Add(CONTEXT_BUTTON_LAUNCH, strLaunch); DWORD dwTitleId = CUtil::GetXbeID(item->GetPath()); CStdString strTitleID; CStdString strGameSavepath; strTitleID.Format("%08X",dwTitleId); URIUtils::AddFileToFolder("E:\\udata\\",strTitleID,strGameSavepath); if (CDirectory::Exists(strGameSavepath)) buttons.Add(CONTEXT_BUTTON_GAMESAVES, 20322); // Goto GameSaves if (g_guiSettings.GetBool("myprograms.gameautoregion")) buttons.Add(CONTEXT_BUTTON_LAUNCH_IN, 519); // launch in video mode if (g_passwordManager.IsMasterLockUnlocked(false) || g_settings.GetCurrentProfile().canWriteDatabases()) { if (item->IsShortCut()) buttons.Add(CONTEXT_BUTTON_RENAME, 16105); // rename else buttons.Add(CONTEXT_BUTTON_RENAME, 520); // edit xbe title } if (m_database.ItemHasTrainer(dwTitleId)) buttons.Add(CONTEXT_BUTTON_TRAINER_OPTIONS, 12015); // trainer options } buttons.Add(CONTEXT_BUTTON_SCAN_TRAINERS, 12012); // scan trainers buttons.Add(CONTEXT_BUTTON_GOTO_ROOT, 20128); // Go to Root } } CGUIMediaWindow::GetContextButtons(itemNumber, buttons); if (item && !item->GetPropertyBOOL("pluginreplacecontextitems")) buttons.Add(CONTEXT_BUTTON_SETTINGS, 5); // Settings }
void CGUIWindowScripts::GetContextButtons(int itemNumber, CContextButtons &buttons) { CGUIMediaWindow::GetContextButtons(itemNumber, buttons); buttons.Add(CONTEXT_BUTTON_INFO, 654); }
void CMediaSettings::OnSettingAction(const CSetting *setting) { if (setting == NULL) return; const std::string &settingId = setting->GetId(); if (settingId == "karaoke.export") { CContextButtons choices; choices.Add(1, g_localizeStrings.Get(22034)); choices.Add(2, g_localizeStrings.Get(22035)); int retVal = CGUIDialogContextMenu::ShowAndGetChoice(choices); if ( retVal > 0 ) { std::string path(CProfilesManager::Get().GetDatabaseFolder()); VECSOURCES shares; g_mediaManager.GetLocalDrives(shares); if (CGUIDialogFileBrowser::ShowAndGetDirectory(shares, g_localizeStrings.Get(661), path, true)) { CMusicDatabase musicdatabase; musicdatabase.Open(); if ( retVal == 1 ) { path = URIUtils::AddFileToFolder(path, "karaoke.html"); musicdatabase.ExportKaraokeInfo( path, true ); } else { path = URIUtils::AddFileToFolder(path, "karaoke.csv"); musicdatabase.ExportKaraokeInfo( path, false ); } musicdatabase.Close(); } } } else if (settingId == "karaoke.importcsv") { std::string path(CProfilesManager::Get().GetDatabaseFolder()); VECSOURCES shares; g_mediaManager.GetLocalDrives(shares); if (CGUIDialogFileBrowser::ShowAndGetFile(shares, "karaoke.csv", g_localizeStrings.Get(651) , path)) { CMusicDatabase musicdatabase; musicdatabase.Open(); musicdatabase.ImportKaraokeInfo(path); musicdatabase.Close(); } } else if (settingId == "musiclibrary.cleanup") { if (CGUIDialogYesNo::ShowAndGetInput(313, 333, 0, 0)) g_application.StartMusicCleanup(true); } else if (settingId == "musiclibrary.export") CBuiltins::Execute("exportlibrary(music)"); else if (settingId == "musiclibrary.import") { std::string path; VECSOURCES shares; g_mediaManager.GetLocalDrives(shares); if (CGUIDialogFileBrowser::ShowAndGetFile(shares, "musicdb.xml", g_localizeStrings.Get(651) , path)) { CMusicDatabase musicdatabase; musicdatabase.Open(); musicdatabase.ImportFromXML(path); musicdatabase.Close(); } } else if (settingId == "videolibrary.cleanup") { if (CGUIDialogYesNo::ShowAndGetInput(313, 333, 0, 0)) g_application.StartVideoCleanup(true); } else if (settingId == "videolibrary.export") CBuiltins::Execute("exportlibrary(video)"); else if (settingId == "videolibrary.import") { std::string path; VECSOURCES shares; g_mediaManager.GetLocalDrives(shares); if (CGUIDialogFileBrowser::ShowAndGetDirectory(shares, g_localizeStrings.Get(651) , path)) { CVideoDatabase videodatabase; videodatabase.Open(); videodatabase.ImportFromXML(path); videodatabase.Close(); } } }
bool CRetroPlayerDialogs::InstallGameClientDialog(const CFileItem &file, GameClientPtr &result) { VECADDONS addons; CGameManager::GetAllGameClients(addons); map<string, GameClientPtr> candidates; for (VECADDONS::const_iterator itRemote = addons.begin(); itRemote != addons.end(); ++itRemote) { if (!(*itRemote)->IsType(ADDON_GAMEDLL)) continue; GameClientPtr gc = boost::dynamic_pointer_cast<CGameClient>(*itRemote); // Only add game clients to the list if they provide extensions or platforms if (!gc || (gc->GetExtensions().empty() /* && gc->GetPlatforms().empty() */)) continue; if (!gc->CanOpen(file)) continue; // If the game client is already installed and enabled, exclude it from the list AddonPtr addon; if (CAddonMgr::Get().GetAddon(gc->ID(), addon, ADDON_GAMEDLL, true)) continue; // If GetAddon() returns false, but addon is non-NULL, then the add-on exists but is disabled bool bEnabled = (addon.get() == NULL); bool bBroken = !(*itRemote)->Props().broken.empty(); if (bEnabled && bBroken) continue; string strName = gc->Name(); // Append "(Disabled)" to the name if the add-on is disabled if (!bEnabled) strName = StringUtils::Format("%s (%s)", strName.c_str(), g_localizeStrings.Get(1223).c_str()); candidates[strName] = gc; } if (candidates.empty()) { CLog::Log(LOGDEBUG, "RetroPlayer: No compatible game clients for installation"); // "Playback failed" // "No compatible emulators found for file:" // "FILENAME" CGUIDialogOK::ShowAndGetInput(16026, 16023, URIUtils::GetFileName(file.GetPath()), 0); return false; } // CContextButtons doesn't support keying by string, only int, so use a // parallel array to track the string values (client name) CContextButtons choicesInt; unsigned int i = 0; // Vector to translate button IDs to game client pointers vector<string> choicesStr; for (map<string, GameClientPtr>::const_iterator it = candidates.begin(); it != candidates.end(); ++it) { const string& strName = it->first; choicesInt.Add(i++, strName); choicesStr.push_back(strName); } int btnid = CGUIDialogContextMenu::ShowAndGetChoice(choicesInt); if (btnid < 0 || btnid >= (int)candidates.size()) { CLog::Log(LOGDEBUG, "RetroPlayer: User canceled game client installation selection"); return false; } map<string, GameClientPtr>::iterator it = candidates.find(choicesStr[btnid]); if (it == candidates.end()) return false; // Shouldn't happen GameClientPtr &gc = it->second; // determining disabled status is the same test as earlier // TODO: Preserve disabled values in parallel array // TODO: Don't use parallel arrays AddonPtr addon; // Return value, will be assigned to result bool disabled = !CAddonMgr::Get().GetAddon(gc->ID(), addon, ADDON_GAMEDLL, true) && addon; if (disabled) { // TODO: Prompt the user to enable it CLog::Log(LOGDEBUG, "RetroPlayer: Game client %s installed but disabled, enabling it", gc->ID().c_str()); CGameManager::Get().ClearAutoLaunch(); // Don't auto-launch queued game when the add-on is enabled CAddonMgr::Get().DisableAddon(gc->ID(), false); // Retrieve the newly-enabled add-on if (!CAddonMgr::Get().GetAddon(gc->ID(), addon) || !addon) return false; } else { CLog::Log(LOGDEBUG, "RetroPlayer: Installing game client %s", gc->ID().c_str()); bool success = CAddonInstaller::Get().PromptForInstall(gc->ID(), addon); if (!success || !addon || addon->Type() != ADDON_GAMEDLL) { CLog::Log(LOGDEBUG, "RetroPlayer: Game client installation failed"); // "id" // "Installation failed" // "Check the log file for details." CGUIDialogOK::ShowAndGetInput(gc->ID().c_str(), 114, 16029, 0); return false; } } GameClientPtr gameClient = boost::dynamic_pointer_cast<CGameClient>(addon); if (!gameClient) { CLog::Log(LOGERROR, "RetroPlayer: Add-on was not a game client!"); return false; } result = gameClient; return true; }
void CGUIDialogLockSettings::OnSettingChanged(SettingInfo &setting) { // check and update anything that needs it if (setting.id == 1) { if (m_bGetUser) { CStdString strHeading; CStdString strDecodeUrl = m_strURL; CURL::Decode(strDecodeUrl); strHeading.Format("%s %s",g_localizeStrings.Get(14062).c_str(),strDecodeUrl.c_str()); if (CGUIKeyboardFactory::ShowAndGetInput(m_strUser,strHeading,true)) { m_bChanged = true; m_settings[0].name.Format("%s (%s)",g_localizeStrings.Get(20142).c_str(),m_strUser.c_str()); UpdateSetting(1); } return; } CContextButtons choices; choices.Add(1, 1223); choices.Add(2, 12337); choices.Add(3, 12338); choices.Add(4, 12339); int choice = CGUIDialogContextMenu::ShowAndGetChoice(choices); CStdString newPassword; LockType iLockMode = LOCK_MODE_UNKNOWN; bool bResult = false; switch(choice) { case 1: iLockMode = LOCK_MODE_EVERYONE; //Disabled! Need check routine!!! bResult = true; break; case 2: iLockMode = LOCK_MODE_NUMERIC; bResult = CGUIDialogNumeric::ShowAndVerifyNewPassword(newPassword); break; case 3: iLockMode = LOCK_MODE_GAMEPAD; bResult = CGUIDialogGamepad::ShowAndVerifyNewPassword(newPassword); break; case 4: iLockMode = LOCK_MODE_QWERTY; bResult = CGUIKeyboardFactory::ShowAndVerifyNewPassword(newPassword); break; default: break; } if (bResult) { if (iLockMode == LOCK_MODE_EVERYONE) newPassword = "******"; m_locks.code = newPassword; if (m_locks.code == "-") iLockMode = LOCK_MODE_EVERYONE; m_locks.mode = iLockMode; if (m_bDetails) EnableDetails(m_locks.mode != LOCK_MODE_EVERYONE); m_bChanged = true; if (m_locks.mode != LOCK_MODE_EVERYONE) setting.name.Format("%s (%s)",g_localizeStrings.Get(m_iButtonLabel).c_str(),g_localizeStrings.Get(12336+m_locks.mode).c_str()); else setting.name.Format("%s (%s)",g_localizeStrings.Get(m_iButtonLabel).c_str(),g_localizeStrings.Get(1223).c_str()); UpdateSetting(1); } } if (setting.id == 2 && m_bGetUser) { CStdString strHeading; CStdString strDecodeUrl = m_strURL; CURL::Decode(strDecodeUrl); strHeading.Format("%s %s",g_localizeStrings.Get(20143).c_str(),strDecodeUrl.c_str()); if (CGUIKeyboardFactory::ShowAndGetInput(m_locks.code,strHeading,true,true)) { m_settings[1].name.Format("%s (%s)",g_localizeStrings.Get(12326).c_str(),g_localizeStrings.Get(20141).c_str()); m_bChanged = true; UpdateSetting(2); } return; } if (setting.id > 1) m_bChanged = true; }
void CGUIWindowMusicNav::GetContextButtons(int itemNumber, CContextButtons &buttons) { CGUIWindowMusicBase::GetContextButtons(itemNumber, buttons); CFileItemPtr item; if (itemNumber >= 0 && itemNumber < m_vecItems->Size()) item = m_vecItems->Get(itemNumber); if (item && !item->GetPath().Left(14).Equals("addons://more/")) { // are we in the playlists location? bool inPlaylists = m_vecItems->GetPath().Equals(CUtil::MusicPlaylistsLocation()) || m_vecItems->GetPath().Equals("special://musicplaylists/"); CMusicDatabaseDirectory dir; // enable music info button on an album or on a song. if (item->IsAudio() && !item->IsPlayList() && !item->IsSmartPlayList() && !item->m_bIsFolder) { buttons.Add(CONTEXT_BUTTON_SONG_INFO, 658); } else if (item->IsVideoDb()) { if (!item->m_bIsFolder) // music video buttons.Add(CONTEXT_BUTTON_INFO, 20393); if (item->GetPath().Left(14).Equals("videodb://3/4/") && item->GetPath().size() > 14 && item->m_bIsFolder) { long idArtist = m_musicdatabase.GetArtistByName(m_vecItems->Get(itemNumber)->GetLabel()); if (idArtist > - 1) buttons.Add(CONTEXT_BUTTON_INFO,21891); } } else if (!inPlaylists && (dir.HasAlbumInfo(item->GetPath())|| dir.IsArtistDir(item->GetPath()) ) && !dir.IsAllItem(item->GetPath()) && !item->IsParentFolder() && !item->IsPlugin() && !item->IsScript() && !item->GetPath().Left(14).Equals("musicsearch://")) { if (dir.IsArtistDir(item->GetPath())) buttons.Add(CONTEXT_BUTTON_INFO, 21891); else buttons.Add(CONTEXT_BUTTON_INFO, 13351); } // enable query all albums button only in album view if (dir.HasAlbumInfo(item->GetPath()) && !dir.IsAllItem(item->GetPath()) && item->m_bIsFolder && !item->IsVideoDb() && !item->IsParentFolder() && !item->IsPlugin() && !item->GetPath().Left(14).Equals("musicsearch://")) { buttons.Add(CONTEXT_BUTTON_INFO_ALL, 20059); } // enable query all artist button only in album view if (dir.IsArtistDir(item->GetPath()) && !dir.IsAllItem(item->GetPath()) && item->m_bIsFolder && !item->IsVideoDb()) { ADDON::ScraperPtr info; m_musicdatabase.GetScraperForPath(item->GetPath(), info, ADDON::ADDON_SCRAPER_ARTISTS); if (info && info->Supports(CONTENT_ARTISTS)) buttons.Add(CONTEXT_BUTTON_INFO_ALL, 21884); } //Set default or clear default NODE_TYPE nodetype = dir.GetDirectoryType(item->GetPath()); if (!item->IsParentFolder() && !inPlaylists && (nodetype == NODE_TYPE_ROOT || nodetype == NODE_TYPE_OVERVIEW || nodetype == NODE_TYPE_TOP100)) { if (!item->GetPath().Equals(g_guiSettings.GetString("mymusic.defaultlibview"))) buttons.Add(CONTEXT_BUTTON_SET_DEFAULT, 13335); // set default if (strcmp(g_guiSettings.GetString("mymusic.defaultlibview"), "")) buttons.Add(CONTEXT_BUTTON_CLEAR_DEFAULT, 13403); // clear default } NODE_TYPE childtype = dir.GetDirectoryChildType(item->GetPath()); if (childtype == NODE_TYPE_ALBUM || childtype == NODE_TYPE_ARTIST || nodetype == NODE_TYPE_GENRE || nodetype == NODE_TYPE_ALBUM || nodetype == NODE_TYPE_ALBUM_RECENTLY_ADDED || nodetype == NODE_TYPE_ALBUM_COMPILATIONS) { // we allow the user to set content for // 1. general artist and album nodes // 2. specific per genre // 3. specific per artist // 4. specific per album buttons.Add(CONTEXT_BUTTON_SET_CONTENT,20195); } if (item->HasMusicInfoTag() && item->GetMusicInfoTag()->GetArtist().size() > 0) { CVideoDatabase database; database.Open(); if (database.GetMatchingMusicVideo(StringUtils::Join(item->GetMusicInfoTag()->GetArtist(), g_advancedSettings.m_musicItemSeparator)) > -1) buttons.Add(CONTEXT_BUTTON_GO_TO_ARTIST, 20400); } if (item->HasMusicInfoTag() && item->GetMusicInfoTag()->GetArtist().size() > 0 && item->GetMusicInfoTag()->GetAlbum().size() > 0 && item->GetMusicInfoTag()->GetTitle().size() > 0) { CVideoDatabase database; database.Open(); if (database.GetMatchingMusicVideo(StringUtils::Join(item->GetMusicInfoTag()->GetArtist(), g_advancedSettings.m_musicItemSeparator),item->GetMusicInfoTag()->GetAlbum(),item->GetMusicInfoTag()->GetTitle()) > -1) buttons.Add(CONTEXT_BUTTON_PLAY_OTHER, 20401); } if (item->HasVideoInfoTag() && !item->m_bIsFolder) { if (item->GetVideoInfoTag()->m_playCount > 0) buttons.Add(CONTEXT_BUTTON_MARK_UNWATCHED, 16104); //Mark as UnWatched else buttons.Add(CONTEXT_BUTTON_MARK_WATCHED, 16103); //Mark as Watched if ((CProfilesManager::Get().GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser) && !item->IsPlugin()) { buttons.Add(CONTEXT_BUTTON_RENAME, 16105); buttons.Add(CONTEXT_BUTTON_DELETE, 646); } } if (inPlaylists && !URIUtils::GetFileName(item->GetPath()).Equals("PartyMode.xsp") && (item->IsPlayList() || item->IsSmartPlayList())) buttons.Add(CONTEXT_BUTTON_DELETE, 117); if (item->IsPlugin() || item->IsScript() || m_vecItems->IsPlugin()) buttons.Add(CONTEXT_BUTTON_PLUGIN_SETTINGS, 1045); } // noncontextual buttons if (g_application.IsMusicScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); // Stop Scanning else { if (!m_vecItems->IsPlugin()) buttons.Add(CONTEXT_BUTTON_UPDATE_LIBRARY, 653); } CGUIWindowMusicBase::GetNonContextButtons(buttons); }
void CGUIWindowVideoNav::GetContextButtons(int itemNumber, CContextButtons &buttons) { CFileItemPtr item; if (itemNumber >= 0 && itemNumber < m_vecItems->Size()) item = m_vecItems->Get(itemNumber); CGUIWindowVideoBase::GetContextButtons(itemNumber, buttons); if (item && item->GetProperty("pluginreplacecontextitems").asBoolean()) return; CVideoDatabaseDirectory dir; NODE_TYPE node = dir.GetDirectoryChildType(m_vecItems->GetPath()); if (!item) { // nothing to do here } else if (m_vecItems->IsPath("sources://video/")) { // get the usual shares CGUIDialogContextMenu::GetContextButtons("video", item, buttons); if (!item->IsDVD() && item->GetPath() != "add" && !item->IsParentFolder() && (CProfilesManager::GetInstance().GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser)) { CVideoDatabase database; database.Open(); ADDON::ScraperPtr info = database.GetScraperForPath(item->GetPath()); if (!item->IsLiveTV() && !item->IsPlugin() && !item->IsAddonsPath() && !URIUtils::IsUPnP(item->GetPath())) { if (info && info->Content() != CONTENT_NONE) { buttons.Add(CONTEXT_BUTTON_SET_CONTENT, 20442); buttons.Add(CONTEXT_BUTTON_SCAN, 13349); } else buttons.Add(CONTEXT_BUTTON_SET_CONTENT, 20333); } } } else { // are we in the playlists location? bool inPlaylists = m_vecItems->IsPath(CUtil::VideoPlaylistsLocation()) || m_vecItems->IsPath("special://videoplaylists/"); if (item->HasVideoInfoTag() && !item->GetVideoInfoTag()->m_artist.empty()) { CMusicDatabase database; database.Open(); if (database.GetArtistByName(StringUtils::Join(item->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator)) > -1) buttons.Add(CONTEXT_BUTTON_GO_TO_ARTIST, 20396); } if (item->HasVideoInfoTag() && !item->GetVideoInfoTag()->m_strAlbum.empty()) { CMusicDatabase database; database.Open(); if (database.GetAlbumByName(item->GetVideoInfoTag()->m_strAlbum) > -1) buttons.Add(CONTEXT_BUTTON_GO_TO_ALBUM, 20397); } if (item->HasVideoInfoTag() && !item->GetVideoInfoTag()->m_strAlbum.empty() && !item->GetVideoInfoTag()->m_artist.empty() && !item->GetVideoInfoTag()->m_strTitle.empty()) { CMusicDatabase database; database.Open(); if (database.GetSongByArtistAndAlbumAndTitle(StringUtils::Join(item->GetVideoInfoTag()->m_artist, g_advancedSettings.m_videoItemSeparator), item->GetVideoInfoTag()->m_strAlbum, item->GetVideoInfoTag()->m_strTitle) > -1) { buttons.Add(CONTEXT_BUTTON_PLAY_OTHER, 20398); } } if (!item->IsParentFolder()) { ADDON::ScraperPtr info; VIDEO::SScanSettings settings; GetScraperForItem(item.get(), info, settings); // can we update the database? if (CProfilesManager::GetInstance().GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser) { if (!g_application.IsVideoScanning() && item->IsVideoDb() && item->HasVideoInfoTag() && (item->GetVideoInfoTag()->m_type == MediaTypeMovie || // movies item->GetVideoInfoTag()->m_type == MediaTypeTvShow || // tvshows item->GetVideoInfoTag()->m_type == MediaTypeSeason || // seasons item->GetVideoInfoTag()->m_type == MediaTypeEpisode || // episodes item->GetVideoInfoTag()->m_type == MediaTypeMusicVideo || // musicvideos item->GetVideoInfoTag()->m_type == "tag" || // tags item->GetVideoInfoTag()->m_type == MediaTypeVideoCollection)) // sets { buttons.Add(CONTEXT_BUTTON_EDIT, 16106); } if (node == NODE_TYPE_TITLE_TVSHOWS) { buttons.Add(CONTEXT_BUTTON_SCAN, 13349); } if (node == NODE_TYPE_ACTOR && !dir.IsAllItem(item->GetPath()) && item->m_bIsFolder) { if (StringUtils::StartsWithNoCase(m_vecItems->GetPath(), "videodb://musicvideos")) // mvids buttons.Add(CONTEXT_BUTTON_SET_ARTIST_THUMB, 13359); else buttons.Add(CONTEXT_BUTTON_SET_ACTOR_THUMB, 20403); } } if (!m_vecItems->IsVideoDb() && !m_vecItems->IsVirtualDirectoryRoot()) { // non-video db items, file operations are allowed if ((CSettings::GetInstance().GetBool(CSettings::SETTING_FILELISTS_ALLOWFILEDELETION) && CUtil::SupportsWriteFileOperations(item->GetPath())) || (inPlaylists && URIUtils::GetFileName(item->GetPath()) != "PartyMode-Video.xsp" && (item->IsPlayList() || item->IsSmartPlayList()))) { buttons.Add(CONTEXT_BUTTON_DELETE, 117); buttons.Add(CONTEXT_BUTTON_RENAME, 118); } // add "Set/Change content" to folders if (item->m_bIsFolder && !item->IsVideoDb() && !item->IsPlayList() && !item->IsSmartPlayList() && !item->IsLibraryFolder() && !item->IsLiveTV() && !item->IsPlugin() && !item->IsAddonsPath() && !URIUtils::IsUPnP(item->GetPath())) { if (info && info->Content() != CONTENT_NONE) buttons.Add(CONTEXT_BUTTON_SET_CONTENT, 20442); else buttons.Add(CONTEXT_BUTTON_SET_CONTENT, 20333); if (info && info->Content() != CONTENT_NONE) buttons.Add(CONTEXT_BUTTON_SCAN, 13349); } } } } }
void CGUIWindowMusicBase::GetContextButtons(int itemNumber, CContextButtons &buttons) { CFileItemPtr item; if (itemNumber >= 0 && itemNumber < m_vecItems->Size()) item = m_vecItems->Get(itemNumber); if (item && !item->GetProperty("pluginreplacecontextitems").asBoolean()) { if (item && !item->IsParentFolder()) { if (item->CanQueue() && !item->IsAddonsPath() && !item->IsScript()) { buttons.Add(CONTEXT_BUTTON_QUEUE_ITEM, 13347); //queue // allow a folder to be ad-hoc queued and played by the default player if (item->m_bIsFolder || (item->IsPlayList() && !g_advancedSettings.m_playlistAsFolders)) { buttons.Add(CONTEXT_BUTTON_PLAY_ITEM, 208); // Play } else { // check what players we have, if we have multiple display play with option std::vector<std::string> players; CPlayerCoreFactory::GetInstance().GetPlayers(*item, players); if (players.size() >= 1) buttons.Add(CONTEXT_BUTTON_PLAY_WITH, 15213); // Play With... } if (item->IsSmartPlayList()) { buttons.Add(CONTEXT_BUTTON_PLAY_PARTYMODE, 15216); // Play in Partymode } if (item->IsSmartPlayList() || m_vecItems->IsSmartPlayList()) buttons.Add(CONTEXT_BUTTON_EDIT_SMART_PLAYLIST, 586); else if (item->IsPlayList() || m_vecItems->IsPlayList()) buttons.Add(CONTEXT_BUTTON_EDIT, 586); } if (!m_vecItems->IsMusicDb() && !m_vecItems->IsInternetStream() && !item->IsPath("add") && !item->IsParentFolder() && !item->IsPlugin() && !item->IsMusicDb() && !item->IsLibraryFolder() && !StringUtils::StartsWithNoCase(item->GetPath(), "addons://") && (CProfilesManager::GetInstance().GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser)) { buttons.Add(CONTEXT_BUTTON_SCAN, 13352); } #ifdef HAS_DVD_DRIVE // enable Rip CD Audio or Track button if we have an audio disc if (g_mediaManager.IsDiscInDrive() && m_vecItems->IsCDDA()) { // those cds can also include Audio Tracks: CDExtra and MixedMode! MEDIA_DETECT::CCdInfo *pCdInfo = g_mediaManager.GetCdInfo(); if (pCdInfo->IsAudio(1) || pCdInfo->IsCDExtra(1) || pCdInfo->IsMixedMode(1)) buttons.Add(CONTEXT_BUTTON_RIP_TRACK, 610); } #endif } // enable CDDB lookup if the current dir is CDDA if (g_mediaManager.IsDiscInDrive() && m_vecItems->IsCDDA() && (CProfilesManager::GetInstance().GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser)) { buttons.Add(CONTEXT_BUTTON_CDDB, 16002); } } CGUIMediaWindow::GetContextButtons(itemNumber, buttons); }
void CGUIWindowMusicSongs::GetContextButtons(int itemNumber, CContextButtons &buttons) { CFileItemPtr item; if (itemNumber >= 0 && itemNumber < m_vecItems->Size()) item = m_vecItems->Get(itemNumber); if (item) { // are we in the playlists location? bool inPlaylists = m_vecItems->GetPath().Equals(CUtil::MusicPlaylistsLocation()) || m_vecItems->GetPath().Equals("special://musicplaylists/"); if (m_vecItems->IsVirtualDirectoryRoot()) { // get the usual music shares, and anything for all media windows CGUIDialogContextMenu::GetContextButtons("music", item, buttons); #ifdef HAS_DVD_DRIVE // enable Rip CD an audio disc if (g_mediaManager.IsDiscInDrive() && item->IsCDDA()) { // those cds can also include Audio Tracks: CDExtra and MixedMode! CCdInfo *pCdInfo = g_mediaManager.GetCdInfo(); if (pCdInfo->IsAudio(1) || pCdInfo->IsCDExtra(1) || pCdInfo->IsMixedMode(1)) { if (CJobManager::GetInstance().IsProcessing("cdrip")) buttons.Add(CONTEXT_BUTTON_CANCEL_RIP_CD, 14100); else buttons.Add(CONTEXT_BUTTON_RIP_CD, 600); } } #endif CGUIMediaWindow::GetContextButtons(itemNumber, buttons); } else { CGUIWindowMusicBase::GetContextButtons(itemNumber, buttons); if (item->GetProperty("pluginreplacecontextitems").asBoolean()) return; if (!item->IsPlayList() && !item->IsPlugin() && !item->IsScript()) { if (item->IsAudio() && !item->IsLastFM()) buttons.Add(CONTEXT_BUTTON_SONG_INFO, 658); // Song Info else if (!item->IsParentFolder() && !item->IsLastFM() && !item->GetPath().Left(3).Equals("new") && item->m_bIsFolder) { #if 0 if (m_musicdatabase.GetAlbumIdByPath(item->GetPath()) > -1) #endif buttons.Add(CONTEXT_BUTTON_INFO, 13351); // Album Info } } #ifdef HAS_DVD_DRIVE // enable Rip CD Audio or Track button if we have an audio disc if (g_mediaManager.IsDiscInDrive() && m_vecItems->IsCDDA()) { // those cds can also include Audio Tracks: CDExtra and MixedMode! CCdInfo *pCdInfo = g_mediaManager.GetCdInfo(); if (pCdInfo->IsAudio(1) || pCdInfo->IsCDExtra(1) || pCdInfo->IsMixedMode(1)) buttons.Add(CONTEXT_BUTTON_RIP_TRACK, 610); } #endif // enable CDDB lookup if the current dir is CDDA if (g_mediaManager.IsDiscInDrive() && m_vecItems->IsCDDA() && (g_settings.GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser)) { buttons.Add(CONTEXT_BUTTON_CDDB, 16002); } if (!item->IsParentFolder() && !item->IsReadOnly()) { // either we're at the playlist location or its been explicitly allowed if (inPlaylists || g_guiSettings.GetBool("filelists.allowfiledeletion")) { buttons.Add(CONTEXT_BUTTON_DELETE, 117); buttons.Add(CONTEXT_BUTTON_RENAME, 118); } } } // Add the scan button(s) if (g_application.IsMusicScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); // Stop Scanning else if (!inPlaylists && !m_vecItems->IsInternetStream() && !item->IsLastFM() && !item->GetPath().Equals("add") && !item->IsParentFolder() && !item->IsPlugin() && !item->GetPath().Left(9).Equals("addons://") && (g_settings.GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser)) { buttons.Add(CONTEXT_BUTTON_SCAN, 13352); } if (item->IsPlugin() || item->IsScript() || m_vecItems->IsPlugin()) buttons.Add(CONTEXT_BUTTON_PLUGIN_SETTINGS, 1045); } if (!m_vecItems->IsVirtualDirectoryRoot() && !m_vecItems->IsPlugin()) buttons.Add(CONTEXT_BUTTON_SWITCH_MEDIA, 523); CGUIWindowMusicBase::GetNonContextButtons(buttons); }
void CGUIWindowMusicPlayList::GetContextButtons(int itemNumber, CContextButtons &buttons) { // is this playlist playing? int itemPlaying = g_playlistPlayer.GetCurrentSong(); if (itemNumber >= 0 && itemNumber < m_vecItems->Size()) { CFileItemPtr item; item = m_vecItems->Get(itemNumber); if (m_movingFrom >= 0) { // we can move the item to any position not where we are, and any position not above currently // playing item in party mode if (itemNumber != m_movingFrom && (!g_partyModeManager.IsEnabled() || itemNumber > itemPlaying)) buttons.Add(CONTEXT_BUTTON_MOVE_HERE, 13252); // move item here buttons.Add(CONTEXT_BUTTON_CANCEL_MOVE, 13253); } else { // aren't in a move // check what players we have, if we have multiple display play with option std::vector<std::string> players; CPlayerCoreFactory::GetInstance().GetPlayers(*item, players); if (players.size() > 1) buttons.Add(CONTEXT_BUTTON_PLAY_WITH, 15213); // Play With... buttons.Add(CONTEXT_BUTTON_SONG_INFO, 658); // Song Info if (XFILE::CFavouritesDirectory::IsFavourite(item.get(), GetID())) buttons.Add(CONTEXT_BUTTON_ADD_FAVOURITE, 14077); // Remove Favourite else buttons.Add(CONTEXT_BUTTON_ADD_FAVOURITE, 14076); // Add To Favourites; if (itemNumber > (g_partyModeManager.IsEnabled() ? 1 : 0)) buttons.Add(CONTEXT_BUTTON_MOVE_ITEM_UP, 13332); if (itemNumber + 1 < m_vecItems->Size()) buttons.Add(CONTEXT_BUTTON_MOVE_ITEM_DOWN, 13333); if (!g_partyModeManager.IsEnabled() || itemNumber != itemPlaying) buttons.Add(CONTEXT_BUTTON_MOVE_ITEM, 13251); if (itemNumber != itemPlaying) buttons.Add(CONTEXT_BUTTON_DELETE, 1210); // Remove } } if (g_partyModeManager.IsEnabled()) { buttons.Add(CONTEXT_BUTTON_EDIT_PARTYMODE, 21439); buttons.Add(CONTEXT_BUTTON_CANCEL_PARTYMODE, 588); // cancel party mode } if (itemNumber >= 0 && itemNumber < m_vecItems->Size()) CContextMenuManager::GetInstance().AddVisibleItems(m_vecItems->Get(itemNumber), buttons); }
void CGUIWindowMusicBase::GetNonContextButtons(CContextButtons &buttons) { if (!m_vecItems->IsVirtualDirectoryRoot()) buttons.Add(CONTEXT_BUTTON_GOTO_ROOT, 20128); buttons.Add(CONTEXT_BUTTON_SETTINGS, 5); }
void CGUIWindowMusicNav::GetContextButtons(int itemNumber, CContextButtons &buttons) { CGUIWindowMusicBase::GetContextButtons(itemNumber, buttons); CGUIDialogMusicScan *musicScan = (CGUIDialogMusicScan *)m_gWindowManager.GetWindow(WINDOW_DIALOG_MUSIC_SCAN); CFileItem *item = (itemNumber >= 0 && itemNumber < m_vecItems->Size()) ? m_vecItems->Get(itemNumber) : NULL; if (item && (item->GetExtraInfo().Find("lastfm") < 0)) { // are we in the playlists location? bool inPlaylists = m_vecItems->m_strPath.Equals(CUtil::MusicPlaylistsLocation()) || m_vecItems->m_strPath.Equals("special://musicplaylists/"); CMusicDatabaseDirectory dir; SScraperInfo info; m_musicdatabase.GetScraperForPath(item->m_strPath,info); // enable music info button on an album or on a song. if (item->IsAudio() && !item->IsPlayList() && !item->IsSmartPlayList() && !item->IsLastFM() && !item->IsShoutCast()) { buttons.Add(CONTEXT_BUTTON_SONG_INFO, 658); } else if (item->IsVideoDb()) { if (!item->m_bIsFolder) // music video buttons.Add(CONTEXT_BUTTON_INFO, 20393); if (item->m_strPath.Left(14).Equals("videodb://3/4/") && item->m_strPath.size() > 14 && item->m_bIsFolder) { long idArtist = m_musicdatabase.GetArtistByName(m_vecItems->Get(itemNumber)->GetLabel()); if (idArtist > - 1) buttons.Add(CONTEXT_BUTTON_INFO,21891); } } else if (!inPlaylists && (dir.HasAlbumInfo(item->m_strPath)|| dir.IsArtistDir(item->m_strPath) ) && !dir.IsAllItem(item->m_strPath) && !item->IsParentFolder() && !item->IsLastFM() && !item->IsShoutCast() && !item->m_strPath.Left(14).Equals("musicsearch://")) { if (dir.IsArtistDir(item->m_strPath)) buttons.Add(CONTEXT_BUTTON_INFO, 21891); else buttons.Add(CONTEXT_BUTTON_INFO, 13351); } // enable query all albums button only in album view if (dir.HasAlbumInfo(item->m_strPath) && !dir.IsAllItem(item->m_strPath) && item->m_bIsFolder && !item->IsVideoDb() && !item->IsParentFolder() && !item->IsLastFM() && !item->IsShoutCast() && !item->m_strPath.Left(14).Equals("musicsearch://")) { buttons.Add(CONTEXT_BUTTON_INFO_ALL, 20059); } // enable query all artist button only in album view if (dir.IsArtistDir(item->m_strPath) && !dir.IsAllItem(item->m_strPath) && item->m_bIsFolder && !item->IsVideoDb() && !info.strContent.IsEmpty()) { buttons.Add(CONTEXT_BUTTON_INFO_ALL, 21884); } // turn off set artist image if not at artist listing. if (dir.IsArtistDir(item->m_strPath) && !dir.IsAllItem(item->m_strPath) || (item->m_strPath.Left(14).Equals("videodb://3/4/") && item->m_strPath.size() > 14 && item->m_bIsFolder)) { buttons.Add(CONTEXT_BUTTON_SET_ARTIST_THUMB, 13359); } if (m_vecItems->m_strPath.Equals("plugin://music/")) buttons.Add(CONTEXT_BUTTON_SET_PLUGIN_THUMB, 1044); //Set default or clear default NODE_TYPE nodetype = dir.GetDirectoryType(item->m_strPath); if (!item->IsParentFolder() && !inPlaylists && (nodetype == NODE_TYPE_ROOT || nodetype == NODE_TYPE_OVERVIEW || nodetype == NODE_TYPE_TOP100)) { if (!item->m_strPath.Equals(g_settings.m_defaultMusicLibSource)) buttons.Add(CONTEXT_BUTTON_SET_DEFAULT, 13335); // set default if (strcmp(g_settings.m_defaultMusicLibSource, "")) buttons.Add(CONTEXT_BUTTON_CLEAR_DEFAULT, 13403); // clear default } NODE_TYPE childtype = dir.GetDirectoryChildType(item->m_strPath); if (childtype == NODE_TYPE_ALBUM || childtype == NODE_TYPE_ARTIST || nodetype == NODE_TYPE_GENRE || nodetype == NODE_TYPE_ALBUM) { // we allow the user to set content for // 1. general artist and album nodes // 2. specific per genre // 3. specific per artist // 4. specific per album buttons.Add(CONTEXT_BUTTON_SET_CONTENT,20195); } if (item->HasMusicInfoTag() && item->GetMusicInfoTag()->GetArtist().size() > 0) { CVideoDatabase database; database.Open(); if (database.GetMusicVideoArtistByName(item->GetMusicInfoTag()->GetArtist()) > -1) buttons.Add(CONTEXT_BUTTON_GO_TO_ARTIST, 20400); } if (item->HasMusicInfoTag() && item->GetMusicInfoTag()->GetArtist().size() > 0 && item->GetMusicInfoTag()->GetAlbum().size() > 0 && item->GetMusicInfoTag()->GetTitle().size() > 0) { CVideoDatabase database; database.Open(); if (database.GetMusicVideoByArtistAndAlbumAndTitle(item->GetMusicInfoTag()->GetArtist(),item->GetMusicInfoTag()->GetAlbum(),item->GetMusicInfoTag()->GetTitle()) > -1) buttons.Add(CONTEXT_BUTTON_PLAY_OTHER, 20401); } if (item->HasVideoInfoTag() && !item->m_bIsFolder) { if (item->GetVideoInfoTag()->m_bWatched) buttons.Add(CONTEXT_BUTTON_MARK_UNWATCHED, 16104); //Mark as UnWatched else buttons.Add(CONTEXT_BUTTON_MARK_WATCHED, 16103); //Mark as Watched if (g_settings.m_vecProfiles[g_settings.m_iLastLoadedProfileIndex].canWriteDatabases() || g_passwordManager.bMasterUser) { buttons.Add(CONTEXT_BUTTON_RENAME, 16105); buttons.Add(CONTEXT_BUTTON_DELETE, 646); } } } // noncontextual buttons if (musicScan && musicScan->IsScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); // Stop Scanning else if (musicScan) buttons.Add(CONTEXT_BUTTON_UPDATE_LIBRARY, 653); CGUIWindowMusicBase::GetNonContextButtons(buttons); }
void CGUIWindowPVRRecordings::GetContextButtons(int itemNumber, CContextButtons &buttons) { if (itemNumber < 0 || itemNumber >= m_vecItems->Size()) return; CFileItemPtr pItem = m_vecItems->Get(itemNumber); bool isDeletedRecording = false; CPVRRecordingPtr recording(pItem->GetPVRRecordingInfoTag()); if (recording) { isDeletedRecording = recording->IsDeleted(); buttons.Add(CONTEXT_BUTTON_INFO, 19053); /* Recording Information */ if (!isDeletedRecording) { buttons.Add(CONTEXT_BUTTON_FIND, 19003); /* Find similar */ std::string resumeString = GetResumeString(*pItem); if (resumeString.empty()) { buttons.Add(CONTEXT_BUTTON_PLAY_ITEM, 208); /* Play */ } else { buttons.Add(CONTEXT_BUTTON_RESUME_ITEM, resumeString); /* Resume from HH:MM:SS */ buttons.Add(CONTEXT_BUTTON_PLAY_ITEM, 12023); /* Play from beginning */ } } else { buttons.Add(CONTEXT_BUTTON_UNDELETE, 19290); /* Undelete */ buttons.Add(CONTEXT_BUTTON_DELETE, 19291); /* Delete permanently */ if (m_vecItems->GetObjectCount() > 1) buttons.Add(CONTEXT_BUTTON_DELETE_ALL, 19292); /* Delete all permanently */ } } if (!isDeletedRecording) { if (pItem->m_bIsFolder) { // Have both options for folders since we don't know whether all children are watched/unwatched buttons.Add(CONTEXT_BUTTON_MARK_UNWATCHED, 16104); /* Mark as unwatched */ buttons.Add(CONTEXT_BUTTON_MARK_WATCHED, 16103); /* Mark as watched */ } if (recording) { if (recording->m_playCount > 0) buttons.Add(CONTEXT_BUTTON_MARK_UNWATCHED, 16104); /* Mark as unwatched */ else buttons.Add(CONTEXT_BUTTON_MARK_WATCHED, 16103); /* Mark as watched */ buttons.Add(CONTEXT_BUTTON_RENAME, 118); /* Rename */ } buttons.Add(CONTEXT_BUTTON_DELETE, 117); /* Delete */ } if (CServiceBroker::GetADSP().IsProcessing()) buttons.Add(CONTEXT_BUTTON_ACTIVE_ADSP_SETTINGS, 15047); /* Audio DSP settings */ if (recording) { if ((!isDeletedRecording && g_PVRClients->HasMenuHooks(recording->m_iClientId, PVR_MENUHOOK_RECORDING)) || (isDeletedRecording && g_PVRClients->HasMenuHooks(recording->m_iClientId, PVR_MENUHOOK_DELETED_RECORDING))) buttons.Add(CONTEXT_BUTTON_MENU_HOOKS, 19195); /* PVR client specific action */ } if (!isDeletedRecording) CGUIWindowPVRBase::GetContextButtons(itemNumber, buttons); }
void CGUIDialogContextMenu::GetContextButtons(const std::string &type, const CFileItemPtr& item, CContextButtons &buttons) { // Add buttons to the ContextMenu that should be visible for both sources and autosourced items if (item && item->IsRemovable()) { if (item->IsDVD() || item->IsCDDA()) { // We need to check if there is a detected is inserted! buttons.Add(CONTEXT_BUTTON_PLAY_DISC, 341); // Play CD/DVD! if (CGUIWindowVideoBase::HasResumeItemOffset(item.get())) buttons.Add(CONTEXT_BUTTON_RESUME_DISC, CGUIWindowVideoBase::GetResumeString(*(item.get()))); // Resume Disc buttons.Add(CONTEXT_BUTTON_EJECT_DISC, 13391); // Eject/Load CD/DVD! } else // Must be HDD { buttons.Add(CONTEXT_BUTTON_EJECT_DRIVE, 13420); // Eject Removable HDD! } } // Next, Add buttons to the ContextMenu that should ONLY be visible for sources and not autosourced items CMediaSource *share = GetShare(type, item.get()); if (CProfilesManager::Get().GetCurrentProfile().canWriteSources() || g_passwordManager.bMasterUser) { if (share) { // Note. from now on, remove source & disable plugin should mean the same thing //TODO might be smart to also combine editing source & plugin settings into one concept/dialog // Note. Temporarily disabled ability to remove plugin sources until installer is operational CURL url(share->strPath); bool isAddon = ADDON::TranslateContent(url.GetProtocol()) != CONTENT_NONE; if (!share->m_ignore && !isAddon) buttons.Add(CONTEXT_BUTTON_EDIT_SOURCE, 1027); // Edit Source else { ADDON::AddonPtr plugin; if (ADDON::CAddonMgr::Get().GetAddon(url.GetHostName(), plugin)) if (plugin->HasSettings()) buttons.Add(CONTEXT_BUTTON_PLUGIN_SETTINGS, 1045); // Plugin Settings } if (type != "video") buttons.Add(CONTEXT_BUTTON_SET_DEFAULT, 13335); // Set as Default if (!share->m_ignore && !isAddon) buttons.Add(CONTEXT_BUTTON_REMOVE_SOURCE, 522); // Remove Source buttons.Add(CONTEXT_BUTTON_SET_THUMB, 20019); } if (!GetDefaultShareNameByType(type).empty()) buttons.Add(CONTEXT_BUTTON_CLEAR_DEFAULT, 13403); // Clear Default } if (share && LOCK_MODE_EVERYONE != CProfilesManager::Get().GetMasterProfile().getLockMode()) { if (share->m_iHasLock == 0 && (CProfilesManager::Get().GetCurrentProfile().canWriteSources() || g_passwordManager.bMasterUser)) buttons.Add(CONTEXT_BUTTON_ADD_LOCK, 12332); else if (share->m_iHasLock == 1) buttons.Add(CONTEXT_BUTTON_REMOVE_LOCK, 12335); else if (share->m_iHasLock == 2) { buttons.Add(CONTEXT_BUTTON_REMOVE_LOCK, 12335); bool maxRetryExceeded = false; if (CSettings::Get().GetInt("masterlock.maxretries") != 0) maxRetryExceeded = (share->m_iBadPwdCount >= CSettings::Get().GetInt("masterlock.maxretries")); if (maxRetryExceeded) buttons.Add(CONTEXT_BUTTON_RESET_LOCK, 12334); else buttons.Add(CONTEXT_BUTTON_CHANGE_LOCK, 12356); } } if (share && !g_passwordManager.bMasterUser && item->m_iHasLock == 1) buttons.Add(CONTEXT_BUTTON_REACTIVATE_LOCK, 12353); }
bool CGUIDialogFileBrowser::OnPopupMenu(int iItem) { CContextButtons choices; choices.Add(1, m_addSourceType.empty() ? 20133 : 21364); choices.Add(2, m_addSourceType.empty() ? 20134 : 21365); int btnid = CGUIDialogContextMenu::ShowAndGetChoice(choices); if (btnid == 1) { if (m_addNetworkShareEnabled) { std::string strOldPath=m_selectedPath,newPath=m_selectedPath; VECSOURCES shares=m_shares; if (CGUIDialogNetworkSetup::ShowAndGetNetworkAddress(newPath)) { g_mediaManager.SetLocationPath(strOldPath,newPath); CURL url(newPath); for (unsigned int i=0;i<shares.size();++i) { if (URIUtils::CompareWithoutSlashAtEnd(shares[i].strPath, strOldPath))//getPath().Equals(strOldPath)) { shares[i].strName = url.GetWithoutUserDetails(); shares[i].strPath = newPath; URIUtils::RemoveSlashAtEnd(shares[i].strName); break; } } // refresh dialog content SetSources(shares); m_rootDir.SetMask("/"); m_browsingForFolders = 1; m_addNetworkShareEnabled = true; m_selectedPath = url.GetWithoutUserDetails(); Update(m_Directory->GetPath()); m_viewControl.SetSelectedItem(iItem); } } else { CFileItemPtr item = m_vecItems->Get(iItem); OnEditMediaSource(item.get()); } } if (btnid == 2) { if (m_addNetworkShareEnabled) { g_mediaManager.RemoveLocation(m_selectedPath); for (unsigned int i=0;i<m_shares.size();++i) { if (URIUtils::CompareWithoutSlashAtEnd(m_shares[i].strPath, m_selectedPath) && !m_shares[i].m_ignore) // getPath().Equals(m_selectedPath)) { m_shares.erase(m_shares.begin()+i); break; } } m_rootDir.SetSources(m_shares); m_rootDir.SetMask("/"); m_browsingForFolders = 1; m_addNetworkShareEnabled = true; m_selectedPath = ""; Update(m_Directory->GetPath()); } else { CMediaSourceSettings::GetInstance().DeleteSource(m_addSourceType,(*m_vecItems)[iItem]->GetLabel(),(*m_vecItems)[iItem]->GetPath()); SetSources(*CMediaSourceSettings::GetInstance().GetSources(m_addSourceType)); Update(""); } } return true; }
void CGUIWindowMusicNav::GetContextButtons(int itemNumber, CContextButtons &buttons) { CFileItemPtr item; if (itemNumber >= 0 && itemNumber < m_vecItems->Size()) item = m_vecItems->Get(itemNumber); if (item) { // are we in the playlists location? bool inPlaylists = m_vecItems->IsPath(CUtil::MusicPlaylistsLocation()) || m_vecItems->IsPath("special://musicplaylists/"); if (m_vecItems->IsPath("sources://music/")) { // get the usual music shares, and anything for all media windows CGUIDialogContextMenu::GetContextButtons("music", item, buttons); #ifdef HAS_DVD_DRIVE // enable Rip CD an audio disc if (g_mediaManager.IsDiscInDrive() && item->IsCDDA()) { // those cds can also include Audio Tracks: CDExtra and MixedMode! MEDIA_DETECT::CCdInfo *pCdInfo = g_mediaManager.GetCdInfo(); if (pCdInfo->IsAudio(1) || pCdInfo->IsCDExtra(1) || pCdInfo->IsMixedMode(1)) { if (CJobManager::GetInstance().IsProcessing("cdrip")) buttons.Add(CONTEXT_BUTTON_CANCEL_RIP_CD, 14100); else buttons.Add(CONTEXT_BUTTON_RIP_CD, 600); } } #endif // Add the scan button(s) if (g_application.IsMusicScanning()) buttons.Add(CONTEXT_BUTTON_STOP_SCANNING, 13353); // Stop Scanning else if (!inPlaylists && !m_vecItems->IsInternetStream() && !item->IsPath("add") && !item->IsParentFolder() && !item->IsPlugin() && !StringUtils::StartsWithNoCase(item->GetPath(), "addons://") && (CProfilesManager::GetInstance().GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser)) { buttons.Add(CONTEXT_BUTTON_SCAN, 13352); } CGUIMediaWindow::GetContextButtons(itemNumber, buttons); } else { CGUIWindowMusicBase::GetContextButtons(itemNumber, buttons); CMusicDatabaseDirectory dir; // enable query all albums button only in album view if (item->IsAlbum() && !dir.IsAllItem(item->GetPath()) && item->m_bIsFolder && !item->IsVideoDb() && !item->IsParentFolder() && !item->IsPlugin() && !StringUtils::StartsWithNoCase(item->GetPath(), "musicsearch://")) { buttons.Add(CONTEXT_BUTTON_INFO_ALL, 20059); } // enable query all artist button only in artist view if (dir.IsArtistDir(item->GetPath()) && !dir.IsAllItem(item->GetPath()) && item->m_bIsFolder && !item->IsVideoDb()) { ADDON::ScraperPtr info; if(m_musicdatabase.GetScraperForPath(item->GetPath(), info, ADDON::ADDON_SCRAPER_ARTISTS)) { if (info && info->Supports(CONTENT_ARTISTS)) buttons.Add(CONTEXT_BUTTON_INFO_ALL, 21884); } } //Set default or clear default NODE_TYPE nodetype = dir.GetDirectoryType(item->GetPath()); if (!item->IsParentFolder() && !inPlaylists && (nodetype == NODE_TYPE_ROOT || nodetype == NODE_TYPE_OVERVIEW || nodetype == NODE_TYPE_TOP100)) { if (!item->IsPath(CSettings::GetInstance().GetString(CSettings::SETTING_MYMUSIC_DEFAULTLIBVIEW))) buttons.Add(CONTEXT_BUTTON_SET_DEFAULT, 13335); // set default if (!CSettings::GetInstance().GetString(CSettings::SETTING_MYMUSIC_DEFAULTLIBVIEW).empty()) buttons.Add(CONTEXT_BUTTON_CLEAR_DEFAULT, 13403); // clear default } NODE_TYPE childtype = dir.GetDirectoryChildType(item->GetPath()); if (childtype == NODE_TYPE_ALBUM || childtype == NODE_TYPE_ARTIST || nodetype == NODE_TYPE_GENRE || nodetype == NODE_TYPE_ALBUM || nodetype == NODE_TYPE_ALBUM_RECENTLY_ADDED || nodetype == NODE_TYPE_ALBUM_COMPILATIONS) { // we allow the user to set content for // 1. general artist and album nodes // 2. specific per genre // 3. specific per artist // 4. specific per album buttons.Add(CONTEXT_BUTTON_SET_CONTENT, 20195); } if (item->HasMusicInfoTag() && !item->GetMusicInfoTag()->GetArtistString().empty()) { CVideoDatabase database; database.Open(); if (database.GetMatchingMusicVideo(item->GetMusicInfoTag()->GetArtistString()) > -1) buttons.Add(CONTEXT_BUTTON_GO_TO_ARTIST, 20400); } if (item->HasMusicInfoTag() && !item->GetMusicInfoTag()->GetArtistString().empty() && !item->GetMusicInfoTag()->GetAlbum().empty() && !item->GetMusicInfoTag()->GetTitle().empty()) { CVideoDatabase database; database.Open(); if (database.GetMatchingMusicVideo(item->GetMusicInfoTag()->GetArtistString(), item->GetMusicInfoTag()->GetAlbum(), item->GetMusicInfoTag()->GetTitle()) > -1) buttons.Add(CONTEXT_BUTTON_PLAY_OTHER, 20401); } if (item->HasVideoInfoTag() && !item->m_bIsFolder) { if ((CProfilesManager::GetInstance().GetCurrentProfile().canWriteDatabases() || g_passwordManager.bMasterUser) && !item->IsPlugin()) { buttons.Add(CONTEXT_BUTTON_RENAME, 16105); buttons.Add(CONTEXT_BUTTON_DELETE, 646); } } if (inPlaylists && URIUtils::GetFileName(item->GetPath()) != "PartyMode.xsp" && (item->IsPlayList() || item->IsSmartPlayList())) buttons.Add(CONTEXT_BUTTON_DELETE, 117); if (!item->IsReadOnly() && CSettings::GetInstance().GetBool("filelists.allowfiledeletion")) { buttons.Add(CONTEXT_BUTTON_DELETE, 117); buttons.Add(CONTEXT_BUTTON_RENAME, 118); } } } // noncontextual buttons CGUIWindowMusicBase::GetNonContextButtons(buttons); }
bool CGUIDialogFileBrowser::OnPopupMenu(int iItem) { CContextButtons choices; choices.Add(1, m_addSourceType.IsEmpty() ? 20133 : 21364); choices.Add(2, m_addSourceType.IsEmpty() ? 20134 : 21365); int btnid = CGUIDialogContextMenu::ShowAndGetChoice(choices); if (btnid == 1) { if (m_addNetworkShareEnabled) { CStdString strOldPath=m_selectedPath,newPath=m_selectedPath; VECSOURCES shares=m_shares; if (CGUIDialogNetworkSetup::ShowAndGetNetworkAddress(newPath)) { g_mediaManager.SetLocationPath(strOldPath,newPath); for (unsigned int i=0;i<shares.size();++i) { if (shares[i].strPath.Equals(strOldPath))//getPath().Equals(strOldPath)) { shares[i].strName = newPath; shares[i].strPath = newPath;//setPath(newPath); break; } } // re-open our dialog SetSources(shares); m_rootDir.SetMask("/"); m_browsingForFolders = 1; m_addNetworkShareEnabled = true; m_selectedPath = newPath; DoModal(); } } else { CFileItemPtr item = m_vecItems->Get(iItem); OnEditMediaSource(item.get()); } } if (btnid == 2) { if (m_addNetworkShareEnabled) { g_mediaManager.RemoveLocation(m_selectedPath); for (unsigned int i=0;i<m_shares.size();++i) { if (m_shares[i].strPath.Equals(m_selectedPath) && !m_shares[i].m_ignore) // getPath().Equals(m_selectedPath)) { m_shares.erase(m_shares.begin()+i); break; } } m_rootDir.SetSources(m_shares); m_rootDir.SetMask("/"); m_browsingForFolders = 1; m_addNetworkShareEnabled = true; m_selectedPath = ""; Update(m_Directory->m_strPath); } else { g_settings.DeleteSource(m_addSourceType,(*m_vecItems)[iItem]->GetLabel(),(*m_vecItems)[iItem]->m_strPath); SetSources(*g_settings.GetSourcesFromType(m_addSourceType)); Update(""); } } return true; }