protected override void OnItemDragStarting(ItemDragEventArgs eventArgs)
        {
            SelectionCollection selectionCollection = eventArgs.Data as SelectionCollection;
            foreach (Selection selection in selectionCollection)
            {

                if (selection.Item.GetType().Equals(typeof(Block)))
                {
                    if (((Block)selection.Item).flag_isPackage)
                    {
                        eventArgs.Cancel = true;
                        eventArgs.Handled = true;
                    }
                    else
                    {
                        base.OnItemDragStarting(eventArgs);
                        ListBox listBox = eventArgs.DragSource as ListBox;
                        var testingList = listBox.ItemsSource;
                        if (testingList.GetType().Equals(typeof(ObservableCollection<Block>)))
                        {
                            ObservableCollection<Block> list = testingList as ObservableCollection<Block>;
                            listBox.ItemsSource = null;
                            var itemsToRemove = list.Where(item => !item.flag_isPackage).ToArray();
                            foreach (var item in itemsToRemove)
                            {
                                list.Remove(item);
                            }
                            listBox.ItemsSource = list;

                            listBox.ScrollIntoView(listBox.Items.ElementAt(0));
                        }
                    }
                }
            }
        }
        protected override void OnItemDroppedOnTarget(ItemDragEventArgs args)
        {
            //Debug.WriteLine("Editor On Item drop");
            ListBox listBox = args.DragSource as ListBox;
            SelectionCollection selectionCollection = args.Data as SelectionCollection;
            foreach (Selection selection in selectionCollection)
            {
                if (selection.Item.GetType().Equals(typeof(Block)))
                {
                    move = false;
                    if (MainPage.communicate.trash)
                    {
                        MainPage.communicate.trash = false;
                        listBox.ItemsSource = tree.Delete(((Block)selection.Item).index);
                    }
                }
            }
            try
            {
                base.OnItemDroppedOnTarget(args);
                listBox.ItemsSource = tree.ListRefresh();
                Refresh(listBox);
            }
            catch (Exception exe)
            {
            }

        }
        protected override void OnItemDragStarting(ItemDragEventArgs eventArgs)
        {
            //Debug.WriteLine("Editor drag start");
            SelectionCollection selectionCollection = eventArgs.Data as SelectionCollection;
            foreach (Selection selection in selectionCollection)
            {

                if (selection.Item.GetType().Equals(typeof(Block)))
                {
                    if (((Block)selection.Item).Text.Contains("END"))
                    {
                        eventArgs.Cancel = true;
                        eventArgs.Handled = true; 
                    }
                    else
                    {
                        if (!MainPage.communicate.socket) //check to see that you are not moving a socket
                        {
                            move = true;
                            fromIndex = ((Block)selection.Item).index;
                        }
                        base.OnItemDragStarting(eventArgs);
                    }
                }
            }
        }
        /*
         * Event method that is called when a socket item is dropped on destination.
         * Preforms functions based on the communication class.
         * Set the communication flag for socket to false (handled).
         * Calls parent method
         */
        protected override void OnItemDroppedOnTarget(ItemDragEventArgs args)
        {
            Debug.WriteLine("socket on item drop");
            ListBox listBox = args.DragSource as ListBox;

            SelectionCollection selectionCollection = args.Data as SelectionCollection;
            foreach (Selection selection in selectionCollection)
            {
                if (selection.Item.GetType().Equals(typeof(Block)))
                {
                    //create the block based on selection block
                    Block copyBlock = MainPage.createProgramStructureBlock(((Block)selection.Item).typeID);
                    if (copyBlock == null)
                    {
                        if (!((Block)selection.Item).Text.Contains("END"))
                            copyBlock = ((Block)selection.Item).cloneSelf(true);
                        else
                            copyBlock = MainPage.createReservedBlock(((Block)selection.Item).Text);
                    }

                    if (MainPage.communicate.trash) //socket moved to trash
                    {
                        MainPage.communicate.trash = false; //let trash know that socket finished move
                        listBox.Background.Opacity = 1; //show empty socket
                        listBox.BorderBrush.Opacity = 1; //show empty socket
                    }
                    else if (MainPage.communicate.editor) //socket moved to editor (removed communicate.socket to see if communication error is fixed)
                    {
                        //copyBlock goes here
                        if (listBox.Items.Count == 0)
                        {
                            Debigulate(listBox);
                            if (socketType.Contains(copyBlock.Text))
                                ResizeAndAdd(listBox, copyBlock);
                            else if (isConstant && copyBlock.flag_isConstant)
                                ResizeAndAdd(listBox, copyBlock);
                            else if (isCondition && copyBlock.flag_isCondition)
                                ResizeAndAdd(listBox, copyBlock);
                        }

                        MainPage.communicate.editor = false; //let editor know that that socket was added and move finished
                    }
                    else //socket moved else where...need to have a check to see if it was added
                    {
                        if (listBox.Items.Count == 0)
                        {
                            listBox.Background.Opacity = 1; //show empty socket
                            listBox.BorderBrush.Opacity = 1; //show empty socket
                        }
                    }
                }
            }
            base.OnItemDroppedOnTarget(args);
            MainPage.communicate.socket = false; //save that moveing socket is finished

            //returning the block to normal size, if neccessary
            Debigulate(listBox);
        }
 /// <summary>
 /// Initializes a new instance of the ItemDragEventArgs class using an
 /// existing instance.
 /// </summary>
 /// <param name="args">The instance to use as the template when creating
 /// the new instance.</param>
 internal ItemDragEventArgs(ItemDragEventArgs args)
 {
     this.AllowedEffects = args.AllowedEffects;
     this.Effects = args.Effects;
     this.Data = args.Data;
     this.DragSource = args.DragSource;
     this.KeyStates = args.KeyStates;
     this.OriginalSource = args.OriginalSource;
     this.DragDecoratorContent = args.DragDecoratorContent;
     this.DragDecoratorContentMouseOffset = args.DragDecoratorContentMouseOffset;
 }
        //private ListBox listBox = new ListBox();

        protected override void OnItemDragCompleted(ItemDragEventArgs args)
        {
            base.OnItemDragCompleted(args);

            ListBox listBox = args.DragSource as ListBox;
            var testingList = listBox.ItemsSource;
   
            if (testingList.GetType().Equals(typeof(ObservableCollection<Block>)))
            {
                ObservableCollection<Block> blockList = testingList as ObservableCollection<Block>;
                if (listBox != null)
                {
                    listBox.ItemsSource = null;
                    blockList.Clear();
                    foreach (Block b in list)
                    {
                        blockList.Add(b);
                    }
                    listBox.ItemsSource = blockList;
                }
            }   
        }
 protected override void OnItemDragStarting(ItemDragEventArgs eventArgs)
 {
     SelectionCollection selectionCollection = eventArgs.Data as SelectionCollection;
     
     foreach (Selection selection in selectionCollection)
     {
         if (selection.Item.GetType().Equals(typeof(Block)))
         {
             ListBox listBox = eventArgs.DragSource as ListBox;
             var testingList = listBox.ItemsSource;
             if (testingList.GetType().Equals(typeof(ObservableCollection<Block>)))
             {
                 ObservableCollection<Block> blockList = testingList as ObservableCollection<Block>;
                 list = new ObservableCollection<Block>();
                 foreach (Block b in blockList)
                 {
                     list.Add(b);
                 }
             }
             base.OnItemDragStarting(eventArgs);     
         }
     }
 }
