tag editor: remove albums view

master
Andrzej Rybczak 14 years ago
parent 5f637103a6
commit 69bd1bac97
  1. 2
      doc/config
  2. 3
      doc/ncmpcpp.1
  3. 4
      src/actions.cpp
  4. 5
      src/settings.cpp
  5. 1
      src/settings.h
  6. 1
      src/status.cpp
  7. 179
      src/tag_editor.cpp
  8. 2
      src/tag_editor.h

@ -321,8 +321,6 @@
#
#default_space_mode = "add" (add/select)
#
#default_tag_editor_left_col = "albums" (albums/dirs)
#
#default_tag_editor_pattern = "%n - %t"
#
#header_visibility = "yes"

@ -243,9 +243,6 @@ If set to "wrapped", going from last found position to next will take you to the
.B default_space_mode = select/add
If set to "select", space will select items instead of adding them to playlist (although selecting by space is default and the only one action for space in Playlist).
.TP
.B default_tag_editor_left_col = albums/dirs
If set to "albums", tag editor will display list of all albums from database, otherwise it'll allow you to browse the database.
.TP
.B incremental_seeking = yes/no
If enabled, seek time will increment by one each second of seeking.
.TP

@ -398,7 +398,7 @@ void Action::ListsChangeFinisher()
myPlaylistEditor->Content->clear();
}
# ifdef HAVE_TAGLIB_H
else if (myScreen->ActiveWindow() == myTagEditor->LeftColumn)
else if (myScreen->ActiveWindow() == myTagEditor->Dirs)
{
myTagEditor->Tags->clear();
}
@ -1202,7 +1202,7 @@ void UpdateDatabase::Run()
if (myScreen == myBrowser)
Mpd.UpdateDirectory(locale_to_utf_cpy(myBrowser->CurrentDir()));
# ifdef HAVE_TAGLIB_H
else if (myScreen == myTagEditor && !Config.albums_in_tag_editor)
else if (myScreen == myTagEditor)
Mpd.UpdateDirectory(myTagEditor->CurrentDir());
# endif // HAVE_TAGLIB_H
else

@ -354,7 +354,6 @@ void Configuration::SetDefaults()
wrapped_search = true;
space_selects = false;
ncmpc_like_songs_adding = false;
albums_in_tag_editor = false;
incremental_seeking = true;
now_playing_lyrics = false;
fetch_lyrics_in_background = false;
@ -826,10 +825,6 @@ void Configuration::Read()
{
space_selects = v == "select";
}
else if (name == "default_tag_editor_left_col")
{
albums_in_tag_editor = v == "albums";
}
else if (name == "incremental_seeking")
{
incremental_seeking = v == "yes";

@ -171,7 +171,6 @@ struct Configuration
bool wrapped_search;
bool space_selects;
bool ncmpc_like_songs_adding;
bool albums_in_tag_editor;
bool incremental_seeking;
bool now_playing_lyrics;
bool fetch_lyrics_in_background;

@ -294,7 +294,6 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges changed, void *)
# ifdef HAVE_TAGLIB_H
if (myTagEditor->Main())
{
myTagEditor->Albums->clear();
myTagEditor->Dirs->clear();
}
# endif // HAVE_TAGLIB_H

