diff options
| -rw-r--r-- | indra/newview/llfloaterinventory.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llimpanel.cpp | 70 | ||||
| -rw-r--r-- | indra/newview/llimpanel.h | 9 | ||||
| -rw-r--r-- | indra/newview/llimview.cpp | 149 | ||||
| -rw-r--r-- | indra/newview/llimview.h | 6 | ||||
| -rw-r--r-- | indra/newview/llpanellandmarks.cpp | 95 | ||||
| -rw-r--r-- | indra/newview/llpanellandmarks.h | 5 | ||||
| -rw-r--r-- | indra/newview/llparticipantlist.cpp | 12 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_place_add_button.xml | 27 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_group_control_panel.xml | 3 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_landmarks.xml | 14 | 
11 files changed, 217 insertions, 179 deletions
| diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp index c890f9f122..a47916b7d7 100644 --- a/indra/newview/llfloaterinventory.cpp +++ b/indra/newview/llfloaterinventory.cpp @@ -1438,7 +1438,11 @@ void LLInventoryPanel::modelChanged(U32 mask)  						}  						LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID()); -						if (view_item->getParentFolder() != new_parent) + +						// added check against NULL for cases when Inventory panel contains startFolder. +						// in this case parent is LLFolderView (LLInventoryPanel::mFolders) itself. +						// this check is a fix for bug EXT-1859. +						if (NULL != new_parent && view_item->getParentFolder() != new_parent)  						{  							view_item->getParentFolder()->extractItem(view_item);  							view_item->addToFolder(new_parent, mFolders); diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index 2d8372db04..211e657a76 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -1011,78 +1011,8 @@ void LLFloaterIMPanel::chatFromLogFile(LLLogChat::ELogLineType type, std::string  	self->mHistoryEditor->blockUndo();  } -void LLFloaterIMPanel::showSessionStartError( -	const std::string& error_string) -{ -	LLSD args; -	args["REASON"] = LLTrans::getString(error_string); -	args["RECIPIENT"] = getTitle(); - -	LLSD payload; -	payload["session_id"] = mSessionUUID; - -	LLNotifications::instance().add( -		"ChatterBoxSessionStartError", -		args, -		payload, -		onConfirmForceCloseError); -} - -void LLFloaterIMPanel::showSessionEventError( -	const std::string& event_string, -	const std::string& error_string) -{ -	LLSD args; -	args["REASON"] = -		LLTrans::getString(error_string); -	args["EVENT"] = -		LLTrans::getString(event_string); -	args["RECIPIENT"] = getTitle(); - -	LLNotifications::instance().add( -		"ChatterBoxSessionEventError", -		args); -} - -void LLFloaterIMPanel::showSessionForceClose( -	const std::string& reason_string) -{ -	LLSD args; - -	args["NAME"] = getTitle(); -	args["REASON"] = LLTrans::getString(reason_string); - -	LLSD payload; -	payload["session_id"] = mSessionUUID; - -	LLNotifications::instance().add( -		"ForceCloseChatterBoxSession", -		args, -		payload, -		LLFloaterIMPanel::onConfirmForceCloseError); - -} -  //static   void LLFloaterIMPanel::onKickSpeaker(void* user_data)  {  } - -bool LLFloaterIMPanel::onConfirmForceCloseError(const LLSD& notification, const LLSD& response) -{ -	//only 1 option really -	LLUUID session_id = notification["payload"]["session_id"]; - -	if ( gIMMgr ) -	{ -		LLFloaterIMPanel* floaterp = gIMMgr->findFloaterBySession( -			session_id); - -		if ( floaterp ) floaterp->closeFloater(FALSE); - - - -	} -	return false; -} diff --git a/indra/newview/llimpanel.h b/indra/newview/llimpanel.h index 31b5c5c127..39107d9a22 100644 --- a/indra/newview/llimpanel.h +++ b/indra/newview/llimpanel.h @@ -129,15 +129,6 @@ public:  	void processIMTyping(const LLIMInfo* im_info, BOOL typing);  	static void chatFromLogFile(LLLogChat::ELogLineType type, std::string line, void* userdata); -	//show error statuses to the user -	void showSessionStartError(const std::string& error_string); -	void showSessionEventError( -		const std::string& event_string, -		const std::string& error_string); -	void showSessionForceClose(const std::string& reason); - -	static bool onConfirmForceCloseError(const LLSD& notification, const LLSD& response); -  private:  	// Called by UI methods.  	void sendMsg(); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 8792713423..2e5e23c845 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -890,20 +890,11 @@ public:  		{  			gIMMgr->clearPendingAgentListUpdates(mSessionID);  			gIMMgr->clearPendingInvitation(mSessionID); - -			LLFloaterIMPanel* floaterp = -				gIMMgr->findFloaterBySession(mSessionID); - -			if ( floaterp ) +			if ( 404 == statusNum )  			{ -				if ( 404 == statusNum ) -				{ -					std::string error_string; -					error_string = "does not exist"; - -					floaterp->showSessionStartError( -						error_string); -				} +				std::string error_string; +				error_string = "does not exist"; +				gIMMgr->showSessionStartError(error_string, mSessionID);  			}  		}  	} @@ -955,6 +946,106 @@ LLUUID LLIMMgr::computeSessionID(  	return session_id;  } +inline LLFloater* getFloaterBySessionID(const LLUUID session_id) +{ +	LLFloater* floater = NULL; +	if ( gIMMgr ) +	{ +		floater = dynamic_cast < LLFloater* > +			( gIMMgr->findFloaterBySession(session_id) ); +	} +	if ( !floater ) +	{ +		floater = dynamic_cast < LLFloater* > +			( LLIMFloater::findInstance(session_id) ); +	} +	return floater; +} + +void +LLIMMgr::showSessionStartError( +	const std::string& error_string, +	const LLUUID session_id) +{ +	const LLFloater* floater = getFloaterBySessionID (session_id); +	if (!floater) return; + +	LLSD args; +	args["REASON"] = LLTrans::getString(error_string); +	args["RECIPIENT"] = floater->getTitle(); + +	LLSD payload; +	payload["session_id"] = session_id; + +	LLNotifications::instance().add( +		"ChatterBoxSessionStartError", +		args, +		payload, +		LLIMMgr::onConfirmForceCloseError); +} + +void +LLIMMgr::showSessionEventError( +	const std::string& event_string, +	const std::string& error_string, +	const LLUUID session_id) +{ +	const LLFloater* floater = getFloaterBySessionID (session_id); +	if (!floater) return; + +	LLSD args; +	args["REASON"] = +		LLTrans::getString(error_string); +	args["EVENT"] = +		LLTrans::getString(event_string); +	args["RECIPIENT"] = floater->getTitle(); + +	LLNotifications::instance().add( +		"ChatterBoxSessionEventError", +		args); +} + +void +LLIMMgr::showSessionForceClose( +	const std::string& reason_string, +	const LLUUID session_id) +{ +	const LLFloater* floater = getFloaterBySessionID (session_id); +	if (!floater) return; + +	LLSD args; + +	args["NAME"] = floater->getTitle(); +	args["REASON"] = LLTrans::getString(reason_string); + +	LLSD payload; +	payload["session_id"] = session_id; + +	LLNotifications::instance().add( +		"ForceCloseChatterBoxSession", +		args, +		payload, +		LLIMMgr::onConfirmForceCloseError); +} + +//static +bool +LLIMMgr::onConfirmForceCloseError( +	const LLSD& notification, +	const LLSD& response) +{ +	//only 1 option really +	LLUUID session_id = notification["payload"]["session_id"]; + +	LLFloater* floater = getFloaterBySessionID (session_id); +	if ( floater ) +	{ +		floater->closeFloater(FALSE); +	} +	return false; +} + +  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  // Class LLIncomingCallDialog  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -2033,15 +2124,8 @@ public:  		}  		else  		{ -			//throw an error dialog and close the temp session's -			//floater -			LLFloaterIMPanel* floater =  -				gIMMgr->findFloaterBySession(temp_session_id); - -			if ( floater ) -			{ -				floater->showSessionStartError(body["error"].asString()); -			} +			//throw an error dialog and close the temp session's floater +			gIMMgr->showSessionStartError(body["error"].asString(), temp_session_id);  		}  		gIMMgr->clearPendingAgentListUpdates(session_id); @@ -2074,15 +2158,10 @@ public:  		if ( !success )  		{  			//throw an error dialog -			LLFloaterIMPanel* floater =  -				gIMMgr->findFloaterBySession(session_id); - -			if (floater) -			{ -				floater->showSessionEventError( -					body["event"].asString(), -					body["error"].asString()); -			} +			gIMMgr->showSessionEventError( +				body["event"].asString(), +				body["error"].asString(), +				session_id);  		}  	}  }; @@ -2100,13 +2179,7 @@ public:  		session_id = input["body"]["session_id"].asUUID();  		reason = input["body"]["reason"].asString(); -		LLFloaterIMPanel* floater = -			gIMMgr ->findFloaterBySession(session_id); - -		if ( floater ) -		{ -			floater->showSessionForceClose(reason); -		} +		gIMMgr->showSessionForceClose(reason, session_id);  	}  }; diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index f83520af82..f09c5a9521 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -318,6 +318,12 @@ public:  	void addSessionObserver(LLIMSessionObserver *);  	void removeSessionObserver(LLIMSessionObserver *); +	//show error statuses to the user +	void showSessionStartError(const std::string& error_string, const LLUUID session_id); +	void showSessionEventError(const std::string& event_string, const std::string& error_string, const LLUUID session_id); +	void showSessionForceClose(const std::string& reason, const LLUUID session_id); +	static bool onConfirmForceCloseError(const LLSD& notification, const LLSD& response); +  	/**  	 * Start call in a session  	 * @return false if voice channel doesn't exist diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 83fb147a49..4650c0eab4 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -56,7 +56,7 @@  //static LLRegisterPanelClassWrapper<LLLandmarksPanel> t_landmarks("panel_landmarks");  static const std::string OPTIONS_BUTTON_NAME = "options_gear_btn"; -static const std::string ADD_LANDMARK_BUTTON_NAME = "add_landmark_btn"; +static const std::string ADD_BUTTON_NAME = "add_btn";  static const std::string ADD_FOLDER_BUTTON_NAME = "add_folder_btn";  static const std::string TRASH_BUTTON_NAME = "trash_btn"; @@ -300,6 +300,8 @@ void LLLandmarksPanel::processParcelInfo(const LLParcelData& parcel_data)  					panel_pick, panel_places,params));  			panel_pick->setSaveCallback(boost::bind(&LLLandmarksPanel::onPickPanelExit,this,  				panel_pick, panel_places,params)); +			panel_pick->setCancelCallback(boost::bind(&LLLandmarksPanel::onPickPanelExit,this, +							panel_pick, panel_places,params));  		}  	}  } @@ -433,11 +435,11 @@ void LLLandmarksPanel::initListCommandsHandlers()  	mListCommands = getChild<LLPanel>("bottom_panel");  	mListCommands->childSetAction(OPTIONS_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onActionsButtonClick, this)); -	mListCommands->childSetAction(ADD_LANDMARK_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onAddLandmarkButtonClick, this)); -	mListCommands->childSetAction(ADD_FOLDER_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onAddFolderButtonClick, this));  	mListCommands->childSetAction(TRASH_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onTrashButtonClick, this)); +	mListCommands->getChild<LLButton>(ADD_BUTTON_NAME)->setHeldDownCallback(boost::bind(&LLLandmarksPanel::onAddButtonHeldDown, this)); +	static const LLSD add_landmark_command("add_landmark"); +	mListCommands->childSetAction(ADD_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onAddAction, this, add_landmark_command)); -	  	LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>(TRASH_BUTTON_NAME);  	trash_btn->setDragAndDropHandler(boost::bind(&LLLandmarksPanel::handleDragAndDropToTrash, this  			,	_4 // BOOL drop @@ -453,6 +455,7 @@ void LLLandmarksPanel::initListCommandsHandlers()  	mEnableCallbackRegistrar.add("Places.LandmarksGear.Enable", boost::bind(&LLLandmarksPanel::isActionEnabled, this, _2));  	mGearLandmarkMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_places_gear_landmark.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());  	mGearFolderMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_places_gear_folder.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_place_add_button.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());  } @@ -488,52 +491,26 @@ void LLLandmarksPanel::onActionsButtonClick()  		mGearFolderMenu->getChild<LLMenuItemCallGL>("collapse")->setVisible(cur_item->isOpen());  		menu = mGearFolderMenu;  	} -	if(menu) -	{ -		menu->buildDrawLabels(); -		menu->updateParent(LLMenuGL::sMenuContainer); -		LLView* actions_btn  = getChild<LLView>(OPTIONS_BUTTON_NAME); -		S32 menu_x, menu_y; -		actions_btn->localPointToOtherView(0,actions_btn->getRect().getHeight(),&menu_x,&menu_y, this); -		menu_y += menu->getRect().getHeight(); -		LLMenuGL::showPopup(this, menu, menu_x,menu_y); -	} +	showActionMenu(menu,OPTIONS_BUTTON_NAME);  } -void LLLandmarksPanel::onAddLandmarkButtonClick() const +void LLLandmarksPanel::onAddButtonHeldDown()  { -	if(LLLandmarkActions::landmarkAlreadyExists()) -	{ -		std::string location; -		LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_FULL); -		llwarns<<" Landmark already exists at location:  "<< location<<llendl; -		return; -	} -	LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark")); +	showActionMenu(mMenuAdd,ADD_BUTTON_NAME);  } -void LLLandmarksPanel::onAddFolderButtonClick() const +void LLLandmarksPanel::showActionMenu(LLMenuGL* menu, std::string spawning_view_name)  { -	LLFolderViewItem*  item = getCurSelectedItem(); -	if(item &&  mCurrentSelectedList == mLandmarksInventoryPanel) +	if (menu)  	{ -		LLFolderViewEventListener* folder_bridge = NULL; -		if(item-> getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK) -		{ -			// for a landmark get parent folder bridge -			folder_bridge = item->getParentFolder()->getListener(); -		} -		else if (item-> getListener()->getInventoryType() == LLInventoryType::IT_CATEGORY)  -		{ -			// for a folder get its own bridge -			folder_bridge = item->getListener(); -		} - -		menu_create_inventory_item(mCurrentSelectedList->getRootFolder() -			, dynamic_cast<LLFolderBridge*>(folder_bridge) -			, LLSD("category") -			, gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK) -			); +		menu->buildDrawLabels(); +		menu->updateParent(LLMenuGL::sMenuContainer); +		LLView* spawning_view = getChild<LLView> (spawning_view_name); +		S32 menu_x, menu_y; +		//show menu in co-ordinates of panel +		spawning_view->localPointToOtherView(0, spawning_view->getRect().getHeight(), &menu_x, &menu_y, this); +		menu_y += menu->getRect().getHeight(); +		LLMenuGL::showPopup(this, menu, menu_x, menu_y);  	}  } @@ -547,11 +524,39 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const  	std::string command_name = userdata.asString();  	if("add_landmark" == command_name)  	{ -		onAddLandmarkButtonClick(); +		if(LLLandmarkActions::landmarkAlreadyExists()) +		{ +			std::string location; +			LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_FULL); +			llwarns<<" Landmark already exists at location:  "<< location<<llendl; +			return; +		} +		LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));  	}   	else if ("category" == command_name)  	{ -		onAddFolderButtonClick(); +		LLFolderViewItem* item = getCurSelectedItem(); +		if (item && mCurrentSelectedList == mLandmarksInventoryPanel) +		{ +			LLFolderViewEventListener* folder_bridge = NULL; +			if (item-> getListener()->getInventoryType() +					== LLInventoryType::IT_LANDMARK) +			{ +				// for a landmark get parent folder bridge +				folder_bridge = item->getParentFolder()->getListener(); +			} +			else if (item-> getListener()->getInventoryType() +					== LLInventoryType::IT_CATEGORY) +			{ +				// for a folder get its own bridge +				folder_bridge = item->getListener(); +			} + +			menu_create_inventory_item(mCurrentSelectedList->getRootFolder(), +					dynamic_cast<LLFolderBridge*> (folder_bridge), LLSD( +							"category"), gInventory.findCategoryUUIDForType( +							LLAssetType::AT_LANDMARK)); +		}  	}  } diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h index 47c9f7647c..958850134d 100644 --- a/indra/newview/llpanellandmarks.h +++ b/indra/newview/llpanellandmarks.h @@ -90,8 +90,8 @@ private:  	void initListCommandsHandlers();  	void updateListCommands();  	void onActionsButtonClick(); -	void onAddLandmarkButtonClick() const; -	void onAddFolderButtonClick() const; +	void showActionMenu(LLMenuGL* menu, std::string spawning_view_name); +	void onAddButtonHeldDown();  	void onTrashButtonClick() const;  	void onAddAction(const LLSD& command_name) const;  	void onClipboardAction(const LLSD& command_name) const; @@ -121,6 +121,7 @@ private:  	LLInventorySubTreePanel*	mLibraryInventoryPanel;  	LLMenuGL*					mGearLandmarkMenu;  	LLMenuGL*					mGearFolderMenu; +	LLMenuGL*					mMenuAdd;  	LLInventorySubTreePanel*	mCurrentSelectedList;  	LLPanel*					mListCommands; diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 534c69a2a3..b10eb91b46 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -48,6 +48,18 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av  	mSpeakerMgr->addListener(mSpeakerAddListener, "add");  	mSpeakerMgr->addListener(mSpeakerRemoveListener, "remove");  	mSpeakerMgr->addListener(mSpeakerClearListener, "clear"); + +	//Lets fill avatarList with existing speakers +	LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs(); + +	LLSpeakerMgr::speaker_list_t speaker_list; +	mSpeakerMgr->getSpeakerList(&speaker_list, true); +	for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++) +	{ +		group_members.push_back((*it)->mID); +	} +	mAvatarList->setDirty(); +	mAvatarList->sortByName();  }  LLParticipantList::~LLParticipantList() diff --git a/indra/newview/skins/default/xui/en/menu_place_add_button.xml b/indra/newview/skins/default/xui/en/menu_place_add_button.xml new file mode 100644 index 0000000000..e3a39a1242 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_place_add_button.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<menu + layout="topleft" + left="0" + mouse_opaque="false" + name="menu_folder_gear" + visible="false"> +    <menu_item_call +     label="Add Folder" +     layout="topleft" +     name="add_folder"> +        <on_click +         function="Places.LandmarksGear.Add.Action" +         parameter="category" /> +        <on_enable +         function="Places.LandmarksGear.Enable" +         parameter="category" /> +    </menu_item_call> +    <menu_item_call +     label="Add Landmark" +     layout="topleft" +     name="add_landmark"> +        <on_click +         function="Places.LandmarksGear.Add.Action" +         parameter="add_landmark" /> +    </menu_item_call> +</menu> diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml index e1f18d8b7d..148e9a5562 100644 --- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml @@ -8,11 +8,12 @@       color="DkGray2"       follows="left|top|right|bottom"       height="130" +     ignore_online_status="true"       layout="topleft"       left="3"       name="speakers_list"       top="10" -     width="140"/> +     width="140" />      <button       name="group_info_btn"       label="Group Info" diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml index c33f68eaf7..5293043ba7 100644 --- a/indra/newview/skins/default/xui/en/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml @@ -114,22 +114,10 @@           image_disabled="AddItem_Disabled"           layout="topleft"           left_pad="5" -         name="add_landmark_btn" +         name="add_btn"           picture_style="true"           tool_tip="Add new landmark"           width="18" /> -        <button -         follows="bottom|left" -         height="18" -         image_selected="AddItem_Press" -         image_unselected="AddItem_Off" -         image_disabled="AddItem_Disabled" -         layout="topleft" -         left_pad="5" -         name="add_folder_btn" -         picture_style="true" -         tool_tip="Add new folder" -         width="18" />          <dnd_button           follows="bottom|right"           height="18" | 
