| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- // 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;
- /// <summary>A static, singleton class representing the application. This class is the entry point for the application.</summary>
- /// <example>
- /// <code>
- /// Application.Init();
- /// var win = new Window()
- /// {
- /// Title = $"Example App ({Application.QuitKey} to quit)"
- /// };
- /// Application.Run(win);
- /// win.Dispose();
- /// Application.Shutdown();
- /// </code>
- /// </example>
- /// <remarks></remarks>
- public static partial class Application
- {
- /// <summary>
- /// Maximum number of iterations of the main loop (and hence draws)
- /// to allow to occur per second. Defaults to <see cref="DefaultMaximumIterationsPerSecond"/>> which is a 40ms sleep
- /// after iteration (factoring in how long iteration took to run).
- /// <remarks>
- /// Note that not every iteration draws (see <see cref="View.NeedsDraw"/>).
- /// Only affects v2 drivers.
- /// </remarks>
- /// </summary>
- public static ushort MaximumIterationsPerSecond = DefaultMaximumIterationsPerSecond;
- /// <summary>
- /// Default value for <see cref="MaximumIterationsPerSecond"/>
- /// </summary>
- public const ushort DefaultMaximumIterationsPerSecond = 25;
- /// <summary>Gets all cultures supported by the application without the invariant language.</summary>
- public static List<CultureInfo>? SupportedCultures { get; private set; } = GetSupportedCultures ();
- internal static List<CultureInfo> 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<CultureInfo> 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 ();
- }
- }
|