// We use global using directives to simplify the code and avoid repetitive namespace declarations.
// Put them here so they are available throughout the application.
// Do not put them in AssemblyInfo.cs as it will break GitVersion's /updateassemblyinfo
global using Attribute = Terminal.Gui.Drawing.Attribute;
global using Color = Terminal.Gui.Drawing.Color;
global using CM = Terminal.Gui.Configuration.ConfigurationManager;
global using Terminal.Gui.App;
global using Terminal.Gui.Drivers;
global using Terminal.Gui.Input;
global using Terminal.Gui.Configuration;
global using Terminal.Gui.ViewBase;
global using Terminal.Gui.Views;
global using Terminal.Gui.Drawing;
global using Terminal.Gui.Text;
global using Terminal.Gui.Resources;
global using Terminal.Gui.FileServices;
using System.Globalization;
using System.Reflection;
using System.Resources;
namespace Terminal.Gui.App;
/// A static, singleton class representing the application. This class is the entry point for the application.
///
///
/// Application.Init();
/// var win = new Window()
/// {
/// Title = $"Example App ({Application.QuitKey} to quit)"
/// };
/// Application.Run(win);
/// win.Dispose();
/// Application.Shutdown();
///
///
///
public static partial class Application
{
///
/// Maximum number of iterations of the main loop (and hence draws)
/// to allow to occur per second. Defaults to > which is a 40ms sleep
/// after iteration (factoring in how long iteration took to run).
///
/// Note that not every iteration draws (see ).
/// Only affects v2 drivers.
///
///
public static ushort MaximumIterationsPerSecond = DefaultMaximumIterationsPerSecond;
///
/// Default value for
///
public const ushort DefaultMaximumIterationsPerSecond = 25;
/// Gets all cultures supported by the application without the invariant language.
public static List? SupportedCultures { get; private set; } = GetSupportedCultures ();
internal static List GetAvailableCulturesFromEmbeddedResources ()
{
ResourceManager rm = new (typeof (Strings));
CultureInfo [] cultures = CultureInfo.GetCultures (CultureTypes.AllCultures);
return cultures.Where (cultureInfo =>
!cultureInfo.Equals (CultureInfo.InvariantCulture)
&& rm.GetResourceSet (cultureInfo, true, false) is { }
)
.ToList ();
}
// BUGBUG: This does not return en-US even though it's supported by default
internal static List GetSupportedCultures ()
{
CultureInfo [] cultures = CultureInfo.GetCultures (CultureTypes.AllCultures);
// Get the assembly
var assembly = Assembly.GetExecutingAssembly ();
//Find the location of the assembly
string assemblyLocation = AppDomain.CurrentDomain.BaseDirectory;
// Find the resource file name of the assembly
var resourceFilename = $"{assembly.GetName ().Name}.resources.dll";
if (cultures.Length > 1 && Directory.Exists (Path.Combine (assemblyLocation, "pt-PT")))
{
// Return all culture for which satellite folder found with culture code.
return cultures.Where (cultureInfo =>
Directory.Exists (Path.Combine (assemblyLocation, cultureInfo.Name))
&& File.Exists (Path.Combine (assemblyLocation, cultureInfo.Name, resourceFilename))
)
.ToList ();
}
// It's called from a self-contained single-file and get available cultures from the embedded resources strings.
return GetAvailableCulturesFromEmbeddedResources ();
}
}