/// <summary> /// Flush all waiting changes. /// </summary> internal void FlushChanges(NamedProgressEvent progress) { foreach (var file in _changedFileManagers) { file.FlushChanges(); if (progress != null) { progress(file.Name); } } _changedFileManagers.Clear(); }
/// <summary> /// Register all items that are contained within project. /// </summary> internal void RequireRegisterAllItems(NamedProgressEvent progress) { if (_isAllRegistered) { return; } var items = _project.ProjectItems; if (items != null) { foreach (ProjectItem item in items) { registerItem(item, progress); //folder and its project items } } _isAllRegistered = true; }
/// <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); } }