private void CheckPerformLayoutAfterFinishLayout() { CheckChildrenSelfExplicitLayout(); if (this.element.PerformLayoutAfterFinishLayout == PerformLayoutType.None) { return; } PerformLayoutType performType = this.element.PerformLayoutAfterFinishLayout; if (performType == PerformLayoutType.SelfExplicit) { return; } this.element.PerformLayoutAfterFinishLayout = PerformLayoutType.None; if (performType == PerformLayoutType.Parent) { this.PerformParentLayout(); } else if (performType == PerformLayoutType.Self) { this.element.PerformLayout(this.element); } UnregisterLayoutRunning(); }
public virtual void RegisterChildSuspendedLayout(RadElement element, PerformLayoutType performLayoutType) { //Debug.WriteLine("RegisterChildSuspendedLayout, " + this.element.GetType().Name); //this.element.SuspendedChildren.Add(new ElementLayoutData(element, performLayoutType)); if (this.element.SuspendedChildren.ContainsKey(element)) { ElementLayoutData elementLayoutData = this.element.SuspendedChildren[element]; if (elementLayoutData.Performed) { elementLayoutData.Performed = false; elementLayoutData.PerformLayoutType = performLayoutType; } else { if (performLayoutType == PerformLayoutType.Parent) { elementLayoutData.PerformLayoutType = PerformLayoutType.Parent; } else if ((elementLayoutData.PerformLayoutType != PerformLayoutType.Parent) && (performLayoutType == PerformLayoutType.SelfExplicit)) { elementLayoutData.PerformLayoutType = PerformLayoutType.SelfExplicit; } } } else { this.element.SuspendedChildren.Add(element, new ElementLayoutData(element, performLayoutType)); } }
private void SetPerformExplicitLayout(PerformLayoutType performType) { PerformLayoutType[] types = new PerformLayoutType[] { PerformLayoutType.Parent, PerformLayoutType.SelfExplicit, PerformLayoutType.Self }; SetByPriority(performType, types); }
public virtual void PerformLayout(RadElement affectedElement, bool performExplicit) { if (this.ElementTree == null) { return; } // KOSEV: new fix! not tested thoroughly! if (this.element.Visibility == ElementVisibility.Collapsed) { return; } PerformLayoutType performType = performExplicit ? PerformLayoutType.SelfExplicit : PerformLayoutType.Self; if (CheckSuspendedLayout(performType)) { return; } if (!this.element.IsLayoutInvalidated && !performExplicit) { return; } if (this.element.GetBitState(RadElement.IsPerformLayoutRunningStateKey)) { SetPerformExplicitLayout(performType); return; } RegisterLayoutRunning(); this.element.SetBitState(RadElement.IsPerformLayoutRunningStateKey, true); PerformInternalLayout(affectedElement, performExplicit); this.element.SetBitState(RadElement.IsPerformLayoutRunningStateKey, false); CheckPerformLayoutAfterFinishLayout(); CheckLastSelfExplicit(this.ElementTree.RootElement); UnregisterLayoutRunning(); }
private void SetByPriority(PerformLayoutType performType, PerformLayoutType[] types) { foreach (PerformLayoutType type in types) { if (this.element.PerformLayoutAfterFinishLayout == type) { return; } if (performType == type) { this.element.PerformLayoutAfterFinishLayout = type; if (type != PerformLayoutType.SelfExplicit) { RegisterLayoutRunning(); } return; } } }
private bool CheckSuspendedLayout(PerformLayoutType performLayoutType) { if (this.element.ElementState != ElementState.Loaded) { return(false); } if (this.element.IsLayoutSuspended) { this.element.SetBitState(RadElement.IsLayoutPendingStateKey, true); return(true); } RadElement suspendedParent = this.element.SuspendedParent; if (suspendedParent != null && suspendedParent.ElementState == ElementState.Loaded) { suspendedParent.LayoutEngine.RegisterChildSuspendedLayout(this.element, performLayoutType); return(true); } return(false); }
/// <summary> /// Initializes a new instance of the ElementLayoutData class from /// the element and its PerformLayoutType. /// </summary> /// <param name="element"></param> /// <param name="performLayoutType"></param> public ElementLayoutData(RadElement element, PerformLayoutType performLayoutType) { this.element = element; this.performLayoutType = performLayoutType; }