public void UpdateActions ()
{
Source source = ServiceManager.SourceManager.ActiveSource;
if (source == null) {
Sensitive = Visible = false;
return;
}
bool in_database = source is DatabaseSource;
PrimarySource primary_source = (source as PrimarySource) ?? (source.Parent as PrimarySource);
var track_source = source as ITrackModelSource;
if (track_source != null) {
if (FilterFocused) {
if (Selection == filter_selection) {
filter_selection.MaxIndex = track_source.TrackModel.Selection.MaxIndex;
filter_selection.Clear (false);
filter_selection.SelectAll ();
} else {
Log.Error ("Filter focused, but selection is not filter selection!");
Console.WriteLine (System.Environment.StackTrace);
}
}
var selection = Selection;
int count = selection.Count;
Sensitive = Visible = true;
bool has_selection = count > 0;
bool has_single_selection = count == 1;
foreach (string action in require_selection_actions) {
this[action].Sensitive = has_selection;
}
UpdateActions (source.CanSearch && !FilterFocused, has_single_selection,
"SearchMenuAction", "SearchForSameArtistAction", "SearchForSameAlbumAction"
);
this["SelectAllAction"].Sensitive = track_source.Count > 0 && !selection.AllSelected;
UpdateAction ("RemoveTracksAction", track_source.CanRemoveTracks, has_selection, source);
UpdateAction ("DeleteTracksFromDriveAction", track_source.CanDeleteTracks, has_selection, source);
//if it can delete tracks, most likely it can open their folder
UpdateAction ("OpenContainingFolderAction", track_source.CanDeleteTracks, has_single_selection, source);
UpdateAction ("RemoveTracksFromLibraryAction", source.Parent is LibrarySource, has_selection, null);
UpdateAction ("TrackPropertiesAction", source.HasViewableTrackProperties, has_selection, source);
UpdateAction ("TrackEditorAction", source.HasEditableTrackProperties, has_selection, source);
UpdateAction ("RateTracksAction", source.HasEditableTrackProperties, has_selection, null);
UpdateAction ("AddToPlaylistAction", in_database && primary_source != null &&
primary_source.SupportsPlaylists && !primary_source.PlaylistsReadOnly, has_selection, null);
if (primary_source != null &&
!(primary_source is LibrarySource) &&
primary_source.StorageName != null) {
this["DeleteTracksFromDriveAction"].Label = String.Format (
Catalog.GetString ("_Delete From \"{0}\""), primary_source.StorageName);
}
if (FilterFocused) {
UpdateActions (false, false, disable_for_filter_actions);
}
} else {
Sensitive = Visible = false;
}
}