diff options
Diffstat (limited to 'indra')
59 files changed, 848 insertions, 401 deletions
| diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake index a6f69a09e9..543075db5b 100644..100755 --- a/indra/cmake/LLAddBuildTest.cmake +++ b/indra/cmake/LLAddBuildTest.cmake @@ -201,6 +201,15 @@ FUNCTION(LL_ADD_INTEGRATION_TEST    endif(TEST_DEBUG)    ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files})    SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}") +  if (WINDOWS) +    set_target_properties(INTEGRATION_TEST_${testname} +      PROPERTIES  +      LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:__tcmalloc" +      LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO" +      LINK_FLAGS_RELEASE "" +      ) +  endif(WINDOWS) +    if(STANDALONE)      SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES COMPILE_FLAGS -I"${TUT_INCLUDE_DIR}")    endif(STANDALONE) diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake index 17e211cb99..d4694ad37a 100644 --- a/indra/cmake/LLCommon.cmake +++ b/indra/cmake/LLCommon.cmake @@ -24,7 +24,7 @@ endif (LINUX)  add_definitions(${TCMALLOC_FLAG}) -set(LLCOMMON_LINK_SHARED ON CACHE BOOL "Build the llcommon target as a shared library.") +set(LLCOMMON_LINK_SHARED OFF CACHE BOOL "Build the llcommon target as a shared library.")  if(LLCOMMON_LINK_SHARED)    add_definitions(-DLL_COMMON_LINK_SHARED=1)  endif(LLCOMMON_LINK_SHARED) diff --git a/indra/llcommon/llstat.cpp b/indra/llcommon/llstat.cpp index 057257057f..b82d52797e 100644 --- a/indra/llcommon/llstat.cpp +++ b/indra/llcommon/llstat.cpp @@ -40,7 +40,6 @@  S32	            LLPerfBlock::sStatsFlags = LLPerfBlock::LLSTATS_NO_OPTIONAL_STATS;       // Control what is being recorded  LLPerfBlock::stat_map_t    LLPerfBlock::sStatMap;    // Map full path string to LLStatTime objects, tracks all active objects  std::string        LLPerfBlock::sCurrentStatPath = "";    // Something like "/total_time/physics/physics step" -LLStat::stat_map_t LLStat::sStatList;  //------------------------------------------------------------------------  // Live config file to trigger stats logging @@ -771,13 +770,19 @@ void LLStat::init()  	if (!mName.empty())  	{ -		stat_map_t::iterator iter = sStatList.find(mName); -		if (iter != sStatList.end()) +		stat_map_t::iterator iter = getStatList().find(mName); +		if (iter != getStatList().end())  			llwarns << "LLStat with duplicate name: " << mName << llendl; -		sStatList.insert(std::make_pair(mName, this)); +		getStatList().insert(std::make_pair(mName, this));  	}  } +LLStat::stat_map_t& LLStat::getStatList() +{ +	static LLStat::stat_map_t stat_list; +	return stat_list; +} +  LLStat::LLStat(const U32 num_bins, const BOOL use_frame_timer)  	: mUseFrameTimer(use_frame_timer),  	  mNumBins(num_bins) @@ -803,10 +808,10 @@ LLStat::~LLStat()  	if (!mName.empty())  	{  		// handle multiple entries with the same name -		stat_map_t::iterator iter = sStatList.find(mName); -		while (iter != sStatList.end() && iter->second != this) +		stat_map_t::iterator iter = getStatList().find(mName); +		while (iter != getStatList().end() && iter->second != this)  			++iter; -		sStatList.erase(iter); +		getStatList().erase(iter);  	}  } diff --git a/indra/llcommon/llstat.h b/indra/llcommon/llstat.h index b877432e86..1a8404cc07 100644 --- a/indra/llcommon/llstat.h +++ b/indra/llcommon/llstat.h @@ -263,9 +263,9 @@ class LL_COMMON_API LLStat  {  private:  	typedef std::multimap<std::string, LLStat*> stat_map_t; -	static stat_map_t sStatList;  	void init(); +	static stat_map_t& getStatList();  public:  	LLStat(U32 num_bins = 32, BOOL use_frame_timer = FALSE); @@ -342,8 +342,8 @@ public:  	static LLStat* getStat(const std::string& name)  	{  		// return the first stat that matches 'name' -		stat_map_t::iterator iter = sStatList.find(name); -		if (iter != sStatList.end()) +		stat_map_t::iterator iter = getStatList().find(name); +		if (iter != getStatList().end())  			return iter->second;  		else  			return NULL; diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index 97f2792686..ff31f7665e 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -651,8 +651,10 @@ void LLAvatarNameCache::fireSignal(const LLUUID& agent_id,  	signal(agent_id, av_name);  } -void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) +LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  { +	callback_connection_t connection; +  	if (sRunning)  	{  		// ...only do immediate lookups when cache is running @@ -668,7 +670,7 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  				{  					// ...name already exists in cache, fire callback now  					fireSignal(agent_id, slot, av_name); -					return; +					return connection;  				}  			}  		} @@ -681,7 +683,7 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  				LLAvatarName av_name;  				buildLegacyName(full_name, &av_name);  				fireSignal(agent_id, slot, av_name); -				return; +				return connection;  			}  		}  	} @@ -698,15 +700,17 @@ void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  	{  		// ...new callback for this id  		callback_signal_t* signal = new callback_signal_t(); -		signal->connect(slot); +		connection = signal->connect(slot);  		sSignalMap[agent_id] = signal;  	}  	else  	{  		// ...existing callback, bind additional slot  		callback_signal_t* signal = sig_it->second; -		signal->connect(slot); +		connection = signal->connect(slot);  	} + +	return connection;  } diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h index 59c1329ffa..064942fe53 100644 --- a/indra/llmessage/llavatarnamecache.h +++ b/indra/llmessage/llavatarnamecache.h @@ -71,10 +71,11 @@ namespace LLAvatarNameCache  		void (const LLUUID& agent_id, const LLAvatarName& av_name)>  			callback_signal_t;  	typedef callback_signal_t::slot_type callback_slot_t; +	typedef boost::signals2::connection callback_connection_t;  	// Fetches name information and calls callback.  	// If name information is in cache, callback will be called immediately. -	void get(const LLUUID& agent_id, callback_slot_t slot); +	callback_connection_t get(const LLUUID& agent_id, callback_slot_t slot);  	// Allow display names to be explicitly disabled for testing.  	void setUseDisplayNames(bool use); diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index f57790aff6..11004fe390 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -288,7 +288,7 @@ void LLFolderView::addFolder( LLFolderViewFolder* folder)  	//{  	//	mFolders.insert(mFolders.begin(), folder);  	//} -} +	}  void LLFolderView::closeAllFolders()  { @@ -311,7 +311,7 @@ void LLFolderView::openTopLevelFolders()  // *width should be 0  // conform show folder state works  S32 LLFolderView::arrange( S32* unused_width, S32* unused_height ) -	{ +		{  	mMinWidth = 0;  	S32 target_height; @@ -340,7 +340,7 @@ void LLFolderView::filter( LLFolderViewFilter& filter )  	filter.setFilterCount(llclamp(LLUI::sSettingGroups["config"]->getS32("FilterItemsPerFrame"), 1, 5000));  	getViewModelItem()->filter(filter); -	} +}  void LLFolderView::reshape(S32 width, S32 height, BOOL called_from_parent)  { @@ -761,8 +761,8 @@ void LLFolderView::removeSelectedItems()  				{  					// change selection on successful delete  					setSelection(item_to_select, item_to_select ? item_to_select->isOpen() : false, mParentPanel->hasFocus()); +					}  				} -			}  			arrangeAll();  		}  		else if (count > 1) @@ -858,7 +858,7 @@ void LLFolderView::propertiesSelectedItems( void )  	//		multi_propertiesp->openFloater(LLSD());  	//	}  	//} -		} +}  void LLFolderView::autoOpenItem( LLFolderViewFolder* item ) @@ -1718,14 +1718,13 @@ void LLFolderView::update()  	// filter to determine visibility before arranging  	filter(getFolderViewModel()->getFilter()); -  	// Clear the modified setting on the filter only if the filter count is non-zero after running the filter process  	// Note: if the filter count is zero, then the filter most likely halted before completing the entire set of items  	if (getFolderViewModel()->getFilter().isModified() && (getFolderViewModel()->getFilter().getFilterCount() > 0))  	{  		getFolderViewModel()->getFilter().clearModified();  	} - +			  	// automatically show matching items, and select first one if we had a selection  	if (mNeedsAutoSelect)  	{ @@ -2033,31 +2032,31 @@ void LLFolderView::onRenamerLost()  	}  } -S32 LLFolderView::getItemHeight() -{ -	if(!hasVisibleChildren()) -{ -		//We need to display status textbox, let's reserve some place for it -		return llmax(0, mStatusTextBox->getTextPixelHeight()); -} -	return 0; -} -  LLFolderViewItem* LLFolderView::getNextUnselectedItem()  {  	LLFolderViewItem* last_item = *mSelectedItems.rbegin();  	LLFolderViewItem* new_selection = last_item->getNextOpenNode(FALSE);  	while(new_selection && new_selection->isSelected()) -{ +	{  		new_selection = new_selection->getNextOpenNode(FALSE); -} +	}  	if (!new_selection) -{ +	{  		new_selection = last_item->getPreviousOpenNode(FALSE);  		while (new_selection && (new_selection->isInSelection())) -	{ +		{  			new_selection = new_selection->getPreviousOpenNode(FALSE); +		}  	} -}  	return new_selection;  } + +S32 LLFolderView::getItemHeight() +{ +	if(!hasVisibleChildren()) +{ +		//We need to display status textbox, let's reserve some place for it +		return llmax(0, mStatusTextBox->getTextPixelHeight()); +} +	return 0; +} diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index b172359851..52923389cd 100644 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -117,7 +117,7 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)  	if (mViewModelItem)  	{  		mViewModelItem->setFolderViewItem(this); -	} +}  }  BOOL LLFolderViewItem::postBuild() @@ -219,11 +219,11 @@ void LLFolderViewItem::refresh()  	mIconOpen = vmi.getIconOpen();  	mIconOverlay = vmi.getIconOverlay(); -	if (mRoot->useLabelSuffix()) -	{ +		if (mRoot->useLabelSuffix()) +		{  		mLabelStyle = vmi.getLabelStyle();  		mLabelSuffix = vmi.getLabelSuffix(); -	} +}  	//TODO RN: make sure this logic still fires  	//std::string searchable_label(mLabel); @@ -253,7 +253,7 @@ void LLFolderViewItem::arrangeAndSet(BOOL set_selection,  	LLFolderView* root = getRoot();  	if (getParentFolder())  	{ -		getParentFolder()->requestArrange(); +	getParentFolder()->requestArrange();  	}  	if(set_selection)  	{ @@ -365,12 +365,12 @@ void LLFolderViewItem::selectItem(void)  BOOL LLFolderViewItem::isMovable()  {  	return getViewModelItem()->isItemMovable(); -} +	}  BOOL LLFolderViewItem::isRemovable()  {  	return getViewModelItem()->isItemRemovable(); -	} +}  void LLFolderViewItem::destroyView()  { @@ -400,14 +400,14 @@ BOOL LLFolderViewItem::remove()  void LLFolderViewItem::buildContextMenu(LLMenuGL& menu, U32 flags)  {  	getViewModelItem()->buildContextMenu(menu, flags); -} +	}  void LLFolderViewItem::openItem( void )  {  	if (mAllowOpen)  	{  	getViewModelItem()->openItem(); -} +	}  }  void LLFolderViewItem::rename(const std::string& new_name) @@ -421,7 +421,7 @@ void LLFolderViewItem::rename(const std::string& new_name)  const std::string& LLFolderViewItem::getName( void ) const  {  	return getViewModelItem()->getName(); -} +	}  // LLView functionality  BOOL LLFolderViewItem::handleRightMouseDown( S32 x, S32 y, MASK mask ) @@ -484,7 +484,7 @@ BOOL LLFolderViewItem::handleHover( S32 x, S32 y, MASK mask )  		if( (x - mDragStartX) * (x - mDragStartX) + (y - mDragStartY) * (y - mDragStartY) > drag_and_drop_threshold() * drag_and_drop_threshold()   			&& root->getCurSelectedItem()  			&& root->startDrag()) -				{ +			{  					// RN: when starting drag and drop, clear out last auto-open  					root->autoOpenTest(NULL);  					root->setShowSelectionContext(TRUE); @@ -496,7 +496,7 @@ BOOL LLFolderViewItem::handleHover( S32 x, S32 y, MASK mask )  			getWindow()->setCursor(UI_CURSOR_ARROW);  			return TRUE; -			} +				}  		else  		{  			getWindow()->setCursor(UI_CURSOR_NOLOCKED); @@ -758,7 +758,7 @@ void LLFolderViewItem::draw()  		LLUIImage* box_image = default_params.selection_image;  		LLRect box_rect(left, top, right, bottom);  		box_image->draw(box_rect, sFilterBGColor); -	} +		}  	LLColor4 color = (mIsSelected && filled) ? sHighlightFgColor : sFgColor;  	//TODO RN: implement this in terms of getColor() @@ -785,15 +785,15 @@ void LLFolderViewItem::draw()  	//--------------------------------------------------------------------------------//  	// Highlight string match  	// -	if (filter_string_length > 0) -	{ +		if (filter_string_length > 0) +		{  		F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mViewModelItem->getFilterStringOffset()); -		F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD; +			F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD;  		font->renderUTF8( combined_string, mViewModelItem->getFilterStringOffset(), match_string_left, yy, -							sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -							filter_string_length, S32_MAX, &right_x, FALSE ); +							  sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, +							  filter_string_length, S32_MAX, &right_x, FALSE ); +		}  	} -}  const LLFolderViewModelInterface* LLFolderViewItem::getFolderViewModel( void ) const  { @@ -1384,7 +1384,7 @@ void LLFolderViewFolder::destroyView()  	}  	LLFolderViewItem::destroyView(); -} +	}  // extractItem() removes the specified item from the folder, but  // doesn't delete it. @@ -1418,7 +1418,7 @@ void LLFolderViewFolder::extractItem( LLFolderViewItem* item )  BOOL LLFolderViewFolder::isMovable()  {  	if( !(getViewModelItem()->isItemMovable()) ) -		{ +	{  			return FALSE;  		} @@ -1448,7 +1448,7 @@ BOOL LLFolderViewFolder::isMovable()  BOOL LLFolderViewFolder::isRemovable()  {  	if( !(getViewModelItem()->isItemRemovable()) ) -		{ +	{  			return FALSE;  		} @@ -1478,7 +1478,7 @@ BOOL LLFolderViewFolder::isRemovable()  void LLFolderViewFolder::addItem(LLFolderViewItem* item)  {  	if (item->getParentFolder()) -	{ +{  		item->getParentFolder()->extractItem(item);  	}  	item->setParentFolder(this); @@ -1487,10 +1487,10 @@ void LLFolderViewFolder::addItem(LLFolderViewItem* item)  	item->setRect(LLRect(0, 0, getRect().getWidth(), 0));  	item->setVisible(FALSE); - +	  	addChild(item);  	getViewModelItem()->addChild(item->getViewModelItem()); - +	  	//TODO RN - make sort bubble up as long as parent Folder doesn't have anything matching sort criteria  	//// Traverse parent folders and update creation date and resort, if necessary  	//LLFolderViewFolder* parentp = this; @@ -1508,11 +1508,11 @@ void LLFolderViewFolder::addItem(LLFolderViewItem* item)  // this is an internal method used for adding items to folders.   void LLFolderViewFolder::addFolder(LLFolderViewFolder* folder) -{ -	if (folder->mParentFolder)  	{ +	if (folder->mParentFolder) +		{  		folder->mParentFolder->extractItem(folder); -	} +		}  	folder->mParentFolder = this;  	mFolders.push_back(folder);  	folder->setOrigin(0, 0); @@ -1524,20 +1524,20 @@ void LLFolderViewFolder::addFolder(LLFolderViewFolder* folder)  	addChild( folder );  	getViewModelItem()->addChild(folder->getViewModelItem()); -} +	}  void LLFolderViewFolder::requestArrange()  {   	//if ( mLastArrangeGeneration != -1)  	{ -		mLastArrangeGeneration = -1;  -		// flag all items up to root -		if (mParentFolder) -		{ -			mParentFolder->requestArrange(); +	mLastArrangeGeneration = -1;  +	// flag all items up to root +	if (mParentFolder) +	{ +		mParentFolder->requestArrange(); +	}  		}  	} -}  void LLFolderViewFolder::toggleOpen()  { diff --git a/indra/llui/tests/llurlentry_stub.cpp b/indra/llui/tests/llurlentry_stub.cpp index ee87d01239..f8797fd257 100644 --- a/indra/llui/tests/llurlentry_stub.cpp +++ b/indra/llui/tests/llurlentry_stub.cpp @@ -40,9 +40,10 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)  	return false;  } -void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) +LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)  { -	return; +	callback_connection_t connection; +	return connection;  }  bool LLAvatarNameCache::useDisplayNames() diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index 32bb84cba5..97637c937f 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -2809,42 +2809,48 @@ const char* cursorIDToName(int id)  {  	switch (id)  	{ -		case UI_CURSOR_ARROW:			return "UI_CURSOR_ARROW"; -		case UI_CURSOR_WAIT:			return "UI_CURSOR_WAIT"; -		case UI_CURSOR_HAND:			return "UI_CURSOR_HAND"; -		case UI_CURSOR_IBEAM:			return "UI_CURSOR_IBEAM"; -		case UI_CURSOR_CROSS:			return "UI_CURSOR_CROSS"; -		case UI_CURSOR_SIZENWSE:		return "UI_CURSOR_SIZENWSE"; -		case UI_CURSOR_SIZENESW:		return "UI_CURSOR_SIZENESW"; -		case UI_CURSOR_SIZEWE:			return "UI_CURSOR_SIZEWE"; -		case UI_CURSOR_SIZENS:			return "UI_CURSOR_SIZENS"; -		case UI_CURSOR_NO:				return "UI_CURSOR_NO"; -		case UI_CURSOR_WORKING:			return "UI_CURSOR_WORKING"; -		case UI_CURSOR_TOOLGRAB:		return "UI_CURSOR_TOOLGRAB"; -		case UI_CURSOR_TOOLLAND:		return "UI_CURSOR_TOOLLAND"; -		case UI_CURSOR_TOOLFOCUS:		return "UI_CURSOR_TOOLFOCUS"; -		case UI_CURSOR_TOOLCREATE:		return "UI_CURSOR_TOOLCREATE"; -		case UI_CURSOR_ARROWDRAG:		return "UI_CURSOR_ARROWDRAG"; -		case UI_CURSOR_ARROWCOPY:		return "UI_CURSOR_ARROWCOPY"; -		case UI_CURSOR_ARROWDRAGMULTI:	return "UI_CURSOR_ARROWDRAGMULTI"; -		case UI_CURSOR_ARROWCOPYMULTI:	return "UI_CURSOR_ARROWCOPYMULTI"; -		case UI_CURSOR_NOLOCKED:		return "UI_CURSOR_NOLOCKED"; -		case UI_CURSOR_ARROWLOCKED:		return "UI_CURSOR_ARROWLOCKED"; -		case UI_CURSOR_GRABLOCKED:		return "UI_CURSOR_GRABLOCKED"; -		case UI_CURSOR_TOOLTRANSLATE:	return "UI_CURSOR_TOOLTRANSLATE"; -		case UI_CURSOR_TOOLROTATE:		return "UI_CURSOR_TOOLROTATE"; -		case UI_CURSOR_TOOLSCALE:		return "UI_CURSOR_TOOLSCALE"; -		case UI_CURSOR_TOOLCAMERA:		return "UI_CURSOR_TOOLCAMERA"; -		case UI_CURSOR_TOOLPAN:			return "UI_CURSOR_TOOLPAN"; -		case UI_CURSOR_TOOLZOOMIN:		return "UI_CURSOR_TOOLZOOMIN"; -		case UI_CURSOR_TOOLPICKOBJECT3:	return "UI_CURSOR_TOOLPICKOBJECT3"; -		case UI_CURSOR_TOOLPLAY:		return "UI_CURSOR_TOOLPLAY"; -		case UI_CURSOR_TOOLPAUSE:		return "UI_CURSOR_TOOLPAUSE"; -		case UI_CURSOR_TOOLMEDIAOPEN:	return "UI_CURSOR_TOOLMEDIAOPEN"; -		case UI_CURSOR_PIPETTE:			return "UI_CURSOR_PIPETTE"; -		case UI_CURSOR_TOOLSIT:			return "UI_CURSOR_TOOLSIT"; -		case UI_CURSOR_TOOLBUY:			return "UI_CURSOR_TOOLBUY"; -		case UI_CURSOR_TOOLOPEN:		return "UI_CURSOR_TOOLOPEN"; +		case UI_CURSOR_ARROW:							return "UI_CURSOR_ARROW"; +		case UI_CURSOR_WAIT:							return "UI_CURSOR_WAIT"; +		case UI_CURSOR_HAND:							return "UI_CURSOR_HAND"; +		case UI_CURSOR_IBEAM:							return "UI_CURSOR_IBEAM"; +		case UI_CURSOR_CROSS:							return "UI_CURSOR_CROSS"; +		case UI_CURSOR_SIZENWSE:						return "UI_CURSOR_SIZENWSE"; +		case UI_CURSOR_SIZENESW:						return "UI_CURSOR_SIZENESW"; +		case UI_CURSOR_SIZEWE:							return "UI_CURSOR_SIZEWE"; +		case UI_CURSOR_SIZENS:							return "UI_CURSOR_SIZENS"; +		case UI_CURSOR_NO:								return "UI_CURSOR_NO"; +		case UI_CURSOR_WORKING:							return "UI_CURSOR_WORKING"; +		case UI_CURSOR_TOOLGRAB:						return "UI_CURSOR_TOOLGRAB"; +		case UI_CURSOR_TOOLLAND:						return "UI_CURSOR_TOOLLAND"; +		case UI_CURSOR_TOOLFOCUS:						return "UI_CURSOR_TOOLFOCUS"; +		case UI_CURSOR_TOOLCREATE:						return "UI_CURSOR_TOOLCREATE"; +		case UI_CURSOR_ARROWDRAG:						return "UI_CURSOR_ARROWDRAG"; +		case UI_CURSOR_ARROWCOPY:						return "UI_CURSOR_ARROWCOPY"; +		case UI_CURSOR_ARROWDRAGMULTI:					return "UI_CURSOR_ARROWDRAGMULTI"; +		case UI_CURSOR_ARROWCOPYMULTI:					return "UI_CURSOR_ARROWCOPYMULTI"; +		case UI_CURSOR_NOLOCKED:						return "UI_CURSOR_NOLOCKED"; +		case UI_CURSOR_ARROWLOCKED:						return "UI_CURSOR_ARROWLOCKED"; +		case UI_CURSOR_GRABLOCKED:						return "UI_CURSOR_GRABLOCKED"; +		case UI_CURSOR_TOOLTRANSLATE:					return "UI_CURSOR_TOOLTRANSLATE"; +		case UI_CURSOR_TOOLROTATE:						return "UI_CURSOR_TOOLROTATE"; +		case UI_CURSOR_TOOLSCALE:						return "UI_CURSOR_TOOLSCALE"; +		case UI_CURSOR_TOOLCAMERA:						return "UI_CURSOR_TOOLCAMERA"; +		case UI_CURSOR_TOOLPAN:							return "UI_CURSOR_TOOLPAN"; +		case UI_CURSOR_TOOLZOOMIN:						return "UI_CURSOR_TOOLZOOMIN"; +		case UI_CURSOR_TOOLPICKOBJECT3:					return "UI_CURSOR_TOOLPICKOBJECT3"; +		case UI_CURSOR_TOOLPLAY:						return "UI_CURSOR_TOOLPLAY"; +		case UI_CURSOR_TOOLPAUSE:						return "UI_CURSOR_TOOLPAUSE"; +		case UI_CURSOR_TOOLMEDIAOPEN:					return "UI_CURSOR_TOOLMEDIAOPEN"; +		case UI_CURSOR_PIPETTE:							return "UI_CURSOR_PIPETTE"; +		case UI_CURSOR_TOOLSIT:							return "UI_CURSOR_TOOLSIT"; +		case UI_CURSOR_TOOLBUY:							return "UI_CURSOR_TOOLBUY"; +		case UI_CURSOR_TOOLOPEN:						return "UI_CURSOR_TOOLOPEN"; +		case UI_CURSOR_TOOLPATHFINDING:					return "UI_CURSOR_PATHFINDING"; +		case UI_CURSOR_TOOLPATHFINDING_PATH_START:		return "UI_CURSOR_PATHFINDING_START"; +		case UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD:	return "UI_CURSOR_PATHFINDING_START_ADD"; +		case UI_CURSOR_TOOLPATHFINDING_PATH_END:		return "UI_CURSOR_PATHFINDING_END"; +		case UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD:	return "UI_CURSOR_PATHFINDING_END_ADD"; +		case UI_CURSOR_TOOLNO:							return "UI_CURSOR_NO";  	}  	llerrs << "cursorIDToName: unknown cursor id" << id << llendl; @@ -2950,6 +2956,12 @@ void LLWindowMacOSX::updateCursor()  	case UI_CURSOR_TOOLSIT:  	case UI_CURSOR_TOOLBUY:  	case UI_CURSOR_TOOLOPEN: +	case UI_CURSOR_TOOLPATHFINDING: +	case UI_CURSOR_TOOLPATHFINDING_PATH_START: +	case UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD: +	case UI_CURSOR_TOOLPATHFINDING_PATH_END: +	case UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD: +	case UI_CURSOR_TOOLNO:  		result = setImageCursor(gCursors[mNextCursor]);  		break; @@ -2994,6 +3006,12 @@ void LLWindowMacOSX::initCursors()  	initPixmapCursor(UI_CURSOR_TOOLSIT, 20, 15);  	initPixmapCursor(UI_CURSOR_TOOLBUY, 20, 15);  	initPixmapCursor(UI_CURSOR_TOOLOPEN, 20, 15); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_START, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_END, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD, 16, 16); +	initPixmapCursor(UI_CURSOR_TOOLNO, 8, 8);  	initPixmapCursor(UI_CURSOR_SIZENWSE, 10, 10);  	initPixmapCursor(UI_CURSOR_SIZENESW, 10, 10); diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index 3d33af9d9b..3bf4a48cb6 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -2117,6 +2117,12 @@ void LLWindowSDL::initCursors()  	mSDLCursors[UI_CURSOR_TOOLSIT] = makeSDLCursorFromBMP("toolsit.BMP",20,15);  	mSDLCursors[UI_CURSOR_TOOLBUY] = makeSDLCursorFromBMP("toolbuy.BMP",20,15);  	mSDLCursors[UI_CURSOR_TOOLOPEN] = makeSDLCursorFromBMP("toolopen.BMP",20,15); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING] = makeSDLCursorFromBMP("lltoolpathfinding.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_START] = makeSDLCursorFromBMP("lltoolpathfindingpathstart.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_START_ADD] = makeSDLCursorFromBMP("lltoolpathfindingpathstartadd.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_END] = makeSDLCursorFromBMP("lltoolpathfindingpathend.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLPATHFINDING_PATH_END_ADD] = makeSDLCursorFromBMP("lltoolpathfindingpathendadd.BMP", 16, 16); +	mSDLCursors[UI_CURSOR_TOOLNO] = makeSDLCursorFromBMP("llno.BMP",8,8);  	if (getenv("LL_ATI_MOUSE_CURSOR_BUG") != NULL) {  		llinfos << "Disabling cursor updating due to LL_ATI_MOUSE_CURSOR_BUG" << llendl; diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index c49c625dbd..b94c33587b 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -45,7 +45,10 @@ include(VisualLeakDetector)  include(GLOD)  include(CMakeCopyIfDifferent) -add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions) +if (NOT HAVOK_TPV) +   # When using HAVOK_TPV, the library is precompiled, so no need for this +   add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions) +endif (NOT HAVOK_TPV)  include_directories(      ${DBUSGLIB_INCLUDE_DIRS} diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 47e944bc26..61bc58b1df 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5045,7 +5045,7 @@      <key>LoginLocation</key>      <map>        <key>Comment</key> -      <string>Login location ('last', 'home')</string> +      <string>Default Login location ('last', 'home') preference</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> @@ -6145,7 +6145,7 @@      <key>NextLoginLocation</key>      <map>        <key>Comment</key> -      <string>Location to log into by default.</string> +      <string>Location to log into for this session - set from command line or the login panel, cleared following a successfull login.</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tifBinary files differ new file mode 100644 index 0000000000..ba6f30fa0e --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tifBinary files differ new file mode 100644 index 0000000000..830d5692fd --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tifBinary files differ new file mode 100644 index 0000000000..e05284214a --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tifBinary files differ new file mode 100644 index 0000000000..c4822adf64 --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tifBinary files differ new file mode 100644 index 0000000000..5166af6e05 --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 1c81459912..08a1a237f5 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2669,14 +2669,6 @@ bool LLAppViewer::initConfiguration()  		}  	} -	// If automatic login from command line with --login switch -	// init StartSLURL location. In interactive login, LLPanelLogin -	// will take care of it. -	if ((clp.hasOption("login") || clp.hasOption("autologin")) && !clp.hasOption("url") && !clp.hasOption("slurl")) -	{ -		LLStartUp::setStartSLURL(LLSLURL(gSavedSettings.getString("LoginLocation"))); -	} -  	if (!gSavedSettings.getBOOL("AllowMultipleViewers"))  	{  	    // @@ -2724,12 +2716,27 @@ bool LLAppViewer::initConfiguration()          }  	} -   	// need to do this here - need to have initialized global settings first +   	// NextLoginLocation is set from the command line option  	std::string nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );  	if ( !nextLoginLocation.empty() )  	{ +		LL_DEBUGS("AppInit")<<"set start from NextLoginLocation: "<<nextLoginLocation<<LL_ENDL;  		LLStartUp::setStartSLURL(LLSLURL(nextLoginLocation)); -	}; +	} +	else if (   (   clp.hasOption("login") || clp.hasOption("autologin")) +			 && !clp.hasOption("url") +			 && !clp.hasOption("slurl")) +	{ +		// If automatic login from command line with --login switch +		// init StartSLURL location. +		std::string start_slurl_setting = gSavedSettings.getString("LoginLocation"); +		LL_DEBUGS("AppInit") << "start slurl setting '" << start_slurl_setting << "'" << LL_ENDL; +		LLStartUp::setStartSLURL(LLSLURL(start_slurl_setting)); +	} +	else +	{ +		// the login location will be set by the login panel (see LLPanelLogin) +	}  	gLastRunVersion = gSavedSettings.getString("LastRunVersion"); diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp index 832dc3c3e4..f54e6d2d48 100644 --- a/indra/newview/llconversationmodel.cpp +++ b/indra/newview/llconversationmodel.cpp @@ -29,7 +29,10 @@  #include "llconversationmodel.h" -// Conversation items +// +// Conversation items : common behaviors +// +  LLConversationItem::LLConversationItem(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model) :  	LLFolderViewModelItemCommon(root_view_model),  	mName(display_name), @@ -73,4 +76,32 @@ bool LLConversationSort::operator()(const LLConversationItem* const& a, const LL  	return (compare < 0);  } +// +// LLConversationItemSession +//  + +LLConversationItemSession::LLConversationItemSession(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model) : +	LLConversationItem(display_name,uuid,root_view_model) +{ +} + +LLConversationItemSession::LLConversationItemSession(LLFolderViewModelInterface& root_view_model) : +	LLConversationItem(root_view_model) +{ +} + +// +// LLConversationItemParticipant +//  + +LLConversationItemParticipant::LLConversationItemParticipant(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model) : +	LLConversationItem(display_name,uuid,root_view_model) +{ +} + +LLConversationItemParticipant::LLConversationItemParticipant(LLFolderViewModelInterface& root_view_model) : +	LLConversationItem(root_view_model) +{ +} +  // EOF diff --git a/indra/newview/llconversationmodel.h b/indra/newview/llconversationmodel.h index cb03128cac..fc2c600364 100644 --- a/indra/newview/llconversationmodel.h +++ b/indra/newview/llconversationmodel.h @@ -104,6 +104,22 @@ private:  	const LLUUID mUUID;  }; +class LLConversationItemSession : public LLConversationItem +{ +public: +	LLConversationItemSession(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model); +	LLConversationItemSession(LLFolderViewModelInterface& root_view_model); +	virtual ~LLConversationItemSession() {} +}; + +class LLConversationItemParticipant : public LLConversationItem +{ +public: +	LLConversationItemParticipant(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model); +	LLConversationItemParticipant(LLFolderViewModelInterface& root_view_model); +	virtual ~LLConversationItemParticipant() {} +}; +  // We don't want to ever filter conversations but we need to declare that class to create a conversation view model.  // We just stubb everything for the moment.  class LLConversationFilter : public LLFolderViewFilter diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp index 6cc911ecef..fefb7e9cac 100644 --- a/indra/newview/llconversationview.cpp +++ b/indra/newview/llconversationview.cpp @@ -32,6 +32,10 @@  #include "llimconversation.h"  #include "llimfloatercontainer.h" +// +// Implementation of conversations list session widgets +// +  LLConversationViewSession::Params::Params() :	  	container()  {} @@ -75,4 +79,13 @@ void LLConversationViewSession::setVisibleIfDetached(BOOL visible)  	}  } +// +// Implementation of conversations list participant (avatar) widgets +// + +LLConversationViewParticipant::LLConversationViewParticipant( const LLFolderViewItem::Params& p ): +	LLFolderViewItem(p) +{ +} +  // EOF diff --git a/indra/newview/llconversationview.h b/indra/newview/llconversationview.h index 6a51e719c8..5695925f43 100644 --- a/indra/newview/llconversationview.h +++ b/indra/newview/llconversationview.h @@ -31,7 +31,7 @@  class LLIMFloaterContainer; -// Implementation of conversations list widgets +// Implementation of conversations list session widgets  class LLConversationViewSession : public LLFolderViewFolder  { @@ -55,4 +55,16 @@ public:  	void setVisibleIfDetached(BOOL visible);  }; +// Implementation of conversations list participant (avatar) widgets + +class LLConversationViewParticipant : public LLFolderViewItem +{ +protected: +	friend class LLUICtrlFactory; +	LLConversationViewParticipant( const LLFolderViewItem::Params& p ); +	 +public: +	virtual ~LLConversationViewParticipant( void ) { } +}; +  #endif // LL_LLCONVERSATIONVIEW_H diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index eca964442b..606d77f645 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -342,10 +342,10 @@ void LLVolumeImplFlexible::doIdleUpdate()  	if (drawablep)  	{  		//LLFastTimer ftm(FTM_FLEXIBLE_UPDATE); -		 +  		//ensure drawable is active  		drawablep->makeActive(); -			 +  		if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FLEXIBLE))  		{  			bool visible = drawablep->isVisible(); @@ -364,35 +364,35 @@ void LLVolumeImplFlexible::doIdleUpdate()  				if	(visible)  				{  					if (!drawablep->isState(LLDrawable::IN_REBUILD_Q1) && -					mVO->getPixelArea() > 256.f) -					{ -						U32 id; -				 -						if (mVO->isRootEdit()) -						{ -							id = mID; -						} -						else -						{ -							LLVOVolume* parent = (LLVOVolume*) mVO->getParent(); -							id = parent->getVolumeInterfaceID(); -						} - -						if ((LLDrawable::getCurrentFrame()+id)%update_period == 0) -						{ +				mVO->getPixelArea() > 256.f) +			{ +				U32 id; + +				if (mVO->isRootEdit()) +				{ +					id = mID; +				} +				else +				{ +					LLVOVolume* parent = (LLVOVolume*) mVO->getParent(); +					id = parent->getVolumeInterfaceID(); +				} + +				if ((LLDrawable::getCurrentFrame()+id)%update_period == 0) +				{  							sUpdateDelay[mInstanceIndex] = (S32) update_period-1; -							updateRenderRes(); +					updateRenderRes(); -							gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_POSITION, FALSE); -						} -					} +					gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_POSITION, FALSE);  				} +			} +		}  				else  				{  					sUpdateDelay[mInstanceIndex] = (S32) update_period; -				} -			} +	} +}  		}  	} diff --git a/indra/newview/llfloaterpathfindingcharacters.cpp b/indra/newview/llfloaterpathfindingcharacters.cpp index 99d262344c..69c9d94dfa 100644 --- a/indra/newview/llfloaterpathfindingcharacters.cpp +++ b/indra/newview/llfloaterpathfindingcharacters.cpp @@ -134,26 +134,20 @@ void LLFloaterPathfindingCharacters::requestGetObjects()  	LLPathfindingManager::getInstance()->requestGetCharacters(getNewRequestId(), boost::bind(&LLFloaterPathfindingCharacters::handleNewObjectList, this, _1, _2, _3));  } -LLSD LLFloaterPathfindingCharacters::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingCharacters::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)  {  	llassert(pObjectListPtr != NULL);  	llassert(!pObjectListPtr->isEmpty()); -	LLSD scrollListData = LLSD::emptyArray(); -  	for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin();	objectIter != pObjectListPtr->end(); ++objectIter)  	{ -		const LLPathfindingCharacter *characterPtr = dynamic_cast<const LLPathfindingCharacter *>(objectIter->second.get()); -		LLSD element = buildCharacterScrollListData(characterPtr); -		scrollListData.append(element); +		const LLPathfindingObjectPtr objectPtr = objectIter->second; +		const LLPathfindingCharacter *characterPtr = dynamic_cast<const LLPathfindingCharacter *>(objectPtr.get()); +		llassert(characterPtr != NULL); -		if (characterPtr->hasOwner() && !characterPtr->hasOwnerName()) -		{ -			rebuildScrollListAfterAvatarNameLoads(characterPtr->getUUID()); -		} +		LLSD scrollListItemData = buildCharacterScrollListItemData(characterPtr); +		addObjectToScrollList(objectPtr, scrollListItemData);  	} - -	return scrollListData;  }  void LLFloaterPathfindingCharacters::updateControlsOnScrollListChange() @@ -168,6 +162,22 @@ S32 LLFloaterPathfindingCharacters::getNameColumnIndex() const  	return 0;  } +S32 LLFloaterPathfindingCharacters::getOwnerNameColumnIndex() const +{ +	return 2; +} + +std::string LLFloaterPathfindingCharacters::getOwnerName(const LLPathfindingObject *pObject) const +{ +	return (pObject->hasOwner() +		? (pObject->hasOwnerName() +		? (pObject->isGroupOwned() +		? (pObject->getOwnerName() + " " + getString("character_owner_group")) +		: pObject->getOwnerName()) +		: getString("character_owner_loading")) +		: getString("character_owner_unknown")); +} +  const LLColor4 &LLFloaterPathfindingCharacters::getBeaconColor() const  {  	return mBeaconColor; @@ -201,9 +211,9 @@ void LLFloaterPathfindingCharacters::onShowPhysicsCapsuleClicked()  	}  } -LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfindingCharacter *pCharacterPtr) const +LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListItemData(const LLPathfindingCharacter *pCharacterPtr) const  { -	LLSD columns; +	LLSD columns = LLSD::emptyArray();  	columns[0]["column"] = "name";  	columns[0]["value"] = pCharacterPtr->getName(); @@ -212,13 +222,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfi  	columns[1]["value"] = pCharacterPtr->getDescription();  	columns[2]["column"] = "owner"; -	columns[2]["value"] = (pCharacterPtr->hasOwner() -			? (pCharacterPtr->hasOwnerName() -			? (pCharacterPtr->isGroupOwned() -			? (pCharacterPtr->getOwnerName() + " " + getString("character_owner_group")) -			: pCharacterPtr->getOwnerName()) -			: getString("character_owner_loading")) -			: getString("character_owner_unknown")); +	columns[2]["value"] = getOwnerName(pCharacterPtr);  	S32 cpuTime = llround(pCharacterPtr->getCPUTime());  	std::string cpuTimeString = llformat("%d", cpuTime); @@ -231,11 +235,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListData(const LLPathfi  	columns[4]["column"] = "altitude";  	columns[4]["value"] = llformat("%1.0f m", pCharacterPtr->getLocation()[2]); -	LLSD element; -	element["id"] = pCharacterPtr->getUUID().asString(); -	element["column"] = columns; - -	return element; +	return columns;  }  void LLFloaterPathfindingCharacters::updateStateOnDisplayControls() diff --git a/indra/newview/llfloaterpathfindingcharacters.h b/indra/newview/llfloaterpathfindingcharacters.h index ef389ad428..4021f4f119 100644 --- a/indra/newview/llfloaterpathfindingcharacters.h +++ b/indra/newview/llfloaterpathfindingcharacters.h @@ -62,11 +62,13 @@ protected:  	virtual void                       requestGetObjects(); -	virtual LLSD                       convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); +	virtual void                       buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr);  	virtual void                       updateControlsOnScrollListChange();  	virtual S32                        getNameColumnIndex() const; +	virtual S32                        getOwnerNameColumnIndex() const; +	virtual std::string                getOwnerName(const LLPathfindingObject *pObject) const;  	virtual const LLColor4             &getBeaconColor() const;  	virtual LLPathfindingObjectListPtr getEmptyObjectList() const; @@ -74,7 +76,7 @@ protected:  private:  	void onShowPhysicsCapsuleClicked(); -	LLSD buildCharacterScrollListData(const LLPathfindingCharacter *pCharacterPtr) const; +	LLSD buildCharacterScrollListItemData(const LLPathfindingCharacter *pCharacterPtr) const;  	void updateStateOnDisplayControls();  	void showSelectedCharacterCapsules(); diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 877bd0822d..0fe0e151fb 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -215,7 +215,7 @@ void LLFloaterPathfindingLinksets::requestGetObjects()  	LLPathfindingManager::getInstance()->requestGetLinksets(getNewRequestId(), boost::bind(&LLFloaterPathfindingLinksets::handleNewObjectList, this, _1, _2, _3));  } -LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingLinksets::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)  {  	llassert(pObjectListPtr != NULL);  	llassert(!pObjectListPtr->isEmpty()); @@ -227,7 +227,6 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath  	bool isFilteringDescription = !descriptionFilter.empty();  	bool isFilteringLinksetUse = (linksetUseFilter != LLPathfindingLinkset::kUnknown); -	LLSD scrollListData = LLSD::emptyArray();  	const LLVector3& avatarPosition = gAgent.getPositionAgent();  	if (isFilteringName || isFilteringDescription || isFilteringLinksetUse) @@ -236,22 +235,21 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath  		LLStringUtil::toUpper(descriptionFilter);  		for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin();	objectIter != pObjectListPtr->end(); ++objectIter)  		{ -			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectIter->second.get()); +			const LLPathfindingObjectPtr objectPtr = objectIter->second; +			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); +			llassert(linksetPtr != NULL); +  			std::string linksetName = (linksetPtr->isTerrain() ? getString("linkset_terrain_name") : linksetPtr->getName());  			std::string linksetDescription = linksetPtr->getDescription();  			LLStringUtil::toUpper(linksetName);  			LLStringUtil::toUpper(linksetDescription); +  			if ((!isFilteringName || (linksetName.find(nameFilter) != std::string::npos)) &&  				(!isFilteringDescription || (linksetDescription.find(descriptionFilter) != std::string::npos)) &&  				(!isFilteringLinksetUse || (linksetPtr->getLinksetUse() == linksetUseFilter)))  			{ -				LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); -				scrollListData.append(element); - -				if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) -				{ -					rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); -				} +				LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition); +				addObjectToScrollList(objectPtr, scrollListItemData);  			}  		}  	} @@ -259,18 +257,14 @@ LLSD LLFloaterPathfindingLinksets::convertObjectsIntoScrollListData(const LLPath  	{  		for (LLPathfindingObjectList::const_iterator objectIter = pObjectListPtr->begin();	objectIter != pObjectListPtr->end(); ++objectIter)  		{ -			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectIter->second.get()); -			LLSD element = buildLinksetScrollListData(linksetPtr, avatarPosition); -			scrollListData.append(element); +			const LLPathfindingObjectPtr objectPtr = objectIter->second; +			const LLPathfindingLinkset *linksetPtr = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); +			llassert(linksetPtr != NULL); -			if (linksetPtr->hasOwner() && !linksetPtr->hasOwnerName()) -			{ -				rebuildScrollListAfterAvatarNameLoads(linksetPtr->getUUID()); -			} +			LLSD scrollListItemData = buildLinksetScrollListItemData(linksetPtr, avatarPosition); +			addObjectToScrollList(objectPtr, scrollListItemData);  		}  	} - -	return scrollListData;  }  void LLFloaterPathfindingLinksets::updateControlsOnScrollListChange() @@ -286,6 +280,22 @@ S32 LLFloaterPathfindingLinksets::getNameColumnIndex() const  	return 0;  } +S32 LLFloaterPathfindingLinksets::getOwnerNameColumnIndex() const +{ +	return 2; +} + +std::string LLFloaterPathfindingLinksets::getOwnerName(const LLPathfindingObject *pObject) const +{ +	return (pObject->hasOwner() +		? (pObject->hasOwnerName() +		? (pObject->isGroupOwned() +		? (pObject->getOwnerName() + " " + getString("linkset_owner_group")) +		: pObject->getOwnerName()) +		: getString("linkset_owner_loading")) +		: getString("linkset_owner_unknown")); +} +  const LLColor4 &LLFloaterPathfindingLinksets::getBeaconColor() const  {  	return mBeaconColor; @@ -373,10 +383,10 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues()  	}  } -LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const +LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListItemData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const  {  	llassert(pLinksetPtr != NULL); -	LLSD columns; +	LLSD columns = LLSD::emptyArray();  	if (pLinksetPtr->isTerrain())  	{ @@ -389,11 +399,14 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin  		columns[2]["column"] = "owner";  		columns[2]["value"] = getString("linkset_terrain_owner"); -		columns[3]["column"] = "land_impact"; -		columns[3]["value"] = getString("linkset_terrain_land_impact"); +		columns[3]["column"] = "scripted"; +		columns[3]["value"] = getString("linkset_terrain_scripted"); -		columns[4]["column"] = "dist_from_you"; -		columns[4]["value"] = getString("linkset_terrain_dist_from_you"); +		columns[4]["column"] = "land_impact"; +		columns[4]["value"] = getString("linkset_terrain_land_impact"); + +		columns[5]["column"] = "dist_from_you"; +		columns[5]["value"] = getString("linkset_terrain_dist_from_you");  	}  	else  	{ @@ -404,22 +417,23 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin  		columns[1]["value"] = pLinksetPtr->getDescription();  		columns[2]["column"] = "owner"; -		columns[2]["value"] = (pLinksetPtr->hasOwner() -			? (pLinksetPtr->hasOwnerName() -			? (pLinksetPtr->isGroupOwned() -			? (pLinksetPtr->getOwnerName() + " " + getString("linkset_owner_group")) -			: pLinksetPtr->getOwnerName()) -			: getString("linkset_owner_loading")) -			: getString("linkset_owner_unknown")); - -		columns[3]["column"] = "land_impact"; -		columns[3]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); - -		columns[4]["column"] = "dist_from_you"; -		columns[4]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation())); +		columns[2]["value"] = getOwnerName(pLinksetPtr); + +		columns[3]["column"] = "scripted"; +		columns[3]["value"] = (pLinksetPtr->hasIsScripted() +			? (pLinksetPtr->isScripted() +			? getString("linkset_is_scripted") +			: getString("linkset_is_not_scripted")) +			: getString("linkset_is_unknown_scripted")); + +		columns[4]["column"] = "land_impact"; +		columns[4]["value"] = llformat("%1d", pLinksetPtr->getLandImpact()); + +		columns[5]["column"] = "dist_from_you"; +		columns[5]["value"] = llformat("%1.0f m", dist_vec(pAvatarPosition, pLinksetPtr->getLocation()));  	} -	columns[5]["column"] = "linkset_use"; +	columns[6]["column"] = "linkset_use";  	std::string linksetUse = getLinksetUseString(pLinksetPtr->getLinksetUse());  	if (pLinksetPtr->isTerrain())  	{ @@ -437,25 +451,21 @@ LLSD LLFloaterPathfindingLinksets::buildLinksetScrollListData(const LLPathfindin  	{  		linksetUse += (" " + getString("linkset_is_restricted_non_volume_state"));  	} -	columns[5]["value"] = linksetUse; - -	columns[6]["column"] = "a_percent"; -	columns[6]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); +	columns[6]["value"] = linksetUse; -	columns[7]["column"] = "b_percent"; -	columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); +	columns[7]["column"] = "a_percent"; +	columns[7]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientA()); -	columns[8]["column"] = "c_percent"; -	columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); +	columns[8]["column"] = "b_percent"; +	columns[8]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientB()); -	columns[9]["column"] = "d_percent"; -	columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); +	columns[9]["column"] = "c_percent"; +	columns[9]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientC()); -	LLSD element; -	element["id"] = pLinksetPtr->getUUID().asString(); -	element["column"] = columns; +	columns[10]["column"] = "d_percent"; +	columns[10]["value"] = llformat("%3d", pLinksetPtr->getWalkabilityCoefficientD()); -	return element; +	return columns;  }  LLSD LLFloaterPathfindingLinksets::buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const @@ -490,6 +500,23 @@ bool LLFloaterPathfindingLinksets::isShowUnmodifiablePhantomWarning(LLPathfindin  	return isShowWarning;  } +bool LLFloaterPathfindingLinksets::isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ +	bool isShowWarning = false; + +	if (pLinksetUse != LLPathfindingLinkset::kUnknown) +	{ +		LLPathfindingObjectListPtr selectedObjects = getSelectedObjects(); +		if ((selectedObjects != NULL) && !selectedObjects->isEmpty()) +		{ +			const LLPathfindingLinksetList *linksetList = dynamic_cast<const LLPathfindingLinksetList *>(selectedObjects.get()); +			isShowWarning = linksetList->isShowPhantomToggleWarning(pLinksetUse); +		} +	} + +	return isShowWarning; +} +  bool LLFloaterPathfindingLinksets::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const  {  	bool isShowWarning = false; @@ -559,29 +586,41 @@ void LLFloaterPathfindingLinksets::applyEdit()  {  	LLPathfindingLinkset::ELinksetUse linksetUse = getEditLinksetUse(); +	bool showPhantomToggleWarning = isShowPhantomToggleWarning(linksetUse);  	bool showUnmodifiablePhantomWarning = isShowUnmodifiablePhantomWarning(linksetUse);  	bool showCannotBeVolumeWarning = isShowCannotBeVolumeWarning(linksetUse); -	if (showUnmodifiablePhantomWarning || showCannotBeVolumeWarning) +	if (showPhantomToggleWarning || showUnmodifiablePhantomWarning || showCannotBeVolumeWarning)  	{  		LLPathfindingLinkset::ELinksetUse restrictedLinksetUse = LLPathfindingLinkset::getLinksetUseWithToggledPhantom(linksetUse);  		LLSD substitutions;  		substitutions["REQUESTED_TYPE"] = getLinksetUseString(linksetUse);  		substitutions["RESTRICTED_TYPE"] = getLinksetUseString(restrictedLinksetUse); -		std::string notificationName; -		if (showUnmodifiablePhantomWarning && showCannotBeVolumeWarning) +		// Build one of the following notifications names +		//   - PathfindingLinksets_WarnOnPhantom +		//   - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted +		//   - PathfindingLinksets_WarnOnPhantom_MismatchOnVolume +		//   - PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted_MismatchOnVolume +		//   - PathfindingLinksets_MismatchOnRestricted +		//   - PathfindingLinksets_MismatchOnVolume +		//   - PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume + +		std::string notificationName = "PathfindingLinksets"; + +		if (showPhantomToggleWarning)  		{ -			notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume"; +			notificationName += "_WarnOnPhantom";  		} -		else if (showUnmodifiablePhantomWarning) +		if (showUnmodifiablePhantomWarning)  		{ -			notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnRestricted"; +			notificationName += "_MismatchOnRestricted";  		} -		else +		if (showCannotBeVolumeWarning)  		{ -			notificationName = "PathfindingLinksets_SetLinksetUseMismatchOnVolume"; +			notificationName += "_MismatchOnVolume";  		} +  		LLNotificationsUtil::add(notificationName, substitutions, LLSD(), boost::bind(&LLFloaterPathfindingLinksets::handleApplyEdit, this, _1, _2));  	}  	else diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h index 342a64fc77..6538308122 100644 --- a/indra/newview/llfloaterpathfindinglinksets.h +++ b/indra/newview/llfloaterpathfindinglinksets.h @@ -58,11 +58,13 @@ protected:  	virtual void                       requestGetObjects(); -	virtual LLSD                       convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); +	virtual void                       buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr);  	virtual void                       updateControlsOnScrollListChange();  	virtual S32                        getNameColumnIndex() const; +	virtual S32                        getOwnerNameColumnIndex() const; +	virtual std::string                getOwnerName(const LLPathfindingObject *pObject) const;  	virtual const LLColor4             &getBeaconColor() const;  	virtual LLPathfindingObjectListPtr getEmptyObjectList() const; @@ -78,10 +80,11 @@ private:  	void clearFilters();  	void updateEditFieldValues(); -	LLSD buildLinksetScrollListData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const; +	LLSD buildLinksetScrollListItemData(const LLPathfindingLinkset *pLinksetPtr, const LLVector3 &pAvatarPosition) const;  	LLSD buildLinksetUseScrollListData(const std::string &pLabel, S32 pValue) const;  	bool isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; +	bool isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	bool isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	void updateStateOnEditFields(); diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp index e246265be9..20c1215bcb 100644 --- a/indra/newview/llfloaterpathfindingobjects.cpp +++ b/indra/newview/llfloaterpathfindingobjects.cpp @@ -29,6 +29,8 @@  #include "llfloaterpathfindingobjects.h" +#include <string> +#include <map>  #include <vector>  #include <boost/bind.hpp> @@ -96,7 +98,6 @@ void LLFloaterPathfindingObjects::onOpen(const LLSD &pKey)  void LLFloaterPathfindingObjects::onClose(bool pIsAppQuitting)  { -	  	if (mGodLevelChangeSlot.connected())  	{  		mGodLevelChangeSlot.disconnect(); @@ -119,6 +120,11 @@ void LLFloaterPathfindingObjects::onClose(bool pIsAppQuitting)  	{  		mObjectsSelection.clear();  	} + +	if (pIsAppQuitting) +	{ +		clearAllObjects(); +	}  }  void LLFloaterPathfindingObjects::draw() @@ -168,13 +174,13 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed)  	mReturnButton(NULL),  	mDeleteButton(NULL),  	mTeleportButton(NULL), -	mLoadingAvatarNames(),  	mDefaultBeaconColor(),  	mDefaultBeaconTextColor(),  	mErrorTextColor(),  	mWarningTextColor(),  	mMessagingState(kMessagingUnknown),  	mMessagingRequestId(0U), +	mMissingNameObjectsScrollListItems(),  	mObjectList(),  	mObjectsSelection(),  	mHasObjectsToBeSelected(false), @@ -186,6 +192,7 @@ LLFloaterPathfindingObjects::LLFloaterPathfindingObjects(const LLSD &pSeed)  LLFloaterPathfindingObjects::~LLFloaterPathfindingObjects()  { +	clearAllObjects();  }  BOOL LLFloaterPathfindingObjects::postBuild() @@ -343,54 +350,21 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList()  	S32 origScrollPosition = mObjectsScrollList->getScrollPos();  	mObjectsScrollList->deleteAllItems(); +	mMissingNameObjectsScrollListItems.clear();  	if ((mObjectList != NULL) && !mObjectList->isEmpty())  	{ -		LLSD scrollListData = convertObjectsIntoScrollListData(mObjectList); -		llassert(scrollListData.isArray()); +		buildObjectsScrollList(mObjectList); -		LLScrollListCell::Params cellParams; -		cellParams.font = LLFontGL::getFontSansSerif(); - -		for (LLSD::array_const_iterator rowElementIter = scrollListData.beginArray(); rowElementIter != scrollListData.endArray(); ++rowElementIter) +		mObjectsScrollList->selectMultiple(mObjectsToBeSelected); +		if (mHasObjectsToBeSelected)  		{ -			const LLSD &rowElement = *rowElementIter; - -			LLScrollListItem::Params rowParams; -			llassert(rowElement.has("id")); -			llassert(rowElement.get("id").isString()); -			rowParams.value = rowElement.get("id"); - -			llassert(rowElement.has("column")); -			llassert(rowElement.get("column").isArray()); -			const LLSD &columnElement = rowElement.get("column"); -			for (LLSD::array_const_iterator cellIter = columnElement.beginArray(); cellIter != columnElement.endArray(); ++cellIter) -			{ -				const LLSD &cellElement = *cellIter; - -				llassert(cellElement.has("column")); -				llassert(cellElement.get("column").isString()); -				cellParams.column = cellElement.get("column").asString(); - -				llassert(cellElement.has("value")); -				llassert(cellElement.get("value").isString()); -				cellParams.value = cellElement.get("value").asString(); - -				rowParams.columns.add(cellParams); -			} - -			mObjectsScrollList->addRow(rowParams); +			mObjectsScrollList->scrollToShowSelected(); +		} +		else +		{ +			mObjectsScrollList->setScrollPos(origScrollPosition);  		} -	} - -	mObjectsScrollList->selectMultiple(mObjectsToBeSelected); -	if (mHasObjectsToBeSelected) -	{ -		mObjectsScrollList->scrollToShowSelected(); -	} -	else -	{ -		mObjectsScrollList->setScrollPos(origScrollPosition);  	}  	mObjectsToBeSelected.clear(); @@ -399,20 +373,42 @@ void LLFloaterPathfindingObjects::rebuildObjectsScrollList()  	updateControlsOnScrollListChange();  } -LLSD LLFloaterPathfindingObjects::convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr) +void LLFloaterPathfindingObjects::buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr)  {  	llassert(0); -	LLSD nullObjs = LLSD::emptyArray(); -	return nullObjs;  } -void LLFloaterPathfindingObjects::rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId) +void LLFloaterPathfindingObjects::addObjectToScrollList(const LLPathfindingObjectPtr pObjectPtr, const LLSD &pScrollListItemData)  { -	std::set<LLUUID>::const_iterator iter = mLoadingAvatarNames.find(pAvatarId); -	if (iter == mLoadingAvatarNames.end()) +	LLScrollListCell::Params cellParams; +	cellParams.font = LLFontGL::getFontSansSerif(); + +	LLScrollListItem::Params rowParams; +	rowParams.value = pObjectPtr->getUUID().asString(); + +	llassert(pScrollListItemData.isArray()); +	for (LLSD::array_const_iterator cellIter = pScrollListItemData.beginArray(); +		cellIter != pScrollListItemData.endArray(); ++cellIter) +	{ +		const LLSD &cellElement = *cellIter; + +		llassert(cellElement.has("column")); +		llassert(cellElement.get("column").isString()); +		cellParams.column = cellElement.get("column").asString(); + +		llassert(cellElement.has("value")); +		llassert(cellElement.get("value").isString()); +		cellParams.value = cellElement.get("value").asString(); + +		rowParams.columns.add(cellParams); +	} + +	LLScrollListItem *scrollListItem = mObjectsScrollList->addRow(rowParams); + +	if (pObjectPtr->hasOwner() && !pObjectPtr->hasOwnerName())  	{ -		mLoadingAvatarNames.insert(pAvatarId); -		LLAvatarNameCache::get(pAvatarId, boost::bind(&LLFloaterPathfindingObjects::handleAvatarNameLoads, this, _1, _2)); +		mMissingNameObjectsScrollListItems.insert(std::make_pair<std::string, LLScrollListItem *>(pObjectPtr->getUUID().asString(), scrollListItem)); +		pObjectPtr->registerOwnerNameListener(boost::bind(&LLFloaterPathfindingObjects::handleObjectNameResponse, this, _1));  	}  } @@ -434,6 +430,18 @@ S32 LLFloaterPathfindingObjects::getNameColumnIndex() const  	return 0;  } +S32 LLFloaterPathfindingObjects::getOwnerNameColumnIndex() const +{ +	return 2; +} + +std::string LLFloaterPathfindingObjects::getOwnerName(const LLPathfindingObject *pObject) const +{ +	llassert(0); +	std::string returnVal; +	return returnVal; +} +  const LLColor4 &LLFloaterPathfindingObjects::getBeaconColor() const  {  	return mDefaultBeaconColor; @@ -496,6 +504,7 @@ void LLFloaterPathfindingObjects::clearAllObjects()  {  	selectNoneObjects();  	mObjectsScrollList->deleteAllItems(); +	mMissingNameObjectsScrollListItems.clear();  	mObjectList.reset();  } @@ -683,13 +692,22 @@ void LLFloaterPathfindingObjects::onGodLevelChange(U8 pGodLevel)  	requestGetObjects();  } -void LLFloaterPathfindingObjects::handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName) +void LLFloaterPathfindingObjects::handleObjectNameResponse(const LLPathfindingObject *pObject)  { -	llassert(mLoadingAvatarNames.find(pAvatarId) != mLoadingAvatarNames.end()); -	mLoadingAvatarNames.erase(pAvatarId); -	if (mLoadingAvatarNames.empty()) +	llassert(pObject != NULL); +	const std::string uuid = pObject->getUUID().asString(); +	scroll_list_item_map::iterator scrollListItemIter = mMissingNameObjectsScrollListItems.find(uuid); +	if (scrollListItemIter != mMissingNameObjectsScrollListItems.end())  	{ -		rebuildObjectsScrollList(); +		LLScrollListItem *scrollListItem = scrollListItemIter->second; +		llassert(scrollListItem != NULL); + +		LLScrollListCell *scrollListCell = scrollListItem->getColumn(getOwnerNameColumnIndex()); +		LLSD ownerName = getOwnerName(pObject); + +		scrollListCell->setValue(ownerName); + +		mMissingNameObjectsScrollListItems.erase(scrollListItemIter);  	}  } diff --git a/indra/newview/llfloaterpathfindingobjects.h b/indra/newview/llfloaterpathfindingobjects.h index e8d446b598..4024e15fd6 100644 --- a/indra/newview/llfloaterpathfindingobjects.h +++ b/indra/newview/llfloaterpathfindingobjects.h @@ -27,7 +27,8 @@  #ifndef LL_LLFLOATERPATHFINDINGOBJECTS_H  #define LL_LLFLOATERPATHFINDINGOBJECTS_H -#include <set> +#include <string> +#include <map>  #include <boost/signals2.hpp> @@ -80,14 +81,15 @@ protected:  	void                               handleUpdateObjectList(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::ERequestStatus pRequestStatus, LLPathfindingObjectListPtr pObjectList);  	void                               rebuildObjectsScrollList(); -	virtual LLSD                       convertObjectsIntoScrollListData(const LLPathfindingObjectListPtr pObjectListPtr); - -	void                               rebuildScrollListAfterAvatarNameLoads(const LLUUID &pAvatarId); +	virtual void                       buildObjectsScrollList(const LLPathfindingObjectListPtr pObjectListPtr); +	void                               addObjectToScrollList(const LLPathfindingObjectPtr pObjectPr, const LLSD &pScrollListItemData);  	virtual void                       updateControlsOnScrollListChange();  	virtual void                       updateControlsOnInWorldSelectionChange();  	virtual S32                        getNameColumnIndex() const; +	virtual S32                        getOwnerNameColumnIndex() const; +	virtual std::string                getOwnerName(const LLPathfindingObject *pObject) const;  	virtual const LLColor4             &getBeaconColor() const;  	virtual const LLColor4             &getBeaconTextColor() const;  	virtual S32                        getBeaconWidth() const; @@ -126,7 +128,7 @@ private:  	void                   onRegionBoundaryCrossed();  	void                   onGodLevelChange(U8 pGodLevel); -	void                   handleAvatarNameLoads(const LLUUID &pAvatarId, const LLAvatarName &pAvatarName); +	void                   handleObjectNameResponse(const LLPathfindingObject *pObject);  	void                   updateMessagingStatus();  	void                   updateStateOnListControls(); @@ -151,8 +153,6 @@ private:  	LLButton                           *mDeleteButton;  	LLButton                           *mTeleportButton; -	std::set<LLUUID>                   mLoadingAvatarNames; -  	LLColor4                           mDefaultBeaconColor;  	LLColor4                           mDefaultBeaconTextColor;  	LLColor4                           mErrorTextColor; @@ -161,6 +161,9 @@ private:  	EMessagingState                    mMessagingState;  	LLPathfindingManager::request_id_t mMessagingRequestId; +	typedef std::map<std::string, LLScrollListItem *> scroll_list_item_map; +	scroll_list_item_map               mMissingNameObjectsScrollListItems; +  	LLPathfindingObjectListPtr         mObjectList;  	LLObjectSelectionHandle            mObjectsSelection; diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 4d38f5834e..7cf358c8e5 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -133,7 +133,6 @@ public:  		if(tools_floater)  		{  			tools_floater->updateLandImpacts(); -			tools_floater->dirty();  		}  	}  }; diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index 35b9f404c3..4d0bd623f8 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -328,11 +328,11 @@ void LLIMFloaterContainer::setVisible(BOOL visible)  	// We need to show/hide all the associated conversations that have been torn off  	// (and therefore, are not longer managed by the multifloater),  	// so that they show/hide with the conversations manager. -	conversations_widgets_map::iterator item_it = mConversationsWidgets.begin(); -	for (;item_it != mConversationsWidgets.end(); ++item_it) +	conversations_widgets_map::iterator widget_it = mConversationsWidgets.begin(); +	for (;widget_it != mConversationsWidgets.end(); ++widget_it)  	{ -		LLConversationViewSession* item = dynamic_cast<LLConversationViewSession*>(item_it->second); -		item->setVisibleIfDetached(visible); +		LLConversationViewSession* widget = dynamic_cast<LLConversationViewSession*>(widget_it->second); +		widget->setVisibleIfDetached(visible);  	}  	// Now, do the normal multifloater show/hide @@ -471,7 +471,7 @@ void LLIMFloaterContainer::addConversationListItem(const LLUUID& uuid)  	removeConversationListItem(uuid,false);  	// Create a conversation item -	LLConversationItem* item = new LLConversationItem(display_name, uuid, getRootViewModel()); +	LLConversationItem* item = new LLConversationItemSession(display_name, uuid, getRootViewModel());  	mConversationsItems[uuid] = item;  	// Create a widget from it @@ -513,11 +513,11 @@ void LLIMFloaterContainer::removeConversationListItem(const LLUUID& uuid, bool c  	if (change_focus)  	{  		setFocus(TRUE); -		conversations_items_map::iterator item_it = mConversationsItems.begin(); -		if (item_it != mConversationsItems.end()) +		conversations_widgets_map::iterator widget_it = mConversationsWidgets.begin(); +		if (widget_it != mConversationsWidgets.end())  		{ -			LLConversationItem* item = item_it->second; -			item->selectItem(); +			LLFolderViewItem* widget = widget_it->second; +			widget->selectItem();  		}  	}  } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 91798e0f10..745375fe3d 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1153,7 +1153,7 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,  		default:  			llinfos << "Unhandled asset type (llassetstorage.h): "  					<< (S32)asset_type << " (" << LLAssetType::lookup(asset_type) << ")" << llendl; -			break;	 +			break;  	}  	if (new_listener) @@ -1548,7 +1548,7 @@ void LLItemBridge::buildDisplayName() const  	else  	{  		mDisplayName.assign(LLStringUtil::null); -	} +}  	mSearchableName.assign(mDisplayName);  	mSearchableName.append(getLabelSuffix()); @@ -1556,10 +1556,10 @@ void LLItemBridge::buildDisplayName() const      //Name set, so trigger a sort      if(mParent) -    { +{          mParent->requestSort(); -    } -} +	} +	}  LLFontGL::StyleFlags LLItemBridge::getLabelStyle() const  { @@ -1692,7 +1692,7 @@ BOOL LLItemBridge::removeItem()  	{  		return FALSE;  	} -	 +  	// move it to the trash  	LLPreview::hide(mUUID, TRUE);  	LLInventoryModel* model = getInventoryModel(); @@ -3476,9 +3476,9 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t&   items  			// it's all on its way - add an observer, and the inventory will call done for us when everything is here.  			inc_busy_count();  			gInventory.addObserver(fetch); -		}  	}  } +}  void LLFolderBridge::buildContextMenuFolderOptions(U32 flags,   menuentry_vec_t& items, menuentry_vec_t& disabled_items)  { @@ -6521,16 +6521,16 @@ LLInvFVBridge* LLRecentInventoryBridgeBuilder::createBridge(  		new_listener = new LLRecentItemsFolderBridge(inv_type, inventory, root, uuid);  	}  	else -	{ +		{  		new_listener = LLInventoryFolderViewModelBuilder::createBridge(asset_type, -																actual_asset_type, -																inv_type, -																inventory, +				actual_asset_type, +				inv_type, +				inventory,  																view_model, -																root, -																uuid, -																flags); -	} +				root, +				uuid, +				flags); +		}  	return new_listener;  } diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index a8049b1b03..44ff62e290 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -145,12 +145,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	// change z sort of clickable text to be behind buttons  	sendChildToBack(getChildView("forgot_password_text")); - -	if(LLStartUp::getStartSLURL().getType() != LLSLURL::LOCATION) -	{ -		LLSLURL slurl(gSavedSettings.getString("LoginLocation")); -		LLStartUp::setStartSLURL(slurl); -	}  	LLComboBox* location_combo = getChild<LLComboBox>("start_location_combo");  	updateLocationSelectorsVisibility(); // separate so that it can be called from preferences @@ -182,6 +176,29 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  							 ADD_TOP);	  	server_choice_combo->selectFirstItem();		 +	LLSLURL start_slurl(LLStartUp::getStartSLURL()); +	if ( !start_slurl.isSpatial() ) // has a start been established by the command line or NextLoginLocation ?  +	{ +		// no, so get the preference setting +		std::string defaultStartLocation = gSavedSettings.getString("LoginLocation"); +		LL_INFOS("AppInit")<<"default LoginLocation '"<<defaultStartLocation<<"'"<<LL_ENDL; +		LLSLURL defaultStart(defaultStartLocation); +		if ( defaultStart.isSpatial() ) +		{ +			LLStartUp::setStartSLURL(defaultStart); +		} +		else +		{ +			LL_INFOS("AppInit")<<"no valid LoginLocation, using home"<<LL_ENDL; +			LLSLURL homeStart(LLSLURL::SIM_LOCATION_HOME); +			LLStartUp::setStartSLURL(homeStart); +		} +	} +	else +	{ +		LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed +	} +	  	childSetAction("connect_btn", onClickConnect, this);  	getChild<LLPanel>("login")->setDefaultBtn("connect_btn"); @@ -645,8 +662,11 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)  	 * specify a particular grid; in those cases we want to change the grid  	 * and the grid selector to match the new value.  	 */ -	if ( LLSLURL::LOCATION == new_start_slurl.getType() ) +	enum LLSLURL::SLURL_TYPE new_slurl_type = new_start_slurl.getType(); +	switch ( new_slurl_type )  	{ +	case LLSLURL::LOCATION: +	  {  		std::string slurl_grid = LLGridManager::getInstance()->getGrid(new_start_slurl.getGrid());  		if ( ! slurl_grid.empty() ) // is that a valid grid?  		{ @@ -668,8 +688,24 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)  		{  			// the grid specified by the slurl is not known  			LLNotificationsUtil::add("InvalidLocationSLURL"); +			LL_WARNS("AppInit")<<"invalid LoginLocation:"<<new_start_slurl.asString()<<LL_ENDL;  			location_combo->setTextEntry(LLStringUtil::null);  		} +	  } + 	break; + +	case LLSLURL::HOME_LOCATION: +		location_combo->setCurrentByIndex(1); // home location +		break; +		 +	case LLSLURL::LAST_LOCATION: +		location_combo->setCurrentByIndex(0); // last location +		break; + +	default: +		LL_WARNS("AppInit")<<"invalid login slurl, using home"<<LL_ENDL; +		location_combo->setCurrentByIndex(1); // home location +		break;  	}  } diff --git a/indra/newview/llpathfindinglinkset.cpp b/indra/newview/llpathfindinglinkset.cpp index fe4daabd89..50b76378f5 100644 --- a/indra/newview/llpathfindinglinkset.cpp +++ b/indra/newview/llpathfindinglinkset.cpp @@ -39,6 +39,7 @@  #define LINKSET_MODIFIABLE_FIELD    "modifiable"  #define LINKSET_CATEGORY_FIELD      "navmesh_category"  #define LINKSET_CAN_BE_VOLUME       "can_be_volume" +#define LINKSET_IS_SCRIPTED_FIELD   "is_scripted"  #define LINKSET_PHANTOM_FIELD       "phantom"  #define LINKSET_WALKABILITY_A_FIELD "A"  #define LINKSET_WALKABILITY_B_FIELD "B" @@ -62,6 +63,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLSD& pTerrainData)  	mLandImpact(0U),  	mIsModifiable(FALSE),  	mCanBeVolume(FALSE), +	mIsScripted(FALSE), +	mHasIsScripted(TRUE),  	mLinksetUse(kUnknown),  	mWalkabilityCoefficientA(MIN_WALKABILITY_VALUE),  	mWalkabilityCoefficientB(MIN_WALKABILITY_VALUE), @@ -77,6 +80,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const std::string &pUUID, const LLSD&  	mLandImpact(0U),  	mIsModifiable(TRUE),  	mCanBeVolume(TRUE), +	mIsScripted(FALSE), +	mHasIsScripted(FALSE),  	mLinksetUse(kUnknown),  	mWalkabilityCoefficientA(MIN_WALKABILITY_VALUE),  	mWalkabilityCoefficientB(MIN_WALKABILITY_VALUE), @@ -93,6 +98,8 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLPathfindingLinkset& pOther)  	mLandImpact(pOther.mLandImpact),  	mIsModifiable(pOther.mIsModifiable),  	mCanBeVolume(pOther.mCanBeVolume), +	mIsScripted(pOther.mIsScripted), +	mHasIsScripted(pOther.mHasIsScripted),  	mLinksetUse(pOther.mLinksetUse),  	mWalkabilityCoefficientA(pOther.mWalkabilityCoefficientA),  	mWalkabilityCoefficientB(pOther.mWalkabilityCoefficientB), @@ -113,6 +120,8 @@ LLPathfindingLinkset& LLPathfindingLinkset::operator =(const LLPathfindingLinkse  	mLandImpact = pOther.mLandImpact;  	mIsModifiable = pOther.mIsModifiable;  	mCanBeVolume = pOther.mCanBeVolume; +	mIsScripted = pOther.mIsScripted; +	mHasIsScripted = pOther.mHasIsScripted;  	mLinksetUse = pOther.mLinksetUse;  	mWalkabilityCoefficientA = pOther.mWalkabilityCoefficientA;  	mWalkabilityCoefficientB = pOther.mWalkabilityCoefficientB; @@ -140,6 +149,11 @@ bool LLPathfindingLinkset::isShowUnmodifiablePhantomWarning(ELinksetUse pLinkset  	return (!isModifiable() && (isPhantom() != isPhantom(pLinksetUse)));  } +bool LLPathfindingLinkset::isShowPhantomToggleWarning(ELinksetUse pLinksetUse) const +{ +	return (isModifiable() && (isPhantom() != isPhantom(pLinksetUse))); +} +  bool LLPathfindingLinkset::isShowCannotBeVolumeWarning(ELinksetUse pLinksetUse) const  {  	return (!canBeVolume() && ((pLinksetUse == kMaterialVolume) || (pLinksetUse == kExclusionVolume))); @@ -193,6 +207,13 @@ void LLPathfindingLinkset::parseLinksetData(const LLSD &pLinksetData)  	llassert(pLinksetData.has(LINKSET_MODIFIABLE_FIELD));  	llassert(pLinksetData.get(LINKSET_MODIFIABLE_FIELD).isBoolean());  	mIsModifiable = pLinksetData.get(LINKSET_MODIFIABLE_FIELD).asBoolean(); + +	mHasIsScripted = pLinksetData.has(LINKSET_IS_SCRIPTED_FIELD); +	if (mHasIsScripted) +	{ +		llassert(pLinksetData.get(LINKSET_IS_SCRIPTED_FIELD).isBoolean()); +		mIsScripted = pLinksetData.get(LINKSET_IS_SCRIPTED_FIELD).asBoolean(); +	}  }  void LLPathfindingLinkset::parsePathfindingData(const LLSD &pLinksetData) diff --git a/indra/newview/llpathfindinglinkset.h b/indra/newview/llpathfindinglinkset.h index 73b4d6bad4..308a3a1e0f 100644 --- a/indra/newview/llpathfindinglinkset.h +++ b/indra/newview/llpathfindinglinkset.h @@ -63,12 +63,16 @@ public:  	inline ELinksetUse getLinksetUse() const               {return mLinksetUse;}; +	inline BOOL        isScripted() const                  {return mIsScripted;}; +	inline BOOL        hasIsScripted() const               {return mHasIsScripted;}; +  	inline S32         getWalkabilityCoefficientA() const  {return mWalkabilityCoefficientA;};  	inline S32         getWalkabilityCoefficientB() const  {return mWalkabilityCoefficientB;};  	inline S32         getWalkabilityCoefficientC() const  {return mWalkabilityCoefficientC;};  	inline S32         getWalkabilityCoefficientD() const  {return mWalkabilityCoefficientD;};  	bool               isShowUnmodifiablePhantomWarning(ELinksetUse pLinksetUse) const; +	bool               isShowPhantomToggleWarning(ELinksetUse pLinksetUse) const;  	bool               isShowCannotBeVolumeWarning(ELinksetUse pLinksetUse) const;  	LLSD               encodeAlteredFields(ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const; @@ -98,6 +102,8 @@ private:  	U32          mLandImpact;  	BOOL         mIsModifiable;  	BOOL         mCanBeVolume; +	BOOL         mIsScripted; +	BOOL         mHasIsScripted;  	ELinksetUse  mLinksetUse;  	S32          mWalkabilityCoefficientA;  	S32          mWalkabilityCoefficientB; diff --git a/indra/newview/llpathfindinglinksetlist.cpp b/indra/newview/llpathfindinglinksetlist.cpp index 746fa342a1..b886e46765 100644 --- a/indra/newview/llpathfindinglinksetlist.cpp +++ b/indra/newview/llpathfindinglinksetlist.cpp @@ -113,6 +113,20 @@ bool LLPathfindingLinksetList::isShowUnmodifiablePhantomWarning(LLPathfindingLin  	return isShowWarning;  } +bool LLPathfindingLinksetList::isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const +{ +	bool isShowWarning = false; + +	for (const_iterator objectIter = begin(); !isShowWarning && (objectIter != end()); ++objectIter) +	{ +		const LLPathfindingObjectPtr objectPtr = objectIter->second; +		const LLPathfindingLinkset *linkset = dynamic_cast<const LLPathfindingLinkset *>(objectPtr.get()); +		isShowWarning = linkset->isShowPhantomToggleWarning(pLinksetUse); +	} + +	return isShowWarning; +} +  bool LLPathfindingLinksetList::isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const  {  	bool isShowWarning = false; diff --git a/indra/newview/llpathfindinglinksetlist.h b/indra/newview/llpathfindinglinksetlist.h index 77c6358640..1d38e4c11a 100644 --- a/indra/newview/llpathfindinglinksetlist.h +++ b/indra/newview/llpathfindinglinksetlist.h @@ -43,6 +43,7 @@ public:  	LLSD encodeTerrainFields(LLPathfindingLinkset::ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const;  	bool isShowUnmodifiablePhantomWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const; +	bool isShowPhantomToggleWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	bool isShowCannotBeVolumeWarning(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;  	void determinePossibleStates(BOOL &pCanBeWalkable, BOOL &pCanBeStaticObstacle, BOOL &pCanBeDynamicObstacle, diff --git a/indra/newview/llpathfindingobject.cpp b/indra/newview/llpathfindingobject.cpp index 916eceb4c8..858d3203c0 100644 --- a/indra/newview/llpathfindingobject.cpp +++ b/indra/newview/llpathfindingobject.cpp @@ -55,8 +55,10 @@ LLPathfindingObject::LLPathfindingObject()  	mOwnerUUID(),  	mHasOwnerName(false),  	mOwnerName(), +	mAvatarNameCacheConnection(),  	mIsGroupOwned(false), -	mLocation() +	mLocation(), +	mOwnerNameSignal()  {  } @@ -67,8 +69,10 @@ LLPathfindingObject::LLPathfindingObject(const std::string &pUUID, const LLSD &p  	mOwnerUUID(),  	mHasOwnerName(false),  	mOwnerName(), +	mAvatarNameCacheConnection(),  	mIsGroupOwned(false), -	mLocation() +	mLocation(), +	mOwnerNameSignal()  {  	parseObjectData(pObjectData);  } @@ -80,14 +84,17 @@ LLPathfindingObject::LLPathfindingObject(const LLPathfindingObject& pOther)  	mOwnerUUID(pOther.mOwnerUUID),  	mHasOwnerName(false),  	mOwnerName(), +	mAvatarNameCacheConnection(),  	mIsGroupOwned(pOther.mIsGroupOwned), -	mLocation(pOther.mLocation) +	mLocation(pOther.mLocation), +	mOwnerNameSignal()  {  	fetchOwnerName();  }  LLPathfindingObject::~LLPathfindingObject()  { +	disconnectAvatarNameCacheConnection();  }  LLPathfindingObject &LLPathfindingObject::operator =(const LLPathfindingObject& pOther) @@ -115,6 +122,23 @@ std::string LLPathfindingObject::getOwnerName() const  	return ownerName;  } +LLPathfindingObject::name_connection_t LLPathfindingObject::registerOwnerNameListener(name_callback_t pOwnerNameCallback) +{ +	llassert(hasOwner()); + +	name_connection_t connection; +	if (hasOwnerName()) +	{ +		pOwnerNameCallback(this); +	} +	else +	{ +		connection = mOwnerNameSignal.connect(pOwnerNameCallback); +	} + +	return connection; +} +  void LLPathfindingObject::parseObjectData(const LLSD &pObjectData)  {  	llassert(pObjectData.has(PATHFINDING_OBJECT_NAME_FIELD)); @@ -149,7 +173,7 @@ void LLPathfindingObject::fetchOwnerName()  		mHasOwnerName = LLAvatarNameCache::get(mOwnerUUID, &mOwnerName);  		if (!mHasOwnerName)  		{ -			LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2)); +			mAvatarNameCacheConnection = LLAvatarNameCache::get(mOwnerUUID, boost::bind(&LLPathfindingObject::handleAvatarNameFetch, this, _1, _2));  		}  	}  } @@ -157,6 +181,19 @@ void LLPathfindingObject::fetchOwnerName()  void LLPathfindingObject::handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName)  {  	llassert(mOwnerUUID == pOwnerUUID); +  	mOwnerName = pAvatarName;  	mHasOwnerName = true; + +	disconnectAvatarNameCacheConnection(); + +	mOwnerNameSignal(this); +} + +void LLPathfindingObject::disconnectAvatarNameCacheConnection() +{ +	if (mAvatarNameCacheConnection.connected()) +	{ +		mAvatarNameCacheConnection.disconnect(); +	}  } diff --git a/indra/newview/llpathfindingobject.h b/indra/newview/llpathfindingobject.h index d45cc554fd..b8d3ca2364 100644 --- a/indra/newview/llpathfindingobject.h +++ b/indra/newview/llpathfindingobject.h @@ -30,8 +30,11 @@  #include <string>  #include <boost/shared_ptr.hpp> +#include <boost/function.hpp> +#include <boost/signals2.hpp>  #include "llavatarname.h" +#include "llavatarnamecache.h"  #include "lluuid.h"  #include "v3math.h" @@ -59,6 +62,12 @@ public:  	inline BOOL               isGroupOwned() const   {return mIsGroupOwned;};  	inline const LLVector3&   getLocation() const    {return mLocation;}; +	typedef boost::function<void (const LLPathfindingObject *)>         name_callback_t; +	typedef boost::signals2::signal<void (const LLPathfindingObject *)> name_signal_t; +	typedef boost::signals2::connection                                 name_connection_t; + +	name_connection_t registerOwnerNameListener(name_callback_t pOwnerNameCallback); +  protected:  private: @@ -66,15 +75,18 @@ private:  	void fetchOwnerName();  	void handleAvatarNameFetch(const LLUUID &pOwnerUUID, const LLAvatarName &pAvatarName); +	void disconnectAvatarNameCacheConnection(); -	LLUUID       mUUID; -	std::string  mName; -	std::string  mDescription; -	LLUUID       mOwnerUUID; -	bool         mHasOwnerName; -	LLAvatarName mOwnerName; -	BOOL         mIsGroupOwned; -	LLVector3    mLocation; +	LLUUID                                   mUUID; +	std::string                              mName; +	std::string                              mDescription; +	LLUUID                                   mOwnerUUID; +	bool                                     mHasOwnerName; +	LLAvatarName                             mOwnerName; +	LLAvatarNameCache::callback_connection_t mAvatarNameCacheConnection; +	BOOL                                     mIsGroupOwned; +	LLVector3                                mLocation; +	name_signal_t                            mOwnerNameSignal;  };  #endif // LL_LLPATHFINDINGOBJECT_H diff --git a/indra/newview/llpathfindingobjectlist.cpp b/indra/newview/llpathfindingobjectlist.cpp index 68a7e736e6..f1ecb45fc0 100644 --- a/indra/newview/llpathfindingobjectlist.cpp +++ b/indra/newview/llpathfindingobjectlist.cpp @@ -45,6 +45,7 @@ LLPathfindingObjectList::LLPathfindingObjectList()  LLPathfindingObjectList::~LLPathfindingObjectList()  { +	clear();  }  bool LLPathfindingObjectList::isEmpty() const @@ -52,6 +53,15 @@ bool LLPathfindingObjectList::isEmpty() const  	return mObjectMap.empty();  } +void LLPathfindingObjectList::clear() +{ +	for (LLPathfindingObjectMap::iterator objectIter = mObjectMap.begin(); objectIter != mObjectMap.end(); ++objectIter) +	{ +		objectIter->second.reset(); +	} +	mObjectMap.clear(); +} +  void LLPathfindingObjectList::update(LLPathfindingObjectPtr pUpdateObjectPtr)  {  	if (pUpdateObjectPtr != NULL) diff --git a/indra/newview/llpathfindingobjectlist.h b/indra/newview/llpathfindingobjectlist.h index 3ad8e8b096..61580582d3 100644 --- a/indra/newview/llpathfindingobjectlist.h +++ b/indra/newview/llpathfindingobjectlist.h @@ -47,6 +47,8 @@ public:  	bool isEmpty() const; +	void clear(); +  	void update(LLPathfindingObjectPtr pUpdateObjectPtr);  	void update(LLPathfindingObjectListPtr pUpdateObjectListPtr); @@ -56,7 +58,6 @@ public:  	const_iterator begin() const;  	const_iterator end() const; -  protected:  	LLPathfindingObjectMap &getObjectMap(); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index ba9c2c9e2f..ab72b4e512 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2820,22 +2820,33 @@ bool LLStartUp::dispatchURL()  void LLStartUp::setStartSLURL(const LLSLURL& slurl)   { -  sStartSLURL = slurl; -  LL_DEBUGS("AppInit")<<slurl.asString()<<LL_ENDL; +	LL_DEBUGS("AppInit")<<slurl.asString()<<LL_ENDL; -  switch(slurl.getType()) -    { -    case LLSLURL::HOME_LOCATION: -    case LLSLURL::LAST_LOCATION: -    case LLSLURL::LOCATION: -		gSavedSettings.setString("LoginLocation", LLSLURL::SIM_LOCATION_HOME); +	if ( slurl.isSpatial() ) +	{ +		std::string new_start = slurl.getSLURLString(); +		LL_DEBUGS("AppInit")<<new_start<<LL_ENDL; +		sStartSLURL = slurl;  		LLPanelLogin::onUpdateStartSLURL(slurl); // updates grid if needed -		break; -    default: -		break; -    } + +		// remember that this is where we wanted to log in...if the login fails, +		// the next attempt will default to the same place. +		gSavedSettings.setString("NextLoginLocation", new_start); +		// following a successful login, this is cleared +		// and the default reverts to LoginLocation +	} +	else +	{ +		LL_WARNS("AppInit")<<"Invalid start SLURL (ignored): "<<slurl.asString()<<LL_ENDL; +	}  } +// static +LLSLURL& LLStartUp::getStartSLURL() +{ +	return sStartSLURL; +}  +  /**   * Read all proxy configuration settings and set up both the HTTP proxy and   * SOCKS proxy as needed. diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h index 3754aaf966..760e38890b 100644 --- a/indra/newview/llstartup.h +++ b/indra/newview/llstartup.h @@ -111,7 +111,7 @@ public:  	static void postStartupState();  	static void setStartSLURL(const LLSLURL& slurl);  -	static LLSLURL& getStartSLURL() { return sStartSLURL; }  +	static LLSLURL& getStartSLURL();  	static bool startLLProxy(); // Initialize the SOCKS 5 proxy diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 4ad0547379..b2e6dc4571 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2043,7 +2043,14 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  	{  		if (new_angv != old_angv)  		{ -			resetRot(); +			if (flagUsePhysics()) +			{ +				resetRot(); +			} +			else +			{ +				resetRotTime(); +			}  		}  		// Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega) @@ -5439,9 +5446,14 @@ void LLViewerObject::applyAngularVelocity(F32 dt)  	}  } -void LLViewerObject::resetRot() +void LLViewerObject::resetRotTime()  {  	mRotTime = 0.0f; +} + +void LLViewerObject::resetRot() +{ +	resetRotTime();  	// Reset the accumulated angular velocity rotation  	mAngularVelocityRot.loadIdentity();  diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index e60c8a8d52..22e0de681e 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -198,6 +198,9 @@ public:  	virtual BOOL		updateLOD();  	virtual BOOL		setDrawableParent(LLDrawable* parentp);  	F32					getRotTime() { return mRotTime; } +private: +	void				resetRotTime(); +public:  	void				resetRot();  	void				applyAngularVelocity(F32 dt); @@ -210,7 +213,7 @@ public:  	LLViewerRegion* getRegion() const				{ return mRegionp; }  	BOOL isSelected() const							{ return mUserSelected; } -	virtual void setSelected(BOOL sel)				{ mUserSelected = sel; mRotTime = 0.f;} +	virtual void setSelected(BOOL sel)				{ mUserSelected = sel; resetRot();}  	const LLUUID &getID() const						{ return mID; }  	U32 getLocalID() const							{ return mLocalID; } diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index ae9c31bfe7..2bb2e92279 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -545,9 +545,6 @@ LLParcelSelectionHandle LLViewerParcelMgr::selectLand(const LLVector3d &corner1,  	mRequestResult = PARCEL_RESULT_NO_DATA; -	// clear the list of segments to prevent flashing -	resetSegments(mHighlightSegments); -  	mFloatingParcelSelection->setParcel(mCurrentParcel);  	mCurrentParcelSelection->setParcel(NULL);  	mCurrentParcelSelection = new LLParcelSelection(mCurrentParcel); diff --git a/indra/newview/res-sdl/lltoolpathfinding.BMP b/indra/newview/res-sdl/lltoolpathfinding.BMPBinary files differ new file mode 100644 index 0000000000..a567951b7a --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfinding.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathend.BMP b/indra/newview/res-sdl/lltoolpathfindingpathend.BMPBinary files differ new file mode 100644 index 0000000000..aacea8237f --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathend.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMPBinary files differ new file mode 100644 index 0000000000..fa19f3f105 --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstart.BMPBinary files differ new file mode 100644 index 0000000000..912b7f931a --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMPBinary files differ new file mode 100644 index 0000000000..4e8999ae0b --- /dev/null +++ b/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml index eaed92ac55..9bc5c7d5a4 100644 --- a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml +++ b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml @@ -4,9 +4,9 @@      can_resize="true"      can_tear_off="false"      height="395" -    width="1015" +    width="1075"      min_height="395" -    min_width="1015" +    min_width="1075"      layout="topleft"      name="floater_pathfinding_linksets"      help_topic="floater_pathfinding_linksets" @@ -25,11 +25,15 @@    <floater.string name="linkset_terrain_name">[Terrain]</floater.string>    <floater.string name="linkset_terrain_description">--</floater.string>    <floater.string name="linkset_terrain_owner">--</floater.string> +  <floater.string name="linkset_terrain_scripted">--</floater.string>    <floater.string name="linkset_terrain_land_impact">--</floater.string>    <floater.string name="linkset_terrain_dist_from_you">--</floater.string>    <floater.string name="linkset_owner_loading">[Loading]</floater.string>    <floater.string name="linkset_owner_unknown">[Unknown]</floater.string>    <floater.string name="linkset_owner_group">[group]</floater.string> +  <floater.string name="linkset_is_scripted">Yes</floater.string> +  <floater.string name="linkset_is_not_scripted">No</floater.string> +  <floater.string name="linkset_is_unknown_scripted">Unknown</floater.string>    <floater.string name="linkset_use_walkable">Walkable</floater.string>    <floater.string name="linkset_use_static_obstacle">Static obstacle</floater.string>    <floater.string name="linkset_use_dynamic_obstacle">Movable obstacle</floater.string> @@ -47,7 +51,7 @@        follows="left|top|right|bottom"        layout="topleft"        height="226" -      width="999"> +      width="1059">      <text          height="13"          word_wrap="false" @@ -155,7 +159,7 @@          layout="topleft"          name="apply_filters"          top_pad="-21" -        left_pad="31" +        left_pad="91"          width="73"/>      <button          follows="right|top" @@ -177,7 +181,7 @@          tab_stop="false"          multi_select="true"          name="objects_scroll_list" -        width="980"> +        width="1040">        <scroll_list.columns            label="Name (root prim)"            name="name" @@ -191,6 +195,10 @@            name="owner"            width="141" />        <scroll_list.columns +          label="Scripted" +          name="scripted" +          width="60" /> +      <scroll_list.columns            label="Impact"            name="land_impact"            width="55" /> @@ -230,7 +238,7 @@          layout="topleft"          name="messaging_status"          top_pad="17" -        width="619"> +        width="679">        Linksets:      </text>      <button @@ -269,7 +277,7 @@        name="horiz_separator"        top_pad="0"        left="18" -      width="979"/> +      width="1039"/>    <panel        border="false"        bevel_style="none" @@ -277,7 +285,7 @@        layout="topleft"        left="0"        height="67" -      width="950"> +      width="1010">      <text          height="13"          word_wrap="false" @@ -327,7 +335,7 @@          layout="topleft"          name="teleport_me_to_object"          top_pad="-21" -        left_pad="206" +        left_pad="239"          width="160"/>      <button          follows="right|bottom" @@ -336,7 +344,7 @@          layout="topleft"          name="return_objects"          top_pad="-21" -        left_pad="220" +        left_pad="252"          width="95"/>      <button          follows="right|bottom" @@ -356,7 +364,7 @@        name="horiz_separator"        top_pad="0"        left="18" -      width="979"/> +      width="1039"/>    <panel        border="false"        bevel_style="none" @@ -364,7 +372,7 @@        layout="topleft"        left="0"        height="75" -      width="950"> +      width="1010">      <text          height="13"          word_wrap="false" @@ -376,7 +384,7 @@          layout="topleft"          left="18"          top_pad="8" -        width="912"> +        width="972">        Edit attributes of selected linksets and press the button to apply changes      </text>      <combo_box diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 933135954f..606fdd33d9 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -2894,7 +2894,7 @@ You have been moved into a nearby region.     name="AvatarMovedLast"     type="alertmodal">     <tag>fail</tag> -Your last location is not currently available. +Your requested location is not currently available.  You have been moved into a nearby region.    </notification> @@ -8134,9 +8134,26 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" -   name="PathfindingLinksets_SetLinksetUseMismatchOnRestricted" +   name="PathfindingLinksets_WarnOnPhantom"     type="alertmodal"> -    Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. +Some selected linksets will have the Phantom flag toggled. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled." +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga" +   name="PathfindingLinksets_MismatchOnRestricted" +   type="alertmodal"> +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Do you wish to continue?      <tag>confirm</tag>      <usetemplate       ignoretext="Some selected linksets cannot be set because of permission restrictions on the linkset." @@ -8147,9 +8164,11 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" -   name="PathfindingLinksets_SetLinksetUseMismatchOnVolume" +   name="PathfindingLinksets_MismatchOnVolume"     type="alertmodal"> -    Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. + +Do you wish to continue?      <tag>confirm</tag>      <usetemplate       ignoretext="Some selected linksets cannot be set because the shape is non-convex" @@ -8160,10 +8179,47 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" -   name="PathfindingLinksets_SetLinksetUseMismatchOnRestrictedAndVolume" +   name="PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted" +   type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because of permission restrictions on the linkset." +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga" +   name="PathfindingLinksets_WarnOnPhantom_MismatchOnVolume" +   type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because the shape is non-convex" +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga" +   name="PathfindingLinksets_MismatchOnRestricted_MismatchOnVolume"     type="alertmodal"> -    Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. - Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. + +Do you wish to continue?      <tag>confirm</tag>      <usetemplate       ignoretext="Some selected linksets cannot be set because of permission restrictions on the linkset and because the shape is non-convex." @@ -8174,6 +8230,25 @@ The site at '<nolink>[HOST_NAME]</nolink>' in realm '    <notification     icon="alertmodal.tga" +   name="PathfindingLinksets_WarnOnPhantom_MismatchOnRestricted_MismatchOnVolume" +   type="alertmodal"> +Some selected linksets will have the Phantom flag toggled. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because of permission restrictions on the linkset.  These linksets will be set to be '[RESTRICTED_TYPE]' instead. + +Some selected linksets cannot be set to be '[REQUESTED_TYPE]' because the shape is non-convex. These linksets' use types will not change. + +Do you wish to continue? +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Some selected linksets phantom flag will be toggled and others cannot be set because of permission restrictions on the linkset and because the shape is non-convex." +     name="okcancelignore" +     notext="Cancel" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="PathfindingLinksets_ChangeToFlexiblePath"     type="alertmodal">      The selected object affects the navmesh.  Changing it to a Flexible Path will remove it from the navmesh. diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index b7e81c4199..7705b4c567 100644 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -60,6 +60,7 @@ static LLEventStream gTestPump("test_pump");  #include "../llslurl.h"  #include "../llstartup.h"  LLSLURL LLStartUp::sStartSLURL; +LLSLURL& LLStartUp::getStartSLURL() { return sStartSLURL; }  #include "lllogin.h" diff --git a/indra/viewer_components/updater/llupdatechecker.cpp b/indra/viewer_components/updater/llupdatechecker.cpp index c6aa9b0f11..4da774a5f6 100644 --- a/indra/viewer_components/updater/llupdatechecker.cpp +++ b/indra/viewer_components/updater/llupdatechecker.cpp @@ -30,7 +30,9 @@  #include "llsd.h"  #include "llupdatechecker.h"  #include "lluri.h" - +#if LL_DARWIN +#include <CoreServices/CoreServices.h> +#endif  #if LL_WINDOWS  #pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally @@ -55,7 +57,7 @@ class LLUpdateChecker::Implementation:  public:  	Implementation(Client & client);  	~Implementation(); -	void check(std::string const & protocolVersion, std::string const & hostUrl,  +	void checkVersion(std::string const & protocolVersion, std::string const & hostUrl,   			   std::string const & servicePath, std::string channel, std::string version);  	// Responder: @@ -91,10 +93,10 @@ LLUpdateChecker::LLUpdateChecker(LLUpdateChecker::Client & client):  } -void LLUpdateChecker::check(std::string const & protocolVersion, std::string const & hostUrl,  +void LLUpdateChecker::checkVersion(std::string const & protocolVersion, std::string const & hostUrl,   							std::string const & servicePath, std::string channel, std::string version)  { -	mImplementation->check(protocolVersion, hostUrl, servicePath, channel, version); +	mImplementation->checkVersion(protocolVersion, hostUrl, servicePath, channel, version);  } @@ -120,7 +122,7 @@ LLUpdateChecker::Implementation::~Implementation()  } -void LLUpdateChecker::Implementation::check(std::string const & protocolVersion, std::string const & hostUrl,  +void LLUpdateChecker::Implementation::checkVersion(std::string const & protocolVersion, std::string const & hostUrl,   											std::string const & servicePath, std::string channel, std::string version)  {  	llassert(!mInProgress); @@ -179,7 +181,18 @@ std::string LLUpdateChecker::Implementation::buildUrl(std::string const & protoc  #ifdef LL_WINDOWS  	static const char * platform = "win";  #elif LL_DARWIN -	static const char * platform = "mac"; +    long versMin; +    Gestalt(gestaltSystemVersionMinor, &versMin); +     +    static const char *platform; +    if (versMin == 5) //OS 10.5 +    { +        platform = "mac_legacy"; +    } +    else  +    { +        platform = "mac"; +    }  #else  	static const char * platform = "lnx";  #endif diff --git a/indra/viewer_components/updater/llupdatechecker.h b/indra/viewer_components/updater/llupdatechecker.h index cea1f13647..d882169068 100644 --- a/indra/viewer_components/updater/llupdatechecker.h +++ b/indra/viewer_components/updater/llupdatechecker.h @@ -44,7 +44,7 @@ public:  	LLUpdateChecker(Client & client);  	// Check status of current app on the given host for the channel and version provided. -	void check(std::string const & protocolVersion, std::string const & hostUrl,  +	void checkVersion(std::string const & protocolVersion, std::string const & hostUrl,   			   std::string const & servicePath, std::string channel, std::string version);  private: diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp index 2e18218667..bc73c72ddc 100644 --- a/indra/viewer_components/updater/llupdaterservice.cpp +++ b/indra/viewer_components/updater/llupdaterservice.cpp @@ -509,7 +509,7 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event)  		}  		else  		{ -			mUpdateChecker.check(mProtocolVersion, mUrl, mPath, mChannel, mVersion); +			mUpdateChecker.checkVersion(mProtocolVersion, mUrl, mPath, mChannel, mVersion);  			setState(LLUpdaterService::CHECKING_FOR_UPDATE);  		}  	}  diff --git a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp index e19d5724f1..7c016fecf9 100644 --- a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp +++ b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp @@ -1,4 +1,4 @@ -/** +/**    * @file   llupdaterservice_test.cpp   * @brief  Tests of llupdaterservice.cpp.   *  @@ -44,7 +44,7 @@  *****************************************************************************/  LLUpdateChecker::LLUpdateChecker(LLUpdateChecker::Client & client)  {} -void LLUpdateChecker::check(std::string const & protocolVersion, std::string const & hostUrl,  +void LLUpdateChecker::checkVersion(std::string const & protocolVersion, std::string const & hostUrl,   								  std::string const & servicePath, std::string channel, std::string version)  {}  LLUpdateDownloader::LLUpdateDownloader(Client & ) {} | 
