diff options
Diffstat (limited to 'src/LayoutingQueueItem.cs')
| -rw-r--r-- | src/LayoutingQueueItem.cs | 66 |
1 files changed, 47 insertions, 19 deletions
diff --git a/src/LayoutingQueueItem.cs b/src/LayoutingQueueItem.cs index f35eb78d..b2a5f3ca 100644 --- a/src/LayoutingQueueItem.cs +++ b/src/LayoutingQueueItem.cs @@ -21,6 +21,7 @@ using System; using System.Diagnostics; using System.Collections.Generic; +using System.Linq; namespace Crow { @@ -42,63 +43,84 @@ namespace Crow public class LayoutingQueueItem { /// <summary> Instance of widget to be layouted</summary> - public ILayoutable GraphicObject; + public ILayoutable Layoutable; /// <summary> Bitfield containing the element of the layout to performs (x|y|width|height)</summary> public LayoutingType LayoutType; /// <summary> Unsuccessfull UpdateLayout and requeueing count </summary> public int LayoutingTries, DiscardCount; + #if DEBUG_LAYOUTING + public static List<LayoutingQueueItem> processedLQIs = new List<LayoutingQueueItem>(); + public static LayoutingQueueItem[] MultipleRunsLQIs { + get { return processedLQIs.Where(l=>l.LayoutingTries>2 || l.DiscardCount > 0).ToArray(); } + } + public static LayoutingQueueItem currentLQI = null; + public Stopwatch LQITime = new Stopwatch(); + public List<LayoutingQueueItem> triggeredLQIs = new List<LayoutingQueueItem>(); + public LayoutingQueueItem wasTriggeredBy = null; + public GraphicObject graphicObject { + get { return Layoutable as GraphicObject; } + } + public Rectangle Slot, NewSlot; + #endif + #region CTOR public LayoutingQueueItem (LayoutingType _layoutType, ILayoutable _graphicObject) { LayoutType = _layoutType; - GraphicObject = _graphicObject; - GraphicObject.RegisteredLayoutings |= LayoutType; + Layoutable = _graphicObject; + Layoutable.RegisteredLayoutings |= LayoutType; + #if DEBUG_LAYOUTING + if (graphicObject.CurrentDrawLQIs == null) + graphicObject.CurrentDrawLQIs = new List<LayoutingQueueItem>(); + graphicObject.CurrentDrawLQIs.Add(this); + if (currentLQI != null){ + wasTriggeredBy = currentLQI; + currentLQI.triggeredLQIs.Add(this); + } + #endif } #endregion public void ProcessLayouting() { - if (GraphicObject.Parent == null) {//TODO:improve this + if (Layoutable.Parent == null) {//TODO:improve this //cancel layouting for object without parent, maybe some were in queue when //removed from a listbox Debug.WriteLine ("ERROR: processLayouting, no parent for: " + this.ToString ()); return; } #if DEBUG_LAYOUTING - Debug.WriteLine ("Layouting => " + this.ToString ()); + currentLQI = this; + processedLQIs.Add(this); + LQITime.Start(); #endif - if (!GraphicObject.UpdateLayout (LayoutType)) { + if (!Layoutable.UpdateLayout (LayoutType)) { if (LayoutingTries < Interface.MaxLayoutingTries) { - #if DEBUG_LAYOUTING - Debug.WriteLine ("\tRequeuing => " + this.ToString ()); - #endif LayoutingTries++; - GraphicObject.RegisteredLayoutings |= LayoutType; + Layoutable.RegisteredLayoutings |= LayoutType; Interface.CurrentInterface.LayoutingQueue.Enqueue (this); } else if (DiscardCount < Interface.MaxDiscardCount) { - #if DEBUG_LAYOUTING - Debug.WriteLine ("\tDiscarding => " + this.ToString ()); - #endif LayoutingTries = 0; DiscardCount++; - GraphicObject.RegisteredLayoutings |= LayoutType; + Layoutable.RegisteredLayoutings |= LayoutType; Interface.CurrentInterface.DiscardQueue.Enqueue (this); } //#if DEBUG_LAYOUTING else Debug.WriteLine ("\tDELETED => " + this.ToString ()); //#endif - } else { - DiscardCount = 0; - LayoutingTries = 0; } + #if DEBUG_LAYOUTING + currentLQI = null; + LQITime.Stop(); + #endif } public static implicit operator GraphicObject(LayoutingQueueItem queueItem) { - return queueItem.GraphicObject as GraphicObject; + return queueItem.Layoutable as GraphicObject; } public static implicit operator LayoutingType(LayoutingQueueItem lqi) { @@ -106,7 +128,13 @@ namespace Crow } public override string ToString () { - return string.Format ("{1}->{0}", LayoutType,GraphicObject.ToString()); + #if DEBUG_LAYOUTING + return string.Format ("{2};{3};{4} {1}->{0}", LayoutType,Layoutable.ToString(), + LayoutingTries,DiscardCount,LQITime.ElapsedTicks); + #else + return string.Format ("{2};{3} {1}->{0}", LayoutType,Layoutable.ToString(), + LayoutingTries, DiscardCount); + #endif } } } |