diff options
| author | Tofu Linden <tofu.linden@lindenlab.com> | 2010-04-02 21:49:45 +0100 | 
|---|---|---|
| committer | Tofu Linden <tofu.linden@lindenlab.com> | 2010-04-02 21:49:45 +0100 | 
| commit | 20c660569df71f677065b5f5f66477ebbd6b35b6 (patch) | |
| tree | e2886b2dd66eb1528f0eb25276f625fcd967c3f8 /indra/newview | |
| parent | e46f128d20f155b7bae7edb3aeac2a9653c1a433 (diff) | |
| parent | 2c5c563319d5ba8eaeae93b627536321956d347e (diff) | |
merge
Diffstat (limited to 'indra/newview')
27 files changed, 1008 insertions, 1224 deletions
| diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index 9f8aadeae7..b76367324c 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -174,7 +174,7 @@ public:  	// Should only be called if we *know* we've never done so before, since users may  	// not want the Library outfits to stay in their quick outfit selector and can delete them. -	void			populateMyOutfitsFolder(void); +	void			populateMyOutfitsFolder();  private:  	void			makeNewOutfitDone(S32 type, U32 index);  diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp index 45274a8e2c..7a9ecd1c7f 100644 --- a/indra/newview/llagentwearablesfetch.cpp +++ b/indra/newview/llagentwearablesfetch.cpp @@ -54,7 +54,7 @@ void LLInitialWearablesFetch::done()  	// gInventory.notifyObservers.  The results will be handled in the next  	// idle tick instead.  	gInventory.removeObserver(this); -	doOnIdle(boost::bind(&LLInitialWearablesFetch::processContents,this)); +	doOnIdleOneTime(boost::bind(&LLInitialWearablesFetch::processContents,this));  }  void LLInitialWearablesFetch::add(InitialWearableData &data) @@ -210,8 +210,8 @@ void LLLibraryOutfitsFetch::done()  {  	// Delay this until idle() routine, since it's a heavy operation and  	// we also can't have it run within notifyObservers. -	doOnIdle(boost::bind(&LLLibraryOutfitsFetch::doneIdle,this)); -	gInventory.removeObserver(this); // Prevent doOnIdle from being added twice. +	doOnIdleOneTime(boost::bind(&LLLibraryOutfitsFetch::doneIdle,this)); +	gInventory.removeObserver(this); // Prevent doOnIdleOneTime from being added twice.  }  void LLLibraryOutfitsFetch::doneIdle() @@ -254,7 +254,7 @@ void LLLibraryOutfitsFetch::doneIdle()  	}  } -void LLLibraryOutfitsFetch::folderDone(void) +void LLLibraryOutfitsFetch::folderDone()  {  	LLInventoryModel::cat_array_t cat_array;  	LLInventoryModel::item_array_t wearable_array; @@ -295,7 +295,7 @@ void LLLibraryOutfitsFetch::folderDone(void)  	}  } -void LLLibraryOutfitsFetch::outfitsDone(void) +void LLLibraryOutfitsFetch::outfitsDone()  {  	LLInventoryModel::cat_array_t cat_array;  	LLInventoryModel::item_array_t wearable_array; @@ -372,7 +372,7 @@ private:  };  // Copy the clothing folders from the library into the imported clothing folder -void LLLibraryOutfitsFetch::libraryDone(void) +void LLLibraryOutfitsFetch::libraryDone()  {  	if (mImportedClothingID != LLUUID::null)  	{ @@ -427,7 +427,7 @@ void LLLibraryOutfitsFetch::libraryDone(void)  	}  } -void LLLibraryOutfitsFetch::importedFolderFetch(void) +void LLLibraryOutfitsFetch::importedFolderFetch()  {  	// Fetch the contents of the Imported Clothing Folder  	uuid_vec_t folders; @@ -442,7 +442,7 @@ void LLLibraryOutfitsFetch::importedFolderFetch(void)  	}  } -void LLLibraryOutfitsFetch::importedFolderDone(void) +void LLLibraryOutfitsFetch::importedFolderDone()  {  	LLInventoryModel::cat_array_t cat_array;  	LLInventoryModel::item_array_t wearable_array; @@ -471,7 +471,7 @@ void LLLibraryOutfitsFetch::importedFolderDone(void)  	}  } -void LLLibraryOutfitsFetch::contentsDone(void) +void LLLibraryOutfitsFetch::contentsDone()  {		  	LLInventoryModel::cat_array_t cat_array;  	LLInventoryModel::item_array_t wearable_array; diff --git a/indra/newview/llagentwearablesfetch.h b/indra/newview/llagentwearablesfetch.h index 72063114b8..1d0c6739ba 100644 --- a/indra/newview/llagentwearablesfetch.h +++ b/indra/newview/llagentwearablesfetch.h @@ -100,11 +100,11 @@ public:  	LLUUID mMyOutfitsID;  	void importedFolderFetch();  protected: -	void folderDone(void); -	void outfitsDone(void); -	void libraryDone(void); -	void importedFolderDone(void); -	void contentsDone(void); +	void folderDone(); +	void outfitsDone(); +	void libraryDone(); +	void importedFolderDone(); +	void contentsDone();  	enum ELibraryOutfitFetchStep mCurrFetchStep;  	uuid_vec_t mLibraryClothingFolders;  	uuid_vec_t mImportedClothingFolders; diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 8c5352ded7..e0f1d5348d 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -74,23 +74,6 @@ LLUUID findDescendentCategoryIDByName(const LLUUID& parent_id,const std::string&  	}  } -// support for secondlife:///app/appearance SLapps -class LLAppearanceHandler : public LLCommandHandler -{ -public: -	// requests will be throttled from a non-trusted browser -	LLAppearanceHandler() : LLCommandHandler("appearance", UNTRUSTED_THROTTLE) {} - -	bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) -	{ -		// support secondlife:///app/appearance/show, but for now we just -		// make all secondlife:///app/appearance SLapps behave this way -		LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD()); -		return true; -	} -}; -LLAppearanceHandler gAppearanceHandler; -  class LLWearInventoryCategoryCallback : public LLInventoryCallback  {  public: @@ -133,175 +116,6 @@ private:  	bool mAppend;  }; -class LLOutfitObserver : public LLInventoryFetchObserver -{ -public: -	LLOutfitObserver(const LLUUID& cat_id, bool copy_items, bool append) : -		mCatID(cat_id), -		mCopyItems(copy_items), -		mAppend(append) -	{} -	~LLOutfitObserver() {} -	virtual void done(); -	void doWearCategory(); - -protected: -	LLUUID mCatID; -	bool mCopyItems; -	bool mAppend; -}; - -void LLOutfitObserver::done() -{ -	llinfos << "done 2nd stage fetch" << llendl; -	gInventory.removeObserver(this); -	doOnIdle(boost::bind(&LLOutfitObserver::doWearCategory,this)); -} - -void LLOutfitObserver::doWearCategory() -{ -	llinfos << "starting" << llendl; -	 -	// We now have an outfit ready to be copied to agent inventory. Do -	// it, and wear that outfit normally. -	if(mCopyItems) -	{ -		LLInventoryCategory* cat = gInventory.getCategory(mCatID); -		std::string name; -		if(!cat) -		{ -			// should never happen. -			name = "New Outfit"; -		} -		else -		{ -			name = cat->getName(); -		} -		LLViewerInventoryItem* item = NULL; -		item_ref_t::iterator it = mComplete.begin(); -		item_ref_t::iterator end = mComplete.end(); -		LLUUID pid; -		for(; it < end; ++it) -		{ -			item = (LLViewerInventoryItem*)gInventory.getItem(*it); -			if(item) -			{ -				if(LLInventoryType::IT_GESTURE == item->getInventoryType()) -				{ -					pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE); -				} -				else -				{ -					pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); -				} -				break; -			} -		} -		if(pid.isNull()) -		{ -			pid = gInventory.getRootFolderID(); -		} -		 -		LLUUID cat_id = gInventory.createNewCategory( -			pid, -			LLFolderType::FT_NONE, -			name); -		mCatID = cat_id; -		LLPointer<LLInventoryCallback> cb = new LLWearInventoryCategoryCallback(mCatID, mAppend); -		it = mComplete.begin(); -		for(; it < end; ++it) -		{ -			item = (LLViewerInventoryItem*)gInventory.getItem(*it); -			if(item) -			{ -				copy_inventory_item( -					gAgent.getID(), -					item->getPermissions().getOwner(), -					item->getUUID(), -					cat_id, -					std::string(), -					cb); -			} -		} -		// BAP fixes a lag in display of created dir. -		gInventory.notifyObservers(); -	} -	else -	{ -		// Wear the inventory category. -		LLAppearanceMgr::instance().wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend); -	} -	delete this; -} - -class LLOutfitFetch : public LLInventoryFetchDescendentsObserver -{ -public: -	LLOutfitFetch(bool copy_items, bool append) : mCopyItems(copy_items), mAppend(append) {} -	~LLOutfitFetch() {} -	virtual void done(); -protected: -	bool mCopyItems; -	bool mAppend; -}; - -void LLOutfitFetch::done() -{ -	// What we do here is get the complete information on the items in -	// the library, and set up an observer that will wait for that to -	// happen. -	llinfos << "done first stage fetch" << llendl; -	 -	LLInventoryModel::cat_array_t cat_array; -	LLInventoryModel::item_array_t item_array; -	gInventory.collectDescendents(mCompleteFolders.front(), -								  cat_array, -								  item_array, -								  LLInventoryModel::EXCLUDE_TRASH); -	S32 count = item_array.count(); -	if(!count) -	{ -		llwarns << "Nothing fetched in category " << mCompleteFolders.front() -				<< llendl; -		//dec_busy_count(); -		gInventory.removeObserver(this); -		delete this; -		return; -	} - -	LLOutfitObserver* outfit_observer = new LLOutfitObserver(mCompleteFolders.front(), mCopyItems, mAppend); -	LLInventoryFetchObserver::item_ref_t ids; -	for(S32 i = 0; i < count; ++i) -	{ -		ids.push_back(item_array.get(i)->getUUID()); -	} - -	// clean up, and remove this as an observer since the call to the -	// outfit could notify observers and throw us into an infinite -	// loop. -	//dec_busy_count(); -	gInventory.removeObserver(this); - -	// increment busy count and either tell the inventory to check & -	// call done, or add this object to the inventory for observation. -	//inc_busy_count(); - -	// do the fetch -	outfit_observer->fetchItems(ids); -	if(outfit_observer->isEverythingComplete()) -	{ -		// everything is already here - call done. -		outfit_observer->done(); -	} -	else -	{ -		// it's all on it's way - add an observer, and the inventory -		// will call done for us when everything is here. -		gInventory.addObserver(outfit_observer); -	} -	delete this; -} -  LLUpdateAppearanceOnDestroy::LLUpdateAppearanceOnDestroy():  	mFireCount(0)  { @@ -1309,24 +1123,85 @@ void LLAppearanceMgr::wearInventoryCategory(LLInventoryCategory* category, bool  	llinfos << "wearInventoryCategory( " << category->getName()  			 << " )" << llendl; -	// What we do here is get the complete information on the items in -	// the inventory, and set up an observer that will wait for that to -	// happen. -	LLOutfitFetch* outfit_fetcher = new LLOutfitFetch(copy, append); -	uuid_vec_t folders; -	folders.push_back(category->getUUID()); -	outfit_fetcher->fetchDescendents(folders); -	//inc_busy_count(); -	if(outfit_fetcher->isEverythingComplete()) +	callAfterCategoryFetch(category->getUUID(),boost::bind(&LLAppearanceMgr::wearCategoryFinal, +														   &LLAppearanceMgr::instance(), +														   category->getUUID(), copy, append)); +} + +void LLAppearanceMgr::wearCategoryFinal(LLUUID& cat_id, bool copy_items, bool append) +{ +	llinfos << "starting" << llendl; +	 +	// We now have an outfit ready to be copied to agent inventory. Do +	// it, and wear that outfit normally. +	LLInventoryCategory* cat = gInventory.getCategory(cat_id); +	if(copy_items)  	{ -		// everything is already here - call done. -		outfit_fetcher->done(); +		LLInventoryModel::cat_array_t* cats; +		LLInventoryModel::item_array_t* items; +		gInventory.getDirectDescendentsOf(cat_id, cats, items); +		std::string name; +		if(!cat) +		{ +			// should never happen. +			name = "New Outfit"; +		} +		else +		{ +			name = cat->getName(); +		} +		LLViewerInventoryItem* item = NULL; +		LLInventoryModel::item_array_t::const_iterator it = items->begin(); +		LLInventoryModel::item_array_t::const_iterator end = items->end(); +		LLUUID pid; +		for(; it < end; ++it) +		{ +			item = *it; +			if(item) +			{ +				if(LLInventoryType::IT_GESTURE == item->getInventoryType()) +				{ +					pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE); +				} +				else +				{ +					pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); +				} +				break; +			} +		} +		if(pid.isNull()) +		{ +			pid = gInventory.getRootFolderID(); +		} +		 +		LLUUID new_cat_id = gInventory.createNewCategory( +			pid, +			LLFolderType::FT_NONE, +			name); +		LLPointer<LLInventoryCallback> cb = new LLWearInventoryCategoryCallback(new_cat_id, append); +		it = items->begin(); +		for(; it < end; ++it) +		{ +			item = *it; +			if(item) +			{ +				copy_inventory_item( +					gAgent.getID(), +					item->getPermissions().getOwner(), +					item->getUUID(), +					new_cat_id, +					std::string(), +					cb); +			} +		} +		// BAP fixes a lag in display of created dir. +		gInventory.notifyObservers();  	}  	else  	{ -		// it's all on it's way - add an observer, and the inventory -		// will call done for us when everything is here. -		gInventory.addObserver(outfit_fetcher); +		// Wear the inventory category. +		LLAppearanceMgr::instance().wearInventoryCategoryOnAvatar(cat, append);  	}  } @@ -1436,6 +1311,8 @@ private:  }; +// BAP - note that this runs asynchronously if the item is not already loaded from inventory. +// Dangerous if caller assumes link will exist after calling the function.  void LLAppearanceMgr::addCOFItemLink(const LLUUID &item_id, bool do_update )  {  	const LLInventoryItem *item = gInventory.getItem(item_id); @@ -1616,7 +1493,7 @@ void LLAppearanceMgr::updateIsDirty()  	}  } -void LLAppearanceMgr::onFirstFullyVisible() +void LLAppearanceMgr::autopopulateOutfits()  {  	// If this is the very first time the user has logged into viewer2+ (from a legacy viewer, or new account)  	// then auto-populate outfits from the library into the My Outfits folder. @@ -1633,6 +1510,12 @@ void LLAppearanceMgr::onFirstFullyVisible()  	check_populate_my_outfits = false;  } +// Handler for anything that's deferred until avatar de-clouds. +void LLAppearanceMgr::onFirstFullyVisible() +{ +	autopopulateOutfits(); +} +  //#define DUMP_CAT_VERBOSE  void LLAppearanceMgr::dumpCat(const LLUUID& cat_id, const std::string& msg) @@ -1684,6 +1567,7 @@ void LLAppearanceMgr::setAttachmentInvLinkEnable(bool val)  	mAttachmentInvLinkEnabled = val;  } +// BAP TODO - mRegisteredAttachments is currently maintained but not used for anything.  Consider yanking.  void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg)  {         llinfos << msg << llendl; @@ -1705,7 +1589,6 @@ void LLAppearanceMgr::registerAttachment(const LLUUID& item_id)  {         mRegisteredAttachments.insert(item_id);  	   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); -       //dumpAttachmentSet(mRegisteredAttachments,"after register:");  	   if (mAttachmentInvLinkEnabled)  	   { @@ -1722,11 +1605,8 @@ void LLAppearanceMgr::unregisterAttachment(const LLUUID& item_id)         mRegisteredAttachments.erase(item_id);  	   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); -       //dumpAttachmentSet(mRegisteredAttachments,"after unregister:"); -  	   if (mAttachmentInvLinkEnabled)  	   { -		   //LLAppearanceMgr::dumpCat(LLAppearanceMgr::getCOF(),"Removing attachment link:");  		   LLAppearanceMgr::removeCOFItemLinks(item_id, false);  	   }  	   else diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 2d6a0a10ed..5a499026e8 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -53,6 +53,7 @@ public:  	void updateCOF(const LLUUID& category, bool append = false);  	void wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append);  	void wearInventoryCategoryOnAvatar(LLInventoryCategory* category, bool append); +	void wearCategoryFinal(LLUUID& cat_id, bool copy_items, bool append);  	void wearOutfitByName(const std::string& name);  	void changeOutfit(bool proceed, const LLUUID& category, bool append); @@ -118,6 +119,9 @@ public:  	// Called when self avatar is first fully visible.  	void onFirstFullyVisible(); + +	// Create initial outfits from library. +	void autopopulateOutfits();  protected:  	LLAppearanceMgr(); @@ -173,17 +177,17 @@ LLUUID findDescendentCategoryIDByName(const LLUUID& parent_id,const std::string&  // Shim class and template function to allow arbitrary boost::bind  // expressions to be run as one-time idle callbacks.  template <typename T> -class OnIdleCallback +class OnIdleCallbackOneTime  {  public: -	OnIdleCallback(T callable): +	OnIdleCallbackOneTime(T callable):  		mCallable(callable)  	{  	}  	static void onIdle(void *data)  	{  		gIdleCallbacks.deleteFunction(onIdle, data); -		OnIdleCallback<T>* self = reinterpret_cast<OnIdleCallback<T>*>(data); +		OnIdleCallbackOneTime<T>* self = reinterpret_cast<OnIdleCallbackOneTime<T>*>(data);  		self->call();  		delete self;  	} @@ -196,14 +200,15 @@ private:  };  template <typename T> -void doOnIdle(T callable) +void doOnIdleOneTime(T callable)  { -	OnIdleCallback<T>* cb_functor = new OnIdleCallback<T>(callable); -	gIdleCallbacks.addFunction(&OnIdleCallback<T>::onIdle,cb_functor); +	OnIdleCallbackOneTime<T>* cb_functor = new OnIdleCallbackOneTime<T>(callable); +	gIdleCallbacks.addFunction(&OnIdleCallbackOneTime<T>::onIdle,cb_functor);  }  // Shim class and template function to allow arbitrary boost::bind  // expressions to be run as recurring idle callbacks. +// Callable should return true when done, false to continue getting called.  template <typename T>  class OnIdleCallbackRepeating  { @@ -212,7 +217,7 @@ public:  		mCallable(callable)  	{  	} -	// Will keep getting called until the callable returns false. +	// Will keep getting called until the callable returns true.  	static void onIdle(void *data)  	{  		OnIdleCallbackRepeating<T>* self = reinterpret_cast<OnIdleCallbackRepeating<T>*>(data); @@ -252,7 +257,7 @@ public:  	virtual void done()  	{  		gInventory.removeObserver(this); -		doOnIdle(mCallable); +		doOnIdleOneTime(mCallable);  		delete this;  	}  protected: diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 83eb9579b2..8d4d6a178a 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -2098,8 +2098,7 @@ bool LLFolderView::doToSelected(LLInventoryModel* model, const LLSD& userdata)  		if(!folder_item) continue;  		LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();  		if(!bridge) continue; - -		bridge->performAction(this, model, action); +		bridge->performAction(model, action);  	}  	LLFloater::setFloaterHost(NULL); diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h index 12e100caf4..a2ef8c1d12 100644 --- a/indra/newview/llfoldervieweventlistener.h +++ b/indra/newview/llfoldervieweventlistener.h @@ -88,7 +88,7 @@ public:  	virtual BOOL isUpToDate() const = 0;  	virtual BOOL hasChildren() const = 0;  	virtual LLInventoryType::EType getInventoryType() const = 0; -	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) = 0; +	virtual void performAction(LLInventoryModel* model, std::string action) = 0;  	// This method should be called when a drag begins. returns TRUE  	// if the drag can begin, otherwise FALSE. diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index c916e4b98c..0a2a33d220 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -1057,20 +1057,21 @@ void LLFolderViewItem::draw()  ///----------------------------------------------------------------------------  LLFolderViewFolder::LLFolderViewFolder( const LLFolderViewItem::Params& p ):  -LLFolderViewItem( p ),	// 0 = no create time -mIsOpen(FALSE), -mExpanderHighlighted(FALSE), -mCurHeight(0.f), -mTargetHeight(0.f), -mAutoOpenCountdown(0.f), -mSubtreeCreationDate(0), -mAmTrash(LLFolderViewFolder::UNKNOWN), -mLastArrangeGeneration( -1 ), -mLastCalculatedWidth(0), -mCompletedFilterGeneration(-1), -mMostFilteredDescendantGeneration(-1), -mNeedsSort(false) -{} +	LLFolderViewItem( p ),	// 0 = no create time +	mIsOpen(FALSE), +	mExpanderHighlighted(FALSE), +	mCurHeight(0.f), +	mTargetHeight(0.f), +	mAutoOpenCountdown(0.f), +	mSubtreeCreationDate(0), +	mAmTrash(LLFolderViewFolder::UNKNOWN), +	mLastArrangeGeneration( -1 ), +	mLastCalculatedWidth(0), +	mCompletedFilterGeneration(-1), +	mMostFilteredDescendantGeneration(-1), +	mNeedsSort(false) +{ +}  // Destroys the object  LLFolderViewFolder::~LLFolderViewFolder( void ) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 0fbf3148ac..10a3713c1e 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -36,8 +36,6 @@  // external projects  #include "lltransfersourceasset.h" - -  #include "llagent.h"  #include "llagentcamera.h"  #include "llagentwearables.h" @@ -72,6 +70,18 @@  #include "llwearablelist.h"  #include "llpaneloutfitsinventory.h" +typedef std::pair<LLUUID, LLUUID> two_uuids_t; +typedef std::list<two_uuids_t> two_uuids_list_t; + +struct LLMoveInv +{ +	LLUUID mObjectID; +	LLUUID mCategoryID; +	two_uuids_list_t mMoveList; +	void (*mCallback)(S32, void*); +	void* mUserData; +}; +  using namespace LLOldEvents;  // Helpers @@ -95,6 +105,7 @@ void remove_inventory_category_from_avatar(LLInventoryCategory* category);  void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id);  bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*);  bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response); +void teleport_via_landmark(const LLUUID& asset_id);  std::string ICON_NAME[ICON_NAME_COUNT] =  { @@ -139,8 +150,12 @@ std::string ICON_NAME[ICON_NAME_COUNT] =  // |        LLInvFVBridge                            |  // +=================================================+ -LLInvFVBridge::LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : -mUUID(uuid), mInvType(LLInventoryType::IT_NONE) +LLInvFVBridge::LLInvFVBridge(LLInventoryPanel* inventory,  +							 LLFolderView* root, +							 const LLUUID& uuid) : +	mUUID(uuid),  +	mRoot(root), +	mInvType(LLInventoryType::IT_NONE)  {  	mInventoryPanel = inventory->getHandle();  } @@ -239,7 +254,7 @@ void LLInvFVBridge::showProperties()  	// Disable old properties floater; this is replaced by the sidepanel.  	/* -	LLFloaterReg::showInstance("properties", mUUID); +	  LLFloaterReg::showInstance("properties", mUUID);  	*/  } @@ -487,8 +502,8 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const  }  void hide_context_entries(LLMenuGL& menu,  -						const menuentry_vec_t &entries_to_show, -						const menuentry_vec_t &disabled_entries) +						  const menuentry_vec_t &entries_to_show, +						  const menuentry_vec_t &disabled_entries)  {  	const LLView::child_list_t *list = menu.getChildList(); @@ -862,21 +877,11 @@ void LLInvFVBridge::changeCategoryParent(LLInventoryModel* model,  	model->notifyObservers();  } - -const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type) -{ -	const std::string rv= LLInventoryType::lookup(inv_type); -	if(rv.empty()) -	{ -		return std::string("<invalid>"); -	} -	return rv; -} -  LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,  										   LLAssetType::EType actual_asset_type,  										   LLInventoryType::EType inv_type,  										   LLInventoryPanel* inventory, +										   LLFolderView* root,  										   const LLUUID& uuid,  										   U32 flags)  { @@ -886,104 +891,104 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,  		case LLAssetType::AT_TEXTURE:  			if(!(inv_type == LLInventoryType::IT_TEXTURE || inv_type == LLInventoryType::IT_SNAPSHOT))  			{ -				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; +				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;  			} -			new_listener = new LLTextureBridge(inventory, uuid, inv_type); +			new_listener = new LLTextureBridge(inventory, root, uuid, inv_type);  			break;  		case LLAssetType::AT_SOUND:  			if(!(inv_type == LLInventoryType::IT_SOUND))  			{ -				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; +				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;  			} -			new_listener = new LLSoundBridge(inventory, uuid); +			new_listener = new LLSoundBridge(inventory, root, uuid);  			break;  		case LLAssetType::AT_LANDMARK:  			if(!(inv_type == LLInventoryType::IT_LANDMARK))  			{ -				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; +				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;  			} -			new_listener = new LLLandmarkBridge(inventory, uuid, flags); +			new_listener = new LLLandmarkBridge(inventory, root, uuid, flags);  			break;  		case LLAssetType::AT_CALLINGCARD:  			if(!(inv_type == LLInventoryType::IT_CALLINGCARD))  			{ -				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; +				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;  			} -			new_listener = new LLCallingCardBridge(inventory, uuid); +			new_listener = new LLCallingCardBridge(inventory, root, uuid);  			break;  		case LLAssetType::AT_SCRIPT:  			if(!(inv_type == LLInventoryType::IT_LSL))  			{ -				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; +				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;  			} -			new_listener = new LLScriptBridge(inventory, uuid); +			new_listener = new LLScriptBridge(inventory, root, uuid);  			break;  		case LLAssetType::AT_OBJECT:  			if(!(inv_type == LLInventoryType::IT_OBJECT || inv_type == LLInventoryType::IT_ATTACHMENT))  			{ -				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; +				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;  			} -			new_listener = new LLObjectBridge(inventory, uuid, inv_type, flags); +			new_listener = new LLObjectBridge(inventory, root, uuid, inv_type, flags);  			break;  		case LLAssetType::AT_NOTECARD:  			if(!(inv_type == LLInventoryType::IT_NOTECARD))  			{ -				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; +				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;  			} -			new_listener = new LLNotecardBridge(inventory, uuid); +			new_listener = new LLNotecardBridge(inventory, root, uuid);  			break;  		case LLAssetType::AT_ANIMATION:  			if(!(inv_type == LLInventoryType::IT_ANIMATION))  			{ -				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; +				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;  			} -			new_listener = new LLAnimationBridge(inventory, uuid); +			new_listener = new LLAnimationBridge(inventory, root, uuid);  			break;  		case LLAssetType::AT_GESTURE:  			if(!(inv_type == LLInventoryType::IT_GESTURE))  			{ -				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; +				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;  			} -			new_listener = new LLGestureBridge(inventory, uuid); +			new_listener = new LLGestureBridge(inventory, root, uuid);  			break;  		case LLAssetType::AT_LSL_TEXT:  			if(!(inv_type == LLInventoryType::IT_LSL))  			{ -				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; +				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;  			} -			new_listener = new LLLSLTextBridge(inventory, uuid); +			new_listener = new LLLSLTextBridge(inventory, root, uuid);  			break;  		case LLAssetType::AT_CLOTHING:  		case LLAssetType::AT_BODYPART:  			if(!(inv_type == LLInventoryType::IT_WEARABLE))  			{ -				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; +				llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;  			} -			new_listener = new LLWearableBridge(inventory, uuid, asset_type, inv_type, (EWearableType)flags); +			new_listener = new LLWearableBridge(inventory, root, uuid, asset_type, inv_type, (EWearableType)flags);  			break;  		case LLAssetType::AT_CATEGORY:  			if (actual_asset_type == LLAssetType::AT_LINK_FOLDER)  			{  				// Create a link folder handler instead. -				new_listener = new LLLinkFolderBridge(inventory, uuid); +				new_listener = new LLLinkFolderBridge(inventory, root, uuid);  				break;  			} -			new_listener = new LLFolderBridge(inventory, uuid); +			new_listener = new LLFolderBridge(inventory, root, uuid);  			break;  		case LLAssetType::AT_LINK:  		case LLAssetType::AT_LINK_FOLDER:  			// Only should happen for broken links. -			new_listener = new LLLinkItemBridge(inventory, uuid); +			new_listener = new LLLinkItemBridge(inventory, root, uuid);  			break;  		default:  			llinfos << "Unhandled asset type (llassetstorage.h): " @@ -1032,26 +1037,28 @@ LLInvFVBridge* LLInventoryFVBridgeBuilder::createBridge(LLAssetType::EType asset  														LLAssetType::EType actual_asset_type,  														LLInventoryType::EType inv_type,  														LLInventoryPanel* inventory, +														LLFolderView* root,  														const LLUUID& uuid,  														U32 flags /* = 0x00 */) const  {  	return LLInvFVBridge::createBridge(asset_type, -		actual_asset_type, -		inv_type, -		inventory, -		uuid, -		flags); +									   actual_asset_type, +									   inv_type, +									   inventory, +									   root, +									   uuid, +									   flags);  }  // +=================================================+  // |        LLItemBridge                             |  // +=================================================+ -void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLItemBridge::performAction(LLInventoryModel* model, std::string action)  {  	if ("goto" == action)  	{ -		gotoItem(folder); +		gotoItem();  	}  	if ("open" == action) @@ -1102,7 +1109,7 @@ void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model,  		LLInventoryItem* itemp = model->getItem(mUUID);  		if (!itemp) return; -		LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID()); +		LLFolderViewItem* folder_view_itemp = mRoot->getItemByID(itemp->getParentUUID());  		if (!folder_view_itemp) return;  		folder_view_itemp->getListener()->pasteFromClipboard(); @@ -1114,7 +1121,7 @@ void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model,  		LLInventoryItem* itemp = model->getItem(mUUID);  		if (!itemp) return; -		LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID()); +		LLFolderViewItem* folder_view_itemp = mRoot->getItemByID(itemp->getParentUUID());  		if (!folder_view_itemp) return;  		folder_view_itemp->getListener()->pasteLinkFromClipboard(); @@ -1183,7 +1190,7 @@ void LLItemBridge::restoreToWorld()  	}  } -void LLItemBridge::gotoItem(LLFolderView *folder) +void LLItemBridge::gotoItem()  {  	LLInventoryObject *obj = getInventoryObject();  	if (obj && obj->getIsLinkType()) @@ -1684,7 +1691,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  		// Is the destination the trash?  		const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);  		BOOL move_is_into_trash = (mUUID == trash_id) -				|| model->isObjectDescendentOf(mUUID, trash_id); +			|| model->isObjectDescendentOf(mUUID, trash_id);  		BOOL is_movable = (!LLFolderType::lookupIsProtectedType(inv_cat->getPreferredType()));  		const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);  		BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); @@ -1732,12 +1739,11 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  			}  		} - -		accept =	is_movable -					&& (mUUID != cat_id)								// Can't move a folder into itself -					&& (mUUID != inv_cat->getParentUUID())				// Avoid moves that would change nothing -					&& !(model->isObjectDescendentOf(mUUID, cat_id));	// Avoid circularity -		if(accept && drop) +		accept = is_movable +			&& (mUUID != cat_id)								// Can't move a folder into itself +			&& (mUUID != inv_cat->getParentUUID())				// Avoid moves that would change nothing +			&& !(model->isObjectDescendentOf(mUUID, cat_id));	// Avoid circularity +		if (accept && drop)  		{  			// Look for any gestures and deactivate them  			if (move_is_into_trash) @@ -1775,22 +1781,22 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  				else  				{  #if SUPPORT_ENSEMBLES -				// BAP - should skip if dup. -				if (move_is_into_current_outfit) -				{ -					LLAppearanceMgr::instance().addEnsembleLink(inv_cat); -				} -				else -				{ -					LLPointer<LLInventoryCallback> cb = NULL; -					link_inventory_item( -						gAgent.getID(), -						inv_cat->getUUID(), -						mUUID, -						inv_cat->getName(), -						LLAssetType::AT_LINK_FOLDER, -						cb); -				} +					// BAP - should skip if dup. +					if (move_is_into_current_outfit) +					{ +						LLAppearanceMgr::instance().addEnsembleLink(inv_cat); +					} +					else +					{ +						LLPointer<LLInventoryCallback> cb = NULL; +						link_inventory_item( +							gAgent.getID(), +							inv_cat->getUUID(), +							mUUID, +							inv_cat->getName(), +							LLAssetType::AT_LINK_FOLDER, +							cb); +					}  #endif  				}  			} @@ -1807,7 +1813,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  			}  		}  	} -	else if(LLToolDragAndDrop::SOURCE_WORLD == source) +	else if (LLToolDragAndDrop::SOURCE_WORLD == source)  	{  		// content category has same ID as object itself  		LLUUID object_id = inv_cat->getUUID(); @@ -1935,7 +1941,7 @@ public:  	LLRightClickInventoryFetchObserver(const LLUUID& cat_id, bool copy_items) :  		mCatID(cat_id),  		mCopyItems(copy_items) -		{ }; +	{ };  	virtual void done()  	{  		// we've downloaded all the items, so repaint the dialog @@ -2024,14 +2030,14 @@ void LLRightClickInventoryFetchDescendentsObserver::done()  //Uncomment the following code for laggy Inventory UI.  /*	if(outfit->isEverythingComplete())  	{ -		// everything is already here - call done. -		outfit->done(); +	// everything is already here - call done. +	outfit->done();  	}  	else  	{ -		// it's all on it's way - add an observer, and the inventory -		// will call done for us when everything is here. -		gInventory.addObserver(outfit); +	// it's all on it's way - add an observer, and the inventory +	// will call done for us when everything is here. +	gInventory.addObserver(outfit);  	}*/  } @@ -2045,7 +2051,8 @@ void LLRightClickInventoryFetchDescendentsObserver::done()  class LLInventoryCopyAndWearObserver : public LLInventoryObserver  {  public: -	LLInventoryCopyAndWearObserver(const LLUUID& cat_id, int count) :mCatID(cat_id), mContentsCount(count), mFolderAdded(FALSE) {} +	LLInventoryCopyAndWearObserver(const LLUUID& cat_id, int count) : +		mCatID(cat_id), mContentsCount(count), mFolderAdded(FALSE) {}  	virtual ~LLInventoryCopyAndWearObserver() {}  	virtual void changed(U32 mask); @@ -2084,7 +2091,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)  			if (NULL == category)  			{  				llwarns << "gInventory.getCategory(" << mCatID -					<< ") was NULL" << llendl; +						<< ") was NULL" << llendl;  			}  			else  			{ @@ -2103,11 +2110,11 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask) -void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)  {  	if ("open" == action)  	{ -		LLFolderViewFolder *f = dynamic_cast<LLFolderViewFolder *>(folder->getItemByID(mUUID)); +		LLFolderViewFolder *f = dynamic_cast<LLFolderViewFolder *>(mRoot->getItemByID(mUUID));  		if (f)  		{  			f->setOpen(TRUE); @@ -2460,16 +2467,16 @@ void LLFolderBridge::pasteLinkFromClipboard()  			}  			else  #endif -			if (LLInventoryItem *item = model->getItem(object_id)) -			{ -				link_inventory_item( -					gAgent.getID(), -					item->getLinkedUUID(), -					parent_id, -					item->getName(), -					LLAssetType::AT_LINK, -					LLPointer<LLInventoryCallback>(NULL)); -			} +				if (LLInventoryItem *item = model->getItem(object_id)) +				{ +					link_inventory_item( +						gAgent.getID(), +						item->getLinkedUUID(), +						parent_id, +						item->getName(), +						LLAssetType::AT_LINK, +						LLPointer<LLInventoryCallback>(NULL)); +				}  		}  	}  } @@ -2494,7 +2501,7 @@ void LLFolderBridge::folderOptionsMenu()  	const bool is_system_folder = LLFolderType::lookupIsProtectedType(type);  	// BAP change once we're no longer treating regular categories as ensembles.  	const bool is_ensemble = (type == LLFolderType::FT_NONE || -				  LLFolderType::lookupIsEnsembleType(type)); +							  LLFolderType::lookupIsEnsembleType(type));  	// calling card related functionality for folders. @@ -2624,10 +2631,10 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  	const LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);  	if (lost_and_found_id == mUUID) -	  { +	{  		// This is the lost+found folder. -		  mItems.push_back(std::string("Empty Lost And Found")); -	  } +		mItems.push_back(std::string("Empty Lost And Found")); +	}  	if(trash_id == mUUID)  	{ @@ -2912,10 +2919,10 @@ void LLFolderBridge::createWearable(const LLUUID &parent_id, EWearableType type)  	LLAssetType::EType asset_type = wearable->getAssetType();  	LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE;  	create_inventory_item(gAgent.getID(), gAgent.getSessionID(), -		parent_id, wearable->getTransactionID(), wearable->getName(), -		wearable->getDescription(), asset_type, inv_type, wearable->getType(), -		wearable->getPermissions().getMaskNextOwner(), -		LLPointer<LLInventoryCallback>(NULL)); +						  parent_id, wearable->getTransactionID(), wearable->getName(), +						  wearable->getDescription(), asset_type, inv_type, wearable->getType(), +						  wearable->getPermissions().getMaskNextOwner(), +						  LLPointer<LLInventoryCallback>(NULL));  }  void LLFolderBridge::modifyOutfit(BOOL append) @@ -2949,8 +2956,8 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response  		two_uuids_list_t::iterator move_it;  		for (move_it = move_inv->mMoveList.begin(); -			move_it != move_inv->mMoveList.end(); -			++move_it) +			 move_it != move_inv->mMoveList.end(); +			 ++move_it)  		{  			object->moveInventory(move_it->first, move_it->second);  		} @@ -2990,11 +2997,11 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  		BOOL is_movable = TRUE;  		switch( inv_item->getActualType() )  		{ -		case LLAssetType::AT_CATEGORY: -			is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType()); -			break; -		default: -			break; +			case LLAssetType::AT_CATEGORY: +				is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType()); +				break; +			default: +				break;  		}  		const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); @@ -3172,7 +3179,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  		if(drop)  		{  			copy_inventory_from_notecard(LLToolDragAndDrop::getInstance()->getObjectID(), -				LLToolDragAndDrop::getInstance()->getSourceID(), inv_item); +										 LLToolDragAndDrop::getInstance()->getSourceID(), inv_item);  		}  	}  	else if(LLToolDragAndDrop::SOURCE_LIBRARY == source) @@ -3271,7 +3278,7 @@ void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  }  // virtual -void LLTextureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLTextureBridge::performAction(LLInventoryModel* model, std::string action)  {  	if ("save_as" == action)  	{ @@ -3282,7 +3289,7 @@ void LLTextureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode  			preview_texture->openToSave();  		}  	} -	else LLItemBridge::performAction(folder, model, action); +	else LLItemBridge::performAction(model, action);  }  // +=================================================+ @@ -3307,14 +3314,14 @@ void LLSoundBridge::openItem()  // only open the preview dialog through the contextual right-click menu  // double-click just plays the sound -	LLViewerInventoryItem* item = getItem(); -	if(item) -	{ -		openSoundPreview((void*)this); -		//send_uuid_sound_trigger(item->getAssetUUID(), 1.0); -	} -*/ +LLViewerInventoryItem* item = getItem(); +if(item) +{ +openSoundPreview((void*)this); +//send_uuid_sound_trigger(item->getAssetUUID(), 1.0);  } +*/ +		}  void LLSoundBridge::previewItem()  { @@ -3359,8 +3366,11 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  // |        LLLandmarkBridge                         |  // +=================================================+ -LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags/* = 0x00*/) : -LLItemBridge(inventory, uuid) +LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory,  +								   LLFolderView* root, +								   const LLUUID& uuid,  +								   U32 flags/* = 0x00*/) : +	LLItemBridge(inventory, root, uuid)  {  	mVisited = FALSE;  	if (flags & LLInventoryItem::II_FLAGS_LANDMARK_VISITED) @@ -3421,7 +3431,7 @@ void teleport_via_landmark(const LLUUID& asset_id)  }  // virtual -void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLLandmarkBridge::performAction(LLInventoryModel* model, std::string action)  {  	if ("teleport" == action)  	{ @@ -3445,7 +3455,7 @@ void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* mod  	}  	else  	{ -		LLItemBridge::performAction(folder, model, action); +		LLItemBridge::performAction(model, action);  	}  } @@ -3472,35 +3482,33 @@ void LLLandmarkBridge::openItem()  	{  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());  	} -/* -	LLViewerInventoryItem* item = getItem(); -	if( item ) -	{ -		// Opening (double-clicking) a landmark immediately teleports, -		// but warns you the first time. -		// open_landmark(item); -		LLSD payload; -		payload["asset_id"] = item->getAssetUUID(); -		LLNotificationsUtil::add("TeleportFromLandmark", LLSD(), payload); -	} -*/  }  // +=================================================+  // |        LLCallingCardObserver                    |  // +=================================================+ -void LLCallingCardObserver::changed(U32 mask) +class LLCallingCardObserver : public LLFriendObserver  { -	mBridgep->refreshFolderViewItem(); -} +public: +	LLCallingCardObserver(LLCallingCardBridge* bridge) : mBridgep(bridge) {} +	virtual ~LLCallingCardObserver() { mBridgep = NULL; } +	virtual void changed(U32 mask) +	{ +		mBridgep->refreshFolderViewItem(); +	} +protected: +	LLCallingCardBridge* mBridgep; +};  // +=================================================+  // |        LLCallingCardBridge                      |  // +=================================================+ -LLCallingCardBridge::LLCallingCardBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) : -	LLItemBridge(inventory, uuid) +LLCallingCardBridge::LLCallingCardBridge(LLInventoryPanel* inventory,  +										 LLFolderView* root, +										 const LLUUID& uuid ) : +	LLItemBridge(inventory, root, uuid)  {  	mObserver = new LLCallingCardObserver(this);  	LLAvatarTracker::instance().addObserver(mObserver); @@ -3523,7 +3531,7 @@ void LLCallingCardBridge::refreshFolderViewItem()  }  // virtual -void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLCallingCardBridge::performAction(LLInventoryModel* model, std::string action)  {  	if ("begin_im" == action)  	{ @@ -3549,7 +3557,7 @@ void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel*  			LLAvatarActions::offerTeleport(item->getCreatorUUID());  		}  	} -	else LLItemBridge::performAction(folder, model, action); +	else LLItemBridge::performAction(model, action);  }  LLUIImagePtr LLCallingCardBridge::getIcon() const @@ -3585,11 +3593,11 @@ void LLCallingCardBridge::openItem()  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());  	}  /* -	LLViewerInventoryItem* item = getItem(); -	if(item && !item->getCreatorUUID().isNull()) -	{ -		LLAvatarActions::showProfile(item->getCreatorUUID()); -	} +  LLViewerInventoryItem* item = getItem(); +  if(item && !item->getCreatorUUID().isNull()) +  { +  LLAvatarActions::showProfile(item->getCreatorUUID()); +  }  */  } @@ -3612,8 +3620,8 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		LLInventoryItem* item = getItem();  		BOOL good_card = (item -				  && (LLUUID::null != item->getCreatorUUID()) -				  && (item->getCreatorUUID() != gAgent.getID())); +						  && (LLUUID::null != item->getCreatorUUID()) +						  && (item->getCreatorUUID() != gAgent.getID()));  		BOOL user_online = FALSE;  		if (item)  		{ @@ -3648,16 +3656,16 @@ BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop,  		// check the type  		switch(cargo_type)  		{ -		case DAD_TEXTURE: -		case DAD_SOUND: -		case DAD_LANDMARK: -		case DAD_SCRIPT: -		case DAD_CLOTHING: -		case DAD_OBJECT: -		case DAD_NOTECARD: -		case DAD_BODYPART: -		case DAD_ANIMATION: -		case DAD_GESTURE: +			case DAD_TEXTURE: +			case DAD_SOUND: +			case DAD_LANDMARK: +			case DAD_SCRIPT: +			case DAD_CLOTHING: +			case DAD_OBJECT: +			case DAD_NOTECARD: +			case DAD_BODYPART: +			case DAD_ANIMATION: +			case DAD_GESTURE:  			{  				LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data;  				const LLPermissions& perm = inv_item->getPermissions(); @@ -3680,7 +3688,7 @@ BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop,  				}  				break;  			} -		case DAD_CATEGORY: +			case DAD_CATEGORY:  			{  				LLInventoryCategory* inv_cat = (LLInventoryCategory*)cargo_data;  				if( gInventory.getCategory( inv_cat->getUUID() ) ) @@ -3702,8 +3710,8 @@ BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop,  				}  				break;  			} -		default: -			break; +			default: +				break;  		}  	}  	return rv; @@ -3728,11 +3736,11 @@ void LLNotecardBridge::openItem()  	}  /* -	LLViewerInventoryItem* item = getItem(); -	if (item) -	{ -		LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES); -	} +  LLViewerInventoryItem* item = getItem(); +  if (item) +  { +  LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES); +  }  */  } @@ -3773,7 +3781,7 @@ std::string LLGestureBridge::getLabelSuffix() const  }  // virtual -void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLGestureBridge::performAction(LLInventoryModel* model, std::string action)  {  	if (isAddAction(action))  	{ @@ -3819,7 +3827,7 @@ void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode  			playGesture(mUUID);  		}  	} -	else LLItemBridge::performAction(folder, model, action); +	else LLItemBridge::performAction(model, action);  }  void LLGestureBridge::openItem() @@ -3831,12 +3839,12 @@ void LLGestureBridge::openItem()  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());  	}  /* -	LLViewerInventoryItem* item = getItem(); -	if (item) -	{ -		LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null); -		preview->setFocus(TRUE); -	} +  LLViewerInventoryItem* item = getItem(); +  if (item) +  { +  LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null); +  preview->setFocus(TRUE); +  }  */  } @@ -3948,7 +3956,7 @@ void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  }  // virtual -void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLAnimationBridge::performAction(LLInventoryModel* model, std::string action)  {  	if ((action == "playworld") || (action == "playlocal"))  	{ @@ -3967,7 +3975,7 @@ void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* mo  	}  	else  	{ -		LLItemBridge::performAction(folder, model, action); +		LLItemBridge::performAction(model, action);  	}  } @@ -3980,11 +3988,11 @@ void LLAnimationBridge::openItem()  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());  	}  /* -	LLViewerInventoryItem* item = getItem(); -	if (item) -	{ -		LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES); -	} +  LLViewerInventoryItem* item = getItem(); +  if (item) +  { +  LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES); +  }  */  } @@ -3995,8 +4003,13 @@ void LLAnimationBridge::openItem()  // static  LLUUID LLObjectBridge::sContextMenuItemID; -LLObjectBridge::LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags) : -LLItemBridge(inventory, uuid), mInvType(type) +LLObjectBridge::LLObjectBridge(LLInventoryPanel* inventory,  +							   LLFolderView* root, +							   const LLUUID& uuid,  +							   LLInventoryType::EType type,  +							   U32 flags) : +	LLItemBridge(inventory, root, uuid),  +	mInvType(type)  {  	mAttachPt = (flags & 0xff); // low bye of inventory flags @@ -4020,7 +4033,7 @@ LLInventoryObject* LLObjectBridge::getObject() const  }  // virtual -void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLObjectBridge::performAction(LLInventoryModel* model, std::string action)  {  	if (isAddAction(action))  	{ @@ -4064,7 +4077,7 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model  			}  		}  	} -	else LLItemBridge::performAction(folder, model, action); +	else LLItemBridge::performAction(model, action);  }  void LLObjectBridge::openItem() @@ -4082,7 +4095,7 @@ void LLObjectBridge::openItem()  	// Disable old properties floater; this is replaced by the sidepanel.  	/* -	LLFloaterReg::showInstance("properties", mUUID); +	  LLFloaterReg::showInstance("properties", mUUID);  	*/  } @@ -4333,19 +4346,25 @@ void LLLSLTextBridge::openItem()  	{  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());  	} -	/* -	LLViewerInventoryItem* item = getItem(); -	if (item) -	{ -		LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES); -	} -	*/  }  // +=================================================+  // |        LLWearableBridge                         |  // +=================================================+ +LLWearableBridge::LLWearableBridge(LLInventoryPanel* inventory,  +								   LLFolderView* root,  +								   const LLUUID& uuid,  +								   LLAssetType::EType asset_type,  +								   LLInventoryType::EType inv_type,  +								   EWearableType  wearable_type) : +	LLItemBridge(inventory, root, uuid), +	mAssetType( asset_type ), +	mInvType(inv_type), +	mWearableType(wearable_type) +{ +} +  // *NOTE: hack to get from avatar inventory to avatar  void wear_inventory_item_on_avatar( LLInventoryItem* item )  { @@ -4366,10 +4385,10 @@ void wear_add_inventory_item_on_avatar( LLInventoryItem* item )  				 << " )" << llendl;  		LLWearableList::instance().getAsset(item->getAssetUUID(), -							   item->getName(), -							   item->getType(), -							   LLWearableBridge::onWearAddOnAvatarArrived, -							   new LLUUID(item->getUUID())); +											item->getName(), +											item->getType(), +											LLWearableBridge::onWearAddOnAvatarArrived, +											new LLUUID(item->getUUID()));  	}  } @@ -4529,7 +4548,7 @@ LLUIImagePtr LLWearableBridge::getIcon() const  }  // virtual -void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLWearableBridge::performAction(LLInventoryModel* model, std::string action)  {  	if (isAddAction(action))  	{ @@ -4549,7 +4568,7 @@ void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* mod  		removeFromAvatar();  		return;  	} -	else LLItemBridge::performAction(folder, model, action); +	else LLItemBridge::performAction(model, action);  }  void LLWearableBridge::openItem() @@ -4560,42 +4579,6 @@ void LLWearableBridge::openItem()  	{  		LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());  	} -	/* -	if( isItemInTrash() ) -	{ -		LLNotificationsUtil::add("CannotWearTrash"); -	} -	else if(isAgentInventory()) -	{ -		if( !get_is_item_worn( mUUID ) ) -		{ -			wearOnAvatar(); -		} -	} -	else -	{ -		// must be in the inventory library. copy it to our inventory -		// and put it on right away. -		LLViewerInventoryItem* item = getItem(); -		if(item && item->isComplete()) -		{ -			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); -			copy_inventory_item( -				gAgent.getID(), -				item->getPermissions().getOwner(), -				item->getUUID(), -				LLUUID::null, -				std::string(), -				cb); -		} -		else if(item) -		{ -			// *TODO: We should fetch the item details, and then do -			// the operation above. -			LLNotificationsUtil::add("CannotWearInfoNotComplete"); -		} -	} -	*/  }  void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) @@ -4919,7 +4902,7 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,  	delete on_remove_struct;  } -/* static */ +// static  void LLWearableBridge::removeAllClothesFromAvatar()  {  	// Remove COF links. @@ -4947,7 +4930,7 @@ void LLWearableBridge::removeAllClothesFromAvatar()  	LLAgentWearables::userRemoveAllClothes();  } -/* static */ +// static  void LLWearableBridge::removeItemFromAvatar(LLViewerInventoryItem *item)  {  	if (item) @@ -4969,61 +4952,124 @@ void LLWearableBridge::removeFromAvatar()  	}  } -LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type, -													   const LLUUID& uuid,LLInventoryModel* model) +// +=================================================+ +// |        LLLinkItemBridge                         | +// +=================================================+ +// For broken item links +std::string LLLinkItemBridge::sPrefix("Link: "); +LLUIImagePtr LLLinkItemBridge::getIcon() const  { -	LLInvFVBridgeAction* action = NULL; -	switch(asset_type) +	if (LLViewerInventoryItem *item = getItem())  	{ -	case LLAssetType::AT_TEXTURE: -		action = new LLTextureBridgeAction(uuid,model); -		break; - -	case LLAssetType::AT_SOUND: -		action = new LLSoundBridgeAction(uuid,model); -		break; - -	case LLAssetType::AT_LANDMARK: -		action = new LLLandmarkBridgeAction(uuid,model); -		break; - -	case LLAssetType::AT_CALLINGCARD: -		action = new LLCallingCardBridgeAction(uuid,model); -		break; - -	case LLAssetType::AT_OBJECT: -		action = new LLObjectBridgeAction(uuid,model); -		break; - -	case LLAssetType::AT_NOTECARD: -		action = new LLNotecardBridgeAction(uuid,model); -		break; - -	case LLAssetType::AT_ANIMATION: -		action = new LLAnimationBridgeAction(uuid,model); -		break; - -	case LLAssetType::AT_GESTURE: -		action = new LLGestureBridgeAction(uuid,model); -		break; +		U32 attachment_point = (item->getFlags() & 0xff); // low byte of inventory flags +		bool is_multi =  LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS & item->getFlags(); -	case LLAssetType::AT_LSL_TEXT: -		action = new LLLSLTextBridgeAction(uuid,model); -		break; +		return get_item_icon(item->getActualType(), item->getInventoryType(), attachment_point, is_multi); +	} +	return get_item_icon(LLAssetType::AT_LINK, LLInventoryType::IT_NONE, 0, FALSE); +} +void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ +	// *TODO: Translate +	lldebugs << "LLLink::buildContextMenu()" << llendl; +	menuentry_vec_t items; +	menuentry_vec_t disabled_items; -	case LLAssetType::AT_CLOTHING: -	case LLAssetType::AT_BODYPART: -		action = new LLWearableBridgeAction(uuid,model); +	items.push_back(std::string("Find Original")); +	disabled_items.push_back(std::string("Find Original")); +	 +	if(isItemInTrash()) +	{ +		addTrashContextMenuOptions(items, disabled_items); +	} +	else +	{ +		items.push_back(std::string("Properties")); +		addDeleteContextMenuOptions(items, disabled_items); +	} +	hide_context_entries(menu, items, disabled_items); +} -		break; +// +=================================================+ +// |        LLLinkBridge                             | +// +=================================================+ +// For broken folder links. +std::string LLLinkFolderBridge::sPrefix("Link: "); +LLUIImagePtr LLLinkFolderBridge::getIcon() const +{ +	LLFolderType::EType preferred_type = LLFolderType::FT_NONE; +	if (LLViewerInventoryItem *item = getItem()) +	{ +		if (const LLViewerInventoryCategory* cat = item->getLinkedCategory()) +		{ +			preferred_type = cat->getPreferredType(); +		} +	} +	return LLFolderBridge::getIcon(preferred_type); +} +void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ +	// *TODO: Translate +	lldebugs << "LLLink::buildContextMenu()" << llendl; +	menuentry_vec_t items; +	menuentry_vec_t disabled_items; -	default: -		break; +	if (isItemInTrash()) +	{ +		addTrashContextMenuOptions(items, disabled_items); +	} +	else +	{ +		items.push_back(std::string("Find Original")); +		addDeleteContextMenuOptions(items, disabled_items); +	} +	hide_context_entries(menu, items, disabled_items); +} +void LLLinkFolderBridge::performAction(LLInventoryModel* model, std::string action) +{ +	if ("goto" == action) +	{ +		gotoItem(); +		return; +	} +	LLItemBridge::performAction(model,action); +} +void LLLinkFolderBridge::gotoItem() +{ +	const LLUUID &cat_uuid = getFolderID(); +	if (!cat_uuid.isNull()) +	{ +		if (LLFolderViewItem *base_folder = mRoot->getItemByID(cat_uuid)) +		{ +			if (LLInventoryModel* model = getInventoryModel()) +			{ +				model->fetchDescendentsOf(cat_uuid); +			} +			base_folder->setOpen(TRUE); +			mRoot->setSelectionFromRoot(base_folder,TRUE); +			mRoot->scrollToShowSelection(); +		}  	} -	return action;  } +const LLUUID &LLLinkFolderBridge::getFolderID() const +{ +	if (LLViewerInventoryItem *link_item = getItem()) +	{ +		if (const LLViewerInventoryCategory *cat = link_item->getLinkedCategory()) +		{ +			const LLUUID& cat_uuid = cat->getUUID(); +			return cat_uuid; +		} +	} +	return LLUUID::null; +} + +/******************************************************************************** + ** + **                    BRIDGE ACTIONS + **/ -//static +// static  void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type,  								   const LLUUID& uuid,LLInventoryModel* model)  { @@ -5035,7 +5081,7 @@ void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type,  	}  } -//static +// static  void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model)  {  	llassert(model); @@ -5055,129 +5101,231 @@ void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model)  LLViewerInventoryItem* LLInvFVBridgeAction::getItem() const  { -	if(mModel) +	if (mModel)  		return (LLViewerInventoryItem*)mModel->getItem(mUUID);  	return NULL;  } -//virtual -void	LLTextureBridgeAction::doIt() +class LLTextureBridgeAction: public LLInvFVBridgeAction  { -	if (getItem()) +	friend class LLInvFVBridgeAction; +public: +	virtual void doIt()  	{ -		LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES); +		if (getItem()) +		{ +			LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES); +		} +		LLInvFVBridgeAction::doIt();  	} +	virtual ~LLTextureBridgeAction(){} +protected: +	LLTextureBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; -	LLInvFVBridgeAction::doIt(); -} - -//virtual -void	LLSoundBridgeAction::doIt() +class LLSoundBridgeAction: public LLInvFVBridgeAction  { -	LLViewerInventoryItem* item = getItem(); -	if(item) +	friend class LLInvFVBridgeAction; +public: +	virtual void doIt()  	{ -		LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES); +		LLViewerInventoryItem* item = getItem(); +		if (item) +		{ +			LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES); +		} +		LLInvFVBridgeAction::doIt();  	} +	virtual ~LLSoundBridgeAction(){} +protected: +	LLSoundBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; -	LLInvFVBridgeAction::doIt(); -} - - -//virtual -void	LLLandmarkBridgeAction::doIt() +class LLLandmarkBridgeAction: public LLInvFVBridgeAction  { -	LLViewerInventoryItem* item = getItem(); -	if( item ) +	friend class LLInvFVBridgeAction; +public: +	virtual void doIt()  	{ -		// Opening (double-clicking) a landmark immediately teleports, -		// but warns you the first time. -		LLSD payload; -		payload["asset_id"] = item->getAssetUUID();		 -		 -		LLSD args;  -		args["LOCATION"] = item->getName();  -		 -		LLNotificationsUtil::add("TeleportFromLandmark", args, payload); +		LLViewerInventoryItem* item = getItem(); +		if (item) +		{ +			// Opening (double-clicking) a landmark immediately teleports, +			// but warns you the first time. +			LLSD payload; +			payload["asset_id"] = item->getAssetUUID();		 +			 +			LLSD args;  +			args["LOCATION"] = item->getName();  +			 +			LLNotificationsUtil::add("TeleportFromLandmark", args, payload); +		} +		LLInvFVBridgeAction::doIt();  	} +	virtual ~LLLandmarkBridgeAction(){} +protected: +	LLLandmarkBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; -	LLInvFVBridgeAction::doIt(); -} - - -//virtual -void	LLCallingCardBridgeAction::doIt() +class LLCallingCardBridgeAction: public LLInvFVBridgeAction  { -	LLViewerInventoryItem* item = getItem(); -	if(item && item->getCreatorUUID().notNull()) +	friend class LLInvFVBridgeAction; +public: +	virtual void doIt()  	{ -		LLAvatarActions::showProfile(item->getCreatorUUID()); +		LLViewerInventoryItem* item = getItem(); +		if (item && item->getCreatorUUID().notNull()) +		{ +			LLAvatarActions::showProfile(item->getCreatorUUID()); +		} +		LLInvFVBridgeAction::doIt();  	} +	virtual ~LLCallingCardBridgeAction(){} +protected: +	LLCallingCardBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} -	LLInvFVBridgeAction::doIt(); -} +}; -//virtual -void -LLNotecardBridgeAction::doIt() +class LLNotecardBridgeAction: public LLInvFVBridgeAction  { -	LLViewerInventoryItem* item = getItem(); -	if (item) +	friend class LLInvFVBridgeAction; +public: +	virtual void doIt()  	{ -		LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES); +		LLViewerInventoryItem* item = getItem(); +		if (item) +		{ +			LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES); +		} +		LLInvFVBridgeAction::doIt();  	} +	virtual ~LLNotecardBridgeAction(){} +protected: +	LLNotecardBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; -	LLInvFVBridgeAction::doIt(); -} - -//virtual -void	LLGestureBridgeAction::doIt() +class LLGestureBridgeAction: public LLInvFVBridgeAction  { -	LLViewerInventoryItem* item = getItem(); -	if (item) +	friend class LLInvFVBridgeAction; +public: +	virtual void doIt()  	{ -		LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null); -		preview->setFocus(TRUE); +		LLViewerInventoryItem* item = getItem(); +		if (item) +		{ +			LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null); +			preview->setFocus(TRUE); +		} +		LLInvFVBridgeAction::doIt();		  	} +	virtual ~LLGestureBridgeAction(){} +protected: +	LLGestureBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; -	LLInvFVBridgeAction::doIt(); -} - -//virtual -void	LLAnimationBridgeAction::doIt() +class LLAnimationBridgeAction: public LLInvFVBridgeAction  { -	LLViewerInventoryItem* item = getItem(); -	if (item) +	friend class LLInvFVBridgeAction; +public: +	virtual void doIt()  	{ -		LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES); +		LLViewerInventoryItem* item = getItem(); +		if (item) +		{ +			LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES); +		} +		LLInvFVBridgeAction::doIt();  	} +	virtual ~LLAnimationBridgeAction(){} +protected: +	LLAnimationBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; -	LLInvFVBridgeAction::doIt(); -} - - -//virtual -void	LLObjectBridgeAction::doIt() +class LLObjectBridgeAction: public LLInvFVBridgeAction  { -	/* -	LLFloaterReg::showInstance("properties", mUUID); -	*/ -	LLInvFVBridgeAction::doIt(); -} - +	friend class LLInvFVBridgeAction; +public: +	virtual void doIt() +	{ +		/* +		  LLFloaterReg::showInstance("properties", mUUID); +		*/ +		LLInvFVBridgeAction::doIt(); +	} +	virtual ~LLObjectBridgeAction(){} +protected: +	LLObjectBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; -//virtual -void	LLLSLTextBridgeAction::doIt() +class LLLSLTextBridgeAction: public LLInvFVBridgeAction  { -	LLViewerInventoryItem* item = getItem(); -	if (item) +	friend class LLInvFVBridgeAction; +public: +	virtual void doIt()  	{ -		LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES); +		LLViewerInventoryItem* item = getItem(); +		if (item) +		{ +			LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES); +		} +		LLInvFVBridgeAction::doIt();  	} +	virtual ~LLLSLTextBridgeAction(){} +protected: +	LLLSLTextBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; -	LLInvFVBridgeAction::doIt(); -} - +class LLWearableBridgeAction: public LLInvFVBridgeAction +{ +	friend class LLInvFVBridgeAction; +public: +	virtual void doIt() +	{ +		if(isItemInTrash()) +		{ +			LLNotificationsUtil::add("CannotWearTrash"); +		} +		else if(isAgentInventory()) +		{ +			if(!get_is_item_worn(mUUID)) +			{ +				wearOnAvatar(); +			} +		} +		else +		{ +			// must be in the inventory library. copy it to our inventory +			// and put it on right away. +			LLViewerInventoryItem* item = getItem(); +			if(item && item->isComplete()) +			{ +				LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); +				copy_inventory_item( +					gAgent.getID(), +					item->getPermissions().getOwner(), +					item->getUUID(), +					LLUUID::null, +					std::string(), +					cb); +			} +			else if(item) +			{ +				// *TODO: We should fetch the item details, and then do +				// the operation above. +				LLNotificationsUtil::add("CannotWearInfoNotComplete"); +			} +		} +		LLInvFVBridgeAction::doIt(); +	} +	virtual ~LLWearableBridgeAction(){} +protected: +	LLWearableBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +	BOOL isItemInTrash() const; +	// return true if the item is in agent inventory. if false, it +	// must be lost or in the inventory library. +	BOOL isAgentInventory() const; +	void wearOnAvatar(); +};  BOOL LLWearableBridgeAction::isItemInTrash() const  { @@ -5224,167 +5372,50 @@ void LLWearableBridgeAction::wearOnAvatar()  	}  } -//virtual -void LLWearableBridgeAction::doIt() -{ -	if(isItemInTrash()) -	{ -		LLNotificationsUtil::add("CannotWearTrash"); -	} -	else if(isAgentInventory()) -	{ -		if(!get_is_item_worn(mUUID)) -		{ -			wearOnAvatar(); -		} -	} -	else -	{ -		// must be in the inventory library. copy it to our inventory -		// and put it on right away. -		LLViewerInventoryItem* item = getItem(); -		if(item && item->isComplete()) -		{ -			LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); -			copy_inventory_item( -				gAgent.getID(), -				item->getPermissions().getOwner(), -				item->getUUID(), -				LLUUID::null, -				std::string(), -				cb); -		} -		else if(item) -		{ -			// *TODO: We should fetch the item details, and then do -			// the operation above. -			LLNotificationsUtil::add("CannotWearInfoNotComplete"); -		} -	} - -	LLInvFVBridgeAction::doIt(); -} - -// +=================================================+ -// |        LLLinkItemBridge                         | -// +=================================================+ -// For broken links - -std::string LLLinkItemBridge::sPrefix("Link: "); - - -LLUIImagePtr LLLinkItemBridge::getIcon() const -{ -	if (LLViewerInventoryItem *item = getItem()) -	{ -		U32 attachment_point = (item->getFlags() & 0xff); // low byte of inventory flags -		bool is_multi =  LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS & item->getFlags(); - -		return get_item_icon(item->getActualType(), item->getInventoryType(), attachment_point, is_multi); -	} -	return get_item_icon(LLAssetType::AT_LINK, LLInventoryType::IT_NONE, 0, FALSE); -} - -void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags) -{ -	// *TODO: Translate -	lldebugs << "LLLink::buildContextMenu()" << llendl; -	menuentry_vec_t items; -	menuentry_vec_t disabled_items; - -	items.push_back(std::string("Find Original")); -	disabled_items.push_back(std::string("Find Original")); -	 -	if(isItemInTrash()) -	{ -		addTrashContextMenuOptions(items, disabled_items); -	} -	else -	{ -		items.push_back(std::string("Properties")); -		addDeleteContextMenuOptions(items, disabled_items); -	} -	hide_context_entries(menu, items, disabled_items); -} - - -// +=================================================+ -// |        LLLinkBridge                             | -// +=================================================+ -// For broken links. - -std::string LLLinkFolderBridge::sPrefix("Link: "); - - -LLUIImagePtr LLLinkFolderBridge::getIcon() const -{ -	LLFolderType::EType preferred_type = LLFolderType::FT_NONE; -	if (LLViewerInventoryItem *item = getItem()) -	{ -		if (const LLViewerInventoryCategory* cat = item->getLinkedCategory()) -		{ -			preferred_type = cat->getPreferredType(); -		} -	} -	return LLFolderBridge::getIcon(preferred_type); -} - -void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) -{ -	// *TODO: Translate -	lldebugs << "LLLink::buildContextMenu()" << llendl; -	menuentry_vec_t items; -	menuentry_vec_t disabled_items; - -	if (isItemInTrash()) -	{ -		addTrashContextMenuOptions(items, disabled_items); -	} -	else -	{ -		items.push_back(std::string("Find Original")); -		addDeleteContextMenuOptions(items, disabled_items); -	} -	hide_context_entries(menu, items, disabled_items); -} - -void LLLinkFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) -{ -	if ("goto" == action) -	{ -		gotoItem(folder); -		return; -	} -	LLItemBridge::performAction(folder,model,action); -} - -void LLLinkFolderBridge::gotoItem(LLFolderView *folder) +LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type, +													   const LLUUID& uuid, +													   LLInventoryModel* model)  { -	const LLUUID &cat_uuid = getFolderID(); -	if (!cat_uuid.isNull()) +	LLInvFVBridgeAction* action = NULL; +	switch(asset_type)  	{ -		if (LLFolderViewItem *base_folder = folder->getItemByID(cat_uuid)) -		{ -			if (LLInventoryModel* model = getInventoryModel()) -			{ -				model->fetchDescendentsOf(cat_uuid); -			} -			base_folder->setOpen(TRUE); -			folder->setSelectionFromRoot(base_folder,TRUE); -			folder->scrollToShowSelection(); -		} +		case LLAssetType::AT_TEXTURE: +			action = new LLTextureBridgeAction(uuid,model); +			break; +		case LLAssetType::AT_SOUND: +			action = new LLSoundBridgeAction(uuid,model); +			break; +		case LLAssetType::AT_LANDMARK: +			action = new LLLandmarkBridgeAction(uuid,model); +			break; +		case LLAssetType::AT_CALLINGCARD: +			action = new LLCallingCardBridgeAction(uuid,model); +			break; +		case LLAssetType::AT_OBJECT: +			action = new LLObjectBridgeAction(uuid,model); +			break; +		case LLAssetType::AT_NOTECARD: +			action = new LLNotecardBridgeAction(uuid,model); +			break; +		case LLAssetType::AT_ANIMATION: +			action = new LLAnimationBridgeAction(uuid,model); +			break; +		case LLAssetType::AT_GESTURE: +			action = new LLGestureBridgeAction(uuid,model); +			break; +		case LLAssetType::AT_LSL_TEXT: +			action = new LLLSLTextBridgeAction(uuid,model); +			break; +		case LLAssetType::AT_CLOTHING: +		case LLAssetType::AT_BODYPART: +			action = new LLWearableBridgeAction(uuid,model); +			break; +		default: +			break;  	} +	return action;  } -const LLUUID &LLLinkFolderBridge::getFolderID() const -{ -	if (LLViewerInventoryItem *link_item = getItem()) -	{ -		if (const LLViewerInventoryCategory *cat = link_item->getLinkedCategory()) -		{ -			const LLUUID& cat_uuid = cat->getUUID(); -			return cat_uuid; -		} -	} -	return LLUUID::null; -} +/**                    Bridge Actions + ** + ********************************************************************************/ diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 32504091cb..e7b3785a48 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -44,78 +44,13 @@  class LLInventoryPanel;  class LLInventoryModel;  class LLMenuGL; - -enum EInventoryIcon -{ -	TEXTURE_ICON_NAME, -	SOUND_ICON_NAME, -	CALLINGCARD_ONLINE_ICON_NAME, -	CALLINGCARD_OFFLINE_ICON_NAME, -	LANDMARK_ICON_NAME, -	LANDMARK_VISITED_ICON_NAME, -	SCRIPT_ICON_NAME, -	CLOTHING_ICON_NAME, -	OBJECT_ICON_NAME, -	OBJECT_MULTI_ICON_NAME, -	NOTECARD_ICON_NAME, -	BODYPART_ICON_NAME, -	SNAPSHOT_ICON_NAME, - -	BODYPART_SHAPE_ICON_NAME, -	BODYPART_SKIN_ICON_NAME, -	BODYPART_HAIR_ICON_NAME, -	BODYPART_EYES_ICON_NAME, -	CLOTHING_SHIRT_ICON_NAME, -	CLOTHING_PANTS_ICON_NAME, -	CLOTHING_SHOES_ICON_NAME, -	CLOTHING_SOCKS_ICON_NAME, -	CLOTHING_JACKET_ICON_NAME, -	CLOTHING_GLOVES_ICON_NAME, -	CLOTHING_UNDERSHIRT_ICON_NAME, -	CLOTHING_UNDERPANTS_ICON_NAME, -	CLOTHING_SKIRT_ICON_NAME, -	CLOTHING_ALPHA_ICON_NAME, -	CLOTHING_TATTOO_ICON_NAME, -	 -	ANIMATION_ICON_NAME, -	GESTURE_ICON_NAME, - -	LINKITEM_ICON_NAME, -	LINKFOLDER_ICON_NAME, - -	ICON_NAME_COUNT -}; - -extern std::string ICON_NAME[ICON_NAME_COUNT]; - -typedef std::pair<LLUUID, LLUUID> two_uuids_t; -typedef std::list<two_uuids_t> two_uuids_list_t; -typedef std::pair<LLUUID, two_uuids_list_t> uuid_move_list_t; - -struct LLMoveInv -{ -	LLUUID mObjectID; -	LLUUID mCategoryID; -	two_uuids_list_t mMoveList; -	void (*mCallback)(S32, void*); -	void* mUserData; -}; - -struct LLAttachmentRezAction -{ -	LLUUID	mItemID; -	S32		mAttachPt; -}; +class LLCallingCardObserver; +class LLViewerJointAttachment;  typedef std::vector<std::string> menuentry_vec_t; -const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type); -void hide_context_entries(LLMenuGL& menu,  -						  const menuentry_vec_t &entries_to_show, -						  const menuentry_vec_t &disabled_entries); -  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLInvFVBridge (& its derived classes) +// Class LLInvFVBridge  //  // Short for Inventory-Folder-View-Bridge. This is an  // implementation class to be able to view inventory items. @@ -134,6 +69,7 @@ public:  									   LLAssetType::EType actual_asset_type,  									   LLInventoryType::EType inv_type,  									   LLInventoryPanel* inventory, +									   LLFolderView* root,  									   const LLUUID& uuid,  									   U32 flags = 0x00);  	virtual ~LLInvFVBridge() {} @@ -175,7 +111,7 @@ public:  	virtual void pasteFromClipboard() {}  	virtual void pasteLinkFromClipboard() {}  	void getClipboardEntries(bool show_asset_id, menuentry_vec_t &items,  -		menuentry_vec_t &disabled_items, U32 flags); +							 menuentry_vec_t &disabled_items, U32 flags);  	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);  	virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const;  	virtual BOOL dragOrDrop(MASK mask, BOOL drop, @@ -199,7 +135,7 @@ protected:  											 menuentry_vec_t &disabled_items);  protected: -	LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid); +	LLInvFVBridge(LLInventoryPanel* inventory, LLFolderView* root, const LLUUID& uuid);  	LLInventoryObject* getInventoryObject() const;  	LLInventoryModel* getInventoryModel() const; @@ -221,40 +157,88 @@ protected:  	void removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*>& batch);  protected:  	LLHandle<LLPanel> mInventoryPanel; +	LLFolderView* mRoot;  	const LLUUID mUUID;	// item id  	LLInventoryType::EType mInvType;  	void purgeItem(LLInventoryModel *model, const LLUUID &uuid);  }; -/** - * This class intended to build Folder View Bridge via LLInvFVBridge::createBridge. - * It can be overridden with another way of creation necessary Inventory-Folder-View-Bridge. - */ +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLInvFVBridge +// +// This class intended to build Folder View Bridge via LLInvFVBridge::createBridge. +// It can be overridden with another way of creation necessary Inventory-Folder-View-Bridge. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  class LLInventoryFVBridgeBuilder  {  public: - 	virtual ~LLInventoryFVBridgeBuilder(){} + 	virtual ~LLInventoryFVBridgeBuilder() {}  	virtual LLInvFVBridge* createBridge(LLAssetType::EType asset_type,  										LLAssetType::EType actual_asset_type,  										LLInventoryType::EType inv_type,  										LLInventoryPanel* inventory, +										LLFolderView* root,  										const LLUUID& uuid,  										U32 flags = 0x00) const;  }; +// Used by LLItemBridge::getIcon +enum EInventoryIcon +{ +	TEXTURE_ICON_NAME, +	SOUND_ICON_NAME, +	CALLINGCARD_ONLINE_ICON_NAME, +	CALLINGCARD_OFFLINE_ICON_NAME, +	LANDMARK_ICON_NAME, +	LANDMARK_VISITED_ICON_NAME, +	SCRIPT_ICON_NAME, +	CLOTHING_ICON_NAME, +	OBJECT_ICON_NAME, +	OBJECT_MULTI_ICON_NAME, +	NOTECARD_ICON_NAME, +	BODYPART_ICON_NAME, +	SNAPSHOT_ICON_NAME, + +	BODYPART_SHAPE_ICON_NAME, +	BODYPART_SKIN_ICON_NAME, +	BODYPART_HAIR_ICON_NAME, +	BODYPART_EYES_ICON_NAME, +	CLOTHING_SHIRT_ICON_NAME, +	CLOTHING_PANTS_ICON_NAME, +	CLOTHING_SHOES_ICON_NAME, +	CLOTHING_SOCKS_ICON_NAME, +	CLOTHING_JACKET_ICON_NAME, +	CLOTHING_GLOVES_ICON_NAME, +	CLOTHING_UNDERSHIRT_ICON_NAME, +	CLOTHING_UNDERPANTS_ICON_NAME, +	CLOTHING_SKIRT_ICON_NAME, +	CLOTHING_ALPHA_ICON_NAME, +	CLOTHING_TATTOO_ICON_NAME, +	 +	ANIMATION_ICON_NAME, +	GESTURE_ICON_NAME, + +	LINKITEM_ICON_NAME, +	LINKFOLDER_ICON_NAME, + +	ICON_NAME_COUNT +}; +extern std::string ICON_NAME[ICON_NAME_COUNT];  class LLItemBridge : public LLInvFVBridge  {  public: -	LLItemBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : -		LLInvFVBridge(inventory, uuid) {} +	LLItemBridge(LLInventoryPanel* inventory,  +				 LLFolderView* root, +				 const LLUUID& uuid) : +		LLInvFVBridge(inventory, root, uuid) {} -	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); +	virtual void performAction(LLInventoryModel* model, std::string action);  	virtual void selectItem();  	virtual void restoreItem();  	virtual void restoreToWorld(); -	virtual void gotoItem(LLFolderView *folder); +	virtual void gotoItem();  	virtual LLUIImagePtr getIcon() const;  	virtual const std::string& getDisplayName() const;  	virtual std::string getLabelSuffix() const; @@ -283,7 +267,6 @@ protected:  	mutable std::string mDisplayName;  }; -  class LLFolderBridge : public LLInvFVBridge  {  	friend class LLInvFVBridge; @@ -292,7 +275,7 @@ public:  							BOOL drop);  	BOOL dragCategoryIntoFolder(LLInventoryCategory* inv_category,  								BOOL drop); -	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); +	virtual void performAction(LLInventoryModel* model, std::string action);  	virtual void openItem();  	virtual void closeItem();  	virtual BOOL isItemRenameable() const; @@ -332,9 +315,10 @@ public:  	LLViewerInventoryCategory* getCategory() const;  protected: -	LLFolderBridge(LLInventoryPanel* inventory, const LLUUID& uuid) -		: LLInvFVBridge(inventory, uuid), - +	LLFolderBridge(LLInventoryPanel* inventory,  +				   LLFolderView* root, +				   const LLUUID& uuid) : +		LLInvFVBridge(inventory, root, uuid),  		mCallingCards(FALSE),  		mWearables(FALSE),  		mMenu(NULL) {} @@ -383,11 +367,12 @@ public:  	LLUIImagePtr getIcon() const;  protected: -	LLScriptBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) : -		LLItemBridge(inventory, uuid) {} +	LLScriptBridge(LLInventoryPanel* inventory,  +				   LLFolderView* root, +				   const LLUUID& uuid ) : +		LLItemBridge(inventory, root, uuid) {}  }; -  class LLTextureBridge : public LLItemBridge  {  	friend class LLInvFVBridge; @@ -395,11 +380,16 @@ public:  	virtual LLUIImagePtr getIcon() const;  	virtual void openItem();  	virtual void buildContextMenu(LLMenuGL& menu, U32 flags); -	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); +	virtual void performAction(LLInventoryModel* model, std::string action);  protected: -	LLTextureBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type) : -		LLItemBridge(inventory, uuid), mInvType(type) {} +	LLTextureBridge(LLInventoryPanel* inventory,  +					LLFolderView* root, +					const LLUUID& uuid,  +					LLInventoryType::EType type) : +		LLItemBridge(inventory, root, uuid), +		mInvType(type)  +	{}  	bool canSaveTexture(void);  	LLInventoryType::EType mInvType;  }; @@ -415,39 +405,30 @@ public:  	static void openSoundPreview(void*);  protected: -	LLSoundBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : -		LLItemBridge(inventory, uuid) {} +	LLSoundBridge(LLInventoryPanel* inventory,  +				  LLFolderView* root, +				  const LLUUID& uuid) : +		LLItemBridge(inventory, root, uuid) {}  };  class LLLandmarkBridge : public LLItemBridge  {  	friend class LLInvFVBridge;  public: -	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); +	virtual void performAction(LLInventoryModel* model, std::string action);  	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);  	virtual LLUIImagePtr getIcon() const;  	virtual void openItem();  protected: -	LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags = 0x00); - +	LLLandmarkBridge(LLInventoryPanel* inventory,  +					 LLFolderView* root, +					 const LLUUID& uuid,  +					 U32 flags = 0x00);  protected:  	BOOL mVisited;  }; -class LLCallingCardBridge; - -class LLCallingCardObserver : public LLFriendObserver -{ -public: -	LLCallingCardObserver(LLCallingCardBridge* bridge) : mBridgep(bridge) {} -	virtual ~LLCallingCardObserver() { mBridgep = NULL; } -	virtual void changed(U32 mask); - -protected: -	LLCallingCardBridge* mBridgep; -}; -  class LLCallingCardBridge : public LLItemBridge  {  	friend class LLInvFVBridge; @@ -455,20 +436,18 @@ public:  	virtual std::string getLabelSuffix() const;  	//virtual const std::string& getDisplayName() const;  	virtual LLUIImagePtr getIcon() const; -	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); +	virtual void performAction(LLInventoryModel* model, std::string action);  	virtual void openItem();  	virtual void buildContextMenu(LLMenuGL& menu, U32 flags); -	//virtual void renameItem(const std::string& new_name); -	//virtual BOOL removeItem();  	virtual BOOL dragOrDrop(MASK mask, BOOL drop,  							EDragAndDropType cargo_type,  							void* cargo_data);  	void refreshFolderViewItem(); -  protected: -	LLCallingCardBridge( LLInventoryPanel* inventory, const LLUUID& uuid ); +	LLCallingCardBridge(LLInventoryPanel* inventory,  +						LLFolderView* folder, +						const LLUUID& uuid );  	~LLCallingCardBridge(); -	  protected:  	LLCallingCardObserver* mObserver;  }; @@ -480,10 +459,11 @@ class LLNotecardBridge : public LLItemBridge  public:  	virtual LLUIImagePtr getIcon() const;  	virtual void openItem(); -  protected: -	LLNotecardBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : -		LLItemBridge(inventory, uuid) {} +	LLNotecardBridge(LLInventoryPanel* inventory,  +					 LLFolderView* root, +					 const LLUUID& uuid) : +		LLItemBridge(inventory, root, uuid) {}  };  class LLGestureBridge : public LLItemBridge @@ -497,7 +477,7 @@ public:  	virtual LLFontGL::StyleFlags getLabelStyle() const;  	virtual std::string getLabelSuffix() const; -	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); +	virtual void performAction(LLInventoryModel* model, std::string action);  	virtual void openItem();  	virtual BOOL removeItem(); @@ -506,33 +486,35 @@ public:  	static void playGesture(const LLUUID& item_id);  protected: -	LLGestureBridge(LLInventoryPanel* inventory, const LLUUID& uuid) -	:	LLItemBridge(inventory, uuid) {} +	LLGestureBridge(LLInventoryPanel* inventory,  +					LLFolderView* root, +					const LLUUID& uuid) +	:	LLItemBridge(inventory, root, uuid) {}  }; -  class LLAnimationBridge : public LLItemBridge  {  	friend class LLInvFVBridge;  public: -	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); +	virtual void performAction(LLInventoryModel* model, std::string action);  	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);  	virtual LLUIImagePtr getIcon() const;  	virtual void openItem();  protected: -	LLAnimationBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : -		LLItemBridge(inventory, uuid) {} +	LLAnimationBridge(LLInventoryPanel* inventory,  +					  LLFolderView* root,  +					  const LLUUID& uuid) : +		LLItemBridge(inventory, root, uuid) {}  }; -  class LLObjectBridge : public LLItemBridge  {  	friend class LLInvFVBridge;  public:  	virtual LLUIImagePtr	getIcon() const; -	virtual void			performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); +	virtual void			performAction(LLInventoryModel* model, std::string action);  	virtual void			openItem();  	virtual LLFontGL::StyleFlags getLabelStyle() const;  	virtual std::string getLabelSuffix() const; @@ -540,10 +522,12 @@ public:  	virtual BOOL renameItem(const std::string& new_name);  	LLInventoryObject* getObject() const; -  protected: -	LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags); - +	LLObjectBridge(LLInventoryPanel* inventory,  +				   LLFolderView* root,  +				   const LLUUID& uuid,  +				   LLInventoryType::EType type,  +				   U32 flags);  protected:  	static LLUUID	sContextMenuItemID;  // Only valid while the context menu is open.  	LLInventoryType::EType mInvType; @@ -551,26 +535,25 @@ protected:  	BOOL mIsMultiObject;  }; -  class LLLSLTextBridge : public LLItemBridge  {  	friend class LLInvFVBridge;  public:  	virtual LLUIImagePtr getIcon() const;  	virtual void openItem(); -  protected: -	LLLSLTextBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) : -		LLItemBridge(inventory, uuid) {} +	LLLSLTextBridge(LLInventoryPanel* inventory,  +					LLFolderView* root,  +					const LLUUID& uuid ) : +		LLItemBridge(inventory, root, uuid) {}  }; -  class LLWearableBridge : public LLItemBridge  {  	friend class LLInvFVBridge;  public:  	virtual LLUIImagePtr getIcon() const; -	virtual void	performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); +	virtual void	performAction(LLInventoryModel* model, std::string action);  	virtual void	openItem();  	virtual void	buildContextMenu(LLMenuGL& menu, U32 flags);  	virtual std::string getLabelSuffix() const; @@ -596,13 +579,12 @@ public:  	void			removeFromAvatar();  protected: -	LLWearableBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLAssetType::EType asset_type, LLInventoryType::EType inv_type, EWearableType  wearable_type) : -		LLItemBridge(inventory, uuid), -		mAssetType( asset_type ), -		mInvType(inv_type), -		mWearableType(wearable_type) -		{} - +	LLWearableBridge(LLInventoryPanel* inventory,  +					 LLFolderView* root,  +					 const LLUUID& uuid,  +					 LLAssetType::EType asset_type,  +					 LLInventoryType::EType inv_type,  +					 EWearableType wearable_type);  protected:  	LLAssetType::EType mAssetType;  	LLInventoryType::EType mInvType; @@ -614,41 +596,38 @@ class LLLinkItemBridge : public LLItemBridge  	friend class LLInvFVBridge;  public:  	virtual const std::string& getPrefix() { return sPrefix; } -  	virtual LLUIImagePtr getIcon() const;  	virtual void buildContextMenu(LLMenuGL& menu, U32 flags); -  protected: -	LLLinkItemBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : -		LLItemBridge(inventory, uuid) {} - +	LLLinkItemBridge(LLInventoryPanel* inventory,  +					 LLFolderView* root, +					 const LLUUID& uuid) : +		LLItemBridge(inventory, root, uuid) {}  protected:  	static std::string sPrefix;  }; -  class LLLinkFolderBridge : public LLItemBridge  {  	friend class LLInvFVBridge;  public:  	virtual const std::string& getPrefix() { return sPrefix; } -  	virtual LLUIImagePtr getIcon() const;  	virtual void buildContextMenu(LLMenuGL& menu, U32 flags); -	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); -	virtual void gotoItem(LLFolderView *folder); - +	virtual void performAction(LLInventoryModel* model, std::string action); +	virtual void gotoItem();  protected: -	LLLinkFolderBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : -		LLItemBridge(inventory, uuid) {} +	LLLinkFolderBridge(LLInventoryPanel* inventory,  +					   LLFolderView* root, +					   const LLUUID& uuid) : +		LLItemBridge(inventory, root, uuid) {}  	const LLUUID &getFolderID() const; -  protected:  	static std::string sPrefix;  };  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLInvFVBridgeAction (& its derived classes) +// Class LLInvFVBridgeAction  //  // This is an implementation class to be able to   // perform action to view inventory items. @@ -658,159 +637,30 @@ class LLInvFVBridgeAction  {  public:  	// This method is a convenience function which creates the correct -	// type of bridge action based on some basic information +	// type of bridge action based on some basic information.  	static LLInvFVBridgeAction* createAction(LLAssetType::EType asset_type, -											 const LLUUID& uuid,LLInventoryModel* model); - +											 const LLUUID& uuid, +											 LLInventoryModel* model);  	static void doAction(LLAssetType::EType asset_type,  						 const LLUUID& uuid, LLInventoryModel* model);  	static void doAction(const LLUUID& uuid, LLInventoryModel* model); -	virtual void doIt() {  }; -	virtual ~LLInvFVBridgeAction(){}//need this because of warning on OSX +	virtual void doIt() {}; +	virtual ~LLInvFVBridgeAction() {} // need this because of warning on OSX  protected: -	LLInvFVBridgeAction(const LLUUID& id,LLInventoryModel* model):mUUID(id),mModel(model){} - +	LLInvFVBridgeAction(const LLUUID& id, LLInventoryModel* model) : +		mUUID(id), mModel(model) {}  	LLViewerInventoryItem* getItem() const;  protected: -	const LLUUID& mUUID;	// item id +	const LLUUID& mUUID; // item id  	LLInventoryModel* mModel; - -}; - - - -class LLTextureBridgeAction: public LLInvFVBridgeAction -{ -	friend class LLInvFVBridgeAction; -public: -	virtual void	doIt() ; -	virtual ~LLTextureBridgeAction(){} -protected: -	LLTextureBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLSoundBridgeAction: public LLInvFVBridgeAction -{ -	friend class LLInvFVBridgeAction; -public: -	virtual void	doIt() ; -	virtual ~LLSoundBridgeAction(){} -protected: -	LLSoundBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLLandmarkBridgeAction: public LLInvFVBridgeAction -{ -	friend class LLInvFVBridgeAction; -public: -	virtual void	doIt() ; -	virtual ~LLLandmarkBridgeAction(){} -protected: -	LLLandmarkBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLCallingCardBridgeAction: public LLInvFVBridgeAction -{ -	friend class LLInvFVBridgeAction; -public: -	virtual void	doIt() ; -	virtual ~LLCallingCardBridgeAction(){} -protected: -	LLCallingCardBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLNotecardBridgeAction: public LLInvFVBridgeAction -{ -	friend class LLInvFVBridgeAction; -public: -	virtual void	doIt() ; -	virtual ~LLNotecardBridgeAction(){} -protected: -	LLNotecardBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLGestureBridgeAction: public LLInvFVBridgeAction -{ -	friend class LLInvFVBridgeAction; -public: -	virtual void	doIt() ; -	virtual ~LLGestureBridgeAction(){} -protected: -	LLGestureBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLAnimationBridgeAction: public LLInvFVBridgeAction -{ -	friend class LLInvFVBridgeAction; -public: -	virtual void	doIt() ; -	virtual ~LLAnimationBridgeAction(){} -protected: -	LLAnimationBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLObjectBridgeAction: public LLInvFVBridgeAction -{ -	friend class LLInvFVBridgeAction; -public: -	virtual void	doIt() ; -	virtual ~LLObjectBridgeAction(){} -protected: -	LLObjectBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} -  }; -class LLLSLTextBridgeAction: public LLInvFVBridgeAction -{ -	friend class LLInvFVBridgeAction; -public: -	virtual void	doIt() ; -	virtual ~LLLSLTextBridgeAction(){} -protected: -	LLLSLTextBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLWearableBridgeAction: public LLInvFVBridgeAction -{ -	friend class LLInvFVBridgeAction; -public: -	virtual void	doIt(); -	virtual ~LLWearableBridgeAction(){} -protected: -	LLWearableBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - - -	BOOL isItemInTrash() const; -	// return true if the item is in agent inventory. if false, it -	// must be lost or in the inventory library. -	BOOL isAgentInventory() const; - -	void wearOnAvatar(); - -}; -  void wear_inventory_item_on_avatar(LLInventoryItem* item); -class LLViewerJointAttachment; -void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment); +void rez_attachment(LLViewerInventoryItem* item,  +					LLViewerJointAttachment* attachment);  // Move items from an in-world object's "Contents" folder to a specified  // folder in agent inventory. @@ -820,13 +670,9 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,  									  void (*callback)(S32, void*) = NULL,  									  void* user_data = NULL); - - -void teleport_via_landmark(const LLUUID& asset_id); -  // Utility function to hide all entries except those in the list  void hide_context_entries(LLMenuGL& menu,  -		const menuentry_vec_t &entries_to_show,  -		const menuentry_vec_t &disabled_entries); +						  const menuentry_vec_t &entries_to_show,  +						  const menuentry_vec_t &disabled_entries);  #endif // LL_LLINVENTORYBRIDGE_H diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index eb33763670..e3cd988e39 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -52,7 +52,6 @@  // and override the () operator to return TRUE if you want to collect  // the category or item passed in.  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -  class LLInventoryCollectFunctor  {  public: @@ -62,7 +61,6 @@ public:  	static bool itemTransferCommonlyAllowed(LLInventoryItem* item);  }; -  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  // Class LLAssetIDMatches  // @@ -116,14 +114,12 @@ protected:  	LLAssetType::EType mType;  }; -  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  // Class LLIsNotType  //  // Implementation of a LLInventoryCollectFunctor which returns FALSE if the  // type is the type passed in during construction, otherwise false.  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -  class LLIsNotType : public LLInventoryCollectFunctor  {  public: @@ -156,7 +152,6 @@ protected:  // Simple class that collects calling cards that are not null, and not  // the agent. Duplicates are possible.  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -  class LLBuddyCollector : public LLInventoryCollectFunctor  {  public: @@ -172,7 +167,6 @@ public:  // Simple class that collects calling cards that are not null, and not  // the agent. Duplicates are discarded.  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -  class LLUniqueBuddyCollector : public LLInventoryCollectFunctor  {  public: @@ -202,13 +196,11 @@ protected:  	LLUUID mBuddyID;  }; -  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  // Class LLNameCategoryCollector  //  // Collects categories based on case-insensitive match of prefix  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -  class LLNameCategoryCollector : public LLInventoryCollectFunctor  {  public: @@ -270,7 +262,7 @@ public:  	virtual void doItem(LLFolderViewItem* item);  	BOOL wasItemSelected() { return mItemSelected; }  protected: -	BOOL	mItemSelected; +	BOOL mItemSelected;  };  class LLOpenFilteredFolders : public LLFolderViewFunctor diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 83c2d62ee8..c6c2d23a4b 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -80,7 +80,7 @@ protected:  LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :	  	LLPanel(p),  	mInventoryObserver(NULL), -	mFolders(NULL), +	mFolderRoot(NULL),  	mScroller(NULL),  	mSortOrderSetting(p.sort_order_setting),  	mInventory(p.inventory), @@ -124,13 +124,13 @@ BOOL LLInventoryPanel::postBuild()  		p.rect = folder_rect;  		p.parent_panel = this;  		p.tool_tip = p.name; -		mFolders = LLUICtrlFactory::create<LLFolderView>(p); -		mFolders->setAllowMultiSelect(mAllowMultiSelect); +		mFolderRoot = LLUICtrlFactory::create<LLFolderView>(p); +		mFolderRoot->setAllowMultiSelect(mAllowMultiSelect);  	}  	mCommitCallbackRegistrar.popScope(); -	mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar); +	mFolderRoot->setCallbackRegistrar(&mCommitCallbackRegistrar);  	// Scroller  	{ @@ -144,9 +144,9 @@ BOOL LLInventoryPanel::postBuild()  		p.tab_stop(true);  		mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);  		addChild(mScroller); -		mScroller->addChild(mFolders); -		mFolders->setScrollContainer(mScroller); -		mFolders->addChild(mFolders->mStatusTextBox); +		mScroller->addChild(mFolderRoot); +		mFolderRoot->setScrollContainer(mScroller); +		mFolderRoot->addChild(mFolderRoot->mStatusTextBox);  	}  	// Set up the callbacks from the inventory we're viewing, and then build everything. @@ -169,16 +169,16 @@ BOOL LLInventoryPanel::postBuild()  	{  		setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER));  	} -	mFolders->setSortOrder(getFilter()->getSortOrder()); +	mFolderRoot->setSortOrder(getFilter()->getSortOrder());  	return TRUE;  }  LLInventoryPanel::~LLInventoryPanel()  { -	if (mFolders) +	if (mFolderRoot)  	{ -		U32 sort_order = mFolders->getSortOrder(); +		U32 sort_order = mFolderRoot->getSortOrder();  		if (mSortOrderSetting != INHERIT_SORT_ORDER)  		{  			gSavedSettings.setU32(mSortOrderSetting, sort_order); @@ -194,15 +194,15 @@ LLInventoryPanel::~LLInventoryPanel()  void LLInventoryPanel::draw()  {  	// Select the desired item (in case it wasn't loaded when the selection was requested) -	mFolders->updateSelection(); +	mFolderRoot->updateSelection();  	LLPanel::draw();  }  LLInventoryFilter* LLInventoryPanel::getFilter()  { -	if (mFolders)  +	if (mFolderRoot)   	{ -		return mFolders->getFilter(); +		return mFolderRoot->getFilter();  	}  	return NULL;  } @@ -230,9 +230,9 @@ void LLInventoryPanel::setSortOrder(U32 order)  	getFilter()->setSortOrder(order);  	if (getFilter()->isModified())  	{ -		mFolders->setSortOrder(order); +		mFolderRoot->setSortOrder(order);  		// try to keep selection onscreen, even if it wasn't to start with -		mFolders->scrollToShowSelection(); +		mFolderRoot->scrollToShowSelection();  	}  } @@ -277,8 +277,8 @@ void LLInventoryPanel::modelChanged(U32 mask)  	{  		const LLUUID& item_id = (*items_iter);  		const LLInventoryObject* model_item = model->getObject(item_id); -		LLFolderViewItem* view_item = mFolders->getItemByID(item_id); -		LLFolderViewFolder* view_folder = mFolders->getFolderByID(item_id); +		LLFolderViewItem* view_item = mFolderRoot->getItemByID(item_id); +		LLFolderViewFolder* view_folder = mFolderRoot->getFolderByID(item_id);  		//////////////////////////////  		// LABEL Operation @@ -353,7 +353,7 @@ void LLInventoryPanel::modelChanged(U32 mask)  				// Add the UI element for this item.  				buildNewViews(item_id);  				// Select any newly created object that has the auto rename at top of folder root set. -				if(mFolders->getRoot()->needsAutoRename()) +				if(mFolderRoot->getRoot()->needsAutoRename())  				{  					setSelection(item_id, FALSE);  				} @@ -368,7 +368,7 @@ void LLInventoryPanel::modelChanged(U32 mask)  				// model_item's parent will be NULL.  				if (view_item->getRoot() != view_item->getParent())  				{ -					LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID()); +					LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolderRoot->getItemByID(model_item->getParentUUID());  					// Item has been moved.  					if (view_item->getParentFolder() != new_parent)  					{ @@ -376,7 +376,7 @@ void LLInventoryPanel::modelChanged(U32 mask)  						{  							// Item is to be moved and we found its new parent in the panel's directory, so move the item's UI.  							view_item->getParentFolder()->extractItem(view_item); -							view_item->addToFolder(new_parent, mFolders); +							view_item->addToFolder(new_parent, mFolderRoot);  						}  						else   						{ @@ -444,14 +444,14 @@ void LLInventoryPanel::initializeViews()  	if (gAgent.isFirstLogin())  	{  		// Auto open the user's library -		LLFolderViewFolder* lib_folder = mFolders->getFolderByID(gInventory.getLibraryRootFolderID()); +		LLFolderViewFolder* lib_folder = mFolderRoot->getFolderByID(gInventory.getLibraryRootFolderID());  		if (lib_folder)  		{  			lib_folder->setOpen(TRUE);  		}  		// Auto close the user's my inventory folder -		LLFolderViewFolder* my_inv_folder = mFolders->getFolderByID(gInventory.getRootFolderID()); +		LLFolderViewFolder* my_inv_folder = mFolderRoot->getFolderByID(gInventory.getRootFolderID());  		if (my_inv_folder)  		{  			my_inv_folder->setOpenArrangeRecursively(FALSE, LLFolderViewFolder::RECURSE_DOWN); @@ -462,7 +462,7 @@ void LLInventoryPanel::initializeViews()  void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)  {  	// Destroy the old view for this ID so we can rebuild it. -	LLFolderViewItem* old_view = mFolders->getItemByID(id); +	LLFolderViewItem* old_view = mFolderRoot->getItemByID(id);  	if (old_view && id.notNull())  	{  		old_view->destroyView(); @@ -479,10 +479,10 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)  	if (objectp)  	{  		const LLUUID &parent_id = objectp->getParentUUID(); -		LLFolderViewFolder* parent_folder = (LLFolderViewFolder*)mFolders->getItemByID(parent_id); +		LLFolderViewFolder* parent_folder = (LLFolderViewFolder*)mFolderRoot->getItemByID(parent_id);  		if (id == mStartFolderID)  		{ -			parent_folder = mFolders; +			parent_folder = mFolderRoot;  		}  		else if ((mStartFolderID != LLUUID::null) && (!gInventory.isObjectDescendentOf(id, mStartFolderID)))  		{ @@ -506,19 +506,19 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)  																			objectp->getType(),  																			LLInventoryType::IT_CATEGORY,  																			this, +																			mFolderRoot,  																			objectp->getUUID()); -			  			if (new_listener)  			{  				LLFolderViewFolder::Params params;  				params.name = new_listener->getDisplayName();  				params.icon = new_listener->getIcon();  				params.icon_open = new_listener->getOpenIcon(); -				params.root = mFolders; +				params.root = mFolderRoot;  				params.listener = new_listener;  				params.tool_tip = params.name;  				LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(params); -				folderp->setItemSortOrder(mFolders->getSortOrder()); +				folderp->setItemSortOrder(mFolderRoot->getSortOrder());  				itemp = folderp;  				// Hide the root folder, so we can show the contents of a folder flat @@ -542,6 +542,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)  																			item->getActualType(),  																			item->getInventoryType(),  																			this, +																			mFolderRoot,  																			item->getUUID(),  																			item->getFlags()); @@ -552,7 +553,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)  				params.icon = new_listener->getIcon();  				params.icon_open = new_listener->getOpenIcon();  				params.creation_date = new_listener->getCreationDate(); -				params.root = mFolders; +				params.root = mFolderRoot;  				params.listener = new_listener;  				params.rect = LLRect (0, 0, 0, 0);  				params.tool_tip = params.name; @@ -562,7 +563,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)  		if (itemp)  		{ -			itemp->addToFolder(parent_folder, mFolders); +			itemp->addToFolder(parent_folder, mFolderRoot);  			// Don't add children of hidden folders unless this is the panel's root folder.  			if (itemp->getHidden() && (id != mStartFolderID)) @@ -611,19 +612,19 @@ void LLInventoryPanel::openStartFolderOrMyInventory()  {  	if (mStartFolderString != "")  	{ -		mFolders->openFolder(mStartFolderString); +		mFolderRoot->openFolder(mStartFolderString);  	}  	else  	{  		// Find My Inventory folder and open it up by name -		for (LLView *child = mFolders->getFirstChild(); child; child = mFolders->findNextSibling(child)) +		for (LLView *child = mFolderRoot->getFirstChild(); child; child = mFolderRoot->findNextSibling(child))  		{  			LLFolderViewFolder *fchild = dynamic_cast<LLFolderViewFolder*>(child);  			if (fchild && fchild->getListener() &&  				(fchild->getListener()->getUUID() == gInventory.getRootFolderID()))  			{  				const std::string& child_name = child->getName(); -				mFolders->openFolder(child_name); +				mFolderRoot->openFolder(child_name);  				break;  			}  		} @@ -632,7 +633,7 @@ void LLInventoryPanel::openStartFolderOrMyInventory()  void LLInventoryPanel::openSelected()  { -	LLFolderViewItem* folder_item = mFolders->getCurSelectedItem(); +	LLFolderViewItem* folder_item = mFolderRoot->getCurSelectedItem();  	if(!folder_item) return;  	LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();  	if(!bridge) return; @@ -668,14 +669,14 @@ BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  	// If folder view is empty the (x, y) point won't be in its rect  	// so the handler must be called explicitly. -	if (!mFolders->hasVisibleChildren()) +	if (!mFolderRoot->hasVisibleChildren())  	{ -		handled = mFolders->handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); +		handled = mFolderRoot->handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);  	}  	if (handled)  	{ -		mFolders->setDragAndDropThisFrame(); +		mFolderRoot->setDragAndDropThisFrame();  	}  	return handled; @@ -686,20 +687,20 @@ void LLInventoryPanel::onMouseEnter(S32 x, S32 y, MASK mask)  {  	LLPanel::onMouseEnter(x, y, mask);  	// don't auto-scroll a list when cursor is over Inventory. See EXT-3981. -	mFolders->setEnableScroll(false); +	mFolderRoot->setEnableScroll(false);  }  // virtual  void LLInventoryPanel::onMouseLeave(S32 x, S32 y, MASK mask)  {  	LLPanel::onMouseLeave(x, y, mask); -	mFolders->setEnableScroll(true); +	mFolderRoot->setEnableScroll(true);  }  void LLInventoryPanel::onFocusLost()  {  	// inventory no longer handles cut/copy/paste/delete -	if (LLEditMenuHandler::gEditMenuHandler == mFolders) +	if (LLEditMenuHandler::gEditMenuHandler == mFolderRoot)  	{  		LLEditMenuHandler::gEditMenuHandler = NULL;  	} @@ -710,15 +711,15 @@ void LLInventoryPanel::onFocusLost()  void LLInventoryPanel::onFocusReceived()  {  	// inventory now handles cut/copy/paste/delete -	LLEditMenuHandler::gEditMenuHandler = mFolders; +	LLEditMenuHandler::gEditMenuHandler = mFolderRoot;  	LLPanel::onFocusReceived();  }  void LLInventoryPanel::openAllFolders()  { -	mFolders->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN); -	mFolders->arrangeAll(); +	mFolderRoot->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN); +	mFolderRoot->arrangeAll();  }  void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus) @@ -729,20 +730,20 @@ void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_foc  	{  		return;  	} -	mFolders->setSelectionByID(obj_id, take_keyboard_focus); +	mFolderRoot->setSelectionByID(obj_id, take_keyboard_focus);  }  void LLInventoryPanel::setSelectCallback(const LLFolderView::signal_t::slot_type& cb)   {  -	if (mFolders)  +	if (mFolderRoot)   	{ -		mFolders->setSelectCallback(cb); +		mFolderRoot->setSelectCallback(cb);  	}  }  void LLInventoryPanel::clearSelection()  { -	mFolders->clearSelection(); +	mFolderRoot->clearSelection();  }  void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& items, BOOL user_action) @@ -761,18 +762,18 @@ void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& it  void LLInventoryPanel::doToSelected(const LLSD& userdata)  { -	mFolders->doToSelected(&gInventory, userdata); +	mFolderRoot->doToSelected(&gInventory, userdata);  }  void LLInventoryPanel::doCreate(const LLSD& userdata)  { -	menu_create_inventory_item(mFolders, LLFolderBridge::sSelf, userdata); +	menu_create_inventory_item(mFolderRoot, LLFolderBridge::sSelf, userdata);  }  bool LLInventoryPanel::beginIMSession()  {  	std::set<LLUUID> selected_items; -	mFolders->getSelectionList(selected_items); +	mFolderRoot->getSelectionList(selected_items);  	std::string name;  	static int session_num = 1; @@ -785,7 +786,7 @@ bool LLInventoryPanel::beginIMSession()  	{  		LLUUID item = *iter; -		LLFolderViewItem* folder_item = mFolders->getItemByID(item); +		LLFolderViewItem* folder_item = mFolderRoot->getItemByID(item);  		if(folder_item)   		{ @@ -827,7 +828,7 @@ bool LLInventoryPanel::beginIMSession()  			}  			else  			{ -				LLFolderViewItem* folder_item = mFolders->getItemByID(item); +				LLFolderViewItem* folder_item = mFolderRoot->getItemByID(item);  				if(!folder_item) return true;  				LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getListener(); @@ -870,7 +871,7 @@ bool LLInventoryPanel::beginIMSession()  bool LLInventoryPanel::attachObject(const LLSD& userdata)  {  	std::set<LLUUID> selected_items; -	mFolders->getSelectionList(selected_items); +	mFolderRoot->getSelectionList(selected_items);  	std::string joint_name = userdata.asString();  	LLViewerJointAttachment* attachmentp = NULL; @@ -927,7 +928,7 @@ BOOL LLInventoryPanel::getSinceLogoff()  void LLInventoryPanel::dumpSelectionInformation(void* user_data)  {  	LLInventoryPanel* iv = (LLInventoryPanel*)user_data; -	iv->mFolders->dumpSelectionInformation(); +	iv->mFolderRoot->dumpSelectionInformation();  }  BOOL is_inventorysp_active() diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 928a458b84..160a3d6f23 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -133,21 +133,21 @@ public:  	void clearSelection();  	LLInventoryFilter* getFilter();  	void setFilterTypes(U64 filter, LLInventoryFilter::EFilterType = LLInventoryFilter::FILTERTYPE_OBJECT); -	U32 getFilterObjectTypes() const { return mFolders->getFilterObjectTypes(); } +	U32 getFilterObjectTypes() const { return mFolderRoot->getFilterObjectTypes(); }  	void setFilterPermMask(PermissionMask filter_perm_mask); -	U32 getFilterPermMask() const { return mFolders->getFilterPermissions(); } +	U32 getFilterPermMask() const { return mFolderRoot->getFilterPermissions(); }  	void setFilterSubString(const std::string& string); -	const std::string getFilterSubString() { return mFolders->getFilterSubString(); } +	const std::string getFilterSubString() { return mFolderRoot->getFilterSubString(); }  	void setSinceLogoff(BOOL sl);  	void setHoursAgo(U32 hours);  	BOOL getSinceLogoff();  	void setShowFolderState(LLInventoryFilter::EFolderShow show);  	LLInventoryFilter::EFolderShow getShowFolderState(); -	void setAllowMultiSelect(BOOL allow) { mFolders->setAllowMultiSelect(allow); } +	void setAllowMultiSelect(BOOL allow) { mFolderRoot->setAllowMultiSelect(allow); }  	// This method is called when something has changed about the inventory.  	void modelChanged(U32 mask); -	LLFolderView* getRootFolder() { return mFolders; } +	LLFolderView* getRootFolder() { return mFolderRoot; }  	LLScrollContainer* getScrollableContainer() { return mScroller; }  	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action); @@ -162,7 +162,7 @@ public:  	static void dumpSelectionInformation(void* user_data);  	void openSelected(); -	void unSelectAll()	{ mFolders->setSelection(NULL, FALSE, FALSE); } +	void unSelectAll()	{ mFolderRoot->setSelection(NULL, FALSE, FALSE); }  	static void onIdle(void* user_data); @@ -177,7 +177,7 @@ protected:  	LLInventoryObserver*		mInventoryObserver;  	BOOL 						mAllowMultiSelect; -	LLFolderView*				mFolders; +	LLFolderView*				mFolderRoot;  	LLScrollContainer*			mScroller;  	/** @@ -199,7 +199,7 @@ public:  	static const std::string INHERIT_SORT_ORDER;  	void setSortOrder(U32 order); -	U32 getSortOrder() const { return mFolders->getSortOrder(); } +	U32 getSortOrder() const { return mFolderRoot->getSortOrder(); }  private:  	std::string					mSortOrderSetting; diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index c7793bbc43..8d8c996374 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -435,9 +435,9 @@ LLFolderViewItem* LLLandmarksPanel::selectItemInAccordionTab(LLPlacesInventoryPa  	if (!inventory_list)  		return NULL; -	LLFolderView* folder_view = inventory_list->getRootFolder(); +	LLFolderView* root = inventory_list->getRootFolder(); -	LLFolderViewItem* item = folder_view->getItemByID(obj_id); +	LLFolderViewItem* item = root->getItemByID(obj_id);  	if (!item)  		return NULL; @@ -447,7 +447,7 @@ LLFolderViewItem* LLLandmarksPanel::selectItemInAccordionTab(LLPlacesInventoryPa  		tab->changeOpenClose(false);  	} -	folder_view->setSelection(item, FALSE, take_keyboard_focus); +	root->setSelection(item, FALSE, take_keyboard_focus);  	LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion");  	LLRect screen_rc; @@ -983,7 +983,7 @@ void LLLandmarksPanel::onCustomAction(const LLSD& userdata)  	std::string command_name = userdata.asString();  	if("more_info" == command_name)  	{ -		cur_item->getListener()->performAction(mCurrentSelectedList->getRootFolder(),mCurrentSelectedList->getModel(),"about"); +		cur_item->getListener()->performAction(mCurrentSelectedList->getModel(),"about");  	}  	else if ("teleport" == command_name)  	{ diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index dbc40959d7..8be4c8402c 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -1044,7 +1044,7 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)  		{  			return;  		} -		current_item->getListener()->performAction(getActivePanel()->getRootFolder(), getActivePanel()->getModel(), "goto"); +		current_item->getListener()->performAction(getActivePanel()->getModel(), "goto");  	}  	if (command_name == "find_links") @@ -1089,19 +1089,19 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)  	if (command_name == "delete")  	{  		BOOL can_delete = FALSE; -		LLFolderView *folder = getActivePanel()->getRootFolder(); -		if (folder) +		LLFolderView* root = getActivePanel()->getRootFolder(); +		if (root)  		{  			can_delete = TRUE;  			std::set<LLUUID> selection_set; -			folder->getSelectionList(selection_set); +			root->getSelectionList(selection_set);  			if (selection_set.empty()) return FALSE;  			for (std::set<LLUUID>::iterator iter = selection_set.begin();  				 iter != selection_set.end();  				 ++iter)  			{  				const LLUUID &item_id = (*iter); -				LLFolderViewItem *item = folder->getItemByID(item_id); +				LLFolderViewItem *item = root->getItemByID(item_id);  				const LLFolderViewEventListener *listener = item->getListener();  				llassert(listener);  				if (!listener) return FALSE; diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index c43cbf5819..f70a06cde9 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -128,7 +128,7 @@ public:  	virtual void pasteFromClipboard();  	virtual void pasteLinkFromClipboard();  	virtual void buildContextMenu(LLMenuGL& menu, U32 flags); -	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); +	virtual void performAction(LLInventoryModel* model, std::string action);  	virtual BOOL isUpToDate() const { return TRUE; }  	virtual BOOL hasChildren() const { return FALSE; }  	virtual LLInventoryType::EType getInventoryType() const { return LLInventoryType::IT_NONE; } @@ -595,7 +595,7 @@ BOOL LLTaskInvFVBridge::dragOrDrop(MASK mask, BOOL drop,  }  // virtual -void LLTaskInvFVBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLTaskInvFVBridge::performAction(LLInventoryModel* model, std::string action)  {  	if (action == "task_buy")  	{ @@ -917,7 +917,7 @@ public:  	virtual LLUIImagePtr getIcon() const;  	virtual void openItem(); -	virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); +	virtual void performAction(LLInventoryModel* model, std::string action);  	virtual void buildContextMenu(LLMenuGL& menu, U32 flags);  	static void openSoundPreview(void* data);  }; @@ -954,7 +954,7 @@ void LLTaskSoundBridge::openSoundPreview(void* data)  }  // virtual -void LLTaskSoundBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLTaskSoundBridge::performAction(LLInventoryModel* model, std::string action)  {  	if (action == "task_play")  	{ @@ -964,7 +964,7 @@ void LLTaskSoundBridge::performAction(LLFolderView* folder, LLInventoryModel* mo  			send_sound_trigger(item->getAssetUUID(), 1.0);  		}  	} -	LLTaskInvFVBridge::performAction(folder, model, action); +	LLTaskInvFVBridge::performAction(model, action);  }  void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags) diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index 7137022447..7f17dc5f67 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -181,7 +181,7 @@ void LLPanelOutfitsInventory::onWearButtonClick()  	LLFolderViewEventListener* listenerp = getCorrectListenerForAction();  	if (listenerp)  	{ -		listenerp->performAction(NULL, NULL,"replaceoutfit"); +		listenerp->performAction(NULL, "replaceoutfit");  	}  } @@ -190,7 +190,7 @@ void LLPanelOutfitsInventory::onAdd()  	LLFolderViewEventListener* listenerp = getCorrectListenerForAction();  	if (listenerp)  	{ -		listenerp->performAction(NULL, NULL,"addtooutfit"); +		listenerp->performAction(NULL, "addtooutfit");  	}  } @@ -199,7 +199,7 @@ void LLPanelOutfitsInventory::onRemove()  	LLFolderViewEventListener* listenerp = getCorrectListenerForAction();  	if (listenerp)  	{ -		listenerp->performAction(NULL, NULL,"removefromoutfit"); +		listenerp->performAction(NULL, "removefromoutfit");  	}  } @@ -443,18 +443,18 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)  	if (command_name == "delete" || command_name == "remove")  	{  		BOOL can_delete = FALSE; -		LLFolderView *folder = getActivePanel()->getRootFolder(); -		if (folder) +		LLFolderView* root = getActivePanel()->getRootFolder(); +		if (root)  		{  			std::set<LLUUID> selection_set; -			folder->getSelectionList(selection_set); +			root->getSelectionList(selection_set);  			can_delete = (selection_set.size() > 0);  			for (std::set<LLUUID>::iterator iter = selection_set.begin();  				 iter != selection_set.end();  				 ++iter)  			{  				const LLUUID &item_id = (*iter); -				LLFolderViewItem *item = folder->getItemByID(item_id); +				LLFolderViewItem *item = root->getItemByID(item_id);  				can_delete &= item->getListener()->isItemRemovable();  			}  			return can_delete; @@ -464,11 +464,11 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)  	if (command_name == "remove_link")  	{  		BOOL can_delete = FALSE; -		LLFolderView *folder = getActivePanel()->getRootFolder(); -		if (folder) +		LLFolderView* root = getActivePanel()->getRootFolder(); +		if (root)  		{  			std::set<LLUUID> selection_set; -			folder->getSelectionList(selection_set); +			root->getSelectionList(selection_set);  			can_delete = (selection_set.size() > 0);  			for (std::set<LLUUID>::iterator iter = selection_set.begin();  				 iter != selection_set.end(); @@ -513,11 +513,11 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)  bool LLPanelOutfitsInventory::hasItemsSelected()  {  	bool has_items_selected = false; -	LLFolderView *folder = getActivePanel()->getRootFolder(); -	if (folder) +	LLFolderView* root = getActivePanel()->getRootFolder(); +	if (root)  	{  		std::set<LLUUID> selection_set; -		folder->getSelectionList(selection_set); +		root->getSelectionList(selection_set);  		has_items_selected = (selection_set.size() > 0);  	}  	return has_items_selected; diff --git a/indra/newview/llplacesinventorybridge.cpp b/indra/newview/llplacesinventorybridge.cpp index 4fe69f295c..f59a55cb8b 100644 --- a/indra/newview/llplacesinventorybridge.cpp +++ b/indra/newview/llplacesinventorybridge.cpp @@ -122,7 +122,7 @@ void LLPlacesFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  }  //virtual -void LLPlacesFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLPlacesFolderBridge::performAction(LLInventoryModel* model, std::string action)  {  	if ("expand" == action)  	{ @@ -136,7 +136,7 @@ void LLPlacesFolderBridge::performAction(LLFolderView* folder, LLInventoryModel*  	}  	else  	{ -		LLFolderBridge::performAction(folder, model, action); +		LLFolderBridge::performAction(model, action);  	}  } @@ -158,6 +158,7 @@ LLInvFVBridge* LLPlacesInventoryBridgeBuilder::createBridge(  	LLAssetType::EType actual_asset_type,  	LLInventoryType::EType inv_type,  	LLInventoryPanel* inventory, +	LLFolderView* root,  	const LLUUID& uuid,  	U32 flags/* = 0x00*/) const  { @@ -167,9 +168,9 @@ LLInvFVBridge* LLPlacesInventoryBridgeBuilder::createBridge(  	case LLAssetType::AT_LANDMARK:  		if(!(inv_type == LLInventoryType::IT_LANDMARK))  		{ -			llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; +			llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl;  		} -		new_listener = new LLPlacesLandmarkBridge(inv_type, inventory, uuid, flags); +		new_listener = new LLPlacesLandmarkBridge(inv_type, inventory, root, uuid, flags);  		break;  	case LLAssetType::AT_CATEGORY:  		if (actual_asset_type == LLAssetType::AT_LINK_FOLDER) @@ -180,11 +181,12 @@ LLInvFVBridge* LLPlacesInventoryBridgeBuilder::createBridge(  				actual_asset_type,  				inv_type,  				inventory, +				root,  				uuid,  				flags);  			break;  		} -		new_listener = new LLPlacesFolderBridge(inv_type, inventory, uuid); +		new_listener = new LLPlacesFolderBridge(inv_type, inventory, root, uuid);  		break;  	default:  		new_listener = LLInventoryFVBridgeBuilder::createBridge( @@ -192,6 +194,7 @@ LLInvFVBridge* LLPlacesInventoryBridgeBuilder::createBridge(  			actual_asset_type,  			inv_type,  			inventory, +			root,  			uuid,  			flags);  	} diff --git a/indra/newview/llplacesinventorybridge.h b/indra/newview/llplacesinventorybridge.h index 66a8e8e54d..7e5170cc33 100644 --- a/indra/newview/llplacesinventorybridge.h +++ b/indra/newview/llplacesinventorybridge.h @@ -48,8 +48,15 @@ public:  	/*virtual*/ void buildContextMenu(LLMenuGL& menu, U32 flags);  protected: -	LLPlacesLandmarkBridge(LLInventoryType::EType type, LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags = 0x00) -		: LLLandmarkBridge(inventory, uuid, flags) {mInvType = type;} +	LLPlacesLandmarkBridge(LLInventoryType::EType type,  +						   LLInventoryPanel* inventory, +						   LLFolderView* root, +						   const LLUUID& uuid,  +						   U32 flags = 0x00) : +		LLLandmarkBridge(inventory, root, uuid, flags) +	{ +		mInvType = type; +	}  };  /** @@ -61,12 +68,17 @@ class LLPlacesFolderBridge : public LLFolderBridge  public:  	/*virtual*/ void buildContextMenu(LLMenuGL& menu, U32 flags); -	/*virtual*/ void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); +	/*virtual*/ void performAction(LLInventoryModel* model, std::string action);  protected: -	LLPlacesFolderBridge(LLInventoryType::EType type, LLInventoryPanel* inventory, const LLUUID& uuid) -		: LLFolderBridge(inventory, uuid) {mInvType = type;} - +	LLPlacesFolderBridge(LLInventoryType::EType type,  +						 LLInventoryPanel* inventory, +						 LLFolderView* root,						  +						 const LLUUID& uuid) : +		LLFolderBridge(inventory, root, uuid) +	{ +		mInvType = type; +	}  	LLFolderViewFolder* getFolder();  }; @@ -79,13 +91,13 @@ protected:  class LLPlacesInventoryBridgeBuilder : public LLInventoryFVBridgeBuilder  {  public: -	/*virtual*/ LLInvFVBridge* createBridge( -		LLAssetType::EType asset_type, -		LLAssetType::EType actual_asset_type, -		LLInventoryType::EType inv_type, -		LLInventoryPanel* inventory, -		const LLUUID& uuid, -		U32 flags = 0x00) const; +	/*virtual*/ LLInvFVBridge* createBridge(LLAssetType::EType asset_type, +											LLAssetType::EType actual_asset_type, +											LLInventoryType::EType inv_type, +											LLInventoryPanel* inventory, +											LLFolderView* root, +											const LLUUID& uuid, +											U32 flags = 0x00) const;  };  #endif // LL_LLPLACESINVENTORYBRIDGE_H diff --git a/indra/newview/llplacesinventorypanel.cpp b/indra/newview/llplacesinventorypanel.cpp index ed0fb54051..0930a7be7f 100644 --- a/indra/newview/llplacesinventorypanel.cpp +++ b/indra/newview/llplacesinventorypanel.cpp @@ -68,9 +68,9 @@ BOOL LLPlacesInventoryPanel::postBuild()  	// clear Contents();  	{ -		mFolders->destroyView(); -		mFolders->getParent()->removeChild(mFolders); -		mFolders->die(); +		mFolderRoot->destroyView(); +		mFolderRoot->getParent()->removeChild(mFolderRoot); +		mFolderRoot->die();  		if( mScroller )  		{ @@ -78,7 +78,7 @@ BOOL LLPlacesInventoryPanel::postBuild()  			mScroller->die();  			mScroller = NULL;  		} -		mFolders = NULL; +		mFolderRoot = NULL;  	} @@ -95,13 +95,13 @@ BOOL LLPlacesInventoryPanel::postBuild()  		p.title = getLabel();  		p.rect = folder_rect;  		p.parent_panel = this; -		mFolders = (LLFolderView*)LLUICtrlFactory::create<LLPlacesFolderView>(p); -		mFolders->setAllowMultiSelect(mAllowMultiSelect); +		mFolderRoot = (LLFolderView*)LLUICtrlFactory::create<LLPlacesFolderView>(p); +		mFolderRoot->setAllowMultiSelect(mAllowMultiSelect);  	}  	mCommitCallbackRegistrar.popScope(); -	mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar); +	mFolderRoot->setCallbackRegistrar(&mCommitCallbackRegistrar);  	// scroller  	{ @@ -116,14 +116,14 @@ BOOL LLPlacesInventoryPanel::postBuild()  		mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);  	}  	addChild(mScroller); -	mScroller->addChild(mFolders); +	mScroller->addChild(mFolderRoot); -	mFolders->setScrollContainer(mScroller); -	mFolders->addChild(mFolders->mStatusTextBox); +	mFolderRoot->setScrollContainer(mScroller); +	mFolderRoot->addChild(mFolderRoot->mStatusTextBox);  	// cut subitems -	mFolders->setUseEllipses(true); +	mFolderRoot->setUseEllipses(true);  	return TRUE;  } @@ -132,17 +132,17 @@ BOOL LLPlacesInventoryPanel::postBuild()  void LLPlacesInventoryPanel::saveFolderState()  {  	mSavedFolderState->setApply(FALSE); -	getRootFolder()->applyFunctorRecursively(*mSavedFolderState); +	mFolderRoot->applyFunctorRecursively(*mSavedFolderState);  }  // re-open folders which state was saved  void LLPlacesInventoryPanel::restoreFolderState()  {  	mSavedFolderState->setApply(TRUE); -	getRootFolder()->applyFunctorRecursively(*mSavedFolderState); +	mFolderRoot->applyFunctorRecursively(*mSavedFolderState);  	LLOpenFoldersWithSelection opener; -	getRootFolder()->applyFunctorRecursively(opener); -	getRootFolder()->scrollToShowSelection(); +	mFolderRoot->applyFunctorRecursively(opener); +	mFolderRoot->scrollToShowSelection();  }  S32	LLPlacesInventoryPanel::notify(const LLSD& info)  @@ -152,11 +152,11 @@ S32	LLPlacesInventoryPanel::notify(const LLSD& info)  		std::string str_action = info["action"];  		if(str_action == "select_first")  		{ -			return getRootFolder()->notify(info); +			return mFolderRoot->notify(info);  		}  		else if(str_action == "select_last")  		{ -			return getRootFolder()->notify(info); +			return mFolderRoot->notify(info);  		}  	}  	return 0; diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index a80687da4d..49247aafb0 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -219,13 +219,13 @@ void LLSidepanelAppearance::onOpenOutfitButtonClicked()  		LLInventoryPanel *inventory_panel = tab_outfits->findChild<LLInventoryPanel>("outfitslist_tab");  		if (inventory_panel)  		{ -			LLFolderView *folder = inventory_panel->getRootFolder(); -			LLFolderViewItem *outfit_folder = folder->getItemByID(outfit_link->getLinkedUUID()); +			LLFolderView* root = inventory_panel->getRootFolder(); +			LLFolderViewItem *outfit_folder = root->getItemByID(outfit_link->getLinkedUUID());  			if (outfit_folder)  			{  				outfit_folder->setOpen(!outfit_folder->isOpen()); -				folder->setSelectionFromRoot(outfit_folder,TRUE); -				folder->scrollToShowSelection(); +				root->setSelectionFromRoot(outfit_folder,TRUE); +				root->scrollToShowSelection();  			}  		}  	} diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 73880563d7..18e56a9c01 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -161,7 +161,7 @@ void LLSidepanelInventory::performActionOnSelection(const std::string &action)  	{  		return;  	} -	current_item->getListener()->performAction(panel_main_inventory->getActivePanel()->getRootFolder(), panel_main_inventory->getActivePanel()->getModel(), action); +	current_item->getListener()->performAction(panel_main_inventory->getActivePanel()->getModel(), action);  }  void LLSidepanelInventory::onWearButtonClicked() diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 08bc8220d9..651070a2ea 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -1108,7 +1108,16 @@ S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create  		{  			readEntryFromHeaderImmediately(idx, entry) ;  		} -		llassert_always(entry.mImageSize > entry.mBodySize); +		if(entry.mImageSize <= entry.mBodySize)//it happens on 64-bit systems, do not know why +		{ +			llwarns << "corrupted entry: " << id << " entry image size: " << entry.mImageSize << " entry body size: " << entry.mBodySize << llendl ; + +			//erase this entry and the cached texture from the cache. +			std::string tex_filename = getTextureFileName(id); +			removeEntry(idx, entry, tex_filename) ; +			mUpdatedEntryMap.erase(idx) ; +			idx = -1 ; +		}  	}  	return idx;  } diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 17221219eb..db0d57c10c 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -1077,7 +1077,7 @@ const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably  const std::string NEW_GESTURE_NAME = "New Gesture"; // *TODO:Translate? (probably not)  // ! REFACTOR ! Really need to refactor this so that it's not a bunch of if-then statements... -void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, const LLSD& userdata, const LLUUID& default_parent_uuid) +void menu_create_inventory_item(LLFolderView* root, LLFolderBridge *bridge, const LLSD& userdata, const LLUUID& default_parent_uuid)  {  	std::string type_name = userdata.asString(); @@ -1101,7 +1101,7 @@ void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, co  		LLUUID category = gInventory.createNewCategory(parent_id, preferred_type, LLStringUtil::null);  		gInventory.notifyObservers(); -		folder->setSelectionByID(category, TRUE); +		root->setSelectionByID(category, TRUE);  	}  	else if ("lsl" == type_name)  	{ @@ -1146,7 +1146,7 @@ void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, co  			llwarns << "Can't create unrecognized type " << type_name << llendl;  		}  	} -	folder->setNeedsAutoRename(TRUE);	 +	root->setNeedsAutoRename(TRUE);	  }  LLAssetType::EType LLViewerInventoryItem::getType() const diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h index 3d3f80b9b5..3577bd8791 100644 --- a/indra/newview/llviewerinventory.h +++ b/indra/newview/llviewerinventory.h @@ -356,7 +356,7 @@ void copy_inventory_from_notecard(const LLUUID& object_id,  								  U32 callback_id = 0); -void menu_create_inventory_item(LLFolderView* folder, +void menu_create_inventory_item(LLFolderView* root,  								LLFolderBridge* bridge,  								const LLSD& userdata,  								const LLUUID& default_parent_uuid = LLUUID::null); diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index e0cbddafae..170eb7ae86 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -2968,7 +2968,13 @@ void LLViewerMediaImpl::calculateInterest()  	if(!mObjectList.empty())  	{  		// Just use the first object in the list.  We could go through the list and find the closest object, but this should work well enough. -		LLVector3d global_delta = gAgent.getPositionGlobal() - (*mObjectList.begin())->getPositionGlobal(); +		std::list< LLVOVolume* >::iterator iter = mObjectList.begin() ; +		LLVOVolume* objp = *iter ; +		llassert_always(objp != NULL) ; + +		LLVector3d obj_global = objp->getPositionGlobal() ; +		LLVector3d agent_global = gAgent.getPositionGlobal() ; +		LLVector3d global_delta = agent_global - obj_global ;  		mProximityDistance = global_delta.magVecSquared();  // use distance-squared because it's cheaper and sorts the same.  	} diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index c575656b24..c415d89e9c 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -410,7 +410,6 @@ class LLFileTakeSnapshotToDisk : public view_listener_t  		{  			gViewerWindow->playSnapshotAnimAndSound(); -			LLImageBase::setSizeOverride(TRUE);  			LLPointer<LLImageFormatted> formatted;  			switch(LLFloaterSnapshot::ESnapshotFormat(gSavedSettings.getS32("SnapshotFormat")))  			{ @@ -425,12 +424,12 @@ class LLFileTakeSnapshotToDisk : public view_listener_t  				break;  			  default:   				llwarns << "Unknown Local Snapshot format" << llendl; -				LLImageBase::setSizeOverride(FALSE);  				return true;  			} +			formatted->enableOverSize() ;  			formatted->encode(raw, 0); -			LLImageBase::setSizeOverride(FALSE); +			formatted->disableOverSize() ;  			gViewerWindow->saveImageNumbered(formatted);  		}  		return true; | 
