In element search promote exact and starting position matches (finally possible to access VAC via element search)

This commit is contained in:
mniip 2013-12-15 22:54:43 +04:00
parent 035dfa2e04
commit 9db1358ca3

View File

@ -98,55 +98,69 @@ void ElementSearchActivity::searchTools(std::string query)
std::string queryLower = std::string(query);
std::transform(queryLower.begin(), queryLower.end(), queryLower.begin(), ::tolower);
for(std::vector<Tool*>::iterator iter = tools.begin(), end = tools.end(); iter != end; ++iter) {
std::vector<Tool *> matches;
std::vector<Tool *> frontmatches;
std::vector<Tool *> exactmatches;
for(std::vector<Tool*>::const_iterator iter = tools.begin(), end = tools.end(); iter != end; ++iter)
{
std::string nameLower = std::string((*iter)->GetName());
std::transform(nameLower.begin(), nameLower.end(), nameLower.begin(), ::tolower);
if(!strcmp(nameLower.c_str(), queryLower.c_str()))
exactmatches.push_back(*iter);
else if(!strncmp(nameLower.c_str(), queryLower.c_str(), queryLower.length()))
frontmatches.push_back(*iter);
else if(!strstr(nameLower.c_str(), queryLower.c_str()))
matches.push_back(*iter);
}
if(strstr(nameLower.c_str(), queryLower.c_str())!=0)
matches.insert(matches.begin(), frontmatches.begin(), frontmatches.end());
matches.insert(matches.begin(), exactmatches.begin(), exactmatches.end());
for(std::vector<Tool*>::const_iterator iter = matches.begin(), end = matches.end(); iter != end; ++iter)
{
Tool * tool = *iter;
if(!firstResult)
firstResult = tool;
VideoBuffer * tempTexture = tool->GetTexture(26, 14);
ToolButton * tempButton;
if(tempTexture)
tempButton = new ToolButton(current+viewPosition, ui::Point(30, 18), "", tool->GetDescription());
else
tempButton = new ToolButton(current+viewPosition, ui::Point(30, 18), tool->GetName(), tool->GetDescription());
tempButton->Appearance.SetTexture(tempTexture);
tempButton->Appearance.BackgroundInactive = ui::Colour(tool->colRed, tool->colGreen, tool->colBlue);
tempButton->SetActionCallback(new ToolAction(this, tool));
if(gameController->GetActiveTool(0) == tool)
{
Tool * tool = *iter;
if(!firstResult)
firstResult = tool;
VideoBuffer * tempTexture = tool->GetTexture(26, 14);
ToolButton * tempButton;
if(tempTexture)
tempButton = new ToolButton(current+viewPosition, ui::Point(30, 18), "", tool->GetDescription());
else
tempButton = new ToolButton(current+viewPosition, ui::Point(30, 18), tool->GetName(), tool->GetDescription());
tempButton->Appearance.SetTexture(tempTexture);
tempButton->Appearance.BackgroundInactive = ui::Colour(tool->colRed, tool->colGreen, tool->colBlue);
tempButton->SetActionCallback(new ToolAction(this, tool));
if(gameController->GetActiveTool(0) == tool)
{
tempButton->SetSelectionState(0); //Primary
}
else if(gameController->GetActiveTool(1) == tool)
{
tempButton->SetSelectionState(1); //Secondary
}
else if(gameController->GetActiveTool(2) == tool)
{
tempButton->SetSelectionState(2); //Tertiary
}
toolButtons.push_back(tempButton);
AddComponent(tempButton);
current.X += 31;
if(current.X + 30 > searchField->Size.X) {
current.X = 0;
current.Y += 19;
}
if(current.Y + viewPosition.Y + 18 > Size.Y-23)
break;
tempButton->SetSelectionState(0); //Primary
}
else if(gameController->GetActiveTool(1) == tool)
{
tempButton->SetSelectionState(1); //Secondary
}
else if(gameController->GetActiveTool(2) == tool)
{
tempButton->SetSelectionState(2); //Tertiary
}
toolButtons.push_back(tempButton);
AddComponent(tempButton);
current.X += 31;
if(current.X + 30 > searchField->Size.X) {
current.X = 0;
current.Y += 19;
}
if(current.Y + viewPosition.Y + 18 > Size.Y-23)
break;
}
}