Skip to content

Commit

Permalink
Merge branch 'develop' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
punker76 committed Dec 25, 2022
2 parents ac024bb + 0542450 commit bab45aa
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 119 deletions.
12 changes: 12 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates

version: 2
updates:
- package-ecosystem: "nuget" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "monthly"
open-pull-requests-limit: 10
6 changes: 0 additions & 6 deletions global.json

This file was deleted.

4 changes: 2 additions & 2 deletions src/Directory.build.props
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@

<!-- Add the references for all projects and targets -->
<ItemGroup>
<PackageReference Include="JetBrains.Annotations" Version="2021.*" PrivateAssets="All" IncludeAssets="build;compile" />
<PackageReference Include="WpfAnalyzers" Version="3.5.*" PrivateAssets="All" />
<PackageReference Include="JetBrains.Annotations" Version="2022.*" PrivateAssets="All" IncludeAssets="build;compile" />
<PackageReference Include="WpfAnalyzers" Version="4.1.*" PrivateAssets="All" />
</ItemGroup>

<ItemGroup>
Expand Down
205 changes: 100 additions & 105 deletions src/GongSolutions.WPF.DragDrop/DropTargetInsertionAdorner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,141 +23,136 @@ public DropTargetInsertionAdorner(UIElement adornedElement, DropInfo dropInfo)
protected override void OnRender(DrawingContext drawingContext)
{
var dropInfo = this.DropInfo;
var itemsControl = dropInfo.VisualTarget as ItemsControl;

if (itemsControl != null)
if (dropInfo.VisualTarget is not ItemsControl itemsControl)
{
// Get the position of the item at the insertion index. If the insertion point is
// to be after the last item, then get the position of the last item and add an
// offset later to draw it at the end of the list.
ItemsControl itemParent;
return;
}

var visualTargetItem = dropInfo.VisualTargetItem;
if (visualTargetItem != null)
{
itemParent = ItemsControl.ItemsControlFromItemContainer(visualTargetItem);
}
else
{
itemParent = itemsControl;
}
// Get the position of the item at the insertion index. If the insertion point is
// to be after the last item, then get the position of the last item and add an
// offset later to draw it at the end of the list.

var visualTargetItem = dropInfo.VisualTargetItem;
var itemParent = visualTargetItem != null ? ItemsControl.ItemsControlFromItemContainer(visualTargetItem) : itemsControl;

// this could be happen with a thread scenario where items are removed very quickly
if (itemParent == null)
// this could be happen with a thread scenario where items are removed very quickly
if (itemParent == null)
{
return;
}

var itemsCount = itemParent.Items.Count;
var index = Math.Min(dropInfo.InsertIndex, itemsCount - 1);

var lastItemInGroup = false;
var targetGroup = dropInfo.TargetGroup;
if (targetGroup != null && targetGroup.IsBottomLevel && dropInfo.InsertPosition.HasFlag(RelativeInsertPosition.AfterTargetItem))
{
var indexOf = targetGroup.Items.IndexOf(dropInfo.TargetItem);
lastItemInGroup = indexOf == targetGroup.ItemCount - 1;
if (lastItemInGroup && dropInfo.InsertIndex != itemsCount)
{
return;
index--;
}
}

var itemsCount = itemParent.Items.Count;
var index = Math.Min(dropInfo.InsertIndex, itemsCount - 1);
var itemContainer = (UIElement)itemParent.ItemContainerGenerator.ContainerFromIndex(index);

var lastItemInGroup = false;
var targetGroup = dropInfo.TargetGroup;
if (targetGroup != null && targetGroup.IsBottomLevel && dropInfo.InsertPosition.HasFlag(RelativeInsertPosition.AfterTargetItem))
var showAlwaysDropTargetAdorner = itemContainer == null && DragDrop.GetShowAlwaysDropTargetAdorner(itemParent);
if (showAlwaysDropTargetAdorner)
{
itemContainer = itemParent;
}

if (itemContainer == null)
{
return;
}

var itemRect = new Rect(itemContainer.TranslatePoint(new Point(), this.AdornedElement), itemContainer.RenderSize);
Point point1,
point2;
double rotation = 0;

// If the ItemsControl has a scrollable content then try to get the viewport width/height
// to paint the insertion adorner only on this size.
var viewportWidth = double.MaxValue;
var viewportHeight = double.MaxValue;
if (dropInfo.TargetScrollViewer != null)
{
if (dropInfo.TargetScrollViewer.ScrollableWidth != 0)
{
var indexOf = targetGroup.Items.IndexOf(dropInfo.TargetItem);
lastItemInGroup = indexOf == targetGroup.ItemCount - 1;
if (lastItemInGroup && dropInfo.InsertIndex != itemsCount)
{
index--;
}
viewportWidth = dropInfo.TargetScrollViewer.ViewportWidth;
}

var itemContainer = (UIElement)itemParent.ItemContainerGenerator.ContainerFromIndex(index);

var showAlwaysDropTargetAdorner = itemContainer == null && DragDrop.GetShowAlwaysDropTargetAdorner(itemParent);
if (showAlwaysDropTargetAdorner)
if (dropInfo.TargetScrollViewer.ScrollableHeight != 0)
{
itemContainer = itemParent;
viewportHeight = dropInfo.TargetScrollViewer.ViewportHeight;
}
}

if (itemContainer != null)
if (dropInfo.VisualTargetOrientation == Orientation.Vertical)
{
if ((dropInfo.InsertIndex == itemsCount) || lastItemInGroup)
{
var itemRect = new Rect(itemContainer.TranslatePoint(new Point(), this.AdornedElement), itemContainer.RenderSize);
Point point1,
point2;
double rotation = 0;

// I really don't know why I did this
//
// var viewportWidth = double.MaxValue;
// var viewportHeight = double.MaxValue;
// if (DropInfo.TargetScrollViewer != null)
// {
// if (DropInfo.TargetScrollViewer.ScrollableWidth != 0)
// {
// viewportWidth = DropInfo.TargetScrollViewer.ViewportWidth;
// }
//
// if (DropInfo.TargetScrollViewer.ScrollableHeight != 0)
// {
// viewportHeight = DropInfo.TargetScrollViewer.ViewportHeight;
// }
// }

if (dropInfo.VisualTargetOrientation == Orientation.Vertical)
if (itemsCount > 0)
{
if ((dropInfo.InsertIndex == itemsCount) || lastItemInGroup)
{
if (itemsCount > 0)
{
itemRect.Y += itemContainer.RenderSize.Height;
}
else
{
if ((itemsControl as ListView)?.View is GridView)
{
var header = itemsControl.GetVisualDescendent<GridViewHeaderRowPresenter>();
if (header != null)
{
itemRect.Y += header.RenderSize.Height;
}
}
else if (itemsControl is DataGrid)
{
var header = itemsControl.GetVisualDescendent<DataGridColumnHeadersPresenter>();
if (header != null)
{
itemRect.Y += header.RenderSize.Height;
}
}

itemRect.Y += this.Pen.Thickness;
}
}

var itemRectRight = itemRect.Right; //Math.Min(itemRect.Right, viewportWidth);
var itemRectLeft = itemRect.X < 0 ? 0 : itemRect.X;
point1 = new Point(itemRectLeft, itemRect.Y);
point2 = new Point(itemRectRight, itemRect.Y);
itemRect.Y += itemContainer.RenderSize.Height;
}
else
{
if (dropInfo.InsertIndex == itemsCount)
if ((itemsControl as ListView)?.View is GridView)
{
if (itemsCount > 0)
var header = itemsControl.GetVisualDescendent<GridViewHeaderRowPresenter>();
if (header != null)
{
itemRect.X += itemContainer.RenderSize.Width;
itemRect.Y += header.RenderSize.Height;
}
else
}
else if (itemsControl is DataGrid)
{
var header = itemsControl.GetVisualDescendent<DataGridColumnHeadersPresenter>();
if (header != null)
{
itemRect.X += this.Pen.Thickness;
itemRect.Y += header.RenderSize.Height;
}
}

var itemRectTop = itemRect.Y < 0 ? 0 : itemRect.Y;
var itemRectBottom = itemRect.Bottom; //Math.Min(itemRect.Bottom, viewportHeight);

point1 = new Point(itemRect.X, itemRectTop);
point2 = new Point(itemRect.X, itemRectBottom);
rotation = 90;
itemRect.Y += this.Pen.Thickness;
}
}

drawingContext.DrawLine(this.Pen, point1, point2);
this.DrawTriangle(drawingContext, point1, rotation);
this.DrawTriangle(drawingContext, point2, 180 + rotation);
var itemRectRight = Math.Min(itemRect.Right, viewportWidth);
var itemRectLeft = itemRect.X < 0 ? 0 : itemRect.X;
point1 = new Point(itemRectLeft, itemRect.Y);
point2 = new Point(itemRectRight, itemRect.Y);
}
else
{
if (dropInfo.InsertIndex == itemsCount)
{
if (itemsCount > 0)
{
itemRect.X += itemContainer.RenderSize.Width;
}
else
{
itemRect.X += this.Pen.Thickness;
}
}

var itemRectTop = itemRect.Y < 0 ? 0 : itemRect.Y;
var itemRectBottom = Math.Min(itemRect.Bottom, viewportHeight);

point1 = new Point(itemRect.X, itemRectTop);
point2 = new Point(itemRect.X, itemRectBottom);
rotation = 90;
}

drawingContext.DrawLine(this.Pen, point1, point2);
this.DrawTriangle(drawingContext, point1, rotation);
this.DrawTriangle(drawingContext, point2, 180 + rotation);
}

