private static DragDropInfo GetDragDropInfo(UIElement target, DragEventArgs e,
            PokemonDragDropData data)
        {
            var dragDropInfo = new DragDropInfo();
            dragDropInfo.Action = DragDropActions.None;
            int folderIndex = DragDropState.GetDraggingOverIndex(target);

            var collection = (target as FrameworkElement).DataContext as CollectionViewModel;
            if (collection != null && folderIndex != -1)
            {
                dragDropInfo.TargetFolder = collection.Folders[folderIndex];
                if (dragDropInfo.TargetFolder.CanAddPokemon)
                {
                    if (e.KeyStates.HasFlag(DragDropKeyStates.ControlKey))
                    {
                        dragDropInfo.Action = DragDropActions.CopyTo;
                    }
                    else if (dragDropInfo.TargetFolder != data.SourceFolder)
                    {
                        dragDropInfo.Action = DragDropActions.MoveTo;
                    }
                }
            }
            return dragDropInfo;
        }
Exemple #2
0
 private static DragDropActions GetDragDropAction(UIElement target, PokemonDragDropData data)
 {
     if ((target as FrameworkElement).DataContext != data.SourceFolder)
     {
         return DragDropActions.MoveTo;
     }
     else
     {
         return DragDropActions.None;
     }
 }
Exemple #3
0
        private static DragDropInfo GetDragDropInfo(UIElement target, DragEventArgs e,
            PokemonDragDropData data)
        {
            var dragDropInfo = new DragDropInfo();
            dragDropInfo.Action = DragDropActions.None;

            dragDropInfo.Folder = (target as FrameworkElement).DataContext as IFolderViewModel;
            if (dragDropInfo.Folder == null)
                return dragDropInfo;

            dragDropInfo.InsertIndex = DragDropState.GetInsertionIndex(target);
            dragDropInfo.PokemonIndex = DragDropState.GetDraggingOverIndex(target);

            if (dragDropInfo.PokemonIndex != -1)
            {
                if (data.SourceFolder != dragDropInfo.Folder ||
                    data.PokemonIndexInFolder != dragDropInfo.PokemonIndex)
                {
                    if (e.KeyStates.HasFlag(DragDropKeyStates.ControlKey))
                    {
                        dragDropInfo.Action = DragDropActions.Replace;
                    }
                    else
                    {
                        dragDropInfo.Action = DragDropActions.SwapWith;
                    }
                }
            }
            else if (dragDropInfo.InsertIndex != -1)
            {
                if (e.KeyStates.HasFlag(DragDropKeyStates.ControlKey))
                {
                    if (dragDropInfo.Folder.CanAddPokemon)
                        dragDropInfo.Action = DragDropActions.CopyTo;
                }
                else if (data.SourceFolder != dragDropInfo.Folder)//movement between folders
                {
                    if (dragDropInfo.Folder.CanAddPokemon)
                        dragDropInfo.Action = DragDropActions.MoveTo;
                }
                else//movement within folder
                {
                    if (IsValidMovement(data.PokemonIndexInFolder, dragDropInfo.InsertIndex))
                        dragDropInfo.Action = DragDropActions.MoveTo;
                }
            }
            return dragDropInfo;
        }
Exemple #4
0
        public void HandleMouseMove(UIElement sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Released)
                return;
            var selector = sender as Selector;
            if (selector == null || selector.SelectedItem == null)
                return;
            //find the visual item hit
            var itemContainer = selector.ItemContainerGenerator.
                ContainerFromIndex(selector.SelectedIndex) as FrameworkElement;
            if (!FolderDragDropSource.HitElement(e.GetPosition(itemContainer), itemContainer))
                return;

            var selectedItem = selector.SelectedItem as PokemonViewModel;

            IFolderViewModel folder = selectedItem.Folder;
            int selectedIndex = selector.SelectedIndex;
            var data =
                new PokemonDragDropData(selectedItem, DragDropActions.All, folder, selectedIndex);

            var dataObj = new DataObject(typeof(IDragDropData), data);
            DragDrop.DoDragDrop(selector, dataObj, DragDropEffects.All);
        }
Exemple #5
0
 private static void CopyItemTo(IFolderViewModel folder, int destIndex, 
     PokemonDragDropData data)
 {
     folder.InsertPokemon(destIndex, data.Pokemon.Clone());
 }
Exemple #6
0
        private static void SwapItem(IFolderViewModel folder, int swapIndex, 
            PokemonDragDropData data)
        {
            PokemonViewModel pokemon = data.Pokemon;
            int originalIndex = data.PokemonIndexInFolder;
            PokemonViewModel swapPokemon = folder.Pokemons[swapIndex];

            folder.RemovePokemon(swapPokemon);
            data.SourceFolder.RemovePokemon(pokemon);
            if (data.SourceFolder == folder && swapIndex < originalIndex)//swap within a folder
            {
                folder.InsertPokemon(swapIndex, pokemon);
                folder.InsertPokemon(originalIndex, swapPokemon);
                /*
                if (swapIndex < originalIndex)
                {
                }
                else
                {
                    folder.InsertPokemon(originalIndex, swapPokemon);
                    folder.InsertPokemon(swapIndex, pokemon);
                }
                 */
            }
            else//swap between folders
            {
                data.SourceFolder.InsertPokemon(originalIndex, swapPokemon);
                folder.InsertPokemon(swapIndex, pokemon);
            }
        }
Exemple #7
0
 private static void SubstitueItem(IFolderViewModel folder, int destIndex, 
     PokemonDragDropData data)
 {
     folder.Pokemons[destIndex].RemoveSelf();
     folder.InsertPokemon(destIndex, data.Pokemon.Clone());
 }
Exemple #8
0
        private static void MoveItemTo(IFolderViewModel folder, int destIndex, 
            PokemonDragDropData data)
        {
            //remove the origin item to prevent exceeding the size
            data.SourceFolder.RemovePokemon(data.Pokemon);

            //adjust index if it is movement within a folder
            if (folder == data.SourceFolder && destIndex > data.PokemonIndexInFolder)
                destIndex--;

            folder.InsertPokemon(destIndex, data.Pokemon);
        }