private void UpdateTagTreeView(bool init) { var cond = _tagTextBox.Text; var oldChecked = GetCheckedTags().ToArray(); Predicate <MemoTag> pred = null; if (!StringUtil.IsNullOrWhitespace(cond)) { var names = cond.Split(new [] { ' ' }, StringSplitOptions.RemoveEmptyEntries); pred = tag => { //if (names.Any(name => !StringUtil.IsNullOrWhitespace(name) && tag.FullName.IndexOf(name.Trim(), StringComparison.OrdinalIgnoreCase) > -1)) { if ( names.Where( name => !StringUtil.IsNullOrWhitespace(name) ).All( name => tag.FullName.IndexOf(name.Trim(), StringComparison.OrdinalIgnoreCase) > -1 ) ) { return(true); } if (init) { return(_targetMemo != null && tag.Memos.Contains(_targetMemo)); } else { return(oldChecked.Contains(tag)); } }; } _tagTreeView.BeginUpdate(); TreeViewUtil.UpdateTagTreeView(_tagTreeView, _facade.Workspace, pred); _tagTreeView.Sort(); _tagTreeView.ExpandAll(); _tagTreeView.EndUpdate(); if (_tagTreeView.Nodes.Count > 0) { _tagTreeView.SelectedNode = _tagTreeView.Nodes[0]; } if (_targetMemo != null) { if (!init) { UpdateTagTreeViewChecked(oldChecked); } } }
// ======================================== // method // ======================================== // ------------------------------ // public // ------------------------------ public void UpdateTags() { var selectedNode = SelectedNode; var selectedObj = selectedNode == null? null: selectedNode.Tag; BeginUpdate(); Nodes.Clear(); if (_isAllTagsEnabled) { _allTagsNode = Nodes.Add(AllTagsText); _allTagsNode.Tag = AllTags; _allTagsNode.ImageIndex = 1; _allTagsNode.SelectedImageIndex = 1; } if (_isUntaggedEnabled) { _untaggedNode = Nodes.Add(UntaggedText); _untaggedNode.Tag = Untagged; _untaggedNode.ImageIndex = 2; _untaggedNode.SelectedImageIndex = 2; } _tagRootNode = Nodes.Add(TagRootText); _tagRootNode.Tag = TagRoot; _tagRootNode.ImageIndex = 1; _tagRootNode.SelectedImageIndex = 1; TreeViewUtil.UpdateTagTreeView(_tagRootNode, _facade.Workspace); _tagRootNode.Expand(); Sort(); EndUpdate(); SelectNode(selectedObj); OnUpdated(); }