Пример #1
0
 /// <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;
 }
Пример #2
0
        /// <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
        }
Пример #3
0
        /// <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);
            }
        }