1 // =================================
 2 // Copyright (c) 2024 Seppo Laakko
 3 // Distributed under the MIT license
 4 // =================================
 5 
 6 using System;
 7 
 8 namespace System.Windows
 9 {
10     public abstract class Component : GraphicsObject
11     {
12         public Component() : base()container(null)nextSibling(null)prevSibling(null)
13         {
14         }
15         public inline ComponentContainer* GetContainer() const
16         {
17             return container;
18         }
19         internal void SetContainer(ComponentContainer* container_)
20         {
21             container = container_;
22         }
23         public inline Component* NextSibling() const
24         {
25             return nextSibling;
26         }
27         internal void SetNextSibling(Component* nextSibling_)
28         {
29             nextSibling = nextSibling_;
30         }
31         public inline Component* PrevSibling() const
32         {
33             return prevSibling;
34         }
35         internal void SetPrevSibling(Component* prevSibling_)
36         {
37             prevSibling = prevSibling_;
38         }
39         internal void LinkBefore(Component* component)
40         {
41             if (prevSibling != null)
42             {
43                 prevSibling->nextSibling = component;
44             }
45             component->prevSibling = prevSibling;
46             component->nextSibling = this;
47             prevSibling = component;
48         }
49         internal void LinkAfter(Component* component)
50         {
51             if (nextSibling != null)
52             {
53                 nextSibling->prevSibling = component;
54             }
55             component->prevSibling = this;
56             component->nextSibling = nextSibling;
57             nextSibling = component;
58         }
59         internal void Unlink()
60         {
61             if (prevSibling != null)
62             {
63                 prevSibling->nextSibling = nextSibling;
64             }
65             if (nextSibling != null)
66             {
67                 nextSibling->prevSibling = prevSibling;
68             }
69         }
70         private ComponentContainer* container;
71         private Component* nextSibling;
72         private Component* prevSibling;
73     }