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