public int GetCurrentSelection(out IntPtr ppHier, out uint pitemid, out IVsMultiItemSelect ppMIS, out IntPtr ppSC) { ppMIS = null; ppSC = IntPtr.Zero; MockTreeNode node = _vs._focused as MockTreeNode; if (node == null) { ppHier = IntPtr.Zero; pitemid = (uint)VSConstants.VSITEMID.Nil; return(VSConstants.S_OK); } ppHier = Marshal.GetIUnknownForObject(node._item.Hierarchy); pitemid = node._item.ItemId; return(VSConstants.S_OK); }
private void DragOntoThisUIThread(Key modifier, ITreeNode[] source) { var target = _item.Hierarchy as IVsHierarchyDropDataTarget; if (target != null) { uint effect = 0; uint keyState = GetKeyState(modifier); source[0].Select(); for (int i = 1; i < source.Length; i++) { source[i].AddToSelection(); } MockTreeNode sourceNode = (MockTreeNode)source[0]; var dropDataSource = (IVsHierarchyDropDataSource2)sourceNode._item.Hierarchy; uint okEffects; IDataObject data; IDropSource dropSource; ErrorHandler.ThrowOnFailure(dropDataSource.GetDropInfo(out okEffects, out data, out dropSource)); int hr = hr = target.DragEnter( data, keyState, _item.ItemId, ref effect ); if (ErrorHandler.Succeeded(hr)) { if (effect == 0) { return; } hr = target.DragOver(keyState, _item.ItemId, ref effect); if (ErrorHandler.Succeeded(hr)) { int cancel; ErrorHandler.ThrowOnFailure( dropDataSource.OnBeforeDropNotify( data, effect, out cancel ) ); if (cancel == 0) { hr = target.Drop( data, keyState, _item.ItemId, ref effect ); } int dropped = 0; if (cancel == 0 && ErrorHandler.Succeeded(hr)) { dropped = 1; } ErrorHandler.ThrowOnFailure(dropDataSource.OnDropNotify(dropped, effect)); } } return; } throw new NotImplementedException(); }