Added: Text search to inventory

--HG--
branch : develop
This commit is contained in:
Nimetu 2017-07-12 21:19:40 +03:00
parent 455a923031
commit 7350291a56
4 changed files with 88 additions and 1 deletions

View file

@ -549,7 +549,7 @@
pop_min_h="240" pop_min_h="240"
pop_max_w="920" pop_max_w="920"
pop_max_h="1600" pop_max_h="1600"
w="300" w="400"
h="400" h="400"
movable="true" movable="true"
active="false" active="false"

View file

@ -6589,6 +6589,18 @@
dblink="UI:SAVE:#inv_type:FILTER_ARMOR" dblink="UI:SAVE:#inv_type:FILTER_ARMOR"
texture="filter_armor.tga" texture="filter_armor.tga"
tooltip="uittFilterArmor" /> tooltip="uittFilterArmor" />
<instance template="edit_box_widget"
id="inv_query_eb"
posref="BR BR"
x="-190"
y="1"
w="100"
clear_on_escape="true"
enter_recover_focus="false"
max_num_chars="20"
max_historic="0"
onenter="inv_set_search"
onchange="inv_set_search" onchange_params="#inv_type" />
<!-- details --> <!-- details -->
<instance template="tinv_item_list_icon_swap" <instance template="tinv_item_list_icon_swap"
id="detail" id="detail"

View file

@ -39,6 +39,7 @@
// For handlers // For handlers
#include "nel/gui/action_handler.h" #include "nel/gui/action_handler.h"
#include "nel/gui/group_editbox.h"
#include "dbctrl_sheet.h" #include "dbctrl_sheet.h"
#include "../sheet_manager.h" #include "../sheet_manager.h"
@ -2010,6 +2011,18 @@ bool SBagOptions::parse(xmlNodePtr cur, CInterfaceGroup * /* parentGroup */)
return true; return true;
} }
// ***************************************************************************
void SBagOptions::setSearchFilter(const ucstring &s)
{
SearchFilter.clear();
SearchFilterChanged = true;
if (!s.empty())
{
splitUCString(toLower(s), ucstring(" "), SearchFilter);
}
}
// *************************************************************************** // ***************************************************************************
bool SBagOptions::isSomethingChanged() bool SBagOptions::isSomethingChanged()
{ {
@ -2057,6 +2070,12 @@ bool SBagOptions::isSomethingChanged()
LastDbFilterTP = (DbFilterTP->getValue8() != 0); LastDbFilterTP = (DbFilterTP->getValue8() != 0);
} }
if (SearchFilterChanged)
{
bRet = true;
SearchFilterChanged = false;
}
return bRet; return bRet;
} }
@ -2075,6 +2094,26 @@ bool SBagOptions::canDisplay(CDBCtrlSheet *pCS) const
const CItemSheet *pIS = pCS->asItemSheet(); const CItemSheet *pIS = pCS->asItemSheet();
if (pIS != NULL) if (pIS != NULL)
{ {
if (SearchFilter.size() > 0)
{
bool match = true;
ucstring lcName = toLower(pCS->getItemActualName());
// add item quality as a keyword to match
if (pCS->getQuality() > 1)
{
lcName += ucstring(" " + toString(pCS->getQuality()));
}
for (uint i = 0; i< SearchFilter.size(); ++i)
{
if (lcName.find(SearchFilter[i]) == ucstring::npos)
{
return false;
}
}
}
// Armor // Armor
if ((pIS->Family == ITEMFAMILY::ARMOR) || if ((pIS->Family == ITEMFAMILY::ARMOR) ||
(pIS->Family == ITEMFAMILY::JEWELRY)) (pIS->Family == ITEMFAMILY::JEWELRY))
@ -2455,6 +2494,30 @@ class CHandlerInvDrag : public IActionHandler
}; };
REGISTER_ACTION_HANDLER( CHandlerInvDrag, "inv_drag" ); REGISTER_ACTION_HANDLER( CHandlerInvDrag, "inv_drag" );
// **********************************************************************************************************
class CHandlerInvSetSearch : public IActionHandler
{
void execute (CCtrlBase *pCaller, const std::string &sParams)
{
if (!pCaller) return;
CGroupEditBox *eb = dynamic_cast<CGroupEditBox *>(pCaller);
if (!eb) return;
CInterfaceManager *pIM = CInterfaceManager::getInstance();
// ui:interface:inventory:content:bag:iil:inv_query_eb:eb
string invId = pCaller->getParent()->getParent()->getId();
CDBGroupListSheetBag *pList = dynamic_cast<CDBGroupListSheetBag*>(CWidgetManager::getInstance()->getElementFromId(invId + ":bag_list"));
if (pList != NULL) pList->setSearchFilter(eb->getInputString());
CDBGroupIconListBag *pIcons = dynamic_cast<CDBGroupIconListBag*>(CWidgetManager::getInstance()->getElementFromId(invId + ":bag_icons"));
if (pIcons != NULL) pIcons->setSearchFilter(eb->getInputString());
}
};
REGISTER_ACTION_HANDLER( CHandlerInvSetSearch, "inv_set_search" );
// *************************************************************************** // ***************************************************************************
// COMMON INVENTORIES Test if we can drop an item to a slot or a list // COMMON INVENTORIES Test if we can drop an item to a slot or a list
class CHandlerInvCanDropTo : public IActionHandler class CHandlerInvCanDropTo : public IActionHandler

