DarkUI.Net5/DarkUI/Docking/DockDropArea.cs
2016-01-05 10:40:55 +00:00

139 lines
4.2 KiB
C#

using System.Drawing;
namespace DarkUI.Docking
{
internal class DockDropArea
{
#region Property Region
internal DarkDockPanel DockPanel { get; private set; }
internal Rectangle DropArea { get; private set; }
internal Rectangle HighlightArea { get; private set; }
internal DarkDockRegion DockRegion { get; private set; }
internal DarkDockGroup DockGroup { get; private set; }
internal DockInsertType InsertType { get; private set; }
#endregion
#region Constructor Region
internal DockDropArea(DarkDockRegion region, DockInsertType insertType)
{
DockRegion = region;
InsertType = insertType;
}
internal DockDropArea(DarkDockGroup group, DockInsertType insertType)
{
DockGroup = group;
InsertType = insertType;
}
#endregion
#region Method Region
internal void BuildAreas()
{
if (DockRegion != null)
BuildRegionAreas();
else if (DockGroup != null)
BuildGroupAreas();
}
private void BuildRegionAreas()
{
}
private void BuildGroupAreas()
{
switch (InsertType)
{
case DockInsertType.None:
var dropRect = new Rectangle
{
X = DockGroup.PointToScreen(Point.Empty).X,
Y = DockGroup.PointToScreen(Point.Empty).Y,
Width = DockGroup.Width,
Height = DockGroup.Height
};
DropArea = dropRect;
HighlightArea = dropRect;
break;
case DockInsertType.Before:
var beforeDropWidth = DockGroup.Width;
var beforeDropHeight = DockGroup.Height;
switch (DockGroup.DockArea)
{
case DarkDockArea.Left:
case DarkDockArea.Right:
beforeDropHeight = DockGroup.Height / 4;
break;
case DarkDockArea.Bottom:
beforeDropWidth = DockGroup.Width / 4;
break;
}
var beforeDropRect = new Rectangle
{
X = DockGroup.PointToScreen(Point.Empty).X,
Y = DockGroup.PointToScreen(Point.Empty).Y,
Width = beforeDropWidth,
Height = beforeDropHeight
};
DropArea = beforeDropRect;
HighlightArea = beforeDropRect;
break;
case DockInsertType.After:
var afterDropX = DockGroup.PointToScreen(Point.Empty).X;
var afterDropY = DockGroup.PointToScreen(Point.Empty).Y;
var afterDropWidth = DockGroup.Width;
var afterDropHeight = DockGroup.Height;
switch (DockGroup.DockArea)
{
case DarkDockArea.Left:
case DarkDockArea.Right:
afterDropHeight = DockGroup.Height / 4;
afterDropY = DockGroup.PointToScreen(Point.Empty).Y + DockGroup.Height - afterDropHeight;
break;
case DarkDockArea.Bottom:
afterDropWidth = DockGroup.Width / 4;
afterDropX = DockGroup.PointToScreen(Point.Empty).X + DockGroup.Width - afterDropWidth;
break;
}
var afterDropRect = new Rectangle
{
X = afterDropX,
Y = afterDropY,
Width = afterDropWidth,
Height = afterDropHeight
};
DropArea = afterDropRect;
HighlightArea = afterDropRect;
break;
}
}
#endregion
}
}