public TreeStartObjectSelector(object serializedSet, short versionNumber, FreeHierarchyTree tree) { _tree = tree; _versionNumber = versionNumber; Task.Factory.StartNew(() => { if (!_treeItemsSyncLock.TryEnterWriteLock(TimeSpan.FromSeconds(2))) { return; } try { switch (versionNumber) { case 0: case 1: InitV1(serializedSet); break; case 2: InitV2(serializedSet); break; } } finally { _treeItemsSyncLock.ExitWriteLock(); } }); }
public void Dispose() { CancelSearch(); FoundedGrid.DataSource = null; if (_parent != null) { _parent.TreeFindBar = null; _parent = null; } _descriptor = null; }
public void Init(FreeHierarchyTree parent, FreeHierarchyTreeDescriptor descriptor) { _parent = parent; _descriptor = descriptor; Dispatcher.BeginInvoke((Action)(() => { FoundedGrid.DataSource = null; cbTypeHierarchy.ItemsSource = EnumsHelper.TypesDict; #region Прятать или нет поиск по серийному номеру if (_parent != null) { var im = _parent.FindParent <IModule>(); if (im != null) { switch (im.ModuleType) { case ModuleType.DataTIElectricity: case ModuleType.DeviceManage: case ModuleType.JuridicalPersons: case ModuleType.MonitoringAutoSbor: case ModuleType.Monitoring61968: case ModuleType.MonitoringConcentratorSbor: case ModuleType.MonitoringUSPDSbor: spFindTypeLayout.Visibility = System.Windows.Visibility.Visible; break; } } } #endregion if (LoginPage.IsShowPik) { byPik.Visibility = Visibility.Visible; } else { byPik.Visibility = Visibility.Collapsed; } })); Dispatcher.BeginInvoke((System.Action)(() => Keyboard.Focus(textFind)), DispatcherPriority.Background); }
protected virtual void Dispose(bool disposing) { if (!_treeItemsSyncLock.TryEnterWriteLock(TimeSpan.FromMinutes(2))) { return; } try { ObjectsFromLocal = null; ObjectsFromSQL = null; } finally { _treeItemsSyncLock.ExitWriteLock(); } _tree = null; }
/// <summary> /// Получаем коллекцию объектов для вставки/обновления ветки /// </summary> /// <param name="destTreeId">Идентификатор дерева, куда вставляем</param> /// <param name="destFreeHierItemId">Идентификатор узла, на который добавляем</param> /// <param name="sourceTree">Дерево, от куда добавляем</param> /// <param name="includeChildren"></param> /// <returns></returns> public static List <FreeHierTreeItem> FindSelectedAndBuildForInsert(int destTreeId, int destFreeHierItemId, FreeHierarchyTree sourceTree, bool includeChildren) { var descriptor = sourceTree.GetDescriptor(); if (descriptor == null) { return(null); } var selectedParent = new List <FreeHierarchyTreeItem>(); descriptor.GetSelected(selectedParent, aditionalWherePredicate: i => { //Выбранные, но без родителя, или родитель не выбран, т.е. эти объекты будут непосредственно на самом узле, куда их всех необходимо добавить, //дочерние выбранные пойдут под ними, их не выбираем return(i.Parent == null || !i.Parent.IsSelected); }); var nodes = new List <FreeHierTreeItem>(); foreach (var parent in selectedParent) { BuildParent(destTreeId, destFreeHierItemId, parent, nodes, includeChildren, ""); } return(nodes); }
public FreeHierarchyTreeFindBar(FreeHierarchyTree parent, FreeHierarchyTreeDescriptor descriptor) { InitializeComponent(); Init(parent, descriptor); }
internal static void OpenFreeHierarchyTreeFindBar(FreeHierarchyTree parent, FreeHierarchyTreeDescriptor descriptor) { FreeHierarchyTreeFindBar findBar; //Сначала закрываем предыдущее окно if (parent.TreeFindBar != null) { findBar = parent.TreeFindBar; findBar.Init(parent, descriptor); var previousPopup = findBar.FindParent <System.Windows.Controls.Primitives.Popup>(); if (previousPopup != null && !previousPopup.IsOpen) { previousPopup.IsOpen = true; } return; } findBar = new FreeHierarchyTreeFindBar(parent, descriptor); parent.TreeFindBar = findBar; findBar.MakeResizable(); var tvPlace = new Rect(parent.tree.PointToScreen(new Point(0, 0)), parent.tree.PointToScreen(new Point(parent.tree.ActualWidth, parent.tree.ActualHeight))); var wa = SystemParameters.WorkArea; var popup = new System.Windows.Controls.Primitives.Popup { Child = findBar, StaysOpen = false, }; var isShowNearest = true; var ch = parent.FindParent <ILocalChildren>(); isShowNearest = ch == null; popup.PlacementTarget = parent.tree; if (isShowNearest) { if ((tvPlace.Right + findBar.ActualHeight) < wa.Right) { popup.Placement = PlacementMode.Right; } else if (tvPlace.Left - findBar.ActualWidth > wa.Left) { popup.Placement = PlacementMode.Left; } else if (tvPlace.Bottom + findBar.ActualHeight < wa.Bottom) { popup.Placement = PlacementMode.Relative; popup.HorizontalOffset = tvPlace.Width - findBar.ActualWidth; popup.VerticalOffset = tvPlace.Height; } else { popup.Placement = PlacementMode.Top; } } else { popup.Placement = PlacementMode.Right; popup.HorizontalOffset = -333; popup.VerticalOffset = -10; } if (popup.PlacementTarget != null) { popup.OpenAndRegister(false); } }