View file

@ -519,18 +519,26 @@ struct SBagOptions
bool LastDbFilterMP; bool LastDbFilterMP;
bool LastDbFilterMissMP; bool LastDbFilterMissMP;
bool LastDbFilterTP; bool LastDbFilterTP;
bool SearchFilterChanged;
std::vector<ucstring> SearchFilter;
// ----------------------- // -----------------------
SBagOptions() SBagOptions()
{ {
InvType = CInventoryManager::InvUnknown; InvType = CInventoryManager::InvUnknown;
DbFilterArmor = DbFilterWeapon = DbFilterTool = DbFilterMP = DbFilterMissMP = DbFilterTP = NULL; DbFilterArmor = DbFilterWeapon = DbFilterTool = DbFilterMP = DbFilterMissMP = DbFilterTP = NULL;
LastDbFilterArmor = LastDbFilterWeapon = LastDbFilterTool = LastDbFilterMP = LastDbFilterMissMP = LastDbFilterTP = false; LastDbFilterArmor = LastDbFilterWeapon = LastDbFilterTool = LastDbFilterMP = LastDbFilterMissMP = LastDbFilterTP = false;
SearchFilterChanged = false;
} }
bool parse (xmlNodePtr cur, CInterfaceGroup *parentGroup); bool parse (xmlNodePtr cur, CInterfaceGroup *parentGroup);
bool isSomethingChanged(); // From last call ? bool isSomethingChanged(); // From last call ?
bool isSearchFilterChanged() const { return SearchFilterChanged; }
void setSearchFilter(const ucstring &s);
bool getFilterArmor() const bool getFilterArmor() const
{ {
if (DbFilterArmor == NULL) return true; if (DbFilterArmor == NULL) return true;
@ -621,6 +629,8 @@ public:
// Return true if the sheet can be displayed due to filters // Return true if the sheet can be displayed due to filters
bool canDisplay(CDBCtrlSheet *pCS) { return _BO.canDisplay(pCS); } bool canDisplay(CDBCtrlSheet *pCS) { return _BO.canDisplay(pCS); }
void setSearchFilter(const ucstring &s) { _BO.setSearchFilter(s); }
private: private:
SBagOptions _BO; SBagOptions _BO;
@ -652,6 +662,8 @@ public:
// Return true if the sheet can be displayed due to filters // Return true if the sheet can be displayed due to filters
bool canDisplay(CDBCtrlSheet *pCS) const { return _BO.canDisplay(pCS); } bool canDisplay(CDBCtrlSheet *pCS) const { return _BO.canDisplay(pCS); }
void setSearchFilter(const ucstring &s) { _BO.setSearchFilter(s); }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// A child node // A child node