00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "gui/npcstringdialog.h"
00023
00024 #include "gui/npc_text.h"
00025
00026 #include "gui/widgets/button.h"
00027 #include "gui/widgets/layout.h"
00028 #include "gui/widgets/textfield.h"
00029
00030 #include "npc.h"
00031
00032 #include "net/net.h"
00033 #include "net/npchandler.h"
00034
00035 #include "utils/gettext.h"
00036 #include "utils/strprintf.h"
00037
00038 NpcStringDialog::NpcStringDialog()
00039 : Window(_("NPC Text Request"))
00040 {
00041 setWindowName("NPCString");
00042 mValueField = new TextField("");
00043
00044 setDefaultSize(175, 75, ImageRect::CENTER);
00045
00046 gcn::Button *okButton = new Button(_("OK"), "ok", this);
00047 gcn::Button *cancelButton = new Button(_("Cancel"), "cancel", this);
00048
00049 place(0, 0, mValueField, 3);
00050 place(1, 1, cancelButton);
00051 place(2, 1, okButton);
00052 reflowLayout(175, 0);
00053
00054 center();
00055 setDefaultSize();
00056 loadWindowState();
00057 }
00058
00059 std::string NpcStringDialog::getValue()
00060 {
00061 return mValueField->getText();
00062 }
00063
00064 void NpcStringDialog::setValue(const std::string &value)
00065 {
00066 mValueField->setText(value);
00067 mDefault = value;
00068 }
00069
00070 void NpcStringDialog::action(const gcn::ActionEvent &event)
00071 {
00072 if (event.getId() == "cancel")
00073 {
00074 mValueField->setText(mDefault);
00075 npcTextDialog->addText(_("\n> Cancel\n"));
00076 }
00077 else
00078 {
00079 npcTextDialog->addText(strprintf("\n> \"%s\"\n",
00080 mValueField->getText().c_str()));
00081 }
00082
00083 setVisible(false);
00084 NPC::isTalking = false;
00085
00086 std::string text = mValueField->getText();
00087 mValueField->setText("");
00088
00089 Net::getNpcHandler()->stringInput(current_npc, text);
00090 }
00091
00092 bool NpcStringDialog::isInputFocused()
00093 {
00094 return mValueField->isFocused();
00095 }
00096
00097 void NpcStringDialog::requestFocus()
00098 {
00099 mValueField->requestFocus();
00100 }
00101
00102 void NpcStringDialog::setVisible(bool visible)
00103 {
00104 if (visible) {
00105 npcTextDialog->setVisible(true);
00106 requestFocus();
00107 }
00108
00109 Window::setVisible(visible);
00110 }