/// <summary> /// Set the menu item states just prior to displaying the context menu. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SetMenuItemStates(object sender, EventArgs e) { WinForms.ContextMenu menu = sender as WinForms.ContextMenu; if (menu == null) { return; } MenuMap map = (MenuMap)menu.Tag; // main context menu items map["mute"].Checked = controller.IsMuted; map["shuffle"].Checked = controller.Shuffle; map["play"].Icon = (controller.IsPlaying ? Resx.Pause : Resx.Play); // library menu items if (librarian.IsActive(Resx.I_ScanContextDuplicates) || librarian.IsActive(Resx.I_ScanContextPhantoms) || (controller.CurrentContext == Controller.PlayerContext.None)) { map["cleanthis"].Enabled = false; } else { map["cleanthis"].Enabled = true; map["cleanthis"].Text = controller.IsMusicalPlaylist ? Resx.MenuCleanAlbum : Resx.MenuCleanPlaylist; } map["scandead"].Enabled = !librarian.IsActive(Resx.I_ScanPhantoms); map["scandup"].Enabled = !librarian.IsActive(Resx.I_ScanDuplicates); map["scanempty"].Enabled = !librarian.IsActive(Resx.I_ScanEmptyDirectories); var isMusic = (controller != null) && controller.IsMusicalPlaylist && (controller.CurrentTrack != null) && controller.Librarian?.Catalog != null; var hasPlaylist = (controller.CurrentPlaylist != null); var noDialogs = (syncDialog == null) && (exportDialog == null); var notXporting = !librarian.IsActive(Resx.I_ScanExport) && !librarian.IsActive(Resx.I_ScanImportPlaylist); // fix menu items map["fixalbum"].Enabled = isMusic; map["fixtrack"].Enabled = isMusic; // export menu items map["exalbum"].Enabled = isMusic && noDialogs && notXporting; map["exartist"].Enabled = isMusic && noDialogs && notXporting; map["explaylist"].Enabled = isMusic && hasPlaylist && noDialogs && notXporting; // synchronize item map["sync"].Enabled = isMusic && noDialogs; }