public void RegisterHierarchy(IVsHierarchy hierarchy) { if (hierarchy == null || _hierarchies.ContainsKey(hierarchy)) { return; } if (_objectManagerCookie == 0) { IVsObjectManager2 objManager = _provider.GetService(typeof(SVsObjectManager)) as IVsObjectManager2; if (null == objManager) { return; } ErrorHandler.ThrowOnFailure( objManager.RegisterSimpleLibrary(_library, out _objectManagerCookie)); } HierarchyListener listener = new HierarchyListener(hierarchy); listener.ItemAdded += OnFileChanged; listener.ItemDeleted += OnDeleteFile; listener.StartListening(true); _hierarchies.Add(hierarchy, listener); RegisterForRDTEvents(); }
public void InitListener() { _listener = new HierarchyListener(_hierarchy); _listener.ItemAdded += FileAdded; _listener.ItemDeleted += FileDeleted; _listener.StartListening(true); }
public void UnregisterHierarchy(IVsHierarchy hierarchy) { if ((null == hierarchy) || !_hierarchies.ContainsKey(hierarchy)) { return; } HierarchyListener listener = _hierarchies[hierarchy]; if (null != listener) { listener.Dispose(); } _hierarchies.Remove(hierarchy); if (0 == _hierarchies.Count) { UnregisterRDTEvents(); } lock (_files) { ModuleID[] keys = new ModuleID[_files.Keys.Count]; _files.Keys.CopyTo(keys, 0); foreach (ModuleID id in keys) { if (hierarchy.Equals(id.Hierarchy)) { _library.RemoveNode(_files[id]); _files.Remove(id); } } } // Remove the document listeners. // uint[] docKeys = new uint[_documents.Keys.Count]; _documents.Keys.CopyTo(docKeys, 0); foreach (uint id in docKeys) { TextLineEventListener docListener = _documents[id]; if (hierarchy.Equals(docListener.FileID.Hierarchy)) { _documents.Remove(id); docListener.Dispose(); } } }