示例#1
0
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Событие возникает, когда данные сбрасываются над объектом-приемником; по умолчанию это происходит
            /// при отпускании кнопки мыши
            /// </summary>
            /// <param name="sender">Источник события</param>
            /// <param name="args">Аргументы события</param>
            //---------------------------------------------------------------------------------------------------------
            private void OnTreeView_Drop(Object sender, DragEventArgs args)
            {
                if (args.Data.GetDataPresent(nameof(ICubeXModel)))
                {
                    ICubeXModel model = args.Data.GetData(nameof(ICubeXModel)) as ICubeXModel;

                    // Над этим элементом находится перетаскиваемый объект
                    TreeViewItem over_item = ((DependencyObject)args.OriginalSource).FindVisualParent <TreeViewItem>();
                    if (over_item != null)
                    {
                        if (DropModelOverCollectionModel(model, over_item, args))
                        {
                        }
                        else
                        {
                            if (DropModelOverModel(model, over_item, args))
                            {
                            }
                            else
                            {
                            }
                        }
                    }
                }
            }
示例#2
0
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Перемещение курсора мыши
            /// </summary>
            /// <param name="sender">Источник события</param>
            /// <param name="args">Аргументы события</param>
            //---------------------------------------------------------------------------------------------------------
            private void OnTreeView_PreviewMouseMove(Object sender, MouseEventArgs args)
            {
                // Получаем позицию курсора
                Point  mouse_pos = args.GetPosition(treeExplorer);
                Vector diff      = mDragLastMouseDown - mouse_pos;

                // Проверяем смещение
                if (AllowDrop && args.LeftButton == MouseButtonState.Pressed &&
                    (Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance ||
                     Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance))
                {
                    // Получаем визуальный элемент
                    TreeViewItem drag_tree_view_item = ((DependencyObject)args.OriginalSource).FindVisualParent <TreeViewItem>();

                    if (drag_tree_view_item == null)
                    {
                        return;
                    }

                    IsDragging = true;

                    // Получаем данные
                    ICubeXModel model = drag_tree_view_item.DataContext as ICubeXModel;
                    DraggedModel = model;

                    // Если модель поддерживает
                    if (model is ICubeXUIModelSupportExplore)
                    {
                        ICubeXUIModelSupportExplore model_support_explore = model as ICubeXUIModelSupportExplore;
                        if (model_support_explore.IsDraggableModel == false)
                        {
                            return;
                        }
                    }

                    var drag_data = new DataObject(nameof(ICubeXModel), model);

                    if (Keyboard.IsKeyDown(Key.LeftCtrl))
                    {
                        // Копируем
                        DragDrop.DoDragDrop(drag_tree_view_item, drag_data, DragDropEffects.Copy);
                    }
                    else
                    {
                        // Переносим
                        DragDrop.DoDragDrop(drag_tree_view_item, drag_data, DragDropEffects.Move);
                    }
                }
            }
示例#3
0
 //---------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Установка свойств по группированию
 /// </summary>
 /// <param name="model">Модель</param>
 /// <param name="over">Другой элемент</param>
 //---------------------------------------------------------------------------------------------------------
 public void SetGroupProperties(ICubeXModel model, ICubeXModel over)
 {
     if (mIsGroupHierarchy)
     {
         if (over != null)
         {
             if (over is ICubeXModelOwned)
             {
                 if (model is ICubeXModelOwned)
                 {
                     ICubeXModelOwned model_owned = model as ICubeXModelOwned;
                     ICubeXModelOwned over_owned  = over as ICubeXModelOwned;
                     model_owned.SetPropertyValueFromGroupingHierarchy(over_owned.GetGroupingFromHierarchyOfOwner());
                 }
             }
         }
         else
         {
         }
     }
 }
示例#4
0
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Бросание модели над коллекцией моделей
            /// </summary>
            /// <param name="model">Модель</param>
            /// <param name="item">Коллекция</param>
            /// <param name="args">Аргументы события</param>
            /// <returns>Статус обработки события</returns>
            //---------------------------------------------------------------------------------------------------------
            public Boolean DropModelOverCollectionModel(ICubeXModel model, TreeViewItem item, DragEventArgs args)
            {
                ICubeXCollectionModel collection_model = item.DataContext as ICubeXCollectionModel;

                // Если коллекция поддерживает данную модель
                if (collection_model != null && collection_model.IsSupportModel(model as ICubeXModelOwned))
                {
                    // Проверка на поддержку операции добавления
                    ICubeXCollectionSupportAdd operation_add = item.DataContext as ICubeXCollectionSupportAdd;
                    if (operation_add != null)
                    {
                        if (args.Effects == DragDropEffects.Move)
                        {
                            ICubeXModelOwned model_owned = model as ICubeXModelOwned;

                            SetGroupProperties(model_owned, operation_add.IModels[0] as ICubeXModelOwned);

                            operation_add.AddExistingModel(model_owned);
                        }
                        else
                        {
                            if (args.Effects == DragDropEffects.Copy)
                            {
                                ICubeXModelOwned model_owned = model.Clone() as ICubeXModelOwned;

                                SetGroupProperties(model_owned, operation_add.IModels[0] as ICubeXModelOwned);

                                operation_add.AddExistingModel(model_owned);
                            }
                        }
                    }

                    return(true);
                }

                return(false);
            }
