new feature: move item(s) in playlist to given position
This commit is contained in:
@@ -195,8 +195,9 @@ void Help::GetKeybindings()
|
||||
*w << DisplayKeys(Key.Delete) << "Delete item/selected items from playlist\n";
|
||||
*w << DisplayKeys(Key.Clear) << "Clear playlist\n";
|
||||
*w << DisplayKeys(Key.Crop) << "Clear playlist but hold currently playing/selected items\n";
|
||||
*w << DisplayKeys(Key.MvSongUp) << "Move item/group of items up\n";
|
||||
*w << DisplayKeys(Key.MvSongDown) << "Move item/group of items down\n";
|
||||
*w << DisplayKeys(Key.MvSongUp) << "Move item(s) up\n";
|
||||
*w << DisplayKeys(Key.MvSongDown) << "Move item(s) down\n";
|
||||
*w << DisplayKeys(Key.MoveTo) << "Move item(s) to given position\n";
|
||||
*w << DisplayKeys(Key.Add) << "Add url/file/directory to playlist\n";
|
||||
*w << DisplayKeys(Key.SavePlaylist) << "Save playlist\n";
|
||||
*w << DisplayKeys(Key.SortPlaylist) << "Sort playlist\n";
|
||||
@@ -235,8 +236,8 @@ void Help::GetKeybindings()
|
||||
# ifndef HAVE_TAGLIB_H
|
||||
*w << DisplayKeys(Key.EditTags) << "Edit playlist's name\n";
|
||||
# endif // ! HAVE_TAGLIB_H
|
||||
*w << DisplayKeys(Key.MvSongUp) << "Move item/group of items up\n";
|
||||
*w << DisplayKeys(Key.MvSongDown) << "Move item/group of items down\n";
|
||||
*w << DisplayKeys(Key.MvSongUp) << "Move item(s) up\n";
|
||||
*w << DisplayKeys(Key.MvSongDown) << "Move item(s) down\n";
|
||||
|
||||
*w << "\n\n " << fmtBold << "Keys - Lyrics\n -----------------------------------------\n" << fmtBoldEnd;
|
||||
*w << DisplayKeys(Key.Space) << "Switch for following lyrics of now playing song\n";
|
||||
|
||||
21
src/menu.h
21
src/menu.h
@@ -116,7 +116,8 @@ namespace NCurses
|
||||
void InsertSeparator(size_t pos);
|
||||
void DeleteOption(size_t pos);
|
||||
void IntoSeparator(size_t pos);
|
||||
void Swap(size_t, size_t);
|
||||
void Swap(size_t one, size_t two);
|
||||
void Move(size_t from, size_t to);
|
||||
|
||||
bool isBold(int id = -1);
|
||||
void BoldOption(int, bool);
|
||||
@@ -317,12 +318,26 @@ template <typename T> void NCurses::Menu<T>::BoldOption(int index, bool bold)
|
||||
itsOptions[index]->isBold = bold;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void NCurses::Menu<T>::Swap(size_t one, size_t two)
|
||||
template <typename T> void NCurses::Menu<T>::Swap(size_t one, size_t two)
|
||||
{
|
||||
std::swap(itsOptions.at(one), itsOptions.at(two));
|
||||
}
|
||||
|
||||
template <typename T> void NCurses::Menu<T>::Move(size_t from, size_t to)
|
||||
{
|
||||
int diff = from-to;
|
||||
if (diff > 0)
|
||||
{
|
||||
for (size_t i = from; i > to; i--)
|
||||
std::swap(itsOptions.at(i), itsOptions.at(i-1));
|
||||
}
|
||||
else if (diff < 0)
|
||||
{
|
||||
for (size_t i = from; i < to; i++)
|
||||
std::swap(itsOptions.at(i), itsOptions.at(i+1));
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T> void NCurses::Menu<T>::Refresh()
|
||||
{
|
||||
if (itsOptionsPtr->empty())
|
||||
|
||||
@@ -828,6 +828,66 @@ int main(int argc, char *argv[])
|
||||
myPlaylistEditor->Content->SetTimeout(ncmpcpp_window_timeout);
|
||||
}
|
||||
}
|
||||
else if (Keypressed(input, Key.MoveTo) && myScreen == myPlaylist)
|
||||
{
|
||||
if (myPlaylist->Main()->isFiltered())
|
||||
{
|
||||
ShowMessage("%s", MPD::Message::FunctionDisabledFilteringEnabled);
|
||||
continue;
|
||||
}
|
||||
|
||||
LockStatusbar();
|
||||
Statusbar() << "Move item(s) to given position: ";
|
||||
string strpos = wFooter->GetString(10);
|
||||
UnlockStatusbar();
|
||||
|
||||
if (strpos.empty())
|
||||
continue;
|
||||
|
||||
int pos = StrToInt(strpos);
|
||||
|
||||
if (pos < 0)
|
||||
continue;
|
||||
|
||||
Playlist::BlockUpdate = 1;
|
||||
if (myPlaylist->Main()->hasSelected())
|
||||
{
|
||||
vector<size_t> list;
|
||||
myPlaylist->Main()->GetSelected(list);
|
||||
if (pos+list.back()-list.front() > myPlaylist->Main()->Size())
|
||||
pos = myPlaylist->Main()->Size()+list.front()-list.back()-1;
|
||||
int diff = pos-list.front();
|
||||
if (diff > 0)
|
||||
{
|
||||
for (vector<size_t>::reverse_iterator it = list.rbegin(); it != list.rend(); it++)
|
||||
{
|
||||
Mpd->QueueMove(*it, *it+diff);
|
||||
myPlaylist->Main()->Move(*it, *it+diff);
|
||||
}
|
||||
}
|
||||
else if (diff < 0)
|
||||
{
|
||||
for (vector<size_t>::const_iterator it = list.begin(); it != list.end(); it++)
|
||||
{
|
||||
Mpd->QueueMove(*it, *it+diff);
|
||||
myPlaylist->Main()->Move(*it, *it+diff);
|
||||
}
|
||||
}
|
||||
myPlaylist->Main()->Highlight(list.front()+diff);
|
||||
Mpd->CommitQueue();
|
||||
}
|
||||
else
|
||||
{
|
||||
int current_pos = myPlaylist->Main()->Choice();
|
||||
int diff = pos-current_pos;
|
||||
if (diff)
|
||||
{
|
||||
Mpd->Move(current_pos, current_pos+diff);
|
||||
myPlaylist->Main()->Highlight(current_pos+diff);
|
||||
}
|
||||
}
|
||||
myPlaylist->FixPositions();
|
||||
}
|
||||
else if (Keypressed(input, Key.Add))
|
||||
{
|
||||
LockStatusbar();
|
||||
|
||||
@@ -136,6 +136,7 @@ void DefaultKeys(ncmpcpp_keys &keys)
|
||||
keys.Crop[0] = 'C';
|
||||
keys.MvSongUp[0] = 'm';
|
||||
keys.MvSongDown[0] = 'n';
|
||||
keys.MoveTo[0] = 'M';
|
||||
keys.Add[0] = 'a';
|
||||
keys.SavePlaylist[0] = 'S';
|
||||
keys.GoToNowPlaying[0] = 'o';
|
||||
@@ -202,6 +203,7 @@ void DefaultKeys(ncmpcpp_keys &keys)
|
||||
keys.Crop[1] = null_key;
|
||||
keys.MvSongUp[1] = null_key;
|
||||
keys.MvSongDown[1] = null_key;
|
||||
keys.MoveTo[1] = null_key;
|
||||
keys.Add[1] = null_key;
|
||||
keys.SavePlaylist[1] = null_key;
|
||||
keys.GoToNowPlaying[1] = null_key;
|
||||
@@ -400,6 +402,8 @@ void ReadKeys(ncmpcpp_keys &keys)
|
||||
GetKeys(key, keys.MvSongUp);
|
||||
else if (key.find("key_move_song_down ") != string::npos)
|
||||
GetKeys(key, keys.MvSongDown);
|
||||
else if (key.find("key_move_to ") != string::npos)
|
||||
GetKeys(key, keys.MoveTo);
|
||||
else if (key.find("key_add ") != string::npos)
|
||||
GetKeys(key, keys.Add);
|
||||
else if (key.find("key_save_playlist ") != string::npos)
|
||||
|
||||
@@ -85,6 +85,7 @@ struct ncmpcpp_keys
|
||||
int Crop[2];
|
||||
int MvSongUp[2];
|
||||
int MvSongDown[2];
|
||||
int MoveTo[2];
|
||||
int Add[2];
|
||||
int SavePlaylist[2];
|
||||
int GoToNowPlaying[2];
|
||||
|
||||
Reference in New Issue
Block a user