diff options
author | Andrei Karas <akaras@inbox.ru> | 2011-09-18 17:49:18 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2011-09-18 17:49:18 +0300 |
commit | 70b520b1e876f9698bb95baa2d274ea289a0c6bd (patch) | |
tree | 152c7519b0d9b8fb424af2373ec48db823a85575 /src/gui/inventorywindow.cpp | |
parent | 62ec17f6e489ec50f17219444468aeb8969dc961 (diff) | |
parent | 3b999f51c740d0541c53d223518e5e4bb482d996 (diff) | |
download | manaplus-70b520b1e876f9698bb95baa2d274ea289a0c6bd.tar.gz manaplus-70b520b1e876f9698bb95baa2d274ea289a0c6bd.tar.bz2 manaplus-70b520b1e876f9698bb95baa2d274ea289a0c6bd.tar.xz manaplus-70b520b1e876f9698bb95baa2d274ea289a0c6bd.zip |
Merge branch 'master' into strippedstripped1.1.9.18
Conflicts:
src/guichan/cliprectangle.cpp
src/guichan/focushandler.cpp
src/guichan/gui.cpp
src/guichan/include/guichan/cliprectangle.hpp
src/guichan/include/guichan/inputevent.hpp
src/guichan/include/guichan/keyevent.hpp
src/guichan/include/guichan/mouseevent.hpp
src/guichan/include/guichan/widgets/button.hpp
src/guichan/include/guichan/widgets/checkbox.hpp
src/guichan/include/guichan/widgets/dropdown.hpp
src/guichan/include/guichan/widgets/radiobutton.hpp
src/guichan/include/guichan/widgets/slider.hpp
src/guichan/include/guichan/widgets/tab.hpp
src/guichan/include/guichan/widgets/tabbedarea.hpp
src/guichan/include/guichan/widgets/textfield.hpp
src/guichan/include/guichan/widgets/window.hpp
src/guichan/inputevent.cpp
src/guichan/keyevent.cpp
src/guichan/mouseevent.cpp
src/guichan/widget.cpp
src/guichan/widgets/button.cpp
src/guichan/widgets/checkbox.cpp
src/guichan/widgets/dropdown.cpp
src/guichan/widgets/radiobutton.cpp
src/guichan/widgets/slider.cpp
src/guichan/widgets/tab.cpp
src/guichan/widgets/tabbedarea.cpp
src/guichan/widgets/textfield.cpp
src/guichan/widgets/window.cpp
Diffstat (limited to 'src/gui/inventorywindow.cpp')
-rw-r--r-- | src/gui/inventorywindow.cpp | 120 |
1 files changed, 82 insertions, 38 deletions
diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp index d0454c4e1..cd02a6732 100644 --- a/src/gui/inventorywindow.cpp +++ b/src/gui/inventorywindow.cpp @@ -22,6 +22,7 @@ #include "gui/inventorywindow.h" +#include "configuration.h" #include "inventory.h" #include "item.h" #include "units.h" @@ -38,6 +39,7 @@ #include "gui/widgets/button.h" #include "gui/widgets/container.h" +#include "gui/widgets/dropdown.h" #include "gui/widgets/inventoryfilter.h" #include "gui/widgets/itemcontainer.h" #include "gui/widgets/label.h" @@ -45,6 +47,7 @@ #include "gui/widgets/progressbar.h" #include "gui/widgets/radiobutton.h" #include "gui/widgets/scrollarea.h" +#include "gui/widgets/textfield.h" #include "net/inventoryhandler.h" #include "net/net.h" @@ -62,10 +65,38 @@ #include "debug.h" +const char *SORT_NAME[6] = +{ + N_("default"), + N_("by name"), + N_("by id"), + N_("by weight"), + N_("by amount"), + N_("by type") +}; + +class SortListModel : public gcn::ListModel +{ +public: + virtual ~SortListModel() + { } + + virtual int getNumberOfElements() + { return 6; } + + virtual std::string getElementAt(int i) + { + if (i >= getNumberOfElements() || i < 0) + return _("???"); + + return gettext(SORT_NAME[i]); + } +}; + InventoryWindow::WindowList InventoryWindow::instances; InventoryWindow::InventoryWindow(Inventory *inventory): - Window(), + Window("Inventory", false, 0, "inventory.xml"), mInventory(inventory), mDropButton(0), mSplit(false) @@ -105,25 +136,23 @@ InventoryWindow::InventoryWindow(Inventory *inventory): mSlotsLabel = new Label(_("Slots:")); mSlotsBar = new ProgressBar(0.0f, 100, 20, Theme::PROG_INVY_SLOTS); - mFilter = new InventoryFilter("filter_" + getWindowName(), 20, 5); + int size = config.getIntValue("fontSize"); + mFilter = new InventoryFilter("filter_" + getWindowName(), size, 0); mFilter->addActionListener(this); mFilter->setActionEventId("tag_"); - mSorter = new InventoryFilter("sorter_" + getWindowName(), 20, 0); - mSorter->addActionListener(this); - mSorter->setActionEventId("sort_"); + mSortModel = new SortListModel(); + mSortDropDown = new DropDown(mSortModel, this, "sort"); + mSortDropDown->setSelected(0); mFilterLabel = new Label(_("Filter:")); mSorterLabel = new Label(_("Sort:")); + mNameFilter = new TextField("", true, this, "namefilter", true); std::vector<std::string> tags = ItemDB::getTags(); for (unsigned f = 0; f < tags.size(); f ++) mFilter->addButton(tags[f]); - mSorter->addButton(_("na"), "na"); - mSorter->addButton(_("az"), "az"); - mSorter->addButton(_("id"), "id"); - if (isMainInventory()) { std::string equip = _("Equip"); @@ -154,10 +183,11 @@ InventoryWindow::InventoryWindow(Inventory *inventory): place(4, 0, mSlotsLabel, 1).setPadding(3); place(5, 0, mSlotsBar, 2); place(7, 0, mSorterLabel, 1); - place(8, 0, mSorter, 3); + place(8, 0, mSortDropDown, 3); place(0, 1, mFilterLabel, 1).setPadding(3); - place(1, 1, mFilter, 10).setPadding(3); + place(1, 1, mFilter, 7).setPadding(3); + place(8, 1, mNameFilter, 3); place(0, 2, invenScroll, 11).setPadding(3); place(0, 3, mUseButton); @@ -176,12 +206,13 @@ InventoryWindow::InventoryWindow(Inventory *inventory): mCloseButton = new Button(_("Close"), "close", this); place(0, 0, mSlotsLabel).setPadding(3); - place(1, 0, mSlotsBar, 3); - place(4, 0, mSorterLabel, 1); - place(5, 0, mSorter, 2); + place(1, 0, mSlotsBar, 4); + place(5, 0, mSorterLabel, 1); + place(6, 0, mSortDropDown, 1); place(0, 1, mFilterLabel, 1).setPadding(3); - place(1, 1, mFilter, 6).setPadding(3); + place(1, 1, mFilter, 5).setPadding(3); + place(6, 1, mNameFilter, 1); place(0, 2, invenScroll, 7, 4); place(0, 6, mStoreButton); @@ -219,6 +250,8 @@ InventoryWindow::~InventoryWindow() mInventory->removeInventoyListener(this); if (!instances.empty()) instances.front()->updateDropButton(); + delete mSortModel; + mSortModel = 0; } void InventoryWindow::action(const gcn::ActionEvent &event) @@ -258,22 +291,21 @@ void InventoryWindow::action(const gcn::ActionEvent &event) ItemAmountWindow::showWindow(ItemAmountWindow::StoreAdd, this, item); } + else if (event.getId() == "sort") + { + mItems->setSortType(mSortDropDown->getSelected()); + return; + } + else if (event.getId() == "namefilter") + { + mItems->setName(mNameFilter->getText()); + mItems->updateMatrix(); + } else if (!event.getId().find("tag_") && mItems) { std::string tagName = event.getId().substr(4); mItems->setFilter(ItemDB::getTagId(tagName)); - } - else if (!event.getId().find("sort_") && mItems) - { - int sortType = 0; - std::string str = event.getId().substr(5).c_str(); - if (str == "na") - sortType = 0; - else if (str == "az") - sortType = 1; - else if (str == "id") - sortType = 2; - mItems->setSortType(sortType); + return; } Item *item = mItems->getSelectedItem(); @@ -330,17 +362,12 @@ void InventoryWindow::action(const gcn::ActionEvent &event) else if (event.getId() == "split") { ItemAmountWindow::showWindow(ItemAmountWindow::ItemSplit, this, item, - (item->getQuantity() - 1)); + (item->getQuantity() - 1)); } else if (event.getId() == "retrieve") { - Item *item = mItems->getSelectedItem(); - - if (!item) - return; - - ItemAmountWindow::showWindow(ItemAmountWindow::StoreRemove, this, - item); + ItemAmountWindow::showWindow(ItemAmountWindow::StoreRemove, + this, item); } } @@ -532,7 +559,6 @@ void InventoryWindow::updateButtons(Item *item) else mSplitButton->setEnabled(false); } - } void InventoryWindow::setSplitAllowed(bool allowed) @@ -553,8 +579,8 @@ void InventoryWindow::close() } } -void InventoryWindow::event(Mana::Channels channel A_UNUSED, - const Mana::Event &event) +void InventoryWindow::processEvent(Mana::Channels channel A_UNUSED, + const Mana::Event &event) { if (event.getName() == Mana::EVENT_UPDATEATTRIBUTE) { @@ -622,3 +648,21 @@ void InventoryWindow::updateDropButton() mDropButton->setCaption(_("Drop")); } } + +bool InventoryWindow::isInputFocused() const +{ + return mNameFilter && mNameFilter->isFocused(); +} + +bool InventoryWindow::isAnyInputFocused() +{ + WindowList::const_iterator it = instances.begin(); + WindowList::const_iterator it_end = instances.end(); + + for (; it != it_end; ++it) + { + if ((*it) && (*it)->isInputFocused()) + return true; + } + return false; +} |