예제 #1
0
void AudacityApp::OnKey(wxKeyEvent& event)
{
    AudacityProject *audacityPrj = GetActiveProject();
    wxString newStr = "";

    long key = event.GetKeyCode();

    if(event.ControlDown())
        newStr += "Ctrl+";

    if(event.AltDown())
        newStr += "Alt+";

    if(event.ShiftDown())
        newStr += "Shift+";

    if (event.ControlDown() && key >= 1 && key <= 26)
        newStr += (char)(64 + key);
    else if (key >= 33 && key <= 126)
        newStr += (char)key;
    else if (key == WXK_BACK)
        newStr = "Backspace";
    else if (key == WXK_DELETE)
        newStr = "Delete";
    else if (key == WXK_SPACE)
        newStr = "Spacebar";
    else
    {
        event.Skip();
        return; // Don't change it if we don't recognize the key
    }

    if(audacityPrj->IsActive())
    {
        int commandIndex = audacityPrj->FindCommandByCombos(newStr);

        if(audacityPrj->GetCommandState(commandIndex) == enabledMenu)
        {
            audEventFunction audFunc = audacityPrj->GetCommandFunc(commandIndex);

            if(audFunc)
                (audacityPrj->*((wxEventFunction) audFunc))(event);

            return;
        }
    }

    event.Skip();
}