示例#1
0
        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();
        }
示例#2
0
        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));
            }
        }
示例#3
0
 private void SetPerformExplicitLayout(PerformLayoutType performType)
 {
     PerformLayoutType[] types = new PerformLayoutType[] {
         PerformLayoutType.Parent,
         PerformLayoutType.SelfExplicit,
         PerformLayoutType.Self
     };
     SetByPriority(performType, types);
 }
示例#4
0
        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();
        }
示例#5
0
        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;
                }
            }
        }
示例#6
0
        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);
        }
示例#7
0
 /// <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;
 }