keep proper songs' positions when playlist is modified

master
Andrzej Rybczak 17 years ago
parent 12e437c5af
commit fe79d1ae94
  1. 10
      src/ncmpcpp.cpp
  2. 12
      src/playlist.cpp
  3. 1
      src/playlist.h

@ -452,6 +452,7 @@ int main(int argc, char *argv[])
Mpd->QueueDeleteSongId((*myPlaylist->Main())[*it].GetID());
myPlaylist->Main()->DeleteOption(*it);
}
myPlaylist->FixPositions(list.front());
ShowMessage("Selected items deleted!");
}
else
@ -470,6 +471,7 @@ int main(int argc, char *argv[])
myPlaylist->Main()->Refresh();
myPlaylist->Main()->ReadKey(input);
}
myPlaylist->FixPositions(myPlaylist->Main()->Choice());
myPlaylist->Main()->SetTimeout(ncmpcpp_window_timeout);
Playlist::BlockNowPlayingUpdate = 0;
}
@ -634,6 +636,8 @@ int main(int argc, char *argv[])
for (vector<size_t>::iterator it = list.begin(); it != list.end(); it++)
{
(*it)--;
myPlaylist->Main()->at((*it)+1).SetPosition(*it);
myPlaylist->Main()->at(*it).SetPosition((*it)+1);
myPlaylist->Main()->Swap(*it, (*it)+1);
}
myPlaylist->Main()->Highlight(list[(list.size()-1)/2]);
@ -656,6 +660,8 @@ int main(int argc, char *argv[])
TraceMpdStatus();
time(&timer);
to--;
myPlaylist->Main()->at(from).SetPosition(to);
myPlaylist->Main()->at(to).SetPosition(from);
myPlaylist->Main()->Swap(to, to+1);
myPlaylist->Main()->Scroll(wUp);
myPlaylist->Main()->Refresh();
@ -743,6 +749,8 @@ int main(int argc, char *argv[])
for (vector<size_t>::reverse_iterator it = list.rbegin(); it != list.rend(); it++)
{
(*it)++;
myPlaylist->Main()->at((*it)-1).SetPosition(*it);
myPlaylist->Main()->at(*it).SetPosition((*it)-1);
myPlaylist->Main()->Swap(*it, (*it)-1);
}
myPlaylist->Main()->Highlight(list[(list.size()-1)/2]);
@ -765,6 +773,8 @@ int main(int argc, char *argv[])
TraceMpdStatus();
time(&timer);
to++;
myPlaylist->Main()->at(from).SetPosition(to);
myPlaylist->Main()->at(to).SetPosition(from);
myPlaylist->Main()->Swap(to, to-1);
myPlaylist->Main()->Scroll(wDown);
myPlaylist->Main()->Refresh();

@ -255,6 +255,18 @@ void Playlist::Sort()
ShowMessage("Playlist sorted!");
}
void Playlist::FixPositions(size_t beginning)
{
bool was_filtered = w->isFiltered();
w->ShowAll();
for (size_t i = beginning; i < w->Size(); i++)
{
(*w)[i].SetPosition(i);
}
if (was_filtered)
w->ShowFiltered();
}
bool Playlist::Sorting(MPD::Song *a, MPD::Song *b)
{
for (size_t i = 0; i < SortOptions; i++)

@ -56,6 +56,7 @@ class Playlist : public Screen< Menu<MPD::Song> >
const MPD::Song *NowPlayingSong();
void Sort();
void FixPositions(size_t = 0);
static std::string SongToString(const MPD::Song &, void *);
static std::string SongInColumnsToString(const MPD::Song &, void *);

Loading…
Cancel
Save