diff options
| -rw-r--r-- | indra/newview/llfavoritesbar.cpp | 32 | ||||
| -rw-r--r-- | indra/newview/llfavoritesbar.h | 11 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 57 | ||||
| -rw-r--r-- | indra/newview/llinventorymodel.cpp | 51 | ||||
| -rw-r--r-- | indra/newview/llinventorymodel.h | 24 | 
5 files changed, 80 insertions, 95 deletions
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index 4103ccf175..fd6a92c47a 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -508,14 +508,14 @@ void LLFavoritesBarCtrl::handleExistingFavoriteDragAndDrop(S32 x, S32 y)  	if (dest)  	{ -		updateItemsOrder(mItems, mDragItemId, dest->getLandmarkId()); +		LLInventoryModel::updateItemsOrder(mItems, mDragItemId, dest->getLandmarkId());  	}  	else  	{  		mItems.push_back(gInventory.getItem(mDragItemId));  	} -	saveItemsOrder(mItems); +	gInventory.saveItemsOrder(mItems);  	LLToggleableMenu* menu = (LLToggleableMenu*) mPopupMenuHandle.get(); @@ -1193,25 +1193,6 @@ BOOL LLFavoritesBarCtrl::needToSaveItemsOrder(const LLInventoryModel::item_array  	return result;  } -void LLFavoritesBarCtrl::saveItemsOrder(LLInventoryModel::item_array_t& items) -{ -	int sortField = 0; - -	// current order is saved by setting incremental values (1, 2, 3, ...) for the sort field -	for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i) -	{ -		LLViewerInventoryItem* item = *i; - -		item->setSortField(++sortField); -		item->setComplete(TRUE); -		item->updateServer(FALSE); - -		gInventory.updateItem(item); -	} - -	gInventory.notifyObservers(); -} -  LLInventoryModel::item_array_t::iterator LLFavoritesBarCtrl::findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id)  {  	LLInventoryModel::item_array_t::iterator result = items.end(); @@ -1228,15 +1209,6 @@ LLInventoryModel::item_array_t::iterator LLFavoritesBarCtrl::findItemByUUID(LLIn  	return result;  } -void LLFavoritesBarCtrl::updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId) -{ -	LLViewerInventoryItem* srcItem = gInventory.getItem(srcItemId); -	LLViewerInventoryItem* destItem = gInventory.getItem(destItemId); - -	items.erase(findItemByUUID(items, srcItem->getUUID())); -	items.insert(findItemByUUID(items, destItem->getUUID()), srcItem); -} -  void LLFavoritesBarCtrl::insertBeforeItem(LLInventoryModel::item_array_t& items, const LLUUID& beforeItemId, LLViewerInventoryItem* insertedItem)  {  	LLViewerInventoryItem* beforeItem = gInventory.getItem(beforeItemId); diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index 9ac734baff..40dd551eef 100644 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -126,16 +126,7 @@ private:  	// checks if the current order of the favorites items must be saved  	BOOL needToSaveItemsOrder(const LLInventoryModel::item_array_t& items); -	// saves current order of the favorites items -	void saveItemsOrder(LLInventoryModel::item_array_t& items); - -	/* -	 * changes favorites items order by insertion of the item identified by srcItemId -	 * BEFORE the item identified by destItemId. both items must exist in items array. -	 */ -	void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId); - -	/* +	/**  	 * inserts an item identified by insertedItemId BEFORE an item identified by beforeItemId.  	 * this function assumes that an item identified by insertedItemId doesn't exist in items array.  	 */ diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 6e72a7a4f7..e9176da715 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -2931,50 +2931,6 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response  	return false;  } -/* -Next functions intended to reorder items in the inventory folder and save order on server -Is now used for Favorites folder. - -*TODO: refactoring is needed with Favorites Bar functionality. Probably should be moved in LLInventoryModel -*/ -void saveItemsOrder(LLInventoryModel::item_array_t& items) -{ -	int sortField = 0; - -	// current order is saved by setting incremental values (1, 2, 3, ...) for the sort field -	for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i) -	{ -		LLViewerInventoryItem* item = *i; - -		item->setSortField(++sortField); -		item->setComplete(TRUE); -		item->updateServer(FALSE); - -		gInventory.updateItem(item); - -		// Tell the parent folder to refresh its sort order. -		gInventory.addChangedMask(LLInventoryObserver::SORT, item->getParentUUID()); -	} - -	gInventory.notifyObservers(); -} - -LLInventoryModel::item_array_t::iterator findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id) -{ -	LLInventoryModel::item_array_t::iterator result = items.end(); - -	for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i) -	{ -		if ((*i)->getUUID() == id) -		{ -			result = i; -			break; -		} -	} - -	return result; -} -  // See also LLInventorySort where landmarks in the Favorites folder are sorted.  class LLViewerInventoryItemSort  { @@ -2996,15 +2952,6 @@ void rearrange_item_order_by_sort_field(LLInventoryModel::item_array_t& items)  	std::sort(items.begin(), items.end(), sort_functor);  } -void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId) -{ -	LLViewerInventoryItem* srcItem = gInventory.getItem(srcItemId); -	LLViewerInventoryItem* destItem = gInventory.getItem(destItemId); - -	items.erase(findItemByUUID(items, srcItem->getUUID())); -	items.insert(findItemByUUID(items, destItem->getUUID()), srcItem); -} -  BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  										BOOL drop)  { @@ -3103,9 +3050,9 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  					rearrange_item_order_by_sort_field(items);  					// update order -					updateItemsOrder(items, srcItemId, destItemId); +					LLInventoryModel::updateItemsOrder(items, srcItemId, destItemId); -					saveItemsOrder(items); +					gInventory.saveItemsOrder(items);  				}  			}  			else if (favorites_id == mUUID) // if target is the favorites folder we use copy diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index c603af9166..ef18386e57 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -3622,6 +3622,57 @@ BOOL LLInventoryModel::getIsFirstTimeInViewer2()  	return sFirstTimeInViewer2;  } +static LLInventoryModel::item_array_t::iterator find_item_iter_by_uuid(LLInventoryModel::item_array_t& items, const LLUUID& id) +{ +	LLInventoryModel::item_array_t::iterator result = items.end(); + +	for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i) +	{ +		if ((*i)->getUUID() == id) +		{ +			result = i; +			break; +		} +	} + +	return result; +} + +// static +void LLInventoryModel::updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& src_item_id, const LLUUID& dest_item_id) +{ +	LLInventoryModel::item_array_t::iterator it_src = find_item_iter_by_uuid(items, src_item_id); +	LLInventoryModel::item_array_t::iterator it_dest = find_item_iter_by_uuid(items, dest_item_id); + +	if (it_src == items.end() || it_dest == items.end()) return; + +	LLViewerInventoryItem* src_item = *it_src; +	items.erase(it_src); +	items.insert(it_dest, src_item); +} + +void LLInventoryModel::saveItemsOrder(const LLInventoryModel::item_array_t& items) +{ +	int sortField = 0; + +	// current order is saved by setting incremental values (1, 2, 3, ...) for the sort field +	for (item_array_t::const_iterator i = items.begin(); i != items.end(); ++i) +	{ +		LLViewerInventoryItem* item = *i; + +		item->setSortField(++sortField); +		item->setComplete(TRUE); +		item->updateServer(FALSE); + +		updateItem(item); + +		// Tell the parent folder to refresh its sort order. +		addChangedMask(LLInventoryObserver::SORT, item->getParentUUID()); +	} + +	notifyObservers(); +} +  //----------------------------------------------------------------------------  // *NOTE: DEBUG functionality diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index 39377b4ae2..e8698c0759 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -384,6 +384,30 @@ public:  	void setLibraryOwnerID(const LLUUID& id);  	void setLibraryRootFolderID(const LLUUID& id); + +	/** +	 * Changes items order by insertion of the item identified by src_item_id +	 * BEFORE the item identified by dest_item_id. Both items must exist in items array. +	 * +	 * Sorting is stored after method is finished. Only src_item_id is moved before dest_item_id. +	 * +	 * @param[in, out] items - vector with items to be updated. It should be sorted in a right way +	 * before calling this method. +	 * @param src_item_id - LLUUID of inventory item to be moved in new position +	 * @param dest_item_id - LLUUID of inventory item before which source item should be placed. +	 */ +	static void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& src_item_id, const LLUUID& dest_item_id); + +	/** +	 * Saves current order of the passed items using inventory item sort field. +	 * +	 * It reset items' sort fields and saves them on server. +	 * Is used to save order for Favorites folder. +	 * +	 * @param[in] items vector of items in order to be saved. +	 */ +	void saveItemsOrder(const LLInventoryModel::item_array_t& items); +  protected:  	// Internal methods which add inventory and make sure that all of  | 
