Example #1
0
        private static void HandleDropForSource(DragDropEffects result)
        {
            System.Diagnostics.Debug.WriteLine($"HandleDropForSource: {result}");

            dropInfo?.UpdateTargetContainerAndIndex();

            if (result.HasFlag(DragDropEffects.Move))
            {
                ToolWindowHistory.SaveStateAndPause();

                foreach (var sourceItem in dragInfo.SourceItems)
                {
                    var sourceCol = sourceItem.Parent;
                    var idx       = sourceCol.Items.IndexOf(sourceItem);
                    if (Equals(sourceCol, dropInfo?.TargetContainer) && idx < dropInfo.InsertIndex)
                    {
                        dropInfo.InsertIndex--;
                    }
                    sourceItem.Parent.Items.RemoveAt(idx);
                }
            }

            if (dropInfo?.TargetItem != null)
            {
                HandleDropForTarget(result);
            }

            if (result.HasFlag(DragDropEffects.Move))
            {
                ToolWindowHistory.Resume();
            }
        }
Example #2
0
        public static void HandleDropForTarget(DragDropEffects result, DragEventArgs e = null)
        {
            System.Diagnostics.Debug.WriteLine($"HandleDropForTarget: {dropInfo.TargetItem.Item}");
            IEnumerable <CmdBase> data = DropInfo.ExtractDropData(dragInfo, e);

            if (dropInfo.CanAcceptData(data) &&
                (result.HasFlag(DragDropEffects.Move) || result.HasFlag(DragDropEffects.Copy)))
            {
                var idx = dropInfo.InsertIndex;
                if (result.HasFlag(DragDropEffects.Copy))
                {
                    data = data.Select(cmd => cmd.Copy());
                }

                var dataList = data.ToList();

                var souldDeselctItem = dropInfo.InsertPosition.HasFlag(DropInfo.RelativInsertPosition.IntoTargetItem) &&
                                       dropInfo.TargetItem.Item is CmdContainer con &&
                                       !con.IsExpanded;

                if (dataList.Count > 0)
                {
                    ToolWindowHistory.SaveState();
                }

                foreach (var sourceItem in dataList)
                {
                    if (souldDeselctItem)
                    {
                        sourceItem.IsSelected = false;
                    }
                    dropInfo.TargetContainer.Insert(idx++, sourceItem);
                }

                var focusItem = dragInfo?.DirectSourceItem ?? dataList.FirstOrDefault();

                var selectItemCommand = dropInfo.TargetItem.ParentTreeView.SelectItemCommand;
                if (souldDeselctItem)
                {
                    selectItemCommand.SafeExecute(dropInfo.TargetItem.Item);
                }
                else if (selectItemCommand.SafeExecute(focusItem))
                {
                    foreach (var sourceItem in dataList)
                    {
                        sourceItem.IsSelected = true;
                    }
                }
            }
            else
            {
                if (e != null)
                {
                    e.Effects = DragDropEffects.None;
                }
            }

            dropInfo?.DropTargetAdorner?.Detach();
            dropInfo = null;
        }
