89 lines
2.3 KiB
C#
89 lines
2.3 KiB
C#
|
|
using System;
|
|||
|
|
using System.Drawing;
|
|||
|
|
using System.Windows.Forms;
|
|||
|
|
|
|||
|
|
namespace WorkflowConfigurator.UserControls
|
|||
|
|
{
|
|||
|
|
public class DraggableTabControl : TabControl
|
|||
|
|
{
|
|||
|
|
public bool TabOrderChanged = false;
|
|||
|
|
|
|||
|
|
private TabPage predraggedTab;
|
|||
|
|
|
|||
|
|
public DraggableTabControl()
|
|||
|
|
{
|
|||
|
|
this.AllowDrop = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected override void OnMouseDown(MouseEventArgs e)
|
|||
|
|
{
|
|||
|
|
predraggedTab = getPointedTab();
|
|||
|
|
base.OnMouseDown(e);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected override void OnMouseUp(MouseEventArgs e)
|
|||
|
|
{
|
|||
|
|
predraggedTab = null;
|
|||
|
|
base.OnMouseUp(e);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected override void OnMouseMove(MouseEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (e.Button == MouseButtons.Left && predraggedTab != null)
|
|||
|
|
this.DoDragDrop(predraggedTab, DragDropEffects.Move);
|
|||
|
|
|
|||
|
|
base.OnMouseMove(e);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected override void OnDragOver(DragEventArgs drgevent)
|
|||
|
|
{
|
|||
|
|
TabPage draggedTab = (TabPage)drgevent.Data.GetData(typeof(TabPage));
|
|||
|
|
TabPage pointedTab = getPointedTab();
|
|||
|
|
|
|||
|
|
if (draggedTab == predraggedTab && pointedTab != null)
|
|||
|
|
{
|
|||
|
|
drgevent.Effect = DragDropEffects.Move;
|
|||
|
|
|
|||
|
|
if (pointedTab != draggedTab)
|
|||
|
|
{
|
|||
|
|
swapTabPages(draggedTab, pointedTab);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
base.OnDragOver(drgevent);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private TabPage getPointedTab()
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < this.TabPages.Count; i++)
|
|||
|
|
{
|
|||
|
|
if (this.GetTabRect(i).Contains(this.PointToClient(Cursor.Position)))
|
|||
|
|
return this.TabPages[i];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void swapTabPages(TabPage src, TabPage dst)
|
|||
|
|
{
|
|||
|
|
int srci = this.TabPages.IndexOf(src);
|
|||
|
|
int dsti = this.TabPages.IndexOf(dst);
|
|||
|
|
|
|||
|
|
this.TabPages[dsti] = src;
|
|||
|
|
this.TabPages[srci] = dst;
|
|||
|
|
|
|||
|
|
if (this.SelectedIndex == srci)
|
|||
|
|
{
|
|||
|
|
this.SelectedIndex = dsti;
|
|||
|
|
}
|
|||
|
|
else if (this.SelectedIndex == dsti)
|
|||
|
|
{
|
|||
|
|
this.SelectedIndex = srci;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TabOrderChanged = true;
|
|||
|
|
this.Refresh();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|