Example #8
0
        protected override void OnItemDragStarting(ItemDragEventArgs cEventArgs)
        {
            if (!_bMouseDown)
            {
                cEventArgs.Handled = true;
                return;
            }

			lock (_cSyncRoot)
            {
                if (_cTimerDragDropDelay == null)
                {
                    _cTimerDragDropDelay = new Timer
                    (
                        callback =>
                        {
							lock (_cSyncRoot)
                            {
                                if (!DragDrop.IsDragInProgress)
                                {
                                    Dispatcher.BeginInvoke(() =>
                                    {
                                        lock (_cSyncRoot)
                                        {
                                            base.OnItemDragStarting(cEventArgs);
                                        }
                                    });
                                }
                            }
                        },
                        null,
						nDelay,
                        Timeout.Infinite
                    );
                }
            }
        }
 /// <summary>
 /// Initializes a new instance of the ItemDragEventArgs class using an
 /// existing instance.
 /// </summary>
 /// <param name="args">The instance to use as the template when creating
 /// the new instance.</param>
 internal ItemDragEventArgs(ItemDragEventArgs args)
 {
     this.AllowedEffects = args.AllowedEffects;
     this.Effects = args.Effects;
     this.Data = args.Data;
     this.DragSource = args.DragSource;
     this.KeyStates = args.KeyStates;
     this.DragDecoratorContent = args.DragDecoratorContent;
     this.DragDecoratorContentMouseOffset = args.DragDecoratorContentMouseOffset;
     this.RemoveDataFromDragSourceAction = args.RemoveDataFromDragSourceAction;
     this.DataRemovedFromDragSource = args.DataRemovedFromDragSource;
 }
 protected override void OnItemDragStarting(ItemDragEventArgs eventArgs) 
 { 
     eventArgs.Cancel = true; 
     eventArgs.Handled = true; 
 }
        //method to prevent a block from going into one of its own sockets
        private ListBox preventOuroboros(ItemDragEventArgs itemDragEventArgs, ListBox dropTarget, Block immigrant, Block destination)
        {
            //testing dragging into self and catching it if it happens
            List<int> socks = SocketReader.socketFinder(destination);
            ListBox test;
            ListBox sourceBox = itemDragEventArgs.DragSource as ListBox;

            //handling constants
            if (immigrant.flag_isConstant || immigrant.flag_isRobotConstant)
            {
                //checking constants, accounting for their 1 lvl lower problem
                try
                {
                    Block source = SocketReader.getParentBlock(sourceBox);
                    Block dst = SocketReader.getParentBlock(dropTarget);
                    List<int> socketLocs = SocketReader.socketFinder(dst);
                    foreach (int loc in socketLocs)
                    {
                        ListBox targ = SocketReader.socketMole(dst, loc);
                        if (targ.Items.Count > 0)
                        {
                            //checking if the target is the current block's location
                             if (((Block)dropTarget.Items.ElementAt(0)) == source)
                            {
                                isConstant = immigrant.flag_isConstant;//for some reason this gets reset during the process, so setting it back
                                dropTarget = sourceBox;//changing the target to the block's current position, dropping it back in place
                            }
                        }
                    }
                }
                catch (Exception) { }
                
                //clearing the target so the block can be added
                if (dropTarget.Items.Count > 0)
                {
                    if(((Block)dropTarget.Items.ElementAt(0)) == immigrant)
                    dropTarget.Items.Clear();
                }
            }
            //checking the block's socket to ensure that it isn't being added to itself
            foreach (int loc in socks)
            {
                test = SocketReader.socketMole(destination, loc);
                //resetting the drop zone if true and shrinking the block down
                if (test == dropTarget)
                {
                    dropTarget = sourceBox;
                    Debigulate(dropTarget);
                    isCondition = immigrant.flag_isCondition;
                }
                //recursively calling, to ensure that the block isn't being added to a socket in a block within its own socket
                if (test.Items.Count > 0)
                {
                    dropTarget = preventOuroboros(itemDragEventArgs, dropTarget, immigrant, (Block)test.Items.ElementAt(0));
                }
            }
            return dropTarget;
        }
        public bool isCondition { get; set; }       //define if condition is allowed in socket
        #endregion

        #region Overwritten Methods
        /*
         * Event method that is called when a socket item starts to move.
         * Sets the socket communication to true, which allows other DDT's to know socket is being moved
         * Calls parent method
         */
        protected override void OnItemDragStarting(ItemDragEventArgs eventArgs)
        {
            Debug.WriteLine("socket on item drag start");
            MainPage.communicate.socket = true;
            base.OnItemDragStarting(eventArgs);
        }
