SFML community forums

Help => General => Topic started by: CytraL on April 13, 2012, 04:33:29 am

Title: Keyboard keys
Post by: CytraL on April 13, 2012, 04:33:29 am
Hi! i'm making a GUI and I need get keys code "Caps Lock" and all alphanumerics... is this possible?

Code: [Select]
            case EDITBOX:
            {
                CEditBox *pEditBox = static_cast<CEditBox*>(m_pFocusEnt);
                std::string CurrentText = pEditBox->GetText();
                int CharSelected = pEditBox->GetCharSelected();

                if (*pKeyPressed == sf::Key::A)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'A');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'a');
                }
                else if (*pKeyPressed == sf::Key::B)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'B');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'b');
                }
                else if (*pKeyPressed == sf::Key::C)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'C');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'c');
                }
                else if (*pKeyPressed == sf::Key::D)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'D');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'd');
                }
                else if (*pKeyPressed == sf::Key::E)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'E');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'e');
                }
                else if (*pKeyPressed == sf::Key::F)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'F');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'f');
                }
                else if (*pKeyPressed == sf::Key::G)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'G');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'g');
                }
                else if (*pKeyPressed == sf::Key::H)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'H');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'h');
                }
                else if (*pKeyPressed == sf::Key::I)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'I');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'i');
                }
                else if (*pKeyPressed == sf::Key::J)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'J');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'j');
                }
                else if (*pKeyPressed == sf::Key::K)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'K');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'k');
                }
                else if (*pKeyPressed == sf::Key::L)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'L');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'l');
                }
                else if (*pKeyPressed == sf::Key::M)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'M');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'm');
                }
                else if (*pKeyPressed == sf::Key::N)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'N');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'n');
                }
                else if (*pKeyPressed == sf::Key::O)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'O');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'o');
                }
                else if (*pKeyPressed == sf::Key::P)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'P');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'p');
                }
                else if (*pKeyPressed == sf::Key::Q)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'Q');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'q');
                }
                else if (*pKeyPressed == sf::Key::R)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'R');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'r');
                }
                else if (*pKeyPressed == sf::Key::S)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'S');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 's');
                }
                else if (*pKeyPressed == sf::Key::T)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'T');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 't');
                }
                else if (*pKeyPressed == sf::Key::U)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'U');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'u');
                }
                else if (*pKeyPressed == sf::Key::V)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'V');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'v');
                }
                else if (*pKeyPressed == sf::Key::W)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'W');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'w');
                }
                else if (*pKeyPressed == sf::Key::X)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'X');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'x');
                }
                else if (*pKeyPressed == sf::Key::Y)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'Y');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'y');
                }
                else if (*pKeyPressed == sf::Key::Z)
                {
                    if (GetRenderWindow()->GetInput().IsKeyDown(sf::Key::LShift) || GetRenderWindow()->GetInput().IsKeyDown(sf::Key::RShift))
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'Z');
                    else
                        CurrentText.insert(CurrentText.begin()+CharSelected, 'z');
                }
                else if (*pKeyPressed == sf::Key::Num0 || *pKeyPressed == sf::Key::Numpad0)
                    CurrentText.insert(CurrentText.begin()+CharSelected, '0');
                else if (*pKeyPressed == sf::Key::Num1 || *pKeyPressed == sf::Key::Numpad1)
                    CurrentText.insert(CurrentText.begin()+CharSelected, '1');
                else if (*pKeyPressed == sf::Key::Num2 || *pKeyPressed == sf::Key::Numpad2)
                    CurrentText.insert(CurrentText.begin()+CharSelected, '2');
                else if (*pKeyPressed == sf::Key::Num3 || *pKeyPressed == sf::Key::Numpad3)
                    CurrentText.insert(CurrentText.begin()+CharSelected, '3');
                else if (*pKeyPressed == sf::Key::Num4 || *pKeyPressed == sf::Key::Numpad4)
                    CurrentText.insert(CurrentText.begin()+CharSelected, '4');
                else if (*pKeyPressed == sf::Key::Num5 || *pKeyPressed == sf::Key::Numpad5)
                    CurrentText.insert(CurrentText.begin()+CharSelected, '5');
                else if (*pKeyPressed == sf::Key::Num6 || *pKeyPressed == sf::Key::Numpad6)
                    CurrentText.insert(CurrentText.begin()+CharSelected, '6');
                else if (*pKeyPressed == sf::Key::Num7 || *pKeyPressed == sf::Key::Numpad7)
                    CurrentText.insert(CurrentText.begin()+CharSelected, '7');
                else if (*pKeyPressed == sf::Key::Num8 || *pKeyPressed == sf::Key::Numpad8)
                    CurrentText.insert(CurrentText.begin()+CharSelected, '8');
                else if (*pKeyPressed == sf::Key::Num9 || *pKeyPressed == sf::Key::Numpad9)
                    CurrentText.insert(CurrentText.begin()+CharSelected, '9');
                else if (*pKeyPressed == sf::Key::Space)
                    CurrentText.insert(CurrentText.begin()+CharSelected, ' ');
                else if (*pKeyPressed == sf::Key::Back && CurrentText.size() > 0)
                {
                    std::string::iterator it = CurrentText.begin()+CharSelected-1;
                    if (it >= CurrentText.begin())
                        CurrentText.erase(it);
                }
                else if (*pKeyPressed == sf::Key::Delete && CurrentText.size() > 0)
                {
                    std::string::iterator it = CurrentText.begin()+CharSelected;
                    if (it < CurrentText.end())
                        CurrentText.erase(it);
                    pEditBox->SetCharSelected(CharSelected+1);
                }
                else if (*pKeyPressed == sf::Key::Left)
                {
                    int CurrentCharSel = pEditBox->GetCharSelected();
                    CurrentCharSel--;
                    pEditBox->SetCharSelected(CurrentCharSel);
                }
                else if (*pKeyPressed == sf::Key::Right)
                {
                    int CurrentCharSel = pEditBox->GetCharSelected();
                    CurrentCharSel++;
                    pEditBox->SetCharSelected(CurrentCharSel);
                }

                pEditBox->SetText(CurrentText.c_str());

            } break;

(http://img196.imageshack.us/img196/2464/mapeditor.jpg)

Download Demo: http://dl.dropbox.com/u/30566237/bin.rar (http://dl.dropbox.com/u/30566237/bin.rar)
Title: Re: Keyboard keys
Post by: Laurent on April 13, 2012, 08:03:06 am
No, it is not possible yet.

But you're doing it wrong: instead of trying to interpret every possible key combination to get the typed character (which is impossible), you should just use the TextEntered event which does this job for you.
Title: Re: Keyboard keys
Post by: CytraL on April 13, 2012, 05:10:11 pm
Thx!! now works fine ;)

(http://img23.imageshack.us/img23/2464/mapeditor.jpg)
Title: Re: Keyboard keys
Post by: G. on April 13, 2012, 08:05:48 pm
So there is no way to check if caps lock is enabled? (could be useful to warn users that caps lock is enabled when they have to type a password to log in, for example)
Title: Re: Keyboard keys
Post by: Laurent on April 13, 2012, 08:15:46 pm
Quote from: Laurent
No, it is not possible yet.
Title: Re: Keyboard keys
Post by: G. on April 14, 2012, 07:39:43 pm
Okok, I wasn't sure what you were referring to.