diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 973111b8d..139a10b3c 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -96,15 +96,20 @@ if (WINDOWS) set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /wd4267 /wd4250 /wd4244") endif(WORD_SIZE EQUAL 32) - if (MSVC12) - # configure win32 API for windows vista+ compatibility - set(WINVER "0x0600" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)") - add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}") - else (MSVC12) + if (WORD_SIZE EQUAL 32) # configure win32 API for windows XP+ compatibility set(WINVER "0x0501" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)") add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}") - endif (MSVC12) + else (WORD_SIZE EQUAL 32) + # configure win32 API for windows vista+ compatibility + set(WINVER "0x0600" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)") + add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}") + endif (WORD_SIZE EQUAL 32) + + # Use special XP-compatible toolchain on 32-bit builds + if (MSVC12 AND (WORD_SIZE EQUAL 32)) + set(CMAKE_GENERATOR_TOOLSET "v120xp") + endif (MSVC12 AND (WORD_SIZE EQUAL 32)) # Are we using the crummy Visual Studio KDU build workaround? if (NOT DISABLE_FATAL_WARNINGS) diff --git a/indra/develop.py b/indra/develop.py index add325c41..018003c87 100755 --- a/indra/develop.py +++ b/indra/develop.py @@ -779,6 +779,22 @@ class CygwinSetup(WindowsSetup): '-DROOT_PROJECT_NAME:STRING=%(project_name)s ' '%(opts)s "%(dir)s"' % args) + def run(self, command, name=None): + '''Run a program. If the program fails, raise an exception.''' + ret = os.system(command) + if ret: + if name is None: + name = os.path.normpath(shlex.split(command.encode('utf8'),posix=False)[0].strip('"')) + + path = self.find_in_path(name) + if not path: + ret = 'was not found' + else: + ret = 'exited with status %d' % ret + raise CommandError('the command %r %s' % + (name, ret)) + + setup_platform = { 'darwin': DarwinSetup, 'linux2': LinuxSetup, diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 0ff76cb36..e88b5d638 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -94,9 +94,9 @@ set(viewer_SOURCE_FILES floaterao.cpp floaterlocalassetbrowse.cpp floatervoicelicense.cpp - generichandlers.cpp - hbfloatergrouptitles.cpp + generichandlers.cpp groupchatlistener.cpp + hbfloatergrouptitles.cpp hippofloaterxml.cpp hippogridmanager.cpp hippolimits.cpp @@ -623,7 +623,7 @@ set(viewer_HEADER_FILES floaterao.h floaterlocalassetbrowse.h floatervoicelicense.h - generichandlers.h + generichandlers.h groupchatlistener.h hbfloatergrouptitles.h hippofloaterxml.h @@ -1137,8 +1137,6 @@ set(viewer_HEADER_FILES shcommandhandler.h shfloatermediaticker.h wlfPanel_AdvSettings.h - VertexCache.h - VorbisFramework.h ) source_group("CMake Rules" FILES ViewerInstall.cmake) diff --git a/indra/newview/VertexCache.h b/indra/newview/VertexCache.h deleted file mode 100644 index e17e9d470..000000000 --- a/indra/newview/VertexCache.h +++ /dev/null @@ -1,111 +0,0 @@ -/** - * @file VertexCache.h - * @brief VertexCache class definition - * - * $LicenseInfo:firstyear=2002&license=viewergpl$ - * - * Copyright (c) 2002-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - - -#ifndef VERTEX_CACHE_H - -#define VERTEX_CACHE_H - -class VertexCache -{ - -public: - - VertexCache(int size) - { - numEntries = size; - - entries = new int[numEntries]; - - for(int i = 0; i < numEntries; i++) - entries[i] = -1; - } - - VertexCache() { VertexCache(16); } - ~VertexCache() { delete[] entries; entries = 0; } - - bool InCache(int entry) - { - bool returnVal = false; - for(int i = 0; i < numEntries; i++) - { - if(entries[i] == entry) - { - returnVal = true; - break; - } - } - - return returnVal; - } - - int AddEntry(int entry) - { - int removed; - - removed = entries[numEntries - 1]; - - //push everything right one - for(int i = numEntries - 2; i >= 0; i--) - { - entries[i + 1] = entries[i]; - } - - entries[0] = entry; - - return removed; - } - - void Clear() - { - memset(entries, -1, sizeof(int) * numEntries); - } - - void Copy(VertexCache* inVcache) - { - for(int i = 0; i < numEntries; i++) - { - inVcache->Set(i, entries[i]); - } - } - - int At(int index) { return entries[index]; } - void Set(int index, int value) { entries[index] = value; } - -private: - - int *entries; - int numEntries; - -}; - -#endif diff --git a/indra/newview/VorbisFramework.h b/indra/newview/VorbisFramework.h deleted file mode 100644 index 18743444a..000000000 --- a/indra/newview/VorbisFramework.h +++ /dev/null @@ -1,86 +0,0 @@ -/** - * @file VorbisFramework.h - * @author Dave Camp - * @date Fri Oct 10 2003 - * @brief For the Macview project - * - * $LicenseInfo:firstyear=2003&license=viewergpl$ - * - * Copyright (c) 2003-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "ogg/ogg.h" -#include "vorbis/codec.h" -#include "vorbis/vorbisenc.h" - -extern int mac_vorbis_analysis(vorbis_block *vb,ogg_packet *op); - -extern int mac_vorbis_analysis_headerout(vorbis_dsp_state *v, - vorbis_comment *vc, - ogg_packet *op, - ogg_packet *op_comm, - ogg_packet *op_code); - -extern int mac_vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi); - -extern int mac_vorbis_encode_ctl(vorbis_info *vi,int number,void *arg); - -extern int mac_vorbis_encode_setup_init(vorbis_info *vi); - -extern int mac_vorbis_encode_setup_managed(vorbis_info *vi, - long channels, - long rate, - - long max_bitrate, - long nominal_bitrate, - long min_bitrate); - -extern void mac_vorbis_info_init(vorbis_info *vi); -extern void mac_vorbis_info_clear(vorbis_info *vi); -extern void mac_vorbis_comment_init(vorbis_comment *vc); -extern void mac_vorbis_comment_clear(vorbis_comment *vc); -extern int mac_vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb); -extern int mac_vorbis_block_clear(vorbis_block *vb); -extern void mac_vorbis_dsp_clear(vorbis_dsp_state *v); -extern float **mac_vorbis_analysis_buffer(vorbis_dsp_state *v,int vals); -extern int mac_vorbis_analysis_wrote(vorbis_dsp_state *v,int vals); -extern int mac_vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb); - -extern int mac_ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op); -extern int mac_ogg_stream_init(ogg_stream_state *os,int serialno); -extern int mac_ogg_stream_flush(ogg_stream_state *os, ogg_page *og); -extern int mac_ogg_stream_pageout(ogg_stream_state *os, ogg_page *og); -extern int mac_ogg_page_eos(ogg_page *og); -extern int mac_ogg_stream_clear(ogg_stream_state *os); - - -#ifdef __cplusplus -} -#endif diff --git a/indra/newview/hippogridmanager.cpp b/indra/newview/hippogridmanager.cpp index ddadd6742..c2223fbe5 100644 --- a/indra/newview/hippogridmanager.cpp +++ b/indra/newview/hippogridmanager.cpp @@ -786,9 +786,6 @@ void HippoGridManager::loadFromFile() parseFile(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "grids_sg1.xml"), false); // merge default grid info, if newer. Force load, if list of grids is empty. parseFile(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "default_grids.xml"), !mGridInfo.empty()); - // merge grid info from web site, if newer. Force load, if list of grids is empty. - if (gSavedSettings.getBOOL("CheckForGridUpdates")) - parseUrl(gSavedSettings.getString("GridUpdateList"), !mGridInfo.empty()); std::string last_grid = gSavedSettings.getString("LastSelectedGrid"); if (last_grid.empty()) last_grid = gSavedSettings.getString("DefaultGrid"); @@ -796,8 +793,9 @@ void HippoGridManager::loadFromFile() setCurrentGrid(last_grid); } -void HippoGridManager::parseUrl(const std::string url, bool mergeIfNewer) +void HippoGridManager::parseUrl() { + const std::string& url(gSavedSettings.getString("GridUpdateList")); if (url.empty()) return; llinfos << "Loading grid info from '" << url << "'." << llendl; @@ -816,8 +814,8 @@ void HippoGridManager::parseUrl(const std::string url, bool mergeIfNewer) return; } - LLSD gridInfo = response["body"]; - parseData(gridInfo, mergeIfNewer); + // Force load, if list of grids is empty. + parseData(response["body"], !mGridInfo.empty()); } void HippoGridManager::parseFile(const std::string& fileName, bool mergeIfNewer) diff --git a/indra/newview/hippogridmanager.h b/indra/newview/hippogridmanager.h index a33970e28..5bc4b08ef 100644 --- a/indra/newview/hippogridmanager.h +++ b/indra/newview/hippogridmanager.h @@ -187,6 +187,8 @@ public: return mCurrentGridChangeSignal->connect(cb); } + void parseUrl(); + private: friend class HippoGridInfo; std::map mGridInfo; @@ -200,7 +202,6 @@ private: void cleanup(); void loadFromFile(); void parseFile(const std::string& fileName, bool mergeIfNewer); - void parseUrl(const std::string url, bool mergeIfNewer); void parseData(LLSD &gridInfo, bool mergeIfNewer); }; diff --git a/indra/newview/lfsimfeaturehandler.cpp b/indra/newview/lfsimfeaturehandler.cpp index a92a1645f..6937e1205 100644 --- a/indra/newview/lfsimfeaturehandler.cpp +++ b/indra/newview/lfsimfeaturehandler.cpp @@ -84,12 +84,12 @@ void LFSimFeatureHandler::setSupportedFeatures() //if (hg) { has_feature_or_default(mDestinationGuideURL, extras, "destination-guide-url"); - mMapServerURL = extras.has("map-server-url") ? extras["map-server-url"].asString() : ""; + mMapServerURL = extras.has("map-server-url") ? extras["map-server-url"].asString() : LLStringUtil::null; has_feature_or_default(mSearchURL, extras, "search-server-url"); if (extras.has("GridName")) { const std::string& grid_name(extras["GridName"]); - mGridName = gHippoGridManager->getConnectedGrid()->getGridName() != grid_name ? grid_name : ""; + mGridName = gHippoGridManager->getConnectedGrid()->getGridName() != grid_name ? grid_name : LLStringUtil::null; } } has_feature_or_default(mSayRange, extras, "say-range"); @@ -102,7 +102,7 @@ void LFSimFeatureHandler::setSupportedFeatures() //if (hg) { mDestinationGuideURL.reset(); - mMapServerURL = ""; + mMapServerURL = LLStringUtil::null; mSearchURL.reset(); mGridName.reset(); } diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 3ed202986..933b87bee 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1130,6 +1130,11 @@ bool LLAppViewer::mainLoop() joystick->setNeedsReset(true); LLEventPump& mainloop(LLEventPumps::instance().obtain("mainloop")); + + // merge grid info from web site, if newer. + if (gSavedSettings.getBOOL("CheckForGridUpdates")) + gHippoGridManager->parseUrl(); + // As we do not (yet) send data on the mainloop LLEventPump that varies // with each frame, no need to instantiate a new LLSD event object each // time. Obviously, if that changes, just instantiate the LLSD at the diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp index 2c0fc697f..03de521c8 100644 --- a/indra/newview/llcallingcard.cpp +++ b/indra/newview/llcallingcard.cpp @@ -65,6 +65,7 @@ ///---------------------------------------------------------------------------- /// Local function declarations, constants, enums, and typedefs ///---------------------------------------------------------------------------- +const S32& friend_name_system(); class LLTrackingData { @@ -635,7 +636,7 @@ void LLAvatarTracker::processChange(LLMessageSystem* msg) { std::string fullname; LLSD args; - if (LLAvatarNameCache::getNSName(agent_id, fullname)) + if (LLAvatarNameCache::getNSName(agent_id, fullname, friend_name_system())) args["NAME"] = fullname; LLSD payload; @@ -654,7 +655,7 @@ void LLAvatarTracker::processChange(LLMessageSystem* msg) { std::string fullname; LLSD args; - if (LLAvatarNameCache::getNSName(agent_id, fullname)) + if (LLAvatarNameCache::getNSName(agent_id, fullname, friend_name_system())) args["NAME"] = fullname; LLSD payload; @@ -743,7 +744,7 @@ static void on_avatar_name_cache_notify(const LLUUID& agent_id, // Popup a notify box with online status of this agent // Use display name only because this user is your friend LLSD args; - args["NAME"] = av_name.getNSName(); + args["NAME"] = av_name.getNSName(friend_name_system()); args["STATUS"] = online ? LLTrans::getString("OnlineStatus") : LLTrans::getString("OfflineStatus"); // Popup a notify box with online status of this agent @@ -900,7 +901,7 @@ bool LLCollectMappableBuddies::operator()(const LLUUID& buddy_id, LLRelationship { LLAvatarName av_name; LLAvatarNameCache::get( buddy_id, &av_name); - buddy_map_t::value_type value(av_name.getDisplayName(), buddy_id); + buddy_map_t::value_type value(av_name.getNSName(friend_name_system()), buddy_id); if(buddy->isOnline() && buddy->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION)) { mMappable.insert(value); @@ -919,7 +920,6 @@ bool LLCollectOnlineBuddies::operator()(const LLUUID& buddy_id, LLRelationship* return true; } -const S32& friend_name_system(); bool LLCollectAllBuddies::operator()(const LLUUID& buddy_id, LLRelationship* buddy) { LLAvatarName av_name; diff --git a/indra/newview/llfloaterchat.cpp b/indra/newview/llfloaterchat.cpp index 21131a737..449fe6028 100644 --- a/indra/newview/llfloaterchat.cpp +++ b/indra/newview/llfloaterchat.cpp @@ -70,6 +70,8 @@ #include "rlvhandler.h" // [/RLVa:KB] +#include + // // Global statics // @@ -501,7 +503,7 @@ LLColor4 get_text_color(const LLChat& chat, bool from_im) } static const LLCachedControl sKeywordsChangeColor(gSavedPerAccountSettings, "KeywordsChangeColor", false); - if (sKeywordsChangeColor && gAgentID != chat.mFromID && chat.mSourceType != CHAT_SOURCE_SYSTEM && AscentKeyword::hasKeyword(chat.mText.substr(chat.mFromName.length()), 1)) + if (sKeywordsChangeColor && gAgentID != chat.mFromID && chat.mSourceType != CHAT_SOURCE_SYSTEM && AscentKeyword::hasKeyword(boost::starts_with(chat.mText, chat.mFromName) ? chat.mText.substr(chat.mFromName.length()) : chat.mText, 1)) { static const LLCachedControl sKeywordsColor(gSavedPerAccountSettings, "KeywordsColor", LLColor4(1.f, 1.f, 1.f, 1.f)); text_color = sKeywordsColor; diff --git a/indra/newview/llfloatercustomize.cpp b/indra/newview/llfloatercustomize.cpp index 026dfeb40..061a2bb8d 100644 --- a/indra/newview/llfloatercustomize.cpp +++ b/indra/newview/llfloatercustomize.cpp @@ -346,13 +346,12 @@ void LLFloaterCustomize::onBtnImport_continued(AIFilePicker* filepicker) // (root) //------------------------------------------------------------------------- std::string metaversion; - U32 metaversion_major; + U32 metaversion_major = 0; // No metaversion AIXMLParser linden_genepool(filename, "wearable import file", "linden_genepool", 1); linden_genepool.attribute("version", "1.0"); - linden_genepool.attribute("metaversion", metaversion); - if (!LLStringUtil::convertToU32(metaversion, metaversion_major) || metaversion_major > 1) + if (linden_genepool.attribute("metaversion", metaversion) && (!LLStringUtil::convertToU32(metaversion, metaversion_major) || metaversion_major > 1)) { THROW_MALERT("AIXMLImportRootVersionError", args("[TAG]", "metaversion")("[VERSIONMAJOR]", "1")); } diff --git a/indra/newview/llfloaterfriends.cpp b/indra/newview/llfloaterfriends.cpp index c28993742..bd5517c4e 100644 --- a/indra/newview/llfloaterfriends.cpp +++ b/indra/newview/llfloaterfriends.cpp @@ -328,9 +328,10 @@ const S32& friend_name_system() return name_system; } -static void update_friend_item(LLScrollListItem* item, const LLAvatarName& avname) +static void update_friend_name(LLScrollListCtrl* list, const LLUUID& id, const LLAvatarName& avname) { - item->getColumn(1)->setValue(avname.getNSName(friend_name_system())); + if (LLScrollListItem* item = list->getItem(id)) + item->getColumn(1)->setValue(avname.getNSName(friend_name_system())); } void LLPanelFriends::addFriend(const LLUUID& agent_id) @@ -399,8 +400,8 @@ void LLPanelFriends::addFriend(const LLUUID& agent_id) .value(have_name ? relation_info->getChangeSerialNum() : -1); element.columns.add(cell); - LLScrollListItem* item(mFriendsList->addRow(element)); - if (!have_name) LLAvatarNameCache::get(agent_id, boost::bind(update_friend_item, item, _2)); + mFriendsList->addRow(element); + if (!have_name) LLAvatarNameCache::get(agent_id, boost::bind(update_friend_name, mFriendsList, _1, _2)); } // propagate actual relationship to UI. @@ -421,7 +422,7 @@ void LLPanelFriends::updateFriendItem(const LLUUID& agent_id, const LLRelationsh else { gCacheName->getFullName(agent_id, fullname); - LLAvatarNameCache::get(agent_id, boost::bind(update_friend_item, itemp, _2)); + LLAvatarNameCache::get(agent_id, boost::bind(update_friend_name, mFriendsList, _1, _2)); itemp->getColumn(LIST_FRIEND_UPDATE_GEN)->setValue(-1); } @@ -459,7 +460,9 @@ void LLPanelFriends::updateFriendItem(const LLUUID& agent_id, const LLRelationsh itemp->getColumn(LIST_EDIT_THEIRS)->setValue(info->isRightGrantedFrom(LLRelationship::GRANT_MODIFY_OBJECTS)); // enable this item, in case it was disabled after user input - itemp->setEnabled(true); + itemp->getColumn(LIST_VISIBLE_ONLINE)->setEnabled(true); + itemp->getColumn(LIST_VISIBLE_MAP)->setEnabled(true); + itemp->getColumn(LIST_EDIT_MINE)->setEnabled(true); mFriendsList->setNeedsSort(); @@ -959,7 +962,10 @@ void LLPanelFriends::applyRightsToFriends() rights_updates.insert(std::make_pair(id, rights)); // disable these ui elements until response from server // to avoid race conditions - (*itr)->setEnabled(false); + LLScrollListItem& item = *(*itr); + item.getColumn(LIST_VISIBLE_ONLINE)->setEnabled(false); + item.getColumn(LIST_VISIBLE_MAP)->setEnabled(false); + item.getColumn(LIST_EDIT_MINE)->setEnabled(false); } } diff --git a/indra/newview/llfloaterobjectiminfo.cpp b/indra/newview/llfloaterobjectiminfo.cpp index ce65e8d8c..79c121375 100644 --- a/indra/newview/llfloaterobjectiminfo.cpp +++ b/indra/newview/llfloaterobjectiminfo.cpp @@ -79,7 +79,7 @@ BOOL LLFloaterObjectIMInfo::postBuild() { getChild("Mute")->setCommitCallback(boost::bind(&LLFloaterObjectIMInfo::onClickMute, this)); getChild("OwnerName")->setClickedCallback(boost::bind(boost::ref(mGroupOwned) ? boost::bind(LLGroupActions::show, boost::ref(mOwnerID)) : boost::bind(show_avatar_profile, boost::ref(mOwnerID)))); - getChild("Slurl")->setClickedCallback(boost::bind(LLUrlAction::showLocationOnMap, "secondlife://" + static_cast(boost::ref(mSLurl)))); + getChild("Slurl")->setClickedCallback(boost::bind(LLUrlAction::executeSLURL, boost::bind(std::plus(), "secondlife:///app/worldmap/", boost::ref(mSLurl)))); return true; } @@ -104,7 +104,11 @@ void LLFloaterObjectIMInfo::update(const LLSD& data) childSetVisible("Slurl",have_slurl); childSetText("ObjectName",mName); - childSetText("Slurl",mSLurl); + std::string slurl(mSLurl); + std::string::size_type i = slurl.rfind("?owner_not_object"); + if (i != std::string::npos) + slurl.erase(i) += getString("owner"); + childSetText("Slurl", slurl); childSetText("OwnerName", LLStringUtil::null); getChildView("ObjectID")->setValue(data["object_id"].asUUID()); diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index c930fa461..3fdb07d81 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -593,11 +593,10 @@ void LLFloaterWorldMap::trackAvatar( const LLUUID& avatar_id, const std::string& getChild("spin z")->setValue(LLSD(200.f)); } // Don't re-request info if we already have it or we won't have it in time to teleport - if (mTrackedStatus != LLTracker::TRACKING_AVATAR || name != mTrackedAvatarName) + if (mTrackedStatus != LLTracker::TRACKING_AVATAR || avatar_id != mTrackedAvatarID) { mTrackedStatus = LLTracker::TRACKING_AVATAR; - mTrackedAvatarName = name; - LLTracker::trackAvatar(avatar_id, name); + LLTracker::trackAvatar(mTrackedAvatarID = avatar_id, name); } } else diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h index 499e9c79a..652c23e1f 100644 --- a/indra/newview/llfloaterworldmap.h +++ b/indra/newview/llfloaterworldmap.h @@ -192,7 +192,7 @@ private: LLVector3d mTrackedLocation; LLTracker::ETrackingStatus mTrackedStatus; std::string mTrackedSimName; - std::string mTrackedAvatarName; + LLUUID mTrackedAvatarID; LLSLURL mSLURL; LLCtrlListInterface * mListFriendCombo; diff --git a/indra/newview/llgroupnotify.cpp b/indra/newview/llgroupnotify.cpp index c432ca547..44b9533a6 100644 --- a/indra/newview/llgroupnotify.cpp +++ b/indra/newview/llgroupnotify.cpp @@ -53,11 +53,9 @@ #include "llglheaders.h" #include "llagent.h" // Globals -//LLView* gGroupNotifyBoxView = NULL; - const F32 ANIMATION_TIME = 0.333f; -S32 LLGroupNotifyBox::sGroupNotifyBoxCount = 0; +static S32 sGroupNotifyBoxCount = 0; //--------------------------------------------------------------------------- @@ -90,7 +88,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, const std::string& inventory_name, const LLSD& inventory_offer) : LLPanel("groupnotify", LLGroupNotifyBox::getGroupNotifyRect(), BORDER_YES), - mAnimating(TRUE), + mAnimating(true), mTimer(), mGroupID(group_id), mHasInventory(has_inventory), @@ -123,9 +121,6 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, setBackgroundOpaque(TRUE); setBackgroundColor( gColors.getColor("GroupNotifyBoxColor") ); - LLIconCtrl* icon; - LLTextEditor* text; - S32 y = TOP; S32 x = HPAD + HPAD; @@ -159,18 +154,9 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, x = HPAD + HPAD; // TODO: change this to be the group icon. - if (!group_insignia.isNull()) - { - icon = new LLIconCtrl(std::string("icon"), - LLRect(x, y, x+ICON_WIDTH, y-ICON_WIDTH), - group_insignia.asString()); - } - else - { - icon = new LLIconCtrl(std::string("icon"), - LLRect(x, y, x+ICON_WIDTH, y-ICON_WIDTH), - std::string("notify_box_icon.tga")); - } + LLIconCtrl* icon = new LLIconCtrl(std::string("icon"), + LLRect(x, y, x+ICON_WIDTH, y-ICON_WIDTH), + group_insignia.isNull() ? "notify_box_icon.tga" : group_insignia.asString()); icon->setMouseOpaque(FALSE); addChild(icon); @@ -179,7 +165,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, // If we have inventory with this message, leave room for the name. S32 box_bottom = BTN_TOP + (mHasInventory ? (LINE_HEIGHT + 2*VPAD) : 0); - text = new LLViewerTextEditor(std::string("box"), + LLTextEditor* text = new LLViewerTextEditor(std::string("box"), LLRect(x, y, RIGHT, box_bottom), DB_GROUP_NOTICE_MSG_STR_LEN, LLStringUtil::null, @@ -217,45 +203,42 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, if (mHasInventory) { - addChild(new NoticeText(std::string("subjecttitle"),LLRect(x,y,x + LABEL_WIDTH,y - LINE_HEIGHT),LLTrans::getString("GroupNotifyAttached"),LLFontGL::getFontSansSerif())); + addChild(new NoticeText(std::string("subjecttitle"),LLRect(x,y,x + LABEL_WIDTH,y - LINE_HEIGHT),LLTrans::getString("GroupNotifyAttached"),LLFontGL::getFontSansSerif())); - LLUIImagePtr item_icon = LLInventoryIcon::getIcon(mInventoryOffer->mType, - LLInventoryType::IT_TEXTURE, - 0, FALSE); + LLUIImagePtr item_icon = LLInventoryIcon::getIcon(mInventoryOffer->mType, + LLInventoryType::IT_TEXTURE, + 0, FALSE); + x += LABEL_WIDTH + HPAD; - x += LABEL_WIDTH + HPAD; + std::stringstream ss; + ss << " " << inventory_name; + LLTextBox *line = new LLTextBox(std::string("object_name"),LLRect(x,y,RIGHT - HPAD,y - LINE_HEIGHT),ss.str(),LLFontGL::getFontSansSerif()); + line->setEnabled(FALSE); + line->setBorderVisible(TRUE); + line->setDisabledColor(LLColor4::blue4); + line->setFontStyle(LLFontGL::NORMAL); + line->setBackgroundVisible(true); + line->setBackgroundColor( semi_transparent ); + addChild(line); - std::stringstream ss; - ss << " " << inventory_name; - LLTextBox *line = new LLTextBox(std::string("object_name"),LLRect(x,y,RIGHT - HPAD,y - LINE_HEIGHT),ss.str(),LLFontGL::getFontSansSerif()); - line->setEnabled(FALSE); - line->setBorderVisible(TRUE); - line->setDisabledColor(LLColor4::blue4); - line->setFontStyle(LLFontGL::NORMAL); - line->setBackgroundVisible(true); - line->setBackgroundColor( semi_transparent ); - addChild(line); - - icon = new LLIconCtrl(std::string("icon"), - LLRect(x, y, x+16, y-16), - item_icon->getName()); - icon->setMouseOpaque(FALSE); - addChild(icon); + icon = new LLIconCtrl(std::string("icon"), + LLRect(x, y, x+16, y-16), + item_icon->getName()); + icon->setMouseOpaque(FALSE); + addChild(icon); } - LLButton* btn; - btn = new LLButton(LLTrans::getString("next"), + mNextBtn = new LLButton(LLTrans::getString("next"), LLRect(getRect().getWidth()-26, BOTTOM_PAD + 20, getRect().getWidth()-2, BOTTOM_PAD), std::string("notify_next.png"), std::string("notify_next.png"), LLStringUtil::null, - boost::bind(&LLGroupNotifyBox::onClickNext, this), + boost::bind(&LLGroupNotifyBox::moveToBack, this), LLFontGL::getFontSansSerif()); - btn->setToolTip(LLTrans::getString("next")); - btn->setScaleImage(TRUE); - addChild(btn); - mNextBtn = btn; + mNextBtn->setToolTip(LLTrans::getString("next")); + mNextBtn->setScaleImage(TRUE); + addChild(mNextBtn); S32 btn_width = 80; S32 wide_btn_width = 136; @@ -267,13 +250,12 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, btn_width, BTN_HEIGHT); - btn = new LLButton(LLTrans::getString("ok"), btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::onClickOk,this)); + LLButton* btn = new LLButton(LLTrans::getString("ok"), btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::close, this)); addChild(btn, -1); setDefaultBtn(btn); x += btn_width + HPAD; - btn_rect.setOriginAndSize(x, BOTTOM_PAD, wide_btn_width, @@ -292,27 +274,14 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, wide_btn_width, BTN_HEIGHT); - std::string btn_lbl(""); - if(is_openable(mInventoryOffer->mType)) - { - btn_lbl = LLTrans::getString("GroupNotifyOpenAttachment"); - } - else - { - btn_lbl = LLTrans::getString("GroupNotifySaveAttachment"); - } - mSaveInventoryBtn = new LLButton(btn_lbl, btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::onClickSaveInventory,this)); + mSaveInventoryBtn = new LLButton(LLTrans::getString(is_openable(mInventoryOffer->mType) ? "GroupNotifyOpenAttachment" : "GroupNotifySaveAttachment"), btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::onClickSaveInventory,this)); mSaveInventoryBtn->setVisible(mHasInventory); addChild(mSaveInventoryBtn); } - sGroupNotifyBoxCount++; - // If this is the only notify box, don't show the next button - if (sGroupNotifyBoxCount == 1) - { - mNextBtn->setVisible(FALSE); - } + if (++sGroupNotifyBoxCount == 1) + mNextBtn->setVisible(false); } @@ -352,7 +321,7 @@ void LLGroupNotifyBox::draw() } else { - mAnimating = FALSE; + mAnimating = false; LLPanel::draw(); } } @@ -363,11 +332,11 @@ void LLGroupNotifyBox::close() // The group notice dialog may be an inventory offer. // If it has an inventory save button and that button is still enabled // Then we need to send the inventory declined message - if(mHasInventory) + if (mHasInventory) { mInventoryOffer->forceResponse(IOR_DECLINE); mInventoryOffer = NULL; - mHasInventory = FALSE; + mHasInventory = false; } gNotifyBoxView->removeChild(this); @@ -384,9 +353,7 @@ void LLGroupNotifyBox::initClass() //static bool LLGroupNotifyBox::onNewNotification(const LLSD& notify) { - LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID()); - - if (notification) + if (LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID())) { const LLSD& payload = notification->getPayload(); // Get the group data @@ -397,8 +364,7 @@ bool LLGroupNotifyBox::onNewNotification(const LLSD& notify) return false; } - LLGroupNotifyBox* self; - self = new LLGroupNotifyBox(payload["subject"].asString(), + gNotifyBoxView->addChild(new LLGroupNotifyBox(payload["subject"].asString(), payload["message"].asString(), payload["sender_name"].asString(), payload["group_id"].asUUID(), @@ -407,8 +373,7 @@ bool LLGroupNotifyBox::onNewNotification(const LLSD& notify) notification->getDate(), payload["inventory_offer"].isDefined(), payload["inventory_name"].asString(), - payload["inventory_offer"]); - gNotifyBoxView->addChild(self); + payload["inventory_offer"])); } return false; } @@ -424,14 +389,12 @@ void LLGroupNotifyBox::moveToBack() if (sGroupNotifyBoxCount > 1) { LLView* view = gNotifyBoxView->getFirstChild(); - - if(view && "groupnotify" == view->getName()) + if (view && "groupnotify" == view->getName()) { - LLGroupNotifyBox* front = (LLGroupNotifyBox*)view; - - if(front->mNextBtn) + LLGroupNotifyBox* front = static_cast(view); + if (front->mNextBtn) { - front->mNextBtn->setVisible(TRUE); + front->mNextBtn->setVisible(true); } } } @@ -452,23 +415,13 @@ LLRect LLGroupNotifyBox::getGroupNotifyRect() } -void LLGroupNotifyBox::onClickOk() -{ - close(); -} - void LLGroupNotifyBox::onClickSaveInventory() { mInventoryOffer->forceResponse(IOR_ACCEPT); mInventoryOffer = NULL; - mHasInventory = FALSE; + mHasInventory = false; // Each item can only be received once, so disable the button. mSaveInventoryBtn->setEnabled(FALSE); } - -void LLGroupNotifyBox::onClickNext() -{ - moveToBack(); -} diff --git a/indra/newview/llgroupnotify.h b/indra/newview/llgroupnotify.h index bd19ccd89..29d2454bf 100644 --- a/indra/newview/llgroupnotify.h +++ b/indra/newview/llgroupnotify.h @@ -52,7 +52,6 @@ public: void close(); static void initClass(); - static void destroyClass(); static bool onNewNotification(const LLSD& notification); protected: @@ -72,11 +71,6 @@ protected: /*virtual*/ ~LLGroupNotifyBox(); -// JC - removed support for clicking in background to dismiss -// the dialogs. -// /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); -// /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); -// /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); // Animate as sliding onto the screen. @@ -89,15 +83,11 @@ protected: static LLRect getGroupNotifyRect(); // internal handler for button being clicked - void onClickOk(); void onClickSaveInventory(); - // for "next" button - void onClickNext(); - private: // Are we sliding onscreen? - BOOL mAnimating; + bool mAnimating; // Time since this notification was displayed. // This is an LLTimer not a frame timer because I am concerned @@ -107,17 +97,9 @@ private: LLButton* mNextBtn; LLButton* mSaveInventoryBtn; - static S32 sGroupNotifyBoxCount; - LLUUID mGroupID; - BOOL mHasInventory; + bool mHasInventory; LLOfferInfo* mInventoryOffer; }; -// This view contains the stack of notification windows. -//extern LLView* gGroupNotifyBoxView; - -const S32 GROUP_LAYOUT_DEFAULT = 0; -const S32 GROUP_LAYOUT_SCRIPT_DIALOG = 1; - #endif diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index 255a428fb..9ce08dfa0 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -336,6 +336,9 @@ LLFloaterIMPanel::LLFloaterIMPanel( mFactoryMap["active_speakers_panel"] = LLCallbackMap(createSpeakersPanel, this); mVoiceChannel = new LLVoiceChannelGroup(mSessionUUID, mLogLabel); break; + default: + llwarns << "Unknown session type: " << mDialog << llendl; + // fallthrough, Singu TODO: Find out which cases this happens in, seems to only be P2P, though. // just received text from another user case IM_NOTHING_SPECIAL: mTextIMPossible = LLVoiceClient::getInstance()->isSessionTextIMPossible(mSessionUUID); @@ -347,9 +350,6 @@ LLFloaterIMPanel::LLFloaterIMPanel( LLMuteList::instance().addObserver(this); mDing = gSavedSettings.getBOOL("LiruNewMessageSoundIMsOn"); break; - default: - llwarns << "Unknown session type" << llendl; - break; } mSpeakers = new LLIMSpeakerMgr(mVoiceChannel); @@ -444,9 +444,6 @@ LLFloaterIMPanel::~LLFloaterIMPanel() delete mVoiceChannel; mVoiceChannel = NULL; - - //delete focus lost callback - mFocusLostSignal.disconnect(); } // virtual @@ -484,7 +481,7 @@ BOOL LLFloaterIMPanel::postBuild() mInputEditor = getChild("chat_editor"); mInputEditor->setAutoreplaceCallback(boost::bind(&LLAutoReplace::autoreplaceCallback, LLAutoReplace::getInstance(), _1, _2, _3, _4, _5)); mInputEditor->setFocusReceivedCallback( boost::bind(&LLFloaterIMPanel::onInputEditorFocusReceived, this) ); - mFocusLostSignal = mInputEditor->setFocusLostCallback(boost::bind(&LLFloaterIMPanel::setTyping, this, false)); + mInputEditor->setFocusLostCallback(boost::bind(&LLFloaterIMPanel::setTyping, this, false)); mInputEditor->setKeystrokeCallback( boost::bind(&LLFloaterIMPanel::onInputEditorKeystroke, this, _1) ); mInputEditor->setCommitCallback( boost::bind(&LLFloaterIMPanel::onSendMsg,this) ); mInputEditor->setCommitOnFocusLost( FALSE ); diff --git a/indra/newview/llimpanel.h b/indra/newview/llimpanel.h index 463df3147..a1285dbe9 100644 --- a/indra/newview/llimpanel.h +++ b/indra/newview/llimpanel.h @@ -242,9 +242,6 @@ private: // Timer to detect when user has stopped typing. LLFrameTimer mLastKeystrokeTimer; - boost::signals2::connection mFocusLostSignal; - - CachedUICtrl mVolumeSlider; CachedUICtrl mEndCallBtn; CachedUICtrl mStartCallBtn; diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index 20386623b..4fb306317 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -500,7 +500,7 @@ BOOL LLMuteList::autoRemove(const LLUUID& agent_id, const EAutoReason reason) { BOOL removed = FALSE; - if (isMuted(agent_id)) + if (isMuted(agent_id) && !(reason == AR_INVENTORY && gSavedSettings.getBOOL("AutoresponseMutedItem"))) { LLMute automute(agent_id, LLStringUtil::null, LLMute::AGENT); removed = TRUE; diff --git a/indra/newview/llnotify.cpp b/indra/newview/llnotify.cpp index 4f6cca008..9cbafafd2 100644 --- a/indra/newview/llnotify.cpp +++ b/indra/newview/llnotify.cpp @@ -69,11 +69,22 @@ const S32 BOTTOM_PAD = VPAD * 3; // statics -S32 LLNotifyBox::sNotifyBoxCount = 0; -const LLFontGL* LLNotifyBox::sFont = NULL; -const LLFontGL* LLNotifyBox::sFontSmall = NULL; -std::map LLNotifyBox::sOpenUniqueNotifyBoxes; +S32 sNotifyBoxCount = 0; +static const LLFontGL* sFont = NULL; +void chat_notification(const LLNotificationPtr notification) +{ + // TODO: Make a separate archive for these. + if (gSavedSettings.getBOOL("HideNotificationsInChat")) return; + LLChat chat(notification->getMessage()); + chat.mSourceType = CHAT_SOURCE_SYSTEM; +// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0e) | Added: RLVa-0.2.0b + // Notices should already have their contents filtered where necessary + if (rlv_handler_t::isEnabled()) + chat.mRlvLocFiltered = chat.mRlvNamesFiltered = true; +// [/RLVa:KB] + LLFloaterChat::getInstance()->addChatHistory(chat); +} //--------------------------------------------------------------------------- // LLNotifyBox @@ -82,6 +93,7 @@ std::map LLNotifyBox::sOpenUniqueNotifyBoxes; //static void LLNotifyBox::initClass() { + sFont = LLFontGL::getFontSansSerif(); LLNotificationChannel::buildChannel("Notifications", "Visible", LLNotificationFilters::filterBy(&LLNotification::getType, "notify")); LLNotificationChannel::buildChannel("NotificationTips", "Visible", LLNotificationFilters::filterBy(&LLNotification::getType, "notifytip")); @@ -96,8 +108,13 @@ bool LLNotifyBox::onNotification(const LLSD& notify) if (!notification) return false; - if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change") + if (notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change") { + if (notification->getPayload().has("SUPPRESS_TOAST")) + { + chat_notification(notification); + return false; + } //bring existing notification to top //This getInstance is ugly, as LLNotifyBox is derived from both LLInstanceTracker and LLEventTimer, which also is derived from its own LLInstanceTracker //Have to explicitly determine which getInstance function to use. @@ -108,12 +125,7 @@ bool LLNotifyBox::onNotification(const LLSD& notify) } else { - bool is_script_dialog = (notification->getName() == "ScriptDialog" || notification->getName() == "ScriptDialogGroup"); - LLNotifyBox* notify_box = new LLNotifyBox( - notification, - is_script_dialog); //layout_script_dialog); - - gNotifyBoxView->addChild(notify_box); + gNotifyBoxView->addChild(new LLNotifyBox(notification)); } } else if (notify["sigtype"].asString() == "delete") @@ -129,8 +141,8 @@ bool LLNotifyBox::onNotification(const LLSD& notify) } //--------------------------------------------------------------------------- -LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, - BOOL layout_script_dialog) +// Singu Note: We could clean a lot of this up by creating derived classes for Notifications and NotificationTips. +LLNotifyBox::LLNotifyBox(LLNotificationPtr notification) : LLPanel(notification->getName(), LLRect(), BORDER_NO), LLEventTimer(notification->getExpiration() == LLDate() ? LLDate(LLDate::now().secondsSinceEpoch() + (F64)gSavedSettings.getF32("NotifyTipDuration")) @@ -138,25 +150,18 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, LLInstanceTracker(notification->getID()), mNotification(notification), mIsTip(notification->getType() == "notifytip"), - mAnimating(TRUE), + mAnimating(gNotifyBoxView->getChildCount() == 0), // Only animate first window mNextBtn(NULL), mNumOptions(0), mNumButtons(0), - mAddedDefaultBtn(FALSE), - mLayoutScriptDialog(layout_script_dialog), + mAddedDefaultBtn(false), mUserInputBox(NULL) { std::string edit_text_name; std::string edit_text_contents; - // class init - { - sFont = LLFontGL::getFontSansSerif(); - sFontSmall = LLFontGL::getFontSansSerifSmall(); - } - // setup paramaters - mMessage = notification->getMessage(); + const std::string& message(notification->getMessage()); // initialize setFocusRoot(!mIsTip); @@ -169,19 +174,14 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, // they display the tip in a different color mIsCaution = notification->getPriority() >= NOTIFICATION_PRIORITY_HIGH; - // Only animate first window - if( gNotifyBoxView->getChildCount() > 0 ) - mAnimating = FALSE; - else - mAnimating = TRUE; - LLNotificationFormPtr form(notification->getForm()); mNumOptions = form->getNumElements(); bool is_textbox = form->getElement("message").isDefined(); - LLRect rect = mIsTip ? getNotifyTipRect(mMessage) + bool layout_script_dialog(notification->getName() == "ScriptDialog" || notification->getName() == "ScriptDialogGroup"); + LLRect rect = mIsTip ? getNotifyTipRect(message) : getNotifyRect(is_textbox ? 10 : mNumOptions, layout_script_dialog, mIsCaution); setRect(rect); setFollows(mIsTip ? (FOLLOWS_BOTTOM|FOLLOWS_RIGHT) : (FOLLOWS_TOP|FOLLOWS_RIGHT)); @@ -250,7 +250,7 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + DB_INV_ITEM_NAME_BUF_SIZE; // For script dialogs: add space for title. - text = new LLTextEditor(std::string("box"), LLRect(x, y, getRect().getWidth()-2, mIsTip ? BOTTOM : BTN_TOP+16), MAX_LENGTH, mMessage, sFont, FALSE); + text = new LLTextEditor(std::string("box"), LLRect(x, y, getRect().getWidth()-2, mIsTip ? BOTTOM : BTN_TOP+16), MAX_LENGTH, message, sFont, FALSE); text->setWordWrap(TRUE); text->setTabStop(FALSE); text->setMouseOpaque(FALSE); @@ -267,11 +267,9 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, } else { - const S32 BTN_TOP = BOTTOM_PAD + (((mNumOptions-1+2)/3)) * (BTN_HEIGHT+VPAD); // Tokenization on \n is handled by LLTextBox - const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + @@ -280,7 +278,7 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, text = new LLTextEditor(std::string("box"), LLRect(x, y, getRect().getWidth()-2, mIsTip ? BOTTOM : BTN_TOP+16), MAX_LENGTH, - mMessage, + message, sFont, FALSE); text->setWordWrap(TRUE); @@ -300,54 +298,39 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, if (mIsTip) { - // TODO: Make a separate archive for these. - LLChat chat(mMessage); - chat.mSourceType = CHAT_SOURCE_SYSTEM; -// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0e) | Added: RLVa-0.2.0b - if (rlv_handler_t::isEnabled()) - { - // Notices should already have their contents filtered where necessary - chat.mRlvLocFiltered = chat.mRlvNamesFiltered = TRUE; - } -// [/RLVa:KB] - if (!gSavedSettings.getBOOL("HideNotificationsInChat")) { - LLFloaterChat::getInstance(LLSD())->addChatHistory(chat); - } + chat_notification(mNotification); } else { - LLButton* btn; - btn = new LLButton(std::string("next"), + mNextBtn = new LLButton(std::string("next"), LLRect(getRect().getWidth()-26, BOTTOM_PAD + 20, getRect().getWidth()-2, BOTTOM_PAD), std::string("notify_next.png"), std::string("notify_next.png"), LLStringUtil::null, - boost::bind(&LLNotifyBox::onClickNext,this), + boost::bind(&LLNotifyBox::moveToBack, this, true), sFont); - btn->setScaleImage(TRUE); - btn->setToolTip(LLTrans::getString("next")); - addChild(btn); - mNextBtn = btn; + mNextBtn->setScaleImage(TRUE); + mNextBtn->setToolTip(LLTrans::getString("next")); + addChild(mNextBtn); for (S32 i = 0; i < mNumOptions; i++) { - LLSD form_element = form->getElement(i); std::string element_type = form_element["type"].asString(); if (element_type == "button") { - addButton(form_element["name"].asString(), form_element["text"].asString(), TRUE, form_element["default"].asBoolean()); + addButton(form_element["name"].asString(), form_element["text"].asString(), TRUE, form_element["default"].asBoolean(), layout_script_dialog); } else if (element_type == "input") { edit_text_contents = form_element["value"].asString(); edit_text_name = form_element["name"].asString(); } - } + } if (is_textbox) { - S32 button_rows = (layout_script_dialog) ? 2 : 1; + S32 button_rows = layout_script_dialog ? 2 : 1; LLRect input_rect; input_rect.setOriginAndSize(x, BOTTOM_PAD + button_rows * (BTN_HEIGHT + VPAD), @@ -373,23 +356,15 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, if (mNumButtons == 0) { - addButton("OK", "OK", FALSE, TRUE); - mAddedDefaultBtn = TRUE; + addButton("OK", "OK", false, true, layout_script_dialog); + mAddedDefaultBtn = true; } - sNotifyBoxCount++; - - if (sNotifyBoxCount <= 0) - { + if (++sNotifyBoxCount <= 0) llwarns << "A notification was mishandled. sNotifyBoxCount = " << sNotifyBoxCount << llendl; - } - // If this is the only notify box, don't show the next button - if (sNotifyBoxCount == 1 - && mNextBtn) - { - mNextBtn->setVisible(FALSE); - } + else if (sNotifyBoxCount == 1 && mNextBtn) + mNextBtn->setVisible(false); } } @@ -399,14 +374,13 @@ LLNotifyBox::~LLNotifyBox() } // virtual -LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& label, BOOL is_option, BOOL is_default) +LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& label, bool is_option, bool is_default, bool layout_script_dialog) { // make caution notification buttons slightly narrower // so that 3 of them can fit without overlapping the "next" button - S32 btn_width = mIsCaution? 84 : 90; + S32 btn_width = mIsCaution ? 84 : 90; LLRect btn_rect; - LLButton* btn; S32 btn_height= BTN_HEIGHT; const LLFontGL* font = sFont; S32 ignore_pad = 0; @@ -414,7 +388,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& lab S32 index = button_index; S32 x = (HPAD * 4) + 32; - if (mLayoutScriptDialog) + if (layout_script_dialog) { // Add two "blank" option spaces, before the "Ignore" button index = button_index + 2; @@ -422,6 +396,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& lab { // Ignore button is smaller, less wide btn_height = BTN_HEIGHT_SMALL; + static const LLFontGL* sFontSmall = LLFontGL::getFontSansSerifSmall(); font = sFontSmall; ignore_pad = 10; } @@ -432,7 +407,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& lab btn_width - 2*ignore_pad, btn_height); - btn = new LLButton(name, btn_rect, "", boost::bind(&LLNotifyBox::onClickButton, this, is_option ? name : "")); + LLButton* btn = new LLButton(name, btn_rect, "", boost::bind(&LLNotifyBox::onClickButton, this, is_option ? name : "")); btn->setLabel(label); btn->setFont(font); @@ -445,9 +420,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& lab addChild(btn, -1); if (is_default) - { setDefaultBtn(btn); - } mNumButtons++; return btn; @@ -486,14 +459,10 @@ void LLNotifyBox::draw() { // If we are teleporting, stop the timer and restart it when the teleporting completes if (gTeleportDisplay) - { mEventTimer.stop(); - } else if (!mEventTimer.getStarted()) - { mEventTimer.start(); - } - + F32 display_time = mAnimateTimer.getElapsedTimeF32(); if (mAnimating && display_time < ANIMATION_TIME) @@ -508,21 +477,18 @@ void LLNotifyBox::draw() LLUI::translate(0.f, voffset, 0.f); drawBackground(); - LLPanel::draw(); LLUI::popMatrix(); } else { - if(mAnimating) + if (mAnimating) { - mAnimating = FALSE; - if(!mIsTip) - { + mAnimating = false; + if (!mIsTip) // hide everyone behind me once I'm done animating gNotifyBoxView->showOnly(this); - } } drawBackground(); LLPanel::draw(); @@ -531,66 +497,51 @@ void LLNotifyBox::draw() void LLNotifyBox::drawBackground() const { - LLUIImagePtr imagep = LLUI::getUIImage("rounded_square.tga"); - if (imagep) + if (LLUIImagePtr imagep = LLUI::getUIImage("rounded_square.tga")) { gGL.getTexUnit(0)->bind(imagep->getImage()); // set proper background color depending on whether notify box is a caution or not - LLColor4 color = mIsCaution? gColors.getColor("NotifyCautionBoxColor") : gColors.getColor("NotifyBoxColor"); - if(gFocusMgr.childHasKeyboardFocus( this )) + bool has_focus(gFocusMgr.childHasKeyboardFocus(this)); + if (has_focus) { const S32 focus_width = 2; - color = gColors.getColor("FloaterFocusBorderColor"); + static const LLCachedControl sBorder(gColors, "FloaterFocusBorderColor"); + LLColor4 color = sBorder; gGL.color4fv(color.mV); gl_segmented_rect_2d_tex(-focus_width, getRect().getHeight() + focus_width, getRect().getWidth() + focus_width, -focus_width, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); - color = gColors.getColor("ColorDropShadow"); - gGL.color4fv(color.mV); - gl_segmented_rect_2d_tex(0, getRect().getHeight(), getRect().getWidth(), 0, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); - - if( mIsCaution ) - color = gColors.getColor("NotifyCautionBoxColor"); - else - color = gColors.getColor("NotifyBoxColor"); - - gGL.color4fv(color.mV); - gl_segmented_rect_2d_tex(1, getRect().getHeight()-1, getRect().getWidth()-1, 1, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); - } - else - { + static const LLCachedControl sDropShadow(gColors, "ColorDropShadow"); + color = sDropShadow; gGL.color4fv(color.mV); gl_segmented_rect_2d_tex(0, getRect().getHeight(), getRect().getWidth(), 0, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); } + + static const LLCachedControl sCautionColor(gColors, "NotifyCautionBoxColor"); + static const LLCachedControl sColor(gColors, "NotifyBoxColor"); + LLColor4 color = mIsCaution ? sCautionColor : sColor; + gGL.color4fv(color.mV); + gl_segmented_rect_2d_tex(has_focus, getRect().getHeight()-has_focus, getRect().getWidth()-has_focus, has_focus, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); } } void LLNotifyBox::close() { - BOOL isTipTmp = mIsTip; - - if (!mIsTip) - { - sNotifyBoxCount--; - } - + bool not_tip = !mIsTip; die(); - if(!isTipTmp) + if (not_tip) { - LLNotifyBox * front = gNotifyBoxView->getFirstNontipBox(); - if(front) + if (LLNotifyBox* front = gNotifyBoxView->getFirstNontipBox()) { gNotifyBoxView->showOnly(front); - // we're assuming that close is only called by user action (for non-tips), - // so we then give focus to the next close button - if (front->getDefaultButton()) - { - front->getDefaultButton()->setFocus(TRUE); - } + // we're assuming that close is only called by user action (for non-tips), so we then give focus to the next close button + if (LLView* view = front->getDefaultButton()) + view->setFocus(true); gFocusMgr.triggerFocusFlash(); // TODO it's ugly to call this here } + --sNotifyBoxCount; } } @@ -622,11 +573,8 @@ BOOL LLNotifyBox::tick() void LLNotifyBox::setVisible(BOOL visible) { // properly set the status of the next button - if(visible && !mIsTip) - { + if (visible && !mIsTip) mNextBtn->setVisible(sNotifyBoxCount > 1); - mNextBtn->setEnabled(sNotifyBoxCount > 1); - } LLPanel::setVisible(visible); } @@ -634,35 +582,30 @@ void LLNotifyBox::moveToBack(bool getfocus) { // Move this dialog to the back. gNotifyBoxView->sendChildToBack(this); - if(!mIsTip && mNextBtn) + if (!mIsTip && mNextBtn) { - mNextBtn->setVisible(FALSE); + mNextBtn->setVisible(false); // And enable the next button on the frontmost one, if there is one - if (gNotifyBoxView->getChildCount() > 0) - { - LLNotifyBox* front = gNotifyBoxView->getFirstNontipBox(); - if (front) + if (gNotifyBoxView->getChildCount()) + if (LLNotifyBox* front = gNotifyBoxView->getFirstNontipBox()) { gNotifyBoxView->showOnly(front); if (getfocus) { // if are called from a user interaction // we give focus to the next next button - if (front->mNextBtn != NULL) - { - front->mNextBtn->setFocus(TRUE); - } + if (front->mNextBtn) + front->mNextBtn->setFocus(true); gFocusMgr.triggerFocusFlash(); // TODO: it's ugly to call this here } } - } } } // static -LLRect LLNotifyBox::getNotifyRect(S32 num_options, BOOL layout_script_dialog, BOOL is_caution) +LLRect LLNotifyBox::getNotifyRect(S32 num_options, bool layout_script_dialog, bool is_caution) { S32 notify_height = gSavedSettings.getS32("NotifyBoxHeight"); if (is_caution) @@ -680,15 +623,11 @@ LLRect LLNotifyBox::getNotifyRect(S32 num_options, BOOL layout_script_dialog, BO const S32 LEFT = RIGHT - NOTIFY_WIDTH; if (num_options < 1) - { num_options = 1; - } // Add two "blank" option spaces. if (layout_script_dialog) - { num_options += 2; - } S32 additional_lines = (num_options-1) / 3; @@ -700,7 +639,6 @@ LLRect LLNotifyBox::getNotifyRect(S32 num_options, BOOL layout_script_dialog, BO // static LLRect LLNotifyBox::getNotifyTipRect(const std::string &utf8message) { - S32 line_count = 1; LLWString message = utf8str_to_wstring(utf8message); S32 message_len = message.length(); @@ -712,27 +650,24 @@ LLRect LLNotifyBox::getNotifyTipRect(const std::string &utf8message) const llwchar* start = wchars; const llwchar* end; S32 total_drawn = 0; - BOOL done = FALSE; + bool done = false; + S32 line_count; - do + for (line_count = 2; !done; ++line_count) { - line_count++; + for (end = start; *end != 0 && *end != '\n'; end++); - for (end=start; *end != 0 && *end != '\n'; end++) - ; - - if( *end == 0 ) + if (*end == 0) { end = wchars + message_len; - done = TRUE; + done = true; } - S32 remaining = end - start; - while( remaining ) + for (S32 remaining = end - start; remaining;) { - S32 drawn = sFont->maxDrawableChars( start, (F32)text_area_width, remaining, LLFontGL::WORD_BOUNDARY_IF_POSSIBLE ); + S32 drawn = sFont->maxDrawableChars(start, (F32)text_area_width, remaining, LLFontGL::WORD_BOUNDARY_IF_POSSIBLE); - if( 0 == drawn ) + if (0 == drawn) { drawn = 1; // Draw at least one character, even if it doesn't all fit. (avoids an infinite loop) } @@ -740,10 +675,10 @@ LLRect LLNotifyBox::getNotifyTipRect(const std::string &utf8message) total_drawn += drawn; start += drawn; remaining -= drawn; - - if( total_drawn < message_len ) + + if (total_drawn < message_len) { - if( (wchars[ total_drawn ] != '\n') ) + if (wchars[ total_drawn ] != '\n') { // wrap because line was too long line_count++; @@ -751,19 +686,18 @@ LLRect LLNotifyBox::getNotifyTipRect(const std::string &utf8message) } else { - done = TRUE; + done = true; } } total_drawn++; // for '\n' - end++; - start = end; - } while( !done ); + start = ++end; + } const S32 MIN_NOTIFY_HEIGHT = 72; const S32 MAX_NOTIFY_HEIGHT = 600; S32 notify_height = llceil((F32) (line_count+1) * sFont->getLineHeight()); - if(gOverlayBar) + if (gOverlayBar) { notify_height += gOverlayBar->getBoundingRect().mTop; } @@ -799,18 +733,12 @@ void LLNotifyBox::onClickButton(const std::string name) } -void LLNotifyBox::onClickNext() -{ - moveToBack(true); -} - - LLNotifyBoxView::LLNotifyBoxView(const std::string& name, const LLRect& rect, BOOL mouse_opaque, U32 follows) : LLUICtrl(name,rect,mouse_opaque,NULL,follows) { } -LLNotifyBox * LLNotifyBoxView::getFirstNontipBox() const +LLNotifyBox* LLNotifyBoxView::getFirstNontipBox() const { // *TODO: Don't make assumptions like this! // assumes every child is a notify box @@ -819,50 +747,41 @@ LLNotifyBox * LLNotifyBoxView::getFirstNontipBox() const iter++) { // hack! *TODO: Integrate llnotify and llgroupnotify - if(isGroupNotifyBox(*iter)) - { + if (isGroupNotifyBox(*iter)) continue; - } - - LLNotifyBox* box = (LLNotifyBox*)(*iter); - if(!box->isTip() && !box->isDead()) - { + + LLNotifyBox* box = static_cast(*iter); + if (!box->isTip() && !box->isDead()) return box; - } } return NULL; } -void LLNotifyBoxView::showOnly(LLView * view) +void LLNotifyBoxView::showOnly(LLView* view) { - if(view) - { - // assumes that the argument is actually a child - LLNotifyBox * shown = dynamic_cast(view); - if(!shown) - { - return ; - } + // assumes that the argument is actually a child + if (!dynamic_cast(view)) return; - // make every other notification invisible - for(child_list_const_iter_t iter = getChildList()->begin(); + // make every other notification invisible + for(child_list_const_iter_t iter = getChildList()->begin(); iter != getChildList()->end(); iter++) - { - if(isGroupNotifyBox(*iter)) - { - continue; - } - - LLNotifyBox * box = (LLNotifyBox*)(*iter); - if(box != view && box->getVisible() && !box->isTip()) - { - box->setVisible(FALSE); - } - } - shown->setVisible(TRUE); - sendChildToFront(shown); + { + if (view == (*iter)) continue; + LLView* view(*iter); + if (isGroupNotifyBox(view) || !view->getVisible()) + continue; + if (!static_cast(view)->isTip()) + view->setVisible(false); } + view->setVisible(true); + sendChildToFront(view); +} + +void LLNotifyBoxView::deleteAllChildren() +{ + LLUICtrl::deleteAllChildren(); + sNotifyBoxCount = 0; } void LLNotifyBoxView::purgeMessagesMatching(const Matcher& matcher) @@ -874,13 +793,11 @@ void LLNotifyBoxView::purgeMessagesMatching(const Matcher& matcher) iter != notification_queue.end(); iter++) { - if(isGroupNotifyBox(*iter)) - { + if (isGroupNotifyBox(*iter)) continue; - } - LLNotifyBox* notification = (LLNotifyBox*)*iter; - if(matcher.matches(notification->getNotification())) + LLNotifyBox* notification = static_cast(*iter); + if (matcher.matches(notification->getNotification())) { removeChild(notification); } @@ -889,11 +806,6 @@ void LLNotifyBoxView::purgeMessagesMatching(const Matcher& matcher) bool LLNotifyBoxView::isGroupNotifyBox(const LLView* view) const { - if (view->getName() == "groupnotify") - { - return TRUE ; - } - - return FALSE ; + return view->getName() == "groupnotify"; } diff --git a/indra/newview/llnotify.h b/indra/newview/llnotify.h index c0b03b8f9..fa85eb17e 100644 --- a/indra/newview/llnotify.h +++ b/indra/newview/llnotify.h @@ -37,7 +37,6 @@ #include "llpanel.h" #include "lleventtimer.h" #include "llnotifications.h" -#include class LLButton; class LLNotifyBoxTemplate; @@ -51,16 +50,12 @@ class LLNotifyBox : public LLInstanceTracker { public: - typedef void (*notify_callback_t)(S32 option, void* data); - typedef std::vector option_list_t; - static void initClass(); - static void destroyClass(); - BOOL isTip() const { return mIsTip; } - BOOL isCaution() const { return mIsCaution; } + bool isTip() const { return mIsTip; } + bool isCaution() const { return mIsCaution; } /*virtual*/ void setVisible(BOOL visible); - void stopAnimation() { mAnimating = FALSE; } + void stopAnimation() { mAnimating = false; } void close(); @@ -69,11 +64,11 @@ public: static void format(std::string& msg, const LLStringUtil::format_map_t& args); protected: - LLNotifyBox(LLNotificationPtr notification, BOOL layout_script_dialog); + LLNotifyBox(LLNotificationPtr notification); /*virtual*/ ~LLNotifyBox(); - LLButton* addButton(std::string const &name, const std::string& label, BOOL is_option, BOOL is_default); + LLButton* addButton(const std::string& name, const std::string& label, bool is_option, bool is_default, bool layout_script_dialog); /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); @@ -86,30 +81,23 @@ protected: // Returns the rect, relative to gNotifyView, where this // notify box should be placed. - static LLRect getNotifyRect(S32 num_options, BOOL layout_script_dialog, BOOL is_caution); + static LLRect getNotifyRect(S32 num_options, bool layout_script_dialog, bool is_caution); static LLRect getNotifyTipRect(const std::string &message); // internal handler for button being clicked void onClickButton(const std::string name); - // for "next" button - void onClickNext(); - - //static LLNotifyBox* findExistingNotify(LLPointer notify_template, const LLString::format_map_t& args); - private: static bool onNotification(const LLSD& notify); void drawBackground() const; protected: - std::string mMessage; - LLTextEditor *mUserInputBox; LLNotificationPtr mNotification; - BOOL mIsTip; - BOOL mIsCaution; // is this a caution notification? - BOOL mAnimating; // Are we sliding onscreen? + bool mIsTip; + bool mIsCaution; // is this a caution notification? + bool mAnimating; // Are we sliding onscreen? // Time since this notification was displayed. // This is an LLTimer not a frame timer because I am concerned @@ -120,34 +108,19 @@ protected: S32 mNumOptions; S32 mNumButtons; - BOOL mAddedDefaultBtn; - - BOOL mLayoutScriptDialog; - - // Used for callbacks - struct InstanceAndS32 - { - LLNotifyBox* mSelf; - std::string mButtonName; - }; - static S32 sNotifyBoxCount; - static const LLFontGL* sFont; - static const LLFontGL* sFontSmall; - - typedef std::map unique_map_t; - static unique_map_t sOpenUniqueNotifyBoxes; + bool mAddedDefaultBtn; }; class LLNotifyBoxView : public LLUICtrl { public: LLNotifyBoxView(const std::string& name, const LLRect& rect, BOOL mouse_opaque, U32 follows=FOLLOWS_NONE); - void showOnly(LLView * ctrl); - LLNotifyBox * getFirstNontipBox() const; + void showOnly(LLView* ctrl); + LLNotifyBox* getFirstNontipBox() const; + /*virtual*/ void deleteAllChildren(); - class Matcher + struct Matcher { - public: Matcher(){} virtual ~Matcher() {} virtual bool matches(const LLNotificationPtr) const = 0; @@ -157,7 +130,7 @@ public: void purgeMessagesMatching(const Matcher& matcher); private: - bool isGroupNotifyBox(const LLView* view) const ; + bool isGroupNotifyBox(const LLView* view) const; }; // This view contains the stack of notification windows. diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index c8483f591..d8377ffb2 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -277,27 +277,6 @@ void LLPanelAvatarSecondLife::enableControls(BOOL self) childSetEnabled("?", self); } -void LLPanelAvatarFirstLife::onClickImage() -{ - const LLUUID& id(getChild("img")->getImageAssetID()); - llinfos << "LLPanelAvatarFirstLife::onClickImage" << llendl; - if (!LLPreview::show(id)) - { - // There isn't one, so make a new preview - S32 left, top; - gFloaterView->getNewFloaterPosition(&left, &top); - LLRect rect = gSavedSettings.getRect("PreviewTextureRect"); - rect.translate( left - rect.mLeft, rect.mTop - top ); // Changed to avoid textures being sunken below the window border. - LLPreviewTexture* preview = new LLPreviewTexture("preview task texture", - rect, - std::string("Profile First Life Picture"), - id); - preview->setFocus(TRUE); - //preview->mIsCopyable=FALSE; - //preview->canSaveAs - } -} - // virtual void LLPanelAvatarFirstLife::processProperties(void* data, EAvatarProcessorType type) { @@ -313,29 +292,6 @@ void LLPanelAvatarFirstLife::processProperties(void* data, EAvatarProcessorType } } -void LLPanelAvatarSecondLife::onClickImage() -{ - const LLUUID& id = getChild("img")->getImageAssetID(); - llinfos << "LLPanelAvatarSecondLife::onClickImage" << llendl; - if (!LLPreview::show(id)) - { - // There isn't one, so make a new preview - S32 left, top; - gFloaterView->getNewFloaterPosition(&left, &top); - LLRect rect = gSavedSettings.getRect("PreviewTextureRect"); - rect.translate(left - rect.mLeft, rect.mTop - top); // Changed to avoid textures being sunken below the window border. - LLPreviewTexture* preview = new LLPreviewTexture("preview task texture", - rect, - std::string("Profile Picture: ") + getChild("dnname")->getText(), - id); - preview->setFocus(TRUE); - //preview->mIsCopyable=FALSE; - /*open_texture(LLUUID::null,//id, - std::string("Profile Picture: ") + getChild("dnname")->getText() + "and image id is " + id.asString() - , FALSE, id, TRUE);*/ - } -} - void LLPanelAvatarSecondLife::onDoubleClickGroup() { if (LLScrollListItem* item = getChild("groups")->getFirstSelected()) @@ -370,6 +326,8 @@ void LLPanelAvatarFirstLife::enableControls(BOOL self) // postBuild //----------------------------------------------------------------------------- +void show_picture(const LLUUID& id, const std::string& name); +static std::string profile_picture_title(const std::string& str) { return "Profile Picture: " + str; } static void show_partner_help() { LLNotificationsUtil::add("ClickPartnerHelpAvatar", LLSD(), LLSD(), boost::bind(LLPanelAvatarSecondLife::onClickPartnerHelpLoadURL, _1, _2)); } BOOL LLPanelAvatarSecondLife::postBuild() { @@ -410,10 +368,11 @@ BOOL LLPanelAvatarSecondLife::postBuild() getChild("Offer Teleport...")->setCommitCallback(boost::bind(static_cast(LLAvatarActions::offerTeleport), boost::bind(&LLPanelAvatar::getAvatarID, pa))); getChild("groups")->setDoubleClickCallback(boost::bind(&LLPanelAvatarSecondLife::onDoubleClickGroup,this)); - - getChild("bigimg")->setCommitCallback(boost::bind(&LLPanelAvatarSecondLife::onClickImage, this)); - - getChild("img")->setFallbackImageName("default_profile_picture.j2c"); + + LLTextureCtrl* ctrl = getChild("img"); + ctrl->setFallbackImageName("default_profile_picture.j2c"); + + getChild("bigimg")->setCommitCallback(boost::bind(boost::bind(show_picture, boost::bind(&LLTextureCtrl::getImageAssetID, ctrl), boost::bind(profile_picture_title, boost::bind(&LLView::getValue, getChild("dnname")))))); return TRUE; } @@ -423,9 +382,10 @@ BOOL LLPanelAvatarFirstLife::postBuild() BOOL own_avatar = (getPanelAvatar()->getAvatarID() == gAgent.getID() ); enableControls(own_avatar); - getChild("img")->setFallbackImageName("default_profile_picture.j2c"); + LLTextureCtrl* ctrl = getChild("img"); + ctrl->setFallbackImageName("default_profile_picture.j2c"); - getChild("flbigimg")->setCommitCallback(boost::bind(&LLPanelAvatarFirstLife::onClickImage, this)); + getChild("flbigimg")->setCommitCallback(boost::bind(boost::bind(boost::bind(show_picture, boost::bind(&LLTextureCtrl::getImageAssetID, ctrl), "First Life Picture")))); return TRUE; } diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h index 89cf3b5dc..cc6e10b51 100644 --- a/indra/newview/llpanelavatar.h +++ b/indra/newview/llpanelavatar.h @@ -92,8 +92,6 @@ public: /*virtual*/ BOOL postBuild(); /*virtual*/ void processProperties(void* data, EAvatarProcessorType type); - void onClickImage(); - void enableControls(BOOL own_avatar); }; @@ -113,7 +111,6 @@ public: /*virtual*/ void onChange() {} /*virtual*/ void onChangeDetailed(const LLMute& mute); - void onClickImage(); void onClickFriends(); void onDoubleClickGroup(); static bool onClickPartnerHelpLoadURL(const LLSD& notification, const LLSD& response); diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index 48d74eacd..84c5997a1 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -128,6 +128,8 @@ BOOL LLPanelGroupGeneral::postBuild() { mInsignia->setCommitCallback(boost::bind(&LLPanelGroupGeneral::onCommitAny,this)); mDefaultIconID = mInsignia->getImageAssetID(); + void show_picture(const LLUUID& id, const std::string& name); + getChild("bigimg")->setCommitCallback(boost::bind(boost::bind(show_picture, boost::bind(&LLTextureCtrl::getImageAssetID, mInsignia), "Group Insignia"))); } mEditCharter = getChild("charter", recurse); diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 6ceb330c1..2575b53d2 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -3053,7 +3053,7 @@ void LLPanelGroupBanListSubTab::populateBanList() ban_entry.columns.add().column("name").font/*.name*/("SANSSERIF_SMALL").font_style("NORMAL"); // Singu Note: We have special date columns, so our code is unique here - ban_entry.columns.add().column("ban_date").value(bd.mBanDate).type("date").format("%Y/%m%d").font/*.name*/("SANSSERIF_SMALL").font_style("NORMAL"); + ban_entry.columns.add().column("ban_date").value(bd.mBanDate).type("date").format("%Y/%m/%d").font/*.name*/("SANSSERIF_SMALL").font_style("NORMAL"); mBanList->addNameItemRow(ban_entry); } diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index f9ad87f55..b7e82865d 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -202,14 +202,18 @@ void LLPanelPermissions::disableAll() getChildView("button set group")->setEnabled(FALSE); getChildView("button open group")->setEnabled(FALSE); - getChild("Object Name")->setValue(LLStringUtil::null); - getChildView("Object Name")->setEnabled(FALSE); + LLLineEditor* ed = getChild("Object Name"); + ed->setValue(LLStringUtil::null); + ed->setEnabled(FALSE); + ed->setLabel(LLStringUtil::null); getChildView("Name:")->setEnabled(FALSE); //getChild("Group Name")->setValue(LLStringUtil::null); //getChildView("Group Name")->setEnabled(FALSE); getChildView("Description:")->setEnabled(FALSE); - getChild("Object Description")->setValue(LLStringUtil::null); - getChildView("Object Description")->setEnabled(FALSE); + ed = getChild("Object Description"); + ed->setEnabled(FALSE); + ed->setValue(LLStringUtil::null); + ed->setLabel(LLStringUtil::null); getChildView("Permissions:")->setEnabled(FALSE); @@ -510,7 +514,7 @@ void LLPanelPermissions::refresh() { if(keyboard_focus_view != LineEditorObjectName) { - getChild("Object Name")->setValue(nodep->mName); + LineEditorObjectName->setValue(nodep->mName); } if(LineEditorObjectDesc) @@ -523,25 +527,26 @@ void LLPanelPermissions::refresh() } else { - getChild("Object Name")->setValue(LLStringUtil::null); + LineEditorObjectName->setText(LLStringUtil::null); LineEditorObjectDesc->setText(LLStringUtil::null); } // figure out the contents of the name, description, & category - BOOL edit_name_desc = FALSE; - if(is_one_object && objectp->permModify() && !objectp->isPermanentEnforced()) + // Singu Note: It was requested that the user be able to bulk change description { - edit_name_desc = TRUE; + const std::string& str(object_count > 1 ? getString("multiple_objects_selected") : LLStringUtil::null); + LineEditorObjectName->setLabel(str); + LineEditorObjectDesc->setLabel(str); } - if(edit_name_desc) + if (/*is_one_object &&*/ objectp->permModify() && !objectp->isPermanentEnforced()) { - getChildView("Object Name")->setEnabled(TRUE); - getChildView("Object Description")->setEnabled(TRUE); + LineEditorObjectName->setEnabled(TRUE); + LineEditorObjectDesc->setEnabled(TRUE); } else { - getChildView("Object Name")->setEnabled(FALSE); - getChildView("Object Description")->setEnabled(FALSE); + LineEditorObjectName->setEnabled(FALSE); + LineEditorObjectDesc->setEnabled(FALSE); } S32 total_sale_price = 0; diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp index c2e2a2cb1..f949d482d 100644 --- a/indra/newview/llpanelpick.cpp +++ b/indra/newview/llpanelpick.cpp @@ -63,8 +63,10 @@ void show_picture(const LLUUID& id, const std::string& name) // Try to show and focus existing preview if (LLPreview::show(id)) return; // If there isn't one, make a new preview - LLPreview* preview = new LLPreviewTexture("preview texture", gSavedSettings.getRect("PreviewTextureRect"), name, id); - preview->setFocus(true); + S32 left, top; + gFloaterView->getNewFloaterPosition(&left, &top); + LLRect rect = gSavedSettings.getRect("PreviewTextureRect"); + (new LLPreviewTexture("preview texture", rect.translate(left - rect.mLeft, rect.mTop - top), name, id))->setFocus(true); } //static diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index fa4ba2ff7..16471ba9f 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -4290,7 +4290,7 @@ void LLSelectMgr::selectionSetObjectName(const std::string& name) std::string name_copy(name); // we only work correctly if 1 object is selected. - if(mSelectedObjects->getRootObjectCount() == 1) + if(mSelectedObjects->getRootObjectCount() /*== 1*/) // Singu Note: It was requested that the user be able to bulk rename { sendListToRegions("ObjectName", packAgentAndSessionID, @@ -4298,7 +4298,7 @@ void LLSelectMgr::selectionSetObjectName(const std::string& name) (void*)(&name_copy), SEND_ONLY_ROOTS); } - else if(mSelectedObjects->getObjectCount() == 1) + else if(mSelectedObjects->getObjectCount() /*== 1*/) { sendListToRegions("ObjectName", packAgentAndSessionID, @@ -4313,7 +4313,7 @@ void LLSelectMgr::selectionSetObjectDescription(const std::string& desc) std::string desc_copy(desc); // we only work correctly if 1 object is selected. - if(mSelectedObjects->getRootObjectCount() == 1) + if (mSelectedObjects->getRootObjectCount() /*== 1*/) // Singu Note: It was requested that the user be able to bulk change description { sendListToRegions("ObjectDescription", packAgentAndSessionID, @@ -4321,7 +4321,7 @@ void LLSelectMgr::selectionSetObjectDescription(const std::string& desc) (void*)(&desc_copy), SEND_ONLY_ROOTS); } - else if(mSelectedObjects->getObjectCount() == 1) + else if (mSelectedObjects->getObjectCount() /*== 1*/) { sendListToRegions("ObjectDescription", packAgentAndSessionID, diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index fca81e83f..d0b2bfa13 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -1727,6 +1727,7 @@ BOOL LLTextureCtrl::doDrop(LLInventoryItem* item) // no callback installed, so just set the image ids and carry on. setImageAssetID( item->getAssetUUID() ); mImageItemID = item->getUUID(); + mDirty = true; return TRUE; } diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index a8e8c2379..021844f0e 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -625,6 +625,12 @@ static bool handleAllowLargeSounds(const LLSD& newvalue) return true; } +void handleHighResChanged(const LLSD& val) +{ + if (val) // High Res Snapshot active, must uncheck RenderUIInSnapshot + gSavedSettings.setBOOL("RenderUIInSnapshot", false); +} + //////////////////////////////////////////////////////////////////////////// void settings_setup_listeners() { @@ -819,6 +825,7 @@ void settings_setup_listeners() gSavedSettings.getControl("AllowLargeSounds")->getSignal()->connect(boost::bind(&handleAllowLargeSounds, _2)); gSavedSettings.getControl("LiruUseZQSDKeys")->getSignal()->connect(boost::bind(load_default_bindings, _2)); + gSavedSettings.getControl("HighResSnapshot")->getSignal()->connect(boost::bind(&handleHighResChanged, _2)); } void onCommitControlSetting_gSavedSettings(LLUICtrl* ctrl, void* name) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 5ad5d60c4..a072431fa 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -335,10 +335,6 @@ void set_current_pose(std::string anim) gAgent.sendAnimationRequest(current_pose, ANIM_REQUEST_START); gAgent.sendAgentSetAppearance(); } -void handle_pose_stand(void*) -{ - set_current_pose("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53"); -} void handle_pose_stand_stop(void*) { if (on_pose_stand) @@ -349,24 +345,14 @@ void handle_pose_stand_stop(void*) gAgent.sendAgentSetAppearance(); } } -void cleanup_pose_stand(void) +void cleanup_pose_stand() { handle_pose_stand_stop(NULL); } -void handle_toggle_pose(void* userdata) { - if(current_pose.isNull()) - handle_pose_stand(userdata); - else - handle_pose_stand_stop(userdata); -} - -BOOL handle_check_pose(void* userdata) { - return current_pose.notNull(); -} +BOOL handle_check_pose(void* userdata) { return current_pose.notNull(); } -void handle_close_all_notifications(void*); void handle_open_message_log(void*); // @@ -451,6 +437,7 @@ void handle_morph_load_obj(void*); void handle_debug_avatar_textures(void*); void handle_dump_region_object_cache(void*); +void menu_toggle_double_click_control(void*); BOOL menu_ui_enabled(void *user_data); BOOL menu_check_control( void* user_data); void menu_toggle_variable( void* user_data ); @@ -1159,11 +1146,11 @@ void init_debug_ui_menu(LLMenuGL* menu) menu->addChild(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT )); menu->addChild(new LLMenuItemCallGL( "Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL)); menu->addChild(new LLMenuItemCheckGL("Double-Click Auto-Pilot", - menu_toggle_control, NULL, menu_check_control, + menu_toggle_double_click_control, NULL, menu_check_control, (void*)"DoubleClickAutoPilot")); // add for double click teleport support menu->addChild(new LLMenuItemCheckGL("Double-Click Teleport", - menu_toggle_control, NULL, menu_check_control, + menu_toggle_double_click_control, NULL, menu_check_control, (void*)"DoubleClickTeleport")); menu->addSeparator(); // menu->addChild(new LLMenuItemCallGL( "Print Packets Lost", &print_packets_lost, NULL, NULL, 'L', MASK_SHIFT )); @@ -3690,17 +3677,6 @@ void handle_open_message_log(void*) LLFloaterMessageLog::show(); } -void handle_close_all_notifications(void*) -{ - LLView::child_list_t child_list(*(gNotifyBoxView->getChildList())); - for(LLView::child_list_iter_t iter = child_list.begin(); - iter != child_list.end(); - iter++) - { - gNotifyBoxView->removeChild(*iter); - } -} - void handle_fake_away_status(void*) { bool fake_away = gSavedSettings.getBOOL("FakeAway"); @@ -7319,26 +7295,27 @@ BOOL menu_ui_enabled(void *user_data) } // TomY TODO DEPRECATE & REMOVE -void menu_toggle_control( void* user_data ) +void menu_toggle_control(void* user_data) { std::string setting(static_cast(user_data)); - BOOL checked = gSavedSettings.getBOOL(setting); - if (setting == "HighResSnapshot" && !checked) - { - // High Res Snapshot active, must uncheck RenderUIInSnapshot - gSavedSettings.setBOOL( "RenderUIInSnapshot", FALSE ); - } - else if (setting == "DoubleClickAutoPilot" && !checked) - { - // Doubleclick actions - there can be only one - gSavedSettings.setBOOL( "DoubleClickTeleport", FALSE ); - } - else if (setting == "DoubleClickTeleport" && !checked) - { - // Doubleclick actions - there can be only one - gSavedSettings.setBOOL( "DoubleClickAutoPilot", FALSE ); - } - gSavedSettings.setBOOL(setting, !checked); + LLControlVariable* control(gSavedSettings.getControl(setting)); + control->set(!control->get()); +} + +void menu_toggle_double_click_control(void* user_data) +{ + std::string setting(static_cast(user_data)); + LLControlVariable* control(gSavedSettings.getControl(setting)); + bool checked = control->get(); + // Doubleclick actions - there can be only one + if (!checked) + { + if (setting == "DoubleClickAutoPilot") + gSavedSettings.setBOOL("DoubleClickTeleport", false); + else if (setting == "DoubleClickTeleport") + gSavedSettings.setBOOL("DoubleClickAutoPilot", false); + } + control->set(!checked); } @@ -7347,14 +7324,8 @@ class LLToggleControl : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - std::string control_name = userdata.asString(); - BOOL checked = gSavedSettings.getBOOL( control_name ); - if (control_name == "HighResSnapshot" && !checked) - { - // High Res Snapshot active, must uncheck RenderUIInSnapshot - gSavedSettings.setBOOL( "RenderUIInSnapshot", FALSE ); - } - gSavedSettings.setBOOL( control_name, !checked ); + LLControlVariable* control(gSavedSettings.getControl(userdata.asString())); + control->set(!control->get()); return true; } }; @@ -8796,27 +8767,7 @@ class SinguCloseAllDialogs : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - handle_close_all_notifications(NULL); - return true; - } -}; - -class SinguNimble : public view_listener_t -{ - bool handleEvent(LLPointer event, const LLSD& userdata) - { - gSavedSettings.setBOOL("Nimble", !gSavedSettings.getBOOL("Nimble")); - - return true; - } -}; - -class SinguCheckNimble : public view_listener_t -{ - bool handleEvent(LLPointer event, const LLSD& userdata) - { - gMenuHolder->findControl(userdata["control"].asString())->setValue(gSavedSettings.getBOOL("Nimble")); - + gNotifyBoxView->deleteAllChildren(); return true; } }; @@ -8833,8 +8784,10 @@ class SinguPoseStand : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - handle_toggle_pose(NULL); - + if (current_pose.isNull()) + set_current_pose("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53"); + else + handle_pose_stand_stop(NULL); return true; } }; @@ -9521,8 +9474,6 @@ void initialize_menus() // Singularity menu addMenu(new SinguCloseAllDialogs(), "CloseAllDialogs"); // ---- Fake away handled elsewhere - addMenu(new SinguNimble(), "Nimble"); - addMenu(new SinguCheckNimble(), "CheckNimble"); addMenu(new SinguEnableStreamingAudioDisplay(), "EnableStreamingAudioDisplay"); addMenu(new SinguPoseStand(), "PoseStand"); addMenu(new SinguCheckPoseStand(), "CheckPoseStand"); diff --git a/indra/newview/llxmlrpcresponder.cpp b/indra/newview/llxmlrpcresponder.cpp index 2dbfa9148..2dc56449a 100644 --- a/indra/newview/llxmlrpcresponder.cpp +++ b/indra/newview/llxmlrpcresponder.cpp @@ -45,7 +45,6 @@ #include "llappviewer.h" -#include "hippogridmanager.h" #include "aicurleasyrequeststatemachine.h" #ifdef CWDEBUG @@ -213,6 +212,7 @@ LLXMLRPCValue XMLRPCResponder::responseValue(void) const } #ifdef AI_UNUSED +#include "hippogridmanager.h" void LLXMLRPCTransaction::Impl::setStatus(Status status, const std::string& message, const std::string& uri) { diff --git a/indra/newview/skins/default/xui/en-us/floater_object_im_info.xml b/indra/newview/skins/default/xui/en-us/floater_object_im_info.xml index 318f614e4..7f2618230 100644 --- a/indra/newview/skins/default/xui/en-us/floater_object_im_info.xml +++ b/indra/newview/skins/default/xui/en-us/floater_object_im_info.xml @@ -26,7 +26,7 @@ border_thickness="0" bottom_delta="-10" enabled="true" follows="left|top" font="SansSerif" height="20" is_unicode="false" left="70" hover="true" max_length="254" mouse_opaque="true" name="Slurl" font-style="UNDERLINE" - width="200" hover_cursor="UI_CURSOR_HAND" text_color="TextLinkColor" hover_color="TextLinkHoverColor"/> + hover_cursor="UI_CURSOR_HAND" text_color="TextLinkColor" hover_color="TextLinkHoverColor"/> + diff --git a/indra/newview/skins/default/xui/en-us/floater_tools.xml b/indra/newview/skins/default/xui/en-us/floater_tools.xml index 4afe0d4a9..a4141e4c2 100644 --- a/indra/newview/skins/default/xui/en-us/floater_tools.xml +++ b/indra/newview/skins/default/xui/en-us/floater_tools.xml @@ -443,6 +443,7 @@ follows="left|top|right" font="SansSerifSmall" height="16" left="88" max_length="127" mouse_opaque="true" name="Object Description" select_all_on_focus_received="true" width="172" /> + - - + + diff --git a/indra/newview/skins/default/xui/en-us/panel_group_general.xml b/indra/newview/skins/default/xui/en-us/panel_group_general.xml index 9e51bb3fa..53f9a8cfd 100644 --- a/indra/newview/skins/default/xui/en-us/panel_group_general.xml +++ b/indra/newview/skins/default/xui/en-us/panel_group_general.xml @@ -53,8 +53,8 @@ Hover your mouse over the options for more help. mouse_opaque="true" name="insignia" tool_tip="Click to choose a picture" width="128" /> @@ -62,11 +62,12 @@ Hover your mouse over the options for more help.