private static XamDataTreeCommandBehavior GetOrCreateCommandBehavior(XamDataTree menuItem)
 {
     if (!(menuItem.GetValue(SelectedCommandBehaviorProperty) is XamDataTreeCommandBehavior behavior))
     {
         behavior = new XamDataTreeCommandBehavior(menuItem);
         menuItem.SetValue(SelectedCommandBehaviorProperty, behavior);
     }
     return(behavior);
 }
        private static void OnCommandParameterChangeCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            XamDataTree menuItem = d as XamDataTree;

            if (menuItem != null)
            {
                XamDataTreeCommandBehavior behavior = GetOrCreateCommandBehavior(menuItem);
                behavior.CommandParameter = e.NewValue;
            }
        }
Exemple #3
0
        private static void OnSetCommandParameterCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
        {
            XamDataTree tree = dependencyObject as XamDataTree;

            if (tree != null)
            {
                XamDataTreeNodeUnselectedCommandBehavior behavior = GetOrCreateBehavior(tree);
                behavior.CommandParameter = e.NewValue;
            }
        }
Exemple #4
0
        private static void OnSetCommandCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
        {
            XamDataTree menuItem = dependencyObject as XamDataTree;

            if (menuItem != null)
            {
                XamDataTreeNodeActivatedCommandBehavior behavior = GetOrCreateBehavior(menuItem);
                behavior.Command = e.NewValue as ICommand;
            }
        }
Exemple #5
0
        private static XamDataTreeNodeUnselectedCommandBehavior GetOrCreateBehavior(XamDataTree tree)
        {
            XamDataTreeNodeUnselectedCommandBehavior behavior = tree.GetValue(DataItemUnselectedProperty) as XamDataTreeNodeUnselectedCommandBehavior;

            if (behavior == null)
            {
                behavior = new XamDataTreeNodeUnselectedCommandBehavior(tree);
                tree.SetValue(DataItemUnselectedProperty, behavior);
            }

            return(behavior);
        }
Exemple #6
0
        private static XamDataTreeNodeActivatedCommandBehavior GetOrCreateBehavior(XamDataTree menuItem)
        {
            XamDataTreeNodeActivatedCommandBehavior behavior = menuItem.GetValue(SelectedCommandBehaviorProperty) as XamDataTreeNodeActivatedCommandBehavior;

            if (behavior == null)
            {
                behavior = new XamDataTreeNodeActivatedCommandBehavior(menuItem);
                menuItem.SetValue(SelectedCommandBehaviorProperty, behavior);
            }

            return(behavior);
        }
Exemple #7
0
 private static AccountVM GetSelectedAcccount(XamDataTree dataTree)
 {
     if (dataTree != null)
     {
         var actNode = dataTree.ActiveNode;
         if (actNode != null)
         {
             return(actNode.Data as AccountVM);
         }
     }
     return(null);
 }
Exemple #8
0
        private static void OnDefaultSelectedDataItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            XamDataTree tree = (XamDataTree)d;

            if (e.NewValue == null)
            {
                return;
            }

            if (tree.SelectionSettings.SelectedNodes.Count > 1)
            {
                return;
            }

            tree.Loaded += Tree_Loaded;
        }
Exemple #9
0
        private static void Tree_Loaded(object sender, RoutedEventArgs e)
        {
            XamDataTree tree = (XamDataTree)sender;

            tree.Loaded -= Tree_Loaded;

            var node = FindTreeNodeFromDataItem(tree, tree.GetValue(DefaultSelectedDataItemProperty));

            if (node != null)
            {
                if (!node.IsSelected)
                {
                    node.IsSelected = true;
                    node.IsActive   = true;
                }
            }
        }
Exemple #10
0
        /// <summary>
        /// Поиск и раскрытие объекта в дереве
        /// </summary>
        /// <param name="founded"></param>
        /// <param name="selItem"></param>
        /// <param name="xamTree"></param>
        /// <param name="isExpandLast"></param>
        /// <param name="isSelect"></param>
        public static void ExpandAndSelectXamTree(Dictionary <object, Stack> founded, object selItem,
                                                  XamDataTree xamTree, bool isExpandLast = false, bool isSelect = true)
        {
            if (founded == null)
            {
                return;
            }

            Stack stack;

            if (!founded.TryGetValue(selItem, out stack))
            {
                return;
            }

            ExpandAndSelectXamTree(stack, selItem, xamTree, isExpandLast, isSelect);
        }
