# Conflicts:
#	indra/llfilesystem/lldiskcache.cpp
#	indra/llfilesystem/lldiskcache.h
#	indra/llfilesystem/llfilesystem.cpp
#	indra/llui/llaccordionctrl.cpp
#	indra/llui/llaccordionctrl.h
#	indra/newview/llfloaterimnearbychathandler.cpp
#	indra/newview/llfloaterpreference.cpp
#	indra/newview/llfloatersettingsdebug.cpp
#	indra/newview/llfloatersettingsdebug.h
#	indra/newview/llfloatertools.cpp
#	indra/newview/llfloatertools.h
#	indra/newview/llpanelmaininventory.cpp
#	indra/newview/llpanelmaininventory.h
#	indra/newview/llpanelpeople.cpp
#	indra/newview/llpreviewnotecard.cpp
#	indra/newview/llpreviewnotecard.h
#	indra/newview/llpreviewscript.cpp
#	indra/newview/llpreviewtexture.cpp
#	indra/newview/llscreenchannel.cpp
#	indra/newview/llviewerwindow.cpp
#	indra/newview/pipeline.cpp
#	indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
master
Ansariel 2024-08-19 18:55:52 +02:00
commit 571155c561
56 changed files with 654 additions and 1141 deletions

View File

@ -40,7 +40,7 @@ CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
Cpp11BracedListStyle: false
DeriveLineEnding: true
DerivePointerAlignment: false
DisableFormat: false
@ -87,7 +87,7 @@ PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 1000
PointerAlignment: Right
PointerAlignment: Left
ReflowComments: true
SortIncludes: false
SortUsingDeclarations: true
@ -95,7 +95,7 @@ SpaceAfterCStyleCast: true
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements

View File

@ -202,23 +202,32 @@ jobs:
[[ "$arch" == "MINGW6" ]] && arch=CYGWIN
export AUTOBUILD="$(which autobuild)"
# determine the viewer channel from the branch name
branch=$AUTOBUILD_VCS_BRANCH
IFS='/' read -ra ba <<< "$branch"
prefix=${ba[0]}
if [ "$prefix" == "project" ]; then
IFS='_' read -ra prj <<< "${ba[1]}"
# uppercase first letter of each word
export viewer_channel="Second Life Project ${prj[*]^}"
elif [[ "$prefix" == "release" || "$prefix" == "main" ]];
# determine the viewer channel from the branch or tag name
# trigger an EDU build by including "edu" in the tag
edu=${{ github.ref_type == 'tag' && contains(github.ref_name, 'edu') }}
echo "ref_type=${{ github.ref_type }}, ref_name=${{ github.ref_name }}, edu='$edu'"
if [[ "$edu" == "true" ]]
then
export viewer_channel="Second Life Release"
export viewer_channel="Second Life Release edu"
elif [[ "$branch" == "develop" ]];
then
export viewer_channel="Second Life Develop"
else
export viewer_channel="Second Life Test"
branch=$AUTOBUILD_VCS_BRANCH
IFS='/' read -ra ba <<< "$branch"
prefix=${ba[0]}
if [ "$prefix" == "project" ]; then
IFS='_' read -ra prj <<< "${ba[1]}"
# uppercase first letter of each word
export viewer_channel="Second Life Project ${prj[*]^}"
elif [[ "$prefix" == "release" || "$prefix" == "main" ]];
then
export viewer_channel="Second Life Release"
else
export viewer_channel="Second Life Test"
fi
fi
echo "viewer_channel=$viewer_channel"
echo "viewer_channel=$viewer_channel" >> "$GITHUB_OUTPUT"
# On windows we need to point the build to the correct python
# as neither CMake's FindPython nor our custom Python.cmake module
@ -263,6 +272,7 @@ jobs:
# The other upload of nontrivial size is the symbol file. Use a distinct
# artifact for that too.
- name: Upload symbol file
if: steps.build.outputs.symbolfile
uses: actions/upload-artifact@v4
with:
name: "${{ steps.build.outputs.artifact }}-symbols"

View File

@ -2200,24 +2200,24 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>1ebe715fc1096198e343c41d50654c11509cdbba</string>
<string>bc574ea89164387a6c12bb49e1bac091c1d4da27</string>
<key>hash_algorithm</key>
<string>sha1</string>
<key>url</key>
<string>https://github.com/secondlife/3p-nvapi/releases/download/v352.aac0e19/nvapi-352.aac0e19-windows64-aac0e19.tar.zst</string>
<string>https://github.com/secondlife/3p-nvapi/releases/download/v560-r1/nvapi-560.0.0-r1-windows64-10390321492.tar.zst</string>
</map>
<key>name</key>
<string>windows64</string>
</map>
</map>
<key>license</key>
<string>NVIDIA Corporation Software License Agreement NVAPI SDK</string>
<string>MIT</string>
<key>license_file</key>
<string>LICENSES/NVAPI_SDK_License_Agreement.pdf</string>
<string>LICENSES/nvapi.txt</string>
<key>copyright</key>
<string>Copyright © 2012 NVIDIA Corporation. All rights reserved.</string>
<string>Copyright (c) 2024 NVIDIA CORPORATION and AFFILIATES. All rights reserved.</string>
<key>version</key>
<string>352.aac0e19</string>
<string>560.0.0-r1</string>
<key>name</key>
<string>nvapi</string>
<key>description</key>

View File

@ -170,10 +170,6 @@ if(WINDOWS)
MESSAGE(STATUS "Redist lib ${release_msvc_file} not found")
endif()
endforeach()
MESSAGE(STATUS "Will copy redist files for MSVC ${MSVC_VER}:")
foreach(target ${third_party_targets})
MESSAGE(STATUS "${target}")
endforeach()
elseif(DARWIN)
set(vivox_lib_dir "${ARCH_PREBUILT_DIRS_RELEASE}")

View File

