1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/akwkevin-aistudio.-wpf.-diagram

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
SelectionService.cs 2.9 КБ
Копировать Редактировать Исходные данные Просмотреть построчно История
艾竹 Отправлено 2 лет назад 513937c
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace AIStudio.Wpf.DiagramDesigner
{
public class SelectionService
{
private IDiagramViewModel DiagramViewModel;
public SelectionService(IDiagramViewModel diagramViewModel)
{
this.DiagramViewModel = diagramViewModel;
}
public void AddToSelection(ISelectable item)
{
if (item is IGroupable)
{
List<IGroupable> groupItems = GetGroupMembers(item as IGroupable);
foreach (ISelectable groupItem in groupItems)
{
groupItem.IsSelected = true;
}
}
else
{
item.IsSelected = true;
}
}
internal void RemoveFromSelection(ISelectable item)
{
if (item is IGroupable)
{
List<IGroupable> groupItems = GetGroupMembers(item as IGroupable);
foreach (ISelectable groupItem in groupItems)
{
groupItem.IsSelected = false;
}
}
else
{
item.IsSelected = false;
}
}
internal List<IGroupable> GetGroupMembers(IGroupable item)
{
IEnumerable<IGroupable> list = DiagramViewModel.Items.OfType<IGroupable>();
IGroupable rootItem = GetRoot(list, item);
if (rootItem == null)
{
return new List<IGroupable>();
}
return GetGroupMembers(list, rootItem);
}
internal IGroupable GetGroupRoot(IGroupable item)
{
IEnumerable<IGroupable> list = DiagramViewModel.Items.OfType<IGroupable>();
return GetRoot(list, item);
}
private IGroupable GetRoot(IEnumerable<IGroupable> list, IGroupable node)
{
if (node == null || node.ParentId == Guid.Empty)
{
return node;
}
else
{
foreach (IGroupable item in list)
{
if (item.Id == node.ParentId)
{
return GetRoot(list, item);
}
}
return null;
}
}
private List<IGroupable> GetGroupMembers(IEnumerable<IGroupable> list, IGroupable parent)
{
List<IGroupable> groupMembers = new List<IGroupable>();
groupMembers.Add(parent);
var children = list.Where(node => node.ParentId == parent.Id && node.ParentId != Guid.Empty);
foreach (IGroupable child in children)
{
groupMembers.AddRange(GetGroupMembers(list, child));
}
return groupMembers;
}
}
}

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/akwkevin-aistudio.-wpf.-diagram.git
git@gitlife.ru:oschina-mirror/akwkevin-aistudio.-wpf.-diagram.git
oschina-mirror
akwkevin-aistudio.-wpf.-diagram
akwkevin-aistudio.-wpf.-diagram
1.0.7Demo