Exemple #11
0
        private void OnRemoveAccount(XamDataTree dataTree)
        {
            AccountVM acct = GetSelectedAcccount(dataTree);

            if (acct == null)
            {
                return;
            }

            string           prompt = string.Format("你确定要删除 {0} ?", acct.InvestorId);
            MessageBoxResult res    = MessageBox.Show(System.Windows.Application.Current.MainWindow,
                                                      prompt, "删除帐户", MessageBoxButton.YesNo, MessageBoxImage.Warning);

            if (res == MessageBoxResult.Yes)
            {
                this._accounts.Remove(acct);
                Persist();
            }
        }
Exemple #12
0
        public static void ExpandAndSelectXamTree(Stack stack, object selItem,
                                                  XamDataTree xamTree, bool isExpandLast = false, bool isSelect = true)
        {
            if (stack != null)
            {
                var hierItem = selItem as FreeHierarchyTypeTreeItem;
                if (hierItem != null)
                {
                    var stackTree = new Stack <FreeHierarchyTypeTreeItem>();

                    for (int i = stack.Count - 1; i >= 0; i--)
                    {
                        stackTree.Push(stack.ToArray()[i] as FreeHierarchyTypeTreeItem);
                    }

                    xamTree.ExpandAndSelectXamTree(stackTree, isExpandLast, isSelect);
                }
                else
                {
                    var arr = new object[stack.Count];
                    stack.CopyTo(arr, 0);
                    Array.Reverse(arr);

                    var chain = new ConcurrentStack <object>(arr);
                    xamTree.ExpandAndSelectXamTreeAsync(chain, isExpandLast);
                }
                //MoveUp(xamTree);
            }
            // Если элемент не найден в дереве, то нужно подгрузить ветку
            else
            {
                var findedNodeResult = selItem as UaFindNodeResult;
                if (findedNodeResult != null)
                {
                    ExpandAndSelectUaNodeXamTree(findedNodeResult, xamTree);
                    //MoveUp(xamTree);
                }
                else
                {
                    ExpandAndSelectHierObject(selItem, xamTree);
                }
            }
        }
Exemple #13
0
        private void OnEditAccount(XamDataTree dataTree)
        {
            AccountVM acct = GetSelectedAcccount(dataTree);

            if (acct == null)
            {
                return;
            }

            EditAccountDlg addAcctDlg = new EditAccountDlg();

            addAcctDlg.Owner     = Application.Current.MainWindow;
            addAcctDlg.ViewModel = acct;
            bool?ret = addAcctDlg.ShowDialog();

            if (ret ?? false)
            {
                Persist();
            }
        }
Exemple #14
0
        private static object CoerceUnselectedDataItem(DependencyObject d, object value)
        {
            XamDataTree tree = (XamDataTree)d;

            if (value == null)
            {
                return(value);
            }

            var node = FindTreeNodeFromDataItem(tree, value);

            if (tree.SelectionSettings.SelectedNodes.Contains(node))
            {
                tree.SelectionSettings.SelectedNodes.Remove(node);
                node.IsActive  = false;
                node.IsChecked = false;
            }

            return(value);
        }
Exemple #15
0
        public static XamDataTreeNode FindTreeNodeFromDataItem(XamDataTree tree, object dataItem)
        {
            XamDataTreeNode targetNode = null;

            Action <XamDataTreeNode, object> findNode = (n, dItem) =>
            {
                if (n.HasChildren)
                {
                    foreach (var item in n.Nodes)
                    {
                        if (targetNode != null)
                        {
                            return;
                        }

                        if (item.Data == dItem)
                        {
                            targetNode = item;
                        }
                    }
                }
            };

            foreach (var node in tree.Nodes)
            {
                if (node.Data == dataItem)
                {
                    return(node);
                }
            }

            foreach (var node in tree.Nodes)
            {
                if (targetNode == null)
                {
                    findNode(node, dataItem);
                }
            }

            return(targetNode);
        }
