Exemplo n.º 1
0
        private VisualElementGeneric SearchInListOfVisualElements(VisualElementGeneric tvl, object dataObject,
                                                                  bool alsoDereferenceObjects = false)
        {
            if (tvl == null || dataObject == null)
            {
                return(null);
            }

            // Test for VirtualEntities. Allow a string comparison
            var mdo = tvl.GetMainDataObject();

            if (mdo == null)
            {
                return(null);
            }
            var s1 = mdo as string;
            var s2 = dataObject as string;

            if (s1 != null && s1 == s2)
            {
                return(tvl);
            }

            // normal comparison
            if (tvl.GetMainDataObject() == dataObject)
            {
                return(tvl);
            }

            // extended?
            if (alsoDereferenceObjects && tvl.GetDereferencedMainDataObject() == dataObject)
            {
                return(tvl);
            }

            // recursion
            foreach (var mem in tvl.Members)
            {
                var x = SearchInListOfVisualElements(mem, dataObject, alsoDereferenceObjects);
                if (x != null)
                {
                    return(x);
                }
            }
            return(null);
        }
        /// <summary>
        /// Return true, if <code>mem</code> has to be deleted, because not in filter.
        /// </summary>
        /// <param name="mem"></param>
        /// <param name="fullFilterElementName"></param>
        /// <returns></returns>
        public bool FilterLeavesOfVisualElements(VisualElementGeneric mem, string fullFilterElementName)
        {
            if (fullFilterElementName == null)
            {
                return(false);
            }
            fullFilterElementName = fullFilterElementName.Trim().ToLower();
            if (fullFilterElementName == "")
            {
                return(false);
            }

            // has Members -> is not leaf!
            if (mem.Members != null && mem.Members.Count > 0)
            {
                // go into non-leafs mode -> simply go over list
                var todel = new List <VisualElementGeneric>();
                foreach (var x in mem.Members)
                {
                    if (FilterLeavesOfVisualElements(x, fullFilterElementName))
                    {
                        todel.Add(x);
                    }
                }
                // delete items on list
                foreach (var td in todel)
                {
                    mem.Members.Remove(td);
                }
            }
            else
            {
                // consider lazy loading
                if (mem is VisualElementEnvironmentItem memei &&
                    memei.theItemType == VisualElementEnvironmentItem.ItemType.DummyNode)
                {
                    return(false);
                }

                // this member is a leaf!!
                var isIn = false;
                var mdo  = mem.GetMainDataObject();
                if (mdo != null && mdo is AdminShell.Referable)
                {
                    var mdoen = (mdo as AdminShell.Referable).GetElementName().Trim().ToLower();
                    isIn = fullFilterElementName.IndexOf(mdoen, StringComparison.Ordinal) >= 0;
                }
                if (mdo != null && mdo is AdminShell.Reference)
                {
                    var mdoen = (mdo as AdminShell.Reference).GetElementName().Trim().ToLower();
                    isIn = fullFilterElementName.IndexOf(mdoen, StringComparison.Ordinal) >= 0;
                }
                return(!isIn);
            }
            return(false);
        }
        //
        // Element View Drawing
        //

        private VisualElementGeneric SearchInListOfVisualElements(VisualElementGeneric tvl, object dataObject)
        {
            if (tvl == null || dataObject == null)
            {
                return(null);
            }
            if (tvl.GetMainDataObject() == dataObject)
            {
                return(tvl);
            }
            foreach (var mem in tvl.Members)
            {
                var x = SearchInListOfVisualElements(mem, dataObject);
                if (x != null)
                {
                    return(x);
                }
            }
            return(null);
        }