Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 41 additions & 60 deletions Example/Example.cs
Original file line number Diff line number Diff line change
@@ -1,76 +1,57 @@
// A simple Terminal.Gui example in C# - using C# 9.0 Top-level statements
// This is the same code found in the Termiminal Gui README.md file.
// This is a simple example application. For the full range of functionality
// see the UICatalog project

using Terminal.Gui;
using NStack;

Application.Init ();
// A simple Terminal.Gui example in C# - using C# 9.0 Top-level statements

// Creates the top-level window to show
var win = new Window ("Example App") {
X = 0,
Y = 1, // Leave one row for the toplevel menu
using Terminal.Gui;

// By using Dim.Fill(), this Window will automatically resize without manual intervention
Width = Dim.Fill (),
Height = Dim.Fill ()
};
// Initialize the console
Application.Init();

Application.Top.Add (win);
// Creates the top-level window with border and title
var win = new Window("Example App (Ctrl+Q to quit)");

// Creates a menubar, the item "New" has a help menu.
var menu = new MenuBar (new MenuBarItem [] {
new MenuBarItem ("_File", new MenuItem [] {
new MenuItem ("_New", "Creates a new file", null),
new MenuItem ("_Close", "",null),
new MenuItem ("_Quit", "", () => { if (Quit ()) Application.Top.Running = false; })
}),
new MenuBarItem ("_Edit", new MenuItem [] {
new MenuItem ("_Copy", "", null),
new MenuItem ("C_ut", "", null),
new MenuItem ("_Paste", "", null)
})
});
Application.Top.Add (menu);
// Create input components and labels

static bool Quit ()
var usernameLabel = new Label("Username:");
var usernameText = new TextField("")
{
var n = MessageBox.Query (50, 7, "Quit Example", "Are you sure you want to quit this example?", "Yes", "No");
return n == 0;
}
// Position text field adjacent to label
X = Pos.Right(usernameLabel) + 1,