Example #13
0
		protected override void OnItemDragCompleted(ItemDragEventArgs args)
		{
 			 base.OnItemDragCompleted(args);
		}
Example #14
0
		protected override void OnItemDroppedOnTarget(ItemDragEventArgs args)
		{
			base.OnItemDroppedOnTarget(args);
		}
        /// <summary>
        /// Adds all selected items when drag operation begins.
        /// </summary>
        /// <param name="eventArgs">Information about the event.</param>
        protected override void OnItemDragStarting(ItemDragEventArgs eventArgs)
        {
            SelectionCollection selectionCollection = new SelectionCollection();

            // If panel is virtualized there is no way of knowing the precise
            // index of each selected item.
            Panel itemsHost = this.ListBox.GetItemsHost();

            if (itemsHost is VirtualizingPanel)
            {
                foreach (object item in this.ListBox.SelectedItems)
                {
                    selectionCollection.Add(new Selection(item));
                }

                // Adding the item dragged even if it isn't selected
                SelectionCollection defaultSelectionCollection = SelectionCollection.ToSelectionCollection(eventArgs.Data);

                if (defaultSelectionCollection.Count == 1 && !selectionCollection.Any(selection => object.Equals(selection.Item, defaultSelectionCollection[0].Item)))
                {
                    selectionCollection.Add(defaultSelectionCollection[0]);
                }
            }
            else
            {
                for (int cnt = 0; cnt < this.ListBox.Items.Count; cnt++)
                {
                    ListBoxItem listBoxItem = this.ListBox.ItemContainerGenerator.ContainerFromIndex(cnt) as ListBoxItem;
                    if (listBoxItem.IsSelected)
                    {
                        selectionCollection.Add(new Selection(cnt, this.ListBox.Items[cnt]));
                    }
                }

                // Adding the item dragged even if it isn't selected
                SelectionCollection defaultSelectionCollection = GetSelectionCollection(eventArgs.Data);
                if (defaultSelectionCollection.Count == 1)
                {
                    if (selectionCollection.All(selection => selection.Index != defaultSelectionCollection[0].Index))
                    {
                        selectionCollection.Add(defaultSelectionCollection[0]);
                    }
                }
            }

            eventArgs.Data = selectionCollection;

            CardPanel cardPanel = new CardPanel();
            IEnumerable <UIElement> itemContainers =
                selectionCollection.SelectedItems
                .Select(item => this.ListBox.ItemContainerGenerator.ContainerFromItem(item))
                .Where(item => item != null)
                .OfType <UIElement>();

            foreach (ListBoxItem row in itemContainers)
            {
                cardPanel.Children.Add(new Image {
                    Source = new WriteableBitmap(row, new TranslateTransform())
                });
            }

            eventArgs.DragDecoratorContent = cardPanel;

            eventArgs.Handled = true;
            base.OnItemDragStarting(eventArgs);
        }