public void OnSetBuildActionUpdate (CommandArrayInfo info) { Set<string> toggledActions = new Set<string> (); Project proj = null; foreach (ITreeNavigator node in CurrentNodes) { ProjectFile finfo = (ProjectFile) node.DataItem; //disallow multi-slect on more than one project, since available build actions may differ if (proj == null && finfo.Project != null) { proj = finfo.Project; } else if (proj == null || proj != finfo.Project) { info.Clear (); return; } toggledActions.Add (finfo.BuildAction); } foreach (string action in proj.GetBuildActions ()) { if (action == "--") { info.AddSeparator (); } else { CommandInfo ci = info.Add (BuildAction.Translate (action), action); ci.Checked = toggledActions.Contains (action); if (ci.Checked) ci.CheckedInconsistent = toggledActions.Count > 1; } } }
// If multiple nodes are selected and the method does not have the AllowMultiSelectionAttribute // attribute, disable the command. protected override void CommandUpdate (object target, CommandArrayInfo cinfo) { NodeCommandHandler nc = (NodeCommandHandler) target; base.CommandUpdate (target, cinfo); if (nc.MultipleSelectedNodes) { bool allowMultiArray = false; ICommandArrayUpdateHandler h = ((ICommandArrayUpdateHandler)this).Next; while (h != null) { if (h is AllowMultiSelectionAttribute) { allowMultiArray = true; break; } h = h.Next; } if (!allowMultiArray) cinfo.Clear (); } }