diff options
| -rw-r--r-- | indra/newview/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | indra/newview/llfloateravatarpicker.cpp | 147 | ||||
| -rw-r--r-- | indra/newview/llfloateravatarpicker.h | 7 | ||||
| -rw-r--r-- | indra/newview/llimconversation.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llimfloater.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llimfloatercontainer.cpp | 10 | ||||
| -rw-r--r-- | indra/newview/llinventorypanel.cpp | 48 | ||||
| -rw-r--r-- | indra/newview/llinventorypanel.h | 1 | ||||
| -rw-r--r-- | indra/newview/llpanellandmarks.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llplacesfolderview.cpp | 74 | ||||
| -rw-r--r-- | indra/newview/llplacesfolderview.h | 72 | ||||
| -rw-r--r-- | indra/newview/llplacesinventorypanel.cpp | 86 | ||||
| -rw-r--r-- | indra/newview/llplacesinventorypanel.h | 33 | 
13 files changed, 303 insertions, 184 deletions
| diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 70493b1214..9553476aaf 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -445,6 +445,7 @@ set(viewer_SOURCE_FILES      llphysicsshapebuilderutil.cpp      llplacesinventorybridge.cpp      llplacesinventorypanel.cpp +    llplacesfolderview.cpp      llpopupview.cpp      llpolymesh.cpp      llpolymorph.cpp @@ -1015,6 +1016,7 @@ set(viewer_HEADER_FILES      llphysicsshapebuilderutil.h      llplacesinventorybridge.h      llplacesinventorypanel.h +    llplacesfolderview.h      llpolymesh.h      llpolymorph.h      llpopupview.h diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp index 0290e7cdf0..47acdf7057 100644 --- a/indra/newview/llfloateravatarpicker.cpp +++ b/indra/newview/llfloateravatarpicker.cpp @@ -58,7 +58,8 @@ static std::map<LLUUID, LLAvatarName> sAvatarNameMap;  LLFloaterAvatarPicker* LLFloaterAvatarPicker::show(select_callback_t callback,  												   BOOL allow_multiple, -												   BOOL closeOnSelect) +												   BOOL closeOnSelect, +												   BOOL skip_agent)  {  	// *TODO: Use a key to allow this not to be an effective singleton  	LLFloaterAvatarPicker* floater =  @@ -73,6 +74,7 @@ LLFloaterAvatarPicker* LLFloaterAvatarPicker::show(select_callback_t callback,  	floater->setAllowMultiple(allow_multiple);  	floater->mNearMeListComplete = FALSE;  	floater->mCloseOnSelect = closeOnSelect; +	floater->mExcludeAgentFromSearchResults = skip_agent;  	if (!closeOnSelect)  	{ @@ -581,35 +583,38 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*  		msg->getUUIDFast(  _PREHASH_Data,_PREHASH_AvatarID,	avatar_id, i);  		msg->getStringFast(_PREHASH_Data,_PREHASH_FirstName, first_name, i);  		msg->getStringFast(_PREHASH_Data,_PREHASH_LastName,	last_name, i); -	 -		std::string avatar_name; -		if (avatar_id.isNull()) -		{ -			LLStringUtil::format_map_t map; -			map["[TEXT]"] = floater->getChild<LLUICtrl>("Edit")->getValue().asString(); -			avatar_name = floater->getString("not_found", map); -			search_results->setEnabled(FALSE); -			floater->getChildView("ok_btn")->setEnabled(FALSE); -		} -		else + +		if (avatar_id != agent_id || !floater->isExcludeAgentFromSearchResults()) // exclude agent from search results?  		{ -			avatar_name = LLCacheName::buildFullName(first_name, last_name); -			search_results->setEnabled(TRUE); -			found_one = TRUE; +			std::string avatar_name; +			if (avatar_id.isNull()) +			{ +				LLStringUtil::format_map_t map; +				map["[TEXT]"] = floater->getChild<LLUICtrl>("Edit")->getValue().asString(); +				avatar_name = floater->getString("not_found", map); +				search_results->setEnabled(FALSE); +				floater->getChildView("ok_btn")->setEnabled(FALSE); +			} +			else +			{ +				avatar_name = LLCacheName::buildFullName(first_name, last_name); +				search_results->setEnabled(TRUE); +				found_one = TRUE; -			LLAvatarName av_name; -			av_name.mLegacyFirstName = first_name; -			av_name.mLegacyLastName = last_name; -			av_name.mDisplayName = avatar_name; -			const LLUUID& agent_id = avatar_id; -			sAvatarNameMap[agent_id] = av_name; +				LLAvatarName av_name; +				av_name.mLegacyFirstName = first_name; +				av_name.mLegacyLastName = last_name; +				av_name.mDisplayName = avatar_name; +				const LLUUID& agent_id = avatar_id; +				sAvatarNameMap[agent_id] = av_name; +			} +			LLSD element; +			element["id"] = avatar_id; // value +			element["columns"][0]["column"] = "name"; +			element["columns"][0]["value"] = avatar_name; +			search_results->addElement(element);  		} -		LLSD element; -		element["id"] = avatar_id; // value -		element["columns"][0]["column"] = "name"; -		element["columns"][0]["value"] = avatar_name; -		search_results->addElement(element);  	}  	if (found_one) @@ -624,52 +629,58 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*  void LLFloaterAvatarPicker::processResponse(const LLUUID& query_id, const LLSD& content)  {  	// Check for out-of-date query -	if (query_id != mQueryID) return; +	if (query_id == mQueryID) +	{ +		LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>("SearchResults"); -	LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>("SearchResults"); +		LLSD agents = content["agents"]; + +		// clear "Searching" label on first results +		search_results->deleteAllItems(); -	LLSD agents = content["agents"]; -	if (agents.size() == 0) -	{ -		LLStringUtil::format_map_t map; -		map["[TEXT]"] = childGetText("Edit");  		LLSD item; -		item["id"] = LLUUID::null; -		item["columns"][0]["column"] = "name"; -		item["columns"][0]["value"] = getString("not_found", map); -		search_results->addElement(item); -		search_results->setEnabled(false); -		getChildView("ok_btn")->setEnabled(false); -		return; -	} +		LLSD::array_const_iterator it = agents.beginArray(); +		for ( ; it != agents.endArray(); ++it) +		{ +			const LLSD& row = *it; +			if (row["id"].asUUID() != gAgent.getID() || !mExcludeAgentFromSearchResults) +			{ +				item["id"] = row["id"]; +				LLSD& columns = item["columns"]; +				columns[0]["column"] = "name"; +				columns[0]["value"] = row["display_name"]; +				columns[1]["column"] = "username"; +				columns[1]["value"] = row["username"]; +				search_results->addElement(item); + +				// add the avatar name to our list +				LLAvatarName avatar_name; +				avatar_name.fromLLSD(row); +				sAvatarNameMap[row["id"].asUUID()] = avatar_name; +			} +		} -	// clear "Searching" label on first results -	search_results->deleteAllItems(); - -	LLSD item; -	LLSD::array_const_iterator it = agents.beginArray(); -	for ( ; it != agents.endArray(); ++it) -	{ -		const LLSD& row = *it; -		item["id"] = row["id"]; -		LLSD& columns = item["columns"]; -		columns[0]["column"] = "name"; -		columns[0]["value"] = row["display_name"]; -		columns[1]["column"] = "username"; -		columns[1]["value"] = row["username"]; -		search_results->addElement(item); - -		// add the avatar name to our list -		LLAvatarName avatar_name; -		avatar_name.fromLLSD(row); -		sAvatarNameMap[row["id"].asUUID()] = avatar_name; -	} - -	getChildView("ok_btn")->setEnabled(true); -	search_results->setEnabled(true); -	search_results->selectFirstItem(); -	onList(); -	search_results->setFocus(TRUE); +		if (search_results->isEmpty()) +		{ +			LLStringUtil::format_map_t map; +			map["[TEXT]"] = childGetText("Edit"); +			LLSD item; +			item["id"] = LLUUID::null; +			item["columns"][0]["column"] = "name"; +			item["columns"][0]["value"] = getString("not_found", map); +			search_results->addElement(item); +			search_results->setEnabled(false); +			getChildView("ok_btn")->setEnabled(false); +		} +		else +		{ +			getChildView("ok_btn")->setEnabled(true); +			search_results->setEnabled(true); +			search_results->selectFirstItem(); +			onList(); +			search_results->setFocus(TRUE); +		} +	}  }  //static diff --git a/indra/newview/llfloateravatarpicker.h b/indra/newview/llfloateravatarpicker.h index 96c039443a..7067cd7b3e 100644 --- a/indra/newview/llfloateravatarpicker.h +++ b/indra/newview/llfloateravatarpicker.h @@ -45,7 +45,8 @@ public:  	// Call this to select an avatar.	  	static LLFloaterAvatarPicker* show(select_callback_t callback,   									   BOOL allow_multiple = FALSE, -									   BOOL closeOnSelect = FALSE); +									   BOOL closeOnSelect = FALSE, +									   BOOL skip_agent = FALSE);  	LLFloaterAvatarPicker(const LLSD& key);  	virtual ~LLFloaterAvatarPicker(); @@ -63,6 +64,7 @@ public:  						   std::string& tooltip_msg);  	void openFriendsTab(); +	BOOL isExcludeAgentFromSearchResults() {return mExcludeAgentFromSearchResults;}  private:  	void editKeystroke(class LLLineEditor* caller, void* user_data); @@ -88,9 +90,10 @@ private:  	virtual BOOL handleKeyHere(KEY key, MASK mask);  	LLUUID				mQueryID; -	int				mNumResultsReturned; +	int				    mNumResultsReturned;  	BOOL				mNearMeListComplete;  	BOOL				mCloseOnSelect; +	BOOL                mExcludeAgentFromSearchResults;  	validate_signal_t mOkButtonValidateSignal;  	select_callback_t mSelectionCallback; diff --git a/indra/newview/llimconversation.cpp b/indra/newview/llimconversation.cpp index 4ca9476458..ee7f58b01f 100644 --- a/indra/newview/llimconversation.cpp +++ b/indra/newview/llimconversation.cpp @@ -177,6 +177,7 @@ void LLIMConversation::buildParticipantList()  			mParticipantList = new LLParticipantList(speaker_manager, getChild<LLAvatarList>("speakers_list"), true, false);  		}  	} +	updateHeaderAndToolbar();  }  void LLIMConversation::onSortMenuItemClicked(const LLSD& userdata) diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 6f26f1daff..5780ac52a5 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -101,12 +101,12 @@ void LLIMFloater::onFocusLost()  void LLIMFloater::onFocusReceived()  { -	LLIMModel::getInstance()->setActiveSessionID(mSessionID); -  	LLChicletBar::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, true);  	if (getVisible())  	{ +		// suppress corresponding toast only if this floater is visible and have focus +		LLIMModel::getInstance()->setActiveSessionID(mSessionID);  		LLIMModel::instance().sendNoUnreadMessages(mSessionID);  	}  } @@ -755,6 +755,7 @@ void LLIMFloater::setVisible(BOOL visible)  	LLNotificationsUI::LLScreenChannel* channel = static_cast<LLNotificationsUI::LLScreenChannel*>  		(LLNotificationsUI::LLChannelManager::getInstance()->  											findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID")))); +  	LLTransientDockableFloater::setVisible(visible);  	// update notification channel state diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index 450717e624..1e136b721c 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -402,11 +402,19 @@ void LLIMFloaterContainer::updateState(bool collapse, S32 delta_width)  	setCanResize(is_left_pane_expanded || is_right_pane_expanded);  	setCanMinimize(is_left_pane_expanded || is_right_pane_expanded); + +    // restore floater's resize limits (prevent collapse when left panel is expanded) +	if (is_left_pane_expanded && !is_right_pane_expanded) +	{ +		S32 expanded_min_size = mConversationsPane->getExpandedMinDim(); +        setResizeLimits(expanded_min_size, expanded_min_size); +	} +  }  void LLIMFloaterContainer::onAddButtonClicked()  { -    LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(boost::bind(&LLIMFloaterContainer::onAvatarPicked, this, _1), TRUE, TRUE); +    LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(boost::bind(&LLIMFloaterContainer::onAvatarPicked, this, _1), TRUE, TRUE, TRUE);      LLFloater* root_floater = gFloaterView->getParentFloater(this);      if (picker && root_floater)      { diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 22e6943f50..03dfada77c 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -151,6 +151,30 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :  } +LLFolderView * LLInventoryPanel::createFolderRoot(LLUUID root_id ) +{ +    LLFolderView::Params p(mParams.folder_view); +    p.name = getName(); +    p.title = getLabel(); +    p.rect = LLRect(0, 0, getRect().getWidth(), 0); +    p.parent_panel = this; +    p.tool_tip = p.name; +    p.listener = mInvFVBridgeBuilder->createBridge(	LLAssetType::AT_CATEGORY, +        LLAssetType::AT_CATEGORY, +        LLInventoryType::IT_CATEGORY, +        this, +        &mInventoryViewModel, +        NULL, +        root_id); +    p.view_model = &mInventoryViewModel; +    p.use_label_suffix = mParams.use_label_suffix; +    p.allow_multiselect = mAllowMultiSelect; +    p.show_empty_message = mShowEmptyMessage; +    p.show_item_link_overlays = mShowItemLinkOverlays; +    p.root = NULL; + +    return LLUICtrlFactory::create<LLFolderView>(p); +}  void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)  	{ @@ -172,29 +196,7 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)  	{  		// Determine the root folder in case specified, and  		// build the views starting with that folder. -	 - -		LLFolderView::Params p(mParams.folder_view); -		p.name = getName(); -		p.title = getLabel(); -		p.rect = LLRect(0, 0, getRect().getWidth(), 0); -		p.parent_panel = this; -		p.tool_tip = p.name; -		p.listener = mInvFVBridgeBuilder->createBridge(	LLAssetType::AT_CATEGORY, -																	LLAssetType::AT_CATEGORY, -																	LLInventoryType::IT_CATEGORY, -																	this, -														&mInventoryViewModel, -																	NULL, -																	root_id); -		p.view_model = &mInventoryViewModel; -		p.use_label_suffix = mParams.use_label_suffix; -		p.allow_multiselect = mAllowMultiSelect; -		p.show_empty_message = mShowEmptyMessage; -		p.show_item_link_overlays = mShowItemLinkOverlays; -		p.root = NULL; - -		mFolderRoot = LLUICtrlFactory::create<LLFolderView>(p); +		mFolderRoot = createFolderRoot(root_id);  		addItemID(root_id, mFolderRoot);  } diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index e9bfcb0ccf..c4f3c1b47d 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -278,6 +278,7 @@ protected:  	LLFolderViewItem*	buildNewViews(const LLUUID& id);  	BOOL				getIsHiddenFolderType(LLFolderType::EType folder_type) const; +    virtual LLFolderView * createFolderRoot(LLUUID root_id );  	virtual LLFolderViewFolder*	createFolderViewFolder(LLInvFVBridge * bridge);  	virtual LLFolderViewItem*	createFolderViewItem(LLInvFVBridge * bridge);  private: diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 9225ea3d53..469656c33f 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -52,6 +52,7 @@  #include "llmenubutton.h"  #include "llplacesinventorybridge.h"  #include "llplacesinventorypanel.h" +#include "llplacesfolderview.h"  #include "lltoggleablemenu.h"  #include "llviewermenu.h"  #include "llviewerregion.h" diff --git a/indra/newview/llplacesfolderview.cpp b/indra/newview/llplacesfolderview.cpp new file mode 100644 index 0000000000..3caa93ae71 --- /dev/null +++ b/indra/newview/llplacesfolderview.cpp @@ -0,0 +1,74 @@ +/**  +* @file llplacesfolderview.cpp +* @brief llplacesfolderview used within llplacesinventorypanel +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2012&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2012, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "llplacesfolderview.h" + +#include "llplacesinventorypanel.h" +#include "llpanellandmarks.h" + +LLPlacesFolderView::LLPlacesFolderView(const LLFolderView::Params& p) +    : LLFolderView(p) +{ +    // we do not need auto select functionality in places landmarks, so override default behavior. +    // this disables applying of the LLSelectFirstFilteredItem in LLFolderView::doIdle. +    // Fixed issues: EXT-1631, EXT-4994. +    mAutoSelectOverride = TRUE; +} + +BOOL LLPlacesFolderView::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ +    // let children to change selection first +    childrenHandleRightMouseDown(x, y, mask); +    mParentLandmarksPanel->setCurrentSelectedList((LLPlacesInventoryPanel*)getParentPanel()); + +    // then determine its type and set necessary menu handle +    if (getCurSelectedItem()) +    { +        LLInventoryType::EType inventory_type = static_cast<LLFolderViewModelItemInventory*>(getCurSelectedItem()->getViewModelItem())->getInventoryType(); +        inventory_type_menu_handle_t::iterator it_handle = mMenuHandlesByInventoryType.find(inventory_type); + +        if (it_handle != mMenuHandlesByInventoryType.end()) +        { +            mPopupMenuHandle = (*it_handle).second; +        } +        else +        { +            llwarns << "Requested menu handle for non-setup inventory type: " << inventory_type << llendl; +        } + +    } + +    return LLFolderView::handleRightMouseDown(x, y, mask); +} + +void LLPlacesFolderView::setupMenuHandle(LLInventoryType::EType asset_type, LLHandle<LLView> menu_handle) +{ +    mMenuHandlesByInventoryType[asset_type] = menu_handle; +} + diff --git a/indra/newview/llplacesfolderview.h b/indra/newview/llplacesfolderview.h new file mode 100644 index 0000000000..8c5be39b5e --- /dev/null +++ b/indra/newview/llplacesfolderview.h @@ -0,0 +1,72 @@ +/**  +* @file   llplacesfolderview.h +* @brief  llplacesfolderview used within llplacesinventorypanel +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2012&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2012, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA +* $/LicenseInfo$ +*/ +#ifndef LL_LLPLACESFOLDERVIEW_H +#define LL_LLPLACESFOLDERVIEW_H + +#include "llfolderview.h" +#include "llinventorypanel.h" + +class LLLandmarksPanel; + +class LLPlacesFolderView : public LLFolderView +{ +public: + +    struct Params : public LLInitParam::Block<Params, LLFolderView::Params> +    { +        Params() +		{} +    }; + +	LLPlacesFolderView(const LLFolderView::Params& p); +	/** +	 *	Handles right mouse down +	 * +	 * Contains workaround for EXT-2786: sets current selected list for landmark +	 * panel using @c mParentLandmarksPanel which is set in @c LLLandmarksPanel::initLandmarksPanel +	 */ +	/*virtual*/ BOOL handleRightMouseDown( S32 x, S32 y, MASK mask ); + +	void setupMenuHandle(LLInventoryType::EType asset_type, LLHandle<LLView> menu_handle); + +	void setParentLandmarksPanel(LLLandmarksPanel* panel) +	{ +		mParentLandmarksPanel = panel; +	} + +private: +	/** +	 * holds pointer to landmark panel. This pointer is used in @c LLPlacesFolderView::handleRightMouseDown +	 */ +	LLLandmarksPanel* mParentLandmarksPanel; +	typedef std::map<LLInventoryType::EType, LLHandle<LLView> > inventory_type_menu_handle_t; +	inventory_type_menu_handle_t mMenuHandlesByInventoryType; + +}; + +#endif // LL_LLPLACESFOLDERVIEW_H + diff --git a/indra/newview/llplacesinventorypanel.cpp b/indra/newview/llplacesinventorypanel.cpp index db3f245389..01586a4d91 100644 --- a/indra/newview/llplacesinventorypanel.cpp +++ b/indra/newview/llplacesinventorypanel.cpp @@ -31,7 +31,7 @@  #include "llplacesinventorypanel.h"  #include "llfolderviewmodel.h" -#include "llfolderview.h" +#include "llplacesfolderview.h"  #include "llinventorybridge.h"  #include "llinventoryfunctions.h"  #include "llpanellandmarks.h" @@ -58,6 +58,34 @@ LLPlacesInventoryPanel::~LLPlacesInventoryPanel()  	delete mSavedFolderState;  } + +LLFolderView * LLPlacesInventoryPanel::createFolderRoot(LLUUID root_id ) +{ +    LLPlacesFolderView::Params p; +     +    p.name = getName(); +    p.title = getLabel(); +    p.rect = LLRect(0, 0, getRect().getWidth(), 0); +    p.parent_panel = this; +    p.tool_tip = p.name; +    p.listener = mInvFVBridgeBuilder->createBridge(	LLAssetType::AT_CATEGORY, +        LLAssetType::AT_CATEGORY, +        LLInventoryType::IT_CATEGORY, +        this, +        &mInventoryViewModel, +        NULL, +        root_id); +    p.view_model = &mInventoryViewModel; +    p.use_label_suffix = mParams.use_label_suffix; +    p.allow_multiselect = mAllowMultiSelect; +    p.show_empty_message = mShowEmptyMessage; +    p.show_item_link_overlays = mShowItemLinkOverlays; +    p.root = NULL; +    p.use_ellipses = mParams.folder_view.use_ellipses; + +    return LLUICtrlFactory::create<LLPlacesFolderView>(p); +} +  // save current folder open state  void LLPlacesInventoryPanel::saveFolderState()  { @@ -91,59 +119,3 @@ S32	LLPlacesInventoryPanel::notify(const LLSD& info)  	}  	return 0;  } - -/************************************************************************/ -/* PROTECTED METHODS                                                    */ -/************************************************************************/ - - - -/************************************************************************/ -/*              LLPlacesFolderView implementation                       */ -/************************************************************************/ - -////////////////////////////////////////////////////////////////////////// -//  PUBLIC METHODS -////////////////////////////////////////////////////////////////////////// - -LLPlacesFolderView::LLPlacesFolderView(const LLFolderView::Params& p) -: LLFolderView(p) -{ -	// we do not need auto select functionality in places landmarks, so override default behavior. -	// this disables applying of the LLSelectFirstFilteredItem in LLFolderView::doIdle. -	// Fixed issues: EXT-1631, EXT-4994. -	mAutoSelectOverride = TRUE; -} - -BOOL LLPlacesFolderView::handleRightMouseDown(S32 x, S32 y, MASK mask) -{ -	// let children to change selection first -	childrenHandleRightMouseDown(x, y, mask); -	mParentLandmarksPanel->setCurrentSelectedList((LLPlacesInventoryPanel*)getParentPanel()); - -	// then determine its type and set necessary menu handle -	if (getCurSelectedItem()) -	{ -		LLInventoryType::EType inventory_type = static_cast<LLFolderViewModelItemInventory*>(getCurSelectedItem()->getViewModelItem())->getInventoryType(); -		inventory_type_menu_handle_t::iterator it_handle = mMenuHandlesByInventoryType.find(inventory_type); - -		if (it_handle != mMenuHandlesByInventoryType.end()) -		{ -			mPopupMenuHandle = (*it_handle).second; -		} -		else -		{ -			llwarns << "Requested menu handle for non-setup inventory type: " << inventory_type << llendl; -		} - -	} - -	return LLFolderView::handleRightMouseDown(x, y, mask); -} - -void LLPlacesFolderView::setupMenuHandle(LLInventoryType::EType asset_type, LLHandle<LLView> menu_handle) -{ -	mMenuHandlesByInventoryType[asset_type] = menu_handle; -} - -// EOF diff --git a/indra/newview/llplacesinventorypanel.h b/indra/newview/llplacesinventorypanel.h index 1544b51aed..2805fc4257 100644 --- a/indra/newview/llplacesinventorypanel.h +++ b/indra/newview/llplacesinventorypanel.h @@ -29,9 +29,9 @@  #include "llfloaterinventory.h"  #include "llinventorypanel.h" -#include "llfolderview.h"  class LLLandmarksPanel; +class LLFolderView;  class LLPlacesInventoryPanel : public LLInventoryPanel  { @@ -46,6 +46,7 @@ public:  	LLPlacesInventoryPanel(const Params& p);  	~LLPlacesInventoryPanel(); +    LLFolderView * createFolderRoot(LLUUID root_id );  	void saveFolderState();  	void restoreFolderState(); @@ -55,34 +56,4 @@ private:  	LLSaveFolderState*			mSavedFolderState;  }; -//TODO RN: this class is currently unused, make sure that behavior remains -class LLPlacesFolderView : public LLFolderView -{ -public: -	LLPlacesFolderView(const LLFolderView::Params& p); -	/** -	 *	Handles right mouse down -	 * -	 * Contains workaround for EXT-2786: sets current selected list for landmark -	 * panel using @c mParentLandmarksPanel which is set in @c LLLandmarksPanel::initLandmarksPanel -	 */ -	/*virtual*/ BOOL handleRightMouseDown( S32 x, S32 y, MASK mask ); - -	void setupMenuHandle(LLInventoryType::EType asset_type, LLHandle<LLView> menu_handle); - -	void setParentLandmarksPanel(LLLandmarksPanel* panel) -	{ -		mParentLandmarksPanel = panel; -	} - -private: -	/** -	 * holds pointer to landmark panel. This pointer is used in @c LLPlacesFolderView::handleRightMouseDown -	 */ -	LLLandmarksPanel* mParentLandmarksPanel; -	typedef std::map<LLInventoryType::EType, LLHandle<LLView> > inventory_type_menu_handle_t; -	inventory_type_menu_handle_t mMenuHandlesByInventoryType; - -}; -  #endif //LL_LLINVENTORYSUBTREEPANEL_H | 
