diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/gui/inttextbox.cpp | 76 | ||||
-rw-r--r-- | src/gui/inttextbox.h | 56 | ||||
-rw-r--r-- | src/gui/item_amount.cpp | 38 | ||||
-rw-r--r-- | src/gui/item_amount.h | 4 |
5 files changed, 150 insertions, 26 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 5b80a7d2..85878bbb 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -88,6 +88,8 @@ tmw_SOURCES = graphic/spriteset.cpp \ gui/window.h \ gui/windowcontainer.cpp \ gui/windowcontainer.h \ + gui/inttextbox.h \ + gui/inttextbox.cpp \ net/network.cpp \ net/network.h \ net/protocol.cpp \ diff --git a/src/gui/inttextbox.cpp b/src/gui/inttextbox.cpp new file mode 100644 index 00000000..e28040d2 --- /dev/null +++ b/src/gui/inttextbox.cpp @@ -0,0 +1,76 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ + +#include "inttextbox.h" + +IntTextBox::IntTextBox() + : value(0) +{ +} + +IntTextBox::IntTextBox(int i) + : value(i) +{ +} + +void IntTextBox::keyPress(const gcn::Key &key) +{ + if (key.isNumber() || key.getValue() == gcn::Key::BACKSPACE + || key.getValue() == gcn::Key::DELETE) + { + gcn::TextBox::keyPress(key); + } + + std::stringstream s; + int i; + s << gcn::TextBox::getText(); + s >> i; + if (gcn::TextBox::getText() != "") + setInt(i); +} + +void IntTextBox::setRange(int minValue, int maxValue) +{ + min = minValue; + max = maxValue; +} + +int IntTextBox::getInt() +{ + if (gcn::TextBox::getText() == "") + return 0; + return value; +} + +void IntTextBox::setInt(int i) +{ + std::stringstream s; + + if (i >= min && i <= max) + value = i; + s << value; + setText(s.str()); + setCaretPosition(s.str().length() + 1); +} + + diff --git a/src/gui/inttextbox.h b/src/gui/inttextbox.h new file mode 100644 index 00000000..eda5ff78 --- /dev/null +++ b/src/gui/inttextbox.h @@ -0,0 +1,56 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + */ + +#ifndef INTTEXTBOX_H +#define INTTEXTBOX_H + +#include <iostream> +#include <sstream> +#include <guichan.hpp> +#include "textbox.h" + +/** + * IntTextBox + * TextBox which only accepts numbers as input + */ +class IntTextBox : public TextBox +{ + int min; //min value + int max; //max value + + int value; //current value + + IntTextBox(const std::string&) { } + + public: + IntTextBox(); + IntTextBox(int); + + void keyPress(const gcn::Key &); + + void setRange(int, int); + int getInt(); + void setInt(int); +}; + +#endif diff --git a/src/gui/item_amount.cpp b/src/gui/item_amount.cpp index a2aabfb4..5cac1746 100644 --- a/src/gui/item_amount.cpp +++ b/src/gui/item_amount.cpp @@ -30,7 +30,7 @@ ItemAmountWindow::ItemAmountWindow(int usage, Window *parent): Window("Select amount of items to drop.", true, parent) { // New labels - itemAmountLabel = new gcn::Label("1"); + itemAmountTextBox = new IntTextBox(1); // New buttons itemAmountMinusButton = new Button("-"); @@ -38,6 +38,8 @@ ItemAmountWindow::ItemAmountWindow(int usage, Window *parent): itemAmountOkButton = new Button("Okay"); itemAmountCancelButton = new Button("Cancel"); + itemAmountTextBox->setRange(1, inventoryWindow->items->getQuantity()); + // Set button events Id itemAmountMinusButton->setEventId("Minus"); itemAmountPlusButton->setEventId("Plus"); @@ -45,14 +47,15 @@ ItemAmountWindow::ItemAmountWindow(int usage, Window *parent): itemAmountCancelButton->setEventId("Cancel"); // Set position - itemAmountLabel->setPosition(35, 10); + itemAmountTextBox->setPosition(35, 10); + itemAmountTextBox->setSize(24, 16); itemAmountPlusButton->setPosition(60, 5); itemAmountMinusButton->setPosition(10, 5); itemAmountOkButton->setPosition(10, 40); itemAmountCancelButton->setPosition(60, 40); // Assemble - add(itemAmountLabel); + add(itemAmountTextBox); add(itemAmountPlusButton); add(itemAmountMinusButton); add(itemAmountOkButton); @@ -84,7 +87,7 @@ ItemAmountWindow::ItemAmountWindow(int usage, Window *parent): ItemAmountWindow::~ItemAmountWindow() { - delete itemAmountLabel; + delete itemAmountTextBox; delete itemAmountPlusButton; delete itemAmountMinusButton; delete itemAmountOkButton; @@ -93,46 +96,33 @@ ItemAmountWindow::~ItemAmountWindow() void ItemAmountWindow::resetAmount() { - amount = 1; - itemAmountLabel->setCaption("1"); + itemAmountTextBox->setInt(1); } void ItemAmountWindow::action(const std::string& eventId) { + if (eventId == "Cancel") { scheduleDelete(); } else if (eventId == "Drop") { - inventoryWindow->dropItem(inventoryWindow->items->getIndex(), amount); + inventoryWindow->dropItem(inventoryWindow->items->getIndex(), itemAmountTextBox->getInt()); scheduleDelete(); } else if (eventId == "AddTrade") { - tradeWindow->tradeItem(inventoryWindow->items->getIndex(), amount); + tradeWindow->tradeItem(inventoryWindow->items->getIndex(), itemAmountTextBox->getInt()); scheduleDelete(); } else if (eventId == "Plus") { - if (amount < inventoryWindow->items->getQuantity()) - { - char tmpplus[128]; - amount++; - sprintf(tmpplus, "%i", amount); - itemAmountLabel->setCaption(tmpplus); - itemAmountLabel->adjustSize(); - } + itemAmountTextBox->setInt(itemAmountTextBox->getInt() + 1); } else if (eventId == "Minus") { - if (amount > 1) - { - char tmpminus[128]; - amount--; - sprintf(tmpminus, "%i", amount); - itemAmountLabel->setCaption(tmpminus); - itemAmountLabel->adjustSize(); - } + itemAmountTextBox->setInt(itemAmountTextBox->getInt() + 1); } } + diff --git a/src/gui/item_amount.h b/src/gui/item_amount.h index d01f2006..0055ab04 100644 --- a/src/gui/item_amount.h +++ b/src/gui/item_amount.h @@ -25,6 +25,7 @@ #define _TMW_ITEM_AMOUNT_WINDOW_H #include "window.h" +#include "inttextbox.h" #include <string> #include <sstream> @@ -60,8 +61,7 @@ class ItemAmountWindow : public Window, public gcn::ActionListener void resetAmount(); private: - int amount; /**< Amount of items to be dropped. */ - gcn::Label *itemAmountLabel; /**< Item amount caption. */ + IntTextBox *itemAmountTextBox; /**< Item amount caption. */ /** * Item Amount buttons. |