void newt_DragOver(object sender, DragEventArgs e) { e.Handled = true; var tabItemSource = e.Data.GetData(typeof(Wpf.Controls.TabItem)) as Wpf.Controls.TabItem; if ((sender as Wpf.Controls.TabItem).ShellObject.IsFileSystem) e.Effects = (e.KeyStates & DragDropKeyStates.ControlKey) == DragDropKeyStates.ControlKey ? DragDropEffects.Copy : DragDropEffects.Move; else if (tabItemSource != null) e.Effects = DragDropEffects.Move; else e.Effects = DragDropEffects.None; var desc = new BExplorer.Shell.DataObject.DropDescription(); switch (e.Effects) { case DragDropEffects.Copy: desc.type = (int)BExplorer.Shell.DataObject.DropImageType.Copy; desc.szMessage = "Copy To %1"; break; case DragDropEffects.Move: desc.type = (int)BExplorer.Shell.DataObject.DropImageType.Move; desc.szMessage = "Move To %1"; break; case DragDropEffects.None: desc.type = (int)BExplorer.Shell.DataObject.DropImageType.None; desc.szMessage = "Cant drop here!"; break; default: desc.type = (int)BExplorer.Shell.DataObject.DropImageType.Invalid; desc.szMessage = ""; break; } desc.szInsert = (sender as Wpf.Controls.TabItem).ShellObject.DisplayName; ((System.Runtime.InteropServices.ComTypes.IDataObject)e.Data).SetDropDescription(desc); var ptw = new BExplorer.Shell.DataObject.Win32Point(); GetCursorPos(ref ptw); if (e.Data.GetType() != typeof(Wpf.Controls.TabItem)) { var wpt = new BExplorer.Shell.DataObject.Win32Point() { X = ptw.X, Y = ptw.Y }; DropTarget.Create.DragOver(ref wpt, (int)e.Effects); } }
void newt_DragEnter(object sender, DragEventArgs e) { e.Handled = true; this._CurrentlySelectedItem = tcMain.SelectedItem as Wpf.Controls.TabItem; var tabItem = e.Source as Wpf.Controls.TabItem; if (tabItem == null) return; this._TabDropData = (System.Runtime.InteropServices.ComTypes.IDataObject)e.Data; if ((sender as Wpf.Controls.TabItem).ShellObject.IsFileSystem) e.Effects = (e.KeyStates & DragDropKeyStates.ControlKey) == DragDropKeyStates.ControlKey ? DragDropEffects.Copy : DragDropEffects.Move; else e.Effects = DragDropEffects.None; var ptw = new BExplorer.Shell.DataObject.Win32Point(); GetCursorPos(ref ptw); e.Effects = DragDropEffects.None; var tabItemSource = e.Data.GetData(typeof(Wpf.Controls.TabItem)) as Wpf.Controls.TabItem; if (tabItemSource == null) { var wpt = new BExplorer.Shell.DataObject.Win32Point() { X = ptw.X, Y = ptw.Y }; DropTarget.Create.DragEnter(this.Handle, (System.Runtime.InteropServices.ComTypes.IDataObject)e.Data, ref wpt, (int)e.Effects); } else if (e.Data.GetDataPresent(typeof(Wpf.Controls.TabItem))) { e.Effects = DragDropEffects.Move; } }
void newt_Drop(object sender, DragEventArgs e) { e.Handled = true; var tabItemTarget = e.Source as Wpf.Controls.TabItem; var tabItemSource = e.Data.GetData(typeof(Wpf.Controls.TabItem)) as Wpf.Controls.TabItem; if (tabItemSource == null) { if ((sender as Wpf.Controls.TabItem).ShellObject.IsFileSystem) { e.Effects = (e.KeyStates & DragDropKeyStates.ControlKey) == DragDropKeyStates.ControlKey ? DragDropEffects.Copy : DragDropEffects.Move; switch (e.Effects) { case DragDropEffects.All: break; case DragDropEffects.Copy: this._ShellListView.DoCopy(e.Data, (sender as Wpf.Controls.TabItem).ShellObject); break; case DragDropEffects.Link: break; case DragDropEffects.Move: this._ShellListView.DoMove(e.Data, (sender as Wpf.Controls.TabItem).ShellObject); break; case DragDropEffects.None: break; case DragDropEffects.Scroll: break; default: break; } } else { e.Effects = DragDropEffects.None; } WIN.Point pt = e.GetPosition(sender as IInputElement); var wpt = new BExplorer.Shell.DataObject.Win32Point() { X = (int)pt.X, Y = (int)pt.Y }; DropTarget.Create.Drop((System.Runtime.InteropServices.ComTypes.IDataObject)e.Data, ref wpt, (int)e.Effects); this._TabDropData = null; } else if (!tabItemTarget.Equals(tabItemSource)) { var tabControl = tabItemTarget.Parent as TabControl; int targetIndex = tabControl.Items.IndexOf(tabItemTarget); int tabState = tabItemSource == this._CurrentlySelectedItem ? 0 : 1; tabControl.Items.Remove(tabItemSource); tabControl.Items.Insert(targetIndex, tabItemSource); tcMain.IsInTabDragDrop = false; if (tabState == 1) tabControl.SelectedItem = this._CurrentlySelectedItem; else if (tabState == 0) tabControl.SelectedIndex = targetIndex; tcMain.IsInTabDragDrop = true; } //tcMain.IsSelectionHandled = false; }