private bool CheckDropTarget(List <Tasks.TaskNodeViewModel> _sourceItems, Tasks.TaskNodeViewModel _targetItem) { //Check whether the target item is meeting your condition bool _isEqual = true; /* * foreach( Tasks.TaskNodeViewModel vm in _sourceItems ) * if(vm.Name == _targetItem.Name) * _isEqual = false; */ // Drop possible if: target==folder and target!=Parent and target!=self foreach (Tasks.TaskNodeViewModel vm in _sourceItems) { if ((vm.Parent == _targetItem) || (vm == _targetItem)) { _isEqual = false; } } if (_targetItem.IsFolder == false) { _isEqual = false; } return(_isEqual); }
private void OnItemMouseDoubleClick(object sender, MouseButtonEventArgs args) { if (sender is TreeViewItem) { if (!((TreeViewItem)sender).IsSelected) { return; } if (sender != null) { Tasks.TaskNodeViewModel node = ((TreeViewItem)sender).DataContext as Tasks.TaskNodeViewModel; if (node != null) { // Datei Öffnen try { System.Diagnostics.Process process = new System.Diagnostics.Process(); process.EnableRaisingEvents = false; process.StartInfo.FileName = node.Path_1_Original; process.Start(); } catch (Exception ex) { MessageBox.Show("Cant execute " + node.Path_1_Original + " : " + ex.Message); } } } } }
private void TreeView_After_DragOver(object sender, DragEventArgs e) { try { Point currentPosition = e.GetPosition(TreeView_After); if ((Math.Abs(currentPosition.X - _lastMouseDown.X) > 10.0) || (Math.Abs(currentPosition.Y - _lastMouseDown.Y) > 10.0)) { // Verify that this is a valid drop and then store the drop target Tasks.TaskNodeViewModel item = GetNearestContainer(e.OriginalSource as UIElement); if (CheckDropTarget(draggedItems, item)) { e.Effects = DragDropEffects.Move; } else { e.Effects = DragDropEffects.None; } } e.Handled = true; } catch (Exception ex) { MessageBox.Show("TaskView DragOver: " + ex.Message); e.Effects = DragDropEffects.None; } }
/* * private void CopyItem(List<Tasks.TaskNodeViewModel> _sourceItems, Tasks.TaskNodeViewModel _targetItem) * { * * //Asking user wether he want to drop the dragged TreeViewItem here or not * if (MessageBox.Show("Would you like to drop the selected items into " + _targetItem.Name + "", "", MessageBoxButton.YesNo) == MessageBoxResult.Yes) * { * try * { * foreach(Tasks.TaskNodeViewModel vm in _sourceItems) * _targetItem.Children.Add(vm); * } * catch (Exception) * { * * } * } * * } */ private void MoveItem(List <Tasks.TaskNodeViewModel> _sourceItems, Tasks.TaskNodeViewModel _targetItem) { //Asking user wether he want to drop the dragged TreeViewItem here or not if (MessageBox.Show("Would you like to move the selected items into " + _targetItem.Name + "", "", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { try { foreach (Tasks.TaskNodeViewModel vm in _sourceItems) { // ___SOURCE if (taskViewParentType == TaskViewParentType.Source) // Update FileListsAfter { Tasks.TaskNodeViewModel newNode = vm.Clone(_targetItem, taskPlannerBase.IDAfterSource++); _targetItem.Children.Add(newNode); foreach (TaskPlanner.FileListEntry entry in tasks.fileLists.SourceFileListAfter) { if (entry.targetNode == vm) { entry.targetNode = newNode; // Update FileList } } } // ___TARGET else { Tasks.TaskNodeViewModel newNode = vm.Clone(_targetItem, taskPlannerBase.IDAfterTarget++); _targetItem.Children.Add(newNode); foreach (TaskPlanner.FileListEntry entry in tasks.fileLists.TargetFileListAfter) { if (entry.targetNode == vm) { entry.targetNode = newNode; // Update FileList } } } // Von Original Parent entfernen //foreach (Tasks.TaskNodeViewModel vm in _sourceItems) //{ vm.RemoveSelf(); //} } } catch (Exception ex) { MessageBox.Show("TaskView MoveItem: " + ex.Message); } InitializeComponent(); } }
private Tasks.TaskNodeViewModel GetNearestContainer(UIElement element) { // Walk up the element tree to the nearest tree view item. TreeViewItem UIContainer = FindParent <TreeViewItem>(element); Tasks.TaskNodeViewModel NVContainer = null; if (UIContainer != null) { NVContainer = UIContainer.DataContext as Tasks.TaskNodeViewModel; } return(NVContainer); }
private void TreeView_After_Drop(object sender, DragEventArgs e) { try { e.Effects = DragDropEffects.None; e.Handled = true; // Verify that this is a valid drop and then store the drop target Tasks.TaskNodeViewModel TargetItem = GetNearestContainer(e.OriginalSource as UIElement); if (TargetItem != null && draggedItems != null) { _target = TargetItem; e.Effects = DragDropEffects.Move; } } catch (Exception ex) { MessageBox.Show("TaskView Drop: " + ex.Message); e.Effects = DragDropEffects.None; } }
private void TreeView_After_MouseMove(object sender, MouseEventArgs e) { try { if (e.LeftButton == MouseButtonState.Pressed) { UIElement element = e.OriginalSource as UIElement; bool bGridSplitter = CheckGridSplitter(element); Point currentPosition = e.GetPosition(TreeView_After); double movedX = 0, movedY = 0; if (!((_lastMouseDown.X == -1) && (_lastMouseDown.Y == -1))) { movedX = Math.Abs(currentPosition.X - _lastMouseDown.X); movedY = Math.Abs(currentPosition.Y - _lastMouseDown.Y); } if ((movedX > const_DragMoveDist) || (movedY > const_DragMoveDist)) { //draggedItem = (Tasks.TaskNodeViewModel)TreeView_After.SelectedItem; if (NVM_TreeView_After_selectedItems.Count > 0) { draggedItems = new List <Tasks.TaskNodeViewModel>(); foreach (Tasks.TaskNodeViewModel vm in NVM_TreeView_After_selectedItems.Keys) { draggedItems.Add(vm); } } else { draggedItems = null; } if ((draggedItems != null) && !bGridSplitter) { DragDropEffects finalDropEffect = DragDrop.DoDragDrop(TreeView_After, TreeView_After.SelectedValue, DragDropEffects.Move); //Checking target is not null and item is dragging(moving) if ((finalDropEffect == DragDropEffects.Move) && (_target != null)) { // A Move drop was accepted /* * bool Correct_drop = true; * foreach( Tasks.TaskNodeViewModel vm in draggedItems ) * if(vm.Name == _target.Name) * Correct_drop = false; */ //private bool CheckDropTarget(List<Tasks.TaskNodeViewModel> _sourceItems, Tasks.TaskNodeViewModel _targetItem) if (CheckDropTarget(draggedItems, _target)) { MoveItem(draggedItems, _target); _target = null; draggedItems = null; } } } } } } catch (Exception ex) { MessageBox.Show("TaskView MouseMove: " + ex.Message); draggedItems = null; } }