diff options
33 files changed, 295 insertions, 26 deletions
diff --git a/BuildParams b/BuildParams index 88d2c02780..ef5321bc07 100644 --- a/BuildParams +++ b/BuildParams @@ -155,4 +155,10 @@ viewer-asset-delivery-metrics.email = monty@lindenlab.com viewer-asset-delivery-metrics.build_server = false viewer-asset-delivery-metrics.build_server_tests = false +# ======================================== +# Simon says +# ======================================== +simon_viewer-dev-private.public_build = false + + # eof diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index e8cd871157..e026ad32f9 100644 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -226,6 +226,11 @@ void LLParcel::init(const LLUUID &owner_id, setPreviousOwnerID(LLUUID::null); setPreviouslyGroupOwned(FALSE); + + setHiddenAVs(FALSE); + setAllowGroupAVSounds(TRUE); + setAllowAnyAVSounds(TRUE); + setHaveNewParcelLimitData(FALSE); } void LLParcel::overrideOwner(const LLUUID& owner_id, BOOL is_group_owned) @@ -702,7 +707,9 @@ void LLParcel::packMessage(LLSD& msg) msg["user_location"] = ll_sd_from_vector3(mUserLocation); msg["user_look_at"] = ll_sd_from_vector3(mUserLookAt); msg["landing_type"] = (U8)mLandingType; - + msg["hidden_avs"] = (LLSD::Boolean) getHiddenAVs(); + msg["group_av_sounds"] = (LLSD::Boolean) getAllowGroupAVSounds(); + msg["any_av_sounds"] = (LLSD::Boolean) getAllowAnyAVSounds(); } @@ -721,6 +728,24 @@ void LLParcel::unpackMessage(LLMessageSystem* msg) msg->getStringFast( _PREHASH_ParcelData,_PREHASH_MediaURL, buffer ); setMediaURL(buffer); + BOOL hidden_avs = FALSE; + BOOL any_av_sounds = TRUE; + BOOL group_av_sounds = TRUE; + bool have_new_parcel_limit_data = (msg->getSizeFast(_PREHASH_ParcelData, _PREHASH_HiddenAVs) > 0); // New version of server should send all 3 of these values + have_new_parcel_limit_data &= (msg->getSizeFast(_PREHASH_ParcelData, _PREHASH_AnyAVSounds) > 0); + have_new_parcel_limit_data &= (msg->getSizeFast(_PREHASH_ParcelData, _PREHASH_GroupAVSounds) > 0); + if (have_new_parcel_limit_data) + { + msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_HiddenAVs, hidden_avs); + msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_AnyAVSounds, any_av_sounds); + msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_GroupAVSounds, group_av_sounds); + } + setHiddenAVs((bool) hidden_avs); + setAllowAnyAVSounds((bool) any_av_sounds); + setAllowGroupAVSounds((bool) group_av_sounds); + + setHaveNewParcelLimitData(have_new_parcel_limit_data); + // non-optimized version msg->getU8 ( "ParcelData", "MediaAutoScale", mMediaAutoScale ); diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h index 4893337967..c27e5a5091 100644 --- a/indra/llinventory/llparcel.h +++ b/indra/llinventory/llparcel.h @@ -75,7 +75,7 @@ const U8 PARCEL_AUCTION = 0x05; // unused 0x06 // unused 0x07 // flag, unused 0x08 -// flag, unused 0x10 +const U8 PARCEL_HIDDENAVS = 0x10; // avatars not visible outside of parcel const U8 PARCEL_SOUND_LOCAL = 0x20; const U8 PARCEL_WEST_LINE = 0x40; // flag, property line on west edge const U8 PARCEL_SOUTH_LINE = 0x80; // flag, property line on south edge @@ -130,6 +130,12 @@ class LLSD; class LLAccessEntry { public: + LLAccessEntry() + : mID(), + mTime(0), + mFlags(0) + {} + LLUUID mID; // Agent ID S32 mTime; // Time (unix seconds) when entry expires U32 mFlags; // Not used - currently should always be zero @@ -265,6 +271,8 @@ public: void setUserLocation(const LLVector3& pos) { mUserLocation = pos; } void setUserLookAt(const LLVector3& rot) { mUserLookAt = rot; } void setLandingType(const ELandingType type) { mLandingType = type; } + void setHiddenAVs(BOOL hidden_avs) { mHiddenAVs = hidden_avs; } + void setHaveNewParcelLimitData(bool have_new_parcel_data) { mHaveNewParcelLimitData = have_new_parcel_data; } // Remove this once hidden AV feature is fully available grid-wide void setAuctionID(U32 auction_id) { mAuctionID = auction_id;} @@ -291,6 +299,8 @@ public: void setDenyAnonymous(BOOL b) { setParcelFlag(PF_DENY_ANONYMOUS, b); } void setDenyAgeUnverified(BOOL b) { setParcelFlag(PF_DENY_AGEUNVERIFIED, b); } void setRestrictPushObject(BOOL b) { setParcelFlag(PF_RESTRICT_PUSHOBJECT, b); } + void setAllowGroupAVSounds(BOOL b) { mAllowGroupAVSounds = b; } + void setAllowAnyAVSounds(BOOL b) { mAllowAnyAVSounds = b; } void setDrawDistance(F32 dist) { mDrawDistance = dist; } void setSalePrice(S32 price) { mSalePrice = price; } @@ -367,6 +377,8 @@ public: const LLVector3& getUserLocation() const { return mUserLocation; } const LLVector3& getUserLookAt() const { return mUserLookAt; } ELandingType getLandingType() const { return mLandingType; } + BOOL getHiddenAVs() const { return mHiddenAVs; } + BOOL getHaveNewParcelLimitData() const { return mHaveNewParcelLimitData; } // User-specified snapshot const LLUUID& getSnapshotID() const { return mSnapshotID; } @@ -496,6 +508,9 @@ public: BOOL getRegionDenyAgeUnverifiedOverride() const { return mRegionDenyAgeUnverifiedOverride; } + BOOL getAllowGroupAVSounds() const { return mAllowGroupAVSounds; } + BOOL getAllowAnyAVSounds() const { return mAllowAnyAVSounds; } + F32 getDrawDistance() const { return mDrawDistance; } S32 getSalePrice() const { return mSalePrice; } time_t getClaimDate() const { return mClaimDate; } @@ -606,6 +621,8 @@ protected: LLVector3 mUserLocation; LLVector3 mUserLookAt; ELandingType mLandingType; + BOOL mHiddenAVs; // Avatars are hidden on this parcel from outside it + BOOL mHaveNewParcelLimitData; // Remove once hidden AV feature is grid-wide LLTimer mSaleTimerExpires; LLTimer mMediaResetTimer; @@ -661,6 +678,8 @@ protected: BOOL mRegionPushOverride; BOOL mRegionDenyAnonymousOverride; BOOL mRegionDenyAgeUnverifiedOverride; + BOOL mAllowGroupAVSounds; + BOOL mAllowAnyAVSounds; ParcelQuota mQuota; diff --git a/indra/llinventory/llparcelflags.h b/indra/llinventory/llparcelflags.h index a61130132a..a85a6a51b3 100644 --- a/indra/llinventory/llparcelflags.h +++ b/indra/llinventory/llparcelflags.h @@ -126,5 +126,7 @@ const S32 PARCEL_DETAILS_DESC = 1; const S32 PARCEL_DETAILS_OWNER = 2; const S32 PARCEL_DETAILS_GROUP = 3; const S32 PARCEL_DETAILS_AREA = 4; +const S32 PARCEL_DETAILS_ID = 5; +const S32 PARCEL_DETAILS_HIDDEN_AVS = 6; #endif diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp index 6133f50637..e33da51aee 100644 --- a/indra/llmessage/message_prehash.cpp +++ b/indra/llmessage/message_prehash.cpp @@ -1376,3 +1376,6 @@ char const* const _PREHASH_VCoord = LLMessageStringTable::getInstance()->getStri char const* const _PREHASH_FaceIndex = LLMessageStringTable::getInstance()->getString("FaceIndex"); char const* const _PREHASH_StatusData = LLMessageStringTable::getInstance()->getString("StatusData"); char const* const _PREHASH_ProductSKU = LLMessageStringTable::getInstance()->getString("ProductSKU"); +char const* const _PREHASH_HiddenAVs = LLMessageStringTable::getInstance()->getString("HiddenAVs"); +char const* const _PREHASH_AnyAVSounds = LLMessageStringTable::getInstance()->getString("AnyAVSounds"); +char const* const _PREHASH_GroupAVSounds = LLMessageStringTable::getInstance()->getString("GroupAVSounds"); diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h index f94ee1ed22..b706ef8866 100644 --- a/indra/llmessage/message_prehash.h +++ b/indra/llmessage/message_prehash.h @@ -1376,4 +1376,7 @@ extern char const* const _PREHASH_VCoord; extern char const* const _PREHASH_FaceIndex; extern char const* const _PREHASH_StatusData; extern char const* const _PREHASH_ProductSKU; +extern char const* const _PREHASH_HiddenAVs; +extern char const* const _PREHASH_AnyAVSounds; +extern char const* const _PREHASH_GroupAVSounds; #endif diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l index 188c9e1950..78e31ead1a 100644 --- a/indra/lscript/lscript_compile/indra.l +++ b/indra/lscript/lscript_compile/indra.l @@ -603,6 +603,8 @@ extern "C" { int yyerror(const char *fmt, ...); } "PARCEL_DETAILS_OWNER" { count(); yylval.ival = PARCEL_DETAILS_OWNER; return(INTEGER_CONSTANT); } "PARCEL_DETAILS_GROUP" { count(); yylval.ival = PARCEL_DETAILS_GROUP; return(INTEGER_CONSTANT); } "PARCEL_DETAILS_AREA" { count(); yylval.ival = PARCEL_DETAILS_AREA; return(INTEGER_CONSTANT); } +"PARCEL_DETAILS_ID" { count(); yylval.ival = PARCEL_DETAILS_ID; return(INTEGER_CONSTANT); } +"PARCEL_DETAILS_HIDDEN_AVS" { count(); yylval.ival = PARCEL_DETAILS_HIDDEN_AVS; return(INTEGER_CONSTANT); } "STRING_TRIM_HEAD" { count(); yylval.ival = STRING_TRIM_HEAD; return(INTEGER_CONSTANT); } "STRING_TRIM_TAIL" { count(); yylval.ival = STRING_TRIM_TAIL; return(INTEGER_CONSTANT); } diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini index 263b73ba23..4e8f90d901 100644 --- a/indra/newview/app_settings/keywords.ini +++ b/indra/newview/app_settings/keywords.ini @@ -498,6 +498,7 @@ PARCEL_DETAILS_OWNER Used with llGetParcelDetails to get the parcel owner id. PARCEL_DETAILS_GROUP Used with llGetParcelDetails to get the parcel group id. PARCEL_DETAILS_AREA Used with llGetParcelDetails to get the parcel area in square meters. PARCEL_DETAILS_ID Used with llGetParcelDetails to get the parcel id. +PARCEL_DETAILS_HIDDEN_AVS Used with llGetParcelDetails to get the hidden avatars setting. STRING_TRIM_HEAD Used with llStringTrim to trim leading spaces from a string. STRING_TRIM_TAIL Used with llStringTrim to trim trailing spaces from a string. diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 76fecdf05e..76fecdf05e 100755..100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 0d0c1f594d..420a2b0f72 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -1818,6 +1818,7 @@ LLPanelLandOptions::LLPanelLandOptions(LLParcelSelectionHandle& parcel) mClearBtn(NULL), mMatureCtrl(NULL), mPushRestrictionCtrl(NULL), + mPrivateParcelCtrl(NULL), mParcel(parcel) { } @@ -1860,6 +1861,9 @@ BOOL LLPanelLandOptions::postBuild() mPushRestrictionCtrl = getChild<LLCheckBoxCtrl>( "PushRestrictCheck"); childSetCommitCallback("PushRestrictCheck", onCommitAny, this); + mPrivateParcelCtrl = getChild<LLCheckBoxCtrl>( "PrivateParcelCheck"); + childSetCommitCallback("PrivateParcelCheck", onCommitAny, this); + mCheckShowDirectory = getChild<LLCheckBoxCtrl>( "ShowDirectoryCheck"); childSetCommitCallback("ShowDirectoryCheck", onCommitAny, this); @@ -1968,6 +1972,9 @@ void LLPanelLandOptions::refresh() mPushRestrictionCtrl->set(FALSE); mPushRestrictionCtrl->setEnabled(FALSE); + mPrivateParcelCtrl->set(FALSE); + mPrivateParcelCtrl->setEnabled(FALSE); + mLandingTypeCombo->setCurrentByIndex(0); mLandingTypeCombo->setEnabled(FALSE); @@ -2027,6 +2034,10 @@ void LLPanelLandOptions::refresh() mPushRestrictionCtrl->setEnabled(can_change_options); } + mPrivateParcelCtrl->set(parcel->getHiddenAVs()); + mPrivateParcelCtrl->setLabel(getString("hidden_avs_text")); + mPrivateParcelCtrl->setEnabled(can_change_options && parcel->getHaveNewParcelLimitData()); + BOOL can_change_landing_point = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_SET_LANDING_POINT); mLandingTypeCombo->setCurrentByIndex((S32)parcel->getLandingType()); @@ -2231,6 +2242,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata) BOOL allow_publish = FALSE; BOOL mature_publish = self->mMatureCtrl->get(); BOOL push_restriction = self->mPushRestrictionCtrl->get(); + BOOL hidden_avs = self->mPrivateParcelCtrl->get(); BOOL show_directory = self->mCheckShowDirectory->get(); // we have to get the index from a lookup, not from the position in the dropdown! S32 category_index = LLParcel::getCategoryFromString(self->mCategoryCombo->getSelectedValue()); @@ -2264,6 +2276,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata) parcel->setCategory((LLParcel::ECategory)category_index); parcel->setLandingType((LLParcel::ELandingType)landing_type_index); parcel->setSnapshotID(snapshot_id); + parcel->setHiddenAVs(hidden_avs); // Send current parcel data upstream to server LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel ); diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index 8a70fa24d8..ef958892df 100644 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -348,6 +348,7 @@ private: LLCheckBoxCtrl *mMatureCtrl; LLCheckBoxCtrl *mPushRestrictionCtrl; + LLCheckBoxCtrl *mPrivateParcelCtrl; LLSafeHandle<LLParcelSelection>& mParcel; }; diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 5c65dcec34..7a988e95b9 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -190,6 +190,7 @@ LLLocationInputCtrl::Params::Params() scripts_icon("scripts_icon"), damage_icon("damage_icon"), damage_text("damage_text"), + hidden_av_icon("hidden_av_icon"), maturity_help_topic("maturity_help_topic") { } @@ -342,6 +343,13 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p) mDamageText = LLUICtrlFactory::create<LLTextBox>(damage_text); addChild(mDamageText); + LLIconCtrl::Params hidden_av_icon = p.hidden_av_icon; + hidden_av_icon.tool_tip = LLTrans::getString("LocationCtrlHiddenAVsTooltip"); + hidden_av_icon.mouse_opaque = true; + mParcelIcon[HIDDEN_AV_ICON] = LLUICtrlFactory::create<LLIconCtrl>(hidden_av_icon); + mParcelIcon[HIDDEN_AV_ICON]->setMouseDownCallback(boost::bind(&LLLocationInputCtrl::onParcelIconClick, this, HIDDEN_AV_ICON)); + addChild(mParcelIcon[HIDDEN_AV_ICON]); + // Register callbacks and load the location field context menu (NB: the order matters). LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Navbar.Action", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemClicked, this, _2)); LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Navbar.EnableMenuItem", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemEnabled, this, _2)); @@ -810,6 +818,7 @@ void LLLocationInputCtrl::refreshParcelIcons() bool allow_build = vpm->allowAgentBuild(current_parcel); // true when anyone is allowed to build. See EXT-4610. bool allow_scripts = vpm->allowAgentScripts(agent_region, current_parcel); bool allow_damage = vpm->allowAgentDamage(agent_region, current_parcel); + bool hidden_avs = current_parcel->getHiddenAVs(); // Most icons are "block this ability" mParcelIcon[VOICE_ICON]->setVisible( !allow_voice ); @@ -819,6 +828,7 @@ void LLLocationInputCtrl::refreshParcelIcons() mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts ); mParcelIcon[DAMAGE_ICON]->setVisible( allow_damage ); mDamageText->setVisible(allow_damage); + mParcelIcon[HIDDEN_AV_ICON]->setVisible( hidden_avs ); // Padding goes to left of both landmark star and for sale btn x -= mAddLandmarkHPad; @@ -1175,6 +1185,9 @@ void LLLocationInputCtrl::onParcelIconClick(EParcelIcon icon) case DAMAGE_ICON: LLNotificationsUtil::add("NotSafe"); break; + case HIDDEN_AV_ICON: + LLNotificationsUtil::add("HiddenAVs"); + break; case ICON_COUNT: break; // no default to get compiler warning when a new icon gets added diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h index 6368bf5cf2..ead20efcb6 100644 --- a/indra/newview/lllocationinputctrl.h +++ b/indra/newview/lllocationinputctrl.h @@ -77,7 +77,8 @@ public: push_icon, build_icon, scripts_icon, - damage_icon; + damage_icon, + hidden_av_icon; Optional<LLTextBox::Params> damage_text; Params(); }; @@ -109,12 +110,13 @@ private: enum EParcelIcon { VOICE_ICON = 0, - FLY_ICON, - PUSH_ICON, - BUILD_ICON, - SCRIPTS_ICON, - DAMAGE_ICON, - ICON_COUNT + FLY_ICON, // 1 + PUSH_ICON, // 2 + BUILD_ICON, // 3 + SCRIPTS_ICON, // 4 + DAMAGE_ICON, // 5 + HIDDEN_AV_ICON, // 6 + ICON_COUNT // 7 total }; friend class LLUICtrlFactory; diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 6e0722bcf9..6e0722bcf9 100755..100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp diff --git a/indra/newview/llpanellandaudio.cpp b/indra/newview/llpanellandaudio.cpp index f9730d9b71..e7bdc51b4a 100644 --- a/indra/newview/llpanellandaudio.cpp +++ b/indra/newview/llpanellandaudio.cpp @@ -91,6 +91,12 @@ BOOL LLPanelLandAudio::postBuild() mMusicURLEdit = getChild<LLLineEditor>("music_url"); childSetCommitCallback("music_url", onCommitAny, this); + mCheckAVSoundAny = getChild<LLCheckBoxCtrl>("all av sound check"); + childSetCommitCallback("all av sound check", onCommitAny, this); + + mCheckAVSoundGroup = getChild<LLCheckBoxCtrl>("group av sound check"); + childSetCommitCallback("group av sound check", onCommitAny, this); + return TRUE; } @@ -144,6 +150,13 @@ void LLPanelLandAudio::refresh() mMusicURLEdit->setText(parcel->getMusicURL()); mMusicURLEdit->setEnabled( can_change_media ); + + BOOL can_change_av_sounds = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_OPTIONS) && parcel->getHaveNewParcelLimitData(); + mCheckAVSoundAny->set(parcel->getAllowAnyAVSounds()); + mCheckAVSoundAny->setEnabled(can_change_av_sounds); + + mCheckAVSoundGroup->set(parcel->getAllowGroupAVSounds() || parcel->getAllowAnyAVSounds()); // On if "Everyone" is on + mCheckAVSoundGroup->setEnabled(can_change_av_sounds && !parcel->getAllowAnyAVSounds()); // Enabled if "Everyone" is off } } // static @@ -164,6 +177,13 @@ void LLPanelLandAudio::onCommitAny(LLUICtrl*, void *userdata) BOOL voice_enabled = self->mCheckParcelEnableVoice->get(); BOOL voice_estate_chan = !self->mCheckParcelVoiceLocal->get(); + BOOL any_av_sound = self->mCheckAVSoundAny->get(); + BOOL group_av_sound = TRUE; // If set to "Everyone" then group is checked as well + if (!any_av_sound) + { // If "Everyone" is off, use the value from the checkbox + group_av_sound = self->mCheckAVSoundGroup->get(); + } + // Remove leading/trailing whitespace (common when copying/pasting) LLStringUtil::trim(music_url); @@ -172,6 +192,8 @@ void LLPanelLandAudio::onCommitAny(LLUICtrl*, void *userdata) parcel->setParcelFlag(PF_USE_ESTATE_VOICE_CHAN, voice_estate_chan); parcel->setParcelFlag(PF_SOUND_LOCAL, sound_local); parcel->setMusicURL(music_url); + parcel->setAllowAnyAVSounds(any_av_sound); + parcel->setAllowGroupAVSounds(group_av_sound); // Send current parcel data upstream to server LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel ); diff --git a/indra/newview/llpanellandaudio.h b/indra/newview/llpanellandaudio.h index 4b0953bdc1..32a45100f4 100644 --- a/indra/newview/llpanellandaudio.h +++ b/indra/newview/llpanellandaudio.h @@ -52,6 +52,8 @@ private: LLCheckBoxCtrl* mCheckParcelVoiceLocal; LLLineEditor* mMusicURLEdit; LLCheckBoxCtrl* mMusicUrlCheck; + LLCheckBoxCtrl* mCheckAVSoundAny; + LLCheckBoxCtrl* mCheckAVSoundGroup; LLSafeHandle<LLParcelSelection>& mParcel; }; diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index 68ecb0165c..1500ac5429 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -70,6 +70,8 @@ static std::string icon_scripts; static std::string icon_scripts_no; static std::string icon_damage; static std::string icon_damage_no; +static std::string icon_hidden_avs_on; +static std::string icon_hidden_avs_off; LLPanelPlaceProfile::LLPanelPlaceProfile() : LLPanelPlaceInfo(), @@ -114,6 +116,8 @@ BOOL LLPanelPlaceProfile::postBuild() mScriptsText = getChild<LLTextBox>("scripts_value"); mDamageIcon = getChild<LLIconCtrl>("damage_icon"); mDamageText = getChild<LLTextBox>("damage_value"); + mHiddenAVsIcon = getChild<LLIconCtrl>("hidden_av_icon"); + mHiddenAVsText = getChild<LLTextBox>("hidden_av_value"); mRegionNameText = getChild<LLTextBox>("region_name"); mRegionTypeText = getChild<LLTextBox>("region_type"); @@ -153,6 +157,8 @@ BOOL LLPanelPlaceProfile::postBuild() icon_scripts_no = getString("icon_ScriptsNo"); icon_damage = getString("icon_Damage"); icon_damage_no = getString("icon_DamageNo"); + icon_hidden_avs_on = getString("icon_HiddenAVsOn"); + icon_hidden_avs_off = getString("icon_HiddenAVsOff"); return TRUE; } @@ -182,6 +188,8 @@ void LLPanelPlaceProfile::resetLocation() mScriptsText->setText(loading); mDamageIcon->setValue(loading); mDamageText->setText(loading); + mHiddenAVsIcon->setValue(loading); + mHiddenAVsText->setText(loading); mRegionNameText->setValue(loading); mRegionTypeText->setValue(loading); @@ -414,6 +422,17 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel, mDamageText->setText(off); } + if (parcel->getHiddenAVs()) + { + mHiddenAVsIcon->setValue(icon_hidden_avs_on); + mHiddenAVsText->setText(on); + } + else + { + mHiddenAVsIcon->setValue(icon_hidden_avs_off); + mHiddenAVsText->setText(off); + } + mRegionNameText->setText(region->getName()); mRegionTypeText->setText(region->getSimProductName()); diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h index f28b3b3832..6550dae06b 100644 --- a/indra/newview/llpanelplaceprofile.h +++ b/indra/newview/llpanelplaceprofile.h @@ -91,6 +91,8 @@ private: LLTextBox* mScriptsText; LLIconCtrl* mDamageIcon; LLTextBox* mDamageText; + LLIconCtrl* mHiddenAVsIcon; + LLTextBox* mHiddenAVsText; LLTextBox* mRegionNameText; LLTextBox* mRegionTypeText; diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp index 30949f8f02..d1d7c3e4b9 100644 --- a/indra/newview/llpaneltopinfobar.cpp +++ b/indra/newview/llpaneltopinfobar.cpp @@ -102,6 +102,7 @@ void LLPanelTopInfoBar::initParcelIcons() mParcelIcon[BUILD_ICON] = getChild<LLIconCtrl>("build_icon"); mParcelIcon[SCRIPTS_ICON] = getChild<LLIconCtrl>("scripts_icon"); mParcelIcon[DAMAGE_ICON] = getChild<LLIconCtrl>("damage_icon"); + mParcelIcon[HIDDEN_AV_ICON] = getChild<LLIconCtrl>("hidden_av_icon"); mParcelIcon[VOICE_ICON]->setToolTip(LLTrans::getString("LocationCtrlVoiceTooltip")); mParcelIcon[FLY_ICON]->setToolTip(LLTrans::getString("LocationCtrlFlyTooltip")); @@ -109,6 +110,7 @@ void LLPanelTopInfoBar::initParcelIcons() mParcelIcon[BUILD_ICON]->setToolTip(LLTrans::getString("LocationCtrlBuildTooltip")); mParcelIcon[SCRIPTS_ICON]->setToolTip(LLTrans::getString("LocationCtrlScriptsTooltip")); mParcelIcon[DAMAGE_ICON]->setToolTip(LLTrans::getString("LocationCtrlDamageTooltip")); + mParcelIcon[HIDDEN_AV_ICON]->setToolTip(LLTrans::getString("LocationCtrlHiddenAVsTooltip")); mParcelIcon[VOICE_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, VOICE_ICON)); mParcelIcon[FLY_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, FLY_ICON)); @@ -116,6 +118,7 @@ void LLPanelTopInfoBar::initParcelIcons() mParcelIcon[BUILD_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, BUILD_ICON)); mParcelIcon[SCRIPTS_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, SCRIPTS_ICON)); mParcelIcon[DAMAGE_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, DAMAGE_ICON)); + mParcelIcon[HIDDEN_AV_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, HIDDEN_AV_ICON)); mDamageText->setText(LLStringExplicit("100%")); } @@ -295,6 +298,7 @@ void LLPanelTopInfoBar::updateParcelIcons() bool allow_build = vpm->allowAgentBuild(current_parcel); // true when anyone is allowed to build. See EXT-4610. bool allow_scripts = vpm->allowAgentScripts(agent_region, current_parcel); bool allow_damage = vpm->allowAgentDamage(agent_region, current_parcel); + bool hidden_avs = current_parcel->getHiddenAVs(); // Most icons are "block this ability" mParcelIcon[VOICE_ICON]->setVisible( !allow_voice ); @@ -304,6 +308,7 @@ void LLPanelTopInfoBar::updateParcelIcons() mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts ); mParcelIcon[DAMAGE_ICON]->setVisible( allow_damage ); mDamageText->setVisible(allow_damage); + mParcelIcon[HIDDEN_AV_ICON]->setVisible( hidden_avs ); layoutParcelIcons(); } @@ -409,6 +414,9 @@ void LLPanelTopInfoBar::onParcelIconClick(EParcelIcon icon) case DAMAGE_ICON: LLNotificationsUtil::add("NotSafe"); break; + case HIDDEN_AV_ICON: + LLNotificationsUtil::add("HiddenAVs"); + break; case ICON_COUNT: break; // no default to get compiler warning when a new icon gets added diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h index db922ef424..ffbd53fe29 100644 --- a/indra/newview/llpaneltopinfobar.h +++ b/indra/newview/llpaneltopinfobar.h @@ -65,12 +65,13 @@ private: enum EParcelIcon { VOICE_ICON = 0, - FLY_ICON, - PUSH_ICON, - BUILD_ICON, - SCRIPTS_ICON, - DAMAGE_ICON, - ICON_COUNT + FLY_ICON, // 1 + PUSH_ICON, // 2 + BUILD_ICON, // 3 + SCRIPTS_ICON, // 4 + DAMAGE_ICON, // 5 + HIDDEN_AV_ICON, // 6 + ICON_COUNT // 7 total }; /** diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 1b53348b43..be5f772185 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -7270,9 +7270,9 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) llinfos << "Re-requesting AvatarAppearance for object: " << getID() << llendl; LLAvatarPropertiesProcessor::getInstance()->sendAvatarTexturesRequest(getID()); mRuthTimer.reset(); - } - else - { + } + else + { llinfos << "That's okay, we already have a non-default shape for object: " << getID() << llendl; // we don't really care. } diff --git a/indra/newview/skins/default/textures/icons/Parcel_HiddenAVsOff_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_HiddenAVsOff_Dark.png Binary files differnew file mode 100644 index 0000000000..064687ed0f --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Parcel_HiddenAVsOff_Dark.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_HiddenAVsOn_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_HiddenAVsOn_Dark.png Binary files differnew file mode 100644 index 0000000000..956e02b14d --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Parcel_HiddenAVsOn_Dark.png diff --git a/indra/newview/skins/default/textures/icons/Parcel_HiddenAVsOn_Light.png b/indra/newview/skins/default/textures/icons/Parcel_HiddenAVsOn_Light.png Binary files differnew file mode 100644 index 0000000000..434caeda8b --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Parcel_HiddenAVsOn_Light.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index cc7cce99c9..e63e25b308 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -1,4 +1,4 @@ -<!-- +<!-- This file contains metadata about how to load, display, and scale textures for rendering in the UI. Images do *NOT* have to appear in this file in order to use them as textures in the UI...simply refer to them by filename (relative to textures directory). @@ -369,6 +369,9 @@ with the same filename but different name <texture name="Parcel_ScriptsNo_Dark" file_name="icons/Parcel_ScriptsNo_Dark.png" preload="false" /> <texture name="Parcel_Voice_Dark" file_name="icons/Parcel_Voice_Dark.png" preload="false" /> <texture name="Parcel_VoiceNo_Dark" file_name="icons/Parcel_VoiceNo_Dark.png" preload="false" /> + <texture name="Parcel_HiddenAVsOff_Dark" file_name="icons/Parcel_HiddenAVsOff_Dark.png" preload="false" /> + <texture name="Parcel_HiddenAVsOn_Dark" file_name="icons/Parcel_HiddenAVsOn_Dark.png" preload="false" /> + <texture name="Parcel_HiddenAVsOn_Light" file_name="icons/Parcel_HiddenAVsOn_Light.png" preload="false" /> <texture name="Parcel_BuildNo_Light" file_name="icons/Parcel_BuildNo_Light.png" preload="false" /> <texture name="Parcel_FlyNo_Light" file_name="icons/Parcel_FlyNo_Light.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index 6e985e0476..612d2a3bfe 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1204,6 +1204,10 @@ Only large parcels can be listed in search. name="push_restrict_region_text"> No Pushing (Region Override) </panel.string> + <panel.string + name="hidden_avs_text"> + Hidden Avatars + </panel.string> <text type="string" length="1" @@ -1333,7 +1337,7 @@ Only large parcels can be listed in search. name="check safe" tool_tip="If checked, sets the land to Safe, disabling damage combat. If cleared, damage combat is enabled." top_pad="5" - width="200" /> + width="280" /> <check_box height="16" label="No Pushing" @@ -1350,7 +1354,16 @@ Only large parcels can be listed in search. left="14" name="ShowDirectoryCheck" tool_tip="Let people see this parcel in search results" - width="430" /> + width="280" /> + <check_box + height="16" + label="Private Parcel" + layout="topleft" + left_pad="5" + name="PrivateParcelCheck" + tool_tip="Prevents avatars from seeing into or out of the parcel." + top_delta="0" + width="119" /> <combo_box enabled="false" height="23" @@ -1845,6 +1858,34 @@ Only large parcels can be listed in search. name="check sound local" left_pad="0" width="292" /> + <text + type="string" + length="1" + follows="left|top" + height="16" + layout="topleft" + left="10" + name="Avatar Sounds:" + top_pad="10" + width="100"> + Avatar Sounds: + </text> + <check_box + height="16" + label="Everyone" + layout="topleft" + left_pad="0" + name="all av sound check" + top_delta="0" + width="130" /> + <check_box + height="16" + label="Group" + layout="topleft" + left_pad="0" + name="group av sound check" + top_delta="0" + width="70" /> <text type="string" length="1" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 81046e99a0..6f4f9ef2ba 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -2840,6 +2840,18 @@ function="Floater.Toggle" parameter="region_debug_console" /> </menu_item_check> + <menu_item_check + label="Region Debug Console" + name="Region Debug Console" + shortcut="control|shift|`" + use_mac_ctrl="true"> + <menu_item_check.on_check + function="Floater.Visible" + parameter="region_debug_console" /> + <menu_item_check.on_click + function="Floater.Toggle" + parameter="region_debug_console" /> + </menu_item_check> <menu_item_separator /> <menu_item_check diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 09105c1d28..a6f1b5bf5c 100755..100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5655,6 +5655,15 @@ This area has building disabled. You can't build or rez objects here. <notification icon="notify.tga" + name="HiddenAVs" + persist="true" + type="notify" + unique="true"> +This parcel hides avatars from view from another parcel. You can't see others outside the parcel, and those outside are not able to see you. + </notification> + + <notification + icon="notify.tga" name="ScriptsStopped" persist="true" type="notify"> diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index 774a9e8bbf..9c6ee32d45 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -153,6 +153,14 @@ name="icon_DamageNo" translate="false" value="Parcel_DamageNo_Dark" /> + <string + name="icon_HiddenAVsOff" + translate="false" + value="Parcel_HiddenAVsOff_Dark" /> + <string + name="icon_HiddenAVsOn" + translate="false" + value="Parcel_HiddenAVsOn_Dark" /> <button follows="top|left" height="24" @@ -354,7 +362,7 @@ title="Parcel"> <panel follows="all" - height="175" + height="200" layout="topleft" left="0" name="parcel_characteristics_panel" @@ -543,6 +551,31 @@ top_delta="0" value="Off" width="60" /> + <icon + follows="top|left" + height="18" + image_name="Parcel_HiddenAVsOff_Dark" + layout="topleft" + left="10" + name="hidden_av_icon" + top_pad="7" + width="22" /> + <text + follows="left|top" + height="14" + layout="topleft" + left_pad="8" + name="hidden_avs_label" + value="Hidden Avatars:" + width="90" /> + <text + follows="left|top" + height="14" + layout="topleft" + left_pad="0" + name="hidden_av_value" + value="Off" + width="60" /> <button follows="bottom|right" height="23" diff --git a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml index 30d3064e14..d9a0eb884c 100644 --- a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml @@ -88,6 +88,16 @@ visible="false" width="14" /> + <icon + follows="right|top" + height="13" + image_name="Parcel_HiddenAVsOn_Light" + left="2" + name="hidden_av_icon" + top="3" + visible="false" + width="14" + /> <text follows="right|top" font="SansSerifSmall" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 71f48c833d..416e1ac620 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -1759,10 +1759,10 @@ integer llGetParcelMaxPrims(vector pos, integer sim_wide) Returns the maximum number of prims allowed on the parcel at pos </string> <string name="LSLTipText_llGetParcelDetails" translate="false"> -list llGetParcelDetails(vector pos, list params) -Returns the parcel details specified in params for the parcel at pos. -Params is one or more of: PARCEL_DETAILS_NAME, _DESC, _OWNER, _GROUP, _AREA - </string> + list llGetParcelDetails(vector pos, list params) + Returns the parcel details specified in params for the parcel at pos. + Params is one or more of: PARCEL_DETAILS_NAME, _DESC, _OWNER, _GROUP, _AREA, _ID, _HIDDEN_AVS + </string> <string name="LSLTipText_llSetLinkPrimitiveParams" translate="false"> llSetLinkPrimitiveParams(integer linknumber, list rules) Sets primitive parameters for linknumber based on rules @@ -3133,6 +3133,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="LocationCtrlAdultIconTooltip">Adult Region</string> <string name="LocationCtrlModerateIconTooltip">Moderate Region</string> <string name="LocationCtrlGeneralIconTooltip">General Region</string> + <string name="LocationCtrlHiddenAVsTooltip">Hidden Avatars Parcel</string> <!-- Strings used by the (currently Linux) auto-updater app --> <string name="UpdaterWindowTitle"> diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml index 37d60f1671..6041d750da 100644 --- a/indra/newview/skins/default/xui/en/widgets/location_input.xml +++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml @@ -123,6 +123,14 @@ font="SansSerifSmall" text_color="TextFgColor" /> + <hidden_av_icon + name="hidden_av_icon" + width="22" + height="18" + top="21" + follows="right|top" + image_name="Parcel_HiddenAVsOn_Light" + /> <combo_button name="Location History" label="" diff --git a/indra/newview/skins/minimal/xui/en/widgets/location_input.xml b/indra/newview/skins/minimal/xui/en/widgets/location_input.xml index fe06a2d816..9c2ba221ba 100644 --- a/indra/newview/skins/minimal/xui/en/widgets/location_input.xml +++ b/indra/newview/skins/minimal/xui/en/widgets/location_input.xml @@ -113,6 +113,14 @@ font="SansSerifSmall" text_color="TextFgColor" /> + <hidden_av_icon + name="hidden_av_icon" + width="0" + height="0" + visible="false" + top="21" + follows="right|top" + /> <combo_button name="Location History" label="" |