// // // // // $Revision$ // using System; using System.Collections; using System.Windows; using System.Windows.Controls; namespace ICSharpCode.Core.Presentation { /// /// A menu item representing an AddIn-Tree element. /// class CoreMenuItem : MenuItem, IStatusUpdate { protected readonly Codon codon; protected readonly object caller; public CoreMenuItem(Codon codon, object caller) { this.codon = codon; this.caller = caller; if (codon.Properties.Contains("shortcut")) { InputGestureText = codon.Properties["shortcut"]; } if (codon.Properties.Contains("icon")) { try { this.Icon = PresentationResourceService.GetImage(codon.Properties["icon"]); } catch (ResourceNotFoundException) {} } this.SubmenuOpened += CoreMenuItem_SubmenuOpened; UpdateText(); } void CoreMenuItem_SubmenuOpened(object sender, RoutedEventArgs e) { MenuService.UpdateStatus(this.ItemsSource); } public void UpdateText() { if (codon != null) { Header = MenuService.ConvertLabel(StringParser.Parse(codon.Properties["label"])); } } public virtual void UpdateStatus() { this.IsEnabled = this.IsEnabledCore; if (this.IsEnabled) { this.Visibility = Visibility.Visible; } else { if (codon.GetFailedAction(caller) == ConditionFailedAction.Exclude) this.Visibility = Visibility.Collapsed; else this.Visibility = Visibility.Visible; } } protected override bool IsEnabledCore { get { ConditionFailedAction failedAction = codon.GetFailedAction(caller); bool isEnabled = failedAction == ConditionFailedAction.Nothing; return isEnabled; } } } }