void LLFloaterAvatarPicker::onList(LLUICtrl* ctrl, void* userdata) { LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata; if (!self) { return; } self->mAvatarIDs.clear(); self->mAvatarNames.clear(); if (!self->mListNames) { return; } std::vector<LLScrollListItem*> items = self->mListNames->getAllSelected(); for ( std::vector<LLScrollListItem*>::iterator iter = items.begin(); iter != items.end(); ++iter) { LLScrollListItem* item = *iter; self->mAvatarNames.push_back(item->getColumn(0)->getValue().asString()); self->mAvatarIDs.push_back(item->getUUID()); self->childSetEnabled("Select", TRUE); } }
LLFloaterAvatarPicker* LLFloaterAvatarPicker::show(select_callback_t callback, BOOL allow_multiple, BOOL closeOnSelect) { // *TODO: Use a key to allow this not to be an effective singleton LLFloaterAvatarPicker* floater = getInstance(); floater->open(); floater->mSelectionCallback = callback; floater->setAllowMultiple(allow_multiple); floater->mNearMeListComplete = FALSE; floater->mCloseOnSelect = closeOnSelect; if (!closeOnSelect) { // Use Select/Close std::string select_string = floater->getString("Select"); std::string close_string = floater->getString("Close"); floater->getChild<LLButton>("ok_btn")->setLabel(select_string); floater->getChild<LLButton>("cancel_btn")->setLabel(close_string); } return floater; }
LLFloaterAvatarPicker* LLFloaterAvatarPicker::show(select_callback_t callback, BOOL allow_multiple, BOOL closeOnSelect) { // *TODO: Use a key to allow this not to be an effective singleton LLFloaterAvatarPicker* floater = LLFloaterReg::showTypedInstance<LLFloaterAvatarPicker>("avatar_picker"); if (!floater) { llwarns << "Cannot instantiate avatar picker" << llendl; return NULL; } floater->mSelectionCallback = callback; floater->setAllowMultiple(allow_multiple); floater->mNearMeListComplete = FALSE; floater->mCloseOnSelect = closeOnSelect; if (!closeOnSelect) { // Use Select/Close std::string select_string = floater->getString("Select"); std::string close_string = floater->getString("Close"); floater->getChild<LLButton>("ok_btn")->setLabel(select_string); floater->getChild<LLButton>("cancel_btn")->setLabel(close_string); } return floater; }
void LLFloaterAvatarPicker::onList(LLUICtrl* ctrl, void* userdata) { LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata; if (self) { self->childSetEnabled("Select", self->visibleItemsSelected()); } }
//static void LLFloaterAvatarPicker::editKeystroke(LLLineEditor* caller, void* user_data) { LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)user_data; if(caller->getName() == "Edit") self->getChildView("Find")->setEnabled(caller->getText().size() >= 3); else self->childSetEnabled("Select", caller->getValue().asUUID().notNull()); }
// static callback for inventory picker (select from calling cards) void LLFloaterAvatarPicker::onCallingCardSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action, void* data) { LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)data; if (self) { self->doCallingCardSelectionChange( items, user_action, data ); } }
//static void LLAvatarActions::shareWithAvatars() { using namespace action_give_inventory; LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(boost::bind(give_inventory, _1, _2), TRUE, FALSE); picker->setOkBtnEnableCb(boost::bind(is_give_inventory_acceptable)); picker->openFriendsTab(); LLNotificationsUtil::add("ShareNotification"); }
void LLFloaterAvatarPicker::onTabChanged(void* userdata, bool from_click) { LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata; if (!self) { return; } self->childSetEnabled("Select", self->visibleItemsSelected()); }
void LLPanelPeople::onAddFriendWizButtonClicked() { // Show add friend wizard. LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(boost::bind(&LLPanelPeople::onAvatarPicked, _1, _2), FALSE, TRUE); // Need to disable 'ok' button when friend occurs in selection if (picker) picker->setOkBtnEnableCb(boost::bind(&LLPanelPeople::isItemsFreeOfFriends, this, _1)); LLFloater* root_floater = gFloaterView->getParentFloater(this); if (root_floater) { root_floater->addDependentFloater(picker); } }
void LLFloaterAvatarPicker::onBtnRefresh(void* userdata) { LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata; if (!self) { return; } self->getChild<LLScrollListCtrl>("NearMe")->deleteAllItems(); self->getChild<LLScrollListCtrl>("NearMe")->addCommentText(self->getString("searching")); self->mNearMeListComplete = FALSE; }
//static void LLFloaterAvatarPicker::editKeystroke(LLLineEditor* caller, void* user_data) { LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)user_data; if (caller->getText().size() >= 3) { self->childSetEnabled("Find",TRUE); } else { self->childSetEnabled("Find",FALSE); } }
//static void LLFloaterAvatarPicker::editKeystroke(LLLineEditor* caller, void* user_data) { LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)user_data; LLPanel* active_panel = self->childGetVisibleTab("ResidentChooserTabs"); if(active_panel == self->getChild<LLPanel>("SearchPanel")) self->childSetEnabled("Find", caller->getText().size() >= 3); else if(active_panel == self->getChild<LLPanel>("KeyPanel")) { LLUUID specified = self->getChild<LLLineEditor>("EditUUID")->getValue().asUUID(); self->childSetEnabled("Select", specified.notNull()); } }
LLFloaterAvatarPicker* LLFloaterAvatarPicker::show(select_callback_t callback, BOOL allow_multiple, BOOL closeOnSelect) { // TODO: This class should not be a singleton as it's used in multiple places // and therefore can't be used simultaneously. -MG LLFloaterAvatarPicker* floater = sInstance ? sInstance : new LLFloaterAvatarPicker(); floater->open(); /* Flawfinder: ignore */ if(!sInstance) { sInstance = floater; floater->center(); } floater->mSelectionCallback = callback; floater->setAllowMultiple(allow_multiple); floater->mNearMeListComplete = FALSE; floater->mCloseOnSelect = closeOnSelect; return floater; }
//static void LLAvatarActions::shareWithAvatars(LLView * panel) { using namespace action_give_inventory; LLFloater* root_floater = gFloaterView->getParentFloater(panel); LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(boost::bind(give_inventory, _1, _2), TRUE, FALSE, FALSE, root_floater->getName()); if (!picker) { return; } picker->setOkBtnEnableCb(boost::bind(is_give_inventory_acceptable)); picker->openFriendsTab(); if (root_floater) { root_floater->addDependentFloater(picker); } LLNotificationsUtil::add("ShareNotification"); }
void LLFloaterAvatarPicker::onBtnAdd(void* userdata) { LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata; if(self->mCallback) { self->mCallback(self->mAvatarNames, self->mAvatarIDs, self->mCallbackUserdata); } if (self->mInventoryPanel) { self->mInventoryPanel->setSelection(LLUUID::null, FALSE); } if (self->mListNames) { self->mListNames->deselectAllItems(TRUE); } if(self->mCloseOnSelect) { self->mCloseOnSelect = FALSE; self->close(); } }
/*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content) { //std::ostringstream ss; //LLSDSerialize::toPrettyXML(content, ss); //llinfos << ss.str() << llendl; // in case of invalid characters, the avatar picker returns a 400 // just set it to process so it displays 'not found' if (isGoodStatus(status) || status == 400) { LLFloaterAvatarPicker* floater = LLFloaterReg::findTypedInstance<LLFloaterAvatarPicker>("avatar_picker"); if (floater) { floater->processResponse(mQueryID, content); } } else { llwarns << "avatar picker failed [status:" << status << "]: " << content << llendl; } }
/*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content) { //std::ostringstream ss; //LLSDSerialize::toPrettyXML(content, ss); //llinfos << ss.str() << llendl; // in case of invalid characters, the avatar picker returns a 400 // just set it to process so it displays 'not found' if ((200 <= status && status < 300) || status == 400) { LLFloaterAvatarPicker* floater = LLFloaterAvatarPicker::sInstance; if (floater) { floater->processResponse(mQueryID, content); } } else { llinfos << "avatar picker failed " << status << " reason " << reason << llendl; } }
void LLFloaterAvatarPicker::onBtnSelect(void* userdata) { LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata; if(self->mCallback) { LLPanel* active_panel = self->childGetVisibleTab("ResidentChooserTabs"); if(active_panel == self->getChild<LLPanel>("CallingCardsPanel")) { self->mCallback(self->mSelectedInventoryAvatarNames, self->mSelectedInventoryAvatarIDs, self->mCallbackUserdata); } else if(active_panel == self->getChild<LLPanel>("SearchPanel")) { std::vector<std::string> avatar_names; std::vector<LLUUID> avatar_ids; getSelectedAvatarData(self->getChild<LLScrollListCtrl>("SearchResults"), avatar_names, avatar_ids); self->mCallback(avatar_names, avatar_ids, self->mCallbackUserdata); } else if(active_panel == self->getChild<LLPanel>("NearMePanel")) { std::vector<std::string> avatar_names; std::vector<LLUUID> avatar_ids; getSelectedAvatarData(self->getChild<LLScrollListCtrl>("NearMe"), avatar_names, avatar_ids); self->mCallback(avatar_names, avatar_ids, self->mCallbackUserdata); } else if(active_panel == self->getChild<LLPanel>("KeyPanel")) { LLUUID specified = self->getChild<LLLineEditor>("EditUUID")->getValue().asUUID(); if(specified.isNull()) return; std::vector<std::string> avatar_names; std::vector<LLUUID> avatar_ids; avatar_ids.push_back(specified); avatar_names.push_back(specified.asString()); self->mCallback(avatar_names, avatar_ids, self->mCallbackUserdata); } } self->getChild<LLInventoryPanel>("InventoryPanel")->setSelection(LLUUID::null, FALSE); self->getChild<LLScrollListCtrl>("SearchResults")->deselectAllItems(TRUE); self->getChild<LLScrollListCtrl>("NearMe")->deselectAllItems(TRUE); if(self->mCloseOnSelect) { self->mCloseOnSelect = FALSE; self->close(); } }
void LLFloaterAvatarPicker::onBtnSelect(void* userdata) { LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata; if(self->mCallback) { LLPanel* active_panel = self->childGetVisibleTab("ResidentChooserTabs"); if(active_panel == self->getChild<LLPanel>("CallingCardsPanel")) { self->mCallback(self->mSelectedInventoryAvatarNames, self->mSelectedInventoryAvatarIDs, self->mCallbackUserdata); } else if(active_panel == self->getChild<LLPanel>("SearchPanel")) { std::vector<std::string> avatar_names; std::vector<LLUUID> avatar_ids; getSelectedAvatarData(self->getChild<LLScrollListCtrl>("SearchResults"), avatar_names, avatar_ids); self->mCallback(avatar_names, avatar_ids, self->mCallbackUserdata); } else if(active_panel == self->getChild<LLPanel>("NearMePanel")) { std::vector<std::string> avatar_names; std::vector<LLUUID> avatar_ids; getSelectedAvatarData(self->getChild<LLScrollListCtrl>("NearMe"), avatar_names, avatar_ids); self->mCallback(avatar_names, avatar_ids, self->mCallbackUserdata); } } if(self->init_cards)self->getChild<LLInventoryPanel>("InventoryPanel")->setSelection(LLUUID::null, FALSE); self->getChild<LLScrollListCtrl>("SearchResults")->deselectAllItems(TRUE); self->getChild<LLScrollListCtrl>("NearMe")->deselectAllItems(TRUE); if(self->mCloseOnSelect) { self->mCloseOnSelect = FALSE; self->close(); } }
// static void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void**) { LLUUID agent_id; LLUUID query_id; LLUUID avatar_id; std::string first_name; std::string last_name; msg->getUUID("AgentData", "AgentID", agent_id); msg->getUUID("AgentData", "QueryID", query_id); // Not for us if (agent_id != gAgent.getID()) return; // Dialog already closed LLFloaterAvatarPicker *self = sInstance; if (!self) return; // these are not results from our last request if (query_id != self->mQueryID) { return; } LLScrollListCtrl* search_results = self->getChild<LLScrollListCtrl>("SearchResults"); // clear "Searching" label on first results search_results->deleteAllItems(); self->mResultsReturned = TRUE; BOOL found_one = FALSE; S32 num_new_rows = msg->getNumberOfBlocks("Data"); for (S32 i = 0; i < num_new_rows; i++) { msg->getUUIDFast( _PREHASH_Data,_PREHASH_AvatarID, avatar_id, i); msg->getStringFast(_PREHASH_Data,_PREHASH_FirstName, first_name, i); msg->getStringFast(_PREHASH_Data,_PREHASH_LastName, last_name, i); std::string avatar_name; if (avatar_id.isNull()) { LLStringUtil::format_map_t map; map["[TEXT]"] = self->childGetText("Edit"); avatar_name = self->getString("not_found", map); search_results->setEnabled(FALSE); self->childDisable("Select"); } else { avatar_name = first_name + " " + last_name; search_results->setEnabled(TRUE); found_one = TRUE; } LLSD element; element["id"] = avatar_id; // value element["columns"][0]["value"] = avatar_name; element["columns"][0]["color"] = gColors.getColor("DefaultListText").getValue(); search_results->addElement(element); } if (found_one) { self->childEnable("Select"); search_results->selectFirstItem(); self->onList(search_results, self); search_results->setFocus(TRUE); } }
void LLFloaterAvatarPicker::onBtnClose(void* userdata) { LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata; if(self) self->close(); }
// static void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void**) { LLUUID agent_id; LLUUID query_id; LLUUID avatar_id; std::string first_name; std::string last_name; msg->getUUID("AgentData", "AgentID", agent_id); msg->getUUID("AgentData", "QueryID", query_id); // Not for us if (agent_id != gAgent.getID()) return; LLFloaterAvatarPicker* floater = LLFloaterReg::findTypedInstance<LLFloaterAvatarPicker>("avatar_picker"); // floater is closed or these are not results from our last request if (NULL == floater || query_id != floater->mQueryID) { return; } LLScrollListCtrl* search_results = floater->getChild<LLScrollListCtrl>("SearchResults"); // clear "Searching" label on first results if (floater->mNumResultsReturned++ == 0) { search_results->deleteAllItems(); } BOOL found_one = FALSE; S32 num_new_rows = msg->getNumberOfBlocks("Data"); for (S32 i = 0; i < num_new_rows; i++) { msg->getUUIDFast( _PREHASH_Data,_PREHASH_AvatarID, avatar_id, i); msg->getStringFast(_PREHASH_Data,_PREHASH_FirstName, first_name, i); msg->getStringFast(_PREHASH_Data,_PREHASH_LastName, last_name, i); std::string avatar_name; if (avatar_id.isNull()) { LLStringUtil::format_map_t map; map["[TEXT]"] = floater->getChild<LLUICtrl>("Edit")->getValue().asString(); avatar_name = floater->getString("not_found", map); search_results->setEnabled(FALSE); floater->getChildView("ok_btn")->setEnabled(FALSE); } else { avatar_name = LLCacheName::buildFullName(first_name, last_name); search_results->setEnabled(TRUE); found_one = TRUE; LLAvatarName av_name; av_name.mLegacyFirstName = first_name; av_name.mLegacyLastName = last_name; av_name.mDisplayName = avatar_name; const LLUUID& agent_id = avatar_id; sAvatarNameMap[agent_id] = av_name; } LLSD element; element["id"] = avatar_id; // value element["columns"][0]["column"] = "name"; element["columns"][0]["value"] = avatar_name; search_results->addElement(element); } if (found_one) { floater->getChildView("ok_btn")->setEnabled(TRUE); search_results->selectFirstItem(); floater->onList(); search_results->setFocus(TRUE); } }
void LLFloaterAvatarPicker::onBtnFind(void* userdata) { LLFloaterAvatarPicker* self = (LLFloaterAvatarPicker*)userdata; if(self) self->find(); }