Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion DistFiles/Language Explorer/Configuration/Main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@
<command id="CmdPasteHyperlink" label="Paste _Hyperlink" message="PasteUrl"/>
<command id="CmdInsertLinkToFile" label="L_ink to File..." message="InsertLinkToFile" icon="ExternalLink"/>
<command id="CmdSelectAll" label="Select _All" message="EditSelectAll" shortcut="Ctrl+A"/>
<command id="CmdFindAndReplaceText" label="Find..." message="FindAndReplaceText" shortcut="Ctrl+Shift+F" icon="findReplaceText"/>
<command id="CmdFindAndReplaceText" label="Find..." message="FindAndReplaceText" shortcut="Ctrl+Shift+F" shortcut2="Ctrl+F" icon="findReplaceText"/>
<command id="CmdReplaceText" label="Replace..." message="ReplaceText" shortcut="Ctrl+H"/>
<command id="CmdHelpAbout" label="_About Language Explorer..." message="HelpAbout"/>
<command id="CmdHelpLanguageExplorer" label="_Language Explorer..." message="HelpLanguageExplorer" shortcut="F1"/>
Expand Down
202 changes: 111 additions & 91 deletions Src/XCore/xCoreInterfaces/Command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -381,106 +381,126 @@ public Keys Shortcut
get
{
CheckDisposed();
if(m_configurationNode==null)
if (m_configurationNode == null)
return Keys.None;

string sc = XmlUtils.GetAttributeValue(m_configurationNode, "shortcut", "");
if (sc != "")
return GetShortcutKeys(sc);
}
}

public Keys Shortcut2
{
get
{
CheckDisposed();
if (m_configurationNode == null)
return Keys.None;

string sc = XmlUtils.GetAttributeValue(m_configurationNode, "shortcut2", "");
return GetShortcutKeys(sc);
}
}

private Keys GetShortcutKeys(string sc)
{
if (sc != "")
{
// Note: On a German system, KeysConverter().ConvertFromString, ConvertToString,
// ConvertToInvariantString, etc. all use German strings (e.g., Strg for Ctrl)
// regardless of using the locale specific calls. So to get things to work, we
// need to parse the English shortcut string and reconstruct the internal keys.
Keys keys = Keys.None;
try
{
// Note: On a German system, KeysConverter().ConvertFromString, ConvertToString,
// ConvertToInvariantString, etc. all use German strings (e.g., Strg for Ctrl)
// regardless of using the locale specific calls. So to get things to work, we
// need to parse the English shortcut string and reconstruct the internal keys.
Keys keys = Keys.None;
try
string s;
string srest = sc.ToLower();
while (srest.Length > 0)
{
string s;
string srest = sc.ToLower();
while (srest.Length > 0)
int i = srest.IndexOf('+');
if (i < 0)
{
int i = srest.IndexOf('+');
if (i < 0)
{
s = srest;
srest = "";
}
else
{
s = srest.Substring(0, i);
srest = srest.Substring(i + 1);
}
switch (s)
{
default:
keys |= (Keys)new KeysConverter().ConvertFromString(s.ToUpper());
break;
case "alt":
keys |= Keys.Alt;
break;
case "back":
keys |= Keys.Back;
break;
case "cancel":
keys |= Keys.Cancel;
break;
case "ctrl":
keys |= Keys.Control;
break;
case "del":
keys |= Keys.Delete;
break;
case "down":
keys |= Keys.Down;
break;
case "end":
keys |= Keys.End;
break;
case "enter":
keys |= Keys.Enter;
break;
case "esc":
keys |= Keys.Escape;
break;
case "home":
keys |= Keys.Home;
break;
case "ins":
keys |= Keys.Insert;
break;
case "left":
keys |= Keys.Left;
break;
case "pgdwn":
keys |= Keys.PageDown;
break;
case "pgup":
keys |= Keys.PageUp;
break;
case "right":
keys |= Keys.Right;
break;
case "shift":
keys |= Keys.Shift;
break;
case "tab":
keys |= Keys.Tab;
break;
case "up":
keys |= Keys.Up;
break;
};
};
}
catch (Exception e)
{
throw new SIL.Utils.ConfigurationException("The System.Windows.Forms.KeysConverter() did not understand this key description:"
+ sc + ".", m_configurationNode, e);
s = srest;
srest = "";
}
else
{
s = srest.Substring(0, i);
srest = srest.Substring(i + 1);
}
switch (s)
{
default:
keys |= (Keys)new KeysConverter().ConvertFromString(s.ToUpper());
break;
case "alt":
keys |= Keys.Alt;
break;
case "back":
keys |= Keys.Back;
break;
case "cancel":
keys |= Keys.Cancel;
break;
case "ctrl":
keys |= Keys.Control;
break;
case "del":
keys |= Keys.Delete;
break;
case "down":
keys |= Keys.Down;
break;
case "end":
keys |= Keys.End;
break;
case "enter":
keys |= Keys.Enter;
break;
case "esc":
keys |= Keys.Escape;
break;
case "home":
keys |= Keys.Home;
break;
case "ins":
keys |= Keys.Insert;
break;
case "left":
keys |= Keys.Left;
break;
case "pgdwn":
keys |= Keys.PageDown;
break;
case "pgup":
keys |= Keys.PageUp;
break;
case "right":
keys |= Keys.Right;
break;
case "shift":
keys |= Keys.Shift;
break;
case "tab":
keys |= Keys.Tab;
break;
case "up":
keys |= Keys.Up;
break;
}
;
}
return keys;
;
}

return Keys.None;
catch (Exception e)
{
throw new SIL.Utils.ConfigurationException("The System.Windows.Forms.KeysConverter() did not understand this key description:"
+ sc + ".", m_configurationNode, e);
}
return keys;
}

return Keys.None;
}

#endregion
Expand Down
2 changes: 1 addition & 1 deletion Src/XCore/xWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2381,7 +2381,7 @@ private void XWindow_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
foreach (System.Collections.DictionaryEntry entry in this.m_mediator.CommandSet)
{
Command c = (Command)entry.Value;
if (e.KeyData == c.Shortcut)
if (e.KeyData == c.Shortcut || e.KeyData == c.Shortcut2)
{
UIItemDisplayProperties display = CommandChoice.QueryDisplayProperties(m_mediator, c, false, "foo");

Expand Down
Loading