@ -326,7 +326,7 @@ int LLFile::rename(const std::string& filename, const std::string& newname, int
return warnif(STRINGIZE("rename to '" << newname << "' from"), filename, rc, supress_error);
}
bool LLFile::copy(const std::string from, const std::string to)
bool LLFile::copy(const std::string& from, const std::string& to)
{
bool copied = false;
LLFILE* in = LLFile::fopen(from, "rb"); /* Flawfinder: ignore */
@ -468,7 +468,7 @@ LLFILE * LLFile::_Fiopen(const std::string& filename,
if (valid[n] == 0)
return (0); // no valid mode
else if (norepflag && mode & (ios_base::out || ios_base::app)
else if (norepflag && mode & (ios_base::out | ios_base::app)
&& (fp = LLFile::fopen(filename, "r")) != 0) /* Flawfinder: ignore */
{ // file must not exist, close and fail
fclose(fp);

View File

@ -77,7 +77,7 @@ public:
static int rmdir(const std::string& filename);
static int remove(const std::string& filename, int supress_error = 0);
static int rename(const std::string& filename,const std::string& newname, int supress_error = 0);
static bool copy(const std::string from, const std::string to);
static bool copy(const std::string& from, const std::string& to);
static int stat(const std::string& filename,llstat* file_status);
static bool isdir(const std::string& filename);
@ -160,7 +160,7 @@ private:
* Does The Right Thing when passed a non-ASCII pathname. Sadly, that isn't
* true of Microsoft's std::ifstream.
*/
class LL_COMMON_API llifstream : public std::ifstream
class LL_COMMON_API llifstream : public std::ifstream
{
// input stream associated with a C stream
public:
@ -205,7 +205,7 @@ class LL_COMMON_API llifstream : public std::ifstream
* Right Thing when passed a non-ASCII pathname. Sadly, that isn't true of
* Microsoft's std::ofstream.
*/
class LL_COMMON_API llofstream : public std::ofstream
class LL_COMMON_API llofstream : public std::ofstream
{
public:
// Constructors:
@ -241,7 +241,7 @@ class LL_COMMON_API llofstream : public std::ofstream
/**
* @breif filesize helpers.
* @brief filesize helpers.
*
* The file size helpers are not considered particularly efficient,
* and should only be used for config files and the like -- not in a

View File

@ -54,7 +54,7 @@ std::string LLDiskCache::sCacheDir;
// <FS:Ansariel> Optimize asset simple disk cache
static const char* subdirs = "0123456789abcdef";
LLDiskCache::LLDiskCache(const std::string cache_dir,
LLDiskCache::LLDiskCache(const std::string& cache_dir,
const uintmax_t max_size_bytes,
const bool enable_cache_debug_info
// <FS:Beq> Add High/Low water mark support
@ -326,59 +326,9 @@ void LLDiskCache::purge()
// } <FS:Beq/> this bracket was moved up a few lines.
}
const std::string LLDiskCache::assetTypeToString(LLAssetType::EType at)
const std::string LLDiskCache::metaDataToFilepath(const LLUUID& id, LLAssetType::EType at)
{
/**
* Make use of the handy C++17 feature that allows
* for inline initialization of an std::map<>
*/
typedef std::map<LLAssetType::EType, std::string> asset_type_to_name_t;
asset_type_to_name_t asset_type_to_name =
{
{ LLAssetType::AT_TEXTURE, "TEXTURE" },
{ LLAssetType::AT_SOUND, "SOUND" },
{ LLAssetType::AT_CALLINGCARD, "CALLINGCARD" },
{ LLAssetType::AT_LANDMARK, "LANDMARK" },
{ LLAssetType::AT_SCRIPT, "SCRIPT" },
{ LLAssetType::AT_CLOTHING, "CLOTHING" },
{ LLAssetType::AT_OBJECT, "OBJECT" },
{ LLAssetType::AT_NOTECARD, "NOTECARD" },
{ LLAssetType::AT_CATEGORY, "CATEGORY" },
{ LLAssetType::AT_LSL_TEXT, "LSL_TEXT" },
{ LLAssetType::AT_LSL_BYTECODE, "LSL_BYTECODE" },
{ LLAssetType::AT_TEXTURE_TGA, "TEXTURE_TGA" },
{ LLAssetType::AT_BODYPART, "BODYPART" },
{ LLAssetType::AT_SOUND_WAV, "SOUND_WAV" },
{ LLAssetType::AT_IMAGE_TGA, "IMAGE_TGA" },
{ LLAssetType::AT_IMAGE_JPEG, "IMAGE_JPEG" },
{ LLAssetType::AT_ANIMATION, "ANIMATION" },
{ LLAssetType::AT_GESTURE, "GESTURE" },
{ LLAssetType::AT_SIMSTATE, "SIMSTATE" },
{ LLAssetType::AT_LINK, "LINK" },
{ LLAssetType::AT_LINK_FOLDER, "LINK_FOLDER" },
{ LLAssetType::AT_MARKETPLACE_FOLDER, "MARKETPLACE_FOLDER" },
{ LLAssetType::AT_WIDGET, "WIDGET" },
{ LLAssetType::AT_PERSON, "PERSON" },
{ LLAssetType::AT_MESH, "MESH" },
{ LLAssetType::AT_SETTINGS, "SETTINGS" },
{ LLAssetType::AT_MATERIAL, "MATERIAL" },
{ LLAssetType::AT_GLTF, "GLTF" },
{ LLAssetType::AT_GLTF_BIN, "GLTF_BIN" },
{ LLAssetType::AT_UNKNOWN, "UNKNOWN" }
};
asset_type_to_name_t::iterator iter = asset_type_to_name.find(at);
if (iter != asset_type_to_name.end())
{
return iter->second;
}
return std::string("UNKNOWN");
}
const std::string LLDiskCache::metaDataToFilepath(const std::string& id, LLAssetType::EType at)
{
return llformat("%s%s%s_%s_0.asset", sCacheDir.c_str(), gDirUtilp->getDirDelimiter().c_str(), CACHE_FILENAME_PREFIX.c_str(), id.c_str());
return llformat("%s%s%s_%s_0.asset", sCacheDir.c_str(), gDirUtilp->getDirDelimiter().c_str(), CACHE_FILENAME_PREFIX.c_str(), id.asString().c_str());
}
const std::string LLDiskCache::getCacheInfo()
@ -418,7 +368,8 @@ void LLDiskCache::prepopulateCacheWithStatic()
from_asset_file = from_folder + gDirUtilp->getDirDelimiter() + from_asset_file;
// we store static assets as UUID.asset_type the asset_type is not used in the current simple cache format
auto uuid_as_string{ gDirUtilp->getBaseFileName(from_asset_file, true) };
auto to_asset_file = metaDataToFilepath(uuid_as_string, LLAssetType::AT_UNKNOWN);
LLUUID uuid{ uuid_as_string };
auto to_asset_file = metaDataToFilepath(uuid, LLAssetType::AT_UNKNOWN);
if (!gDirUtilp->fileExists(to_asset_file))
{
if (mEnableCacheDebugInfo)
@ -532,7 +483,7 @@ uintmax_t LLDiskCache::updateCacheSize(const uintmax_t newsize)
return mStoredCacheSize;
}
uintmax_t LLDiskCache::dirFileSize(const std::string& dir, bool force )
uintmax_t LLDiskCache::dirFileSize(const std::string& dir, bool force)
{
using namespace std::chrono;
const seconds cache_duration{ 120 };// A rather arbitrary number. it takes 5 seconds+ on a fast drive to scan 80K+ items. purge runs every minute and will update. so 120 should mean we never need a superfluous cache scan.

View File

@ -84,7 +84,7 @@ class LLDiskCache :
* a child of the main Viewer cache directory. Defined
* by the setting at 'DiskCacheDirName'
*/
const std::string cache_dir,
const std::string& cache_dir,
/**
* The maximum size of the cache in bytes - Based on the
* setting at 'CacheSize' and 'DiskCachePercentOfTotal'
@ -118,9 +118,7 @@ class LLDiskCache :
* so many things had to be pushed back there to accomodate it, that I
* decided to move it here. Still not sure that's completely right.
*/
static const std::string metaDataToFilepath(const std::string& id,
LLAssetType::EType at);
static const std::string metaDataToFilepath(const LLUUID& id, LLAssetType::EType at);
/**
* Purge the oldest items in the cache so that the combined size of all files
@ -168,13 +166,7 @@ class LLDiskCache :
* before and after the cache purge
*/
uintmax_t updateCacheSize(const uintmax_t newsize); // <FS:Beq/> enable time based caching of dirfilesize except when force is true.
uintmax_t dirFileSize(const std::string& dir, bool force=false); // <FS:Beq/> enable time based caching of dirfilesize except when force is true.
/**
* Utility function to convert an LLAssetType enum into a
* string that we use as part of the cache file filename
*/
const std::string assetTypeToString(LLAssetType::EType at);
uintmax_t dirFileSize(const std::string& dir, bool force = false); // <FS:Beq/> enable time based caching of dirfilesize except when force is true.
/**
* cache the directory size cos it takes forever to calculate it

View File

@ -36,10 +36,10 @@
#include "boost/filesystem.hpp"
const S32 LLFileSystem::READ = 0x00000001;
const S32 LLFileSystem::WRITE = 0x00000002;
const S32 LLFileSystem::READ_WRITE = 0x00000003; // LLFileSystem::READ & LLFileSystem::WRITE
const S32 LLFileSystem::APPEND = 0x00000006; // 0x00000004 & LLFileSystem::WRITE
constexpr S32 LLFileSystem::READ = 0x00000001;
constexpr S32 LLFileSystem::WRITE = 0x00000002;
constexpr S32 LLFileSystem::READ_WRITE = 0x00000003; // LLFileSystem::READ & LLFileSystem::WRITE
constexpr S32 LLFileSystem::APPEND = 0x00000006; // 0x00000004 & LLFileSystem::WRITE
static LLTrace::BlockTimerStatHandle FTM_VFILE_WAIT("VFile Wait");
@ -57,9 +57,7 @@ LLFileSystem::LLFileSystem(const LLUUID& file_id, const LLAssetType::EType file_
if (mode == LLFileSystem::READ)
{
// build the filename (TODO: we do this in a few places - perhaps we should factor into a single function)
std::string id;
mFileID.asString();
const std::string filename = LLDiskCache::metaDataToFilepath(id, mFileType);
const std::string filename = LLDiskCache::metaDataToFilepath(mFileID, mFileType);
// update the last access time for the file if it exists - this is required
// even though we are reading and not writing because this is the
@ -73,17 +71,11 @@ LLFileSystem::LLFileSystem(const LLUUID& file_id, const LLAssetType::EType file_
}
}
LLFileSystem::~LLFileSystem()
{
}
// static
bool LLFileSystem::getExists(const LLUUID& file_id, const LLAssetType::EType file_type)
{
LL_PROFILE_ZONE_SCOPED;
std::string id_str;
file_id.toString(id_str);
const std::string filename = LLDiskCache::metaDataToFilepath(id_str, file_type);
const std::string filename = LLDiskCache::metaDataToFilepath(file_id, file_type);
// <FS:Ansariel> IO-streams replacement
//llifstream file(filename, std::ios::binary);
@ -106,9 +98,7 @@ bool LLFileSystem::getExists(const LLUUID& file_id, const LLAssetType::EType fil
bool LLFileSystem::removeFile(const LLUUID& file_id, const LLAssetType::EType file_type, int suppress_error /*= 0*/)
{
LL_PROFILE_ZONE_COLOR(tracy::Color::Gold); // <FS:Beq> measure cache performance
std::string id_str;
file_id.toString(id_str);
const std::string filename = LLDiskCache::metaDataToFilepath(id_str, file_type);
const std::string filename = LLDiskCache::metaDataToFilepath(file_id, file_type);
LLFile::remove(filename.c_str(), suppress_error);
@ -120,13 +110,8 @@ bool LLFileSystem::renameFile(const LLUUID& old_file_id, const LLAssetType::ETyp
const LLUUID& new_file_id, const LLAssetType::EType new_file_type)
{
LL_PROFILE_ZONE_COLOR(tracy::Color::Gold); // <FS:Beq> measure cache performance
std::string old_id_str;
old_file_id.toString(old_id_str);
const std::string old_filename = LLDiskCache::metaDataToFilepath(old_id_str, old_file_type);
std::string new_id_str;
new_file_id.toString(new_id_str);
const std::string new_filename = LLDiskCache::metaDataToFilepath(new_id_str, new_file_type);
const std::string old_filename = LLDiskCache::metaDataToFilepath(old_file_id, old_file_type);
const std::string new_filename = LLDiskCache::metaDataToFilepath(new_file_id, new_file_type);
// Rename needs the new file to not exist.
LLFileSystem::removeFile(new_file_id, new_file_type, ENOENT);
@ -137,7 +122,7 @@ bool LLFileSystem::renameFile(const LLUUID& old_file_id, const LLAssetType::ETyp
// failed but the original code does not and doing so seems to
// break a lot of things so we go with the flow...
//return false;
LL_WARNS() << "Failed to rename " << old_file_id << " to " << new_id_str << " reason: " << strerror(errno) << LL_ENDL;
LL_WARNS() << "Failed to rename " << old_file_id << " to " << new_file_id << " reason: " << strerror(errno) << LL_ENDL;
}
return true;
@ -147,9 +132,7 @@ bool LLFileSystem::renameFile(const LLUUID& old_file_id, const LLAssetType::ETyp
S32 LLFileSystem::getFileSize(const LLUUID& file_id, const LLAssetType::EType file_type)
{
LL_PROFILE_ZONE_COLOR(tracy::Color::Gold); // <FS:Beq> measure cache performance
std::string id_str;
file_id.toString(id_str);
const std::string filename = LLDiskCache::metaDataToFilepath(id_str, file_type);
const std::string filename = LLDiskCache::metaDataToFilepath(file_id, file_type);
S32 file_size = 0;
// <FS:Ansariel> IO-streams replacement
@ -174,9 +157,7 @@ bool LLFileSystem::read(U8* buffer, S32 bytes)
LL_PROFILE_ZONE_COLOR(tracy::Color::Gold); // <FS:Beq> measure cache performance
bool success = false;
std::string id;
mFileID.toString(id);
const std::string filename = LLDiskCache::metaDataToFilepath(id, mFileType);
const std::string filename = LLDiskCache::metaDataToFilepath(mFileID, mFileType);
// <FS:Ansariel> IO-streams replacement
//llifstream file(filename, std::ios::binary);
@ -225,13 +206,13 @@ bool LLFileSystem::read(U8* buffer, S32 bytes)
return success;
}
S32 LLFileSystem::getLastBytesRead()
S32 LLFileSystem::getLastBytesRead() const
{
LL_PROFILE_ZONE_COLOR(tracy::Color::Gold); // <FS:Beq> measure cache performance
return mBytesRead;
}
bool LLFileSystem::eof()
bool LLFileSystem::eof() const
{
LL_PROFILE_ZONE_COLOR(tracy::Color::Gold); // <FS:Beq> measure cache performance
return mPosition >= getSize();
@ -240,9 +221,7 @@ bool LLFileSystem::eof()
bool LLFileSystem::write(const U8* buffer, S32 bytes)
{
LL_PROFILE_ZONE_COLOR(tracy::Color::Gold); // <FS:Beq> measure cache performance
std::string id_str;
mFileID.toString(id_str);
const std::string filename = LLDiskCache::metaDataToFilepath(id_str, mFileType);
const std::string filename = LLDiskCache::metaDataToFilepath(mFileID, mFileType);
bool success = false;
@ -254,12 +233,11 @@ bool LLFileSystem::write(const U8* buffer, S32 bytes)
// {
// ofs.write((const char*)buffer, bytes);
// mPosition = (S32)ofs.tellp(); // <FS:Ansariel> Fix asset caching
// mPosition = (S32)ofs.tellp();
// success = true;
// }
//}
//// <FS:Ansariel> Fix asset caching
//else if (mMode == READ_WRITE)
//{
// // Don't truncate if file already exists
@ -283,7 +261,6 @@ bool LLFileSystem::write(const U8* buffer, S32 bytes)
// }
// }
//}
//// </FS:Ansariel>
//else
//{
// llofstream ofs(filename, std::ios::binary);
@ -385,13 +362,13 @@ S32 LLFileSystem::tell() const
return mPosition;
}
S32 LLFileSystem::getSize()
S32 LLFileSystem::getSize() const
{
LL_PROFILE_ZONE_COLOR(tracy::Color::Gold); // <FS:Beq> measure cache performance
return LLFileSystem::getFileSize(mFileID, mFileType);
}
S32 LLFileSystem::getMaxSize()
S32 LLFileSystem::getMaxSize() const
{
LL_PROFILE_ZONE_COLOR(tracy::Color::Gold); // <FS:Beq> measure cache performance
// offer up a huge size since we don't care what the max is
@ -409,11 +386,10 @@ bool LLFileSystem::rename(const LLUUID& new_id, const LLAssetType::EType new_typ
return true;
}
bool LLFileSystem::remove()
bool LLFileSystem::remove() const
{
LL_PROFILE_ZONE_COLOR(tracy::Color::Gold); // <FS:Beq> measure cache performance
LLFileSystem::removeFile(mFileID, mFileType);
return true;
}
@ -428,7 +404,7 @@ void LLFileSystem::updateFileAccessTime(const std::string& file_path)
*
* Let's start with 1 hour in time_t units and see how that unfolds
*/
const std::time_t time_threshold = 1 * 60 * 60;
constexpr std::time_t time_threshold = 1 * 60 * 60;
// current time
const std::time_t cur_time = std::time(nullptr);

View File

@ -38,20 +38,20 @@ class LLFileSystem
{
public:
LLFileSystem(const LLUUID& file_id, const LLAssetType::EType file_type, S32 mode = LLFileSystem::READ);
~LLFileSystem();
~LLFileSystem() = default;
bool read(U8* buffer, S32 bytes);
S32 getLastBytesRead();
bool eof();
S32 getLastBytesRead() const;
bool eof() const;
bool write(const U8* buffer, S32 bytes);
bool seek(S32 offset, S32 origin = -1);
S32 tell() const;
S32 getSize();
S32 getMaxSize();
S32 getSize() const;
S32 getMaxSize() const;
bool rename(const LLUUID& new_id, const LLAssetType::EType new_type);
bool remove();
bool remove() const;
/**
* Update the "last write time" of a file to "now". This must be called whenever a
@ -78,8 +78,6 @@ class LLFileSystem
S32 mPosition;
S32 mMode;
S32 mBytesRead;
//private:
// static const std::string idToFilepath(const std::string id, LLAssetType::EType at);
};
#endif // LL_FILESYSTEM_H

View File

@ -36,12 +36,12 @@
#include "boost/bind.hpp"
static const S32 BORDER_MARGIN = 2;
static const S32 PARENT_BORDER_MARGIN = 5;
static const S32 VERTICAL_MULTIPLE = 16;
static const F32 MIN_AUTO_SCROLL_RATE = 120.f;
static const F32 MAX_AUTO_SCROLL_RATE = 500.f;
static const F32 AUTO_SCROLL_RATE_ACCEL = 120.f;
static constexpr S32 BORDER_MARGIN = 2;
static constexpr S32 PARENT_BORDER_MARGIN = 5;
static constexpr S32 VERTICAL_MULTIPLE = 16;
static constexpr F32 MIN_AUTO_SCROLL_RATE = 120.f;
static constexpr F32 MAX_AUTO_SCROLL_RATE = 500.f;
static constexpr F32 AUTO_SCROLL_RATE_ACCEL = 120.f;
// LLAccordionCtrl =================================================================|
@ -49,13 +49,7 @@ static LLDefaultChildRegistry::Register<LLAccordionCtrl> t2("accordion");
LLAccordionCtrl::LLAccordionCtrl(const Params& params):LLPanel(params)
, mFitParent(params.fit_parent)
, mAutoScrolling( false )
, mAutoScrollRate( 0.f )
, mSelectedTab( NULL )
, mTabComparator( NULL )
, mNoVisibleTabsHelpText(NULL)
, mNoVisibleTabsOrigString(params.no_visible_tabs_text.initial_value().asString())
, mSkipScrollToChild(false)
{
initNoTabsWidget(params.no_matched_tabs_text);
@ -67,10 +61,6 @@ LLAccordionCtrl::LLAccordionCtrl(const Params& params):LLPanel(params)
}
LLAccordionCtrl::LLAccordionCtrl() : LLPanel()
, mAutoScrolling( false )
, mAutoScrollRate( 0.f )
, mSelectedTab( NULL )
, mNoVisibleTabsHelpText(NULL)
{
initNoTabsWidget(LLTextBox::Params());
@ -133,11 +123,10 @@ bool LLAccordionCtrl::postBuild()
mScrollbar->setFollowsBottom();
//if it was created from xml...
std::vector<LLUICtrl*> accordion_tabs;
for (child_list_const_iter_t it = getChildList()->begin();
getChildList()->end() != it; ++it)
std::vector<LLAccordionCtrlTab*> accordion_tabs;
for(LLView* viewp : *getChildList())
{
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(*it);
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(viewp);
if (accordion_tab == NULL)
continue;
if (std::find(mAccordionTabs.begin(), mAccordionTabs.end(), accordion_tab) == mAccordionTabs.end())
@ -146,7 +135,7 @@ bool LLAccordionCtrl::postBuild()
}
}
for (std::vector<LLUICtrl*>::reverse_iterator it = accordion_tabs.rbegin();
for (auto it = accordion_tabs.rbegin();
it < accordion_tabs.rend(); ++it)
{
addCollapsibleCtrl(*it);
@ -294,11 +283,8 @@ void LLAccordionCtrl::hideScrollbar(S32 width, S32 height)
S32 LLAccordionCtrl::calcRecuiredHeight()
{
S32 rec_height = 0;
std::vector<LLAccordionCtrlTab*>::iterator panel;
for(panel=mAccordionTabs.begin(); panel!=mAccordionTabs.end(); ++panel)
for(LLAccordionCtrlTab* accordion_tab : mAccordionTabs)
{
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(*panel);
if(accordion_tab && accordion_tab->getVisible())
{
rec_height += accordion_tab->getRect().getHeight();
@ -332,11 +318,10 @@ void LLAccordionCtrl::ctrlShiftVertical(LLView* panel, S32 delta)
// <FS:ND> If adding a lot of controls rapidly, calling arrange will cost a lot of times, as it's running through n! controls.
// In that case we can avvoid calling arrange over and over and just call it once when finished.
//void LLAccordionCtrl::addCollapsibleCtrl(LLView* view)
void LLAccordionCtrl::addCollapsibleCtrl(LLView* view, bool aArrange)
//void LLAccordionCtrl::addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab)
void LLAccordionCtrl::addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab, bool aArrange)
// </FS:ND>
{
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(view);
if (!accordion_tab)
return;
if (std::find(beginChild(), endChild(), accordion_tab) == endChild())
@ -354,9 +339,8 @@ void LLAccordionCtrl::addCollapsibleCtrl(LLView* view, bool aArrange)
// </FS:ND>
}
void LLAccordionCtrl::removeCollapsibleCtrl(LLView* view)
void LLAccordionCtrl::removeCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab)
{
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(view);
if(!accordion_tab)
return;
@ -374,7 +358,7 @@ void LLAccordionCtrl::removeCollapsibleCtrl(LLView* view)
}
// if removed is selected - reset selection
if (mSelectedTab == view)
if (mSelectedTab == accordion_tab)
{
mSelectedTab = NULL;
}
@ -412,24 +396,20 @@ void LLAccordionCtrl::arrangeSingle()
S32 collapsed_height = 0;
for (size_t i = 0; i < mAccordionTabs.size(); ++i)
for (LLAccordionCtrlTab* accordion_tab : mAccordionTabs)
{
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
if (!accordion_tab->getVisible()) // Skip hidden accordion tabs
continue;
if (!accordion_tab->isExpanded() )
{
collapsed_height+=mAccordionTabs[i]->getRect().getHeight();
collapsed_height += accordion_tab->getRect().getHeight();
}
}
S32 expanded_height = getRect().getHeight() - BORDER_MARGIN - collapsed_height;
for (size_t i = 0; i < mAccordionTabs.size(); ++i)
for (LLAccordionCtrlTab* accordion_tab : mAccordionTabs)
{
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
if (!accordion_tab->getVisible()) // Skip hidden accordion tabs
continue;
if (!accordion_tab->isExpanded() )
@ -459,8 +439,8 @@ void LLAccordionCtrl::arrangeSingle()
// make sure at least header is shown
panel_height = llmax(panel_height, accordion_tab->getHeaderHeight());
ctrlSetLeftTopAndSize(mAccordionTabs[i], panel_left, panel_top, panel_width, panel_height);
panel_top -= mAccordionTabs[i]->getRect().getHeight();
ctrlSetLeftTopAndSize(accordion_tab, panel_left, panel_top, panel_width, panel_height);
panel_top -= accordion_tab->getRect().getHeight();
}
show_hide_scrollbar(getRect().getWidth(), getRect().getHeight());
@ -474,17 +454,16 @@ void LLAccordionCtrl::arrangeMultiple()
S32 panel_width = getRect().getWidth() - 4;
//Calculate params
for (size_t i = 0; i < mAccordionTabs.size(); i++ )
for (size_t i = 0, end = mAccordionTabs.size(); i < end; i++)
{
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
LLAccordionCtrlTab* accordion_tab = static_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
if (!accordion_tab->getVisible()) // Skip hidden accordion tabs
continue;
if (!accordion_tab->isExpanded() )
{
ctrlSetLeftTopAndSize(mAccordionTabs[i], panel_left, panel_top, panel_width, accordion_tab->getRect().getHeight());
panel_top -= mAccordionTabs[i]->getRect().getHeight();
ctrlSetLeftTopAndSize(accordion_tab, panel_left, panel_top, panel_width, accordion_tab->getRect().getHeight());
panel_top -= accordion_tab->getRect().getHeight();
}
else
{
@ -506,13 +485,13 @@ void LLAccordionCtrl::arrangeMultiple()
}
// minimum tab height is equal to header height
if (mAccordionTabs[i]->getHeaderHeight() > panel_height)
if (accordion_tab->getHeaderHeight() > panel_height)
{
panel_height = mAccordionTabs[i]->getHeaderHeight();
panel_height = accordion_tab->getHeaderHeight();
}
}
ctrlSetLeftTopAndSize(mAccordionTabs[i], panel_left, panel_top, panel_width, panel_height);
ctrlSetLeftTopAndSize(accordion_tab, panel_left, panel_top, panel_width, panel_height);
panel_top -= panel_height;
}
@ -539,7 +518,7 @@ void LLAccordionCtrl::arrange()
S32 panel_top = getRect().getHeight() - BORDER_MARGIN; // Top coordinate of the first panel
S32 panel_width = getRect().getWidth() - 4;
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[0]);
LLAccordionCtrlTab* accordion_tab = mAccordionTabs[0];
LLRect panel_rect = accordion_tab->getRect();
@ -649,12 +628,12 @@ void LLAccordionCtrl::updateLayout(S32 width, S32 height)
panel_width -= scrollbar_size;
// set sizes for first panels and dragbars
for (size_t i = 0; i < mAccordionTabs.size(); ++i)
for (LLAccordionCtrlTab* accordion_tab : mAccordionTabs)
{
if (!mAccordionTabs[i]->getVisible())
if (!accordion_tab->getVisible())
continue;
LLRect panel_rect = mAccordionTabs[i]->getRect();
ctrlSetLeftTopAndSize(mAccordionTabs[i], panel_rect.mLeft, panel_top, panel_width, panel_rect.getHeight());
LLRect panel_rect = accordion_tab->getRect();
ctrlSetLeftTopAndSize(accordion_tab, panel_rect.mLeft, panel_top, panel_width, panel_rect.getHeight());
panel_top -= panel_rect.getHeight();
}
}
@ -696,9 +675,8 @@ void LLAccordionCtrl::onUpdateScrollToChild(const LLUICtrl *cntrl)
void LLAccordionCtrl::onOpen(const LLSD& key)
{
for (size_t i = 0; i < mAccordionTabs.size(); ++i)
for (LLAccordionCtrlTab* accordion_tab : mAccordionTabs)
{
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
LLPanel* panel = dynamic_cast<LLPanel*>(accordion_tab->getAccordionView());
if (panel != NULL)
{
@ -722,7 +700,7 @@ S32 LLAccordionCtrl::notifyParent(const LLSD& info)
{
for (size_t i = 0; i < mAccordionTabs.size(); ++i)
{
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
LLAccordionCtrlTab* accordion_tab = static_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
if (accordion_tab->hasFocus())
{
while (++i < mAccordionTabs.size())
@ -732,7 +710,7 @@ S32 LLAccordionCtrl::notifyParent(const LLSD& info)
}
if (i < mAccordionTabs.size())
{
accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
accordion_tab = static_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
accordion_tab->notify(LLSD().with("action","select_first"));
return 1;
}
@ -745,7 +723,7 @@ S32 LLAccordionCtrl::notifyParent(const LLSD& info)
{
for (size_t i = 0; i < mAccordionTabs.size(); ++i)
{
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
LLAccordionCtrlTab* accordion_tab = static_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
if (accordion_tab->hasFocus() && i > 0)
{
bool prev_visible_tab_found = false;
@ -760,7 +738,7 @@ S32 LLAccordionCtrl::notifyParent(const LLSD& info)
if (prev_visible_tab_found)
{
accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
accordion_tab = static_cast<LLAccordionCtrlTab*>(mAccordionTabs[i]);
accordion_tab->notify(LLSD().with("action","select_last"));
return 1;
}
@ -898,15 +876,12 @@ void LLAccordionCtrl::setFilterSubString(const std::string& filter_string)
const LLAccordionCtrlTab* LLAccordionCtrl::getExpandedTab() const
{
typedef std::vector<LLAccordionCtrlTab*>::const_iterator tabs_const_iterator;
const LLAccordionCtrlTab* result = 0;
for (tabs_const_iterator i = mAccordionTabs.begin(); i != mAccordionTabs.end(); ++i)
const LLAccordionCtrlTab* result = nullptr;
for (LLAccordionCtrlTab* accordion_tab : mAccordionTabs)
{
if ((*i)->isExpanded())
if (accordion_tab->isExpanded())
{
result = *i;
result = accordion_tab;
break;
}
}
@ -924,11 +899,11 @@ S32 LLAccordionCtrl::calcExpandedTabHeight(S32 tab_index /* = 0 */, S32 availabl
S32 collapsed_tabs_height = 0;
S32 num_expanded = 0;
for (size_t n = tab_index; n < mAccordionTabs.size(); ++n)
for (LLAccordionCtrlTab* tab : mAccordionTabs)
{
if (!mAccordionTabs[n]->isExpanded())
if (!tab->isExpanded())
{
collapsed_tabs_height += mAccordionTabs[n]->getHeaderHeight();
collapsed_tabs_height += tab->getHeaderHeight();
}
else
{
@ -950,10 +925,8 @@ void LLAccordionCtrl::collapseAllTabs()
{
if (mAccordionTabs.size() > 0)
{
for (size_t i = 0; i < mAccordionTabs.size(); ++i)
for (LLAccordionCtrlTab* tab : mAccordionTabs)
{
LLAccordionCtrlTab *tab = mAccordionTabs[i];
if (tab->getDisplayChildren())
{
tab->setDisplayChildren(false);

View File

@ -57,8 +57,8 @@ public:
class LLTabComparator
{
public:
LLTabComparator() {};
virtual ~LLTabComparator() {};
LLTabComparator() = default;
virtual ~LLTabComparator() = default;
/** Returns true if tab1 < tab2, false otherwise */
virtual bool compare(const LLAccordionCtrlTab* tab1, const LLAccordionCtrlTab* tab2) const = 0;
@ -105,11 +105,10 @@ public:
// <FS:ND> If adding a lot of controls rapidly, calling arrange will cost a lot of times, as it's running through n! controls.
// In that case we can avvoid calling arrange over and over and just call it once when finished.
// void addCollapsibleCtrl(LLView* view);
void addCollapsibleCtrl(LLView* view, bool aArrange = true /*Standard is true as to not mess with old code all over the place*/ );
// void addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab);
void addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab, bool aArrange = true /*Standard is true as to not mess with old code all over the place*/ );
// </FS:ND>
void removeCollapsibleCtrl(LLView* view);
void removeCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab);
void arrange();
@ -185,20 +184,20 @@ private:
private:
LLRect mInnerRect;
LLScrollbar* mScrollbar;
bool mSingleExpansion;
bool mFitParent;
bool mAutoScrolling;
F32 mAutoScrollRate;
LLTextBox* mNoVisibleTabsHelpText;
LLScrollbar* mScrollbar = nullptr;
bool mSingleExpansion = false;
bool mFitParent = false;
bool mAutoScrolling = false;
F32 mAutoScrollRate = 0.f;
LLTextBox* mNoVisibleTabsHelpText = nullptr;
bool mSkipScrollToChild;
bool mSkipScrollToChild = false;
std::string mNoMatchedTabsOrigString;
std::string mNoVisibleTabsOrigString;
LLAccordionCtrlTab* mSelectedTab;
const LLTabComparator* mTabComparator;
LLAccordionCtrlTab* mSelectedTab = nullptr;
const LLTabComparator* mTabComparator = nullptr;
};

View File

@ -122,7 +122,7 @@ void LLDebugView::draw()
{
if (mFloaterSnapRegion == NULL)
{
mFloaterSnapRegion = getRootView()->getChildView("floater_snap_region");
mFloaterSnapRegion = gViewerWindow->getFloaterSnapRegion();
}
LLRect debug_rect;

View File

@ -166,7 +166,6 @@ protected:
toast_list_t m_toast_pool;
bool mStopProcessing;
bool mChannelRect;
// <FS:Ansariel> Zi Ree's customizable nearby chat toast width
void reshapePanel(LLFloaterIMNearbyChatToastPanel* panel);
@ -337,7 +336,7 @@ void LLFloaterIMNearbyChatScreenChannel::addChat(LLSD& chat)
if (mFloaterSnapRegion == NULL)
{
mFloaterSnapRegion = gViewerWindow->getRootView()->getChildView("floater_snap_region");
mFloaterSnapRegion = gViewerWindow->getFloaterSnapRegion();
}
LLRect channel_rect;
mFloaterSnapRegion->localRectToOtherView(mFloaterSnapRegion->getLocalRect(), &channel_rect, gFloaterView);
@ -433,7 +432,7 @@ void LLFloaterIMNearbyChatScreenChannel::arrangeToasts()
if (mFloaterSnapRegion == NULL)
{
mFloaterSnapRegion = gViewerWindow->getRootView()->getChildView("floater_snap_region");
mFloaterSnapRegion = gViewerWindow->getFloaterSnapRegion();
}
if (!getParent())

View File

@ -653,6 +653,14 @@ void LLFloaterPreference::saveAvatarPropertiesCoro(const std::string cap_url, bo
bool LLFloaterPreference::postBuild()
{
mDeleteTranscriptsBtn = getChild<LLButton>("delete_transcripts");
// <FS:Ansariel> We don't have these buttons
//mEnabledPopups = getChild<LLScrollListCtrl>("enabled_popups");
//mDisabledPopups = getChild<LLScrollListCtrl>("disabled_popups");
//mEnablePopupBtn = getChild<LLButton>("enable_this_popup");
//mDisablePopupBtn = getChild<LLButton>("disable_this_popup");
// <FS:Ansariel> [FS communication UI]
//gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&LLFloaterIMSessionTab::processChatHistoryStyleUpdate, false));
@ -883,7 +891,7 @@ void LLFloaterPreference::onShowGroupNoticesTopRightChanged()
void LLFloaterPreference::updateDeleteTranscriptsButton()
{
getChild<LLButton>("delete_transcripts")->setEnabled(LLLogChat::transcriptFilesExist());
mDeleteTranscriptsBtn->setEnabled(LLLogChat::transcriptFilesExist());
}
void LLFloaterPreference::onDoNotDisturbResponseChanged()
@ -943,11 +951,11 @@ LLFloaterPreference::~LLFloaterPreference()
// <FS:Zi> FIRE-19539 - Include the alert messages in Prefs>Notifications>Alerts in preference Search.
// void LLFloaterPreference::draw()
// {
// bool has_first_selected = (getChildRef<LLScrollListCtrl>("disabled_popups").getFirstSelected()!=NULL);
// gSavedSettings.setBOOL("FirstSelectedDisabledPopups", has_first_selected);
// bool has_first_selected = (mDisabledPopups->getFirstSelected()!=NULL);
// mEnablePopupBtn->setEnabled(has_first_selected);
//
// has_first_selected = (getChildRef<LLScrollListCtrl>("enabled_popups").getFirstSelected()!=NULL);
// gSavedSettings.setBOOL("FirstSelectedEnabledPopups", has_first_selected);
// has_first_selected = (mEnabledPopups.getFirstSelected()!=NULL);
// mDisablePopupBtn->setEnabled(has_first_selected);
//
// LLFloater::draw();
//}
@ -2040,13 +2048,8 @@ void LLFloaterPreference::refreshSkin(void* data)
// <FS:Zi> FIRE-19539 - Include the alert messages in Prefs>Notifications>Alerts in preference Search.
// void LLFloaterPreference::buildPopupLists()
// {
// LLScrollListCtrl& disabled_popups =
// getChildRef<LLScrollListCtrl>("disabled_popups");
// LLScrollListCtrl& enabled_popups =
// getChildRef<LLScrollListCtrl>("enabled_popups");
//
// disabled_popups.deleteAllItems();
// enabled_popups.deleteAllItems();
// mDisabledPopups.deleteAllItems();
// mEnabledPopups.deleteAllItems();
//
// for (LLNotifications::TemplateMap::const_iterator iter = LLNotifications::instance().templatesBegin();
// iter != LLNotifications::instance().templatesEnd();
@ -2091,11 +2094,11 @@ void LLFloaterPreference::refreshSkin(void* data)
// }
// }
// }
// item = disabled_popups.addElement(row);
// item = mDisabledPopups.addElement(row);
// }
// else
// {
// item = enabled_popups.addElement(row);
// item = mEnabledPopups.addElement(row);
// }
//
// if (item)
@ -2367,9 +2370,7 @@ void LLFloaterPreference::onClickPreviewUISound(const LLSD& ui_sound_id)
// <FS:Zi> FIRE-19539 - Include the alert messages in Prefs>Notifications>Alerts in preference Search.
// void LLFloaterPreference::onClickEnablePopup()
// {
// LLScrollListCtrl& disabled_popups = getChildRef<LLScrollListCtrl>("disabled_popups");
//
// std::vector<LLScrollListItem*> items = disabled_popups.getAllSelected();
// std::vector<LLScrollListItem*> items = mDisabledPopups.getAllSelected();
// std::vector<LLScrollListItem*>::iterator itor;
// for (itor = items.begin(); itor != items.end(); ++itor)
// {
@ -2388,9 +2389,7 @@ void LLFloaterPreference::onClickPreviewUISound(const LLSD& ui_sound_id)
// void LLFloaterPreference::onClickDisablePopup()
// {
// LLScrollListCtrl& enabled_popups = getChildRef<LLScrollListCtrl>("enabled_popups");
//
// std::vector<LLScrollListItem*> items = enabled_popups.getAllSelected();
// std::vector<LLScrollListItem*> items = mEnabledPopups.getAllSelected();
// std::vector<LLScrollListItem*>::iterator itor;
// for (itor = items.begin(); itor != items.end(); ++itor)
// {
@ -3004,11 +3003,9 @@ void LLFloaterPreference::onDeleteTranscriptsResponse(const LLSD& notification,
void LLFloaterPreference::onLogChatHistorySaved()
{
LLButton * delete_transcripts_buttonp = getChild<LLButton>("delete_transcripts");
if (!delete_transcripts_buttonp->getEnabled())
if (!mDeleteTranscriptsBtn->getEnabled())
{
delete_transcripts_buttonp->setEnabled(true);
mDeleteTranscriptsBtn->setEnabled(true);
}
}
@ -3886,8 +3883,6 @@ bool LLPanelPreferenceGraphics::postBuild()
}
void LLPanelPreferenceGraphics::draw()
{
// <FS:Ansariel> Graphic preset controls independent from XUI
//setPresetText();
LLPanelPreference::draw();
}
@ -4882,16 +4877,18 @@ void LLFloaterPreference::onUpdateFilterTerm(bool force)
pRoot->selectFirstTab();
}
void LLFloaterPreference::filterIgnorableNotifications()
{
bool visible = getChildRef<LLScrollListCtrl>("enabled_popups").highlightMatchingItems(mFilterEdit->getValue());
visible |= getChildRef<LLScrollListCtrl>("disabled_popups").highlightMatchingItems(mFilterEdit->getValue());
if (visible)
{
getChildRef<LLTabContainer>("pref core").setTabVisibility(getChild<LLPanel>("msgs"), true);
}
}
// <FS:Ansariel> Using different solution
//void LLFloaterPreference::filterIgnorableNotifications()
//{
// bool visible = mEnabledPopups->highlightMatchingItems(mFilterEdit->getValue());
// visible |= mDisabledPopups->highlightMatchingItems(mFilterEdit->getValue());
//
// if (visible)
// {
// getChildRef<LLTabContainer>("pref core").setTabVisibility(getChild<LLPanel>("msgs"), true);
// }
//}
// </FS:Ansariel>
void collectChildren( LLView const *aView, ll::prefs::PanelDataPtr aParentPanel, ll::prefs::TabContainerDataPtr aParentTabContainer )
{

View File

@ -323,7 +323,12 @@ private:
std::string mSavedGraphicsPreset;
LOG_CLASS(LLFloaterPreference);
LLSearchEditor *mFilterEdit;
LLSearchEditor* mFilterEdit = nullptr;
LLScrollListCtrl* mEnabledPopups = nullptr;
LLScrollListCtrl* mDisabledPopups = nullptr;
LLButton* mDeleteTranscriptsBtn = nullptr;
LLButton* mEnablePopupBtn = nullptr;
LLButton* mDisablePopupBtn = nullptr;
std::unique_ptr< ll::prefs::SearchData > mSearchData;
bool mSearchDataDirty;
@ -331,7 +336,7 @@ private:
void onUpdateFilterTerm( bool force = false );
void collectSearchableItems();
void filterIgnorableNotifications();
//void filterIgnorableNotifications(); // <FS:Ansariel> Using different solution
std::map<std::string, bool> mIgnorableNotifs;

View File

@ -57,31 +57,39 @@ LLFloaterSidePanelContainer::~LLFloaterSidePanelContainer()
LLTransientFloaterMgr::getInstance()->removeControlView(LLTransientFloaterMgr::GLOBAL, this);
}
bool LLFloaterSidePanelContainer::postBuild()
{
mMainPanel = getChild<LLPanel>(sMainPanelName);
return true;
}
void LLFloaterSidePanelContainer::onOpen(const LLSD& key)
{
getChild<LLPanel>(sMainPanelName)->onOpen(key);
mMainPanel->onOpen(key);
}
void LLFloaterSidePanelContainer::closeFloater(bool app_quitting)
{
LLPanelOutfitEdit* panel_outfit_edit =
dynamic_cast<LLPanelOutfitEdit*>(LLFloaterSidePanelContainer::findPanel("appearance", "panel_outfit_edit"));
if (panel_outfit_edit)
if(getInstanceName() == "appearance")
{
LLFloater *parent = gFloaterView->getParentFloater(panel_outfit_edit);
if (parent == this )
LLPanelOutfitEdit* panel_outfit_edit = findChild<LLPanelOutfitEdit>("panel_outfit_edit");
if (panel_outfit_edit)
{
LLSidepanelAppearance* panel_appearance = dynamic_cast<LLSidepanelAppearance*>(getPanel("appearance"));
if (panel_appearance)
LLFloater *parent = gFloaterView->getParentFloater(panel_outfit_edit);
if (parent == this)
{
LLPanelEditWearable *edit_wearable_ptr = panel_appearance->getWearable();
if (edit_wearable_ptr)
LLSidepanelAppearance* panel_appearance = dynamic_cast<LLSidepanelAppearance*>(mMainPanel);
if (panel_appearance)
{
edit_wearable_ptr->onClose();
}
if (!app_quitting)
{
panel_appearance->showOutfitsInventoryPanel();
LLPanelEditWearable *edit_wearable_ptr = panel_appearance->getWearable();
if (edit_wearable_ptr)
{
edit_wearable_ptr->onClose();
}
if(!app_quitting)
{
panel_appearance->showOutfitsInventoryPanel();
}
}
}
}
@ -100,10 +108,9 @@ void LLFloaterSidePanelContainer::closeFloater(bool app_quitting)
void LLFloaterSidePanelContainer::onClickCloseBtn(bool app_quitting)
{
if (!app_quitting)
if (!app_quitting && getInstanceName() == "appearance")
{
LLPanelOutfitEdit* panel_outfit_edit =
dynamic_cast<LLPanelOutfitEdit*>(LLFloaterSidePanelContainer::findPanel("appearance", "panel_outfit_edit"));
LLPanelOutfitEdit* panel_outfit_edit = findChild<LLPanelOutfitEdit>("panel_outfit_edit");
if (panel_outfit_edit)
{
LLFloater* parent = gFloaterView->getParentFloater(panel_outfit_edit);
@ -241,10 +248,16 @@ void LLFloaterSidePanelContainer::showPanel(std::string_view floater_name, std::
LLPanel* LLFloaterSidePanelContainer::getPanel(std::string_view floater_name, std::string_view panel_name)
{
LLFloaterSidePanelContainer* floaterp = LLFloaterReg::getTypedInstance<LLFloaterSidePanelContainer>(floater_name);
if (floaterp)
{
return floaterp->findChild<LLPanel>(panel_name, true);
if (panel_name == sMainPanelName)
{
return floaterp->mMainPanel;
}
else
{
return floaterp->findChild<LLPanel>(panel_name, true);
}
}
return NULL;
@ -253,10 +266,16 @@ LLPanel* LLFloaterSidePanelContainer::getPanel(std::string_view floater_name, st
LLPanel* LLFloaterSidePanelContainer::findPanel(std::string_view floater_name, std::string_view panel_name)
{
LLFloaterSidePanelContainer* floaterp = LLFloaterReg::findTypedInstance<LLFloaterSidePanelContainer>(floater_name);
if (floaterp)
{
return floaterp->findChild<LLPanel>(panel_name, true);
if (panel_name == sMainPanelName)
{
return floaterp->mMainPanel;
}
else
{
return floaterp->findChild<LLPanel>(panel_name, true);
}
}
return NULL;

View File

@ -49,6 +49,8 @@ public:
LLFloaterSidePanelContainer(const LLSD& key, const Params& params = getDefaultParams());
~LLFloaterSidePanelContainer();
bool postBuild() override;
void onOpen(const LLSD& key) override;
void closeFloater(bool app_quitting = false) override;
@ -82,6 +84,11 @@ public:
* @returns a pointer to the panel of given type T.
*/
template <typename T>
static T* findPanel(std::string_view floater_name, std::string_view panel_name = sMainPanelName)
{
return dynamic_cast<T*>(findPanel(floater_name, panel_name));
}
template <typename T>
static T* getPanel(std::string_view floater_name, std::string_view panel_name = sMainPanelName)
{
T* panel = dynamic_cast<T*>(getPanel(floater_name, panel_name));
@ -92,24 +99,6 @@ public:
return panel;
}
template <typename T>
static T* findPanel(const std::string& floater_name, const std::string& panel_name = sMainPanelName)
{
LLPanel* panel = findPanel(floater_name, panel_name);
if (!panel)
{
return NULL;
}
T* res = dynamic_cast<T*>(panel);
if (!res)
{
LL_WARNS() << "Child named \"" << panel_name << "\" is not of type " << typeid(T*).name() << LL_ENDL;
}
return res;
}
// </FS:Ansariel>
// [RLVa:KB] - Checked: 2012-02-07 (RLVa-1.4.5) | Added: RLVa-1.4.5
// Used to determine whether a sidepanel can be shown
public:
@ -121,6 +110,8 @@ private:
protected:
void onCloseMsgCallback(const LLSD& notification, const LLSD& response);
LLPanel* mMainPanel = nullptr;
};
#endif // LL_LLFLOATERSIDEPANELCONTAINER_H

View File

@ -426,10 +426,22 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshotBase* floater)
}
floater->getChild<LLUICtrl>("file_size_label")->setTextArg("[SIZE]", got_snap ? bytes_string : floater->getString("unknown"));
floater->getChild<LLUICtrl>("file_size_label")->setColor(
shot_type == LLSnapshotModel::SNAPSHOT_POSTCARD
&& got_bytes
&& previewp->getDataSize() > MAX_POSTCARD_DATASIZE ? LLUIColor(LLColor4::red) : LLUIColorTable::instance().getColor( "LabelTextColor" ));
LLUIColor color = LLUIColorTable::instance().getColor( "LabelTextColor" );
if (shot_type == LLSnapshotModel::SNAPSHOT_POSTCARD
&& got_bytes
&& previewp->getDataSize() > MAX_POSTCARD_DATASIZE)
{
color = LLUIColor(LLColor4::red);
}
if (shot_type == LLSnapshotModel::SNAPSHOT_WEB
&& got_bytes
&& previewp->getDataSize() > LLWebProfile::MAX_WEB_DATASIZE)
{
color = LLUIColor(LLColor4::red);
}
floater->getChild<LLUICtrl>("file_size_label")->setColor(color);
// Update the width and height spinners based on the corresponding resolution combos. (?)
switch(shot_type)

View File

@ -340,6 +340,16 @@ bool LLFloaterTools::postBuild()
// <FS:Ansariel> FIRE-7802: Grass and tree selection in build tool
mTreeGrassCombo = getChild<LLComboBox>("tree_grass_combo");
mTextBulldozer = getChild<LLTextBox>("Bulldozer:");
mTextDozerSize = getChild<LLTextBox>("Dozer Size:");
mTextDozerStrength = getChild<LLTextBox>("Strength:");
mSliderZoom = getChild<LLSlider>("slider zoom");
mTextSelectionCount = getChild<LLTextBox>("selection_count");
mTextSelectionEmpty = getChild<LLTextBox>("selection_empty");
// <FS:Ansariel> Improved build tools
//mTextSelectionFaces = getChild<LLTextBox>("selection_faces");
mCostTextBorder = getChild<LLViewBorder>("cost_text_border");
mTab = getChild<LLTabContainer>("Object Info Tabs");
@ -380,6 +390,11 @@ bool LLFloaterTools::postBuild()
}
// </FS:KC>
// <FS:Ansariel> Performance improvements
mTextLinkNumObjCount = getChild<LLTextBox>("link_num_obj_count");
mBtnCopyKeys = getChild<LLButton>("btnCopyKeys");
mTextMoreInfoLabel = getChild<LLTextBox>("more info label");
return true;
}
@ -635,18 +650,18 @@ void LLFloaterTools::refresh()
{
enable_link_count = false;
}
getChild<LLUICtrl>("link_num_obj_count")->setTextArg("[DESC]", desc_string);
getChild<LLUICtrl>("link_num_obj_count")->setTextArg("[NUM]", num_string);
mTextLinkNumObjCount->setTextArg("[DESC]", desc_string);
mTextLinkNumObjCount->setTextArg("[NUM]", num_string);
// </FS:KC>
#if 0
if (!gMeshRepo.meshRezEnabled())
{
std::string obj_count_string;
LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount());
getChild<LLUICtrl>("selection_count")->setTextArg("[OBJ_COUNT]", obj_count_string);
mTextSelectionCount->setTextArg("[OBJ_COUNT]", obj_count_string);
std::string prim_count_string;
LLResMgr::getInstance()->getIntegerString(prim_count_string, LLSelectMgr::getInstance()->getSelection()->getObjectCount());
getChild<LLUICtrl>("selection_count")->setTextArg("[PRIM_COUNT]", prim_count_string);
mTextSelectionCount->setTextArg("[PRIM_COUNT]", prim_count_string);
// calculate selection rendering cost
if (sShowObjectCost)
@ -660,7 +675,7 @@ void LLFloaterTools::refresh()
// disable the object and prim counts if nothing selected
bool have_selection = ! LLSelectMgr::getInstance()->getSelection()->isEmpty();
getChildView("link_num_obj_count")->setEnabled(have_selection);
mTextLinkNumObjCount->setEnabled(have_selection);
//getChildView("obj_count")->setEnabled(have_selection);
// <FS:Ansariel> Was removed from floater_tools.xml as part of SH-1719
//getChildView("prim_count")->setEnabled(have_selection);
@ -696,7 +711,7 @@ void LLFloaterTools::refresh()
else
{
const LLStringExplicit empty_str("");
childSetTextArg("more info label", "[CAPACITY_STRING]", empty_str);
mTextMoreInfoLabel->setTextArg("[CAPACITY_STRING]", empty_str);
}
// </FS:Ansariel>
}
@ -711,7 +726,7 @@ void LLFloaterTools::refresh()
// Selection crosses parcel bounds.
// We don't display remaining land capacity in this case.
const LLStringExplicit empty_str("");
childSetTextArg("more info label", "[CAPACITY_STRING]", empty_str);
mTextMoreInfoLabel->setTextArg("[CAPACITY_STRING]", empty_str);
}
// </FS:Ansariel>
@ -744,12 +759,12 @@ void LLFloaterTools::refresh()
// }
// }
// childSetTextArg("selection_faces", "[FACES_STRING]", faces_str);
// mTextSelectionFaces->setTextArg("[FACES_STRING]", faces_str);
//}
//bool show_faces = (object_count == 1)
// && LLToolFace::getInstance() == LLToolMgr::getInstance()->getCurrentTool();
//getChildView("selection_faces")->setVisible(show_faces);
//mTextSelectionFaces->setVisible(show_faces);
// </FS:Ansariel>
LLStringUtil::format_map_t selection_args;
@ -763,16 +778,12 @@ void LLFloaterTools::refresh()
// </FS:CR>
selection_args["LAND_IMPACT"] = llformat("%.1d", (S32)link_cost);
std::ostringstream selection_info;
selection_info << getString("status_selectcount", selection_args);
getChild<LLTextBox>("selection_count")->setText(selection_info.str());
mTextSelectionCount->setText(getString("status_selectcount", selection_args));
}
// <FS> disable the object and prim counts if nothing selected
bool have_selection = ! LLSelectMgr::getInstance()->getSelection()->isEmpty();
getChildView("link_num_obj_count")->setEnabled(have_selection && enable_link_count);
mTextLinkNumObjCount->setEnabled(have_selection && enable_link_count);
// </FS>
// Refresh child tabs
@ -804,7 +815,7 @@ void LLFloaterTools::refresh()
}
// <FS:CR> Only enable Copy Keys when we have something selected
getChild<LLButton>("btnCopyKeys")->setEnabled(have_selection);
mBtnCopyKeys->setEnabled(have_selection);
// </FS:CR>
}
@ -868,8 +879,9 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
mBtnFocus ->setToggleState( focus_visible );
mRadioGroupFocus->setVisible( focus_visible );
getChildView("slider zoom")->setVisible( focus_visible);
getChildView("slider zoom")->setEnabled(gCameraBtnZoom);
mSliderZoom->setVisible( focus_visible);
mSliderZoom->setEnabled(gCameraBtnZoom);
if (!gCameraBtnOrbit &&
!gCameraBtnPan &&
@ -894,7 +906,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
}
// multiply by correction factor because volume sliders go [0, 0.5]
getChild<LLUICtrl>("slider zoom")->setValue(gAgentCamera.getCameraZoomFraction() * 0.5f);
mSliderZoom->setValue(gAgentCamera.getCameraZoomFraction() * 0.5f);
// Move buttons
bool move_visible = (tool == LLToolGrab::getInstance());
@ -1107,14 +1119,14 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
}
if (mSliderDozerSize)
{
mSliderDozerSize ->setVisible( land_visible );
getChildView("Bulldozer:")->setVisible( land_visible);
getChildView("Dozer Size:")->setVisible( land_visible);
mSliderDozerSize->setVisible( land_visible );
mTextBulldozer->setVisible( land_visible);
mTextDozerSize->setVisible( land_visible);
}
if (mSliderDozerForce)
{
mSliderDozerForce ->setVisible( land_visible );
getChildView("Strength:")->setVisible( land_visible);
mSliderDozerForce->setVisible( land_visible );
mTextDozerStrength->setVisible( land_visible);
}
// <FS>
@ -1127,11 +1139,11 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
// <FS>
getChildView("more info label")->setVisible(!land_visible && have_selection);
getChildView("selection_count")->setVisible(!land_visible && have_selection);
mTextSelectionCount->setVisible(!land_visible && have_selection);
// <FS:Ansariel> We got this already
//getChildView("selection_faces")->setVisible(LLToolFace::getInstance() == LLToolMgr::getInstance()->getCurrentTool()
//mTextSelectionFaces->setVisible(LLToolFace::getInstance() == LLToolMgr::getInstance()->getCurrentTool()
// && LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1);
getChildView("selection_empty")->setVisible(!land_visible && !have_selection);
mTextSelectionEmpty->setVisible(!land_visible && !have_selection);
//mTab->setVisible(!land_visible);
//mPanelLandInfo->setVisible(land_visible);

View File

@ -186,6 +186,16 @@ public:
LLButton *mBtnDuplicate;
LLButton *mBtnDuplicateInPlace;
LLTextBox* mTextSelectionCount = nullptr;
LLTextBox* mTextSelectionEmpty = nullptr;
LLTextBox* mTextSelectionFaces = nullptr;
LLSlider* mSliderZoom = nullptr;
// <FS:Ansariel> Performance improvements
LLTextBox* mTextLinkNumObjCount = nullptr;
LLTextBox* mTextMoreInfoLabel = nullptr;
LLButton* mBtnCopyKeys = nullptr;
// <FS:Ansariel> FIRE-7802: Grass and tree selection in build tool
LLComboBox* mTreeGrassCombo;
@ -196,9 +206,12 @@ public:
LLCheckBoxCtrl *mCheckCopyRotates;
// Land buttons
LLRadioGroup* mRadioGroupLand;
LLSlider *mSliderDozerSize;
LLSlider *mSliderDozerForce;
LLRadioGroup* mRadioGroupLand = nullptr;
LLSlider *mSliderDozerSize = nullptr;
LLSlider *mSliderDozerForce = nullptr;
LLTextBox* mTextBulldozer = nullptr;
LLTextBox* mTextDozerSize = nullptr;
LLTextBox* mTextDozerStrength = nullptr;
LLButton *mBtnApplyToSelection;

View File

@ -3972,11 +3972,11 @@ void LLInventoryAction::onItemsRemovalConfirmation(const LLSD& notification, con
{
for (const LLUUID& id : item_deletion_list)
{
remove_inventory_item(id, NULL);
gInventory.removeItem(id);
}
for (const LLUUID& id : cat_deletion_list)
{
remove_inventory_category(id, NULL);
gInventory.removeCategory(id);
}
}, NULL, false);
}

View File

@ -147,8 +147,6 @@ const LLInventoryGallery::Params& LLInventoryGallery::getDefaultParams()
bool LLInventoryGallery::postBuild()
{
mScrollPanel = getChild<LLScrollContainer>("gallery_scroll_panel");
LLPanel::Params params = LLPanel::getDefaultParams();
mGalleryPanel = LLUICtrlFactory::create<LLPanel>(params);
mMessageTextBox = getChild<LLTextBox>("empty_txt");
mInventoryGalleryMenu = new LLInventoryGalleryContextMenu(this);
mRootGalleryMenu = new LLInventoryGalleryContextMenu(this);

View File

@ -3397,8 +3397,6 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * /* body */, S32 /* b
// only allocate as much space in the cache as is needed for the local cache
data_size = llmin(data_size, bytes);
// <FS:Ansariel> Fix asset caching
//LLFileSystem file(mesh_id, LLAssetType::AT_MESH, LLFileSystem::WRITE);
LLFileSystem file(mesh_id, LLAssetType::AT_MESH, LLFileSystem::READ_WRITE);
if (file.getMaxSize() >= bytes)
{
@ -3407,7 +3405,6 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * /* body */, S32 /* b
file.write(data, data_size);
// <FS:Ansariel> Fix asset caching
S32 remaining = bytes - file.tell();
if (remaining > 0)
{
@ -3419,7 +3416,6 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * /* body */, S32 /* b
delete[] block;
}
}
// </FS:Ansariel>
}
}
else
@ -3472,8 +3468,6 @@ void LLMeshLODHandler::processData(LLCore::BufferArray * /* body */, S32 /* body
if (result == MESH_OK)
{
// good fetch from sim, write to cache
// <FS:Ansariel> Fix asset caching
//LLFileSystem file(mMeshParams.getSculptID(), LLAssetType::AT_MESH, LLFileSystem::WRITE);
LLFileSystem file(mMeshParams.getSculptID(), LLAssetType::AT_MESH, LLFileSystem::READ_WRITE);
S32 offset = mOffset;
@ -3537,8 +3531,6 @@ void LLMeshSkinInfoHandler::processData(LLCore::BufferArray * /* body */, S32 /*
&& gMeshRepo.mThread->skinInfoReceived(mMeshID, data, data_size))
{
// good fetch from sim, write to cache
// <FS:Ansariel> Fix asset caching
//LLFileSystem file(mMeshID, LLAssetType::AT_MESH, LLFileSystem::WRITE);
LLFileSystem file(mMeshID, LLAssetType::AT_MESH, LLFileSystem::READ_WRITE);
S32 offset = mOffset;
@ -3588,8 +3580,6 @@ void LLMeshDecompositionHandler::processData(LLCore::BufferArray * /* body */, S
&& gMeshRepo.mThread->decompositionReceived(mMeshID, data, data_size))
{
// good fetch from sim, write to cache
// <FS:Ansariel> Fix asset caching
//LLFileSystem file(mMeshID, LLAssetType::AT_MESH, LLFileSystem::WRITE);
LLFileSystem file(mMeshID, LLAssetType::AT_MESH, LLFileSystem::READ_WRITE);
S32 offset = mOffset;
@ -3637,8 +3627,6 @@ void LLMeshPhysicsShapeHandler::processData(LLCore::BufferArray * /* body */, S3
&& gMeshRepo.mThread->physicsShapeReceived(mMeshID, data, data_size) == MESH_OK)
{
// good fetch from sim, write to cache for caching
// <FS:Ansariel> Fix asset caching
//LLFileSystem file(mMeshID, LLAssetType::AT_MESH, LLFileSystem::WRITE);
LLFileSystem file(mMeshID, LLAssetType::AT_MESH, LLFileSystem::READ_WRITE);
S32 offset = mOffset;

View File

@ -109,8 +109,6 @@ bool LLOutfitGallery::postBuild()
{
bool rv = LLOutfitListBase::postBuild();
mScrollPanel = getChild<LLScrollContainer>("gallery_scroll_panel");
LLPanel::Params params = LLPanel::getDefaultParams(); // Don't parse XML when creating dummy LLPanel
mGalleryPanel = LLUICtrlFactory::create<LLPanel>(params);
mMessageTextBox = getChild<LLTextBox>("no_outfits_txt");
mOutfitGalleryMenu = new LLOutfitGalleryContextMenu(this);
return rv;

View File

@ -353,6 +353,13 @@ bool LLPanelMainInventory::postBuild()
}
}
// <FS:Ansariel> Doesn't work
//mParentSidepanel = getParentSidepanelInventory();
//if (mParentSidepanel)
//{
// mInboxPanel = mParentSidepanel->getChild<LLPanelMarketplaceInbox>("marketplace_inbox");
//}
// </FS:Ansariel>
mFilterEditor = getChild<LLFilterEditor>("inventory search editor");
if (mFilterEditor)
@ -423,31 +430,29 @@ LLPanelMainInventory::~LLPanelMainInventory( void )
// for example, LLParamSDParser doesn't know about U64,
// so some FilterOps params should be revised.
LLSD filterRoot;
LLInventoryPanel* all_items_panel = getChild<LLInventoryPanel>(ALL_ITEMS);
if (all_items_panel)
if (mAllItemsPanel)
{
LLSD filterState;
LLInventoryPanel::InventoryState p;
all_items_panel->getFilter().toParams(p.filter);
all_items_panel->getRootViewModel().getSorter().toParams(p.sort);
mAllItemsPanel->getFilter().toParams(p.filter);
mAllItemsPanel->getRootViewModel().getSorter().toParams(p.sort);
if (p.validateBlock(false))
{
LLParamSDParser().writeSD(filterState, p);
filterRoot[all_items_panel->getName()] = filterState;
filterRoot[mAllItemsPanel->getName()] = filterState;
}
}
LLInventoryPanel* panel = findChild<LLInventoryPanel>(RECENT_ITEMS);
if (panel)
if (mRecentPanel)
{
LLSD filterState;
LLInventoryPanel::InventoryState p;
panel->getFilter().toParams(p.filter);
panel->getRootViewModel().getSorter().toParams(p.sort);
mRecentPanel->getFilter().toParams(p.filter);
mRecentPanel->getRootViewModel().getSorter().toParams(p.sort);
if (p.validateBlock(false))
{
LLParamSDParser().writeSD(filterState, p);
filterRoot[panel->getName()] = filterState;
filterRoot[mRecentPanel->getName()] = filterState;
}
}
@ -954,14 +959,9 @@ void LLPanelMainInventory::onClearSearch()
mFilterSubString = "";
// <FS:Ansariel> FIRE-22509: Only apply inbox filter on primary inventory window
//LLSidepanelInventory * sidepanel_inventory = getParentSidepanelInventory();
//if (sidepanel_inventory)
//if (mInboxPanel)
//{
// LLPanelMarketplaceInbox* inbox_panel = sidepanel_inventory->getChild<LLPanelMarketplaceInbox>("marketplace_inbox");
// if (inbox_panel)
// {
// inbox_panel->onClearSearch();
// }
// mInboxPanel->onClearSearch();
//}
LLSidepanelInventory * sidepanel_inventory = getParentByType<LLSidepanelInventory>();
if (sidepanel_inventory && sidepanel_inventory->getInboxPanel())
@ -1044,14 +1044,9 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string )
// </FS:Ansariel> Separate search for inventory tabs from Satomi Ahn (FIRE-913 & FIRE-6862)
// <FS:Ansariel> FIRE-22509: Only apply inbox filter on primary inventory window
//LLSidepanelInventory * sidepanel_inventory = getParentSidepanelInventory();
//if (sidepanel_inventory)
//if (mInboxPanel)
//{
// LLPanelMarketplaceInbox* inbox_panel = sidepanel_inventory->getChild<LLPanelMarketplaceInbox>("marketplace_inbox");
// if (inbox_panel)
// {
// inbox_panel->onFilterEdit(search_string);
// }
// mInboxPanel->onFilterEdit(search_string);
//}
LLSidepanelInventory * sidepanel_inventory = getParentByType<LLSidepanelInventory>();
if (sidepanel_inventory && sidepanel_inventory->getInboxPanel())
@ -2008,17 +2003,13 @@ void LLPanelMainInventory::onAddButtonClick()
void LLPanelMainInventory::setActivePanel()
{
// Todo: should cover gallery mode in some way
if(mSingleFolderMode && isListViewMode())
if(mSingleFolderMode && (isListViewMode() || isCombinationViewMode()))
{
mActivePanel = getChild<LLInventoryPanel>("comb_single_folder_inv");
}
else if(mSingleFolderMode && isCombinationViewMode())
{
mActivePanel = getChild<LLInventoryPanel>("comb_single_folder_inv");
mActivePanel = mCombinationInventoryPanel;
}
else
{
mActivePanel = (LLInventoryPanel*)getChild<LLTabContainer>("inventory filter tabs")->getCurrentPanel();
mActivePanel = (LLInventoryPanel*)mFilterTabs->getCurrentPanel();
}
mViewModeBtn->setEnabled(mSingleFolderMode || (getAllItemsPanel() == getActivePanel()));
}
@ -2059,6 +2050,18 @@ void LLPanelMainInventory::toggleViewMode()
updateTitle();
onFilterSelected();
// <FS:Ansariel> Doesn't work
//if (mParentSidepanel)
//{
// if(mSingleFolderMode)
// {
// mParentSidepanel->hideInbox();
// }
// else
// {
// mParentSidepanel->toggleInbox();
// }
//}
LLSidepanelInventory* sidepanel_inventory = getParentSidepanelInventory();
if (sidepanel_inventory)
{
@ -2071,6 +2074,7 @@ void LLPanelMainInventory::toggleViewMode()
sidepanel_inventory->toggleInbox();
}
}
// </FS:Ansariel>
}
void LLPanelMainInventory::onViewModeClick()

View File

@ -50,6 +50,8 @@ class LLSidepanelInventory;
class LLToggleableMenu;
class LLFloater;
class LLFloaterSidePanelContainer;
class LLSidepanelInventory;
class LLPanelMarketplaceInbox;
class LLComboBox; // <FS:Zi> Filter dropdown
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -300,6 +302,9 @@ protected:
void setUploadCostIfNeeded();
void disableAddIfNeeded();
private:
LLSidepanelInventory* mParentSidepanel = nullptr;
LLPanelMarketplaceInbox* mInboxPanel = nullptr;
LLDragAndDropButton* mTrashButton; // <FS:Ansariel> Keep better inventory layout
LLToggleableMenu* mMenuGearDefault;
LLToggleableMenu* mMenuViewDefault;

View File

@ -829,12 +829,14 @@ bool LLPanelPeople::postBuild()
// [/FS:CR]
// <FS:Ansariel> Friend list accordion replacement
//LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>("tab_all");
//accordion_tab->setDropDownStateChangedCallback(
//mFriendsAccordion = friends_tab->getChild<LLAccordionCtrl>("friends_accordion");
//mFriendsAllTab = mFriendsAccordion->getChild<LLAccordionCtrlTab>("tab_all");
//mFriendsAllTab->setDropDownStateChangedCallback(
// boost::bind(&LLPanelPeople::onFriendsAccordionExpandedCollapsed, this, _1, _2, mAllFriendList));
//accordion_tab = getChild<LLAccordionCtrlTab>("tab_online");
//accordion_tab->setDropDownStateChangedCallback(
//mFriendsOnlineTab = mFriendsAccordion->getChild<LLAccordionCtrlTab>("tab_online");
//mFriendsOnlineTab->setDropDownStateChangedCallback(
// boost::bind(&LLPanelPeople::onFriendsAccordionExpandedCollapsed, this, _1, _2, mOnlineFriendList));
// </FS:Ansariel> Friend list accordion replacement
@ -1216,10 +1218,10 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string)
mOnlineFriendList->setNameFilter(filter);
mAllFriendList->setNameFilter(filter);
// <FS:Ansariel> Friend list accordion replacement
//setAccordionCollapsedByUser("tab_online", false);
//setAccordionCollapsedByUser("tab_all", false);
// </FS:Ansariel> Friend list accordion replacement
// <FS:Ansariel> Friend list accordion replacement
//setAccordionCollapsedByUser(mFriendsOnlineTab, false);
//setAccordionCollapsedByUser(mFriendsAllTab, false);
// </FS:Ansariel> Friend list accordion replacement
showFriendsAccordionsIfNeeded();
// restore accordion tabs state _after_ all manipulations
@ -1262,15 +1264,14 @@ void LLPanelPeople::onGroupLimitInfo()
void LLPanelPeople::onTabSelected(const LLSD& param)
{
std::string tab_name = getChild<LLPanel>(param.asString())->getName();
updateButtons();
showFriendsAccordionsIfNeeded();
// <FS:AO> Layout panels will not initialize at a constant size, force it here.
if (tab_name == NEARBY_TAB_NAME)
if (mTabContainer->getCurrentPanel()->getName() == NEARBY_TAB_NAME)
{
LLLayoutPanel* minilayout = (LLLayoutPanel*)getChildView("minimaplayout", true);
LLLayoutPanel* minilayout = (LLLayoutPanel*)mTabContainer->getCurrentPanel()->getChildView("minimaplayout", true);
if (minilayout->getVisible())
{
LLRect rec = minilayout->getRect();
@ -1320,9 +1321,9 @@ void LLPanelPeople::onAvatarListCommitted(LLAvatarList* list)
uuid_vec_t selected_uuids;
getCurrentItemIDs(selected_uuids);
mMiniMap->setSelected(selected_uuids);
} else
}
// Make sure only one of the friends lists (online/all) has selection.
if (getActiveTabName() == FRIENDS_TAB_NAME)
else if (getActiveTabName() == FRIENDS_TAB_NAME)
{
if (list == mOnlineFriendList)
mAllFriendList->resetSelection(true);
@ -1347,12 +1348,9 @@ void LLPanelPeople::onAddFriendButtonClicked()
bool LLPanelPeople::isItemsFreeOfFriends(const uuid_vec_t& uuids)
{
const LLAvatarTracker& av_tracker = LLAvatarTracker::instance();
for ( uuid_vec_t::const_iterator
id = uuids.begin(),
id_end = uuids.end();
id != id_end; ++id )
for (const LLUUID& uuid : uuids)
{
if (av_tracker.isBuddy (*id))
if (av_tracker.isBuddy(uuid))
{
return false;
}
@ -1676,15 +1674,8 @@ bool LLPanelPeople::notifyChildren(const LLSD& info)
return LLPanel::notifyChildren(info);
}
void LLPanelPeople::showAccordion(const std::string name, bool show)
void LLPanelPeople::showAccordion(LLAccordionCtrlTab* tab, bool show)
{
if(name.empty())
{
LL_WARNS() << "No name provided" << LL_ENDL;
return;
}
LLAccordionCtrlTab* tab = getChild<LLAccordionCtrlTab>(name);
tab->setVisible(show);
if(show)
{
@ -1703,14 +1694,13 @@ void LLPanelPeople::showFriendsAccordionsIfNeeded()
{
// <FS:Ansariel> Friend list accordion replacement
// Expand and show accordions if needed, else - hide them
//showAccordion("tab_online", mOnlineFriendList->filterHasMatches());
//showAccordion("tab_all", mAllFriendList->filterHasMatches());
//showAccordion(mFriendsOnlineTab, mOnlineFriendList->filterHasMatches());
//showAccordion(mFriendsAllTab, mAllFriendList->filterHasMatches());
//// Rearrange accordions
//LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion");
//accordion->arrange();
//mFriendsAccordion->arrange();
childSetVisible("friends_accordion", mAllFriendList->filterHasMatches());
mFriendsTabContainer->setVisible(mAllFriendList->filterHasMatches());
// </FS:Ansariel> Friend list accordion replacement
// *TODO: new no_matched_tabs_text attribute was implemented in accordion (EXT-7368).
@ -1724,11 +1714,11 @@ void LLPanelPeople::onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param
{
if(ctrl == mOnlineFriendList)
{
showAccordion("tab_online", param.asInteger());
showAccordion(mFriendsOnlineTab, param.asInteger());
}
else if(ctrl == mAllFriendList)
{
showAccordion("tab_all", param.asInteger());
showAccordion(mFriendsAllTab, param.asInteger());
}
}

View File

@ -46,6 +46,8 @@ class LLGroupList;
class LLMenuButton;
class LLTabContainer;
class LLNetMap;
class LLAccordionCtrl;
class LLAccordionCtrlTab;
// Firestorm declarations
class LLMenuGL;
@ -142,7 +144,7 @@ private:
void onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LLSD& param, LLAvatarList* avatar_list);
void showAccordion(const std::string name, bool show);
void showAccordion(LLAccordionCtrlTab* tab, bool show);
void showFriendsAccordionsIfNeeded();
@ -167,6 +169,10 @@ private:
// <FS:Ansariel> FIRE-4740: Friend counter in people panel
LLTabContainer* mFriendsTabContainer;
LLAccordionCtrl* mFriendsAccordion = nullptr;
LLAccordionCtrlTab* mFriendsAllTab = nullptr;
LLAccordionCtrlTab* mFriendsOnlineTab = nullptr;
LLButton* mNearbyGearBtn = nullptr;
LLButton* mFriendsGearBtn = nullptr;
LLButton* mRecentGearBtn = nullptr;

View File

@ -73,8 +73,7 @@
// Default constructor
LLPreviewNotecard::LLPreviewNotecard(const LLSD& key) //const LLUUID& item_id,
: LLPreview( key ),
mLiveFile(NULL)
: LLPreview( key )
// <FS:Ansariel> FIRE-24306: Retain cursor position when saving notecards
,mCursorPos(0)
,mScrollPos(0)
@ -113,27 +112,34 @@ bool LLPreviewNotecard::postBuild()
mEditor->setNotecardInfo(mItemUUID, mObjectID, getKey());
mEditor->makePristine();
childSetAction("Save", onClickSave, this);
getChildView("lock")->setVisible( false);
mSaveBtn = getChild<LLButton>("Save");
mSaveBtn->setCommitCallback(boost::bind(&LLPreviewNotecard::saveIfNeeded, this, nullptr, true));
childSetAction("Delete", onClickDelete, this);
getChildView("Delete")->setEnabled(false);
mLockBtn = findChild<LLUICtrl>("lock");
if (mLockBtn)
mLockBtn->setVisible(false);
childSetAction("Edit", onClickEdit, this);
mDeleteBtn = getChild<LLButton>("Delete");
mDeleteBtn->setCommitCallback(boost::bind(&LLPreviewNotecard::deleteNotecard, this));
mDeleteBtn->setEnabled(false);
mEditBtn = getChild<LLButton>("Edit");
mEditBtn->setCommitCallback(boost::bind(&LLPreviewNotecard::openInExternalEditor, this));
// <FS:Ansariel> FIRE-13969: Search button
getChild<LLButton>("Search")->setClickedCallback(boost::bind(&LLPreviewNotecard::onSearchButtonClicked, this));
const LLInventoryItem* item = getItem();
childSetCommitCallback("desc", LLPreview::onText, this);
mDescEditor = getChild<LLLineEditor>("desc");
mDescEditor->setCommitCallback(boost::bind(&LLPreview::onText, mDescEditor, this));
if (item)
{
getChild<LLUICtrl>("desc")->setValue(item->getDescription());
mDescEditor->setValue(item->getDescription());
bool source_library = mObjectUUID.isNull() && gInventory.isObjectDescendentOf(item->getUUID(), gInventory.getLibraryRootFolderID());
getChildView("Delete")->setEnabled(!source_library);
mDeleteBtn->setEnabled(!source_library);
}
getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
mDescEditor->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
// <FS:Ansariel> FIRE-29425: User-selectable font and size for notecards
mFontNameChangedCallbackConnection = gSavedSettings.getControl("FSNotecardFontName")->getSignal()->connect(boost::bind(&LLPreviewNotecard::onFontChanged, this));
@ -152,24 +158,30 @@ bool LLPreviewNotecard::saveItem()
void LLPreviewNotecard::setEnabled(bool enabled)
{
LLViewerTextEditor* editor = findChild<LLViewerTextEditor>("Notecard Editor");
// editor is part of xml, if it doesn't exists, nothing else does
if (editor)
if (mEditor)
{
editor->setEnabled(enabled);
getChildView("lock")->setVisible( !enabled);
getChildView("desc")->setEnabled(enabled);
getChildView("Save")->setEnabled(enabled && (!editor->isPristine()));
mEditor->setEnabled(enabled);
}
if (mLockBtn)
{
mLockBtn->setVisible(!enabled);
}
if (mDescEditor)
{
mDescEditor->setEnabled(enabled);
}
if (mSaveBtn)
{
mSaveBtn->setEnabled(enabled && mEditor && (!mEditor->isPristine()));
}
}
void LLPreviewNotecard::draw()
{
LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
bool changed = !editor->isPristine();
bool changed = !mEditor->isPristine();
getChildView("Save")->setEnabled(changed && getEnabled());
mSaveBtn->setEnabled(changed && getEnabled());
LLPreview::draw();
}
@ -204,9 +216,7 @@ bool LLPreviewNotecard::handleKeyHere(KEY key, MASK mask)
// virtual
bool LLPreviewNotecard::canClose()
{
LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
if(mForceClose || editor->isPristine())
if(mForceClose || mEditor->isPristine())
{
return true;
}
@ -227,20 +237,13 @@ void LLPreviewNotecard::setObjectID(const LLUUID& object_id)
{
LLPreview::setObjectID(object_id);
LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
editor->setNotecardObjectID(mObjectUUID);
editor->makePristine();
mEditor->setNotecardObjectID(mObjectUUID);
mEditor->makePristine();
}
const LLInventoryItem* LLPreviewNotecard::getDragItem()
{
LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
if(editor)
{
return editor->getDragItem();
}
return NULL;
return mEditor->getDragItem();
}
// [SL:KB] - Patch: UI-FloaterSearchReplace | Checked: 2010-11-05 (Catznip-2.3.0a) | Added: Catznip-2.3.0a
@ -252,10 +255,7 @@ LLTextEditor* LLPreviewNotecard::getEditor()
bool LLPreviewNotecard::hasEmbeddedInventory()
{
LLViewerTextEditor* editor = NULL;
editor = getChild<LLViewerTextEditor>("Notecard Editor");
if (!editor) return false;
return editor->hasEmbeddedInventory();
return mEditor->hasEmbeddedInventory();
}
void LLPreviewNotecard::refreshFromInventory(const LLUUID& new_item_id)
@ -273,14 +273,9 @@ void LLPreviewNotecard::updateTitleButtons()
{
LLPreview::updateTitleButtons();
// <FS:Ansariel> Fix XUI parser warning
//LLUICtrl* lock_btn = getChild<LLUICtrl>("lock");
//if (lock_btn->getVisible() && !isMinimized()) // lock button stays visible if floater is minimized.
LLUICtrl* lock_btn = findChild<LLUICtrl>("lock");
if(lock_btn && lock_btn->getVisible() && !isMinimized()) // lock button stays visible if floater is minimized.
// </FS:Ansariel>
if(mLockBtn && mLockBtn->getVisible() && !isMinimized()) // lock button stays visible if floater is minimized.
{
LLRect lock_rc = lock_btn->getRect();
LLRect lock_rc = mLockBtn->getRect();
LLRect buttons_rect = getDragHandle()->getButtonsRect();
buttons_rect.mLeft = lock_rc.mLeft;
getDragHandle()->setButtonsRect(buttons_rect);
@ -291,11 +286,6 @@ void LLPreviewNotecard::loadAsset()
{
// request the asset.
const LLInventoryItem* item = getItem();
LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
if (!editor)
return;
bool fail = false;
if(item)
@ -311,9 +301,9 @@ void LLPreviewNotecard::loadAsset()
mAssetID = item->getAssetUUID();
if(mAssetID.isNull())
{
editor->setText(LLStringUtil::null);
editor->makePristine();
editor->setEnabled(true);
mEditor->setText(LLStringUtil::null);
mEditor->makePristine();
mEditor->setEnabled(true);
mAssetStatus = PREVIEW_ASSET_LOADED;
}
else
@ -332,9 +322,9 @@ void LLPreviewNotecard::loadAsset()
// The object that we're trying to look at disappeared, bail.
LL_WARNS() << "Can't find object " << mObjectUUID << " associated with notecard." << LL_ENDL;
mAssetID.setNull();
editor->setText(getString("no_object"));
editor->makePristine();
editor->setEnabled(false);
mEditor->setText(getString("no_object"));
mEditor->makePristine();
mEditor->setEnabled(false);
mAssetStatus = PREVIEW_ASSET_LOADED;
return;
}
@ -363,22 +353,22 @@ void LLPreviewNotecard::loadAsset()
else
{
mAssetID.setNull();
editor->setText(getString("not_allowed"));
editor->makePristine();
editor->setEnabled(false);
mEditor->setText(getString("not_allowed"));
mEditor->makePristine();
mEditor->setEnabled(false);
mAssetStatus = PREVIEW_ASSET_LOADED;
}
if(!allow_modify)
{
editor->setEnabled(false);
getChildView("lock")->setVisible( true);
getChildView("Edit")->setEnabled(false);
mEditor->setEnabled(false);
mLockBtn->setVisible( true);
mEditBtn->setEnabled(false);
}
if((allow_modify || is_owner) && !source_library)
{
getChildView("Delete")->setEnabled(true);
mDeleteBtn->setEnabled(true);
}
}
else if (mObjectUUID.notNull() && mItemUUID.notNull())
@ -407,9 +397,9 @@ void LLPreviewNotecard::loadAsset()
if (fail)
{
editor->setText(LLStringUtil::null);
editor->makePristine();
editor->setEnabled(true);
mEditor->setText(LLStringUtil::null);
mEditor->makePristine();
mEditor->setEnabled(true);
// Don't set asset status here; we may not have set the item id yet
// (e.g. when this gets called initially)
//mAssetStatus = PREVIEW_ASSET_LOADED;
@ -439,7 +429,7 @@ void LLPreviewNotecard::onLoadComplete(const LLUUID& asset_uuid,
buffer[file_length] = 0;
LLViewerTextEditor* previewEditor = preview->getChild<LLViewerTextEditor>("Notecard Editor");
LLViewerTextEditor* previewEditor = preview->mEditor;
if( (file_length > 19) && !strncmp( &buffer[0], "Linden text version", 19 ) )
{
@ -491,38 +481,6 @@ void LLPreviewNotecard::onLoadComplete(const LLUUID& asset_uuid,
delete floater_key;
}
// static
void LLPreviewNotecard::onClickSave(void* user_data)
{
//LL_INFOS() << "LLPreviewNotecard::onBtnSave()" << LL_ENDL;
LLPreviewNotecard* preview = (LLPreviewNotecard*)user_data;
if(preview)
{
preview->saveIfNeeded();
}
}
// static
void LLPreviewNotecard::onClickDelete(void* user_data)
{
LLPreviewNotecard* preview = (LLPreviewNotecard*)user_data;
if(preview)
{
preview->deleteNotecard();
}
}
// static
void LLPreviewNotecard::onClickEdit(void* user_data)
{
LLPreviewNotecard* preview = (LLPreviewNotecard*)user_data;
if (preview)
{
preview->openInExternalEditor();
}
}
struct LLSaveNotecardInfo
{
LLPreviewNotecard* mSelf;
@ -589,27 +547,19 @@ void LLPreviewNotecard::finishTaskUpload(LLUUID itemId, LLUUID newAssetId, LLUUI
bool LLPreviewNotecard::saveIfNeeded(LLInventoryItem* copyitem, bool sync)
{
LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor");
if(!editor)
{
LL_WARNS() << "Cannot get handle to the notecard editor." << LL_ENDL;
return false;
}
if(!editor->isPristine())
if(!mEditor->isPristine())
{
std::string buffer;
if (!editor->exportBuffer(buffer))
if (!mEditor->exportBuffer(buffer))
{
return false;
}
// <FS:Ansariel> FIRE-24306: Retain cursor position when saving notecards
mCursorPos = editor->getCursorPos();
mScrollPos = editor->getScrollContainer()->getScrollbar(LLScrollContainer::VERTICAL)->getDocPos();
mCursorPos = mEditor->getCursorPos();
mScrollPos = mEditor->getScrollContainer()->getScrollbar(LLScrollContainer::VERTICAL)->getDocPos();
editor->makePristine();
mEditor->makePristine();
const LLInventoryItem* item = getItem();
// save it out to database
if (item)
@ -773,11 +723,7 @@ void LLPreviewNotecard::onSaveComplete(const LLUUID& asset_uuid, void* user_data
// Perform item copy to inventory
if (info->mCopyItem.notNull())
{
LLViewerTextEditor* editor = info->mSelf->getChild<LLViewerTextEditor>("Notecard Editor");
if (editor)
{
editor->copyInventory(info->mCopyItem);
}
info->mSelf->mEditor->copyInventory(info->mCopyItem);
}
// Find our window and close it if requested.
@ -812,7 +758,7 @@ bool LLPreviewNotecard::handleSaveChangesDialog(const LLSD& notification, const
{
case 0: // "Yes"
mCloseAfterSave = true;
LLPreviewNotecard::onClickSave((void*)this);
saveIfNeeded();
break;
case 1: // "No"

View File

@ -41,6 +41,7 @@
class LLViewerTextEditor;
class LLButton;
class LLLineEditor;
// [SL:KB] - Patch: UI-FloaterSearchReplace | Checked: 2010-11-05 (Catznip-2.3.0a) | Added: Catznip-2.3.0a
class LLTextEditor;
// [/SL:KB]
@ -105,12 +106,6 @@ protected:
LLAssetType::EType type,
void* user_data, S32 status, LLExtStat ext_status);
static void onClickSave(void* data);
static void onClickDelete(void* data);
static void onClickEdit(void* data);
static void onSaveComplete(const LLUUID& asset_uuid,
void* user_data,
S32 status, LLExtStat ext_status);
@ -136,14 +131,18 @@ protected:
// </FS:Ansariel>
protected:
LLViewerTextEditor* mEditor;
LLButton* mSaveBtn;
LLViewerTextEditor* mEditor = nullptr;
LLLineEditor* mDescEditor = nullptr;
LLButton* mSaveBtn = nullptr;
LLButton* mEditBtn = nullptr;
LLButton* mDeleteBtn = nullptr;
LLUICtrl* mLockBtn = nullptr;
LLUUID mAssetID;
LLUUID mObjectID;
LLLiveLSLFile* mLiveFile;
LLLiveLSLFile* mLiveFile = nullptr;
// <FS:Ansariel> FIRE-24306: Retain cursor position when saving notecards
S32 mCursorPos;

View File

@ -522,7 +522,7 @@ void LLLiveLSLEditor::experienceChanged()
if(mScriptEd->getAssociatedExperience() != mExperiences->getSelectedValue().asUUID())
{
mScriptEd->enableSave(getIsModifiable());
//getChildView("Save_btn")->setEnabled(true);
//mSaveBtn->setEnabled(true);
mScriptEd->setAssociatedExperience(mExperiences->getSelectedValue().asUUID());
updateExperiencePanel();
}
@ -568,9 +568,8 @@ void LLLiveLSLEditor::onToggleExperience( LLUICtrl *ui, void* userdata )
bool LLScriptEdCore::postBuild()
{
mLineCol=getChild<LLTextBox>("line_col");
mLineCol = getChild<LLTextBox>("line_col");
// <FS:CR> Advanced Script Editor
//mSaveBtn=getChildView("Save_btn");
mSaveBtn = getChild<LLButton>("save_btn");
mSaveBtn2 = getChild<LLButton>("save_btn_2"); // <FS:Zi> support extra save button
mCutBtn = getChild<LLButton>("cut_btn");
@ -614,7 +613,8 @@ bool LLScriptEdCore::postBuild()
childSetCommitCallback("lsl errors", &LLScriptEdCore::onErrorList, this);
// <FS:CR> Advanced Script Editor
//childSetAction("Save_btn", boost::bind(&LLScriptEdCore::doSave,this,false));
//mSaveBtn = getChild<LLButton>("Save_btn");
//mSaveBtn->setCommitCallback(boost::bind(&LLScriptEdCore::doSave, this, false));
childSetAction("prefs_btn", boost::bind(&LLScriptEdCore::onBtnPrefs, this));
// </FS:CR>
childSetAction("Edit_btn", boost::bind(&LLScriptEdCore::openInExternalEditor, this));

View File

@ -247,11 +247,10 @@ private:
bool mScriptRemoved;
bool mSaveDialogShown;
LLUUID mAssetID;
LLTextBox* mLineCol = nullptr;
LLButton* mSaveBtn = nullptr;
LLTextBox* mLineCol;
// <FS:CR> Advanced Script Editor
//LLView* mSaveBtn;
LLButton* mSaveBtn;
LLButton* mSaveBtn2; // // <FS:Zi> support extra save button
LLButton* mCutBtn;
LLButton* mCopyBtn;

View File

@ -175,6 +175,11 @@ void LLPreviewTexture::populateRatioList()
// virtual
bool LLPreviewTexture::postBuild()
{
mButtonsPanel = getChild<LLLayoutPanel>("buttons_panel");
mDimensionsText = getChild<LLUICtrl>("dimensions");
mAspectRatioText = getChild<LLUICtrl>("aspect_ratio");
mDimensionsPanel = findChild<LLPanel>("dimensions_panel"); // <FS:Ansariel> Texture preview mode
if (mCopyToInv)
{
getChild<LLButton>("Keep")->setLabel(getString("Copy"));
@ -237,9 +242,6 @@ bool LLPreviewTexture::postBuild()
}
// </FS:Ansariel>
// <FS:Ansariel> Performance improvement
mDimensionsCtrl = getChild<LLUICtrl>("dimensions");
// <FS:Ansariel> FIRE-20150: Add refresh button to texture preview
getChild<LLButton>("btn_refresh")->setClickedCallback(boost::bind(&LLPreviewTexture::onButtonRefresh, this));
@ -530,23 +532,26 @@ void LLPreviewTexture::reshape(S32 width, S32 height, bool called_from_parent)
{
LLPreview::reshape(width, height, called_from_parent);
LLRect dim_rect;
// Ansariel: Need the rect of the dimensions_panel
//LLView *pView = findChildView( "dimensions" );
LLView *pView = findChildView( "dimensions_panel" );
if( pView )
dim_rect = pView->getRect();
S32 horiz_pad = 2 * (LLPANEL_BORDER_WIDTH + PREVIEW_PAD) + PREVIEW_RESIZE_HANDLE_SIZE;
// add space for dimensions and aspect ratio
S32 info_height = dim_rect.mTop + CLIENT_RECT_VPAD;
S32 info_height = CLIENT_RECT_VPAD;
// <FS:Ansariel> Texture preview mode
//if (getChild<LLLayoutPanel>("buttons_panel")->getVisible())
//if (mDimensionsText)
//{
// info_height += getChild<LLLayoutPanel>("buttons_panel")->getRect().getHeight();
// LLRect dim_rect(mDimensionsText->getRect());
// info_height += dim_rect.mTop;
//}
//if (mButtonsPanel->getVisible())
//{
// info_height += mButtonsPanel->getRect().getHeight();
//}
if (mDimensionsPanel)
{
LLRect dim_rect(mDimensionsPanel->getRect());
info_height += dim_rect.mTop;
}
// </FS:Ansariel>
LLRect client_rect(horiz_pad, getRect().getHeight(), getRect().getWidth() - horiz_pad, 0);
client_rect.mTop -= (PREVIEW_HEADER_SIZE + CLIENT_RECT_VPAD);
@ -616,7 +621,7 @@ void LLPreviewTexture::openToSave()
// getChildView("desc txt")->setVisible(false);
// getChildView("desc")->setVisible(false);
// getChild<LLLayoutStack>("preview_stack")->collapsePanel(getChild<LLLayoutPanel>("buttons_panel"), true);
// getChild<LLLayoutPanel>("buttons_panel")->setVisible(false);
// mButtonsPanel->setVisible(false);
// getChild<LLComboBox>("combo_aspect_ratio")->setCurrentByIndex(0); //unconstrained
// reshape(getRect().getWidth(), getRect().getHeight());
//}
@ -779,15 +784,15 @@ void LLPreviewTexture::updateDimensions()
// Update the width/height display every time
// <FS:Ansariel> Performance improvement
//getChild<LLUICtrl>("dimensions")->setTextArg("[WIDTH]", llformat("%d", img_width));
//getChild<LLUICtrl>("dimensions")->setTextArg("[HEIGHT]", llformat("%d", img_height));
//mDimensionsText->setTextArg("[WIDTH]", llformat("%d", img_width));
//mDimensionsText->setTextArg("[HEIGHT]", llformat("%d", img_height));
if (img_width != mLastWidth)
{
mDimensionsCtrl->setTextArg("[WIDTH]", llformat("%d", img_width));
mDimensionsText->setTextArg("[WIDTH]", llformat("%d", img_width));
}
if (img_height != mLastHeight)
{
mDimensionsCtrl->setTextArg("[HEIGHT]", llformat("%d", img_height));
mDimensionsText->setTextArg("[HEIGHT]", llformat("%d", img_height));
}
// </FS:Ansariel> Performance improvement
@ -974,9 +979,9 @@ void LLPreviewTexture::updateDimensions()
gFloaterView->adjustToFitScreen(this, false);
// </FS:Ansariel>: Show image at full resolution if possible
LLRect dim_rect(getChildView("dimensions")->getRect());
LLRect aspect_label_rect(getChildView("aspect_ratio")->getRect());
getChildView("aspect_ratio")->setVisible( dim_rect.mRight < aspect_label_rect.mLeft);
LLRect dim_rect(mDimensionsText->getRect());
LLRect aspect_label_rect(mAspectRatioText->getRect());
mAspectRatioText->setVisible( dim_rect.mRight < aspect_label_rect.mLeft);
// <FS:Ansariel> Asset UUID
if (mIsFullPerm)

View File

@ -37,6 +37,8 @@
class LLComboBox;
class LLImageRaw;
class LLLayoutPanel;
class LLPanel;
class LLPreviewTexture : public LLPreview
{
@ -151,10 +153,14 @@ private:
LLAvatarNameCache::callback_connection_t mAvatarNameCallbackConnection;
LLUIString mUploaderDateTime;
// <FS:Ansariel> Performance improvement
LLUICtrl* mDimensionsCtrl;
LLLoadedCallbackEntry::source_callback_list_t mCallbackTextureList ;
std::vector<std::string> mRatiosList;
LLLayoutPanel* mButtonsPanel = nullptr;
LLUICtrl* mDimensionsText = nullptr;
LLUICtrl* mAspectRatioText = nullptr;
// <FS:Ansariel> Texture preview mode
LLPanel* mDimensionsPanel = nullptr;
};
#endif // LL_LLPREVIEWTEXTURE_H

View File

@ -57,26 +57,12 @@ LLRect LLScreenChannelBase::getChannelRect()
if (mFloaterSnapRegion == NULL)
{
mFloaterSnapRegion = gViewerWindow->getRootView()->getChildView("floater_snap_region");
mFloaterSnapRegion = gViewerWindow->getFloaterSnapRegion();
}
if (mChicletRegion == NULL)
{
// <FS:Ansariel> Group notices, IMs and chiclets position:
// Move the chiclet container to the bottom of its parent
// and follow bottom instead of top
//mChicletRegion = gViewerWindow->getRootView()->getChildView("chiclet_container");
if (gSavedSettings.getBOOL("InternalShowGroupNoticesTopRight"))
{
mChicletRegion = gViewerWindow->getRootView()->getChildView("chiclet_container");
gViewerWindow->getRootView()->getChildView("chiclet_container_bottom")->setVisible(false);
}
else
{
gViewerWindow->getRootView()->getChildView("chiclet_container")->setVisible(false);
mChicletRegion = gViewerWindow->getRootView()->getChildView("chiclet_container_bottom");
}
// </FS:Ansariel> Group notices, IMs and chiclets position
mChicletRegion = gViewerWindow->getChicletContainer();
}
LLRect channel_rect;
@ -130,26 +116,12 @@ bool LLScreenChannelBase::postBuild()
{
if (mFloaterSnapRegion == NULL)
{
mFloaterSnapRegion = gViewerWindow->getRootView()->getChildView("floater_snap_region");
mFloaterSnapRegion = gViewerWindow->getFloaterSnapRegion();
}
if (mChicletRegion == NULL)
{
// <FS:Ansariel> Group notices, IMs and chiclets position - Apparently
// this never gets called, instead see
// LLScreenChannelBase::getChannelRect()
//mChicletRegion = gViewerWindow->getRootView()->getChildView("chiclet_container");
if (gSavedSettings.getBOOL("InternalShowGroupNoticesTopRight"))
{
mChicletRegion = gViewerWindow->getRootView()->getChildView("chiclet_container");
gViewerWindow->getRootView()->getChildView("chiclet_container_bottom")->setVisible(false);
}
else
{
mChicletRegion = gViewerWindow->getRootView()->getChildView("chiclet_container_bottom");
gViewerWindow->getRootView()->getChildView("chiclet_container")->setVisible(false);
}
// </FS:Ansariel>
mChicletRegion = gViewerWindow->getChicletContainer();
}
return true;

View File

@ -1044,6 +1044,7 @@ void LLViewerAssetUpload::HandleUploadError(LLCore::HttpStatus status, LLSD &res
label = result["label"].asString();
}
LLFloaterSnapshot* floater_snapshot = LLFloaterSnapshot::findInstance();
if (result.has("message"))
{
reason = result["message"].asString();
@ -1054,6 +1055,12 @@ void LLViewerAssetUpload::HandleUploadError(LLCore::HttpStatus status, LLSD &res
{
case 404:
reason = LLTrans::getString("AssetUploadServerUnreacheble");
if (floater_snapshot
&& floater_snapshot->isWaitingState()
&& uploadInfo->getAssetType() == LLAssetType::AT_IMAGE_JPEG)
{
label = "CannotUploadSnapshotEmailTooBig";
}
break;
case 499:
reason = LLTrans::getString("AssetUploadServerDifficulties");
@ -1090,7 +1097,6 @@ void LLViewerAssetUpload::HandleUploadError(LLCore::HttpStatus status, LLSD &res
// Todo: move these floater specific actions into proper callbacks
// Let the Snapshot floater know we have failed uploading.
LLFloaterSnapshot* floater_snapshot = LLFloaterSnapshot::findInstance();
if (floater_snapshot && floater_snapshot->isWaitingState())
{
if (uploadInfo->getAssetType() == LLAssetType::AT_IMAGE_JPEG)

View File

@ -12959,7 +12959,6 @@ void initialize_menus()
commit.add("Object.Buy", boost::bind(&handle_buy));
commit.add("Object.Edit", boost::bind(&handle_object_edit));
commit.add("Object.Edit", boost::bind(&handle_object_edit));
commit.add("Object.EditGLTFMaterial", boost::bind(&handle_object_edit_gltf_material));
commit.add("Object.Inspect", boost::bind(&handle_object_inspect));
commit.add("Object.Open", boost::bind(&handle_object_open));

View File

@ -2230,6 +2230,10 @@ void LLViewerWindow::initBase()
mPopupView = main_view->getChild<LLPopupView>("popup_holder");
mHintHolder = main_view->getChild<LLView>("hint_holder")->getHandle();
mLoginPanelHolder = main_view->getChild<LLView>("login_panel_holder")->getHandle();
mStatusBarContainer = main_view->getChild<LLPanel>("status_bar_container");
// <FS:Ansariel> Improved menu and navigation bar
//mNavBarContainer = mStatusBarContainer->getChild<LLView>("nav_bar_container");
//mTopInfoContainer = main_view->getChild<LLPanel>("topinfo_bar_container");
// Create the toolbar view
// Get a pointer to the toolbar view holder
@ -2245,6 +2249,20 @@ void LLViewerWindow::initBase()
// Hide the toolbars for the moment: we'll make them visible after logging in world (see LLViewerWindow::initWorldUI())
gToolBarView->setVisible(false);
mFloaterSnapRegion = gToolBarView->getChild<LLView>("floater_snap_region");
// <FS:Ansariel> Group notices, IMs and chiclets position
//mChicletContainer = gToolBarView->getChild<LLPanel>("chiclet_container");
if (gSavedSettings.getBOOL("InternalShowGroupNoticesTopRight"))
{
mChicletContainer = gToolBarView->getChild<LLPanel>("chiclet_container");
gToolBarView->getChildView("chiclet_container_bottom")->setVisible(false);
}
else
{
gToolBarView->getChildView("chiclet_container")->setVisible(false);
mChicletContainer = gToolBarView->getChild<LLPanel>("chiclet_container_bottom");
}
// </FS:Ansariel>
// <FS:Zi> initialize the utility bar (classic V1 style buttons next to the chat bar)
UtilityBar::instance().init();
@ -2258,7 +2276,7 @@ void LLViewerWindow::initBase()
toolbarp->getCenterLayoutPanel()->setReshapeCallback(boost::bind(&LLFloaterView::setToolbarRect, gFloaterView, _1, _2));
}
}
gFloaterView->setFloaterSnapView(main_view->getChild<LLView>("floater_snap_region")->getHandle());
gFloaterView->setFloaterSnapView(mFloaterSnapRegion->getHandle());
gSnapshotFloaterView = main_view->getChild<LLSnapshotFloaterView>("Snapshot Floater View");
// <FS:Ansariel> Prevent floaters being dragged under main chat bar
@ -2334,25 +2352,11 @@ void LLViewerWindow::initWorldUI()
if (!gNonInteractive)
{
// <FS:Ansariel> Group notices, IMs and chiclets position
//LLPanel* chiclet_container = getRootView()->getChild<LLPanel>("chiclet_container");
LLPanel* chiclet_container;
if (gSavedSettings.getBOOL("InternalShowGroupNoticesTopRight"))
{
chiclet_container = getRootView()->getChild<LLPanel>("chiclet_container");
getRootView()->getChildView("chiclet_container_bottom")->setVisible(false);
}
else
{
getRootView()->getChildView("chiclet_container")->setVisible(false);
chiclet_container = getRootView()->getChild<LLPanel>("chiclet_container_bottom");
}
// </FS:Ansariel> Group notices, IMs and chiclets position
LLChicletBar* chiclet_bar = LLChicletBar::getInstance();
chiclet_bar->setShape(chiclet_container->getLocalRect());
chiclet_bar->setShape(mChicletContainer->getLocalRect());
chiclet_bar->setFollowsAll();
chiclet_container->addChild(chiclet_bar);
chiclet_container->setVisible(true);
mChicletContainer->addChild(chiclet_bar);
mChicletContainer->setVisible(true);
}
LLRect morph_view_rect = full_window;
@ -2378,30 +2382,27 @@ void LLViewerWindow::initWorldUI()
//if (!gStatusBar)
//{
// // Status bar
// LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container");
// gStatusBar = new LLStatusBar(status_bar_container->getLocalRect());
// gStatusBar->setFollows(FOLLOWS_LEFT | FOLLOWS_TOP | FOLLOWS_RIGHT);
// gStatusBar->setShape(status_bar_container->getLocalRect());
// // sync bg color with menu bar
// gStatusBar->setBackgroundColor(gMenuBarView->getBackgroundColor());
// // add InBack so that gStatusBar won't be drawn over menu
// status_bar_container->addChildInBack(gStatusBar, 2/*tab order, after menu*/);
// status_bar_container->setVisible(true);
// mStatusBarContainer->addChildInBack(gStatusBar, 2/*tab order, after menu*/);
// mStatusBarContainer->setVisible(true);
// // Navigation bar
// LLView* nav_bar_container = getRootView()->getChild<LLView>("nav_bar_container");
// navbar->setShape(nav_bar_container->getLocalRect());
// navbar->setBackgroundColor(gMenuBarView->getBackgroundColor());
// nav_bar_container->addChild(navbar);
// nav_bar_container->setVisible(true);
// mNavBarContainer->addChild(navbar);
// mNavBarContainer->setVisible(true);
//}
//else
//{
// LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container");
// LLView* nav_bar_container = getRootView()->getChild<LLView>("nav_bar_container");
// status_bar_container->setVisible(true);
// nav_bar_container->setVisible(true);
// mStatusBarContainerr_container->setVisible(true);
// mNavBarContainer->setVisible(true);
//}
//if (!gSavedSettings.getBOOL("ShowNavbarNavigationPanel"))
@ -2435,13 +2436,12 @@ void LLViewerWindow::initWorldUI()
// <FS:Zi> We don't have the mini location bar, so no topinfo_bar required
// // Top Info bar
// LLPanel* topinfo_bar_container = getRootView()->getChild<LLPanel>("topinfo_bar_container");
// LLPanelTopInfoBar* topinfo_bar = LLPanelTopInfoBar::getInstance();
// topinfo_bar->setShape(topinfo_bar_container->getLocalRect());
// topinfo_bar->setShape(mTopInfoContainer->getLocalRect());
// topinfo_bar_container->addChild(topinfo_bar);
// topinfo_bar_container->setVisible(true);
// mTopInfoContainer->addChild(topinfo_bar);
// mTopInfoContainer->setVisible(true);
// if (!gSavedSettings.getBOOL("ShowMiniLocationPanel"))
// {
@ -2462,7 +2462,7 @@ void LLViewerWindow::initWorldUI()
getRootView()->sendChildToBack(gHUDView);
}
LLPanel* panel_ssf_container = getRootView()->getChild<LLPanel>("state_management_buttons_container");
LLPanel* panel_ssf_container = gToolBarView->getChild<LLPanel>("state_management_buttons_container");
LLPanelStandStopFlying* panel_stand_stop_flying = LLPanelStandStopFlying::getInstance();
panel_ssf_container->addChild(panel_stand_stop_flying);
@ -2865,12 +2865,11 @@ void LLViewerWindow::setNormalControlsVisible( bool visible )
}
// <FS:Zi> Is done inside XUI now, using visibility_control
//LLNavigationBar* navbarp = LLUI::getInstance()->getRootView()->findChild<LLNavigationBar>("navigation_bar");
//if (navbarp)
//if (mNavBarContainer)
//{
// // when it's time to show navigation bar we need to ensure that the user wants to see it
// // i.e. ShowNavbarNavigationPanel option is true
// navbarp->setVisible( visible && gSavedSettings.getBOOL("ShowNavbarNavigationPanel") );
// mNavBarContainer->setVisible( visible && gSavedSettings.getBOOL("ShowNavbarNavigationPanel") );
//}
// </FS:Zi>
}
@ -7259,40 +7258,35 @@ LLRect LLViewerWindow::getChatConsoleRect()
return console_rect;
}
void LLViewerWindow::reshapeStatusBarContainer()
{
LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container");
LLView* nav_bar_container = getRootView()->getChild<LLView>("nav_bar_container");
S32 new_height = status_bar_container->getRect().getHeight();
S32 new_width = status_bar_container->getRect().getWidth();
if (gSavedSettings.getBOOL("ShowNavbarNavigationPanel"))
{
// Navigation bar is outside visible area, expand status_bar_container to show it
new_height += nav_bar_container->getRect().getHeight();
}
else
{
// collapse status_bar_container
new_height -= nav_bar_container->getRect().getHeight();
}
status_bar_container->reshape(new_width, new_height, true);
}
// <FS:Ansariel> Improved menu and navigation bar
//void LLViewerWindow::reshapeStatusBarContainer()
//{
// S32 new_height = mStatusBarContainer->getRect().getHeight();
// S32 new_width = mStatusBarContainer->getRect().getWidth();
//
// if (gSavedSettings.getBOOL("ShowNavbarNavigationPanel"))
// {
// // Navigation bar is outside visible area, expand status_bar_container to show it
// new_height += mNavBarContainer->getRect().getHeight();
// }
// else
// {
// // collapse status_bar_container
// new_height -= mNavBarContainer->getRect().getHeight();
// }
// mStatusBarContainer->reshape(new_width, new_height, true);
//}
//void LLViewerWindow::resetStatusBarContainer()
//{
// LLNavigationBar* navbar = LLNavigationBar::getInstance();
// if (gSavedSettings.getBOOL("ShowNavbarNavigationPanel") || navbar->getVisible())
// {
// // was previously showing navigation bar
// LLView* nav_bar_container = getRootView()->getChild<LLView>("nav_bar_container");
// LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container");
// S32 new_height = status_bar_container->getRect().getHeight();
// S32 new_width = status_bar_container->getRect().getWidth();
// new_height -= nav_bar_container->getRect().getHeight();
// status_bar_container->reshape(new_width, new_height, true);
// S32 new_height = mStatusBarContainer->getRect().getHeight();
// S32 new_width = mStatusBarContainer->getRect().getWidth();
// new_height -= mNavBarContainer->getRect().getHeight();
// mStatusBarContainer->reshape(new_width, new_height, true);
// }
//}
// </FS:Ansariel>
@ -7330,7 +7324,7 @@ void LLViewerWindow::setUIVisibility(bool visible)
//LLNavigationBar::getInstance()->setVisible(visible ? gSavedSettings.getBOOL("ShowNavbarNavigationPanel") : false);
// <FS:Zi> We don't use the mini location panel in Firestorm
// LLPanelTopInfoBar::getInstance()->setVisible(visible? gSavedSettings.getBOOL("ShowMiniLocationPanel") : false);
mRootView->getChildView("status_bar_container")->setVisible(visible);
mStatusBarContainer->setVisible(visible);
// <FS:Zi> hide utility bar if we are on a skin that uses it, e.g. Vintage
LLView* utilityBarStack = mRootView->findChildView("chat_bar_utility_bar_stack");

View File

@ -184,8 +184,8 @@ public:
bool getUIVisibility();
void handlePieMenu(S32 x, S32 y, MASK mask);
void reshapeStatusBarContainer();
// <FS:Ansariel> Improved menu and navigation bar
//void reshapeStatusBarContainer();
//void resetStatusBarContainer(); // undo changes done by resetStatusBarContainer on initWorldUI()
bool handleAnyMouseClick(LLWindow *window, LLCoordGL pos, MASK mask, EMouseClickType clicktype, bool down, bool &is_toolmgr_action);
@ -468,6 +468,9 @@ public:
static std::string getLastSnapshotDir();
LLView* getFloaterSnapRegion() { return mFloaterSnapRegion; }
LLPanel* getChicletContainer() { return mChicletContainer; }
private:
bool shouldShowToolTipFor(LLMouseHandler *mh);
@ -496,6 +499,11 @@ private:
LLRect mWorldViewRectRaw; // area of screen for 3D world
LLRect mWorldViewRectScaled; // area of screen for 3D world scaled by UI size
LLRootView* mRootView; // a view of size mWindowRectRaw, containing all child views
LLView* mFloaterSnapRegion = nullptr;
LLView* mNavBarContainer = nullptr;
LLPanel* mStatusBarContainer = nullptr;
LLPanel* mChicletContainer = nullptr;
LLPanel* mTopInfoContainer = nullptr;
LLVector2 mDisplayScale;
LLCoordGL mCurrentMousePoint; // last mouse position in GL coords

View File

@ -38,6 +38,7 @@
// newview
#include "llavataractions.h" // for getProfileURL()
#include "llviewermedia.h" // FIXME: don't use LLViewerMedia internals
#include "llnotificationsutil.h"
#include "llcorehttputil.h"
@ -132,6 +133,10 @@ void LLWebProfile::uploadImageCoro(LLPointer<LLImageFormatted> image, std::strin
if (!status)
{
if (image->getDataSize() > MAX_WEB_DATASIZE)
{
LLNotificationsUtil::add("CannotUploadSnapshotWebTooBig");
}
LL_WARNS("Snapshots") << "Failed to get image upload config" << LL_ENDL;
LLWebProfile::reportImageUploadStatus(false);
return;

View File

@ -57,6 +57,8 @@ public:
static void setAuthCookie(const std::string& cookie);
static void setImageUploadResultCallback(status_callback_t cb) { mStatusCallback = cb; }
static constexpr S32 MAX_WEB_DATASIZE = 8 * 1024 * 1024; // 8MB
private:
static LLCore::HttpHeaders::ptr_t buildDefaultHeaders();

View File

@ -10965,7 +10965,7 @@ bool LLPipeline::hasAnyRenderType(U32 type, ...) const
{
if (mRenderTypeEnabled[type])
{
va_end(args); // <FS:ND/> Need to end varargs being returning.
va_end(args);
return true;
}
type = va_arg(args, U32);

View File

@ -114,36 +114,6 @@ Avtomatik oxutma
<check_box label="Bütün P2P (avatarla avatar arasında) səs zənglərini avtomatik olaraq rədd et" name="VoiceCallsRejectP2P"/>
<check_box label="Panel alət çubuğundakı düyməyə basıldığında mikrofonu aç / bağla" name="push_to_talk_toggle_check" tool_tip="Mikrofon açıq / bağlı rejimində, düyməni bir dəfə basaraq mikrofonu açıb bağlaya bilərsiniz. Başqa halda, mikrofon yalnız düymə basıldıqda açılır."/>
<button label="Səs cihazı seçimləri" name="device_settings_btn"/>
<panel label="Cihaz seçimləri" name="device_settings_panel">
<panel.string name="default_text">
Susmaya görə
</panel.string>
<panel.string name="default system device">
Susmaya görə sistem cihazı
</panel.string>
<panel.string name="name_default_system_device">
Susmaya görə sistem cihazı
</panel.string>
<panel.string name="no device">
Cihaz yoxdur
</panel.string>
<panel.string name="name_no_device">
Cihaz yoxdur
</panel.string>
<text name="Input">
Giriş
</text>
<text name="Output">
Çıxış
</text>
<text name="Volume label" width="110">
Səsin dərəcəsini:
</text>
<slider_bar name="mic_volume_slider" tool_tip="Səsin dərəcəsini slider ilə dəyişin"/>
<text name="wait_text" width="150">
Xahiş edirik gözləyin
</text>
</panel>
</panel>
<panel label="İnterfeys 1" name="UI Sounds tab 1">
<text name="textFSExplanation_tab1">

View File

@ -943,6 +943,16 @@ Erwartet wurde [VALIDS]
<notification name="CannotUploadReason">
Datei [FILE] kann aus folgendem Grund nicht hochgeladen werden: [REASON]
Bitte versuchen Sie es erneut.
</notification>
<notification name="CannotUploadSnapshotEmailTooBig">
Schnappschuss [FILE] kann aus folgendem Grund nicht hochgeladen werden: [REASON]
Die Datei ist möglicherweise zu groß. Versuchen Sie, die Auflösung oder Qualität zu verringern, oder versuchen Sie es erneut.
</notification>
<notification name="CannotUploadSnapshotWebTooBig">
Schnappschuss nicht hochgeladen werden.
Die Datei ist möglicherweise zu groß. Versuchen Sie, die Auflösung zu verringern oder versuchen Sie es erneut.
</notification>
<notification name="LandmarkCreated">
„[LANDMARK_NAME]“ wurde zum Ordner „[FOLDER_NAME]“ hinzugefügt.

View File

@ -147,30 +147,6 @@
<item label="Maximum" name="noise_suppression_max"/>
</combo_box>
<button label="Geräte-Einstellungen" name="device_settings_btn"/>
<panel name="device_settings_panel">
<panel.string name="default_text">
Standard
</panel.string>
<string name="name_no_device">
Kein Gerät
</string>
<string name="name_default_system_device">
Standardsystemgerät
</string>
<text name="Input">
Eingabe
</text>
<text name="Output">
Ausgabe
</text>
<text name="Volume label" width="100">
Meine Lautstärke:
</text>
<slider_bar name="mic_volume_slider" tool_tip="Lautstärke mit diesem Regler ändern"/>
<text name="wait_text">
Bitte warten
</text>
</panel>
</panel>
<!-- UI Sounds 1 -->

View File

@ -15,8 +15,8 @@
<text name="Output">
Ausgabe
</text>
<text name="My volume label">
Mikrofonlautstärke:
<text name="My volume label" width="100">
Meine Lautstärke:
</text>
<slider_bar name="mic_volume_slider" tool_tip="Mit diesem Schieberegler können Sie den Mikrofonpegel ändern"/>
<text name="wait_text">

View File

@ -2483,6 +2483,26 @@ Unable to upload [FILE] due to the following reason: [REASON]
Please try again later.
<tag>fail</tag>
</notification>
<notification
icon="alertmodal.tga"
name="CannotUploadSnapshotEmailTooBig"
type="alertmodal">
Unable to upload snapshot [FILE] due to the following reason: [REASON]
File might be too big, try reducing resolution, quality or try again later.
<tag>fail</tag>
</notification>
<notification
icon="alertmodal.tga"
name="CannotUploadSnapshotWebTooBig"
type="alertmodal">
Unable to upload snapshot.
File might be too big, try reducing resolution or try again later.
<tag>fail</tag>
</notification>
<notification
icon="notifytip.tga"

View File

@ -1160,6 +1160,7 @@
<panel
background_visible="false"
bg_alpha_color="DkGray"
filename="panel_sound_devices.xml"
visiblity_control="ShowDeviceSettings"
border="false"
follows="top|left|right"
@ -1170,163 +1171,7 @@
right="-5"
name="device_settings_panel"
class="panel_voice_device_settings"
top_pad="5">
<panel.string
name="default_text">
Default
</panel.string>
<panel.string
name="default system device">
Default system device
</panel.string>
<panel.string
name="name_default_system_device">
Default system device
</panel.string>
<panel.string
name="no device">
No device
</panel.string>
<panel.string
name="name_no_device">
No device
</panel.string>
<icon
height="18"
image_name="Microphone_On"
left_delta="4"
name="microphone_icon"
mouse_opaque="false"
top="7"
visible="true"
width="18" />
<text
type="string"
length="1"
font.style="BOLD"
follows="left|top"
height="16"
layout="topleft"
left_pad="3"
name="Input"
width="70">
Input
</text>
<combo_box
height="23"
control_name="VoiceInputAudioDevice"
layout="topleft"
left_pad="0"
max_chars="128"
name="voice_input_device"
top_delta="-5"
width="150" />
<icon
height="18"
image_name="Parcel_Voice_Light"
left="275"
name="speaker_icon"
mouse_opaque="false"
top_pad="-20"
visible="true"
width="22" />
<text
font.style="BOLD"
type="string"
length="1"
follows="left|top"
height="15"
layout="topleft"
left_pad="0"
name="Output"
width="70">
Output
</text>
<combo_box
control_name="VoiceOutputAudioDevice"
height="23"
layout="topleft"
left_pad="0"
max_chars="128"
name="voice_output_device"
top_delta="-3"
width="150" />
<text
type="string"
length="1"
follows="left|top"
height="10"
layout="topleft"
left_delta="-360"
name="Volume label"
top_pad="4"
width="80">
Input Volume:
</text>
<slider_bar
control_name="AudioLevelMic"
follows="left|top"
height="17"
increment="0.025"
initial_value="1.0"
layout="topleft"
left_pad="5"
max_val="2"
name="mic_volume_slider"
tool_tip="Change the volume using this slider"
top_pad="-8"
width="220" />
<text
type="string"
text_color="EmphasisColor"
length="1"
follows="left|top"
height="18"
layout="topleft"
left_pad="5"
name="wait_text"
top_delta="-1"
width="110">
Please wait
</text>
<locate
height="20"
layout="topleft"
left_delta="0"
name="bar0"
top_delta="-2"
width="20" />
<locate
height="20"
layout="topleft"
left_pad="5"
name="bar1"
top_delta="0"
width="20" />
<locate
height="20"
layout="topleft"
left_pad="5"
name="bar2"
top_delta="0"
width="20" />
<locate
height="20"
layout="topleft"
left_pad="5"
name="bar3"
top_delta="0"
width="20" />
<locate
height="20"
layout="topleft"
left_pad="5"
name="bar4"
top_delta="0"
width="20" />
</panel>
top_pad="5"/>
</panel>
<!-- UI Sounds 1 -->

View File

@ -28,10 +28,10 @@
follows="left|top"
height="18"
image_name="Microphone_On"
left_delta="-5"
left_delta="4"
name="microphone_icon"
mouse_opaque="false"
top="7"
top="4"
layout="topleft"
visible="true"
width="18" />
@ -101,7 +101,7 @@
layout="topleft"
left_delta="-300"
name="My volume label"
top_pad="14"
top_pad="8"
width="200">
Mic volume:
</text>

View File

@ -83,36 +83,6 @@
<button label="Configurar tecla" name="set_voice_hotkey_button"/>
<button tool_tip="Restablecer a botón central del ratón" name="set_voice_middlemouse_button"/>
<button label="Dispositivos de audio" name="device_settings_btn"/>
<panel label="Configuración de dispositivos" name="device_settings_panel">
<panel.string name="default_text">
Por defecto
</panel.string>
<panel.string name="default system device">
Dispositivo por defecto del sistema
</panel.string>
<panel.string name="name_default_system_device">
Dispositivo por defecto del sistema
</panel.string>
<panel.string name="no device">
Ninguna
</panel.string>
<panel.string name="name_no_device">
Ninguna
</panel.string>
<text name="Input">
Entrada
</text>
<text name="Output">
Salida
</text>
<text name="Volume label" width="118">
Volumen de entrada:
</text>
<slider_bar name="mic_volume_slider" tool_tip="Modifica el volumen usando este control deslizante"/>
<text name="wait_text">
Por favor, espera...
</text>
</panel>
</panel>
<panel label="Sonidos de IU 1" name="UI Sounds tab 1">
<text name="textFSExplanation_tab1">

View File

@ -91,18 +91,6 @@
<button tool_tip="Effacer la touche" name="clear_voice_hotkey_button"/>
<button tool_tip="Réinitialiser au clic molette" name="set_voice_middlemouse_button"/>
<button label="Paramètres Matériel audio" name="device_settings_btn"/>
<panel label="Device Settings" name="device_settings_panel">
<panel.string name="default_text">Par défaut</panel.string>
<panel.string name="default system device">Valeur par défaut du système</panel.string>
<panel.string name="name_default_system_device">Valeur par défaut du système</panel.string>
<panel.string name="no device">Aucun appareil</panel.string>
<panel.string name="name_no_device">Aucun appareil</panel.string>
<text name="Input" width="45">Entrée</text>
<text name="Output">Sortie</text>
<text name="Volume label" width="105">Volume de la voix :</text>
<slider_bar name="mic_volume_slider" tool_tip="Modifiez le volume de la voix en utilisant ce réglage"/>
<text name="wait_text">Veuillez patienter</text>
</panel>
</panel>
<panel label="Sons 1" name="UI Sounds tab 1">
<text name="textFSExplanation_tab1">Vous pouvez modifier ici chaque son produit par l'interface ainsi que décider de l'activer ou non

View File

@ -126,36 +126,6 @@
<check_box label="Rifiuta automaticamente gli inviti alla chat vocale P2P (avatar con avatar)" name="VoiceCallsRejectP2P"/>
<check_box label="Accendi/spegni il microfono quando premo il pulsante sulla barra degli strumenti" name="push_to_talk_toggle_check" tool_tip="Se questa funzione è attiva, premere e rilasciare UNA VOLTA il pulsante per accendere o spegnere il microfono. Se questa funzione è disattivata, il microfono trasmette la tua voce solo mentre il pulsante viene tenuto premuto."/>
<button label="Impostazioni periferiche audio" name="device_settings_btn"/>
<panel label="Impostazione periferiche" name="device_settings_panel">
<panel.string name="default_text">
Predefinita
</panel.string>
<panel.string name="default system device">
Periferica audio di sistema
</panel.string>
<panel.string name="name_default_system_device">
Periferica audio di sistema
</panel.string>
<panel.string name="no device">
Nessuna periferica
</panel.string>
<panel.string name="name_no_device">
Nessuna periferica
</panel.string>
<text name="Input">
Ingresso
</text>
<text name="Output">
Uscita
</text>
<text name="Volume label">
Il mio volume:
</text>
<slider_bar name="mic_volume_slider" tool_tip="Cambia il volume utilizzando questo cursore"/>
<text name="wait_text">
Attendere
</text>
</panel>
</panel>
<panel label="Suoni UI 1" name="UI Sounds tab 1">
<text name="textFSExplanation_tab1">

View File

@ -11,11 +11,8 @@
</panel.string>
<tab_container label="Firestorm環境設定" name="tabs">
<!-- Sounds -->
<panel label="サウンド" name="Media Sounds Panel">
<slider label="全体の音量" name="System Volume"/>
<check_box label="最小化でミュート" name="mute_when_minimized"/>
<slider label="ボタン" name="UI Volume"/>
@ -61,11 +58,9 @@
出力機器
</text>
</panel>
</panel>
<!-- Media -->
<panel label="メディア" name="Media Media Panel" >
<text name="media_autoplay_label">
メディアの自動再生
@ -95,7 +90,6 @@
</panel>
<!-- Music -->
<panel label="音楽" name="Media Music Panel" >
<check_box name="audio_auto_play_btn" tool_tip="チェックすると自動的にオーディオストリームの再生が始まります" label="オーディオの自動再生を許可" />
<check_box name="FSFadeAudioStream" tool_tip="区画に流れている曲が変わる時にフェードイン/フェードアウトさせたい場合にここにチェックを入れて下さい。" label="区画音声のフェードを有効にする:" />
@ -117,10 +111,9 @@
</radio_group>
<check_box label="曲のタイトルを次のチャンネルに送る" name="StreamMetadataAnnounceToChat"/>
</panel>
<!-- ボイス -->
<panel label="ボイス" name="Media Voice tab" >
<check_box label="ボイスチャットを有効にする" name="enable_voice_check" width="155"/>
<radio_group name="ear_location">
<radio_item label="カメラの位置から聞く" name="0"/>
@ -137,49 +130,15 @@
<check_box label="一対一のアバター同士のボイス会話を全て自動的に拒否" name="VoiceCallsRejectP2P" />
<check_box label="ボイスのオン・オフ切り替えに使用するトリガーキー:" name="push_to_talk_toggle_check" tool_tip="トグルモードの時にトリガーキーを一回押すごとにマイクのオン・オフ設定が切り替えられます。トグルモードではないときは、トリガーキーを押した状態の時のみあなたの声が相手に聞こえます。"/>
<button label="入力・出力機器" name="device_settings_btn"/>
<panel label="機器の設定" name="device_settings_panel">
<panel.string name="default_text">
デフォルト
</panel.string>
<panel.string name="default system device">
デフォルトのシステム機器
</panel.string>
<panel.string name="name_default_system_device">
デフォルトのシステム機器
</panel.string>
<panel.string name="no device">
なし
</panel.string>
<panel.string name="name_no_device">
なし
</panel.string>
<text name="Input">
入力
</text>
<text name="Output">
出力
</text>
<text name="Volume label">
入力音量
</text>
<slider_bar name="mic_volume_slider" tool_tip="このスライダーでマイクの入力音量を調整します"/>
<text name="wait_text">
お待ち下さい
</text>
</panel>
</panel>
<!-- UI Sounds 1 -->
<panel label="UI サウンド 1" name="UI Sounds tab 1">
<text name="textFSExplanation_tab1">
ここでサウンドのUUIDを指定することでデフォルトのインターフェイス・サウンドを変更したり、
有効、無効にすることができます。初期設定値を確認するにはマウスをUUIDフィールドの上に乗せて下さい。
</text>
<text tool_tip="Firestorm が通知警告する時に再生するデフォルトのサウンドUUIDです。" name="textFSSndAlert">
デフォルトの警告音:
</text>
@ -187,7 +146,7 @@
<button name="Prev_UISndAlert" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndAlert" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndAlert" />
<text tool_tip="無効なキーを押した時に再生するサウンドのUUIDです。" name="textFSBadKeystroke">
無効なキー打鍵:
</text>
@ -195,7 +154,7 @@
<button name="Prev_UISndBadKeystroke" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndBadKeystroke" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndBadKeystroke" />
<text tool_tip="マウスのボタンをクリックした時に再生するサウンドのUUIDです。" name="textFSClick">
マウス・ボタンのクリック:
</text>
@ -203,7 +162,7 @@
<button name="Prev_UISndClick" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndClick" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndClick" />
<text tool_tip="マウスのボタンから手を離した時に再生するサウンドのUUIDです。" name="textFSClickRelease">
マウス・ボタンのリリース:
</text>
@ -211,7 +170,7 @@
<button name="Prev_UISndClickRelease" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndClickRelease" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndClickRelease" />
<text tool_tip="女性アバターがダメージを受けた時に再生するサウンドのUUIDです。" name="textFSHealthReductionF">
女性のうめき声:
</text>
@ -219,7 +178,7 @@
<button name="Prev_UISndHealthReductionF" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndHealthReductionF" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndHealthReductionF" />
<text tool_tip="男性アバターがダメージを受けた時に再生するサウンドのUUIDです。" name="textFSHealthReductionM">
男性のうめき声:
</text>
@ -227,7 +186,7 @@
<button name="Prev_UISndHealthReductionM" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndHealthReductionM" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndHealthReductionM" />
<text tool_tip="リンデンドル残高が減少した時に再生するサウンドのUUIDです。" name="textFSMoneyChangeDown">
リンデンドル残高減少:
</text>
@ -235,7 +194,7 @@
<button name="Prev_UISndMoneyChangeDown" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndMoneyChangeDown" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndMoneyChangeDown" />
<text tool_tip="リンデンドル残高が増加した時に再生するサウンドのUUIDです。" name="textFSMoneyChangeUp">
リンデンドル残高増加:
</text>
@ -243,7 +202,7 @@
<button name="Prev_UISndMoneyChangeUp" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndMoneyChangeUp" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndMoneyChangeUp" />
<text tool_tip="IMを受信した時に再生するサウンドのUUIDです。この設定は「チャット」「通知」にある「IMを受信した時:」と共通になっています。" name="textFSNewIncomingIMSession">
IMを受信した時
</text>
@ -256,7 +215,7 @@
<combo_box.item label="フォーカスが当たってなければ音を鳴らす" name="3" />
<combo_box.item label="通知音は鳴らさない" name="0" />
</combo_box>
<text tool_tip="グループIMを受信した時に再生するサウンドのUUIDです。この設定は「チャット」「通知」にある「グループIMを受信した時:」と共通になっています。" name="textFSNewGroupIncomingIMSession">
グループIMを受信した時
</text>
@ -269,7 +228,7 @@
<combo_box.item label="フォーカスが当たってなければ音を鳴らす" name="3" />
<combo_box.item label="通知音は鳴らさない" name="0" />
</combo_box>
<text tool_tip="カンファレンスIMを受信した時に再生するサウンドのUUIDです。この設定は「チャット」「通知」にある「カンファレンスIMを受信した時:」と共通になっています。" name="textFSNewConferenceIncomingIMSession">
カンファレンスIMを受信した時
</text>
@ -282,7 +241,7 @@
<combo_box.item label="フォーカスが当たってなければ音を鳴らす" name="3" />
<combo_box.item label="通知音は鳴らさない" name="0" />
</combo_box>
<text tool_tip="新しいIMセッションを開始する時に再生するサウンドのUUIDです。" name="textFSStartIM">
IM新規開始
</text>
@ -290,7 +249,7 @@
<button name="Prev_UISndStartIM" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndStartIM" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndStartIM" />
<text tool_tip="新しくオブジェクトを作成する時に再生するサウンドのUUIDです。" name="textFSObjectCreate">
オブジェクト作成:
</text>
@ -298,7 +257,7 @@
<button name="Prev_UISndObjectCreate" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndObjectCreate" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndObjectCreate" />
<text tool_tip="オブジェクトを削除する時に再生するサウンドのUUIDです。" name="textFSObjectDelete">
オブジェクト削除:
</text>
@ -306,7 +265,7 @@
<button name="Prev_UISndObjectDelete" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndObjectDelete" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndObjectDelete" />
<text tool_tip="オブジェクトをREZする時に再生するサウンドのUUIDです。" name="textFSObjectRezIn">
オブジェクトREZ
</text>
@ -314,7 +273,7 @@
<button name="Prev_UISndObjectRezIn" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndObjectRezIn" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndObjectRezIn" />
<text tool_tip="オブジェクトをDEREZする時に再生するサウンドのUUIDです。" name="textFSObjectRezOut">
オブジェクトDEREZ
</text>
@ -322,7 +281,7 @@
<button name="Prev_UISndObjectRezOut" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndObjectRezOut" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndObjectRezOut" />
<text tool_tip="スナップショットを撮る時に再生するサウンドのUUIDです。この設定は「アドバンス」メニューの「シャッター音とアニメーションなしでスナップショットをディスクに保存する」と共通になっています。" name="textFSSnapshot">
スナップショットを撮る:
</text>
@ -330,7 +289,7 @@
<button name="Prev_UISndSnapshot" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndSnapshot" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="サウンドを再生しない" name="QuietSnapshotsToDiskCheckBox" />
<text tool_tip="テレポートする時に再生するサウンドのUUIDです。この設定は「移動と表示」「テレポート」の「テレポートサウンドを鳴らす」と共通になっています。" name="textFSTeleportOut">
テレポート:
</text>
@ -338,18 +297,15 @@
<button name="Prev_UISndTeleportOut" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndTeleportOut" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndTeleportOut" />
</panel>
<!-- UI Sounds 2 -->
<panel label="UI サウンド 2" name="UI Sounds tab 2">
<text name="textFSExplanation_tab2">
ここでサウンドのUUIDを指定することでデフォルトのインターフェイス・サウンドを変更したり、
有効、無効にすることができます。初期設定値を確認するにはマウスをUUIDフィールドの上に乗せて下さい。
</text>
<text tool_tip="パイメニューを表示する時に再生するサウンドのUUIDです。" name="textFSPieMenuAppear">
パイメニュー表示:
</text>
@ -357,7 +313,7 @@
<button name="Prev_UISndPieMenuAppear" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndPieMenuAppear" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuAppear" />
<text tool_tip="パイメニューが消える時に再生するサウンドのUUIDです。" name="textFSPieMenuHide">
パイメニュー消去:
</text>
@ -365,7 +321,7 @@
<button name="Prev_UISndPieMenuHide" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndPieMenuHide" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuHide" />
<text tool_tip="パイメニューの番目のアイテムを選択した時に再生するサウンドのUUIDです。" name="textFSPieMenuSliceHighlight0">
パイメニュー選択 1:
</text>
@ -373,7 +329,7 @@
<button name="Prev_UISndPieMenuSliceHighlight0" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndPieMenuSliceHighlight0" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight0" />
<text tool_tip="パイメニューの番目のアイテムを選択した時に再生するサウンドのUUIDです。" name="textFSPieMenuSliceHighlight1">
パイメニュー選択 2:
</text>
@ -381,7 +337,7 @@
<button name="Prev_UISndPieMenuSliceHighlight1" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndPieMenuSliceHighlight1" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight1" />
<text tool_tip="パイメニューの番目のアイテムを選択した時に再生するサウンドのUUIDです。" name="textFSPieMenuSliceHighlight2">
パイメニュー選択 3:
</text>
@ -389,7 +345,7 @@
<button name="Prev_UISndPieMenuSliceHighlight2" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndPieMenuSliceHighlight2" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight2" />
<text tool_tip="パイメニューの番目のアイテムを選択した時に再生するサウンドのUUIDです。" name="textFSPieMenuSliceHighlight3">
パイメニュー選択 4:
</text>
@ -397,7 +353,7 @@
<button name="Prev_UISndPieMenuSliceHighlight3" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndPieMenuSliceHighlight3" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight3" />
<text tool_tip="パイメニューの番目のアイテムを選択した時に再生するサウンドのUUIDです。" name="textFSPieMenuSliceHighlight4">
パイメニュー選択 5:
</text>
@ -405,7 +361,7 @@
<button name="Prev_UISndPieMenuSliceHighlight4" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndPieMenuSliceHighlight4" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight4" />
<text tool_tip="パイメニューの番目のアイテムを選択した時に再生するサウンドのUUIDです。" name="textFSPieMenuSliceHighlight5">
パイメニュー選択 6:
</text>
@ -413,7 +369,7 @@
<button name="Prev_UISndPieMenuSliceHighlight5" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndPieMenuSliceHighlight5" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight5" />
<text tool_tip="パイメニューの番目のアイテムを選択した時に再生するサウンドのUUIDです。" name="textFSPieMenuSliceHighlight6">
パイメニュー選択 7:
</text>
@ -421,7 +377,7 @@
<button name="Prev_UISndPieMenuSliceHighlight6" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndPieMenuSliceHighlight6" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight6" />
<text tool_tip="パイメニューの番目のアイテムを選択した時に再生するサウンドのUUIDです。" name="textFSPieMenuSliceHighlight7">
パイメニュー選択 8:
</text>
@ -429,7 +385,7 @@
<button name="Prev_UISndPieMenuSliceHighlight7" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndPieMenuSliceHighlight7" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndPieMenuSliceHighlight7" />
<text tool_tip="チャットの入力を開始した時に再生するサウンドのUUIDです。この設定は「チャット」「タイピング」の「人が会話している時にタイピング音が聞こえるようにする」と共通になっています。" name="textFSTyping">
チャット入力:
</text>
@ -437,7 +393,7 @@
<button name="Prev_UISndTyping" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndTyping" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="FSPlayTypingSoundCheckBox" />
<text tool_tip="ウィンドウを閉じる時に再生するサウンドのUUIDです。" name="textFSWindowClose">
ウィンドウを閉じる:
</text>
@ -445,7 +401,7 @@
<button name="Prev_UISndWindowClose" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndWindowClose" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndWindowClose" />
<text tool_tip="ウィンドウを開く時に再生するサウンドのUUIDです。" name="textFSWindowOpen">
ウィンドウを開く:
</text>
@ -453,7 +409,7 @@
<button name="Prev_UISndWindowOpen" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndWindowOpen" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndWindowOpen" />
<text tool_tip="スクリプト・ダイアログが開く時に再生するサウンドのUUIDです。" name="textFSScriptFloaterOpen">
スクリプト・ダイアログ:
</text>
@ -461,7 +417,7 @@
<button name="Prev_UISndScriptFloaterOpen" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndScriptFloaterOpen" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndScriptFloaterOpen" />
<text tool_tip="フレンドがオンラインになった時に再生するサウンドのUUIDです。" name="textFSFriendOnline">
フレンド・オンライン:
</text>
@ -469,7 +425,7 @@
<button name="Prev_UISndFriendOnline" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndFriendOnline" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndFriendOnline" />
<text tool_tip="フレンドがオフラインになった時に再生するサウンドのUUIDです。" name="textFSFriendOffline">
フレンド・オフライン:
</text>
@ -477,7 +433,7 @@
<button name="Prev_UISndFriendOffline" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndFriendOffline" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndFriendOffline" />
<text tool_tip="フレンドの申請があった時に再生するサウンドのUUIDです。" name="textFSFriendshipOffer">
フレンド申請:
</text>
@ -485,7 +441,7 @@
<button name="Prev_UISndFriendshipOffer" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndFriendshipOffer" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndFriendshipOffer" />
<text tool_tip="テレポートで呼ばれた時に再生するサウンドのUUIDです。" name="textFSTeleportOffer">
テレポート受信:
</text>
@ -493,18 +449,15 @@
<button name="Prev_UISndTeleportOffer" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndTeleportOffer" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndTeleportOffer" />
</panel>
<!-- UI Sounds 3 -->
<panel label="UI サウンド 3" name="UI Sounds tab 3">
<text name="textFSExplanation_tab3">
ここでサウンドのUUIDを指定することでデフォルトのインターフェイス・サウンドを変更したり、
有効、無効にすることができます。初期設定値を確認するにはマウスをUUIDフィールドの上に乗せて下さい。
</text>
<text tool_tip="インベントリに物が送られて来た時に再生するサウンドのUUIDです。" name="textFSInventoryOffer">
インベントリ受領:
</text>
@ -512,7 +465,7 @@
<button name="Prev_UISndInventoryOffer" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndInventoryOffer" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndInventoryOffer" />
<text tool_tip="ボイスコールを受信した時に再生するサウンドのUUIDです。" name="textFSIncomingVoiceCall">
ボイスコール受信:
</text>
@ -520,7 +473,7 @@
<button name="Prev_UISndIncomingVoiceCall" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndIncomingVoiceCall" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndIncomingVoiceCall" />
<text tool_tip="グループ招待があった時に再生するサウンドのUUIDです。" name="textFSGroupInvitation">
グループ招待受信:
</text>
@ -528,7 +481,7 @@
<button name="Prev_UISndGroupInvitation" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndGroupInvitation" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndGroupInvitation" />
<text tool_tip="グループ通知を受信した時に再生するサウンドのUUIDです。" name="textFSGroupNotice">
グループ通知受信:
</text>
@ -536,7 +489,7 @@
<button name="Prev_UISndGroupNotice" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndGroupNotice" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndGroupNotice" />
<text tool_tip="新しい体験の通知を受信した時に再生するサウンドのUUIDです。" name="textFSQuestionExperience">
新しい体験:
</text>
@ -544,7 +497,7 @@
<button name="Prev_UISndQuestionExperience" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndQuestionExperience" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndQuestionExperience" />
<text tool_tip="無効な操作を行った時に再生するサウンドのUUIDです。" name="textFSInvalidOp">
無効な操作:
</text>
@ -552,7 +505,7 @@
<button name="Prev_UISndInvalidOp" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndInvalidOp" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndInvalidOp" />
<text tool_tip="ムーブメントロックを有効にした時に再生するサウンドのUUIDです。" name="textFSMovelockToggle">
ムーブメントロック:
</text>
@ -560,7 +513,7 @@
<button name="Prev_UISndMovelockToggle" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndMovelockToggle" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndMovelockToggle" />
<text tool_tip="足音のデフォルトサウンドUUIDです。変更した内容を有効にするには再起動が必要です。" name="textFSFootsteps">
デフォルトの足音:
</text>
@ -568,7 +521,7 @@
<button name="Prev_UISndFootsteps" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndFootsteps" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndFootsteps" />
<text tool_tip="追跡ビーコンが有効になっている時に再生されるサウンドのUUIDです。アバターが目的地に近付くほど再生周期が短くなります。" name="textFSTrackerBeacon">
追跡ビーコン:
</text>
@ -576,7 +529,7 @@
<button name="Prev_UISndTrackerBeacon" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndTrackerBeacon" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndTrackerBeacon" />
<text tool_tip="SIM再起動の警告が表示される時に再生するサウンドのUUIDです。" name="textFSRestart">
SIM 再起動
</text>
@ -584,7 +537,7 @@
<button name="Prev_UISndRestart" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndRestart" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndRestart" />
<text tool_tip="SIM再起動の警告が表示される時に再生するサウンドのUUIDです。OpenSim の場合)" name="textFSRestartOpenSim">
SIM 再起動 (OpenSim):
</text>
@ -592,8 +545,6 @@
<button name="Prev_UISndRestartOpenSim" label="P" tool_tip="このサウンドをプレビューします" />
<button name="Def_UISndRestartOpenSim" label="D" tool_tip="デフォルトのUUIDに戻します" />
<check_box label="このサウンドを再生" name="PlayModeUISndRestartOpenSim" />
</panel>
</tab_container>
</tab_container>
</panel>

View File

@ -126,36 +126,6 @@
<check_box label="Automatycznie odrzucaj zaproszenia P2P (awatar z awatarem) rozmów głosowych" name="VoiceCallsRejectP2P"/>
<check_box label="Włącz/wyłącz mikrofon kiedy naciskam przycisk na pasku" name="push_to_talk_toggle_check" tool_tip="Kiedy aktywny jest tryb przełączania wciśnij i zwolnij przełącznik RAZ, aby włączyć lub wyłączyć mikrofon. Kiedy tryb przełączania nie jest aktywny mikrofon nadaje głos tylko wtedy, gdy przełącznik jest wciśnięty."/>
<button label="Ustawienia sprzętowe audio" name="device_settings_btn"/>
<panel label="Ustawienia sprzętowe" name="device_settings_panel">
<panel.string name="default_text">
Domyślne
</panel.string>
<panel.string name="default system device">
Domyślne urządzenie systemowe
</panel.string>
<panel.string name="name_default_system_device">
Domyślne urządzenie systemowe
</panel.string>
<panel.string name="no device">
Brak urządzenia
</panel.string>
<panel.string name="name_no_device">
Brak urządzenia
</panel.string>
<text name="Input">
Wejście
</text>
<text name="Output">
Wyjście
</text>
<text name="Volume label">
Moja głośność:
</text>
<slider_bar name="mic_volume_slider" tool_tip="Zmień próg głośności korzystając z tego suwaka"/>
<text name="wait_text">
Proszę czekać
</text>
</panel>
</panel>
<panel label="Interfejs 1" name="UI Sounds tab 1">
<text name="textFSExplanation_tab1">

View File

@ -131,36 +131,6 @@
<item label="Максимум" name="noise_suppression_max"/>
</combo_box>
<button label="Настройки звукового устройства" name="device_settings_btn"/>
<panel label="Настройки устройства" name="device_settings_panel">
<panel.string name="default_text">
По умолчанию
</panel.string>
<panel.string name="default system device">
Системное устройство по умолчанию
</panel.string>
<panel.string name="name_default_system_device">
Системное устройство по умолчанию
</panel.string>
<panel.string name="no device">
Нет устройства
</panel.string>
<panel.string name="name_no_device">
Нет устройства
</panel.string>
<text name="Input">
Ввод
</text>
<text name="Output">
Вывод
</text>
<text name="Volume label" width="110">
Моя громкость:
</text>
<slider_bar name="mic_volume_slider" tool_tip="Измените громкость используя ползунок"/>
<text name="wait_text" width="150">
Пожалуйста, подождите
</text>
</panel>
</panel>
<panel label="Интерфейс 1" name="UI Sounds tab 1">
<text name="textFSExplanation_tab1">