Exemple #16
0
        private static void OnSelectedDataItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            XamDataTree tree = (XamDataTree)d;

            if (e.NewValue == null)
            {
                return;
            }

            var node = FindTreeNodeFromDataItem(tree, e.NewValue);

            if (node != null)
            {
                if (!tree.SelectionSettings.SelectedNodes.Contains(node))
                {
                    tree.SelectionSettings.SelectedNodes.Add(node);
                    node.IsActive  = true;
                    node.IsChecked = true;
                }
            }
        }
        private XamDataTree CreateXamDataTree()
        {
            XamDataTree MyTree = new XamDataTree();

            ExperimentNode experiment1 = new ExperimentNode("Experiment1");

            CompoundsGroupNode compoundsGroup = new CompoundsGroupNode("CompoundsGroup1");

            ClusterNode cluster = new ClusterNode("Cluster1");

            cluster.AddChild(new ExperimentNode("Experiment2"));

            ExperimentNode experiment3 = new ExperimentNode("Experiment3");

            experiment3.HoverText = "My experiment";
            experiment3.AddChild(new CompoundsGroupNode("CompoundsGroup2"));
            experiment3.AddChild(new CompoundsGroupNode("CompoundsGroup3"));

            cluster.AddChild(experiment3);

            experiment1.AddChild(compoundsGroup);
            experiment1.AddChild(cluster);

            MyTree.ItemsSource = new ObservableCollection <IDataNode> {
                experiment1
            };

            NodeLayout mylayout = new NodeLayout();

            mylayout.Key               = "NodeLayout1";
            mylayout.TargetTypeName    = "IDataNode";
            mylayout.DisplayMemberPath = "Name";
            MyTree.GlobalNodeLayouts.Add(mylayout);

            return(MyTree);
        }
Exemple #18
0
        public static void ExpandAndSelectXamTree(this XamDataTree tree, Stack <FreeHierarchyTypeTreeItem> chain, bool isExpandLast
                                                  , bool isSelect = true)
        {
            tree.SelectionSettings.SelectedNodes.Clear();
            Action <XamDataTreeNodesCollection> expandAndSelect = null;

            expandAndSelect = delegate(XamDataTreeNodesCollection list)
            {
                var item = chain.Pop();
                var find = list.FirstOrDefault(n => (n.Data as FreeHierarchyTypeTreeItem).FreeHierTree_ID == item.FreeHierTree_ID);
                if (find == null)
                {
                    return;
                }
                if (chain.Count == 0)
                {
                    if (isExpandLast)
                    {
                        find.IsExpanded = true;
                    }
                    if (isSelect)
                    {
                        find.IsSelected = true;
                    }
                    tree.SelectionSettings.SelectedNodes.Add(find);
                    tree.ScrollNodeIntoView(find);
                    //tree.BringIntoView();
                }
                else
                {
                    find.IsExpanded = true;
                    expandAndSelect(find.Nodes);
                }
            };
            expandAndSelect(tree.Nodes);
        }
Exemple #19
0
 public static ICommand GetCommand(XamDataTree tree)
 {
     return(tree.GetValue(CommandProperty) as ICommand);
 }
 public static void SetCommandProperty(XamDataTree menuItem, object parameter)
 {
     menuItem.SetValue(CommandParameterProperty, parameter);
 }
 public static object GetCommandParameter(XamDataTree menuItem)
 {
     return(menuItem.GetValue(CommandParameterProperty));
 }
Exemple #22
0
 public static object GetCommandParameter(XamDataTree tree)
 {
     return(tree.GetValue(CommandParameterProperty));
 }
Exemple #23
0
 public static string GetDefaultSelectedDataItem(XamDataTree tree)
 {
     return(tree.GetValue(DefaultSelectedDataItemProperty) as string);
 }
Exemple #24
0
        /// <summary>
        /// Разворачиваем объект в дереве с подгрузкой узлов
        /// </summary>
        /// <param name="tree"></param>
        /// <param name="chain"></param>
        /// <param name="isExpandLast"></param>
        /// <param name="isSelect"></param>
        /// <param name="afterFound">Действие после нахождения нужного элемента</param>
        public static void ExpandAndSelectXamTreeAsync(this XamDataTree tree, ConcurrentStack <object> chain, bool isExpandLast
                                                       , bool isSelect = true, Action <XamDataTreeNode> afterFound = null)
        {
            tree.SelectionSettings.SelectedNodes.Clear();
            Action <XamDataTreeNodesCollection> expandAndSelect = null;

            //var isFirst = true;

            //CancellationTokenSource tokenSource = null;

            expandAndSelect = delegate(XamDataTreeNodesCollection list)
            {
                object item;
                if (!chain.TryPop(out item))
                {
                    //if (tokenSource != null) tokenSource.Cancel();
                    //WaitPanel.Hide<object>(tree, null, null);

                    return;
                }

                var find = list.FirstOrDefault(n => n.Data.Equals(item));
                if (find == null)
                {
                    //if (tokenSource != null) tokenSource.Cancel();
                    //WaitPanel.Hide<object>(tree, null, null);

                    return;
                }

                if (chain.Count == 0)
                {
                    try
                    {
                        //if (isSelect)
                        {
                            tree.SelectionSettings.SelectedNodes.Add(find);
                            find.IsSelected = true;
                        }

                        if (isExpandLast)
                        {
                            find.IsExpanded = true;
                        }

                        tree.ScrollNodeIntoView(find);


                        FindBar.MoveSelectedNodeIntoCenter(tree);
                    }
                    finally
                    {
                        if (afterFound != null)
                        {
                            afterFound(find);
                        }
                        //if (tokenSource != null) tokenSource.Cancel();
                        //WaitPanel.Hide<object>(tree, null, null);
                    }
                    //}), DispatcherPriority.Send);

                    //tree.BringIntoView();
                }
                else
                {
                    find.IsExpanded = true;
                    expandAndSelect(find.Nodes);


                    //tree.Dispatcher.BeginInvoke((Action)(() =>
                    //{
                    //    expandAndSelect(find.Nodes);
                    //}), DispatcherPriority.Send);
                }
            };

            expandAndSelect(tree.Nodes);
        }
