summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIra Rice <irarice@gmail.com>2009-01-18 19:04:02 -0700
committerIra Rice <irarice@gmail.com>2009-01-18 19:04:02 -0700
commitd2b804c1a817ccdd85b4b1220bf929e9d370d774 (patch)
tree35f82a41b5107802fab3bbca7b2a59f7a3271e18 /src
parentd975741a095ae0dee82ff1dfdaa8e03439d7cf2b (diff)
downloadMana-d2b804c1a817ccdd85b4b1220bf929e9d370d774.tar.gz
Mana-d2b804c1a817ccdd85b4b1220bf929e9d370d774.tar.bz2
Mana-d2b804c1a817ccdd85b4b1220bf929e9d370d774.tar.xz
Mana-d2b804c1a817ccdd85b4b1220bf929e9d370d774.zip
Fixed the NPC Integer input field, as well as cut some bull from the
NPC String class. The Integer input field was rather horribly broken to the point where it could send invalid data, the increment and decrement buttons didn't work, and overall it was tripping over itself. As for the NPC String, "The Mana World" as a string is not needed to set the field to that length, but instead fills the text field with that text for starting. This is completely inappropriate for a text entry field, and a more sensible default would be to leave it empty, so that people can type in what they want without having to delete it. Signed-off-by: Ira Rice <irarice@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt4
-rw-r--r--src/Makefile.am4
-rw-r--r--src/game.cpp10
-rw-r--r--src/gui/inttextfield.cpp (renamed from src/gui/inttextbox.cpp)31
-rw-r--r--src/gui/inttextfield.h (renamed from src/gui/inttextbox.h)20
-rw-r--r--src/gui/item_amount.cpp24
-rw-r--r--src/gui/item_amount.h4
-rw-r--r--src/gui/npcintegerdialog.cpp62
-rw-r--r--src/gui/npcintegerdialog.h12
-rw-r--r--src/gui/npcstringdialog.cpp2
-rw-r--r--src/gui/textfield.cpp2
-rw-r--r--src/gui/textfield.h1
-rw-r--r--src/net/npchandler.cpp2
13 files changed, 94 insertions, 84 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index adc36eaa..1aa38230 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -97,8 +97,8 @@ SET(SRCS
gui/gui.h
gui/help.cpp
gui/help.h
- gui/inttextbox.cpp
- gui/inttextbox.h
+ gui/inttextfield.cpp
+ gui/inttextfield.h
gui/inventorywindow.cpp
gui/inventorywindow.h
gui/itemcontainer.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index 33d01598..37b40936 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -55,8 +55,8 @@ aethyra_SOURCES = gui/widgets/dropdown.cpp \
gui/gui.h \
gui/help.cpp \
gui/help.h \
- gui/inttextbox.h \
- gui/inttextbox.cpp \
+ gui/inttextfield.h \
+ gui/inttextfield.cpp \
gui/inventorywindow.cpp \
gui/inventorywindow.h \
gui/itemcontainer.cpp \
diff --git a/src/game.cpp b/src/game.cpp
index ec5bc267..752406b9 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -622,6 +622,11 @@ void Game::handleInput()
{
setupWindow->action(gcn::ActionEvent(NULL, "cancel"));
}
+ // Submits the text and proceeds to the next dialog
+ else if (npcStringDialog->isVisible())
+ {
+ npcStringDialog->action(gcn::ActionEvent(NULL, "ok"));
+ }
// Proceed to the next dialog option, or close the window
else if (npcTextDialog->isVisible())
{
@@ -632,6 +637,11 @@ void Game::handleInput()
{
npcListDialog->action(gcn::ActionEvent(NULL, "ok"));
}
+ // Submits the text and proceeds to the next dialog
+ else if (npcIntegerDialog->isVisible())
+ {
+ npcIntegerDialog->action(gcn::ActionEvent(NULL, "ok"));
+ }
// Else, open the chat edit box
else
{
diff --git a/src/gui/inttextbox.cpp b/src/gui/inttextfield.cpp
index 4cb885c3..e8e6e69b 100644
--- a/src/gui/inttextbox.cpp
+++ b/src/gui/inttextfield.cpp
@@ -19,17 +19,19 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include "inttextbox.h"
+#include "inttextfield.h"
#include "sdlinput.h"
#include "../utils/tostring.h"
-IntTextBox::IntTextBox(int i):
- mValue(i)
+IntTextField::IntTextField(int def):
+ TextField(toString(def)),
+ mDefault(def),
+ mValue(def)
{
}
-void IntTextBox::keyPressed(gcn::KeyEvent &event)
+void IntTextField::keyPressed(gcn::KeyEvent &event)
{
const gcn::Key &key = event.getKey();
@@ -40,32 +42,43 @@ void IntTextBox::keyPressed(gcn::KeyEvent &event)
event.consume();
}
- if (!key.isNumber()) return;
+ if (!key.isNumber())
+ return;
+
TextField::keyPressed(event);
std::istringstream s(getText());
int i;
s >> i;
- setInt(i);
+ setValue(i);
}
-void IntTextBox::setRange(int min, int max)
+void IntTextField::setRange(int min, int max)
{
mMin = min;
mMax = max;
}
-int IntTextBox::getInt()
+int IntTextField::getValue()
{
return getText().empty() ? mMin : mValue;
}
-void IntTextBox::setInt(int i)
+void IntTextField::setValue(int i)
{
if (i >= mMin && i <= mMax)
mValue = i;
+ else if (i < mMin)
+ mValue = mMin;
+ else if (i > mMax)
+ mValue = mMax;
const std::string valStr = toString(mValue);
setText(valStr);
setCaretPosition(valStr.length() + 1);
}
+
+void IntTextField::reset()
+{
+ setValue(mDefault);
+}
diff --git a/src/gui/inttextbox.h b/src/gui/inttextfield.h
index d134fcd7..3f9cd7ad 100644
--- a/src/gui/inttextbox.h
+++ b/src/gui/inttextfield.h
@@ -19,8 +19,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#ifndef INTTEXTBOX_H
-#define INTTEXTBOX_H
+#ifndef INTTEXTFIELD_H
+#define INTTEXTFIELD_H
#include "textfield.h"
@@ -29,13 +29,13 @@
/**
* TextBox which only accepts numbers as input.
*/
-class IntTextBox : public TextField
+class IntTextField : public TextField
{
public:
/**
- * Constructor, sets initial value.
+ * Constructor, sets default value.
*/
- IntTextBox(int value=0);
+ IntTextField(int def = 0);
/**
* Sets the minimum and maximum values of the text box.
@@ -45,12 +45,17 @@ class IntTextBox : public TextField
/**
* Returns the value in the text box.
*/
- int getInt();
+ int getValue();
+
+ /**
+ * Reset the field to the default value.
+ */
+ void reset();
/**
* Set the value of the text box to the specified value.
*/
- void setInt(int value);
+ void setValue(int value);
/**
* Responds to key presses.
@@ -60,6 +65,7 @@ class IntTextBox : public TextField
private:
int mMin; /**< Minimum value */
int mMax; /**< Maximum value */
+ int mDefault; /**< Default value */
int mValue; /**< Current value */
};
diff --git a/src/gui/item_amount.cpp b/src/gui/item_amount.cpp
index 48b0e601..03b22fa9 100644
--- a/src/gui/item_amount.cpp
+++ b/src/gui/item_amount.cpp
@@ -20,7 +20,7 @@
*/
#include "button.h"
-#include "inttextbox.h"
+#include "inttextfield.h"
#include "item_amount.h"
#include "slider.h"
#include "trade.h"
@@ -39,11 +39,11 @@ ItemAmountWindow::ItemAmountWindow(int usage, Window *parent, Item *item):
const int maxRange = mItem->getQuantity();
// Integer field
- mItemAmountTextBox = new IntTextBox(1);
- mItemAmountTextBox->setRange(1, maxRange);
- mItemAmountTextBox->setWidth(30);
- mItemAmountTextBox->setActionEventId("Dummy");
- mItemAmountTextBox->addActionListener(this);
+ mItemAmountTextField = new IntTextField(1);
+ mItemAmountTextField->setRange(1, maxRange);
+ mItemAmountTextField->setWidth(30);
+ mItemAmountTextField->setActionEventId("Dummy");
+ mItemAmountTextField->addActionListener(this);
// Slider
mItemAmountSlide = new Slider(1.0, maxRange);
@@ -61,7 +61,7 @@ ItemAmountWindow::ItemAmountWindow(int usage, Window *parent, Item *item):
// Set positions
place(0, 0, minusButton);
- place(1, 0, mItemAmountTextBox).setPadding(2);
+ place(1, 0, mItemAmountTextField).setPadding(2);
place(2, 0, plusButton);
place(0, 1, mItemAmountSlide, 6);
place(4, 2, okButton);
@@ -89,12 +89,12 @@ ItemAmountWindow::ItemAmountWindow(int usage, Window *parent, Item *item):
void ItemAmountWindow::resetAmount()
{
- mItemAmountTextBox->setInt(1);
+ mItemAmountTextField->setValue(1);
}
void ItemAmountWindow::action(const gcn::ActionEvent &event)
{
- int amount = mItemAmountTextBox->getInt();
+ int amount = mItemAmountTextField->getValue();
if (event.getId() == "Cancel")
{
@@ -114,14 +114,14 @@ void ItemAmountWindow::action(const gcn::ActionEvent &event)
}
else if (event.getId() == "Drop")
{
- player_node->dropItem(mItem, mItemAmountTextBox->getInt());
+ player_node->dropItem(mItem, mItemAmountTextField->getValue());
scheduleDelete();
}
else if (event.getId() == "AddTrade")
{
- tradeWindow->tradeItem(mItem, mItemAmountTextBox->getInt());
+ tradeWindow->tradeItem(mItem, mItemAmountTextField->getValue());
scheduleDelete();
}
- mItemAmountTextBox->setInt(amount);
+ mItemAmountTextField->setValue(amount);
mItemAmountSlide->setValue(amount);
}
diff --git a/src/gui/item_amount.h b/src/gui/item_amount.h
index 2005094d..08852c8f 100644
--- a/src/gui/item_amount.h
+++ b/src/gui/item_amount.h
@@ -30,7 +30,7 @@
#include "../guichanfwd.h"
-class IntTextBox;
+class IntTextField;
class Item;
#define AMOUNT_TRADE_ADD 1
@@ -60,7 +60,7 @@ class ItemAmountWindow : public Window, public gcn::ActionListener
void resetAmount();
private:
- IntTextBox *mItemAmountTextBox; /**< Item amount caption. */
+ IntTextField *mItemAmountTextField; /**< Item amount caption. */
Item *mItem;
/**
diff --git a/src/gui/npcintegerdialog.cpp b/src/gui/npcintegerdialog.cpp
index f5b6ac5b..75dd52c8 100644
--- a/src/gui/npcintegerdialog.cpp
+++ b/src/gui/npcintegerdialog.cpp
@@ -25,7 +25,7 @@
#include <sstream>
#include "button.h"
-#include "textfield.h"
+#include "inttextfield.h"
#include "../npc.h"
@@ -39,18 +39,25 @@ NpcIntegerDialog::NpcIntegerDialog():
{
mDecButton = new Button("-", "decvalue", this);
mIncButton = new Button("+", "incvalue", this);
- mValueField = new TextField();
+ mValueField = new IntTextField();
okButton = new Button(_("OK"), "ok", this);
cancelButton = new Button(_("Cancel"), "cancel", this);
+ resetButton = new Button(_("Reset"), "reset", this);
mDecButton->setSize(20, 20);
mIncButton->setSize(20, 20);
+ ContainerPlacer place;
+ place = getPlacer(0, 0);
+
place(0, 0, mDecButton);
place(1, 0, mValueField, 3);
place(4, 0, mIncButton);
- place(2, 1, okButton);
- place(3, 1, cancelButton, 2);
+ place.getCell().matchColWidth(1, 0);
+ place = getPlacer(0, 1);
+ place(0, 0, resetButton);
+ place(2, 0, cancelButton);
+ place(3, 0, okButton);
reflowLayout(175, 0);
setLocationRelativeTo(getParent());
@@ -59,19 +66,14 @@ NpcIntegerDialog::NpcIntegerDialog():
mValueField->addKeyListener(this);
}
-void NpcIntegerDialog::prepDialog(const int min, const int def, const int max)
+void NpcIntegerDialog::setRange(const int min, const int max)
{
- mMin = min;
- mMax = max;
- mDefault = def;
- mValue = def;
-
- mValueField->setText(toString(mValue));
+ mValueField->setRange(min, max);
}
int NpcIntegerDialog::getValue()
{
- return mValue;
+ return mValueField->getValue();
}
void NpcIntegerDialog::action(const gcn::ActionEvent &event)
@@ -85,41 +87,25 @@ void NpcIntegerDialog::action(const gcn::ActionEvent &event)
else if (event.getId() == "cancel")
{
finish = 1;
- mValue = mDefault;
+ mValueField->reset();
}
- else if (event.getId() == "decvalue" && mValue < mMin)
+ else if (event.getId() == "decvalue")
{
- mValue--;
+ mValueField->setValue(mValueField->getValue() - 1);
}
- else if (event.getId() == "incvalue" && mValue > mMax)
+ else if (event.getId() == "incvalue")
{
- mValue++;
+ mValueField->setValue(mValueField->getValue() + 1);
+ }
+ else if (event.getId() == "reset")
+ {
+ mValueField->reset();
}
-
- mValueField->setText(toString(mValue));
if (finish)
{
setVisible(false);
- current_npc->integerInput(mValue);
+ current_npc->integerInput(mValueField->getValue());
current_npc = 0;
}
}
-
-void NpcIntegerDialog::keyPressed(gcn::KeyEvent &event)
-{
- std::stringstream tempValue(mValueField->getText());
- int value;
- tempValue >> value;
- if (value < mMin)
- {
- value = mMin;
- }
- if (value > mMax)
- {
- value = mMax;
- }
-
- mValue = value;
- mValueField->setText(toString(value));
-}
diff --git a/src/gui/npcintegerdialog.h b/src/gui/npcintegerdialog.h
index a45d57c4..c1bdffe1 100644
--- a/src/gui/npcintegerdialog.h
+++ b/src/gui/npcintegerdialog.h
@@ -32,6 +32,8 @@
#include "../guichanfwd.h"
+class IntTextField;
+
/**
* The npc integer input dialog.
*
@@ -53,9 +55,6 @@ class NpcIntegerDialog : public Window, public gcn::ActionListener,
*/
void action(const gcn::ActionEvent &event);
- /** Called when key is pressed */
- void keyPressed(gcn::KeyEvent &event);
-
/**
* Returns the current value.
*/
@@ -65,18 +64,17 @@ class NpcIntegerDialog : public Window, public gcn::ActionListener,
* Prepares the NPC dialog.
*
* @param min The minimum value to allow
- * @param def The default value
* @param max The maximum value to allow
*/
- void prepDialog(const int min, const int def, const int max);
+ void setRange(const int min, const int max);
private:
- int mMin, mMax, mDefault, mValue;
gcn::Button *mDecButton;
gcn::Button *mIncButton;
- gcn::TextField *mValueField;
+ IntTextField *mValueField;
gcn::Button *okButton;
gcn::Button *cancelButton;
+ gcn::Button *resetButton;
};
#endif // _TMW_GUI_NPCINTEGERDIALOG_H
diff --git a/src/gui/npcstringdialog.cpp b/src/gui/npcstringdialog.cpp
index 6bca961c..53f200b0 100644
--- a/src/gui/npcstringdialog.cpp
+++ b/src/gui/npcstringdialog.cpp
@@ -37,7 +37,7 @@
NpcStringDialog::NpcStringDialog():
Window(_("NPC Text Request"))
{
- mValueField = new TextField("The Mana World"); // Just a sizing value :)
+ mValueField = new TextField("");
okButton = new Button(_("OK"), "ok", this);
cancelButton = new Button(_("Cancel"), "cancel", this);
diff --git a/src/gui/textfield.cpp b/src/gui/textfield.cpp
index 0146fd4a..80e3bbcf 100644
--- a/src/gui/textfield.cpp
+++ b/src/gui/textfield.cpp
@@ -19,8 +19,6 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include "textfield.h"
-
#include <algorithm>
#include <guichan/font.hpp>
diff --git a/src/gui/textfield.h b/src/gui/textfield.h
index 38150b83..3235e3f6 100644
--- a/src/gui/textfield.h
+++ b/src/gui/textfield.h
@@ -27,7 +27,6 @@
#include "../guichanfwd.h"
class ImageRect;
-
class TextField;
class TextFieldListener
diff --git a/src/net/npchandler.cpp b/src/net/npchandler.cpp
index c597e31c..3cea2d64 100644
--- a/src/net/npchandler.cpp
+++ b/src/net/npchandler.cpp
@@ -90,7 +90,7 @@ void NPCHandler::handleMessage(MessageIn *msg)
// Request for an integer
id = msg->readInt32();
current_npc = dynamic_cast<NPC*>(beingManager->findBeing(id));
- npcIntegerDialog->prepDialog(0, 0, 2147483647);
+ npcIntegerDialog->setRange(0, 2147483647);
npcIntegerDialog->setVisible(true);
break;