summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/gui/inttextbox.cpp76
-rw-r--r--src/gui/inttextbox.h56
-rw-r--r--src/gui/item_amount.cpp38
-rw-r--r--src/gui/item_amount.h4
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.