Exemple #25
0
        private static void ExpandAndSelectUaNodeXamTree(UaFindNodeResult findedNodeResult, XamDataTree xamTree)
        {
            if (!findedNodeResult.FdUaNodeId.HasValue)
            {
                return;
            }

            //Родитель через который идет переход на обычные узлы FreeHierarchy
            var parentNode = UAHierarchyDictionaries.UANodesDict[findedNodeResult.FdUaNodeId.Value];

            if (parentNode == null)
            {
                return;
            }

            //Непосредственный родитель
            var pathToFounded = new ConcurrentStack <object>();

#if DEBUG
            var sw = new System.Diagnostics.Stopwatch();
            sw.Start();
#endif
            var foundedObject = FinderHelper.FindFirstElementAsync(xamTree.ItemsSource as IEnumerable <object>, parentNode, pathToFounded);
#if DEBUG
            sw.Stop();
            Console.WriteLine("Поиск 1 {0} млс", sw.ElapsedMilliseconds);
#endif
            var treeItem = foundedObject as FreeHierarchyTreeItem;
            if (treeItem != null && treeItem.Descriptor != null)
            {
                //Подгружаем объекты
                treeItem.ReloadUaNodeBranch(new Queue <long>(findedNodeResult.ParentIds.Skip(1)));
            }
            pathToFounded.Clear();

#if DEBUG
            sw.Restart();
#endif
            foundedObject = FinderHelper.FindFirstElementAsync(xamTree.ItemsSource as IEnumerable <object>, findedNodeResult.Node, pathToFounded);
#if DEBUG
            sw.Stop();
            Console.WriteLine("Поиск 2 {0} млс", sw.ElapsedMilliseconds);
#endif
            //На данный момент объект подгружен, просто позиционируем на него
            if (foundedObject != null && pathToFounded.Count > 0)
            {
                xamTree.ExpandAndSelectXamTreeAsync(pathToFounded, false);
            }
        }
Exemple #26
0
        public static XamDataTreeNode ExpandAndSelectHierObject(object hierarchyObject, XamDataTree xamTree)
        {
            var pathToFounded = new ConcurrentStack <object>();

#if DEBUG
            var sw = new System.Diagnostics.Stopwatch();
            sw.Start();
#endif
            var source = xamTree.ItemsSource as IEnumerable <object>;
            if (source == null)
            {
                return(null);
            }

            var foundedObject = FinderHelper.FindFirstElementAsync(source, hierarchyObject, pathToFounded);
#if DEBUG
            sw.Stop();
            Console.WriteLine("Поиск {0} млс", sw.ElapsedMilliseconds);
#endif
            if (foundedObject == null || pathToFounded.Count <= 0)
            {
                return(null);
            }
            return(xamTree.ExpandAndSelectXamTreeSync(pathToFounded, true));
        }
Exemple #27
0
 public static void SetDefaultSelectedDataItem(XamDataTree tree, object value)
 {
     tree.SetValue(DefaultSelectedDataItemProperty, value);
 }
 public static ICommand GetCommand(XamDataTree menuItem)
 {
     return(menuItem.GetValue(CommandProperty) as ICommand);
 }
 public static void SetCommand(XamDataTree menuItem, ICommand command)
 {
     menuItem.SetValue(CommandProperty, command);
 }
Exemple #30
0
 public static void SetCommandParameter(XamDataTree tree, object parameter)
 {
     tree.SetValue(CommandParameterProperty, parameter);
 }