diff options
author | Sam Kolb <skolb@lindenlab.com> | 2007-08-30 22:11:52 +0000 |
---|---|---|
committer | Sam Kolb <skolb@lindenlab.com> | 2007-08-30 22:11:52 +0000 |
commit | b2595c369f78b6613e329274f5ca7c43c4ddeda0 (patch) | |
tree | 4db6ae8237692b570b6e5dad489f3da24c5aa3fe /indra/newview | |
parent | 84ea29c69c320573c7547f028b5325382e195cc6 (diff) |
Merge sl-search-opt-in back into the release branch
Reviewed by Josh and Don
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llagent.cpp | 71 | ||||
-rw-r--r-- | indra/newview/llagent.h | 3 | ||||
-rw-r--r-- | indra/newview/llfloaterland.cpp | 70 | ||||
-rw-r--r-- | indra/newview/llfloaterland.h | 1 | ||||
-rw-r--r-- | indra/newview/llfloaterregioninfo.cpp | 95 | ||||
-rw-r--r-- | indra/newview/llgroupmgr.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llgroupmgr.h | 1 | ||||
-rw-r--r-- | indra/newview/llpanelavatar.cpp | 28 | ||||
-rw-r--r-- | indra/newview/llpanelgroup.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llpanelgroupgeneral.cpp | 173 | ||||
-rw-r--r-- | indra/newview/llpanelgroupgeneral.h | 3 | ||||
-rw-r--r-- | indra/newview/llpanelpermissions.cpp | 25 | ||||
-rw-r--r-- | indra/newview/llpanelpermissions.h | 1 | ||||
-rw-r--r-- | indra/newview/llselectmgr.cpp | 44 | ||||
-rw-r--r-- | indra/newview/llselectmgr.h | 3 | ||||
-rw-r--r-- | indra/newview/llviewerobject.cpp | 17 | ||||
-rw-r--r-- | indra/newview/llviewerobject.h | 3 | ||||
-rw-r--r-- | indra/newview/llviewerregion.cpp | 1 |
18 files changed, 387 insertions, 156 deletions
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index e12904ef43..3000cce4f9 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -28,6 +28,7 @@ #include "llquaternion.h" #include "v3math.h" #include "v4math.h" +#include "llsdutil.h" //#include "vmath.h" #include "imageids.h" @@ -4808,7 +4809,7 @@ BOOL LLAgent::setGroupContribution(const LLUUID& group_id, S32 contribution) return FALSE; } -BOOL LLAgent::setGroupAcceptNotices(const LLUUID& group_id, BOOL accept_notices) +BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile) { S32 count = mGroups.count(); for(S32 i = 0; i < count; ++i) @@ -4816,6 +4817,7 @@ BOOL LLAgent::setGroupAcceptNotices(const LLUUID& group_id, BOOL accept_notices) if(mGroups.get(i).mID == group_id) { mGroups.get(i).mAcceptNotices = accept_notices; + mGroups.get(i).mListInProfile = list_in_profile; LLMessageSystem* msg = gMessageSystem; msg->newMessage("SetGroupAcceptNotices"); msg->nextBlock("AgentData"); @@ -4824,6 +4826,8 @@ BOOL LLAgent::setGroupAcceptNotices(const LLUUID& group_id, BOOL accept_notices) msg->nextBlock("Data"); msg->addUUID("GroupID", group_id); msg->addBOOL("AcceptNotices", accept_notices); + msg->nextBlock("NewData"); + msg->addBOOL("ListInProfile", list_in_profile); sendReliableMessage(); return TRUE; } @@ -5177,6 +5181,70 @@ void LLAgent::processAgentGroupDataUpdate(LLMessageSystem *msg, void **) } +class LLAgentGroupDataUpdateViewerNode : public LLHTTPNode +{ + virtual void post( + LLHTTPNode::ResponsePtr response, + const LLSD& context, + const LLSD& input) const + { + LLSD body = input["body"]; + if(body.has("body")) + body = body["body"]; + LLUUID agent_id = body["AgentData"][0]["AgentID"].asUUID(); + + if (agent_id != gAgentID) + { + llwarns << "processAgentGroupDataUpdate for agent other than me" << llendl; + return; + } + + LLSD group_data = body["GroupData"]; + + LLSD::array_iterator iter_group = + group_data.beginArray(); + LLSD::array_iterator end_group = + group_data.endArray(); + int group_index = 0; + for(; iter_group != end_group; ++iter_group) + { + + LLGroupData group; + S32 index = -1; + bool need_floater_update = false; + + group.mID = (*iter_group)["GroupID"].asUUID(); + group.mPowers = ll_U64_from_sd((*iter_group)["GroupPowers"]); + group.mAcceptNotices = (*iter_group)["AcceptNotices"].asBoolean(); + group.mListInProfile = body["NewGroupData"][group_index]["ListInProfile"].asBoolean(); + group.mInsigniaID = (*iter_group)["GroupInsigniaID"].asUUID(); + group.mName = (*iter_group)["GroupName"].asString(); + group.mContribution = (*iter_group)["Contribution"].asInteger(); + + group_index++; + + if(group.mID.notNull()) + { + need_floater_update = true; + // Remove the group if it already exists remove it and add the new data to pick up changes. + index = gAgent.mGroups.find(group); + if (index != -1) + { + gAgent.mGroups.remove(index); + } + gAgent.mGroups.put(group); + } + if (need_floater_update) + { + update_group_floaters(group.mID); + } + } + } +}; + +LLHTTPRegistration<LLAgentGroupDataUpdateViewerNode > + gHTTPRegistrationAgentGroupDataUpdateViewerNode ("/message/AgentGroupDataUpdate"); + // static void LLAgent::processAgentDataUpdate(LLMessageSystem *msg, void **) { @@ -7269,5 +7337,4 @@ void LLAgent::parseTeleportMessages(const LLString& xml_filename) }//end for (all message sets in xml file) } - // EOF diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 8b6e1c33a4..053d27728f 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -78,6 +78,7 @@ struct LLGroupData LLUUID mInsigniaID; U64 mPowers; BOOL mAcceptNotices; + BOOL mListInProfile; S32 mContribution; std::string mName; }; @@ -197,7 +198,7 @@ public: // new contribution level. Returns true if the group id was found // and contribution could be set. BOOL setGroupContribution(const LLUUID& group_id, S32 contribution); - BOOL setGroupAcceptNotices(const LLUUID& group_id, BOOL accept_notices); + BOOL setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile); void setHideGroupTitle(BOOL hide) { mHideGroupTitle = hide; } // diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 421066688e..aa9a06555c 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -1957,10 +1957,6 @@ BOOL LLPanelLandOptions::postBuild() mCategoryCombo = LLUICtrlFactory::getComboBoxByName(this, "land category"); childSetCommitCallback("land category", onCommitAny, this); - mAllowPublishCtrl = LLUICtrlFactory::getCheckBoxByName(this, "PublishCheck"); - childSetCommitCallback("PublishCheck", onCommitAny, this); - - mMatureCtrl = LLUICtrlFactory::getCheckBoxByName(this, "MatureCheck"); childSetCommitCallback("MatureCheck", onCommitAny, this); @@ -1971,8 +1967,6 @@ BOOL LLPanelLandOptions::postBuild() if (gAgent.mAccess < SIM_ACCESS_MATURE) { // Disable these buttons if they are PG (Teen) users - mAllowPublishCtrl->setVisible(FALSE); - mAllowPublishCtrl->setEnabled(FALSE); mPublishHelpButton->setVisible(FALSE); mPublishHelpButton->setEnabled(FALSE); mMatureCtrl->setVisible(FALSE); @@ -2094,7 +2088,6 @@ void LLPanelLandOptions::refresh() mSetBtn->setEnabled(FALSE); mClearBtn->setEnabled(FALSE); - mAllowPublishCtrl->setEnabled(FALSE); mMatureCtrl->setEnabled(FALSE); mPublishHelpButton->setEnabled(FALSE); } @@ -2135,11 +2128,6 @@ void LLPanelLandOptions::refresh() mCheckOtherScripts ->set( parcel->getAllowOtherScripts() ); mCheckOtherScripts ->setEnabled( can_change_options ); - BOOL can_change_identity = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, - GP_LAND_CHANGE_IDENTITY); - mCheckShowDirectory ->set( parcel->getParcelFlag(PF_SHOW_DIRECTORY)); - mCheckShowDirectory ->setEnabled( can_change_identity ); - mPushRestrictionCtrl->set( parcel->getRestrictPushObject() ); if(parcel->getRegionPushOverride()) { @@ -2153,6 +2141,9 @@ void LLPanelLandOptions::refresh() mPushRestrictionCtrl->setEnabled(can_change_options); } + BOOL can_change_identity = + LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_IDENTITY); + // Set by string in case the order in UI doesn't match the order // by index. LLParcel::ECategory cat = parcel->getCategory(); @@ -2186,8 +2177,6 @@ void LLPanelLandOptions::refresh() mSetBtn->setEnabled( can_change_landing_point ); mClearBtn->setEnabled( can_change_landing_point ); - mAllowPublishCtrl->set(parcel->getAllowPublish()); - mAllowPublishCtrl->setEnabled( can_change_identity ); mMatureCtrl->set(parcel->getMaturePublish()); mMatureCtrl->setEnabled( can_change_identity ); mPublishHelpButton->setEnabled( can_change_identity ); @@ -2195,8 +2184,6 @@ void LLPanelLandOptions::refresh() if (gAgent.mAccess < SIM_ACCESS_MATURE) { // Disable these buttons if they are PG (Teen) users - mAllowPublishCtrl->setVisible(FALSE); - mAllowPublishCtrl->setEnabled(FALSE); mPublishHelpButton->setVisible(FALSE); mPublishHelpButton->setEnabled(FALSE); mMatureCtrl->setVisible(FALSE); @@ -2205,7 +2192,39 @@ void LLPanelLandOptions::refresh() } } +// virtual +void LLPanelLandOptions::draw() +{ + LLParcel *parcel = gParcelMgr->getFloatingParcelSelection()->getParcel(); + + if(parcel) + { + LLViewerRegion* region; + region = gParcelMgr->getSelectionRegion(); + llassert(region); // Region should never be null. + + BOOL can_change_identity = region ? + LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_IDENTITY) && + ! (region->getRegionFlags() & REGION_FLAGS_BLOCK_PARCEL_SEARCH) : false; + + // There is a bug with this panel whereby the Show Directory bit can be + // slammed off by the Region based on an override. Since this data is cached + // locally the change will not reflect in the panel, which could cause confusion + // A workaround for this is to flip the bit off in the locally cached version + // when we detect a mismatch case. + if(! can_change_identity && parcel->getParcelFlag(PF_SHOW_DIRECTORY)) + { + parcel->setParcelFlag(PF_SHOW_DIRECTORY, FALSE); + } + mCheckShowDirectory ->set(parcel->getParcelFlag(PF_SHOW_DIRECTORY)); + mCheckShowDirectory ->setEnabled(can_change_identity); + mCategoryCombo->setEnabled(can_change_identity); + } + + LLPanel::draw(); + +} // static void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata) { @@ -2228,7 +2247,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata) BOOL allow_landmark = self->mCheckLandmark->get(); BOOL allow_group_scripts = self->mCheckGroupScripts->get() || self->mCheckOtherScripts->get(); BOOL allow_other_scripts = self->mCheckOtherScripts->get(); - BOOL allow_publish = self->mAllowPublishCtrl->get(); + BOOL allow_publish = FALSE; BOOL mature_publish = self->mMatureCtrl->get(); BOOL push_restriction = self->mPushRestrictionCtrl->get(); BOOL show_directory = self->mCheckShowDirectory->get(); @@ -2318,7 +2337,22 @@ void LLPanelLandOptions::onClickClear(void* userdata) // static void LLPanelLandOptions::onClickPublishHelp(void*) { - gViewerWindow->alertXml("ClickPublishHelpLand"); + LLViewerRegion* region = gParcelMgr->getSelectionRegion(); + LLParcel *parcel = gParcelMgr->getFloatingParcelSelection()->getParcel(); + llassert(region); // Region should never be null. + + bool can_change_identity = region && parcel ? + LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_IDENTITY) && + ! (region->getRegionFlags() & REGION_FLAGS_BLOCK_PARCEL_SEARCH) : false; + + if(! can_change_identity) + { + gViewerWindow->alertXml("ClickPublishHelpLandDisabled"); + } + else + { + gViewerWindow->alertXml("ClickPublishHelpLand"); + } } //--------------------------------------------------------------------------- diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index ab7ff3921c..6e8e525e0d 100644 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -301,6 +301,7 @@ public: static void onClickPublishHelp(void*); virtual BOOL postBuild(); + virtual void draw(); protected: LLCheckBoxCtrl* mCheckEditObjects; diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index f61f43fd5e..d88af396df 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -181,6 +181,7 @@ LLFloaterRegionInfo::LLFloaterRegionInfo(const LLRect& rect) : mInfoPanels.push_back((LLPanelRegionInfo*)panel); gUICtrlFactory->buildPanel(panel, "panel_region_covenant.xml"); mTab->addTabPanel(panel, panel->getLabel(), FALSE); + } LLFloaterRegionInfo::~LLFloaterRegionInfo() @@ -214,6 +215,7 @@ void LLFloaterRegionInfo::show(LLViewerRegion* region) msg->addUUID("AgentID", gAgent.getID()); msg->addUUID("SessionID", gAgent.getSessionID()); gAgent.sendReliableMessage(); + } // static @@ -305,6 +307,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg) panel->childSetValue("restrict_pushobject", (region_flags & REGION_FLAGS_RESTRICT_PUSHOBJECT) ? TRUE : FALSE ); panel->childSetValue("allow_land_resell_check", (region_flags & REGION_FLAGS_BLOCK_LAND_RESELL) ? FALSE : TRUE ); panel->childSetValue("allow_parcel_changes_check", (region_flags & REGION_FLAGS_ALLOW_PARCEL_CHANGES) ? TRUE : FALSE ); + panel->childSetValue("block_parcel_search_check", (region_flags & REGION_FLAGS_BLOCK_PARCEL_SEARCH) ? TRUE : FALSE ); panel->childSetValue("agent_limit_spin", LLSD((F32)agent_limit) ); panel->childSetValue("object_bonus_spin", LLSD(object_bonus_factor) ); panel->childSetValue("access_combo", LLSD(LLViewerRegion::accessToString(sim_access)) ); @@ -537,6 +540,7 @@ BOOL LLPanelRegionGeneralInfo::postBuild() initCtrl("object_bonus_spin"); initCtrl("access_combo"); initCtrl("restrict_pushobject"); + initCtrl("block_parcel_search_check"); initHelpBtn("terraform_help", "HelpRegionBlockTerraform"); initHelpBtn("fly_help", "HelpRegionBlockFly"); @@ -547,6 +551,7 @@ BOOL LLPanelRegionGeneralInfo::postBuild() initHelpBtn("restrict_pushobject_help", "HelpRegionRestrictPushObject"); initHelpBtn("land_resell_help", "HelpRegionLandResell"); initHelpBtn("parcel_changes_help", "HelpParcelChanges"); + initHelpBtn("parcel_search_help", "HelpRegionSearch"); childSetAction("kick_btn", onClickKick, this); childSetAction("kick_all_btn", onClickKickAll, this); @@ -672,52 +677,78 @@ void LLPanelRegionGeneralInfo::onClickManageTelehub(void* data) // strings[6] = sim access (0 = unknown, 13 = PG, 21 = Mature) // strings[7] = restrict pushobject // strings[8] = 'Y' - allow parcel subdivide, 'N' - not +// strings[9] = 'Y' - block parcel search, 'N' - allow BOOL LLPanelRegionGeneralInfo::sendUpdate() { llinfos << "LLPanelRegionGeneralInfo::sendUpdate()" << llendl; - strings_t strings; - //integers_t integers; - char buffer[MAX_STRING]; /* Flawfinder: ignore*/ - snprintf(buffer, MAX_STRING, "%s", (childGetValue("block_terraform_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */ - strings.push_back(strings_t::value_type(buffer)); - - snprintf(buffer, MAX_STRING, "%s", (childGetValue("block_fly_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */ - strings.push_back(strings_t::value_type(buffer)); - snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_damage_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */ - strings.push_back(strings_t::value_type(buffer)); + // First try using a Cap. If that fails use the old method. + LLSD body; + std::string url = gAgent.getRegion()->getCapability("DispatchRegionInfo"); + if (!url.empty()) + { + body["block_terraform"] = childGetValue("block_terraform_check"); + body["block_fly"] = childGetValue("block_fly_check"); + body["allow_damage"] = childGetValue("allow_damage_check"); + body["allow_land_resell"] = childGetValue("allow_land_resell_check"); + body["agent_limit"] = childGetValue("agent_limit_spin"); + body["prim_bonus"] = childGetValue("object_bonus_spin"); + body["sim_access"] = childGetValue("access_combo"); + body["restrict_pushobject"] = childGetValue("restrict_pushobject"); + body["allow_parcel_changes"] = childGetValue("allow_parcel_changes_check"); + body["block_parcel_search"] = childGetValue("block_parcel_search_check"); + LLHTTPClient::post(url, body, new LLHTTPClient::Responder()); + } + else + { + strings_t strings; + char buffer[MAX_STRING]; /* Flawfinder: ignore*/ - snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_land_resell_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */ - strings.push_back(strings_t::value_type(buffer)); + snprintf(buffer, MAX_STRING, "%s", (childGetValue("block_terraform_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */ + strings.push_back(strings_t::value_type(buffer)); - F32 value = (F32)childGetValue("agent_limit_spin").asReal(); - snprintf(buffer, MAX_STRING, "%f", value); /* Flawfinder: ignore */ - strings.push_back(strings_t::value_type(buffer)); + snprintf(buffer, MAX_STRING, "%s", (childGetValue("block_fly_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */ + strings.push_back(strings_t::value_type(buffer)); - value = (F32)childGetValue("object_bonus_spin").asReal(); - snprintf(buffer, MAX_STRING, "%f", value); /* Flawfinder: ignore */ - strings.push_back(strings_t::value_type(buffer)); + snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_damage_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */ + strings.push_back(strings_t::value_type(buffer)); - U8 access = LLViewerRegion::stringToAccess(childGetValue("access_combo").asString().c_str()); - snprintf(buffer, MAX_STRING, "%d", (S32)access); /* Flawfinder: ignore */ - strings.push_back(strings_t::value_type(buffer)); + snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_land_resell_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */ + strings.push_back(strings_t::value_type(buffer)); - snprintf(buffer, MAX_STRING, "%s", (childGetValue("restrict_pushobject").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */ - strings.push_back(strings_t::value_type(buffer)); + F32 value = (F32)childGetValue("agent_limit_spin").asReal(); + snprintf(buffer, MAX_STRING, "%f", value); /* Flawfinder: ignore */ + strings.push_back(strings_t::value_type(buffer)); - snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_parcel_changes_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */ - strings.push_back(strings_t::value_type(buffer)); + value = (F32)childGetValue("object_bonus_spin").asReal(); + snprintf(buffer, MAX_STRING, "%f", value); /* Flawfinder: ignore */ + strings.push_back(strings_t::value_type(buffer)); - LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); - sendEstateOwnerMessage(gMessageSystem, "setregioninfo", invoice, strings); + U8 access = LLViewerRegion::stringToAccess(childGetValue("access_combo").asString().c_str()); + snprintf(buffer, MAX_STRING, "%d", (S32)access); /* Flawfinder: ignore */ + strings.push_back(strings_t::value_type(buffer)); - LLViewerRegion* region = gAgent.getRegion(); - if (region - && access != region->getSimAccess() ) /* Flawfinder: ignore */ - { - gViewerWindow->alertXml("RegionMaturityChange"); + snprintf(buffer, MAX_STRING, "%s", (childGetValue("restrict_pushobject").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */ + strings.push_back(strings_t::value_type(buffer)); + + snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_parcel_changes_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */ + strings.push_back(strings_t::value_type(buffer)); + + LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); + sendEstateOwnerMessage(gMessageSystem, "setregioninfo", invoice, strings); + + LLViewerRegion* region = gAgent.getRegion(); + if (region + && access != region->getSimAccess() ) /* Flawfinder: ignore */ + { + gViewerWindow->alertXml("RegionMaturityChange"); + } } + + //integers_t integers; + + return TRUE; } diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index 18993e56fa..249012195f 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -195,6 +195,7 @@ LLGroupMgrGroupData::LLGroupMgrGroupData(const LLUUID& id) : mOpenEnrollment(FALSE), mMembershipFee(0), mAllowPublish(FALSE), + mListInProfile(FALSE), mMaturePublish(FALSE), mChanged(FALSE), mMemberCount(0), @@ -1240,6 +1241,7 @@ void LLGroupMgr::processCreateGroupReply(LLMessageSystem* msg, void ** data) // This isn't actually too bad because real data will come down in 2 or 3 miliseconds and replace this. LLGroupData gd; gd.mAcceptNotices = TRUE; + gd.mListInProfile = TRUE; gd.mContribution = 0; gd.mID = group_id; gd.mName = "new group"; diff --git a/indra/newview/llgroupmgr.h b/indra/newview/llgroupmgr.h index 7c06acbc1f..2d0dda9e68 100644 --- a/indra/newview/llgroupmgr.h +++ b/indra/newview/llgroupmgr.h @@ -232,6 +232,7 @@ public: BOOL mOpenEnrollment; S32 mMembershipFee; BOOL mAllowPublish; + BOOL mListInProfile; BOOL mMaturePublish; BOOL mChanged; S32 mMemberCount; diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index ab2e30014d..e0f19c10d1 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -1836,11 +1836,6 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**) allow_publish = (flags & AVATAR_ALLOW_PUBLISH); online = (flags & AVATAR_ONLINE); - EOnlineStatus online_status = (online) ? ONLINE_STATUS_YES : ONLINE_STATUS_NO; - - self->setOnlineStatus(online_status); - - self->mPanelWeb->setWebURL(std::string(profile_url)); U8 caption_index = 0; LLString caption_text; charter_member_size = msg->getSize("PropertiesData", "CharterMember"); @@ -1855,12 +1850,6 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**) caption_text = caption; } - LLTextureCtrl* image_ctrl = LLUICtrlFactory::getTexturePickerByName(self->mPanelSecondLife,"img"); - if(image_ctrl) - { - image_ctrl->setImageAssetID(image_id); - } - self->childSetValue("about", about_text); if(caption_text.empty()) { @@ -1903,10 +1892,23 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**) self->mPanelSecondLife->childSetValue("acct", caption_text); self->mPanelSecondLife->childSetValue("born", born_on); - + + EOnlineStatus online_status = (online) ? ONLINE_STATUS_YES : ONLINE_STATUS_NO; + + self->setOnlineStatus(online_status); + + self->mPanelWeb->setWebURL(std::string(profile_url)); + + LLTextureCtrl* image_ctrl = LLUICtrlFactory::getTexturePickerByName(self->mPanelSecondLife,"img"); + if(image_ctrl) + { + image_ctrl->setImageAssetID(image_id); + } + self->childSetValue("about", about_text); + self->mPanelSecondLife->setPartnerID(partner_id); self->mPanelSecondLife->updatePartnerName(); - + if (self->mPanelFirstLife) { // Teens don't get these diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp index 7a288a1730..8a10ef0ea4 100644 --- a/indra/newview/llpanelgroup.cpp +++ b/indra/newview/llpanelgroup.cpp @@ -322,7 +322,7 @@ void LLPanelGroup::tabChanged() if ( mApplyBtn ) { LLString mesg; - mApplyBtn->setEnabled(mAllowEdit && mCurrentTab->needsApply(mesg)); + mApplyBtn->setEnabled(mCurrentTab->needsApply(mesg)); } } diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index ce51c59413..ca62790147 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -53,12 +53,12 @@ LLPanelGroupGeneral::LLPanelGroupGeneral(const std::string& name, mBtnJoinGroup(NULL), mListVisibleMembers(NULL), mCtrlShowInGroupList(NULL), - mCtrlPublishOnWeb(NULL), mCtrlMature(NULL), mCtrlOpenEnrollment(NULL), mCtrlEnrollmentFee(NULL), mSpinEnrollmentFee(NULL), mCtrlReceiveNotices(NULL), + mCtrlListGroup(NULL), mActiveTitleLabel(NULL), mComboActiveTitle(NULL) { @@ -133,13 +133,6 @@ BOOL LLPanelGroupGeneral::postBuild() mCtrlShowInGroupList->setCallbackUserData(this); } - mCtrlPublishOnWeb = (LLCheckBoxCtrl*) getChildByName("publish_on_web", recurse); - if (mCtrlPublishOnWeb) - { - mCtrlPublishOnWeb->setCommitCallback(onCommitAny); - mCtrlPublishOnWeb->setCallbackUserData(this); - } - mCtrlMature = (LLCheckBoxCtrl*) getChildByName("mature", recurse); if (mCtrlMature) { @@ -170,20 +163,31 @@ BOOL LLPanelGroupGeneral::postBuild() } BOOL accept_notices = FALSE; + BOOL list_in_profile = FALSE; LLGroupData data; if(gAgent.getGroupData(mGroupID,data)) { accept_notices = data.mAcceptNotices; + list_in_profile = data.mListInProfile; } mCtrlReceiveNotices = (LLCheckBoxCtrl*) getChildByName("receive_notices", recurse); if (mCtrlReceiveNotices) { - mCtrlReceiveNotices->setCommitCallback(onReceiveNotices); + mCtrlReceiveNotices->setCommitCallback(onCommitUserOnly); mCtrlReceiveNotices->setCallbackUserData(this); mCtrlReceiveNotices->set(accept_notices); mCtrlReceiveNotices->setEnabled(data.mID.notNull()); } + mCtrlListGroup = (LLCheckBoxCtrl*) getChildByName("list_groups_in_profile", recurse); + if (mCtrlListGroup) + { + mCtrlListGroup->setCommitCallback(onCommitUserOnly); + mCtrlListGroup->setCallbackUserData(this); + mCtrlListGroup->set(list_in_profile); + mCtrlListGroup->setEnabled(data.mID.notNull()); + } + mActiveTitleLabel = (LLTextBox*) getChildByName("active_title_label", recurse); mComboActiveTitle = (LLComboBox*) getChildByName("active_title", recurse); @@ -217,7 +221,6 @@ BOOL LLPanelGroupGeneral::postBuild() mEditCharter->setEnabled(TRUE); mCtrlShowInGroupList->setEnabled(TRUE); - mCtrlPublishOnWeb->setEnabled(TRUE); mCtrlMature->setEnabled(TRUE); mCtrlOpenEnrollment->setEnabled(TRUE); mCtrlEnrollmentFee->setEnabled(TRUE); @@ -240,6 +243,15 @@ void LLPanelGroupGeneral::onCommitAny(LLUICtrl* ctrl, void* data) } // static +void LLPanelGroupGeneral::onCommitUserOnly(LLUICtrl* ctrl, void* data) +{ + LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)data; + self->mChanged = TRUE; + self->notifyObservers(); +} + + +// static void LLPanelGroupGeneral::onCommitEnrollment(LLUICtrl* ctrl, void* data) { onCommitAny(ctrl, data); @@ -340,16 +352,6 @@ void LLPanelGroupGeneral::joinDlgCB(S32 which, void *userdata) } // static -void LLPanelGroupGeneral::onReceiveNotices(LLUICtrl* ctrl, void* data) -{ - LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)data; - LLCheckBoxCtrl* check = (LLCheckBoxCtrl*)ctrl; - - if(!self) return; - gAgent.setGroupAcceptNotices(self->mGroupID, check->get()); -} - -// static void LLPanelGroupGeneral::openProfile(void* data) { LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)data; @@ -406,88 +408,90 @@ void LLPanelGroupGeneral::draw() bool LLPanelGroupGeneral::apply(LLString& mesg) { - if (!mAllowEdit) - { - llwarns << "LLPanelGroupGeneral::apply() called with false mAllowEdit" - << llendl; - return true; - } + BOOL has_power_in_group = gAgent.hasPowerInGroup(mGroupID,GP_GROUP_CHANGE_IDENTITY); - llinfos << "LLPanelGroupGeneral::apply" << llendl; - if (mGroupID.isNull()) + if (has_power_in_group || mGroupID.isNull()) { - // Validate the group name length. - S32 group_name_len = mGroupNameEditor->getText().size(); - if ( group_name_len < DB_GROUP_NAME_MIN_LEN - || group_name_len > DB_GROUP_NAME_STR_LEN) + llinfos << "LLPanelGroupGeneral::apply" << llendl; + if (mGroupID.isNull()) { - std::ostringstream temp_error; - temp_error << "A group name must be between " << DB_GROUP_NAME_MIN_LEN - << " and " << DB_GROUP_NAME_STR_LEN << " characters."; - mesg = temp_error.str(); - return false; - } - - LLString::format_map_t args; - args["[MESSAGE]"] = mConfirmGroupCreateStr; - gViewerWindow->alertXml("GenericAlertYesCancel", args, - createGroupCallback,this); + // Validate the group name length. + S32 group_name_len = mGroupNameEditor->getText().size(); + if ( group_name_len < DB_GROUP_NAME_MIN_LEN + || group_name_len > DB_GROUP_NAME_STR_LEN) + { + std::ostringstream temp_error; + temp_error << "A group name must be between " << DB_GROUP_NAME_MIN_LEN + << " and " << DB_GROUP_NAME_STR_LEN << " characters."; + mesg = temp_error.str(); + return false; + } - return false; - } + LLString::format_map_t args; + args["[MESSAGE]"] = mConfirmGroupCreateStr; + gViewerWindow->alertXml("GenericAlertYesCancel", args, + createGroupCallback,this); - LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); + return false; + } - if (!gdatap) - { - mesg = "No group data found for group "; - mesg.append(mGroupID.asString()); - return false; - } + LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID); - bool can_change_ident = false; - bool can_change_member_opts = false; - can_change_ident = gAgent.hasPowerInGroup(mGroupID,GP_GROUP_CHANGE_IDENTITY); - can_change_member_opts = gAgent.hasPowerInGroup(mGroupID,GP_MEMBER_OPTIONS); + if (!gdatap) + { + mesg = "No group data found for group "; + mesg.append(mGroupID.asString()); + return false; + } + bool can_change_ident = false; + bool can_change_member_opts = false; + can_change_ident = gAgent.hasPowerInGroup(mGroupID,GP_GROUP_CHANGE_IDENTITY); + can_change_member_opts = gAgent.hasPowerInGroup(mGroupID,GP_MEMBER_OPTIONS); - if (can_change_ident) - { - if (mCtrlPublishOnWeb) gdatap->mAllowPublish = mCtrlPublishOnWeb->get(); - if (mEditCharter) gdatap->mCharter = mEditCharter->getText(); - if (mInsignia) gdatap->mInsigniaID = mInsignia->getImageAssetID(); - if (mCtrlMature) + if (can_change_ident) { - if (gAgent.mAccess > SIM_ACCESS_PG) + if (mEditCharter) gdatap->mCharter = mEditCharter->getText(); + if (mInsignia) gdatap->mInsigniaID = mInsignia->getImageAssetID(); + if (mCtrlMature) { - gdatap->mMaturePublish = mCtrlMature->get(); + if (gAgent.mAccess > SIM_ACCESS_PG) + { + gdatap->mMaturePublish = mCtrlMature->get(); + } + else + { + gdatap->mMaturePublish = FALSE; + } } - else + if (mCtrlShowInGroupList) gdatap->mShowInList = mCtrlShowInGroupList->get(); + } + + if (can_change_member_opts) + { + if (mCtrlOpenEnrollment) gdatap->mOpenEnrollment = mCtrlOpenEnrollment->get(); + if (mCtrlEnrollmentFee && mSpinEnrollmentFee) { - gdatap->mMaturePublish = FALSE; + gdatap->mMembershipFee = (mCtrlEnrollmentFee->get()) ? + (S32) mSpinEnrollmentFee->get() : 0; } } - if (mCtrlShowInGroupList) gdatap->mShowInList = mCtrlShowInGroupList->get(); - } - if (can_change_member_opts) - { - if (mCtrlOpenEnrollment) gdatap->mOpenEnrollment = mCtrlOpenEnrollment->get(); - if (mCtrlEnrollmentFee && mSpinEnrollmentFee) + if (can_change_ident || can_change_member_opts) { - gdatap->mMembershipFee = (mCtrlEnrollmentFee->get()) ? - (S32) mSpinEnrollmentFee->get() : 0; + gGroupMgr->sendUpdateGroupInfo(mGroupID); } + notifyObservers(); } - if (can_change_ident || can_change_member_opts) - { - gGroupMgr->sendUpdateGroupInfo(mGroupID); - } - - if (mCtrlReceiveNotices) gAgent.setGroupAcceptNotices(mGroupID, mCtrlReceiveNotices->get()); + BOOL receive_notices = false; + BOOL list_in_profile = false; + if (mCtrlReceiveNotices) + receive_notices = mCtrlReceiveNotices->get(); + if (mCtrlListGroup) + list_in_profile = mCtrlListGroup->get(); + gAgent.setUserGroupFlags(mGroupID, receive_notices, list_in_profile); mChanged = FALSE; - notifyObservers(); return true; } @@ -521,7 +525,7 @@ void LLPanelGroupGeneral::createGroupCallback(S32 option, void* userdata) self->mInsignia->getImageAssetID(), enrollment_fee, self->mCtrlOpenEnrollment->get(), - self->mCtrlPublishOnWeb->get(), + false, self->mCtrlMature->get()); } @@ -607,11 +611,6 @@ void LLPanelGroupGeneral::update(LLGroupChange gc) mCtrlShowInGroupList->set(gdatap->mShowInList); mCtrlShowInGroupList->setEnabled(mAllowEdit && can_change_ident); } - if (mCtrlPublishOnWeb) - { - mCtrlPublishOnWeb->set(gdatap->mAllowPublish); - mCtrlPublishOnWeb->setEnabled(mAllowEdit && can_change_ident); - } if (mCtrlMature) { mCtrlMature->set(gdatap->mMaturePublish); diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h index 76a4d791e1..a8f10b04ef 100644 --- a/indra/newview/llpanelgroupgeneral.h +++ b/indra/newview/llpanelgroupgeneral.h @@ -44,6 +44,7 @@ public: private: static void onCommitAny(LLUICtrl* ctrl, void* data); + static void onCommitUserOnly(LLUICtrl* ctrl, void* data); static void onCommitTitle(LLUICtrl* ctrl, void* data); static void onCommitEnrollment(LLUICtrl* ctrl, void* data); static void onClickJoin(void* userdata); @@ -76,12 +77,12 @@ private: // Options LLCheckBoxCtrl *mCtrlShowInGroupList; - LLCheckBoxCtrl *mCtrlPublishOnWeb; LLCheckBoxCtrl *mCtrlMature; LLCheckBoxCtrl *mCtrlOpenEnrollment; LLCheckBoxCtrl *mCtrlEnrollmentFee; LLSpinCtrl *mSpinEnrollmentFee; LLCheckBoxCtrl *mCtrlReceiveNotices; + LLCheckBoxCtrl *mCtrlListGroup; LLTextBox *mActiveTitleLabel; LLComboBox *mComboActiveTitle; diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index d0061e281e..133173b02d 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -84,6 +84,8 @@ BOOL LLPanelPermissions::postBuild() this->childSetCommitCallback("checkbox next owner can copy",LLPanelPermissions::onCommitNextOwnerCopy,this); this->childSetCommitCallback("checkbox next owner can transfer",LLPanelPermissions::onCommitNextOwnerTransfer,this); this->childSetCommitCallback("clickaction",LLPanelPermissions::onCommitClickAction,this); + this->childSetCommitCallback("search_check",LLPanelPermissions::onCommitIncludeInSearch,this); + LLTextBox* LabelGroupNameRectProxy = gUICtrlFactory->getTextBoxByName(this,"Group Name Proxy"); if(LabelGroupNameRectProxy ) @@ -197,6 +199,10 @@ void LLPanelPermissions::refresh() //checkbox for sale childSetValue("checkbox for sale",FALSE); childSetEnabled("checkbox for sale",false); + + //checkbox include in search + childSetValue("search_check", FALSE); + childSetEnabled("search_check", false); LLRadioGroup* RadioSaleType = gUICtrlFactory->getRadioGroupByName(this,"sale type"); if(RadioSaleType) @@ -730,8 +736,15 @@ void LLPanelPermissions::refresh() childSetTentative("checkbox for sale",false); } - // Click action (touch, sit, buy) + // Check search status of objects BOOL all_volume = gSelectMgr->selectionAllPCode( LL_PCODE_VOLUME ); + bool include_in_search; + bool all_include_in_search = gSelectMgr->selectionGetIncludeInSearch(&include_in_search); + childSetEnabled("search_check", is_perm_modify && all_volume); + childSetValue("search_check", include_in_search); + childSetTentative("search_check", ! all_include_in_search); + + // Click action (touch, sit, buy) U8 click_action = 0; if (gSelectMgr->selectionGetClickAction(&click_action)) { @@ -1044,3 +1057,13 @@ void LLPanelPermissions::onCommitClickAction(LLUICtrl* ctrl, void*) } gSelectMgr->selectionSetClickAction(click_action); } + +// static +void LLPanelPermissions::onCommitIncludeInSearch(LLUICtrl* ctrl, void*) +{ + LLCheckBoxCtrl* box = (LLCheckBoxCtrl*)ctrl; + llassert(box); + + gSelectMgr->selectionSetIncludeInSearch(box->get()); +} + diff --git a/indra/newview/llpanelpermissions.h b/indra/newview/llpanelpermissions.h index 286a66f397..48c52b56b9 100644 --- a/indra/newview/llpanelpermissions.h +++ b/indra/newview/llpanelpermissions.h @@ -75,6 +75,7 @@ protected: void setAllSaleInfo(); static void onCommitClickAction(LLUICtrl* ctrl, void*); + static void onCommitIncludeInSearch(LLUICtrl* ctrl, void*); protected: LLNameBox* mLabelGroupName; // group name diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 341dec4115..2e67112e3e 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -1997,6 +1997,43 @@ BOOL LLSelectMgr::selectionGetMaterial(U8 *out_material) return identical; } + +bool LLSelectMgr::selectionGetIncludeInSearch(bool* include_in_search_out) +{ + LLViewerObject *object = mSelectedObjects->getFirstRootObject(); + if (!object) return FALSE; + + bool include_in_search = object->getIncludeInSearch(); + + bool identical = true; + for ( object = mSelectedObjects->getFirstRootObject(); object; object = mSelectedObjects->getNextRootObject() ) + { + if ( include_in_search != object->getIncludeInSearch()) + { + identical = false; + break; + } + } + + *include_in_search_out = include_in_search; + return identical; +} + +void LLSelectMgr::selectionSetIncludeInSearch(bool include_in_search) +{ + LLViewerObject* object = NULL; + for ( object = mSelectedObjects->getFirstRootObject(); object; object = mSelectedObjects->getNextRootObject() ) + { + object->setIncludeInSearch(include_in_search); + } + sendListToRegions( + "ObjectIncludeInSearch", + packAgentAndSessionID, + packObjectIncludeInSearch, + &include_in_search, + SEND_ONLY_ROOTS); +} + BOOL LLSelectMgr::selectionGetClickAction(U8 *out_action) { LLViewerObject *object = mSelectedObjects->getFirstObject(); @@ -4022,6 +4059,13 @@ void LLSelectMgr::packObjectClickAction(LLSelectNode* node, void *user_data) gMessageSystem->addU8("ClickAction", node->getObject()->getClickAction()); } +void LLSelectMgr::packObjectIncludeInSearch(LLSelectNode* node, void *user_data) +{ + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, node->getObject()->getLocalID() ); + gMessageSystem->addBOOL("IncludeInSearch", node->getObject()->getIncludeInSearch()); +} + // static void LLSelectMgr::packObjectLocalID(LLSelectNode* node, void *) { diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 4986843798..1dc9bce4d5 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -334,6 +334,7 @@ public: BOOL selectionGetFullbright(U8 *fullbright);// true if all selected tes have same bool selectionGetMediaType(U8 *media_type); // true if all selected tes have same BOOL selectionGetClickAction(U8* action); + bool selectionGetIncludeInSearch(bool* include_in_search_out); // true if all selected objects have same void selectionSetMaterial(U8 material); void selectionSetImage(const LLUUID& imageid); // could be item or asset id @@ -348,6 +349,7 @@ public: void selectionSetFullbright( U8 fullbright ); void selectionSetMediaTypeAndURL( U8 media_type, const std::string& media_url ); void selectionSetClickAction(U8 action); + void selectionSetIncludeInSearch(bool include_in_search); void selectionSetObjectPermissions(U8 perm_field, BOOL set, U32 perm_mask, BOOL override = FALSE); void selectionSetObjectName(const LLString& name); @@ -498,6 +500,7 @@ private: static void packObjectIDAndRotation( LLSelectNode* node, void *); static void packObjectLocalID(LLSelectNode* node, void *); static void packObjectClickAction(LLSelectNode* node, void* data); + static void packObjectIncludeInSearch(LLSelectNode* node, void* data); static void packObjectName(LLSelectNode* node, void* user_data); static void packObjectDescription(LLSelectNode* node, void* user_data); static void packObjectCategory(LLSelectNode* node, void* user_data); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 2d39bec6a7..fb8d7af004 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -4671,6 +4671,23 @@ void LLViewerObject::markForUpdate(BOOL priority) } } +bool LLViewerObject::getIncludeInSearch() const +{ + return ((mFlags & FLAGS_INCLUDE_IN_SEARCH) != 0); +} + +void LLViewerObject::setIncludeInSearch(bool include_in_search) +{ + if (include_in_search) + { + mFlags |= FLAGS_INCLUDE_IN_SEARCH; + } + else + { + mFlags &= ~FLAGS_INCLUDE_IN_SEARCH; + } +} + void LLViewerObject::setRegion(LLViewerRegion *regionp) { llassert(regionp); diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index a7cc4c818c..1ec3c4c6bc 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -407,6 +407,9 @@ public: inline BOOL flagCameraSource() const { return ((mFlags & FLAGS_CAMERA_SOURCE) != 0); } inline BOOL flagCameraDecoupled() const { return ((mFlags & FLAGS_CAMERA_DECOUPLED) != 0); } + bool getIncludeInSearch() const; + void setIncludeInSearch(bool include_in_search); + // Does "open" object menu item apply? BOOL allowOpen() const; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index b7167b7170..8f2362015b 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1258,6 +1258,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("ProvisionVoiceAccountRequest"); capabilityNames.append("ServerReleaseNotes"); capabilityNames.append("CopyInventoryFromNotecard"); + capabilityNames.append("DispatchRegionInfo"); llinfos << "posting to seed " << url << llendl; |