示例#5
0
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Событие постоянно возникает при перетаскивании данных над объектом-приемником
            /// </summary>
            /// <param name="sender">Источник события</param>
            /// <param name="args">Аргументы события</param>
            //---------------------------------------------------------------------------------------------------------
            private void OnTreeView_DragOver(Object sender, DragEventArgs args)
            {
                if (args.Data.GetDataPresent(nameof(ICubeXModel)))
                {
                    ICubeXModel model = args.Data.GetData(nameof(ICubeXModel)) as ICubeXModel;

                    // Над этим элементом находится перетаскиваемый объект
                    TreeViewItem over_item = ((DependencyObject)args.OriginalSource).FindVisualParent <TreeViewItem>();
                    if (over_item != null)
                    {
                        ICubeXCollectionModel collection_model = over_item.DataContext as ICubeXCollectionModel;
                        if (collection_model != null && collection_model.IsSupportModel(model as ICubeXModelOwned))
                        {
                        }
                        else
                        {
                            ICubeXModelOwned model_owned = over_item.DataContext as ICubeXModelOwned;
                            if (model_owned != null)
                            {
                                ICubeXCollectionModel model_owned_collection = model_owned.IOwner;
                                if (model_owned_collection != null && model_owned_collection.IsSupportModel(model as ICubeXModelOwned))
                                {
                                }
                                else
                                {
                                    args.Effects = DragDropEffects.None;
                                }
                            }
                            else
                            {
                                args.Effects = DragDropEffects.None;
                            }
                        }
                    }
                }
            }
示例#6
0
 //---------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Отпускания левой кнопки мыши
 /// </summary>
 /// <param name="sender">Источник события</param>
 /// <param name="args">Аргументы события</param>
 //---------------------------------------------------------------------------------------------------------
 private void OnTreeView_PreviewMouseLeftButtonUp(Object sender, MouseButtonEventArgs args)
 {
     IsDragging   = false;
     DraggedModel = null;
 }
示例#7
0
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Бросание модели над другой моделью
            /// </summary>
            /// <param name="model">Модель</param>
            /// <param name="item">Модель</param>
            /// <param name="args">Аргументы события</param>
            /// <returns>Статус обработки события</returns>
            //---------------------------------------------------------------------------------------------------------
            public Boolean DropModelOverModel(ICubeXModel model, TreeViewItem item, DragEventArgs args)
            {
                // Элемент находится над моделей
                ICubeXModelOwned model_over = item.DataContext as ICubeXModelOwned;

                if (model_over != null)
                {
                    // Сначала проверяем возможность вставки в конкретное место
                    ICubeXCollectionSupportInsert operation_insert = model_over.IOwner as ICubeXCollectionSupportInsert;
                    if (operation_insert != null && operation_insert.IsSupportModel(model as ICubeXModelOwned))
                    {
                        if (args.Effects == DragDropEffects.Move)
                        {
                            ICubeXModelOwned model_owned = model as ICubeXModelOwned;

                            SetGroupProperties(model_owned, model_over);

                            operation_insert.InsertAfterModel(model_over, model_owned);
                        }
                        else
                        {
                            if (args.Effects == DragDropEffects.Copy)
                            {
                                ICubeXModelOwned model_owned = model.Clone() as ICubeXModelOwned;

                                SetGroupProperties(model_owned, model_over);

                                operation_insert.InsertAfterModel(model_over, model_owned);
                            }
                        }
                    }
                    else
                    {
                        // Проверяем возможность простого добавления
                        ICubeXCollectionSupportAdd operation_add = model_over.IOwner as ICubeXCollectionSupportAdd;
                        if (operation_add != null && operation_add.IsSupportModel(model as ICubeXModelOwned))
                        {
                            if (args.Effects == DragDropEffects.Move)
                            {
                                ICubeXModelOwned model_owned = model as ICubeXModelOwned;

                                SetGroupProperties(model_owned, model_over);

                                operation_add.AddExistingModel(model_owned);
                            }
                            else
                            {
                                if (args.Effects == DragDropEffects.Copy)
                                {
                                    ICubeXModelOwned model_owned = model.Clone() as ICubeXModelOwned;

                                    SetGroupProperties(model_owned, model_over);

                                    operation_add.AddExistingModel(model_owned);
                                }
                            }
                        }
                    }
                }

                return(false);
            }