diff options
Diffstat (limited to 'indra/llui')
| -rw-r--r-- | indra/llui/lllineeditor.cpp | 3 | ||||
| -rw-r--r-- | indra/llui/llscrolllistctrl.cpp | 2 | ||||
| -rw-r--r-- | indra/llui/lltextbase.cpp | 1 | ||||
| -rw-r--r-- | indra/llui/llurlaction.cpp | 18 | ||||
| -rw-r--r-- | indra/llui/llurlaction.h | 2 | ||||
| -rw-r--r-- | indra/llui/llurlentry.cpp | 16 | ||||
| -rw-r--r-- | indra/llui/llurlentry.h | 4 | 
7 files changed, 45 insertions, 1 deletions
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index 45dab88e87..b534c8d4e8 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -2230,6 +2230,9 @@ void LLLineEditor::clear()  {      mText.clear();      setCursor(0); +    mFontBufferPreSelection.reset(); +    mFontBufferSelection.reset(); +    mFontBufferPostSelection.reset();  }  //virtual diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 245339b107..ff77b4d482 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -1007,7 +1007,7 @@ void LLScrollListCtrl::deleteItems(const LLSD& sd)  void LLScrollListCtrl::deleteSelectedItems()  {      item_list::iterator iter; -    for (iter = mItemList.begin(); iter < mItemList.end(); ) +    for (iter = mItemList.begin(); iter != mItemList.end(); )      {          LLScrollListItem* itemp = *iter;          if (itemp->getSelected()) diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 778b253c3c..7007049e1c 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -2228,6 +2228,7 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_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.ShowParcelOnMap", boost::bind(&LLUrlAction::showParcelOnMap, url));      registrar.add("Url.CopyLabel", boost::bind(&LLUrlAction::copyLabelToClipboard, url));      registrar.add("Url.CopyUrl", boost::bind(&LLUrlAction::copyURLToClipboard, url)); diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp index d017f536f0..fdae22cfa1 100644 --- a/indra/llui/llurlaction.cpp +++ b/indra/llui/llurlaction.cpp @@ -30,6 +30,7 @@  #include "llview.h"  #include "llwindow.h"  #include "llurlregistry.h" +#include "v3dmath.h"  // global state for the callback functions @@ -128,6 +129,23 @@ void LLUrlAction::showLocationOnMap(std::string url)      }  } +void LLUrlAction::showParcelOnMap(std::string url) +{ +    LLSD path_array = LLURI(url).pathArray(); +    auto path_parts = path_array.size(); + +    if (path_parts < 3) // no parcel id +    { +        LL_WARNS() << "Global coordinates are missing in url: [" << url << "]" << LL_ENDL; +        return; +    } + +    LLVector3d parcel_pos = LLUrlEntryParcel::getParcelPos(LLUUID(LLURI::unescape(path_array[2]))); +    std::ostringstream pos; +    pos << parcel_pos.mdV[VX] << '/' << parcel_pos.mdV[VY] << '/' << parcel_pos.mdV[VZ]; +    executeSLURL("secondlife:///app/worldmap_global/" + pos.str()); +} +  void LLUrlAction::copyURLToClipboard(std::string url)  {      LLView::getWindow()->copyTextToClipboard(utf8str_to_wstring(url)); diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h index 6fb14f26b4..8b7ab0e7c5 100644 --- a/indra/llui/llurlaction.h +++ b/indra/llui/llurlaction.h @@ -63,6 +63,8 @@ public:      /// if the Url specifies an SL location, show it on a map      static void showLocationOnMap(std::string url); +    static void showParcelOnMap(std::string url); +      /// perform the appropriate action for left-clicking on a Url      static void clickAction(std::string url, bool trusted_content); diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index ce6595965a..95603d7ed5 100644 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -41,6 +41,7 @@  #include "lluicolortable.h"  #include "message.h"  #include "llexperiencecache.h" +#include "v3dmath.h"  // Utility functions  std::string localize_slapp_label(const std::string& url, const std::string& full_name); @@ -1082,6 +1083,7 @@ LLUUID  LLUrlEntryParcel::sSessionID(LLUUID::null);  LLHost  LLUrlEntryParcel::sRegionHost;  bool    LLUrlEntryParcel::sDisconnected(false);  std::set<LLUrlEntryParcel*> LLUrlEntryParcel::sParcelInfoObservers; +std::map<LLUUID, LLVector3d> LLUrlEntryParcel::sParcelPos;  ///  /// LLUrlEntryParcel Describes a Second Life parcel Url, e.g., @@ -1174,6 +1176,20 @@ void LLUrlEntryParcel::processParcelInfo(const LLParcelData& parcel_data)              url_entry->onParcelInfoReceived(parcel_data.parcel_id.asString(), label);          }      } +    if (sParcelPos.find(parcel_data.parcel_id) == sParcelPos.end()) +    { +        sParcelPos[parcel_data.parcel_id] = LLVector3d(parcel_data.global_x, parcel_data.global_y, parcel_data.global_z); +    } +} + +// static +LLVector3d LLUrlEntryParcel::getParcelPos(const LLUUID& parcel_id) +{ +    if (sParcelPos.find(parcel_id) != sParcelPos.end()) +    { +        return sParcelPos[parcel_id]; +    } +    return LLVector3d();  }  // diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h index 36128b0391..efb5081103 100644 --- a/indra/llui/llurlentry.h +++ b/indra/llui/llurlentry.h @@ -41,6 +41,7 @@  #include <map>  class LLAvatarName; +class LLVector3d;  #define APP_HEADER_REGEX "((x-grid-location-info://[-\\w\\.]+/app)|(secondlife:///app))" @@ -436,6 +437,8 @@ public:      // Processes parcel label and triggers notifying observers.      static void processParcelInfo(const LLParcelData& parcel_data); +    static LLVector3d getParcelPos(const LLUUID& parcel_id); +      // Next setters are used to update agent and viewer connection information      // upon events like user login, viewer disconnect and user changing region host.      // These setters are made public to be accessible from newview and should not be @@ -449,6 +452,7 @@ private:      static LLHost                       sRegionHost;      static bool                         sDisconnected;      static std::set<LLUrlEntryParcel*>  sParcelInfoObservers; +    static std::map<LLUUID, LLVector3d> sParcelPos;  };  ///  | 
