void PlaylistView::removeSelectedSongs() { PlaylistModel *plsModel = static_cast<PlaylistModel*>(model()); if (plsModel->itemsCount() && !isCurrentItemHidden()) { // Actually we don't have to make copy of selectedItems, since removeEntry // doesn't modify it immediately, but this is not obvious and may lead to // problems in the future. const std::vector<int> selectedSongs = selectedItems(); if (!selectedSongs.empty()) { assert(std::is_sorted(selectedSongs.begin(), selectedSongs.end())); std::for_each(selectedSongs.rbegin(), selectedSongs.rend(), [&](int item){ m_xmmsClient->playlistRemoveEntry(plsModel->playlist(), item); }); } else { m_xmmsClient->playlistRemoveEntry(plsModel->playlist(), currentItem()); } showCurrentItem(); } }
void PlaylistView::keyPressedEvent(const KeyEvent& keyEvent) { PlaylistModel *plsModel = static_cast<PlaylistModel*>(model()); switch (keyEvent.key()) { case Hotkeys::PlaylistView::RemoveEntry: removeSelectedSongs(); break; case Hotkeys::PlaylistView::ClearPlaylist: m_xmmsClient->playlistClear(plsModel->playlist()); break; case Hotkeys::PlaylistView::ShufflePlaylist: m_xmmsClient->playlistShuffle(plsModel->playlist()); break; case Hotkeys::PlaylistView::GoToCurrentlyPlayingSong: setCurrentItem(plsModel->currentSongItem()); break; case Hotkeys::PlaylistView::MoveSelectedSongs: moveSelectedSongs(); break; case Hotkeys::PlaylistView::AddFileOrDirectory: { auto resultCallback = [this](const std::string& path, LineEdit::Result result) { if (result == LineEdit::Result::Accepted) addPath(path); }; StatusArea::askQuestion("Add path: ", resultCallback); break; } case Hotkeys::PlaylistView::AddUrl: { auto resultCallback = [this](const std::string& url, LineEdit::Result result) { if (result == LineEdit::Result::Accepted) addUrl(url); }; StatusArea::askQuestion("Add url: ", resultCallback); break; } case Hotkeys::PlaylistView::ShowSongInfo: if (plsModel->itemsCount() && !isCurrentItemHidden()) { int id = plsModel->song(currentItem()).id(); if (id > 0) showSongInfo(id); } break; case '+': // Select be regexp selectSongsByRegExp(); break; case '\\': // Unselect be regexp unselectSongsByRegExp(); break; default: ListViewAppIntegrated::keyPressedEvent(keyEvent); } }