aboutsummaryrefslogtreecommitdiff
path: root/V3/Widgets/FormMenu.cs
diff options
context:
space:
mode:
authorThomas Leyh <leyh.thomas@web.de>2016-07-24 08:14:18 +0200
committerThomas Leyh <leyh.thomas@web.de>2016-07-24 08:14:18 +0200
commitced3d03bdb3ce866d832e03fb212865140905a9a (patch)
tree2a16c2063a46d3c354ce1585029dda3124f6ad93 /V3/Widgets/FormMenu.cs
parent0394dccaf06e1009e591a6ff4d645895574724c1 (diff)
downloadV3-ced3d03bdb3ce866d832e03fb212865140905a9a.tar.gz
V3-ced3d03bdb3ce866d832e03fb212865140905a9a.tar.bz2
Add project files.v1.0release
Diffstat (limited to 'V3/Widgets/FormMenu.cs')
-rw-r--r--V3/Widgets/FormMenu.cs75
1 files changed, 75 insertions, 0 deletions
diff --git a/V3/Widgets/FormMenu.cs b/V3/Widgets/FormMenu.cs
new file mode 100644
index 0000000..746f8f4
--- /dev/null
+++ b/V3/Widgets/FormMenu.cs
@@ -0,0 +1,75 @@
+using Microsoft.Xna.Framework;
+using System;
+using System.Linq;
+
+namespace V3.Widgets
+{
+ /// <summary>
+ /// A menu that arranges widgets in two columns. All widgets in on column
+ /// are made the same size (the maximum widget size).
+ /// </summary>
+ // ReSharper disable once ClassNeverInstantiated.Global
+ public sealed class FormMenu : AbstractMenu
+ {
+ private const float PaddingInnerX = 10;
+ private const float PaddingOuterX = 10;
+ private const float PaddingInnerY = 10;
+ private const float PaddingOuterY = 10;
+
+ public FormMenu(GraphicsDeviceManager graphicsDeviceManager) : base(graphicsDeviceManager)
+ {
+ }
+
+ protected override Vector2 GetTotalSize()
+ {
+ var size = new Vector2(2 * PaddingOuterX, 2 * PaddingOuterY);
+ var maxXLeft = 0f;
+ var maxXRight = 0f;
+ for (var i = 0; i < Widgets.Count; i += 2)
+ {
+ maxXLeft = Math.Max(maxXLeft, Widgets[i].Size.X);
+ if (i + 1 < Widgets.Count)
+ {
+ maxXRight = Math.Max(maxXRight, Widgets[i + 1].Size.X);
+ size.Y += Math.Max(Widgets[i].Size.Y, Widgets[i + 1].Size.Y);
+ }
+ else
+ {
+ size.Y += Widgets[i].Size.Y;
+ }
+ if (i + 2 < Widgets.Count)
+ size.Y += PaddingInnerY;
+ }
+ size.X += maxXLeft + maxXRight + PaddingInnerX;
+ return size;
+ }
+
+ protected override void UpdateWidgetRelativePositions()
+ {
+ var y = PaddingOuterY;
+ for (var i = 0; i < Widgets.Count; i += 2)
+ {
+ var x = PaddingOuterX;
+ Widgets[i].Position = new Vector2(x, y);
+ if (i + 1 < Widgets.Count)
+ {
+ x += Widgets[i].Size.X;
+ x += PaddingInnerX;
+ Widgets[i + 1].Position = new Vector2(x, y);
+ y += Math.Max(Widgets[i].Size.Y, Widgets[i + 1].Size.Y);
+ }
+ else
+ {
+ y += Widgets[i].Size.Y;
+ }
+ y += PaddingInnerY;
+ }
+ }
+
+ protected override void UpdateWidgetSizes()
+ {
+ MakeWidgetsSameSize(Widgets.Where((w, i) => i % 2 == 0));
+ MakeWidgetsSameSize(Widgets.Where((w, i) => i % 2 == 1));
+ }
+ }
+}