diff --git a/autobuild.xml b/autobuild.xml index 78dd7f3fd1..2e4b049547 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -621,9 +621,9 @@ archive hash - 10f4a24948b129e342e908609e65dd66 + cba1feed7f6bb671d791a517fddf205a url - file:///opt/firestorm/fmodex-44456-darwin-201508061336-r22.tar.bz2 + file:///opt/firestorm/fmodex-44461-darwin-201601300040-r23.tar.bz2 name darwin @@ -633,9 +633,9 @@ archive hash - 2e1b76fa4f9b42679ca5e97c57d1006b + 9b090869508fabee82dc53cae977fb99 url - file:///opt/firestorm/fmodex-44456-linux-201508111340-r22.tar.bz2 + file:///opt/firestorm/fmodex-44461-linux-201601282301-r23.tar.bz2 name linux @@ -645,9 +645,9 @@ archive hash - 5108a6a9d2f77f6bc1a0a44e7288dc97 + 5b1b5ce866afd2a74e445af1fffe6a8b url - file:///c:/cygwin/opt/firestorm/fmodex-44456-windows-201508061143-r22.tar.bz2 + file:///c:/cygwin/opt/firestorm/fmodex-44461-windows-201601282252-r23.tar.bz2 name windows @@ -1685,11 +1685,11 @@ archive hash - 5b2385bd260946c58404ee21a750f504 + 1244ca9bb1b0d6cef93f8267d0265fbb hash_algorithm md5 url - http://downloads.phoenixviewer.com/llceflib-1.0-windows-201601241617-r43.tar.bz2 + http://downloads.phoenixviewer.com/llceflib-1.0-windows-201602032144-r49.tar.bz2 name windows @@ -3432,6 +3432,7 @@ --fmodex --kdu + --quicktime --version --platform win32 @@ -3468,6 +3469,7 @@ --fmodex --kdu + --quicktime --version --platform win32 diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 5796e46b4b..c49144e7af 100755 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -241,7 +241,6 @@ set(llcommon_HEADER_FILES SET( llcommon_ND_SOURCE_FILES nd/ndexceptions.cpp - nd/ndfile.cpp nd/ndintrin.cpp nd/ndlogthrottle.cpp nd/ndetw.cpp @@ -249,7 +248,6 @@ SET( llcommon_ND_SOURCE_FILES SET( llcommon_ND_HEADER_FILES nd/ndboolswitch.h nd/ndexceptions.h - nd/ndfile.h nd/ndintrin.h nd/ndlocks.h nd/ndlogthrottle.h diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp index 4b2d97d45b..0dcc8ed447 100755 --- a/indra/llcommon/llapr.cpp +++ b/indra/llcommon/llapr.cpp @@ -32,19 +32,12 @@ #include "llthreadlocalstorage.h" apr_pool_t *gAPRPoolp = NULL; // Global APR memory pool - -// moved LLAPRFile into a namespace, so we can toggle the implementation without much fuss -//LLVolatileAPRPool *LLAPRFile::sAPRFilePoolp = NULL ; //global volatile APR memory pool. -LLVolatileAPRPool *ll::apr::LLAPRFile::sAPRFilePoolp = NULL ; //global volatile APR memory pool. -// - +LLVolatileAPRPool *LLAPRFile::sAPRFilePoolp = NULL ; //global volatile APR memory pool. apr_thread_mutex_t *gLogMutexp = NULL; apr_thread_mutex_t *gCallStacksLogMutexp = NULL; const S32 FULL_VOLATILE_APR_POOL = 1024 ; //number of references to LLVolatileAPRPool -std::string ndConvertFilename( std::string const &aFilename ); // Porper UTF-8 filename handling under windows. - bool gAPRInitialized = false; void ll_init_apr() @@ -61,13 +54,9 @@ void ll_init_apr() apr_thread_mutex_create(&gCallStacksLogMutexp, APR_THREAD_MUTEX_UNNESTED, gAPRPoolp); } - // if(!LLAPRFile::sAPRFilePoolp) - // { - // LLAPRFile::sAPRFilePoolp = new LLVolatileAPRPool(FALSE) ; - // } - if(!ll::apr::LLAPRFile::sAPRFilePoolp) + if(!LLAPRFile::sAPRFilePoolp) { - ll::apr::LLAPRFile::sAPRFilePoolp = new LLVolatileAPRPool(FALSE) ; + LLAPRFile::sAPRFilePoolp = new LLVolatileAPRPool(FALSE) ; } LLThreadLocalPointerBase::initAllThreadLocalStorage(); @@ -110,15 +99,10 @@ void ll_cleanup_apr() apr_pool_destroy(gAPRPoolp); gAPRPoolp = NULL; } - // if (LLAPRFile::sAPRFilePoolp) - // { - // delete LLAPRFile::sAPRFilePoolp ; - // LLAPRFile::sAPRFilePoolp = NULL ; - // } - if (ll::apr::LLAPRFile::sAPRFilePoolp) + if (LLAPRFile::sAPRFilePoolp) { - delete ll::apr::LLAPRFile::sAPRFilePoolp ; - ll::apr::LLAPRFile::sAPRFilePoolp = NULL ; + delete LLAPRFile::sAPRFilePoolp ; + LLAPRFile::sAPRFilePoolp = NULL ; } apr_terminate(); } @@ -322,7 +306,7 @@ bool ll_apr_warn_status(apr_status_t status) if(APR_SUCCESS == status) return false; char buf[MAX_STRING]; /* Flawfinder: ignore */ apr_strerror(status, buf, sizeof(buf)); - LL_WARNS("APR") << "APR status " << status << ": " << buf << LL_ENDL; + LL_WARNS("APR") << "APR: " << buf << LL_ENDL; return true; } @@ -334,7 +318,7 @@ bool ll_apr_warn_status(apr_status_t status, apr_dso_handle_t *handle) // stores the output in a fixed 255-character internal buffer. (*sigh*) char buf[MAX_STRING]; /* Flawfinder: ignore */ apr_dso_error(handle, buf, sizeof(buf)); - LL_WARNS("APR") << "APR status " << status << ": " << buf << LL_ENDL; + LL_WARNS("APR") << "APR: " << buf << LL_ENDL; return result; } @@ -348,7 +332,6 @@ void ll_apr_assert_status(apr_status_t status, apr_dso_handle_t *handle) llassert(! ll_apr_warn_status(status, handle)); } -namespace ll { namespace apr { //--------------------------------------------------------------------- // // LLAPRFile functions @@ -398,13 +381,7 @@ apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, LLV llassert_always(!mCurrentFilePoolp) ; apr_pool_t* apr_pool = pool ? pool->getVolatileAPRPool() : NULL ; - - // Convert filenames with UTF-8 charaters into a shortfilename (8.3) if running under windows - - // s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, getAPRFilePool(apr_pool)); - s = apr_file_open(&mFile, ndConvertFilename(filename).c_str(), flags, APR_OS_DEFAULT, getAPRFilePool(apr_pool)); - - // + s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, getAPRFilePool(apr_pool)); if (s != APR_SUCCESS || !mFile) { @@ -452,7 +429,7 @@ apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, BOO llassert_always(!mCurrentFilePoolp) ; llassert_always(use_global_pool) ; //be aware of using gAPRPoolp. - s = apr_file_open(&mFile, ndConvertFilename(filename).c_str(), flags, APR_OS_DEFAULT, gAPRPoolp); + s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, gAPRPoolp); if (s != APR_SUCCESS || !mFile) { mFile = NULL ; @@ -555,7 +532,7 @@ apr_file_t* LLAPRFile::open(const std::string& filename, LLVolatileAPRPool* pool pool = pool ? pool : LLAPRFile::sAPRFilePoolp ; - s = apr_file_open(&file_handle, ndConvertFilename(filename).c_str(), flags, APR_OS_DEFAULT, pool->getVolatileAPRPool()); + s = apr_file_open(&file_handle, filename.c_str(), flags, APR_OS_DEFAULT, pool->getVolatileAPRPool()); if (s != APR_SUCCESS || !file_handle) { ll_apr_warn_status(s); @@ -705,13 +682,8 @@ bool LLAPRFile::remove(const std::string& filename, LLVolatileAPRPool* pool) if (s != APR_SUCCESS) { - if (!APR_STATUS_IS_ENOENT(s)) - { - // We only care about the error if it's not because - // the file doesn't exist. - ll_apr_warn_status(s); - LL_WARNS("APR") << " Attempting to remove filename: " << filename << LL_ENDL; - } + ll_apr_warn_status(s); + LL_WARNS("APR") << " Attempting to remove filename: " << filename << LL_ENDL; return false; } return true; @@ -742,7 +714,7 @@ bool LLAPRFile::isExist(const std::string& filename, LLVolatileAPRPool* pool, ap apr_status_t s; pool = pool ? pool : LLAPRFile::sAPRFilePoolp ; - s = apr_file_open(&apr_file, ndConvertFilename(filename).c_str(), flags, APR_OS_DEFAULT, pool->getVolatileAPRPool()); + s = apr_file_open(&apr_file, filename.c_str(), flags, APR_OS_DEFAULT, pool->getVolatileAPRPool()); if (s != APR_SUCCESS || !apr_file) { @@ -765,7 +737,7 @@ S32 LLAPRFile::size(const std::string& filename, LLVolatileAPRPool* pool) apr_status_t s; pool = pool ? pool : LLAPRFile::sAPRFilePoolp ; - s = apr_file_open(&apr_file, ndConvertFilename(filename).c_str(), APR_READ, APR_OS_DEFAULT, pool->getVolatileAPRPool()); + s = apr_file_open(&apr_file, filename.c_str(), APR_READ, APR_OS_DEFAULT, pool->getVolatileAPRPool()); if (s != APR_SUCCESS || !apr_file) { @@ -837,10 +809,9 @@ void LLAPRFile::flush() apr_file_flush( mFile ); } -// -} } -// Special case for UTF-8 filenames under windows. As we cannot pass UTF-16 filenames into apr use a shortfilename, those are always ASCII +// +namespace nd { namespace aprhelper { std::string ndConvertFilename( std::string const &aFilename ) { #ifdef LL_WINDOWS @@ -848,15 +819,15 @@ std::string ndConvertFilename( std::string const &aFilename ) std::string::const_iterator itr = std::find_if( aFilename.begin(), aFilename.end(), [&]( char const & aVal ){ return aVal < 0; } ); if( aFilename.end() == itr ) return aFilename; - + wchar_t aShort[ MAX_PATH ] = {0}; DWORD nRes = ::GetShortPathNameW( utf8str_to_utf16str( aFilename ).c_str(), aShort, _countof( aShort ) ); if( nRes == 0 || nRes >= _countof( aShort ) ) return aFilename; - + return utf16str_to_utf8str( aShort ); #else return aFilename; #endif } -// + }} diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h index c678e5e392..7c7bb19138 100755 --- a/indra/llcommon/llapr.h +++ b/indra/llcommon/llapr.h @@ -204,8 +204,6 @@ typedef LLAtomic32 LLAtomicS32; #define LL_APR_RPB (APR_READ|APR_WRITE|APR_BINARY) // "r+b" #define LL_APR_WPB (APR_CREATE|APR_TRUNCATE|APR_READ|APR_WRITE|APR_BINARY) // "w+b" -namespace ll { namespace apr { - // //apr_file manager //which: 1)only keeps one file open; @@ -218,6 +216,7 @@ namespace ll { namespace apr { // 1, a temporary pool passed to an APRFile function, which is used within this function and only once. // 2, a global pool. // + class LL_COMMON_API LLAPRFile : boost::noncopyable { // make this non copyable since a copy closes the file @@ -279,10 +278,11 @@ public: //******************************************************************************************************************************* }; -} } - -#include "nd/ndfile.h" -//typedef ll::apr::LLAPRFile LLAPRFile; -typedef nd::apr::ndFile LLAPRFile; - +namespace nd +{ + namespace aprhelper + { + std::string LL_COMMON_API ndConvertFilename( std::string const &aFilename ); + } +} #endif // LL_LLAPR_H diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index 96dd9a6a8d..c101062f37 100755 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -1349,7 +1349,18 @@ BOOL gunzip_file(const std::string& srcfile, const std::string& dstfile) LLFILE *dst = NULL; S32 bytes = 0; tmpfile = dstfile + ".t"; - src = gzopen(srcfile.c_str(), "rb"); + + // Proper UTF8->UTF16 handling for Windows + // src = gzopen(srcfile.c_str(), "rb"); +#if LL_WINDOWS + std::string utf8filename = srcfile; + llutf16string utf16filename = utf8str_to_utf16str(utf8filename); + src = gzopen_w(utf16filename.c_str(), "rb"); +#else + src = gzopen(srcfile.c_str(), "rb");/* Flawfinder: ignore */ +#endif + // + if (! src) goto err; dst = LLFile::fopen(tmpfile, "wb"); /* Flawfinder: ignore */ if (! dst) goto err; @@ -1383,7 +1394,18 @@ BOOL gzip_file(const std::string& srcfile, const std::string& dstfile) LLFILE *src = NULL; S32 bytes = 0; tmpfile = dstfile + ".t"; - dst = gzopen(tmpfile.c_str(), "wb"); /* Flawfinder: ignore */ + + // Proper UTF8->UTF16 handling for Windows + // dst = gzopen(tmpfile.c_str(), "wb"); /* Flawfinder: ignore */ +#if LL_WINDOWS + std::string utf8filename = tmpfile; + llutf16string utf16filename = utf8str_to_utf16str(utf8filename); + dst = gzopen_w(utf16filename.c_str(), "wb"); +#else + dst = gzopen(tmpfile.c_str(), "wb");/* Flawfinder: ignore */ +#endif + // + if (! dst) goto err; src = LLFile::fopen(srcfile, "rb"); /* Flawfinder: ignore */ if (! src) goto err; diff --git a/indra/llcommon/nd/ndfile.cpp b/indra/llcommon/nd/ndfile.cpp deleted file mode 100644 index 939df6552f..0000000000 --- a/indra/llcommon/nd/ndfile.cpp +++ /dev/null @@ -1,482 +0,0 @@ -/** - * $LicenseInfo:firstyear=2013&license=fsviewerlgpl$ - * Phoenix Firestorm Viewer Source Code - * Copyright (C) 2013, Nicky Dasmijn - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA - * http://www.firestormviewer.org - * $/LicenseInfo$ - */ - -#include "ndfile.h" -#include "llerror.h" -#include "llfile.h" - -#ifdef LL_WINDOWS -#include -#else -#include -#endif - -namespace nd -{ - namespace apr - { - ndFile::ndFile() - : mFile(NULL) - { - } - - ndFile::ndFile(const std::string& filename, apr_int32_t flags, ndVolatileAPRPool* pool) - : mFile(NULL) - { - open(filename, flags, pool); - } - - ndFile::~ndFile() - { - close() ; - } - - apr_status_t ndFile::close() - { - FILE *pFile(mFile); - mFile = 0; - return close( pFile, 0 ); - } - - apr_status_t ndFile::open(const std::string& filename, apr_int32_t flags, ndVolatileAPRPool* pool, S32* sizep) - { - return nd::aprhelper::ndOpenFile( filename, flags, mFile, sizep ); - } - - apr_status_t ndFile::open(const std::string& filename, apr_int32_t flags, BOOL use_global_pool) - { - return nd::aprhelper::ndOpenFile( filename, flags, mFile ); - } - - S32 ndFile::read(void *buf, S32 nbytes) - { - if( !mFile ) - { - LL_WARNS() << "File is not open, cannot read" << LL_ENDL; - return 0; - } - - S32 read = fread(buf, 1, nbytes, mFile ); - if( nbytes != read ) - { - LL_WARNS() << "Error when reading, wanted " << nbytes << " read " << read << LL_ENDL; - } - - return read; - } - - S32 ndFile::write(const void *buf, S32 nbytes) - { - if( !mFile ) - { - LL_WARNS() << "File is not open, cannot write" << LL_ENDL; - return 0; - } - - S32 written = fwrite( buf, 1, nbytes, mFile ); - if( nbytes != written ) - { - LL_WARNS() << "Error when writing, wanted " << nbytes << " wrote " << written << LL_ENDL; - } - return written; - } - - void ndFile::flush() - { - if( mFile ) - fflush( mFile ); - } - - S32 ndFile::seek(apr_seek_where_t where, S32 offset) - { - return ndFile::seek(mFile, where, offset) ; - } - - apr_status_t ndFile::close(FILE* file_handle, ndVolatileAPRPool* pool) - { - if( 0 == LLFile::close( file_handle ) ) - return APR_SUCCESS; - - return APR_OS_START_SYSERR + errno; - } - - FILE* ndFile::open(const std::string& filename, ndVolatileAPRPool* pool, apr_int32_t flags) - { - FILE *pFile(0); - if( APR_SUCCESS == nd::aprhelper::ndOpenFile( filename, flags, pFile ) && pFile ) - return pFile; - - return 0; - } - - S32 ndFile::seek(FILE* file_handle, apr_seek_where_t where, S32 offset) - { - if( !file_handle ) - return -1; - - int seekStatus(0); - if( offset >= 0 ) - seekStatus = fseek( file_handle, offset, nd::aprhelper::ndConvertSeekFlags( where ) ); - else - seekStatus = fseek( file_handle, 0, SEEK_END ); - - if( 0 != seekStatus ) - { - int err = errno; - LL_WARNS() << "Seek failed with errno " << err << LL_ENDL; - return -1; - } - - S32 offsetNew = ftell( file_handle ); - if( offset != 0 && SEEK_SET == nd::aprhelper::ndConvertSeekFlags( where ) && offset != offsetNew ) - { - LL_WARNS() << "Seek failed, wanted offset " << offset << " got " << offsetNew << LL_ENDL; - } - return offsetNew; - - } - - S32 ndFile::readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, ndVolatileAPRPool* pool) - { - FILE* file_handle = open(filename, pool, APR_READ|APR_BINARY); - if (!file_handle) - return 0; - - llassert(offset >= 0); - - if (offset > 0) - offset = ndFile::seek(file_handle, APR_SET, offset); - - apr_size_t bytes_read; - if (offset < 0) - bytes_read = 0; - else - bytes_read = fread(buf, 1, nbytes, file_handle ); - - close(file_handle, pool); - - if( nbytes != bytes_read ) - { - LL_WARNS() << "Error when reading, wanted " << nbytes << " read " << bytes_read << " offset " << offset << LL_ENDL; - } - return (S32)bytes_read; - } - - S32 ndFile::writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, ndVolatileAPRPool* pool) - { - apr_int32_t flags = APR_CREATE|APR_WRITE|APR_BINARY; - if (offset < 0) - { - flags |= APR_APPEND; - offset = 0; - } - - FILE* file_handle = open(filename, pool, flags); - - if (!file_handle) - return 0; - - if (offset > 0) - offset = ndFile::seek(file_handle, APR_SET, offset); - - apr_size_t bytes_written; - if (offset < 0) - bytes_written = 0; - else - bytes_written = fwrite(buf, 1, nbytes, file_handle ); - - ndFile::close(file_handle, pool); - - if( nbytes != bytes_written ) - LL_WARNS() << "Error when writing, wanted " << nbytes << " wrote " << bytes_written << " offset " << offset << LL_ENDL; - - return (S32)bytes_written; - } - - bool ndFile::remove(const std::string& filename, ndVolatileAPRPool* pool) - { - return 0 == LLFile::remove( filename ); - } - - bool ndFile::rename(const std::string& filename, const std::string& newname, ndVolatileAPRPool* pool) - { - return 0 == LLFile::rename( filename, newname ); - } - - bool ndFile::isExist(const std::string& filename, ndVolatileAPRPool* pool, apr_int32_t flags) - { - llstat oStat; - int nRes = LLFile::stat( filename, &oStat ); - if( 0 == nRes ) - return S_ISREG( oStat.st_mode ); - - return false; - } - - S32 ndFile::size(const std::string& aFilename, ndVolatileAPRPool* pool) - { - llstat oStat; - int nRes = LLFile::stat( aFilename, &oStat ); - if( 0 == nRes ) - return oStat.st_size; - - return 0; - } - - bool ndFile::makeDir(const std::string& dirname, ndVolatileAPRPool* pool) - { - return 0 != LLFile::mkdir( dirname ); - } - - bool ndFile::removeDir(const std::string& dirname, ndVolatileAPRPool* pool) - { - return 0 == LLFile::rmdir( dirname ); - } - } -} -namespace nd -{ - namespace aprhelper - { - std::string ndConvertFilename( std::string const &aFilename ) - { -#ifdef LL_WINDOWS - // For safety reason (don't change any behaviour) do nothing different if filename is already ASCII - std::string::const_iterator itr = std::find_if( aFilename.begin(), aFilename.end(), [&]( char const & aVal ){ return aVal < 0; } ); - if( aFilename.end() == itr ) - return aFilename; - - wchar_t aShort[ MAX_PATH ] = {0}; - DWORD nRes = ::GetShortPathNameW( utf8str_to_utf16str( aFilename ).c_str(), aShort, _countof( aShort ) ); - if( nRes == 0 || nRes >= _countof( aShort ) ) - return aFilename; - - return utf16str_to_utf8str( aShort ); -#else - return aFilename; -#endif - } - - char const *openR = "r"; - char const *openRB = "rb"; - char const *openRP = "r+"; - char const *openRBP = "rb+"; - char const *openW = "w"; - char const *openWB = "wb"; - char const *openWP = "w+"; - char const *openWBP = "wb+"; - char const *openA = "a"; - char const *openAB = "ab"; - - char const* ndConvertOpenFlags( apr_int32_t aFlags, std::string const &aFilename ) - { - bool isBinary = (aFlags & APR_BINARY); - bool doCreate = (aFlags & APR_CREATE); - bool doTruncate = (aFlags & APR_TRUNCATE); - - if( aFlags & APR_READ && aFlags & APR_WRITE ) - { - if( doTruncate || !LLFile::isfile( aFilename ) ) - { - if( isBinary ) - return openWBP; - else - return openWP; - } - else - { - if( isBinary ) - return openRBP; - else - return openRP; - } - } - - if( aFlags & APR_READ ) - { - if( isBinary ) - return openRB; - else - return openR; - } - - if( aFlags & APR_WRITE ) - { - if( ( !doTruncate && LLFile::isfile( aFilename ) ) || !doCreate ) - { - if( isBinary ) - return openRBP; - else - return openRP; - } - else - { - if( isBinary ) - return openWB; - else - return openW; - } - } - - if( aFlags & APR_APPEND ) - { - if( isBinary ) - return openAB; - else - return openA; - } - - return openR; - } - - apr_status_t ndOpenFile( const std::string& aFilename, apr_int32_t aOpenflags, FILE *&aFileout, S32* aSizeout) - { - aFileout = 0; - if( aSizeout ) - *aSizeout = 0; - - apr_status_t s = APR_SUCCESS; - FILE *pFile = LLFile::fopen( aFilename, ndConvertOpenFlags( aOpenflags, aFilename ) ); - - if ( !pFile ) - { - s = APR_OS_START_SYSERR + errno; - } - else if (aSizeout) - { - llstat oStat; - int nRes = LLFile::stat( aFilename, &oStat ); - if ( 0 == nRes ) - *aSizeout = oStat.st_size; - else - { - int err = errno; - LL_WARNS() << "stat for file " << aFilename << " failed with errno " << err << LL_ENDL; - } - } - - aFileout = pFile; - return s; - } - } -} - -int apr_file_close( FILE *aFile ) -{ - if( 0 == fclose( aFile ) ) - return APR_SUCCESS; - - return APR_OS_START_SYSERR+errno; -} - -int apr_file_printf( FILE *aFile, char const *aFmt, ... ) -{ - va_list vaLst; - va_start( vaLst, aFmt ); - int nPrinted = vfprintf( aFile, aFmt, vaLst ); - va_end( vaLst ); - - if( nPrinted >= 0 ) - return APR_SUCCESS; - - return APR_OS_START_SYSERR+errno; -} - -int apr_file_eof( FILE *aFile ) -{ - if( 0 == feof(aFile) ) - return APR_SUCCESS; - else - return APR_EOF; -} - -int apr_file_gets( char *aBuffer, U32 aMax, FILE *aFile ) -{ - if( fgets( aBuffer, aMax, aFile ) ) - return APR_SUCCESS; - - return APR_OS_START_SYSERR + ferror( aFile ); -} - -int apr_file_lock( FILE *aFile, int aLock ) -{ -#ifndef LL_WINDOWS - int fd = fileno( aFile ); - if( -1 == fd ) - return APR_OS_START_SYSERR + errno; - - int lockType = LOCK_SH; - if( aLock & APR_FLOCK_EXCLUSIVE ) - lockType = LOCK_EX; - if( aLock & APR_FLOCK_NONBLOCK ) - lockType |= LOCK_NB; - - int nRes; - do - { - nRes = flock( fd, lockType ); - } - while( nRes && errno == EINTR ); - - if( 0 == nRes ) - return APR_SUCCESS; - - return APR_OS_START_SYSERR + errno; -#else - int fd = _fileno( aFile ); - if( -1 == fd ) - return APR_OS_START_SYSERR + errno; - - HANDLE fHandle = reinterpret_cast( _get_osfhandle( fd ) ); - if( INVALID_HANDLE_VALUE == fHandle ) - return APR_OS_START_SYSERR + errno; - - DWORD lockType = 0; - - if( aLock & APR_FLOCK_NONBLOCK ) - lockType |= LOCKFILE_FAIL_IMMEDIATELY; - if( aLock & APR_FLOCK_EXCLUSIVE ) - lockType |= LOCKFILE_EXCLUSIVE_LOCK; - - OVERLAPPED oOverlapped; - memset( &oOverlapped, 0, sizeof( OVERLAPPED ) ); - if( ::LockFileEx( fHandle, lockType, 0, 0, UINT_MAX, &oOverlapped ) ) - return APR_SUCCESS; - - return APR_OS_START_SYSERR + ::GetLastError(); -#endif -} - -int apr_file_read( FILE *aFile, void *aBuffer, apr_size_t *aLen ) -{ - llassert_always( aLen ); - - U32 nRead = fread( aBuffer, 1, *aLen, aFile ); - if( 0 == nRead ) - return APR_OS_START_SYSERR + ferror( aFile ); - - if( aLen ) - *aLen = nRead; - return APR_SUCCESS; -} diff --git a/indra/llcommon/nd/ndfile.h b/indra/llcommon/nd/ndfile.h deleted file mode 100644 index 4b9b2a859a..0000000000 --- a/indra/llcommon/nd/ndfile.h +++ /dev/null @@ -1,123 +0,0 @@ -#ifndef NDAPRFILEREPLACEMENT_H -#define NDAPRFILEREPLACEMENT_H - -/** - * $LicenseInfo:firstyear=2013&license=fsviewerlgpl$ - * Phoenix Firestorm Viewer Source Code - * Copyright (C) 2013, Nicky Dasmijn - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA - * http://www.firestormviewer.org - * $/LicenseInfo$ - */ - -#include -#include - -#if LL_LINUX || LL_SOLARIS -#include // Need PATH_MAX in APR headers... -#endif - -#include - -#include "apr_thread_proc.h" -#include "apr_thread_mutex.h" -#include "apr_getopt.h" -#include "apr_signal.h" -#include "apr_atomic.h" - - -#include "llpreprocessor.h" -#include "llstring.h" - -namespace nd -{ - namespace apr - { - class LL_COMMON_API ndFile : boost::noncopyable - { - private: - FILE *mFile; - - public: - typedef FILE tFiletype; - typedef void ndVolatileAPRPool; - - ndFile() ; - ndFile(const std::string& filename, apr_int32_t flags, ndVolatileAPRPool* pool = NULL); - ~ndFile() ; - - apr_status_t open(const std::string& filename, apr_int32_t flags, ndVolatileAPRPool* pool = NULL, S32* sizep = NULL); - apr_status_t open(const std::string& filename, apr_int32_t flags, BOOL use_global_pool); //use gAPRPoolp. - apr_status_t close() ; - - // Returns actual offset, -1 if seek fails - S32 seek(apr_seek_where_t where, S32 offset); - - apr_status_t eof() { return feof(mFile)==0?APR_SUCCESS:APR_EOF;} - - // Returns bytes read/written, 0 if read/write fails: - S32 read(void* buf, S32 nbytes); - S32 write(const void* buf, S32 nbytes); - - void flush(); - - tFiletype* getFileHandle() {return mFile;} - - private: - static FILE* open(const std::string& filename, ndVolatileAPRPool* pool, apr_int32_t flags); - static apr_status_t close(FILE* file, ndVolatileAPRPool* pool) ; - static S32 seek(FILE* file, apr_seek_where_t where, S32 offset); - - public: - // returns false if failure: - static bool remove(const std::string& filename, ndVolatileAPRPool* pool = NULL); - static bool rename(const std::string& filename, const std::string& newname, ndVolatileAPRPool* pool = NULL); - static bool isExist(const std::string& filename, ndVolatileAPRPool* pool = NULL, apr_int32_t flags = APR_READ); - static S32 size(const std::string& filename, ndVolatileAPRPool* pool = NULL); - static bool makeDir(const std::string& dirname, ndVolatileAPRPool* pool = NULL); - static bool removeDir(const std::string& dirname, ndVolatileAPRPool* pool = NULL); - - // Returns bytes read/written, 0 if read/write fails: - static S32 readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, ndVolatileAPRPool* pool = NULL); - static S32 writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, ndVolatileAPRPool* pool = NULL); // offset<0 means append - //******************************************************************************************************************************* - }; - } -} - -int LL_COMMON_API apr_file_close( FILE* ); -int LL_COMMON_API apr_file_printf( FILE*, char const*, ... ); -int LL_COMMON_API apr_file_eof( FILE* ); -int LL_COMMON_API apr_file_gets( char*, U32, FILE* ); -int LL_COMMON_API apr_file_lock( FILE*, int ); -int LL_COMMON_API apr_file_read( FILE*, void*, apr_size_t* ); - -namespace nd -{ - namespace aprhelper - { - std::string LL_COMMON_API ndConvertFilename( std::string const &aFilename ); - char const* LL_COMMON_API ndConvertOpenFlags( apr_int32_t, std::string const& ); - - inline bool ndIsCreateFile( apr_int32_t aFlags) { return APR_CREATE == ( aFlags & (APR_CREATE|APR_TRUNCATE) ); } - inline S32 ndConvertSeekFlags( apr_seek_where_t aWhere ) { return aWhere; } - inline apr_status_t ndOpenFile( const std::string& aFilename, apr_int32_t aOpenflags, FILE *&aFileout, S32* aSizeout = 0); - } -} - -#endif diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp index 7641bd650f..f7cb87ffd2 100755 --- a/indra/llrender/llfontfreetype.cpp +++ b/indra/llrender/llfontfreetype.cpp @@ -673,7 +673,7 @@ U8 const* LLFontManager::loadFont( std::string const &aFilename, long &a_Size) a_Size = oStat.st_size; U8 *pBuffer = new U8[ a_Size ]; - if( a_Size != nd::apr::ndFile::readEx( aFilename, pBuffer, 0, a_Size ) ) + if( a_Size != LLAPRFile::readEx( aFilename, pBuffer, 0, a_Size ) ) { a_Size = 0; delete []pBuffer; diff --git a/indra/newview/NACLfloaterexploresounds.cpp b/indra/newview/NACLfloaterexploresounds.cpp index e225577e80..239ecb7967 100644 --- a/indra/newview/NACLfloaterexploresounds.cpp +++ b/indra/newview/NACLfloaterexploresounds.cpp @@ -415,8 +415,8 @@ void NACLFloaterExploreSounds::blacklistSound() } mBlacklistAvatarNameCacheConnections.erase(it); } - mBlacklistAvatarNameCacheConnections[item.mOwnerID] = - LLAvatarNameCache::get(item.mOwnerID, boost::bind(&NACLFloaterExploreSounds::onBlacklistAvatarNameCacheCallback, this, _1, _2, item.mAssetID, region_name)); + LLAvatarNameCache::callback_connection_t cb = LLAvatarNameCache::get(item.mOwnerID, boost::bind(&NACLFloaterExploreSounds::onBlacklistAvatarNameCacheCallback, this, _1, _2, item.mAssetID, region_name)); + mBlacklistAvatarNameCacheConnections.insert(std::make_pair(item.mOwnerID, cb)); } } diff --git a/indra/newview/fsareasearch.cpp b/indra/newview/fsareasearch.cpp index 6225616d73..4e0ea3c8c6 100644 --- a/indra/newview/fsareasearch.cpp +++ b/indra/newview/fsareasearch.cpp @@ -112,6 +112,10 @@ FSAreaSearch::FSAreaSearch(const LLSD& key) : mFilterDistance(false), mFilterDistanceMin(0), mFilterDistanceMax(999999), + mFilterPermCopy(false), + mFilterPermModify(false), + mFilterPermTransfer(false), + mFilterAgentParcelOnly(false), mBeaconColor(), mBeaconTextColor(), mBeacons(false), @@ -836,6 +840,26 @@ void FSAreaSearch::matchObject(FSObjectProperties& details, LLViewerObject* obje } } + if (mFilterAgentParcelOnly && !LLViewerParcelMgr::instance().inAgentParcel(objectp->getPositionGlobal())) + { + return; + } + + if (mFilterPermCopy && !(details.owner_mask & PERM_COPY)) + { + return; + } + + if (mFilterPermModify && !(details.owner_mask & PERM_MODIFY)) + { + return; + } + + if (mFilterPermTransfer && !(details.owner_mask & PERM_TRANSFER)) + { + return; + } + //----------------------------------------------------------------------- // Find text //----------------------------------------------------------------------- @@ -2064,6 +2088,18 @@ BOOL FSPanelAreaSearchFilter::postBuild() mCheckboxMoaP = getChild("filter_moap"); mCheckboxMoaP->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); + mCheckboxPermCopy = getChild("filter_perm_copy"); + mCheckboxPermCopy->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); + + mCheckboxPermModify = getChild("filter_perm_modify"); + mCheckboxPermModify->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); + + mCheckboxPermTransfer = getChild("filter_perm_transfer"); + mCheckboxPermTransfer->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); + + mCheckboxAgentParcelOnly = getChild("filter_agent_parcel_only"); + mCheckboxAgentParcelOnly->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); + return LLPanel::postBuild(); } @@ -2124,6 +2160,12 @@ void FSPanelAreaSearchFilter::onCommitCheckbox() mFSAreaSearch->setExcludeChildPrims(mCheckboxExcludeChildPrim->get()); mFSAreaSearch->setExcludeNeighborRegions(mCheckboxExcludeNeighborRegions->get()); + + mFSAreaSearch->setFilterPermCopy(mCheckboxPermCopy->get()); + mFSAreaSearch->setFilterPermModify(mCheckboxPermModify->get()); + mFSAreaSearch->setFilterPermTransfer(mCheckboxPermTransfer->get()); + + mFSAreaSearch->setFilterAgentParcelOnly(mCheckboxAgentParcelOnly->get()); } void FSPanelAreaSearchFilter::onCommitSpin() diff --git a/indra/newview/fsareasearch.h b/indra/newview/fsareasearch.h index 030683104a..86d181f4f8 100644 --- a/indra/newview/fsareasearch.h +++ b/indra/newview/fsareasearch.h @@ -158,6 +158,12 @@ public: void setFilterDistanceMin(S32 s) { mFilterDistanceMin = s; } void setFilterDistanceMax(S32 s) { mFilterDistanceMax = s; } + void setFilterPermCopy(bool b) { mFilterPermCopy = b; } + void setFilterPermModify(bool b) { mFilterPermModify = b; } + void setFilterPermTransfer(bool b) { mFilterPermTransfer = b; } + + void setFilterAgentParcelOnly(bool b) { mFilterAgentParcelOnly = b; } + bool isActive() { return mActive; } private: @@ -243,6 +249,12 @@ private: bool mFilterClickAction; U8 mFilterClickActionType; + bool mFilterPermCopy; + bool mFilterPermModify; + bool mFilterPermTransfer; + + bool mFilterAgentParcelOnly; + protected: static void* createPanelList(void* data); static void* createPanelFind(void* data); @@ -380,6 +392,10 @@ private: LLCheckBoxCtrl* mCheckboxExcludetemporary; LLCheckBoxCtrl* mCheckboxExcludeChildPrim; LLCheckBoxCtrl* mCheckboxExcludeNeighborRegions; + LLCheckBoxCtrl* mCheckboxPermCopy; + LLCheckBoxCtrl* mCheckboxPermModify; + LLCheckBoxCtrl* mCheckboxPermTransfer; + LLCheckBoxCtrl* mCheckboxAgentParcelOnly; }; diff --git a/indra/newview/fschathistory.cpp b/indra/newview/fschathistory.cpp index a20202e8cc..ea839e4c98 100644 --- a/indra/newview/fschathistory.cpp +++ b/indra/newview/fschathistory.cpp @@ -435,10 +435,18 @@ public: || (mSourceType == CHAT_SOURCE_SYSTEM && mType != CHAT_TYPE_RADAR) || mAvatarID.isNull()) { - mFrom = LLTrans::getString("CURRENT_GRID"); - if(!chat.mFromName.empty() && (mFrom != chat.mFromName)) + if (mSourceType == CHAT_SOURCE_UNKNOWN) { - mFrom += " (" + chat.mFromName + ")"; + // Avatar names may come up as CHAT_SOURCE_UNKNOWN - don't append the grid name in that case + mFrom = chat.mFromName; + } + else + { + mFrom = LLTrans::getString("SECOND_LIFE"); // Will automatically be substituted! + if (!chat.mFromName.empty() && (mFrom != chat.mFromName)) + { + mFrom += " (" + chat.mFromName + ")"; + } } mUserNameTextBox->setValue(mFrom); updateMinUserNameWidth(); @@ -492,7 +500,6 @@ public: mUserNameTextBox->setValue(mFrom); updateMinUserNameWidth(); } -// [/RLVa:KB] } else { @@ -714,7 +721,7 @@ protected: void showInfoCtrl() { - const bool isVisible = !mAvatarID.isNull() && !mFrom.empty() && CHAT_SOURCE_SYSTEM != mSourceType; + const bool isVisible = !mAvatarID.isNull() && !mFrom.empty() && (CHAT_SOURCE_SYSTEM != mSourceType || mType == CHAT_TYPE_RADAR); // [RLVa:KB] - Checked: 2010-04-22 (RLVa-1.2.2a) | Added: RLVa-1.2.0f if (isVisible && mShowInfoCtrl) // [/RLVa:KB] diff --git a/indra/newview/fsfloatercontacts.cpp b/indra/newview/fsfloatercontacts.cpp index 82fc5b8055..4ccb5f0e4f 100644 --- a/indra/newview/fsfloatercontacts.cpp +++ b/indra/newview/fsfloatercontacts.cpp @@ -660,12 +660,6 @@ void FSFloaterContacts::addFriend(const LLUUID& agent_id) edit_my_object_column["type"] = "checkbox"; edit_my_object_column["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS); - LLSD& online_their_column = element["columns"][LIST_ONLINE_THEIRS]; - online_their_column["column"] = "icon_visible_online_theirs"; - online_their_column["type"] = "checkbox"; - online_their_column["enabled"] = ""; - online_their_column["value"] = relationInfo->isRightGrantedFrom(LLRelationship::GRANT_ONLINE_STATUS); - LLSD& visible_their_map_column = element["columns"][LIST_VISIBLE_MAP_THEIRS]; visible_their_map_column["column"] = "icon_visible_map_theirs"; visible_their_map_column["type"] = "checkbox"; @@ -746,7 +740,6 @@ void FSFloaterContacts::updateFriendItem(const LLUUID& agent_id, const LLRelatio itemp->getColumn(LIST_VISIBLE_ONLINE)->setValue(info->isRightGrantedTo(LLRelationship::GRANT_ONLINE_STATUS)); itemp->getColumn(LIST_VISIBLE_MAP)->setValue(info->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION)); itemp->getColumn(LIST_EDIT_MINE)->setValue(info->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS)); - itemp->getColumn(LIST_ONLINE_THEIRS)->setValue(info->isRightGrantedFrom(LLRelationship::GRANT_ONLINE_STATUS)); itemp->getColumn(LIST_VISIBLE_MAP_THEIRS)->setValue(info->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION)); itemp->getColumn(LIST_EDIT_THEIRS)->setValue(info->isRightGrantedFrom(LLRelationship::GRANT_MODIFY_OBJECTS)); S32 change_generation = info->getChangeSerialNum(); @@ -1170,7 +1163,6 @@ void FSFloaterContacts::onColumnDisplayModeChanged(const std::string& settings_n else if (p.name.getValue() == "icon_visible_online" || p.name.getValue() == "icon_visible_map" || p.name.getValue() == "icon_edit_mine" || - p.name.getValue() == "icon_visible_online_theirs" || p.name.getValue() == "icon_visible_map_theirs" || p.name.getValue() == "icon_edit_theirs") { diff --git a/indra/newview/fsfloatercontacts.h b/indra/newview/fsfloatercontacts.h index ad801fb5a8..777e053fe5 100644 --- a/indra/newview/fsfloatercontacts.h +++ b/indra/newview/fsfloatercontacts.h @@ -83,7 +83,6 @@ private: LIST_VISIBLE_ONLINE, LIST_VISIBLE_MAP, LIST_EDIT_MINE, - LIST_ONLINE_THEIRS, LIST_VISIBLE_MAP_THEIRS, LIST_EDIT_THEIRS, LIST_FRIEND_UPDATE_GEN diff --git a/indra/newview/fsfloaterplacedetails.cpp b/indra/newview/fsfloaterplacedetails.cpp index df9671491c..315efbfc09 100644 --- a/indra/newview/fsfloaterplacedetails.cpp +++ b/indra/newview/fsfloaterplacedetails.cpp @@ -40,6 +40,7 @@ #include "llagent.h" #include "llagentpicksinfo.h" #include "llfloaterreg.h" +#include "llfloatersidepanelcontainer.h" #include "llfloaterworldmap.h" #include "llinventoryobserver.h" #include "lllandmarkactions.h" @@ -50,6 +51,7 @@ #include "llpanellandmarkinfo.h" #include "llparcel.h" #include "llteleporthistorystorage.h" +#include "llviewercontrol.h" #include "llviewermessage.h" #include "llviewermenu.h" #include "llviewerparcelmgr.h" @@ -560,6 +562,19 @@ void FSFloaterPlaceDetails::togglePickPanel(BOOL visible) } } +// static +void FSFloaterPlaceDetails::showPlaceDetails(const LLSD& key) +{ + if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) + { + LLFloaterReg::showInstance("fs_placedetails", key); + } + else + { + LLFloaterSidePanelContainer::showPanel("places", key); + } +} + ///////////////////////////////// // Button event handlers ///////////////////////////////// diff --git a/indra/newview/fsfloaterplacedetails.h b/indra/newview/fsfloaterplacedetails.h index cc9a8f32ed..3cb4c85594 100644 --- a/indra/newview/fsfloaterplacedetails.h +++ b/indra/newview/fsfloaterplacedetails.h @@ -63,6 +63,8 @@ public: void processParcelDetails(const LLParcelData& parcel_details); void togglePickPanel(BOOL visible); + static void showPlaceDetails(const LLSD& key); + private: enum ePlaceDisplayInfo { diff --git a/indra/newview/fslslpreproc.cpp b/indra/newview/fslslpreproc.cpp index ce14557d7f..f11a02e03e 100644 --- a/indra/newview/fslslpreproc.cpp +++ b/indra/newview/fslslpreproc.cpp @@ -144,6 +144,18 @@ std::string FSLSLPreprocessor::encode(const std::string& script) //otext += "\n//^ = determine what featureset is supported"; otext += llformat("\n//program_version %s", LLAppViewer::instance()->getWindowTitle().c_str()); + time_t utc_time = time_corrected(); + std::string timeStr ="["+LLTrans::getString ("TimeMonth")+"]/[" + +LLTrans::getString ("TimeDay")+"]/[" + +LLTrans::getString ("TimeYear")+"] [" + +LLTrans::getString ("TimeHour")+"]:[" + +LLTrans::getString ("TimeMin")+"]:[" + +LLTrans::getString("TimeSec")+"]"; + LLSD substitution; + substitution["datetime"] = (S32) utc_time; + LLStringUtil::format (timeStr, substitution); + otext += "\n//last_compiled " + timeStr; + otext += "\n"; if (mono) @@ -1379,7 +1391,19 @@ void FSLSLPreprocessor::start_process() errored = true; // some preprocessing error LLStringUtil::format_map_t args; - args["[NAME]"] = name; + args["[ERR_NAME]"] = e.file_name(); + args["[LINENUMBER]"] = llformat("%d",e.line_no()-1); + args["[ERR_DESC]"] = e.description(); + std::string err = LLTrans::getString("fs_preprocessor_wave_exception", args); + LL_WARNS("FSLSLPreprocessor") << err << LL_ENDL; + display_error(err); + } + catch(boost::wave::cpplexer::lexing_exception const& e) + { + errored = true; + // lexing preprocessing error + LLStringUtil::format_map_t args; + args["[ERR_NAME]"] = e.file_name(); args["[LINENUMBER]"] = llformat("%d",e.line_no()-1); args["[ERR_DESC]"] = e.description(); std::string err = LLTrans::getString("fs_preprocessor_wave_exception", args); @@ -1391,7 +1415,7 @@ void FSLSLPreprocessor::start_process() FAILDEBUG errored = true; LLStringUtil::format_map_t args; - args["[NAME]"] = std::string(current_position.get_file().c_str()); + args["[ERR_NAME]"] = std::string(current_position.get_file().c_str()); args["[LINENUMBER]"] = llformat("%d", current_position.get_line()); args["[ERR_DESC]"] = e.what(); display_error(LLTrans::getString("fs_preprocessor_exception", args)); @@ -1401,7 +1425,7 @@ void FSLSLPreprocessor::start_process() FAILDEBUG errored = true; LLStringUtil::format_map_t args; - args["[NAME]"] = std::string(current_position.get_file().c_str()); + args["[ERR_NAME]"] = std::string(current_position.get_file().c_str()); args["[LINENUMBER]"] = llformat("%d", current_position.get_line()); std::string err = LLTrans::getString("fs_preprocessor_error", args); LL_WARNS("FSLSLPreprocessor") << err << LL_ENDL; diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index b562cbbce8..09720e5599 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -2275,7 +2275,7 @@ void LLAppearanceMgr::updateCOF(LLInventoryModel::item_array_t& body_items_new, const LLUUID& base_id = (append) ? getBaseOutfitUUID() : idOutfit; LLViewerInventoryCategory* base_cat = (base_id.notNull()) ? gInventory.getCategory(base_id) : NULL; // [/RLVa:KB] - if (base_cat) + if (base_cat && (base_cat->getPreferredType() == LLFolderType::FT_OUTFIT)) { LLSD base_contents; base_contents["name"] = base_cat->getName(); diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index 8b2912aabd..5607e11369 100755 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -81,10 +81,6 @@ LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/) mBtnPermissionMap(NULL), mBtnPermissionEditMine(NULL), mIconPermissionEditTheirs(NULL), - // Extended Friend Permissions - mIconPermissionMapTheirs(NULL), - mIconPermissionOnlineTheirs(NULL), - // mSpeakingIndicator(NULL), mInfoBtn(NULL), mProfileBtn(NULL), @@ -146,10 +142,6 @@ BOOL LLAvatarListItem::postBuild() mBtnPermissionMap = getChild("permission_map_btn"); mBtnPermissionEditMine = getChild("permission_edit_mine_btn"); mIconPermissionEditTheirs = getChild("permission_edit_theirs_icon"); - // Extended Friend Permissions - mIconPermissionMapTheirs = getChild("permission_map_theirs_icon"); - mIconPermissionOnlineTheirs = getChild("permission_online_theirs_icon"); - // mBtnPermissionOnline->setClickedCallback(boost::bind(&LLAvatarListItem::onPermissionOnlineClick, this)); mBtnPermissionMap->setClickedCallback(boost::bind(&LLAvatarListItem::onPermissionMapClick, this)); @@ -162,10 +154,6 @@ BOOL LLAvatarListItem::postBuild() mBtnPermissionEditMine->setVisible(false); mBtnPermissionEditMine->setIsChrome(TRUE); mIconPermissionEditTheirs->setVisible(false); - // Extended Friend Permissions - mIconPermissionMapTheirs->setVisible(false); - mIconPermissionOnlineTheirs->setVisible(false); - // mSpeakingIndicator = getChild("speaking_indicator"); mInfoBtn = getChild("info_btn"); @@ -735,13 +723,8 @@ void LLAvatarListItem::initChildrenWidths(LLAvatarListItem* avatar_item) // edit their objects permission icon width + padding S32 permission_edit_theirs_width = avatar_item->mBtnPermissionEditMine->getRect().mLeft - avatar_item->mIconPermissionEditTheirs->getRect().mLeft; - // Extended Friend Permissions - S32 permission_map_theirs_width = avatar_item->mIconPermissionEditTheirs->getRect().mLeft - avatar_item->mIconPermissionMapTheirs->getRect().mLeft; - S32 permission_online_theirs_width = avatar_item->mIconPermissionMapTheirs->getRect().mLeft - avatar_item->mIconPermissionOnlineTheirs->getRect().mLeft; - // - // last interaction time textbox width + padding - S32 last_interaction_time_width = avatar_item->mIconPermissionOnlineTheirs->getRect().mLeft - avatar_item->mLastInteractionTime->getRect().mLeft; + S32 last_interaction_time_width = avatar_item->mIconPermissionEditTheirs->getRect().mLeft - avatar_item->mLastInteractionTime->getRect().mLeft; // avatar icon width + padding S32 icon_width = avatar_item->mAvatarName->getRect().mLeft - avatar_item->mAvatarIcon->getRect().mLeft; @@ -752,10 +735,6 @@ void LLAvatarListItem::initChildrenWidths(LLAvatarListItem* avatar_item) sChildrenWidths[--index] = icon_width; sChildrenWidths[--index] = 0; // for avatar name we don't need its width, it will be calculated as "left available space" sChildrenWidths[--index] = last_interaction_time_width; - // Extended Friend Permissions - sChildrenWidths[--index] = permission_online_theirs_width; - sChildrenWidths[--index] = permission_map_theirs_width; - // sChildrenWidths[--index] = permission_edit_theirs_width; sChildrenWidths[--index] = permission_edit_mine_width; sChildrenWidths[--index] = permission_map_width; @@ -886,25 +865,11 @@ bool LLAvatarListItem::showPermissions(bool visible) mIconPermissionEditTheirs->setColor(LLUIColorTable::instance().getColor("White_10")); else mIconPermissionEditTheirs->setColor(LLUIColorTable::instance().getColor("White")); - // Extended Friend Permissions - if (!relation->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION)) - mIconPermissionMapTheirs->setColor(LLUIColorTable::instance().getColor("White_10")); - else - mIconPermissionMapTheirs->setColor(LLUIColorTable::instance().getColor("White")); - if (!relation->isRightGrantedFrom(LLRelationship::GRANT_ONLINE_STATUS)) - mIconPermissionOnlineTheirs->setColor(LLUIColorTable::instance().getColor("White_10")); - else - mIconPermissionOnlineTheirs->setColor(LLUIColorTable::instance().getColor("White")); - // mBtnPermissionOnline->setVisible(true); mBtnPermissionMap->setVisible(true); mBtnPermissionEditMine->setVisible(true); mIconPermissionEditTheirs->setVisible(true); - // Extended Friend Permissions - mIconPermissionMapTheirs->setVisible(true); - mIconPermissionOnlineTheirs->setVisible(true); - // } else @@ -913,10 +878,6 @@ bool LLAvatarListItem::showPermissions(bool visible) mBtnPermissionMap->setVisible(false); mBtnPermissionEditMine->setVisible(false); mIconPermissionEditTheirs->setVisible(false); - // Extended Friend Permissions - mIconPermissionMapTheirs->setVisible(false); - mIconPermissionOnlineTheirs->setVisible(false); - // } updateChildren(); @@ -1053,14 +1014,6 @@ LLView* LLAvatarListItem::getItemChildView(EAvatarListItemChildIndex child_view_ case ALIC_PERMISSION_EDIT_THEIRS: child_view = mIconPermissionEditTheirs; break; - // Extended Friend Permissions - case ALIC_PERMISSION_MAP_THEIRS: - child_view = mIconPermissionMapTheirs; - break; - case ALIC_PERMISSION_ONLINE_THEIRS: - child_view = mIconPermissionOnlineTheirs; - break; - // case ALIC_INFO_BUTTON: child_view = mInfoBtn; break; diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index e176b0863b..154c3852db 100755 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -156,12 +156,6 @@ protected: LLButton* mBtnPermissionEditMine; /// Indicator for permission to edit their objects. LLIconCtrl* mIconPermissionEditTheirs; - // Extended Friend Permissions - /// Indicator for permission to show their position on the map. - LLIconCtrl* mIconPermissionMapTheirs; - /// Indicator for permission to see their online status. - LLIconCtrl* mIconPermissionOnlineTheirs; - // void confirmModifyRights(bool grant, S32 rights); void rightsConfirmationCallback(const LLSD& notification, const LLSD& response, S32 rights); @@ -200,10 +194,6 @@ private: ALIC_PERMISSION_MAP, ALIC_PERMISSION_EDIT_MINE, ALIC_PERMISSION_EDIT_THEIRS, - // Extended Friend Permissions - ALIC_PERMISSION_MAP_THEIRS, - ALIC_PERMISSION_ONLINE_THEIRS, - // ALIC_INTERACTION_TIME, ALIC_NAME, ALIC_ICON, diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index 5fe055ca7a..9ab8685012 100755 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -55,6 +55,7 @@ #include "llsdserialize.h" #include "llviewernetwork.h" // FIRE-10122 - User@grid stored_favorites.xml - getGrid() +#include "fsfloaterplacedetails.h" static LLDefaultChildRegistry::Register r("favorites_bar"); @@ -1263,14 +1264,7 @@ void LLFavoritesBarCtrl::doToSelected(const LLSD& userdata) // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", key); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", key); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", key); - } + FSFloaterPlaceDetails::showPlaceDetails(key); // } else if (action == "copy_slurl") diff --git a/indra/newview/llfloaternotificationstabbed.cpp b/indra/newview/llfloaternotificationstabbed.cpp index 4c2629334e..cc94ef71d9 100644 --- a/indra/newview/llfloaternotificationstabbed.cpp +++ b/indra/newview/llfloaternotificationstabbed.cpp @@ -126,6 +126,13 @@ LLFloaterNotificationsTabbed::~LLFloaterNotificationsTabbed() //--------------------------------------------------------------------------------- void LLFloaterNotificationsTabbed::removeItemByID(const LLUUID& id, std::string type) { + // Ignore for script dialogs that are not listed in the notifications list + if (type == "ScriptDialog" || type == "ScriptDialogGroup") + { + return; + } + // + if(mNotificationsSeparator->removeItemByID(type, id)) { if (NULL != mSysWellChiclet) diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 2e1675c413..2572a78435 100755 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -4002,7 +4002,7 @@ void LLIMMgr::processIMTypingCore(const LLIMInfo* im_info, BOOL typing) LLAgentUI::buildFullname(my_name); if (is_busy) { - response = gSavedPerAccountSettings.getString("BusyModeResponse"); + response = gSavedPerAccountSettings.getString("DoNotDisturbModeResponse"); } else if (is_autorespond_nonfriends && !is_friend) { @@ -4016,6 +4016,10 @@ void LLIMMgr::processIMTypingCore(const LLIMInfo* im_info, BOOL typing) { response = gSavedPerAccountSettings.getString("FSAwayAvatarResponse"); } + else + { + LL_WARNS() << "Unknown auto-response mode" << LL_ENDL; + } pack_instant_message( gMessageSystem, gAgent.getID(), @@ -4029,11 +4033,14 @@ void LLIMMgr::processIMTypingCore(const LLIMInfo* im_info, BOOL typing) session_id); gAgent.sendReliableMessage(); + LLStringUtil::format_map_t args; + args["MESSAGE"] = response; + gIMMgr->addMessage( session_id, gAgentID, LLStringUtil::null, // Pass null value so no name gets prepended - LLTrans::getString("IM_autoresponse_sent"), + LLTrans::getString("IM_autoresponse_sent", args), false, im_info->mName, IM_NOTHING_SPECIAL, diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 763939f3de..e861407936 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -97,6 +97,7 @@ #include "fsgridhandler.h" #endif // +#include "fsfloaterplacedetails.h" #include @@ -5671,14 +5672,7 @@ void LLLandmarkBridge::performAction(LLInventoryModel* model, std::string action // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", key); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", key); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", key); - } + FSFloaterPlaceDetails::showPlaceDetails(key); // } } diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp index 9c00243f44..524b2274e1 100755 --- a/indra/newview/lllandmarkactions.cpp +++ b/indra/newview/lllandmarkactions.cpp @@ -345,6 +345,12 @@ void LLLandmarkActions::onRegionResponseSLURL(slurl_callback_t cb, bool gotSimName = LLWorldMap::getInstance()->simNameFromPosGlobal(global_pos, sim_name); if (gotSimName) { + // Debug... + if (sim_name.empty()) + { + LL_WARNS() << "Requested sim name is empty!" << LL_ENDL; + } + // slurl = LLSLURL(sim_name, global_pos).getSLURLString(); } else diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index ab63caea8c..b0c104a2e3 100755 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -74,6 +74,7 @@ #include "llviewernetwork.h" #endif // OPENSIM // +#include "fsfloaterplacedetails.h" //============================================================================ /* @@ -654,14 +655,7 @@ void LLLocationInputCtrl::onInfoButtonClicked() // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "agent")); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", LLSD().with("type", "agent")); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "agent")); - } + FSFloaterPlaceDetails::showPlaceDetails(LLSD().with("type", "agent")); // } @@ -692,28 +686,14 @@ void LLLocationInputCtrl::onAddLandmarkButtonClicked() // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", key); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", key); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", key); - } + FSFloaterPlaceDetails::showPlaceDetails(key); // } else { // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "create_landmark")); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", LLSD().with("type", "create_landmark")); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "create_landmark")); - } + FSFloaterPlaceDetails::showPlaceDetails(LLSD().with("type", "create_landmark")); // } } @@ -1232,28 +1212,14 @@ void LLLocationInputCtrl::onLocationContextMenuItemClicked(const LLSD& userdata) { // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "create_landmark")); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", LLSD().with("type", "create_landmark")); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "create_landmark")); - } + FSFloaterPlaceDetails::showPlaceDetails(LLSD().with("type", "create_landmark")); // } else { // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "landmark").with("id",landmark->getUUID())); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", LLSD().with("type", "landmark").with("id",landmark->getUUID())); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "landmark").with("id",landmark->getUUID())); - } + FSFloaterPlaceDetails::showPlaceDetails(LLSD().with("type", "landmark").with("id",landmark->getUUID())); // } // [RLVa:KB] - Checked: 2010-04-05 (RLVa-1.2.0d) | Added: RLVa-1.2.0d diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index ccd7a61b3a..82dfef8a2c 100755 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -93,7 +93,12 @@ const static std::string MULTI_LINE_PREFIX(" "); */ const static boost::regex TIMESTAMP_AND_STUFF("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{2}\\]\\s+|\\[\\d{1,2}:\\d{2}\\]\\s+)?(.*)$"); const static boost::regex TIMESTAMP("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{2}\\]|\\[\\d{1,2}:\\d{2}\\]).*"); -const static boost::regex TIMESTAMP_AND_STUFF_SEC("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{2}:\\d{2}\\]\\s+|\\[\\d{1,2}:\\d{2}:\\d{2}\\]\\s+)?(.*)$"); +// Timestamps in chat +// Note: In contrast to the TIMESTAMP_AND_STUFF regex, for the TIMESTAMP_AND_STUFF_SEC regex the match +// on the timestamp is NOT optional. We need this to decide during parsing if we have timestamps or not. +const static boost::regex TIMESTAMP_AND_STUFF_SEC("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{2}:\\d{2}\\]\\s+|\\[\\d{1,2}:\\d{2}:\\d{2}\\]\\s+)(.*)$"); +const static boost::regex TIMESTAMP_AND_SEC("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{2}:\\d{2}\\]|\\[\\d{1,2}:\\d{2}:\\d{2}\\]).*"); +// /** * Regular expression suitable to match names like @@ -117,8 +122,10 @@ const static std::string NAME_TEXT_DIVIDER(": "); // is used for timestamps adjusting const static char* DATE_FORMAT("%Y/%m/%d %H:%M"); const static char* TIME_FORMAT("%H:%M"); +// Seconds in timestamps const static char* DATE_FORMAT_SEC("%Y/%m/%d %H:%M:%S"); const static char* TIME_FORMAT_SEC("%H:%M:%S"); +// const static int IDX_TIMESTAMP = 1; const static int IDX_STUFF = 2; @@ -143,18 +150,15 @@ public: LLLogChatTimeScanner() { // Note, date/time facets will be destroyed by string streams - if (gSavedSettings.getBOOL("FSSecondsinChatTimestamps")) - { - mDateStream.imbue(std::locale(mDateStream.getloc(), new date_input_facet(DATE_FORMAT_SEC))); - mTimeStream.imbue(std::locale(mTimeStream.getloc(), new time_facet(TIME_FORMAT_SEC))); - mTimeStream.imbue(std::locale(mTimeStream.getloc(), new time_input_facet(DATE_FORMAT_SEC))); - } - else - { - mDateStream.imbue(std::locale(mDateStream.getloc(), new date_input_facet(DATE_FORMAT))); - mTimeStream.imbue(std::locale(mTimeStream.getloc(), new time_facet(TIME_FORMAT))); - mTimeStream.imbue(std::locale(mTimeStream.getloc(), new time_input_facet(DATE_FORMAT))); - } + mDateStream.imbue(std::locale(mDateStream.getloc(), new date_input_facet(DATE_FORMAT))); + mTimeStream.imbue(std::locale(mTimeStream.getloc(), new time_facet(TIME_FORMAT))); + mTimeStream.imbue(std::locale(mTimeStream.getloc(), new time_input_facet(DATE_FORMAT))); + + // Seconds in timestamps + mDateSecStream.imbue(std::locale(mDateSecStream.getloc(), new date_input_facet(DATE_FORMAT_SEC))); + mTimeSecStream.imbue(std::locale(mTimeSecStream.getloc(), new time_facet(TIME_FORMAT_SEC))); + mTimeSecStream.imbue(std::locale(mTimeSecStream.getloc(), new time_input_facet(DATE_FORMAT_SEC))); + // } date getTodayPacificDate() @@ -215,10 +219,61 @@ public: << LL_ENDL; } + // Seconds in timestamps + void checkAndCutOffDateWithSec(std::string& time_str) + { + // Cuts off the "%Y/%m/%d" from string for todays timestamps. + // Assume that passed string has at least "%H:%M:%S" time format. + date log_date(not_a_date_time); + date today(getTodayPacificDate()); + + // Parse the passed date + mDateSecStream.str(LLStringUtil::null); + mDateSecStream << time_str; + mDateSecStream >> log_date; + mDateSecStream.clear(); + + days zero_days(0); + days days_alive = today - log_date; + + if ( days_alive == zero_days ) + { + // Yep, today's so strip "%Y/%m/%d" info + ptime stripped_time(not_a_date_time); + + mTimeSecStream.str(LLStringUtil::null); + mTimeSecStream << time_str; + mTimeSecStream >> stripped_time; + mTimeSecStream.clear(); + + time_str.clear(); + + mTimeSecStream.str(LLStringUtil::null); + mTimeSecStream << stripped_time; + mTimeSecStream >> time_str; + mTimeSecStream.clear(); + } + + LL_DEBUGS("LLChatLogParser") + << " log_date: " + << log_date + << " today: " + << today + << " days alive: " + << days_alive + << " new time: " + << time_str + << LL_ENDL; + } + // private: std::stringstream mDateStream; std::stringstream mTimeStream; + // Seconds in timestamps + std::stringstream mDateSecStream; + std::stringstream mTimeSecStream; + // }; LLLogChat::save_history_signal_t * LLLogChat::sSaveHistorySignal = NULL; @@ -287,21 +342,23 @@ std::string LLLogChat::timestamp(bool withdate) + LLTrans::getString ("TimeDay") + "] [" + LLTrans::getString ("TimeHour") + "]:[" + LLTrans::getString ("TimeMin") + "]"; + // Seconds in timestamps if (gSavedSettings.getBOOL("FSSecondsinChatTimestamps")) { - timeStr += ":[" - +LLTrans::getString ("TimeSec")+"]"; + timeStr += ":[" + LLTrans::getString ("TimeSec") + "]"; } + // } else { timeStr = "[" + LLTrans::getString("TimeHour") + "]:[" + LLTrans::getString ("TimeMin")+"]"; + // Seconds in timestamps if (gSavedSettings.getBOOL("FSSecondsinChatTimestamps")) { - timeStr += ":[" - +LLTrans::getString ("TimeSec")+"]"; + timeStr += ":[" + LLTrans::getString ("TimeSec") + "]"; } + // } LLSD substitution; @@ -623,7 +680,10 @@ void LLLogChat::findTranscriptFiles(std::string pattern, std::vector matches; - if (boost::regex_match(std::string(buffer), matches, TIMESTAMP)) + // Seconds in timestamp + //if (boost::regex_match(std::string(buffer), matches, TIMESTAMP)) + if (boost::regex_match(std::string(buffer), matches, TIMESTAMP) || boost::regex_match(std::string(buffer), matches, TIMESTAMP_AND_SEC)) + // { list_of_transcriptions.push_back(gDirUtilp->add(dirname, filename)); } @@ -952,14 +1012,26 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params //matching a timestamp boost::match_results matches; - if (gSavedSettings.getBOOL("FSSecondsinChatTimestamps")) + // Seconds in timestamps + // Logic here: First try to get a full match for timestamps with seconds. If we fail, + // this means we either have a timestamp without seconds or no timestamp at all. + // So we use the original regex for timestamps without seconds to find out what + // case it is. For this to work, the timestamp part in the TIMESTAMP_AND_STUFF_SEC + // regex is NOT optional! + //if (!boost::regex_match(raw, matches, TIMESTAMP_AND_STUFF)) return false; + bool has_sec = false; + if (boost::regex_match(raw, matches, TIMESTAMP_AND_STUFF_SEC)) { - if (!boost::regex_match(raw, matches, TIMESTAMP_AND_STUFF_SEC)) return false; + has_sec = true; } else { - if (!boost::regex_match(raw, matches, TIMESTAMP_AND_STUFF)) return false; + if (!boost::regex_match(raw, matches, TIMESTAMP_AND_STUFF)) + { + return false; + } } + // bool has_timestamp = matches[IDX_TIMESTAMP].matched; if (has_timestamp) @@ -972,7 +1044,17 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params if (cut_off_todays_date) { - LLLogChatTimeScanner::instance().checkAndCutOffDate(timestamp); + // Seconds in timestamps + //LLLogChatTimeScanner::instance().checkAndCutOffDate(timestamp); + if (has_sec) + { + LLLogChatTimeScanner::instance().checkAndCutOffDateWithSec(timestamp); + } + else + { + LLLogChatTimeScanner::instance().checkAndCutOffDate(timestamp); + } + // } im[LL_IM_TIME] = timestamp; @@ -997,7 +1079,7 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params bool has_name = name_and_text[IDX_NAME].matched; std::string name = name_and_text[IDX_NAME]; - // Ansariel: Handle the case an IM was stored in nearby chat history + // Handle the case an IM was stored in nearby chat history if (name == "IM:") { size_t divider_pos = stuff.find(NAME_TEXT_DIVIDER, 3); @@ -1008,6 +1090,7 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params return true; } } + // //we don't need a name/text separator if (has_name && name.length() && name[name.length()-1] == ':') diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index ac0905849d..2a6e978712 100755 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -40,6 +40,8 @@ #include "llsdparam.h" #include "lltooltip.h" #include "lltrans.h" +#include "llslurl.h" +#include "llurlaction.h" static LLDefaultChildRegistry::Register r("name_list"); @@ -145,7 +147,10 @@ void LLNameListCtrl::showInspector(const LLUUID& avatar_id, bool is_group, bool if (is_group) LLFloaterReg::showInstance("inspect_group", LLSD().with("group_id", avatar_id)); else - LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", avatar_id)); + // FIRE-9045: Remove avatar inspector + //LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", avatar_id)); + LLUrlAction::executeSLURL(LLSLURL("agent", avatar_id, "inspect").getSLURLString()); + // } void LLNameListCtrl::mouseOverHighlightNthItem( S32 target_index ) diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 1086962dce..1784577c8c 100755 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -79,6 +79,7 @@ // [/RLVa:KB] #include "llmutelist.h" #include "lfsimfeaturehandler.h" +#include "fsfloaterplacedetails.h" // Ansariel: For accessing the radar data #include "fsradar.h" @@ -1530,14 +1531,7 @@ void LLNetMap::handleShowProfile(const LLSD& sdParam) const sdParams["y"] = mPosGlobalRightClick.mdV[VY]; sdParams["z"] = mPosGlobalRightClick.mdV[VZ]; - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", sdParams); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", sdParams); - } + FSFloaterPlaceDetails::showPlaceDetails(sdParams); } } diff --git a/indra/newview/llnotificationlistitem.cpp b/indra/newview/llnotificationlistitem.cpp index 8709d2e500..73c8827b4d 100644 --- a/indra/newview/llnotificationlistitem.cpp +++ b/indra/newview/llnotificationlistitem.cpp @@ -114,29 +114,41 @@ std::string LLNotificationListItem::buildNotificationDate(const LLDate& time_sta std::string timeStr; switch(time_type) { + // FIRE-17649: Localizable date formats for group notices + //case Local: + // timeStr = "[" + LLTrans::getString("LTimeMthNum") + "]/[" + // +LLTrans::getString("LTimeDay")+"]/[" + // +LLTrans::getString("LTimeYear")+"] [" + // +LLTrans::getString("LTimeHour")+"]:[" + // +LLTrans::getString("LTimeMin")+ "]"; + // break; + //case UTC: + // timeStr = "[" + LLTrans::getString("UTCTimeMth") + "]/[" + // +LLTrans::getString("UTCTimeDay")+"]/[" + // +LLTrans::getString("UTCTimeYr")+"] [" + // +LLTrans::getString("UTCTimeHr")+"]:[" + // +LLTrans::getString("UTCTimeMin")+"] [" + // +LLTrans::getString("UTCTimeTimezone")+"]"; + // break; + //case SLT: + //default: + // timeStr = "[" + LLTrans::getString("TimeMonth") + "]/[" + // +LLTrans::getString("TimeDay")+"]/[" + // +LLTrans::getString("TimeYear")+"] [" + // +LLTrans::getString("TimeHour")+"]:[" + // +LLTrans::getString("TimeMin")+"]"; + // break; case Local: - timeStr = "[" + LLTrans::getString("LTimeMthNum") + "]/[" - +LLTrans::getString("LTimeDay")+"]/[" - +LLTrans::getString("LTimeYear")+"] [" - +LLTrans::getString("LTimeHour")+"]:[" - +LLTrans::getString("LTimeMin")+ "]"; + timeStr = LLTrans::getString("NotificationItemDateStringLocal"); break; case UTC: - timeStr = "[" + LLTrans::getString("UTCTimeMth") + "]/[" - +LLTrans::getString("UTCTimeDay")+"]/[" - +LLTrans::getString("UTCTimeYr")+"] [" - +LLTrans::getString("UTCTimeHr")+"]:[" - +LLTrans::getString("UTCTimeMin")+"] [" - +LLTrans::getString("UTCTimeTimezone")+"]"; + timeStr = LLTrans::getString("NotificationItemDateStringUTC"); break; case SLT: default: - timeStr = "[" + LLTrans::getString("TimeMonth") + "]/[" - +LLTrans::getString("TimeDay")+"]/[" - +LLTrans::getString("TimeYear")+"] [" - +LLTrans::getString("TimeHour")+"]:[" - +LLTrans::getString("TimeMin")+"]"; + timeStr = LLTrans::getString("NotificationItemDateStringSLT"); break; + // } LLSD substitution; substitution["datetime"] = time_stamp; diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp index a6e751d6b7..90479dc57f 100755 --- a/indra/newview/llpanelgroupnotices.cpp +++ b/indra/newview/llpanelgroupnotices.cpp @@ -203,12 +203,16 @@ std::string build_notice_date(const U32& the_time) time(&t); } - std::string dateStr = "["+LLTrans::getString("LTimeYear")+"]/[" - +LLTrans::getString("LTimeMthNum")+"]/[" - +LLTrans::getString("LTimeDay")+"] [" - +LLTrans::getString("LTimeHour")+"]:[" - +LLTrans::getString("LTimeMin")+"]:[" - +LLTrans::getString("LTimeSec")+"]"; + // FIRE-17649: Localizable date formats for group notices + //std::string dateStr = "["+LLTrans::getString("LTimeYear")+"]/[" + // +LLTrans::getString("LTimeMthNum")+"]/[" + // +LLTrans::getString("LTimeDay")+"] [" + // +LLTrans::getString("LTimeHour")+"]:[" + // +LLTrans::getString("LTimeMin")+"]:[" + // +LLTrans::getString("LTimeSec")+"]"; + std::string dateStr = LLTrans::getString("GroupNoticesPanelDateString"); + // + LLSD substitution; substitution["datetime"] = (S32) t; LLStringUtil::format (dateStr, substitution); diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index e325c5a5cf..f389e9b86e 100755 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -56,6 +56,7 @@ #include "lltoggleablemenu.h" #include "llviewermenu.h" #include "llviewerregion.h" +#include "fsfloaterplacedetails.h" // [RLVa:KB] #include "rlvhandler.h" // [/RLVa:KB] @@ -379,14 +380,7 @@ void LLLandmarksPanel::onSelectorButtonClicked() // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", key); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", key); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", key); - } + FSFloaterPlaceDetails::showPlaceDetails(key); // } } @@ -814,14 +808,7 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const { // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "create_landmark")); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", LLSD().with("type", "create_landmark")); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "create_landmark")); - } + FSFloaterPlaceDetails::showPlaceDetails(LLSD().with("type", "create_landmark")); // } // [RLVa:KB] - Checked: 2012-02-08 (RLVa-1.4.5) | Added: RLVa-1.4.5 diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index ed25c89bd7..2aea95ffa1 100755 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -355,7 +355,7 @@ LLPanelObject::LLPanelObject() mHasPosClipboard(FALSE), mHasSizeClipboard(FALSE), mHasRotClipboard(FALSE), - mHasParamClipboard(FALSE), + mHasParamsClipboard(FALSE), mHasFlexiParam(FALSE), mHasSculptParam(FALSE), mHasLightParam(FALSE) @@ -2606,7 +2606,7 @@ void LLPanelObject::onPasteRotClip(const LLSD& data) void LLPanelObject::onCopyParams(const LLSD& data) { getVolumeParams(mClipboardVolumeParams); - mHasParamClipboard = TRUE; + mHasParamsClipboard = TRUE; LLViewerObject* objectp = mObject; if (!objectp) @@ -2622,15 +2622,15 @@ void LLPanelObject::onCopyParams(const LLSD& data) LLFlexibleObjectData *attributes = (LLFlexibleObjectData *)objectp->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE); if (attributes) { - mPramsClipboard["lod"] = attributes->getSimulateLOD(); - mPramsClipboard["gav"] = attributes->getGravity(); - mPramsClipboard["ten"] = attributes->getTension(); - mPramsClipboard["fri"] = attributes->getAirFriction(); - mPramsClipboard["sen"] = attributes->getWindSensitivity(); + mParamsClipboard["lod"] = attributes->getSimulateLOD(); + mParamsClipboard["gav"] = attributes->getGravity(); + mParamsClipboard["ten"] = attributes->getTension(); + mParamsClipboard["fri"] = attributes->getAirFriction(); + mParamsClipboard["sen"] = attributes->getWindSensitivity(); LLVector3 force = attributes->getUserForce(); - mPramsClipboard["forx"] = force.mV[0]; - mPramsClipboard["fory"] = force.mV[1]; - mPramsClipboard["forz"] = force.mV[2]; + mParamsClipboard["forx"] = force.mV[0]; + mParamsClipboard["fory"] = force.mV[1]; + mParamsClipboard["forz"] = force.mV[2]; mHasFlexiParam = TRUE; } } @@ -2686,11 +2686,11 @@ void LLPanelObject::onCopyParams(const LLSD& data) } } if (allow_texture) - mPramsClipboard["sculptid"] = image_id; + mParamsClipboard["sculptid"] = image_id; else - mPramsClipboard["sculptid"] = LLUUID(SCULPT_DEFAULT_TEXTURE); + mParamsClipboard["sculptid"] = LLUUID(SCULPT_DEFAULT_TEXTURE); - mPramsClipboard["sculpt_type"] = sculpt_params->getSculptType(); + mParamsClipboard["sculpt_type"] = sculpt_params->getSculptType(); mHasSculptParam = TRUE; } else @@ -2700,13 +2700,13 @@ void LLPanelObject::onCopyParams(const LLSD& data) if (volobjp && volobjp->getIsLight()) { - mPramsClipboard["Light Intensity"] = volobjp->getLightIntensity(); - mPramsClipboard["Light Radius"] = volobjp->getLightRadius(); - mPramsClipboard["Light Falloff"] = volobjp->getLightFalloff(); + mParamsClipboard["Light Intensity"] = volobjp->getLightIntensity(); + mParamsClipboard["Light Radius"] = volobjp->getLightRadius(); + mParamsClipboard["Light Falloff"] = volobjp->getLightFalloff(); LLColor3 color = volobjp->getLightColor(); - mPramsClipboard["r"] = color.mV[0]; - mPramsClipboard["g"] = color.mV[1]; - mPramsClipboard["b"] = color.mV[2]; + mParamsClipboard["r"] = color.mV[0]; + mParamsClipboard["g"] = color.mV[1]; + mParamsClipboard["b"] = color.mV[2]; mHasLightParam = TRUE; } else @@ -2714,6 +2714,7 @@ void LLPanelObject::onCopyParams(const LLSD& data) mHasLightParam = FALSE; } + mParamsClipboard["physics_shape"] = objectp->getPhysicsShapeType(); } void LLPanelObject::onPasteParams(const LLSD& data) @@ -2730,14 +2731,14 @@ void LLPanelObject::onPasteParams(const LLSD& data) LLFlexibleObjectData new_attributes; new_attributes = *attributes; - new_attributes.setSimulateLOD(mPramsClipboard["lod"].asInteger()); - new_attributes.setGravity(mPramsClipboard["gav"].asReal()); - new_attributes.setTension(mPramsClipboard["ten"].asReal()); - new_attributes.setAirFriction(mPramsClipboard["fri"].asReal()); - new_attributes.setWindSensitivity(mPramsClipboard["sen"].asReal()); - F32 fx = (F32)mPramsClipboard["forx"].asReal(); - F32 fy = (F32)mPramsClipboard["fory"].asReal(); - F32 fz = (F32)mPramsClipboard["forz"].asReal(); + new_attributes.setSimulateLOD(mParamsClipboard["lod"].asInteger()); + new_attributes.setGravity(mParamsClipboard["gav"].asReal()); + new_attributes.setTension(mParamsClipboard["ten"].asReal()); + new_attributes.setAirFriction(mParamsClipboard["fri"].asReal()); + new_attributes.setWindSensitivity(mParamsClipboard["sen"].asReal()); + F32 fx = (F32)mParamsClipboard["forx"].asReal(); + F32 fy = (F32)mParamsClipboard["fory"].asReal(); + F32 fz = (F32)mParamsClipboard["forz"].asReal(); LLVector3 force(fx,fy,fz); new_attributes.setUserForce(force); objectp->setParameterEntry(LLNetworkData::PARAMS_FLEXIBLE, new_attributes, true); @@ -2748,8 +2749,8 @@ void LLPanelObject::onPasteParams(const LLSD& data) { LLSculptParams sculpt_params; - if (mPramsClipboard.has("sculptid")) - sculpt_params.setSculptTexture(mPramsClipboard["sculptid"].asUUID(), (U8)mPramsClipboard["sculpt_type"].asInteger()); + if (mParamsClipboard.has("sculptid")) + sculpt_params.setSculptTexture(mParamsClipboard["sculptid"].asUUID(), (U8)mParamsClipboard["sculpt_type"].asInteger()); objectp->setParameterEntry(LLNetworkData::PARAMS_SCULPT, sculpt_params, TRUE); } @@ -2767,15 +2768,20 @@ void LLPanelObject::onPasteParams(const LLSD& data) if (volobjp && mHasLightParam) { volobjp->setIsLight(TRUE); - volobjp->setLightIntensity((F32)mPramsClipboard["Light Intensity"].asReal()); - volobjp->setLightRadius((F32)mPramsClipboard["Light Radius"].asReal()); - volobjp->setLightFalloff((F32)mPramsClipboard["Light Falloff"].asReal()); - F32 r = (F32)mPramsClipboard["r"].asReal(); - F32 g = (F32)mPramsClipboard["g"].asReal(); - F32 b = (F32)mPramsClipboard["b"].asReal(); + volobjp->setLightIntensity((F32)mParamsClipboard["Light Intensity"].asReal()); + volobjp->setLightRadius((F32)mParamsClipboard["Light Radius"].asReal()); + volobjp->setLightFalloff((F32)mParamsClipboard["Light Falloff"].asReal()); + F32 r = (F32)mParamsClipboard["r"].asReal(); + F32 g = (F32)mParamsClipboard["g"].asReal(); + F32 b = (F32)mParamsClipboard["b"].asReal(); volobjp->setLightColor(LLColor3(r,g,b)); } + + if (mParamsClipboard.has("physics_shape")) + { + objectp->setPhysicsShapeType((U8)mParamsClipboard["physics_shape"].asInteger()); + } - if(mHasParamClipboard) + if(mHasParamsClipboard) objectp->updateVolume(mClipboardVolumeParams); } diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h index 74fc01058b..42526bd6a7 100755 --- a/indra/newview/llpanelobject.h +++ b/indra/newview/llpanelobject.h @@ -113,9 +113,9 @@ protected: BOOL mHasSizeClipboard; BOOL mHasRotClipboard; - LLSD mPramsClipboard; + LLSD mParamsClipboard; LLVolumeParams mClipboardVolumeParams; - BOOL mHasParamClipboard; + BOOL mHasParamsClipboard; BOOL mHasFlexiParam; BOOL mHasSculptParam; BOOL mHasLightParam; diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index 1e1f59055f..1aa70cb17e 100755 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -61,10 +61,20 @@ LLPanelOutfitsInventory::LLPanelOutfitsInventory() : observer.addBOFChangedCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this)); observer.addCOFChangedCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this)); observer.addOutfitLockChangedCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this)); + + // FIRE-17626: Attachment count in appearance floater + mCategoriesObserver = new LLInventoryCategoriesObserver(); } LLPanelOutfitsInventory::~LLPanelOutfitsInventory() { + // FIRE-17626: Attachment count in appearance floater + if (gInventory.containsObserver(mCategoriesObserver)) + { + gInventory.removeObserver(mCategoriesObserver); + } + delete mCategoriesObserver; + // } // virtual @@ -100,6 +110,13 @@ void LLPanelOutfitsInventory::onOpen(const LLSD& key) panel_appearance->fetchInventory(); panel_appearance->refreshCurrentOutfitName(); } + + // FIRE-17626: Attachment count in appearance floater + gInventory.addObserver(mCategoriesObserver); + mCategoriesObserver->addCategory(LLAppearanceMgr::instance().getCOF(), boost::bind(&LLPanelOutfitsInventory::onCOFChanged, this)); + onCOFChanged(); + // + mInitialized = true; } @@ -220,6 +237,18 @@ void LLPanelOutfitsInventory::onSave() LLNotificationsUtil::add("SaveOutfitAs", args, payload, boost::bind(&LLPanelOutfitsInventory::onSaveCommit, this, _1, _2)); } +// FIRE-17626: Attachment count in appearance floater +void LLPanelOutfitsInventory::onCOFChanged() +{ + U32 attachments = LLAppearanceMgr::instance().getNumAttachmentsInCOF(); + LLStringUtil::format_map_t args; + args["COUNT"] = llformat("%d", attachments); + args["MAX"] = llformat("%d", MAX_AGENT_ATTACHMENTS); + std::string title = getString("cof_tab_label", args); + mAppearanceTabs->setPanelTitle(mAppearanceTabs->getIndexForPanel(mCurrentOutfitPanel), title); +} +// + //static LLPanelOutfitsInventory* LLPanelOutfitsInventory::findInstance() { diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h index 77c8a472e0..d7fb967fda 100755 --- a/indra/newview/llpaneloutfitsinventory.h +++ b/indra/newview/llpaneloutfitsinventory.h @@ -38,6 +38,7 @@ class LLMenuGL; class LLSidepanelAppearance; class LLTabContainer; class LLSaveOutfitComboBtn; +class LLInventoryCategoriesObserver; // FIRE-17626: Attachment count in appearance floater class LLPanelOutfitsInventory : public LLPanel { @@ -72,6 +73,11 @@ private: std::string mFilterSubString; std::auto_ptr mSaveComboBtn; + // FIRE-17626: Attachment count in appearance floater + LLInventoryCategoriesObserver* mCategoriesObserver; + void onCOFChanged(); + // + ////////////////////////////////////////////////////////////////////////////////// // tab panels // protected: diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 8aa649d198..2a9a52a31a 100755 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -73,6 +73,7 @@ #include "llviewerparcelmgr.h" #include "llviewerregion.h" #include "llviewerwindow.h" +#include "fsfloaterplacedetails.h" // Constants static const F32 PLACE_INFO_UPDATE_INTERVAL = 3.0; @@ -120,14 +121,7 @@ public: // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", key); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", key); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", key); - } + FSFloaterPlaceDetails::showPlaceDetails(key); // return true; } diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index dc0d396479..394a84c015 100755 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -49,6 +49,8 @@ #include "llviewercontrol.h" +#include "fsfloaterplacedetails.h" + // Maximum number of items that can be added to a list in one pass. // Used to limit time spent for items list update per frame. static const U32 ADD_LIMIT = 50; @@ -322,14 +324,7 @@ void LLTeleportHistoryFlatItem::showPlaceInfoPanel(S32 index) // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", params); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", params); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", params); - } + FSFloaterPlaceDetails::showPlaceDetails(params); // } diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp index 2dc6d9105e..b377a20dd4 100755 --- a/indra/newview/llpaneltopinfobar.cpp +++ b/indra/newview/llpaneltopinfobar.cpp @@ -47,6 +47,7 @@ // [RLVa:KB] - Checked: 2012-02-08 (RLVa-1.4.5) | Added: RLVa-1.4.5 #include "rlvhandler.h" // [/RLVa:KB] +#include "fsfloaterplacedetails.h" #include "llfloaterreg.h" @@ -477,28 +478,14 @@ void LLPanelTopInfoBar::onContextMenuItemClicked(const LLSD::String& item) { // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "create_landmark")); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", LLSD().with("type", "create_landmark")); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "create_landmark")); - } + FSFloaterPlaceDetails::showPlaceDetails(LLSD().with("type", "create_landmark")); // } else { // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "landmark").with("id",landmark->getUUID())); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", LLSD().with("type", "landmark").with("id",landmark->getUUID())); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "landmark").with("id",landmark->getUUID())); - } + FSFloaterPlaceDetails::showPlaceDetails(LLSD().with("type", "landmark").with("id",landmark->getUUID())); // } // [RLVa:KB] - Checked: 2012-02-08 (RLVa-1.4.5) | Added: RLVa-1.4.5 @@ -531,14 +518,7 @@ void LLPanelTopInfoBar::onInfoButtonClicked() // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "agent")); - //if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - //{ - // LLFloaterReg::showInstance("fs_placedetails", LLSD().with("type", "agent")); - //} - //else - //{ - // LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "agent")); - //} + //FSFloaterPlaceDetails::showPlaceDetails(LLSD().with("type", "agent")); // LLFloaterReg::showInstance("about_land"); } diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp index 80bb8be01f..46230361cb 100755 --- a/indra/newview/llscriptfloater.cpp +++ b/indra/newview/llscriptfloater.cpp @@ -227,10 +227,9 @@ void LLScriptFloater::createForm(const LLUUID& notification_id) LLRect panel_rect = mScriptForm->getRect(); // Animated dialogs // toast_rect.setLeftTopAndSize(toast_rect.mLeft, toast_rect.mTop, panel_rect.getWidth(), panel_rect.getHeight() + getHeaderHeight()); + eDialogPosition dialog_position = (eDialogPosition)gSavedSettings.getS32("ScriptDialogsPosition"); mDesiredHeight = panel_rect.getHeight() + getHeaderHeight(); - if (gSavedSettings.getBOOL("FSAnimatedScriptDialogs") && - ((eDialogPosition)gSavedSettings.getS32("ScriptDialogsPosition") == POS_TOP_LEFT || - (eDialogPosition)gSavedSettings.getS32("ScriptDialogsPosition") == POS_TOP_RIGHT)) + if (gSavedSettings.getBOOL("FSAnimatedScriptDialogs") && (dialog_position == POS_TOP_LEFT || dialog_position == POS_TOP_RIGHT)) { mCurrentHeight = 0; mStartTime = LLFrameTimer::getElapsedSeconds(); @@ -246,7 +245,7 @@ void LLScriptFloater::createForm(const LLUUID& notification_id) // Dialog Stacking browser mScriptForm->getChild("DialogStackButton")->setCommitCallback(boost::bind(&LLScriptFloater::onStackClicked, this)); - if ((eDialogPosition)gSavedSettings.getS32("ScriptDialogsPosition") != POS_DOCKED) + if (dialog_position != POS_DOCKED) { DialogStack::instance().push(notification_id); } @@ -890,24 +889,24 @@ LLScriptFloater* LLScriptFloater::show(const LLUUID& notification_id) if (floaterType == LLScriptFloaterManager::OBJ_SCRIPT || floaterType == LLScriptFloaterManager::OBJ_UNKNOWN || floaterType == LLScriptFloaterManager::OBJ_GIVE_INVENTORY) // { - eDialogPosition dialogPos = (eDialogPosition)gSavedSettings.getS32("ScriptDialogsPosition"); + eDialogPosition dialog_position = (eDialogPosition)gSavedSettings.getS32("ScriptDialogsPosition"); - if (dialogPos == POS_LEGACY) + if (dialog_position == POS_LEGACY) { - dialogPos = POS_TOP_RIGHT; + dialog_position = POS_TOP_RIGHT; if (!gSavedSettings.getBOOL("ShowScriptDialogsTopRight")) { - dialogPos = POS_DOCKED; + dialog_position = POS_DOCKED; } - gSavedSettings.setS32("ScriptDialogsPosition", (S32)dialogPos); + gSavedSettings.setS32("ScriptDialogsPosition", (S32)dialog_position); } - if (dialogPos == POS_DOCKED && chicletsDisabled) + if (dialog_position == POS_DOCKED && chicletsDisabled) { - dialogPos = POS_TOP_RIGHT; + dialog_position = POS_TOP_RIGHT; } - if (dialogPos != POS_DOCKED) + if (dialog_position != POS_DOCKED) { // undock the dialog floater->setDocked(false, true); @@ -938,7 +937,7 @@ LLScriptFloater* LLScriptFloater::show(const LLUUID& notification_id) floater->setOpenPositioning(LLFloaterEnums::POSITIONING_SPECIFIED); - switch (dialogPos) + switch (dialog_position) { case POS_DOCKED: { @@ -975,7 +974,7 @@ LLScriptFloater* LLScriptFloater::show(const LLUUID& notification_id) } default: { - LL_WARNS() << "dialogPos value " << dialogPos << " not handled in switch() statement." << LL_ENDL; + LL_WARNS() << "dialog_position value " << dialog_position << " not handled in switch() statement." << LL_ENDL; } } } diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp index 97e4585746..c6c15adb41 100755 --- a/indra/newview/lltoastgroupnotifypanel.cpp +++ b/indra/newview/lltoastgroupnotifypanel.cpp @@ -95,15 +95,18 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(const LLNotificationPtr& notifi //message body const std::string& message = payload["message"].asString(); - std::string timeStr = "["+LLTrans::getString("TimeWeek")+"], [" - +LLTrans::getString("TimeMth")+"] [" - +LLTrans::getString("TimeDay")+"] [" - +LLTrans::getString("TimeYear")+"] [" - +LLTrans::getString("TimeHour12")+"]:[" - +LLTrans::getString("TimeMin")+"]:[" - +LLTrans::getString("TimeSec")+"] [" - +LLTrans::getString("TimeAMPM")+"] [" - +LLTrans::getString("TimeTimezone")+"]"; + // FIRE-17649: Localizable date formats for group notices + //std::string timeStr = "["+LLTrans::getString("TimeWeek")+"], [" + // +LLTrans::getString("TimeMth")+"] [" + // +LLTrans::getString("TimeDay")+"] [" + // +LLTrans::getString("TimeYear")+"] [" + // +LLTrans::getString("TimeHour12")+"]:[" + // +LLTrans::getString("TimeMin")+"]:[" + // +LLTrans::getString("TimeSec")+"] [" + // +LLTrans::getString("TimeAMPM")+"] [" + // +LLTrans::getString("TimeTimezone")+"]"; + std::string timeStr = LLTrans::getString("GroupNoticesToastDateString"); + // const LLDate timeStamp = notification->getDate(); LLDate notice_date = timeStamp.notNull() ? timeStamp : payload["received_time"].asDate(); LLSD substitution; diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index f881221735..ddc01d9a27 100755 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -190,10 +190,11 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vectoraddChild(ignore_btn, -1); mute_btn_pad = 4 * HPAD; //only use a 4 * HPAD padding if an ignore button exists } - // FIRE-3948: Commenting all out as mute button is disabled (FS:MS) - // Undo the removal and make it optional after I was looking for the mute button on spammy dialogs! + // FIRE-3948: Option to remove the mute button; FIRE-17158: Remove "block" button for script dialog of own objects //if (mIsScriptDialog && mute_btn != NULL) - if (mIsScriptDialog && mute_btn != NULL && !gSavedSettings.getBOOL("FSRemoveScriptBlockButton")) + if (mIsScriptDialog && mute_btn != NULL && !gSavedSettings.getBOOL("FSRemoveScriptBlockButton") && + (!mNotification->getPayload().has("own_object") || !mNotification->getPayload()["own_object"].asBoolean())) + // { LLRect mute_btn_rect(mute_btn->getRect()); // Place mute (Block) button to the left of the ignore button. @@ -338,11 +339,11 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images ) // // Dialog Stacking browser // hide the stacking button for things that are not scripting dialogs etc. - else if(mNotification->getName()!="LoadWebPage") + else if (notif_name != "LoadWebPage") { // setting size to 0,0 becuase button visibility is dictated by a control variable, // so we need a different way to hide this button. - getChild("DialogStackButton")->reshape(0,0,FALSE); + getChild("DialogStackButton")->reshape(0, 0, FALSE); } // diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp index 97512fae90..6e8caa77d3 100644 --- a/indra/newview/llurldispatcher.cpp +++ b/indra/newview/llurldispatcher.cpp @@ -52,6 +52,8 @@ #include "llnotificationsutil.h" #include "llsd.h" +#include "fsfloaterplacedetails.h" + static LLURLDispatcherListener sURLDispatcherListener; class LLURLDispatcherImpl @@ -302,14 +304,7 @@ void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const LLSLURL& // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", key); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", key); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", key); - } + FSFloaterPlaceDetails::showPlaceDetails(key); // } } diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 668b1235de..ec862b1d9f 100755 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -175,7 +175,6 @@ static bool handleRenderFarClipChanged(const LLSD& newvalue) return true; } -// FIRE-6340, FIRE-6567 - Setting Bandwidth issues static bool handleTerrainDetailChanged(const LLSD& newvalue) { LLDrawPoolTerrain::sDetailMode = newvalue.asInteger(); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index d5648a54d3..4f13b9daa3 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -159,6 +159,7 @@ #include "llfloaterpreference.h" // Volume controls prefs #include "llcheckboxctrl.h" // Volume controls prefs #include "llscenemonitor.h" +#include "fsfloaterplacedetails.h" using namespace LLAvatarAppearanceDefines; @@ -7109,14 +7110,7 @@ class LLWorldCreateLandmark : public view_listener_t // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "create_landmark")); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", LLSD().with("type", "create_landmark")); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "create_landmark")); - } + FSFloaterPlaceDetails::showPlaceDetails(LLSD().with("type", "create_landmark")); // return true; @@ -7134,14 +7128,7 @@ class LLWorldPlaceProfile : public view_listener_t // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "agent")); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", LLSD().with("type", "agent")); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "agent")); - } + FSFloaterPlaceDetails::showPlaceDetails(LLSD().with("type", "agent")); // return true; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 28877895cf..2bf95f0c22 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -134,6 +134,7 @@ #include "fsareasearch.h" #include "fscommon.h" #include "fsdata.h" +#include "fsfloaterplacedetails.h" #include "fsradar.h" #include "fskeywords.h" // FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground #include "fslightshare.h" // FIRE-5118 - Lightshare support @@ -1417,14 +1418,7 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam { // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "landmark").with("id", item->getUUID())); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", LLSD().with("type", "landmark").with("id", item->getUUID())); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "landmark").with("id", item->getUUID())); - } + FSFloaterPlaceDetails::showPlaceDetails(LLSD().with("type", "landmark").with("id", item->getUUID())); // } else if("group_offer" == from_name) @@ -1437,14 +1431,7 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", args); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", args); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", args); - } + FSFloaterPlaceDetails::showPlaceDetails(args); // continue; @@ -2975,6 +2962,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // Old "do not disturb" message behavior: only send once if session not open // Session id will be null if avatar answers from offline IM via email + std::string response; if (!gIMMgr->hasSession(session_id) && session_id.notNull()) { // @@ -2982,7 +2970,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) has_session = false; // FS autoresponse feature std::string my_name; - std::string response; LLAgentUI::buildFullname(my_name); if (is_do_not_disturb) { @@ -3002,6 +2989,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) response = gSavedPerAccountSettings.getString("FSAwayAvatarResponse"); } // + else + { + LL_WARNS() << "Unknown auto-response mode" << LL_ENDL; + } pack_instant_message( gMessageSystem, gAgent.getID(), @@ -3071,11 +3062,14 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) if (!has_session) { // Fire-5389 - "Autoresponse Sent" message added to Firestorm as was in Phoenix + LLStringUtil::format_map_t args; + args["MESSAGE"] = response; + gIMMgr->addMessage( session_id, gAgentID, LLStringUtil::null, // Pass null value so no name gets prepended - LLTrans::getString("IM_autoresponse_sent"), + LLTrans::getString("IM_autoresponse_sent", args), false, name, IM_NOTHING_SPECIAL, @@ -9315,6 +9309,17 @@ void process_script_dialog(LLMessageSystem* msg, void**) payload["chat_channel"] = chat_channel; payload["object_name"] = object_name; + // FIRE-17158: Remove "block" button for script dialog of own objects + bool own_object = false; + std::string self_name; + LLAgentUI::buildFullname(self_name); + if (LLCacheName::buildFullName(first_name, last_name) == self_name) + { + own_object = true; + } + payload["own_object"] = own_object; + // + // build up custom form S32 button_count = msg->getNumberOfBlocks("Buttons"); if (button_count > SCRIPT_DIALOG_MAX_BUTTONS) diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 521fa2f622..16c35854fd 100755 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -61,6 +61,8 @@ #include "llviewertexturelist.h" #include "llviewerwindow.h" +#include "fsfloaterplacedetails.h" + static LLDefaultChildRegistry::Register r("text_editor"); ///----------------------------------------------------------------------- @@ -83,14 +85,7 @@ public: // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", key); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", key); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", key); - } + FSFloaterPlaceDetails::showPlaceDetails(key); // } @@ -105,14 +100,7 @@ public: // FIRE-817: Separate place details floater //LLFloaterSidePanelContainer::showPanel("places", key); - if (gSavedSettings.getBOOL("FSUseStandalonePlaceDetailsFloater")) - { - LLFloaterReg::showInstance("fs_placedetails", key); - } - else - { - LLFloaterSidePanelContainer::showPanel("places", key); - } + FSFloaterPlaceDetails::showPlaceDetails(key); // } // [/SL:KB] diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index df4b1a8a50..f6cb6b5314 100755 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -421,7 +421,10 @@ public: MASK_BODYPART = 0x02, MASK_ATTACHMENT = 0x04, MASK_GESTURE = 0x08, - MASK_UNKNOWN = 0x16, + // Fix hexadecimal arithmetics brain fart + //MASK_UNKNOWN = 0x16, + MASK_UNKNOWN = 0x10 + // }; /* virtual */ LLContextMenu* createMenu(); diff --git a/indra/newview/skins/ansastorm/themes/blood/colors.xml b/indra/newview/skins/ansastorm/themes/blood/colors.xml index 3c3be0a5b1..a301896073 100644 --- a/indra/newview/skins/ansastorm/themes/blood/colors.xml +++ b/indra/newview/skins/ansastorm/themes/blood/colors.xml @@ -165,13 +165,13 @@ value="0.035 0.035 0.035 1" /> + value="0.035 0.035 0.035 1" /> + value="0.035 0.035 0.035 0.50" /> + value="0.035 0.035 0.035 0.66" /> diff --git a/indra/newview/skins/ansastorm/themes/ectoplasma/colors.xml b/indra/newview/skins/ansastorm/themes/ectoplasma/colors.xml index 059d629b5d..cefd97c05e 100644 --- a/indra/newview/skins/ansastorm/themes/ectoplasma/colors.xml +++ b/indra/newview/skins/ansastorm/themes/ectoplasma/colors.xml @@ -159,13 +159,13 @@ value="0.035 0.035 0.035 1" /> + value="0.035 0.035 0.035 1" /> + value="0.035 0.035 0.035 0.50" /> + value="0.035 0.035 0.035 0.66" /> diff --git a/indra/newview/skins/ansastorm/xui/en/panel_fs_contacts_friends.xml b/indra/newview/skins/ansastorm/xui/en/panel_fs_contacts_friends.xml index 64e1f8cb39..da1944551b 100644 --- a/indra/newview/skins/ansastorm/xui/en/panel_fs_contacts_friends.xml +++ b/indra/newview/skins/ansastorm/xui/en/panel_fs_contacts_friends.xml @@ -96,11 +96,6 @@ name="icon_edit_mine" tool_tip="Friend can edit, delete or take objects" width="16" /> - Wear selected items + + Wearing ([COUNT]/[MAX] Att.) + - - diff --git a/indra/newview/skins/default/xui/de/floater_fs_area_search.xml b/indra/newview/skins/default/xui/de/floater_fs_area_search.xml index 10e4ff7037..6219da5cba 100644 --- a/indra/newview/skins/default/xui/de/floater_fs_area_search.xml +++ b/indra/newview/skins/default/xui/de/floater_fs_area_search.xml @@ -59,6 +59,9 @@ + + + und @@ -82,6 +85,7 @@ und + Objekte mit diesen Eigenschaften ausschließen: diff --git a/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml index 1f7585609d..dd56494069 100755 --- a/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml +++ b/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml @@ -22,8 +22,6 @@ [COUNT]J - - diff --git a/indra/newview/skins/default/xui/de/panel_fs_contacts_friends.xml b/indra/newview/skins/default/xui/de/panel_fs_contacts_friends.xml index 4ceda77719..042ad077da 100644 --- a/indra/newview/skins/default/xui/de/panel_fs_contacts_friends.xml +++ b/indra/newview/skins/default/xui/de/panel_fs_contacts_friends.xml @@ -13,7 +13,6 @@ - diff --git a/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml index 044732530a..0610fa91f4 100755 --- a/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml @@ -6,6 +6,9 @@ Ausgewählte Objekte tragen + + Aktuelles Outfit ([COUNT]/[MAX] Anh.) + diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index dbcb906891..606c4a49c6 100755 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -4495,7 +4495,7 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_ Ankommende Instant Message von [NAME] - Automatische Antwort gesendet. + Automatische Antwort gesendet: [MESSAGE] Objekt für automatische Antwort gesendet: [ITEM_NAME] @@ -6566,4 +6566,19 @@ Setzen Sie den Editorpfad in Anführungszeichen (online) + + [day,datetime,local].[mthnum,datetime,local].[year,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] + + + [wkday,datetime,slt]., [day,datetime,slt]. [mth,datetime,slt]. [year,datetime,slt] [hour,datetime,slt]:[min,datetime,slt]:[second,datetime,slt] [timezone,datetime,slt] + + + [day,datetime,local].[mthnum,datetime,local].[year,datetime,local] [hour,datetime,local]:[min,datetime,local] + + + [day,datetime,utc].[mth,datetime,utc].[year,datetime,utc] [hour,datetime,utc]:[min,datetime,utc] [timezone,datetime,utc] + + + [day,datetime,slt].[mthnum,datetime,slt].[year,datetime,slt] [hour,datetime,slt]:[min,datetime,slt] + diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml index 4f2465a3f6..3681b36cf8 100755 --- a/indra/newview/skins/default/xui/en/floater_about.xml +++ b/indra/newview/skins/default/xui/en/floater_about.xml @@ -91,7 +91,7 @@ Dummy Name replaced at run time -Afrika Burton, Albatroz Hird, Alexru Resident, alison Seesaw, AnaLucia Loon, Angell Airy, Annuccia Resident, Annuccia Vuckovic, Anubi Alter, Atthosz Amiot, Ayelin Ethaniel, Basement Desade, Bia Scribe, Bluezy Bleac, Christy Mansbridge, Chymy India, Cordoba Cluny, Damian Zhaoying, DARK Mirabella, Ed Merryman, Eressea Karsin, Erick Gregan, F0RBIDDEN, Fabry String, Flandria Connolly, Foksy, Franklyn Watanabe, FreeSpirit Simmering, Gee McAuley, Greatfox Snowpaw, Gweneth Lange, Hatake Kohime, Hiroshi Kumaki, Hope Dreier, Jodi Nikolaidis, JogiTE Clip, Kool Koolhoven, Kosmox Voom, Lachrimo Skytower, Lalwende Leakey, Landaree Levee, Lassie, Lette Ponnier, Lina Pussycat, Lyn Mimistrobell, Marybeth Oceanlane, Mickeala Praga, Miller Thor, Miro Collas, Mister Acacia, Morgause Whiteberry, Mysty Saunders, Nano Bouscario, narcisssia McMahon, Natem Andel, Nicoletta Schnute, Nisa Maverick, NogarDrevlis Lectar, Norton Burns, PanteraPolnocy, Peewee Musytari, Pisano Smit, PixelProphet Lane, Pol Xaron, Poledra Behemoth, Programmtest, Rander Teskat, Ricky Munz, Riku Highfield, RINOBIT Footman, Robert0 Siamendes, Roth Grut, Sabah Back, SaHaRa Connor, Selene Gregoire, Selo Jacobus, silvanaf Demina, Sniper Siemans, Spartaco Zemenis, Spino Forcella, Srilania Svoboda, Sunset Faulkes, Tanja Levenque, TankMaster Finesmith, Tarlyn Dagger, Thea Brianna, Toy Wylie, Whirly Fizzle, Willow Wilder, Wolfspirit Magic and XLR8RRICK Hudson. +Afrika Burton, Albatroz Hird, Alexru Resident, alison Seesaw, AnaLucia Loon, Angell Airy, Annuccia Resident, Annuccia Vuckovic, Anubi Alter, Atthosz Amiot, Ayelin Ethaniel, Basement Desade, Bia Scribe, Bluezy Bleac, Clarke2, Christy Mansbridge, Chymy India, Cordoba Cluny, Damian Zhaoying, DARK Mirabella, Emmanuella Checchinato, Ed Merryman, Eressea Karsin, Erick Gregan, F0RBIDDEN, Fabry String, Fetish3d, Flandria Connolly, Foksy, Franklyn Watanabe, FreeSpirit Simmering, Gee McAuley, Greatfox Snowpaw, Gweneth Lange, Hatake Kohime, Hiroshi Kumaki, Hope Dreier, Jodi Nikolaidis, JogiTE Clip, Kool Koolhoven, Kosmox Voom, Lachrimo Skytower, Lalwende Leakey, Landaree Levee, Lassie, Lette Ponnier, Lina Pussycat, Lyn Mimistrobell, Marianne Qunhua, Marybeth Oceanlane, Mel Hinarada, Mickeala Praga, Miller Thor, Miro Collas, Mister Acacia, Morgause Whiteberry, Mysty Saunders, Nano Bouscario, narcisssia McMahon, Natem Andel, Nicoletta Schnute, Nisa Maverick, NogarDrevlis Lectar, Norton Burns, PanteraPolnocy, Peewee Musytari, Pisano Smit, PixelProphet Lane, Pol Xaron, Poledra Behemoth, Programmtest, Rander Teskat, Ricky Munz, Riku Highfield, RINOBIT Footman, Robert0 Siamendes, Roth Grut, Sabah Back, SaHaRa Connor, Selene Gregoire, Selo Jacobus, silvanaf Demina, Sniper Siemans, Spartaco Zemenis, Spino Forcella, Srilania Svoboda, Sunset Faulkes, Tanja Levenque, TankMaster Finesmith, Tarlyn Dagger, Thea Brianna, Toy Wylie, Whirly Fizzle, Willow Wilder, Wolfspirit Magic and XLR8RRICK Hudson. + + + + Exclude objects that are: @@ -552,7 +582,7 @@ name="exclude_neighbor_region" label="Neighboring Regions" width="80"/> - - - Votre position - - - Résident - - - Infohub - - - Terrain à vendre - - - Vente s/enchères - - - Surface en vente - - - - Domicile - - - Evènements - - - Général - - - Mature - - - Adulte - + - - Position - - - - - + +