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); }