[Radar] Feature request: Have Focus Next/Prev wrap around when it reaches the end
This commit is contained in:
@@ -1252,26 +1252,35 @@ void LLFloaterAvatarList::setFocusAvatar(const LLUUID& id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Simple function to decrement iterators, wrapping back if needed
|
||||||
|
template<typename T>
|
||||||
|
T prev_iter(const T& cur, const T& begin, const T& end)
|
||||||
|
{
|
||||||
|
return ((cur == begin) ? end : cur) - 1;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void decrement_focus_target(T begin, T end, BOOL marked_only)
|
void decrement_focus_target(T begin, T end, BOOL marked_only)
|
||||||
{
|
{
|
||||||
T iter = begin;
|
for (T iter = begin; iter != end; ++iter)
|
||||||
while(iter != end && !(*iter)->isFocused()) ++iter;
|
|
||||||
if(iter == end)
|
|
||||||
return;
|
|
||||||
T prev_iter = iter;
|
|
||||||
while(prev_iter != begin)
|
|
||||||
{
|
{
|
||||||
const LLAvatarListEntry& entry = *((--prev_iter)->get());
|
LLAvatarListEntry& old = *(iter->get());
|
||||||
if(entry.isInList() && (entry.isMarked() || !marked_only) && gAgentCamera.lookAtObject(entry.getID(), false))
|
if (!old.isFocused()) continue;
|
||||||
|
for (T prev = prev_iter(iter, begin, end); prev != iter; prev = prev_iter(prev, begin, end))
|
||||||
{
|
{
|
||||||
(*iter)->setFocus(FALSE);
|
LLAvatarListEntry& entry = *(prev->get());
|
||||||
(*prev_iter)->setFocus(TRUE);
|
if (!entry.isInList()) continue;
|
||||||
gAgentCamera.lookAtObject((*prev_iter)->getID(), false);
|
if (marked_only && !entry.isMarked()) continue;
|
||||||
return;
|
if (gAgentCamera.lookAtObject(entry.getID(), false))
|
||||||
|
{
|
||||||
|
old.setFocus(false);
|
||||||
|
entry.setFocus(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// Nothing else to focus
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
gAgentCamera.lookAtObject((*iter)->getID(), false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLFloaterAvatarList::focusOnPrev(BOOL marked_only)
|
void LLFloaterAvatarList::focusOnPrev(BOOL marked_only)
|
||||||
|
|||||||
Reference in New Issue
Block a user