diff --git a/app/Helpers/ToastForm.cs b/app/Helpers/ToastForm.cs index a96cc509..e6d298e9 100644 --- a/app/Helpers/ToastForm.cs +++ b/app/Helpers/ToastForm.cs @@ -1,4 +1,5 @@ -using System.Drawing.Drawing2D; +using System.Diagnostics; +using System.Drawing.Drawing2D; namespace GHelper.Helpers { @@ -134,6 +135,16 @@ namespace GHelper.Helpers } + public static void ReadText(string text) + { + ProcessStartInfo startInfo = new ProcessStartInfo(); + startInfo.FileName = "PowerShell.exe"; + startInfo.Arguments = $"-Command \"Add-Type -AssemblyName System.Speech; (New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak('{text}')\""; + startInfo.CreateNoWindow = true; + Process.Start(startInfo); + } + + public void RunToast(string text, ToastIcon? icon = null) { @@ -156,6 +167,14 @@ namespace GHelper.Helpers Show(); timer.Start(); + + //if (AppConfig.Is("narrator")) ReadText(text); + + Program.settingsForm.AccessibilityObject.RaiseAutomationNotification( + System.Windows.Forms.Automation.AutomationNotificationKind.ActionCompleted, + System.Windows.Forms.Automation.AutomationNotificationProcessing.MostRecent, + text); + }); } diff --git a/app/Program.cs b/app/Program.cs index c315888b..ecf1d2e7 100644 --- a/app/Program.cs +++ b/app/Program.cs @@ -266,7 +266,7 @@ namespace GHelper { // If helper window is not on top, this just focuses on the app again // Pressing the ghelper button again will hide the app - if (checkForFocus && !settingsForm.HasAnyFocus(trayClick)) + if (checkForFocus && !settingsForm.HasAnyFocus(trayClick) && !AppConfig.Is("topmost")) { settingsForm.ShowAll(); } diff --git a/app/Properties/Strings.fr.resx b/app/Properties/Strings.fr.resx index 18ac0b45..c5e50613 100644 --- a/app/Properties/Strings.fr.resx +++ b/app/Properties/Strings.fr.resx @@ -145,7 +145,7 @@ Redémarrer maintenant ? - Ally Controller + Contrôleur Ally Vitesse de l'animation @@ -253,10 +253,10 @@ Délai branché / sur batterie (0 - ON) - Backlight Timeout when on battery + Délai de rétro-éclairage sur batterie - Backlight Timeout when plugged + Délai de rétro-éclairage sur secteur Équilibré @@ -274,13 +274,13 @@ Charge unique à 100% - Binding + Liaison - Primary + Primaire - Secondary + Secondaire Mise à jour BIOS et pilotes @@ -310,10 +310,10 @@ Couleur - Contrast + Contraste - Controller + Contrôleur CPU Boost @@ -328,7 +328,7 @@ Par défaut - Disable Controller + Désactiver le contrôleur Désactiver l'overdrive de l'écran @@ -349,7 +349,7 @@ Éco - Enable GPU on shutdown (prevents issue with Eco mode) + Activer le GPU lors de l'arrêt (empêche les problèmes avec le mode Éco) Désactiver le dGPU en passant au mode Eco pendant que le mode d'affichage dans le panneau de configuration NVIDIA n'est pas réglé sur Optimus peut causer des problèmes avec les commandes de luminosité jusqu'au prochain redémarrage. @@ -363,7 +363,7 @@ Voulez-vous continuer ? Paramètres d'énergie - Export Profile + Exporter un profil + d'options @@ -438,10 +438,10 @@ Voulez-vous continuer ? Élevé - Image Rotation + Rotation de l'image - Import Profile + Importer un profil Raccourcis clavier @@ -477,10 +477,10 @@ Voulez-vous continuer ? Faible - Left Stick Deadzones + Stick gauche des zones mortes - Left Trigger Deadzones + Gâchette gauche des zones mortes Visualiseur Audio @@ -528,10 +528,10 @@ Voulez-vous continuer ? Arrêt automatique après - Button Response + Réponse du bouton - Import failed. Selected file is not a valid mouse profile or corrutpted. + Échec de l'importation. Le fichier sélectionné n'est pas un profil de souris valide ou corrompu. Lift Off Distance @@ -567,7 +567,7 @@ Voulez-vous continuer ? Non connecté - One Zone + Une zone Ouvrir G-Helper @@ -600,7 +600,7 @@ Voulez-vous continuer ? Lecture / Pause - Polling Rate + Fréquence d'interrogation Limites de puissance @@ -618,7 +618,7 @@ Voulez-vous continuer ? Quitter - Reset + Réinitialiser Un programme utilise le dGPU et empêche le passage en mode Éco. Laissez G-Helper tenter un redémarrage du dGPU dans le gestionnaire de tâches ? (Procéder à vos propres risques) @@ -627,16 +627,16 @@ Voulez-vous continuer ? RPM - Right Stick Deadzones + Stick droit des zones mortes - Right Trigger Deadzones + Gâchette droite des zones mortes Exécuter au démarrage - Scaling Quality + Qualité de Mise à l'échelle (Scaling) Baisser la luminosité du Screenpad @@ -717,7 +717,7 @@ Voulez-vous continuer ? Version - Vibration Strength + Intensité de la vibration Vol- diff --git a/app/Settings.cs b/app/Settings.cs index 2723a759..bbaec21c 100644 --- a/app/Settings.cs +++ b/app/Settings.cs @@ -1382,11 +1382,13 @@ namespace GHelper buttonEco.Activated = !GPUAuto; buttonOptimized.Activated = GPUAuto; labelGPU.Text = Properties.Strings.GPUMode + ": " + Properties.Strings.GPUModeEco; + panelGPU.AccessibleName = Properties.Strings.GPUMode + " - " + (GPUAuto ? Properties.Strings.Optimized : Properties.Strings.EcoMode); Program.trayIcon.Icon = Properties.Resources.eco; break; case AsusACPI.GPUModeUltimate: buttonUltimate.Activated = true; labelGPU.Text = Properties.Strings.GPUMode + ": " + Properties.Strings.GPUModeUltimate; + panelGPU.AccessibleName = Properties.Strings.GPUMode + " - " + Properties.Strings.UltimateMode; Program.trayIcon.Icon = Properties.Resources.ultimate; break; default: @@ -1394,10 +1396,13 @@ namespace GHelper buttonStandard.Activated = !GPUAuto; buttonOptimized.Activated = GPUAuto; labelGPU.Text = Properties.Strings.GPUMode + ": " + Properties.Strings.GPUModeStandard; + panelGPU.AccessibleName = Properties.Strings.GPUMode + " - " + (GPUAuto ? Properties.Strings.Optimized : Properties.Strings.StandardMode); Program.trayIcon.Icon = Properties.Resources.standard; break; } + + VisualizeXGM(GPUMode); if (isGpuSection) diff --git a/app/UI/RButton.cs b/app/UI/RButton.cs index d2b93d36..7284f8d0 100644 --- a/app/UI/RButton.cs +++ b/app/UI/RButton.cs @@ -4,6 +4,7 @@ namespace GHelper.UI { public class RButton : Button { + //Fields private int borderSize = 5; diff --git a/app/UI/RForm.cs b/app/UI/RForm.cs index 003f2937..2f203e01 100644 --- a/app/UI/RForm.cs +++ b/app/UI/RForm.cs @@ -28,7 +28,15 @@ namespace GHelper.UI private static extern int DwmSetWindowAttribute(nint hwnd, int attr, int[] attrValue, int attrSize); public bool darkTheme = false; - + protected override CreateParams CreateParams + { + get + { + var parms = base.CreateParams; + parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN + return parms; + } + } public static void InitColors(bool darkTheme) { if (darkTheme) @@ -98,8 +106,10 @@ namespace GHelper.UI { DwmSetWindowAttribute(Handle, 20, new[] { darkTheme ? 1 : 0 }, 4); ControlHelper.Adjust(this, changed); + this.Invalidate(); } + return changed; } diff --git a/app/Updates.Designer.cs b/app/Updates.Designer.cs index 8feb65b4..d72c08f5 100644 --- a/app/Updates.Designer.cs +++ b/app/Updates.Designer.cs @@ -126,7 +126,7 @@ namespace GHelper buttonRefresh.Name = "buttonRefresh"; buttonRefresh.Secondary = true; buttonRefresh.Size = new Size(52, 46); - buttonRefresh.TabIndex = 3; + buttonRefresh.TabIndex = 1; buttonRefresh.UseVisualStyleBackColor = false; // // panelBios diff --git a/app/Updates.cs b/app/Updates.cs index 7de7b532..428466e6 100644 --- a/app/Updates.cs +++ b/app/Updates.cs @@ -35,10 +35,15 @@ namespace GHelper (bios, model) = AppConfig.GetBiosAndModel(); + buttonRefresh.TabStop = false; + updatesCount = 0; labelUpdates.ForeColor = colorEco; labelUpdates.Text = Properties.Strings.NoNewUpdates; + panelBios.AccessibleRole = AccessibleRole.Grouping; + panelBios.AccessibleName = Properties.Strings.NoNewUpdates; + panelBios.TabStop = true; Text = Properties.Strings.BiosAndDriverUpdates + ": " + model + " " + bios; labelBIOS.Text = "BIOS"; @@ -121,12 +126,17 @@ namespace GHelper Invoke(delegate { string versionText = driver.version.Replace("latest version at the ", ""); - Label versionLabel = new Label { Text = versionText, Anchor = AnchorStyles.Left, AutoSize = true }; + LinkLabel versionLabel = new LinkLabel { Text = versionText, Anchor = AnchorStyles.Left, AutoSize = true }; + + versionLabel.AccessibleName = driver.title; + versionLabel.TabStop = true; + versionLabel.TabIndex = table.RowCount + 1; + versionLabel.Cursor = Cursors.Hand; versionLabel.Font = new Font(versionLabel.Font, FontStyle.Underline); - versionLabel.ForeColor = colorEco; + versionLabel.LinkColor = colorEco; versionLabel.Padding = new Padding(5, 5, 5, 5); - versionLabel.Click += delegate + versionLabel.LinkClicked += delegate { Process.Start(new ProcessStartInfo(driver.downloadUrl) { UseShellExecute = true }); }; @@ -152,18 +162,19 @@ namespace GHelper public void VisualiseNewDriver(int position, int newer, TableLayoutPanel table) { - var label = table.GetControlFromPosition(3, position) as Label; + var label = table.GetControlFromPosition(3, position) as LinkLabel; if (label != null) { Invoke(delegate { if (newer == DRIVER_NEWER) { + label.AccessibleName = label.AccessibleName + Properties.Strings.NewUpdates; label.Font = new Font(label.Font, FontStyle.Underline | FontStyle.Bold); - label.ForeColor = colorTurbo; + label.LinkColor = colorTurbo; } - if (newer == DRIVER_NOT_FOUND) label.ForeColor = Color.Gray; + if (newer == DRIVER_NOT_FOUND) label.LinkColor = Color.Gray; }); } @@ -176,6 +187,9 @@ namespace GHelper labelUpdates.Text = $"{Properties.Strings.NewUpdates}: {updatesCount}"; labelUpdates.ForeColor = colorTurbo; labelUpdates.Font = new Font(labelUpdates.Font, FontStyle.Bold); + + panelBios.AccessibleName = labelUpdates.Text; + }); }