From c16591c046fa76fc5d13387efa3bcaec3422e593 Mon Sep 17 00:00:00 2001 From: James Cook Date: Fri, 12 Feb 2010 16:12:12 -0800 Subject: Per-avatar customizable icons next to name links in text Changed LLUrlEntryAgent callbacks to handle both link label and icon Eliminated legacy LLNameCache file loading Reviewed with Kelly --- indra/newview/llappviewer.cpp | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) (limited to 'indra/newview/llappviewer.cpp') diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 00a9e4d745..ba2e13da9d 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1298,8 +1298,7 @@ bool LLAppViewer::cleanup() LLPolyMesh::freeAllMeshes(); - delete gCacheName; - gCacheName = NULL; + LLStartUp::cleanupNameCache(); // Note: this is where gLocalSpeakerMgr and gActiveSpeakerMgr used to be deleted. @@ -3337,15 +3336,6 @@ void LLAppViewer::loadNameCache() { if(gCacheName->importFile(cache_file)) return; } - - // Try to load from the legacy format. This should go away after a - // while. Phoenix 2008-01-30 - LLFILE* name_cache_fp = LLFile::fopen(name_cache, "r"); // Flawfinder: ignore - if (name_cache_fp) - { - gCacheName->importFile(name_cache_fp); - fclose(name_cache_fp); - } } void LLAppViewer::saveNameCache() -- cgit v1.3 From 55bfb4435e1a2ffc34578bf30877eb24a5edaa29 Mon Sep 17 00:00:00 2001 From: James Cook Date: Wed, 17 Feb 2010 16:55:58 -0800 Subject: Look up display names via a web service Also removed unused LLComboBox globals to reduce llappviewer.cpp include file burden. Review pending --- indra/llmessage/llavatarnamecache.cpp | 212 ++++++++++++++++++++++++++++------ indra/llmessage/llavatarnamecache.h | 2 + indra/llui/llcombobox.cpp | 2 - indra/llui/llcombobox.h | 3 - indra/newview/llappviewer.cpp | 7 +- 5 files changed, 180 insertions(+), 46 deletions(-) (limited to 'indra/newview/llappviewer.cpp') diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index dbcb0d0c03..a7ed20ac9b 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -35,15 +35,92 @@ #include "llavatarnamecache.h" #include "llcachename.h" // until we get our own web service +#include "llframetimer.h" +#include "llhttpclient.h" +#include "llsdserialize.h" // JAMESDEBUG #include // tolower() +#include namespace LLAvatarNameCache { - std::map sCache; + // base URL for name lookup service + std::string sNameServiceURL; + + // accumulated agent IDs for next query against service + typedef std::set ask_queue_t; + ask_queue_t sAskQueue; + + // agent IDs that have been requested, but with no reply + // maps agent ID to frame time request was made + typedef std::map pending_queue_t; + pending_queue_t sPendingQueue; + + // names we know about + typedef std::map cache_t; + cache_t sCache; + + // only need per-frame timing resolution + LLFrameTimer sRequestTimer; + + bool isRequestPending(const LLUUID& agent_id); } -// JAMESDEBUG re-enable when display names are turned on +class LLAvatarNameResponder : public LLHTTPClient::Responder +{ +public: + /*virtual*/ void result(const LLSD& content); + /*virtual*/ void error(U32 status, const std::string& reason); +}; + +void LLAvatarNameResponder::result(const LLSD& content) +{ + //std::ostringstream debug; + //LLSDSerialize::toPrettyXML(content, debug); + //llinfos << "JAMESDEBUG " << debug.str() << llendl; + + U32 now = (U32)LLFrameTimer::getTotalSeconds(); + LLSD::array_const_iterator it = content.beginArray(); + for ( ; it != content.endArray(); ++it) + { + const LLSD& row = *it; + + LLAvatarName av_name; + av_name.mSLID = row["slid"]; + av_name.mDisplayName = row["display_name"]; + av_name.mLastUpdate = now; + + // HACK for pretty stars + if (row["last_name"].asString() == "Linden") + { + av_name.mBadge = "Person_Star"; + } + + // Some avatars don't have explicit display names set + if (av_name.mDisplayName.empty()) + { + // make up a display name + std::string first_name = row["first_name"]; + std::string last_name = row["last_name"]; + av_name.mDisplayName = + LLCacheName::buildFullName(first_name, last_name); + } + + LLUUID agent_id = row["agent_id"]; + LLAvatarNameCache::sCache[agent_id] = av_name; + + LLAvatarNameCache::sPendingQueue.erase(agent_id); + + llinfos << "JAMESDEBUG fetched " << av_name.mDisplayName << llendl; + } +} + +void LLAvatarNameResponder::error(U32 status, const std::string& reason) +{ + llinfos << "JAMESDEBUG error " << status << " " << reason << llendl; +} + +// JAMESDEBUG re-enable when display names are turned on??? //static std::string slid_from_full_name(const std::string& full_name) //{ // std::string id = full_name; @@ -73,11 +150,6 @@ void LLAvatarNameCache::initClass() name.mBadge = "Person_Check"; sCache[LLUUID("27888d5f-4ddb-4df3-ad36-a1483ce0b3d9")] = name; - name.mSLID = "jim.linden"; - name.mDisplayName = "Jim Jenkins"; - name.mBadge = "Person_Star"; - sCache[LLUUID("3e5bf676-3577-c9ee-9fac-10df430015a1")] = name; - name.mSLID = "james.linden"; const unsigned char jose_sanchez[] = { 'J','o','s',0xC3,0xA9,' ','S','a','n','c','h','e','z', '\0' }; @@ -90,35 +162,41 @@ void LLAvatarNameCache::initClass() name.mBadge = ""; sCache[LLUUID("a23fff6c-80ae-4997-9253-48272fd01d3c")] = name; - name.mSLID = "hamilton.linden"; - name.mDisplayName = "Hamilton Hitchings"; - name.mBadge = "Person_Star"; - sCache[LLUUID("3f7ced39-5e38-4fdd-90f2-423560b1e6e2")] = name; - - name.mSLID = "rome.linden"; - name.mDisplayName = "Rome Portlock"; - name.mBadge = "Person_Star"; - sCache[LLUUID("537da1e1-a89f-4f9b-9056-b1f0757ccdd0")] = name; - - name.mSLID = "m.linden"; - name.mDisplayName = "Mark Kingdon"; - name.mBadge = "Person_Star"; - sCache[LLUUID("244195d6-c9b7-4fd6-9229-c3a8b2e60e81")] = name; - - name.mSLID = "t.linden"; - name.mDisplayName = "Tom Hale"; - name.mBadge = "Person_Star"; - sCache[LLUUID("49856302-98d4-4e32-b5e9-035e5b4e83a4")] = name; - - name.mSLID = "callen.linden"; - name.mDisplayName = "Christina Allen"; - name.mBadge = "Person_Star"; - sCache[LLUUID("e6ed7825-708f-4c6b-b6a7-f3fe921a9176")] = name; - - name.mSLID = "crimp.linden"; - name.mDisplayName = "Chris Rimple"; - name.mBadge = "Person_Star"; - sCache[LLUUID("a7f0ac18-205f-41d2-b5b4-f75f096ae511")] = name; + // These are served by the web service now + //name.mSLID = "jim.linden"; + //name.mDisplayName = "Jim Jenkins"; + //name.mBadge = "Person_Star"; + //sCache[LLUUID("3e5bf676-3577-c9ee-9fac-10df430015a1")] = name; + + //name.mSLID = "hamilton.linden"; + //name.mDisplayName = "Hamilton Hitchings"; + //name.mBadge = "Person_Star"; + //sCache[LLUUID("3f7ced39-5e38-4fdd-90f2-423560b1e6e2")] = name; + + //name.mSLID = "rome.linden"; + //name.mDisplayName = "Rome Portlock"; + //name.mBadge = "Person_Star"; + //sCache[LLUUID("537da1e1-a89f-4f9b-9056-b1f0757ccdd0")] = name; + + //name.mSLID = "m.linden"; + //name.mDisplayName = "Mark Kingdon"; + //name.mBadge = "Person_Star"; + //sCache[LLUUID("244195d6-c9b7-4fd6-9229-c3a8b2e60e81")] = name; + + //name.mSLID = "t.linden"; + //name.mDisplayName = "Tom Hale"; + //name.mBadge = "Person_Star"; + //sCache[LLUUID("49856302-98d4-4e32-b5e9-035e5b4e83a4")] = name; + + //name.mSLID = "callen.linden"; + //name.mDisplayName = "Christina Allen"; + //name.mBadge = "Person_Star"; + //sCache[LLUUID("e6ed7825-708f-4c6b-b6a7-f3fe921a9176")] = name; + + //name.mSLID = "crimp.linden"; + //name.mDisplayName = "Chris Rimple"; + //name.mBadge = "Person_Star"; + //sCache[LLUUID("a7f0ac18-205f-41d2-b5b4-f75f096ae511")] = name; } void LLAvatarNameCache::cleanupClass() @@ -135,6 +213,57 @@ void LLAvatarNameCache::exportFile(std::ostream& ostr) void LLAvatarNameCache::idle() { + const F32 SECS_BETWEEN_REQUESTS = 0.5f; // JAMESDEBUG set to 0.1? + if (sRequestTimer.checkExpirationAndReset(SECS_BETWEEN_REQUESTS)) + { + return; + } + + if (sAskQueue.empty()) + { + return; + } + + LLSD body; + body["agent_ids"] = LLSD::emptyArray(); + LLSD& agent_ids = body["agent_ids"]; + + ask_queue_t::const_iterator it = sAskQueue.begin(); + for ( ; it != sAskQueue.end(); ++it) + { + agent_ids.append( LLSD( *it ) ); + } + + //std::ostringstream debug; + //LLSDSerialize::toPrettyXML(body, debug); + //LL_INFOS("JAMESDEBUG") << debug.str() << LL_ENDL; + + // *TODO: configure the base URL for this + std::string url = "http://pdp15.lindenlab.com:8050/my-service/agent/display-names/"; + LLHTTPClient::post(url, body, new LLAvatarNameResponder()); + + // Move requests from Ask queue to Pending queue + U32 now = (U32)LLFrameTimer::getTotalSeconds(); + for (it = sAskQueue.begin(); it != sAskQueue.end(); ++it) + { + sPendingQueue[*it] = now; + } + sAskQueue.clear(); +} + +bool LLAvatarNameCache::isRequestPending(const LLUUID& agent_id) +{ + const U32 PENDING_TIMEOUT_SECS = 5 * 60; + U32 now = (U32)LLFrameTimer::getTotalSeconds(); + U32 expire_time = now - PENDING_TIMEOUT_SECS; + + pending_queue_t::const_iterator it = sPendingQueue.find(agent_id); + if (it != sPendingQueue.end()) + { + bool expired = (it->second < expire_time); + return !expired; + } + return false; } bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name) @@ -146,7 +275,7 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name) return true; } - // JAMESDEBUG Enable when we turn on display names. + // JAMESDEBUG Enable when we turn on display names??? //std::string full_name; //if (gCacheName->getFullName(agent_id, full_name)) //{ @@ -156,6 +285,15 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name) // return true; //} + if (!isRequestPending(agent_id)) + { + std::pair found = sAskQueue.insert(agent_id); + if (found.second) + { + LL_INFOS("JAMESDEBUG") << "added to ask queue " << agent_id << LL_ENDL; + } + } + return false; } diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h index adf12bbbc6..a0e6abf303 100644 --- a/indra/llmessage/llavatarnamecache.h +++ b/indra/llmessage/llavatarnamecache.h @@ -43,6 +43,8 @@ namespace LLAvatarNameCache void importFile(std::istream& istr); void exportFile(std::ostream& ostr); + // Periodically makes a batch request for display names not already in + // cache. Call once per frame. void idle(); // If name is in cache, returns true and fills in provided LLAvatarName diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp index 9d23daf56d..1aa44f6b96 100644 --- a/indra/llui/llcombobox.cpp +++ b/indra/llui/llcombobox.cpp @@ -58,8 +58,6 @@ #include "lltooltip.h" // Globals -S32 LLCOMBOBOX_HEIGHT = 0; -S32 LLCOMBOBOX_WIDTH = 0; S32 MAX_COMBO_WIDTH = 500; static LLDefaultChildRegistry::Register register_combo_box("combo_box"); diff --git a/indra/llui/llcombobox.h b/indra/llui/llcombobox.h index 4f27588467..58e29dcb30 100644 --- a/indra/llui/llcombobox.h +++ b/indra/llui/llcombobox.h @@ -49,9 +49,6 @@ class LLFontGL; class LLViewBorder; -extern S32 LLCOMBOBOX_HEIGHT; -extern S32 LLCOMBOBOX_WIDTH; - class LLComboBox : public LLUICtrl, public LLCtrlListInterface { diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index ba2e13da9d..62b8b972b6 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -85,6 +85,7 @@ #include "llsecondlifeurls.h" // Linden library includes +#include "llavatarnamecache.h" #include "llimagej2c.h" #include "llmemory.h" #include "llprimitive.h" @@ -157,7 +158,6 @@ // Included so that constants/settings might be initialized // in save_settings_to_globals() #include "llbutton.h" -#include "llcombobox.h" #include "llstatusbar.h" #include "llsurface.h" #include "llvosky.h" @@ -399,9 +399,6 @@ static void settings_to_globals() MENU_BAR_HEIGHT = gSavedSettings.getS32("MenuBarHeight"); MENU_BAR_WIDTH = gSavedSettings.getS32("MenuBarWidth"); - LLCOMBOBOX_HEIGHT = BTN_HEIGHT - 2; - LLCOMBOBOX_WIDTH = 128; - LLSurface::setTextureSize(gSavedSettings.getU32("RegionTextureSize")); LLImageGL::sGlobalUseAnisotropic = gSavedSettings.getBOOL("RenderAnisotropic"); @@ -3897,6 +3894,8 @@ void LLAppViewer::idleNetwork() // deal with any queued name requests and replies. gCacheName->processPending(); + LLAvatarNameCache::idle(); + llpushcallstacks ; LLTimer check_message_timer; // Read all available packets from network -- cgit v1.3 From d38727e47ba5d7dd449c6ba62ac6c988ac66236f Mon Sep 17 00:00:00 2001 From: James Cook Date: Mon, 19 Apr 2010 11:26:30 -0700 Subject: DEV-47529 Viewer refresh name lookup cap URL on region cross/teleport Reviewed with Kelly --- indra/newview/llappviewer.cpp | 42 +++++++++++++++++++++++++++++++++++----- indra/newview/llappviewer.h | 2 ++ indra/newview/llviewerregion.cpp | 18 ----------------- 3 files changed, 39 insertions(+), 23 deletions(-) (limited to 'indra/newview/llappviewer.cpp') diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 02902bc8a5..409146c4a3 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3541,9 +3541,10 @@ void LLAppViewer::idle() // NOTE: Starting at this point, we may still have pointers to "dead" objects // floating throughout the various object lists. // + idleNameCache(); idleNetwork(); - + // Check for away from keyboard, kick idle agents. idle_afk_check(); @@ -3878,6 +3879,41 @@ void LLAppViewer::sendLogoutRequest() } } +void LLAppViewer::idleNameCache() +{ + // Neither old nor new name cache can function before agent has a region + LLViewerRegion* region = gAgent.getRegion(); + if (!region) return; + + // deal with any queued name requests and replies. + gCacheName->processPending(); + + // Agent may have moved to a different region, so need to update cap URL + // for name lookups. Can't do this in the cap grant code, as caps are + // granted to neighbor regions before the main agent gets there. Can't + // do it in the move-into-region code because cap not guaranteed to be + // granted yet, for example on teleport. + std::string name_lookup_url; + name_lookup_url.reserve(128); // avoid a memory allocation below + name_lookup_url = region->getCapability("GetDisplayNames"); + + // Ensure capability has been granted + U32 url_size = name_lookup_url.size(); + if (url_size > 0) + { + // capabilities require URLs with slashes before query params: + // https://:/cap//?ids= + // but the caps are granted like: + // https://:/cap/ + if (name_lookup_url[url_size-1] != '/') + { + name_lookup_url += '/'; + } + LLAvatarNameCache::setNameLookupURL(name_lookup_url); + } + LLAvatarNameCache::idle(); +} + // // Handle messages, and all message related stuff // @@ -3905,10 +3941,6 @@ void LLAppViewer::idleNetwork() { LLFastTimer t(FTM_IDLE_NETWORK); // decode - // deal with any queued name requests and replies. - gCacheName->processPending(); - LLAvatarNameCache::idle(); - llpushcallstacks ; LLTimer check_message_timer; // Read all available packets from network diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index a915b7fa50..ff3816922e 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -210,6 +210,8 @@ private: void idle(); void idleShutdown(); + // update avatar SLID and display name caches + void idleNameCache(); void idleNetwork(); void sendLogoutRequest(); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index feade68edc..83c5760b58 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -175,24 +175,6 @@ public: mRegion->showReleaseNotes(); } } - - // JAMESDEBUG *TODO* THIS IS WRONG!!!!!!!!!!!!!!!!!!!!! - // this isn't necessarily the region the viewer is in - - // Avatar name lookup library needs to know who to ask - std::string name_lookup_url = mRegion->getCapability("GetDisplayNames"); - // capabilities require URLs with slashes before query params, like: - // https://:/cap//?ids= - // but the caps are granted like: - // https://:/cap/ - U32 url_size = name_lookup_url.size(); - if (url_size > 0 && name_lookup_url[url_size-1] != '/') - { - name_lookup_url += '/'; - } - LLAvatarNameCache::setNameLookupURL(name_lookup_url); - - llinfos << "JAMESDEBUG cap " << name_lookup_url << llendl; if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState()) { -- cgit v1.3 From 022a598694cd37bebff3322054324c7d27afd5ff Mon Sep 17 00:00:00 2001 From: James Cook Date: Tue, 20 Apr 2010 17:05:49 -0700 Subject: Viewer caches avatar display names between sessions Reviewed with Simon --- indra/llcommon/llavatarname.cpp | 25 +++++++++++++++++++++++++ indra/llcommon/llavatarname.h | 8 +++++++- indra/llmessage/llavatarnamecache.cpp | 34 ++++++++++++++++++++++++++++++++++ indra/newview/llappviewer.cpp | 18 ++++++++++++++++++ 4 files changed, 84 insertions(+), 1 deletion(-) (limited to 'indra/newview/llappviewer.cpp') diff --git a/indra/llcommon/llavatarname.cpp b/indra/llcommon/llavatarname.cpp index 5debf88818..62ba7cb112 100644 --- a/indra/llcommon/llavatarname.cpp +++ b/indra/llcommon/llavatarname.cpp @@ -35,6 +35,13 @@ #include "llavatarname.h" +// Store these in pre-built std::strings to avoid memory allocations in +// LLSD map lookups +static const std::string SL_ID("sl_id"); +static const std::string DISPLAY_NAME("display_name"); +static const std::string IS_DISPLAY_NAME_DEFAULT("is_display_name_default"); +static const std::string EXPIRES("expires"); + LLAvatarName::LLAvatarName() : mSLID(), mDisplayName(), @@ -50,3 +57,21 @@ bool LLAvatarName::operator<(const LLAvatarName& rhs) const else return mSLID < rhs.mSLID; } + +LLSD LLAvatarName::asLLSD() const +{ + LLSD sd; + sd[SL_ID] = mSLID; + sd[DISPLAY_NAME] = mDisplayName; + sd[IS_DISPLAY_NAME_DEFAULT] = mIsDisplayNameDefault; + sd[EXPIRES] = mExpires; + return sd; +} + +void LLAvatarName::fromLLSD(const LLSD& sd) +{ + mSLID = sd[SL_ID].asString(); + mDisplayName = sd[DISPLAY_NAME].asString(); + mIsDisplayNameDefault = sd[IS_DISPLAY_NAME_DEFAULT].asBoolean(); + mExpires = sd[EXPIRES].asReal(); +} diff --git a/indra/llcommon/llavatarname.h b/indra/llcommon/llavatarname.h index 72e2980b5c..11bd5f30b7 100644 --- a/indra/llcommon/llavatarname.h +++ b/indra/llcommon/llavatarname.h @@ -36,13 +36,19 @@ #include +class LLSD; + class LL_COMMON_API LLAvatarName { public: LLAvatarName(); - + bool operator<(const LLAvatarName& rhs) const; + LLSD asLLSD() const; + + void fromLLSD(const LLSD& sd); + // "bobsmith123" or "james.linden", US-ASCII only std::string mSLID; diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index 69770c1f2a..d10958d09d 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -37,6 +37,7 @@ #include "llframetimer.h" #include "llhttpclient.h" #include "llsd.h" +#include "llsdserialize.h" #include #include @@ -243,10 +244,43 @@ void LLAvatarNameCache::cleanupClass() void LLAvatarNameCache::importFile(std::istream& istr) { + LLSD data; + S32 parse_count = LLSDSerialize::fromXMLDocument(data, istr); + if (parse_count < 1) return; + + // by convention LLSD storage is a map + // we only store one entry in the map + LLSD agents = data["agents"]; + + LLUUID agent_id; + LLAvatarName av_name; + LLSD::map_const_iterator it = agents.beginMap(); + for ( ; it != agents.endMap(); ++it) + { + agent_id.set(it->first); + av_name.fromLLSD( it->second ); + sCache[agent_id] = av_name; + } + // entries may have expired since we last ran the viewer, just + // clean them out now + eraseExpired(); + llinfos << "loaded " << sCache.size() << llendl; } void LLAvatarNameCache::exportFile(std::ostream& ostr) { + LLSD agents; + cache_t::const_iterator it = sCache.begin(); + for ( ; it != sCache.end(); ++it) + { + const LLUUID& agent_id = it->first; + const LLAvatarName& av_name = it->second; + // key must be a string + agents[agent_id.asString()] = av_name.asLLSD(); + } + LLSD data; + data["agents"] = agents; + LLSDSerialize::toPrettyXML(data, ostr); } void LLAvatarNameCache::setNameLookupURL(const std::string& name_lookup_url) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 409146c4a3..ac9672858d 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3333,6 +3333,15 @@ void LLAppViewer::saveFinalSnapshot() void LLAppViewer::loadNameCache() { + // display names cache + std::string filename = + gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "avatar_name_cache.xml"); + llifstream name_cache_stream(filename); + if(name_cache_stream.is_open()) + { + LLAvatarNameCache::importFile(name_cache_stream); + } + if (!gCacheName) return; std::string name_cache; @@ -3346,6 +3355,15 @@ void LLAppViewer::loadNameCache() void LLAppViewer::saveNameCache() { + // display names cache + std::string filename = + gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "avatar_name_cache.xml"); + llofstream name_cache_stream(filename); + if(name_cache_stream.is_open()) + { + LLAvatarNameCache::exportFile(name_cache_stream); + } + if (!gCacheName) return; std::string name_cache; -- cgit v1.3 From 98f5fc5ff006a82cacde47de0cbb564b6e703597 Mon Sep 17 00:00:00 2001 From: James Cook Date: Thu, 22 Apr 2010 14:13:45 -0700 Subject: DEV-47529 Turn off display names if no capability from simulator, and Display name update broadcasts entire new name record to nearby viewers Display name update directly inserts new name into sim cache indra.xml has display_names_enabled setting to control cap Synchronized viewer and server versions of avatar name cache Reviewed with Ambroff --- indra/llcommon/llavatarname.cpp | 10 +++++-- indra/llcommon/llavatarname.h | 2 +- indra/llmessage/llavatarnamecache.cpp | 53 ++++++++++++++++++++--------------- indra/llmessage/llavatarnamecache.h | 11 ++------ indra/newview/llappviewer.cpp | 36 +++++++++++++++--------- indra/newview/llviewerdisplayname.cpp | 14 +++++---- indra/newview/llviewerregion.cpp | 17 +++++++++-- indra/newview/llviewerregion.h | 6 ++++ 8 files changed, 93 insertions(+), 56 deletions(-) (limited to 'indra/newview/llappviewer.cpp') diff --git a/indra/llcommon/llavatarname.cpp b/indra/llcommon/llavatarname.cpp index 62ba7cb112..c35b8380b8 100644 --- a/indra/llcommon/llavatarname.cpp +++ b/indra/llcommon/llavatarname.cpp @@ -35,12 +35,15 @@ #include "llavatarname.h" +#include "lldate.h" +#include "llsd.h" + // Store these in pre-built std::strings to avoid memory allocations in // LLSD map lookups static const std::string SL_ID("sl_id"); static const std::string DISPLAY_NAME("display_name"); static const std::string IS_DISPLAY_NAME_DEFAULT("is_display_name_default"); -static const std::string EXPIRES("expires"); +static const std::string DISPLAY_NAME_EXPIRES("display_name_expires"); LLAvatarName::LLAvatarName() : mSLID(), @@ -64,7 +67,7 @@ LLSD LLAvatarName::asLLSD() const sd[SL_ID] = mSLID; sd[DISPLAY_NAME] = mDisplayName; sd[IS_DISPLAY_NAME_DEFAULT] = mIsDisplayNameDefault; - sd[EXPIRES] = mExpires; + sd[DISPLAY_NAME_EXPIRES] = LLDate(mExpires); return sd; } @@ -73,5 +76,6 @@ void LLAvatarName::fromLLSD(const LLSD& sd) mSLID = sd[SL_ID].asString(); mDisplayName = sd[DISPLAY_NAME].asString(); mIsDisplayNameDefault = sd[IS_DISPLAY_NAME_DEFAULT].asBoolean(); - mExpires = sd[EXPIRES].asReal(); + LLDate expires = sd[DISPLAY_NAME_EXPIRES]; + mExpires = expires.secondsSinceEpoch(); } diff --git a/indra/llcommon/llavatarname.h b/indra/llcommon/llavatarname.h index 11bd5f30b7..b30dca6e6e 100644 --- a/indra/llcommon/llavatarname.h +++ b/indra/llcommon/llavatarname.h @@ -63,7 +63,7 @@ public: // Names can change, so need to keep track of when name was // last checked. - // Unix time-from-epoch seconds + // Unix time-from-epoch seconds for efficiency F64 mExpires; // Can be a viewer UI image name ("Person_Check") or a server-side diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index 6455286770..72498111fd 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -48,9 +48,6 @@ namespace LLAvatarNameCache // in the middle of a session. bool sUseDisplayNames = true; - // While false, buffer requests for later. Used during viewer startup. - bool sRunning = false; - // Base lookup URL for name service. // On simulator, loaded from indra.xml // On viewer, usually a simulator capability (at People API team's request) @@ -85,7 +82,8 @@ namespace LLAvatarNameCache LLFrameTimer sEraseExpiredTimer; void processNameFromService(const LLSD& row); - void requestNames(); + void requestNamesViaCapability(); + void requestNamesViaLegacy(); bool isRequestPending(const LLUUID& agent_id); // Erase expired names from cache @@ -203,7 +201,7 @@ void LLAvatarNameCache::processNameFromService(const LLSD& row) } } -void LLAvatarNameCache::requestNames() +void LLAvatarNameCache::requestNamesViaCapability() { // URL format is like: // http://pdp60.lindenlab.com:8000/agents/?ids=3941037e-78ab-45f0-b421-bd6e77c1804d&ids=0012809d-7d2d-4c24-9609-af1230a37715&ids=0019aaba-24af-4f0a-aa72-6457953cf7f0 @@ -252,9 +250,13 @@ void LLAvatarNameCache::requestNames() } } -void LLAvatarNameCache::initClass(bool running) +void LLAvatarNameCache::requestNamesViaLegacy() +{ + // JAMESDEBUG TODO +} + +void LLAvatarNameCache::initClass() { - sRunning = running; } void LLAvatarNameCache::cleanupClass() @@ -307,18 +309,8 @@ void LLAvatarNameCache::setNameLookupURL(const std::string& name_lookup_url) sNameLookupURL = name_lookup_url; } -void LLAvatarNameCache::setRunning(bool running) -{ - sRunning = running; -} - void LLAvatarNameCache::idle() { - if (!sRunning) - { - return; - } - // 100 ms is the threshold for "user speed" operations, so we can // stall for about that long to batch up requests. const F32 SECS_BETWEEN_REQUESTS = 0.1f; @@ -334,18 +326,21 @@ void LLAvatarNameCache::idle() eraseExpired(); } - if (sNameLookupURL.empty()) + if (sAskQueue.empty()) { - // ...viewer has not yet received capability from region return; } - if (sAskQueue.empty()) + if (!sNameLookupURL.empty()) { - return; + requestNamesViaCapability(); + } + else + { + // ...fall back to legacy name cache system + requestNamesViaLegacy(); + llwarns << "JAMESDEBUG legacy lookup call" << llendl; } - - requestNames(); // Move requests from Ask queue to Pending queue F64 now = LLFrameTimer::getTotalSeconds(); @@ -460,3 +455,15 @@ void LLAvatarNameCache::erase(const LLUUID& agent_id) { sCache.erase(agent_id); } + +void LLAvatarNameCache::fetch(const LLUUID& agent_id) +{ + // re-request, even if request is already pending + sAskQueue.insert(agent_id); +} + +void LLAvatarNameCache::insert(const LLUUID& agent_id, const LLAvatarName& av_name) +{ + // *TODO: update timestamp if zero? + sCache[agent_id] = av_name; +} diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h index 4aabacd1f3..68a6c28b7b 100644 --- a/indra/llmessage/llavatarnamecache.h +++ b/indra/llmessage/llavatarnamecache.h @@ -42,21 +42,16 @@ class LLUUID; namespace LLAvatarNameCache { - // On the viewer, name cache starts in a non-running state until we - // know if we have the name lookup capability for the agent's region. - // In that state it buffers requests for later. - void initClass(bool running); + void initClass(); void cleanupClass(); void importFile(std::istream& istr); void exportFile(std::ostream& ostr); // On the viewer, usually a simulator capabilitity + // If empty, name cache will fall back to using legacy name + // lookup system void setNameLookupURL(const std::string& name_lookup_url); - - // Once we know if the lookup service is available we can start - // requesting names. - void setRunning(bool running); // Periodically makes a batch request for display names not already in // cache. Call once per frame. diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index ac9672858d..e160951b91 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3906,6 +3906,11 @@ void LLAppViewer::idleNameCache() // deal with any queued name requests and replies. gCacheName->processPending(); + // Can't run the new cache until we have the list of capabilities + // for the agent region, and can therefore decide whether to use + // display names or fall back to the old name system. + if (!region->capabilitiesReceived()) return; + // Agent may have moved to a different region, so need to update cap URL // for name lookups. Can't do this in the cap grant code, as caps are // granted to neighbor regions before the main agent gets there. Can't @@ -3914,21 +3919,26 @@ void LLAppViewer::idleNameCache() std::string name_lookup_url; name_lookup_url.reserve(128); // avoid a memory allocation below name_lookup_url = region->getCapability("GetDisplayNames"); - - // Ensure capability has been granted - U32 url_size = name_lookup_url.size(); - if (url_size > 0) - { - // capabilities require URLs with slashes before query params: - // https://:/cap//?ids= - // but the caps are granted like: - // https://:/cap/ - if (name_lookup_url[url_size-1] != '/') - { - name_lookup_url += '/'; - } + if (!name_lookup_url.empty()) + { + // we have support for display names, use it + U32 url_size = name_lookup_url.size(); + // capabilities require URLs with slashes before query params: + // https://:/cap//?ids= + // but the caps are granted like: + // https://:/cap/ + if (url_size > 0 && name_lookup_url[url_size-1] != '/') + { + name_lookup_url += '/'; + } LLAvatarNameCache::setNameLookupURL(name_lookup_url); } + else + { + // Display names not available on this region + LLAvatarNameCache::setNameLookupURL( std::string() ); + } + LLAvatarNameCache::idle(); } diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp index 1cfada48ad..8bed501c6e 100644 --- a/indra/newview/llviewerdisplayname.cpp +++ b/indra/newview/llviewerdisplayname.cpp @@ -120,20 +120,22 @@ class LLDisplayNameUpdate : public LLHTTPNode { LLSD body = input["body"]; LLUUID agent_id = body["agent_id"]; - std::string slid = body["sl_id"]; std::string old_display_name = body["old_display_name"]; - std::string new_display_name = body["new_display_name"]; + // By convention this record is called "agent" in the People API + std::string name_data = body["agent"]; - // force re-request of this agent's name data - LLAvatarNameCache::erase(agent_id); + // Inject the new name data into cache + LLAvatarName av_name; + av_name.fromLLSD( name_data ); + LLAvatarNameCache::insert(agent_id, av_name); // force name tag to update LLVOAvatar::invalidateNameTag(agent_id); LLSD args; args["OLD_NAME"] = old_display_name; - args["SLID"] = slid; - args["NEW_NAME"] = new_display_name; + args["SLID"] = av_name.mSLID; + args["NEW_NAME"] = av_name.mDisplayName; LLNotificationsUtil::add("DisplayNameUpdate", args); } }; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 502fc87e41..9e877bc1af 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -175,7 +175,9 @@ public: mRegion->showReleaseNotes(); } } - + + mRegion->setCapabilitiesReceived(true); + if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState()) { LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED ); @@ -232,7 +234,8 @@ LLViewerRegion::LLViewerRegion(const U64 &handle, // LLCapabilityListener binds all the globals it expects to need at // construction time. mCapabilityListener(host.getString(), gMessageSystem, *this, - gAgent.getID(), gAgent.getSessionID()) + gAgent.getID(), gAgent.getSessionID()), + mCapabilitiesReceived(false) { mWidth = region_width_meters; mOriginGlobal = from_region_handle(handle); @@ -1557,6 +1560,16 @@ std::string LLViewerRegion::getCapability(const std::string& name) const return iter->second; } +bool LLViewerRegion::capabilitiesReceived() const +{ + return mCapabilitiesReceived; +} + +void LLViewerRegion::setCapabilitiesReceived(bool received) +{ + mCapabilitiesReceived = received; +} + void LLViewerRegion::logActiveCapabilities() const { int count = 0; diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 49d0900f2a..5f6c754187 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -232,6 +232,11 @@ public: void setCapability(const std::string& name, const std::string& url); // implements LLCapabilityProvider virtual std::string getCapability(const std::string& name) const; + + // has region received its final (not seed) capability list? + bool capabilitiesReceived() const; + void setCapabilitiesReceived(bool received); + static bool isSpecialCapabilityName(const std::string &name); void logActiveCapabilities() const; @@ -412,6 +417,7 @@ private: private: bool mAlive; // can become false if circuit disconnects + bool mCapabilitiesReceived; //spatial partitions for objects in this region std::vector mObjectPartition; -- cgit v1.3 From d89de271437f35f9d26e28409e6cc1d593a2fc7a Mon Sep 17 00:00:00 2001 From: James Cook Date: Mon, 26 Apr 2010 10:51:42 -0700 Subject: DEV-47529 Viewer turns display names on/off based on region capability Also refreshes name tags so you can see the state. Reviewed with Kelly. --- indra/newview/llappviewer.cpp | 18 +++++++++++++++++- indra/newview/llvoavatar.cpp | 14 ++++++++++++++ indra/newview/llvoavatar.h | 2 ++ 3 files changed, 33 insertions(+), 1 deletion(-) (limited to 'indra/newview/llappviewer.cpp') diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index e160951b91..3b236676f1 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3919,7 +3919,8 @@ void LLAppViewer::idleNameCache() std::string name_lookup_url; name_lookup_url.reserve(128); // avoid a memory allocation below name_lookup_url = region->getCapability("GetDisplayNames"); - if (!name_lookup_url.empty()) + bool have_capability = !name_lookup_url.empty(); + if (have_capability) { // we have support for display names, use it U32 url_size = name_lookup_url.size(); @@ -3939,6 +3940,21 @@ void LLAppViewer::idleNameCache() LLAvatarNameCache::setNameLookupURL( std::string() ); } + // Error recovery - did we change state? + if (LLAvatarNameCache::useDisplayNames() && !have_capability) + { + // ...we just lost the capability, turn names off + LLAvatarNameCache::setUseDisplayNames(false); + // name tags are persistant on screen, so make sure they refresh + LLVOAvatar::invalidateNameTags(); + } + else if (!LLAvatarNameCache::useDisplayNames() && have_capability) + { + // ...we just gained the capability, turn names on + LLAvatarNameCache::setUseDisplayNames(true); + LLVOAvatar::invalidateNameTags(); + } + LLAvatarNameCache::idle(); } diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 881012467e..9e56357b30 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -3017,6 +3017,20 @@ void LLVOAvatar::invalidateNameTag(const LLUUID& agent_id) avatar->clearNameTag(); } +//static +void LLVOAvatar::invalidateNameTags() +{ + std::vector::iterator it = LLCharacter::sInstances.begin(); + for ( ; it != LLCharacter::sInstances.end(); ++it) + { + LLVOAvatar* avatar = dynamic_cast(*it); + if (!avatar) continue; + if (avatar->isDead()) continue; + + avatar->clearNameTag(); + } +} + // Compute name tag position during idle update LLVector3 LLVOAvatar::idleUpdateNameTagPosition(const LLVector3& root_pos_last) { diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 4e0275deb5..ad0e2b096e 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -216,6 +216,8 @@ public: LLColor4 getNameTagColor(bool is_friend); void clearNameTag(); static void invalidateNameTag(const LLUUID& agent_id); + // force all name tags to rebuild, useful when display names turned on/off + static void invalidateNameTags(); void addNameTagLine(const std::string& line, const LLColor4& color, S32 style, const LLFontGL* font); void idleUpdateRenderCost(); void idleUpdateTractorBeam(); -- cgit v1.3 From 56f5a6909d8a665531e3f6ede380cad57e313728 Mon Sep 17 00:00:00 2001 From: James Cook Date: Tue, 27 Apr 2010 13:54:40 -0700 Subject: Menu item to disable display names for testing works again Start up cache in not-running state on viewer. Set cache running when idle() is called. Explicitly refresh name tags when toggled. Reviewed with Simon --- indra/llmessage/llavatarnamecache.cpp | 50 ++++++++++++++++++++++++----------- indra/llmessage/llavatarnamecache.h | 13 ++++++--- indra/newview/llappviewer.cpp | 11 ++------ indra/newview/llstartup.cpp | 4 ++- indra/newview/llviewermenu.cpp | 2 ++ 5 files changed, 51 insertions(+), 29 deletions(-) (limited to 'indra/newview/llappviewer.cpp') diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index 5acecd1dcb..85775f19da 100644 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -44,9 +44,13 @@ namespace LLAvatarNameCache { - // Will be turned on and off based on service availability, sometimes - // in the middle of a session. + // Manual override for display names - can disable even if the region + // supports it. bool sUseDisplayNames = true; + + // Cache starts in a paused state until we can determine if the + // current region supports display names. + bool sRunning = false; // Base lookup URL for name service. // On simulator, loaded from indra.xml @@ -318,8 +322,9 @@ void LLAvatarNameCache::requestNamesViaLegacy() // JAMESDEBUG TODO } -void LLAvatarNameCache::initClass() +void LLAvatarNameCache::initClass(bool running) { + sRunning = running; } void LLAvatarNameCache::cleanupClass() @@ -375,8 +380,16 @@ void LLAvatarNameCache::setNameLookupURL(const std::string& name_lookup_url) sNameLookupURL = name_lookup_url; } +bool LLAvatarNameCache::hasNameLookupURL() +{ + return !sNameLookupURL.empty(); +} + void LLAvatarNameCache::idle() { + // By convention, start running at first idle() call + sRunning = true; + // 100 ms is the threshold for "user speed" operations, so we can // stall for about that long to batch up requests. const F32 SECS_BETWEEN_REQUESTS = 0.1f; @@ -405,7 +418,6 @@ void LLAvatarNameCache::idle() { // ...fall back to legacy name cache system requestNamesViaLegacy(); - llwarns << "JAMESDEBUG legacy lookup call" << llendl; } // Move requests from Ask queue to Pending queue @@ -451,11 +463,15 @@ void LLAvatarNameCache::eraseExpired() bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name) { - std::map::iterator it = sCache.find(agent_id); - if (it != sCache.end()) + if (sRunning) { - *av_name = it->second; - return true; + // ...only do immediate lookups when cache is running + std::map::iterator it = sCache.find(agent_id); + if (it != sCache.end()) + { + *av_name = it->second; + return true; + } } if (!isRequestPending(agent_id)) @@ -468,14 +484,18 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name) void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot) { - std::map::iterator it = sCache.find(agent_id); - if (it != sCache.end()) + if (sRunning) { - // ...name already exists in cache, fire callback now - callback_signal_t signal; - signal.connect(slot); - signal(agent_id, it->second); - return; + // ...only do immediate lookups when cache is running + std::map::iterator it = sCache.find(agent_id); + if (it != sCache.end()) + { + // ...name already exists in cache, fire callback now + callback_signal_t signal; + signal.connect(slot); + signal(agent_id, it->second); + return; + } } // schedule a request diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h index 68a6c28b7b..26cecc5ab5 100644 --- a/indra/llmessage/llavatarnamecache.h +++ b/indra/llmessage/llavatarnamecache.h @@ -42,7 +42,10 @@ class LLUUID; namespace LLAvatarNameCache { - void initClass(); + // Until the cache is set running, immediate lookups will fail and + // async lookups will be queued. This allows us to block requests + // until we know if the first region supports display names. + void initClass(bool running); void cleanupClass(); void importFile(std::istream& istr); @@ -52,6 +55,10 @@ namespace LLAvatarNameCache // If empty, name cache will fall back to using legacy name // lookup system void setNameLookupURL(const std::string& name_lookup_url); + + // Do we have a valid lookup URL, hence are we trying to use the + // new display name lookup system? + bool hasNameLookupURL(); // Periodically makes a batch request for display names not already in // cache. Call once per frame. @@ -71,9 +78,7 @@ namespace LLAvatarNameCache // If name information is in cache, callback will be called immediately. void get(const LLUUID& agent_id, callback_slot_t slot); - // JAMESDEBUG TODO: collapse this with setNameLookupUrl? - // Not all grids support display names. If display names are disabled, - // fall back to old name lookup system. + // Allow display names to be explicitly disabled for testing. void setUseDisplayNames(bool use); bool useDisplayNames(); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 3b236676f1..5df6776fa7 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3916,6 +3916,7 @@ void LLAppViewer::idleNameCache() // granted to neighbor regions before the main agent gets there. Can't // do it in the move-into-region code because cap not guaranteed to be // granted yet, for example on teleport. + bool had_capability = LLAvatarNameCache::hasNameLookupURL(); std::string name_lookup_url; name_lookup_url.reserve(128); // avoid a memory allocation below name_lookup_url = region->getCapability("GetDisplayNames"); @@ -3941,19 +3942,11 @@ void LLAppViewer::idleNameCache() } // Error recovery - did we change state? - if (LLAvatarNameCache::useDisplayNames() && !have_capability) + if (had_capability != have_capability) { - // ...we just lost the capability, turn names off - LLAvatarNameCache::setUseDisplayNames(false); // name tags are persistant on screen, so make sure they refresh LLVOAvatar::invalidateNameTags(); } - else if (!LLAvatarNameCache::useDisplayNames() && have_capability) - { - // ...we just gained the capability, turn names on - LLAvatarNameCache::setUseDisplayNames(true); - LLVOAvatar::invalidateNameTags(); - } LLAvatarNameCache::idle(); } diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 7531853008..2baaf0f58f 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2771,7 +2771,9 @@ void LLStartUp::initNameCache() // Load stored cache if possible LLAppViewer::instance()->loadNameCache(); - LLAvatarNameCache::initClass(); + // Start cache in not-running state until we figure out if we have + // capabilities for display name lookup + LLAvatarNameCache::initClass(false); } void LLStartUp::cleanupNameCache() diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index adf71878f5..9fe16b5253 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -7597,6 +7597,8 @@ void toggle_display_names() { bool use = LLAvatarNameCache::useDisplayNames(); LLAvatarNameCache::setUseDisplayNames(!use); + + LLVOAvatar::invalidateNameTags(); } void show_navbar_context_menu(LLView* ctrl, S32 x, S32 y) -- cgit v1.3 From 2c999688c4c792630865bd97c2b45ff886d9a26c Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Thu, 12 Aug 2010 15:18:25 -0700 Subject: added remaining hints and fade in/fade out behavior --- indra/newview/app_settings/settings.xml | 33 ++++++++++++ indra/newview/llagent.cpp | 21 ++++++++ indra/newview/llagent.h | 1 + indra/newview/llappviewer.cpp | 3 ++ indra/newview/llappviewer.h | 1 + indra/newview/llfirstuse.cpp | 8 +-- indra/newview/llfirstuse.h | 2 +- indra/newview/llhints.cpp | 62 +++++++++++++++++----- indra/newview/llmoveview.cpp | 2 + indra/newview/llnearbychatbar.cpp | 2 + indra/newview/llnearbychathandler.cpp | 5 +- indra/newview/llpanelplaces.cpp | 3 ++ indra/newview/llsidepanelinventory.cpp | 4 +- indra/newview/llsidetray.cpp | 2 + indra/newview/llstatusbar.cpp | 7 +++ indra/newview/llviewerwindow.cpp | 13 +++++ .../newview/skins/default/xui/en/notifications.xml | 28 +++++----- indra/newview/skins/default/xui/en/panel_hint.xml | 1 + 18 files changed, 164 insertions(+), 34 deletions(-) (limited to 'indra/newview/llappviewer.cpp') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 3326319e2d..12fb8741ca 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -11947,5 +11947,38 @@ Value 10 + NotMovingHintTimeout + + Comment + Number of seconds to wait for resident to move before displaying move hint. + Persist + 1 + Type + F32 + Value + 120.0 + + DestinationGuideHintTimeout + + Comment + Number of seconds to wait before telling resident about destination guide. + Persist + 1 + Type + F32 + Value + 600.0 + + SidePanelHintTimeout + + Comment + Number of seconds to wait before telling resident about side panel. + Persist + 1 + Type + F32 + Value + 300.0 + diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index e85d108bb2..0ff88f7451 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -44,6 +44,7 @@ #include "llcallingcard.h" #include "llchannelmanager.h" #include "llconsole.h" +#include "llfirstuse.h" #include "llfloatercamera.h" #include "llfloaterreg.h" #include "llfloatertools.h" @@ -306,6 +307,9 @@ void LLAgent::ageChat() //----------------------------------------------------------------------------- void LLAgent::moveAt(S32 direction, bool reset) { + mMoveTimer.reset(); + LLFirstUse::notMoving(false); + // age chat timer so it fades more quickly when you are intentionally moving ageChat(); @@ -331,6 +335,9 @@ void LLAgent::moveAt(S32 direction, bool reset) //----------------------------------------------------------------------------- void LLAgent::moveAtNudge(S32 direction) { + mMoveTimer.reset(); + LLFirstUse::notMoving(false); + // age chat timer so it fades more quickly when you are intentionally moving ageChat(); @@ -353,6 +360,9 @@ void LLAgent::moveAtNudge(S32 direction) //----------------------------------------------------------------------------- void LLAgent::moveLeft(S32 direction) { + mMoveTimer.reset(); + LLFirstUse::notMoving(false); + // age chat timer so it fades more quickly when you are intentionally moving ageChat(); @@ -375,6 +385,9 @@ void LLAgent::moveLeft(S32 direction) //----------------------------------------------------------------------------- void LLAgent::moveLeftNudge(S32 direction) { + mMoveTimer.reset(); + LLFirstUse::notMoving(false); + // age chat timer so it fades more quickly when you are intentionally moving ageChat(); @@ -397,6 +410,9 @@ void LLAgent::moveLeftNudge(S32 direction) //----------------------------------------------------------------------------- void LLAgent::moveUp(S32 direction) { + mMoveTimer.reset(); + LLFirstUse::notMoving(false); + // age chat timer so it fades more quickly when you are intentionally moving ageChat(); @@ -1534,6 +1550,11 @@ void LLAgent::propagate(const F32 dt) //----------------------------------------------------------------------------- void LLAgent::updateAgentPosition(const F32 dt, const F32 yaw_radians, const S32 mouse_x, const S32 mouse_y) { + if (mMoveTimer.getElapsedTimeF32() > gSavedSettings.getF32("NotMovingHintTimeout")) + { + LLFirstUse::notMoving(); + } + propagate(dt); // static S32 cameraUpdateCount = 0; diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 32f9b00135..0185f874f9 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -270,6 +270,7 @@ public: private: LLFrameTimer mFidgetTimer; LLFrameTimer mFocusObjectFadeTimer; + LLFrameTimer mMoveTimer; F32 mNextFidgetTime; S32 mCurrentFidget; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index d222d94ec6..768be116f6 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -268,6 +268,7 @@ const F64 FRAME_STALL_THRESHOLD = 1.0; LLTimer gRenderStartTime; LLFrameTimer gForegroundTime; +LLFrameTimer gLoggedInTime; LLTimer gLogoutTimer; static const F32 LOGOUT_REQUEST_TIME = 6.f; // this will be cut short by the LogoutReply msg. F32 gLogoutMaxTime = LOGOUT_REQUEST_TIME; @@ -597,6 +598,7 @@ LLAppViewer::LLAppViewer() : setupErrorHandling(); sInstance = this; + gLoggedInTime.stop(); } LLAppViewer::~LLAppViewer() @@ -4281,6 +4283,7 @@ void LLAppViewer::pingMainloopTimeout(const std::string& state, F32 secs) void LLAppViewer::handleLoginComplete() { + gLoggedInTime.start(); initMainloopTimeout("Mainloop Init"); // Store some data to DebugInfo in case of a freeze. diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 0b862a92a1..e5e27dc908 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -313,6 +313,7 @@ extern U32 gFrameStalls; extern LLTimer gRenderStartTime; extern LLFrameTimer gForegroundTime; +extern LLFrameTimer gLoggedInTime; extern F32 gLogoutMaxTime; extern LLTimer gLogoutTimer; diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp index d2dff49904..4708087846 100644 --- a/indra/newview/llfirstuse.cpp +++ b/indra/newview/llfirstuse.cpp @@ -90,7 +90,7 @@ void LLFirstUse::useOverrideKeys() } // static -void LLFirstUse::otherAvatarChat(bool enable) +void LLFirstUse::otherAvatarChatFirst(bool enable) { firstUseNotification("FirstOtherChatBeforeUser", enable, "HintChat", LLSD(), LLSD().with("target", "nearby_chat_bar").with("direction", "top")); } @@ -116,13 +116,15 @@ void LLFirstUse::useSandbox() // static void LLFirstUse::notUsingDestinationGuide(bool enable) { - firstUseNotification("FirstNotUseDestinationGuide", enable, "HintDestinationGuide", LLSD(), LLSD().with("target", "dest_guide_btn").with("direction", "left")); + // not doing this yet + //firstUseNotification("FirstNotUseDestinationGuide", enable, "HintDestinationGuide", LLSD(), LLSD().with("target", "dest_guide_btn").with("direction", "left")); } // static void LLFirstUse::notUsingSidePanel(bool enable) { - firstUseNotification("FirstNotUseSidePanel", enable, "HintSidePanel", LLSD(), LLSD().with("target", "side_panel_btn").with("direction", "left")); + // not doing this yet + //firstUseNotification("FirstNotUseSidePanel", enable, "HintSidePanel", LLSD(), LLSD().with("target", "side_panel_btn").with("direction", "left")); } // static diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h index abf7d9836e..48943cd9ab 100644 --- a/indra/newview/llfirstuse.h +++ b/indra/newview/llfirstuse.h @@ -91,7 +91,7 @@ public: static void resetFirstUse(); static void useOverrideKeys(); - static void otherAvatarChat(bool enable = true); + static void otherAvatarChatFirst(bool enable = true); static void sit(bool enable = true); static void notUsingDestinationGuide(bool enable = true); static void notUsingSidePanel(bool enable = true); diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp index 2f3504efed..66799535c1 100644 --- a/indra/newview/llhints.cpp +++ b/indra/newview/llhints.cpp @@ -72,7 +72,13 @@ public: Optional left_arrow, up_arrow, right_arrow, - down_arrow; + down_arrow; + Optional left_arrow_offset, + up_arrow_offset, + right_arrow_offset, + down_arrow_offset; + Optional fade_in_time, + fade_out_time; Params() : direction("direction", TOP), @@ -81,7 +87,13 @@ public: left_arrow("left_arrow", LLUI::getUIImage("hint_arrow_left")), up_arrow("up_arrow", LLUI::getUIImage("hint_arrow_up")), right_arrow("right_arrow", LLUI::getUIImage("hint_arrow_right")), - down_arrow("down_arrow", LLUI::getUIImage("hint_arrow_down")) + down_arrow("down_arrow", LLUI::getUIImage("hint_arrow_down")), + left_arrow_offset("left_arrow_offset", 3), + up_arrow_offset("up_arrow_offset", -2), + right_arrow_offset("right_arrow_offset", -3), + down_arrow_offset("down_arrow_offset", 5), + fade_in_time("fade_in_time", 0.2f), + fade_out_time("fade_out_time", 0.5f) {} }; @@ -92,7 +104,7 @@ public: void onClickClose() { hide(); } void draw(); - void hide() { die(); } + void hide() { mHidden = true; mFadeTimer.reset(); } private: LLNotificationPtr mNotification; @@ -103,6 +115,14 @@ private: mArrowUp, mArrowRight, mArrowDown; + S32 mArrowLeftOffset, + mArrowUpOffset, + mArrowRightOffset, + mArrowDownOffset; + LLFrameTimer mFadeTimer; + F32 mFadeInTime, + mFadeOutTime; + bool mHidden; }; @@ -117,6 +137,13 @@ LLHintPopup::LLHintPopup(const LLHintPopup::Params& p) mArrowUp(p.up_arrow), mArrowRight(p.right_arrow), mArrowDown(p.down_arrow), + mArrowLeftOffset(p.left_arrow_offset), + mArrowUpOffset(p.up_arrow_offset), + mArrowRightOffset(p.right_arrow_offset), + mArrowDownOffset(p.down_arrow_offset), + mHidden(false), + mFadeInTime(p.fade_in_time), + mFadeOutTime(p.fade_out_time), LLPanel(p) { LLUICtrlFactory::getInstance()->buildPanel(this, "panel_hint.xml"); @@ -138,6 +165,17 @@ BOOL LLHintPopup::postBuild() void LLHintPopup::draw() { + F32 alpha = 1.f; + if (mHidden) + { + alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, mFadeOutTime, 1.f, 0.f); + } + else + { + alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, mFadeInTime, 0.f, 1.f); + } + LLViewDrawContext context(alpha); + LLView* targetp = mTarget.get(); if (!targetp || !targetp->isInVisibleChain()) { @@ -153,8 +191,6 @@ void LLHintPopup::draw() LLRect arrow_rect; LLUIImagePtr arrow_imagep; - const S32 OVERLAP = 5; - switch(mDirection) { case LEFT: @@ -162,7 +198,7 @@ void LLHintPopup::draw() target_rect.getCenterY(), my_local_rect.getWidth(), my_local_rect.getHeight()); - arrow_rect.setCenterAndSize(my_local_rect.mRight + mArrowRight->getWidth() / 2 - OVERLAP, + arrow_rect.setCenterAndSize(my_local_rect.mRight + mArrowRight->getWidth() / 2 + mArrowRightOffset, my_local_rect.getCenterY(), mArrowRight->getWidth(), mArrowRight->getHeight()); @@ -174,7 +210,7 @@ void LLHintPopup::draw() my_local_rect.getWidth(), my_local_rect.getHeight()); arrow_rect.setCenterAndSize(my_local_rect.getCenterX(), - my_local_rect.mBottom - mArrowDown->getHeight() / 2 + OVERLAP, + my_local_rect.mBottom - mArrowDown->getHeight() / 2 + mArrowDownOffset, mArrowDown->getWidth(), mArrowDown->getHeight()); arrow_imagep = mArrowDown; @@ -184,19 +220,19 @@ void LLHintPopup::draw() target_rect.mTop - (my_local_rect.getHeight() / 2 + mDistance), my_local_rect.getWidth(), my_local_rect.getHeight()); - arrow_rect.setCenterAndSize(my_local_rect.mLeft - mArrowLeft->getWidth() / 2 + OVERLAP, + arrow_rect.setCenterAndSize(my_local_rect.mLeft - mArrowLeft->getWidth() / 2 + mArrowLeftOffset, my_local_rect.getCenterY(), mArrowLeft->getWidth(), mArrowLeft->getHeight()); arrow_imagep = mArrowLeft; break; case BOTTOM: - my_rect.setCenterAndSize( target_rect.mLeft + (my_local_rect.getWidth() / 2 + mDistance), - target_rect.getCenterY(), + my_rect.setCenterAndSize( target_rect.getCenterX(), + target_rect.mBottom - (my_local_rect.getHeight() / 2 + mDistance), my_local_rect.getWidth(), my_local_rect.getHeight()); arrow_rect.setCenterAndSize(my_local_rect.getCenterX(), - my_local_rect.mTop + mArrowUp->getHeight() / 2 - OVERLAP, + my_local_rect.mTop + mArrowUp->getHeight() / 2 + mArrowUpOffset, mArrowUp->getWidth(), mArrowUp->getHeight()); arrow_imagep = mArrowUp; @@ -205,7 +241,7 @@ void LLHintPopup::draw() setShape(my_rect); LLPanel::draw(); - arrow_imagep->draw(arrow_rect); + arrow_imagep->draw(arrow_rect, LLColor4(1.f, 1.f, 1.f, alpha)); } } @@ -217,7 +253,7 @@ std::map LLHints::sHints; void LLHints::show(LLNotificationPtr hint) { LLHintPopup::Params p; - LLParamSDParser::instance().readSD(hint->getPayload(), p); + LLParamSDParser::instance().readSD(hint->getPayload(), p); p.notification = hint; diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 19615def93..148a5786cb 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -169,6 +169,7 @@ void LLFloaterMove::setVisible(BOOL visible) if (visible) { + LLFirstUse::notMoving(false); // Attach the Stand/Stop Flying panel. LLPanelStandStopFlying* ssf_panel = LLPanelStandStopFlying::getInstance(); ssf_panel->reparent(this); @@ -571,6 +572,7 @@ void LLPanelStandStopFlying::setStandStopFlyingMode(EStandStopFlyingMode mode) if (mode == SSFM_STAND) { LLFirstUse::sit(); + LLFirstUse::notMoving(false); } panel->mStandButton->setVisible(SSFM_STAND == mode); panel->mStopFlyingButton->setVisible(SSFM_STOP_FLYING == mode); diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index 6cfd810c10..41a19a54a8 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -38,6 +38,7 @@ #include "llfloaterreg.h" #include "lltrans.h" +#include "llfirstuse.h" #include "llnearbychatbar.h" #include "llbottomtray.h" #include "llagent.h" @@ -490,6 +491,7 @@ BOOL LLNearbyChatBar::matchChatTypeTrigger(const std::string& in_str, std::strin void LLNearbyChatBar::onChatBoxKeystroke(LLLineEditor* caller, void* userdata) { + LLFirstUse::otherAvatarChatFirst(false); LLNearbyChatBar* self = (LLNearbyChatBar *)userdata; diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 31a59146d6..4011552112 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -350,7 +350,10 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args) if(chat_msg.mSourceType == CHAT_SOURCE_AGENT && chat_msg.mFromID.notNull()) { LLRecentPeople::instance().add(chat_msg.mFromID); - LLFirstUse::otherAvatarChat(); + if (chat_msg.mFromID != gAgentID) + { + LLFirstUse::otherAvatarChatFirst(); + } } if(chat_msg.mText.empty()) diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index abf2b94b09..c8a9176d92 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -42,6 +42,7 @@ #include "llcombobox.h" #include "llfiltereditor.h" +#include "llfirstuse.h" #include "llfloaterreg.h" #include "llnotificationsutil.h" #include "lltabcontainer.h" @@ -351,6 +352,8 @@ BOOL LLPanelPlaces::postBuild() void LLPanelPlaces::onOpen(const LLSD& key) { + LLFirstUse::notUsingDestinationGuide(false); + if (!mPlaceProfile || !mLandmarkInfo) return; diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 7eda4fad20..f9189bfb22 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -129,6 +129,8 @@ BOOL LLSidepanelInventory::postBuild() void LLSidepanelInventory::onOpen(const LLSD& key) { + LLFirstUse::inventoryOffer(false); + if(key.size() == 0) return; @@ -149,8 +151,6 @@ void LLSidepanelInventory::onOpen(const LLSD& key) mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection()); showTaskInfoPanel(); } - - LLFirstUse::inventoryOffer(false); } void LLSidepanelInventory::onInfoButtonClicked() diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 7e8dc2747b..7cfc774883 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -37,6 +37,7 @@ #include "llagentcamera.h" #include "llappviewer.h" #include "llbottomtray.h" +#include "llfirstuse.h" #include "llhints.h" #include "llsidetray.h" #include "llviewerwindow.h" @@ -470,6 +471,7 @@ void LLSideTray::onTabButtonClick(string name) void LLSideTray::onToggleCollapse() { + LLFirstUse::notUsingSidePanel(false); if(mCollapsed) { expandSideBar(); diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 46d148c088..6a081a573e 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -39,6 +39,7 @@ #include "llagentcamera.h" #include "llbutton.h" #include "llcommandhandler.h" +#include "llfirstuse.h" #include "llviewercontrol.h" #include "llfloaterbuycurrency.h" #include "llbuycurrencyhtml.h" @@ -341,6 +342,11 @@ void LLStatusBar::creditBalance(S32 credit) void LLStatusBar::setBalance(S32 balance) { + if (balance > getBalance() && getBalance() != 0) + { + LLFirstUse::receiveLindens(); + } + std::string money_str = LLResMgr::getInstance()->getMonetaryString( balance ); LLTextBox* balance_box = getChild("balance"); @@ -463,6 +469,7 @@ void LLStatusBar::onClickBuyCurrency() // open a currency floater - actual one open depends on // value specified in settings.xml LLBuyCurrencyHTML::openCurrencyFloater(); + LLFirstUse::receiveLindens(false); } void LLStatusBar::onMouseEnterVolume() diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 566f4b45ba..cfb8b077e5 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -102,6 +102,7 @@ #include "llface.h" #include "llfeaturemanager.h" #include "llfilepicker.h" +#include "llfirstuse.h" #include "llfloater.h" #include "llfloaterbuildoptions.h" #include "llfloaterbuyland.h" @@ -2423,6 +2424,18 @@ void LLViewerWindow::updateUI() static std::string last_handle_msg; + if (gLoggedInTime.getStarted()) + { + if (gLoggedInTime.getElapsedTimeF32() > gSavedSettings.getF32("DestinationGuideHintTimeout")) + { + LLFirstUse::notUsingDestinationGuide(); + } + if (gLoggedInTime.getElapsedTimeF32() > gSavedSettings.getF32("SidePanelHintTimeout")) + { + LLFirstUse::notUsingSidePanel(); + } + } + LLConsole::updateClass(); // animate layout stacks so we have up to date rect for world view diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 8db89a7622..a2d06f77a9 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -6386,53 +6386,53 @@ Mute everyone? - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam + To join the conversation, type into the chat field below. - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam + To stand up and exit the sitting position, click the Stand button. - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam + The Destination Guide contains thousands of new places to discover. Select a location and choose Teleport to start exploring. - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam + Get quick access to your inventory, outfits, profiles and more in the side panel. - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam + To walk or run, open the Move Panel and use the directional arrows to navigate. You can also use the directional keys on your keyboard. - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam + Check your inventory to find items. Newest items can be easily found in the Recent tab. - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam + Here's your current balance of L$. Click Buy L$ to purchase more Linden Dollars. diff --git a/indra/newview/skins/default/xui/en/panel_hint.xml b/indra/newview/skins/default/xui/en/panel_hint.xml index 7cb8f58c37..54ea08e5d4 100644 --- a/indra/newview/skins/default/xui/en/panel_hint.xml +++ b/indra/newview/skins/default/xui/en/panel_hint.xml @@ -29,6 +29,7 @@ width="16" height="16" name="close" + follows="right|top" image_unselected="Icon_Close_Foreground" image_selected="Icon_Close_Press"/> -- cgit v1.3 From c20bd2dfee1068d5a23eef9a10d21c2035c0b324 Mon Sep 17 00:00:00 2001 From: Richard Nelson Date: Mon, 16 Aug 2010 15:00:51 -0700 Subject: cleaned up LLUICtrlFactory... removed redundant functionality moved buildPanel to LLPanel --- indra/llui/llaccordionctrl.cpp | 2 +- indra/llui/llpanel.cpp | 101 +++++++++++++- indra/llui/llpanel.h | 62 ++++++++- indra/llui/lltextbase.h | 1 + indra/llui/lluictrlfactory.cpp | 152 ++-------------------- indra/llui/lluictrlfactory.h | 120 ++--------------- indra/llui/llview.cpp | 4 +- indra/newview/llagent.cpp | 11 +- indra/newview/llagent.h | 8 -- indra/newview/llappviewer.cpp | 8 +- indra/newview/llavatarlist.cpp | 2 +- indra/newview/llavatarlistitem.cpp | 2 +- indra/newview/llbottomtray.cpp | 9 +- indra/newview/llcallfloater.cpp | 2 +- indra/newview/llchathistory.cpp | 4 +- indra/newview/llchatitemscontainerctrl.cpp | 2 +- indra/newview/llfloatercamera.cpp | 2 +- indra/newview/llfloaterinventory.cpp | 2 +- indra/newview/llfloaternotificationsconsole.cpp | 2 +- indra/newview/llfloaterregioninfo.cpp | 12 +- indra/newview/llfloaterscriptlimits.cpp | 4 +- indra/newview/llfloateruipreview.cpp | 4 +- indra/newview/llgrouplist.cpp | 2 +- indra/newview/llhudview.cpp | 2 +- indra/newview/llimfloatercontainer.cpp | 8 +- indra/newview/llinventorylistitem.cpp | 8 +- indra/newview/llmoveview.cpp | 4 +- indra/newview/llnavigationbar.cpp | 2 +- indra/newview/llnearbychathandler.cpp | 120 ++++++++++------- indra/newview/llpanelavatartag.cpp | 2 +- indra/newview/llpanelclassified.cpp | 4 +- indra/newview/llpanelgenerictip.cpp | 2 +- indra/newview/llpanelgroupinvite.cpp | 2 +- indra/newview/llpanellandmarks.cpp | 2 +- indra/newview/llpanellogin.cpp | 2 +- indra/newview/llpanelme.cpp | 2 +- indra/newview/llpanelmediasettingsgeneral.cpp | 2 +- indra/newview/llpanelmediasettingspermissions.cpp | 2 +- indra/newview/llpanelmediasettingssecurity.cpp | 2 +- indra/newview/llpanelnearbymedia.cpp | 2 +- indra/newview/llpanelonlinestatus.cpp | 2 +- indra/newview/llpaneloutfitedit.cpp | 2 +- indra/newview/llpaneloutfitsinventory.cpp | 4 +- indra/newview/llpanelpick.cpp | 4 +- indra/newview/llpanelpicks.cpp | 4 +- indra/newview/llpanelplaces.cpp | 6 +- indra/newview/llpanelprimmediacontrols.cpp | 2 +- indra/newview/llpanelprofile.cpp | 4 +- indra/newview/llpanelprofileview.cpp | 2 +- indra/newview/llpanelteleporthistory.cpp | 4 +- indra/newview/llpaneltopinfobar.cpp | 2 +- indra/newview/llpanelvolumepulldown.cpp | 2 +- indra/newview/llscrollingpanelparam.cpp | 2 +- indra/newview/llsidepanelinventory.cpp | 16 +-- indra/newview/llstatusbar.cpp | 2 +- indra/newview/llsyswellitem.cpp | 2 +- indra/newview/llsyswellwindow.cpp | 4 +- indra/newview/lltoast.h | 4 + indra/newview/lltoastgroupnotifypanel.cpp | 2 +- indra/newview/lltoastimpanel.cpp | 2 +- indra/newview/lltoastnotifypanel.cpp | 2 +- indra/newview/llviewerwindow.cpp | 6 +- 62 files changed, 351 insertions(+), 415 deletions(-) (limited to 'indra/newview/llappviewer.cpp') diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp index c3ef734823..9337626c8e 100644 --- a/indra/llui/llaccordionctrl.cpp +++ b/indra/llui/llaccordionctrl.cpp @@ -89,7 +89,7 @@ LLAccordionCtrl::LLAccordionCtrl() : LLPanel() mSingleExpansion = false; mFitParent = false; - LLUICtrlFactory::getInstance()->buildPanel(this, "accordion_parent.xml"); + buildPanel(this, "accordion_parent.xml"); } //--------------------------------------------------------------------------------- diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 0f769bd6dc..bfca0bd45e 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -41,6 +41,7 @@ #include "llfontgl.h" #include "llrect.h" #include "llerror.h" +#include "lldir.h" #include "lltimer.h" #include "llaccordionctrltab.h" @@ -58,6 +59,8 @@ #include "lltabcontainer.h" static LLDefaultChildRegistry::Register r1("panel", &LLPanel::fromXML); +LLPanel::factory_stack_t LLPanel::sFactoryStack; + // Compiler optimization, generate extern template template class LLPanel* LLView::getChild( @@ -400,7 +403,7 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parent, LLXMLNodePtr output_ if (!panelp) { - panelp = LLUICtrlFactory::getInstance()->createFactoryPanel(name); + panelp = createFactoryPanel(name); llassert(panelp); if (!panelp) @@ -413,20 +416,20 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parent, LLXMLNodePtr output_ // factory panels may have registered their own factory maps if (!panelp->getFactoryMap().empty()) { - LLUICtrlFactory::instance().pushFactoryFunctions(&panelp->getFactoryMap()); + sFactoryStack.push_back(&panelp->getFactoryMap()); } // for local registry callbacks; define in constructor, referenced in XUI or postBuild panelp->mCommitCallbackRegistrar.pushScope(); panelp->mEnableCallbackRegistrar.pushScope(); - panelp->initPanelXML(node, parent, output_node); + panelp->initPanelXML(node, parent, output_node, LLUICtrlFactory::getDefaultParams()); panelp->mCommitCallbackRegistrar.popScope(); panelp->mEnableCallbackRegistrar.popScope(); if (!panelp->getFactoryMap().empty()) { - LLUICtrlFactory::instance().popFactoryFunctions(); + sFactoryStack.pop_back(); } return panelp; @@ -493,11 +496,9 @@ static LLFastTimer::DeclareTimer FTM_PANEL_SETUP("Panel Setup"); static LLFastTimer::DeclareTimer FTM_EXTERNAL_PANEL_LOAD("Load Extern Panel Reference"); static LLFastTimer::DeclareTimer FTM_PANEL_POSTBUILD("Panel PostBuild"); -BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node) +BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node, const LLPanel::Params& default_params) { - const LLPanel::Params& default_params(LLUICtrlFactory::getDefaultParams()); Params params(default_params); - { LLFastTimer timer(FTM_PANEL_SETUP); @@ -965,3 +966,89 @@ boost::signals2::connection LLPanel::setVisibleCallback( const commit_signal_t:: return mVisibleSignal->connect(cb); } + +static LLFastTimer::DeclareTimer FTM_BUILD_PANELS("Build Panels"); + +//----------------------------------------------------------------------------- +// buildPanel() +//----------------------------------------------------------------------------- +BOOL LLPanel::buildPanel(LLPanel* panelp, const std::string& filename, LLXMLNodePtr output_node, const LLPanel::Params& default_params) +{ + LLFastTimer timer(FTM_BUILD_PANELS); + BOOL didPost = FALSE; + LLXMLNodePtr root; + + //if exporting, only load the language being exported, + //instead of layering localized version on top of english + if (output_node) + { + if (!LLUICtrlFactory::getLocalizedXMLNode(filename, root)) + { + llwarns << "Couldn't parse panel from: " << LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl; + return didPost; + } + } + else if (!LLUICtrlFactory::getLayeredXMLNode(filename, root)) + { + llwarns << "Couldn't parse panel from: " << LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl; + return didPost; + } + + // root must be called panel + if( !root->hasName("panel" ) ) + { + llwarns << "Root node should be named panel in : " << filename << llendl; + return didPost; + } + + lldebugs << "Building panel " << filename << llendl; + + LLUICtrlFactory::instance().pushFileName(filename); + { + if (!panelp->getFactoryMap().empty()) + { + sFactoryStack.push_back(&panelp->getFactoryMap()); + } + + // for local registry callbacks; define in constructor, referenced in XUI or postBuild + panelp->getCommitCallbackRegistrar().pushScope(); + panelp->getEnableCallbackRegistrar().pushScope(); + + didPost = panelp->initPanelXML(root, NULL, output_node, default_params); + + panelp->getCommitCallbackRegistrar().popScope(); + panelp->getEnableCallbackRegistrar().popScope(); + + panelp->setXMLFilename(filename); + + if (!panelp->getFactoryMap().empty()) + { + sFactoryStack.pop_back(); + } + } + LLUICtrlFactory::instance().popFileName(); + return didPost; +} + +//----------------------------------------------------------------------------- +// createFactoryPanel() +//----------------------------------------------------------------------------- +LLPanel* LLPanel::createFactoryPanel(const std::string& name) +{ + std::deque::iterator itor; + for (itor = sFactoryStack.begin(); itor != sFactoryStack.end(); ++itor) + { + const LLCallbackMap::map_t* factory_map = *itor; + + // Look up this panel's name in the map. + LLCallbackMap::map_const_iter_t iter = factory_map->find( name ); + if (iter != factory_map->end()) + { + // Use the factory to create the panel, instead of using a default LLPanel. + LLPanel *ret = (LLPanel*) iter->second.mCallback( iter->second.mData ); + return ret; + } + } + LLPanel::Params panel_p; + return LLUICtrlFactory::create(panel_p); +} \ No newline at end of file diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h index 784054cd86..6fc8ca204f 100644 --- a/indra/llui/llpanel.h +++ b/indra/llui/llpanel.h @@ -110,7 +110,10 @@ protected: LLPanel(const LLPanel::Params& params = getDefaultParams()); public: -// LLPanel(const std::string& name, const LLRect& rect = LLRect(), BOOL bordered = TRUE); + static BOOL buildPanel(LLPanel* panelp, const std::string &filename, LLXMLNodePtr output_node = NULL, const LLPanel::Params&default_params = getDefaultParams()); + + static LLPanel* createFactoryPanel(const std::string& name); + /*virtual*/ ~LLPanel(); // LLView interface @@ -163,7 +166,7 @@ public: EnableCallbackRegistry::ScopedRegistrar& getEnableCallbackRegistrar() { return mEnableCallbackRegistrar; } void initFromParams(const Params& p); - BOOL initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node = NULL); + BOOL initPanelXML( LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node, const LLPanel::Params& default_params); bool hasString(const std::string& name); std::string getString(const std::string& name, const LLStringUtil::format_map_t& args) const; @@ -283,6 +286,8 @@ private: // for setting the xml filename when building panel in context dependent cases std::string mXMLFilename; + typedef std::deque factory_stack_t; + static factory_stack_t sFactoryStack; }; // end class LLPanel // Build time optimization, generate once in .cpp file @@ -291,4 +296,57 @@ extern template class LLPanel* LLView::getChild( const std::string& name, BOOL recurse) const; #endif +typedef boost::function LLPanelClassCreatorFunc; + +// local static instance for registering a particular panel class + +class LLRegisterPanelClass +: public LLSingleton< LLRegisterPanelClass > +{ +public: + // reigister with either the provided builder, or the generic templated builder + void addPanelClass(const std::string& tag,LLPanelClassCreatorFunc func) + { + mPanelClassesNames[tag] = func; + } + + LLPanel* createPanelClass(const std::string& tag) + { + param_name_map_t::iterator iT = mPanelClassesNames.find(tag); + if(iT == mPanelClassesNames.end()) + return 0; + return iT->second(); + } + template + static T* defaultPanelClassBuilder() + { + T* pT = new T(); + return pT; + } + +private: + typedef std::map< std::string, LLPanelClassCreatorFunc> param_name_map_t; + + param_name_map_t mPanelClassesNames; +}; + + +// local static instance for registering a particular panel class +template +class LLRegisterPanelClassWrapper +: public LLRegisterPanelClass +{ +public: + // reigister with either the provided builder, or the generic templated builder + LLRegisterPanelClassWrapper(const std::string& tag); +}; + + +template +LLRegisterPanelClassWrapper::LLRegisterPanelClassWrapper(const std::string& tag) +{ + LLRegisterPanelClass::instance().addPanelClass(tag,&LLRegisterPanelClass::defaultPanelClassBuilder); +} + + #endif diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index db010d1cf6..2314ece6df 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -241,6 +241,7 @@ class LLTextBase public: friend class LLTextSegment; friend class LLNormalTextSegment; + friend class LLUICtrlFactory; struct LineSpacingParams : public LLInitParam::Choice { diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp index c5bd6c7fce..913c8bdb7d 100644 --- a/indra/llui/lluictrlfactory.cpp +++ b/indra/llui/lluictrlfactory.cpp @@ -218,7 +218,7 @@ bool LLUICtrlFactory::buildFloater(LLFloater* floaterp, const std::string& filen { if (!floaterp->getFactoryMap().empty()) { - mFactoryStack.push_front(&floaterp->getFactoryMap()); + LLPanel::sFactoryStack.push_front(&floaterp->getFactoryMap()); } // for local registry callbacks; define in constructor, referenced in XUI or postBuild @@ -234,7 +234,7 @@ bool LLUICtrlFactory::buildFloater(LLFloater* floaterp, const std::string& filen if (!floaterp->getFactoryMap().empty()) { - mFactoryStack.pop_front(); + LLPanel::sFactoryStack.pop_front(); } } popFileName(); @@ -250,69 +250,6 @@ S32 LLUICtrlFactory::saveToXML(LLView* viewp, const std::string& filename) return 0; } -static LLFastTimer::DeclareTimer FTM_BUILD_PANELS("Build Panels"); - -//----------------------------------------------------------------------------- -// buildPanel() -//----------------------------------------------------------------------------- -BOOL LLUICtrlFactory::buildPanel(LLPanel* panelp, const std::string& filename, LLXMLNodePtr output_node) -{ - LLFastTimer timer(FTM_BUILD_PANELS); - BOOL didPost = FALSE; - LLXMLNodePtr root; - - //if exporting, only load the language being exported, - //instead of layering localized version on top of english - if (output_node) - { - if (!LLUICtrlFactory::getLocalizedXMLNode(filename, root)) - { - llwarns << "Couldn't parse panel from: " << LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl; - return didPost; - } - } - else if (!LLUICtrlFactory::getLayeredXMLNode(filename, root)) - { - llwarns << "Couldn't parse panel from: " << LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl; - return didPost; - } - - // root must be called panel - if( !root->hasName("panel" ) ) - { - llwarns << "Root node should be named panel in : " << filename << llendl; - return didPost; - } - - lldebugs << "Building panel " << filename << llendl; - - pushFileName(filename); - { - if (!panelp->getFactoryMap().empty()) - { - mFactoryStack.push_front(&panelp->getFactoryMap()); - } - - // for local registry callbacks; define in constructor, referenced in XUI or postBuild - panelp->getCommitCallbackRegistrar().pushScope(); - panelp->getEnableCallbackRegistrar().pushScope(); - - didPost = panelp->initPanelXML(root, NULL, output_node); - - panelp->getCommitCallbackRegistrar().popScope(); - panelp->getEnableCallbackRegistrar().popScope(); - - panelp->setXMLFilename(filename); - - if (!panelp->getFactoryMap().empty()) - { - mFactoryStack.pop_front(); - } - } - popFileName(); - return didPost; -} - //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- @@ -344,29 +281,6 @@ LLView *LLUICtrlFactory::createFromXML(LLXMLNodePtr node, LLView* parent, const return view; } -//----------------------------------------------------------------------------- -// createFactoryPanel() -//----------------------------------------------------------------------------- -LLPanel* LLUICtrlFactory::createFactoryPanel(const std::string& name) -{ - std::deque::iterator itor; - for (itor = mFactoryStack.begin(); itor != mFactoryStack.end(); ++itor) - { - const LLCallbackMap::map_t* factory_map = *itor; - - // Look up this panel's name in the map. - LLCallbackMap::map_const_iter_t iter = factory_map->find( name ); - if (iter != factory_map->end()) - { - // Use the factory to create the panel, instead of using a default LLPanel. - LLPanel *ret = (LLPanel*) iter->second.mCallback( iter->second.mData ); - return ret; - } - } - LLPanel::Params panel_p; - return create(panel_p); -} - std::string LLUICtrlFactory::getCurFileName() { return mFileNames.empty() ? "" : gDirUtilp->getWorkingDir() + gDirUtilp->getDirDelimiter() + mFileNames.back(); @@ -383,36 +297,6 @@ void LLUICtrlFactory::popFileName() mFileNames.pop_back(); } - -//----------------------------------------------------------------------------- - -//static -BOOL LLUICtrlFactory::getAttributeColor(LLXMLNodePtr node, const std::string& name, LLColor4& color) -{ - std::string colorstring; - BOOL res = node->getAttributeString(name.c_str(), colorstring); - if (res) - { - if (LLUIColorTable::instance().colorExists(colorstring)) - { - color.setVec(LLUIColorTable::instance().getColor(colorstring)); - } - else - { - res = FALSE; - } - } - if (!res) - { - res = LLColor4::parseColor(colorstring, &color); - } - if (!res) - { - res = node->getAttributeColor(name.c_str(), color); - } - return res; -} - //static void LLUICtrlFactory::setCtrlParent(LLView* view, LLView* parent, S32 tab_group) { @@ -428,28 +312,22 @@ std::string LLUICtrlFactory::findSkinnedFilename(const std::string& filename) return gDirUtilp->findSkinnedFilename(LLUI::getSkinPath(), filename); } -void LLUICtrlFactory::pushFactoryFunctions(const LLCallbackMap::map_t* map) -{ - mFactoryStack.push_back(map); -} - -void LLUICtrlFactory::popFactoryFunctions() -{ - if (!mFactoryStack.empty()) - { - mFactoryStack.pop_back(); - } -} - //static void LLUICtrlFactory::copyName(LLXMLNodePtr src, LLXMLNodePtr dest) { dest->setName(src->getName()->mString); } +template +const LLInitParam::BaseBlock& get_empty_param_block() +{ + static typename T::Params params; + return params; +} + // adds a widget and its param block to various registries //static -void LLUICtrlFactory::registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, dummy_widget_creator_func_t creator_func, const std::string& tag) +void LLUICtrlFactory::registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, const std::string& tag) { // associate parameter block type with template .xml file std::string* existing_tag = LLWidgetNameRegistry::instance().getValue(param_block_type); @@ -469,17 +347,9 @@ void LLUICtrlFactory::registerWidget(const std::type_info* widget_type, const st } } LLWidgetNameRegistry::instance().defaultRegistrar().add(param_block_type, tag); - // associate widget type with factory function - LLDefaultWidgetRegistry::instance().defaultRegistrar().add(widget_type, creator_func); //FIXME: comment this in when working on schema generation //LLWidgetTypeRegistry::instance().defaultRegistrar().add(tag, widget_type); - //LLDefaultParamBlockRegistry::instance().defaultRegistrar().add(widget_type, &getEmptyParamBlock); -} - -//static -dummy_widget_creator_func_t* LLUICtrlFactory::getDefaultWidgetFunc(const std::type_info* widget_type) -{ - return LLDefaultWidgetRegistry::instance().getValue(widget_type); + //LLDefaultParamBlockRegistry::instance().defaultRegistrar().add(widget_type, &get_empty_param_block); } //static diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h index dc43b311a7..c4d3aa38d8 100644 --- a/indra/llui/lluictrlfactory.h +++ b/indra/llui/lluictrlfactory.h @@ -33,24 +33,14 @@ #ifndef LLUICTRLFACTORY_H #define LLUICTRLFACTORY_H -#include "llcallbackmap.h" +#include "llfasttimer.h" #include "llinitparam.h" #include "llregistry.h" -#include "v4color.h" -#include "llfasttimer.h" - #include "llxuiparser.h" -#include -#include -#include -#include - -class LLPanel; class LLFloater; class LLView; - // sort functor for typeid maps struct LLCompareTypeID { @@ -91,12 +81,6 @@ class LLWidgetNameRegistry : public LLRegistrySingleton {}; -// lookup factory functions for default widget instances by widget type -typedef LLView* (*dummy_widget_creator_func_t)(const std::string&); -class LLDefaultWidgetRegistry -: public LLRegistrySingleton -{}; - // lookup function for generating empty param block by widget type // this is used for schema generation //typedef const LLInitParam::BaseBlock& (*empty_param_block_func_t)(); @@ -164,23 +148,16 @@ public: } bool buildFloater(LLFloater* floaterp, const std::string &filename, LLXMLNodePtr output_node); - BOOL buildPanel(LLPanel* panelp, const std::string &filename, LLXMLNodePtr output_node = NULL); // Does what you want for LLFloaters and LLPanels // Returns 0 on success S32 saveToXML(LLView* viewp, const std::string& filename); + // filename tracking for debugging info std::string getCurFileName(); void pushFileName(const std::string& name); void popFileName(); - static BOOL getAttributeColor(LLXMLNodePtr node, const std::string& name, LLColor4& color); - - LLPanel* createFactoryPanel(const std::string& name); - - void pushFactoryFunctions(const LLCallbackMap::map_t* map); - void popFactoryFunctions(); - template static T* createWidget(const typename T::Params& params, LLView* parent = NULL) { @@ -192,12 +169,10 @@ public: //return NULL; } - { - LLFastTimer timer(FTM_WIDGET_CONSTRUCTION); + { LLFastTimer _(FTM_WIDGET_CONSTRUCTION); widget = new T(params); } - { - LLFastTimer timer(FTM_INIT_FROM_PARAMS); + { LLFastTimer _(FTM_INIT_FROM_PARAMS); widget->initFromParams(params); } @@ -272,17 +247,9 @@ fail: template static T* getDefaultWidget(const std::string& name) { - dummy_widget_creator_func_t* dummy_func = getDefaultWidgetFunc(&typeid(T)); - return dummy_func ? dynamic_cast((*dummy_func)(name)) : NULL; - } - - template - static LLView* createDefaultWidget(const std::string& name) - { - typename T::Params params; - params.name(name); - - return create(params); + T::Params widget_params; + widget_params.name = name; + return create(widget_params); } static void copyName(LLXMLNodePtr src, LLXMLNodePtr dest); @@ -335,12 +302,9 @@ fail: static void loadWidgetTemplate(const std::string& widget_tag, LLInitParam::BaseBlock& block); // helper function for adding widget type info to various registries - static void registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, dummy_widget_creator_func_t creator_func, const std::string& tag); + static void registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, const std::string& tag); private: - // return default widget instance factory func for a given type - static dummy_widget_creator_func_t* getDefaultWidgetFunc(const std::type_info* widget_type); - static const std::string* getWidgetTag(const std::type_info* widget_type); // this exists to get around dependency on llview @@ -349,20 +313,10 @@ private: // Avoid directly using LLUI and LLDir in the template code static std::string findSkinnedFilename(const std::string& filename); - typedef std::deque factory_stack_t; - factory_stack_t mFactoryStack; - - LLPanel* mDummyPanel; + class LLPanel* mDummyPanel; std::vector mFileNames; }; -template -const LLInitParam::BaseBlock& getEmptyParamBlock() -{ - static typename T::Params params; - return params; -} - // this is here to make gcc happy with reference to LLUICtrlFactory template template @@ -370,7 +324,7 @@ LLChildRegistry::Register::Register(const char* tag, LLWidgetCreator : LLChildRegistry::StaticRegistrar(tag, func.empty() ? (LLWidgetCreatorFunc)&LLUICtrlFactory::defaultBuilder : func) { // add this widget to various registries - LLUICtrlFactory::instance().registerWidget(&typeid(T), &typeid(typename T::Params), &LLUICtrlFactory::createDefaultWidget, tag); + LLUICtrlFactory::instance().registerWidget(&typeid(T), &typeid(typename T::Params), tag); // since registry_t depends on T, do this in line here // TODO: uncomment this for schema generation @@ -378,58 +332,4 @@ LLChildRegistry::Register::Register(const char* tag, LLWidgetCreator //LLChildRegistryRegistry::instance().defaultRegistrar().add(&typeid(T), registry_t::instance()); } - -typedef boost::function LLPanelClassCreatorFunc; - -// local static instance for registering a particular panel class - -class LLRegisterPanelClass -: public LLSingleton< LLRegisterPanelClass > -{ -public: - // reigister with either the provided builder, or the generic templated builder - void addPanelClass(const std::string& tag,LLPanelClassCreatorFunc func) - { - mPanelClassesNames[tag] = func; - } - - LLPanel* createPanelClass(const std::string& tag) - { - param_name_map_t::iterator iT = mPanelClassesNames.find(tag); - if(iT == mPanelClassesNames.end()) - return 0; - return iT->second(); - } - template - static T* defaultPanelClassBuilder() - { - T* pT = new T(); - return pT; - } - -private: - typedef std::map< std::string, LLPanelClassCreatorFunc> param_name_map_t; - - param_name_map_t mPanelClassesNames; -}; - - -// local static instance for registering a particular panel class -template -class LLRegisterPanelClassWrapper -: public LLRegisterPanelClass -{ -public: - // reigister with either the provided builder, or the generic templated builder - LLRegisterPanelClassWrapper(const std::string& tag); -}; - - -template -LLRegisterPanelClassWrapper::LLRegisterPanelClassWrapper(const std::string& tag) -{ - LLRegisterPanelClass::instance().addPanelClass(tag,&LLRegisterPanelClass::defaultPanelClassBuilder); -} - - #endif //LLUICTRLFACTORY_H diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 4d3708302b..3ee4a85de0 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -1698,7 +1698,9 @@ LLView* LLView::getChildView(const std::string& name, BOOL recurse) const child = getDefaultWidget(name); if (!child) { - child = LLUICtrlFactory::createDefaultWidget(name); + LLView::Params view_params; + view_params.name = name; + child = LLUICtrlFactory::create(view_params); } } return child; diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 70bda3893e..54ab928522 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -200,8 +200,6 @@ LLAgent::LLAgent() : mbFlagsDirty(FALSE), mbFlagsNeedReset(FALSE), - mbJump(FALSE), - mAutoPilot(FALSE), mAutoPilotFlyOnStop(FALSE), mAutoPilotTargetGlobal(), @@ -561,6 +559,9 @@ void LLAgent::toggleFlying() { BOOL fly = !gAgent.getFlying(); + gAgent.mMoveTimer.reset(); + LLFirstUse::notMoving(false); + gAgent.setFlying( fly ); gAgentCamera.resetView(); } @@ -2987,12 +2988,6 @@ void LLAgent::processScriptControlChange(LLMessageSystem *msg, void **) total_count++; } } - - // Any control taken? If so, might be first time. - //if (total_count > 0) - //{ - //LLFirstUse::useOverrideKeys(); - //} } else { diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 0185f874f9..6485cd8fd8 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -363,14 +363,6 @@ public: private: BOOL mIsBusy; - //-------------------------------------------------------------------- - // Jump - //-------------------------------------------------------------------- -public: - BOOL getJump() const { return mbJump; } -private: - BOOL mbJump; - //-------------------------------------------------------------------- // Grab //-------------------------------------------------------------------- diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 768be116f6..8e448d53ee 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -367,19 +367,19 @@ bool create_text_segment_icon_from_url_match(LLUrlMatch* match,LLTextBase* base) if(gAgent.isInGroup(match_id, TRUE)) { - LLGroupIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams(); + LLGroupIconCtrl::Params icon_params; icon_params.group_id = match_id; icon_params.rect = LLRect(0, 16, 16, 0); icon_params.visible = true; - icon = LLUICtrlFactory::instance().createWidget(icon_params); + icon = LLUICtrlFactory::instance().create(icon_params); } else { - LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams(); + LLAvatarIconCtrl::Params icon_params; icon_params.avatar_id = match_id; icon_params.rect = LLRect(0, 16, 16, 0); icon_params.visible = true; - icon = LLUICtrlFactory::instance().createWidget(icon_params); + icon = LLUICtrlFactory::instance().create(icon_params); } LLInlineViewSegment::Params params; diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 57e186b6a8..f448816f76 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -498,7 +498,7 @@ LLAvalineListItem::LLAvalineListItem(bool hide_number/* = true*/) : LLAvatarList , mIsHideNumber(hide_number) { // should not use buildPanel from the base class to ensure LLAvalineListItem::postBuild is called. - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_list_item.xml"); + buildPanel(this, "panel_avatar_list_item.xml"); } BOOL LLAvalineListItem::postBuild() diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index eead0c9b3e..18a5d74527 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -75,7 +75,7 @@ LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/) { if (not_from_ui_factory) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_list_item.xml"); + buildPanel(this, "panel_avatar_list_item.xml"); } // *NOTE: mantipov: do not use any member here. They can be uninitialized here in case instance // is created from the UICtrlFactory diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index e0b605a724..310b406bfd 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -112,14 +112,14 @@ public: mGesturePanel(NULL) { mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL); - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_bottomtray_lite.xml"); + buildPanel(this, "panel_bottomtray_lite.xml"); // Necessary for focus movement among child controls setFocusRoot(TRUE); } BOOL postBuild() { - mNearbyChatBar = getChild("chat_bar"); + mNearbyChatBar = findChild("chat_bar"); mGesturePanel = getChild("gesture_panel"); // Hide "show_nearby_chat" button @@ -163,7 +163,7 @@ LLBottomTray::LLBottomTray(const LLSD&) mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL); - LLUICtrlFactory::getInstance()->buildPanel(this,"panel_bottomtray.xml"); + buildPanel(this,"panel_bottomtray.xml"); LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2)); @@ -471,8 +471,7 @@ BOOL LLBottomTray::postBuild() mBottomTrayContextMenu = LLUICtrlFactory::getInstance()->createFromFile("menu_bottomtray.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); gMenuHolder->addChild(mBottomTrayContextMenu); - mNearbyChatBar = getChild("chat_bar"); - LLHints::registerHintTarget("nearby_chat_bar", mNearbyChatBar->LLView::getHandle()); + mNearbyChatBar = findChild("chat_bar"); mToolbarStack = getChild("toolbar_stack"); mMovementButton = getChild("movement_btn"); diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index a03fe79512..00a343c99c 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -147,7 +147,7 @@ BOOL LLCallFloater::postBuild() childSetAction("leave_call_btn", boost::bind(&LLCallFloater::leaveCall, this)); - mNonAvatarCaller = getChild("non_avatar_caller"); + mNonAvatarCaller = findChild("non_avatar_caller"); mNonAvatarCaller->setVisible(FALSE); LLView *anchor_panel = LLBottomTray::getInstance()->getChild("speak_flyout_btn"); diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 7204e6c39c..b6788b7739 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -107,7 +107,7 @@ public: static LLChatHistoryHeader* createInstance(const std::string& file_name) { LLChatHistoryHeader* pInstance = new LLChatHistoryHeader; - LLUICtrlFactory::getInstance()->buildPanel(pInstance, file_name); + buildPanel(pInstance, file_name); return pInstance; } @@ -402,7 +402,7 @@ protected: return; } - LLTextBase* name = getChild("user_name"); + LLTextBox* name = getChild("user_name"); LLRect sticky_rect = name->getRect(); S32 icon_x = llmin(sticky_rect.mLeft + name->getTextBoundingRect().getWidth() + 7, sticky_rect.mRight - 3); sInfoCtrl->setOrigin(icon_x, sticky_rect.getCenterY() - sInfoCtrl->getRect().getHeight() / 2 ) ; diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp index 35a244c461..ed4803f87a 100644 --- a/indra/newview/llchatitemscontainerctrl.cpp +++ b/indra/newview/llchatitemscontainerctrl.cpp @@ -57,7 +57,7 @@ static const S32 msg_height_pad = 5; LLNearbyChatToastPanel* LLNearbyChatToastPanel::createInstance() { LLNearbyChatToastPanel* item = new LLNearbyChatToastPanel(); - LLUICtrlFactory::getInstance()->buildPanel(item, "panel_chat_item.xml"); + buildPanel(item, "panel_chat_item.xml"); item->setFollows(FOLLOWS_NONE); return item; } diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index f181872faa..73715e4726 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -351,7 +351,7 @@ BOOL LLFloaterCamera::postBuild() setTitleVisible(TRUE); // restore title visibility after chrome applying mRotate = getChild(ORBIT); - mZoom = getChild(ZOOM); + mZoom = findChild(ZOOM); mTrack = getChild(PAN); assignButton2Mode(CAMERA_CTRL_MODE_MODES, "avatarview_btn"); diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp index 4bffd41d29..1e15b86762 100644 --- a/indra/newview/llfloaterinventory.cpp +++ b/indra/newview/llfloaterinventory.cpp @@ -60,7 +60,7 @@ LLFloaterInventory::~LLFloaterInventory() BOOL LLFloaterInventory::postBuild() { - mPanelMainInventory = getChild("Inventory Panel"); + mPanelMainInventory = findChild("Inventory Panel"); return TRUE; } diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp index 105d7f9201..9e3422c2b2 100644 --- a/indra/newview/llfloaternotificationsconsole.cpp +++ b/indra/newview/llfloaternotificationsconsole.cpp @@ -65,7 +65,7 @@ LLNotificationChannelPanel::LLNotificationChannelPanel(const std::string& channe mChannelRejectsPtr = LLNotificationChannelPtr( LLNotificationChannel::buildChannel(channel_name + "rejects", mChannelPtr->getParentChannelName(), !boost::bind(mChannelPtr->getFilter(), _1))); - LLUICtrlFactory::instance().buildPanel(this, "panel_notifications_channel.xml"); + buildPanel(this, "panel_notifications_channel.xml"); } BOOL LLNotificationChannelPanel::postBuild() diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 8af4955f92..a8af80b952 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -180,32 +180,32 @@ BOOL LLFloaterRegionInfo::postBuild() mInfoPanels.push_back(panel); panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub", boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel)); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_general.xml"); + buildPanel(panel, "panel_region_general.xml"); mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true)); panel = new LLPanelRegionDebugInfo; mInfoPanels.push_back(panel); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_debug.xml"); + buildPanel(panel, "panel_region_debug.xml"); mTab->addTabPanel(panel); panel = new LLPanelRegionTextureInfo; mInfoPanels.push_back(panel); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_texture.xml"); + buildPanel(panel, "panel_region_texture.xml"); mTab->addTabPanel(panel); panel = new LLPanelRegionTerrainInfo; mInfoPanels.push_back(panel); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_terrain.xml"); + buildPanel(panel, "panel_region_terrain.xml"); mTab->addTabPanel(panel); panel = new LLPanelEstateInfo; mInfoPanels.push_back(panel); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_estate.xml"); + buildPanel(panel, "panel_region_estate.xml"); mTab->addTabPanel(panel); panel = new LLPanelEstateCovenant; mInfoPanels.push_back(panel); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_covenant.xml"); + buildPanel(panel, "panel_region_covenant.xml"); mTab->addTabPanel(panel); gMessageSystem->setHandlerFunc( diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp index a77fc4710a..a6f3acd18d 100644 --- a/indra/newview/llfloaterscriptlimits.cpp +++ b/indra/newview/llfloaterscriptlimits.cpp @@ -121,7 +121,7 @@ BOOL LLFloaterScriptLimits::postBuild() LLPanelScriptLimitsRegionMemory* panel_memory; panel_memory = new LLPanelScriptLimitsRegionMemory; mInfoPanels.push_back(panel_memory); - LLUICtrlFactory::getInstance()->buildPanel(panel_memory, "panel_script_limits_region_memory.xml"); + buildPanel(panel_memory, "panel_script_limits_region_memory.xml"); mTab->addTabPanel(panel_memory); } @@ -130,7 +130,7 @@ BOOL LLFloaterScriptLimits::postBuild() { LLPanelScriptLimitsAttachment* panel_attachments = new LLPanelScriptLimitsAttachment; mInfoPanels.push_back(panel_attachments); - LLUICtrlFactory::getInstance()->buildPanel(panel_attachments, "panel_script_limits_my_avatar.xml"); + buildPanel(panel_attachments, "panel_script_limits_my_avatar.xml"); mTab->addTabPanel(panel_attachments); } diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index 41f4580495..d32f809457 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -891,7 +891,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save) if (save) { LLXMLNodePtr panel_write = new LLXMLNode(); - LLUICtrlFactory::getInstance()->buildPanel(panel, path, panel_write); // build it + buildPanel(panel, path, panel_write); // build it if (!panel_write->isNull()) { @@ -905,7 +905,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save) } else { - LLUICtrlFactory::getInstance()->buildPanel(panel, path); // build it + buildPanel(panel, path); // build it LLRect new_size = panel->getRect(); // get its rectangle panel->setOrigin(0,0); // reset its origin point so it's not offset by -left or other XUI attributes (*floaterp)->setTitle(path); // use the file name as its title, since panels have no guaranteed meaningful name attribute diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index 125936b9c7..af931810a2 100644 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -289,7 +289,7 @@ mGroupNameBox(NULL), mInfoBtn(NULL), mGroupID(LLUUID::null) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_list_item.xml"); + buildPanel(this, "panel_group_list_item.xml"); // Remember group icon width including its padding from the name text box, // so that we can hide and show the icon again later. diff --git a/indra/newview/llhudview.cpp b/indra/newview/llhudview.cpp index 261d9f1df7..beb3b4340a 100644 --- a/indra/newview/llhudview.cpp +++ b/indra/newview/llhudview.cpp @@ -56,7 +56,7 @@ const S32 HUD_ARROW_SIZE = 32; LLHUDView::LLHUDView(const LLRect& r) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_hud.xml"); + buildPanel(this, "panel_hud.xml"); setShape(r, true); } diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index 9eb11a6ac4..8a84c7a9c9 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -100,9 +100,9 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp, if(gAgent.isInGroup(session_id, TRUE)) { - LLGroupIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams(); + LLGroupIconCtrl::Params icon_params; icon_params.group_id = session_id; - icon = LLUICtrlFactory::instance().createWidget(icon_params); + icon = LLUICtrlFactory::instance().create(icon_params); mSessions[session_id] = floaterp; floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); @@ -111,9 +111,9 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp, { LLUUID avatar_id = LLIMModel::getInstance()->getOtherParticipantID(session_id); - LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams(); + LLAvatarIconCtrl::Params icon_params; icon_params.avatar_id = avatar_id; - icon = LLUICtrlFactory::instance().createWidget(icon_params); + icon = LLUICtrlFactory::instance().create(icon_params); mSessions[session_id] = floaterp; floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); diff --git a/indra/newview/llinventorylistitem.cpp b/indra/newview/llinventorylistitem.cpp index b1f5b3be2f..b3d658b0cf 100644 --- a/indra/newview/llinventorylistitem.cpp +++ b/indra/newview/llinventorylistitem.cpp @@ -307,7 +307,9 @@ LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem } else { - mIconCtrl = dynamic_cast(LLUICtrlFactory::createDefaultWidget("item_icon")); + LLIconCtrl::Params icon_params; + icon_params.name = "item_icon"; + mIconCtrl = LLUICtrlFactory::create(icon_params); } LLTextBox::Params text_params(params.item_name); @@ -320,7 +322,9 @@ LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem } else { - mTitleCtrl = dynamic_cast(LLUICtrlFactory::createDefaultWidget("item_title")); + LLTextBox::Params text_aprams; + text_params.name = "item_title"; + mTitleCtrl = LLUICtrlFactory::create(text_params); } } diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 148a5786cb..680f937e83 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -703,7 +703,7 @@ void LLPanelStandStopFlying::reparent(LLFloaterMove* move_view) LLPanelStandStopFlying* LLPanelStandStopFlying::getStandStopFlyingPanel() { LLPanelStandStopFlying* panel = new LLPanelStandStopFlying(); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_stand_stop_flying.xml"); + buildPanel(panel, "panel_stand_stop_flying.xml"); panel->setVisible(FALSE); //LLUI::getRootView()->addChild(panel); @@ -716,6 +716,8 @@ LLPanelStandStopFlying* LLPanelStandStopFlying::getStandStopFlyingPanel() void LLPanelStandStopFlying::onStandButtonClick() { + LLFirstUse::sit(false); + LLSelectMgr::getInstance()->deselectAllForStandingUp(); gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index 18ef3e19ee..e53103237c 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -278,7 +278,7 @@ LLNavigationBar::LLNavigationBar() mPurgeTPHistoryItems(false), mSaveToLocationHistory(false) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_navigation_bar.xml"); + buildPanel(this, "panel_navigation_bar.xml"); // set a listener function for LoginComplete event LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLNavigationBar::handleLoginComplete, this)); diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 4011552112..024929430c 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -39,6 +39,7 @@ #include "llchatitemscontainerctrl.h" #include "llfirstuse.h" #include "llfloaterscriptdebug.h" +#include "llhints.h" #include "llnearbychat.h" #include "llrecentpeople.h" @@ -62,7 +63,13 @@ LLToastPanelBase* createToastPanel() class LLNearbyChatScreenChannel: public LLScreenChannelBase { public: - LLNearbyChatScreenChannel(const LLUUID& id):LLScreenChannelBase(id) { mStopProcessing = false;}; + typedef std::vector > toast_vec_t; + typedef std::list > toast_list_t; + + LLNearbyChatScreenChannel(const LLUUID& id):LLScreenChannelBase(id) + { + mStopProcessing = false; + } void addNotification (LLSD& notification); void arrangeToasts (); @@ -82,15 +89,12 @@ public: } // hide all toasts from screen, but not remove them from a channel - virtual void hideToastsFromScreen() - { - }; // removes all toasts from a channel virtual void removeToastsFromChannel() { - for(std::vector::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it) + for(toast_vec_t::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it) { - addToToastPool((*it)); + addToToastPool(it->get()); } m_active_toasts.clear(); }; @@ -105,10 +109,11 @@ public: protected: void addToToastPool(LLToast* toast) { + if (!toast) return; toast->setVisible(FALSE); toast->stopTimer(); toast->setIsHidden(true); - m_toast_pool.push_back(toast); + m_toast_pool.push_back(toast->getHandle()); } void createOverflowToast(S32 bottom, F32 timer); @@ -117,8 +122,8 @@ protected: bool createPoolToast(); - std::vector m_active_toasts; - std::list m_toast_pool; + toast_vec_t m_active_toasts; + toast_list_t m_toast_pool; bool mStopProcessing; }; @@ -139,7 +144,7 @@ void LLNearbyChatScreenChannel::onToastFade(LLToast* toast) if(!toast) return; - std::vector::iterator pos = std::find(m_active_toasts.begin(),m_active_toasts.end(),toast); + toast_vec_t::iterator pos = std::find(m_active_toasts.begin(),m_active_toasts.end(),toast->getHandle()); if(pos!=m_active_toasts.end()) m_active_toasts.erase(pos); @@ -166,7 +171,7 @@ bool LLNearbyChatScreenChannel::createPoolToast() toast->setOnFadeCallback(boost::bind(&LLNearbyChatScreenChannel::onToastFade, this, _1)); toast->setOnToastDestroyedCallback(boost::bind(&LLNearbyChatScreenChannel::onToastDestroyed, this, _1)); - m_toast_pool.push_back(toast); + m_toast_pool.push_back(toast->getHandle()); return true; } @@ -184,17 +189,20 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification) { LLUUID fromID = notification["from_id"].asUUID(); // agent id or object id std::string from = notification["from"].asString(); - LLToast* toast = m_active_toasts[0]; - LLNearbyChatToastPanel* panel = dynamic_cast(toast->getPanel()); - - if(panel && panel->messageID() == fromID && panel->getFromName() == from && panel->canAddText()) + LLToast* toast = m_active_toasts[0].get(); + if (toast) { - panel->addMessage(notification); - toast->reshapeToPanel(); - toast->resetTimer(); - - arrangeToasts(); - return; + LLNearbyChatToastPanel* panel = dynamic_cast(toast->getPanel()); + + if(panel && panel->messageID() == fromID && panel->getFromName() == from && panel->canAddText()) + { + panel->addMessage(notification); + toast->reshapeToPanel(); + toast->resetTimer(); + + arrangeToasts(); + return; + } } } @@ -222,7 +230,7 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification) //take 1st element from pool, (re)initialize it, put it in active toasts - LLToast* toast = m_toast_pool.back(); + LLToast* toast = m_toast_pool.back().get(); m_toast_pool.pop_back(); @@ -235,25 +243,36 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification) toast->reshapeToPanel(); toast->resetTimer(); - m_active_toasts.push_back(toast); + m_active_toasts.push_back(toast->getHandle()); arrangeToasts(); } void LLNearbyChatScreenChannel::arrangeToasts() { - if(m_active_toasts.size() == 0 || isHovering()) - return; - - hideToastsFromScreen(); + if(!isHovering()) + { + showToastsBottom(); + } - showToastsBottom(); + if (m_active_toasts.empty()) + { + LLHints::registerHintTarget("incoming_chat", LLHandle()); + } + else + { + LLToast* toast = m_active_toasts.front().get(); + if (toast) + { + LLHints::registerHintTarget("incoming_chat", m_active_toasts.front().get()->LLView::getHandle()); + } + } } -int sort_toasts_predicate(LLToast* first,LLToast* second) +int sort_toasts_predicate(LLHandle first, LLHandle second) { - F32 v1 = first->getTimer()->getEventTimer().getElapsedTimeF32(); - F32 v2 = second->getTimer()->getEventTimer().getElapsedTimeF32(); + F32 v1 = first.get()->getTimer()->getEventTimer().getElapsedTimeF32(); + F32 v2 = second.get()->getTimer()->getEventTimer().getElapsedTimeF32(); return v1 < v2; } @@ -271,20 +290,22 @@ void LLNearbyChatScreenChannel::showToastsBottom() //calc max visible item and hide other toasts. - for(std::vector::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it) + for(toast_vec_t::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it) { - S32 toast_top = bottom + (*it)->getRect().getHeight() + margin; + LLToast* toast = it->get(); + if (!toast) continue; + + S32 toast_top = bottom + toast->getRect().getHeight() + margin; if(toast_top > gFloaterView->getRect().getHeight()) { while(it!=m_active_toasts.end()) { - addToToastPool((*it)); + addToToastPool(it->get()); it=m_active_toasts.erase(it); } break; } - LLToast* toast = (*it); toast_rect = toast->getRect(); toast_rect.setLeftTopAndSize(getRect().mLeft , bottom + toast_rect.getHeight(), toast_rect.getWidth() ,toast_rect.getHeight()); @@ -295,13 +316,16 @@ void LLNearbyChatScreenChannel::showToastsBottom() // use reverse order to provide correct z-order and avoid toast blinking - for(std::vector::reverse_iterator it = m_active_toasts.rbegin(); it != m_active_toasts.rend(); ++it) + for(toast_vec_t::reverse_iterator it = m_active_toasts.rbegin(); it != m_active_toasts.rend(); ++it) { - LLToast* toast = (*it); - toast->setIsHidden(false); - toast->setVisible(TRUE); - + LLToast* toast = it->get(); + if (toast) + { + toast->setIsHidden(false); + toast->setVisible(TRUE); + } } + } void LLNearbyChatScreenChannel::reshape (S32 width, S32 height, BOOL called_from_parent) @@ -347,14 +371,6 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args) { if(chat_msg.mMuted == TRUE) return; - if(chat_msg.mSourceType == CHAT_SOURCE_AGENT && chat_msg.mFromID.notNull()) - { - LLRecentPeople::instance().add(chat_msg.mFromID); - if (chat_msg.mFromID != gAgentID) - { - LLFirstUse::otherAvatarChatFirst(); - } - } if(chat_msg.mText.empty()) return;//don't process empty messages @@ -457,7 +473,13 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args) notification["font_size"] = (S32)LLViewerChat::getChatFontSize() ; channel->addNotification(notification); } - + + if(chat_msg.mSourceType == CHAT_SOURCE_AGENT + && chat_msg.mFromID.notNull() + && chat_msg.mFromID != gAgentID) + { + LLFirstUse::otherAvatarChatFirst(); + } } void LLNearbyChatHandler::onDeleteToast(LLToast* toast) diff --git a/indra/newview/llpanelavatartag.cpp b/indra/newview/llpanelavatartag.cpp index 7563cc7f61..0ffb10b18b 100644 --- a/indra/newview/llpanelavatartag.cpp +++ b/indra/newview/llpanelavatartag.cpp @@ -43,7 +43,7 @@ LLPanelAvatarTag::LLPanelAvatarTag(const LLUUID& key, const std::string im_time) , mAvatarId(LLUUID::null) // , mFadeTimer() { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_tag.xml"); + buildPanel(this, "panel_avatar_tag.xml"); setLeftButtonClickCallback(boost::bind(&LLPanelAvatarTag::onClick, this)); setAvatarId(key); setTime(im_time); diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index 09b718f8b8..4d3d54ed15 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -144,7 +144,7 @@ LLPanelClassifiedInfo::~LLPanelClassifiedInfo() LLPanelClassifiedInfo* LLPanelClassifiedInfo::create() { LLPanelClassifiedInfo* panel = new LLPanelClassifiedInfo(); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_classified_info.xml"); + buildPanel(panel, "panel_classified_info.xml"); return panel; } @@ -617,7 +617,7 @@ LLPanelClassifiedEdit::~LLPanelClassifiedEdit() LLPanelClassifiedEdit* LLPanelClassifiedEdit::create() { LLPanelClassifiedEdit* panel = new LLPanelClassifiedEdit(); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_edit_classified.xml"); + buildPanel(panel, "panel_edit_classified.xml"); return panel; } diff --git a/indra/newview/llpanelgenerictip.cpp b/indra/newview/llpanelgenerictip.cpp index 5a71f7f315..709ed33ed1 100644 --- a/indra/newview/llpanelgenerictip.cpp +++ b/indra/newview/llpanelgenerictip.cpp @@ -42,7 +42,7 @@ LLPanelGenericTip::LLPanelGenericTip( const LLNotificationPtr& notification) : LLPanelTipToast(notification) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_generic_tip.xml"); + buildPanel(this, "panel_generic_tip.xml"); getChild("message")->setValue(notification->getMessage()); diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp index 11d3768a3d..b610fa9899 100644 --- a/indra/newview/llpanelgroupinvite.cpp +++ b/indra/newview/llpanelgroupinvite.cpp @@ -375,7 +375,7 @@ LLPanelGroupInvite::LLPanelGroupInvite(const LLUUID& group_id) mPendingUpdate(FALSE) { // Pass on construction of this panel to the control factory. - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_invite.xml"); + buildPanel(this, "panel_group_invite.xml"); } LLPanelGroupInvite::~LLPanelGroupInvite() diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 6f47fc60b0..9ad39d568c 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -202,7 +202,7 @@ LLLandmarksPanel::LLLandmarksPanel() mInventoryObserver = new LLLandmarksPanelObserver(this); gInventory.addObserver(mInventoryObserver); - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_landmarks.xml"); + buildPanel(this, "panel_landmarks.xml"); } LLLandmarksPanel::~LLLandmarksPanel() diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 58ed01896a..6b71e37337 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -193,7 +193,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, // Logo mLogoImage = LLUI::getUIImage("startup_logo"); - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_login.xml"); + buildPanel(this, "panel_login.xml"); #if USE_VIEWER_AUTH //leave room for the login menu bar diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp index 017f6de63b..389fe8edbf 100644 --- a/indra/newview/llpanelme.cpp +++ b/indra/newview/llpanelme.cpp @@ -168,7 +168,7 @@ void LLPanelMe::onCancelClicked() LLPanelMyProfileEdit::LLPanelMyProfileEdit() : LLPanelMyProfile() { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_edit_profile.xml"); + buildPanel(this, "panel_edit_profile.xml"); setAvatarId(gAgent.getID()); } diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp index 7a61872bc7..54703d3cdc 100644 --- a/indra/newview/llpanelmediasettingsgeneral.cpp +++ b/indra/newview/llpanelmediasettingsgeneral.cpp @@ -80,7 +80,7 @@ LLPanelMediaSettingsGeneral::LLPanelMediaSettingsGeneral() : mMediaEditable(false) { // build dialog from XML - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_general.xml"); + buildPanel(this, "panel_media_settings_general.xml"); } //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp index 5effba515b..389003dc45 100644 --- a/indra/newview/llpanelmediasettingspermissions.cpp +++ b/indra/newview/llpanelmediasettingspermissions.cpp @@ -65,7 +65,7 @@ LLPanelMediaSettingsPermissions::LLPanelMediaSettingsPermissions() : mPermsWorldControl( 0 ) { // build dialog from XML - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_permissions.xml"); + buildPanel(this, "panel_media_settings_permissions.xml"); } //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp index 1b1346c41a..502ba179d3 100644 --- a/indra/newview/llpanelmediasettingssecurity.cpp +++ b/indra/newview/llpanelmediasettingssecurity.cpp @@ -59,7 +59,7 @@ LLPanelMediaSettingsSecurity::LLPanelMediaSettingsSecurity() : mCommitCallbackRegistrar.add("Media.whitelistDelete", boost::bind(&LLPanelMediaSettingsSecurity::onBtnDel, this)); // build dialog from XML - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_security.xml"); + buildPanel(this, "panel_media_settings_security.xml"); } //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp index 7f4609b83e..e477d71712 100644 --- a/indra/newview/llpanelnearbymedia.cpp +++ b/indra/newview/llpanelnearbymedia.cpp @@ -102,7 +102,7 @@ LLPanelNearByMedia::LLPanelNearByMedia() mCommitCallbackRegistrar.add("SelectedMediaCtrl.Zoom", boost::bind(&LLPanelNearByMedia::onClickSelectedMediaZoom, this)); mCommitCallbackRegistrar.add("SelectedMediaCtrl.Unzoom", boost::bind(&LLPanelNearByMedia::onClickSelectedMediaUnzoom, this)); - LLUICtrlFactory::instance().buildPanel(this, "panel_nearby_media.xml"); + buildPanel(this, "panel_nearby_media.xml"); } LLPanelNearByMedia::~LLPanelNearByMedia() diff --git a/indra/newview/llpanelonlinestatus.cpp b/indra/newview/llpanelonlinestatus.cpp index 7de4e8e49d..43c3ed782d 100644 --- a/indra/newview/llpanelonlinestatus.cpp +++ b/indra/newview/llpanelonlinestatus.cpp @@ -41,7 +41,7 @@ LLPanelOnlineStatus::LLPanelOnlineStatus( LLPanelTipToast(notification) { - LLUICtrlFactory::getInstance()->buildPanel(this, + buildPanel(this, "panel_online_status_toast.xml"); diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index cfd31b6829..81bd6b5414 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -491,7 +491,7 @@ BOOL LLPanelOutfitEdit::postBuild() setVisibleCallback(boost::bind(&LLPanelOutfitEdit::onVisibilityChange, this, _2)); - mCOFWearables = getChild("cof_wearables_list"); + mCOFWearables = findChild("cof_wearables_list"); mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this)); mCOFWearables->getCOFCallbacks().mAddWearable = boost::bind(&LLPanelOutfitEdit::onAddWearableClicked, this); diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index 16ef7998b3..3c33824cd3 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -307,10 +307,10 @@ bool LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) void LLPanelOutfitsInventory::initTabPanels() { - mCurrentOutfitPanel = getChild(COF_TAB_NAME); + mCurrentOutfitPanel = findChild(COF_TAB_NAME); mCurrentOutfitPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this)); - mMyOutfitsPanel = getChild(OUTFITS_TAB_NAME); + mMyOutfitsPanel = findChild(OUTFITS_TAB_NAME); mMyOutfitsPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this)); mAppearanceTabs = getChild("appearance_tabs"); diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp index 54eb21422e..0417c65f7a 100644 --- a/indra/newview/llpanelpick.cpp +++ b/indra/newview/llpanelpick.cpp @@ -80,7 +80,7 @@ LLPanelPickInfo* LLPanelPickInfo::create() { LLPanelPickInfo* panel = new LLPanelPickInfo(); - LLUICtrlFactory::getInstance()->buildPanel(panel, XML_PANEL_PICK_INFO); + buildPanel(panel, XML_PANEL_PICK_INFO); return panel; } @@ -350,7 +350,7 @@ void LLPanelPickInfo::onClickBack() LLPanelPickEdit* LLPanelPickEdit::create() { LLPanelPickEdit* panel = new LLPanelPickEdit(); - LLUICtrlFactory::getInstance()->buildPanel(panel, XML_PANEL_EDIT_PICK); + buildPanel(panel, XML_PANEL_EDIT_PICK); return panel; } diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 65254e50b4..653f3726a9 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -1045,7 +1045,7 @@ LLPickItem::LLPickItem() , mSnapshotID(LLUUID::null) , mNeedData(true) { - LLUICtrlFactory::getInstance()->buildPanel(this,"panel_pick_list_item.xml"); + buildPanel(this,"panel_pick_list_item.xml"); } LLPickItem::~LLPickItem() @@ -1175,7 +1175,7 @@ LLClassifiedItem::LLClassifiedItem(const LLUUID& avatar_id, const LLUUID& classi , mAvatarId(avatar_id) , mClassifiedId(classified_id) { - LLUICtrlFactory::getInstance()->buildPanel(this,"panel_classifieds_list_item.xml"); + buildPanel(this,"panel_classifieds_list_item.xml"); LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this); LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId()); diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index c8a9176d92..83e674ee92 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -252,7 +252,7 @@ LLPanelPlaces::LLPanelPlaces() LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback( boost::bind(&LLPanelPlaces::updateVerbs, this)); - //LLUICtrlFactory::getInstance()->buildPanel(this, "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() + //buildPanel(this, "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() } LLPanelPlaces::~LLPanelPlaces() @@ -327,8 +327,8 @@ BOOL LLPanelPlaces::postBuild() mFilterEditor->setCommitCallback(boost::bind(&LLPanelPlaces::onFilterEdit, this, _2, false)); } - mPlaceProfile = getChild("panel_place_profile"); - mLandmarkInfo = getChild("panel_landmark_info"); + mPlaceProfile = findChild("panel_place_profile"); + mLandmarkInfo = findChild("panel_landmark_info"); if (!mPlaceProfile || !mLandmarkInfo) return FALSE; diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 583b41aa57..68522ffac3 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -119,7 +119,7 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() : mCommitCallbackRegistrar.add("MediaCtrl.SkipBack", boost::bind(&LLPanelPrimMediaControls::onClickSkipBack, this)); mCommitCallbackRegistrar.add("MediaCtrl.SkipForward", boost::bind(&LLPanelPrimMediaControls::onClickSkipForward, this)); - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_prim_media_controls.xml"); + buildPanel(this, "panel_prim_media_controls.xml"); mInactivityTimer.reset(); mFadeTimer.stop(); mCurrentZoom = ZOOM_NONE; diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index 18da8dd48c..272622fcf7 100644 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -133,11 +133,11 @@ BOOL LLPanelProfile::postBuild() getTabCtrl()->setCommitCallback(boost::bind(&LLPanelProfile::onTabSelected, this, _2)); - LLPanelPicks* panel_picks = getChild(PANEL_PICKS); + LLPanelPicks* panel_picks = findChild(PANEL_PICKS); panel_picks->setProfilePanel(this); getTabContainer()[PANEL_PICKS] = panel_picks; - getTabContainer()[PANEL_PROFILE] = getChild(PANEL_PROFILE); + getTabContainer()[PANEL_PROFILE] = findChild(PANEL_PROFILE); return TRUE; } diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp index d59e694be6..56a211091c 100644 --- a/indra/newview/llpanelprofileview.cpp +++ b/indra/newview/llpanelprofileview.cpp @@ -120,7 +120,7 @@ BOOL LLPanelProfileView::postBuild() { LLPanelProfile::postBuild(); - getTabContainer()[PANEL_NOTES] = getChild(PANEL_NOTES); + getTabContainer()[PANEL_NOTES] = findChild(PANEL_NOTES); //*TODO remove this, according to style guide we don't use status combobox getTabContainer()[PANEL_PROFILE]->getChildView("online_me_status_text")->setVisible( FALSE); diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index af58912b38..b398d75feb 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -131,7 +131,7 @@ LLTeleportHistoryFlatItem::LLTeleportHistoryFlatItem(S32 index, LLTeleportHistor mRegionName(region_name), mHighlight(hl) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_teleport_history_item.xml"); + buildPanel(this, "panel_teleport_history_item.xml"); } LLTeleportHistoryFlatItem::~LLTeleportHistoryFlatItem() @@ -382,7 +382,7 @@ LLTeleportHistoryPanel::LLTeleportHistoryPanel() mLastSelectedFlatlList(NULL), mLastSelectedItemIndex(-1) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_teleport_history.xml"); + buildPanel(this, "panel_teleport_history.xml"); } LLTeleportHistoryPanel::~LLTeleportHistoryPanel() diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp index e73d1fb7c2..6e69e6d44c 100644 --- a/indra/newview/llpaneltopinfobar.cpp +++ b/indra/newview/llpaneltopinfobar.cpp @@ -72,7 +72,7 @@ LLPanelTopInfoBar::LLPanelTopInfoBar(): mParcelChangedObserver(0) LLUICtrl::CommitCallbackRegistry::currentRegistrar() .add("TopInfoBar.Action", boost::bind(&LLPanelTopInfoBar::onContextMenuItemClicked, this, _2)); - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_topinfo_bar.xml"); + buildPanel(this, "panel_topinfo_bar.xml"); } LLPanelTopInfoBar::~LLPanelTopInfoBar() diff --git a/indra/newview/llpanelvolumepulldown.cpp b/indra/newview/llpanelvolumepulldown.cpp index 7d70a8a891..a038badb01 100644 --- a/indra/newview/llpanelvolumepulldown.cpp +++ b/indra/newview/llpanelvolumepulldown.cpp @@ -60,7 +60,7 @@ LLPanelVolumePulldown::LLPanelVolumePulldown() mCommitCallbackRegistrar.add("Vol.setControlFalse", boost::bind(&LLPanelVolumePulldown::setControlFalse, this, _2)); mCommitCallbackRegistrar.add("Vol.GoAudioPrefs", boost::bind(&LLPanelVolumePulldown::onAdvancedButtonClick, this, _2)); - LLUICtrlFactory::instance().buildPanel(this, "panel_volume_pulldown.xml"); + buildPanel(this, "panel_volume_pulldown.xml"); } BOOL LLPanelVolumePulldown::postBuild() diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp index d715c47631..4c2469909b 100644 --- a/indra/newview/llscrollingpanelparam.cpp +++ b/indra/newview/llscrollingpanelparam.cpp @@ -62,7 +62,7 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param mAllowModify(allow_modify), mWearable(wearable) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_scrolling_param.xml"); + buildPanel(this, "panel_scrolling_param.xml"); // *HACK To avoid hard coding texture position, lets use border's position for texture. LLViewBorder* left_border = getChild("left_border"); diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index f9189bfb22..aa29f6cb26 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -56,7 +56,7 @@ LLSidepanelInventory::LLSidepanelInventory() mPanelMainInventory(NULL) { - //LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() + //buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() } LLSidepanelInventory::~LLSidepanelInventory() @@ -90,7 +90,7 @@ BOOL LLSidepanelInventory::postBuild() mOverflowBtn = mInventoryPanel->getChild("overflow_btn"); mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this)); - mPanelMainInventory = mInventoryPanel->getChild("panel_main_inventory"); + mPanelMainInventory = mInventoryPanel->findChild("panel_main_inventory"); mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2)); LLTabContainer* tabs = mPanelMainInventory->getChild("inventory filter tabs"); tabs->setCommitCallback(boost::bind(&LLSidepanelInventory::updateVerbs, this)); @@ -108,7 +108,7 @@ BOOL LLSidepanelInventory::postBuild() // UI elements from item panel { - mItemPanel = getChild("sidepanel__item_panel"); + mItemPanel = findChild("sidepanel__item_panel"); LLButton* back_btn = mItemPanel->getChild("back_btn"); back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this)); @@ -116,7 +116,7 @@ BOOL LLSidepanelInventory::postBuild() // UI elements from task panel { - mTaskPanel = getChild("sidepanel__task_panel"); + mTaskPanel = findChild("sidepanel__task_panel"); if (mTaskPanel) { LLButton* back_btn = mTaskPanel->getChild("back_btn"); @@ -176,7 +176,7 @@ void LLSidepanelInventory::onShopButtonClicked() void LLSidepanelInventory::performActionOnSelection(const std::string &action) { - LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild("panel_main_inventory"); + LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild("panel_main_inventory"); LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem(); if (!current_item) { @@ -314,7 +314,7 @@ void LLSidepanelInventory::updateVerbs() bool LLSidepanelInventory::canShare() { LLPanelMainInventory* panel_main_inventory = - mInventoryPanel->getChild("panel_main_inventory"); + mInventoryPanel->findChild("panel_main_inventory"); LLFolderView* root_folder = panel_main_inventory->getActivePanel()->getRootFolder(); @@ -332,7 +332,7 @@ bool LLSidepanelInventory::canShare() LLInventoryItem *LLSidepanelInventory::getSelectedItem() { - LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild("panel_main_inventory"); + LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild("panel_main_inventory"); LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem(); if (!current_item) { @@ -345,7 +345,7 @@ LLInventoryItem *LLSidepanelInventory::getSelectedItem() U32 LLSidepanelInventory::getSelectedCount() { - LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild("panel_main_inventory"); + LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild("panel_main_inventory"); std::set selection_list = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList(); return selection_list.size(); } diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 6a081a573e..8d61bb94e1 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -142,7 +142,7 @@ LLStatusBar::LLStatusBar(const LLRect& rect) mBalanceTimer = new LLFrameTimer(); mHealthTimer = new LLFrameTimer(); - LLUICtrlFactory::getInstance()->buildPanel(this,"panel_status_bar.xml"); + buildPanel(this,"panel_status_bar.xml"); } LLStatusBar::~LLStatusBar() diff --git a/indra/newview/llsyswellitem.cpp b/indra/newview/llsyswellitem.cpp index 1f3d6a582d..79b053da24 100644 --- a/indra/newview/llsyswellitem.cpp +++ b/indra/newview/llsyswellitem.cpp @@ -44,7 +44,7 @@ LLSysWellItem::LLSysWellItem(const Params& p) : LLPanel(p), mTitle(NULL), mCloseBtn(NULL) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_sys_well_item.xml"); + buildPanel(this, "panel_sys_well_item.xml"); mTitle = getChild("title"); mCloseBtn = getChild("close_btn"); diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index 1a8c2b8fc0..89fd22a2a0 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -255,7 +255,7 @@ LLIMWellWindow::RowPanel::RowPanel(const LLSysWellWindow* parent, const LLUUID& S32 chicletCounter, const std::string& name, const LLUUID& otherParticipantId) : LLPanel(LLPanel::Params()), mChiclet(NULL), mParent(parent) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_activeim_row.xml", NULL); + buildPanel(this, "panel_activeim_row.xml", NULL); // Choose which of the pre-created chiclets (IM/group) to use. // The other one gets hidden. @@ -352,7 +352,7 @@ LLIMWellWindow::ObjectRowPanel::ObjectRowPanel(const LLUUID& notification_id, bo : LLPanel() , mChiclet(NULL) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_active_object_row.xml", NULL); + buildPanel(this, "panel_active_object_row.xml", NULL); initChiclet(notification_id); diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index c0da656685..8217aae0f2 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -194,6 +194,8 @@ public: virtual S32 notifyParent(const LLSD& info); + LLHandle getHandle() { mHandle.bind(this); return mHandle; } + private: void onToastMouseEnter(); @@ -206,6 +208,8 @@ private: LLUUID mSessionID; LLNotificationPtr mNotification; + LLRootHandle mHandle; + LLPanel* mWrapperPanel; // timer counts a lifetime of a toast diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp index 57b80fc792..7c2e68f942 100644 --- a/indra/newview/lltoastgroupnotifypanel.cpp +++ b/indra/newview/lltoastgroupnotifypanel.cpp @@ -60,7 +60,7 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification : LLToastPanel(notification), mInventoryOffer(NULL) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_notify.xml"); + buildPanel(this, "panel_group_notify.xml"); const LLSD& payload = notification->getPayload(); LLGroupData groupData; if (!gAgent.getGroupData(payload["group_id"].asUUID(),groupData)) diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp index 26d3bd5192..fc01b7f0d5 100644 --- a/indra/newview/lltoastimpanel.cpp +++ b/indra/newview/lltoastimpanel.cpp @@ -51,7 +51,7 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) : LLToastPanel(p.notif mAvatarIcon(NULL), mAvatarName(NULL), mTime(NULL), mMessage(NULL), mGroupIcon(NULL) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_instant_message.xml"); + buildPanel(this, "panel_instant_message.xml"); mGroupIcon = getChild("group_icon"); mAvatarIcon = getChild("avatar_icon"); diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index 38f67720b7..32e12035ee 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -67,7 +67,7 @@ mNumButtons(0), mAddedDefaultBtn(false), mCloseNotificationOnDestroy(true) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_notification.xml"); + buildPanel(this, "panel_notification.xml"); if(rect != LLRect::null) { this->setShape(rect); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index d8c7eabefb..c5dee710cb 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1521,7 +1521,7 @@ void LLViewerWindow::initBase() // (But wait to add it as a child of the root view so that it will be in front of the // other views.) MainPanel* main_view = new MainPanel(); - LLUICtrlFactory::instance().buildPanel(main_view, "main_view.xml"); + LLPanel::buildPanel(main_view, "main_view.xml"); main_view->setShape(full_window); getRootView()->addChild(main_view); @@ -1529,7 +1529,7 @@ void LLViewerWindow::initBase() mWorldViewPlaceholder = main_view->getChildView("world_view_rect")->getHandle(); mNonSideTrayView = main_view->getChildView("non_side_tray_view")->getHandle(); mFloaterViewHolder = main_view->getChildView("floater_view_holder")->getHandle(); - mPopupView = main_view->getChild("popup_holder"); + mPopupView = main_view->findChild("popup_holder"); mHintHolder = main_view->getChild("hint_holder")->getHandle(); // Constrain floaters to inside the menu and status bar regions. @@ -1568,7 +1568,7 @@ void LLViewerWindow::initBase() LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLFloaterPreference::initBusyResponse)); // Add the progress bar view (startup view), which overrides everything - mProgressView = getRootView()->getChild("progress_view"); + mProgressView = getRootView()->findChild("progress_view"); setShowProgress(FALSE); setProgressCancelButtonVisible(FALSE); -- cgit v1.3 From 83bb4b9518da813a42e49366cea15e5ae9dc7507 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Thu, 16 Sep 2010 22:10:30 -0700 Subject: fixed merge --- indra/llui/lllayoutstack.cpp | 4 ++-- indra/newview/llagentui.h | 1 - indra/newview/llappviewer.cpp | 1 + indra/newview/llbottomtray.h | 1 + indra/newview/llbrowsernotification.cpp | 6 +++--- indra/newview/llimhandler.cpp | 1 + indra/newview/llnearbychathandler.cpp | 3 ++- indra/newview/llnotificationalerthandler.cpp | 2 +- indra/newview/llnotificationgrouphandler.cpp | 1 + indra/newview/llnotificationhandler.h | 18 ++++++++---------- indra/newview/llnotificationhandlerutil.cpp | 1 + indra/newview/llnotificationofferhandler.cpp | 1 + indra/newview/llnotificationscripthandler.cpp | 1 + indra/newview/llnotificationtiphandler.cpp | 3 +++ indra/newview/llsyswellwindow.cpp | 1 + indra/newview/llviewermessage.cpp | 3 +++ 16 files changed, 30 insertions(+), 18 deletions(-) (limited to 'indra/newview/llappviewer.cpp') diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index a0275b6ed5..940c7e7e18 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -208,8 +208,8 @@ S32 LLLayoutStack::getDefaultWidth(S32 cur_width) void LLLayoutStack::movePanel(LLPanel* panel_to_move, LLPanel* target_panel, bool move_to_front) { - LayoutPanel* embedded_panel_to_move = findEmbeddedPanel(panel_to_move); - LayoutPanel* embedded_target_panel = move_to_front ? *mPanels.begin() : findEmbeddedPanel(target_panel); + LLLayoutPanel* embedded_panel_to_move = findEmbeddedPanel(panel_to_move); + LLLayoutPanel* embedded_target_panel = move_to_front ? *mPanels.begin() : findEmbeddedPanel(target_panel); if (!embedded_panel_to_move || !embedded_target_panel || embedded_panel_to_move == embedded_target_panel) { diff --git a/indra/newview/llagentui.h b/indra/newview/llagentui.h index afc0ba5d9a..be7d0c365a 100644 --- a/indra/newview/llagentui.h +++ b/indra/newview/llagentui.h @@ -26,7 +26,6 @@ #ifndef LLAGENTUI_H #define LLAGENTUI_H - class LLSLURL; class LLAgentUI diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 333c92e50d..3b374947a0 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -46,6 +46,7 @@ #include "llmd5.h" #include "llpumpio.h" #include "llmimetypes.h" +#include "llmodaldialog.h" #include "llslurl.h" #include "llstartup.h" #include "llfocusmgr.h" diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 35e00924aa..6225d4c92c 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -29,6 +29,7 @@ #include "llpanel.h" #include "llimview.h" +#include "llbutton.h" class LLChicletPanel; class LLLayoutStack; diff --git a/indra/newview/llbrowsernotification.cpp b/indra/newview/llbrowsernotification.cpp index cc54d10944..8eb0bb1e0b 100644 --- a/indra/newview/llbrowsernotification.cpp +++ b/indra/newview/llbrowsernotification.cpp @@ -28,9 +28,9 @@ #include "llviewerprecompiledheaders.h" // must be first include #include "llnotificationhandler.h" -#include "llnotifications.h" -#include "llfloatermediabrowser.h" -#include "llfloaterreg.h" +//#include "llnotifications.h" +//#include "llfloatermediabrowser.h" +//#include "llfloaterreg.h" using namespace LLNotificationsUI; diff --git a/indra/newview/llimhandler.cpp b/indra/newview/llimhandler.cpp index bc76092a20..e8c905a266 100644 --- a/indra/newview/llimhandler.cpp +++ b/indra/newview/llimhandler.cpp @@ -28,6 +28,7 @@ #include "llviewerprecompiledheaders.h" // must be first include #include "llnotificationhandler.h" +#include "llchannelmanager.h" #include "llagentdata.h" #include "llnotifications.h" diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 303f2abcce..83777af31a 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -28,7 +28,7 @@ #include "llagentdata.h" // for gAgentID #include "llnearbychathandler.h" - +#include "llchannelmanager.h" #include "llbottomtray.h" #include "llchatitemscontainerctrl.h" #include "llfirstuse.h" @@ -36,6 +36,7 @@ #include "llhints.h" #include "llnearbychat.h" #include "llrecentpeople.h" +#include "llscreenchannel.h" #include "llviewercontrol.h" diff --git a/indra/newview/llnotificationalerthandler.cpp b/indra/newview/llnotificationalerthandler.cpp index dcbf6b64ce..6b9bd0436f 100644 --- a/indra/newview/llnotificationalerthandler.cpp +++ b/indra/newview/llnotificationalerthandler.cpp @@ -28,7 +28,7 @@ #include "llviewerprecompiledheaders.h" // must be first include #include "llnotificationhandler.h" - +#include "llchannelmanager.h" #include "llnotifications.h" #include "llprogressview.h" #include "lltoastnotifypanel.h" diff --git a/indra/newview/llnotificationgrouphandler.cpp b/indra/newview/llnotificationgrouphandler.cpp index 9933a8a49c..3819cb06e8 100644 --- a/indra/newview/llnotificationgrouphandler.cpp +++ b/indra/newview/llnotificationgrouphandler.cpp @@ -26,6 +26,7 @@ #include "llviewerprecompiledheaders.h" // must be first include +#include "llchannelmanager.h" #include "llnotificationhandler.h" #include "lltoastgroupnotifypanel.h" #include "llgroupactions.h" diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h index 28a69f2373..f20ddd20d5 100644 --- a/indra/newview/llnotificationhandler.h +++ b/indra/newview/llnotificationhandler.h @@ -27,19 +27,17 @@ #ifndef LL_LLNOTIFICATIONHANDLER_H #define LL_LLNOTIFICATIONHANDLER_H - -#include "llwindow.h" - -//#include "llnotificationsutil.h" -#include "llchannelmanager.h" -#include "llchat.h" -#include "llinstantmessage.h" -#include "llnotificationptr.h" - class LLIMFloater; +class LLChat; + +typedef boost::shared_ptr LLNotificationPtr; +enum EInstantMessage; +typedef enum e_chat_source_type EChatSourceType; namespace LLNotificationsUI { + class LLToast; + // ENotificationType enumerates all possible types of notifications that could be met // typedef enum e_notification_type @@ -103,7 +101,7 @@ protected: // at the moment, when a handlers creates a channel. virtual void initChannel()=0; - LLScreenChannelBase* mChannel; + class LLScreenChannelBase* mChannel; e_notification_type mType; }; diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp index 4231a73af1..7c82ca0da9 100644 --- a/indra/newview/llnotificationhandlerutil.cpp +++ b/indra/newview/llnotificationhandlerutil.cpp @@ -34,6 +34,7 @@ #include "llfloaterreg.h" #include "llnearbychat.h" #include "llimfloater.h" +#include "llscreenchannel.h" using namespace LLNotificationsUI; diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp index 85f95bd0c7..2c10aac06c 100644 --- a/indra/newview/llnotificationofferhandler.cpp +++ b/indra/newview/llnotificationofferhandler.cpp @@ -27,6 +27,7 @@ #include "llviewerprecompiledheaders.h" // must be first include +#include "llchannelmanager.h" #include "llnotificationhandler.h" #include "lltoastnotifypanel.h" #include "llviewercontrol.h" diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp index b4d28bb346..89b29756fb 100644 --- a/indra/newview/llnotificationscripthandler.cpp +++ b/indra/newview/llnotificationscripthandler.cpp @@ -27,6 +27,7 @@ #include "llviewerprecompiledheaders.h" // must be first include +#include "llchannelmanager.h" #include "llnotificationhandler.h" #include "lltoastnotifypanel.h" #include "llviewercontrol.h" diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp index 94612975a2..3c1cd107df 100644 --- a/indra/newview/llnotificationtiphandler.cpp +++ b/indra/newview/llnotificationtiphandler.cpp @@ -27,6 +27,8 @@ #include "llviewerprecompiledheaders.h" // must be first include +#include "llchannelmanager.h" +#include "llinstantmessage.h" #include "llfloaterreg.h" #include "llnearbychat.h" #include "llnotificationhandler.h" @@ -36,6 +38,7 @@ #include "llviewerwindow.h" #include "llnotificationmanager.h" #include "llpaneltiptoast.h" +#include "lltoast.h" using namespace LLNotificationsUI; diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index 99342bb564..ca93027352 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -40,6 +40,7 @@ #include "llviewerwindow.h" #include "llchiclet.h" +#include "llchannelmanager.h" #include "lltoastpanel.h" #include "llnotificationmanager.h" #include "llnotificationsutil.h" diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 48d11e1f05..317d08cc52 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -49,6 +49,7 @@ #include "llagent.h" #include "llagentcamera.h" #include "llcallingcard.h" +#include "llchannelmanager.h" #include "llbuycurrencyhtml.h" #include "llfirstuse.h" #include "llfloaterbuyland.h" @@ -76,11 +77,13 @@ #include "llstatenums.h" #include "llstatusbar.h" #include "llimview.h" +#include "llscreenchannel.h" #include "llspeakers.h" #include "lltrans.h" #include "lltranslate.h" #include "llviewerfoldertype.h" #include "lluri.h" +#include "llviewercontrol.h" #include "llviewergenericmessage.h" #include "llviewermenu.h" #include "llviewerjoystick.h" -- cgit v1.3 From 949b60465593764118c03d0f4e112f69c41bab31 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Fri, 17 Sep 2010 15:01:44 -0700 Subject: Backed out changeset: d71309f8bd0e --- indra/llui/lllayoutstack.cpp | 4 ++-- indra/newview/llagentui.h | 1 + indra/newview/llappviewer.cpp | 1 - indra/newview/llbottomtray.h | 1 - indra/newview/llbrowsernotification.cpp | 6 +++--- indra/newview/llimhandler.cpp | 1 - indra/newview/llnearbychathandler.cpp | 3 +-- indra/newview/llnotificationalerthandler.cpp | 2 +- indra/newview/llnotificationgrouphandler.cpp | 1 - indra/newview/llnotificationhandler.h | 18 ++++++++++-------- indra/newview/llnotificationhandlerutil.cpp | 1 - indra/newview/llnotificationofferhandler.cpp | 1 - indra/newview/llnotificationscripthandler.cpp | 1 - indra/newview/llnotificationtiphandler.cpp | 3 --- indra/newview/llsyswellwindow.cpp | 1 - indra/newview/llviewermessage.cpp | 3 --- 16 files changed, 18 insertions(+), 30 deletions(-) (limited to 'indra/newview/llappviewer.cpp') diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 940c7e7e18..a0275b6ed5 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -208,8 +208,8 @@ S32 LLLayoutStack::getDefaultWidth(S32 cur_width) void LLLayoutStack::movePanel(LLPanel* panel_to_move, LLPanel* target_panel, bool move_to_front) { - LLLayoutPanel* embedded_panel_to_move = findEmbeddedPanel(panel_to_move); - LLLayoutPanel* embedded_target_panel = move_to_front ? *mPanels.begin() : findEmbeddedPanel(target_panel); + LayoutPanel* embedded_panel_to_move = findEmbeddedPanel(panel_to_move); + LayoutPanel* embedded_target_panel = move_to_front ? *mPanels.begin() : findEmbeddedPanel(target_panel); if (!embedded_panel_to_move || !embedded_target_panel || embedded_panel_to_move == embedded_target_panel) { diff --git a/indra/newview/llagentui.h b/indra/newview/llagentui.h index be7d0c365a..afc0ba5d9a 100644 --- a/indra/newview/llagentui.h +++ b/indra/newview/llagentui.h @@ -26,6 +26,7 @@ #ifndef LLAGENTUI_H #define LLAGENTUI_H + class LLSLURL; class LLAgentUI diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 3b374947a0..333c92e50d 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -46,7 +46,6 @@ #include "llmd5.h" #include "llpumpio.h" #include "llmimetypes.h" -#include "llmodaldialog.h" #include "llslurl.h" #include "llstartup.h" #include "llfocusmgr.h" diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 6225d4c92c..35e00924aa 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -29,7 +29,6 @@ #include "llpanel.h" #include "llimview.h" -#include "llbutton.h" class LLChicletPanel; class LLLayoutStack; diff --git a/indra/newview/llbrowsernotification.cpp b/indra/newview/llbrowsernotification.cpp index 8eb0bb1e0b..cc54d10944 100644 --- a/indra/newview/llbrowsernotification.cpp +++ b/indra/newview/llbrowsernotification.cpp @@ -28,9 +28,9 @@ #include "llviewerprecompiledheaders.h" // must be first include #include "llnotificationhandler.h" -//#include "llnotifications.h" -//#include "llfloatermediabrowser.h" -//#include "llfloaterreg.h" +#include "llnotifications.h" +#include "llfloatermediabrowser.h" +#include "llfloaterreg.h" using namespace LLNotificationsUI; diff --git a/indra/newview/llimhandler.cpp b/indra/newview/llimhandler.cpp index e8c905a266..bc76092a20 100644 --- a/indra/newview/llimhandler.cpp +++ b/indra/newview/llimhandler.cpp @@ -28,7 +28,6 @@ #include "llviewerprecompiledheaders.h" // must be first include #include "llnotificationhandler.h" -#include "llchannelmanager.h" #include "llagentdata.h" #include "llnotifications.h" diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 83777af31a..303f2abcce 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -28,7 +28,7 @@ #include "llagentdata.h" // for gAgentID #include "llnearbychathandler.h" -#include "llchannelmanager.h" + #include "llbottomtray.h" #include "llchatitemscontainerctrl.h" #include "llfirstuse.h" @@ -36,7 +36,6 @@ #include "llhints.h" #include "llnearbychat.h" #include "llrecentpeople.h" -#include "llscreenchannel.h" #include "llviewercontrol.h" diff --git a/indra/newview/llnotificationalerthandler.cpp b/indra/newview/llnotificationalerthandler.cpp index 6b9bd0436f..dcbf6b64ce 100644 --- a/indra/newview/llnotificationalerthandler.cpp +++ b/indra/newview/llnotificationalerthandler.cpp @@ -28,7 +28,7 @@ #include "llviewerprecompiledheaders.h" // must be first include #include "llnotificationhandler.h" -#include "llchannelmanager.h" + #include "llnotifications.h" #include "llprogressview.h" #include "lltoastnotifypanel.h" diff --git a/indra/newview/llnotificationgrouphandler.cpp b/indra/newview/llnotificationgrouphandler.cpp index 3819cb06e8..9933a8a49c 100644 --- a/indra/newview/llnotificationgrouphandler.cpp +++ b/indra/newview/llnotificationgrouphandler.cpp @@ -26,7 +26,6 @@ #include "llviewerprecompiledheaders.h" // must be first include -#include "llchannelmanager.h" #include "llnotificationhandler.h" #include "lltoastgroupnotifypanel.h" #include "llgroupactions.h" diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h index f20ddd20d5..28a69f2373 100644 --- a/indra/newview/llnotificationhandler.h +++ b/indra/newview/llnotificationhandler.h @@ -27,17 +27,19 @@ #ifndef LL_LLNOTIFICATIONHANDLER_H #define LL_LLNOTIFICATIONHANDLER_H -class LLIMFloater; -class LLChat; -typedef boost::shared_ptr LLNotificationPtr; -enum EInstantMessage; -typedef enum e_chat_source_type EChatSourceType; +#include "llwindow.h" + +//#include "llnotificationsutil.h" +#include "llchannelmanager.h" +#include "llchat.h" +#include "llinstantmessage.h" +#include "llnotificationptr.h" + +class LLIMFloater; namespace LLNotificationsUI { - class LLToast; - // ENotificationType enumerates all possible types of notifications that could be met // typedef enum e_notification_type @@ -101,7 +103,7 @@ protected: // at the moment, when a handlers creates a channel. virtual void initChannel()=0; - class LLScreenChannelBase* mChannel; + LLScreenChannelBase* mChannel; e_notification_type mType; }; diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp index 7c82ca0da9..4231a73af1 100644 --- a/indra/newview/llnotificationhandlerutil.cpp +++ b/indra/newview/llnotificationhandlerutil.cpp @@ -34,7 +34,6 @@ #include "llfloaterreg.h" #include "llnearbychat.h" #include "llimfloater.h" -#include "llscreenchannel.h" using namespace LLNotificationsUI; diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp index 2c10aac06c..85f95bd0c7 100644 --- a/indra/newview/llnotificationofferhandler.cpp +++ b/indra/newview/llnotificationofferhandler.cpp @@ -27,7 +27,6 @@ #include "llviewerprecompiledheaders.h" // must be first include -#include "llchannelmanager.h" #include "llnotificationhandler.h" #include "lltoastnotifypanel.h" #include "llviewercontrol.h" diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp index 89b29756fb..b4d28bb346 100644 --- a/indra/newview/llnotificationscripthandler.cpp +++ b/indra/newview/llnotificationscripthandler.cpp @@ -27,7 +27,6 @@ #include "llviewerprecompiledheaders.h" // must be first include -#include "llchannelmanager.h" #include "llnotificationhandler.h" #include "lltoastnotifypanel.h" #include "llviewercontrol.h" diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp index 3c1cd107df..94612975a2 100644 --- a/indra/newview/llnotificationtiphandler.cpp +++ b/indra/newview/llnotificationtiphandler.cpp @@ -27,8 +27,6 @@ #include "llviewerprecompiledheaders.h" // must be first include -#include "llchannelmanager.h" -#include "llinstantmessage.h" #include "llfloaterreg.h" #include "llnearbychat.h" #include "llnotificationhandler.h" @@ -38,7 +36,6 @@ #include "llviewerwindow.h" #include "llnotificationmanager.h" #include "llpaneltiptoast.h" -#include "lltoast.h" using namespace LLNotificationsUI; diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index ca93027352..99342bb564 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -40,7 +40,6 @@ #include "llviewerwindow.h" #include "llchiclet.h" -#include "llchannelmanager.h" #include "lltoastpanel.h" #include "llnotificationmanager.h" #include "llnotificationsutil.h" diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 317d08cc52..48d11e1f05 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -49,7 +49,6 @@ #include "llagent.h" #include "llagentcamera.h" #include "llcallingcard.h" -#include "llchannelmanager.h" #include "llbuycurrencyhtml.h" #include "llfirstuse.h" #include "llfloaterbuyland.h" @@ -77,13 +76,11 @@ #include "llstatenums.h" #include "llstatusbar.h" #include "llimview.h" -#include "llscreenchannel.h" #include "llspeakers.h" #include "lltrans.h" #include "lltranslate.h" #include "llviewerfoldertype.h" #include "lluri.h" -#include "llviewercontrol.h" #include "llviewergenericmessage.h" #include "llviewermenu.h" #include "llviewerjoystick.h" -- cgit v1.3