Merge sl-search-opt-in back into the release branch

Reviewed by Josh and Don
master
Sam Kolb 2007-08-30 22:11:52 +00:00
parent 84ea29c69c
commit b2595c369f
22 changed files with 432 additions and 166 deletions

View File

@ -276,6 +276,14 @@
<boolean>true</boolean>
</map>
<key>AgentGroupDataUpdate</key>
<map>
<key>flavor</key>
<string>llsd</string>
<key>trusted-sender</key>
<boolean>true</boolean>
</map>
<key>ChatterBoxSessionStartReply</key>
<map>
<key>flavor</key>

View File

@ -70,6 +70,8 @@ const U32 REGION_FLAGS_ABUSE_EMAIL_TO_ESTATE_OWNER = (1 << 27);
const U32 REGION_FLAGS_ALLOW_VOICE = (1 << 28);
const U32 REGION_FLAGS_BLOCK_PARCEL_SEARCH = (1 << 29);
const U32 REGION_FLAGS_DEFAULT = REGION_FLAGS_ALLOW_LANDMARK |
REGION_FLAGS_ALLOW_SET_HOME |
@ -159,3 +161,4 @@ const U32 SWD_SCRIPTED_ONLY = (1 << 2);
#endif

View File

@ -26,7 +26,8 @@ const U32 FLAGS_INVENTORY_EMPTY = 0x00000800;
const U32 FLAGS_JOINT_HINGE = 0x00001000;
const U32 FLAGS_JOINT_P2P = 0x00002000;
const U32 FLAGS_JOINT_LP2P = 0x00004000;
//const U32 FLAGS_JOINT_WHEEL = 0x00008000;
// const U32 FLAGS_JOINT_WHEEL = 0x00008000;
const U32 FLAGS_INCLUDE_IN_SEARCH = 0x00008000;
const U32 FLAGS_ALLOW_INVENTORY_DROP = 0x00010000;
const U32 FLAGS_OBJECT_TRANSFER = 0x00020000;

View File

@ -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

View File

@ -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; }
//

View File

@ -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");
}
}
//---------------------------------------------------------------------------

View File

@ -301,6 +301,7 @@ public:
static void onClickPublishHelp(void*);
virtual BOOL postBuild();
virtual void draw();
protected:
LLCheckBoxCtrl* mCheckEditObjects;

View File

@ -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,51 +677,77 @@ 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));
snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_land_resell_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));
value = (F32)childGetValue("object_bonus_spin").asReal();
snprintf(buffer, MAX_STRING, "%f", value); /* 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("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 */
// First try using a Cap. If that fails use the old method.
LLSD body;
std::string url = gAgent.getRegion()->getCapability("DispatchRegionInfo");
if (!url.empty())
{
gViewerWindow->alertXml("RegionMaturityChange");
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("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));
snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_land_resell_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));
value = (F32)childGetValue("object_bonus_spin").asReal();
snprintf(buffer, MAX_STRING, "%f", value); /* 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("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;
}

View File

@ -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";

View File

@ -232,6 +232,7 @@ public:
BOOL mOpenEnrollment;
S32 mMembershipFee;
BOOL mAllowPublish;
BOOL mListInProfile;
BOOL mMaturePublish;
BOOL mChanged;
S32 mMemberCount;

View File

@ -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

View File

@ -322,7 +322,7 @@ void LLPanelGroup::tabChanged()
if ( mApplyBtn )
{
LLString mesg;
mApplyBtn->setEnabled(mAllowEdit && mCurrentTab->needsApply(mesg));
mApplyBtn->setEnabled(mCurrentTab->needsApply(mesg));
}
}

View File

@ -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);
@ -239,6 +242,15 @@ void LLPanelGroupGeneral::onCommitAny(LLUICtrl* ctrl, void* data)
self->notifyObservers();
}
// 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)
{
@ -339,16 +351,6 @@ void LLPanelGroupGeneral::joinDlgCB(S32 which, void *userdata)
gGroupMgr->sendGroupMemberJoin(self->mGroupID);
}
// 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)
{
@ -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();
// 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;
}
LLString::format_map_t args;
args["[MESSAGE]"] = mConfirmGroupCreateStr;
gViewerWindow->alertXml("GenericAlertYesCancel", args,
createGroupCallback,this);
return false;
}
LLString::format_map_t args;
args["[MESSAGE]"] = mConfirmGroupCreateStr;
gViewerWindow->alertXml("GenericAlertYesCancel", args,
createGroupCallback,this);
LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID);
return false;
}
LLGroupMgrGroupData* gdatap = gGroupMgr->getGroupData(mGroupID);
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 (!gdatap)
{
if (gAgent.mAccess > SIM_ACCESS_PG)
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 (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);

View File

@ -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;

View File

@ -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());
}

View File

@ -75,6 +75,7 @@ protected:
void setAllSaleInfo();
static void onCommitClickAction(LLUICtrl* ctrl, void*);
static void onCommitIncludeInSearch(LLUICtrl* ctrl, void*);
protected:
LLNameBox* mLabelGroupName; // group name

View File

@ -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 *)
{

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -3783,6 +3783,10 @@ version 2.0
{ GroupName Variable 1 }
{ GroupInsigniaID LLUUID }
}
{
NewGroupData Single
{ ListInProfile BOOL } // whether group displays in profile
}
}
@ -7823,6 +7827,10 @@ version 2.0
{ GroupID LLUUID }
{ AcceptNotices BOOL }
}
{
NewData Single
{ ListInProfile BOOL }
}
}
// GroupRoleDataRequest
@ -8140,7 +8148,7 @@ version 2.0
// dataserver -> simulator -> viewer
// reliable
{
AgentGroupDataUpdate Low 389 Trusted Zerocoded
AgentGroupDataUpdate Low 389 Trusted Zerocoded UDPDeprecated
{
AgentData Single
{ AgentID LLUUID }
@ -8763,3 +8771,18 @@ version 2.0
}
}
// ObjectIncludeInSearch
// viewer -> simulator
{
ObjectIncludeInSearch Low 424 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
{ SessionID LLUUID }
}
{
ObjectData Variable
{ ObjectLocalID U32 }
{ IncludeInSearch BOOL }
}
}