Esempio n. 1
0
void NpcDialog::action(const gcn::ActionEvent &event)
{
    if (event.getId() == "ok")
    {
        if (mActionState == NPC_ACTION_NEXT)
        {
            nextDialog();
            // TRANSLATORS: Please leave the \n sequences intact.
            addText(_("\n> Next\n"), false);
        }
        else if (mActionState == NPC_ACTION_CLOSE)
        {
            closeDialog();
        }
        else if (mActionState == NPC_ACTION_INPUT)
        {
            std::string printText = "";  // Text that will get printed in the textbox

            if (mInputState == NPC_INPUT_LIST)
            {
                int selectedIndex = mItemList->getSelected();

                if (selectedIndex >= (int) mItems.size() || selectedIndex < 0)
                    return;

                printText = mItems[selectedIndex];

                NpcEvent("doMenu")
                event.setInt("choice", selectedIndex + 1);
                event.trigger("NPC");
            }
            else if (mInputState == NPC_INPUT_STRING)
            {
                printText = mTextField->getText();

                NpcEvent("doStringInput")
                event.setString("value", printText);
                event.trigger("NPC");
            }
            else if (mInputState == NPC_INPUT_INTEGER)
            {
                printText = strprintf("%d", mIntField->getValue());

                NpcEvent("doIntegerInput")
                event.setInt("value", mIntField->getValue());
                event.trigger("NPC");
            }
            // addText will auto remove the input layout
            addText(strprintf("\n> \"%s\"\n", printText.c_str()), false);

            mNewText.clear();
        }

        if (!mLogInteraction)
            setText("");
    }
    else if (event.getId() == "reset")
    {
        if (mInputState == NPC_INPUT_STRING)
        {
            mTextField->setText(mDefaultString);
        }
        else if (mInputState == NPC_INPUT_INTEGER)
        {
            mIntField->setValue(mDefaultInt);
        }
    }
    else if (event.getId() == "inc")
    {
        mIntField->setValue(mIntField->getValue() + 1);
    }
    else if (event.getId() == "dec")
    {
        mIntField->setValue(mIntField->getValue() - 1);
    }
    else if (event.getId() == "clear")
    {
        setText(mNewText);
    }
}