// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Shapes; using ICSharpCode.Core; using ICSharpCode.Profiler.Controls; using ICSharpCode.Profiler.AddIn.Views; namespace ICSharpCode.Profiler.AddIn.Commands { /// /// Description of ProfilerMenuCommand. /// public abstract class ProfilerMenuCommand : AbstractMenuCommand { public abstract override void Run(); protected virtual IEnumerable GetSelectedItems() { if (Owner is Shape) yield return (Owner as Shape).Tag as CallTreeNodeViewModel; else { var fe = TryToFindParent(typeof(QueryView)) as QueryView; if (fe != null) { foreach (var item in fe.SelectedItems) yield return item; } } } protected virtual ProfilerView Parent { get { return TryToFindParent(typeof(ProfilerView)) as ProfilerView; } } FrameworkElement TryToFindParent(Type type) { FrameworkElement start = Owner as FrameworkElement; if (start == null) return null; while (start != null && !start.GetType().Equals(type)) start = start.Parent as FrameworkElement; return start; } } }