From edd7b9d080d4e49e202b4b4f23aaabfc4e03a656 Mon Sep 17 00:00:00 2001 From: Ylian Saint-Hilaire Date: Fri, 25 Jun 2021 14:02:37 -0700 Subject: [PATCH] Fixed multi-display switch when non-english language. --- KVMControl.cs | 18 ++--------- KVMViewer.cs | 82 +++++++++++++++++++++++++++++---------------------- Translate.cs | 11 +++++++ 3 files changed, 60 insertions(+), 51 deletions(-) diff --git a/KVMControl.cs b/KVMControl.cs index a449a6a..a191e66 100644 --- a/KVMControl.cs +++ b/KVMControl.cs @@ -41,7 +41,7 @@ namespace MeshCentralRouter private bool remoteKeyboardMap = false; private bool autoSendClipboard = false; private double scalefactor = 1; - public List displays = new List(); + public List displays = new List(); public ushort currentDisp = 0; public bool MouseButtonLeft = false; public bool MouseButtonMiddle = false; @@ -273,21 +273,7 @@ namespace MeshCentralRouter int i = 0; ushort length = (ushort)((buffer[off + 4] << 8) + buffer[off + 5]); displays.Clear(); - if (length > 0) - { - for (i = 0; i < length; i++) - { - ushort num = (ushort)((buffer[off + 6 + i * 2] << 8) + buffer[off + 7 + i * 2]); - if (num == 0xFFFF) - { - displays.Add(Translate.T(Properties.Resources.AllDisplays)); - } - else - { - displays.Add(string.Format(Translate.T(Properties.Resources.DisplayX), num)); - } - } - } + if (length > 0) { for (i = 0; i < length; i++) { displays.Add((ushort)((buffer[off + 6 + i * 2] << 8) + buffer[off + 7 + i * 2])); } } currentDisp = (ushort)((buffer[off + 6 + i * 2] << 8) + buffer[off + 7 + i * 2]); if (DisplaysReceived != null) DisplaysReceived(this, null); break; diff --git a/KVMViewer.cs b/KVMViewer.cs index 4ff1b9e..cc5c082 100644 --- a/KVMViewer.cs +++ b/KVMViewer.cs @@ -21,6 +21,7 @@ using System.Collections.Generic; using System.Security.Cryptography; using System.Web.Script.Serialization; using Microsoft.Win32; +using System.Threading; namespace MeshCentralRouter { @@ -40,6 +41,7 @@ namespace MeshCentralRouter public Dictionary userSessions = null; private string lastClipboardSent = null; private DateTime lastClipboardTime = DateTime.MinValue; + public string lang = Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName; // Stats public long bytesIn = 0; @@ -47,6 +49,15 @@ namespace MeshCentralRouter public long bytesOut = 0; public long bytesOutCompressed = 0; + public class displayTag + { + public ushort num; + public string name; + + public displayTag(ushort num, string name) { this.num = num; this.name = name; } + + public override string ToString() { return name; } + } public KVMViewer(MainForm parent, MeshCentralServer server, NodeClass node) { @@ -64,13 +75,13 @@ namespace MeshCentralRouter this.MouseWheel += MainForm_MouseWheel; parent.ClipboardChanged += Parent_ClipboardChanged; - mainToolTip.SetToolTip(connectButton, Translate.T(Properties.Resources.ToggleRemoteDesktopConnection)); - mainToolTip.SetToolTip(cadButton, Translate.T(Properties.Resources.SendCtrlAltDelToRemoteDevice)); - mainToolTip.SetToolTip(settingsButton, Translate.T(Properties.Resources.ChangeRemoteDesktopSettings)); - mainToolTip.SetToolTip(clipOutboundButton, Translate.T(Properties.Resources.PushLocaClipboardToRemoteDevice)); - mainToolTip.SetToolTip(clipInboundButton, Translate.T(Properties.Resources.PullClipboardFromRemoteDevice)); - mainToolTip.SetToolTip(zoomButton, Translate.T(Properties.Resources.ToggleZoomToFitMode)); - mainToolTip.SetToolTip(statsButton, Translate.T(Properties.Resources.DisplayConnectionStatistics)); + mainToolTip.SetToolTip(connectButton, Translate.T(Properties.Resources.ToggleRemoteDesktopConnection, lang)); + mainToolTip.SetToolTip(cadButton, Translate.T(Properties.Resources.SendCtrlAltDelToRemoteDevice, lang)); + mainToolTip.SetToolTip(settingsButton, Translate.T(Properties.Resources.ChangeRemoteDesktopSettings, lang)); + mainToolTip.SetToolTip(clipOutboundButton, Translate.T(Properties.Resources.PushLocaClipboardToRemoteDevice, lang)); + mainToolTip.SetToolTip(clipInboundButton, Translate.T(Properties.Resources.PullClipboardFromRemoteDevice, lang)); + mainToolTip.SetToolTip(zoomButton, Translate.T(Properties.Resources.ToggleZoomToFitMode, lang)); + mainToolTip.SetToolTip(statsButton, Translate.T(Properties.Resources.DisplayConnectionStatistics, lang)); kvmControl.AutoSendClipboard = Settings.GetRegValue("kvmAutoClipboard", "0").Equals("1"); } @@ -264,11 +275,11 @@ namespace MeshCentralRouter int msgid = -1; if ((jsonAction.ContainsKey("msg")) && (jsonAction["msg"] != null)) { msg = jsonAction["msg"].ToString(); } if (jsonAction.ContainsKey("msgid")) { msgid = (int)jsonAction["msgid"]; } - if (msgid == 1) { msg = Translate.T(Properties.Resources.WaitingForUserToGrantAccess); } - if (msgid == 2) { msg = Translate.T(Properties.Resources.Denied); } - if (msgid == 3) { msg = Translate.T(Properties.Resources.FailedToStartRemoteDesktopSession); } - if (msgid == 4) { msg = Translate.T(Properties.Resources.Timeout); } - if (msgid == 5) { msg = Translate.T(Properties.Resources.ReceivedInvalidNetworkData); } + if (msgid == 1) { msg = Translate.T(Properties.Resources.WaitingForUserToGrantAccess, lang); } + if (msgid == 2) { msg = Translate.T(Properties.Resources.Denied, lang); } + if (msgid == 3) { msg = Translate.T(Properties.Resources.FailedToStartRemoteDesktopSession, lang); } + if (msgid == 4) { msg = Translate.T(Properties.Resources.Timeout, lang); } + if (msgid == 5) { msg = Translate.T(Properties.Resources.ReceivedInvalidNetworkData, lang); } displayMessage(msg); break; } @@ -315,32 +326,32 @@ namespace MeshCentralRouter switch (state) { case 0: // Disconnected - mainToolStripStatusLabel.Text = Translate.T(Properties.Resources.Disconnected); + mainToolStripStatusLabel.Text = Translate.T(Properties.Resources.Disconnected, lang); displaySelectComboBox.Visible = false; kvmControl.Visible = false; kvmControl.screenWidth = 0; kvmControl.screenHeight = 0; - connectButton.Text = Translate.T(Properties.Resources.Connect); + connectButton.Text = Translate.T(Properties.Resources.Connect, lang); break; case 1: // Connecting - mainToolStripStatusLabel.Text = Translate.T(Properties.Resources.Connecting); + mainToolStripStatusLabel.Text = Translate.T(Properties.Resources.Connecting, lang); displaySelectComboBox.Visible = false; kvmControl.Visible = false; - connectButton.Text = Translate.T(Properties.Resources.Disconnect); + connectButton.Text = Translate.T(Properties.Resources.Disconnect, lang); break; case 2: // Setup mainToolStripStatusLabel.Text = "Setup..."; displaySelectComboBox.Visible = false; kvmControl.Visible = false; - connectButton.Text = Translate.T(Properties.Resources.Disconnect); + connectButton.Text = Translate.T(Properties.Resources.Disconnect, lang); break; case 3: // Connected - string label = Translate.T(Properties.Resources.Connected); - if (sessionIsRecorded) { label += Translate.T(Properties.Resources.RecordedSession); } - if ((userSessions != null) && (userSessions.Count > 1)) { label += string.Format(Translate.T(Properties.Resources.AddXUsers), userSessions.Count); } + string label = Translate.T(Properties.Resources.Connected, lang); + if (sessionIsRecorded) { label += Translate.T(Properties.Resources.RecordedSession, lang); } + if ((userSessions != null) && (userSessions.Count > 1)) { label += string.Format(Translate.T(Properties.Resources.AddXUsers, lang), userSessions.Count); } label += "."; mainToolStripStatusLabel.Text = label; - connectButton.Text = Translate.T(Properties.Resources.Disconnect); + connectButton.Text = Translate.T(Properties.Resources.Disconnect, lang); kvmControl.SendCompressionLevel(); break; } @@ -442,14 +453,21 @@ namespace MeshCentralRouter { displaySelectComboBox.Visible = true; displaySelectComboBox.Items.Clear(); - displaySelectComboBox.Items.AddRange(kvmControl.displays.ToArray()); - if (kvmControl.currentDisp == 0xFFFF) + foreach (ushort displayNum in kvmControl.displays) { - displaySelectComboBox.SelectedItem = Translate.T(Properties.Resources.AllDisplays); - } - else - { - displaySelectComboBox.SelectedItem = string.Format(Translate.T(Properties.Resources.DisplayX), kvmControl.currentDisp); + displayTag t; + if (displayNum == 0xFFFF) + { + t = new displayTag(displayNum, Translate.T(Properties.Resources.AllDisplays, lang)); + displaySelectComboBox.Items.Add(t); + } + else + { + t = new displayTag(displayNum, string.Format(Translate.T(Properties.Resources.DisplayX, lang), displayNum)); + displaySelectComboBox.Items.Add(t); + } + + if (kvmControl.currentDisp == displayNum) { displaySelectComboBox.SelectedItem = t; } } } else @@ -461,13 +479,7 @@ namespace MeshCentralRouter private void displaySelectComboBox_SelectionChangeCommitted(object sender, EventArgs e) { - string displayText = displaySelectComboBox.SelectedItem.ToString(); - int displaynum = 0; - if (displayText == Translate.T(Properties.Resources.AllDisplays)) displaynum = 0xFFFF; - if (displaynum != 0 || int.TryParse(displayText.Substring(8), out displaynum)) - { - if (kvmControl != null) kvmControl.SendDisplay(displaynum); - } + if (kvmControl != null) kvmControl.SendDisplay(((displayTag)displaySelectComboBox.SelectedItem).num); } private void resizeKvmControl_TouchEnabledChanged(object sender, EventArgs e) diff --git a/Translate.cs b/Translate.cs index 37d9ae7..ec4480d 100644 --- a/Translate.cs +++ b/Translate.cs @@ -2847,6 +2847,17 @@ namespace MeshCentralRouter return english; } + static public string T(string english, string lang) + { + if (lang == "en") return english; + if (translationTable.ContainsKey(english)) + { + Dictionary translations = translationTable[english]; + if (translations.ContainsKey(lang)) return translations[lang]; + } + return english; + } + static public void TranslateControl(Control control) { control.Text = T(control.Text);