diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-05-03 20:09:53 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-05-03 20:09:53 +0300 |
commit | 602fd127d09c995bc5470218c862b2cebfc558d5 (patch) | |
tree | 6937760eb81a234c2aaf9c7494f6bce02176a2f5 /src/gui/windows | |
parent | fef6ebca9c454f99d44e950c4628270b124c445f (diff) | |
download | manaplus-602fd127d09c995bc5470218c862b2cebfc558d5.tar.gz manaplus-602fd127d09c995bc5470218c862b2cebfc558d5.tar.bz2 manaplus-602fd127d09c995bc5470218c862b2cebfc558d5.tar.xz manaplus-602fd127d09c995bc5470218c862b2cebfc558d5.zip |
Add filter into buy dialogs.
Diffstat (limited to 'src/gui/windows')
-rw-r--r-- | src/gui/windows/buydialog.cpp | 43 | ||||
-rw-r--r-- | src/gui/windows/buydialog.h | 5 |
2 files changed, 48 insertions, 0 deletions
diff --git a/src/gui/windows/buydialog.cpp b/src/gui/windows/buydialog.cpp index 2fbe58ed2..7f5c79cf5 100644 --- a/src/gui/windows/buydialog.cpp +++ b/src/gui/windows/buydialog.cpp @@ -44,6 +44,7 @@ #include "gui/widgets/scrollarea.h" #include "gui/widgets/shoplistbox.h" #include "gui/widgets/slider.h" +#include "gui/widgets/textfield.h" #include "net/adminhandler.h" #include "net/buysellhandler.h" @@ -177,6 +178,8 @@ BuyDialog::BuyDialog() : SelectionListener(), mSortModel(nullptr), mSortDropDown(nullptr), + mFilterTextField(new TextField(this, "", true, this, "namefilter", true)), + mFilterLabel(nullptr), mNpcId(Items), mMoney(0), mAmountItems(0), @@ -193,6 +196,8 @@ BuyDialog::BuyDialog(const int npcId) : SelectionListener(), mSortModel(nullptr), mSortDropDown(nullptr), + mFilterTextField(new TextField(this, "", true, this, "namefilter", true)), + mFilterLabel(nullptr), mNpcId(npcId), mMoney(0), mAmountItems(0), @@ -209,6 +214,8 @@ BuyDialog::BuyDialog(std::string nick) : SelectionListener(), mSortModel(new SortListModelBuy), mSortDropDown(new DropDown(this, mSortModel, false, false, this, "sort")), + mFilterTextField(new TextField(this, "", true, this, "namefilter", true)), + mFilterLabel(nullptr), mNpcId(Nick), mMoney(0), mAmountItems(0), @@ -287,6 +294,8 @@ void BuyDialog::init() mShopItemList->addActionListener(this); mShopItemList->addSelectionListener(this); + mFilterTextField->setWidth(100); + ContainerPlacer placer = getPlacer(0, 0); placer(0, 0, mScrollArea, 9, 5).setPadding(3); placer(0, 5, mDecreaseButton); @@ -298,7 +307,17 @@ void BuyDialog::init() placer(2, 6, mAmountField, 2); placer(0, 7, mMoneyLabel, 8); if (mSortDropDown) + { placer(0, 8, mSortDropDown, 2); + } + else + { + // TRANSLATORS: buy dialog label + mFilterLabel = new Label(this, _("Filter:")); + mFilterLabel->adjustSize(); + placer(0, 8, mFilterLabel, 2); + } + placer(2, 8, mFilterTextField, 2); placer(7, 8, mBuyButton); placer(8, 8, mQuitButton); @@ -422,6 +441,10 @@ void BuyDialog::action(const ActionEvent &event) config.setValue("buySortOrder", mSortDropDown->getSelected()); return; } + else if (eventId == "namefilter") + { + applyNameFilter(mFilterTextField->getText()); + } const int selectedItem = mShopItemList->getSelected(); @@ -624,3 +647,23 @@ void BuyDialog::closeAll() (*it)->close(); } } + +void BuyDialog::applyNameFilter(const std::string &filter) +{ + std::vector<ShopItem*> &items = mShopItems->allItems(); + std::string filterStr = filter; + toLower(filterStr); + FOR_EACH (std::vector<ShopItem*>::iterator, it, items) + { + ShopItem *const item = *it; + if (!item) + continue; + std::string name = item->getName(); + toLower(name); + if (name.find(filterStr) != std::string::npos) + item->setVisible(true); + else + item->setVisible(false); + } + mShopItems->updateList(); +} diff --git a/src/gui/windows/buydialog.h b/src/gui/windows/buydialog.h index a96e0ff28..504a63154 100644 --- a/src/gui/windows/buydialog.h +++ b/src/gui/windows/buydialog.h @@ -38,6 +38,7 @@ class IntTextField; class Label; class ScrollArea; class Slider; +class TextField; /** * The buy dialog. @@ -149,6 +150,8 @@ class BuyDialog final : public Window, private: void updateSlider(const int selectedItem); + void applyNameFilter(const std::string &filter); + typedef std::list<BuyDialog*> DialogList; static DialogList instances; @@ -167,6 +170,8 @@ class BuyDialog final : public Window, ShopItems *mShopItems; SortListModelBuy *mSortModel; DropDown *mSortDropDown; + TextField *mFilterTextField; + Label *mFilterLabel; int mNpcId; int mMoney; |