var login = new Label ("Login: ") { X = 3, Y = 2 };
var password = new Label ("Password: ") {
X = Pos.Left (login),
Y = Pos.Top (login) + 1
// Fill remaining horizontal space with a margin of 1
Width = Dim.Fill(1),
};
var loginText = new TextField ("") {
X = Pos.Right (password),
Y = Pos.Top (login),
Width = 40

var passwordLabel = new Label(0,2,"Password:");
var passwordText = new TextField("")
{
Secret = true,
// align with the text box above
X = Pos.Left(usernameText),
Y = 2,
Width = Dim.Fill(1),
};
var passText = new TextField ("") {
Secret = true,
X = Pos.Left (loginText),
Y = Pos.Top (password),
Width = Dim.Width (loginText)

// Create login button
var btnLogin = new Button("Login")
{
Y = 4,
// center the login button horizontally
X = Pos.Center(),
IsDefault = true,
};

// Add the views to the main window,
win.Add (
// Using Computed Layout:
login, password, loginText, passText,
// When login button is clicked display a message popup
btnLogin.Clicked += () => MessageBox.Query("Logging In", "Login Successful", "Ok");

// Using Absolute Layout:
new CheckBox (3, 6, "Remember me"),
new RadioGroup (3, 8, new ustring [] { "_Personal", "_Company" }, 0),
new Button (3, 14, "Ok"),
new Button (10, 14, "Cancel"),
new Label (3, 18, "Press F9 or ESC plus 9 to activate the menubar")
// Add all the views to the window
win.Add(
usernameLabel, usernameText, passwordLabel, passwordText,btnLogin
);

// Run blocks until the user quits the application
Application.Run ();
// Show the application
Application.Run(win);

// Always bracket Application.Init with .Shutdown.
Application.Shutdown ();
// After the application exits, release and reset console for clean shutdown
Application.Shutdown();
2 changes: 2 additions & 0 deletions Example/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ This example shows how to use the Terminal.Gui library to create a simple GUI ap

This is the same code found in the Terminal.Gui README.md file.

To explore the full range of functionality in Terminal.Gui, see the [UICatalog](../UICatalog) project

See [README.md](https://github.com/gui-cs/Terminal.Gui) for a list of all Terminal.Gui samples.

Note, the old `demo.cs` example has been deleted because it was not a very good example. It can still be found in the [git history](https://github.com/gui-cs/Terminal.Gui/tree/v1.8.2).
119 changes: 45 additions & 74 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,99 +61,70 @@ See the [`Terminal.Gui/` README](https://github.com/gui-cs/Terminal.Gui/tree/mas

## Sample Usage in C#

The following example shows a basic Terminal.Gui application written in C#:

```csharp
// A simple Terminal.Gui example in C# - using C# 9.0 Top-level statements

using Terminal.Gui;
using NStack;

Application.Init ();
// Initialize the console
Application.Init();

// Creates the top-level window to show
var win = new Window ("Example App") {
X = 0,
Y = 1, // Leave one row for the toplevel menu
// Creates the top-level window with border and title
var win = new Window("Example App (Ctrl+Q to quit)");

// By using Dim.Fill(), this Window will automatically resize without manual intervention
Width = Dim.Fill (),
Height = Dim.Fill ()
};
// Create input components and labels

Application.Top.Add (win);

// Creates a menubar, the item "New" has a help menu.
var menu = new MenuBar (new MenuBarItem [] {
new MenuBarItem ("_File", new MenuItem [] {
new MenuItem ("_New", "Creates a new file", null),
new MenuItem ("_Close", "",null),
new MenuItem ("_Quit", "", () => { if (Quit ()) Application.Top.Running = false; })
}),
new MenuBarItem ("_Edit", new MenuItem [] {
new MenuItem ("_Copy", "", null),
new MenuItem ("C_ut", "", null),
new MenuItem ("_Paste", "", null)
})
});
Application.Top.Add (menu);

static bool Quit ()
var usernameLabel = new Label("Username:");
var usernameText = new TextField("")
{
var n = MessageBox.Query (50, 7, "Quit Example", "Are you sure you want to quit this example?", "Yes", "No");
return n == 0;
}

var login = new Label ("Login: ") { X = 3, Y = 2 };
var password = new Label ("Password: ") {
X = Pos.Left (login),
Y = Pos.Top (login) + 1
// Position text field adjacent to label
X = Pos.Right(usernameLabel) + 1,

// Fill remaining horizontal space with a margin of 1
Width = Dim.Fill(1),
};
var loginText = new TextField ("") {
X = Pos.Right (password),
Y = Pos.Top (login),
Width = 40

var passwordLabel = new Label(0,2,"Password:");
var passwordText = new TextField("")
{
Secret = true,
// align with the text box above
X = Pos.Left(usernameText),
Y = 2,
Width = Dim.Fill(1),
};
var passText = new TextField ("") {
Secret = true,
X = Pos.Left (loginText),
Y = Pos.Top (password),
Width = Dim.Width (loginText)

// Create login button
var btnLogin = new Button("Login")
{
Y = 4,
// center the login button horizontally
X = Pos.Center(),
IsDefault = true,
};

// Add the views to the main window,
win.Add (
// Using Computed Layout:
login, password, loginText, passText,

// Using Absolute Layout:
new CheckBox (3, 6, "Remember me"),
new RadioGroup (3, 8, new ustring [] { "_Personal", "_Company" }, 0),
new Button (3, 14, "Ok"),
new Button (10, 14, "Cancel"),
new Label (3, 18, "Press F9 or ESC plus 9 to activate the menubar")
// When login button is clicked display a message popup
btnLogin.Clicked += () => MessageBox.Query("Logging In", "Login Successful", "Ok");

// Add all the views to the window
win.Add(
usernameLabel, usernameText, passwordLabel, passwordText,btnLogin
);

// Run blocks until the user quits the application
Application.Run ();
// Show the application
Application.Run(win);

// Always bracket Application.Init with .Shutdown.
Application.Shutdown ();
// After the application exits, release and reset console for clean shutdown
Application.Shutdown();
```

The example above shows adding views using both styles of layout supported by **Terminal.Gui**: **Absolute layout** and **[Computed layout](https://gui-cs.github.io/Terminal.Gui/articles/overview.html#layout)**.

Alternatively, you can encapsulate the app behavior in a new `Window`-derived class, say `App.cs` containing the code above, and simplify your `Main` method to:
When run the application looks as follows:

```csharp
using Terminal.Gui;
![Simple Usage app](./docfx/images/Example.png)

class Demo {
static void Main ()
{
Application.Run<App> ();
Application.Shutdown ();
}
}
```
_Sample application running_

## Installing

Expand Down Expand Up @@ -184,4 +155,4 @@ Debates on architecture and design can be found in Issues tagged with [design](h

## History

See [gui-cs](https://github.com/gui-cs/) for how this project came to be.
See [gui-cs](https://github.com/gui-cs/) for how this project came to be.
Binary file added docfx/images/Example.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.