Attached Files |
0001-Add-toggle-to-filter-useless-items-from-search-resul.patch [^] (8,383 bytes) 2013-08-23 20:57 [Show Content] [Hide Content]From d8cc8f0eea4b3dd6ce1a2110c242702b181ae7ad Mon Sep 17 00:00:00 2001
From: BlackSheep <chris.terenzi@gmail.com>
Date: Fri, 23 Aug 2013 14:47:38 -0400
Subject: [PATCH] Add toggle to filter useless items from search results
---
crawl-ref/source/stash.cc | 122 +++++++++++++++++++++++++++++++++++++++-------
crawl-ref/source/stash.h | 3 +-
2 files changed, 107 insertions(+), 18 deletions(-)
diff --git a/crawl-ref/source/stash.cc b/crawl-ref/source/stash.cc
index 7cab850..c4a5201 100644
--- a/crawl-ref/source/stash.cc
+++ b/crawl-ref/source/stash.cc
@@ -1802,6 +1802,7 @@ void StashTracker::search_stashes()
bool sort_by_dist = true;
bool show_as_stacks = true;
+ bool filter_useless = false;
while (true)
{
// Note that sort_by_dist and show_as_stacks can be modified by the
@@ -1809,7 +1810,8 @@ void StashTracker::search_stashes()
// sorted by the call as appropriate:
const bool again = display_search_results(results,
sort_by_dist,
- show_as_stacks);
+ show_as_stacks,
+ filter_useless);
if (!again)
break;
}
@@ -1845,20 +1847,24 @@ void StashTracker::get_matching_stashes(
class StashSearchMenu : public Menu
{
public:
- StashSearchMenu(const char* stack_style_,const char* sort_style_)
+ StashSearchMenu(const char* stack_style_,const char* sort_style_,const char* filtered_)
: Menu(), can_travel(true),
request_toggle_sort_method(false),
request_toggle_show_as_stack(false),
+ request_toggle_filter_useless(false),
stack_style(stack_style_),
- sort_style(sort_style_)
+ sort_style(sort_style_),
+ filtered(filtered_)
{ }
public:
bool can_travel;
bool request_toggle_sort_method;
bool request_toggle_show_as_stack;
+ bool request_toggle_filter_useless;
const char* stack_style;
const char* sort_style;
+ const char* filtered;
protected:
bool process_key(int key);
@@ -1871,10 +1877,7 @@ void StashSearchMenu::draw_title()
{
cgotoxy(1, 1);
formatted_string fs = formatted_string(title->colour);
- fs.cprintf("%d %s%s, %s %s",
- title->quantity, title->text.c_str(),
- title->quantity > 1? "es" : "",
- stack_style, sort_style);
+ fs.cprintf("%s %s %s", stack_style, sort_style, filtered);
fs.display();
#ifdef USE_TILE_WEB
@@ -1883,11 +1886,12 @@ void StashSearchMenu::draw_title()
draw_title_suffix(formatted_string::parse_string(make_stringf(
"<lightgrey> [<w>a-z</w>: %s"
- " <w>?</w>/<w>!</w>: %s"
- " <w>-</w>: stacking"
- " <w>/</w>: sorting]",
- menu_action == ACT_EXECUTE ? "travel" : "examine",
- menu_action == ACT_EXECUTE ? "examine" : "travel")), false);
+ " <w>?</w>/<w>!</w>: %s"
+ " <w>-</w>:stacking"
+ " <w>/</w>:sorting"
+ " <w>=</w>:filter]",
+ menu_action == ACT_EXECUTE ? "go" : "view",
+ menu_action == ACT_EXECUTE ? "view" : "go")), false);
}
}
@@ -1904,6 +1908,11 @@ bool StashSearchMenu::process_key(int key)
request_toggle_show_as_stack = true;
return false;
}
+ else if (key == '=')
+ {
+ request_toggle_filter_useless = true;
+ return false;
+ }
return Menu::process_key(key);
}
@@ -1925,6 +1934,61 @@ string ShopInfo::get_shop_item_name(const item_def& search_item) const
return "";
}
+static void _stash_filter_useless(const vector<stash_search_result> &in,
+ vector<stash_search_result> &out)
+{
+ // Creates search results vector with useless items filtered
+ out.clear();
+ out.reserve(in.size());
+ for (unsigned i = 0; i < in.size(); ++i)
+ {
+ vector<item_def> items;
+
+ // expand shop inventory
+ if (in[i].matching_items.empty() && in[i].shop)
+ items = in[i].shop->inventory();
+ else if (!in[i].count)
+ {
+ //don't filter features
+ out.push_back(in[i]);
+ continue;
+ }
+ else
+ items = in[i].matching_items;
+
+ stash_search_result tmp = in[i];
+
+ tmp.count = 0;
+ tmp.matches = 0;
+ tmp.matching_items.clear();
+ for (unsigned j = 0; j < items.size(); ++j)
+ {
+ const item_def &item = items[j];
+ if (is_useless_item(item, false))
+ continue;
+
+ if (!tmp.count)
+ {
+ //find new 'first' item name
+ tmp.match = Stash::stash_item_name(item);
+ if (tmp.shop)
+ {
+ // Need to check if the item is in the shop so we can add gold price...
+ string sn = tmp.shop->get_shop_item_name(item);
+ if (!sn.empty())
+ tmp.match=sn;
+ }
+ }
+ tmp.matching_items.push_back(item);
+ tmp.matches += item.quantity;
+ tmp.count++;
+ }
+
+ if(tmp.count > 0)
+ out.push_back(tmp);
+ }
+}
+
static void _stash_flatten_results(const vector<stash_search_result> &in,
vector<stash_search_result> &out)
{
@@ -1972,17 +2036,34 @@ static void _stash_flatten_results(const vector<stash_search_result> &in,
bool StashTracker::display_search_results(
vector<stash_search_result> &results_in,
bool& sort_by_dist,
- bool& show_as_stacks)
+ bool& show_as_stacks,
+ bool& filter_useless)
{
if (results_in.empty())
return false;
vector<stash_search_result> * results = &results_in;
vector<stash_search_result> results_single_items;
- if (!show_as_stacks)
+ vector<stash_search_result> results_filtered;
+
+ if (filter_useless)
{
- _stash_flatten_results(results_in, results_single_items);
- results = &results_single_items;
+ _stash_filter_useless(results_in, results_filtered);
+ if (!show_as_stacks)
+ {
+ _stash_flatten_results(results_filtered, results_single_items);
+ results = &results_single_items;
+ }
+ else
+ results = &results_filtered;
+ }
+ else
+ {
+ if (!show_as_stacks)
+ {
+ _stash_flatten_results(results_in, results_single_items);
+ results = &results_single_items;
+ }
}
if (sort_by_dist)
@@ -1991,7 +2072,8 @@ bool StashTracker::display_search_results(
sort(results->begin(), results->end(), compare_by_name());
StashSearchMenu stashmenu(show_as_stacks ? "stacks" : "items",
- sort_by_dist ? "by dist" : "by name");
+ sort_by_dist ? "by dist" : "by name",
+ filter_useless ? "filtered" : "unfiltered");
stashmenu.set_tag("stash");
stashmenu.can_travel = can_travel_interlevel();
stashmenu.action_cycle = Menu::CYCLE_TOGGLE;
@@ -2061,6 +2143,12 @@ bool StashTracker::display_search_results(
return true;
}
+ if (stashmenu.request_toggle_filter_useless)
+ {
+ filter_useless = !filter_useless;
+ return true;
+ }
+
if (sel.size() == 1
&& stashmenu.menu_action == StashSearchMenu::ACT_EXAMINE)
{
diff --git a/crawl-ref/source/stash.h b/crawl-ref/source/stash.h
index d6d05c4..8f18d73 100644
--- a/crawl-ref/source/stash.h
+++ b/crawl-ref/source/stash.h
@@ -352,7 +352,8 @@ private:
bool curr_lev = false) const;
bool display_search_results(vector<stash_search_result> &results,
bool& sort_by_dist,
- bool& show_as_stacks);
+ bool& show_as_stacks,
+ bool& filter_useless);
string stash_search_prompt();
private:
--
1.8.1.2
0001-Variable-width-menu-title-for-stash-search-results.patch [^] (1,565 bytes) 2013-08-26 19:40 [Show Content] [Hide Content]From 815559b61dcdcd8b02514194fe4dc73a4087845b Mon Sep 17 00:00:00 2001
From: BlackSheep <chris.terenzi@gmail.com>
Date: Mon, 26 Aug 2013 13:18:51 -0400
Subject: [PATCH] Variable width menu title for stash search results
---
crawl-ref/source/stash.cc | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/crawl-ref/source/stash.cc b/crawl-ref/source/stash.cc
index c4a5201..399d4dc 100644
--- a/crawl-ref/source/stash.cc
+++ b/crawl-ref/source/stash.cc
@@ -1875,8 +1875,15 @@ void StashSearchMenu::draw_title()
{
if (title)
{
+ const unsigned avail_width = get_number_of_cols();
cgotoxy(1, 1);
formatted_string fs = formatted_string(title->colour);
+ if (avail_width > 92)
+ {
+ fs.cprintf("%d %s%s, ",
+ title->quantity, title->text.c_str(),
+ title->quantity > 1 ? "es" : "");
+ }
fs.cprintf("%s %s %s", stack_style, sort_style, filtered);
fs.display();
@@ -1889,9 +1896,10 @@ void StashSearchMenu::draw_title()
" <w>?</w>/<w>!</w>: %s"
" <w>-</w>:stacking"
" <w>/</w>:sorting"
- " <w>=</w>:filter]",
+ " <w>=</w>:filter%s]",
menu_action == ACT_EXECUTE ? "go" : "view",
- menu_action == ACT_EXECUTE ? "view" : "go")), false);
+ menu_action == ACT_EXECUTE ? "view" : "go",
+ avail_width > 100 ? " useless" : "")), false);
}
}
--
1.8.1.2
0001-Restore-match-count-to-search-results-and-move-toggl.patch [^] (4,549 bytes) 2013-08-27 19:41 [Show Content] [Hide Content]From eba644afc603eccf1bf18dee162b6357d248154b Mon Sep 17 00:00:00 2001
From: BlackSheep <chris.terenzi@gmail.com>
Date: Tue, 27 Aug 2013 13:40:48 -0400
Subject: [PATCH] Restore match count to search results and move toggle status
into help text
---
crawl-ref/source/stash.cc | 35 +++++++++++++++++------------------
crawl-ref/source/stash.h | 3 ++-
2 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/crawl-ref/source/stash.cc b/crawl-ref/source/stash.cc
index 399d4dc..9561b9a 100644
--- a/crawl-ref/source/stash.cc
+++ b/crawl-ref/source/stash.cc
@@ -1803,6 +1803,7 @@ void StashTracker::search_stashes()
bool sort_by_dist = true;
bool show_as_stacks = true;
bool filter_useless = false;
+ bool default_execute = true;
while (true)
{
// Note that sort_by_dist and show_as_stacks can be modified by the
@@ -1811,7 +1812,8 @@ void StashTracker::search_stashes()
const bool again = display_search_results(results,
sort_by_dist,
show_as_stacks,
- filter_useless);
+ filter_useless,
+ default_execute);
if (!again)
break;
}
@@ -1875,16 +1877,11 @@ void StashSearchMenu::draw_title()
{
if (title)
{
- const unsigned avail_width = get_number_of_cols();
cgotoxy(1, 1);
formatted_string fs = formatted_string(title->colour);
- if (avail_width > 92)
- {
- fs.cprintf("%d %s%s, ",
- title->quantity, title->text.c_str(),
- title->quantity > 1 ? "es" : "");
- }
- fs.cprintf("%s %s %s", stack_style, sort_style, filtered);
+ fs.cprintf("%d %s%s,",
+ title->quantity, title->text.c_str(),
+ title->quantity > 1 ? "es" : "");
fs.display();
#ifdef USE_TILE_WEB
@@ -1894,12 +1891,12 @@ void StashSearchMenu::draw_title()
draw_title_suffix(formatted_string::parse_string(make_stringf(
"<lightgrey> [<w>a-z</w>: %s"
" <w>?</w>/<w>!</w>: %s"
- " <w>-</w>:stacking"
- " <w>/</w>:sorting"
- " <w>=</w>:filter%s]",
- menu_action == ACT_EXECUTE ? "go" : "view",
- menu_action == ACT_EXECUTE ? "view" : "go",
- avail_width > 100 ? " useless" : "")), false);
+ " <w>-</w>:show %s"
+ " <w>/</w>:sort %s"
+ " <w>=</w>:%s]",
+ menu_action == ACT_EXECUTE ? "travel" : "view",
+ menu_action == ACT_EXECUTE ? "view" : "travel",
+ stack_style, sort_style, filtered)), false);
}
}
@@ -2045,7 +2042,8 @@ bool StashTracker::display_search_results(
vector<stash_search_result> &results_in,
bool& sort_by_dist,
bool& show_as_stacks,
- bool& filter_useless)
+ bool& filter_useless,
+ bool& default_execute)
{
if (results_in.empty())
return false;
@@ -2085,7 +2083,7 @@ bool StashTracker::display_search_results(
stashmenu.set_tag("stash");
stashmenu.can_travel = can_travel_interlevel();
stashmenu.action_cycle = Menu::CYCLE_TOGGLE;
- stashmenu.menu_action = Menu::ACT_EXECUTE;
+ stashmenu.menu_action = default_execute ? Menu::ACT_EXECUTE : Menu::ACT_EXAMINE;
string title = "match";
MenuEntry *mtitle = new MenuEntry(title, MEL_TITLE);
@@ -2138,7 +2136,8 @@ bool StashTracker::display_search_results(
while (true)
{
sel = stashmenu.show();
-
+
+ default_execute = stashmenu.menu_action == Menu::ACT_EXECUTE;
if (stashmenu.request_toggle_sort_method)
{
sort_by_dist = !sort_by_dist;
diff --git a/crawl-ref/source/stash.h b/crawl-ref/source/stash.h
index 8f18d73..86a3ef4 100644
--- a/crawl-ref/source/stash.h
+++ b/crawl-ref/source/stash.h
@@ -353,7 +353,8 @@ private:
bool display_search_results(vector<stash_search_result> &results,
bool& sort_by_dist,
bool& show_as_stacks,
- bool& filter_useless);
+ bool& filter_useless,
+ bool& default_execute);
string stash_search_prompt();
private:
--
1.8.1.2
|