Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
Flexible.cs
1using System.Threading.Tasks;
2using System.Xml;
4
6{
10 public enum FlexibleOrder
11 {
15 HorizontalVertical,
16
20 VerticalHorizontal
21 }
22
27 {
31 LeftRight,
32
36 RightLeft
37 }
38
43 {
47 TopDown,
48
52 BottomUp
53 }
54
59 {
60 private EnumAttribute<FlexibleOrder> order;
61 private EnumAttribute<HorizontalDirection> horizontalDirection;
62 private EnumAttribute<VerticalDirection> verticalDirection;
65
71 public Flexible(Layout2DDocument Document, ILayoutElement Parent)
72 : base(Document, Parent)
73 {
74 }
75
79 public override string LocalName => "Flexible";
80
85 {
86 get => this.order;
87 set => this.order = value;
88 }
89
94 {
95 get => this.horizontalDirection;
96 set => this.horizontalDirection = value;
97 }
98
103 {
104 get => this.verticalDirection;
105 set => this.verticalDirection = value;
106 }
107
112 {
113 get => this.halign;
114 set => this.halign = value;
115 }
116
121 {
122 get => this.valign;
123 set => this.valign = value;
124 }
125
130 public override Task FromXml(XmlElement Input)
131 {
132 this.order = new EnumAttribute<FlexibleOrder>(Input, "order", this.Document);
133 this.horizontalDirection = new EnumAttribute<HorizontalDirection>(Input, "horizontalDirection", this.Document);
134 this.verticalDirection = new EnumAttribute<VerticalDirection>(Input, "verticalDirection", this.Document);
135 this.halign = new EnumAttribute<HorizontalAlignment>(Input, "halign", this.Document);
136 this.valign = new EnumAttribute<VerticalAlignment>(Input, "valign", this.Document);
137
138 return base.FromXml(Input);
139 }
140
145 public override void ExportAttributes(XmlWriter Output)
146 {
147 base.ExportAttributes(Output);
148
149 this.order?.Export(Output);
150 this.horizontalDirection?.Export(Output);
151 this.verticalDirection?.Export(Output);
152 this.halign?.Export(Output);
153 this.valign?.Export(Output);
154 }
155
162 public override ILayoutElement Create(Layout2DDocument Document, ILayoutElement Parent)
163 {
164 return new Flexible(Document, Parent);
165 }
166
171 public override void CopyContents(ILayoutElement Destination)
172 {
173 base.CopyContents(Destination);
174
175 if (Destination is Flexible Dest)
176 {
177 Dest.order = this.order?.CopyIfNotPreset(Destination.Document);
178 Dest.horizontalDirection = this.horizontalDirection?.CopyIfNotPreset(Destination.Document);
179 Dest.verticalDirection = this.verticalDirection?.CopyIfNotPreset(Destination.Document);
180 Dest.halign = this.halign?.CopyIfNotPreset(Destination.Document);
181 Dest.valign = this.valign?.CopyIfNotPreset(Destination.Document);
182 }
183 }
184
190 public override async Task<ICellLayout> GetCellLayout(DrawingState State)
191 {
192 FlexibleOrder Order = await this.order.Evaluate(State.Session, FlexibleOrder.HorizontalVertical);
193 HorizontalDirection HorizontalDirection = await this.horizontalDirection.Evaluate(State.Session, HorizontalDirection.LeftRight);
194 VerticalDirection VerticalDirection = await this.verticalDirection.Evaluate(State.Session, VerticalDirection.TopDown);
195
196 switch (Order)
197 {
198 case FlexibleOrder.HorizontalVertical:
199 default:
200 float Size = this.ExplicitWidth ?? this.Parent?.InnerWidth ?? State.AreaWidth;
201 HorizontalAlignment HAlignment = await this.halign.Evaluate(State.Session,
203
204 return new FlexibleHorizontalCells(State.Session, Size, HorizontalDirection, VerticalDirection, HAlignment);
205
206 case FlexibleOrder.VerticalHorizontal:
207 Size = this.ExplicitHeight ?? this.Parent?.InnerHeight ?? State.AreaHeight;
208 VerticalAlignment VAlignment = await this.valign.Evaluate(State.Session,
210
211 return new FlexibleVerticalCells(State.Session, Size, HorizontalDirection, VerticalDirection, VAlignment);
212 }
213 }
214
219 public override void ExportStateAttributes(XmlWriter Output)
220 {
221 base.ExportStateAttributes(Output);
222
223 this.order?.ExportState(Output);
224 this.horizontalDirection?.ExportState(Output);
225 this.verticalDirection?.ExportState(Output);
226 this.halign?.ExportState(Output);
227 this.valign?.ExportState(Output);
228 }
229
230 }
231}
Contains a 2D layout document.
void Export(XmlWriter Output)
Exports the attribute.
Definition: Attribute.cs:187
void ExportState(XmlWriter Output)
Exports the state of the attribute.
Definition: Attribute.cs:199
EnumAttribute< TEnum > CopyIfNotPreset(Layout2DDocument ForDocument)
Copies the attribute object if undefined, or defined by an expression. Returns a reference to itself,...
float AreaWidth
Width of current area
float AreaHeight
Height of current area
Variables Session
Current session.
Definition: DrawingState.cs:91
Lays out elements flexibly, first horizontally, then vertically.
Ordering child elements flexibly.
Definition: Flexible.cs:59
EnumAttribute< VerticalAlignment > VerticalAlignmentAttribute
Degrees
Definition: Flexible.cs:121
override string LocalName
Local name of type of element.
Definition: Flexible.cs:79
Flexible(Layout2DDocument Document, ILayoutElement Parent)
Ordering child elements flexibly.
Definition: Flexible.cs:71
EnumAttribute< HorizontalDirection > HorizontalDirectionAttribute
Horizontal Direction
Definition: Flexible.cs:94
EnumAttribute< HorizontalAlignment > HorizontalAlignmentAttribute
Degrees
Definition: Flexible.cs:112
EnumAttribute< VerticalDirection > VerticalDirectionAttribute
Vertical Direction
Definition: Flexible.cs:103
override void ExportStateAttributes(XmlWriter Output)
Exports the local attributes of the current element.
Definition: Flexible.cs:219
override Task FromXml(XmlElement Input)
Populates the element (including children) with information from its XML definition.
Definition: Flexible.cs:130
override void ExportAttributes(XmlWriter Output)
Exports attributes to XML.
Definition: Flexible.cs:145
override void CopyContents(ILayoutElement Destination)
Copies contents (attributes and children) to the destination element.
Definition: Flexible.cs:171
override async Task< ICellLayout > GetCellLayout(DrawingState State)
Gets a cell layout object that will be responsible for laying out cells.
Definition: Flexible.cs:190
EnumAttribute< FlexibleOrder > OrderAttribute
Order
Definition: Flexible.cs:85
override ILayoutElement Create(Layout2DDocument Document, ILayoutElement Parent)
Creates a new instance of the layout element.
Definition: Flexible.cs:162
Lays out elements flexibly, first vertically, then horizontally.
Abstract base class of elements that do spatial distribution of children.
Layout2DDocument Document
Layout document.
ILayoutElement Parent
Parent element.
Base interface for all layout elements.
float? InnerWidth
Inner Width of element
Layout2DDocument Document
Layout document.
float? InnerHeight
Inner Height of element
HorizontalDirection
Horizontal ordering
Definition: Flexible.cs:27
VerticalDirection
Vertical ordering
Definition: Flexible.cs:43
VerticalAlignment
Vertical alignment
Definition: Cell.cs:35
FlexibleOrder
How elements are ordered using flexible ordering.
Definition: Flexible.cs:11
HorizontalAlignment
Horizontal alignment
Definition: Cell.cs:14