From abb525fbd1de2db45626098ed8ce2954aea92084 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Mon, 15 Oct 2012 08:28:00 +0000 Subject: [PATCH] - Shift+letter when clicking tileset,map or techtree will advance properly in the clicked direction --- source/glest_game/facilities/components.cpp | 26 +++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/source/glest_game/facilities/components.cpp b/source/glest_game/facilities/components.cpp index 2155cd4b..6f8ed30a 100644 --- a/source/glest_game/facilities/components.cpp +++ b/source/glest_game/facilities/components.cpp @@ -462,7 +462,7 @@ bool GraphicListBox::mouseClick(int x, int y,string advanceToItemStartingWith) { if(b1) { bool bFound = false; if(advanceToItemStartingWith != "") { - for(unsigned int i = 0; i < items.size(); ++i) { + for(unsigned int i = selectedItemIndex - 1; i >= 0; --i) { string item = items[i]; if(StartsWith(toLower(item),toLower(advanceToItemStartingWith)) == true) { bFound = true; @@ -470,6 +470,17 @@ bool GraphicListBox::mouseClick(int x, int y,string advanceToItemStartingWith) { break; } } + if(bFound == false) { + for(unsigned int i = items.size() - 1; i >= selectedItemIndex; --i) { + string item = items[i]; + //printf("Trying to match [%s] with item [%s]\n",advanceToItemStartingWith.c_str(),item.c_str()); + if(StartsWith(toLower(item),toLower(advanceToItemStartingWith)) == true) { + bFound = true; + selectedItemIndex = i; + break; + } + } + } } if(bFound == false) { selectedItemIndex--; @@ -481,7 +492,7 @@ bool GraphicListBox::mouseClick(int x, int y,string advanceToItemStartingWith) { else if(b2) { bool bFound = false; if(advanceToItemStartingWith != "") { - for(unsigned int i = 0; i < items.size(); ++i) { + for(unsigned int i = selectedItemIndex + 1; i < items.size(); ++i) { string item = items[i]; //printf("Trying to match [%s] with item [%s]\n",advanceToItemStartingWith.c_str(),item.c_str()); if(StartsWith(toLower(item),toLower(advanceToItemStartingWith)) == true) { @@ -490,6 +501,17 @@ bool GraphicListBox::mouseClick(int x, int y,string advanceToItemStartingWith) { break; } } + if(bFound == false) { + for(unsigned int i = 0; i <= selectedItemIndex; ++i) { + string item = items[i]; + //printf("Trying to match [%s] with item [%s]\n",advanceToItemStartingWith.c_str(),item.c_str()); + if(StartsWith(toLower(item),toLower(advanceToItemStartingWith)) == true) { + bFound = true; + selectedItemIndex = i; + break; + } + } + } } if(bFound == false) { selectedItemIndex++;