Selaa lähdekoodia

Implement new Dim/Pos capabilities, referencing the elements of another view

miguel 7 vuotta sitten
vanhempi
commit
b296c920ac

+ 25 - 4
Example/demo.cs

@@ -92,12 +92,33 @@ static class Demo {
 
 		Application.MainLoop.AddTimeout (TimeSpan.FromMilliseconds (300), timer);
 
+
+		// A little convoluted, this is because I am using this to test the
+		// layout based on referencing elements of another view:
+
+		var login = new Label ("Login: ") { X = 3, Y = 6 };
+		var password = new Label ("Password: ") { 
+			X = Pos.Left (login), 
+			Y = Pos.Bottom (login) + 1 
+		};
+		var loginText = new TextField ("") { 
+			X = Pos.Right (password),  
+			Y = Pos.Top (login), 
+			Width = 40 
+		};
+		var passText = new TextField ("") {
+			Secret = true,
+			X = Pos.Left (loginText),
+			Y = Pos.Top (password),
+			Width = Dim.Width (loginText)
+		};
+
 		// Add some content
 		container.Add (
-			new Label (3, 6, "Login: "),
-			new TextField (14, 6, 40, ""),
-			new Label (3, 8, "Password: "),
-			new TextField (14, 8, 40, "") { Secret = true },
+			login,
+			loginText,
+			password,
+			passText,
 			new FrameView (new Rect (3, 10, 25, 6), "Options"){
 				new CheckBox (1, 0, "Remember me"),
 				new RadioGroup (1, 2, new [] { "_Personal", "_Company" }),

+ 65 - 1
Terminal.Gui/Core.cs

@@ -1041,6 +1041,47 @@ namespace Terminal.Gui {
 			Frame = new Rect (_x, _y, w, h);
 		}
 
+		// https://en.wikipedia.org/wiki/Topological_sorting
+		static List<View> TopologicalSort (HashSet<View> nodes, HashSet<(View, View)> edges)
+		{
+			var result = new List<View> ();
+
+			// Set of all nodes with no incoming edges
+			var S = new HashSet<View> (nodes.Where (n => edges.All (e => e.Item2.Equals (n) == false)));
+
+			while (S.Any ()) {
+				//  remove a node n from S
+				var n = S.First ();
+				S.Remove (n);
+
+				// add n to tail of L
+				result.Add (n);
+
+				// for each node m with an edge e from n to m do
+				foreach (var e in edges.Where (e => e.Item1.Equals (n)).ToList ()) {
+					var m = e.Item2;
+
+					// remove edge e from the graph
+					edges.Remove (e);
+
+					// if m has no other incoming edges then
+					if (edges.All (me => me.Item2.Equals (m) == false)) {
+						// insert m into S
+						S.Add (m);
+					}
+				}
+			}
+
+			// if graph has edges then
+			if (edges.Any ()) {
+				// return error (graph has at least one cycle)
+				return null;
+			} else {
+				// return L (a topologically sorted order)
+				return result;
+			}
+		}
+
 		/// <summary>
 		/// This virtual method is invoked when a view starts executing or 
 		/// when the dimensions of the view have changed, for example in 
@@ -1050,8 +1091,31 @@ namespace Terminal.Gui {
 		{
 			if (!layoutNeeded)
 				return;
-			
+
+			// Sort out the dependencies of the X, Y, Width, Height properties
+			var nodes = new HashSet<View> ();
+			var edges = new HashSet<(View, View)> ();
+
 			foreach (var v in Subviews) {
+				nodes.Add (v);
+				if (v.LayoutStyle == LayoutStyle.Computed) {
+					if (v.X is Pos.PosView)
+						edges.Add ((v, (v.X as Pos.PosView).Target));
+					if (v.Y is Pos.PosView)
+						edges.Add ((v, (v.Y as Pos.PosView).Target));
+					if (v.Width is Dim.DimView)
+						edges.Add ((v, (v.Width as Dim.DimView).Target));
+					if (v.Height is Dim.DimView)
+						edges.Add ((v, (v.Height as Dim.DimView).Target));
+				}
+			}
+
+			var ordered = TopologicalSort (nodes, edges);
+			ordered.Reverse ();
+			if (ordered == null)
+				throw new Exception ("There is a recursive cycle in the relative Pos/Dim in the views of " + this);
+
+			foreach (var v in ordered) {
 				if (v.LayoutStyle == LayoutStyle.Computed)
 					v.RelativeLayout (Frame);
 

+ 101 - 0
Terminal.Gui/Types/PosDim.cs

@@ -24,6 +24,11 @@ namespace Terminal.Gui {
 	///     to produce more useful layouts, like: Pos.Center - 3, which would shift the postion
 	///     of the view 3 characters to the left after centering for example.
 	///   </para>
+	///   <para>
+	///     It is possible to reference coordinates of another view by using the methods
+	///     Left(View), Right(View), Bottom(View), Top(View).   The X(View) and Y(View) are
+	///     aliases to Left(View) and Top(View) respectively.
+	///   </para>
 	/// </remarks>
 	public class Pos {
 		internal virtual int Anchor (int width)
@@ -195,6 +200,69 @@ namespace Terminal.Gui {
 		{
 			return new PosCombine (false, left, right);
 		}
+
+		internal class PosView : Pos {
+			public View Target;
+			int side;
+			public PosView (View view, int side)
+			{
+				Target = view;
+				this.side = side;
+			}
+			internal override int Anchor (int width)
+			{
+				switch (side) {
+				case 0: return Target.Frame.X;
+				case 1: return Target.Frame.Y;
+				case 2: return Target.Frame.Right;
+				case 3: return Target.Frame.Bottom;
+				default:
+					return 0;
+				}
+			}
+		}
+
+		/// <summary>
+		/// Returns a Pos object tracks the Left (X) position of the specified view.
+		/// </summary>
+		/// <returns>The Position that depends on the other view.</returns>
+		/// <param name="view">The view that will be tracked.</param>
+		public static Pos Left (View view) => new PosView (view, 0);
+
+		/// <summary>
+		/// Returns a Pos object tracks the Left (X) position of the specified view.
+		/// </summary>
+		/// <returns>The Position that depends on the other view.</returns>
+		/// <param name="view">The view that will be tracked.</param>
+		public static Pos X (View view) => new PosView (view, 0);
+
+		/// <summary>
+		/// Returns a Pos object tracks the Top (Y) position of the specified view.
+		/// </summary>
+		/// <returns>The Position that depends on the other view.</returns>
+		/// <param name="view">The view that will be tracked.</param>
+		public static Pos Top (View view) => new PosView (view, 1);
+
+		/// <summary>
+		/// Returns a Pos object tracks the Top (Y) position of the specified view.
+		/// </summary>
+		/// <returns>The Position that depends on the other view.</returns>
+		/// <param name="view">The view that will be tracked.</param>
+		public static Pos Y (View view) => new PosView (view, 1);
+
+		/// <summary>
+		/// Returns a Pos object tracks the Right (X+Width) coordinate of the specified view.
+		/// </summary>
+		/// <returns>The Position that depends on the other view.</returns>
+		/// <param name="view">The view that will be tracked.</param>
+		public static Pos Right (View view) => new PosView (view, 2);
+
+		/// <summary>
+		/// Returns a Pos object tracks the Bottom (Y+Height) coordinate of the specified view.
+		/// </summary>
+		/// <returns>The Position that depends on the other view.</returns>
+		/// <param name="view">The view that will be tracked.</param>
+		public static Pos Bottom (View view) => new PosView (view, 3);
 	}
 
 	/// <summary>
@@ -347,5 +415,38 @@ namespace Terminal.Gui {
 		{
 			return new DimCombine (false, left, right);
 		}
+
+		internal class DimView : Dim {
+			public View Target;
+			int side;
+			public DimView (View view, int side)
+			{
+				Target = view;
+				this.side = side;
+			}
+
+			internal override int Anchor (int width)
+			{
+				switch (side) {
+				case 0: return Target.Frame.Height;
+				case 1: return Target.Frame.Width;
+				default:
+					return 0;
+				}
+			}
+		}
+		/// <summary>
+		/// Returns a Dim object tracks the Width of the specified view.
+		/// </summary>
+		/// <returns>The dimension of the other view.</returns>
+		/// <param name="view">The view that will be tracked.</param>
+		public static Dim Width (View view) => new DimView (view, 1);
+
+		/// <summary>
+		/// Returns a Dim object tracks the Height of the specified view.
+		/// </summary>
+		/// <returns>The dimension of the other view.</returns>
+		/// <param name="view">The view that will be tracked.</param>
+		public static Dim Height (View view) => new DimView (view, 0);
 	}
 }

+ 80 - 0
docfx/api/Terminal.Gui/Terminal.Gui.Dim.yml

@@ -5,10 +5,12 @@ items:
   children:
   - Terminal.Gui.Dim.#ctor
   - Terminal.Gui.Dim.Fill(System.Int32)
+  - Terminal.Gui.Dim.Height(Terminal.Gui.View)
   - Terminal.Gui.Dim.op_Addition(Terminal.Gui.Dim,Terminal.Gui.Dim)
   - Terminal.Gui.Dim.op_Implicit(System.Int32 to Terminal.Gui.Dim)
   - Terminal.Gui.Dim.op_Subtraction(Terminal.Gui.Dim,Terminal.Gui.Dim)
   - Terminal.Gui.Dim.Percent(System.Single)
+  - Terminal.Gui.Dim.Width(Terminal.Gui.View)
   langs:
   - csharp
   name: Dim
@@ -75,6 +77,30 @@ items:
       description: The Fill dimension.
   overload: Terminal.Gui.Dim.Fill*
   exceptions: []
+- uid: Terminal.Gui.Dim.Height(Terminal.Gui.View)
+  id: Height(Terminal.Gui.View)
+  parent: Terminal.Gui.Dim
+  langs:
+  - csharp
+  name: Height(View)
+  nameWithType: Dim.Height(View)
+  fullName: Dim.Height(View)
+  type: Method
+  assemblies:
+  - Terminal.Gui
+  namespace: Terminal.Gui
+  summary: Returns a Dim object tracks the Height of the specified view.
+  syntax:
+    content: public static Terminal.Gui.Dim Height (Terminal.Gui.View view);
+    parameters:
+    - id: view
+      type: Terminal.Gui.View
+      description: The view that will be tracked.
+    return:
+      type: Terminal.Gui.Dim
+      description: The dimension of the other view.
+  overload: Terminal.Gui.Dim.Height*
+  exceptions: []
 - uid: Terminal.Gui.Dim.op_Addition(Terminal.Gui.Dim,Terminal.Gui.Dim)
   id: op_Addition(Terminal.Gui.Dim,Terminal.Gui.Dim)
   parent: Terminal.Gui.Dim
@@ -177,6 +203,30 @@ items:
       description: The percent Dim object.
   overload: Terminal.Gui.Dim.Percent*
   exceptions: []
+- uid: Terminal.Gui.Dim.Width(Terminal.Gui.View)
+  id: Width(Terminal.Gui.View)
+  parent: Terminal.Gui.Dim
+  langs:
+  - csharp
+  name: Width(View)
+  nameWithType: Dim.Width(View)
+  fullName: Dim.Width(View)
+  type: Method
+  assemblies:
+  - Terminal.Gui
+  namespace: Terminal.Gui
+  summary: Returns a Dim object tracks the Width of the specified view.
+  syntax:
+    content: public static Terminal.Gui.Dim Width (Terminal.Gui.View view);
+    parameters:
+    - id: view
+      type: Terminal.Gui.View
+      description: The view that will be tracked.
+    return:
+      type: Terminal.Gui.Dim
+      description: The dimension of the other view.
+  overload: Terminal.Gui.Dim.Width*
+  exceptions: []
 references:
 - uid: System.Object
   parent: System
@@ -208,6 +258,18 @@ references:
   name: Int32
   nameWithType: Int32
   fullName: System.Int32
+- uid: Terminal.Gui.Dim.Height(Terminal.Gui.View)
+  parent: Terminal.Gui.Dim
+  isExternal: false
+  name: Height(View)
+  nameWithType: Dim.Height(View)
+  fullName: Dim.Height(View)
+- uid: Terminal.Gui.View
+  parent: Terminal.Gui
+  isExternal: false
+  name: View
+  nameWithType: View
+  fullName: Terminal.Gui.View
 - uid: Terminal.Gui.Dim.op_Addition(Terminal.Gui.Dim,Terminal.Gui.Dim)
   parent: Terminal.Gui.Dim
   isExternal: false
@@ -238,6 +300,12 @@ references:
   name: Single
   nameWithType: Single
   fullName: System.Single
+- uid: Terminal.Gui.Dim.Width(Terminal.Gui.View)
+  parent: Terminal.Gui.Dim
+  isExternal: false
+  name: Width(View)
+  nameWithType: Dim.Width(View)
+  fullName: Dim.Width(View)
 - uid: Terminal.Gui.Dim.#ctor*
   parent: Terminal.Gui.Dim
   isExternal: false
@@ -250,6 +318,12 @@ references:
   name: Fill
   nameWithType: Dim.Fill
   fullName: Dim.Fill
+- uid: Terminal.Gui.Dim.Height*
+  parent: Terminal.Gui.Dim
+  isExternal: false
+  name: Height
+  nameWithType: Dim.Height
+  fullName: Dim.Height
 - uid: Terminal.Gui.Dim.op_Addition*
   parent: Terminal.Gui.Dim
   isExternal: false
@@ -274,3 +348,9 @@ references:
   name: Percent
   nameWithType: Dim.Percent
   fullName: Dim.Percent
+- uid: Terminal.Gui.Dim.Width*
+  parent: Terminal.Gui.Dim
+  isExternal: false
+  name: Width
+  nameWithType: Dim.Width
+  fullName: Dim.Width

+ 233 - 0
docfx/api/Terminal.Gui/Terminal.Gui.Pos.yml

@@ -5,11 +5,17 @@ items:
   children:
   - Terminal.Gui.Pos.#ctor
   - Terminal.Gui.Pos.AnchorEnd(System.Int32)
+  - Terminal.Gui.Pos.Bottom(Terminal.Gui.View)
   - Terminal.Gui.Pos.Center
+  - Terminal.Gui.Pos.Left(Terminal.Gui.View)
   - Terminal.Gui.Pos.op_Addition(Terminal.Gui.Pos,Terminal.Gui.Pos)
   - Terminal.Gui.Pos.op_Implicit(System.Int32 to Terminal.Gui.Pos)
   - Terminal.Gui.Pos.op_Subtraction(Terminal.Gui.Pos,Terminal.Gui.Pos)
   - Terminal.Gui.Pos.Percent(System.Single)
+  - Terminal.Gui.Pos.Right(Terminal.Gui.View)
+  - Terminal.Gui.Pos.Top(Terminal.Gui.View)
+  - Terminal.Gui.Pos.X(Terminal.Gui.View)
+  - Terminal.Gui.Pos.Y(Terminal.Gui.View)
   langs:
   - csharp
   name: Pos
@@ -30,6 +36,11 @@ items:
                     to produce more useful layouts, like: Pos.Center - 3, which would shift the postion
                     of the view 3 characters to the left after centering for example.
                   </p>
+        <p>
+                    It is possible to reference coordinates of another view by using the methods
+                    Left(View), Right(View), Bottom(View), Top(View).   The X(View) and Y(View) are
+                    aliases to Left(View) and Top(View) respectively.
+                  </p>
   syntax:
     content: public class Pos
   inheritance:
@@ -77,6 +88,30 @@ items:
       description: The Pos object anchored to the end (the bottom or the right side).
   overload: Terminal.Gui.Pos.AnchorEnd*
   exceptions: []
+- uid: Terminal.Gui.Pos.Bottom(Terminal.Gui.View)
+  id: Bottom(Terminal.Gui.View)
+  parent: Terminal.Gui.Pos
+  langs:
+  - csharp
+  name: Bottom(View)
+  nameWithType: Pos.Bottom(View)
+  fullName: Pos.Bottom(View)
+  type: Method
+  assemblies:
+  - Terminal.Gui
+  namespace: Terminal.Gui
+  summary: Returns a Pos object tracks the Bottom (Y+Height) coordinate of the specified view.
+  syntax:
+    content: public static Terminal.Gui.Pos Bottom (Terminal.Gui.View view);
+    parameters:
+    - id: view
+      type: Terminal.Gui.View
+      description: The view that will be tracked.
+    return:
+      type: Terminal.Gui.Pos
+      description: The Position that depends on the other view.
+  overload: Terminal.Gui.Pos.Bottom*
+  exceptions: []
 - uid: Terminal.Gui.Pos.Center
   id: Center
   parent: Terminal.Gui.Pos
@@ -98,6 +133,30 @@ items:
       description: The center Pos.
   overload: Terminal.Gui.Pos.Center*
   exceptions: []
+- uid: Terminal.Gui.Pos.Left(Terminal.Gui.View)
+  id: Left(Terminal.Gui.View)
+  parent: Terminal.Gui.Pos
+  langs:
+  - csharp
+  name: Left(View)
+  nameWithType: Pos.Left(View)
+  fullName: Pos.Left(View)
+  type: Method
+  assemblies:
+  - Terminal.Gui
+  namespace: Terminal.Gui
+  summary: Returns a Pos object tracks the Left (X) position of the specified view.
+  syntax:
+    content: public static Terminal.Gui.Pos Left (Terminal.Gui.View view);
+    parameters:
+    - id: view
+      type: Terminal.Gui.View
+      description: The view that will be tracked.
+    return:
+      type: Terminal.Gui.Pos
+      description: The Position that depends on the other view.
+  overload: Terminal.Gui.Pos.Left*
+  exceptions: []
 - uid: Terminal.Gui.Pos.op_Addition(Terminal.Gui.Pos,Terminal.Gui.Pos)
   id: op_Addition(Terminal.Gui.Pos,Terminal.Gui.Pos)
   parent: Terminal.Gui.Pos
@@ -200,6 +259,102 @@ items:
       description: The percent Pos object.
   overload: Terminal.Gui.Pos.Percent*
   exceptions: []
+- uid: Terminal.Gui.Pos.Right(Terminal.Gui.View)
+  id: Right(Terminal.Gui.View)
+  parent: Terminal.Gui.Pos
+  langs:
+  - csharp
+  name: Right(View)
+  nameWithType: Pos.Right(View)
+  fullName: Pos.Right(View)
+  type: Method
+  assemblies:
+  - Terminal.Gui
+  namespace: Terminal.Gui
+  summary: Returns a Pos object tracks the Right (X+Width) coordinate of the specified view.
+  syntax:
+    content: public static Terminal.Gui.Pos Right (Terminal.Gui.View view);
+    parameters:
+    - id: view
+      type: Terminal.Gui.View
+      description: The view that will be tracked.
+    return:
+      type: Terminal.Gui.Pos
+      description: The Position that depends on the other view.
+  overload: Terminal.Gui.Pos.Right*
+  exceptions: []
+- uid: Terminal.Gui.Pos.Top(Terminal.Gui.View)
+  id: Top(Terminal.Gui.View)
+  parent: Terminal.Gui.Pos
+  langs:
+  - csharp
+  name: Top(View)
+  nameWithType: Pos.Top(View)
+  fullName: Pos.Top(View)
+  type: Method
+  assemblies:
+  - Terminal.Gui
+  namespace: Terminal.Gui
+  summary: Returns a Pos object tracks the Top (Y) position of the specified view.
+  syntax:
+    content: public static Terminal.Gui.Pos Top (Terminal.Gui.View view);
+    parameters:
+    - id: view
+      type: Terminal.Gui.View
+      description: The view that will be tracked.
+    return:
+      type: Terminal.Gui.Pos
+      description: The Position that depends on the other view.
+  overload: Terminal.Gui.Pos.Top*
+  exceptions: []
+- uid: Terminal.Gui.Pos.X(Terminal.Gui.View)
+  id: X(Terminal.Gui.View)
+  parent: Terminal.Gui.Pos
+  langs:
+  - csharp
+  name: X(View)
+  nameWithType: Pos.X(View)
+  fullName: Pos.X(View)
+  type: Method
+  assemblies:
+  - Terminal.Gui
+  namespace: Terminal.Gui
+  summary: Returns a Pos object tracks the Left (X) position of the specified view.
+  syntax:
+    content: public static Terminal.Gui.Pos X (Terminal.Gui.View view);
+    parameters:
+    - id: view
+      type: Terminal.Gui.View
+      description: The view that will be tracked.
+    return:
+      type: Terminal.Gui.Pos
+      description: The Position that depends on the other view.
+  overload: Terminal.Gui.Pos.X*
+  exceptions: []
+- uid: Terminal.Gui.Pos.Y(Terminal.Gui.View)
+  id: Y(Terminal.Gui.View)
+  parent: Terminal.Gui.Pos
+  langs:
+  - csharp
+  name: Y(View)
+  nameWithType: Pos.Y(View)
+  fullName: Pos.Y(View)
+  type: Method
+  assemblies:
+  - Terminal.Gui
+  namespace: Terminal.Gui
+  summary: Returns a Pos object tracks the Top (Y) position of the specified view.
+  syntax:
+    content: public static Terminal.Gui.Pos Y (Terminal.Gui.View view);
+    parameters:
+    - id: view
+      type: Terminal.Gui.View
+      description: The view that will be tracked.
+    return:
+      type: Terminal.Gui.Pos
+      description: The Position that depends on the other view.
+  overload: Terminal.Gui.Pos.Y*
+  exceptions: []
 references:
 - uid: System.Object
   parent: System
@@ -231,12 +386,30 @@ references:
   name: Int32
   nameWithType: Int32
   fullName: System.Int32
+- uid: Terminal.Gui.Pos.Bottom(Terminal.Gui.View)
+  parent: Terminal.Gui.Pos
+  isExternal: false
+  name: Bottom(View)
+  nameWithType: Pos.Bottom(View)
+  fullName: Pos.Bottom(View)
+- uid: Terminal.Gui.View
+  parent: Terminal.Gui
+  isExternal: false
+  name: View
+  nameWithType: View
+  fullName: Terminal.Gui.View
 - uid: Terminal.Gui.Pos.Center
   parent: Terminal.Gui.Pos
   isExternal: false
   name: Center()
   nameWithType: Pos.Center()
   fullName: Pos.Center()
+- uid: Terminal.Gui.Pos.Left(Terminal.Gui.View)
+  parent: Terminal.Gui.Pos
+  isExternal: false
+  name: Left(View)
+  nameWithType: Pos.Left(View)
+  fullName: Pos.Left(View)
 - uid: Terminal.Gui.Pos.op_Addition(Terminal.Gui.Pos,Terminal.Gui.Pos)
   parent: Terminal.Gui.Pos
   isExternal: false
@@ -267,6 +440,30 @@ references:
   name: Single
   nameWithType: Single
   fullName: System.Single
+- uid: Terminal.Gui.Pos.Right(Terminal.Gui.View)
+  parent: Terminal.Gui.Pos
+  isExternal: false
+  name: Right(View)
+  nameWithType: Pos.Right(View)
+  fullName: Pos.Right(View)
+- uid: Terminal.Gui.Pos.Top(Terminal.Gui.View)
+  parent: Terminal.Gui.Pos
+  isExternal: false
+  name: Top(View)
+  nameWithType: Pos.Top(View)
+  fullName: Pos.Top(View)
+- uid: Terminal.Gui.Pos.X(Terminal.Gui.View)
+  parent: Terminal.Gui.Pos
+  isExternal: false
+  name: X(View)
+  nameWithType: Pos.X(View)
+  fullName: Pos.X(View)
+- uid: Terminal.Gui.Pos.Y(Terminal.Gui.View)
+  parent: Terminal.Gui.Pos
+  isExternal: false
+  name: Y(View)
+  nameWithType: Pos.Y(View)
+  fullName: Pos.Y(View)
 - uid: Terminal.Gui.Pos.#ctor*
   parent: Terminal.Gui.Pos
   isExternal: false
@@ -279,12 +476,24 @@ references:
   name: AnchorEnd
   nameWithType: Pos.AnchorEnd
   fullName: Pos.AnchorEnd
+- uid: Terminal.Gui.Pos.Bottom*
+  parent: Terminal.Gui.Pos
+  isExternal: false
+  name: Bottom
+  nameWithType: Pos.Bottom
+  fullName: Pos.Bottom
 - uid: Terminal.Gui.Pos.Center*
   parent: Terminal.Gui.Pos
   isExternal: false
   name: Center
   nameWithType: Pos.Center
   fullName: Pos.Center
+- uid: Terminal.Gui.Pos.Left*
+  parent: Terminal.Gui.Pos
+  isExternal: false
+  name: Left
+  nameWithType: Pos.Left
+  fullName: Pos.Left
 - uid: Terminal.Gui.Pos.op_Addition*
   parent: Terminal.Gui.Pos
   isExternal: false
@@ -309,3 +518,27 @@ references:
   name: Percent
   nameWithType: Pos.Percent
   fullName: Pos.Percent
+- uid: Terminal.Gui.Pos.Right*
+  parent: Terminal.Gui.Pos
+  isExternal: false
+  name: Right
+  nameWithType: Pos.Right
+  fullName: Pos.Right
+- uid: Terminal.Gui.Pos.Top*
+  parent: Terminal.Gui.Pos
+  isExternal: false
+  name: Top
+  nameWithType: Pos.Top
+  fullName: Pos.Top
+- uid: Terminal.Gui.Pos.X*
+  parent: Terminal.Gui.Pos
+  isExternal: false
+  name: X
+  nameWithType: Pos.X
+  fullName: Pos.X
+- uid: Terminal.Gui.Pos.Y*
+  parent: Terminal.Gui.Pos
+  isExternal: false
+  name: Y
+  nameWithType: Pos.Y
+  fullName: Pos.Y

+ 7 - 0
docfx/articles/overview.md

@@ -182,6 +182,7 @@ The `Pos` type on `X` and `Y` offers a few options:
 * Percentage of the parent's view size - `Pos.Percent(n)`
 * Anchored from the end of the dimension - `AnchorEnd(int margin=0)`
 * Centered, using `Center()`
+* Reference the Left (X), Top (Y), Bottom, Right positions of another view
 
 The `Pos` values can be added or subtracted, like this:
 
@@ -193,6 +194,9 @@ view.Y = Pos.Percent (20);
 
 anotherView.X = AnchorEnd (10);
 anotherView.Width = 9;
+
+myView.X = Pos.X (view);
+myView.Y = Pos.Bottom (anotherView);
 ```
 
 ### The `Dim` Type
@@ -203,6 +207,7 @@ the following options:
 * Absolute size, by passing an integer
 * Percentage of the parent's view size - `Dim.Percent(n)`
 * Fill to the end - `Dim.Fill ()`
+* Reference the Width or Height of another view
 
 Like, `Pos`, objects of type `Dim` can be added an subtracted, like this:
 
@@ -213,6 +218,8 @@ Like, `Pos`, objects of type `Dim` can be added an subtracted, like this:
 view.Width = Dim.Fill () - 10;
 
 view.Height = Dim.Percent(20) - 1;
+
+anotherView.Height = Dim.Height (view)+1
 ```
 
 # TopLevels, Windows and Dialogs.

+ 90 - 0
docs/api/Terminal.Gui/Terminal.Gui.Dim.html

@@ -156,6 +156,51 @@
   </table>
   
   
+  <a id="Terminal_Gui_Dim_Height_" data-uid="Terminal.Gui.Dim.Height*"></a>
+  <h4 id="Terminal_Gui_Dim_Height_Terminal_Gui_View_" data-uid="Terminal.Gui.Dim.Height(Terminal.Gui.View)">Height(View)</h4>
+  <div class="markdown level1 summary"><p>Returns a Dim object tracks the Height of the specified view.</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static Terminal.Gui.Dim Height (Terminal.Gui.View view);</code></pre>
+  </div>
+  <h5 class="parameters">Parameters</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Name</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
+        <td><span class="parametername">view</span></td>
+        <td><p>The view that will be tracked.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  <h5 class="returns">Returns</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.Dim.html">Dim</a></td>
+        <td><p>The dimension of the other view.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  
+  
   <a id="Terminal_Gui_Dim_Percent_" data-uid="Terminal.Gui.Dim.Percent*"></a>
   <h4 id="Terminal_Gui_Dim_Percent_System_Single_" data-uid="Terminal.Gui.Dim.Percent(System.Single)">Percent(Single)</h4>
   <div class="markdown level1 summary"><p>Creates a percentage Dim object</p>
@@ -199,6 +244,51 @@
       </tr>
     </tbody>
   </table>
+  
+  
+  <a id="Terminal_Gui_Dim_Width_" data-uid="Terminal.Gui.Dim.Width*"></a>
+  <h4 id="Terminal_Gui_Dim_Width_Terminal_Gui_View_" data-uid="Terminal.Gui.Dim.Width(Terminal.Gui.View)">Width(View)</h4>
+  <div class="markdown level1 summary"><p>Returns a Dim object tracks the Width of the specified view.</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static Terminal.Gui.Dim Width (Terminal.Gui.View view);</code></pre>
+  </div>
+  <h5 class="parameters">Parameters</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Name</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
+        <td><span class="parametername">view</span></td>
+        <td><p>The view that will be tracked.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  <h5 class="returns">Returns</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.Dim.html">Dim</a></td>
+        <td><p>The dimension of the other view.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
   <h3 id="operators">Operators
   </h3>
   

+ 275 - 0
docs/api/Terminal.Gui/Terminal.Gui.Pos.html

@@ -99,6 +99,11 @@
                 integer value (via the implicit integer to Pos conversion), and they can be combined
                 to produce more useful layouts, like: Pos.Center - 3, which would shift the postion
                 of the view 3 characters to the left after centering for example.
+              </p>
+    <p>
+                It is possible to reference coordinates of another view by using the methods
+                Left(View), Right(View), Bottom(View), Top(View).   The X(View) and Y(View) are
+                aliases to Left(View) and Top(View) respectively.
               </p></div>
   <h3 id="constructors">Constructors
   </h3>
@@ -162,6 +167,51 @@
   </table>
   
   
+  <a id="Terminal_Gui_Pos_Bottom_" data-uid="Terminal.Gui.Pos.Bottom*"></a>
+  <h4 id="Terminal_Gui_Pos_Bottom_Terminal_Gui_View_" data-uid="Terminal.Gui.Pos.Bottom(Terminal.Gui.View)">Bottom(View)</h4>
+  <div class="markdown level1 summary"><p>Returns a Pos object tracks the Bottom (Y+Height) coordinate of the specified view.</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static Terminal.Gui.Pos Bottom (Terminal.Gui.View view);</code></pre>
+  </div>
+  <h5 class="parameters">Parameters</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Name</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
+        <td><span class="parametername">view</span></td>
+        <td><p>The view that will be tracked.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  <h5 class="returns">Returns</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.Pos.html">Pos</a></td>
+        <td><p>The Position that depends on the other view.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  
+  
   <a id="Terminal_Gui_Pos_Center_" data-uid="Terminal.Gui.Pos.Center*"></a>
   <h4 id="Terminal_Gui_Pos_Center" data-uid="Terminal.Gui.Pos.Center">Center()</h4>
   <div class="markdown level1 summary"><p>Returns a Pos object that can be used to center the views.</p>
@@ -189,6 +239,51 @@
   </table>
   
   
+  <a id="Terminal_Gui_Pos_Left_" data-uid="Terminal.Gui.Pos.Left*"></a>
+  <h4 id="Terminal_Gui_Pos_Left_Terminal_Gui_View_" data-uid="Terminal.Gui.Pos.Left(Terminal.Gui.View)">Left(View)</h4>
+  <div class="markdown level1 summary"><p>Returns a Pos object tracks the Left (X) position of the specified view.</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static Terminal.Gui.Pos Left (Terminal.Gui.View view);</code></pre>
+  </div>
+  <h5 class="parameters">Parameters</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Name</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
+        <td><span class="parametername">view</span></td>
+        <td><p>The view that will be tracked.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  <h5 class="returns">Returns</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.Pos.html">Pos</a></td>
+        <td><p>The Position that depends on the other view.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  
+  
   <a id="Terminal_Gui_Pos_Percent_" data-uid="Terminal.Gui.Pos.Percent*"></a>
   <h4 id="Terminal_Gui_Pos_Percent_System_Single_" data-uid="Terminal.Gui.Pos.Percent(System.Single)">Percent(Single)</h4>
   <div class="markdown level1 summary"><p>Creates a percentage Pos object</p>
@@ -232,6 +327,186 @@
       </tr>
     </tbody>
   </table>
+  
+  
+  <a id="Terminal_Gui_Pos_Right_" data-uid="Terminal.Gui.Pos.Right*"></a>
+  <h4 id="Terminal_Gui_Pos_Right_Terminal_Gui_View_" data-uid="Terminal.Gui.Pos.Right(Terminal.Gui.View)">Right(View)</h4>
+  <div class="markdown level1 summary"><p>Returns a Pos object tracks the Right (X+Width) coordinate of the specified view.</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static Terminal.Gui.Pos Right (Terminal.Gui.View view);</code></pre>
+  </div>
+  <h5 class="parameters">Parameters</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Name</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
+        <td><span class="parametername">view</span></td>
+        <td><p>The view that will be tracked.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  <h5 class="returns">Returns</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.Pos.html">Pos</a></td>
+        <td><p>The Position that depends on the other view.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  
+  
+  <a id="Terminal_Gui_Pos_Top_" data-uid="Terminal.Gui.Pos.Top*"></a>
+  <h4 id="Terminal_Gui_Pos_Top_Terminal_Gui_View_" data-uid="Terminal.Gui.Pos.Top(Terminal.Gui.View)">Top(View)</h4>
+  <div class="markdown level1 summary"><p>Returns a Pos object tracks the Top (Y) position of the specified view.</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static Terminal.Gui.Pos Top (Terminal.Gui.View view);</code></pre>
+  </div>
+  <h5 class="parameters">Parameters</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Name</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
+        <td><span class="parametername">view</span></td>
+        <td><p>The view that will be tracked.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  <h5 class="returns">Returns</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.Pos.html">Pos</a></td>
+        <td><p>The Position that depends on the other view.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  
+  
+  <a id="Terminal_Gui_Pos_X_" data-uid="Terminal.Gui.Pos.X*"></a>
+  <h4 id="Terminal_Gui_Pos_X_Terminal_Gui_View_" data-uid="Terminal.Gui.Pos.X(Terminal.Gui.View)">X(View)</h4>
+  <div class="markdown level1 summary"><p>Returns a Pos object tracks the Left (X) position of the specified view.</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static Terminal.Gui.Pos X (Terminal.Gui.View view);</code></pre>
+  </div>
+  <h5 class="parameters">Parameters</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Name</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
+        <td><span class="parametername">view</span></td>
+        <td><p>The view that will be tracked.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  <h5 class="returns">Returns</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.Pos.html">Pos</a></td>
+        <td><p>The Position that depends on the other view.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  
+  
+  <a id="Terminal_Gui_Pos_Y_" data-uid="Terminal.Gui.Pos.Y*"></a>
+  <h4 id="Terminal_Gui_Pos_Y_Terminal_Gui_View_" data-uid="Terminal.Gui.Pos.Y(Terminal.Gui.View)">Y(View)</h4>
+  <div class="markdown level1 summary"><p>Returns a Pos object tracks the Top (Y) position of the specified view.</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+  <h5 class="decalaration">Declaration</h5>
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static Terminal.Gui.Pos Y (Terminal.Gui.View view);</code></pre>
+  </div>
+  <h5 class="parameters">Parameters</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Name</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.View.html">View</a></td>
+        <td><span class="parametername">view</span></td>
+        <td><p>The view that will be tracked.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
+  <h5 class="returns">Returns</h5>
+  <table class="table table-bordered table-striped table-condensed">
+    <thead>
+      <tr>
+        <th>Type</th>
+        <th>Description</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a class="xref" href="Terminal.Gui.Pos.html">Pos</a></td>
+        <td><p>The Position that depends on the other view.</p>
+</td>
+      </tr>
+    </tbody>
+  </table>
   <h3 id="operators">Operators
   </h3>
   

+ 7 - 0
docs/articles/overview.html

@@ -204,6 +204,7 @@ var label2 = new Label (new Rect (1, 2, 20, 1), &quot;World&quot;)
 <li>Percentage of the parent&#39;s view size - <code>Pos.Percent(n)</code></li>
 <li>Anchored from the end of the dimension - <code>AnchorEnd(int margin=0)</code></li>
 <li>Centered, using <code>Center()</code></li>
+<li>Reference the Left (X), Top (Y), Bottom, Right positions of another view</li>
 </ul>
 <p>The <code>Pos</code> values can be added or subtracted, like this:</p>
 <pre><code class="lang-csharp">// Set the X coordinate to 10 characters left from the center
@@ -213,6 +214,9 @@ view.Y = Pos.Percent (20);
 
 anotherView.X = AnchorEnd (10);
 anotherView.Width = 9;
+
+myView.X = Pos.X (view);
+myView.Y = Pos.Bottom (anotherView);
 </code></pre><h3 id="the-dim-type">The <code>Dim</code> Type</h3>
 <p>The <code>Dim</code> type is used for the <code>Width</code> and <code>Height</code> properties on the View and offers
 the following options:</p>
@@ -220,6 +224,7 @@ the following options:</p>
 <li>Absolute size, by passing an integer</li>
 <li>Percentage of the parent&#39;s view size - <code>Dim.Percent(n)</code></li>
 <li>Fill to the end - <code>Dim.Fill ()</code></li>
+<li>Reference the Width or Height of another view</li>
 </ul>
 <p>Like, <code>Pos</code>, objects of type <code>Dim</code> can be added an subtracted, like this:</p>
 <pre><code class="lang-csharp">// Set the Width to be 10 characters less than filling 
@@ -227,6 +232,8 @@ the following options:</p>
 view.Width = Dim.Fill () - 10;
 
 view.Height = Dim.Percent(20) - 1;
+
+anotherView.Height = Dim.Height (view)+1
 </code></pre><h1 id="toplevels-windows-and-dialogs">TopLevels, Windows and Dialogs.</h1>
 <p>Among the many kinds of views, you typically will create a <a href="../api/Terminal.Gui/Terminal.Gui.Toplevel.html">Toplevel</a> view (or any of its subclasses,
 like <a href="../api/Terminal.Gui/Terminal.Gui.Window.html">Window</a> or <a href="../api/Terminal.Gui/Terminal.Gui.Dialog.html">Dialog</a> which is special kind of views

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
docs/manifest.json


+ 80 - 0
docs/xrefmap.yml

@@ -2106,6 +2106,16 @@ references:
   href: api/Terminal.Gui/Terminal.Gui.Dim.html#Terminal_Gui_Dim_Fill_
   fullName: Dim.Fill
   nameWithType: Dim.Fill
+- uid: Terminal.Gui.Dim.Height(Terminal.Gui.View)
+  name: Height(View)
+  href: api/Terminal.Gui/Terminal.Gui.Dim.html#Terminal_Gui_Dim_Height_Terminal_Gui_View_
+  fullName: Dim.Height(View)
+  nameWithType: Dim.Height(View)
+- uid: Terminal.Gui.Dim.Height*
+  name: Height
+  href: api/Terminal.Gui/Terminal.Gui.Dim.html#Terminal_Gui_Dim_Height_
+  fullName: Dim.Height
+  nameWithType: Dim.Height
 - uid: Terminal.Gui.Dim.op_Addition(Terminal.Gui.Dim,Terminal.Gui.Dim)
   name: op_Addition(Dim, Dim)
   href: api/Terminal.Gui/Terminal.Gui.Dim.html#Terminal_Gui_Dim_op_Addition_Terminal_Gui_Dim_Terminal_Gui_Dim_
@@ -2146,6 +2156,16 @@ references:
   href: api/Terminal.Gui/Terminal.Gui.Dim.html#Terminal_Gui_Dim_Percent_
   fullName: Dim.Percent
   nameWithType: Dim.Percent
+- uid: Terminal.Gui.Dim.Width(Terminal.Gui.View)
+  name: Width(View)
+  href: api/Terminal.Gui/Terminal.Gui.Dim.html#Terminal_Gui_Dim_Width_Terminal_Gui_View_
+  fullName: Dim.Width(View)
+  nameWithType: Dim.Width(View)
+- uid: Terminal.Gui.Dim.Width*
+  name: Width
+  href: api/Terminal.Gui/Terminal.Gui.Dim.html#Terminal_Gui_Dim_Width_
+  fullName: Dim.Width
+  nameWithType: Dim.Width
 - uid: Terminal.Gui.FileDialog
   name: FileDialog
   href: api/Terminal.Gui/Terminal.Gui.FileDialog.html
@@ -3506,6 +3526,16 @@ references:
   href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_AnchorEnd_
   fullName: Pos.AnchorEnd
   nameWithType: Pos.AnchorEnd
+- uid: Terminal.Gui.Pos.Bottom(Terminal.Gui.View)
+  name: Bottom(View)
+  href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_Bottom_Terminal_Gui_View_
+  fullName: Pos.Bottom(View)
+  nameWithType: Pos.Bottom(View)
+- uid: Terminal.Gui.Pos.Bottom*
+  name: Bottom
+  href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_Bottom_
+  fullName: Pos.Bottom
+  nameWithType: Pos.Bottom
 - uid: Terminal.Gui.Pos.Center
   name: Center()
   href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_Center
@@ -3516,6 +3546,16 @@ references:
   href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_Center_
   fullName: Pos.Center
   nameWithType: Pos.Center
+- uid: Terminal.Gui.Pos.Left(Terminal.Gui.View)
+  name: Left(View)
+  href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_Left_Terminal_Gui_View_
+  fullName: Pos.Left(View)
+  nameWithType: Pos.Left(View)
+- uid: Terminal.Gui.Pos.Left*
+  name: Left
+  href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_Left_
+  fullName: Pos.Left
+  nameWithType: Pos.Left
 - uid: Terminal.Gui.Pos.op_Addition(Terminal.Gui.Pos,Terminal.Gui.Pos)
   name: op_Addition(Pos, Pos)
   href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_op_Addition_Terminal_Gui_Pos_Terminal_Gui_Pos_
@@ -3556,6 +3596,46 @@ references:
   href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_Percent_
   fullName: Pos.Percent
   nameWithType: Pos.Percent
+- uid: Terminal.Gui.Pos.Right(Terminal.Gui.View)
+  name: Right(View)
+  href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_Right_Terminal_Gui_View_
+  fullName: Pos.Right(View)
+  nameWithType: Pos.Right(View)
+- uid: Terminal.Gui.Pos.Right*
+  name: Right
+  href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_Right_
+  fullName: Pos.Right
+  nameWithType: Pos.Right
+- uid: Terminal.Gui.Pos.Top(Terminal.Gui.View)
+  name: Top(View)
+  href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_Top_Terminal_Gui_View_
+  fullName: Pos.Top(View)
+  nameWithType: Pos.Top(View)
+- uid: Terminal.Gui.Pos.Top*
+  name: Top
+  href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_Top_
+  fullName: Pos.Top
+  nameWithType: Pos.Top
+- uid: Terminal.Gui.Pos.X(Terminal.Gui.View)
+  name: X(View)
+  href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_X_Terminal_Gui_View_
+  fullName: Pos.X(View)
+  nameWithType: Pos.X(View)
+- uid: Terminal.Gui.Pos.X*
+  name: X
+  href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_X_
+  fullName: Pos.X
+  nameWithType: Pos.X
+- uid: Terminal.Gui.Pos.Y(Terminal.Gui.View)
+  name: Y(View)
+  href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_Y_Terminal_Gui_View_
+  fullName: Pos.Y(View)
+  nameWithType: Pos.Y(View)
+- uid: Terminal.Gui.Pos.Y*
+  name: Y
+  href: api/Terminal.Gui/Terminal.Gui.Pos.html#Terminal_Gui_Pos_Y_
+  fullName: Pos.Y
+  nameWithType: Pos.Y
 - uid: Terminal.Gui.ProgressBar
   name: ProgressBar
   href: api/Terminal.Gui/Terminal.Gui.ProgressBar.html

+ 44 - 0
ecmadocs/en/Terminal.Gui/Dim.xml

@@ -59,6 +59,28 @@
         <remarks>To be added.</remarks>
       </Docs>
     </Member>
+    <Member MemberName="Height">
+      <MemberSignature Language="C#" Value="public static Terminal.Gui.Dim Height (Terminal.Gui.View view);" />
+      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Terminal.Gui.Dim Height(class Terminal.Gui.View view) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>1.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Terminal.Gui.Dim</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="view" Type="Terminal.Gui.View" />
+      </Parameters>
+      <Docs>
+        <param name="view">The view that will be tracked.</param>
+        <summary>
+            Returns a Dim object tracks the Height of the specified view.
+            </summary>
+        <returns>The dimension of the other view.</returns>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
     <Member MemberName="op_Addition">
       <MemberSignature Language="C#" Value="public static Terminal.Gui.Dim op_Addition (Terminal.Gui.Dim left, Terminal.Gui.Dim right);" />
       <MemberSignature Language="ILAsm" Value=".method public static hidebysig specialname class Terminal.Gui.Dim op_Addition(class Terminal.Gui.Dim left, class Terminal.Gui.Dim right) cil managed" />
@@ -151,5 +173,27 @@
         <remarks>To be added.</remarks>
       </Docs>
     </Member>
+    <Member MemberName="Width">
+      <MemberSignature Language="C#" Value="public static Terminal.Gui.Dim Width (Terminal.Gui.View view);" />
+      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Terminal.Gui.Dim Width(class Terminal.Gui.View view) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>1.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Terminal.Gui.Dim</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="view" Type="Terminal.Gui.View" />
+      </Parameters>
+      <Docs>
+        <param name="view">The view that will be tracked.</param>
+        <summary>
+            Returns a Dim object tracks the Width of the specified view.
+            </summary>
+        <returns>The dimension of the other view.</returns>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
   </Members>
 </Type>

+ 137 - 0
ecmadocs/en/Terminal.Gui/Pos.xml

@@ -27,6 +27,11 @@
                 to produce more useful layouts, like: Pos.Center - 3, which would shift the postion
                 of the view 3 characters to the left after centering for example.
               </para>
+      <para>
+                It is possible to reference coordinates of another view by using the methods
+                Left(View), Right(View), Bottom(View), Top(View).   The X(View) and Y(View) are
+                aliases to Left(View) and Top(View) respectively.
+              </para>
     </remarks>
   </Docs>
   <Members>
@@ -66,6 +71,28 @@
         <remarks>To be added.</remarks>
       </Docs>
     </Member>
+    <Member MemberName="Bottom">
+      <MemberSignature Language="C#" Value="public static Terminal.Gui.Pos Bottom (Terminal.Gui.View view);" />
+      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Terminal.Gui.Pos Bottom(class Terminal.Gui.View view) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>1.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Terminal.Gui.Pos</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="view" Type="Terminal.Gui.View" />
+      </Parameters>
+      <Docs>
+        <param name="view">The view that will be tracked.</param>
+        <summary>
+            Returns a Pos object tracks the Bottom (Y+Height) coordinate of the specified view.
+            </summary>
+        <returns>The Position that depends on the other view.</returns>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
     <Member MemberName="Center">
       <MemberSignature Language="C#" Value="public static Terminal.Gui.Pos Center ();" />
       <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Terminal.Gui.Pos Center() cil managed" />
@@ -85,6 +112,28 @@
         <remarks>To be added.</remarks>
       </Docs>
     </Member>
+    <Member MemberName="Left">
+      <MemberSignature Language="C#" Value="public static Terminal.Gui.Pos Left (Terminal.Gui.View view);" />
+      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Terminal.Gui.Pos Left(class Terminal.Gui.View view) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>1.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Terminal.Gui.Pos</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="view" Type="Terminal.Gui.View" />
+      </Parameters>
+      <Docs>
+        <param name="view">The view that will be tracked.</param>
+        <summary>
+            Returns a Pos object tracks the Left (X) position of the specified view.
+            </summary>
+        <returns>The Position that depends on the other view.</returns>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
     <Member MemberName="op_Addition">
       <MemberSignature Language="C#" Value="public static Terminal.Gui.Pos op_Addition (Terminal.Gui.Pos left, Terminal.Gui.Pos right);" />
       <MemberSignature Language="ILAsm" Value=".method public static hidebysig specialname class Terminal.Gui.Pos op_Addition(class Terminal.Gui.Pos left, class Terminal.Gui.Pos right) cil managed" />
@@ -177,5 +226,93 @@
         <remarks>To be added.</remarks>
       </Docs>
     </Member>
+    <Member MemberName="Right">
+      <MemberSignature Language="C#" Value="public static Terminal.Gui.Pos Right (Terminal.Gui.View view);" />
+      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Terminal.Gui.Pos Right(class Terminal.Gui.View view) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>1.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Terminal.Gui.Pos</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="view" Type="Terminal.Gui.View" />
+      </Parameters>
+      <Docs>
+        <param name="view">The view that will be tracked.</param>
+        <summary>
+            Returns a Pos object tracks the Right (X+Width) coordinate of the specified view.
+            </summary>
+        <returns>The Position that depends on the other view.</returns>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
+    <Member MemberName="Top">
+      <MemberSignature Language="C#" Value="public static Terminal.Gui.Pos Top (Terminal.Gui.View view);" />
+      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Terminal.Gui.Pos Top(class Terminal.Gui.View view) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>1.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Terminal.Gui.Pos</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="view" Type="Terminal.Gui.View" />
+      </Parameters>
+      <Docs>
+        <param name="view">The view that will be tracked.</param>
+        <summary>
+            Returns a Pos object tracks the Top (Y) position of the specified view.
+            </summary>
+        <returns>The Position that depends on the other view.</returns>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
+    <Member MemberName="X">
+      <MemberSignature Language="C#" Value="public static Terminal.Gui.Pos X (Terminal.Gui.View view);" />
+      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Terminal.Gui.Pos X(class Terminal.Gui.View view) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>1.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Terminal.Gui.Pos</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="view" Type="Terminal.Gui.View" />
+      </Parameters>
+      <Docs>
+        <param name="view">The view that will be tracked.</param>
+        <summary>
+            Returns a Pos object tracks the Left (X) position of the specified view.
+            </summary>
+        <returns>The Position that depends on the other view.</returns>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
+    <Member MemberName="Y">
+      <MemberSignature Language="C#" Value="public static Terminal.Gui.Pos Y (Terminal.Gui.View view);" />
+      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class Terminal.Gui.Pos Y(class Terminal.Gui.View view) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>1.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Terminal.Gui.Pos</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="view" Type="Terminal.Gui.View" />
+      </Parameters>
+      <Docs>
+        <param name="view">The view that will be tracked.</param>
+        <summary>
+            Returns a Pos object tracks the Top (Y) position of the specified view.
+            </summary>
+        <returns>The Position that depends on the other view.</returns>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
   </Members>
 </Type>

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä