diff options
Diffstat (limited to 'indra/llui')
| -rw-r--r-- | indra/llui/llscrolllistctrl.cpp | 88 | ||||
| -rw-r--r-- | indra/llui/llscrolllistctrl.h | 10 | ||||
| -rw-r--r-- | indra/llui/lltextbase.cpp | 1 | ||||
| -rw-r--r-- | indra/llui/lltexteditor.h | 1 | ||||
| -rw-r--r-- | indra/llui/lltextutil.cpp | 16 | ||||
| -rw-r--r-- | indra/llui/lltextutil.h | 12 | ||||
| -rw-r--r-- | indra/llui/llurlaction.cpp | 9 | ||||
| -rw-r--r-- | indra/llui/llurlaction.h | 1 | 
8 files changed, 110 insertions, 28 deletions
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index cd87c44dc2..2d3f3f5a60 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -1388,6 +1388,84 @@ BOOL LLScrollListCtrl::selectItemByPrefix(const LLWString& target, BOOL case_sen  	return found;  } +U32 LLScrollListCtrl::searchItems(const std::string& substring, bool case_sensitive, bool focus) +{ +    return searchItems(utf8str_to_wstring(substring), case_sensitive, focus); +} + +U32 LLScrollListCtrl::searchItems(const LLWString& substring, bool case_sensitive, bool focus) +{ +    U32 found = 0; + +    LLWString substring_trimmed(substring); +    S32 len = substring_trimmed.size(); + +    if (0 == len) +    { +        // at the moment search for empty element is not supported +        return 0; +    } +    else +    { +        deselectAllItems(TRUE); +        if (!case_sensitive) +        { +            // do comparisons in lower case +            LLWStringUtil::toLower(substring_trimmed); +        } + +        for (item_list::iterator iter = mItemList.begin(); iter != mItemList.end(); iter++) +        { +            LLScrollListItem* item = *iter; +            // Only select enabled items with matching names +            if (!item->getEnabled()) +            { +                continue; +            } +            LLScrollListCell* cellp = item->getColumn(getSearchColumn()); +            if (!cellp) +            { +                continue; +            } +            LLWString item_label = utf8str_to_wstring(cellp->getValue().asString()); +            if (!case_sensitive) +            { +                LLWStringUtil::toLower(item_label); +            } +            // remove extraneous whitespace from searchable label +            LLWStringUtil::trim(item_label); + +            size_t found_iter = item_label.find(substring_trimmed); + +            if (found_iter != std::string::npos) +            { +                // find offset of matching text +                cellp->highlightText(found_iter, substring_trimmed.size()); +                selectItem(item, -1, FALSE); + +                found++; + +                if (!mAllowMultipleSelection) +                { +                    break; +                } +            } +        } +    } + +    if (focus && found != 0) +    { +        mNeedsScroll = true; +    } + +    if (mCommitOnSelectionChange) +    { +        commitIfChanged(); +    } + +    return found; +} +  const std::string LLScrollListCtrl::getSelectedItemLabel(S32 column) const  {  	LLScrollListItem* item; @@ -1912,6 +1990,7 @@ BOOL LLScrollListCtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)  			registrar.add("Url.SendIM", boost::bind(&LLScrollListCtrl::sendIM, id));  			registrar.add("Url.AddFriend", boost::bind(&LLScrollListCtrl::addFriend, id));  			registrar.add("Url.RemoveFriend", boost::bind(&LLScrollListCtrl::removeFriend, id)); +            registrar.add("Url.ReportAbuse", boost::bind(&LLScrollListCtrl::reportAbuse, id, is_group));  			registrar.add("Url.Execute", boost::bind(&LLScrollListCtrl::showNameDetails, id, is_group));  			registrar.add("Url.CopyLabel", boost::bind(&LLScrollListCtrl::copyNameToClipboard, id, is_group));  			registrar.add("Url.CopyUrl", boost::bind(&LLScrollListCtrl::copySLURLToClipboard, id, is_group)); @@ -1975,6 +2054,15 @@ void LLScrollListCtrl::removeFriend(std::string id)  	LLUrlAction::removeFriend(slurl);  } +void LLScrollListCtrl::reportAbuse(std::string id, bool is_group) +{ +    if (!is_group) +    { +        std::string slurl = "secondlife:///app/agent/" + id + "/about"; +        LLUrlAction::reportAbuse(slurl); +    } +} +  void LLScrollListCtrl::showNameDetails(std::string id, bool is_group)  {  	// open the resident's details or the group details diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h index 08134bbfc8..77d10fdec7 100644 --- a/indra/llui/llscrolllistctrl.h +++ b/indra/llui/llscrolllistctrl.h @@ -267,6 +267,14 @@ public:  	const std::string	getSelectedItemLabel(S32 column = 0) const;  	LLSD			getSelectedValue(); +    // If multi select is on, select all element that include substring, +    // otherwise select first match only. +    // If focus is true will scroll to selection. +    // Returns number of results. +    // Note: at the moment search happens in one go and is expensive +    U32			searchItems(const std::string& substring, bool case_sensitive = false, bool focus = true); +    U32			searchItems(const LLWString& substring, bool case_sensitive = false, bool focus = true); +  	// DEPRECATED: Use LLSD versions of setCommentText() and getSelectedValue().  	// "StringUUID" interface: use this when you're creating a list that contains non-unique strings each of which  	// has an associated, unique UUID, and only one of which can be selected at a time. @@ -325,6 +333,7 @@ public:  	// support right-click context menus for avatar/group lists  	enum ContextMenuType { MENU_NONE, MENU_AVATAR, MENU_GROUP };  	void setContextMenu(const ContextMenuType &menu) { mContextMenuType = menu; } +    ContextMenuType getContextMenuType() { return mContextMenuType; }  	// Overridden from LLView  	/*virtual*/ void    draw(); @@ -460,6 +469,7 @@ private:  	static void		sendIM(std::string id);  	static void		addFriend(std::string id);  	static void		removeFriend(std::string id); +    static void		reportAbuse(std::string id, bool is_group);  	static void		showNameDetails(std::string id, bool is_group);  	static void		copyNameToClipboard(std::string id, bool is_group);  	static void		copySLURLToClipboard(std::string id, bool is_group); diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 0532750dce..979503bb67 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -2010,6 +2010,7 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_url)  	registrar.add("Url.ShowProfile", boost::bind(&LLUrlAction::showProfile, url));  	registrar.add("Url.AddFriend", boost::bind(&LLUrlAction::addFriend, url));  	registrar.add("Url.RemoveFriend", boost::bind(&LLUrlAction::removeFriend, url)); +    registrar.add("Url.ReportAbuse", boost::bind(&LLUrlAction::reportAbuse, url));  	registrar.add("Url.SendIM", boost::bind(&LLUrlAction::sendIM, url));  	registrar.add("Url.ShowOnMap", boost::bind(&LLUrlAction::showLocationOnMap, url));  	registrar.add("Url.CopyLabel", boost::bind(&LLUrlAction::copyLabelToClipboard, url)); diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h index 26702b2412..1a10d2fd1e 100644 --- a/indra/llui/lltexteditor.h +++ b/indra/llui/lltexteditor.h @@ -196,6 +196,7 @@ public:  	const LLUUID&	getSourceID() const						{ return mSourceID; }  	const LLTextSegmentPtr	getPreviousSegment() const; +    const LLTextSegmentPtr	getLastSegment() const;  	void			getSelectedSegments(segment_vec_t& segments) const;  	void			setShowContextMenu(bool show) { mShowContextMenu = show; } diff --git a/indra/llui/lltextutil.cpp b/indra/llui/lltextutil.cpp index 538508b856..78049319bc 100644 --- a/indra/llui/lltextutil.cpp +++ b/indra/llui/lltextutil.cpp @@ -76,22 +76,6 @@ void LLTextUtil::textboxSetGreyedVal(LLTextBox *txtbox, const LLStyle::Params& n      txtbox->appendText(text.substr(greyed_begin + greyed_len),  false, normal_style);  } -const std::string& LLTextUtil::formatPhoneNumber(const std::string& phone_str) -{ -	static const std::string PHONE_SEPARATOR = LLUI::getInstance()->mSettingGroups["config"]->getString("AvalinePhoneSeparator"); -	static const S32 PHONE_PART_LEN = 2; - -	static std::string formatted_phone_str; -	formatted_phone_str = phone_str; -	S32 separator_pos = (S32)(formatted_phone_str.size()) - PHONE_PART_LEN; -	for (; separator_pos >= PHONE_PART_LEN; separator_pos -= PHONE_PART_LEN) -	{ -		formatted_phone_str.insert(separator_pos, PHONE_SEPARATOR); -	} - -	return formatted_phone_str; -} -  bool LLTextUtil::processUrlMatch(LLUrlMatch* match,LLTextBase* text_base, bool is_content_trusted)  {  	if (match == 0 || text_base == 0) diff --git a/indra/llui/lltextutil.h b/indra/llui/lltextutil.h index a9c143e445..1adc3516f7 100644 --- a/indra/llui/lltextutil.h +++ b/indra/llui/lltextutil.h @@ -59,18 +59,6 @@ namespace LLTextUtil  	        const std::string& greyed);  	/** -	 * Formats passed phone number to be more human readable. -	 * -	 * It just divides the number on parts by two digits from right to left. The first left part -	 * can have 2 or 3 digits, i.e. +44-33-33-44-55-66 or 12-34-56-78-90. Separator is set in -	 * application settings (AvalinePhoneSeparator) -	 * -	 * @param[in] phone_str string with original phone number -	 * @return reference to string with formatted phone number -	 */ -	const std::string& formatPhoneNumber(const std::string& phone_str); - -	/**  	 * Adds icon before url if need.  	 *  	 * @param[in] match an object with results of matching diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp index 84ea770a8d..8216046174 100644 --- a/indra/llui/llurlaction.cpp +++ b/indra/llui/llurlaction.cpp @@ -222,6 +222,15 @@ void LLUrlAction::removeFriend(std::string url)  	}  } +void LLUrlAction::reportAbuse(std::string url) +{ +    std::string id_str = getUserID(url); +    if (LLUUID::validate(id_str)) +    { +        executeSLURL("secondlife:///app/agent/" + id_str + "/reportAbuse"); +    } +} +  void LLUrlAction::blockObject(std::string url)  {  	std::string object_id = getObjectId(url); diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h index 2d2a8dfef1..c2c576254d 100644 --- a/indra/llui/llurlaction.h +++ b/indra/llui/llurlaction.h @@ -82,6 +82,7 @@ public:  	static void sendIM(std::string url);  	static void addFriend(std::string url);  	static void removeFriend(std::string url); +    static void reportAbuse(std::string url);  	static void blockObject(std::string url);  	static void unblockObject(std::string url);  | 
