summaryrefslogtreecommitdiff
path: root/src/gui/windows
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-05-03 20:09:53 +0300
committerAndrei Karas <akaras@inbox.ru>2015-05-03 20:09:53 +0300
commit602fd127d09c995bc5470218c862b2cebfc558d5 (patch)
tree6937760eb81a234c2aaf9c7494f6bce02176a2f5 /src/gui/windows
parentfef6ebca9c454f99d44e950c4628270b124c445f (diff)
downloadmanaplus-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.cpp43
-rw-r--r--src/gui/windows/buydialog.h5
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;