// TODO: Find a *much* nicer way of dealing with this. :X public ReferenceListItem(Reference reference, Display display, Resource context) { this.Reference = reference; string displayStr; switch (display) { case Display.NoMod: displayStr = reference.ToString(false, context); break; case Display.WithMod: displayStr = reference.ToString(true, context); break; case Display.SourcedNoMod: displayStr = reference.ToStringSourced(false, context); break; case Display.SourcedIncoming: displayStr = "[INCOMING] " + reference.ToStringSourced(false, context); break; default: throw new ArgumentException("display"); } this.AddText(displayStr); SetBackground(reference.Valid ? ItemStatus.Okay : ItemStatus.Error); this.CommandBindings.Add(new System.Windows.Input.CommandBinding( System.Windows.Input.ApplicationCommands.Copy, (o, e) => System.Windows.Clipboard.SetText(string.Concat(reference.Origin.Location, " : ", reference.Target.Location)) )); this.ContextMenu = new ContextMenu(); var items = this.ContextMenu.Items; items.Add(new MenuItem { Header = "_Copy...", Command = System.Windows.Input.ApplicationCommands.Copy, CommandTarget = this }); items.Add(CreateItem(Reference.Definition, "_Definition: ")); // Add the origin unless it's the same if (Reference.Definition != reference.Origin) items.Add(CreateItem(Reference.Origin, "_Origin: ")); // Add the definition *unless* it's either. if (Reference.Definition != Reference.Target && Reference.Origin != Reference.Target) items.Add(CreateItem(Reference.Target, "_Target: ")); }