Merge branch 'master' of https://github.com/FirestormViewer/phoenix-firestorm
commit
98f8fdef5a
|
|
@ -2823,51 +2823,37 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<map>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>darwin64</key>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>49650353442698c3e05102676fe427d0ebe02f0b</string>
|
||||
<string>fc67514183e7dbbb96bebb9970e1431c</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-tracy/releases/download/v0.8.1-eecbf72/tracy-v0.8.1-eecbf72-darwin64-eecbf72.tar.zst</string>
|
||||
<string>https://3p.firestormviewer.org/tracy-v0.10.241491433-windows-241491433.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>2b80e7407e4f3e82eff3879add0e9ad63e7fcace</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-tracy/releases/download/v0.8.1-eecbf72/tracy-v0.8.1-eecbf72-windows64-eecbf72.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
<string>windows</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>license</key>
|
||||
<string>bsd</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/tracy_license.txt</string>
|
||||
<string>LICENSES/Tracy.txt</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 2017-2022, Bartosz Taudul (wolf@nereid.pl)</string>
|
||||
<key>version</key>
|
||||
<string>v0.8.1-eecbf72</string>
|
||||
<string>v0.10.241491433</string>
|
||||
<key>name</key>
|
||||
<string>tracy</string>
|
||||
<key>canonical_repo</key>
|
||||
<string>https://bitbucket.org/lindenlab/3p-tracy</string>
|
||||
<string>https://github.com/beqjanus/3p-tracy</string>
|
||||
<key>description</key>
|
||||
<string>Tracy Profiler Library</string>
|
||||
<key>source</key>
|
||||
<string>https://bitbucket.org/lindenlab/3p-tracy</string>
|
||||
<string>https://github.com/beqjanus/3p-tracy</string>
|
||||
<key>source_type</key>
|
||||
<string>git</string>
|
||||
</map>
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ if(WINDOWS)
|
|||
elseif (MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) # Visual Studio 2019
|
||||
set(MSVC_VER 140)
|
||||
set(MSVC_TOOLSET_VER 142)
|
||||
elseif (MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1940) # Visual Studio 2022
|
||||
elseif (MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1950) # Visual Studio 2022
|
||||
set(MSVC_VER 140)
|
||||
set(MSVC_TOOLSET_VER 143)
|
||||
else (MSVC80)
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ if (USE_TRACY)
|
|||
use_prebuilt_binary(tracy)
|
||||
|
||||
target_include_directories( ll::tracy SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/tracy)
|
||||
target_link_libraries( ll::tracy INTERFACE TracyClient )
|
||||
# target_link_libraries( ll::tracy INTERFACE TracyClient )
|
||||
|
||||
# See: indra/llcommon/llprofiler.h
|
||||
add_compile_definitions(LL_PROFILER_CONFIGURATION=3)
|
||||
|
|
|
|||
|
|
@ -268,8 +268,12 @@ if (DARWIN)
|
|||
list(APPEND llcommon_SOURCE_FILES llsys_objc.mm)
|
||||
endif (DARWIN)
|
||||
|
||||
# <FS:Beq/> Tracy Profiler support
|
||||
# <FS:Beq> Tracy Profiler support
|
||||
list(APPEND llcommon_SOURCE_FILES llprofiler.cpp)
|
||||
if (USE_TRACY)
|
||||
list(APPEND llcommon_SOURCE_FILES fstracyclient.cpp)
|
||||
endif()
|
||||
# </FS:Beq>
|
||||
|
||||
# <FS:ND> Add all nd* files. memory pool, intrinsics, ...
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
// Just a simple wrapper to easily import the single tracy source file and save
|
||||
// all the pain of cross platform libraries in the Tracy 3p build.
|
||||
#include "linden_common.h"
|
||||
|
||||
#if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY || LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY_FAST_TIMER
|
||||
#include "TracyClient.cpp"
|
||||
#endif // LL_PROFILER_CONFIGURATION
|
||||
|
||||
|
|
@ -91,12 +91,12 @@ namespace LLProfiler
|
|||
// #define TRACY_NO_BROADCAST 1
|
||||
// #define TRACY_ONLY_LOCALHOST 1
|
||||
#define TRACY_ONLY_IPV4 1
|
||||
#include "Tracy.hpp"
|
||||
#include "tracy/Tracy.hpp"
|
||||
// <FS:Beq> Fixed mutual exclusion issues with RAM and GPU. NOTE: This might still break on Apple in which case we'll need to restrict that platform
|
||||
//// GPU Mutually exclusive with detailed memory tracing
|
||||
// #define LL_PROFILER_ENABLE_TRACY_OPENGL 0
|
||||
#define LL_PROFILER_ENABLE_TRACY_MEMORY 0
|
||||
#define LL_PROFILER_ENABLE_TRACY_OPENGL 0
|
||||
#define LL_PROFILER_ENABLE_TRACY_OPENGL 1
|
||||
|
||||
// Enable RenderDoc labeling
|
||||
#define LL_PROFILER_ENABLE_RENDER_DOC 0
|
||||
|
|
@ -104,37 +104,37 @@ namespace LLProfiler
|
|||
#endif
|
||||
|
||||
#if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY
|
||||
#define LL_PROFILER_FRAME_END FrameMark
|
||||
#define LL_PROFILER_FRAME_END FrameMark;
|
||||
// <FS:Beq> Note: this threadlocal forces memory colelction enabled from the start. It conflicts with deferred profiling.
|
||||
#define LL_PROFILER_SET_THREAD_NAME( name ) tracy::SetThreadName( name ); gProfilerEnabled = true;
|
||||
// </FS:Beq>
|
||||
#define LL_PROFILER_THREAD_BEGIN(name) FrameMarkStart( name ) // C string
|
||||
#define LL_PROFILER_THREAD_END(name) FrameMarkEnd( name ) // C string
|
||||
#define LL_PROFILER_THREAD_BEGIN(name) FrameMarkStart( name ); // C string
|
||||
#define LL_PROFILER_THREAD_END(name) FrameMarkEnd( name ); // C string
|
||||
// <FS:Beq> revert change that obscures custom FTM zones. We may want to may FTM Zones unique in future.
|
||||
// #define LL_RECORD_BLOCK_TIME(name) ZoneScoped // Want descriptive names; was: ZoneNamedN( ___tracy_scoped_zone, #name, LLProfiler::active );
|
||||
#define LL_RECORD_BLOCK_TIME(name) ZoneNamedN( ___tracy_scoped_zone, #name, LLProfiler::active )
|
||||
#define LL_RECORD_BLOCK_TIME(name) ZoneNamedN( ___tracy_scoped_zone, #name, LLProfiler::active );
|
||||
// </FS:Beq>
|
||||
|
||||
// <FS:Beq>
|
||||
// #define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, true )
|
||||
// #define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, true ) // RGB
|
||||
// #define LL_PROFILE_ZONE_SCOPED ZoneScoped
|
||||
#define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, LLProfiler::active )
|
||||
#define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, LLProfiler::active ) // RGB
|
||||
#define LL_PROFILE_ZONE_SCOPED ZoneNamed( ___tracy_scoped_zone, LLProfiler::active ) // <FS:Beq/> Enable deferred collection through filters
|
||||
#define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, LLProfiler::active );
|
||||
#define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, LLProfiler::active ); // RGB
|
||||
#define LL_PROFILE_ZONE_SCOPED ZoneNamed( ___tracy_scoped_zone, LLProfiler::active ); // <FS:Beq/> Enable deferred collection through filters
|
||||
// </FS:Beq>
|
||||
|
||||
#define LL_PROFILE_ZONE_NUM( val ) ZoneValue( val )
|
||||
#define LL_PROFILE_ZONE_TEXT( text, size ) ZoneText( text, size )
|
||||
#define LL_PROFILE_ZONE_NUM( val ) ZoneValue( val );
|
||||
#define LL_PROFILE_ZONE_TEXT( text, size ) ZoneText( text, size );
|
||||
|
||||
#define LL_PROFILE_ZONE_ERR(name) LL_PROFILE_ZONE_NAMED_COLOR( name, 0XFF0000 ) // RGB yellow
|
||||
#define LL_PROFILE_ZONE_INFO(name) LL_PROFILE_ZONE_NAMED_COLOR( name, 0X00FFFF ) // RGB cyan
|
||||
#define LL_PROFILE_ZONE_WARN(name) LL_PROFILE_ZONE_NAMED_COLOR( name, 0x0FFFF00 ) // RGB red
|
||||
|
||||
// <FS:Beq> Additional FS Tracy macros
|
||||
#define LL_PROFILE_ZONE_COLOR(color) ZoneNamedC( ___tracy_scoped_zone, color, LLProfiler::active ) // <FS:Beq/> Additional Tracy macro
|
||||
#define LL_PROFILE_PLOT( name, value ) TracyPlot( name, value)
|
||||
#define LL_PROFILE_PLOT_SQ( name, prev, value ) TracyPlot(name,prev);TracyPlot( name, value)
|
||||
#define LL_PROFILE_ZONE_COLOR(color) ZoneNamedC( ___tracy_scoped_zone, color, LLProfiler::active );
|
||||
#define LL_PROFILE_PLOT( name, value ) TracyPlot( name, value);
|
||||
#define LL_PROFILE_PLOT_CONFIG_SQUARE(name) TracyPlotConfig(name, tracy::PlotFormatType::Number, true, false, 0);
|
||||
#define LL_PROFILE_IS_CONNECTED TracyIsConnected
|
||||
// </FS:Beq>
|
||||
#endif
|
||||
|
|
@ -158,15 +158,15 @@ namespace LLProfiler
|
|||
// <FS:Beq> Additional FS Tracy macros
|
||||
#define LL_PROFILE_ZONE_COLOR(color)
|
||||
#define LL_PROFILE_PLOT( name, value )
|
||||
#define LL_PROFILE_PLOT_SQ( name, prev, value )
|
||||
#define LL_PROFILE_PLOT_CONFIG_SQUARE(name)
|
||||
#define LL_PROFILE_IS_CONNECTED
|
||||
// </FS:Beq>
|
||||
#endif
|
||||
#if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY_FAST_TIMER
|
||||
#define LL_PROFILER_FRAME_END FrameMark
|
||||
#define LL_PROFILER_FRAME_END FrameMark;
|
||||
#define LL_PROFILER_SET_THREAD_NAME( name ) tracy::SetThreadName( name ); gProfilerEnabled = true;
|
||||
#define LL_PROFILER_THREAD_BEGIN(name) FrameMarkStart( name ) // C string
|
||||
#define LL_PROFILER_THREAD_END(name) FrameMarkEnd( name ) // C string
|
||||
#define LL_PROFILER_THREAD_BEGIN(name) FrameMarkStart( name ); // C string
|
||||
#define LL_PROFILER_THREAD_END(name) FrameMarkEnd( name ); // C string
|
||||
|
||||
// <FS:Beq> revert change that obscures custom FTM zones.
|
||||
// #define LL_RECORD_BLOCK_TIME(name) ZoneScoped const LLTrace::BlockTimer& LL_GLUE_TOKENS(block_time_recorder, __LINE__)(LLTrace::timeThisBlock(name)); (void)LL_GLUE_TOKENS(block_time_recorder, __LINE__);
|
||||
|
|
@ -177,20 +177,20 @@ namespace LLProfiler
|
|||
// #define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, true ) // RGB
|
||||
// #define LL_PROFILE_ZONE_SCOPED ZoneScoped
|
||||
#define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, LLProfiler::active );
|
||||
#define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, LLProfiler::active ) // RGB
|
||||
#define LL_PROFILE_ZONE_SCOPED ZoneNamed( ___tracy_scoped_zone, LLProfiler::active ) // <FS:Beq/> Enable deferred collection through filters
|
||||
#define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, LLProfiler::active ); // RGB
|
||||
#define LL_PROFILE_ZONE_SCOPED ZoneNamed( ___tracy_scoped_zone, LLProfiler::active ); // <FS:Beq/> Enable deferred collection through filters
|
||||
// </FS:Beq>
|
||||
|
||||
#define LL_PROFILE_ZONE_NUM( val ) ZoneValue( val )
|
||||
#define LL_PROFILE_ZONE_TEXT( text, size ) ZoneText( text, size )
|
||||
#define LL_PROFILE_ZONE_NUM( val ) ZoneValue( val );
|
||||
#define LL_PROFILE_ZONE_TEXT( text, size ) ZoneText( text, size );
|
||||
|
||||
#define LL_PROFILE_ZONE_ERR(name) LL_PROFILE_ZONE_NAMED_COLOR( name, 0XFF0000 ) // RGB yellow
|
||||
#define LL_PROFILE_ZONE_INFO(name) LL_PROFILE_ZONE_NAMED_COLOR( name, 0X00FFFF ) // RGB cyan
|
||||
#define LL_PROFILE_ZONE_WARN(name) LL_PROFILE_ZONE_NAMED_COLOR( name, 0x0FFFF00 ) // RGB red
|
||||
// <FS:Beq> Additional FS Tracy macros
|
||||
#define LL_PROFILE_ZONE_COLOR(color) ZoneNamedC( ___tracy_scoped_zone, color, LLProfiler::active )
|
||||
#define LL_PROFILE_PLOT( name, value ) TracyPlot( name, value)
|
||||
#define LL_PROFILE_PLOT_SQ( name, prev, value ) TracyPlot( name, prev );TracyPlot( name, value )
|
||||
#define LL_PROFILE_ZONE_COLOR(color) ZoneNamedC( ___tracy_scoped_zone, color, LLProfiler::active );
|
||||
#define LL_PROFILE_PLOT( name, value ) TracyPlot( name, value);
|
||||
#define LL_PROFILE_PLOT_CONFIG_SQUARE(name) TracyPlotConfig(name, tracy::PlotFormatType::Number, true, false, 0);
|
||||
#define LL_PROFILE_IS_CONNECTED TracyIsConnected
|
||||
// </FS:Beq>
|
||||
#endif
|
||||
|
|
@ -215,16 +215,17 @@ namespace LLProfiler
|
|||
// <FS:Ansariel> Additional FS Tracy macros
|
||||
#define LL_PROFILE_ZONE_COLOR(color)
|
||||
#define LL_PROFILE_PLOT( name, value )
|
||||
#define LL_PROFILE_PLOT_SQ( name, prev, value )
|
||||
#define LL_PROFILE_PLOT_CONFIG_SQUARE(name)
|
||||
#define LL_PROFILE_IS_CONNECTED
|
||||
// </FS:Ansariel>
|
||||
#endif // LL_PROFILER
|
||||
|
||||
#if LL_PROFILER_ENABLE_TRACY_OPENGL
|
||||
#define LL_PROFILE_GPU_ZONE(name) TracyGpuZone(name)
|
||||
#define LL_PROFILE_GPU_ZONEC(name,color) TracyGpuZoneC(name,color)
|
||||
#define LL_PROFILER_GPU_COLLECT TracyGpuCollect
|
||||
#define LL_PROFILER_GPU_CONTEXT TracyGpuContext
|
||||
#define LL_PROFILE_GPU_ZONE(name) TracyGpuZone(name);
|
||||
#define LL_PROFILE_GPU_ZONEC(name,color) TracyGpuZoneC(name,color);
|
||||
#define LL_PROFILER_GPU_COLLECT TracyGpuCollect;
|
||||
#define LL_PROFILER_GPU_CONTEXT TracyGpuContext;
|
||||
#define LL_PROFILER_GPU_CONTEXT_NS(name, size) TracyGpuContext;TracyGpuContextName(name,size);
|
||||
|
||||
// disable memory tracking (incompatible with GPU tracing
|
||||
#define LL_PROFILE_ALLOC(ptr, size) (void)(ptr); (void)(size);
|
||||
|
|
@ -234,12 +235,13 @@ namespace LLProfiler
|
|||
#define LL_PROFILE_GPU_ZONEC(name,color) (void)name;(void)color;
|
||||
#define LL_PROFILER_GPU_COLLECT
|
||||
#define LL_PROFILER_GPU_CONTEXT
|
||||
#define LL_PROFILER_GPU_CONTEXT_NS(name, size) (void)name;(void)size;
|
||||
|
||||
#define LL_LABEL_OBJECT_GL(type, name, length, label)
|
||||
|
||||
#if LL_PROFILER_CONFIGURATION > 1
|
||||
#define LL_PROFILE_ALLOC(ptr, size) TracyAlloc(ptr, size)
|
||||
#define LL_PROFILE_FREE(ptr) TracyFree(ptr)
|
||||
#define LL_PROFILE_ALLOC(ptr, size) TracyAlloc(ptr, size);
|
||||
#define LL_PROFILE_FREE(ptr) TracyFree(ptr);
|
||||
#else
|
||||
#define LL_PROFILE_ALLOC(ptr, size) (void)(ptr); (void)(size);
|
||||
#define LL_PROFILE_FREE(ptr) (void)(ptr);
|
||||
|
|
@ -248,7 +250,7 @@ namespace LLProfiler
|
|||
#endif
|
||||
|
||||
#if LL_PROFILER_ENABLE_RENDER_DOC
|
||||
#define LL_LABEL_OBJECT_GL(type, name, length, label) glObjectLabel(type, name, length, label)
|
||||
#define LL_LABEL_OBJECT_GL(type, name, length, label) glObjectLabel(type, name, length, label);
|
||||
#else
|
||||
#define LL_LABEL_OBJECT_GL(type, name, length, label)
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -122,6 +122,7 @@ void LLSDSerialize::serialize(const LLSD& sd, std::ostream& str, ELLSD_Serialize
|
|||
// static
|
||||
bool LLSDSerialize::deserialize(LLSD& sd, std::istream& str, llssize max_bytes)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_LLSD;
|
||||
char hdr_buf[MAX_HDR_LEN + 1] = ""; /* Flawfinder: ignore */
|
||||
bool fail_if_not_legacy = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -456,6 +456,7 @@ template<class T> std::string LLStringUtilBase<T>::sLocale;
|
|||
typedef LLStringUtilBase<char> LLStringUtil;
|
||||
typedef LLStringUtilBase<llwchar> LLWStringUtil;
|
||||
typedef std::basic_string<llwchar> LLWString;
|
||||
typedef std::basic_string_view<llwchar> LLWStringView;
|
||||
|
||||
//@ Use this where we want to disallow input in the form of "foo"
|
||||
// This is used to catch places where english text is embedded in the code
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ LLTimer* LLTimer::sTimer = NULL;
|
|||
#if 0
|
||||
void ms_sleep(U32 ms)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
// LL_PROFILE_ZONE_SCOPED;
|
||||
using TimePoint = std::chrono::steady_clock::time_point;
|
||||
auto resume_time = TimePoint::clock::now() + std::chrono::milliseconds(ms);
|
||||
while (TimePoint::clock::now() < resume_time)
|
||||
|
|
|
|||
|
|
@ -213,6 +213,7 @@ void HttpPolicy::retryOp(const HttpOpRequest::ptr_t &op)
|
|||
//
|
||||
HttpService::ELoopSpeed HttpPolicy::processReadyQueue()
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;// <FS:Beq/> missing http trace
|
||||
const HttpTime now(totalTime());
|
||||
HttpService::ELoopSpeed result(HttpService::REQUEST_SLEEP);
|
||||
HttpLibcurl & transport(mService->getTransport());
|
||||
|
|
|
|||
|
|
@ -365,6 +365,7 @@ public:
|
|||
|
||||
BOOL callHandlerFunc(LLMessageSystem *msgsystem) const
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
|
||||
if (mHandlerFunc)
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -541,6 +541,11 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
|
|||
llassert( mCurrentRMessageTemplate);
|
||||
llassert( !mCurrentRMessageData );
|
||||
delete mCurrentRMessageData; // just to make sure
|
||||
// <FS:Beq> storage for Tracy tag
|
||||
#ifdef TRACY_ENABLE
|
||||
static char msgstr[36];
|
||||
#endif
|
||||
// </FS:Beq>
|
||||
|
||||
// The offset tells us how may bytes to skip after the end of the
|
||||
// message name.
|
||||
|
|
@ -556,6 +561,7 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
|
|||
iter != mCurrentRMessageTemplate->mMemberBlocks.end();
|
||||
++iter)
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_NETWORK("BuildFromTemplate");
|
||||
LLMessageBlock* mbci = *iter;
|
||||
U8 repeat_number;
|
||||
S32 i;
|
||||
|
|
@ -598,6 +604,13 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
|
|||
}
|
||||
|
||||
LLMsgBlkData* cur_data_block = NULL;
|
||||
// <FS:Beq> Tracy Message processing
|
||||
LL_DEBUGS("LLMessage") << "Processing " << mbci->mName << " with " << repeat_number << " repetitions" << LL_ENDL;
|
||||
#ifdef TRACY_ENABLE
|
||||
strncpy(msgstr, mbci->mName, 35);
|
||||
LL_PROFILE_ZONE_TEXT(msgstr, 35);
|
||||
#endif
|
||||
// </FS:Beq>
|
||||
|
||||
// now loop through the block
|
||||
for (i = 0; i < repeat_number; i++)
|
||||
|
|
@ -622,6 +635,7 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
|
|||
mbci->mMemberVariables.begin();
|
||||
iter != mbci->mMemberVariables.end(); iter++)
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_NETWORK("AddVariables");
|
||||
const LLMessageVariable& mvci = **iter;
|
||||
|
||||
// ok, build out the variables
|
||||
|
|
@ -704,6 +718,12 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
|
|||
}
|
||||
|
||||
{
|
||||
// <FS:Beq> Tracy Message processing
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_NETWORK("ProcessMessage");
|
||||
#ifdef TRACY_ENABLE
|
||||
LL_PROFILE_ZONE_TEXT(msgstr, 35);
|
||||
#endif
|
||||
// </FS:Beq>
|
||||
static LLTimer decode_timer;
|
||||
|
||||
if(LLMessageReader::getTimeDecodes() || gMessageSystem->getTimingCallback())
|
||||
|
|
@ -742,7 +762,7 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
|
|||
|
||||
if(decode_time > LLMessageReader::getTimeDecodesSpamThreshold())
|
||||
{
|
||||
LL_DEBUGS() << "--------- Message " << mCurrentRMessageTemplate->mName << " decode took " << decode_time << " seconds. (" <<
|
||||
LL_DEBUGS("LLMessage") << "--------- Message " << mCurrentRMessageTemplate->mName << " decode took " << decode_time << " seconds. (" <<
|
||||
mCurrentRMessageTemplate->mMaxDecodeTimePerMsg << " max, " <<
|
||||
(mCurrentRMessageTemplate->mTotalDecodeTime / mCurrentRMessageTemplate->mTotalDecoded) << " avg)" << LL_ENDL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2547,6 +2547,7 @@ void LLImageGLThread::run()
|
|||
// WorkQueue, likewise cleanup afterwards.
|
||||
mWindow->makeContextCurrent(mContext);
|
||||
gGL.init(false);
|
||||
LL_PROFILER_GPU_CONTEXT_NS("LLImageGL Context", 17);
|
||||
LL::ThreadPool::run();
|
||||
gGL.shutdown();
|
||||
mWindow->destroySharedContext(mContext);
|
||||
|
|
|
|||
|
|
@ -237,6 +237,7 @@ public:
|
|||
{
|
||||
mWindow->makeContextCurrent(mContext);
|
||||
gGL.init(false);
|
||||
LL_PROFILER_GPU_CONTEXT_NS("LLGLWorker Context", 18);
|
||||
mQueue->runUntilClose();
|
||||
gGL.shutdown();
|
||||
mWindow->destroySharedContext(mContext);
|
||||
|
|
|
|||
|
|
@ -1014,6 +1014,7 @@ LLBoundListener LLNotificationChannelBase::connectChangedImpl(const LLEventListe
|
|||
|
||||
LLBoundListener LLNotificationChannelBase::connectAtFrontChangedImpl(const LLEventListener& slot)
|
||||
{
|
||||
LLMutexLock lock(&mItemsMutex); // <FS:Beq/> Guard against against unlocked access to mItems
|
||||
for (LLNotificationSet::iterator it = mItems.begin(); it != mItems.end(); ++it)
|
||||
{
|
||||
slot(LLSD().with("sigtype", "load").with("id", (*it)->id()));
|
||||
|
|
@ -1052,10 +1053,17 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload)
|
|||
bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPtr pNotification)
|
||||
{
|
||||
std::string cmd = payload["sigtype"];
|
||||
LLNotificationSet::iterator foundItem = mItems.find(pNotification);
|
||||
bool wasFound = (foundItem != mItems.end());
|
||||
// <FS:Beq> Guard against unlocked access to mItems
|
||||
// LLNotificationSet::iterator foundItem = mItems.find(pNotification);
|
||||
// bool wasFound = (foundItem != mItems.end());
|
||||
bool wasFound = false;
|
||||
{
|
||||
LLMutexLock lock(&mItemsMutex);
|
||||
LLNotificationSet::iterator foundItem = mItems.find(pNotification);
|
||||
wasFound = (foundItem != mItems.end());
|
||||
}
|
||||
// </FS:Beq>
|
||||
bool passesFilter = mFilter ? mFilter(pNotification) : true;
|
||||
|
||||
// first, we offer the result of the filter test to the simple
|
||||
// signals for pass/fail. One of these is guaranteed to be called.
|
||||
// If either signal returns true, the change processing is NOT performed
|
||||
|
|
@ -1084,6 +1092,7 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
|
|||
assert(!wasFound);
|
||||
if (passesFilter)
|
||||
{
|
||||
LLMutexLock lock(&mItemsMutex); // <FS:Beq/> Guard against unlocked access to mItems
|
||||
// not in our list, add it and say so
|
||||
mItems.insert(pNotification);
|
||||
onLoad(pNotification);
|
||||
|
|
@ -1107,6 +1116,7 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
|
|||
}
|
||||
else
|
||||
{
|
||||
LLMutexLock lock(&mItemsMutex); // <FS:Beq/> Guard against unlocked access to mItems
|
||||
// not in our list, add it and say so
|
||||
mItems.insert(pNotification);
|
||||
onChange(pNotification);
|
||||
|
|
@ -1120,6 +1130,7 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
|
|||
{
|
||||
if (wasFound)
|
||||
{
|
||||
LLMutexLock lock(&mItemsMutex); // <FS:Beq/> Guard against unlocked access to mItems
|
||||
// it already existed, so this is a delete
|
||||
mItems.erase(pNotification);
|
||||
onChange(pNotification);
|
||||
|
|
@ -1138,6 +1149,7 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
|
|||
assert(!wasFound);
|
||||
if (passesFilter)
|
||||
{
|
||||
LLMutexLock lock(&mItemsMutex); // <FS:Beq/> Guard against unlocked access to mItems
|
||||
// not in our list, add it and say so
|
||||
mItems.insert(pNotification);
|
||||
onAdd(pNotification);
|
||||
|
|
@ -1149,6 +1161,7 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
|
|||
// if we have it in our list, pass on the delete, then delete it, else do nothing
|
||||
if (wasFound)
|
||||
{
|
||||
LLMutexLock lock(&mItemsMutex); // <FS:Beq/> Guard against unlocked access to mItems
|
||||
onDelete(pNotification);
|
||||
abortProcessing = mChanged(payload);
|
||||
mItems.erase(pNotification);
|
||||
|
|
@ -1714,6 +1727,7 @@ void LLNotifications::add(const LLNotificationPtr pNotif)
|
|||
if (pNotif == NULL) return;
|
||||
|
||||
// first see if we already have it -- if so, that's a problem
|
||||
LLMutexLock lock(&mItemsMutex); // <FS:Beq/> Guard against unlocked acceess to mItems
|
||||
LLNotificationSet::iterator it=mItems.find(pNotif);
|
||||
if (it != mItems.end())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1686,6 +1686,7 @@ const S32 max_format = (S32)num_formats - 1;
|
|||
close();
|
||||
return FALSE;
|
||||
}
|
||||
//LL_PROFILER_GPU_CONTEXT; <FS:Beq/> TODO(Beq) review this
|
||||
|
||||
LL_PROFILER_GPU_CONTEXT
|
||||
|
||||
|
|
@ -1720,7 +1721,7 @@ const S32 max_format = (S32)num_formats - 1;
|
|||
swapBuffers();
|
||||
}
|
||||
|
||||
LL_PROFILER_GPU_CONTEXT;
|
||||
LL_PROFILER_GPU_CONTEXT_NS("MainGL Context", 14);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -1890,7 +1891,7 @@ void* LLWindowWin32::createSharedContext()
|
|||
void LLWindowWin32::makeContextCurrent(void* contextPtr)
|
||||
{
|
||||
wglMakeCurrent(mhDC, (HGLRC) contextPtr);
|
||||
LL_PROFILER_GPU_CONTEXT;
|
||||
|
||||
}
|
||||
|
||||
void LLWindowWin32::destroySharedContext(void* contextPtr)
|
||||
|
|
|
|||
|
|
@ -138,6 +138,7 @@ set(viewer_SOURCE_FILES
|
|||
fsfloatervolumecontrols.cpp
|
||||
fsfloatervramusage.cpp
|
||||
fsfloaterwearablefavorites.cpp
|
||||
fsfloaterwhitelisthelper.cpp
|
||||
fskeywords.cpp
|
||||
fslslbridge.cpp
|
||||
fslslbridgerequest.cpp
|
||||
|
|
@ -166,6 +167,7 @@ set(viewer_SOURCE_FILES
|
|||
fsscriptlibrary.cpp
|
||||
fsscrolllistctrl.cpp
|
||||
fsslurlcommand.cpp
|
||||
fsworldmapmessage.cpp
|
||||
groupchatlistener.cpp
|
||||
lggbeamcolormapfloater.cpp
|
||||
lggbeammapfloater.cpp
|
||||
|
|
@ -178,8 +180,6 @@ set(viewer_SOURCE_FILES
|
|||
llpanelopenregionsettings.cpp
|
||||
# <FS:Ansariel> [Legacy Bake]
|
||||
llagentwearablesfetch.cpp
|
||||
|
||||
# local mesh
|
||||
vjlocalmesh.cpp
|
||||
vjfloaterlocalmesh.cpp
|
||||
vjlocalmeshimportdae.cpp
|
||||
|
|
@ -931,6 +931,7 @@ set(viewer_HEADER_FILES
|
|||
fsfloatervolumecontrols.h
|
||||
fsfloatervramusage.h
|
||||
fsfloaterwearablefavorites.h
|
||||
fsfloaterwhitelisthelper.h
|
||||
fsgridhandler.h
|
||||
fskeywords.h
|
||||
fslslbridge.h
|
||||
|
|
@ -961,6 +962,7 @@ set(viewer_HEADER_FILES
|
|||
fsscrolllistctrl.h
|
||||
fsslurl.h
|
||||
fsslurlcommand.h
|
||||
fsworldmapmessage.h
|
||||
groupchatlistener.h
|
||||
llaccountingcost.h
|
||||
lggbeamcolormapfloater.h
|
||||
|
|
@ -973,8 +975,6 @@ set(viewer_HEADER_FILES
|
|||
llfloaterflickr.h
|
||||
# <FS:Ansariel> [Legacy Bake]
|
||||
llagentwearablesfetch.h
|
||||
|
||||
# local mesh
|
||||
vjlocalmesh.h
|
||||
vjfloaterlocalmesh.h
|
||||
vjlocalmeshimportdae.h
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -153,6 +153,17 @@
|
|||
<key>Value</key>
|
||||
<string>http://phoenixviewer.com/app/fsdata/grids.xml</string>
|
||||
</map>
|
||||
<key>FSGridBuilderURL</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Fetch an html page of grids from this URL.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>https://phoenixviewer.com/app/fsdata/fs_grid_builder.html</string>
|
||||
</map>
|
||||
<key>LastConnectedGrid</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -13750,6 +13761,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FSUseLegacyUnsupportedHardwareChecks</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>If enabled, Firestorm will perform utterly pointless checks that probably made sense in 2004.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSUseStandaloneGroupFloater</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -505,7 +505,7 @@ bool FSCommon::isFilterEditorKeyCombo(KEY key, MASK mask)
|
|||
|
||||
LLUUID FSCommon::getGroupForRezzing()
|
||||
{
|
||||
LLUUID group_id = gAgent.getGroupID();
|
||||
LLUUID group_id{ gAgent.getGroupID() };
|
||||
LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
|
||||
|
||||
if (parcel && gSavedSettings.getBOOL("RezUnderLandGroup"))
|
||||
|
|
@ -523,12 +523,12 @@ LLUUID FSCommon::getGroupForRezzing()
|
|||
return group_id;
|
||||
}
|
||||
|
||||
void FSCommon::updateUsedEmojis(LLWString text)
|
||||
void FSCommon::updateUsedEmojis(LLWStringView text)
|
||||
{
|
||||
LLEmojiDictionary* dictionary = LLEmojiDictionary::getInstance();
|
||||
|
||||
bool emojiSent = false;
|
||||
for (llwchar& c : text)
|
||||
bool emojiSent{ false };
|
||||
for (const llwchar& c : text)
|
||||
{
|
||||
if (dictionary->isEmoji(c))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ namespace FSCommon
|
|||
|
||||
LLUUID getGroupForRezzing();
|
||||
|
||||
void updateUsedEmojis(LLWString text);
|
||||
void updateUsedEmojis(LLWStringView text);
|
||||
};
|
||||
|
||||
#endif // FS_COMMON_H
|
||||
|
|
|
|||
|
|
@ -313,6 +313,7 @@ void FSFloaterWearableFavorites::onFilterEdit(const std::string& search_string)
|
|||
{
|
||||
mItemsList->setFilterSubString(search_string, true);
|
||||
mItemsList->setNoItemsCommentText(getString("empty_list"));
|
||||
mItemsList->rearrange();
|
||||
}
|
||||
|
||||
void FSFloaterWearableFavorites::onOptionsMenuItemClicked(const LLSD& userdata)
|
||||
|
|
|
|||
|
|
@ -61,6 +61,11 @@ public:
|
|||
return mDADSignal.connect(cb);
|
||||
}
|
||||
|
||||
void rearrange()
|
||||
{
|
||||
rearrangeItems();
|
||||
}
|
||||
|
||||
protected:
|
||||
friend class LLUICtrlFactory;
|
||||
FSWearableFavoritesItemsList(const Params&);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,87 @@
|
|||
/**
|
||||
* @file fsfloaterwhitelisthelper.cpp
|
||||
* @brief Helper tool implementation to display paths to whitelist in antivirus tools
|
||||
*
|
||||
* $LicenseInfo:firstyear=2024&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (C) 2024, The Phoenix Firestorm Project, Inc.
|
||||
*
|
||||
* 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 "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "fsfloaterwhitelisthelper.h"
|
||||
#include "lltexteditor.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "lldir.h"
|
||||
|
||||
|
||||
FSFloaterWhiteListHelper::FSFloaterWhiteListHelper(const LLSD& key) : LLFloater(key)
|
||||
{
|
||||
}
|
||||
|
||||
BOOL FSFloaterWhiteListHelper::postBuild()
|
||||
{
|
||||
populateWhitelistInfo();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void FSFloaterWhiteListHelper::populateWhitelistInfo()
|
||||
{
|
||||
// Hopefully we can trash this bit soon in favor of webRTC
|
||||
#if LL_WINDOWS
|
||||
// On windows use exe (not work or RO) directory
|
||||
std::string voiceexe_path = gDirUtilp->getExecutableDir();
|
||||
gDirUtilp->append(voiceexe_path, "SLVoice.exe");
|
||||
#elif LL_DARWIN
|
||||
// On MAC use resource directory
|
||||
std::string voiceexe_path = gDirUtilp->getAppRODataDir();
|
||||
gDirUtilp->append(voiceexe_path, "SLVoice");
|
||||
#else
|
||||
std::string voiceexe_path = gDirUtilp->getExecutableDir();
|
||||
bool usingWine = gSavedSettings.getBOOL("FSLinuxEnableWin64VoiceProxy");
|
||||
if (!usingWine)
|
||||
{
|
||||
gDirUtilp->append(voiceexe_path, "SLVoice"); // native version
|
||||
}
|
||||
else
|
||||
{
|
||||
gDirUtilp->append(voiceexe_path, "win64/SLVoice.exe"); // use bundled win64 version
|
||||
}
|
||||
#endif
|
||||
|
||||
const std::string slpluginexe_path = gDirUtilp->getLLPluginLauncher();
|
||||
|
||||
std::string whitelist_folder_info =
|
||||
gDirUtilp->getExecutableDir() + "\n" // Executable Dir
|
||||
+ gDirUtilp->getOSUserAppDir() + "\n" // Top-level User Data Dir
|
||||
+ gDirUtilp->getCacheDir(); // "Cache Dir
|
||||
|
||||
std::string whitelist_exe_info =
|
||||
gDirUtilp->getExecutableFilename() + "\n" // Viewer Binary
|
||||
+ gDirUtilp->getExecutablePathAndName() + "\n" // Viewer Binary full path
|
||||
+ gDirUtilp->getBaseFileName(voiceexe_path, false) + "\n" // " Voice Binary"
|
||||
+ voiceexe_path + "\n" // slvoice full path
|
||||
+ gDirUtilp->getBaseFileName(slpluginexe_path, false) + "\n" // SLPlugin Launcher Binary
|
||||
+ slpluginexe_path + "\n"; // SLPlugin Launcher full path
|
||||
|
||||
getChild<LLTextEditor>("whitelist_folders_editor")->setText(whitelist_folder_info);
|
||||
getChild<LLTextEditor>("whitelist_exes_editor")->setText(whitelist_exe_info);
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
/**
|
||||
* @file fsfloaterwhitelisthelper.h
|
||||
* @brief Helper tool header file to display paths to whitelist in antivirus tools
|
||||
*
|
||||
* $LicenseInfo:firstyear=2024&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (C) 2024, The Phoenix Firestorm Project, Inc.
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#ifndef FSFLOATERWHITELISTHELPER_H
|
||||
#define FSFLOATERWHITELISTHELPER_H
|
||||
|
||||
#include "llfloater.h"
|
||||
|
||||
class FSFloaterWhiteListHelper : public LLFloater
|
||||
{
|
||||
public:
|
||||
explicit FSFloaterWhiteListHelper(const LLSD& key);
|
||||
~FSFloaterWhiteListHelper() final = default;
|
||||
|
||||
BOOL postBuild() override final;
|
||||
|
||||
private:
|
||||
void populateWhitelistInfo();
|
||||
};
|
||||
#endif // FSFLOATERWHITELISTHELPER_H
|
||||
|
|
@ -250,6 +250,12 @@ FSPanelLogin::FSPanelLogin(const LLRect &rect,
|
|||
LLTextBox* grid_mgr_help_text = getChild<LLTextBox>("grid_login_text");
|
||||
grid_mgr_help_text->setClickedCallback(onClickGridMgrHelp, NULL);
|
||||
|
||||
#ifdef OPENSIM
|
||||
LLTextBox* grid_builder_text = getChild<LLTextBox>("grid_builder_text");
|
||||
grid_builder_text->setClickedCallback(onClickGridBuilder, NULL);
|
||||
grid_builder_text->setVisible(true);
|
||||
#endif
|
||||
|
||||
LLSLURL start_slurl(LLStartUp::getStartSLURL());
|
||||
// The StartSLURL might have been set either by an explicit command-line
|
||||
// argument (CmdLineLoginLocation) or by default.
|
||||
|
|
@ -1356,6 +1362,12 @@ void FSPanelLogin::onClickGridMgrHelp(void*)
|
|||
}
|
||||
}
|
||||
|
||||
//static
|
||||
void FSPanelLogin::onClickGridBuilder(void*)
|
||||
{
|
||||
LLWeb::loadURLInternal(gSavedSettings.getString("FSGridBuilderURL"));
|
||||
}
|
||||
|
||||
void FSPanelLogin::onSelectUser()
|
||||
{
|
||||
LL_INFOS("AppInit") << "onSelectUser()" << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -111,6 +111,7 @@ private:
|
|||
static void onClickRemove(void*);
|
||||
static void onRemoveCallback(const LLSD& notification, const LLSD& response);
|
||||
static void onClickGridMgrHelp(void*);
|
||||
static void onClickGridBuilder(void*);
|
||||
static std::string credentialName();
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -90,13 +90,15 @@ public:
|
|||
//=============================================================================
|
||||
|
||||
FSRadar::FSRadar() :
|
||||
mRadarAlertRequest(false),
|
||||
mRadarFrameCount(0),
|
||||
mRadarLastBulkOffsetRequestTime(0),
|
||||
mRadarLastRequestTime(0.f),
|
||||
mShowUsernamesCallbackConnection(),
|
||||
mNameFormatCallbackConnection(),
|
||||
mAgeAlertCallbackConnection()
|
||||
mRadarAlertRequest(false),
|
||||
mRadarFrameCount(0),
|
||||
mRadarLastBulkOffsetRequestTime(0),
|
||||
mRadarLastRequestTime(0.f),
|
||||
mShowUsernamesCallbackConnection(),
|
||||
mNameFormatCallbackConnection(),
|
||||
mAgeAlertCallbackConnection(),
|
||||
mRegionCapabilitiesReceivedCallbackConnection(),
|
||||
mRegionChangedCallbackConnection()
|
||||
{
|
||||
// Use the callback from LLAvatarNameCache here or we might update the names too early!
|
||||
LLAvatarNameCache::getInstance()->addUseDisplayNamesCallback(boost::bind(&FSRadar::updateNames, this));
|
||||
|
|
@ -104,10 +106,18 @@ FSRadar::FSRadar() :
|
|||
|
||||
mNameFormatCallbackConnection = gSavedSettings.getControl("RadarNameFormat")->getSignal()->connect(boost::bind(&FSRadar::updateNames, this));
|
||||
mAgeAlertCallbackConnection = gSavedSettings.getControl("RadarAvatarAgeAlertValue")->getSignal()->connect(boost::bind(&FSRadar::updateAgeAlertCheck, this));
|
||||
|
||||
mRegionChangedCallbackConnection = gAgent.addRegionChangedCallback([this]() { onRegionChanged(); });
|
||||
}
|
||||
|
||||
FSRadar::~FSRadar()
|
||||
{
|
||||
gAgent.removeRegionChangedCallback(mRegionChangedCallbackConnection);
|
||||
if (mRegionCapabilitiesReceivedCallbackConnection.connected())
|
||||
{
|
||||
mRegionCapabilitiesReceivedCallbackConnection.disconnect();
|
||||
}
|
||||
|
||||
if (mShowUsernamesCallbackConnection.connected())
|
||||
{
|
||||
mShowUsernamesCallbackConnection.disconnect();
|
||||
|
|
@ -1040,8 +1050,35 @@ void FSRadar::updateAgeAlertCheck()
|
|||
|
||||
void FSRadar::updateNotes(const LLUUID& avatar_id, std::string_view notes)
|
||||
{
|
||||
if (auto entry = getEntry(avatar_id); entry)
|
||||
if (auto entry = getEntry(avatar_id))
|
||||
{
|
||||
entry->setNotes(notes);
|
||||
}
|
||||
}
|
||||
|
||||
void FSRadar::onRegionChanged()
|
||||
{
|
||||
if (mRegionCapabilitiesReceivedCallbackConnection.connected())
|
||||
{
|
||||
mRegionCapabilitiesReceivedCallbackConnection.disconnect();
|
||||
}
|
||||
|
||||
if (auto region = gAgent.getRegion())
|
||||
{
|
||||
if (region->capabilitiesReceived())
|
||||
{
|
||||
for (auto& [id, entry] : mEntryList)
|
||||
entry->requestProperties();
|
||||
}
|
||||
else
|
||||
{
|
||||
mRegionCapabilitiesReceivedCallbackConnection = region->setCapabilitiesReceivedCallback(
|
||||
[this](const LLUUID&, LLViewerRegion*)
|
||||
{
|
||||
mRegionCapabilitiesReceivedCallbackConnection.disconnect();
|
||||
for (auto& [id, entry] : mEntryList)
|
||||
entry->requestProperties();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,6 +119,8 @@ private:
|
|||
void radarAlertMsg(const LLUUID& agent_id, const LLAvatarName& av_name, std::string_view postMsg);
|
||||
void updateAgeAlertCheck();
|
||||
|
||||
void onRegionChanged();
|
||||
|
||||
std::unique_ptr<Updater> mRadarListUpdater;
|
||||
|
||||
struct RadarFields
|
||||
|
|
@ -150,6 +152,9 @@ private:
|
|||
boost::signals2::connection mShowUsernamesCallbackConnection;
|
||||
boost::signals2::connection mNameFormatCallbackConnection;
|
||||
boost::signals2::connection mAgeAlertCallbackConnection;
|
||||
|
||||
boost::signals2::connection mRegionCapabilitiesReceivedCallbackConnection;
|
||||
boost::signals2::connection mRegionChangedCallbackConnection;
|
||||
};
|
||||
|
||||
#endif // FS_RADAR_H
|
||||
|
|
|
|||
|
|
@ -55,85 +55,10 @@ FSRadarEntry::FSRadarEntry(const LLUUID& avid)
|
|||
mNotes(LLStringUtil::null),
|
||||
mAlertAge(false),
|
||||
mAgeAlertPerformed(false),
|
||||
mAvatarNameCallbackConnection(),
|
||||
mRegionCapabilitiesReceivedCallbackConnection(),
|
||||
mRegionChangedCallbackConnection()
|
||||
mPropertiesRequested(false),
|
||||
mAvatarNameCallbackConnection()
|
||||
{
|
||||
if (mID.notNull())
|
||||
{
|
||||
// NOTE: typically we request these once on creation to avoid excess traffic/processing.
|
||||
//This means updates to these properties won't typically be seen while target is in nearby range.
|
||||
LLAvatarPropertiesProcessor* processor = LLAvatarPropertiesProcessor::getInstance();
|
||||
processor->addObserver(mID, this);
|
||||
|
||||
if (auto region = gAgent.getRegion(); region)
|
||||
{
|
||||
if (region->capabilitiesReceived())
|
||||
{
|
||||
if (LLGridManager::instance().isInSecondLife() || region->isCapabilityAvailable(CAPNAME))
|
||||
{
|
||||
processor->sendAvatarPropertiesRequest(mID);
|
||||
}
|
||||
else
|
||||
{
|
||||
processor->sendAvatarLegacyPropertiesRequest(mID);
|
||||
processor->sendAvatarNotesRequest(mID);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
auto capsReceivedCb = [this](const LLUUID&, LLViewerRegion* reg)
|
||||
{
|
||||
if (mRegionCapabilitiesReceivedCallbackConnection.connected())
|
||||
{
|
||||
mRegionCapabilitiesReceivedCallbackConnection.disconnect();
|
||||
}
|
||||
gAgent.removeRegionChangedCallback(mRegionChangedCallbackConnection);
|
||||
if (LLGridManager::instance().isInSecondLife() || (reg && reg->isCapabilityAvailable(CAPNAME)))
|
||||
{
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(mID);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendAvatarLegacyPropertiesRequest(mID);
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendAvatarNotesRequest(mID);
|
||||
}
|
||||
};
|
||||
|
||||
mRegionChangedCallbackConnection = gAgent.addRegionChangedCallback([this, capsReceivedCb]()
|
||||
{
|
||||
if (mRegionCapabilitiesReceivedCallbackConnection.connected())
|
||||
{
|
||||
mRegionCapabilitiesReceivedCallbackConnection.disconnect();
|
||||
}
|
||||
|
||||
if (auto newregion = gAgent.getRegion(); newregion)
|
||||
{
|
||||
if (newregion->capabilitiesReceived())
|
||||
{
|
||||
gAgent.removeRegionChangedCallback(mRegionChangedCallbackConnection);
|
||||
if (LLGridManager::instance().isInSecondLife() || newregion->isCapabilityAvailable(CAPNAME))
|
||||
{
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(mID);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendAvatarLegacyPropertiesRequest(mID);
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendAvatarNotesRequest(mID);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mRegionCapabilitiesReceivedCallbackConnection = newregion->setCapabilitiesReceivedCallback(capsReceivedCb);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mRegionCapabilitiesReceivedCallbackConnection = region->setCapabilitiesReceivedCallback(capsReceivedCb);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
requestProperties();
|
||||
updateName();
|
||||
}
|
||||
|
||||
|
|
@ -147,11 +72,34 @@ FSRadarEntry::~FSRadarEntry()
|
|||
{
|
||||
mAvatarNameCallbackConnection.disconnect();
|
||||
}
|
||||
if (mRegionCapabilitiesReceivedCallbackConnection.connected())
|
||||
}
|
||||
|
||||
void FSRadarEntry::requestProperties()
|
||||
{
|
||||
if (!mPropertiesRequested && mID.notNull())
|
||||
{
|
||||
mRegionCapabilitiesReceivedCallbackConnection.disconnect();
|
||||
// NOTE: typically we request these once on creation to avoid excess traffic/processing.
|
||||
//This means updates to these properties won't typically be seen while target is in nearby range.
|
||||
LLAvatarPropertiesProcessor* processor = LLAvatarPropertiesProcessor::getInstance();
|
||||
processor->addObserver(mID, this);
|
||||
|
||||
if (auto region = gAgent.getRegion())
|
||||
{
|
||||
if (region->capabilitiesReceived())
|
||||
{
|
||||
if (LLGridManager::instance().isInSecondLife() || region->isCapabilityAvailable(CAPNAME))
|
||||
{
|
||||
processor->sendAvatarPropertiesRequest(mID);
|
||||
}
|
||||
else
|
||||
{
|
||||
processor->sendAvatarLegacyPropertiesRequest(mID);
|
||||
processor->sendAvatarNotesRequest(mID);
|
||||
}
|
||||
mPropertiesRequested = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
gAgent.removeRegionChangedCallback(mRegionChangedCallbackConnection);
|
||||
}
|
||||
|
||||
void FSRadarEntry::updateName()
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ public:
|
|||
private:
|
||||
void updateName();
|
||||
void onAvatarNameCache(const LLUUID& av_id, const LLAvatarName& av_name);
|
||||
void requestProperties();
|
||||
void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
LLUUID mID;
|
||||
|
|
@ -87,10 +88,9 @@ private:
|
|||
bool mIgnore;
|
||||
bool mAlertAge;
|
||||
bool mAgeAlertPerformed;
|
||||
bool mPropertiesRequested;
|
||||
|
||||
LLAvatarNameCache::callback_connection_t mAvatarNameCallbackConnection;
|
||||
boost::signals2::connection mRegionCapabilitiesReceivedCallbackConnection;
|
||||
boost::signals2::connection mRegionChangedCallbackConnection;
|
||||
};
|
||||
|
||||
#endif // FS_RADARENTRY_H
|
||||
|
|
|
|||
|
|
@ -0,0 +1,214 @@
|
|||
/**
|
||||
* @file fsworldmapmessage.cpp
|
||||
* @brief FS specific extensions to world map handling for OpenSim
|
||||
*
|
||||
* $LicenseInfo:firstyear=2024&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (C) 2024, The Phoenix Firestorm Project, Inc.
|
||||
*
|
||||
* 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$
|
||||
*
|
||||
*/
|
||||
// potential workaround for hop://grid:port/Partial/x/y/z resolution
|
||||
// 2024.04.30 humbletim
|
||||
|
||||
// notes:
|
||||
// - exact MapNameRequests are sent flagless here (not using LAYER_FLAG)
|
||||
// - this is to avoid triggering OpenSim code paths that modify result names
|
||||
// - only affects LLWorldMapMessage->sendNamedRegionRequest(name, callback, ...)
|
||||
// - in particular where a grid hosts overlapping names, hop Region matching may work better
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#ifdef OPENSIM
|
||||
#include "fsworldmapmessage.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llworldmap.h" // grid_to_region_handle
|
||||
#include "fsgridhandler.h"
|
||||
#include "llworldmapmessage.h"
|
||||
#include "message.h"
|
||||
#include <regex>
|
||||
|
||||
#define htxhop_log(format, ...) LL_DEBUGS("GridManager") << llformat(format, __VA_ARGS__) << LL_ENDL;
|
||||
|
||||
namespace hypergrid
|
||||
{
|
||||
static inline std::string extract_region(const std::string& s)
|
||||
{
|
||||
static auto const& patterns = {
|
||||
std::regex { R"(/ ([^/:=]+)$)" }, // TODO: figure out where the spec lives for hop "slash space" embedding...
|
||||
std::regex { R"(([^/:=]+)$)" }, // TODO: figure out where the spec lives for hop "grid:port:region" embedding...
|
||||
};
|
||||
std::smatch match_results;
|
||||
std::string ls{ s };
|
||||
LLStringUtil::toLower(ls);
|
||||
for (const auto& pattern : patterns)
|
||||
{
|
||||
if (std::regex_search(ls, match_results, pattern))
|
||||
{
|
||||
return match_results[1].str();
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
// helper to encapsulate Region Map Block responses
|
||||
struct MapBlock
|
||||
{
|
||||
S32 index{};
|
||||
U16 x_regions{}, y_regions{}, x_size{ REGION_WIDTH_UNITS }, y_size{ REGION_WIDTH_UNITS };
|
||||
std::string name{};
|
||||
U8 accesscode{};
|
||||
U32 region_flags{};
|
||||
LLUUID image_id{};
|
||||
|
||||
inline U32 x_world() const { return (U32)(x_regions)*REGION_WIDTH_UNITS; }
|
||||
inline U32 y_world() const { return (U32)(y_regions)*REGION_WIDTH_UNITS; }
|
||||
inline U64 region_handle() const { return grid_to_region_handle(x_regions, y_regions); }
|
||||
|
||||
// see: LLWorldMapMessage::processMapBlockReply
|
||||
MapBlock(LLMessageSystem* msg, S32 block)
|
||||
: index(block)
|
||||
{
|
||||
msg->getU16Fast(_PREHASH_Data, _PREHASH_X, x_regions, block);
|
||||
msg->getU16Fast(_PREHASH_Data, _PREHASH_Y, y_regions, block);
|
||||
msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
|
||||
msg->getU8Fast(_PREHASH_Data, _PREHASH_Access, accesscode, block);
|
||||
msg->getU32Fast(_PREHASH_Data, _PREHASH_RegionFlags, region_flags, block);
|
||||
// msg->getU8Fast(_PREHASH_Data, _PREHASH_WaterHeight, water_height, block);
|
||||
// msg->getU8Fast(_PREHASH_Data, _PREHASH_Agents, agents, block);
|
||||
msg->getUUIDFast(_PREHASH_Data, _PREHASH_MapImageID, image_id, block);
|
||||
// <FS:CR> Aurora Sim
|
||||
if (msg->getNumberOfBlocksFast(_PREHASH_Size) > 0)
|
||||
{
|
||||
msg->getU16Fast(_PREHASH_Size, _PREHASH_SizeX, x_size, block);
|
||||
msg->getU16Fast(_PREHASH_Size, _PREHASH_SizeY, y_size, block);
|
||||
}
|
||||
if (x_size == 0 || (x_size % 16) != 0 || (y_size % 16) != 0)
|
||||
{
|
||||
x_size = 256;
|
||||
y_size = 256;
|
||||
}
|
||||
// </FS:CR> Aurora Sim
|
||||
}
|
||||
};
|
||||
|
||||
constexpr U32 EXACT_FLAG = 0x00000000;
|
||||
constexpr U32 LAYER_FLAG = 0x00000002;
|
||||
|
||||
// see: LLWorldMapMessage::sendNamedRegionRequest
|
||||
static void sendMapNameRequest(const std::string& region_name, U32 flags)
|
||||
{
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_MapNameRequest);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgentID);
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgentSessionID);
|
||||
msg->addU32Fast(_PREHASH_Flags, flags);
|
||||
msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
|
||||
msg->addBOOLFast(_PREHASH_Godlike, false); // Filled in on sim
|
||||
msg->nextBlockFast(_PREHASH_NameData);
|
||||
msg->addStringFast(_PREHASH_Name, region_name);
|
||||
gAgent.sendReliableMessage();
|
||||
}
|
||||
|
||||
struct AdoptedRegionNameQuery
|
||||
{
|
||||
std::string key{};
|
||||
std::string region_name{};
|
||||
hypergrid::url_callback_t arbitrary_callback;
|
||||
std::string arbitrary_slurl{};
|
||||
bool arbitrary_teleport{ false };
|
||||
};
|
||||
|
||||
// map extracted region names => pending query entries
|
||||
static std::map<std::string, AdoptedRegionNameQuery> region_name_queries;
|
||||
}
|
||||
|
||||
bool hypergrid::sendExactNamedRegionRequest(const std::string& region_name, const url_callback_t& callback, const std::string& callback_url, bool teleport)
|
||||
{
|
||||
if (!LLGridManager::instance().isInOpenSim() || !callback)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
auto key = extract_region(region_name);
|
||||
if (key.empty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
region_name_queries.try_emplace(key, AdoptedRegionNameQuery{ key, region_name, callback, callback_url, teleport });
|
||||
htxhop_log("Send Region Name '%s' (key: %s)", region_name.c_str(), key.c_str());
|
||||
sendMapNameRequest(region_name, EXACT_FLAG);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool hypergrid::processExactNamedRegionResponse(LLMessageSystem* msg, U32 agent_flags)
|
||||
{
|
||||
if (!LLGridManager::instance().isInOpenSim() || !msg || agent_flags & LAYER_FLAG)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// NOTE: we assume only agent_flags have been read from msg so far
|
||||
S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_Data);
|
||||
|
||||
std::vector<MapBlock> blocks;
|
||||
blocks.reserve(num_blocks);
|
||||
for (S32 b = 0; b < num_blocks; b++)
|
||||
{
|
||||
blocks.emplace_back(msg, b);
|
||||
}
|
||||
for (const auto& block : blocks)
|
||||
{
|
||||
htxhop_log("#%02d key='%s' block.name='%s' block.region_handle=%llu", block.index, extract_region(block.name).c_str(), block.name.c_str(), block.region_handle());
|
||||
}
|
||||
// special case: handle singular result w/empty name tho valid region handle AND singular pending query as a match
|
||||
// (might be that a landing area / redirect hop URL is coming back: "^hop://grid:port/$", which extract_region's into "")
|
||||
bool solo_result = blocks.size() == 2 && blocks[0].region_handle() && extract_region(blocks[0].name).empty() && !blocks[1].region_handle();
|
||||
if (solo_result && region_name_queries.size() == 1)
|
||||
{
|
||||
htxhop_log("applying first block as redirect; region_handle: %llu", blocks[0].region_handle());
|
||||
blocks[0].name = region_name_queries.begin()->second.region_name;
|
||||
}
|
||||
|
||||
for (const auto& block : blocks)
|
||||
{
|
||||
auto key = extract_region(block.name);
|
||||
if (key.empty())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
auto idx = region_name_queries.find(key);
|
||||
if (idx == region_name_queries.end())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
auto pending{ idx->second };
|
||||
htxhop_log("Recv Region Name '%s' (key: %s) block.name='%s' block.region_handle=%llu)", pending.region_name.c_str(),
|
||||
pending.key.c_str(), block.name.c_str(), block.region_handle());
|
||||
region_name_queries.erase(idx);
|
||||
pending.arbitrary_callback(block.region_handle(), pending.arbitrary_slurl, block.image_id, pending.arbitrary_teleport);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
/**
|
||||
* @file fsworldmapmessage.h
|
||||
* @brief FS specific extensions to world map handling for OpenSim
|
||||
*
|
||||
* $LicenseInfo:firstyear=2024&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (C) 2024, The Phoenix Firestorm Project, Inc.
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#ifndef FS_WORLDMAPMESSAGE_H
|
||||
#define FS_WORLDMAPMESSAGE_H
|
||||
|
||||
#ifdef OPENSIM
|
||||
|
||||
#include <stdtypes.h>
|
||||
#include <functional>
|
||||
#include <string>
|
||||
|
||||
class LLMessageSystem;
|
||||
class LLUUID;
|
||||
|
||||
namespace hypergrid
|
||||
{
|
||||
// Needs to be identical to url_callback_t defined in llworldmapmessage.h
|
||||
using url_callback_t = std::function<void(U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport)>;
|
||||
|
||||
bool sendExactNamedRegionRequest(const std::string& region_name, const url_callback_t& callback, const std::string& callback_url, bool teleport);
|
||||
bool processExactNamedRegionResponse(LLMessageSystem* msg, U32 agent_flags);
|
||||
}
|
||||
#endif
|
||||
#endif // FS_WORLDMAPMESSAGE_H
|
||||
|
|
@ -1163,7 +1163,7 @@ bool LLAppViewer::init()
|
|||
}
|
||||
|
||||
// alert the user if they are using unsupported hardware
|
||||
if(!gSavedSettings.getBOOL("AlertedUnsupportedHardware"))
|
||||
if(gSavedSettings.getBOOL("FSUseLegacyUnsupportedHardwareChecks") && !gSavedSettings.getBOOL("AlertedUnsupportedHardware"))
|
||||
{
|
||||
bool unsupported = false;
|
||||
LLSD args;
|
||||
|
|
|
|||
|
|
@ -3375,7 +3375,7 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root
|
|||
|
||||
for (LLInventoryModel::item_array_t::value_type& item : items)
|
||||
{
|
||||
if (get_is_item_worn(item))
|
||||
if (!item->getIsLinkType() && get_is_item_worn(item))
|
||||
{
|
||||
has_worn = true;
|
||||
LLWearableType::EType type = item->getWearableType();
|
||||
|
|
@ -3395,7 +3395,7 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root
|
|||
}
|
||||
}
|
||||
LLViewerInventoryItem* item = gInventory.getItem(obj_id);
|
||||
if (item && get_is_item_worn(item))
|
||||
if (item && !item->getIsLinkType() && get_is_item_worn(item))
|
||||
{
|
||||
has_worn = true;
|
||||
LLWearableType::EType type = item->getWearableType();
|
||||
|
|
|
|||
|
|
@ -1988,7 +1988,7 @@ void LLInventoryGallery::deleteSelection()
|
|||
|
||||
for (LLInventoryModel::item_array_t::value_type& item : items)
|
||||
{
|
||||
if (get_is_item_worn(item))
|
||||
if (!item->getIsLinkType() && get_is_item_worn(item))
|
||||
{
|
||||
has_worn = true;
|
||||
LLWearableType::EType type = item->getWearableType();
|
||||
|
|
@ -2009,7 +2009,7 @@ void LLInventoryGallery::deleteSelection()
|
|||
}
|
||||
|
||||
LLViewerInventoryItem* item = gInventory.getItem(id);
|
||||
if (item && get_is_item_worn(item))
|
||||
if (item && !item->getIsLinkType() && get_is_item_worn(item))
|
||||
{
|
||||
has_worn = true;
|
||||
LLWearableType::EType type = item->getWearableType();
|
||||
|
|
|
|||
|
|
@ -232,6 +232,11 @@ BOOL LLPanelGroup::postBuild()
|
|||
button = getChild<LLButton>("btn_refresh");
|
||||
button->setClickedCallback(onBtnRefresh, this);
|
||||
|
||||
// <FS:PP> FIRE-33939: Activate button
|
||||
button = getChild<LLButton>("btn_activate");
|
||||
button->setClickedCallback(onBtnActivateClicked, this);
|
||||
// <FS:PP>
|
||||
|
||||
childSetCommitCallback("back",boost::bind(&LLPanelGroup::onBackBtnClick,this),NULL);
|
||||
|
||||
LLPanelGroupTab* panel_general = findChild<LLPanelGroupTab>("group_general_tab_panel");
|
||||
|
|
@ -296,6 +301,7 @@ void LLPanelGroup::reposButtons()
|
|||
reposButton("btn_cancel");
|
||||
reposButton("btn_chat");
|
||||
reposButton("btn_call");
|
||||
reposButton("btn_activate"); // <FS:PP> FIRE-33939: Activate button
|
||||
}
|
||||
|
||||
void LLPanelGroup::reshape(S32 width, S32 height, BOOL called_from_parent )
|
||||
|
|
@ -347,6 +353,15 @@ void LLPanelGroup::onBtnGroupChatClicked(void* user_data)
|
|||
self->chatGroup();
|
||||
}
|
||||
|
||||
// <FS:PP> FIRE-33939: Activate button
|
||||
void LLPanelGroup::onBtnActivateClicked(void* user_data)
|
||||
{
|
||||
LLPanelGroup* self = static_cast<LLPanelGroup*>(user_data);
|
||||
self->activateGroup();
|
||||
self->refreshData();
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
void LLPanelGroup::onBtnJoin()
|
||||
{
|
||||
if (LLGroupActions::isInGroup(mID))
|
||||
|
|
@ -486,6 +501,15 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
|
|||
if(button_chat)
|
||||
button_chat->setVisible(!is_null_group_id);
|
||||
|
||||
// <FS:PP> FIRE-33939: Activate button
|
||||
LLButton* button_activate = findChild<LLButton>("btn_activate");
|
||||
if (button_activate)
|
||||
{
|
||||
button_activate->setVisible(!is_null_group_id);
|
||||
button_activate->setEnabled(group_id != gAgent.getGroupID());
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
getChild<LLUICtrl>("prepend_founded_by")->setVisible(!is_null_group_id);
|
||||
|
||||
// <FS:Ansariel> TabContainer switch
|
||||
|
|
@ -566,6 +590,10 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
|
|||
button_call->setVisible(false);
|
||||
if(button_chat)
|
||||
button_chat->setVisible(false);
|
||||
// <FS:PP> FIRE-33939: Activate button
|
||||
if(button_activate)
|
||||
button_activate->setVisible(false);
|
||||
// </FS:PP>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -625,6 +653,10 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
|
|||
button_call->setVisible(is_member);
|
||||
if(button_chat)
|
||||
button_chat->setVisible(is_member);
|
||||
// <FS:PP> FIRE-33939: Activate button
|
||||
if(button_activate)
|
||||
button_activate->setVisible(is_member);
|
||||
// </FS:PP>
|
||||
}
|
||||
|
||||
// <FS:Ansariel> TabContainer switch
|
||||
|
|
@ -710,6 +742,12 @@ void LLPanelGroup::draw()
|
|||
mRefreshTimer.stop();
|
||||
childEnable("btn_refresh");
|
||||
childEnable("groups_accordion");
|
||||
// <FS:PP> FIRE-33939: Activate button
|
||||
if (gAgent.getGroupID() != getID())
|
||||
{
|
||||
childEnable("btn_activate");
|
||||
}
|
||||
// </FS:PP>
|
||||
}
|
||||
|
||||
LLButton* button_apply = findChild<LLButton>("btn_apply");
|
||||
|
|
@ -741,6 +779,7 @@ void LLPanelGroup::refreshData()
|
|||
// 5 second timeout
|
||||
childDisable("btn_refresh");
|
||||
childDisable("groups_accordion");
|
||||
childDisable("btn_activate"); // <FS:PP> FIRE-33939: Activate button
|
||||
|
||||
mRefreshTimer.start();
|
||||
mRefreshTimer.setTimerExpirySec(5);
|
||||
|
|
@ -756,6 +795,17 @@ void LLPanelGroup::chatGroup()
|
|||
LLGroupActions::startIM(getID());
|
||||
}
|
||||
|
||||
// <FS:PP> FIRE-33939: Activate button
|
||||
void LLPanelGroup::activateGroup()
|
||||
{
|
||||
LLUUID group_id = getID();
|
||||
if (gAgent.getGroupID() != group_id)
|
||||
{
|
||||
LLGroupActions::activate(group_id);
|
||||
}
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
void LLPanelGroup::showNotice(const std::string& subject,
|
||||
const std::string& message,
|
||||
const bool& has_inventory,
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@ public:
|
|||
void refreshData();
|
||||
void callGroup();
|
||||
void chatGroup();
|
||||
void activateGroup(); // <FS:PP> FIRE-33939: Activate button
|
||||
|
||||
virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
|
||||
|
||||
|
|
@ -102,6 +103,7 @@ protected:
|
|||
static void onBtnRefresh(void*);
|
||||
static void onBtnGroupCallClicked(void*);
|
||||
static void onBtnGroupChatClicked(void*);
|
||||
static void onBtnActivateClicked(void*); // <FS:PP> FIRE-33939: Activate button
|
||||
|
||||
void reposButton(const std::string& name);
|
||||
void reposButtons();
|
||||
|
|
|
|||
|
|
@ -627,13 +627,12 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
// [/RLVa:KB]
|
||||
}
|
||||
items.push_back(std::string("Task Properties"));
|
||||
// <FS:Ansariel> Legacy object properties
|
||||
// <FS:Ansariel> Improved object properties
|
||||
//if ((flags & FIRST_SELECTED_ITEM) == 0)
|
||||
if (!gSavedSettings.getBOOL("FSUseLegacyObjectProperties") && (flags & FIRST_SELECTED_ITEM) == 0)
|
||||
//{
|
||||
// disabled_items.push_back(std::string("Task Properties"));
|
||||
//}
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
disabled_items.push_back(std::string("Task Properties"));
|
||||
}
|
||||
// [RLVa:KB] - Checked: 2010-09-28 (RLVa-1.2.1f) | Added: RLVa-1.2.1f
|
||||
items.push_back(std::string("Task Rename"));
|
||||
if ( (!isItemRenameable()) || ((flags & FIRST_SELECTED_ITEM) == 0) )
|
||||
|
|
@ -1007,13 +1006,12 @@ void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
}
|
||||
}
|
||||
items.push_back(std::string("Task Properties"));
|
||||
// <FS:Ansariel> Legacy object properties
|
||||
// <FS:Ansariel> Improved object properties
|
||||
//if ((flags & FIRST_SELECTED_ITEM) == 0)
|
||||
if (!gSavedSettings.getBOOL("FSUseLegacyObjectProperties") && (flags & FIRST_SELECTED_ITEM) == 0)
|
||||
//{
|
||||
// disabled_items.push_back(std::string("Task Properties"));
|
||||
//}
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
disabled_items.push_back(std::string("Task Properties"));
|
||||
}
|
||||
if(isItemRenameable())
|
||||
{
|
||||
items.push_back(std::string("Task Rename"));
|
||||
|
|
|
|||
|
|
@ -279,13 +279,16 @@ namespace LLPerfStats
|
|||
|
||||
auto ot{upd.objType};
|
||||
auto& key{upd.objID};
|
||||
auto& avKey{upd.avID};
|
||||
auto type {upd.statType};
|
||||
auto val {upd.time};
|
||||
// <FS:Beq> markup to support coverage testing on stats collection
|
||||
#ifdef TRACY_ENABLE
|
||||
//LL_PROFILE_ZONE_TEXT(key.toStringFast(obstr), 36);
|
||||
//LL_PROFILE_ZONE_TEXT(avKey.toStringFast(avstr), 36);
|
||||
//LL_PROFILE_ZONE_NUM(val);
|
||||
static char obstr[36];
|
||||
static char avstr[36];
|
||||
LL_PROFILE_ZONE_TEXT(key.toStringFast(obstr), 36);
|
||||
LL_PROFILE_ZONE_TEXT(avKey.toStringFast(avstr), 36);
|
||||
LL_PROFILE_ZONE_NUM(val);
|
||||
#endif
|
||||
// </FS:Beq>
|
||||
|
||||
|
|
@ -295,6 +298,14 @@ namespace LLPerfStats
|
|||
doUpd(key, ot, type,val);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (ot == ObjType_t::OT_AVATAR)
|
||||
{
|
||||
// LL_INFOS("perfstats") << "Avatar update:" << LL_ENDL;
|
||||
doUpd(avKey, ot, type, val);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void doUpd(const LLUUID& key, ObjType_t ot, StatType_t type, uint64_t val)
|
||||
|
|
@ -429,13 +440,13 @@ namespace LLPerfStats
|
|||
// </FS:Beq>
|
||||
stat.time = LLTrace::BlockTimer::getCPUClockCount64() - start;
|
||||
// <FS:Beq> extra profiling coverage tracking
|
||||
#ifdef ATTACHMENT_TRACKING
|
||||
static char obstr[36];
|
||||
static char avstr[36];
|
||||
LL_PROFILE_ZONE_NUM(static_cast<U64>(stat.objType));
|
||||
LL_PROFILE_ZONE_TEXT(stat.avID.toStringFast(avstr), 36);
|
||||
LL_PROFILE_ZONE_TEXT(stat.objID.toStringFast(obstr), 36);
|
||||
LL_PROFILE_ZONE_NUM(stat.time);
|
||||
#if TRACY_ENABLE && defined(ATTACHMENT_TRACKING)
|
||||
// static char obstr[36];
|
||||
// static char avstr[36];
|
||||
// LL_PROFILE_ZONE_NUM(static_cast<U64>(stat.objType));
|
||||
// LL_PROFILE_ZONE_TEXT(stat.avID.toStringFast(avstr), 36);
|
||||
// LL_PROFILE_ZONE_TEXT(stat.objID.toStringFast(obstr), 36);
|
||||
// LL_PROFILE_ZONE_NUM(stat.time);
|
||||
#endif
|
||||
// </FS:Beq>
|
||||
StatsRecorder::send(std::move(stat));
|
||||
|
|
|
|||
|
|
@ -229,6 +229,7 @@
|
|||
#include "particleeditor.h"
|
||||
#include "quickprefs.h"
|
||||
#include "vjfloaterlocalmesh.h" // local mesh
|
||||
#include "fsfloaterwhitelisthelper.h" // fs whitelist helper
|
||||
|
||||
|
||||
// handle secondlife:///app/openfloater/{NAME} URLs
|
||||
|
|
@ -649,6 +650,8 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("sound_explorer", "floater_NACL_explore_sounds.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<NACLFloaterExploreSounds>);
|
||||
LLFloaterReg::add("vram_usage", "floater_fs_vram_usage.xml", static_cast<LLFloaterBuildFunc>(&LLFloaterReg::build<FSFloaterVRAMUsage>));
|
||||
LLFloaterReg::add("local_mesh_floater", "floater_vj_local_mesh.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLocalMesh>); // local mesh
|
||||
LLFloaterReg::add("fs_whitelist_floater", "floater_whitelist.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterWhiteListHelper>); // white list advisor
|
||||
|
||||
|
||||
LLFloaterReg::registerControlVariables(); // Make sure visibility and rect controls get preserved when saving
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9115,13 +9115,10 @@ class LLAttachmentDetach : public view_listener_t
|
|||
|
||||
// [RLVa:KB] - Checked: 2010-03-15 (RLVa-1.2.0a) | Modified: RLVa-1.0.5
|
||||
// NOTE: copy/paste of the code in enable_detach()
|
||||
if ((rlv_handler_t::isEnabled()) && (gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_REMOVE)))
|
||||
if ((rlv_handler_t::isEnabled()) && (gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_REMOVE)) &&
|
||||
gRlvAttachmentLocks.isLockedAttachment(objectp->getRootEdit()))
|
||||
{
|
||||
//LLObjectSelectionHandle hSelect = LLSelectMgr::getInstance()->getSelection();
|
||||
//RlvSelectHasLockedAttach f;
|
||||
//if ((hSelect->isAttachment()) && (hSelect->getFirstRootNode(&f, FALSE) != NULL))
|
||||
// return true;
|
||||
return !gRlvAttachmentLocks.isLockedAttachment(objectp->getRootEdit()); // <FS:Ansariel> Kitty will have to check this...
|
||||
return false;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
|
|
|
|||
|
|
@ -834,6 +834,7 @@ void LLViewerRegion::setRegionID(const LLUUID& region_id)
|
|||
|
||||
void LLViewerRegion::loadObjectCache()
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
|
||||
if (mCacheLoaded)
|
||||
{
|
||||
return;
|
||||
|
|
@ -3126,6 +3127,7 @@ void LLViewerRegion::clearVOCacheFromMemory()
|
|||
|
||||
void LLViewerRegion::unpackRegionHandshake()
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
|
||||
LLMessageSystem *msg = gMessageSystem;
|
||||
|
||||
U64 region_flags = 0;
|
||||
|
|
|
|||
|
|
@ -1541,6 +1541,7 @@ BOOL LLVOCache::updateEntry(const HeaderEntryInfo* entry)
|
|||
bool LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::vocache_entry_map_t& cache_entry_map)
|
||||
// </FS:Beq>
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
|
||||
if(!mEnabled)
|
||||
{
|
||||
LL_WARNS() << "Not reading cache for handle " << handle << "): Cache is currently disabled." << LL_ENDL;
|
||||
|
|
@ -1559,6 +1560,7 @@ bool LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca
|
|||
S32 num_entries=0; // <FS:Beq/> FIRE-33808 - Material Override Cache causes long delays
|
||||
std::string filename;
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_NETWORK("VOCache:loadRegionObjectCache");
|
||||
LLUUID cache_id;
|
||||
getObjectCacheFilename(handle, filename);
|
||||
LLAPRFile apr_file(filename, APR_READ|APR_BINARY, mLocalAPRFilePoolp);
|
||||
|
|
@ -1567,6 +1569,7 @@ bool LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca
|
|||
|
||||
if(success)
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_NETWORK("VOCache:loadCacheForRegion");
|
||||
if(cache_id != id)
|
||||
{
|
||||
LL_INFOS() << "Cache ID doesn't match for this region, discarding"<< LL_ENDL;
|
||||
|
|
@ -1615,6 +1618,7 @@ bool LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca
|
|||
// void LLVOCache::readGenericExtrasFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::vocache_gltf_overrides_map_t& cache_extras_entry_map)
|
||||
void LLVOCache::readGenericExtrasFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::vocache_gltf_overrides_map_t& cache_extras_entry_map, const LLVOCacheEntry::vocache_entry_map_t& cache_entry_map)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
|
||||
int loaded= 0;
|
||||
int discarded = 0;
|
||||
// get ViewerRegion pointer from handle
|
||||
|
|
@ -1635,6 +1639,13 @@ void LLVOCache::readGenericExtrasFromCache(U64 handle, const LLUUID& id, LLVOCac
|
|||
}
|
||||
|
||||
std::string filename(getObjectCacheExtrasFilename(handle));
|
||||
// <FS:Beq> Material Override Cache caused long delays
|
||||
#ifdef TRACY_ENABLE
|
||||
static char extra_filename[256];
|
||||
strncpy(extra_filename, filename.c_str(), 256);
|
||||
LL_PROFILE_ZONE_TEXT(extra_filename,256);
|
||||
#endif
|
||||
// </FS:Beq>
|
||||
llifstream in(filename, std::ios::in | std::ios::binary);
|
||||
|
||||
std::string line;
|
||||
|
|
@ -1714,8 +1725,10 @@ void LLVOCache::readGenericExtrasFromCache(U64 handle, const LLUUID& id, LLVOCac
|
|||
LL_DEBUGS("GLTF") << "Beginning reading extras cache for handle " << handle << " from " << getObjectCacheExtrasFilename(handle) << LL_ENDL;
|
||||
|
||||
LLSD entry_llsd;
|
||||
LL_PROFILE_ZONE_NUM(num_entries);
|
||||
for (U32 i = 0; i < num_entries && !in.eof(); i++)
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_NETWORK("RegionExtrasReadEntries");
|
||||
static const U32 max_size = 4096;
|
||||
bool success = LLSDSerialize::deserialize(entry_llsd, in, max_size);
|
||||
// check bool(in) this time since eof is not a failure condition here
|
||||
|
|
@ -1756,6 +1769,7 @@ void LLVOCache::readGenericExtrasFromCache(U64 handle, const LLUUID& id, LLVOCac
|
|||
|
||||
void LLVOCache::purgeEntries(U32 size)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
|
||||
// <FS:Beq/> FIRE-33808 - Material Override Cache causes long delays
|
||||
LL_DEBUGS("VOCache","GLTF") << "Purging " << size << " entries from cache" << LL_ENDL;
|
||||
while(mHeaderEntryQueue.size() > size)
|
||||
|
|
@ -1775,6 +1789,7 @@ void LLVOCache::purgeEntries(U32 size)
|
|||
|
||||
void LLVOCache::writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry::vocache_entry_map_t& cache_entry_map, BOOL dirty_cache, bool removal_enabled)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
|
||||
// <FS:Beq> FIRE-33808 - Material Override Cache causes long delays
|
||||
std::string filename;
|
||||
getObjectCacheFilename(handle, filename);
|
||||
|
|
@ -1929,19 +1944,20 @@ void LLVOCache::removeGenericExtrasForHandle(U64 handle)
|
|||
auto* entry = mHandleEntryMap[handle];
|
||||
if (entry)
|
||||
{
|
||||
LL_WARNS("GLTF", "VOCache") << "Removing generic extras for handle " << entry->mHandle << "Filename: " << getObjectCacheExtrasFilename(handle) << LL_ENDL;
|
||||
removeEntry(entry);
|
||||
}
|
||||
else
|
||||
{
|
||||
//shouldn't happen, but if it does, we should remove the extras file since it's orphaned
|
||||
LL_WARNS("GLTF", "VOCache") << "Removing generic extras for handle " << entry->mHandle << "Filename: " << getObjectCacheExtrasFilename(handle) << LL_ENDL;
|
||||
LLFile::remove(getObjectCacheExtrasFilename(entry->mHandle));
|
||||
LLFile::remove(getObjectCacheExtrasFilename(handle));
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
void LLVOCache::writeGenericExtrasToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry::vocache_gltf_overrides_map_t& cache_extras_entry_map, BOOL dirty_cache, bool removal_enabled)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
|
||||
if(!mEnabled)
|
||||
{
|
||||
LL_WARNS() << "Not writing extras cache for handle " << handle << "): Cache is currently disabled." << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
// <FS:CR> Aurora Sim
|
||||
#include "llviewernetwork.h"
|
||||
// </FS:CR> Aurora Sim
|
||||
#include "fsworldmapmessage.h" // <FS:humbletim/> FIRE-31368: [OPENSIM] ... Search returns more than one result
|
||||
|
||||
const U32 LAYER_FLAG = 2;
|
||||
|
||||
|
|
@ -99,6 +100,14 @@ void LLWorldMapMessage::sendNamedRegionRequest(std::string region_name,
|
|||
const std::string& callback_url,
|
||||
bool teleport) // immediately teleport when result returned
|
||||
{
|
||||
// <FS:humbletim> FIRE-31368: [OPENSIM] ... Search returns more than one result
|
||||
#ifdef OPENSIM
|
||||
if (hypergrid::sendExactNamedRegionRequest(region_name, callback, callback_url, teleport))
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
// </FS:humbletim>
|
||||
//LL_INFOS("WorldMap") << LL_ENDL;
|
||||
mSLURLRegionName = region_name;
|
||||
mSLURLRegionHandle = 0;
|
||||
|
|
@ -160,6 +169,14 @@ void LLWorldMapMessage::processMapBlockReply(LLMessageSystem* msg, void**)
|
|||
}
|
||||
U32 agent_flags;
|
||||
msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags);
|
||||
// <FS:humbletim> FIRE-31368: [OPENSIM] ... Search returns more than one result
|
||||
#ifdef OPENSIM
|
||||
if (hypergrid::processExactNamedRegionResponse(msg, agent_flags))
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
// </FS:humbletim>
|
||||
|
||||
// There's only one flag that we ever use here
|
||||
if (agent_flags != LAYER_FLAG)
|
||||
|
|
|
|||
|
|
@ -8219,6 +8219,12 @@ void LLPipeline::renderDeferredLighting()
|
|||
const F32 *c = center.getF32ptr();
|
||||
F32 s = volume->getLightRadius() * 1.5f;
|
||||
|
||||
// <FS:Beq> relocated above colour calc for early exit on small lights
|
||||
if (s <= 0.001f)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// </FS:Beq>
|
||||
// send light color to shader in linear space
|
||||
LLColor3 col = volume->getLightLinearColor() * light_scale;
|
||||
|
||||
|
|
@ -8226,12 +8232,12 @@ void LLPipeline::renderDeferredLighting()
|
|||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (s <= 0.001f)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// <FS:Beq> relocated above colour calc for early exit on small lights
|
||||
// if (s <= 0.001f)
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
// </FS:Beq>
|
||||
LLVector4a sa;
|
||||
sa.splat(s);
|
||||
if (camera->AABBInFrustumNoFarClip(center, sa) == 0)
|
||||
|
|
|
|||
|
|
@ -219,6 +219,26 @@ background_visible="false"
|
|||
width="23" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="3"
|
||||
name="btn_activate_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
layout="topleft"
|
||||
follows="bottom|left|right"
|
||||
label="Activate"
|
||||
name="btn_activate"
|
||||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -227,7 +247,7 @@ background_visible="false"
|
|||
name="btn_chat_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="97">
|
||||
width="72">
|
||||
<button
|
||||
layout="topleft"
|
||||
follows="bottom|left|right"
|
||||
|
|
@ -236,7 +256,7 @@ background_visible="false"
|
|||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="96" />
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -247,7 +267,7 @@ background_visible="false"
|
|||
name="call_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="97">
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
|
|
@ -257,7 +277,7 @@ background_visible="false"
|
|||
layout="topleft"
|
||||
tool_tip="Call this group"
|
||||
top="0"
|
||||
width="96" />
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -268,7 +288,7 @@ background_visible="false"
|
|||
name="btn_apply_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="97">
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -277,7 +297,7 @@ background_visible="false"
|
|||
name="btn_apply"
|
||||
left="1"
|
||||
top="0"
|
||||
width="96" />
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
<floater name="whitelist_floater" title="Whitelist für Verzeichnnisse und Dateien">
|
||||
<text name="whitelist_intro">
|
||||
Anti-Virus- und Anti-Malware-Software sind essenziell für die sichere Nutzung des Internet, können aber eine Vielzahl an Problem für den Viewer erzeugen.
|
||||
Um die Beinträchtigung zu minimieren und Stabilität und Performance zu erhöhen, raten wir daher eingehend alle Benutzer Ausnahmen (auch bekannt als Whitelisting) für wichtige Verzeichnisse und Programme einzurichten, die vom Viewer verwendet werden.
|
||||
|
||||
Weitere Details hierzu finden Sie unter
|
||||
https://wiki.firestormviewer.org/antivirus_whitelisting
|
||||
</text>
|
||||
<text name="whitelist_folder_instruction">
|
||||
Das folgende Textfeld die Verzeichnisse angezeigt, die vom Viewer verwendet werden.
|
||||
Bitte fügen Sie diese zu den Verzeichnis-Ausnahmen hinzu.
|
||||
</text>
|
||||
<text name="whitelist_exe_instruction">
|
||||
Das folgende Textfeld zeigt die Namen und vollständigen Pfade der ausführbaren Dateien des Viewers an.
|
||||
Bitte fügen Sie diese zu den Ausnahmen für ausführbare Dateien hinzu hinzu.
|
||||
</text>
|
||||
</floater>
|
||||
|
|
@ -283,6 +283,7 @@
|
|||
<menu_item_check label="Anweisungen..." name="How To"/>
|
||||
<menu_item_call label="[CURRENT_GRID]-Hilfe" name="current_grid_help"/>
|
||||
<menu_item_call label="Über [CURRENT_GRID]" name="current_grid_about"/>
|
||||
<menu_item_call label="Whitelist-Unterstützung" name="whitelist_folders"/>
|
||||
<menu_item_call label="Grid-Status prüfen" name="Grid Status"/>
|
||||
<menu_item_call label="Missbrauch melden" name="Report Abuse"/>
|
||||
<menu_item_call label="Problem melden" name="Report Bug"/>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,9 @@
|
|||
</combo_box>
|
||||
</layout_panel>
|
||||
<layout_panel name="grid_panel">
|
||||
<text name="grid_builder_text">
|
||||
+ Klicken um Grids hinzuzufügen
|
||||
</text>
|
||||
<text name="grid_login_text">
|
||||
Gridauswahl:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -37,6 +37,9 @@
|
|||
<text name="grid_login_text">
|
||||
Grid:
|
||||
</text>
|
||||
<text name="grid_builder_text">
|
||||
+ Klicken um Grids hinzuzufügen
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="mode_selection">
|
||||
<text name="mode_selection_text">
|
||||
|
|
|
|||
|
|
@ -45,6 +45,9 @@
|
|||
</layout_panel>
|
||||
</layout_stack>
|
||||
<layout_stack name="button_row_ls">
|
||||
<layout_panel name="btn_activate_lp">
|
||||
<button label="Aktivieren" name="btn_activate"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="btn_chat_lp">
|
||||
<button label="Chat" name="btn_chat"/>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,74 @@
|
|||
<floater name="whitelist_floater"
|
||||
title="Whitelist Folders and Binaries"
|
||||
width="700"
|
||||
height="470"
|
||||
can_minimize="true"
|
||||
can_resize="false">
|
||||
<text
|
||||
follows="top|left|right"
|
||||
font="SansSerif"
|
||||
height="120"
|
||||
layout="topleft"
|
||||
left="11"
|
||||
name="whitelist_intro"
|
||||
top="16"
|
||||
width="689"
|
||||
wrap="true">
|
||||
Anti-virus and Anti-malware are an essential part of safe Internet use, but they can cause a variety of issues for the viewer.
|
||||
To reduce interference and improve stability and performance, we strongly advise that all users ensure that there are exclusions (known as Whitelisting) for important folders and programs that the viewer uses.
|
||||
|
||||
For more detailed information, visit
|
||||
https://wiki.firestormviewer.org/antivirus_whitelisting
|
||||
|
||||
</text>
|
||||
<text
|
||||
follows="top|left|right"
|
||||
font="SansSerif"
|
||||
height="35"
|
||||
layout="topleft"
|
||||
left="11"
|
||||
name="whitelist_folder_instruction"
|
||||
top_pad="10"
|
||||
width="689"
|
||||
wrap="true">
|
||||
To help simplify the task the box below shows the folders the viewer is using.
|
||||
Please add these to your AV folder exclusions as shown on the above wiki page.
|
||||
</text>
|
||||
<text_editor
|
||||
parse_urls="true"
|
||||
follows="top|left|right|bottom"
|
||||
font="SansSerif"
|
||||
height="100"
|
||||
bg_readonly_color="Transparent"
|
||||
left="5"
|
||||
max_length="65536"
|
||||
name="whitelist_folders_editor"
|
||||
top_pad="5"
|
||||
width="689"
|
||||
word_wrap="true" />
|
||||
<text
|
||||
follows="top|left|right"
|
||||
font="SansSerif"
|
||||
height="35"
|
||||
layout="topleft"
|
||||
left="11"
|
||||
name="whitelist_exe_instruction"
|
||||
top_pad="5"
|
||||
width="689"
|
||||
wrap="true">
|
||||
The following box is the name and full path of the viewer executables.
|
||||
Add these to you AV executable exclusions as shown in the above wiki.
|
||||
</text>
|
||||
<text_editor
|
||||
parse_urls="true"
|
||||
follows="top|left|right|bottom"
|
||||
font="SansSerif"
|
||||
height="130"
|
||||
bg_readonly_color="Transparent"
|
||||
left="5"
|
||||
max_length="65536"
|
||||
name="whitelist_exes_editor"
|
||||
top_pad="5"
|
||||
width="689"
|
||||
word_wrap="true" />
|
||||
</floater>
|
||||
|
|
@ -2642,6 +2642,13 @@
|
|||
parameter="http://community.secondlife.com/t5/Blogs/ct-p/Blogs"/>
|
||||
</menu_item_call>-->
|
||||
<menu_item_separator/>
|
||||
<menu_item_call
|
||||
name="whitelist_folders"
|
||||
label="Whitelist adviser">
|
||||
<menu_item_call.on_click
|
||||
function="Floater.Show"
|
||||
parameter="fs_whitelist_floater" />
|
||||
</menu_item_call>
|
||||
<menu_item_check
|
||||
label="Check Grid status"
|
||||
name="Grid Status">
|
||||
|
|
|
|||
|
|
@ -150,25 +150,25 @@
|
|||
Start at:
|
||||
</text>
|
||||
<combo_box
|
||||
allow_text_entry="true"
|
||||
control_name="NextLoginLocation"
|
||||
follows="left|bottom"
|
||||
height="22"
|
||||
max_chars="128"
|
||||
top_pad="0"
|
||||
name="start_location_combo"
|
||||
width="165">
|
||||
allow_text_entry="true"
|
||||
control_name="NextLoginLocation"
|
||||
follows="left|bottom"
|
||||
height="22"
|
||||
max_chars="128"
|
||||
top_pad="0"
|
||||
name="start_location_combo"
|
||||
width="165">
|
||||
<combo_box.item
|
||||
label="Last location"
|
||||
name="MyLastLocation"
|
||||
value="last" />
|
||||
label="Last location"
|
||||
name="MyLastLocation"
|
||||
value="last" />
|
||||
<combo_box.item
|
||||
label="Home"
|
||||
name="MyHome"
|
||||
value="home" />
|
||||
label="Home"
|
||||
name="MyHome"
|
||||
value="home" />
|
||||
<combo_box.item
|
||||
label="<Type region name>"
|
||||
name="Typeregionname" value="" />
|
||||
label="<Type region name>"
|
||||
name="Typeregionname" value="" />
|
||||
</combo_box>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
|
|
@ -179,6 +179,18 @@
|
|||
width="145"
|
||||
height="80"
|
||||
visible="false">
|
||||
<text
|
||||
follows="left|top|right"
|
||||
font="SansSerifMedium"
|
||||
text_color="EmphasisColor"
|
||||
top="10"
|
||||
height="16"
|
||||
name="grid_builder_text"
|
||||
left="5"
|
||||
width="190"
|
||||
visible="false">
|
||||
+ Click to add more grids
|
||||
</text>
|
||||
<text
|
||||
follows="left|bottom"
|
||||
font="SansSerifSmall"
|
||||
|
|
@ -193,6 +205,7 @@
|
|||
allow_text_entry="true"
|
||||
follows="left|bottom"
|
||||
height="22"
|
||||
top_pad="0"
|
||||
max_chars="256"
|
||||
force_disable_fulltext_search="true"
|
||||
combo_editor.commit_on_focus_lost="false"
|
||||
|
|
|
|||
|
|
@ -282,6 +282,19 @@
|
|||
<combo_box.drop_down_button
|
||||
font="SansSerifLarge"/>
|
||||
</combo_box>
|
||||
<text
|
||||
follows="left|top|right"
|
||||
font="SansSerifMedium"
|
||||
text_color="EmphasisColor"
|
||||
top_pad="5"
|
||||
height="16"
|
||||
name="grid_builder_text"
|
||||
valign="center"
|
||||
left="45"
|
||||
width="250"
|
||||
visible="false">
|
||||
+ Click to add more grids
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
follows="left|top|right"
|
||||
|
|
|
|||
|
|
@ -256,7 +256,25 @@ background_visible="false"
|
|||
name="btn_refresh"
|
||||
width="23" />
|
||||
</layout_panel>
|
||||
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="3"
|
||||
name="btn_activate_lp"
|
||||
auto_resize="true"
|
||||
width="67">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
label="Activate"
|
||||
name="btn_activate"
|
||||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="66" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -264,7 +282,7 @@ background_visible="false"
|
|||
left_pad="3"
|
||||
name="btn_chat_lp"
|
||||
auto_resize="true"
|
||||
width="91">
|
||||
width="67">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
label="Chat"
|
||||
|
|
@ -272,7 +290,7 @@ background_visible="false"
|
|||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="90" />
|
||||
width="66" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -282,7 +300,7 @@ background_visible="false"
|
|||
left_pad="3"
|
||||
name="call_btn_lp"
|
||||
auto_resize="true"
|
||||
width="91">
|
||||
width="67">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
|
|
@ -292,7 +310,7 @@ background_visible="false"
|
|||
layout="topleft"
|
||||
tool_tip="Call this group"
|
||||
top="0"
|
||||
width="90" />
|
||||
width="66" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -302,7 +320,7 @@ background_visible="false"
|
|||
left_pad="3"
|
||||
name="btn_apply_lp"
|
||||
auto_resize="true"
|
||||
width="91">
|
||||
width="67">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -311,7 +329,7 @@ background_visible="false"
|
|||
name="btn_apply"
|
||||
left="1"
|
||||
top="0"
|
||||
width="90" />
|
||||
width="66" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
<floater name="whitelist_floater" title="Liste blanche de dossiers et programmes">
|
||||
<text name="whitelist_intro">
|
||||
Les antivirus et les anti-logiciels malveillants sont un élément essentiel d'une utilisation sûre de l'internet, mais ils peuvent causer toute une série de problèmes à la visionneuse.
|
||||
Pour réduire les interférences et améliorer la stabilité et les performances, nous conseillons vivement à tous les utilisateurs de veiller à ce qu'il y ait des exclusions (connues sous le nom de liste blanche) pour les dossiers et les programmes importants que la visionneuse utilise.
|
||||
|
||||
Pour plus d'informations, visitez le site
|
||||
https://wiki.firestormviewer.org/antivirus_whitelisting
|
||||
</text>
|
||||
<text name="whitelist_folder_instruction">
|
||||
Pour vous simplifier la tâche, l'encadré ci-dessous indique les dossiers utilisés par la visionneuse.
|
||||
Veuillez les ajouter à vos exclusions de dossiers AV, comme indiqué sur la page wiki ci-dessus.
|
||||
</text>
|
||||
<text name="whitelist_exe_instruction">
|
||||
La case suivante indique le nom et le chemin d'accès complet des exécutables de la visionneuse.
|
||||
Ajoutez-les à vos exclusions d'exécutables AV comme indiqué dans le wiki ci-dessus.
|
||||
</text>
|
||||
</floater>
|
||||
|
|
@ -267,8 +267,17 @@
|
|||
<menu_item_call label="Horaires des classes Firestorm" name="Firestorm Classes Schedule"/>
|
||||
<menu_item_call label="Calendrier des évènements Firestorm" name="Firestorm Events Calendar"/>
|
||||
<menu_item_check label="Guide" name="How To"/>
|
||||
<!-- <menu_item_call label="Aide Second Life" name="Second Life Help"/>-->
|
||||
<menu_item_call label="Aide [CURRENT_GRID]" name="current_grid_help"/>
|
||||
<menu_item_call label="À propos de [CURRENT_GRID]" name="current_grid_about"/>
|
||||
<!-- <menu_item_call label="Tutoriels" name="Tutorial"/>
|
||||
<menu_item_call label="Base de connaissance" name="Knowledge Base"/>
|
||||
<menu_item_call label="Wiki" name="Wiki"/>
|
||||
<menu_item_call label="Forums communautaires" name="Community Forums"/>
|
||||
<menu_item_call label="Portail d'assistance" name="Support portal"/>
|
||||
<menu_item_call label="Nouvelles de [SECOND_LIFE]" name="Second Life News"/>
|
||||
<menu_item_call label="Blogs de [SECOND_LIFE]" name="Second Life Blogs"/>-->
|
||||
<menu_item_call name="whitelist_folders" label="Conseils de liste blanche"/>
|
||||
<menu_item_check label="Consulter l'état de la grille" name="Grid Status"/>
|
||||
<menu_item_call label="Signaler une infraction" name="Report Abuse"/>
|
||||
<menu_item_call label="Signaler un problème" name="Report Bug"/>
|
||||
|
|
|
|||
|
|
@ -17,6 +17,9 @@
|
|||
</combo_box>
|
||||
</layout_panel>
|
||||
<layout_panel name="grid_panel">
|
||||
<text name="grid_builder_text">
|
||||
+ Ajouter des grilles
|
||||
</text>
|
||||
<text name="grid_login_text">Connexion à la Grille :</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="links_login_panel">
|
||||
|
|
|
|||
|
|
@ -37,6 +37,9 @@
|
|||
<text name="grid_login_text" width="55">
|
||||
Grille :
|
||||
</text>
|
||||
<text name="grid_builder_text">
|
||||
+ Ajouter des grilles
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="mode_selection">
|
||||
<text name="mode_selection_text">
|
||||
|
|
|
|||
|
|
@ -9,7 +9,10 @@
|
|||
<panel.string name="leave_txt">Quitter</panel.string>
|
||||
<layout_stack name="group_info_sidetray_main">
|
||||
<layout_panel name="header_container">
|
||||
<panel name="group_info_top"><line_editor label="Saisissez le nom de votre nouveau groupe ici" name="group_name_editor"/></panel>
|
||||
<panel name="group_info_top">
|
||||
<text_editor name="group_name" value="(Chargement ...)"/>
|
||||
<line_editor label="Saisissez le nom de votre nouveau groupe ici" name="group_name_editor"/>
|
||||
</panel>
|
||||
</layout_panel>
|
||||
<layout_panel name="group_info_content">
|
||||
<layout_stack name="layout">
|
||||
|
|
@ -24,11 +27,17 @@
|
|||
</layout_panel>
|
||||
</layout_stack>
|
||||
<layout_stack name="button_row_ls">
|
||||
<layout_panel name="btn_chat_lp"><button label="Chat" name="btn_chat"/></layout_panel>
|
||||
<layout_panel name="call_btn_lp"><button name="btn_call" label="Appel de groupe" tool_tip="Appeler ce groupe"/></layout_panel>
|
||||
<layout_panel name="btn_activate_lp">
|
||||
<button label="Activer" name="btn_activate" />
|
||||
</layout_panel>
|
||||
<layout_panel name="btn_chat_lp">
|
||||
<button label="Chat" name="btn_chat"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="call_btn_lp">
|
||||
<button name="btn_call" label="Appel de groupe" tool_tip="Appeler ce groupe"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="btn_apply_lp">
|
||||
<button label="Enregistrer" label_selected="Enregistrer" name="btn_apply"/>
|
||||
<button label="Créer un groupe" name="btn_create" tool_tip="Créer un nouveau groupe"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<button label="Chat" name="btn_chat"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="call_btn_lp">
|
||||
<button label="Chiamata al gruppo" name="btn_call" tool_tip="Avvia una conferenza vocale in questo gruppo"/>
|
||||
<button label="Chiamata" name="btn_call" tool_tip="Avvia una conferenza vocale in questo gruppo"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="btn_apply_lp">
|
||||
<button label="Salva" label_selected="Salva" name="btn_apply"/>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
<floater name="whitelist_floater" title="Dodaj foldery i pliki binarne do wykluczeń">
|
||||
<text name="whitelist_intro">
|
||||
Antywirusy i oprogramowanie chroniące przed złośliwym oprogramowaniem są istotnym elementem bezpiecznego korzystania z Internetu, ale mogą powodować wiele problemów.
|
||||
Aby poprawić stabilność i wydajność zdecydowanie zalecamy, aby wszyscy użytkownicy upewnili się, że dodali do wykluczeń (tzw. białej listy) ważne foldery i programy używane przez przeglądarkę.
|
||||
|
||||
Więcej szczegółowych informacji znajdziesz na stronie
|
||||
https://wiki.firestormviewer.org/antivirus_whitelisting
|
||||
</text>
|
||||
<text name="whitelist_folder_instruction">
|
||||
Aby uprościć zadanie, w polu poniżej znajdują się foldery używane przez przeglądarkę.
|
||||
Dodaj je do wykluczeń antywirusa, jak pokazano na stronie wiki powyżej.
|
||||
</text>
|
||||
<text name="whitelist_exe_instruction">
|
||||
Poniższe pole zawiera nazwy i ścieżki plików wykonywalnych przeglądarki.
|
||||
Dodaj je do wykluczeń antywirusa, jak pokazano na stronie wiki powyżej.
|
||||
</text>
|
||||
</floater>
|
||||
|
|
@ -298,6 +298,7 @@
|
|||
<menu_item_call label="Portal wsparcia" name="Support portal"/>
|
||||
<menu_item_call label="Newsy: [SECOND_LIFE]" name="Second Life News"/>
|
||||
<menu_item_call label="Blogi: [SECOND_LIFE]" name="Second Life Blogs"/> -->
|
||||
<menu_item_call name="whitelist_folders" label="Doradca wykluczeń" />
|
||||
<menu_item_check label="Sprawdź stan świata" name="Grid Status"/>
|
||||
<menu_item_call label="Zgłoś nadużycie" name="Report Abuse"/>
|
||||
<menu_item_call label="Zgłoś problem" name="Report Bug"/>
|
||||
|
|
|
|||
|
|
@ -28,6 +28,9 @@
|
|||
</combo_box>
|
||||
</layout_panel>
|
||||
<layout_panel name="grid_panel">
|
||||
<text name="grid_builder_text">
|
||||
+ Kliknij, by dodać światy
|
||||
</text>
|
||||
<text name="grid_login_text">
|
||||
Loguj do świata:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,9 @@
|
|||
<text name="grid_login_text" width="55">
|
||||
Świat:
|
||||
</text>
|
||||
<text name="grid_builder_text">
|
||||
+ Kliknij, by dodać światy
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="mode_selection">
|
||||
<text name="mode_selection_text">
|
||||
|
|
|
|||
|
|
@ -41,11 +41,14 @@
|
|||
</layout_panel>
|
||||
</layout_stack>
|
||||
<layout_stack name="button_row_ls">
|
||||
<layout_panel name="btn_activate_lp">
|
||||
<button label="Aktywuj" name="btn_activate" />
|
||||
</layout_panel>
|
||||
<layout_panel name="btn_chat_lp">
|
||||
<button label="Czat" name="btn_chat"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="call_btn_lp">
|
||||
<button label="Konferencja głosowa" name="btn_call" tool_tip="Rozpocznij konferencję głosową w tej grupie"/>
|
||||
<button label="Konf. głosowa" name="btn_call" tool_tip="Rozpocznij konferencję głosową w tej grupie"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="btn_apply_lp">
|
||||
<button label="Zapisz" label_selected="Zapisz" name="btn_apply"/>
|
||||
|
|
|
|||
|
|
@ -45,72 +45,72 @@
|
|||
<text name="title" value="Profil obiektu"/>
|
||||
<text name="where" value="(W świecie)"/>
|
||||
<scroll_container name="item_profile_scroll">
|
||||
<panel name="properties_panel">
|
||||
<text name="Name:">
|
||||
Nazwa:
|
||||
</text>
|
||||
<line_editor name="Object Name" tool_tip="Nazwa jest ograniczona do 63 znaków. Dłuższe nazwy prim są skracane. Nazwy mogą składać się tylko z widocznych znaków znajdujących się w zestawie ASCII-7 (bez rozszerzenia), z wyjątkiem pionowej kreski '|'." />
|
||||
<text name="Description:">
|
||||
Opis:
|
||||
</text>
|
||||
<line_editor name="Object Description" tool_tip="Kiedy ludzie mają 'Pokaż chmurki pomocy na wszystkich obiektach' włączone w ustawieniach przeglądarki, to zobaczą wyskakujący opis obiektu dla dowolnego obiektu pod ich wskaźnikiem myszy. Opis primy jest ograniczony do 127 bajtów, ciąg znaków dłuższy niż ten limit zostanie obcięty." />
|
||||
<text name="CreatorNameLabel">
|
||||
Twórca:
|
||||
</text>
|
||||
<text name="Owner:">
|
||||
Właściciel:
|
||||
</text>
|
||||
<text name="Group_label">
|
||||
Grupa:
|
||||
</text>
|
||||
<button name="button set group" tool_tip="Wybierz grupę by udostępnić jej prawa do tego obiektu"/>
|
||||
<name_box initial_value="Ładowanie..." name="Group Name Proxy"/>
|
||||
<button label="Przypisz" label_selected="Przypisz" name="button deed" tool_tip="Opcja przypisania udostępnia obiektowi takie same prawa jak zostały zaznaczone dla następnego właściciela. Obiekty udostępnione grupie mogą zostać przypisane dla grupy przez oficera grupy."/>
|
||||
<text name="label click action">
|
||||
Po kliku:
|
||||
</text>
|
||||
<combo_box name="clickaction" tool_tip="Akcja po kliku umożliwia interakcję z obiektem jednym kliknięciem lewym przyciskiem myszy. Każda akcja ma specjalny kursor wskazujący, co robi. Niektóre działania związane z klikaniem mają pewne wymagania, aby zaczęły działać. Na przykład Dotknij i Zapłać wymagają skryptów.">
|
||||
<combo_box.item label="Dotknij (domyślne)" name="Touch/grab(default)"/>
|
||||
<combo_box.item label="Usiądź na obiekcie" name="Sitonobject"/>
|
||||
<combo_box.item label="Kup obiekt" name="Buyobject"/>
|
||||
<combo_box.item label="Zapłać obiektowi" name="Payobject"/>
|
||||
<combo_box.item label="Otwórz" name="Open"/>
|
||||
<combo_box.item label="Przybliż" name="Zoom"/>
|
||||
<combo_box.item label="Brak" name="None"/>
|
||||
<combo_box.item label="Ignoruj obiekt" name="Ignoreobject" />
|
||||
</combo_box>
|
||||
<panel name="perms_inv">
|
||||
<text name="perm_modify">
|
||||
Możesz modyfikować ten obiekt
|
||||
<panel name="properties_panel">
|
||||
<text name="Name:">
|
||||
Nazwa:
|
||||
</text>
|
||||
<text name="Anyone can:">
|
||||
Każdy:
|
||||
<line_editor name="Object Name" tool_tip="Nazwa jest ograniczona do 63 znaków. Dłuższe nazwy prim są skracane. Nazwy mogą składać się tylko z widocznych znaków znajdujących się w zestawie ASCII-7 (bez rozszerzenia), z wyjątkiem pionowej kreski '|'." />
|
||||
<text name="Description:">
|
||||
Opis:
|
||||
</text>
|
||||
<check_box label="Kopiowanie" name="checkbox allow everyone copy" tool_tip="Każdy może wziąć kopię obiektu. Obiekt i cała jego zawartość muszą być kopiowalne i transferowalne." />
|
||||
<check_box label="Przesuwanie" name="checkbox allow everyone move" tool_tip="Każdy może przesuwać obiekt." />
|
||||
<text name="GroupLabel">
|
||||
<line_editor name="Object Description" tool_tip="Kiedy ludzie mają 'Pokaż chmurki pomocy na wszystkich obiektach' włączone w ustawieniach przeglądarki, to zobaczą wyskakujący opis obiektu dla dowolnego obiektu pod ich wskaźnikiem myszy. Opis primy jest ograniczony do 127 bajtów, ciąg znaków dłuższy niż ten limit zostanie obcięty." />
|
||||
<text name="CreatorNameLabel">
|
||||
Twórca:
|
||||
</text>
|
||||
<text name="Owner:">
|
||||
Właściciel:
|
||||
</text>
|
||||
<text name="Group_label">
|
||||
Grupa:
|
||||
</text>
|
||||
<check_box label="Udostępnij" name="checkbox share with group" tool_tip="Pozwól wszystkim osobom z ustawionej grupy na dzielenie prawa do modyfikacji dla tego obiektu. Musisz przypisać obiekt grupie aby aktywować ograniczenia wynikające z funkcji."/>
|
||||
<text name="NextOwnerLabel">
|
||||
Nast. właściciel:
|
||||
<button name="button set group" tool_tip="Wybierz grupę by udostępnić jej prawa do tego obiektu"/>
|
||||
<name_box initial_value="Ładowanie..." name="Group Name Proxy"/>
|
||||
<button label="Przypisz" label_selected="Przypisz" name="button deed" tool_tip="Opcja przypisania udostępnia obiektowi takie same prawa jak zostały zaznaczone dla następnego właściciela. Obiekty udostępnione grupie mogą zostać przypisane dla grupy przez oficera grupy."/>
|
||||
<text name="label click action">
|
||||
Po kliku:
|
||||
</text>
|
||||
<combo_box name="clickaction" tool_tip="Akcja po kliku umożliwia interakcję z obiektem jednym kliknięciem lewym przyciskiem myszy. Każda akcja ma specjalny kursor wskazujący, co robi. Niektóre działania związane z klikaniem mają pewne wymagania, aby zaczęły działać. Na przykład Dotknij i Zapłać wymagają skryptów.">
|
||||
<combo_box.item label="Dotknij (domyślne)" name="Touch/grab(default)"/>
|
||||
<combo_box.item label="Usiądź na obiekcie" name="Sitonobject"/>
|
||||
<combo_box.item label="Kup obiekt" name="Buyobject"/>
|
||||
<combo_box.item label="Zapłać obiektowi" name="Payobject"/>
|
||||
<combo_box.item label="Otwórz" name="Open"/>
|
||||
<combo_box.item label="Przybliż" name="Zoom"/>
|
||||
<combo_box.item label="Brak" name="None"/>
|
||||
<combo_box.item label="Ignoruj obiekt" name="Ignoreobject" />
|
||||
</combo_box>
|
||||
<panel name="perms_inv">
|
||||
<text name="perm_modify">
|
||||
Możesz modyfikować ten obiekt
|
||||
</text>
|
||||
<text name="Anyone can:">
|
||||
Każdy:
|
||||
</text>
|
||||
<check_box label="Kopiowanie" name="checkbox allow everyone copy" tool_tip="Każdy może wziąć kopię obiektu. Obiekt i cała jego zawartość muszą być kopiowalne i transferowalne." />
|
||||
<check_box label="Przesuwanie" name="checkbox allow everyone move" tool_tip="Każdy może przesuwać obiekt." />
|
||||
<text name="GroupLabel">
|
||||
Grupa:
|
||||
</text>
|
||||
<check_box label="Udostępnij" name="checkbox share with group" tool_tip="Pozwól wszystkim osobom z ustawionej grupy na dzielenie prawa do modyfikacji dla tego obiektu. Musisz przypisać obiekt grupie aby aktywować ograniczenia wynikające z funkcji."/>
|
||||
<text name="NextOwnerLabel">
|
||||
Nast. właściciel:
|
||||
</text>
|
||||
<check_box label="Modyfikacja" name="checkbox next owner can modify" tool_tip="Następny właściciel może edytować właściwości, takie jak nazwa lub rozmiar tego obiektu." />
|
||||
<check_box label="Kopiowanie" name="checkbox next owner can copy" tool_tip="Następny właściciel może wykonać nieograniczoną liczbę kopii tego obiektu. Kopie przechowują informacje o twórcy i nigdy nie mogą mieć większych zezwoleń niż kopiowany element." />
|
||||
<check_box label="Transferowanie" name="checkbox next owner can transfer" tool_tip="Następny właściciel może sprzedać lub oddać ten obiekt." />
|
||||
</panel>
|
||||
<check_box label="Na sprzedaż" name="checkbox for sale" tool_tip="Pozwala ludziom kupować ten obiekt, jego zawartość lub kopię w świecie za określoną cenę." />
|
||||
<combo_box name="sale type" tool_tip="Wybierz, czy kupujący otrzyma kopię przedmiotu, kopię samej zawartości przedmiotu lub oryginalny przedmiot w ogóle.">
|
||||
<combo_box.item label="Kopia" name="Copy"/>
|
||||
<combo_box.item label="Zawartość" name="Contents"/>
|
||||
<combo_box.item label="Oryginał" name="Original"/>
|
||||
</combo_box>
|
||||
<spinner label="Cena: L$" name="Edit Cost" tool_tip="Koszt obiektu." />
|
||||
<check_box label="Pokaż w wyszukiwarce" name="search_check" tool_tip="Udostępnij widzialność tego obiektu w wyszukiwarce"/>
|
||||
<text name="pathfinding_attributes_label">
|
||||
Atrybuty odnajd. ścieżek:
|
||||
</text>
|
||||
<check_box label="Modyfikacja" name="checkbox next owner can modify" tool_tip="Następny właściciel może edytować właściwości, takie jak nazwa lub rozmiar tego obiektu." />
|
||||
<check_box label="Kopiowanie" name="checkbox next owner can copy" tool_tip="Następny właściciel może wykonać nieograniczoną liczbę kopii tego obiektu. Kopie przechowują informacje o twórcy i nigdy nie mogą mieć większych zezwoleń niż kopiowany element." />
|
||||
<check_box label="Transferowanie" name="checkbox next owner can transfer" tool_tip="Następny właściciel może sprzedać lub oddać ten obiekt." />
|
||||
</panel>
|
||||
<check_box label="Na sprzedaż" name="checkbox for sale" tool_tip="Pozwala ludziom kupować ten obiekt, jego zawartość lub kopię w świecie za określoną cenę." />
|
||||
<combo_box name="sale type" tool_tip="Wybierz, czy kupujący otrzyma kopię przedmiotu, kopię samej zawartości przedmiotu lub oryginalny przedmiot w ogóle.">
|
||||
<combo_box.item label="Kopia" name="Copy"/>
|
||||
<combo_box.item label="Zawartość" name="Contents"/>
|
||||
<combo_box.item label="Oryginał" name="Original"/>
|
||||
</combo_box>
|
||||
<spinner label="Cena: L$" name="Edit Cost" tool_tip="Koszt obiektu." />
|
||||
<check_box label="Pokaż w wyszukiwarce" name="search_check" tool_tip="Udostępnij widzialność tego obiektu w wyszukiwarce"/>
|
||||
<text name="pathfinding_attributes_label">
|
||||
Atrybuty odnajd. ścieżek:
|
||||
</text>
|
||||
</panel>
|
||||
</scroll_container>
|
||||
<layout_stack name="buttons_ls">
|
||||
<layout_panel name="open_btn_panel">
|
||||
|
|
|
|||
|
|
@ -2,5 +2,6 @@
|
|||
<floater name="emojipicker" title="Выберите эмодзи">
|
||||
<floater.string name="title_for_recently_used" value="Недавно использованный"/>
|
||||
<floater.string name="title_for_frequently_used" value="Часто используемый"/>
|
||||
<floater.string name="text_no_emoji_for_filter" value="Не найдено эмодзи для '[FILTER]'"/>
|
||||
<text name="Dummy">Эмодзи не выбраны</text>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
<button label="Назад" name="back"/>
|
||||
<button label="Вперед" name="forward"/>
|
||||
<button label="Обновить" name="reload"/>
|
||||
<button label="Перейти" name="go"/>
|
||||
<button label="Зайти" name="go"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="time_controls">
|
||||
<button label="назад" name="rewind"/>
|
||||
|
|
@ -19,11 +19,18 @@
|
|||
<button label="вперед" name="seek"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="parcel_owner_controls">
|
||||
<button label="Отправить текущую страницу на участок" name="assign"/>
|
||||
<button label="Отправить страницу на участок" name="assign"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="external_controls">
|
||||
<text name="plugin_fail_text">
|
||||
Похоже, что плагин для веб-браузера открывается не сразу.
|
||||
Если плагин не загружается, пожалуйста, посетите сайт:
|
||||
|
||||
https://wiki.firestormviewer.org/fs_media
|
||||
|
||||
для информации о возможных действиях по устранению этой проблемы.
|
||||
</text>
|
||||
<button label="Открыть в моем браузере" name="open_browser"/>
|
||||
<check_box label="Всегда открывать в моем браузере" name="open_always"/>
|
||||
<button label="Закрыть" name="close"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
|
|
|||
|
|
@ -62,12 +62,13 @@
|
|||
<radio_item label="Старт" name="start"/>
|
||||
<radio_item label="Стоп" name="stop"/>
|
||||
</radio_group>
|
||||
<check_box label="до завершения анимации" name="wait_anim_check"/>
|
||||
<check_box label="время в секундах:" name="wait_time_check"/>
|
||||
<check_box label="пока нажата кнопка" name="wait_key_release_check" />
|
||||
<check_box label="до конца анимации" name="wait_anim_check"/>
|
||||
<check_box label="время, секунды:" name="wait_time_check"/>
|
||||
<text name="help_label">
|
||||
Все шаги выполняются одновременно, если только вы не добавите шаги ожидания.
|
||||
</text>
|
||||
<check_box label="Активный" name="active_check" tool_tip="Активные жесты можно включить путем ввода их триггеров в чат или нажатием горячих клавиш. Жесты обычно становятся неактивными, если возникает конфликт клавиш."/>
|
||||
<button label="Предварительный просмотр" name="preview_btn"/>
|
||||
<button label="Просмотр" name="preview_btn"/>
|
||||
<button label="Сохранить" name="save_btn"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
<floater name="whitelist_floater" title="Папки и двоичные файлы Белого списка">
|
||||
<text name="whitelist_intro">
|
||||
Антивирус и защита от вредоносных программ являются неотъемлемой частью безопасного использования Интернета, но они могут вызвать целый ряд проблем у пользователя.
|
||||
Чтобы уменьшить помехи и повысить стабильность и производительность, мы настоятельно рекомендуем всем пользователям убедиться в наличии исключений (известных как Белый список) для важных папок и программ, которые использует программа просмотра.
|
||||
|
||||
Для получения более подробной информации посетите веб-сайт
|
||||
https://wiki.firestormviewer.org/antivirus_whitelisting
|
||||
</text>
|
||||
<text name="whitelist_folder_instruction">
|
||||
Чтобы упростить задачу, в поле ниже указаны папки, которые использует программа просмотра.
|
||||
Пожалуйста добавьте их в список исключений антивируса для папок, как показано на вики-странице выше.
|
||||
</text>
|
||||
<text name="whitelist_exe_instruction">
|
||||
В следующем поле указаны название и полный путь к исполняемым файлам программы просмотра.
|
||||
Добавьте их в список исключений антивируса для файлов, как показано на вики-странице выше.
|
||||
</text>
|
||||
</floater>
|
||||
|
|
@ -18,6 +18,7 @@
|
|||
<menu_item_call label="Очистить корзину" name="Empty Trash"/>
|
||||
<menu_item_call label="Очистить 'Найденные вещи'" name="Empty Lost And Found"/>
|
||||
<menu_item_call label="Новая папка" name="New Folder"/>
|
||||
<menu_item_call label="Новая папка" name="New Listing Folder"/>
|
||||
<menu_item_call label="Новый комплект одежды" name="New Outfit"/>
|
||||
<menu_item_call label="Новый скрипт" name="New Script"/>
|
||||
<menu_item_call label="Новая заметка" name="New Note"/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<toggleable_menu name="Gear Outfit">
|
||||
<menu_item_call label="Переодеться" name="wear"/>
|
||||
<menu_item_call label="Надеть" name="wear_add"/>
|
||||
<menu_item_call label="Переодеться (заменить)" name="wear"/>
|
||||
<menu_item_call label="Надеть (добавить)" name="wear_add"/>
|
||||
<menu_item_call label="Снять" name="take_off"/>
|
||||
<menu_item_call label="Изображение" name="thumbnail"/>
|
||||
<menu_item_call label="Переименовать костюм" name="rename"/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<context_menu name="Outfit">
|
||||
<menu_item_call label="Переодеться" name="wear_replace"/>
|
||||
<menu_item_call label="Надеть" name="wear_add"/>
|
||||
<menu_item_call label="Переодеться (заменить)" name="wear_replace"/>
|
||||
<menu_item_call label="Надеть (добавить)" name="wear_add"/>
|
||||
<menu_item_call label="Снять" name="take_off"/>
|
||||
<menu_item_call label="Изменить костюм" name="edit"/>
|
||||
<menu_item_call label="Изображение..." name="thumbnail"/>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
</menu>
|
||||
|
||||
<menu_item_call label="Выберите аватар" name="Avatar Picker"/>
|
||||
|
||||
<menu_item_call label="Удалить выбранные присоединения" name="Remove Selected Attachments"/>
|
||||
<menu_item_call label="Высота смещения" name="HoverHeight"/>
|
||||
<menu label="Движение" name="Movement">
|
||||
<menu_item_call label="Встать" name="Stand up"/>
|
||||
|
|
@ -334,6 +334,7 @@
|
|||
<menu_item_call label="Support portal" name="Support portal"/>
|
||||
<menu_item_call label="[SECOND_LIFE] News" name="Second Life News"/>
|
||||
<menu_item_call label="[SECOND_LIFE] Blogs" name="Second Life Blogs"/> -->
|
||||
<menu_item_call name="whitelist_folders" label="Советник Белого Списка"/>
|
||||
<menu_item_call label="Проверка статуса сети (Grid Status)" name="Grid Status"/>
|
||||
<menu_item_call label="Пожаловаться" name="Report Abuse"/>
|
||||
<menu_item_call label="Сообщить об ошибке" name="Report Bug"/>
|
||||
|
|
|
|||
|
|
@ -118,6 +118,11 @@
|
|||
Не удалось активировать эту папку версии, ошибка:
|
||||
|
||||
"[ERROR_CODE]"
|
||||
</notification>
|
||||
<notification name="InvalidKeystroke">
|
||||
Было введено неверное нажатие клавиши.
|
||||
[REASON].
|
||||
Пожалуйста, введите правильный текст.
|
||||
</notification>
|
||||
<notification name="MerchantForceValidateListing">
|
||||
Для того, чтобы создать свой список, мы исправили иерархию вашего списка содержимого.
|
||||
|
|
@ -1749,18 +1754,18 @@
|
|||
<usetemplate ignoretext="Подтверждать перед возвратом объектов владельцам" name="okcancelignore" notext="Отмена" yestext="Да"/>
|
||||
</notification>
|
||||
<notification name="GroupLeaveConfirmMember">
|
||||
В настоящее время вы состоите в группе <nolink>[GROUP]</nolink>.
|
||||
Хотите выйти из группы?
|
||||
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="Да"/>
|
||||
Покинуть группу '<nolink>[GROUP]</nolink>'?
|
||||
В настоящее время плата за вступление в эту группу L$[COST].
|
||||
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="Покинуть"/>
|
||||
</notification>
|
||||
<notification name="GroupLeaveConfirmMemberNoFee">
|
||||
Покинуть группу '<nolink>[GROUP]</nolink>'?
|
||||
В настоящее время плата за вступление в эту группу не взимается.
|
||||
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="Покинуть"/>
|
||||
</notification>
|
||||
<notification name="GroupDepart">
|
||||
Вы покинули группу «[group_name]».
|
||||
</notification>
|
||||
<notification name="GroupLeaveConfirmMemberWithFee">
|
||||
Вы в настоящее время являетесь участником группы <nolink>[GROUP]</nolink>. Присоединение снова будет стоить L$[AMOUNT].
|
||||
Покинуть группу?
|
||||
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="Да"/>
|
||||
</notification>
|
||||
<notification name="OwnerCannotLeaveGroup">
|
||||
Невозможно выйти из группы. Вы не можете покинуть группу, потому что вы единственый владелец группы. Пожалуйста, назначить сначала назначьте на данную роль другого пользователя.
|
||||
</notification>
|
||||
|
|
@ -2457,6 +2462,19 @@
|
|||
Вы уверены, что хотите удалить их?
|
||||
<usetemplate ignoretext="Подтвердить удаление отфильтрованных элементов" name="okcancelignore" notext="Отмена" yestext="Да"/>
|
||||
</notification>
|
||||
|
||||
<notification name="DeleteWornItems">
|
||||
Предмет(ы) которые вы хотите удалить надеты на ваш аватар.
|
||||
Удалить эти элементы со своего аватара?
|
||||
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="Снять и удалить предмет(ы)"/>
|
||||
</notification>
|
||||
|
||||
<notification name="CantDeleteRequiredClothing">
|
||||
Предмет(ы), которые вы хотите удалить, относятся к обязательным слоям одежды (кожа, фигура, волосы, глаза).
|
||||
Вы должны заменить эти слои, прежде чем удалять их.
|
||||
<usetemplate name="okbutton" yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification name="DeleteThumbnail">
|
||||
Удалить изображение этого товара? Отмена невозможна.
|
||||
<usetemplate ignoretext="Подтвердите перед удалением миниатюры." name="okcancelignore" notext="Отмена" yestext="Удалить"/>
|
||||
|
|
|
|||
|
|
@ -28,6 +28,9 @@
|
|||
</combo_box>
|
||||
</layout_panel>
|
||||
<layout_panel name="grid_panel">
|
||||
<text name="grid_builder_text" width="300">
|
||||
+ Нажмите чтобы добавить больше сеток
|
||||
</text>
|
||||
<text name="grid_login_text">
|
||||
Подключиться к сетке:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@
|
|||
<layout_stack name="2nd_row_stack">
|
||||
<layout_panel name="grid_panel">
|
||||
<text name="grid_login_text" width="45">Сеть:</text>
|
||||
<text name="grid_builder_text" width="300">+ Нажмите чтобы добавить больше сеток</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="mode_selection">
|
||||
<text name="mode_selection_text">Режим:</text>
|
||||
|
|
|
|||
|
|
@ -9,9 +9,10 @@
|
|||
<panel.string name="group_join_btn">
|
||||
Присоединиться (L$[AMOUNT])
|
||||
</panel.string>
|
||||
<panel.string name="group_join_free">
|
||||
Бесплатно
|
||||
</panel.string>
|
||||
<panel.string name="group_join_free">Бесплатно</panel.string>
|
||||
<panel.string name="group_member">Член</panel.string>
|
||||
<panel.string name="join_txt">Вступить</panel.string>
|
||||
<panel.string name="leave_txt">Покинуть</panel.string>
|
||||
|
||||
<layout_stack name="group_info_sidetray_main">
|
||||
<layout_panel name="header_container">
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="group_list_item">
|
||||
<text name="group_name" value="Неизвестно"/>
|
||||
<button name="notices_btn" tool_tip="Групповые уведомления"/>
|
||||
<button name="info_btn" tool_tip="Дополнительная информация"/>
|
||||
<button name="profile_btn" tool_tip="Просмотреть профиль"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="group_list_item">
|
||||
<text name="group_name" value="Неизвестно"/>
|
||||
<button name="notices_btn" tool_tip="Групповые уведомления"/>
|
||||
<button name="visibility_hide_btn" tool_tip="Скрыть группу в моем профиле"/>
|
||||
<button name="visibility_show_btn" tool_tip="Показывать группу в моем профиле"/>
|
||||
<button name="info_btn" tool_tip="Больше информации"/>
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@
|
|||
</layout_panel>
|
||||
</layout_stack>
|
||||
<check_box name="show_in_search" label="Показать в поиске" tool_tip="Позволить людям видеть вас в результатах поиска"/>
|
||||
<check_box name="hide_sl_age" label="Показать полную дату рождения" tool_tip="Позволить людям видеть ваш возраст в СЛ"/>
|
||||
<button name="save_description_changes" label="Сохранить"/>
|
||||
<button name="discard_description_changes" label="Отказаться"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -83,8 +83,8 @@
|
|||
<combo_box.item label="Заплатить за объект" name="Payobject"/>
|
||||
<combo_box.item label="Открыть" name="Open"/>
|
||||
<combo_box.item label="Приблизить" name="Zoom"/>
|
||||
<combo_box.item label="Игнорировать объект" name="Ignoreobject"/>
|
||||
<combo_box.item label="Нет" name="None"/>
|
||||
<combo_box.item label="Игнорировать объект" name="Ignoreobject"/>
|
||||
</combo_box>
|
||||
<panel name="perms_inv">
|
||||
<text name="perm_modify">
|
||||
|
|
|
|||
|
|
@ -1444,6 +1444,20 @@ https://www.firestormviewer.org/support за помощь в решении эт
|
|||
<string name="executable_files">
|
||||
Исполняемые файлы программы
|
||||
</string>
|
||||
|
||||
<string name="Validator_InvalidNumericString">Недопустимая числовая строка: "[STR]"</string>
|
||||
<string name="Validator_ShouldNotBeMinus">Недопустимый начальный символ: '[CH]' (не должно быть минусом)</string>
|
||||
<string name="Validator_ShouldNotBeMinusOrZero">Недопустимый начальный символ: '[CH]' (не должно быть ни минуса, ни нуля)</string>
|
||||
<string name="Validator_ShouldBeDigit">Недопустимый символ [NR]: '[CH]' (должна быть только цифра)</string>
|
||||
<string name="Validator_ShouldBeDigitOrDot">Недопустимый символ [NR]: '[CH]' (должна быть только цифра или десятичная точка)</string>
|
||||
<string name="Validator_ShouldBeDigitOrAlpha">Недопустимый символ [NR]: '[CH]' (должна быть только цифра или буквенно-цифровой символ ASCII)</string>
|
||||
<string name="Validator_ShouldBeDigitOrAlphaOrSpace">Недопустимый символ [NR]: '[CH]' (должна быть только цифра или буквенно-цифровой символ ASCII или пробел)</string>
|
||||
<string name="Validator_ShouldBeDigitOrAlphaOrPunct">Недопустимый символ [NR]: '[CH]' (должна быть только цифра или буквенно-цифровой символ ASCII или пунктуация)</string>
|
||||
<string name="Validator_ShouldBeDigitOrAlphaOrPunctNotSpace">Недопустимый символ [NR]: '[CH]' (должна быть только цифра или буквенно-цифровой символ ASCII или пунктуация без пробела)</string>
|
||||
<string name="Validator_ShouldBeDigitNotSpace">Недопустимый символ [NR]: '[CH]' (должна быть только цифра без пробела)</string>
|
||||
<string name="Validator_ShouldBeASCII">Недопустимый символ [NR]: '[CH]' (должен быть только символ ASCII)</string>
|
||||
<string name="Validator_ShouldBeNewLineOrASCII">Недопустимый символ [NR]: '[CH]' (должен быть только символ ASCII или новая строка)</string>
|
||||
|
||||
<string name="LSLTipSleepTime">
|
||||
Пауза скрипта на [SLEEP_TIME] секунд.
|
||||
</string>
|
||||
|
|
@ -5297,9 +5311,12 @@ https://www.firestormviewer.org/support за помощь в решении эт
|
|||
<string name="dance8">
|
||||
танец8
|
||||
</string>
|
||||
<string name="AvatarBirthDateFormat">
|
||||
<string name="AvatarBirthDateFormatFull">
|
||||
[day,datetime,utc].[mthnum,datetime,utc].[year,datetime,utc]
|
||||
</string>
|
||||
<string name="AvatarBirthDateFormatShort">
|
||||
[day,datetime,utc].[mthnum,datetime,utc]
|
||||
</string>
|
||||
<string name="AvatarBirthDateFormat_legacy">
|
||||
[day,datetime,slt].[mthnum,datetime,slt].[year,datetime,slt]
|
||||
</string>
|
||||
|
|
@ -5417,7 +5434,8 @@ https://www.firestormviewer.org/support за помощь в решении эт
|
|||
Для этого комплекта одежды нет вещей
|
||||
</string>
|
||||
<string name="ExternalEditorNotSet">
|
||||
Выберите редактор, используя параметр ExternalEditor.
|
||||
Выберите редактор, установив переменную среды LL_SCRIPT_EDITOR или параметр Внешнего Редактора.
|
||||
смотрите https://wiki.secondlife.com/wiki/LSL_Alternate_Editors
|
||||
</string>
|
||||
<string name="ExternalEditorNotFound">
|
||||
Не удается найти указанный внешний редактор.
|
||||
|
|
@ -6580,6 +6598,9 @@ ID объекта: [INSPECTING_KEY]
|
|||
<string name="avatar_age_alert">
|
||||
сработало возрастное предупреждение. Возраст: [AGE] дней
|
||||
</string>
|
||||
<string name="avatar_age_not_available">
|
||||
н.д.
|
||||
</string>
|
||||
<string name="TotalScriptCountChangeIncrease">
|
||||
Количество скриптов в регионе возросло с [OLD_VALUE] до [NEW_VALUE] ([DIFFERENCE]).
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -219,6 +219,26 @@ background_visible="false"
|
|||
width="23" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="3"
|
||||
name="btn_activate_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
layout="topleft"
|
||||
follows="bottom|left|right"
|
||||
label="Activate"
|
||||
name="btn_activate"
|
||||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -227,7 +247,7 @@ background_visible="false"
|
|||
name="btn_chat_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="97">
|
||||
width="72">
|
||||
<button
|
||||
layout="topleft"
|
||||
follows="bottom|left|right"
|
||||
|
|
@ -236,7 +256,7 @@ background_visible="false"
|
|||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="96" />
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -247,7 +267,7 @@ background_visible="false"
|
|||
name="call_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="97">
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
|
|
@ -257,7 +277,7 @@ background_visible="false"
|
|||
layout="topleft"
|
||||
tool_tip="Call this group"
|
||||
top="0"
|
||||
width="96" />
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -268,7 +288,7 @@ background_visible="false"
|
|||
name="btn_apply_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="97">
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -277,7 +297,7 @@ background_visible="false"
|
|||
name="btn_apply"
|
||||
left="1"
|
||||
top="0"
|
||||
width="96" />
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
||||
|
|
|
|||
|
|
@ -209,6 +209,25 @@ background_visible="true"
|
|||
orientation="horizontal"
|
||||
top_delta="2"
|
||||
width="445">
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="3"
|
||||
name="btn_activate_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="67">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
label="Activate"
|
||||
name="btn_activate"
|
||||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="66" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -217,7 +236,7 @@ background_visible="true"
|
|||
name="btn_chat_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="91">
|
||||
width="67">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
label="Chat"
|
||||
|
|
@ -225,7 +244,7 @@ background_visible="true"
|
|||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="90" />
|
||||
width="66" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -236,7 +255,7 @@ background_visible="true"
|
|||
name="call_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="91">
|
||||
width="77">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
|
|
@ -246,7 +265,7 @@ background_visible="true"
|
|||
layout="topleft"
|
||||
tool_tip="Call this group"
|
||||
top="0"
|
||||
width="90" />
|
||||
width="76" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -257,7 +276,7 @@ background_visible="true"
|
|||
name="btn_apply_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="91">
|
||||
width="57">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -266,7 +285,7 @@ background_visible="true"
|
|||
name="btn_apply"
|
||||
left="1"
|
||||
top="0"
|
||||
width="90" />
|
||||
width="56" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
||||
|
|
|
|||
|
|
@ -868,8 +868,8 @@ with the same filename but different name
|
|||
<texture name="Inv_OutboxClosed" file_name="icons/Inv_SysClosed.png" />
|
||||
<texture name="Inv_SettingsOpen" file_name="icons/Inv_SysOpen.png" />
|
||||
<texture name="Inv_SettingsClosed" file_name="icons/Inv_SysClosed.png" />
|
||||
<texture name="Inv_MaterialsClosed" file_name="icons/Inv_SysOpen.png" />
|
||||
<texture name="Inv_MaterialsOpen" file_name="icons/Inv_SysClosed.png" />
|
||||
<texture name="Inv_MaterialsOpen" file_name="icons/Inv_SysOpen.png" />
|
||||
<texture name="Inv_MaterialsClosed" file_name="icons/Inv_SysClosed.png" />
|
||||
<texture name="TabIcon_Translate_Off" file_name="taskpanel/translate_icon_24x24.png" preload="false" />
|
||||
<texture name="ao_toggle_18" file_name="toolbar_icons/animation_override.png" preload="false" />
|
||||
<texture name="groundsit" file_name="toolbar_icons/groundsit.png" preload="true" />
|
||||
|
|
|
|||
|
|
@ -268,7 +268,25 @@ background_visible="true"
|
|||
orientation="horizontal"
|
||||
top_delta="0"
|
||||
width="279">
|
||||
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="3"
|
||||
name="btn_activate_lp"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
label="Activate"
|
||||
name="btn_activate"
|
||||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -276,7 +294,7 @@ background_visible="true"
|
|||
left_pad="3"
|
||||
name="btn_chat_lp"
|
||||
auto_resize="true"
|
||||
width="83">
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
label="Chat"
|
||||
|
|
@ -284,7 +302,7 @@ background_visible="true"
|
|||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="82" />
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -294,7 +312,7 @@ background_visible="true"
|
|||
left_pad="3"
|
||||
name="call_btn_lp"
|
||||
auto_resize="true"
|
||||
width="113">
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
|
|
@ -304,7 +322,7 @@ background_visible="true"
|
|||
layout="topleft"
|
||||
tool_tip="Call this group"
|
||||
top="0"
|
||||
width="112" />
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -314,7 +332,7 @@ background_visible="true"
|
|||
left_pad="3"
|
||||
name="btn_apply_lp"
|
||||
auto_resize="true"
|
||||
width="83">
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -323,7 +341,7 @@ background_visible="true"
|
|||
name="btn_apply"
|
||||
left="1"
|
||||
top="0"
|
||||
width="82" />
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<!--<button
|
||||
|
|
|
|||
|
|
@ -12,6 +12,15 @@
|
|||
<panel.string name="group_join_free">
|
||||
Darmowe
|
||||
</panel.string>
|
||||
<panel.string name="group_member">
|
||||
Osoba
|
||||
</panel.string>
|
||||
<panel.string name="join_txt">
|
||||
Dołącz
|
||||
</panel.string>
|
||||
<panel.string name="leave_txt">
|
||||
Opuść
|
||||
</panel.string>
|
||||
<layout_stack name="group_info_sidetray_main">
|
||||
<layout_panel name="header_container">
|
||||
<panel name="group_info_top">
|
||||
|
|
@ -34,6 +43,9 @@
|
|||
<layout_stack name="layout">
|
||||
<layout_panel name="button_row">
|
||||
<layout_stack name="button_row_ls">
|
||||
<layout_panel name="btn_activate_lp">
|
||||
<button label="Aktywuj" name="btn_activate" />
|
||||
</layout_panel>
|
||||
<layout_panel name="btn_chat_lp">
|
||||
<button label="Czat" name="btn_chat"/>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@
|
|||
<button label="Чат" name="btn_chat"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="call_btn_lp">
|
||||
<button label="Звонок группе" name="btn_call" tool_tip="Звонок этой группе"/>
|
||||
<button label="Звонок" name="btn_call" tool_tip="Звонок этой группе"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="btn_apply_lp">
|
||||
<button label="Сохранить" label_selected="Сохранить" name="btn_apply"/>
|
||||
|
|
|
|||
|
|
@ -868,8 +868,8 @@ with the same filename but different name
|
|||
<texture name="Inv_OutboxClosed" file_name="icons/Inv_SysClosed.png" />
|
||||
<texture name="Inv_SettingsOpen" file_name="icons/Inv_SysOpen.png" />
|
||||
<texture name="Inv_SettingsClosed" file_name="icons/Inv_SysClosed.png" />
|
||||
<texture name="Inv_MaterialsClosed" file_name="icons/Inv_SysOpen.png" />
|
||||
<texture name="Inv_MaterialsOpen" file_name="icons/Inv_SysClosed.png" />
|
||||
<texture name="Inv_MaterialsOpen" file_name="icons/Inv_SysOpen.png" />
|
||||
<texture name="Inv_MaterialsClosed" file_name="icons/Inv_SysClosed.png" />
|
||||
<texture name="TabIcon_Translate_Off" file_name="taskpanel/translate_icon_24x24.png" preload="false" />
|
||||
<texture name="ao_toggle_18" file_name="toolbar_icons/animation_override.png" preload="false" />
|
||||
<texture name="groundsit" file_name="toolbar_icons/groundsit.png" preload="true" />
|
||||
|
|
|
|||
|
|
@ -268,7 +268,25 @@ background_visible="true"
|
|||
orientation="horizontal"
|
||||
top_delta="0"
|
||||
width="279">
|
||||
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="3"
|
||||
name="btn_activate_lp"
|
||||
auto_resize="true"
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
label="Activate"
|
||||
name="btn_activate"
|
||||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -276,7 +294,7 @@ background_visible="true"
|
|||
left_pad="3"
|
||||
name="btn_chat_lp"
|
||||
auto_resize="true"
|
||||
width="83">
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
label="Chat"
|
||||
|
|
@ -284,7 +302,7 @@ background_visible="true"
|
|||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="82" />
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -294,7 +312,7 @@ background_visible="true"
|
|||
left_pad="3"
|
||||
name="call_btn_lp"
|
||||
auto_resize="true"
|
||||
width="113">
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
|
|
@ -304,7 +322,7 @@ background_visible="true"
|
|||
layout="topleft"
|
||||
tool_tip="Call this group"
|
||||
top="0"
|
||||
width="112" />
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -314,7 +332,7 @@ background_visible="true"
|
|||
left_pad="3"
|
||||
name="btn_apply_lp"
|
||||
auto_resize="true"
|
||||
width="83">
|
||||
width="72">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -323,7 +341,7 @@ background_visible="true"
|
|||
name="btn_apply"
|
||||
left="1"
|
||||
top="0"
|
||||
width="82" />
|
||||
width="71" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<!--<button
|
||||
|
|
|
|||
|
|
@ -12,6 +12,15 @@
|
|||
<panel.string name="group_join_free">
|
||||
Darmowe
|
||||
</panel.string>
|
||||
<panel.string name="group_member">
|
||||
Osoba
|
||||
</panel.string>
|
||||
<panel.string name="join_txt">
|
||||
Dołącz
|
||||
</panel.string>
|
||||
<panel.string name="leave_txt">
|
||||
Opuść
|
||||
</panel.string>
|
||||
<layout_stack name="group_info_sidetray_main">
|
||||
<layout_panel name="header_container">
|
||||
<panel name="group_info_top">
|
||||
|
|
@ -34,6 +43,9 @@
|
|||
<layout_stack name="layout">
|
||||
<layout_panel name="button_row">
|
||||
<layout_stack name="button_row_ls">
|
||||
<layout_panel name="btn_activate_lp">
|
||||
<button label="Aktywuj" name="btn_activate" />
|
||||
</layout_panel>
|
||||
<layout_panel name="btn_chat_lp">
|
||||
<button label="Czat" name="btn_chat"/>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -209,6 +209,25 @@ background_visible="true"
|
|||
orientation="horizontal"
|
||||
top_delta="2"
|
||||
width="445">
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
layout="bottomleft"
|
||||
left_pad="3"
|
||||
name="btn_activate_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="67">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
label="Activate"
|
||||
name="btn_activate"
|
||||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="66" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -217,7 +236,7 @@ background_visible="true"
|
|||
name="btn_chat_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="91">
|
||||
width="67">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
label="Chat"
|
||||
|
|
@ -225,7 +244,7 @@ background_visible="true"
|
|||
left="1"
|
||||
height="23"
|
||||
top="0"
|
||||
width="90" />
|
||||
width="66" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -236,7 +255,7 @@ background_visible="true"
|
|||
name="call_btn_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="91">
|
||||
width="67">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
left="1"
|
||||
|
|
@ -246,7 +265,7 @@ background_visible="true"
|
|||
layout="topleft"
|
||||
tool_tip="Call this group"
|
||||
top="0"
|
||||
width="90" />
|
||||
width="66" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -257,7 +276,7 @@ background_visible="true"
|
|||
name="btn_apply_lp"
|
||||
user_resize="false"
|
||||
auto_resize="true"
|
||||
width="91">
|
||||
width="67">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
height="23"
|
||||
|
|
@ -266,7 +285,7 @@ background_visible="true"
|
|||
name="btn_apply"
|
||||
left="1"
|
||||
top="0"
|
||||
width="90" />
|
||||
width="66" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
||||
|
|
|
|||
|
|
@ -68,7 +68,11 @@
|
|||
name="no_group_text"
|
||||
value="None" />
|
||||
<string
|
||||
name="age_format">
|
||||
name="age_format_short">
|
||||
Birthdate: [REG_DATE]
|
||||
</string>
|
||||
<string
|
||||
name="age_format_full">
|
||||
Birthdate: [REG_DATE]
|
||||
([AGE])
|
||||
</string>
|
||||
|
|
@ -763,6 +767,19 @@
|
|||
layout="topleft"
|
||||
visible="false" />
|
||||
|
||||
<check_box
|
||||
name="hide_sl_age"
|
||||
label="Show full birthdate"
|
||||
tool_tip="Let people see your SL age"
|
||||
enabled="false"
|
||||
bottom="-28"
|
||||
left="230"
|
||||
height="16"
|
||||
width="130"
|
||||
follows="left|bottom"
|
||||
layout="topleft"
|
||||
visible="false" />
|
||||
|
||||
<button
|
||||
name="save_description_changes"
|
||||
label="Save"
|
||||
|
|
|
|||
|
|
@ -11,7 +11,10 @@
|
|||
</string>
|
||||
<string name="no_partner_text" value="Aucun" />
|
||||
<string name="no_group_text" value="Aucun" />
|
||||
<string name="age_format">
|
||||
<string name="age_format_short">
|
||||
Anniversaire : [REG_DATE]
|
||||
</string>
|
||||
<string name="age_format_full">
|
||||
Anniversaire : [REG_DATE]
|
||||
([AGE])
|
||||
</string>
|
||||
|
|
@ -66,6 +69,7 @@ Anniversaire : [REG_DATE]
|
|||
</layout_panel>
|
||||
</layout_stack>
|
||||
<check_box name="show_in_search" label="Afficher dans la recherche" tool_tip="Laissez les autres vous voir dans les résultats de recherche" />
|
||||
<check_box name="hide_sl_age" label="Afficher la date de naissance complète'" tool_tip="Laissez les gens voir votre âge SL"/>
|
||||
<button name="save_description_changes" label="Enregistrer" />
|
||||
<button name="discard_description_changes" label="Annuler" />
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,10 @@
|
|||
<string name="BadgeTeam" value="Zespół [APP_NAME]a" />
|
||||
<string name="no_partner_text" value="Brak" />
|
||||
<string name="no_group_text" value="Brak" />
|
||||
<string name="age_format">
|
||||
<string name="age_format_short">
|
||||
Urodziny: [REG_DATE]
|
||||
</string>
|
||||
<string name="age_format_full">
|
||||
Urodziny: [REG_DATE]
|
||||
([AGE])
|
||||
</string>
|
||||
|
|
@ -66,6 +69,7 @@ Urodziny: [REG_DATE]
|
|||
</layout_panel>
|
||||
</layout_stack>
|
||||
<check_box name="show_in_search" label="Pokaż w wyszukiwarce" tool_tip="Pozwól innym zobaczyć Cię w wynikach wyszukiwania" />
|
||||
<check_box name="hide_sl_age" label="Pełna data urodzenia" tool_tip="Pozwól innym widzieć Twój wiek w SL" />
|
||||
<button name="save_description_changes" label="Zapisz" />
|
||||
<button name="discard_description_changes" label="Odrzuć" />
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,10 @@
|
|||
<string name="BadgeTeam" value="Член [APP_NAME]" />
|
||||
<string name="no_partner_text" value="Нет" />
|
||||
<string name="no_group_text" value="Нет" />
|
||||
<string name="age_format">
|
||||
<string name="age_format_short">
|
||||
Возраст: [REG_DATE]
|
||||
</string>
|
||||
<string name="age_format_full">
|
||||
Возраст: [REG_DATE]
|
||||
([AGE])
|
||||
</string>
|
||||
|
|
@ -68,6 +71,7 @@
|
|||
</layout_panel>
|
||||
</layout_stack>
|
||||
<check_box name="show_in_search" label="Показать в поиске" tool_tip="Пусть люди видят вас в результатах поиска"/>
|
||||
<check_box name="hide_sl_age" label="Показать полную дату рождения" tool_tip="Позволить людям видеть ваш возраст в СЛ"/>
|
||||
<button name="save_description_changes" label="Сохранить"/>
|
||||
<button name="discard_description_changes" label="Отклонить"/>
|
||||
</panel>
|
||||
|
|
|
|||
Loading…
Reference in New Issue