diff options
-rw-r--r-- | The Mana World.dev | 21 | ||||
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/engine.cpp | 11 | ||||
-rw-r--r-- | src/engine.h | 2 | ||||
-rw-r--r-- | src/gui/inventory.cpp | 5 | ||||
-rw-r--r-- | src/gui/inventory.h | 3 | ||||
-rw-r--r-- | src/gui/item_amount.cpp | 142 | ||||
-rw-r--r-- | src/gui/item_amount.h | 73 |
8 files changed, 254 insertions, 5 deletions
diff --git a/The Mana World.dev b/The Mana World.dev index 1e0b99e6..7b3b5c89 100644 --- a/The Mana World.dev +++ b/The Mana World.dev @@ -1,7 +1,7 @@ [Project] FileName=The Mana World.dev Name=tmw -UnitCount=109 +UnitCount=111 Type=0 Ver=1 ObjFiles= @@ -1162,3 +1162,22 @@ Priority=1000 OverrideBuildCmd=0 BuildCmd= +[Unit112] +FileName=src\gui\item_amount.cpp +CompileCpp=1 +Folder=gui +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit113] +FileName=src\gui\item_amount.h +CompileCpp=1 +Folder=gui +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= diff --git a/src/Makefile.am b/src/Makefile.am index 9fc479d9..7b59d450 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -27,6 +27,8 @@ tmw_SOURCES = graphic/spriteset.cpp \ gui/inventory.h \ gui/itemcontainer.cpp \ gui/itemcontainer.h \ + gui/item_amount.cpp \ + gui/item_amount.h \ gui/listbox.cpp \ gui/listbox.h \ gui/login.cpp \ diff --git a/src/engine.cpp b/src/engine.cpp index 7a37af25..0f3c8d42 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -28,6 +28,7 @@ #include "gui/minimap.h" #include "gui/chargedialog.h" #include "gui/itemcontainer.h" +#include "gui/item_amount.h" #include "main.h" #include "being.h" #include "floor_item.h" @@ -50,6 +51,7 @@ BuyDialog *buyDialog; SellDialog *sellDialog; BuySellDialog *buySellDialog; InventoryWindow *inventoryWindow; +ItemAmountWindow *itemAmountWindow; NpcListDialog *npcListDialog; NpcTextDialog *npcTextDialog; SkillDialog *skillDialog; @@ -172,6 +174,12 @@ Engine::Engine() inventoryWindow->setPosition(screen->w - statusWindow->getWidth() - inventoryWindow->getWidth() - 10, 5); + itemAmountWindow = new ItemAmountWindow(); + itemAmountWindow->setVisible(false); + itemAmountWindow->setPosition(screen->w - statusWindow->getWidth() - + inventoryWindow->getWidth() - 10, inventoryWindow->getHeight() + + 10); + npcTextDialog = new NpcTextDialog(); npcTextDialog->setVisible(false); @@ -249,7 +257,8 @@ Engine::~Engine() delete minimap; delete equipmentWindow; delete newSkillWindow; - + delete itemAmountWindow; + delete monsterset; delete npcset; delete emotionset; diff --git a/src/engine.h b/src/engine.h index e2f86e96..df25af69 100644 --- a/src/engine.h +++ b/src/engine.h @@ -41,6 +41,7 @@ #include "gui/setup.h" #include "gui/equipment.h" #include "gui/chargedialog.h" +#include "gui/item_amount.h" #include "resources/resourcemanager.h" #include "map.h" #include "graphic/spriteset.h" @@ -59,6 +60,7 @@ extern BuyDialog *buyDialog; extern SellDialog *sellDialog; extern BuySellDialog *buySellDialog; extern InventoryWindow *inventoryWindow; +extern ItemAmountWindow *itemAmountWindow; extern NpcListDialog *npcListDialog; extern NpcTextDialog *npcTextDialog; extern SkillDialog *skillDialog; diff --git a/src/gui/inventory.cpp b/src/gui/inventory.cpp index 4681d047..4fc1bd1d 100644 --- a/src/gui/inventory.cpp +++ b/src/gui/inventory.cpp @@ -27,6 +27,7 @@ #include "../resources/image.h" #include "button.h" #include "../being.h" +#include "../engine.h" #include <sstream> InventoryWindow::InventoryWindow(): @@ -140,8 +141,8 @@ void InventoryWindow::action(const std::string &eventId) } } else if (eventId == "drop") { - dropItem(items->getIndex(), items->getQuantity()); - // TODO: now drop all the items, you should choose quantity instead + itemAmountWindow->resetAmount(); + itemAmountWindow->setVisible(true); } } } diff --git a/src/gui/inventory.h b/src/gui/inventory.h index f97a9b83..9c76e176 100644 --- a/src/gui/inventory.h +++ b/src/gui/inventory.h @@ -80,12 +80,13 @@ class InventoryWindow : public Window, gcn::ActionListener { */ void action(const std::string& eventId); + int dropItem(int index, int quantity); + ItemContainer *items; private: gcn::Button *useButton, *dropButton; int useItem(int index, int id); - int dropItem(int index, int quantity); void unequipItem(int index); }; diff --git a/src/gui/item_amount.cpp b/src/gui/item_amount.cpp new file mode 100644 index 00000000..e627659e --- /dev/null +++ b/src/gui/item_amount.cpp @@ -0,0 +1,142 @@ +/* + * 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 "item_amount.h" +#include "button.h" +#include "../engine.h" +#include "../main.h" + +ItemAmountWindow::ItemAmountWindow(): + Window("Select amount of items to drop.") +{ + + // New labels + itemAmountLabel = new gcn::Label("1"); + + // New buttons + itemAmountMinusButton = new Button("-"); + itemAmountPlusButton = new Button("+"); + itemAmountOkButton = new Button("Okay"); + itemAmountCancelButton = new Button("Cancel"); + + // Set button events Id + itemAmountMinusButton->setEventId("Minus"); + itemAmountPlusButton->setEventId("Plus"); + itemAmountOkButton->setEventId("Drop"); + itemAmountCancelButton->setEventId("Cancel"); + + // Set position + itemAmountLabel->setPosition(35, 10); + itemAmountPlusButton->setPosition(60, 5); + itemAmountMinusButton->setPosition(10, 5); + itemAmountOkButton->setPosition(10, 40); + itemAmountCancelButton->setPosition(60, 40); + + // Assemble + add(itemAmountLabel); + add(itemAmountPlusButton); + add(itemAmountMinusButton); + add(itemAmountOkButton); + add(itemAmountCancelButton); + + itemAmountPlusButton->addActionListener(this); + itemAmountMinusButton->addActionListener(this); + itemAmountOkButton->addActionListener(this); + itemAmountCancelButton->addActionListener(this); + + resetAmount(); + + setSize(200, 80); + setLocationRelativeTo(getParent()); +} + +ItemAmountWindow::~ItemAmountWindow() { + delete itemAmountLabel; + delete itemAmountPlusButton; + delete itemAmountMinusButton; + delete itemAmountOkButton; + delete itemAmountCancelButton; +} + +void ItemAmountWindow::resetAmount() { + amount = 1; + itemAmountLabel->setCaption("1"); +} + +void ItemAmountWindow::action(const std::string& eventId) { + if (eventId == "Cancel") + { + resetAmount(); + setVisible(false); + } else if (eventId == "Drop") + { + inventoryWindow->dropItem(inventoryWindow->items->getIndex(), amount); + resetAmount(); + setVisible(false); + } else if (eventId == "Plus") + { + if (amount < inventoryWindow->items->getQuantity()) + { + char tmpplus[128]; + amount++; + sprintf(tmpplus, "%i", amount); + itemAmountLabel->setCaption(tmpplus); + itemAmountLabel->adjustSize(); + } + } else if (eventId == "Minus") + { + if (amount > 1) + { + char tmpminus[128]; + amount = amount - 1; + sprintf(tmpminus, "%i", amount); + itemAmountLabel->setCaption(tmpminus); + itemAmountLabel->adjustSize(); + } + } + + /*WFIFOW(0) = net_w_value(0x00bb); + + if (eventId == "STR") { + WFIFOW(2) = net_w_value(0x000d); + } + if (eventId == "AGI") { + WFIFOW(2) = net_w_value(0x000e); + } + if (eventId == "VIT") { + WFIFOW(2) = net_w_value(0x000f); + } + if (eventId == "INT") { + WFIFOW(2) = net_w_value(0x0010); + } + if (eventId == "DEX") { + WFIFOW(2) = net_w_value(0x0011); + } + if (eventId == "LUK") { + WFIFOW(2) = net_w_value(0x0012); + } + + flush(); + WFIFOW(4) = net_b_value(1); + WFIFOSET(5); */ +} diff --git a/src/gui/item_amount.h b/src/gui/item_amount.h new file mode 100644 index 00000000..c3a06ef1 --- /dev/null +++ b/src/gui/item_amount.h @@ -0,0 +1,73 @@ +/* + * 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 _TMW_ITEM_AMOUNT_WINDOW_H +#define _TMW_ITEM_AMOUNT_WINDOW_H + +#include "window.h" +#include <string> +#include <sstream> + +class ItemAmountWindow : public Window, public gcn::ActionListener { + public: + /** + * Constructor. + */ + ItemAmountWindow(); + + /** + * Destructor. + */ + virtual ~ItemAmountWindow(); + + /** + * Called when receiving actions from widget. + */ + void action(const std::string& eventId); + + /** + * Sets default amount value. + */ + void resetAmount(); + + private: + /** + * Amount of items to be dropped + */ + int amount; + + /** + * Item Amount captions. + */ + gcn::Label *itemAmountLabel; + + /** + * Item Amount buttons. + */ + gcn::Button *itemAmountPlusButton; + gcn::Button *itemAmountMinusButton; + gcn::Button *itemAmountOkButton; + gcn::Button *itemAmountCancelButton; +}; + +#endif /* _TMW_ITEM_AMOUNT_WINDOW_H */ |