mirror of
https://github.com/Ylianst/MeshCentralRouter
synced 2025-12-10 13:23:49 +00:00
Fixed multi-display switch when non-english language.
This commit is contained in:
@@ -41,7 +41,7 @@ namespace MeshCentralRouter
|
|||||||
private bool remoteKeyboardMap = false;
|
private bool remoteKeyboardMap = false;
|
||||||
private bool autoSendClipboard = false;
|
private bool autoSendClipboard = false;
|
||||||
private double scalefactor = 1;
|
private double scalefactor = 1;
|
||||||
public List<string> displays = new List<string>();
|
public List<ushort> displays = new List<ushort>();
|
||||||
public ushort currentDisp = 0;
|
public ushort currentDisp = 0;
|
||||||
public bool MouseButtonLeft = false;
|
public bool MouseButtonLeft = false;
|
||||||
public bool MouseButtonMiddle = false;
|
public bool MouseButtonMiddle = false;
|
||||||
@@ -273,21 +273,7 @@ namespace MeshCentralRouter
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
ushort length = (ushort)((buffer[off + 4] << 8) + buffer[off + 5]);
|
ushort length = (ushort)((buffer[off + 4] << 8) + buffer[off + 5]);
|
||||||
displays.Clear();
|
displays.Clear();
|
||||||
if (length > 0)
|
if (length > 0) { for (i = 0; i < length; i++) { displays.Add((ushort)((buffer[off + 6 + i * 2] << 8) + buffer[off + 7 + i * 2])); } }
|
||||||
{
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
currentDisp = (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);
|
if (DisplaysReceived != null) DisplaysReceived(this, null);
|
||||||
break;
|
break;
|
||||||
|
|||||||
76
KVMViewer.cs
76
KVMViewer.cs
@@ -21,6 +21,7 @@ using System.Collections.Generic;
|
|||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Web.Script.Serialization;
|
using System.Web.Script.Serialization;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace MeshCentralRouter
|
namespace MeshCentralRouter
|
||||||
{
|
{
|
||||||
@@ -40,6 +41,7 @@ namespace MeshCentralRouter
|
|||||||
public Dictionary<string, int> userSessions = null;
|
public Dictionary<string, int> userSessions = null;
|
||||||
private string lastClipboardSent = null;
|
private string lastClipboardSent = null;
|
||||||
private DateTime lastClipboardTime = DateTime.MinValue;
|
private DateTime lastClipboardTime = DateTime.MinValue;
|
||||||
|
public string lang = Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName;
|
||||||
|
|
||||||
// Stats
|
// Stats
|
||||||
public long bytesIn = 0;
|
public long bytesIn = 0;
|
||||||
@@ -47,6 +49,15 @@ namespace MeshCentralRouter
|
|||||||
public long bytesOut = 0;
|
public long bytesOut = 0;
|
||||||
public long bytesOutCompressed = 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)
|
public KVMViewer(MainForm parent, MeshCentralServer server, NodeClass node)
|
||||||
{
|
{
|
||||||
@@ -64,13 +75,13 @@ namespace MeshCentralRouter
|
|||||||
this.MouseWheel += MainForm_MouseWheel;
|
this.MouseWheel += MainForm_MouseWheel;
|
||||||
parent.ClipboardChanged += Parent_ClipboardChanged;
|
parent.ClipboardChanged += Parent_ClipboardChanged;
|
||||||
|
|
||||||
mainToolTip.SetToolTip(connectButton, Translate.T(Properties.Resources.ToggleRemoteDesktopConnection));
|
mainToolTip.SetToolTip(connectButton, Translate.T(Properties.Resources.ToggleRemoteDesktopConnection, lang));
|
||||||
mainToolTip.SetToolTip(cadButton, Translate.T(Properties.Resources.SendCtrlAltDelToRemoteDevice));
|
mainToolTip.SetToolTip(cadButton, Translate.T(Properties.Resources.SendCtrlAltDelToRemoteDevice, lang));
|
||||||
mainToolTip.SetToolTip(settingsButton, Translate.T(Properties.Resources.ChangeRemoteDesktopSettings));
|
mainToolTip.SetToolTip(settingsButton, Translate.T(Properties.Resources.ChangeRemoteDesktopSettings, lang));
|
||||||
mainToolTip.SetToolTip(clipOutboundButton, Translate.T(Properties.Resources.PushLocaClipboardToRemoteDevice));
|
mainToolTip.SetToolTip(clipOutboundButton, Translate.T(Properties.Resources.PushLocaClipboardToRemoteDevice, lang));
|
||||||
mainToolTip.SetToolTip(clipInboundButton, Translate.T(Properties.Resources.PullClipboardFromRemoteDevice));
|
mainToolTip.SetToolTip(clipInboundButton, Translate.T(Properties.Resources.PullClipboardFromRemoteDevice, lang));
|
||||||
mainToolTip.SetToolTip(zoomButton, Translate.T(Properties.Resources.ToggleZoomToFitMode));
|
mainToolTip.SetToolTip(zoomButton, Translate.T(Properties.Resources.ToggleZoomToFitMode, lang));
|
||||||
mainToolTip.SetToolTip(statsButton, Translate.T(Properties.Resources.DisplayConnectionStatistics));
|
mainToolTip.SetToolTip(statsButton, Translate.T(Properties.Resources.DisplayConnectionStatistics, lang));
|
||||||
kvmControl.AutoSendClipboard = Settings.GetRegValue("kvmAutoClipboard", "0").Equals("1");
|
kvmControl.AutoSendClipboard = Settings.GetRegValue("kvmAutoClipboard", "0").Equals("1");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,11 +275,11 @@ namespace MeshCentralRouter
|
|||||||
int msgid = -1;
|
int msgid = -1;
|
||||||
if ((jsonAction.ContainsKey("msg")) && (jsonAction["msg"] != null)) { msg = jsonAction["msg"].ToString(); }
|
if ((jsonAction.ContainsKey("msg")) && (jsonAction["msg"] != null)) { msg = jsonAction["msg"].ToString(); }
|
||||||
if (jsonAction.ContainsKey("msgid")) { msgid = (int)jsonAction["msgid"]; }
|
if (jsonAction.ContainsKey("msgid")) { msgid = (int)jsonAction["msgid"]; }
|
||||||
if (msgid == 1) { msg = Translate.T(Properties.Resources.WaitingForUserToGrantAccess); }
|
if (msgid == 1) { msg = Translate.T(Properties.Resources.WaitingForUserToGrantAccess, lang); }
|
||||||
if (msgid == 2) { msg = Translate.T(Properties.Resources.Denied); }
|
if (msgid == 2) { msg = Translate.T(Properties.Resources.Denied, lang); }
|
||||||
if (msgid == 3) { msg = Translate.T(Properties.Resources.FailedToStartRemoteDesktopSession); }
|
if (msgid == 3) { msg = Translate.T(Properties.Resources.FailedToStartRemoteDesktopSession, lang); }
|
||||||
if (msgid == 4) { msg = Translate.T(Properties.Resources.Timeout); }
|
if (msgid == 4) { msg = Translate.T(Properties.Resources.Timeout, lang); }
|
||||||
if (msgid == 5) { msg = Translate.T(Properties.Resources.ReceivedInvalidNetworkData); }
|
if (msgid == 5) { msg = Translate.T(Properties.Resources.ReceivedInvalidNetworkData, lang); }
|
||||||
displayMessage(msg);
|
displayMessage(msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -315,32 +326,32 @@ namespace MeshCentralRouter
|
|||||||
switch (state)
|
switch (state)
|
||||||
{
|
{
|
||||||
case 0: // Disconnected
|
case 0: // Disconnected
|
||||||
mainToolStripStatusLabel.Text = Translate.T(Properties.Resources.Disconnected);
|
mainToolStripStatusLabel.Text = Translate.T(Properties.Resources.Disconnected, lang);
|
||||||
displaySelectComboBox.Visible = false;
|
displaySelectComboBox.Visible = false;
|
||||||
kvmControl.Visible = false;
|
kvmControl.Visible = false;
|
||||||
kvmControl.screenWidth = 0;
|
kvmControl.screenWidth = 0;
|
||||||
kvmControl.screenHeight = 0;
|
kvmControl.screenHeight = 0;
|
||||||
connectButton.Text = Translate.T(Properties.Resources.Connect);
|
connectButton.Text = Translate.T(Properties.Resources.Connect, lang);
|
||||||
break;
|
break;
|
||||||
case 1: // Connecting
|
case 1: // Connecting
|
||||||
mainToolStripStatusLabel.Text = Translate.T(Properties.Resources.Connecting);
|
mainToolStripStatusLabel.Text = Translate.T(Properties.Resources.Connecting, lang);
|
||||||
displaySelectComboBox.Visible = false;
|
displaySelectComboBox.Visible = false;
|
||||||
kvmControl.Visible = false;
|
kvmControl.Visible = false;
|
||||||
connectButton.Text = Translate.T(Properties.Resources.Disconnect);
|
connectButton.Text = Translate.T(Properties.Resources.Disconnect, lang);
|
||||||
break;
|
break;
|
||||||
case 2: // Setup
|
case 2: // Setup
|
||||||
mainToolStripStatusLabel.Text = "Setup...";
|
mainToolStripStatusLabel.Text = "Setup...";
|
||||||
displaySelectComboBox.Visible = false;
|
displaySelectComboBox.Visible = false;
|
||||||
kvmControl.Visible = false;
|
kvmControl.Visible = false;
|
||||||
connectButton.Text = Translate.T(Properties.Resources.Disconnect);
|
connectButton.Text = Translate.T(Properties.Resources.Disconnect, lang);
|
||||||
break;
|
break;
|
||||||
case 3: // Connected
|
case 3: // Connected
|
||||||
string label = Translate.T(Properties.Resources.Connected);
|
string label = Translate.T(Properties.Resources.Connected, lang);
|
||||||
if (sessionIsRecorded) { label += Translate.T(Properties.Resources.RecordedSession); }
|
if (sessionIsRecorded) { label += Translate.T(Properties.Resources.RecordedSession, lang); }
|
||||||
if ((userSessions != null) && (userSessions.Count > 1)) { label += string.Format(Translate.T(Properties.Resources.AddXUsers), userSessions.Count); }
|
if ((userSessions != null) && (userSessions.Count > 1)) { label += string.Format(Translate.T(Properties.Resources.AddXUsers, lang), userSessions.Count); }
|
||||||
label += ".";
|
label += ".";
|
||||||
mainToolStripStatusLabel.Text = label;
|
mainToolStripStatusLabel.Text = label;
|
||||||
connectButton.Text = Translate.T(Properties.Resources.Disconnect);
|
connectButton.Text = Translate.T(Properties.Resources.Disconnect, lang);
|
||||||
kvmControl.SendCompressionLevel();
|
kvmControl.SendCompressionLevel();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -442,14 +453,21 @@ namespace MeshCentralRouter
|
|||||||
{
|
{
|
||||||
displaySelectComboBox.Visible = true;
|
displaySelectComboBox.Visible = true;
|
||||||
displaySelectComboBox.Items.Clear();
|
displaySelectComboBox.Items.Clear();
|
||||||
displaySelectComboBox.Items.AddRange(kvmControl.displays.ToArray());
|
foreach (ushort displayNum in kvmControl.displays)
|
||||||
if (kvmControl.currentDisp == 0xFFFF)
|
|
||||||
{
|
{
|
||||||
displaySelectComboBox.SelectedItem = Translate.T(Properties.Resources.AllDisplays);
|
displayTag t;
|
||||||
|
if (displayNum == 0xFFFF)
|
||||||
|
{
|
||||||
|
t = new displayTag(displayNum, Translate.T(Properties.Resources.AllDisplays, lang));
|
||||||
|
displaySelectComboBox.Items.Add(t);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
displaySelectComboBox.SelectedItem = string.Format(Translate.T(Properties.Resources.DisplayX), kvmControl.currentDisp);
|
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
|
else
|
||||||
@@ -461,13 +479,7 @@ namespace MeshCentralRouter
|
|||||||
|
|
||||||
private void displaySelectComboBox_SelectionChangeCommitted(object sender, EventArgs e)
|
private void displaySelectComboBox_SelectionChangeCommitted(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
string displayText = displaySelectComboBox.SelectedItem.ToString();
|
if (kvmControl != null) kvmControl.SendDisplay(((displayTag)displaySelectComboBox.SelectedItem).num);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resizeKvmControl_TouchEnabledChanged(object sender, EventArgs e)
|
private void resizeKvmControl_TouchEnabledChanged(object sender, EventArgs e)
|
||||||
|
|||||||
11
Translate.cs
11
Translate.cs
@@ -2847,6 +2847,17 @@ namespace MeshCentralRouter
|
|||||||
return english;
|
return english;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static public string T(string english, string lang)
|
||||||
|
{
|
||||||
|
if (lang == "en") return english;
|
||||||
|
if (translationTable.ContainsKey(english))
|
||||||
|
{
|
||||||
|
Dictionary<string, string> translations = translationTable[english];
|
||||||
|
if (translations.ContainsKey(lang)) return translations[lang];
|
||||||
|
}
|
||||||
|
return english;
|
||||||
|
}
|
||||||
|
|
||||||
static public void TranslateControl(Control control)
|
static public void TranslateControl(Control control)
|
||||||
{
|
{
|
||||||
control.Text = T(control.Text);
|
control.Text = T(control.Text);
|
||||||
|
|||||||
Reference in New Issue
Block a user