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();
        }
Example #2
0
        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();
                }
            }
        }