/// <summary> /// Initializes a new instance of the <see cref="ElementNode"/> class. /// </summary> /// <param name="codeElements">The code elements.</param> /// <param name="owner">The owner.</param> /// <exception cref="System.ArgumentNullException">codeElements</exception> internal ElementNode(CodeElements codeElements, FileItemManager owner) { _owner = owner; if (codeElements == null) { throw new ArgumentNullException("codeElements"); } _elements = codeElements; }
/// <summary> /// Initializes a new instance of the <see cref="ElementNode"/> class. /// </summary> /// <param name="element">The element.</param> /// <param name="owner">The owner.</param> /// <exception cref="System.ArgumentNullException">element</exception> internal ElementNode(CodeElement element, FileItemManager owner) { _owner = owner; if (element == null) { throw new ArgumentNullException("element"); } Element = element; if (!element.NoWatchedChildren()) { _elements = element.Children(); } refreshOffset(); //initialize offset }
/// <summary> /// Register given <see cref="ProjectItem" />. /// </summary> /// <param name="item">Project item that is registered.</param> /// <param name="progress">The progress handler.</param> /// <returns><see cref="FileItemManager" /> created for given item if any.</returns> private FileItemManager registerItem(ProjectItem item, NamedProgressEvent progress) { if (_watchedItems.ContainsKey(item)) { return(_watchedItems[item]); } var fileCodeModel = item.FileCodeModel; if (fileCodeModel == null) { if (item.ProjectItems != null) { //possible folder, which contains another project items foreach (ProjectItem subItm in item.ProjectItems) { //folder and its project items registerItem(subItm, progress); } } //Note that we don't need to watch SubProjects in folders for now return(null); } else { //item is source code file so it needs to be registered if (progress != null) { progress(item.Name); } var manager = new FileItemManager(_vs, item.Name, fileCodeModel); manager.ElementAdded += (e) => { if (ElementAdded != null) { ElementAdded(e); } }; manager.ElementChanged += (e) => { if (ElementChanged != null) { ElementChanged(e); } }; manager.ElementRemoved += (e) => { if (ElementRemoved != null) { ElementRemoved(e); } }; if (item.IsOpen) { //we will read whole representation of opened //file because it is already loaded in memory manager.FlushChanges(); } else { manager.LoadRootOnly(); } //register item _watchedItems.Add(item, manager); return(manager); } }