#region ILayoutable implementation
//TODO:uneeded list, should be removed
- public List<LayoutingQueueItem> RegisteredLQIs { get; } = new List<LayoutingQueueItem>();
+ public List<LinkedListNode<LayoutingQueueItem>> RegisteredLQINodes { get; } = new List<LinkedListNode<LayoutingQueueItem>>();
public void RegisterForLayouting (int layoutType) { throw new NotImplementedException (); }
public void UpdateLayout (LayoutingType layoutType) { throw new NotImplementedException (); }
public Rectangle ContextCoordinates (Rectangle r)
}
ComputeChildrenPositions ();
//if no layouting remains in queue for item, registre for redraw
- if (RegisteredLQIs.Count () <= 0 && bmp==null)
+ if (RegisteredLQINodes.Count () <= 0 && bmp==null)
this.RegisterForRedraw ();
}else
base.UpdateLayout(layoutType);
#region ILayoutable
- public List<LayoutingQueueItem> RegisteredLQIs { get; } = new List<LayoutingQueueItem>();
+ public List<LinkedListNode<LayoutingQueueItem>> RegisteredLQINodes { get; } = new List<LinkedListNode<LayoutingQueueItem>>();
//TODO: it would save the recurent cost of a cast in event bubbling if parent type was GraphicObject
// or we could add to the interface the mouse events
[XmlIgnore]public ILayoutable Parent {
return Bounds.Size;
}
void deleteLQI(int lt){
- LayoutingQueueItem[] lqis = this.RegisteredLQIs.Where (lq => (lt & (int)lq.LayoutType) > 0).ToArray ();
+ LinkedListNode<LayoutingQueueItem>[] lqis = this.RegisteredLQINodes.Where (n => (lt & (int)n.Value.LayoutType) > 0).ToArray ();
for (int i = 0; i < lqis.Length; i++) {
- Interface.LayoutingQueue.Remove (lqis [i].Node);
- lqis [i].DeleteLayoutableRef();
+ Interface.LayoutingQueue.Remove (lqis [i]);
+ RegisteredLQINodes.Remove (lqis [i]);
}
}
/// <summary> clear current layoutingQueue items for object and
Interface.LayoutingQueue.EnqueueAfterParentSizing (LayoutingType.Width, this);
else if (Bounds.Width < 0) //fit
Interface.LayoutingQueue.EnqueueBeforeParentSizing (LayoutingType.Width, this);
- else {
- LayoutingQueueItem lqi = new LayoutingQueueItem (LayoutingType.Width, this);
- lqi.Node = Interface.LayoutingQueue.AddFirst (lqi);
- }
+ else
+ RegisteredLQINodes.Add(
+ Interface.LayoutingQueue.AddFirst (
+ new LayoutingQueueItem (LayoutingType.Width, this)));
}
if ((layoutType & (int)LayoutingType.Height) > 0) {
else if (Bounds.Height < 0) //fit
Interface.LayoutingQueue.EnqueueBeforeParentSizing (LayoutingType.Height, this);
else{
- LayoutingQueueItem lqi = new LayoutingQueueItem (LayoutingType.Height, this);
- lqi.Node = Interface.LayoutingQueue.AddFirst (lqi);
+ RegisteredLQINodes.Add(
+ Interface.LayoutingQueue.AddFirst (
+ new LayoutingQueueItem (LayoutingType.Height, this)));
+
}
}
break;
}
//if no layouting remains in queue for item, registre for redraw
- if (this.RegisteredLQIs.Count () <= 0 && bmp == null)
+ if (this.RegisteredLQINodes.Count () <= 0 && bmp == null)
this.RegisterForRedraw ();
}
if (layoutType == LayoutingType.PositionChildren) {
ComputeChildrenPositions ();
//if no layouting remains in queue for item, registre for redraw
- if (RegisteredLQIs.Count () <= 0 && bmp==null)
+ if (RegisteredLQINodes.Count () <= 0 && bmp==null)
this.RegisterForRedraw ();
}else
base.UpdateLayout(layoutType);
IGOLibHost HostContainer { get; }
- List<LayoutingQueueItem> RegisteredLQIs { get; }
+ List<LinkedListNode<LayoutingQueueItem>> RegisteredLQINodes { get; }
void RegisterForLayouting(int layoutType);
void UpdateLayout(LayoutingType layoutType);
{
}
public void Enqueue(LayoutingType _lt, ILayoutable _object)
- {
- LayoutingQueueItem lqi = new LayoutingQueueItem (_lt, _object);
- lqi.Node = this.AddLast (lqi);
+ {
+ _object.RegisteredLQINodes.Add(this.AddLast (new LayoutingQueueItem (_lt, _object)));
}
- LayoutingQueueItem searchLqi(ILayoutable go, LayoutingType lt){
- return go.RegisteredLQIs.Where(lq => lq.LayoutType == lt).LastOrDefault();
+ LinkedListNode<LayoutingQueueItem> searchLqi(ILayoutable go, LayoutingType lt){
+ return go.RegisteredLQINodes.Where(n => n.Value.LayoutType == lt).LastOrDefault();
}
public void EnqueueAfterParentSizing (LayoutingType _lt, ILayoutable _object)
{
LayoutingQueueItem lqi = new LayoutingQueueItem (_lt, _object);
- LayoutingQueueItem parentLqi = searchLqi (_object.Parent, _lt);
+ LinkedListNode<LayoutingQueueItem> parentLqi = searchLqi (_object.Parent, _lt);
if (parentLqi == null)
- lqi.Node = this.AddFirst (lqi);
+ _object.RegisteredLQINodes.Add(this.AddFirst (lqi));
else
- lqi.Node = this.AddAfter (parentLqi.Node, lqi);
+ _object.RegisteredLQINodes.Add(this.AddAfter (parentLqi, lqi));
}
public void EnqueueBeforeParentSizing (LayoutingType _lt, ILayoutable _object)
{
LayoutingQueueItem lqi = new LayoutingQueueItem (_lt, _object);
- LayoutingQueueItem parentLqi = searchLqi (_object.Parent, _lt);
+ LinkedListNode<LayoutingQueueItem> parentLqi = searchLqi (_object.Parent, _lt);
if (parentLqi == null)
- lqi.Node = this.AddLast (lqi);
+ _object.RegisteredLQINodes.Add(this.AddLast (lqi));
else
- lqi.Node = this.AddBefore (parentLqi.Node, lqi);
+ _object.RegisteredLQINodes.Add(this.AddBefore (parentLqi, lqi));
}
public void EnqueueAfterThisAndParentSizing (LayoutingType _lt, ILayoutable _object)
{
if (_lt == LayoutingType.Y)
sizing = LayoutingType.Height;
- LayoutingQueueItem parentLqi = searchLqi (_object.Parent, sizing);
- LayoutingQueueItem thisLqi = searchLqi (_object, sizing);
+ LinkedListNode<LayoutingQueueItem> parentLqi = searchLqi (_object.Parent, sizing);
+ LinkedListNode<LayoutingQueueItem> thisLqi = searchLqi (_object, sizing);
if (parentLqi == null) {
if (thisLqi != null)
- lqi.Node = this.AddAfter (thisLqi.Node, lqi);
+ _object.RegisteredLQINodes.Add(this.AddAfter (thisLqi, lqi));
else
- lqi.Node = this.AddLast (lqi);
+ _object.RegisteredLQINodes.Add(this.AddLast (lqi));
} else {
if (thisLqi == null)
- lqi.Node = this.AddAfter (parentLqi.Node, lqi);
+ _object.RegisteredLQINodes.Add(this.AddAfter (parentLqi, lqi));
else {
switch (sizing) {
case LayoutingType.Width:
if (_object.Parent.getBounds().Width<0)
- lqi.Node = this.AddAfter (parentLqi.Node, lqi);
+ _object.RegisteredLQINodes.Add(this.AddAfter (parentLqi, lqi));
else
- lqi.Node = this.AddAfter (thisLqi.Node, lqi);
+ _object.RegisteredLQINodes.Add(this.AddAfter (thisLqi, lqi));
break;
case LayoutingType.Height:
if (_object.Parent.getBounds().Height<0)
- lqi.Node = this.AddAfter (parentLqi.Node, lqi);
+ _object.RegisteredLQINodes.Add(this.AddAfter (parentLqi, lqi));
else
- lqi.Node = this.AddAfter (thisLqi.Node, lqi);
+ _object.RegisteredLQINodes.Add(this.AddAfter (thisLqi, lqi));
break;
}
}
public LayoutingQueueItem Dequeue()
{
LayoutingQueueItem tmp = this.First.Value;
- tmp.DeleteLayoutableRef ();
+ tmp.GraphicObject.RegisteredLQINodes.Remove(this.First);
this.RemoveFirst ();
return tmp;
}
}
public class LayoutingQueueItem
- {
- public LinkedListNode<LayoutingQueueItem> Node;
+ {
public ILayoutable GraphicObject;
public LayoutingType LayoutType;
{
LayoutType = _layoutType;
GraphicObject = _graphicObject;
- GraphicObject.RegisteredLQIs.Add (this);
- }
- public void DeleteLayoutableRef(){
- GraphicObject.RegisteredLQIs.Remove(this);
}
+
public void ProcessLayouting()
{
#if DEBUG_LAYOUTING
#region ILayoutable implementation
//TODO:uneeded list, should be removed
- public List<LayoutingQueueItem> RegisteredLQIs { get; } = new List<LayoutingQueueItem>();
+ public List<LinkedListNode<LayoutingQueueItem>> RegisteredLQINodes { get; } = new List<LinkedListNode<LayoutingQueueItem>>();
public void RegisterForLayouting (int layoutType) { throw new NotImplementedException (); }
public void UpdateLayout (LayoutingType layoutType) { throw new NotImplementedException (); }
public Rectangle ContextCoordinates (Rectangle r)