Example #1
0
void edit_box::on_event(const event& mEvent)
{
    frame::on_event(mEvent);

    if (!pManager_->is_input_enabled())
        return;

    if (mEvent.get_name() == "TEXT_ENTERED" && bFocus_)
    {
        char32_t c = mEvent.get<char32_t>(0);
        if (add_char_(c))
        {
            event mKeyEvent;
            mKeyEvent.add(utils::unicode_to_UTF8(utils::ustring(1, c)));
            on("Char", &mKeyEvent);
        }
        return;
    }

    if (mEvent.get_name() == "MOUSE_PRESSED" && bMouseInFrame_)
    {
        set_focus(true);
        unlight_text();

        move_carret_at_(iMousePosX_, iMousePosY_);
        return;
    }

    if (mEvent.get_name() == "KEY_PRESSED" && bFocus_)
    {
        uint uiChar = mEvent[0].get<uint>();
        if (uiChar == key::K_RETURN || uiChar == key::K_NUMPADENTER)
            on("EnterPressed");
        else if (uiChar == key::K_END)
        {
            uint uiPreviousCarretPos = iterCarretPos_ - sUnicodeText_.begin();

            iterCarretPos_ = sUnicodeText_.end();
            update_carret_position_();

            if (pManager_->get_input_manager()->shift_is_pressed())
            {
                if (bSelectedText_)
                    highlight_text(uiSelectionStartPos_, iterCarretPos_ - sUnicodeText_.begin());
                else
                    highlight_text(uiPreviousCarretPos, iterCarretPos_ - sUnicodeText_.begin());
            }
            else
                unlight_text();

            return;
        }
        else if (uiChar == key::K_HOME)
        {
            uint uiPreviousCarretPos = iterCarretPos_ - sUnicodeText_.begin();

            iterCarretPos_ = sUnicodeText_.begin();
            update_carret_position_();

            if (pManager_->get_input_manager()->shift_is_pressed())
            {
                if (bSelectedText_)
                    highlight_text(uiSelectionStartPos_, iterCarretPos_ - sUnicodeText_.begin());
                else
                    highlight_text(uiPreviousCarretPos, iterCarretPos_ - sUnicodeText_.begin());
            }
            else
                unlight_text();

            return;
        }
        else if (uiChar == key::K_TAB)
            on("TabPressed");
        else if (uiChar == key::K_SPACE)
            on("SpacePressed");

        uiLastKeyPressed_ = uiChar;

        process_key_(uiChar);
    }
    else if (mEvent.get_name() == "KEY_RELEASED")
    {
        uint uiChar = mEvent[0].get<uint>();

        if (uiChar == key::K_ESCAPE)
        {
            on("EscapePressed");
            return;
        }

        if (uiChar == uiLastKeyPressed_)
        {
            uiLastKeyPressed_ = 0u;
            mKeyRepeatTimer_.stop();
        }
    }
}