@ -90,7 +90,6 @@ std::string ParseFilename(MPD::MutableSong &s, std::string mask, bool preview);
std::string SongToString(const MPD::MutableSong &s);
bool DirEntryMatcher(const Regex &rx, const std::pair<std::string, std::string> &dir, bool filter);
bool AlbumEntryMatcher(const Regex &rx, const std::pair<std::string, std::string> &dir);
bool SongEntryMatcher(const Regex &rx, const MPD::MutableSong &s);
}
@ -100,20 +99,12 @@ void TagEditor::Init()
PatternsFile = Config.ncmpcpp_directory + "patterns.list";
SetDimensions(0, COLS);
Albums = new NC::Menu< std::pair<std::string, std::string> >(0, MainStartY, LeftColumnWidth, MainHeight, Config.titles_visibility ? "Albums" : "", Config.main_color, NC::brNone);
Albums->setHighlightColor(Config.active_column_color);
Albums->cyclicScrolling(Config.use_cyclic_scrolling);
Albums->centeredCursor(Config.centered_cursor);
Albums->setItemDisplayer(Display::Pair<std::string, std::string>);
Dirs = new NC::Menu< std::pair<std::string, std::string> >(0, MainStartY, LeftColumnWidth, MainHeight, Config.titles_visibility ? "Directories" : "", Config.main_color, NC::brNone);
Dirs->setHighlightColor(Config.active_column_color);
Dirs->cyclicScrolling(Config.use_cyclic_scrolling);
Dirs->centeredCursor(Config.centered_cursor);
Dirs->setItemDisplayer(Display::Pair<std::string, std::string>);
LeftColumn = Config.albums_in_tag_editor ? Albums : Dirs;
TagTypes = new NC::Menu<std::string>(MiddleColumnStartX, MainStartY, MiddleColumnWidth, MainHeight, Config.titles_visibility ? "Tag types" : "", Config.main_color, NC::brNone);
TagTypes->setHighlightColor(Config.main_highlight_color);
TagTypes->cyclicScrolling(Config.use_cyclic_scrolling);
@ -160,7 +151,7 @@ void TagEditor::Init()
FParserPreview = new NC::Scrollpad((COLS-FParserWidth)/2+FParserWidthOne, (MainHeight-FParserHeight)/2+MainStartY, FParserWidthTwo, FParserHeight, "Preview", Config.main_color, Config.window_border);
w = LeftColumn;
w = Dirs;
isInitialized = 1;
}
@ -187,7 +178,6 @@ void TagEditor::Resize()
GetWindowResizeParams(x_offset, width);
SetDimensions(x_offset, width);
Albums->resize(LeftColumnWidth, MainHeight);
Dirs->resize(LeftColumnWidth, MainHeight);
TagTypes->resize(MiddleColumnWidth, MainHeight);
Tags->resize(RightColumnWidth, MainHeight);
@ -196,7 +186,6 @@ void TagEditor::Resize()
FParserLegend->resize(FParserWidthTwo, FParserHeight);
FParserPreview->resize(FParserWidthTwo, FParserHeight);
Albums->moveTo(LeftColumnStartX, MainStartY);
Dirs->moveTo(LeftColumnStartX, MainStartY);
TagTypes->moveTo(MiddleColumnStartX, MainStartY);
Tags->moveTo(RightColumnStartX, MainStartY);
@ -242,7 +231,6 @@ void TagEditor::SwitchTo()
void TagEditor::Refresh()
{
LeftColumn->display();
mvvline(MainStartY, MiddleColumnStartX-1, 0, MainHeight);
TagTypes->display();
mvvline(MainStartY, RightColumnStartX-1, 0, MainHeight);
@ -261,77 +249,43 @@ void TagEditor::Refresh()
void TagEditor::Update()
{
if (LeftColumn->reallyEmpty())
if (Dirs->reallyEmpty())
{
LeftColumn->Window::clear();
Dirs->Window::clear();
Tags->clear();
if (Config.albums_in_tag_editor)
int highlightme = -1;
auto dirs = Mpd.GetDirectories(itsBrowsedDir);
std::sort(dirs.begin(), dirs.end(), CaseInsensitiveSorting());
if (itsBrowsedDir != "/")
{
*Albums << NC::XY(0, 0) << "Fetching albums...";
Albums->Window::refresh();
Mpd.BlockIdle(true); // for the same reason as in media library
auto albums = Mpd.GetList(MPD_TAG_ALBUM);
for (auto album = albums.begin(); album != albums.end(); ++album)
{
Mpd.StartSearch(1);
Mpd.AddSearch(MPD_TAG_ALBUM, *album);
auto songs = Mpd.CommitSearchSongs();
if (!songs.empty())
Albums->addItem(std::make_pair(songs[0].toString(Config.tag_editor_album_format), *album));
}
Mpd.BlockIdle(false);
std::sort(Albums->beginV(), Albums->endV(), CaseInsensitiveSorting());
size_t slash = itsBrowsedDir.rfind("/");
std::string parent = slash != std::string::npos ? itsBrowsedDir.substr(0, slash) : "/";
Dirs->addItem(make_pair("..", parent));
}
else
Dirs->addItem(std::make_pair(".", "/"));
for (auto dir = dirs.begin(); dir != dirs.end(); ++dir)
{
int highlightme = -1;
auto dirs = Mpd.GetDirectories(itsBrowsedDir);
std::sort(dirs.begin(), dirs.end(), CaseInsensitiveSorting());
if (itsBrowsedDir != "/")
{
size_t slash = itsBrowsedDir.rfind("/");
std::string parent = slash != std::string::npos ? itsBrowsedDir.substr(0, slash) : "/";
Dirs->addItem(make_pair("..", parent));
}
else
Dirs->addItem(std::make_pair(".", "/"));
for (auto dir = dirs.begin(); dir != dirs.end(); ++dir)
{
size_t slash = dir->rfind("/");
std::string to_display = slash != std::string::npos ? dir->substr(slash+1) : *dir;
Dirs->addItem(make_pair(to_display, *dir));
if (*dir == itsHighlightedDir)
highlightme = Dirs->size()-1;
}
if (highlightme != -1)
Dirs->highlight(highlightme);
size_t slash = dir->rfind("/");
std::string to_display = slash != std::string::npos ? dir->substr(slash+1) : *dir;
Dirs->addItem(make_pair(to_display, *dir));
if (*dir == itsHighlightedDir)
highlightme = Dirs->size()-1;
}
LeftColumn->display();
TagTypes->refresh();
if (highlightme != -1)
Dirs->highlight(highlightme);
Dirs->display();
}
if (Tags->reallyEmpty())
{
Tags->reset();
if (Config.albums_in_tag_editor)
{
if (!Albums->empty())
{
Mpd.StartSearch(1);
Mpd.AddSearch(MPD_TAG_ALBUM, Albums->current().value().second);
auto albums = Mpd.CommitSearchSongs();
std::sort(albums.begin(), albums.end(), CaseInsensitiveSorting());
for (auto album = albums.begin(); album != albums.end(); ++album)
Tags->addItem(*album);
}
}
else
{
auto songs = Mpd.GetSongs(Dirs->current().value().second);
std::sort(songs.begin(), songs.end(), CaseInsensitiveSorting());
for (auto s = songs.begin(); s != songs.end(); ++s)
Tags->addItem(*s);
}
auto songs = Mpd.GetSongs(Dirs->current().value().second);
std::sort(songs.begin(), songs.end(), CaseInsensitiveSorting());
for (auto s = songs.begin(); s != songs.end(); ++s)
Tags->addItem(*s);
Tags->refresh();
}
@ -352,16 +306,16 @@ void TagEditor::EnterPressed()
if (w == Dirs)
{
auto dirs = Mpd.GetDirectories(LeftColumn->current().value().second);
auto dirs = Mpd.GetDirectories(Dirs->current().value().second);
if (!dirs.empty())
{
itsHighlightedDir = itsBrowsedDir;
itsBrowsedDir = LeftColumn->current().value().second;
LeftColumn->clear();
LeftColumn->reset();
itsBrowsedDir = Dirs->current().value().second;
Dirs->clear();
Dirs->reset();
}
else
ShowMessage("No subdirs found");
ShowMessage("No subdirectories found");
}
else if (w == FParserDialog)
{
@ -652,8 +606,8 @@ void TagEditor::EnterPressed()
TagTypes->setHighlightColor(Config.main_highlight_color);
TagTypes->reset();
w->refresh();
w = LeftColumn;
LeftColumn->setHighlightColor(Config.active_column_color);
w = Dirs;
Dirs->setHighlightColor(Config.active_column_color);
Mpd.UpdateDirectory(getSharedDirectory(Tags->beginV(), Tags->endV()));
}
else
@ -668,16 +622,7 @@ void TagEditor::SpacePressed()
{
Tags->current().setSelected(!Tags->current().isSelected());
w->scroll(NC::wDown);
return;
}
if (w != LeftColumn)
return;
Config.albums_in_tag_editor = !Config.albums_in_tag_editor;
w = LeftColumn = Config.albums_in_tag_editor ? Albums : Dirs;
ShowMessage("Switched to %s view", Config.albums_in_tag_editor ? "albums" : "directories");
LeftColumn->display();
Tags->clear();
}
void TagEditor::MouseButtonPressed(MEVENT me)
@ -718,16 +663,16 @@ void TagEditor::MouseButtonPressed(MEVENT me)
ScrollpadMouseButtonPressed(FParserHelper, me);
}
}
else if (!LeftColumn->empty() && LeftColumn->hasCoords(me.x, me.y))
else if (!Dirs->empty() && Dirs->hasCoords(me.x, me.y))
{
if (w != LeftColumn)
if (w != Dirs)
{
PrevColumn();
PrevColumn();
}
if (size_t(me.y) < LeftColumn->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
if (size_t(me.y) < Dirs->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
{
LeftColumn->Goto(me.y);
Dirs->Goto(me.y);
if (me.bstate & BUTTON1_PRESSED)
EnterPressed();
else
@ -740,7 +685,7 @@ void TagEditor::MouseButtonPressed(MEVENT me)
else if (!TagTypes->empty() && TagTypes->hasCoords(me.x, me.y))
{
if (w != TagTypes)
w == LeftColumn ? NextColumn() : PrevColumn();
w == Dirs ? NextColumn() : PrevColumn();
if (size_t(me.y) < TagTypes->size() && (me.bstate & (BUTTON1_PRESSED | BUTTON3_PRESSED)))
{
if (!TagTypes->Goto(me.y))
@ -776,7 +721,7 @@ void TagEditor::MouseButtonPressed(MEVENT me)
bool TagEditor::allowsFiltering()
{
return w == LeftColumn || w == Tags;
return w == Dirs || w == Tags;
}
std::string TagEditor::currentFilter()
@ -784,8 +729,6 @@ std::string TagEditor::currentFilter()
std::string filter;
if (w == Dirs)
filter = RegexFilter< std::pair<std::string, std::string> >::currentFilter(*Dirs);
else if (w == Albums)
filter = RegexFilter< std::pair<std::string, std::string> >::currentFilter(*Albums);
else if (w == Tags)
filter = RegexFilter<MPD::MutableSong>::currentFilter(*Tags);
return filter;
@ -800,12 +743,6 @@ void TagEditor::applyFilter(const std::string &filter)
auto rx = RegexFilter< std::pair<std::string, std::string> >(filter, Config.regex_type, fun);
Dirs->filter(Dirs->begin(), Dirs->end(), rx);
}
else if (w == Albums)
{
Albums->showAll();
auto rx = RegexFilter< std::pair<std::string, std::string> >(filter, Config.regex_type, AlbumEntryMatcher);
Albums->filter(Albums->begin(), Albums->end(), rx);
}
else if (w == Tags)
{
Tags->showAll();
@ -818,7 +755,7 @@ void TagEditor::applyFilter(const std::string &filter)
bool TagEditor::allowsSearching()
{
return w == LeftColumn || w == Tags;
return w == Dirs || w == Tags;
}
bool TagEditor::search(const std::string &constraint)
@ -830,11 +767,6 @@ bool TagEditor::search(const std::string &constraint)
auto rx = RegexFilter< std::pair<std::string, std::string> >(constraint, Config.regex_type, fun);
result = Dirs->search(Dirs->begin(), Dirs->end(), rx);
}
else if (w == Albums)
{
auto rx = RegexFilter< std::pair<std::string, std::string> >(constraint, Config.regex_type, AlbumEntryMatcher);
result = Albums->search(Albums->begin(), Albums->end(), rx);
}
else if (w == Tags)
{
auto rx = RegexFilter<MPD::MutableSong>(constraint, Config.regex_type, SongEntryMatcher);
@ -847,8 +779,6 @@ void TagEditor::nextFound(bool wrap)
{
if (w == Dirs)
Dirs->nextFound(wrap);
else if (w == Albums)
Albums->nextFound(wrap);
else if (w == Tags)
Tags->nextFound(wrap);
}
@ -857,8 +787,6 @@ void TagEditor::prevFound(bool wrap)
{
if (w == Dirs)
Dirs->prevFound(wrap);
else if (w == Albums)
Albums->prevFound(wrap);
else if (w == Tags)
Tags->prevFound(wrap);
}
@ -905,7 +833,7 @@ MPD::SongList TagEditor::getSelectedSongs()
bool TagEditor::isNextColumnAvailable()
{
if (w == LeftColumn)
if (w == Dirs)
{
if (!TagTypes->reallyEmpty() && !Tags->reallyEmpty())
return true;
@ -924,9 +852,9 @@ bool TagEditor::isNextColumnAvailable()
bool TagEditor::NextColumn()
{
if (w == LeftColumn)
if (w == Dirs)
{
LeftColumn->setHighlightColor(Config.main_highlight_color);
Dirs->setHighlightColor(Config.main_highlight_color);
w->refresh();
w = TagTypes;
TagTypes->setHighlightColor(Config.active_column_color);
@ -956,12 +884,12 @@ bool TagEditor::isPrevColumnAvailable()
{
if (w == Tags)
{
if (!TagTypes->reallyEmpty() && !LeftColumn->reallyEmpty())
if (!TagTypes->reallyEmpty() && !Dirs->reallyEmpty())
return true;
}
else if (w == TagTypes)
{
if (!LeftColumn->reallyEmpty())
if (!Dirs->reallyEmpty())
return true;
}
else if (w == FParserHelper)
@ -985,8 +913,8 @@ bool TagEditor::PrevColumn()
{
TagTypes->setHighlightColor(Config.main_highlight_color);
w->refresh();
w = LeftColumn;
LeftColumn->setHighlightColor(Config.active_column_color);
w = Dirs;
Dirs->setHighlightColor(Config.active_column_color);
return true;
}
else if (w == FParserHelper)
@ -1009,14 +937,6 @@ void TagEditor::LocateSong(const MPD::Song &s)
if (s.getDirectory().empty())
return;
if (LeftColumn == Albums)
{
Config.albums_in_tag_editor = false;
if (w == LeftColumn)
w = Dirs;
LeftColumn = Dirs;
}
if (Global::myScreen != this)
SwitchTo();
@ -1394,11 +1314,6 @@ bool DirEntryMatcher(const Regex &rx, const std::pair<std::string, std::string>
return rx.match(dir.first);
}
bool AlbumEntryMatcher(const Regex &rx, const std::pair<std::string, std::string> &dir)
{
return rx.match(dir.first);
}
bool SongEntryMatcher(const Regex &rx, const MPD::MutableSong &s)
{
return rx.match(SongToString(s));

@ -78,8 +78,6 @@ class TagEditor : public Screen<NC::Window>, public Filterable, public HasSongs,
void LocateSong(const MPD::Song &s);
NC::Menu< std::pair<std::string, std::string> > *LeftColumn;
NC::Menu< std::pair<std::string, std::string> > *Albums;
NC::Menu< std::pair<std::string, std::string> > *Dirs;
NC::Menu<std::string> *TagTypes;
NC::Menu<MPD::MutableSong> *Tags;

Loading…
Cancel
Save