diff options
| author | Loren Shih <seraph@lindenlab.com> | 2011-03-16 14:54:56 -0400 | 
|---|---|---|
| committer | Loren Shih <seraph@lindenlab.com> | 2011-03-16 14:54:56 -0400 | 
| commit | 037a83cd47e016f70092bccfdb2c13e759c6ff0a (patch) | |
| tree | 2183c8ef1364d5f4e784cb91ea4d67b1861b2452 /indra/llui | |
| parent | 15b0509c01dbeec6854f4a0a5965e900eda06de1 (diff) | |
| parent | 742dd75751f65224d80eb4f7d20daf5a21776c5f (diff) | |
Automated merge up from viewer-development into mesh-development
Diffstat (limited to 'indra/llui')
| -rw-r--r-- | indra/llui/lldockcontrol.cpp | 2 | ||||
| -rw-r--r-- | indra/llui/llfloater.cpp | 10 | ||||
| -rw-r--r-- | indra/llui/llfloater.h | 4 | ||||
| -rw-r--r-- | indra/llui/llnotifications.cpp | 69 | ||||
| -rw-r--r-- | indra/llui/llnotifications.h | 11 | ||||
| -rw-r--r-- | indra/llui/llradiogroup.cpp | 2 | ||||
| -rw-r--r-- | indra/llui/lluictrlfactory.cpp | 24 | ||||
| -rw-r--r-- | indra/llui/llview.cpp | 6 | ||||
| -rw-r--r-- | indra/llui/llview.h | 4 | 
9 files changed, 83 insertions, 49 deletions
diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp index 5ed2c27160..b1c27126d9 100644 --- a/indra/llui/lldockcontrol.cpp +++ b/indra/llui/lldockcontrol.cpp @@ -299,7 +299,7 @@ void LLDockControl::moveDockable()  		break;  	} -	S32 max_available_height = rootRect.getHeight() - mDockTongueY - mDockTongue->getHeight(); +	S32 max_available_height = rootRect.getHeight() - (rootRect.mBottom -  mDockTongueY) - mDockTongue->getHeight();  	// A floater should be shrunk so it doesn't cover a part of its docking tongue and  	// there is a space between a dockable floater and a control to which it is docked. diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index c425782715..35e0d9d890 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -2590,9 +2590,13 @@ void LLFloaterView::draw()  LLRect LLFloaterView::getSnapRect() const  { -	LLRect snap_rect = getRect(); -	snap_rect.mBottom += mSnapOffsetBottom; -	snap_rect.mRight  -= mSnapOffsetRight; +	LLRect snap_rect = getLocalRect(); + +	LLView* snap_view = mSnapView.get(); +	if (snap_view) +	{ +		snap_view->localRectToOtherView(snap_view->getLocalRect(), &snap_rect, this); +	}  	return snap_rect;  } diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index bb96272d02..0e83b80c89 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -495,10 +495,10 @@ public:  	// value is not defined.  	S32 getZOrder(LLFloater* child); -	void setSnapOffsetBottom(S32 offset) { mSnapOffsetBottom = offset; } -	void setSnapOffsetRight(S32 offset) { mSnapOffsetRight = offset; } +	void setFloaterSnapView(LLHandle<LLView> snap_view) {mSnapView = snap_view; }  private: +	LLHandle<LLView>	mSnapView;  	BOOL			mFocusCycleMode;  	S32				mSnapOffsetBottom;  	S32				mSnapOffsetRight; diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index cc9edfcdea..bdac125eb0 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -1195,16 +1195,18 @@ bool LLNotifications::uniqueFilter(LLNotificationPtr pNotif)  bool LLNotifications::uniqueHandler(const LLSD& payload)  { +	std::string cmd = payload["sigtype"]; +  	LLNotificationPtr pNotif = LLNotifications::instance().find(payload["id"].asUUID());  	if (pNotif && pNotif->hasUniquenessConstraints())   	{ -		if (payload["sigtype"].asString() == "add") +		if (cmd == "add")  		{  			// not a duplicate according to uniqueness criteria, so we keep it  			// and store it for future uniqueness checks  			mUniqueNotifications.insert(std::make_pair(pNotif->getName(), pNotif));  		} -		else if (payload["sigtype"].asString() == "delete") +		else if (cmd == "delete")  		{  			mUniqueNotifications.erase(pNotif->getName());  		} @@ -1217,12 +1219,16 @@ bool LLNotifications::failedUniquenessTest(const LLSD& payload)  {  	LLNotificationPtr pNotif = LLNotifications::instance().find(payload["id"].asUUID()); -	if (!pNotif || !pNotif->hasUniquenessConstraints()) +	std::string cmd = payload["sigtype"]; + +	if (!pNotif || cmd != "add")  	{  		return false;  	} -	// checks against existing unique notifications +	// Update the existing unique notification with the data from this particular instance... +	// This guarantees that duplicate notifications will be collapsed to the one +	// most recently triggered  	for (LLNotificationMap::iterator existing_it = mUniqueNotifications.find(pNotif->getName());  		existing_it != mUniqueNotifications.end();  		++existing_it) @@ -1235,7 +1241,7 @@ bool LLNotifications::failedUniquenessTest(const LLSD& payload)  			// of this unique notification and update it  			existing_notification->updateFrom(pNotif);  			// then delete the new one -			pNotif->cancel(); +			cancel(pNotif);  		}  	} @@ -1300,26 +1306,14 @@ void LLNotifications::createDefaultChannels()  	// usage LLStopWhenHandled combiner in LLStandardSignal  	LLNotifications::instance().getChannel("Unique")->          connectAtFrontChanged(boost::bind(&LLNotifications::uniqueHandler, this, _1)); -// failedUniquenessTest slot isn't necessary -//	LLNotifications::instance().getChannel("Unique")-> -//        connectFailedFilter(boost::bind(&LLNotifications::failedUniquenessTest, this, _1)); +	LLNotifications::instance().getChannel("Unique")-> +        connectFailedFilter(boost::bind(&LLNotifications::failedUniquenessTest, this, _1));  	LLNotifications::instance().getChannel("Ignore")->  		connectFailedFilter(&handleIgnoredNotification);  	LLNotifications::instance().getChannel("VisibilityRules")->  		connectFailedFilter(&visibilityRuleMached);  } -bool LLNotifications::addTemplate(const std::string &name,  -								  LLNotificationTemplatePtr theTemplate) -{ -	if (mTemplates.count(name)) -	{ -		llwarns << "LLNotifications -- attempted to add template '" << name << "' twice." << llendl; -		return false; -	} -	mTemplates[name] = theTemplate; -	return true; -}  LLNotificationTemplatePtr LLNotifications::getTemplate(const std::string& name)  { @@ -1416,27 +1410,45 @@ void replaceFormText(LLNotificationForm::Params& form, const std::string& patter  	}  } +void addPathIfExists(const std::string& new_path, std::vector<std::string>& paths) +{ +	if (gDirUtilp->fileExists(new_path)) +	{ +		paths.push_back(new_path); +	} +} +  bool LLNotifications::loadTemplates()  { -	const std::string xml_filename = "notifications.xml"; -	std::string full_filename = gDirUtilp->findSkinnedFilename(LLUI::getXUIPaths().front(), xml_filename); +	std::vector<std::string> search_paths; +	 +	std::string skin_relative_path = gDirUtilp->getDirDelimiter() + LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + "notifications.xml"; +	std::string localized_skin_relative_path = gDirUtilp->getDirDelimiter() + LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + "notifications.xml"; + +	addPathIfExists(gDirUtilp->getDefaultSkinDir() + skin_relative_path, search_paths); +	addPathIfExists(gDirUtilp->getDefaultSkinDir() + localized_skin_relative_path, search_paths); +	addPathIfExists(gDirUtilp->getSkinDir() + skin_relative_path, search_paths); +	addPathIfExists(gDirUtilp->getSkinDir() + localized_skin_relative_path, search_paths); +	addPathIfExists(gDirUtilp->getUserSkinDir() + skin_relative_path, search_paths); +	addPathIfExists(gDirUtilp->getUserSkinDir() + localized_skin_relative_path, search_paths); +	std::string base_filename = search_paths.front();  	LLXMLNodePtr root; -	BOOL success  = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root); +	BOOL success  = LLXMLNode::getLayeredXMLNode(root, search_paths);  	if (!success || root.isNull() || !root->hasName( "notifications" ))  	{ -		llerrs << "Problem reading UI Notifications file: " << full_filename << llendl; +		llerrs << "Problem reading UI Notifications file: " << base_filename << llendl;  		return false;  	}  	LLNotificationTemplate::Notifications params;  	LLXUIParser parser; -	parser.readXUI(root, params, full_filename); +	parser.readXUI(root, params, base_filename);  	if(!params.validateBlock())  	{ -		llerrs << "Problem reading UI Notifications file: " << full_filename << llendl; +		llerrs << "Problem reading UI Notifications file: " << base_filename << llendl;  		return false;  	} @@ -1483,7 +1495,7 @@ bool LLNotifications::loadTemplates()  				replaceFormText(it->form_ref.form, "$ignoretext", it->form_ref.form_template.ignore_text);  			}  		} -		addTemplate(it->name, LLNotificationTemplatePtr(new LLNotificationTemplate(*it))); +		mTemplates[it->name] = LLNotificationTemplatePtr(new LLNotificationTemplate(*it));  	}  	return true; @@ -1578,7 +1590,7 @@ void LLNotifications::add(const LLNotificationPtr pNotif)  void LLNotifications::cancel(LLNotificationPtr pNotif)  { -	if (pNotif == NULL) return; +	if (pNotif == NULL || pNotif->isCancelled()) return;  	LLNotificationSet::iterator it=mItems.find(pNotif);  	if (it == mItems.end()) @@ -1680,7 +1692,6 @@ bool LLNotifications::isVisibleByRules(LLNotificationPtr n)  	for(it = mVisibilityRules.begin(); it != mVisibilityRules.end(); it++)  	{  		// An empty type/tag/name string will match any notification, so only do the comparison when the string is non-empty in the rule. -  		lldebugs   			<< "notification \"" << n->getName() << "\" "   			<< "testing against " << ((*it)->mVisible?"show":"hide") << " rule, " @@ -1728,7 +1739,7 @@ bool LLNotifications::isVisibleByRules(LLNotificationPtr n)  				// Response property is empty.  Cancel this notification.  				lldebugs << "cancelling notification " << n->getName() << llendl; -				n->cancel(); +				cancel(n);  			}  			else  			{ diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h index 34d3537781..0c4d4fc897 100644 --- a/indra/llui/llnotifications.h +++ b/indra/llui/llnotifications.h @@ -863,10 +863,11 @@ class LLNotifications :  	friend class LLSingleton<LLNotifications>;  public: -	// load notification descriptions from file;  -	// OK to call more than once because it will reload -	bool loadTemplates();   -	 +	// load all notification descriptions from file +	// calling more than once will overwrite existing templates +	// but never delete a template +	bool loadTemplates(); +  	// load visibility rules from file;   	// OK to call more than once because it will reload  	bool loadVisibilityRules();   @@ -950,8 +951,6 @@ private:  	LLNotificationChannelPtr pHistoryChannel;  	LLNotificationChannelPtr pExpirationChannel; -	// put your template in -	bool addTemplate(const std::string& name, LLNotificationTemplatePtr theTemplate);  	TemplateMap mTemplates;  	VisibilityRuleList mVisibilityRules; diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp index 6e9586369f..3a12debf7e 100644 --- a/indra/llui/llradiogroup.cpp +++ b/indra/llui/llradiogroup.cpp @@ -346,7 +346,7 @@ void LLRadioGroup::setValue( const LLSD& value )  		}  		else  		{ -			llwarns << "LLRadioGroup::setValue: value not found: " << value.asString() << llendl; +			setSelectedIndex(-1, TRUE);  		}  	}  } diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp index 5de96f9d48..25e7a31e90 100644 --- a/indra/llui/lluictrlfactory.cpp +++ b/indra/llui/lluictrlfactory.cpp @@ -152,7 +152,27 @@ static LLFastTimer::DeclareTimer FTM_XML_PARSE("XML Reading/Parsing");  bool LLUICtrlFactory::getLayeredXMLNode(const std::string &xui_filename, LLXMLNodePtr& root)  {  	LLFastTimer timer(FTM_XML_PARSE); -	return LLXMLNode::getLayeredXMLNode(xui_filename, root, LLUI::getXUIPaths()); +	 +	std::vector<std::string> paths; +	std::string path = gDirUtilp->findSkinnedFilename(LLUI::getSkinPath(), xui_filename); +	if (!path.empty()) +	{ +		paths.push_back(path); +	} + +	std::string localize_path = gDirUtilp->findSkinnedFilename(LLUI::getLocalizedSkinPath(), xui_filename); +	if (!localize_path.empty() && localize_path != path) +	{ +		paths.push_back(localize_path); +	} + +	if (paths.empty()) +	{ +		// sometimes whole path is passed in as filename +		paths.push_back(xui_filename); +	} + +	return LLXMLNode::getLayeredXMLNode(root, paths);  } @@ -214,7 +234,7 @@ LLView *LLUICtrlFactory::createFromXML(LLXMLNodePtr node, LLView* parent, const  std::string LLUICtrlFactory::getCurFileName()   {  -	return mFileNames.empty() ? "" : gDirUtilp->getWorkingDir() + gDirUtilp->getDirDelimiter() + mFileNames.back();  +	return mFileNames.empty() ? "" : mFileNames.back();   } diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index e32b349df4..245126d178 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -338,7 +338,7 @@ void LLView::removeChild(LLView* child)  	}  	else  	{ -		llerrs << "LLView::removeChild called with non-child" << llendl; +		llwarns << child->getName() << "is not a child of " << getName() << llendl;  	}  	updateBoundingRect();  } @@ -1964,7 +1964,7 @@ void LLView::centerWithin(const LLRect& bounds)  	translate( left - getRect().mLeft, bottom - getRect().mBottom );  } -BOOL LLView::localPointToOtherView( S32 x, S32 y, S32 *other_x, S32 *other_y, LLView* other_view) const +BOOL LLView::localPointToOtherView( S32 x, S32 y, S32 *other_x, S32 *other_y, const LLView* other_view) const  {  	const LLView* cur_view = this;  	const LLView* root_view = NULL; @@ -2007,7 +2007,7 @@ BOOL LLView::localPointToOtherView( S32 x, S32 y, S32 *other_x, S32 *other_y, LL  	return FALSE;  } -BOOL LLView::localRectToOtherView( const LLRect& local, LLRect* other, LLView* other_view ) const +BOOL LLView::localRectToOtherView( const LLRect& local, LLRect* other, const LLView* other_view ) const  {  	LLRect cur_rect = local;  	const LLView* cur_view = this; diff --git a/indra/llui/llview.h b/indra/llui/llview.h index 7e84eafce4..9ab0797f9e 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -406,8 +406,8 @@ public:  	BOOL blockMouseEvent(S32 x, S32 y) const;  	// See LLMouseHandler virtuals for screenPointToLocal and localPointToScreen -	BOOL localPointToOtherView( S32 x, S32 y, S32 *other_x, S32 *other_y, LLView* other_view) const; -	BOOL localRectToOtherView( const LLRect& local, LLRect* other, LLView* other_view ) const; +	BOOL localPointToOtherView( S32 x, S32 y, S32 *other_x, S32 *other_y, const LLView* other_view) const; +	BOOL localRectToOtherView( const LLRect& local, LLRect* other, const LLView* other_view ) const;  	void screenRectToLocal( const LLRect& screen, LLRect* local ) const;  	void localRectToScreen( const LLRect& local, LLRect* screen ) const;  | 
