public override void Update(IActionContext context, ref ActionPresentation presentation) { base.Update(context, ref presentation); bool anyHasThreadHandler = false; for (int i = 0; i < context.SelectedResources.Count; i++) { string resType = context.SelectedResources [i].Type; IResourceThreadingHandler threadingHandler = Core.PluginLoader.GetResourceThreadingHandler(resType); if (threadingHandler != null) { IResource threadRoot = ConversationBuilder.GetConversationRoot(context.SelectedResources [i]); if (threadingHandler.CanExpandThread(threadRoot, ThreadExpandReason.Enumerate)) { anyHasThreadHandler = true; break; } } } if (!anyHasThreadHandler) { if (context.Kind == ActionContextKind.MainMenu) { presentation.Enabled = false; } else { presentation.Visible = false; } } }
public bool CanExpandThread(IResource res, ThreadExpandReason reason) { IResourceThreadingHandler handler = GetResourceThreadingHandler(res); if (handler != null) { return(handler.CanExpandThread(res, reason)); } return(false); }
protected override void AddResourceNodes() { _conversationNodeMap = new IntHashTable(); foreach (IResource res in _resourceList.ValidResources) { ConversationNode node = GetConversationNode(res); node.InList = true; } ArrayList topLevelNodes = ArrayListPool.Alloc(); try { foreach (ConversationNode node in _conversationRoots) { FillTopLevelNodes(topLevelNodes, node); } if (_lastComparer != null) { topLevelNodes.Sort(new ConversationNodeComparer(_lastComparer)); } foreach (ConversationNode node in topLevelNodes) { JetListViewNode lvNode = AddListViewNode(_listView.Nodes, node); if (node.Children != null || _threadingHandler.CanExpandThread(node.Resource, ThreadExpandReason.Expand)) { lvNode.HasChildren = true; } } } finally { ArrayListPool.Dispose(topLevelNodes); } _listView.ChildrenRequested += HandleChildrenRequested; _listView.NodeCollection.NodeExpandChanging += HandleExpandChanging; }