diff options
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 14 | ||||
| -rw-r--r-- | indra/newview/llinventoryfilter.cpp | 50 | ||||
| -rw-r--r-- | indra/newview/llinventoryfilter.h | 7 | ||||
| -rw-r--r-- | indra/newview/llinventorymodel.h | 2 | ||||
| -rw-r--r-- | indra/newview/llinventorypanel.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llinventorypanel.h | 3 | ||||
| -rw-r--r-- | indra/newview/lltexturectrl.cpp | 40 | ||||
| -rw-r--r-- | indra/newview/llviewerinventory.cpp | 14 | ||||
| -rw-r--r-- | indra/newview/llviewerinventory.h | 1 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_avatar_textures.xml | 47 | 
10 files changed, 135 insertions, 48 deletions
| diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 973257b19c..b9b4fa8b03 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -143,7 +143,6 @@ const std::string& LLInvFVBridge::getDisplayName() const  // Folders have full perms  PermissionMask LLInvFVBridge::getPermissionMask() const  { -  	return PERM_ALL;  } @@ -1219,18 +1218,7 @@ PermissionMask LLItemBridge::getPermissionMask() const  {  	LLViewerInventoryItem* item = getItem();  	PermissionMask perm_mask = 0; -	if(item) -	{ -		BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID()); -		BOOL mod = item->getPermissions().allowModifyBy(gAgent.getID()); -		BOOL xfer = item->getPermissions().allowOperationBy(PERM_TRANSFER, -															gAgent.getID()); - -		if (copy) perm_mask |= PERM_COPY; -		if (mod)  perm_mask |= PERM_MODIFY; -		if (xfer) perm_mask |= PERM_TRANSFER; - -	} +	if (item) perm_mask = item->getPermissionMask();  	return perm_mask;  } diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 901a570487..c90919e8fd 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -41,6 +41,7 @@  #include "llinventorymodelbackgroundfetch.h"  #include "llviewercontrol.h"  #include "llfolderview.h" +#include "llinventorybridge.h"  // linden library includes  #include "lltrans.h" @@ -54,7 +55,8 @@ LLInventoryFilter::FilterOps::FilterOps() :  	mShowFolderState(SHOW_NON_EMPTY_FOLDERS),  	mPermissions(PERM_NONE),  	mFilterTypes(FILTERTYPE_OBJECT), -	mFilterUUID(LLUUID::null) +	mFilterUUID(LLUUID::null), +	mIncludeLinks(TRUE)  {  } @@ -97,23 +99,23 @@ BOOL LLInventoryFilter::check(const LLFolderViewItem* item)  		return TRUE;  	} -	const LLFolderViewEventListener* listener = item->getListener();  	mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel().find(mFilterSubString) : std::string::npos;  	const BOOL passed_filtertype = checkAgainstFilterType(item); -	const BOOL passed = passed_filtertype && -		(mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos) && -		((listener->getPermissionMask() & mFilterOps.mPermissions) == mFilterOps.mPermissions); +	const BOOL passed_permissions = checkAgainstPermissions(item); +	const BOOL passed = (passed_filtertype && +						 passed_permissions &&  +						 (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos));  	return passed;  } -BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) +BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) const  {  	const LLFolderViewEventListener* listener = item->getListener();  	if (!listener) return FALSE; -	const LLInventoryType::EType object_type = listener->getInventoryType(); +	LLInventoryType::EType object_type = listener->getInventoryType();  	const LLUUID object_id = listener->getUUID();  	const LLInventoryObject *object = gInventory.getObject(object_id); @@ -128,7 +130,9 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item)  		if (object_type == LLInventoryType::IT_NONE)  		{  			if (object && object->getIsLinkType()) +			{  				return FALSE; +			}  		}  		else if ((1LL << object_type & mFilterOps.mFilterObjectTypes) == U64(0))  		{ @@ -203,6 +207,22 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item)  	return TRUE;  } +BOOL LLInventoryFilter::checkAgainstPermissions(const LLFolderViewItem* item) const +{ +	const LLFolderViewEventListener* listener = item->getListener(); +	if (!listener) return FALSE; + +	PermissionMask perm = listener->getPermissionMask(); +	const LLInvFVBridge *bridge = dynamic_cast<const LLInvFVBridge *>(item->getListener()); +	if (bridge && bridge->isLink()) +	{ +		const LLUUID& linked_uuid = gInventory.getLinkedItemID(bridge->getUUID()); +		const LLViewerInventoryItem *linked_item = gInventory.getItem(linked_uuid); +		if (linked_item) +			perm = linked_item->getPermissionMask(); +	} +	return (perm & mFilterOps.mPermissions) == mFilterOps.mPermissions; +}  const std::string& LLInventoryFilter::getFilterSubString(BOOL trim) const  { @@ -451,6 +471,18 @@ void LLInventoryFilter::setHoursAgo(U32 hours)  	mFilterOps.mFilterTypes |= FILTERTYPE_DATE;  } +void LLInventoryFilter::setIncludeLinks(BOOL include_links) +{ +	if (mFilterOps.mIncludeLinks != include_links) +	{ +		if (!mFilterOps.mIncludeLinks) +			setModified(FILTER_LESS_RESTRICTIVE); +		else +			setModified(FILTER_MORE_RESTRICTIVE); +	} +	mFilterOps.mIncludeLinks = include_links; +} +  void LLInventoryFilter::setShowFolderState(EFolderShow state)  {  	if (mFilterOps.mShowFolderState != state) @@ -826,6 +858,10 @@ U32 LLInventoryFilter::getHoursAgo() const  {   	return mFilterOps.mHoursAgo;   } +BOOL LLInventoryFilter::getIncludeLinks() const +{ +	return mFilterOps.mIncludeLinks; +}  LLInventoryFilter::EFolderShow LLInventoryFilter::getShowFolderState() const  {   	return mFilterOps.mShowFolderState;  diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h index 2376ba5d22..3ef51baefc 100644 --- a/indra/newview/llinventoryfilter.h +++ b/indra/newview/llinventoryfilter.h @@ -98,11 +98,15 @@ public:  	void 				setHoursAgo(U32 hours);  	U32 				getHoursAgo() const; +	void 				setIncludeLinks(BOOL include_links); +	BOOL				getIncludeLinks() const; +  	// +-------------------------------------------------------------------+  	// + Execution And Results  	// +-------------------------------------------------------------------+  	BOOL 				check(const LLFolderViewItem* item); -	BOOL 				checkAgainstFilterType(const LLFolderViewItem* item); +	BOOL 				checkAgainstFilterType(const LLFolderViewItem* item) const; +	BOOL 				checkAgainstPermissions(const LLFolderViewItem* item) const;  	std::string::size_type getStringMatchOffset() const;  	// +-------------------------------------------------------------------+ @@ -172,6 +176,7 @@ private:  		U32				mHoursAgo;  		EFolderShow		mShowFolderState;  		PermissionMask	mPermissions; +		BOOL			mIncludeLinks;  	};  	U32						mOrder; diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index 5f5d4d6118..1f7bd50328 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -256,7 +256,7 @@ public:  	//    updateCategory() method to actually modify values.  	LLViewerInventoryCategory* getCategory(const LLUUID& id) const; -	// Get the inventoryID that this item points to, else just return item_id. +	// Get the inventoryID or item that this item points to, else just return object_id  	const LLUUID& getLinkedItemID(const LLUUID& object_id) const;  private:  	mutable LLPointer<LLViewerInventoryItem> mLastItem; // cache recent lookups	 diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 000bcdd265..4766c1c227 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -248,6 +248,11 @@ void LLInventoryPanel::setHoursAgo(U32 hours)  	getFilter()->setHoursAgo(hours);  } +void LLInventoryPanel::setIncludeLinks(BOOL include_links) +{ +	getFilter()->setIncludeLinks(include_links); +} +  void LLInventoryPanel::setShowFolderState(LLInventoryFilter::EFolderShow show)  {  	getFilter()->setShowFolderState(show); diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 160a3d6f23..4373cedf66 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -141,7 +141,8 @@ public:  	void setSinceLogoff(BOOL sl);  	void setHoursAgo(U32 hours);  	BOOL getSinceLogoff(); -	 +	void setIncludeLinks(BOOL include_links); +  	void setShowFolderState(LLInventoryFilter::EFolderShow show);  	LLInventoryFilter::EFolderShow getShowFolderState();  	void setAllowMultiSelect(BOOL allow) { mFolderRoot->setAllowMultiSelect(allow); } diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index a1b3c8dabd..f6479bd004 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -1248,25 +1248,49 @@ void LLTextureCtrl::draw()  	mTentativeLabel->setVisible( !mTexturep.isNull() && getTentative() ); -	  	// Show "Loading..." string on the top left corner while this texture is loading.  	// Using the discard level, do not show the string if the texture is almost but not   	// fully loaded. -	if ( mTexturep.notNull() && -		 (!mTexturep->isFullyLoaded()) && -		 (mShowLoadingPlaceholder == TRUE) &&  -		 (mTexturep->getDiscardLevel() != 1) && -		 (mTexturep->getDiscardLevel() != 0)) +	if (mTexturep.notNull() && +		(!mTexturep->isFullyLoaded()) && +		(mShowLoadingPlaceholder == TRUE) && +		(mTexturep->getDiscardLevel() != 1) && +		(mTexturep->getDiscardLevel() != 0))  	{ +		U32 v_offset = 25;  		LLFontGL* font = LLFontGL::getFontSansSerif();  		font->renderUTF8( -			mLoadingPlaceholderString, 0, +			mLoadingPlaceholderString,  +			0,  			llfloor(interior.mLeft+3),  -			llfloor(interior.mTop-25), +			llfloor(interior.mTop-v_offset),  			LLColor4::white,  			LLFontGL::LEFT,  			LLFontGL::BASELINE,  			LLFontGL::DROP_SHADOW); +		 +		// Show more detailed information if this agent is god. +		if (gAgent.isGodlike()) +		{ +			LLFontGL* font = LLFontGL::getFontSansSerif(); +			std::string tdesc; +			// Show what % the texture has loaded (0 to 100%, 100 is highest), and what level of detail (5 to 0, 0 is best). + +			v_offset += 12; +			tdesc = llformat("  PK  : %d%%", U32(mTexturep->getDownloadProgress()*100.0)); +			font->renderUTF8(tdesc, 0, llfloor(interior.mLeft+3), llfloor(interior.mTop-v_offset), +							 LLColor4::white, LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::DROP_SHADOW); + +			v_offset += 12; +			tdesc = llformat("  LVL: %d", mTexturep->getDiscardLevel()); +			font->renderUTF8(tdesc, 0, llfloor(interior.mLeft+3), llfloor(interior.mTop-v_offset), +							 LLColor4::white, LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::DROP_SHADOW); + +			v_offset += 12; +			tdesc = llformat("  ID  : %s...", (mImageAssetID.asString().substr(0,10)).c_str()); +			font->renderUTF8(tdesc, 0, llfloor(interior.mLeft+3), llfloor(interior.mTop-v_offset), +							 LLColor4::white, LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::DROP_SHADOW); +		}  	}  	LLUICtrl::draw(); diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 49748c59e8..ac70be029a 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -1653,6 +1653,20 @@ bool LLViewerInventoryItem::checkPermissionsSet(PermissionMask mask) const  	return ((curr_mask & mask) == mask);  } +PermissionMask LLViewerInventoryItem::getPermissionMask() const +{ +	const LLPermissions& permissions = getPermissions(); + +	BOOL copy = permissions.allowCopyBy(gAgent.getID()); +	BOOL mod = permissions.allowModifyBy(gAgent.getID()); +	BOOL xfer = permissions.allowOperationBy(PERM_TRANSFER, gAgent.getID()); +	PermissionMask perm_mask = 0; +	if (copy) perm_mask |= PERM_COPY; +	if (mod)  perm_mask |= PERM_MODIFY; +	if (xfer) perm_mask |= PERM_TRANSFER; +	return perm_mask; +} +  //----------  void LLViewerInventoryItem::onCallingCardNameLookup(const LLUUID& id, const std::string& first_name, const std::string& last_name) diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h index f0dc7bcb67..8ab7c9710d 100644 --- a/indra/newview/llviewerinventory.h +++ b/indra/newview/llviewerinventory.h @@ -159,6 +159,7 @@ public:  	// Checks the items permissions (for owner, group, or everyone) and returns true if all mask bits are set.  	bool checkPermissionsSet(PermissionMask mask) const; +	PermissionMask getPermissionMask() const;  	// callback  	void onCallingCardNameLookup(const LLUUID& id, const std::string& first_name, const std::string& last_name); diff --git a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml index e30e958543..6690e9748a 100644 --- a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml @@ -1,16 +1,39 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater   legacy_header_height="18" - height="660" + height="990"   layout="topleft"   name="avatar_texture_debug"   help_topic="avatar_texture_debug"   title="AVATAR TEXTURES" - width="1253"> + width="1240" + can_resize="true">      <floater.string       name="InvalidAvatar">          INVALID AVATAR      </floater.string> + +    <scroll_container +     color="DkGray2" +     opaque="true" +     follows="all" +     height="970" +     layout="topleft" +     left="5" +     top_pad="15" +     name="profile_scroll" +     reserve_scroll_corner="false" +     width="1235"> +    <panel +     name="scroll_content_panel" +     follows="left|top" +     min_height="300" +     layout="topleft" +     top="0" +     background_visible="false" +     height="950" +     left="0" +     width="1230">      <text       type="string"       length="1" @@ -18,7 +41,7 @@       layout="topleft"       left="30"       name="label" -     top="40" +     top="20"       width="80">          Baked Textures      </text> @@ -43,27 +66,17 @@       top_delta="0"       width="150" /> -    <scroll_container -     color="DkGray2" -     opaque="true" -     follows="all" -     height="590" -     layout="topleft" -     left="5" -     top_pad="5" -     name="profile_scroll" -     reserve_scroll_corner="false" -     width="1240">      <panel       name="scroll_content_panel"       follows="left|top"       min_height="300"       layout="topleft" -     top="0" +     top="43"       background_visible="false" -     height="950" +     height="930"       left="0" -     width="1250"> +     width="1230"> +      <texture_picker       height="143"       label="Hair" | 
