actions: make checks more strict

This commit is contained in:
Andrzej Rybczak
2012-09-05 21:35:52 +02:00
parent ad297ba059
commit 837a7c14cf
2 changed files with 40 additions and 72 deletions

View File

@@ -639,22 +639,22 @@ void ToggleInterface::Run()
bool JumpToParentDir::canBeRun() const
{
return myScreen == myBrowser
return (myScreen == myBrowser && myBrowser->CurrentDir() != "/")
# ifdef HAVE_TAGLIB_H
|| myScreen == myTagEditor
|| (myScreen->ActiveWindow() == myTagEditor->Dirs && myTagEditor->CurrentDir() != "/")
# endif // HAVE_TAGLIB_H
;
}
void JumpToParentDir::Run()
{
if (myScreen == myBrowser && myBrowser->CurrentDir() != "/")
if (myScreen == myBrowser)
{
myBrowser->Main()->reset();
myBrowser->EnterPressed();
}
# ifdef HAVE_TAGLIB_H
else if (myScreen->ActiveWindow() == myTagEditor->Dirs && myTagEditor->CurrentDir() != "/")
else if (myScreen == myTagEditor)
{
myTagEditor->Dirs->reset();
myTagEditor->EnterPressed();
@@ -978,10 +978,10 @@ bool MoveSelectedItemsUp::canBeRun() const
{
return ((myScreen->ActiveWindow() == myPlaylist->Items
&& !myPlaylist->Items->empty()
&& !myPlaylist->Items->isFiltered())
&& !myPlaylist->isFiltered())
|| (myScreen->ActiveWindow() == myPlaylistEditor->Content
&& !myPlaylistEditor->Content->empty()
&& !myPlaylistEditor->Content->isFiltered()));
&& !myPlaylistEditor->isContentFiltered()));
}
void MoveSelectedItemsUp::Run()
@@ -1003,10 +1003,10 @@ bool MoveSelectedItemsDown::canBeRun() const
{
return ((myScreen->ActiveWindow() == myPlaylist->Items
&& !myPlaylist->Items->empty()
&& !myPlaylist->Items->isFiltered())
&& !myPlaylist->isFiltered())
|| (myScreen->ActiveWindow() == myPlaylistEditor->Content
&& !myPlaylistEditor->Content->empty()
&& !myPlaylistEditor->Content->isFiltered()));
&& !myPlaylistEditor->isContentFiltered()));
}
void MoveSelectedItemsDown::Run()
@@ -1082,7 +1082,7 @@ void Add::Run()
bool SeekForward::canBeRun() const
{
return myPlaylist->NowPlayingSong();
return myPlaylist->NowPlayingSong() && Mpd.GetTotalTime() > 0;
}
void SeekForward::Run()
@@ -1092,7 +1092,7 @@ void SeekForward::Run()
bool SeekBackward::canBeRun() const
{
return myPlaylist->NowPlayingSong();
return myPlaylist->NowPlayingSong() && Mpd.GetTotalTime() > 0;
}
void SeekBackward::Run()
@@ -1215,8 +1215,10 @@ void UpdateDatabase::Run()
bool JumpToPlayingSong::canBeRun() const
{
return (myScreen == myPlaylist || myScreen == myBrowser || myScreen == myLibrary)
&& myPlaylist->isPlaying();
return ((myScreen == myPlaylist && !myPlaylist->isFiltered())
|| myScreen == myBrowser
|| myScreen == myLibrary)
&& myPlaylist->isPlaying();
}
void JumpToPlayingSong::Run()
@@ -1224,23 +1226,16 @@ void JumpToPlayingSong::Run()
using Global::RedrawHeader;
if (myScreen == myPlaylist)
{
if (myPlaylist->isFiltered())
return;
assert(myPlaylist->isPlaying());
myPlaylist->Items->highlight(myPlaylist->NowPlaying);
}
else if (myScreen == myBrowser)
{
const MPD::Song *s = myPlaylist->NowPlayingSong();
assert(s);
myBrowser->LocateSong(*s);
RedrawHeader = true;
}
else if (myScreen == myLibrary)
{
const MPD::Song *s = myPlaylist->NowPlayingSong();
assert(s);
myLibrary->LocateSong(*s);
}
}
@@ -1262,13 +1257,11 @@ void ToggleRandom::Run()
bool StartSearching::canBeRun() const
{
return myScreen == mySearcher;
return myScreen == mySearcher && !mySearcher->Main()->at(0).isInactive();
}
void StartSearching::Run()
{
if (mySearcher->Main()->at(0).isInactive())
return;
mySearcher->Main()->highlight(SearchEngine::SearchButton);
mySearcher->Main()->setHighlighting(0);
mySearcher->Main()->refresh();
@@ -1336,7 +1329,7 @@ void SetCrossfade::Run()
bool EditSong::canBeRun() const
{
# ifdef HAVE_TAGLIB_H
return currentSong(myScreen);
return isMPDMusicDirSet() && currentSong(myScreen);
# else
return false;
# endif // HAVE_TAGLIB_H
@@ -1345,10 +1338,7 @@ bool EditSong::canBeRun() const
void EditSong::Run()
{
# ifdef HAVE_TAGLIB_H
if (!isMPDMusicDirSet())
return;
auto s = currentSong(myScreen);
assert(s);
myTinyTagEditor->SetEdited(*s);
myTinyTagEditor->SwitchTo();
# endif // HAVE_TAGLIB_H
@@ -1357,7 +1347,8 @@ void EditSong::Run()
bool EditLibraryTag::canBeRun() const
{
# ifdef HAVE_TAGLIB_H
return myScreen->ActiveWindow() == myLibrary->Tags
return isMPDMusicDirSet()
&& myScreen->ActiveWindow() == myLibrary->Tags
&& !myLibrary->Tags->empty();
# else
return false;
@@ -1369,8 +1360,6 @@ void EditLibraryTag::Run()
# ifdef HAVE_TAGLIB_H
using Global::wFooter;
if (!isMPDMusicDirSet())
return;
LockStatusbar();
Statusbar() << NC::fmtBold << tagTypeToString(Config.media_lib_primary_tag) << NC::fmtBoldEnd << ": ";
std::string new_tag = wFooter->getString(myLibrary->Tags->current().value());
@@ -1410,7 +1399,8 @@ void EditLibraryTag::Run()
bool EditLibraryAlbum::canBeRun() const
{
# ifdef HAVE_TAGLIB_H
return myScreen->ActiveWindow() == myLibrary->Albums
return isMPDMusicDirSet()
&& myScreen->ActiveWindow() == myLibrary->Albums
&& !myLibrary->Albums->empty();
# else
return false;
@@ -1422,8 +1412,6 @@ void EditLibraryAlbum::Run()
# ifdef HAVE_TAGLIB_H
using Global::wFooter;
if (!isMPDMusicDirSet())
return;
LockStatusbar();
Statusbar() << NC::fmtBold << "Album: " << NC::fmtBoldEnd;
std::string new_album = wFooter->getString(myLibrary->Albums->current().value().Album);
@@ -1464,13 +1452,14 @@ void EditLibraryAlbum::Run()
bool EditDirectoryName::canBeRun() const
{
return (myScreen == myBrowser
return isMPDMusicDirSet()
&& ((myScreen == myBrowser
&& !myBrowser->Main()->empty()
&& myBrowser->Main()->current().value().type == MPD::itDirectory)
# ifdef HAVE_TAGLIB_H
|| (myScreen->ActiveWindow() == myTagEditor->Dirs
&& !myTagEditor->Dirs->empty()
&& myTagEditor->Dirs->choice() > 0)
&& myTagEditor->Dirs->choice() > 0))
# endif // HAVE_TAGLIB_H
;
}
@@ -1479,8 +1468,6 @@ void EditDirectoryName::Run()
{
using Global::wFooter;
if (!isMPDMusicDirSet())
return;
if (myScreen == myBrowser)
{
std::string old_dir = myBrowser->Main()->current().value().name;
@@ -1596,7 +1583,6 @@ bool JumpToBrowser::canBeRun() const
void JumpToBrowser::Run()
{
auto s = currentSong(myScreen);
assert(s);
myBrowser->LocateSong(*s);
}
@@ -1608,7 +1594,6 @@ bool JumpToMediaLibrary::canBeRun() const
void JumpToMediaLibrary::Run()
{
auto s = currentSong(myScreen);
assert(s);
myLibrary->LocateSong(*s);
}
@@ -1663,7 +1648,7 @@ void ToggleScreenLock::Run()
bool JumpToTagEditor::canBeRun() const
{
# ifdef HAVE_TAGLIB_H
return currentSong(myScreen);
return isMPDMusicDirSet() && currentSong(myScreen);
# else
return false;
# endif // HAVE_TAGLIB_H
@@ -1672,31 +1657,21 @@ bool JumpToTagEditor::canBeRun() const
void JumpToTagEditor::Run()
{
# ifdef HAVE_TAGLIB_H
if (!isMPDMusicDirSet())
return;
auto s = currentSong(myScreen);
assert(s);
myTagEditor->LocateSong(*s);
# endif // HAVE_TAGLIB_H
}
bool JumpToPositionInSong::canBeRun() const
{
return myPlaylist->NowPlayingSong();
return myPlaylist->NowPlayingSong() && Mpd.GetTotalTime() > 0;
}
void JumpToPositionInSong::Run()
{
using Global::wFooter;
if (!Mpd.GetTotalTime())
{
ShowMessage("Unknown item length");
return;
}
const MPD::Song *s = myPlaylist->NowPlayingSong();
assert(s);
LockStatusbar();
Statusbar() << "Position to go (in %/mm:ss/seconds(s)): ";
@@ -1742,7 +1717,6 @@ bool ReverseSelection::canBeRun() const
void ReverseSelection::Run()
{
auto w = hasSongs(myScreen);
assert(w);
w->reverseSelection();
ShowMessage("Selection reversed");
}
@@ -1755,7 +1729,6 @@ bool DeselectItems::canBeRun() const
void DeselectItems::Run()
{
auto pl = proxySongList(myScreen);
assert(pl);
for (size_t i = 0; i < pl->size(); ++i)
pl->setSelected(i, false);
}
@@ -1769,7 +1742,6 @@ bool SelectAlbum::canBeRun() const
void SelectAlbum::Run()
{
auto pl = proxySongList(myScreen);
assert(pl);
size_t pos = pl->choice();
if (MPD::Song *s = pl->getSong(pos))
{
@@ -1907,8 +1879,6 @@ void ApplyFilter::Run()
using Global::wFooter;
Filterable *f = dynamic_cast<Filterable *>(myScreen);
assert(f);
assert(f->allowsFiltering());
LockStatusbar();
Statusbar() << NC::fmtBold << "Apply filter: " << NC::fmtBoldEnd;
@@ -2007,7 +1977,6 @@ bool NextFoundItem::canBeRun() const
void NextFoundItem::Run()
{
Searchable *w = dynamic_cast<Searchable *>(myScreen);
assert(w);
w->nextFound(Config.wrapped_search);
ListsChangeFinisher();
}
@@ -2020,7 +1989,6 @@ bool PreviousFoundItem::canBeRun() const
void PreviousFoundItem::Run()
{
Searchable *w = dynamic_cast<Searchable *>(myScreen);
assert(w);
w->prevFound(Config.wrapped_search);
ListsChangeFinisher();
}
@@ -2031,15 +1999,19 @@ void ToggleFindMode::Run()
ShowMessage("Search mode: %s", Config.wrapped_search ? "Wrapped" : "Normal");
}
void ToggleReplayGainMode::Run()
bool ToggleReplayGainMode::canBeRun() const
{
using Global::wFooter;
if (Mpd.Version() < 16)
{
ShowMessage("Replay gain mode control is supported in MPD >= 0.16.0");
return;
return false;
}
return true;
}
void ToggleReplayGainMode::Run()
{
using Global::wFooter;
LockStatusbar();
Statusbar() << "Replay gain mode? [" << NC::fmtBold << 'o' << NC::fmtBoldEnd << "ff/" << NC::fmtBold << 't' << NC::fmtBoldEnd << "rack/" << NC::fmtBold << 'a' << NC::fmtBoldEnd << "lbum]";
@@ -2218,23 +2190,18 @@ void RefetchArtistInfo::Run()
bool SetSelectedItemsPriority::canBeRun() const
{
return myScreen->ActiveWindow() == myPlaylist->Items;
if (Mpd.Version() < 17)
{
ShowMessage("Priorities are supported in MPD >= 0.17.0");
return false;
}
return myScreen->ActiveWindow() == myPlaylist->Items && !myPlaylist->Items->empty();
}
void SetSelectedItemsPriority::Run()
{
using Global::wFooter;
assert(myScreen->ActiveWindow() == myPlaylist->Items);
if (myPlaylist->Items->empty())
return;
if (Mpd.Version() < 17)
{
ShowMessage("Priorities are supported in MPD >= 0.17.0");
return;
}
LockStatusbar();
Statusbar() << "Set priority [0-255]: ";
std::string strprio = wFooter->getString();

View File

@@ -662,6 +662,7 @@ struct ToggleFindMode : public Action
struct ToggleReplayGainMode : public Action
{
ToggleReplayGainMode() : Action(aToggleReplayGainMode, "toggle_replay_gain_mode") { }
virtual bool canBeRun() const;
virtual void Run();
};