Browse Source

Move some bugs to github issues, start of dialog

Miguel de Icaza 7 years ago
parent
commit
7447a81e52
5 changed files with 73 additions and 19 deletions
  1. 7 5
      Core.cs
  2. 7 13
      TODO.md
  3. 1 0
      Terminal.csproj
  4. 51 0
      Views/Dialog.cs
  5. 7 1
      demo.cs

+ 7 - 5
Core.cs

@@ -801,12 +801,14 @@ namespace Terminal {
 		/// </remarks>
 		/// </remarks>
 		static public event EventHandler Iteration;
 		static public event EventHandler Iteration;
 
 
-		public static void MakeFirstResponder (Responder newResponder)
+		/// <summary>
+		/// Returns a rectangle that is centered in the screen for the provided size.
+		/// </summary>
+		/// <returns>The centered rect.</returns>
+		/// <param name="size">Size for the rectangle.</param>
+		public static Rect MakeCenteredRect (Size size)
 		{
 		{
-			if (newResponder == null)
-				throw new ArgumentNullException ();
-
-			throw new NotImplementedException ();
+			return new Rect (new Point ((Driver.Cols - size.Width) / 2, (Driver.Rows - size.Height) / 2), size);
 		}
 		}
 
 
 		class MainLoopSyncContext : SynchronizationContext {
 		class MainLoopSyncContext : SynchronizationContext {

+ 7 - 13
TODO.md

@@ -44,6 +44,11 @@ Wanted:
 - Popup menus
 - Popup menus
 - Make windows draggable
 - Make windows draggable
 
 
+High-level widgets:
+- Time selector
+- Date selector
+- File selector
+- Masked input
 
 
 ## Layout manager
 ## Layout manager
 
 
@@ -64,21 +69,10 @@ characters everywhere
 For now it is split, in case we want to introduce formal view
 For now it is split, in case we want to introduce formal view
 controllers.  But the design becomes very ugly.
 controllers.  But the design becomes very ugly.
 
 
-# Bugs
-
-There is a problem with the high-intensity colors, they are not showing up
-
-Add resizing support (still needs layout as well)
-
-# Mouse support
-
-It is still pending.
-
-Should allow for views to be dragged, in particular Window should allow this
-
 # Mono-Curses
 # Mono-Curses
 
 
 The only missing feature in Mono-Curses that still relies on a native library
 The only missing feature in Mono-Curses that still relies on a native library
 is to fetch the OS SIGTSTP signal, we could hardcode this value if we had
 is to fetch the OS SIGTSTP signal, we could hardcode this value if we had
 a way of detecting the host operating system and architecture, and just hardcode
 a way of detecting the host operating system and architecture, and just hardcode
-the value based on this.
+the value based on this.
+

+ 1 - 0
Terminal.csproj

@@ -45,6 +45,7 @@
     <Compile Include="Views\Checkbox.cs" />
     <Compile Include="Views\Checkbox.cs" />
     <Compile Include="Views\Menu.cs" />
     <Compile Include="Views\Menu.cs" />
     <Compile Include="Views\ScrollView.cs" />
     <Compile Include="Views\ScrollView.cs" />
+    <Compile Include="Views\Dialog.cs" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
    <Reference Include="mono-curses.dll">
    <Reference Include="mono-curses.dll">

+ 51 - 0
Views/Dialog.cs

@@ -0,0 +1,51 @@
+//
+// Dialog.cs: Dialog box
+//
+// Authors:
+//   Miguel de Icaza ([email protected])
+//
+
+using System;
+using System.Collections.Generic;
+
+namespace Terminal {
+	/// <summary>
+	/// The dialog box is a window that by default is centered and contains one 
+	/// or more buttons.
+	/// </summary>
+	public class Dialog : Window {
+		List<Button> buttons = new List<Button> ();
+
+		public Dialog (string title, int width, int height, params Button [] buttons) : base (Application.MakeCenteredRect (new Size (width, height)))
+		{
+			foreach (var b in buttons) {
+				this.buttons.Add (b);
+				Add (b);
+			}
+		}
+
+		public override void LayoutSubviews ()
+		{
+			base.LayoutSubviews ();
+
+			int buttonSpace = 0;
+			int maxHeight = 0;
+
+			foreach (var b in buttons) {
+				buttonSpace += b.Frame.Width + 1;
+				maxHeight = Math.Max (maxHeight, b.Frame.Height);
+			}
+			const int borderWidth = 2;
+			var start = (Frame.Width-borderWidth - buttonSpace) / 2;
+
+			var y = Frame.Height - borderWidth - 2 - maxHeight;
+			foreach (var b in buttons) {
+				var bf = b.Frame;
+
+				b.Frame = new Rect (start, y, bf.Width, bf.Height);
+
+				start += bf.Width + 1;
+			}
+		}
+	}
+}

+ 7 - 1
demo.cs

@@ -24,6 +24,12 @@ class Demo {
 		);
 		);
 	}
 	}
 
 
+	static void NewFile ()
+	{
+		var d = new Dialog ("New File", 50, 20, new Button ("Ok"), new Button ("Cancel"));
+		Application.Run (d);
+	}
+
 	static void Main ()
 	static void Main ()
 	{
 	{
 		Application.Init ();
 		Application.Init ();
@@ -33,7 +39,7 @@ class Demo {
 		var win = new Window (new Rect (0, 1, tframe.Width, tframe.Height-1), "Hello");
 		var win = new Window (new Rect (0, 1, tframe.Width, tframe.Height-1), "Hello");
 		var menu = new MenuBar (new MenuBarItem [] {
 		var menu = new MenuBar (new MenuBarItem [] {
 			new MenuBarItem ("_File", new MenuItem [] {
 			new MenuBarItem ("_File", new MenuItem [] {
-				new MenuItem ("_New", "Creates new file", null),
+				new MenuItem ("_New", "Creates new file", NewFile),
 				new MenuItem ("_Open", "", null),
 				new MenuItem ("_Open", "", null),
 				new MenuItem ("_Close", "", null),
 				new MenuItem ("_Close", "", null),
 				new MenuItem ("_Quit", "", null)
 				new MenuItem ("_Quit", "", null)