Example #3
0
        private void PasteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                if (Clipboard.ContainsFileDropList())
                {
                    DragDropEffects effect = DragDropEffects.Copy;
                    if (Clipboard.ContainsData("Preferred DropEffect"))
                    {
                        effect = (DragDropEffects)((MemoryStream)Clipboard.
                                                   GetData("Preferred DropEffect")).ReadByte();
                    }

                    var paths = Clipboard.GetFileDropList();
                    foreach (var path in paths)
                    {
                        var    dest = Path.Combine(ResourceExplorer.CurrentDirectory, Path.GetFileName(path));
                        int    p    = 0;
                        string s    = "";
                        while (File.Exists(dest + s) || Directory.Exists(dest + s))
                        {
                            s = " - copy " + (p++);
                        }
                        if (Directory.Exists(path))
                        {
                            if (effect.HasFlag(DragDropEffects.Move))
                            {
                                Directory.Move(path, dest + s);
                            }
                            else
                            {
                                DirectoryCopy(path, dest + s, true);
                            }
                        }
                        else if (File.Exists(path))
                        {
                            if (effect.HasFlag(DragDropEffects.Move))
                            {
                                File.Move(path, dest + s);
                            }
                            else
                            {
                                File.Copy(path, dest + s);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.ToString(), "Error: Can not paste resource.",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Example #4
0
 private StandardCursorType GetCursorForDropEffect(DragDropEffects effects)
 {
     if (effects.HasFlag(DragDropEffects.Copy))
     {
         return(StandardCursorType.DragCopy);
     }
     if (effects.HasFlag(DragDropEffects.Move))
     {
         return(StandardCursorType.DragMove);
     }
     if (effects.HasFlag(DragDropEffects.Link))
     {
         return(StandardCursorType.DragLink);
     }
     return(StandardCursorType.No);
 }
Example #5
0
 private DragDropEffects GetPreferredEffect(DragDropEffects effect, RawInputModifiers modifiers)
 {
     if (effect == DragDropEffects.Copy || effect == DragDropEffects.Move || effect == DragDropEffects.Link || effect == DragDropEffects.None)
     {
         return(effect); // No need to check for the modifiers.
     }
     if (effect.HasFlag(DragDropEffects.Link) && modifiers.HasFlag(RawInputModifiers.Alt))
     {
         return(DragDropEffects.Link);
     }
     if (effect.HasFlag(DragDropEffects.Copy) && modifiers.HasFlag(RawInputModifiers.Control))
     {
         return(DragDropEffects.Copy);
     }
     return(DragDropEffects.Move);
 }
        /// <inheritdoc />
        public void DragDropOperationFinished(DragDropEffects operationResult, IDragInfo dragInfo)
        {
            if (alreadyDropped || dragInfo == null)
            {
                return;
            }

            // the drag operation has finished on another app
            if (operationResult != DragDropEffects.None)
            {
                if (operationResult.HasFlag(DragDropEffects.Move))
                {
                    var sourceList = dragInfo.SourceCollection.TryGetList();
                    var items      = dragInfo.SourceItems.OfType <object>().ToList();
                    if (sourceList != null)
                    {
                        foreach (var o in items)
                        {
                            sourceList.Remove(o);
                        }
                    }
                    alreadyDropped = true;
                }
            }
        }
Example #7
0
 public void SetSupportedDragDropEffects(DragDropEffects effects, DragDropEffects defaultEffect = DragDropEffects.Copy)
 {
     ContextMenu.Items.Clear();
     foreach (var e in Enum.GetValues(typeof(DragDropEffects)))
     {
         DragDropEffects curEffect = (DragDropEffects)e;
         if (curEffect != DragDropEffects.None && effects.HasFlag(curEffect))
         {
             var header = new TextBlock()
             {
                 Text = curEffect.ToString()
             };
             if (curEffect.Equals(defaultEffect))
             {
                 header.FontWeight = FontWeights.Bold;
                 ContextMenu.Items.Insert(0, new MenuItem()
                 {
                     Tag = e, Header = header
                 });
             }
             else
             {
                 ContextMenu.Items.Add(new MenuItem()
                 {
                     Tag = e, Header = header
                 });
             }
         }
     }
 }
Example #8
0
        public static DropEffect ConvertDropEffect(DragDropEffects operation)
        {
            DropEffect result = DropEffect.None;

            if (operation.HasFlag(DragDropEffects.Copy))
            {
                result |= DropEffect.Copy;
            }
            if (operation.HasFlag(DragDropEffects.Move))
            {
                result |= DropEffect.Move;
            }
            if (operation.HasFlag(DragDropEffects.Link))
            {
                result |= DropEffect.Link;
            }
            return(result);
        }
Example #9
0
        internal static NSDragOperation ConvertDragOperation(DragDropEffects d)
        {
            NSDragOperation result = NSDragOperation.None;

            if (d.HasFlag(DragDropEffects.Copy))
            {
                result |= NSDragOperation.Copy;
            }
            if (d.HasFlag(DragDropEffects.Link))
            {
                result |= NSDragOperation.Link;
            }
            if (d.HasFlag(DragDropEffects.Move))
            {
                result |= NSDragOperation.Move;
            }
            return(result);
        }
        /// <summary>
        /// Converts a drag drop effects to the CEF dragging operation mask.
        /// </summary>
        /// <param name="self">The drag drop effects.</param>
        /// <returns></returns>
        public static CefDragOperationsMask ToCefDragOperationsMask(this DragDropEffects self)
        {
            CefDragOperationsMask effects = CefDragOperationsMask.None;

            if (self.HasFlag(DragDropEffects.Copy))
            {
                effects |= CefDragOperationsMask.Copy;
            }
            if (self.HasFlag(DragDropEffects.Move))
            {
                effects |= CefDragOperationsMask.Move;
            }
            if (self.HasFlag(DragDropEffects.Link))
            {
                effects |= CefDragOperationsMask.Link;
            }
            return(effects);
        }
Example #11
0
        /// <summary>
        /// Converts .NET drag drop effects to CEF Drag Operations
        /// </summary>s
        private static DragOperationsMask GetDragOperationsMask(DragDropEffects dragDropEffects)
        {
            var operations = DragOperationsMask.None;

            if (dragDropEffects.HasFlag(DragDropEffects.All))
            {
                operations |= DragOperationsMask.Every;
            }
            if (dragDropEffects.HasFlag(DragDropEffects.Copy))
            {
                operations |= DragOperationsMask.Copy;
            }
            if (dragDropEffects.HasFlag(DragDropEffects.Move))
            {
                operations |= DragOperationsMask.Move;
            }
            if (dragDropEffects.HasFlag(DragDropEffects.Link))
            {
                operations |= DragOperationsMask.Link;
            }

            return(operations);
        }
Example #12
0
        private void keyframeMouseMove(object sender, System.Windows.Input.MouseEventArgs e, Keyframe key)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                var movedDistance = Point.Subtract(initialKeyframeMousePosition, e.GetPosition(key.keyframeControl)).Length;
                if (movedDistance > 15)
                {
                    // What happened here is that the drag started on one slide, but we detected it on another.
                    if (key != startDragKeyframe)
                    {
                        Console.Beep(400, 100);
                        key = startDragKeyframe;
                    }

                    // package the data
                    DataObject data = new DataObject();
                    data.SetData("Keyframe", key);

                    // dim the source key
                    selectKeyframe(key);
                    key.Dim();

                    // set up the adorner
                    var  adLayer    = AdornerLayer.GetAdornerLayer(keyScrollViewer);
                    Rect renderRect = new Rect(key.keyframeControl.RenderSize);
                    renderRect.Height = renderRect.Height / 2;
                    keyAdorner        = new KeyframeAdorner(keyScrollViewer, renderRect);
                    adLayer.Add(keyAdorner);

                    // do it!
                    DragDropEffects result = DragDrop.DoDragDrop(key.keyframeControl, key, DragDropEffects.Copy | DragDropEffects.Move);
                    if (result.HasFlag(DragDropEffects.Move))
                    {
                        Console.Beep(2000, 50);
                    }
                    else
                    {
                        Console.Beep(600, 50);
                        Console.Beep(600, 50);
                    }
                    // clean up
                    adLayer.Remove(keyAdorner);
                    currentSlide.keys.UnDimAll();
                    currentSlide.keys.ClearHighlightAll();
                }
            }
        }
Example #13
0
        private void itemsListView_ItemDrag(object sender, ItemDragEventArgs e)
        {
            if (!Locked)
            {
                List <IRun> items = new List <IRun>();
                foreach (ListViewItem listViewItem in itemsListView.SelectedItems)
                {
                    IRun item = listViewItem.Tag as IRun;
                    if (item != null)
                    {
                        items.Add(item);
                    }
                }

                if (items.Count > 0)
                {
                    DataObject data = new DataObject();
                    if (items.Count == 1)
                    {
                        data.SetData(HeuristicLab.Common.Constants.DragDropDataFormat, items[0]);
                    }
                    else
                    {
                        data.SetData(HeuristicLab.Common.Constants.DragDropDataFormat, items);
                    }
                    if (Content.IsReadOnly || ReadOnly)
                    {
                        DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);
                    }
                    else
                    {
                        DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move);
                        if (result.HasFlag(DragDropEffects.Move))
                        {
                            foreach (IRun item in items)
                            {
                                Content.Remove(item);
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Converts .NET drag drop effects to CEF Drag Operations
        /// </summary>s
        private static DragOperationsMask GetDragOperationsMask(DragDropEffects dragDropEffects)
        {
            var operations = DragOperationsMask.None;

            if (dragDropEffects.HasFlag(DragDropEffects.All))
            {
                operations |= DragOperationsMask.Every;
            }
            if (dragDropEffects.HasFlag(DragDropEffects.Copy))
            {
                operations |= DragOperationsMask.Copy;
            }
            if (dragDropEffects.HasFlag(DragDropEffects.Move))
            {
                operations |= DragOperationsMask.Move;
            }
            if (dragDropEffects.HasFlag(DragDropEffects.Link))
            {
                operations |= DragOperationsMask.Link;
            }

            return operations;
        }
Example #15
0
 public static void ConvertDragDropEffectToCopyMove(DragDropEffects effects, out bool copy, out bool move)
 {
     copy = effects.HasFlag(DragDropEffects.Copy);
     move = effects.HasFlag(DragDropEffects.Move);
 }