diff options
| author | Paul Guslisty <pguslisty@productengine.com> | 2010-07-29 13:35:54 +0300 | 
|---|---|---|
| committer | Paul Guslisty <pguslisty@productengine.com> | 2010-07-29 13:35:54 +0300 | 
| commit | 5fb799b12f7c8b00ae163bf7797d2ac9525733a8 (patch) | |
| tree | b7d7cc24ef531ab48726accbd416b238da3bac8a | |
| parent | e730c677499842d00dd0afd613ab14b83ed14552 (diff) | |
EXT-7565 FIXED RECOVER FROM BAD MERGE (Would be nice to preserve selection while switching between folder/list view modes)
Added missed (during bad merge 14077:5b5cc4a8642d) code to the llpanloutfitedit(.h/.cpp):
  recover LLPanelOutfitEdit::updateWearablesPanelVerbButtons() and LLPanelOutfitEdit::saveListSelection() methods
Reviewed by Vadim Savchuk at https://codereview.productengine.com/secondlife/r/817/
--HG--
branch : product-engine
| -rw-r--r-- | indra/newview/llpaneloutfitedit.cpp | 70 | ||||
| -rw-r--r-- | indra/newview/llpaneloutfitedit.h | 7 | 
2 files changed, 71 insertions, 6 deletions
| diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index b56cf5c3ce..126830e05d 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -42,6 +42,7 @@  #include "lloutfitobserver.h"  #include "llcofwearables.h"  #include "llfilteredwearablelist.h" +#include "llfolderviewitem.h"  #include "llinventory.h"  #include "llinventoryitemslist.h"  #include "llviewercontrol.h" @@ -328,7 +329,9 @@ BOOL LLPanelOutfitEdit::postBuild()  	childSetCommitCallback("filter_button", boost::bind(&LLPanelOutfitEdit::showWearablesFilter, this), NULL);  	childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesFolderView, this), NULL); +	childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL);  	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesListView, this), NULL); +	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL);  	childSetCommitCallback("wearables_gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);  	childSetCommitCallback("gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);  	childSetCommitCallback("shop_btn_1", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL); @@ -489,9 +492,7 @@ void LLPanelOutfitEdit::showWearablesListView()  {  	if(switchPanels(mInventoryItemsPanel, mWearablesListViewPanel))  	{ -		mFolderViewBtn->setToggleState(FALSE); -		mFolderViewBtn->setImageOverlay(getString("folder_view_off"), mFolderViewBtn->getImageOverlayHAlign()); -		mListViewBtn->setImageOverlay(getString("list_view_on"), mListViewBtn->getImageOverlayHAlign()); +		updateWearablesPanelVerbButtons();  		updateFiltersVisibility();  	}  	mListViewBtn->setToggleState(TRUE); @@ -501,9 +502,7 @@ void LLPanelOutfitEdit::showWearablesFolderView()  {  	if(switchPanels(mWearablesListViewPanel, mInventoryItemsPanel))  	{ -		mListViewBtn->setToggleState(FALSE); -		mListViewBtn->setImageOverlay(getString("list_view_off"), mListViewBtn->getImageOverlayHAlign()); -		mFolderViewBtn->setImageOverlay(getString("folder_view_on"), mFolderViewBtn->getImageOverlayHAlign()); +		updateWearablesPanelVerbButtons();  		updateFiltersVisibility();  	}  	mFolderViewBtn->setToggleState(TRUE); @@ -1155,5 +1154,64 @@ void LLPanelOutfitEdit::onCOFChanged()  	update();  } +void LLPanelOutfitEdit::updateWearablesPanelVerbButtons() +{ +	if(mWearablesListViewPanel->getVisible()) +	{ +		mFolderViewBtn->setToggleState(FALSE); +		mFolderViewBtn->setImageOverlay(getString("folder_view_off"), mFolderViewBtn->getImageOverlayHAlign()); +		mListViewBtn->setImageOverlay(getString("list_view_on"), mListViewBtn->getImageOverlayHAlign()); +	} +	else if(mInventoryItemsPanel->getVisible()) +	{ +		mListViewBtn->setToggleState(FALSE); +		mListViewBtn->setImageOverlay(getString("list_view_off"), mListViewBtn->getImageOverlayHAlign()); +		mFolderViewBtn->setImageOverlay(getString("folder_view_on"), mFolderViewBtn->getImageOverlayHAlign()); +	} +} + +void LLPanelOutfitEdit::saveListSelection() +{ +	if(mWearablesListViewPanel->getVisible()) +	{ +		std::set<LLUUID> selected_ids = mInventoryItemsPanel->getRootFolder()->getSelectionList(); + +		if(!selected_ids.size()) return; + +		mWearableItemsList->resetSelection(); + +		for (std::set<LLUUID>::const_iterator item_id = selected_ids.begin(); item_id != selected_ids.end(); ++item_id) +		{ +			mWearableItemsList->selectItemByUUID(*item_id, true); +		} +		mWearableItemsList->scrollToShowFirstSelectedItem(); +	} +	else if(mInventoryItemsPanel->getVisible()) +	{ +		std::vector<LLUUID> selected_ids; +		mWearableItemsList->getSelectedUUIDs(selected_ids); + +		if(!selected_ids.size()) return; + +		mInventoryItemsPanel->clearSelection(); +		LLFolderView* root = mInventoryItemsPanel->getRootFolder(); + +		if(!root) return; + +		for(std::vector<LLUUID>::const_iterator item_id = selected_ids.begin(); item_id != selected_ids.end(); ++item_id) +		{ +			LLFolderViewItem* item = root->getItemByID(*item_id); +			if (!item) continue; + +			LLFolderViewFolder* parent = item->getParentFolder(); +			if(parent) +			{ +				parent->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); +			} +			mInventoryItemsPanel->getRootFolder()->changeSelection(item, TRUE); +		} +		mInventoryItemsPanel->getRootFolder()->scrollToShowSelection(); +	} +}  // EOF diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index 13ceda98a6..b3394e45a3 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -201,6 +201,13 @@ private:  	void getCurrentItemUUID(LLUUID& selected_id);  	void onCOFChanged(); +	/** +	 * Method preserves selection while switching between folder/list view modes +	*/ +	void saveListSelection(); + +	void updateWearablesPanelVerbButtons(); +  	typedef std::pair<LLWearableType::EType, size_t> selection_info_t;  	LLWearableType::EType getCOFWearablesSelectionType() const; | 
