protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (_currentCard != null && _currentCardUpStatus && (Keyboard.GetKeyStates(Key.LeftCtrl) & KeyStates.Down) > 0 && Prefs.ZoomOption == Prefs.ZoomType.ProxyOnKeypress && _newCard)
{
var img = _currentCard.GetBitmapImage(_currentCardUpStatus, true);
ShowCardPicture(_currentCard, img);
_newCard = false;
}
if (e.OriginalSource is TextBox)
return; // Do not tinker with the keyboard events when the focus is inside a textbox
if (e.IsRepeat)
return;
IInputElement mouseOver = Mouse.DirectlyOver;
var te = new TableKeyEventArgs(this, e);
if (mouseOver != null) mouseOver.RaiseEvent(te);
if (te.Handled) return;
// If the event was unhandled, check if there's a selection and try to apply a shortcut action to it
if (!Selection.IsEmpty() && Selection.Source.CanManipulate())
{
ActionShortcut match =
Selection.Source.CardShortcuts.FirstOrDefault(
shortcut => shortcut.Key.Matches(this, te.KeyEventArgs));
if (match != null)
{
if (match.ActionDef.AsAction().Execute != null)
ScriptEngine.ExecuteOnCards(match.ActionDef.AsAction().Execute, Selection.Cards);
else if (match.ActionDef.AsAction().BatchExecute != null)
ScriptEngine.ExecuteOnBatch(match.ActionDef.AsAction().BatchExecute, Selection.Cards);
e.Handled = true;
return;
}
}
// The event was still unhandled, try all groups, starting with the table
if (table == null) return;
table.RaiseEvent(te);
if (te.Handled) return;
foreach (Group g in Player.LocalPlayer.Groups.Where(g => g.CanManipulate()))
{
ActionShortcut a = g.GroupShortcuts.FirstOrDefault(shortcut => shortcut.Key.Matches(this, e));
if (a == null) continue;
if (a.ActionDef.AsAction().Execute != null)
ScriptEngine.ExecuteOnGroup(a.ActionDef.AsAction().Execute, g);
e.Handled = true;
return;
}
}