void FSAreaSearch::results() { if (!getVisible()) return; if (mRequested > 0 && mLastUpdateTimer.getElapsedTimeF32() < min_refresh_interval) return; const LLUUID selected = mResultList->getCurrentID(); const S32 scrollpos = mResultList->getScrollPos(); mResultList->deleteAllItems(); S32 i; S32 total = gObjectList.getNumObjects(); LLViewerRegion* our_region = gAgent.getRegion(); for (i = 0; i < total; i++) { LLViewerObject *objectp = gObjectList.getObject(i); if (objectp) { if (objectp->getRegion() == our_region && !objectp->isAvatar() && objectp->isRoot() && !objectp->flagTemporary() && !objectp->flagTemporaryOnRez()) { LLUUID object_id = objectp->getID(); if (mObjectDetails.count(object_id) == 0) { requestIfNeeded(objectp); } else { AObjectDetails* details = &mObjectDetails[object_id]; std::string object_name = details->name; std::string object_desc = details->desc; std::string object_owner; std::string object_group; gCacheName->getFullName(details->owner_id, object_owner); gCacheName->getGroupName(details->group_id, object_group); if (object_name != request_string) { if ((mSearchedName == "" || boost::ifind_first(object_name, mSearchedName)) && (mSearchedDesc == "" || boost::ifind_first(object_desc, mSearchedDesc)) && (mSearchedOwner == "" || boost::ifind_first(object_owner, mSearchedOwner)) && (mSearchedGroup == "" || boost::ifind_first(object_group, mSearchedGroup))) { LLSD element; element["id"] = object_id; element["columns"][LIST_OBJECT_NAME]["column"] = "Name"; element["columns"][LIST_OBJECT_NAME]["type"] = "text"; element["columns"][LIST_OBJECT_NAME]["value"] = details->name; element["columns"][LIST_OBJECT_DESC]["column"] = "Description"; element["columns"][LIST_OBJECT_DESC]["type"] = "text"; element["columns"][LIST_OBJECT_DESC]["value"] = details->desc; element["columns"][LIST_OBJECT_OWNER]["column"] = "Owner"; element["columns"][LIST_OBJECT_OWNER]["type"] = "text"; element["columns"][LIST_OBJECT_OWNER]["value"] = object_owner; element["columns"][LIST_OBJECT_GROUP]["column"] = "Group"; element["columns"][LIST_OBJECT_GROUP]["type"] = "text"; element["columns"][LIST_OBJECT_GROUP]["value"] = object_group; mResultList->addElement(element, ADD_BOTTOM); } } } } } } mResultList->updateSort(); mResultList->selectByID(selected); mResultList->setScrollPos(scrollpos); mCounterText->setText(llformat("%d listed/%d pending/%d total", mResultList->getItemCount(), mRequested, mObjectDetails.size())); mLastUpdateTimer.reset(); }
void JCFloaterAreaSearch::results() { if (!getVisible()) return; if (mPendingObjects.size() > 0 && mLastUpdateTimer.getElapsedTimeF32() < min_refresh_interval) return; //llinfos << "results()" << llendl; uuid_vec_t selected = mResultList->getSelectedIDs(); S32 scrollpos = mResultList->getScrollPos(); mResultList->deleteAllItems(); S32 i; S32 total = gObjectList.getNumObjects(); LLViewerRegion* our_region = gAgent.getRegion(); for (i = 0; i < total; i++) { LLViewerObject *objectp = gObjectList.getObject(i); if (objectp) { if (objectp->getRegion() == our_region && !objectp->isAvatar() && objectp->isRoot() && !objectp->flagTemporary() && !objectp->flagTemporaryOnRez()) { LLUUID object_id = objectp->getID(); if(!requestIfNeeded(object_id)) { std::map<LLUUID,ObjectData>::iterator it = mCachedObjects.find(object_id); if(it != mCachedObjects.end()) { //llinfos << "all entries are \"\" or we have data" << llendl; std::string object_name = it->second.name; std::string object_desc = it->second.desc; std::string object_owner; std::string object_group; gCacheName->getFullName(it->second.owner_id, object_owner); gCacheName->getGroupName(it->second.group_id, object_group); //llinfos << "both names are loaded or aren't needed" << llendl; std::string onU = object_owner; std::string cnU = object_group; LLStringUtil::toLower(object_name); LLStringUtil::toLower(object_desc); LLStringUtil::toLower(object_owner); LLStringUtil::toLower(object_group); if ((mFilterStrings[LIST_OBJECT_NAME].empty() || object_name.find(mFilterStrings[LIST_OBJECT_NAME]) != -1) && (mFilterStrings[LIST_OBJECT_DESC].empty() || object_desc.find(mFilterStrings[LIST_OBJECT_DESC]) != -1) && (mFilterStrings[LIST_OBJECT_OWNER].empty() || object_owner.find(mFilterStrings[LIST_OBJECT_OWNER]) != -1) && (mFilterStrings[LIST_OBJECT_GROUP].empty() || object_group.find(mFilterStrings[LIST_OBJECT_GROUP]) != -1)) { //llinfos << "pass" << llendl; LLSD element; element["id"] = object_id; element["columns"][LIST_OBJECT_NAME]["column"] = "Name"; element["columns"][LIST_OBJECT_NAME]["type"] = "text"; element["columns"][LIST_OBJECT_NAME]["value"] = it->second.name; element["columns"][LIST_OBJECT_DESC]["column"] = "Description"; element["columns"][LIST_OBJECT_DESC]["type"] = "text"; element["columns"][LIST_OBJECT_DESC]["value"] = it->second.desc; element["columns"][LIST_OBJECT_OWNER]["column"] = "Owner"; element["columns"][LIST_OBJECT_OWNER]["type"] = "text"; element["columns"][LIST_OBJECT_OWNER]["value"] = onU; element["columns"][LIST_OBJECT_GROUP]["column"] = "Group"; element["columns"][LIST_OBJECT_GROUP]["type"] = "text"; element["columns"][LIST_OBJECT_GROUP]["value"] = cnU; //ai->second; mResultList->addElement(element, ADD_BOTTOM); } } } } } } mResultList->updateSort(); mResultList->selectMultiple(selected); mResultList->setScrollPos(scrollpos); mCounterText->setText(llformat("%d listed/%d pending/%d total", mResultList->getItemCount(), mPendingObjects.size(), mPendingObjects.size()+mCachedObjects.size())); mLastUpdateTimer.reset(); }
// static void JCFloaterAreaSearch::results() { if (!sInstance) return; if (!(sInstance->getVisible())) return; if (sRequested > 0 && sInstance->mLastUpdateTimer.getElapsedTimeF32() < min_refresh_interval) return; //llinfos << "results()" << llendl; uuid_vec_t selected = sInstance->mResultList->getSelectedIDs(); S32 scrollpos = sInstance->mResultList->getScrollPos(); sInstance->mResultList->deleteAllItems(); S32 i; S32 total = gObjectList.getNumObjects(); LLViewerRegion* our_region = gAgent.getRegion(); for (i = 0; i < total; i++) { LLViewerObject *objectp = gObjectList.getObject(i); if (objectp) { if (objectp->getRegion() == our_region && !objectp->isAvatar() && objectp->isRoot() && !objectp->flagTemporary() && !objectp->flagTemporaryOnRez()) { LLUUID object_id = objectp->getID(); if (sObjectDetails.count(object_id) == 0) { //llinfos << "not all entries are \"\"" << llendl; requestIfNeeded(objectp); } else { //llinfos << "all entries are \"\" or we have data" << llendl; AObjectDetails* details = &sObjectDetails[object_id]; std::string object_name = details->name; std::string object_desc = details->desc; std::string object_owner; std::string object_group; gCacheName->getFullName(details->owner_id, object_owner); gCacheName->getGroupName(details->group_id, object_group); if (object_name != request_string) { //llinfos << "both names are loaded or aren't needed" << llendl; std::string onU = object_owner; std::string cnU = object_group; LLStringUtil::toLower(object_name); LLStringUtil::toLower(object_desc); LLStringUtil::toLower(object_owner); LLStringUtil::toLower(object_group); if ((sSearchedName == "" || object_name.find(sSearchedName) != -1) && (sSearchedDesc == "" || object_desc.find(sSearchedDesc) != -1) && (sSearchedOwner == "" || object_owner.find(sSearchedOwner) != -1) && (sSearchedGroup == "" || object_group.find(sSearchedGroup) != -1)) { //llinfos << "pass" << llendl; LLSD element; element["id"] = object_id; element["columns"][LIST_OBJECT_NAME]["column"] = "Name"; element["columns"][LIST_OBJECT_NAME]["type"] = "text"; element["columns"][LIST_OBJECT_NAME]["value"] = details->name; //item->getName();//ai->second//"avatar_icon"; element["columns"][LIST_OBJECT_DESC]["column"] = "Description"; element["columns"][LIST_OBJECT_DESC]["type"] = "text"; element["columns"][LIST_OBJECT_DESC]["value"] = details->desc; //ai->second; element["columns"][LIST_OBJECT_OWNER]["column"] = "Owner"; element["columns"][LIST_OBJECT_OWNER]["type"] = "text"; element["columns"][LIST_OBJECT_OWNER]["value"] = onU; //ai->first; element["columns"][LIST_OBJECT_GROUP]["column"] = "Group"; element["columns"][LIST_OBJECT_GROUP]["type"] = "text"; element["columns"][LIST_OBJECT_GROUP]["value"] = cnU; //ai->second; sInstance->mResultList->addElement(element, ADD_BOTTOM); } } } } } } sInstance->mResultList->updateSort(); sInstance->mResultList->selectMultiple(selected); sInstance->mResultList->setScrollPos(scrollpos); sInstance->mCounterText->setText(llformat("%d listed/%d pending/%d total", sInstance->mResultList->getItemCount(), sRequested, sObjectDetails.size())); sInstance->mLastUpdateTimer.reset(); }
void JCFloaterAreaSearch::results() { if(!sInstance)return; if(!(sInstance->getVisible()))return; //mark("results()"); LLDynamicArray<LLUUID> selected = sInstance->mResultList->getSelectedIDs(); S32 scrollpos = sInstance->mResultList->getScrollPos(); sInstance->mResultList->deleteAllItems(); S32 i; S32 total = gObjectList.getNumObjects(); LLViewerRegion* our_region = gAgent.getRegion(); for (i = 0; i < total; i++) { LLViewerObject *objectp = gObjectList.getObject(i); if (objectp) { if(objectp->getRegion() == our_region) { LLUUID object_id = objectp->getID(); if(objectp->isRoot() && !objectp->flagTemporary() && !objectp->flagTemporaryOnRez()) { //mark("isRoot()"); bool emptyfields = (searched_name == "" && searched_desc == "" && searched_owner == "" && searched_group == ""); if(!emptyfields && mObjectDetails.count( object_id ) == 0) { //mark("not all entries are \"\""); requestifneed(objectp); //obj_counts[objectp->getPCode()]++; }else { //mark("all entries are \"\" or we have data"); AObjectDetails* details = &mObjectDetails[object_id]; std::string object_name = details->name; std::string object_desc = details->desc; std::string object_owner; std::string object_group; gCacheName->getFullName(details->owner_id,object_owner); gCacheName->getGroupName(details->group_id,object_group); if( emptyfields || object_name != request_string ) { //mark("both names are loaded or aren't needed"); std::string onU = object_owner; std::string cnU = object_group; LLStringUtil::toLower(object_name); LLStringUtil::toLower(object_desc); LLStringUtil::toLower(object_owner); LLStringUtil::toLower(object_group); if( (searched_name == "" || object_name.find(searched_name) != -1) && (searched_desc == "" || object_desc.find(searched_desc) != -1) && (searched_owner == "" || object_owner.find(searched_owner) != -1) && (searched_group == "" || object_group.find(searched_group) != -1) && (!payable_object || (bool)objectp->flagTakesMoney() == payable_object) ) { requestifneed(objectp); //mark("pass"); LLSD element; element["id"] = object_id; element["columns"][LIST_OBJECT_NAME]["column"] = "Name"; element["columns"][LIST_OBJECT_NAME]["type"] = "text"; element["columns"][LIST_OBJECT_NAME]["color"] = gColors.getColor("DefaultListText").getValue(); element["columns"][LIST_OBJECT_NAME]["value"] = details->name;//item->getName();//ai->second//"avatar_icon"; element["columns"][LIST_OBJECT_DESC]["column"] = "Description"; element["columns"][LIST_OBJECT_DESC]["type"] = "text"; element["columns"][LIST_OBJECT_DESC]["value"] = details->desc;//ai->second; element["columns"][LIST_OBJECT_DESC]["color"] = gColors.getColor("DefaultListText").getValue(); element["columns"][LIST_OBJECT_OWNER]["column"] = "Owner"; element["columns"][LIST_OBJECT_OWNER]["type"] = "text"; element["columns"][LIST_OBJECT_OWNER]["value"] = onU;//aifirst; element["columns"][LIST_OBJECT_OWNER]["color"] = gColors.getColor("DefaultListText").getValue(); element["columns"][LIST_OBJECT_GROUP]["column"] = "Group"; element["columns"][LIST_OBJECT_GROUP]["type"] = "text"; element["columns"][LIST_OBJECT_GROUP]["value"] = cnU;//ai->second; element["columns"][LIST_OBJECT_GROUP]["color"] = gColors.getColor("DefaultListText").getValue(); sInstance->mResultList->addElement(element, ADD_BOTTOM); } } } } } } } sInstance->mResultList->sortItems(); sInstance->mResultList->selectMultiple(selected); sInstance->mResultList->setScrollPos(scrollpos); }
void JCFloaterAreaSearch::draw() { if (sTracking) { F32 dist = 3.0f; if (LLTracker::isTracking(NULL) == LLTracker::TRACKING_LOCATION) { dist = fabsf((F32)(LLTracker::getTrackedPositionGlobal() - sTrackingLocation).magVec()); } if (dist > 2.0f) { // Tracker stopped or tracking another location sTracking = false; sIsDirty = true; sTrackingInfoLine.clear(); } } if (sIsDirty && getVisible() && mResultList && !(sRequested > 0 && mLastUpdateTimer.getElapsedTimeF32() < min_refresh_interval)) { LLDynamicArray<LLUUID> selected = mResultList->getSelectedIDs(); S32 scrollpos = mResultList->getScrollPos(); mResultList->deleteAllItems(); S32 i; S32 total = gObjectList.getNumObjects(); LLViewerRegion* our_region = gAgent.getRegion(); for (i = 0; i < total; i++) { LLViewerObject *objectp = gObjectList.getObject(i); if (objectp) { if (objectp->getRegion() == our_region && !objectp->isAvatar() && objectp->isRoot() && !objectp->flagTemporary() && !objectp->flagTemporaryOnRez()) { LLUUID object_id = objectp->getID(); if (sObjectDetails.count(object_id) == 0) { requestIfNeeded(objectp); } else { AObjectDetails* details = &sObjectDetails[object_id]; std::string object_name = details->name; std::string object_desc = details->desc; std::string object_owner; std::string object_group; gCacheName->getFullName(details->owner_id, object_owner); gCacheName->getGroupName(details->group_id, object_group); if (object_name != REQUEST_STRING) { std::string onU = object_owner; std::string cnU = object_group; LLStringUtil::toLower(object_name); LLStringUtil::toLower(object_desc); LLStringUtil::toLower(object_owner); LLStringUtil::toLower(object_group); if ((sSearchedName.empty() || object_name.find(sSearchedName) != -1) && (sSearchedDesc.empty() || object_desc.find(sSearchedDesc) != -1) && (sSearchedOwner.empty() || object_owner.find(sSearchedOwner) != -1) && (sSearchedGroup.empty() || object_group.find(sSearchedGroup) != -1)) { LLSD element; element["id"] = object_id; element["columns"][LIST_OBJECT_NAME]["column"] = "Name"; element["columns"][LIST_OBJECT_NAME]["type"] = "text"; element["columns"][LIST_OBJECT_NAME]["value"] = details->name; //item->getName();//ai->second//"avatar_icon"; element["columns"][LIST_OBJECT_DESC]["column"] = "Description"; element["columns"][LIST_OBJECT_DESC]["type"] = "text"; element["columns"][LIST_OBJECT_DESC]["value"] = details->desc; //ai->second; element["columns"][LIST_OBJECT_OWNER]["column"] = "Owner"; element["columns"][LIST_OBJECT_OWNER]["type"] = "text"; element["columns"][LIST_OBJECT_OWNER]["value"] = onU; //ai->first; element["columns"][LIST_OBJECT_GROUP]["column"] = "Group"; element["columns"][LIST_OBJECT_GROUP]["type"] = "text"; element["columns"][LIST_OBJECT_GROUP]["value"] = cnU; //ai->second; if (sTracking && object_id == sTrackingObjectID) { element["columns"][LIST_OBJECT_NAME]["font-style"] = "BOLD"; element["columns"][LIST_OBJECT_DESC]["font-style"] = "BOLD"; element["columns"][LIST_OBJECT_OWNER]["font-style"] = "BOLD"; element["columns"][LIST_OBJECT_GROUP]["font-style"] = "BOLD"; } mResultList->addElement(element, ADD_BOTTOM); } } } } } } mResultList->sortItems(); mResultList->selectMultiple(selected); mResultList->setScrollPos(scrollpos); if (!sTracking) { mCounterText->setText(llformat("%d listed/%d pending/%d total", mResultList->getItemCount(), sRequested, sObjectDetails.size())); } mLastUpdateTimer.reset(); sIsDirty = false; } LLFloater::draw(); }
// static void JCFloaterAreaSearch::results() { //sanity checks if (!sInstance) return; if (!(sInstance->getVisible())) return; if (sRequested > 0 && sInstance->mLastUpdateTimer.getElapsedTimeF32() < min_refresh_interval) return; //save our position and clear the list LLDynamicArray<LLUUID> selected = sInstance->mResultList->getSelectedIDs(); S32 scrollpos = sInstance->mResultList->getScrollPos(); sInstance->mResultList->deleteAllItems(); //check through all of the objects in the region S32 i; S32 total = gObjectList.getNumObjects(); LLViewerRegion* our_region = gAgent.getRegion(); for (i = 0; i < total; i++) { LLViewerObject *objectp = gObjectList.getObject(i); //check if this is a valid and non-temporary root prim if (objectp && objectp->getRegion() == our_region && !objectp->isAvatar() && objectp->isRoot() && !objectp->flagTemporary() && !objectp->flagTemporaryOnRez() && !objectp->isAttachment()) { LLUUID object_id = objectp->getID(); //request information about this prim if necessary if (sObjectDetails.count(object_id) == 0) { requestIfNeeded(objectp); } else { AObjectDetails* details = &sObjectDetails[object_id]; std::string object_owner; std::string object_group; bool haveOwner = gCacheName->getFullName(details->owner_id, object_owner); bool haveGroup = gCacheName->getGroupName(details->group_id, object_group); //check that this object is ready if (details->ready) { bool found = true; //check that all of the fields are either a match or not required if (found && sSearchingName) found = (details->name.find(sSearchedName) != -1); if (found && sSearchingDesc) found = (details->desc.find(sSearchedDesc) != -1); if (found && sSearchingOwner) found = (haveOwner && object_owner.find(sSearchedOwner) != -1); if (found && sSearchingGroup) found = (haveGroup && object_group.find(sSearchedGroup) != -1); if(found) { LLSD element; element["id"] = object_id; element["columns"][LIST_OBJECT_NAME]["column"] = "Name"; element["columns"][LIST_OBJECT_NAME]["value"] = details->name; element["columns"][LIST_OBJECT_DESC]["column"] = "Description"; element["columns"][LIST_OBJECT_DESC]["value"] = details->desc; element["columns"][LIST_OBJECT_OWNER]["column"] = "Owner"; element["columns"][LIST_OBJECT_OWNER]["value"] = object_owner; element["columns"][LIST_OBJECT_GROUP]["column"] = "Group"; element["columns"][LIST_OBJECT_GROUP]["value"] = object_group; sInstance->mResultList->addElement(element, ADD_BOTTOM); } } } } } sInstance->mResultList->sortItems(); sInstance->mResultList->selectMultiple(selected); sInstance->mResultList->setScrollPos(scrollpos); sInstance->mCounterText->setText(llformat("%d listed/%d pending/%d total", sInstance->mResultList->getItemCount(), sRequested, sObjectDetails.size())); sInstance->mLastUpdateTimer.reset(); }