mirror of
https://github.com/colhountech/DarkUI.Net5.git
synced 2025-07-17 10:06:13 +03:00
Can now drag content in to empty regions.
This commit is contained in:
parent
fe9d60dc0e
commit
7cd946b372
@ -22,16 +22,22 @@ namespace DarkUI.Docking
|
|||||||
|
|
||||||
#region Constructor Region
|
#region Constructor Region
|
||||||
|
|
||||||
internal DockDropArea(DarkDockRegion region, DockInsertType insertType)
|
internal DockDropArea(DarkDockPanel dockPanel, DarkDockRegion region)
|
||||||
{
|
{
|
||||||
|
DockPanel = dockPanel;
|
||||||
DockRegion = region;
|
DockRegion = region;
|
||||||
InsertType = insertType;
|
InsertType = DockInsertType.None;
|
||||||
|
|
||||||
|
BuildAreas();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal DockDropArea(DarkDockGroup group, DockInsertType insertType)
|
internal DockDropArea(DarkDockPanel dockPanel, DarkDockGroup group, DockInsertType insertType)
|
||||||
{
|
{
|
||||||
|
DockPanel = dockPanel;
|
||||||
DockGroup = group;
|
DockGroup = group;
|
||||||
InsertType = insertType;
|
InsertType = insertType;
|
||||||
|
|
||||||
|
BuildAreas();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -48,7 +54,67 @@ namespace DarkUI.Docking
|
|||||||
|
|
||||||
private void BuildRegionAreas()
|
private void BuildRegionAreas()
|
||||||
{
|
{
|
||||||
|
switch (DockRegion.DockArea)
|
||||||
|
{
|
||||||
|
case DarkDockArea.Left:
|
||||||
|
|
||||||
|
var leftRect = new Rectangle
|
||||||
|
{
|
||||||
|
X = DockPanel.PointToScreen(Point.Empty).X,
|
||||||
|
Y = DockPanel.PointToScreen(Point.Empty).Y,
|
||||||
|
Width = 50,
|
||||||
|
Height = DockPanel.Height
|
||||||
|
};
|
||||||
|
|
||||||
|
DropArea = leftRect;
|
||||||
|
HighlightArea = leftRect;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DarkDockArea.Right:
|
||||||
|
|
||||||
|
var rightRect = new Rectangle
|
||||||
|
{
|
||||||
|
X = DockPanel.PointToScreen(Point.Empty).X + DockPanel.Width - 50,
|
||||||
|
Y = DockPanel.PointToScreen(Point.Empty).Y,
|
||||||
|
Width = 50,
|
||||||
|
Height = DockPanel.Height
|
||||||
|
};
|
||||||
|
|
||||||
|
DropArea = rightRect;
|
||||||
|
HighlightArea = rightRect;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DarkDockArea.Bottom:
|
||||||
|
|
||||||
|
var x = DockPanel.PointToScreen(Point.Empty).X;
|
||||||
|
var width = DockPanel.Width;
|
||||||
|
|
||||||
|
if (DockPanel.Regions[DarkDockArea.Left].Visible)
|
||||||
|
{
|
||||||
|
x += DockPanel.Regions[DarkDockArea.Left].Width;
|
||||||
|
width -= DockPanel.Regions[DarkDockArea.Left].Width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DockPanel.Regions[DarkDockArea.Right].Visible)
|
||||||
|
{
|
||||||
|
width -= DockPanel.Regions[DarkDockArea.Right].Width;
|
||||||
|
}
|
||||||
|
|
||||||
|
var bottomRect = new Rectangle
|
||||||
|
{
|
||||||
|
X = x,
|
||||||
|
Y = DockPanel.PointToScreen(Point.Empty).Y + DockPanel.Height - 50,
|
||||||
|
Width = width,
|
||||||
|
Height = 50
|
||||||
|
};
|
||||||
|
|
||||||
|
DropArea = bottomRect;
|
||||||
|
HighlightArea = bottomRect;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BuildGroupAreas()
|
private void BuildGroupAreas()
|
||||||
|
@ -14,33 +14,11 @@
|
|||||||
|
|
||||||
#region Constructor Region
|
#region Constructor Region
|
||||||
|
|
||||||
internal DockDropCollection(DarkDockPanel dockPanel, DarkDockRegion region)
|
|
||||||
{
|
|
||||||
DropArea = new DockDropArea(region, DockInsertType.None);
|
|
||||||
InsertBeforeArea = new DockDropArea(region, DockInsertType.Before);
|
|
||||||
InsertAfterArea = new DockDropArea(region, DockInsertType.After);
|
|
||||||
|
|
||||||
BuildAreas();
|
|
||||||
}
|
|
||||||
|
|
||||||
internal DockDropCollection(DarkDockPanel dockPanel, DarkDockGroup group)
|
internal DockDropCollection(DarkDockPanel dockPanel, DarkDockGroup group)
|
||||||
{
|
{
|
||||||
DropArea = new DockDropArea(group, DockInsertType.None);
|
DropArea = new DockDropArea(dockPanel, group, DockInsertType.None);
|
||||||
InsertBeforeArea = new DockDropArea(group, DockInsertType.Before);
|
InsertBeforeArea = new DockDropArea(dockPanel, group, DockInsertType.Before);
|
||||||
InsertAfterArea = new DockDropArea(group, DockInsertType.After);
|
InsertAfterArea = new DockDropArea(dockPanel, group, DockInsertType.After);
|
||||||
|
|
||||||
BuildAreas();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Method Region
|
|
||||||
|
|
||||||
private void BuildAreas()
|
|
||||||
{
|
|
||||||
DropArea.BuildAreas();
|
|
||||||
InsertBeforeArea.BuildAreas();
|
|
||||||
InsertAfterArea.BuildAreas();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -22,7 +22,7 @@ namespace DarkUI.Win32
|
|||||||
private DarkDockGroup _targetGroup;
|
private DarkDockGroup _targetGroup;
|
||||||
private DockInsertType _insertType = DockInsertType.None;
|
private DockInsertType _insertType = DockInsertType.None;
|
||||||
|
|
||||||
private Dictionary<DarkDockRegion, DockDropCollection> _regionDropAreas = new Dictionary<DarkDockRegion, DockDropCollection>();
|
private Dictionary<DarkDockRegion, DockDropArea> _regionDropAreas = new Dictionary<DarkDockRegion, DockDropArea>();
|
||||||
private Dictionary<DarkDockGroup, DockDropCollection> _groupDropAreas = new Dictionary<DarkDockGroup, DockDropCollection>();
|
private Dictionary<DarkDockGroup, DockDropCollection> _groupDropAreas = new Dictionary<DarkDockGroup, DockDropCollection>();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -98,7 +98,7 @@ namespace DarkUI.Win32
|
|||||||
|
|
||||||
public void StartDrag(DarkDockContent content)
|
public void StartDrag(DarkDockContent content)
|
||||||
{
|
{
|
||||||
_regionDropAreas = new Dictionary<DarkDockRegion, DockDropCollection>();
|
_regionDropAreas = new Dictionary<DarkDockRegion, DockDropArea>();
|
||||||
_groupDropAreas = new Dictionary<DarkDockGroup, DockDropCollection>();
|
_groupDropAreas = new Dictionary<DarkDockGroup, DockDropCollection>();
|
||||||
|
|
||||||
// Add all regions and groups to the drop collections
|
// Add all regions and groups to the drop collections
|
||||||
@ -116,65 +116,11 @@ namespace DarkUI.Win32
|
|||||||
_groupDropAreas.Add(group, collection);
|
_groupDropAreas.Add(group, collection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If the region is NOT visible then build a drop area for the region itself.
|
// If the region is NOT visible then build drop areas for the region itself.
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*var rect = new Rectangle();
|
var area = new DockDropArea(_dockPanel, region);
|
||||||
|
_regionDropAreas.Add(region, area);
|
||||||
switch (region.DockArea)
|
|
||||||
{
|
|
||||||
case DarkDockArea.Left:
|
|
||||||
|
|
||||||
rect = new Rectangle
|
|
||||||
{
|
|
||||||
X = _dockPanel.PointToScreen(Point.Empty).X,
|
|
||||||
Y = _dockPanel.PointToScreen(Point.Empty).Y,
|
|
||||||
Width = 15,
|
|
||||||
Height = _dockPanel.Height
|
|
||||||
};
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DarkDockArea.Right:
|
|
||||||
|
|
||||||
rect = new Rectangle
|
|
||||||
{
|
|
||||||
X = _dockPanel.PointToScreen(Point.Empty).X + _dockPanel.Width - 15,
|
|
||||||
Y = _dockPanel.PointToScreen(Point.Empty).Y,
|
|
||||||
Width = 15,
|
|
||||||
Height = _dockPanel.Height
|
|
||||||
};
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DarkDockArea.Bottom:
|
|
||||||
|
|
||||||
var x = _dockPanel.PointToScreen(Point.Empty).X;
|
|
||||||
var width = _dockPanel.Width;
|
|
||||||
|
|
||||||
if (_dockPanel.Regions[DarkDockArea.Left].Visible)
|
|
||||||
{
|
|
||||||
x += _dockPanel.Regions[DarkDockArea.Left].Width;
|
|
||||||
width -= _dockPanel.Regions[DarkDockArea.Left].Width;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_dockPanel.Regions[DarkDockArea.Right].Visible)
|
|
||||||
{
|
|
||||||
width -= _dockPanel.Regions[DarkDockArea.Right].Width;
|
|
||||||
}
|
|
||||||
|
|
||||||
rect = new Rectangle
|
|
||||||
{
|
|
||||||
X = x,
|
|
||||||
Y = _dockPanel.PointToScreen(Point.Empty).Y + _dockPanel.Height - 15,
|
|
||||||
Width = width,
|
|
||||||
Height = 15
|
|
||||||
};
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
_regionDropAreas.Add(region, rect);*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,29 +165,13 @@ namespace DarkUI.Win32
|
|||||||
_targetGroup = null;
|
_targetGroup = null;
|
||||||
|
|
||||||
// Check all region drop areas
|
// Check all region drop areas
|
||||||
foreach (var collection in _regionDropAreas.Values)
|
foreach (var area in _regionDropAreas.Values)
|
||||||
{
|
{
|
||||||
if (collection.InsertBeforeArea.DropArea.Contains(location))
|
if (area.DropArea.Contains(location))
|
||||||
{
|
|
||||||
_insertType = DockInsertType.Before;
|
|
||||||
_targetRegion = collection.InsertBeforeArea.DockRegion;
|
|
||||||
UpdateHighlightForm(collection.InsertBeforeArea.HighlightArea);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (collection.InsertAfterArea.DropArea.Contains(location))
|
|
||||||
{
|
|
||||||
_insertType = DockInsertType.After;
|
|
||||||
_targetRegion = collection.InsertAfterArea.DockRegion;
|
|
||||||
UpdateHighlightForm(collection.InsertAfterArea.HighlightArea);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (collection.DropArea.DropArea.Contains(location))
|
|
||||||
{
|
{
|
||||||
_insertType = DockInsertType.None;
|
_insertType = DockInsertType.None;
|
||||||
_targetRegion = collection.DropArea.DockRegion;
|
_targetRegion = area.DockRegion;
|
||||||
UpdateHighlightForm(collection.DropArea.HighlightArea);
|
UpdateHighlightForm(area.HighlightArea);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3
todo.txt
3
todo.txt
@ -16,11 +16,12 @@ DarkUI
|
|||||||
-- ScrollView not taking in to account size WITHOUT scrollbars causing you to have to overshoot when re-sizing to get rid of them
|
-- ScrollView not taking in to account size WITHOUT scrollbars causing you to have to overshoot when re-sizing to get rid of them
|
||||||
-- if the final node in a treeview has been previous expanded, pressing 'down' will cause it to re-open
|
-- if the final node in a treeview has been previous expanded, pressing 'down' will cause it to re-open
|
||||||
-- create click-through panel
|
-- create click-through panel
|
||||||
|
-- dragging treeview nodes doesn't rebuild prev/next references
|
||||||
|
|
||||||
Dock panel
|
Dock panel
|
||||||
-- make it so highlight form doesn't steal focus
|
-- make it so highlight form doesn't steal focus
|
||||||
-- add splitters between region groups
|
-- add splitters between region groups
|
||||||
-- fix max position of splitters
|
-- fix max position of splitters - can currently resize a tool window offscreen
|
||||||
-- serialise the visible content for groups and the active content
|
-- serialise the visible content for groups and the active content
|
||||||
-- right click tab menu. close all, close all but this etc. etc.
|
-- right click tab menu. close all, close all but this etc. etc.
|
||||||
-- stop dragging tabs instantly going to the end of the row
|
-- stop dragging tabs instantly going to the end of the row
|
||||||
|
Loading…
x
Reference in New Issue
Block a user