private void DrawTriangle(DrawingContext drawingContext, Point origin, double rotation)
Expand Down
12 changes: 6 additions & 6 deletions src/Showcase/Showcase.WPF.DragDrop.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,18 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="MahApps.Metro.IconPacks.FeatherIcons" Version="4.*" />
<PackageReference Include="MahApps.Metro.IconPacks.Material" Version="4.*" />
<PackageReference Include="MahApps.Metro.IconPacks.Octicons" Version="4.*" />
<PackageReference Include="Faker.Net" Version="1.*" />
<PackageReference Include="MahApps.Metro.IconPacks.FeatherIcons" Version="4.11.0" />
<PackageReference Include="MahApps.Metro.IconPacks.Material" Version="4.11.0" />
<PackageReference Include="MahApps.Metro.IconPacks.Octicons" Version="4.11.0" />
<PackageReference Include="Faker.Net" Version="2.0.154" />
</ItemGroup>

<ItemGroup Condition="$(DefineConstants.Contains(NETCOREAPP)) == false">
<PackageReference Include="Fody" Version="6.5.*">
<PackageReference Include="Fody" Version="6.6.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Costura.Fody" Version="5.6.*" PrivateAssets="All" />
<PackageReference Include="Costura.Fody" Version="5.7.0" PrivateAssets="All" />
</ItemGroup>

<ItemGroup>
Expand Down
7 changes: 7 additions & 0 deletions src/global.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"sdk": {
"version": "6.0.300",
"rollForward": "latestFeature",
"allowPrerelease": false
}
}

0 comments on commit bab45aa

Please sign in to comment.