Pull and merge from ssh://hg@bitbucket.org/lindenlab/viewer-release.
commit
f83fcc357f
17
.hgtags
17
.hgtags
|
|
@ -271,18 +271,29 @@ e9c82fca5ae6fb8a8af29012d78fb194a29323f3 3.2.9-beta1
|
|||
a01ef9bed28627f4ca543fbc1d70c79cc297a90f DRTVWR-118_3.2.9-beta2
|
||||
a01ef9bed28627f4ca543fbc1d70c79cc297a90f 3.2.9-beta2
|
||||
987425b1acf4752379b2e1eb20944b4b35d67a85 3.2.8-beta2
|
||||
d5f263687f43f278107363365938f0a214920a4b DRTVWR-119
|
||||
d5f263687f43f278107363365938f0a214920a4b 3.3.0-beta1
|
||||
5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate
|
||||
5e8d2662f38a66eca6c591295f5880d47afc73f7 3.3.0-release
|
||||
d5f263687f43f278107363365938f0a214920a4b 3.3.0-start
|
||||
dffd0457ee0745de65bf95f0642a5c9e46b8e2f0 viewer-beta-candidate
|
||||
d5f263687f43f278107363365938f0a214920a4b DRTVWR-119
|
||||
d5f263687f43f278107363365938f0a214920a4b 3.3.0-beta1
|
||||
5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate
|
||||
5e8d2662f38a66eca6c591295f5880d47afc73f7 3.3.0-release
|
||||
dffd0457ee0745de65bf95f0642a5c9e46b8e2f0 viewer-beta-candidate
|
||||
3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 viewer-beta-candidate
|
||||
3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 viewer-beta-candidate
|
||||
28b95a6a28dca3338d9a1f4f204b96678df9f6a5 viewer-beta-candidate
|
||||
b43cd25be49e3984ff5361cefad020e069131d98 3.3.1-start
|
||||
3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 DRTVWR-125
|
||||
3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 3.3.1-start
|
||||
28b95a6a28dca3338d9a1f4f204b96678df9f6a5 3.3.1-beta1
|
||||
1dc545e44617975da2a4a32fe303386c687a6ca1 viewer-beta-candidate
|
||||
1dc545e44617975da2a4a32fe303386c687a6ca1 3.3.1-beta2
|
||||
1dc545e44617975da2a4a32fe303386c687a6ca1 DRTVWR-139
|
||||
5e8d2662f38a66eca6c591295f5880d47afc73f7 viewer-release-candidate
|
||||
c623bbc854b6f7ee1b33a3718f76715046aa2937 viewer-release-candidate
|
||||
c623bbc854b6f7ee1b33a3718f76715046aa2937 3.3.1-release
|
||||
d29a260119f8d5a5d168e25fed0c7ea6b3f40161 3.3.2-beta1
|
||||
675668bd24d3bea570814f71762a2a806f7e1b8d 3.3.2-beta2
|
||||
c623bbc854b6f7ee1b33a3718f76715046aa2937 viewer-release-candidate
|
||||
675668bd24d3bea570814f71762a2a806f7e1b8d viewer-release-candidate
|
||||
675668bd24d3bea570814f71762a2a806f7e1b8d 3.3.2-release
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ viewer-development.build_debug_release_separately = true
|
|||
# Notifications - to configure email notices, add a setting like this:
|
||||
# <username>_<reponame>.email = <email-address>
|
||||
|
||||
|
||||
# =================================================================
|
||||
# Canonical viewer integration builds - Oz Linden
|
||||
# =================================================================
|
||||
|
|
|
|||
18
build.sh
18
build.sh
|
|
@ -132,10 +132,6 @@ if test -f scripts/update_version_files.py ; then
|
|||
end_section UpdateVer
|
||||
fi
|
||||
|
||||
# Now retrieve the version for use in the version manager
|
||||
# First three parts only, $revision will be appended automatically.
|
||||
build_viewer_update_version_manager_version=`python scripts/get_version.py --viewer-version | sed 's/\.[0-9]*$//'`
|
||||
|
||||
if [ -z "$AUTOBUILD" ]
|
||||
then
|
||||
export autobuild_dir="$here/../../../autobuild/bin/"
|
||||
|
|
@ -177,9 +173,6 @@ eval "$("$AUTOBUILD" source_environment)"
|
|||
env|sort
|
||||
|
||||
|
||||
# Install packages.
|
||||
"$AUTOBUILD" install --skip-license-check
|
||||
|
||||
# Now run the build
|
||||
succeeded=true
|
||||
build_processes=
|
||||
|
|
@ -195,10 +188,19 @@ do
|
|||
begin_section "Do$variant"
|
||||
build_dir=`build_dir_$arch $variant`
|
||||
build_dir_stubs="$build_dir/win_setup/$variant"
|
||||
|
||||
begin_section "PreClean"
|
||||
rm -rf "$build_dir"
|
||||
end_section "PreClean"
|
||||
|
||||
mkdir -p "$build_dir"
|
||||
mkdir -p "$build_dir/tmp"
|
||||
#export TMP="$build_dir/tmp"
|
||||
|
||||
# Install packages.
|
||||
begin_section "AutobuildInstall"
|
||||
"$AUTOBUILD" install --verbose --skip-license-check
|
||||
end_section "AutobuildInstall"
|
||||
|
||||
if pre_build "$variant" "$build_dir" >> "$build_log" 2>&1
|
||||
then
|
||||
if $build_link_parallel
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@ Borg Capalini
|
|||
Boroondas Gupte
|
||||
OPEN-29
|
||||
OPEN-39
|
||||
OPEN-39
|
||||
OPEN-54
|
||||
OPEN-99
|
||||
SNOW-278
|
||||
SNOW-503
|
||||
|
|
@ -396,6 +396,8 @@ Frontera Thor
|
|||
Fury Rosewood
|
||||
Gaberoonie Zanzibar
|
||||
Ganymedes Costagravas
|
||||
Geenz Spad
|
||||
STORM-1823
|
||||
Gene Frostbite
|
||||
GeneJ Composer
|
||||
Geneko Nemeth
|
||||
|
|
@ -622,6 +624,8 @@ Jonathan Yap
|
|||
STORM-1796
|
||||
STORM-1807
|
||||
STORM-1808
|
||||
STORM-637
|
||||
STORM-1822
|
||||
STORM-1809
|
||||
STORM-1793
|
||||
STORM-1810
|
||||
|
|
@ -868,6 +872,7 @@ Nicky Perian
|
|||
OPEN-1
|
||||
STORM-1087
|
||||
STORM-1090
|
||||
STORM-1828
|
||||
Nicoladie Gymnast
|
||||
Nounouch Hapmouche
|
||||
VWR-238
|
||||
|
|
@ -1187,6 +1192,8 @@ Unlikely Quintessa
|
|||
UsikuFarasi Kanarik
|
||||
Vadim Bigbear
|
||||
VWR-2681
|
||||
Vaalith Jinn
|
||||
STORM-64
|
||||
Vector Hastings
|
||||
VWR-8726
|
||||
Veritas Raymaker
|
||||
|
|
|
|||
|
|
@ -18,5 +18,5 @@ else (STANDALONE)
|
|||
elseif (LINUX)
|
||||
set(JSONCPP_LIBRARIES libjson_linux-gcc-4.1.3_libmt.a)
|
||||
endif (WINDOWS)
|
||||
set(JSONCPP_INCLUDE_DIRS "${LIBS_PREBUILT_DIR}/include/jsoncpp" "${LIBS_PREBUILT_DIR}/include/json")
|
||||
set(JSONCPP_INCLUDE_DIR "${LIBS_PREBUILT_DIR}/include/jsoncpp" "${LIBS_PREBUILT_DIR}/include/json")
|
||||
endif (STANDALONE)
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ elseif (LINUX)
|
|||
set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin)
|
||||
elseif (DARWIN)
|
||||
set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs)
|
||||
set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs/\$(CONFIGURATION)")
|
||||
set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs")
|
||||
endif (WINDOWS)
|
||||
|
||||
# Autobuild packages must provide 'release' versions of libraries, but may provide versions for
|
||||
|
|
@ -33,7 +33,14 @@ else(WINDOWS OR DARWIN)
|
|||
set(AUTOBUILD_LIBS_INSTALL_DIRS ${AUTOBUILD_INSTALL_DIR}/lib/${CMAKE_BUILD_TYPE_LOWER})
|
||||
endif(WINDOWS OR DARWIN)
|
||||
|
||||
list(APPEND AUTOBUILD_LIBS_INSTALL_DIRS ${ARCH_PREBUILT_DIRS_RELEASE})
|
||||
if (NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Release")
|
||||
# When we're building something other than Release, append the
|
||||
# packages/lib/release directory to deal with autobuild packages that don't
|
||||
# provide (e.g.) lib/debug libraries.
|
||||
list(APPEND AUTOBUILD_LIBS_INSTALL_DIRS ${ARCH_PREBUILT_DIRS_RELEASE})
|
||||
message(STATUS "CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}, extending AUTOBUILD_LIBS_INSTALL_DIRS")
|
||||
endif (NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Release")
|
||||
message(STATUS "For ${CMAKE_BUILD_TYPE}, AUTOBUILD_LIBS_INSTALL_DIRS: ${AUTOBUILD_LIBS_INSTALL_DIRS}")
|
||||
link_directories(${AUTOBUILD_LIBS_INSTALL_DIRS})
|
||||
|
||||
if (LINUX)
|
||||
|
|
|
|||
|
|
@ -60,6 +60,12 @@ BOOL LLImagePNG::updateData()
|
|||
|
||||
// Decode the PNG data and extract sizing information
|
||||
LLPngWrapper pngWrapper;
|
||||
if (!pngWrapper.isValidPng(getData()))
|
||||
{
|
||||
setLastError("LLImagePNG data does not have a valid PNG header!");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
LLPngWrapper::ImageInfo infop;
|
||||
if (! pngWrapper.readPng(getData(), NULL, &infop))
|
||||
{
|
||||
|
|
@ -90,6 +96,12 @@ BOOL LLImagePNG::decode(LLImageRaw* raw_image, F32 decode_time)
|
|||
|
||||
// Decode the PNG data into the raw image
|
||||
LLPngWrapper pngWrapper;
|
||||
if (!pngWrapper.isValidPng(getData()))
|
||||
{
|
||||
setLastError("LLImagePNG data does not have a valid PNG header!");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (! pngWrapper.readPng(getData(), raw_image))
|
||||
{
|
||||
setLastError(pngWrapper.getErrorMessage());
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ import re
|
|||
import errno
|
||||
import socket
|
||||
|
||||
VERBOSE = os.environ.get("INTEGRATION_TEST_VERBOSE", "1") # default to verbose
|
||||
VERBOSE = os.environ.get("INTEGRATION_TEST_VERBOSE", "0") # default to quiet
|
||||
# Support usage such as INTEGRATION_TEST_VERBOSE=off -- distressing to user if
|
||||
# that construct actually turns on verbosity...
|
||||
VERBOSE = not re.match(r"(0|off|false|quiet)$", VERBOSE, re.IGNORECASE)
|
||||
|
|
|
|||
|
|
@ -3307,8 +3307,11 @@ void LLFloater::stackWith(LLFloater& other)
|
|||
|
||||
setShape(next_rect);
|
||||
|
||||
other.mPositioning = LLFloaterEnums::POSITIONING_CASCADE_GROUP;
|
||||
other.setFollows(FOLLOWS_LEFT | FOLLOWS_TOP);
|
||||
if (!other.getHost())
|
||||
{
|
||||
other.mPositioning = LLFloaterEnums::POSITIONING_CASCADE_GROUP;
|
||||
other.setFollows(FOLLOWS_LEFT | FOLLOWS_TOP);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloater::applyRelativePosition()
|
||||
|
|
|
|||
|
|
@ -529,6 +529,7 @@ typedef enum e_lscript_runtime_permissions
|
|||
SCRIPT_PERMISSION_CHANGE_PERMISSIONS,
|
||||
SCRIPT_PERMISSION_TRACK_CAMERA,
|
||||
SCRIPT_PERMISSION_CONTROL_CAMERA,
|
||||
SCRIPT_PERMISSION_TELEPORT,
|
||||
SCRIPT_PERMISSION_EOF
|
||||
} LSCRIPTRunTimePermissions;
|
||||
|
||||
|
|
@ -545,6 +546,7 @@ const U32 LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_EOF] =
|
|||
(0x1 << 9), // SCRIPT_PERMISSION_CHANGE_PERMISSIONS
|
||||
(0x1 << 10),// SCRIPT_PERMISSION_TRACK_CAMERA
|
||||
(0x1 << 11),// SCRIPT_PERMISSION_CONTROL_CAMERA
|
||||
(0x1 << 12),// SCRIPT_PERMISSION_TELEPORT
|
||||
};
|
||||
|
||||
// http_request string constants
|
||||
|
|
|
|||
|
|
@ -212,7 +212,8 @@ extern "C" { int yyerror(const char *fmt, ...); }
|
|||
"PERMISSION_CHANGE_JOINTS" { count(); yylval.ival = LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_CHANGE_JOINTS]; return(INTEGER_CONSTANT); }
|
||||
"PERMISSION_CHANGE_PERMISSIONS" { count(); yylval.ival = LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_CHANGE_PERMISSIONS]; return(INTEGER_CONSTANT); }
|
||||
"PERMISSION_TRACK_CAMERA" { count(); yylval.ival = LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_TRACK_CAMERA]; return(INTEGER_CONSTANT); }
|
||||
"PERMISSION_CONTROL_CAMERA" { count(); yylval.ival = LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_CONTROL_CAMERA]; return(INTEGER_CONSTANT); }
|
||||
"PERMISSION_CONTROL_CAMERA" { count(); yylval.ival = LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_CONTROL_CAMERA]; return(INTEGER_CONSTANT); }
|
||||
"PERMISSION_TELEPORT" { count(); yylval.ival = LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_TELEPORT]; return(INTEGER_CONSTANT); }
|
||||
|
||||
"INVENTORY_TEXTURE" { count(); yylval.ival = LLAssetType::AT_TEXTURE; return(INTEGER_CONSTANT); }
|
||||
"INVENTORY_SOUND" { count(); yylval.ival = LLAssetType::AT_SOUND; return(INTEGER_CONSTANT); }
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ include(CMakeCopyIfDifferent)
|
|||
|
||||
include_directories(
|
||||
${DBUSGLIB_INCLUDE_DIRS}
|
||||
${JSONCPP_INCLUDE_DIRS}
|
||||
${JSONCPP_INCLUDE_DIR}
|
||||
${GLOD_INCLUDE_DIR}
|
||||
${LLAUDIO_INCLUDE_DIRS}
|
||||
${LLCHARACTER_INCLUDE_DIRS}
|
||||
|
|
@ -307,6 +307,7 @@ set(viewer_SOURCE_FILES
|
|||
lllistbrowser.cpp
|
||||
lllistcontextmenu.cpp
|
||||
lllistview.cpp
|
||||
lllocalbitmaps.cpp
|
||||
lllocaltextureobject.cpp
|
||||
lllocationhistory.cpp
|
||||
lllocationinputctrl.cpp
|
||||
|
|
@ -875,6 +876,7 @@ set(viewer_HEADER_FILES
|
|||
lllistbrowser.h
|
||||
lllistcontextmenu.h
|
||||
lllistview.h
|
||||
lllocalbitmaps.h
|
||||
lllocaltextureobject.h
|
||||
lllocationhistory.h
|
||||
lllocationinputctrl.h
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ PERMISSION_CHANGE_LINKS Passed to llRequestPermissions library function to req
|
|||
# PERMISSION_CHANGE_PERMISSIONS Passed to llRequestPermissions library function to request permission to change permissions
|
||||
PERMISSION_TRACK_CAMERA Passed to llRequestPermissions library function to request permission to track agent's camera
|
||||
PERMISSION_CONTROL_CAMERA Passed to llRequestPermissions library function to request permission to change agent's camera
|
||||
PERMISSION_TELEPORT Passed to llRequestPermissions library function to request permission to teleport agent
|
||||
|
||||
DEBUG_CHANNEL Chat channel reserved for debug and error messages from scripts
|
||||
PUBLIC_CHANNEL Chat channel that broadcasts to all nearby users
|
||||
|
|
|
|||
|
|
@ -8239,7 +8239,7 @@
|
|||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<real>128</real>
|
||||
<real>512</real>
|
||||
</map>
|
||||
|
||||
<key>RenderSpecularResY</key>
|
||||
|
|
@ -8263,7 +8263,7 @@
|
|||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>8</real>
|
||||
<real>384</real>
|
||||
</map>
|
||||
|
||||
<key>RenderDeferred</key>
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ void main()
|
|||
|
||||
if (sa > 0.0)
|
||||
{
|
||||
sa = texture2D(lightFunc,vec2(sa, spec.a)).r * min(dist_atten*4.0, 1.0);
|
||||
sa = 6 * texture2D(lightFunc, vec2(sa, spec.a)).r * min(dist_atten*4.0, 1.0);
|
||||
sa *= noise;
|
||||
col += da*sa*light_col[i].rgb*spec.rgb;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ void main()
|
|||
float sa = dot(normalize(lv-normalize(pos)),norm);
|
||||
if (sa > 0.0)
|
||||
{
|
||||
sa = texture2D(lightFunc, vec2(sa, spec.a)).r * min(dist_atten*4.0, 1.0);
|
||||
sa = 6 * texture2D(lightFunc, vec2(sa, spec.a)).r * min(dist_atten*4.0, 1.0);
|
||||
sa *= noise;
|
||||
col += da*sa*color.rgb*spec.rgb;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -301,11 +301,11 @@ void main()
|
|||
//
|
||||
vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
|
||||
float sa = dot(refnormpersp, sun_dir.xyz);
|
||||
vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).r;
|
||||
vec3 dumbshiny = vary_SunlitColor*(6 * texture2D(lightFunc, vec2(sa, spec.a)).r);
|
||||
|
||||
// add the two types of shiny together
|
||||
vec3 spec_contrib = dumbshiny * spec.rgb;
|
||||
bloom = dot(spec_contrib, spec_contrib);
|
||||
bloom = dot(spec_contrib, spec_contrib) / 4;
|
||||
col += spec_contrib;
|
||||
|
||||
//add environmentmap
|
||||
|
|
|
|||
|
|
@ -309,11 +309,11 @@ void main()
|
|||
//
|
||||
vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
|
||||
float sa = dot(refnormpersp, sun_dir.xyz);
|
||||
vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).r;
|
||||
vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*(6 * texture2D(lightFunc, vec2(sa, spec.a)).r);
|
||||
|
||||
// add the two types of shiny together
|
||||
vec3 spec_contrib = dumbshiny * spec.rgb;
|
||||
bloom = dot(spec_contrib, spec_contrib);
|
||||
bloom = dot(spec_contrib, spec_contrib) / 4;
|
||||
col += spec_contrib;
|
||||
|
||||
//add environmentmap
|
||||
|
|
|
|||
|
|
@ -123,7 +123,9 @@ public:
|
|||
for(LLSD::array_const_iterator line = compile_errors.beginArray();
|
||||
line < compile_errors.endArray(); line++)
|
||||
{
|
||||
mSupplier->log(line->asString());
|
||||
std::string str = line->asString();
|
||||
str.erase(std::remove(str.begin(), str.end(), '\n'), str.end());
|
||||
mSupplier->log(str);
|
||||
llinfos << content["errors"] << llendl;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -100,6 +100,7 @@ BOOL LLFloaterScriptQueue::postBuild()
|
|||
{
|
||||
childSetAction("close",onCloseBtn,this);
|
||||
getChildView("close")->setEnabled(FALSE);
|
||||
setVisible(true);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -158,7 +159,6 @@ void LLFloaterScriptQueue::addObject(const LLUUID& id)
|
|||
|
||||
BOOL LLFloaterScriptQueue::start()
|
||||
{
|
||||
//llinfos << "LLFloaterCompileQueue::start()" << llendl;
|
||||
std::string buffer;
|
||||
|
||||
LLSelectMgr *mgr = LLSelectMgr::getInstance();
|
||||
|
|
@ -178,7 +178,7 @@ BOOL LLFloaterScriptQueue::start()
|
|||
args["[COUNT]"] = llformat ("%d", mObjectIDs.count());
|
||||
buffer = getString ("Starting", args);
|
||||
|
||||
getChild<LLScrollListCtrl>("queue output")->setCommentText(buffer);
|
||||
getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
|
||||
|
||||
return nextObject();
|
||||
}
|
||||
|
|
@ -211,7 +211,7 @@ BOOL LLFloaterScriptQueue::nextObject()
|
|||
if(isDone() && !mDone)
|
||||
{
|
||||
mDone = true;
|
||||
getChild<LLScrollListCtrl>("queue output")->setCommentText(getString("Done"));
|
||||
getChild<LLScrollListCtrl>("queue output")->addSimpleElement(getString("Done"), ADD_BOTTOM);
|
||||
getChildView("close")->setEnabled(TRUE);
|
||||
}
|
||||
return successful_start;
|
||||
|
|
@ -277,7 +277,7 @@ public:
|
|||
return;
|
||||
}
|
||||
|
||||
queue->getChild<LLScrollListCtrl>("queue output")->setCommentText(message);
|
||||
queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(message, ADD_BOTTOM);
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
@ -464,7 +464,7 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
|
|||
}
|
||||
if(queue && (buffer.size() > 0))
|
||||
{
|
||||
queue->getChild<LLScrollListCtrl>("queue output")->setCommentText(buffer);
|
||||
queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
|
||||
}
|
||||
delete data;
|
||||
}
|
||||
|
|
@ -637,7 +637,7 @@ void LLFloaterResetQueue::handleInventory(LLViewerObject* viewer_obj,
|
|||
LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
|
||||
std::string buffer;
|
||||
buffer = getString("Resetting") + (": ") + item->getName();
|
||||
getChild<LLScrollListCtrl>("queue output")->setCommentText(buffer);
|
||||
getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_ScriptReset);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
|
|
@ -690,7 +690,7 @@ void LLFloaterRunQueue::handleInventory(LLViewerObject* viewer_obj,
|
|||
LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
|
||||
std::string buffer;
|
||||
buffer = getString("Running") + (": ") + item->getName();
|
||||
list->setCommentText(buffer);
|
||||
list->addSimpleElement(buffer, ADD_BOTTOM);
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_SetScriptRunning);
|
||||
|
|
@ -745,7 +745,7 @@ void LLFloaterNotRunQueue::handleInventory(LLViewerObject* viewer_obj,
|
|||
LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
|
||||
std::string buffer;
|
||||
buffer = getString("NotRunning") + (": ") +item->getName();
|
||||
list->setCommentText(buffer);
|
||||
list->addSimpleElement(buffer, ADD_BOTTOM);
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_SetScriptRunning);
|
||||
|
|
|
|||
|
|
@ -1059,19 +1059,7 @@ void LLFolderView::removeCutItems()
|
|||
iter != objects.end();
|
||||
++iter)
|
||||
{
|
||||
const LLUUID& item_id = (*iter);
|
||||
LLInventoryObject *obj = gInventory.getObject(item_id);
|
||||
if (obj)
|
||||
{
|
||||
if (LLAssetType::AT_CATEGORY == obj->getType())
|
||||
{
|
||||
remove_category(&gInventory, item_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
remove_item(&gInventory, item_id);
|
||||
}
|
||||
}
|
||||
gInventory.removeObject(*iter);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -984,7 +984,7 @@ void LLInvFVBridge::changeItemParent(LLInventoryModel* model,
|
|||
const LLUUID& new_parent_id,
|
||||
BOOL restamp)
|
||||
{
|
||||
change_item_parent(model, item, new_parent_id, restamp);
|
||||
model->changeItemParent(item, new_parent_id, restamp);
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
@ -993,7 +993,7 @@ void LLInvFVBridge::changeCategoryParent(LLInventoryModel* model,
|
|||
const LLUUID& new_parent_id,
|
||||
BOOL restamp)
|
||||
{
|
||||
change_category_parent(model, cat, new_parent_id, restamp);
|
||||
model->changeCategoryParent(cat, new_parent_id, restamp);
|
||||
}
|
||||
|
||||
LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,
|
||||
|
|
@ -2948,7 +2948,7 @@ bool LLFolderBridge::removeItemResponse(const LLSD& notification, const LLSD& re
|
|||
{
|
||||
// move it to the trash
|
||||
LLPreview::hide(mUUID);
|
||||
remove_category(getInventoryModel(), mUUID);
|
||||
getInventoryModel()->removeCategory(mUUID);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
|
|
|||
|
|
@ -108,116 +108,6 @@ void append_path(const LLUUID& id, std::string& path)
|
|||
path.append(temp);
|
||||
}
|
||||
|
||||
void change_item_parent(LLInventoryModel* model,
|
||||
LLViewerInventoryItem* item,
|
||||
const LLUUID& new_parent_id,
|
||||
BOOL restamp)
|
||||
{
|
||||
if (item->getParentUUID() != new_parent_id)
|
||||
{
|
||||
LLInventoryModel::update_list_t update;
|
||||
LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
|
||||
update.push_back(old_folder);
|
||||
LLInventoryModel::LLCategoryUpdate new_folder(new_parent_id, 1);
|
||||
update.push_back(new_folder);
|
||||
gInventory.accountForUpdate(update);
|
||||
|
||||
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
|
||||
new_item->setParent(new_parent_id);
|
||||
new_item->updateParentOnServer(restamp);
|
||||
model->updateItem(new_item);
|
||||
model->notifyObservers();
|
||||
}
|
||||
}
|
||||
|
||||
void change_category_parent(LLInventoryModel* model,
|
||||
LLViewerInventoryCategory* cat,
|
||||
const LLUUID& new_parent_id,
|
||||
BOOL restamp)
|
||||
{
|
||||
if (!model || !cat)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Can't move a folder into a child of itself.
|
||||
if (model->isObjectDescendentOf(new_parent_id, cat->getUUID()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLInventoryModel::update_list_t update;
|
||||
LLInventoryModel::LLCategoryUpdate old_folder(cat->getParentUUID(), -1);
|
||||
update.push_back(old_folder);
|
||||
LLInventoryModel::LLCategoryUpdate new_folder(new_parent_id, 1);
|
||||
update.push_back(new_folder);
|
||||
model->accountForUpdate(update);
|
||||
|
||||
LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat);
|
||||
new_cat->setParent(new_parent_id);
|
||||
new_cat->updateParentOnServer(restamp);
|
||||
model->updateCategory(new_cat);
|
||||
model->notifyObservers();
|
||||
}
|
||||
|
||||
// Move the item to the trash. Works for folders and objects.
|
||||
// Caution: This method assumes that the item is removable!
|
||||
void remove_item(LLInventoryModel* model, const LLUUID& id)
|
||||
{
|
||||
LLViewerInventoryItem* item = model->getItem(id);
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
if (item->getType() == LLAssetType::AT_CATEGORY)
|
||||
{
|
||||
// Call the general helper function to delete a folder
|
||||
remove_category(model, id);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Get the trash UUID
|
||||
LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false);
|
||||
if (trash_id.notNull())
|
||||
{
|
||||
// Finally, move the item to the trash
|
||||
change_item_parent(model, item, trash_id, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void remove_category(LLInventoryModel* model, const LLUUID& cat_id)
|
||||
{
|
||||
if (!model || !get_is_category_removable(model, cat_id))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Look for any gestures and deactivate them
|
||||
LLInventoryModel::cat_array_t descendent_categories;
|
||||
LLInventoryModel::item_array_t descendent_items;
|
||||
gInventory.collectDescendents(cat_id, descendent_categories, descendent_items, FALSE);
|
||||
|
||||
for (LLInventoryModel::item_array_t::const_iterator iter = descendent_items.begin();
|
||||
iter != descendent_items.end();
|
||||
++iter)
|
||||
{
|
||||
const LLViewerInventoryItem* item = (*iter);
|
||||
const LLUUID& item_id = item->getUUID();
|
||||
if (item->getType() == LLAssetType::AT_GESTURE
|
||||
&& LLGestureMgr::instance().isGestureActive(item_id))
|
||||
{
|
||||
LLGestureMgr::instance().deactivateGesture(item_id);
|
||||
}
|
||||
}
|
||||
|
||||
LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id);
|
||||
if (cat)
|
||||
{
|
||||
const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
|
||||
change_category_parent(model, cat, trash_id, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name)
|
||||
{
|
||||
LLViewerInventoryCategory* cat;
|
||||
|
|
@ -635,8 +525,7 @@ void move_to_outbox_cb_action(const LLSD& payload)
|
|||
|
||||
LLUUID parent = viitem->getParentUUID();
|
||||
|
||||
change_item_parent(
|
||||
&gInventory,
|
||||
gInventory.changeItemParent(
|
||||
viitem,
|
||||
dest_folder_id,
|
||||
false);
|
||||
|
|
@ -663,7 +552,7 @@ void move_to_outbox_cb_action(const LLSD& payload)
|
|||
|
||||
if (cat_array->empty() && item_array->empty())
|
||||
{
|
||||
remove_category(&gInventory, parent);
|
||||
gInventory.removeCategory(parent);
|
||||
}
|
||||
|
||||
if (parent == top_level_folder)
|
||||
|
|
@ -737,7 +626,7 @@ void move_item_within_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, S32
|
|||
|
||||
LLViewerInventoryItem * viewer_inv_item = (LLViewerInventoryItem *) inv_item;
|
||||
|
||||
change_item_parent(&gInventory,
|
||||
gInventory.changeItemParent(
|
||||
viewer_inv_item,
|
||||
dest_folder,
|
||||
false);
|
||||
|
|
|
|||
|
|
@ -57,20 +57,6 @@ void show_task_item_profile(const LLUUID& item_uuid, const LLUUID& object_id);
|
|||
|
||||
void show_item_original(const LLUUID& item_uuid);
|
||||
|
||||
void change_item_parent(LLInventoryModel* model,
|
||||
LLViewerInventoryItem* item,
|
||||
const LLUUID& new_parent_id,
|
||||
BOOL restamp);
|
||||
|
||||
void remove_item(LLInventoryModel* model, const LLUUID& id);
|
||||
|
||||
void change_category_parent(LLInventoryModel* model,
|
||||
LLViewerInventoryCategory* cat,
|
||||
const LLUUID& new_parent_id,
|
||||
BOOL restamp);
|
||||
|
||||
void remove_category(LLInventoryModel* model, const LLUUID& cat_id);
|
||||
|
||||
void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name);
|
||||
|
||||
void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& parent_id, const LLUUID& root_copy_id = LLUUID::null);
|
||||
|
|
|
|||
|
|
@ -47,6 +47,8 @@
|
|||
#include "llviewerregion.h"
|
||||
#include "llcallbacklist.h"
|
||||
#include "llvoavatarself.h"
|
||||
#include "llgesturemgr.h"
|
||||
#include <typeinfo>
|
||||
|
||||
//#define DIFF_INVENTORY_FILES
|
||||
#ifdef DIFF_INVENTORY_FILES
|
||||
|
|
@ -1018,6 +1020,66 @@ void LLInventoryModel::moveObject(const LLUUID& object_id, const LLUUID& cat_id)
|
|||
}
|
||||
}
|
||||
|
||||
// Migrated from llinventoryfunctions
|
||||
void LLInventoryModel::changeItemParent(LLViewerInventoryItem* item,
|
||||
const LLUUID& new_parent_id,
|
||||
BOOL restamp)
|
||||
{
|
||||
if (item->getParentUUID() == new_parent_id)
|
||||
{
|
||||
LL_DEBUGS("Inventory") << "'" << item->getName() << "' (" << item->getUUID()
|
||||
<< ") is already in folder " << new_parent_id << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS("Inventory") << "Moving '" << item->getName() << "' (" << item->getUUID()
|
||||
<< ") from " << item->getParentUUID() << " to folder "
|
||||
<< new_parent_id << LL_ENDL;
|
||||
LLInventoryModel::update_list_t update;
|
||||
LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
|
||||
update.push_back(old_folder);
|
||||
LLInventoryModel::LLCategoryUpdate new_folder(new_parent_id, 1);
|
||||
update.push_back(new_folder);
|
||||
accountForUpdate(update);
|
||||
|
||||
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
|
||||
new_item->setParent(new_parent_id);
|
||||
new_item->updateParentOnServer(restamp);
|
||||
updateItem(new_item);
|
||||
notifyObservers();
|
||||
}
|
||||
}
|
||||
|
||||
// Migrated from llinventoryfunctions
|
||||
void LLInventoryModel::changeCategoryParent(LLViewerInventoryCategory* cat,
|
||||
const LLUUID& new_parent_id,
|
||||
BOOL restamp)
|
||||
{
|
||||
if (!cat)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Can't move a folder into a child of itself.
|
||||
if (isObjectDescendentOf(new_parent_id, cat->getUUID()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLInventoryModel::update_list_t update;
|
||||
LLInventoryModel::LLCategoryUpdate old_folder(cat->getParentUUID(), -1);
|
||||
update.push_back(old_folder);
|
||||
LLInventoryModel::LLCategoryUpdate new_folder(new_parent_id, 1);
|
||||
update.push_back(new_folder);
|
||||
accountForUpdate(update);
|
||||
|
||||
LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(cat);
|
||||
new_cat->setParent(new_parent_id);
|
||||
new_cat->updateParentOnServer(restamp);
|
||||
updateCategory(new_cat);
|
||||
notifyObservers();
|
||||
}
|
||||
|
||||
// Delete a particular inventory object by ID.
|
||||
void LLInventoryModel::deleteObject(const LLUUID& id)
|
||||
{
|
||||
|
|
@ -2964,21 +3026,77 @@ void LLInventoryModel::emptyFolderType(const std::string notification, LLFolderT
|
|||
void LLInventoryModel::removeItem(const LLUUID& item_id)
|
||||
{
|
||||
LLViewerInventoryItem* item = getItem(item_id);
|
||||
const LLUUID new_parent = findCategoryUUIDForType(LLFolderType::FT_TRASH);
|
||||
if (item && item->getParentUUID() != new_parent)
|
||||
if (! item)
|
||||
{
|
||||
LLInventoryModel::update_list_t update;
|
||||
LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
|
||||
update.push_back(old_folder);
|
||||
LLInventoryModel::LLCategoryUpdate new_folder(new_parent, 1);
|
||||
update.push_back(new_folder);
|
||||
accountForUpdate(update);
|
||||
LL_WARNS("Inventory") << "couldn't find inventory item " << item_id << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
const LLUUID new_parent = findCategoryUUIDForType(LLFolderType::FT_TRASH);
|
||||
if (new_parent.notNull())
|
||||
{
|
||||
LL_INFOS("Inventory") << "Moving to Trash (" << new_parent << "):" << LL_ENDL;
|
||||
changeItemParent(item, new_parent, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
|
||||
new_item->setParent(new_parent);
|
||||
new_item->updateParentOnServer(TRUE);
|
||||
updateItem(new_item);
|
||||
notifyObservers();
|
||||
void LLInventoryModel::removeCategory(const LLUUID& category_id)
|
||||
{
|
||||
if (! get_is_category_removable(this, category_id))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Look for any gestures and deactivate them
|
||||
LLInventoryModel::cat_array_t descendent_categories;
|
||||
LLInventoryModel::item_array_t descendent_items;
|
||||
collectDescendents(category_id, descendent_categories, descendent_items, FALSE);
|
||||
|
||||
for (LLInventoryModel::item_array_t::const_iterator iter = descendent_items.begin();
|
||||
iter != descendent_items.end();
|
||||
++iter)
|
||||
{
|
||||
const LLViewerInventoryItem* item = (*iter);
|
||||
const LLUUID& item_id = item->getUUID();
|
||||
if (item->getType() == LLAssetType::AT_GESTURE
|
||||
&& LLGestureMgr::instance().isGestureActive(item_id))
|
||||
{
|
||||
LLGestureMgr::instance().deactivateGesture(item_id);
|
||||
}
|
||||
}
|
||||
|
||||
LLViewerInventoryCategory* cat = getCategory(category_id);
|
||||
if (cat)
|
||||
{
|
||||
const LLUUID trash_id = findCategoryUUIDForType(LLFolderType::FT_TRASH);
|
||||
if (trash_id.notNull())
|
||||
{
|
||||
changeCategoryParent(cat, trash_id, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLInventoryModel::removeObject(const LLUUID& object_id)
|
||||
{
|
||||
LLInventoryObject* obj = getObject(object_id);
|
||||
if (dynamic_cast<LLViewerInventoryItem*>(obj))
|
||||
{
|
||||
removeItem(object_id);
|
||||
}
|
||||
else if (dynamic_cast<LLViewerInventoryCategory*>(obj))
|
||||
{
|
||||
removeCategory(object_id);
|
||||
}
|
||||
else if (obj)
|
||||
{
|
||||
LL_WARNS("Inventory") << "object ID " << object_id
|
||||
<< " is an object of unrecognized class "
|
||||
<< typeid(*obj).name() << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("Inventory") << "object ID " << object_id << " not found" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -306,6 +306,16 @@ public:
|
|||
// observer notification, or server update is performed.
|
||||
void moveObject(const LLUUID& object_id, const LLUUID& cat_id);
|
||||
|
||||
// Migrated from llinventoryfunctions
|
||||
void changeItemParent(LLViewerInventoryItem* item,
|
||||
const LLUUID& new_parent_id,
|
||||
BOOL restamp);
|
||||
|
||||
// Migrated from llinventoryfunctions
|
||||
void changeCategoryParent(LLViewerInventoryCategory* cat,
|
||||
const LLUUID& new_parent_id,
|
||||
BOOL restamp);
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Delete
|
||||
//--------------------------------------------------------------------
|
||||
|
|
@ -315,8 +325,13 @@ public:
|
|||
// consistent internal state. No cache accounting, observer
|
||||
// notification, or server update is performed.
|
||||
void deleteObject(const LLUUID& id);
|
||||
/// move Item item_id to Trash
|
||||
void removeItem(const LLUUID& item_id);
|
||||
|
||||
/// move Category category_id to Trash
|
||||
void removeCategory(const LLUUID& category_id);
|
||||
/// removeItem() or removeCategory(), whichever is appropriate
|
||||
void removeObject(const LLUUID& object_id);
|
||||
|
||||
// Delete a particular inventory object by ID, and delete it from
|
||||
// the server. Also updates linked items.
|
||||
void purgeObject(const LLUUID& id);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,942 @@
|
|||
/**
|
||||
* @file lllocalbitmaps.cpp
|
||||
* @author Vaalith Jinn
|
||||
* @brief Local Bitmaps source
|
||||
*
|
||||
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2011, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
/* precompiled headers */
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
/* own header */
|
||||
#include "lllocalbitmaps.h"
|
||||
|
||||
/* boost: will not compile unless equivalent is undef'd, beware. */
|
||||
#ifdef equivalent
|
||||
#undef equivalent
|
||||
#endif
|
||||
#include <boost/filesystem.hpp>
|
||||
|
||||
/* image compression headers. */
|
||||
#include "llimagebmp.h"
|
||||
#include "llimagetga.h"
|
||||
#include "llimagejpeg.h"
|
||||
#include "llimagepng.h"
|
||||
|
||||
/* time headers */
|
||||
#include <time.h>
|
||||
#include <ctime>
|
||||
|
||||
/* misc headers */
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "llfilepicker.h"
|
||||
#include "llviewertexturelist.h"
|
||||
#include "llviewerobjectlist.h"
|
||||
#include "llviewerobject.h"
|
||||
#include "llface.h"
|
||||
#include "llvoavatarself.h"
|
||||
#include "llwearable.h"
|
||||
#include "llagentwearables.h"
|
||||
#include "lltexlayerparams.h"
|
||||
#include "llvovolume.h"
|
||||
#include "llnotificationsutil.h"
|
||||
|
||||
/*=======================================*/
|
||||
/* Formal declarations, constants, etc. */
|
||||
/*=======================================*/
|
||||
std::list<LLLocalBitmap*> LLLocalBitmapMgr::sBitmapList;
|
||||
LLLocalBitmapTimer LLLocalBitmapMgr::sTimer;
|
||||
bool LLLocalBitmapMgr::sNeedsRebake;
|
||||
|
||||
static const F32 LL_LOCAL_TIMER_HEARTBEAT = 3.0;
|
||||
static const BOOL LL_LOCAL_USE_MIPMAPS = true;
|
||||
static const S32 LL_LOCAL_DISCARD_LEVEL = 0;
|
||||
static const U32 LL_LOCAL_TEXLAYER_FOR_IDX = 0;
|
||||
static const bool LL_LOCAL_SLAM_FOR_DEBUG = true;
|
||||
static const bool LL_LOCAL_REPLACE_ON_DEL = true;
|
||||
static const S32 LL_LOCAL_UPDATE_RETRIES = 5;
|
||||
|
||||
/*=======================================*/
|
||||
/* LLLocalBitmap: unit class */
|
||||
/*=======================================*/
|
||||
LLLocalBitmap::LLLocalBitmap(std::string filename)
|
||||
: mFilename(filename)
|
||||
, mShortName(gDirUtilp->getBaseFileName(filename, true))
|
||||
, mValid(false)
|
||||
, mLastModified()
|
||||
, mLinkStatus(LS_ON)
|
||||
, mUpdateRetries(LL_LOCAL_UPDATE_RETRIES)
|
||||
{
|
||||
mTrackingID.generate();
|
||||
|
||||
/* extension */
|
||||
std::string temp_exten = gDirUtilp->getExtension(mFilename);
|
||||
|
||||
if (temp_exten == "bmp")
|
||||
{
|
||||
mExtension = ET_IMG_BMP;
|
||||
}
|
||||
else if (temp_exten == "tga")
|
||||
{
|
||||
mExtension = ET_IMG_TGA;
|
||||
}
|
||||
else if (temp_exten == "jpg" || temp_exten == "jpeg")
|
||||
{
|
||||
mExtension = ET_IMG_JPG;
|
||||
}
|
||||
else if (temp_exten == "png")
|
||||
{
|
||||
mExtension = ET_IMG_PNG;
|
||||
}
|
||||
else
|
||||
{
|
||||
llwarns << "File of no valid extension given, local bitmap creation aborted." << "\n"
|
||||
<< "Filename: " << mFilename << llendl;
|
||||
return; // no valid extension.
|
||||
}
|
||||
|
||||
/* next phase of unit creation is nearly the same as an update cycle.
|
||||
we're running updateSelf as a special case with the optional UT_FIRSTUSE
|
||||
which omits the parts associated with removing the outdated texture */
|
||||
mValid = updateSelf(UT_FIRSTUSE);
|
||||
}
|
||||
|
||||
LLLocalBitmap::~LLLocalBitmap()
|
||||
{
|
||||
// replace IDs with defaults, if set to do so.
|
||||
if(LL_LOCAL_REPLACE_ON_DEL && mValid) // fix for STORM-1837
|
||||
{
|
||||
replaceIDs(mWorldID, IMG_DEFAULT);
|
||||
LLLocalBitmapMgr::doRebake();
|
||||
}
|
||||
|
||||
// delete self from gimagelist
|
||||
LLViewerFetchedTexture* image = gTextureList.findImage(mWorldID);
|
||||
gTextureList.deleteImage(image);
|
||||
|
||||
if (image)
|
||||
{
|
||||
image->unref();
|
||||
}
|
||||
}
|
||||
|
||||
/* accessors */
|
||||
std::string LLLocalBitmap::getFilename()
|
||||
{
|
||||
return mFilename;
|
||||
}
|
||||
|
||||
std::string LLLocalBitmap::getShortName()
|
||||
{
|
||||
return mShortName;
|
||||
}
|
||||
|
||||
LLUUID LLLocalBitmap::getTrackingID()
|
||||
{
|
||||
return mTrackingID;
|
||||
}
|
||||
|
||||
LLUUID LLLocalBitmap::getWorldID()
|
||||
{
|
||||
return mWorldID;
|
||||
}
|
||||
|
||||
bool LLLocalBitmap::getValid()
|
||||
{
|
||||
return mValid;
|
||||
}
|
||||
|
||||
/* update functions */
|
||||
bool LLLocalBitmap::updateSelf(EUpdateType optional_firstupdate)
|
||||
{
|
||||
bool updated = false;
|
||||
|
||||
if (mLinkStatus == LS_ON)
|
||||
{
|
||||
// verifying that the file exists
|
||||
if (gDirUtilp->fileExists(mFilename))
|
||||
{
|
||||
// verifying that the file has indeed been modified
|
||||
const std::time_t temp_time = boost::filesystem::last_write_time(boost::filesystem::path(mFilename));
|
||||
LLSD new_last_modified = asctime(localtime(&temp_time));
|
||||
|
||||
if (mLastModified.asString() != new_last_modified.asString())
|
||||
{
|
||||
/* loading the image file and decoding it, here is a critical point which,
|
||||
if fails, invalidates the whole update (or unit creation) process. */
|
||||
LLPointer<LLImageRaw> raw_image = new LLImageRaw();
|
||||
if (decodeBitmap(raw_image))
|
||||
{
|
||||
// decode is successful, we can safely proceed.
|
||||
LLUUID old_id = LLUUID::null;
|
||||
if (!(optional_firstupdate == UT_FIRSTUSE) && !mWorldID.isNull())
|
||||
{
|
||||
old_id = mWorldID;
|
||||
}
|
||||
mWorldID.generate();
|
||||
mLastModified = new_last_modified;
|
||||
|
||||
LLPointer<LLViewerFetchedTexture> texture = new LLViewerFetchedTexture
|
||||
("file://"+mFilename, mWorldID, LL_LOCAL_USE_MIPMAPS);
|
||||
|
||||
texture->createGLTexture(LL_LOCAL_DISCARD_LEVEL, raw_image);
|
||||
texture->setCachedRawImage(LL_LOCAL_DISCARD_LEVEL, raw_image);
|
||||
texture->ref();
|
||||
|
||||
gTextureList.addImage(texture);
|
||||
|
||||
if (!optional_firstupdate == UT_FIRSTUSE)
|
||||
{
|
||||
// seek out everything old_id uses and replace it with mWorldID
|
||||
replaceIDs(old_id, mWorldID);
|
||||
|
||||
// remove old_id from gimagelist
|
||||
LLViewerFetchedTexture* image = gTextureList.findImage(old_id);
|
||||
gTextureList.deleteImage(image);
|
||||
image->unref();
|
||||
}
|
||||
|
||||
mUpdateRetries = LL_LOCAL_UPDATE_RETRIES;
|
||||
updated = true;
|
||||
}
|
||||
|
||||
// if decoding failed, we get here and it will attempt to decode it in the next cycles
|
||||
// until mUpdateRetries runs out. this is done because some software lock the bitmap while writing to it
|
||||
else
|
||||
{
|
||||
if (mUpdateRetries)
|
||||
{
|
||||
mUpdateRetries--;
|
||||
}
|
||||
else
|
||||
{
|
||||
llwarns << "During the update process the following file was found" << "\n"
|
||||
<< "but could not be opened or decoded for " << LL_LOCAL_UPDATE_RETRIES << " attempts." << "\n"
|
||||
<< "Filename: " << mFilename << "\n"
|
||||
<< "Disabling further update attempts for this file." << llendl;
|
||||
|
||||
LLSD notif_args;
|
||||
notif_args["FNAME"] = mFilename;
|
||||
notif_args["NRETRIES"] = LL_LOCAL_UPDATE_RETRIES;
|
||||
LLNotificationsUtil::add("LocalBitmapsUpdateFailedFinal", notif_args);
|
||||
|
||||
mLinkStatus = LS_BROKEN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // end if file exists
|
||||
|
||||
else
|
||||
{
|
||||
llwarns << "During the update process, the following file was not found." << "\n"
|
||||
<< "Filename: " << mFilename << "\n"
|
||||
<< "Disabling further update attempts for this file." << llendl;
|
||||
|
||||
LLSD notif_args;
|
||||
notif_args["FNAME"] = mFilename;
|
||||
LLNotificationsUtil::add("LocalBitmapsUpdateFileNotFound", notif_args);
|
||||
|
||||
mLinkStatus = LS_BROKEN;
|
||||
}
|
||||
}
|
||||
|
||||
return updated;
|
||||
}
|
||||
|
||||
bool LLLocalBitmap::decodeBitmap(LLPointer<LLImageRaw> rawimg)
|
||||
{
|
||||
bool decode_successful = false;
|
||||
|
||||
switch (mExtension)
|
||||
{
|
||||
case ET_IMG_BMP:
|
||||
{
|
||||
LLPointer<LLImageBMP> bmp_image = new LLImageBMP;
|
||||
if (bmp_image->load(mFilename) && bmp_image->decode(rawimg, 0.0f))
|
||||
{
|
||||
rawimg->biasedScaleToPowerOfTwo(LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT);
|
||||
decode_successful = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case ET_IMG_TGA:
|
||||
{
|
||||
LLPointer<LLImageTGA> tga_image = new LLImageTGA;
|
||||
if ((tga_image->load(mFilename) && tga_image->decode(rawimg))
|
||||
&& ((tga_image->getComponents() == 3) || (tga_image->getComponents() == 4)))
|
||||
{
|
||||
rawimg->biasedScaleToPowerOfTwo(LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT);
|
||||
decode_successful = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case ET_IMG_JPG:
|
||||
{
|
||||
LLPointer<LLImageJPEG> jpeg_image = new LLImageJPEG;
|
||||
if (jpeg_image->load(mFilename) && jpeg_image->decode(rawimg, 0.0f))
|
||||
{
|
||||
rawimg->biasedScaleToPowerOfTwo(LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT);
|
||||
decode_successful = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case ET_IMG_PNG:
|
||||
{
|
||||
LLPointer<LLImagePNG> png_image = new LLImagePNG;
|
||||
if (png_image->load(mFilename) && png_image->decode(rawimg, 0.0f))
|
||||
{
|
||||
rawimg->biasedScaleToPowerOfTwo(LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT);
|
||||
decode_successful = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
// separating this into -several- llwarns calls because in the extremely unlikely case that this happens
|
||||
// accessing mFilename and any other object properties might very well crash the viewer.
|
||||
// getting here should be impossible, or there's been a pretty serious bug.
|
||||
|
||||
llwarns << "During a decode attempt, the following local bitmap had no properly assigned extension." << llendl;
|
||||
llwarns << "Filename: " << mFilename << llendl;
|
||||
llwarns << "Disabling further update attempts for this file." << llendl;
|
||||
mLinkStatus = LS_BROKEN;
|
||||
}
|
||||
}
|
||||
|
||||
return decode_successful;
|
||||
}
|
||||
|
||||
void LLLocalBitmap::replaceIDs(LLUUID old_id, LLUUID new_id)
|
||||
{
|
||||
// checking for misuse.
|
||||
if (old_id == new_id)
|
||||
{
|
||||
llinfos << "An attempt was made to replace a texture with itself. (matching UUIDs)" << "\n"
|
||||
<< "Texture UUID: " << old_id.asString() << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
updateUserPrims(old_id, new_id);
|
||||
updateUserSculpts(old_id, new_id); // isn't there supposed to be an IMG_DEFAULT_SCULPT or something?
|
||||
|
||||
// default safeguard image for layers
|
||||
if( new_id == IMG_DEFAULT )
|
||||
{
|
||||
new_id = IMG_DEFAULT_AVATAR;
|
||||
}
|
||||
|
||||
/* It doesn't actually update all of those, it merely checks if any of them
|
||||
contain the referenced ID and if so, updates. */
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_ALPHA);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_EYES);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_GLOVES);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_JACKET);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_PANTS);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_SHIRT);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_SHOES);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_SKIN);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_SKIRT);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_SOCKS);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_TATTOO);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_UNDERPANTS);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_UNDERSHIRT);
|
||||
}
|
||||
|
||||
// this function sorts the faces from a getFaceList[getNumFaces] into a list of objects
|
||||
// in order to prevent multiple sendTEUpdate calls per object during updateUserPrims
|
||||
std::vector<LLViewerObject*> LLLocalBitmap::prepUpdateObjects(LLUUID old_id)
|
||||
{
|
||||
std::vector<LLViewerObject*> obj_list;
|
||||
LLViewerFetchedTexture* old_texture = gTextureList.findImage(old_id);
|
||||
|
||||
for(U32 face_iterator = 0; face_iterator < old_texture->getNumFaces(); face_iterator++)
|
||||
{
|
||||
// getting an object from a face
|
||||
LLFace* face_to_object = (*old_texture->getFaceList())[face_iterator];
|
||||
|
||||
if(face_to_object)
|
||||
{
|
||||
LLViewerObject* affected_object = face_to_object->getViewerObject();
|
||||
|
||||
if(affected_object)
|
||||
{
|
||||
|
||||
// we have an object, we'll take it's UUID and compare it to
|
||||
// whatever we already have in the returnable object list.
|
||||
// if there is a match - we do not add (to prevent duplicates)
|
||||
LLUUID mainlist_obj_id = affected_object->getID();
|
||||
bool add_object = true;
|
||||
|
||||
// begin looking for duplicates
|
||||
std::vector<LLViewerObject*>::iterator objlist_iter = obj_list.begin();
|
||||
for(; (objlist_iter != obj_list.end()) && add_object; objlist_iter++)
|
||||
{
|
||||
LLViewerObject* obj = *objlist_iter;
|
||||
if (obj->getID() == mainlist_obj_id)
|
||||
{
|
||||
add_object = false; // duplicate found.
|
||||
}
|
||||
}
|
||||
// end looking for duplicates
|
||||
|
||||
if(add_object)
|
||||
{
|
||||
obj_list.push_back(affected_object);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} // end of face-iterating for()
|
||||
|
||||
return obj_list;
|
||||
}
|
||||
|
||||
void LLLocalBitmap::updateUserPrims(LLUUID old_id, LLUUID new_id)
|
||||
{
|
||||
std::vector<LLViewerObject*> objectlist = prepUpdateObjects(old_id);
|
||||
|
||||
for(std::vector<LLViewerObject*>::iterator object_iterator = objectlist.begin();
|
||||
object_iterator != objectlist.end(); object_iterator++)
|
||||
{
|
||||
LLViewerObject* object = *object_iterator;
|
||||
|
||||
if(object)
|
||||
{
|
||||
bool update_obj = false;
|
||||
S32 num_faces = object->getNumFaces();
|
||||
|
||||
for (U8 face_iter = 0; face_iter < num_faces; face_iter++)
|
||||
{
|
||||
if (object->mDrawable)
|
||||
{
|
||||
LLFace* face = object->mDrawable->getFace(face_iter);
|
||||
if (face && face->getTexture() && face->getTexture()->getID() == old_id)
|
||||
{
|
||||
object->setTEImage(face_iter, LLViewerTextureManager::getFetchedTexture
|
||||
(new_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
|
||||
|
||||
update_obj = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (update_obj)
|
||||
{
|
||||
object->sendTEUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void LLLocalBitmap::updateUserSculpts(LLUUID old_id, LLUUID new_id)
|
||||
{
|
||||
LLViewerFetchedTexture* old_texture = gTextureList.findImage(old_id);
|
||||
for(U32 volume_iter = 0; volume_iter < old_texture->getNumVolumes(); volume_iter++)
|
||||
{
|
||||
LLVOVolume* volume_to_object = (*old_texture->getVolumeList())[volume_iter];
|
||||
LLViewerObject* object = (LLViewerObject*)volume_to_object;
|
||||
|
||||
if(object)
|
||||
{
|
||||
if (object->isSculpted() && object->getVolume() &&
|
||||
object->getVolume()->getParams().getSculptID() == old_id)
|
||||
{
|
||||
LLSculptParams* old_params = (LLSculptParams*)object->getParameterEntry(LLNetworkData::PARAMS_SCULPT);
|
||||
LLSculptParams new_params(*old_params);
|
||||
new_params.setSculptTexture(new_id);
|
||||
object->setParameterEntry(LLNetworkData::PARAMS_SCULPT, new_params, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLLocalBitmap::updateUserLayers(LLUUID old_id, LLUUID new_id, LLWearableType::EType type)
|
||||
{
|
||||
U32 count = gAgentWearables.getWearableCount(type);
|
||||
for(U32 wearable_iter = 0; wearable_iter < count; wearable_iter++)
|
||||
{
|
||||
LLWearable* wearable = gAgentWearables.getWearable(type, wearable_iter);
|
||||
if (wearable)
|
||||
{
|
||||
std::vector<LLLocalTextureObject*> texture_list = wearable->getLocalTextureListSeq();
|
||||
for(std::vector<LLLocalTextureObject*>::iterator texture_iter = texture_list.begin();
|
||||
texture_iter != texture_list.end(); texture_iter++)
|
||||
{
|
||||
LLLocalTextureObject* lto = *texture_iter;
|
||||
|
||||
if (lto && lto->getID() == old_id)
|
||||
{
|
||||
U32 local_texlayer_index = 0; /* can't keep that as static const, gives errors, so i'm leaving this var here */
|
||||
LLVOAvatarDefines::EBakedTextureIndex baked_texind =
|
||||
lto->getTexLayer(local_texlayer_index)->getTexLayerSet()->getBakedTexIndex();
|
||||
|
||||
LLVOAvatarDefines::ETextureIndex reg_texind = getTexIndex(type, baked_texind);
|
||||
if (reg_texind != LLVOAvatarDefines::TEX_NUM_INDICES)
|
||||
{
|
||||
U32 index = gAgentWearables.getWearableIndex(wearable);
|
||||
gAgentAvatarp->setLocalTexture(reg_texind, gTextureList.getImage(new_id), FALSE, index);
|
||||
gAgentAvatarp->wearableUpdated(type, FALSE);
|
||||
|
||||
/* telling the manager to rebake once update cycle is fully done */
|
||||
LLLocalBitmapMgr::setNeedsRebake();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LLVOAvatarDefines::ETextureIndex LLLocalBitmap::getTexIndex(
|
||||
LLWearableType::EType type, LLVOAvatarDefines::EBakedTextureIndex baked_texind)
|
||||
{
|
||||
LLVOAvatarDefines::ETextureIndex result = LLVOAvatarDefines::TEX_NUM_INDICES; // using as a default/fail return.
|
||||
|
||||
switch(type)
|
||||
{
|
||||
case LLWearableType::WT_ALPHA:
|
||||
{
|
||||
switch(baked_texind)
|
||||
{
|
||||
case LLVOAvatarDefines::BAKED_EYES:
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_EYES_ALPHA;
|
||||
break;
|
||||
}
|
||||
|
||||
case LLVOAvatarDefines::BAKED_HAIR:
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_HAIR_ALPHA;
|
||||
break;
|
||||
}
|
||||
|
||||
case LLVOAvatarDefines::BAKED_HEAD:
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_HEAD_ALPHA;
|
||||
break;
|
||||
}
|
||||
|
||||
case LLVOAvatarDefines::BAKED_LOWER:
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_LOWER_ALPHA;
|
||||
break;
|
||||
}
|
||||
case LLVOAvatarDefines::BAKED_UPPER:
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_UPPER_ALPHA;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case LLWearableType::WT_EYES:
|
||||
{
|
||||
if (baked_texind == LLVOAvatarDefines::BAKED_EYES)
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_EYES_IRIS;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case LLWearableType::WT_GLOVES:
|
||||
{
|
||||
if (baked_texind == LLVOAvatarDefines::BAKED_UPPER)
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_UPPER_GLOVES;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case LLWearableType::WT_JACKET:
|
||||
{
|
||||
if (baked_texind == LLVOAvatarDefines::BAKED_LOWER)
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_LOWER_JACKET;
|
||||
}
|
||||
else if (baked_texind == LLVOAvatarDefines::BAKED_UPPER)
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_UPPER_JACKET;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case LLWearableType::WT_PANTS:
|
||||
{
|
||||
if (baked_texind == LLVOAvatarDefines::BAKED_LOWER)
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_LOWER_PANTS;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case LLWearableType::WT_SHIRT:
|
||||
{
|
||||
if (baked_texind == LLVOAvatarDefines::BAKED_UPPER)
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_UPPER_SHIRT;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case LLWearableType::WT_SHOES:
|
||||
{
|
||||
if (baked_texind == LLVOAvatarDefines::BAKED_LOWER)
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_LOWER_SHOES;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case LLWearableType::WT_SKIN:
|
||||
{
|
||||
switch(baked_texind)
|
||||
{
|
||||
case LLVOAvatarDefines::BAKED_HEAD:
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_HEAD_BODYPAINT;
|
||||
break;
|
||||
}
|
||||
|
||||
case LLVOAvatarDefines::BAKED_LOWER:
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_LOWER_BODYPAINT;
|
||||
break;
|
||||
}
|
||||
case LLVOAvatarDefines::BAKED_UPPER:
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_UPPER_BODYPAINT;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case LLWearableType::WT_SKIRT:
|
||||
{
|
||||
if (baked_texind == LLVOAvatarDefines::BAKED_SKIRT)
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_SKIRT;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case LLWearableType::WT_SOCKS:
|
||||
{
|
||||
if (baked_texind == LLVOAvatarDefines::BAKED_LOWER)
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_LOWER_SOCKS;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case LLWearableType::WT_TATTOO:
|
||||
{
|
||||
switch(baked_texind)
|
||||
{
|
||||
case LLVOAvatarDefines::BAKED_HEAD:
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_HEAD_TATTOO;
|
||||
break;
|
||||
}
|
||||
|
||||
case LLVOAvatarDefines::BAKED_LOWER:
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_LOWER_TATTOO;
|
||||
break;
|
||||
}
|
||||
case LLVOAvatarDefines::BAKED_UPPER:
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_UPPER_TATTOO;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case LLWearableType::WT_UNDERPANTS:
|
||||
{
|
||||
if (baked_texind == LLVOAvatarDefines::BAKED_LOWER)
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_LOWER_UNDERPANTS;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case LLWearableType::WT_UNDERSHIRT:
|
||||
{
|
||||
if (baked_texind == LLVOAvatarDefines::BAKED_UPPER)
|
||||
{
|
||||
result = LLVOAvatarDefines::TEX_UPPER_UNDERSHIRT;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
llwarns << "Unknown wearable type: " << (int)type << "\n"
|
||||
<< "Baked Texture Index: " << (int)baked_texind << "\n"
|
||||
<< "Filename: " << mFilename << "\n"
|
||||
<< "TrackingID: " << mTrackingID << "\n"
|
||||
<< "InworldID: " << mWorldID << llendl;
|
||||
}
|
||||
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/*=======================================*/
|
||||
/* LLLocalBitmapTimer: timer class */
|
||||
/*=======================================*/
|
||||
LLLocalBitmapTimer::LLLocalBitmapTimer() : LLEventTimer(LL_LOCAL_TIMER_HEARTBEAT)
|
||||
{
|
||||
}
|
||||
|
||||
LLLocalBitmapTimer::~LLLocalBitmapTimer()
|
||||
{
|
||||
}
|
||||
|
||||
void LLLocalBitmapTimer::startTimer()
|
||||
{
|
||||
mEventTimer.start();
|
||||
}
|
||||
|
||||
void LLLocalBitmapTimer::stopTimer()
|
||||
{
|
||||
mEventTimer.stop();
|
||||
}
|
||||
|
||||
bool LLLocalBitmapTimer::isRunning()
|
||||
{
|
||||
return mEventTimer.getStarted();
|
||||
}
|
||||
|
||||
BOOL LLLocalBitmapTimer::tick()
|
||||
{
|
||||
LLLocalBitmapMgr::doUpdates();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*=======================================*/
|
||||
/* LLLocalBitmapMgr: manager class */
|
||||
/*=======================================*/
|
||||
LLLocalBitmapMgr::LLLocalBitmapMgr()
|
||||
{
|
||||
// The class is all made of static members, should i even bother instantiating?
|
||||
}
|
||||
|
||||
LLLocalBitmapMgr::~LLLocalBitmapMgr()
|
||||
{
|
||||
}
|
||||
|
||||
bool LLLocalBitmapMgr::addUnit()
|
||||
{
|
||||
bool add_successful = false;
|
||||
|
||||
LLFilePicker& picker = LLFilePicker::instance();
|
||||
if (picker.getMultipleOpenFiles(LLFilePicker::FFLOAD_IMAGE))
|
||||
{
|
||||
sTimer.stopTimer();
|
||||
|
||||
std::string filename = picker.getFirstFile();
|
||||
while(!filename.empty())
|
||||
{
|
||||
LLLocalBitmap* unit = new LLLocalBitmap(filename);
|
||||
|
||||
if (unit->getValid())
|
||||
{
|
||||
sBitmapList.push_back(unit);
|
||||
add_successful = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
llwarns << "Attempted to add invalid or unreadable image file, attempt cancelled.\n"
|
||||
<< "Filename: " << filename << llendl;
|
||||
|
||||
LLSD notif_args;
|
||||
notif_args["FNAME"] = filename;
|
||||
LLNotificationsUtil::add("LocalBitmapsVerifyFail", notif_args);
|
||||
|
||||
delete unit;
|
||||
unit = NULL;
|
||||
}
|
||||
|
||||
filename = picker.getNextFile();
|
||||
}
|
||||
|
||||
sTimer.startTimer();
|
||||
}
|
||||
|
||||
return add_successful;
|
||||
}
|
||||
|
||||
void LLLocalBitmapMgr::delUnit(LLUUID tracking_id)
|
||||
{
|
||||
if (!sBitmapList.empty())
|
||||
{
|
||||
std::vector<LLLocalBitmap*> to_delete;
|
||||
for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
|
||||
{ /* finding which ones we want deleted and making a separate list */
|
||||
LLLocalBitmap* unit = *iter;
|
||||
if (unit->getTrackingID() == tracking_id)
|
||||
{
|
||||
to_delete.push_back(unit);
|
||||
}
|
||||
}
|
||||
|
||||
for(std::vector<LLLocalBitmap*>::iterator del_iter = to_delete.begin();
|
||||
del_iter != to_delete.end(); del_iter++)
|
||||
{ /* iterating over a temporary list, hence preserving the iterator validity while deleting. */
|
||||
LLLocalBitmap* unit = *del_iter;
|
||||
sBitmapList.remove(unit);
|
||||
delete unit;
|
||||
unit = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LLUUID LLLocalBitmapMgr::getWorldID(LLUUID tracking_id)
|
||||
{
|
||||
LLUUID world_id = LLUUID::null;
|
||||
|
||||
for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
|
||||
{
|
||||
LLLocalBitmap* unit = *iter;
|
||||
if (unit->getTrackingID() == tracking_id)
|
||||
{
|
||||
world_id = unit->getWorldID();
|
||||
}
|
||||
}
|
||||
|
||||
return world_id;
|
||||
}
|
||||
|
||||
std::string LLLocalBitmapMgr::getFilename(LLUUID tracking_id)
|
||||
{
|
||||
std::string filename = "";
|
||||
|
||||
for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
|
||||
{
|
||||
LLLocalBitmap* unit = *iter;
|
||||
if (unit->getTrackingID() == tracking_id)
|
||||
{
|
||||
filename = unit->getFilename();
|
||||
}
|
||||
}
|
||||
|
||||
return filename;
|
||||
}
|
||||
|
||||
void LLLocalBitmapMgr::feedScrollList(LLScrollListCtrl* ctrl)
|
||||
{
|
||||
if (ctrl)
|
||||
{
|
||||
ctrl->clearRows();
|
||||
|
||||
if (!sBitmapList.empty())
|
||||
{
|
||||
for (local_list_iter iter = sBitmapList.begin();
|
||||
iter != sBitmapList.end(); iter++)
|
||||
{
|
||||
LLSD element;
|
||||
element["columns"][0]["column"] = "unit_name";
|
||||
element["columns"][0]["type"] = "text";
|
||||
element["columns"][0]["value"] = (*iter)->getShortName();
|
||||
|
||||
element["columns"][1]["column"] = "unit_id_HIDDEN";
|
||||
element["columns"][1]["type"] = "text";
|
||||
element["columns"][1]["value"] = (*iter)->getTrackingID();
|
||||
|
||||
ctrl->addElement(element);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void LLLocalBitmapMgr::doUpdates()
|
||||
{
|
||||
// preventing theoretical overlap in cases with huge number of loaded images.
|
||||
sTimer.stopTimer();
|
||||
sNeedsRebake = false;
|
||||
|
||||
for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
|
||||
{
|
||||
(*iter)->updateSelf();
|
||||
}
|
||||
|
||||
doRebake();
|
||||
sTimer.startTimer();
|
||||
}
|
||||
|
||||
void LLLocalBitmapMgr::setNeedsRebake()
|
||||
{
|
||||
sNeedsRebake = true;
|
||||
}
|
||||
|
||||
void LLLocalBitmapMgr::doRebake()
|
||||
{ /* separated that from doUpdates to insure a rebake can be called separately during deletion */
|
||||
if (sNeedsRebake)
|
||||
{
|
||||
gAgentAvatarp->forceBakeAllTextures(LL_LOCAL_SLAM_FOR_DEBUG);
|
||||
sNeedsRebake = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,136 @@
|
|||
/**
|
||||
* @file lllocalbitmaps.h
|
||||
* @author Vaalith Jinn
|
||||
* @brief Local Bitmaps header
|
||||
*
|
||||
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2011, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LOCALBITMAPS_H
|
||||
#define LL_LOCALBITMAPS_H
|
||||
|
||||
#include "lleventtimer.h"
|
||||
#include "llwearabletype.h"
|
||||
#include "llvoavatardefines.h"
|
||||
|
||||
class LLScrollListCtrl;
|
||||
|
||||
class LLLocalBitmap
|
||||
{
|
||||
public: /* main */
|
||||
LLLocalBitmap(std::string filename);
|
||||
~LLLocalBitmap();
|
||||
|
||||
public: /* accessors */
|
||||
std::string getFilename();
|
||||
std::string getShortName();
|
||||
LLUUID getTrackingID();
|
||||
LLUUID getWorldID();
|
||||
bool getValid();
|
||||
|
||||
public: /* self update public section */
|
||||
enum EUpdateType
|
||||
{
|
||||
UT_FIRSTUSE,
|
||||
UT_REGUPDATE
|
||||
};
|
||||
|
||||
bool updateSelf(EUpdateType = UT_REGUPDATE);
|
||||
|
||||
private: /* self update private section */
|
||||
bool decodeBitmap(LLPointer<LLImageRaw> raw);
|
||||
void replaceIDs(LLUUID old_id, LLUUID new_id);
|
||||
std::vector<LLViewerObject*> prepUpdateObjects(LLUUID old_id);
|
||||
void updateUserPrims(LLUUID old_id, LLUUID new_id);
|
||||
void updateUserSculpts(LLUUID old_id, LLUUID new_id);
|
||||
void updateUserLayers(LLUUID old_id, LLUUID new_id, LLWearableType::EType type);
|
||||
LLVOAvatarDefines::ETextureIndex getTexIndex(LLWearableType::EType type, LLVOAvatarDefines::EBakedTextureIndex baked_texind);
|
||||
|
||||
private: /* private enums */
|
||||
enum ELinkStatus
|
||||
{
|
||||
LS_ON,
|
||||
LS_BROKEN,
|
||||
};
|
||||
|
||||
enum EExtension
|
||||
{
|
||||
ET_IMG_BMP,
|
||||
ET_IMG_TGA,
|
||||
ET_IMG_JPG,
|
||||
ET_IMG_PNG
|
||||
};
|
||||
|
||||
private: /* members */
|
||||
std::string mFilename;
|
||||
std::string mShortName;
|
||||
LLUUID mTrackingID;
|
||||
LLUUID mWorldID;
|
||||
bool mValid;
|
||||
LLSD mLastModified;
|
||||
EExtension mExtension;
|
||||
ELinkStatus mLinkStatus;
|
||||
S32 mUpdateRetries;
|
||||
|
||||
};
|
||||
|
||||
class LLLocalBitmapTimer : public LLEventTimer
|
||||
{
|
||||
public:
|
||||
LLLocalBitmapTimer();
|
||||
~LLLocalBitmapTimer();
|
||||
|
||||
public:
|
||||
void startTimer();
|
||||
void stopTimer();
|
||||
bool isRunning();
|
||||
BOOL tick();
|
||||
|
||||
};
|
||||
|
||||
class LLLocalBitmapMgr
|
||||
{
|
||||
public:
|
||||
LLLocalBitmapMgr();
|
||||
~LLLocalBitmapMgr();
|
||||
|
||||
public:
|
||||
static bool addUnit();
|
||||
static void delUnit(LLUUID tracking_id);
|
||||
|
||||
static LLUUID getWorldID(LLUUID tracking_id);
|
||||
static std::string getFilename(LLUUID tracking_id);
|
||||
|
||||
static void feedScrollList(LLScrollListCtrl* ctrl);
|
||||
static void doUpdates();
|
||||
static void setNeedsRebake();
|
||||
static void doRebake();
|
||||
|
||||
private:
|
||||
static std::list<LLLocalBitmap*> sBitmapList;
|
||||
static LLLocalBitmapTimer sTimer;
|
||||
static bool sNeedsRebake;
|
||||
typedef std::list<LLLocalBitmap*>::iterator local_list_iter;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -640,7 +640,7 @@ void LLOutfitsList::onOutfitsRemovalConfirmation(const LLSD& notification, const
|
|||
|
||||
if (mSelectedOutfitUUID.notNull())
|
||||
{
|
||||
remove_category(&gInventory, mSelectedOutfitUUID);
|
||||
gInventory.removeCategory(mSelectedOutfitUUID);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@
|
|||
#include "llpreviewnotecard.h"
|
||||
|
||||
#include "llinventory.h"
|
||||
#include "llinventoryfunctions.h" // for change_item_parent()
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llassetuploadresponders.h"
|
||||
|
|
@ -494,7 +493,7 @@ void LLPreviewNotecard::deleteNotecard()
|
|||
if (item != NULL)
|
||||
{
|
||||
const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
|
||||
change_item_parent(&gInventory, item, trash_id, FALSE);
|
||||
gInventory.changeItemParent(item, trash_id, FALSE);
|
||||
}
|
||||
|
||||
closeFloater();
|
||||
|
|
|
|||
|
|
@ -67,6 +67,9 @@
|
|||
#include "lluictrlfactory.h"
|
||||
#include "lltrans.h"
|
||||
|
||||
#include "llradiogroup.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "lllocalbitmaps.h"
|
||||
|
||||
static const S32 HPAD = 4;
|
||||
static const S32 VPAD = 4;
|
||||
|
|
@ -78,6 +81,8 @@ static const F32 CONTEXT_CONE_IN_ALPHA = 0.0f;
|
|||
static const F32 CONTEXT_CONE_OUT_ALPHA = 1.f;
|
||||
static const F32 CONTEXT_FADE_TIME = 0.08f;
|
||||
|
||||
static const S32 LOCAL_TRACKING_ID_COLUMN = 1;
|
||||
|
||||
//static const char CURRENT_IMAGE_NAME[] = "Current Texture";
|
||||
//static const char WHITE_IMAGE_NAME[] = "Blank Texture";
|
||||
//static const char NO_IMAGE_NAME[] = "None";
|
||||
|
|
@ -142,6 +147,12 @@ public:
|
|||
static void onApplyImmediateCheck(LLUICtrl* ctrl, void* userdata);
|
||||
void onTextureSelect( const LLTextureEntry& te );
|
||||
|
||||
static void onModeSelect(LLUICtrl* ctrl, void *userdata);
|
||||
static void onBtnAdd(void* userdata);
|
||||
static void onBtnRemove(void* userdata);
|
||||
static void onBtnUpload(void* userdata);
|
||||
static void onLocalScrollCommit(LLUICtrl* ctrl, void* userdata);
|
||||
|
||||
protected:
|
||||
LLPointer<LLViewerTexture> mTexturep;
|
||||
LLTextureCtrl* mOwner;
|
||||
|
|
@ -169,8 +180,10 @@ protected:
|
|||
BOOL mNoCopyTextureSelected;
|
||||
F32 mContextConeOpacity;
|
||||
LLSaveFolderState mSavedFolderState;
|
||||
|
||||
BOOL mSelectedItemPinned;
|
||||
|
||||
LLRadioGroup* mModeSelector;
|
||||
LLScrollListCtrl* mLocalScrollCtrl;
|
||||
};
|
||||
|
||||
LLFloaterTexturePicker::LLFloaterTexturePicker(
|
||||
|
|
@ -437,6 +450,17 @@ BOOL LLFloaterTexturePicker::postBuild()
|
|||
mInventoryPanel->setSelection(findItemID(mImageAssetID, FALSE), TAKE_FOCUS_NO);
|
||||
}
|
||||
|
||||
mModeSelector = getChild<LLRadioGroup>("mode_selection");
|
||||
mModeSelector->setCommitCallback(onModeSelect, this);
|
||||
mModeSelector->setSelectedIndex(0, 0);
|
||||
|
||||
childSetAction("l_add_btn", LLFloaterTexturePicker::onBtnAdd, this);
|
||||
childSetAction("l_rem_btn", LLFloaterTexturePicker::onBtnRemove, this);
|
||||
childSetAction("l_upl_btn", LLFloaterTexturePicker::onBtnUpload, this);
|
||||
|
||||
mLocalScrollCtrl = getChild<LLScrollListCtrl>("l_name_list");
|
||||
mLocalScrollCtrl->setCommitCallback(onLocalScrollCommit, this);
|
||||
LLLocalBitmapMgr::feedScrollList(mLocalScrollCtrl);
|
||||
|
||||
mNoCopyTextureSelected = FALSE;
|
||||
|
||||
|
|
@ -464,7 +488,6 @@ BOOL LLFloaterTexturePicker::postBuild()
|
|||
// virtual
|
||||
void LLFloaterTexturePicker::draw()
|
||||
{
|
||||
S32 floater_header_size = getHeaderHeight();
|
||||
if (mOwner)
|
||||
{
|
||||
// draw cone of context pointing back to texture swatch
|
||||
|
|
@ -554,10 +577,7 @@ void LLFloaterTexturePicker::draw()
|
|||
}
|
||||
|
||||
// Border
|
||||
LLRect border( BORDER_PAD,
|
||||
getRect().getHeight() - floater_header_size - BORDER_PAD,
|
||||
((getMinWidth() / 2) - TEXTURE_INVENTORY_PADDING - HPAD) - BORDER_PAD,
|
||||
BORDER_PAD + FOOTER_HEIGHT + (getRect().getHeight() - getMinHeight()));
|
||||
LLRect border = getChildView("preview_widget")->getRect();
|
||||
gl_rect_2d( border, LLColor4::black, FALSE );
|
||||
|
||||
|
||||
|
|
@ -748,7 +768,15 @@ void LLFloaterTexturePicker::onBtnSelect(void* userdata)
|
|||
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
|
||||
if (self->mOwner)
|
||||
{
|
||||
self->mOwner->onFloaterCommit(LLTextureCtrl::TEXTURE_SELECT);
|
||||
LLUUID local_id = LLUUID::null;
|
||||
|
||||
if (self->mLocalScrollCtrl->getVisible() && !self->mLocalScrollCtrl->getAllSelected().empty())
|
||||
{
|
||||
LLUUID temp_id = self->mLocalScrollCtrl->getFirstSelected()->getColumn(LOCAL_TRACKING_ID_COLUMN)->getValue().asUUID();
|
||||
local_id = LLLocalBitmapMgr::getWorldID(temp_id);
|
||||
}
|
||||
|
||||
self->mOwner->onFloaterCommit(LLTextureCtrl::TEXTURE_SELECT, local_id);
|
||||
}
|
||||
self->closeFloater();
|
||||
}
|
||||
|
|
@ -791,6 +819,112 @@ void LLFloaterTexturePicker::onSelectionChange(const std::deque<LLFolderViewItem
|
|||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTexturePicker::onModeSelect(LLUICtrl* ctrl, void *userdata)
|
||||
{
|
||||
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
|
||||
bool mode = (self->mModeSelector->getSelectedIndex() == 0);
|
||||
|
||||
self->getChild<LLButton>("Default")->setVisible(mode);
|
||||
self->getChild<LLButton>("Blank")->setVisible(mode);
|
||||
self->getChild<LLButton>("None")->setVisible(mode);
|
||||
self->getChild<LLButton>("Pipette")->setVisible(mode);
|
||||
self->getChild<LLFilterEditor>("inventory search editor")->setVisible(mode);
|
||||
self->getChild<LLInventoryPanel>("inventory panel")->setVisible(mode);
|
||||
|
||||
/*self->getChild<LLCheckBox>("show_folders_check")->setVisible(mode);
|
||||
no idea under which conditions the above is even shown, needs testing. */
|
||||
|
||||
self->getChild<LLButton>("l_add_btn")->setVisible(!mode);
|
||||
self->getChild<LLButton>("l_rem_btn")->setVisible(!mode);
|
||||
self->getChild<LLButton>("l_upl_btn")->setVisible(!mode);
|
||||
self->getChild<LLScrollListCtrl>("l_name_list")->setVisible(!mode);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTexturePicker::onBtnAdd(void* userdata)
|
||||
{
|
||||
if (LLLocalBitmapMgr::addUnit() == true)
|
||||
{
|
||||
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
|
||||
LLLocalBitmapMgr::feedScrollList(self->mLocalScrollCtrl);
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTexturePicker::onBtnRemove(void* userdata)
|
||||
{
|
||||
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
|
||||
std::vector<LLScrollListItem*> selected_items = self->mLocalScrollCtrl->getAllSelected();
|
||||
|
||||
if (!selected_items.empty())
|
||||
{
|
||||
for(std::vector<LLScrollListItem*>::iterator iter = selected_items.begin();
|
||||
iter != selected_items.end(); iter++)
|
||||
{
|
||||
LLScrollListItem* list_item = *iter;
|
||||
if (list_item)
|
||||
{
|
||||
LLUUID tracking_id = list_item->getColumn(LOCAL_TRACKING_ID_COLUMN)->getValue().asUUID();
|
||||
LLLocalBitmapMgr::delUnit(tracking_id);
|
||||
}
|
||||
}
|
||||
|
||||
self->getChild<LLButton>("l_rem_btn")->setEnabled(false);
|
||||
self->getChild<LLButton>("l_upl_btn")->setEnabled(false);
|
||||
LLLocalBitmapMgr::feedScrollList(self->mLocalScrollCtrl);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTexturePicker::onBtnUpload(void* userdata)
|
||||
{
|
||||
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
|
||||
std::vector<LLScrollListItem*> selected_items = self->mLocalScrollCtrl->getAllSelected();
|
||||
|
||||
if (selected_items.empty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* currently only allows uploading one by one, picks the first item from the selection list. (not the vector!)
|
||||
in the future, it might be a good idea to check the vector size and if more than one units is selected - opt for multi-image upload. */
|
||||
|
||||
LLUUID tracking_id = (LLUUID)self->mLocalScrollCtrl->getSelectedItemLabel(LOCAL_TRACKING_ID_COLUMN);
|
||||
std::string filename = LLLocalBitmapMgr::getFilename(tracking_id);
|
||||
|
||||
if (!filename.empty())
|
||||
{
|
||||
LLFloaterReg::showInstance("upload_image", LLSD(filename));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//static
|
||||
void LLFloaterTexturePicker::onLocalScrollCommit(LLUICtrl* ctrl, void* userdata)
|
||||
{
|
||||
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
|
||||
std::vector<LLScrollListItem*> selected_items = self->mLocalScrollCtrl->getAllSelected();
|
||||
bool has_selection = !selected_items.empty();
|
||||
|
||||
self->getChild<LLButton>("l_rem_btn")->setEnabled(has_selection);
|
||||
self->getChild<LLButton>("l_upl_btn")->setEnabled(has_selection && (selected_items.size() < 2));
|
||||
/* since multiple-localbitmap upload is not implemented, upl button gets disabled if more than one is selected. */
|
||||
|
||||
if (has_selection)
|
||||
{
|
||||
LLUUID tracking_id = (LLUUID)self->mLocalScrollCtrl->getSelectedItemLabel(LOCAL_TRACKING_ID_COLUMN);
|
||||
LLUUID inworld_id = LLLocalBitmapMgr::getWorldID(tracking_id);
|
||||
self->mOwner->setImageAssetID(inworld_id);
|
||||
|
||||
if (self->childGetValue("apply_immediate_check").asBoolean())
|
||||
{
|
||||
self->mOwner->onFloaterCommit(LLTextureCtrl::TEXTURE_CHANGE, inworld_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterTexturePicker::onShowFolders(LLUICtrl* ctrl, void *user_data)
|
||||
{
|
||||
|
|
@ -1133,7 +1267,7 @@ void LLTextureCtrl::onFloaterClose()
|
|||
mFloaterHandle.markDead();
|
||||
}
|
||||
|
||||
void LLTextureCtrl::onFloaterCommit(ETexturePickOp op)
|
||||
void LLTextureCtrl::onFloaterCommit(ETexturePickOp op, LLUUID id)
|
||||
{
|
||||
LLFloaterTexturePicker* floaterp = (LLFloaterTexturePicker*)mFloaterHandle.get();
|
||||
|
||||
|
|
@ -1146,14 +1280,24 @@ void LLTextureCtrl::onFloaterCommit(ETexturePickOp op)
|
|||
// (i.e. op == TEXTURE_SELECT) or texture changes via DnD.
|
||||
else if (mCommitOnSelection || op == TEXTURE_SELECT)
|
||||
mViewModel->setDirty(); // *TODO: shouldn't we be using setValue() here?
|
||||
|
||||
if( floaterp->isDirty() )
|
||||
|
||||
if(floaterp->isDirty() || id.notNull()) // mModelView->setDirty does not work.
|
||||
{
|
||||
setTentative( FALSE );
|
||||
mImageItemID = floaterp->findItemID(floaterp->getAssetID(), FALSE);
|
||||
lldebugs << "mImageItemID: " << mImageItemID << llendl;
|
||||
mImageAssetID = floaterp->getAssetID();
|
||||
lldebugs << "mImageAssetID: " << mImageAssetID << llendl;
|
||||
|
||||
if (id.notNull())
|
||||
{
|
||||
mImageItemID = id;
|
||||
mImageAssetID = id;
|
||||
}
|
||||
else
|
||||
{
|
||||
mImageItemID = floaterp->findItemID(floaterp->getAssetID(), FALSE);
|
||||
lldebugs << "mImageItemID: " << mImageItemID << llendl;
|
||||
mImageAssetID = floaterp->getAssetID();
|
||||
lldebugs << "mImageAssetID: " << mImageAssetID << llendl;
|
||||
}
|
||||
|
||||
if (op == TEXTURE_SELECT && mOnSelectCallback)
|
||||
{
|
||||
mOnSelectCallback( this, LLSD() );
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ public:
|
|||
void closeDependentFloater();
|
||||
|
||||
void onFloaterClose();
|
||||
void onFloaterCommit(ETexturePickOp op);
|
||||
void onFloaterCommit(ETexturePickOp op, LLUUID id = LLUUID::null);
|
||||
|
||||
// This call is returned when a drag is detected. Your callback
|
||||
// should return TRUE if the drag is acceptable.
|
||||
|
|
|
|||
|
|
@ -243,8 +243,8 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
|
|||
mBtnCallbackData.push_back(userdata);
|
||||
|
||||
LLButton::Params p;
|
||||
bool is_ignore_btn = form_element["index"].asInteger() == -1;
|
||||
const LLFontGL* font = is_ignore_btn ? sFontSmall: sFont; // for ignore button in script dialog
|
||||
bool make_small_btn = form_element["index"].asInteger() == -1 || form_element["index"].asInteger() == -2;
|
||||
const LLFontGL* font = make_small_btn ? sFontSmall: sFont; // for block and ignore buttons in script dialog
|
||||
p.name(form_element["name"].asString());
|
||||
p.label(form_element["text"].asString());
|
||||
p.font(font);
|
||||
|
|
@ -264,7 +264,7 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
|
|||
p.rect.width = 1;
|
||||
p.auto_resize = true;
|
||||
}
|
||||
else if (mIsScriptDialog && is_ignore_btn)
|
||||
else if (mIsScriptDialog && make_small_btn)
|
||||
{
|
||||
// this is ignore button, make it smaller
|
||||
p.rect.height = BTN_HEIGHT_SMALL;
|
||||
|
|
|
|||
|
|
@ -181,6 +181,16 @@ static bool handleReleaseGLBufferChanged(const LLSD& newvalue)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool handleLUTBufferChanged(const LLSD& newvalue)
|
||||
{
|
||||
if (gPipeline.isInit())
|
||||
{
|
||||
gPipeline.releaseLUTBuffers();
|
||||
gPipeline.createLUTBuffers();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool handleAnisotropicChanged(const LLSD& newvalue)
|
||||
{
|
||||
LLImageGL::sGlobalUseAnisotropic = newvalue.asBoolean();
|
||||
|
|
@ -569,9 +579,9 @@ void settings_setup_listeners()
|
|||
gSavedSettings.getControl("RenderUIBuffer")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderDepthOfField")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderFSAASamples")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderSpecularResX")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderSpecularResY")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderSpecularExponent")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderSpecularResX")->getSignal()->connect(boost::bind(&handleLUTBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderSpecularResY")->getSignal()->connect(boost::bind(&handleLUTBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderSpecularExponent")->getSignal()->connect(boost::bind(&handleLUTBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderAnisotropic")->getSignal()->connect(boost::bind(&handleAnisotropicChanged, _2));
|
||||
gSavedSettings.getControl("RenderShadowResolutionScale")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
|
|
|
|||
|
|
@ -6624,31 +6624,37 @@ class LLToolsSelectedScriptAction : public view_listener_t
|
|||
std::string action = userdata.asString();
|
||||
bool mono = false;
|
||||
std::string msg, name;
|
||||
std::string title;
|
||||
if (action == "compile mono")
|
||||
{
|
||||
name = "compile_queue";
|
||||
mono = true;
|
||||
msg = "Recompile";
|
||||
title = LLTrans::getString("CompileQueueTitle");
|
||||
}
|
||||
if (action == "compile lsl")
|
||||
{
|
||||
name = "compile_queue";
|
||||
msg = "Recompile";
|
||||
title = LLTrans::getString("CompileQueueTitle");
|
||||
}
|
||||
else if (action == "reset")
|
||||
{
|
||||
name = "reset_queue";
|
||||
msg = "Reset";
|
||||
title = LLTrans::getString("ResetQueueTitle");
|
||||
}
|
||||
else if (action == "start")
|
||||
{
|
||||
name = "start_queue";
|
||||
msg = "SetRunning";
|
||||
title = LLTrans::getString("RunQueueTitle");
|
||||
}
|
||||
else if (action == "stop")
|
||||
{
|
||||
name = "stop_queue";
|
||||
msg = "SetRunningNot";
|
||||
title = LLTrans::getString("NotRunQueueTitle");
|
||||
}
|
||||
LLUUID id; id.generate();
|
||||
|
||||
|
|
@ -6657,6 +6663,7 @@ class LLToolsSelectedScriptAction : public view_listener_t
|
|||
{
|
||||
queue->setMono(mono);
|
||||
queue_actions(queue, msg);
|
||||
queue->setTitle(title);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -156,7 +156,8 @@ const std::string SCRIPT_QUESTIONS[SCRIPT_PERMISSION_EOF] =
|
|||
"AddAndRemoveJoints",
|
||||
"ChangePermissions",
|
||||
"TrackYourCamera",
|
||||
"ControlYourCamera"
|
||||
"ControlYourCamera",
|
||||
"TeleportYourAgent"
|
||||
};
|
||||
|
||||
const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] =
|
||||
|
|
@ -171,7 +172,8 @@ const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] =
|
|||
FALSE, // AddAndRemoveJoints
|
||||
FALSE, // ChangePermissions
|
||||
FALSE, // TrackYourCamera,
|
||||
FALSE // ControlYourCamera
|
||||
FALSE, // ControlYourCamera
|
||||
FALSE // TeleportYourAgent
|
||||
};
|
||||
|
||||
bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
|
||||
|
|
@ -1065,7 +1067,9 @@ public:
|
|||
// If we now try to remove the inventory item, it will cause a nested
|
||||
// notifyObservers() call, which won't work.
|
||||
// So defer moving the item to trash until viewer gets idle (in a moment).
|
||||
LLAppViewer::instance()->addOnIdleCallback(boost::bind(&LLInventoryModel::removeItem, &gInventory, mObjectID));
|
||||
// Use removeObject() rather than removeItem() because at this level,
|
||||
// the object could be either an item or a folder.
|
||||
LLAppViewer::instance()->addOnIdleCallback(boost::bind(&LLInventoryModel::removeObject, &gInventory, mObjectID));
|
||||
gInventory.removeObserver(this);
|
||||
delete this;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -878,6 +878,13 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
LLMemType mt(LLMemType::MTYPE_OBJECT);
|
||||
U32 retval = 0x0;
|
||||
|
||||
// If region is removed from the list it is also deleted.
|
||||
if (!LLWorld::instance().isRegionListed(mRegionp))
|
||||
{
|
||||
llwarns << "Updating object in an invalid region" << llendl;
|
||||
return retval;
|
||||
}
|
||||
|
||||
// Coordinates of objects on simulators are region-local.
|
||||
U64 region_handle;
|
||||
mesgsys->getU64Fast(_PREHASH_RegionData, _PREHASH_RegionHandle, region_handle);
|
||||
|
|
@ -3478,7 +3485,8 @@ LLNameValue *LLViewerObject::getNVPair(const std::string& name) const
|
|||
|
||||
void LLViewerObject::updatePositionCaches() const
|
||||
{
|
||||
if(mRegionp)
|
||||
// If region is removed from the list it is also deleted.
|
||||
if(mRegionp && LLWorld::instance().isRegionListed(mRegionp))
|
||||
{
|
||||
if (!isRoot())
|
||||
{
|
||||
|
|
@ -3495,7 +3503,8 @@ void LLViewerObject::updatePositionCaches() const
|
|||
|
||||
const LLVector3d LLViewerObject::getPositionGlobal() const
|
||||
{
|
||||
if(mRegionp)
|
||||
// If region is removed from the list it is also deleted.
|
||||
if(mRegionp && LLWorld::instance().isRegionListed(mRegionp))
|
||||
{
|
||||
LLVector3d position_global = mRegionp->getPosGlobalFromRegion(getPositionRegion());
|
||||
|
||||
|
|
@ -3514,7 +3523,8 @@ const LLVector3d LLViewerObject::getPositionGlobal() const
|
|||
|
||||
const LLVector3 &LLViewerObject::getPositionAgent() const
|
||||
{
|
||||
if (mRegionp)
|
||||
// If region is removed from the list it is also deleted.
|
||||
if(mRegionp && LLWorld::instance().isRegionListed(mRegionp))
|
||||
{
|
||||
if (mDrawable.notNull() && (!mDrawable->isRoot() && getParent()))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ class LLViewerTextureList
|
|||
|
||||
friend class LLTextureView;
|
||||
friend class LLViewerTextureManager;
|
||||
friend class LLLocalBitmap;
|
||||
|
||||
public:
|
||||
static BOOL createUploadFile(const std::string& filename, const std::string& out_filename, const U8 codec);
|
||||
|
|
|
|||
|
|
@ -7537,12 +7537,16 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )
|
|||
void LLVOAvatar::dumpArchetypeXML( void* )
|
||||
{
|
||||
LLAPRFile outfile;
|
||||
outfile.open(gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,"new archetype.xml"), LL_APR_WB );
|
||||
apr_file_t* file = outfile.getFileHandle() ;
|
||||
outfile.open(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,"new archetype.xml"), LL_APR_WB );
|
||||
apr_file_t* file = outfile.getFileHandle();
|
||||
if (!file)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
llinfos << "xmlfile write handle obtained : " << gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,"new archetype.xml") << llendl;
|
||||
}
|
||||
|
||||
apr_file_printf( file, "<?xml version=\"1.0\" encoding=\"US-ASCII\" standalone=\"yes\"?>\n" );
|
||||
apr_file_printf( file, "<linden_genepool version=\"1.0\">\n" );
|
||||
|
|
@ -7582,6 +7586,11 @@ void LLVOAvatar::dumpArchetypeXML( void* )
|
|||
}
|
||||
apr_file_printf( file, "\t</archetype>\n" );
|
||||
apr_file_printf( file, "\n</linden_genepool>\n" );
|
||||
//explictly close the file if it is still open which it should be
|
||||
if (file)
|
||||
{
|
||||
outfile.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -810,6 +810,20 @@ const LLLocalTextureObject* LLWearable::getLocalTextureObject(S32 index) const
|
|||
return NULL;
|
||||
}
|
||||
|
||||
std::vector<LLLocalTextureObject*> LLWearable::getLocalTextureListSeq()
|
||||
{
|
||||
std::vector<LLLocalTextureObject*> result;
|
||||
|
||||
for(te_map_t::const_iterator iter = mTEMap.begin();
|
||||
iter != mTEMap.end(); iter++)
|
||||
{
|
||||
LLLocalTextureObject* lto = iter->second;
|
||||
result.push_back(lto);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void LLWearable::setLocalTextureObject(S32 index, LLLocalTextureObject <o)
|
||||
{
|
||||
if( mTEMap.find(index) != mTEMap.end() )
|
||||
|
|
|
|||
|
|
@ -106,6 +106,7 @@ public:
|
|||
|
||||
LLLocalTextureObject* getLocalTextureObject(S32 index);
|
||||
const LLLocalTextureObject* getLocalTextureObject(S32 index) const;
|
||||
std::vector<LLLocalTextureObject*> getLocalTextureListSeq();
|
||||
|
||||
void setLocalTextureObject(S32 index, LLLocalTextureObject <o);
|
||||
void addVisualParam(LLVisualParam *param);
|
||||
|
|
|
|||
|
|
@ -1188,20 +1188,23 @@ void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positi
|
|||
iter != LLCharacter::sInstances.end(); ++iter)
|
||||
{
|
||||
LLVOAvatar* pVOAvatar = (LLVOAvatar*) *iter;
|
||||
LLVector3d pos_global = pVOAvatar->getPositionGlobal();
|
||||
LLUUID uuid = pVOAvatar->getID();
|
||||
if( !pVOAvatar->isDead()
|
||||
&& !pVOAvatar->isSelf()
|
||||
&& !uuid.isNull() &&
|
||||
dist_vec_squared(pos_global, relative_to) <= radius_squared)
|
||||
|
||||
if (!pVOAvatar->isDead() && !pVOAvatar->isSelf())
|
||||
{
|
||||
if(positions != NULL)
|
||||
LLVector3d pos_global = pVOAvatar->getPositionGlobal();
|
||||
LLUUID uuid = pVOAvatar->getID();
|
||||
|
||||
if (!uuid.isNull()
|
||||
&& dist_vec_squared(pos_global, relative_to) <= radius_squared)
|
||||
{
|
||||
positions->push_back(pos_global);
|
||||
}
|
||||
if(avatar_ids !=NULL)
|
||||
{
|
||||
avatar_ids->push_back(uuid);
|
||||
if(positions != NULL)
|
||||
{
|
||||
positions->push_back(pos_global);
|
||||
}
|
||||
if(avatar_ids !=NULL)
|
||||
{
|
||||
avatar_ids->push_back(uuid);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1232,6 +1235,11 @@ void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positi
|
|||
}
|
||||
}
|
||||
|
||||
bool LLWorld::isRegionListed(const LLViewerRegion* region) const
|
||||
{
|
||||
region_list_t::const_iterator it = find(mRegionList.begin(), mRegionList.end(), region);
|
||||
return it != mRegionList.end();
|
||||
}
|
||||
|
||||
LLHTTPRegistration<LLEstablishAgentCommunication>
|
||||
gHTTPRegistrationEstablishAgentCommunication(
|
||||
|
|
|
|||
|
|
@ -157,6 +157,11 @@ public:
|
|||
std::vector<LLVector3d>* positions = NULL,
|
||||
const LLVector3d& relative_to = LLVector3d(), F32 radius = FLT_MAX) const;
|
||||
|
||||
// Returns 'true' if the region is in mRegionList,
|
||||
// 'false' if the region has been removed due to region change
|
||||
// or if the circuit to this simulator had been lost.
|
||||
bool isRegionListed(const LLViewerRegion* region) const;
|
||||
|
||||
private:
|
||||
region_list_t mActiveRegionList;
|
||||
region_list_t mRegionList;
|
||||
|
|
|
|||
|
|
@ -1037,11 +1037,7 @@ void LLPipeline::releaseGLBuffers()
|
|||
mTrueNoiseMap = 0;
|
||||
}
|
||||
|
||||
if (mLightFunc)
|
||||
{
|
||||
LLImageGL::deleteTextures(1, &mLightFunc);
|
||||
mLightFunc = 0;
|
||||
}
|
||||
releaseLUTBuffers();
|
||||
|
||||
mWaterRef.release();
|
||||
mWaterDis.release();
|
||||
|
|
@ -1057,6 +1053,15 @@ void LLPipeline::releaseGLBuffers()
|
|||
LLVOAvatar::resetImpostors();
|
||||
}
|
||||
|
||||
void LLPipeline::releaseLUTBuffers()
|
||||
{
|
||||
if (mLightFunc)
|
||||
{
|
||||
LLImageGL::deleteTextures(1, &mLightFunc);
|
||||
mLightFunc = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void LLPipeline::releaseScreenBuffers()
|
||||
{
|
||||
mUIScreen.release();
|
||||
|
|
@ -1152,50 +1157,69 @@ void LLPipeline::createGLBuffers()
|
|||
gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
|
||||
}
|
||||
|
||||
if (!mLightFunc)
|
||||
{
|
||||
U32 lightResX = gSavedSettings.getU32("RenderSpecularResX");
|
||||
U32 lightResY = gSavedSettings.getU32("RenderSpecularResY");
|
||||
U8* lg = new U8[lightResX*lightResY];
|
||||
|
||||
for (U32 y = 0; y < lightResY; ++y)
|
||||
{
|
||||
for (U32 x = 0; x < lightResX; ++x)
|
||||
{
|
||||
//spec func
|
||||
F32 sa = (F32) x/(lightResX-1);
|
||||
F32 spec = (F32) y/(lightResY-1);
|
||||
//lg[y*lightResX+x] = (U8) (powf(sa, 128.f*spec*spec)*255);
|
||||
|
||||
//F32 sp = acosf(sa)/(1.f-spec);
|
||||
|
||||
sa = powf(sa, gSavedSettings.getF32("RenderSpecularExponent"));
|
||||
F32 a = acosf(sa*0.25f+0.75f);
|
||||
F32 m = llmax(0.5f-spec*0.5f, 0.001f);
|
||||
F32 t2 = tanf(a)/m;
|
||||
t2 *= t2;
|
||||
|
||||
F32 c4a = (3.f+4.f*cosf(2.f*a)+cosf(4.f*a))/8.f;
|
||||
F32 bd = 1.f/(4.f*m*m*c4a)*powf(F_E, -t2);
|
||||
|
||||
lg[y*lightResX+x] = (U8) (llclamp(bd, 0.f, 1.f)*255);
|
||||
}
|
||||
}
|
||||
|
||||
LLImageGL::generateTextures(1, &mLightFunc);
|
||||
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mLightFunc);
|
||||
LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_R8, lightResX, lightResY, GL_RED, GL_UNSIGNED_BYTE, lg);
|
||||
gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_TRILINEAR);
|
||||
|
||||
delete [] lg;
|
||||
}
|
||||
createLUTBuffers();
|
||||
}
|
||||
|
||||
gBumpImageList.restoreGL();
|
||||
}
|
||||
|
||||
void LLPipeline::restoreGL()
|
||||
void LLPipeline::createLUTBuffers()
|
||||
{
|
||||
if (sRenderDeferred)
|
||||
{
|
||||
if (!mLightFunc)
|
||||
{
|
||||
U32 lightResX = gSavedSettings.getU32("RenderSpecularResX");
|
||||
U32 lightResY = gSavedSettings.getU32("RenderSpecularResY");
|
||||
U8* ls = new U8[lightResX*lightResY];
|
||||
F32 specExp = gSavedSettings.getF32("RenderSpecularExponent");
|
||||
// Calculate the (normalized) Blinn-Phong specular lookup texture.
|
||||
for (U32 y = 0; y < lightResY; ++y)
|
||||
{
|
||||
for (U32 x = 0; x < lightResX; ++x)
|
||||
{
|
||||
ls[y*lightResX+x] = 0;
|
||||
F32 sa = (F32) x/(lightResX-1);
|
||||
F32 spec = (F32) y/(lightResY-1);
|
||||
F32 n = spec * spec * specExp;
|
||||
|
||||
// Nothing special here. Just your typical blinn-phong term.
|
||||
spec = powf(sa, n);
|
||||
|
||||
// Apply our normalization function.
|
||||
// Note: This is the full equation that applies the full normalization curve, not an approximation.
|
||||
// This is fine, given we only need to create our LUT once per buffer initialization.
|
||||
// The only trade off is we have a really low dynamic range.
|
||||
// This means we have to account for things not being able to exceed 0 to 1 in our shaders.
|
||||
spec *= (((n + 2) * (n + 4)) / (8 * F_PI * (powf(2, -n/2) + n)));
|
||||
|
||||
// Always sample at a 1.0/2.2 curve.
|
||||
// This "Gamma corrects" our specular term, boosting our lower exponent reflections.
|
||||
spec = powf(spec, 1.f/2.2f);
|
||||
|
||||
// Easy fix for our dynamic range problem: divide by 6 here, multiply by 6 in our shaders.
|
||||
// This allows for our specular term to exceed a value of 1 in our shaders.
|
||||
// This is something that can be important for energy conserving specular models where higher exponents can result in highlights that exceed a range of 0 to 1.
|
||||
// Technically, we could just use an R16F texture, but driver support for R16F textures can be somewhat spotty at times.
|
||||
// This works remarkably well for higher specular exponents, though banding can sometimes be seen on lower exponents.
|
||||
// Combined with a bit of noise and trilinear filtering, the banding is hardly noticable.
|
||||
ls[y*lightResX+x] = (U8)(llclamp(spec * (1.f / 6), 0.f, 1.f) * 255);
|
||||
}
|
||||
}
|
||||
|
||||
LLImageGL::generateTextures(1, &mLightFunc);
|
||||
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mLightFunc);
|
||||
LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_R8, lightResX, lightResY, GL_RED, GL_UNSIGNED_BYTE, ls);
|
||||
gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_TRILINEAR);
|
||||
|
||||
delete [] ls;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LLPipeline::restoreGL()
|
||||
{
|
||||
LLMemType mt_cb(LLMemType::MTYPE_PIPELINE_RESTORE_GL);
|
||||
assertInitialized();
|
||||
|
|
|
|||
|
|
@ -114,8 +114,10 @@ public:
|
|||
void doResetVertexBuffers();
|
||||
void resizeScreenTexture();
|
||||
void releaseGLBuffers();
|
||||
void releaseLUTBuffers();
|
||||
void releaseScreenBuffers();
|
||||
void createGLBuffers();
|
||||
void createLUTBuffers();
|
||||
|
||||
void allocateScreenBuffer(U32 resX, U32 resY);
|
||||
bool allocateScreenBuffer(U32 resX, U32 resY, U32 samples);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Anim Preview" title="ANIMATION.ANIM">
|
||||
<text name="name_label">
|
||||
Name:
|
||||
</text>
|
||||
<text name="description_label">
|
||||
Beschreibung:
|
||||
</text>
|
||||
<button label="Hochladen (L$ [AMOUNT])" name="ok_btn"/>
|
||||
<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
|
||||
</floater>
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Animation Preview">
|
||||
<floater.string name="failed_to_initialize">
|
||||
Bewegung konnte nicht initialisiert werden
|
||||
</floater.string>
|
||||
<floater.string name="anim_too_long">
|
||||
Animationsdatei ist [LENGTH] Sekunden lang.
|
||||
|
||||
Maximal erlaubt sind [MAX_LENGTH] Sekunden.
|
||||
</floater.string>
|
||||
<floater.string name="failed_file_read">
|
||||
Animationsdatei kann nicht gelesen werden.
|
||||
|
||||
[STATUS]
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_OK">
|
||||
OK
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_EOF">
|
||||
Vorzeitiges Dateiende.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_CONSTRAINT">
|
||||
Constraint-Definition kann nicht gelesen werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_FILE">
|
||||
BVH-Datei kann nicht geöffnet werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_HIER">
|
||||
Ungültige HIERARCHY-Kopfzeile.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_JOINT">
|
||||
ROOT oder JOINT nicht gefunden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_NAME">
|
||||
JOINT-Name nicht erfasst.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_OFFSET">
|
||||
OFFSET nicht gefunden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_CHANNELS">
|
||||
CHANNELS nicht gefunden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_ROTATION">
|
||||
Rotationsreihenfolge kann nicht erfasst werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_AXIS">
|
||||
Rotationsachse kann nicht erfasst werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_MOTION">
|
||||
MOTION nicht gefunden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_FRAMES">
|
||||
Anzahl der Bilder kann nicht erfasst werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_FRAME_TIME">
|
||||
Bildzeit kann nicht erfasst werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_POS">
|
||||
Positionswerte können nicht erfasst werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_ROT">
|
||||
Rotationswerte können nicht erfasst werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_FILE">
|
||||
Transformationsdatei kann nicht geöffnet werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_HEADER">
|
||||
Transformationskopfzeile kann nicht gelesen werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_NAME">
|
||||
Transformationsnamen können nicht gelesen werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_IGNORE">
|
||||
Ignorieren-Transformationswert kann nicht gelesen werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_RELATIVE">
|
||||
Relativer Transformationswert kann nicht gelesen werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_OUTNAME">
|
||||
Outname-Transformationswert kann nicht gelesen werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_MATRIX">
|
||||
Transformationsmatrix kann nicht gelesen werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_MERGECHILD">
|
||||
Mergechild-Name kann nicht erfasst werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_MERGEPARENT">
|
||||
Mergeparent-Name kann nicht erfasst werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_PRIORITY">
|
||||
Priority-Wert kann nicht erfasst werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_LOOP">
|
||||
Loop-Wert kann nicht erfasst werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_EASEIN">
|
||||
EaseIn-Werte können nicht erfasst werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_EASEOUT">
|
||||
EaseOut-Werte können nicht erfasst werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_HAND">
|
||||
Hand-Morph-Wert kann nicht erfasst werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_EMOTE">
|
||||
Emote-Name kann nicht gelesen werden.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_BAD_ROOT">
|
||||
Falscher Root-Joint-Name, „hip“ verwenden.
|
||||
</floater.string>
|
||||
<text name="name_label">
|
||||
Name:
|
||||
</text>
|
||||
<text name="description_label">
|
||||
Beschreibung:
|
||||
</text>
|
||||
<spinner label="Priorität" name="priority" tool_tip="Steuert, welche Animationen von dieser Animation überschrieben werden können"/>
|
||||
<check_box label="Schleife" name="loop_check" tool_tip="Erzeugt eine Animationsschleife"/>
|
||||
<spinner label="Ein (%)" name="loop_in_point" tool_tip="Anfang einer Animationsschleife festlegen"/>
|
||||
<spinner label="Aus (%)" name="loop_out_point" tool_tip="Ende einer Animationsschleife festlegen"/>
|
||||
<text name="hand_label">
|
||||
Handhaltung
|
||||
</text>
|
||||
<combo_box name="hand_pose_combo" tool_tip="Steuert während der Animation die Bewegung der Hände">
|
||||
<combo_box.item label="Dehnen" name="Spread"/>
|
||||
<combo_box.item label="Entspannt" name="Relaxed"/>
|
||||
<combo_box.item label="Beide zeigen" name="PointBoth"/>
|
||||
<combo_box.item label="Faust" name="Fist"/>
|
||||
<combo_box.item label="Links entspannt" name="RelaxedLeft"/>
|
||||
<combo_box.item label="Nach links zeigen" name="PointLeft"/>
|
||||
<combo_box.item label="Linke Faust" name="FistLeft"/>
|
||||
<combo_box.item label="Rechts entspannt" name="RelaxedRight"/>
|
||||
<combo_box.item label="Nach rechts zeigen" name="PointRight"/>
|
||||
<combo_box.item label="Rechte Faust" name="FistRight"/>
|
||||
<combo_box.item label="Rechts salutieren" name="SaluteRight"/>
|
||||
<combo_box.item label="Tippen" name="Typing"/>
|
||||
<combo_box.item label="Friedensgeste rechts" name="PeaceRight"/>
|
||||
</combo_box>
|
||||
<text name="emote_label">
|
||||
Ausdruck
|
||||
</text>
|
||||
<combo_box name="emote_combo" tool_tip="Steuert Gesichtsregungen während der Animation">
|
||||
<item label="(Keine)" name="[None]" value=""/>
|
||||
<item label="Aaaaah" name="Aaaaah" value="Aaaaah"/>
|
||||
<item label="Ängstlich" name="Afraid" value="Ängstlich"/>
|
||||
<item label="Verärgert" name="Angry" value="Verärgert"/>
|
||||
<item label="Grinst" name="BigSmile" value="Grinst"/>
|
||||
<item label="Gelangweilt" name="Bored" value="Gelangweilt"/>
|
||||
<item label="Weinen" name="Cry" value="Weinen"/>
|
||||
<item label="Verachtung" name="Disdain" value="Verachtung"/>
|
||||
<item label="Verlegen" name="Embarrassed" value="Verlegen"/>
|
||||
<item label="Stirnrunzeln" name="Frown" value="Stirnrunzeln"/>
|
||||
<item label="Küssen" name="Kiss" value="Küssen"/>
|
||||
<item label="Lachen" name="Laugh" value="Lachen"/>
|
||||
<item label="Bäääh" name="Plllppt" value="Bäääh"/>
|
||||
<item label="Angewidert" name="Repulsed" value="Angewidert"/>
|
||||
<item label="Traurig" name="Sad" value="Traurig"/>
|
||||
<item label="Achselzucken" name="Shrug" value="Achselzucken"/>
|
||||
<item label="Lächeln" name="Smile" value="Lächeln"/>
|
||||
<item label="Überraschung" name="Surprise" value="Überraschung"/>
|
||||
<item label="Zwinkern" name="Wink" value="Zwinkern"/>
|
||||
<item label="Sorgenvoll" name="Worry" value="Sorgenvoll"/>
|
||||
</combo_box>
|
||||
<text name="preview_label">
|
||||
Vorschau während:
|
||||
</text>
|
||||
<combo_box name="preview_base_anim" tool_tip="Hiermit können Sie das Verhalten Ihres Avatars testen, während Ihr Avatar normale Bewegungen ausführt.">
|
||||
<item label="Stehen" name="Standing" value="Stehen"/>
|
||||
<item label="Gehen" name="Walking" value="Gehen"/>
|
||||
<item label="Sitzen" name="Sitting" value="Sitzen"/>
|
||||
<item label="Fliegen" name="Flying" value="Fliegen"/>
|
||||
</combo_box>
|
||||
<spinner label="Einblenden (s)" name="ease_in_time" tool_tip="Einblendungszeit für Animationen (in Sekunden)"/>
|
||||
<spinner label="Ausblenden (s)" name="ease_out_time" tool_tip="Ausblendungszeit für Animationen (in Sekunden)"/>
|
||||
<button name="play_btn" tool_tip="Animation abspielen"/>
|
||||
<button name="pause_btn" tool_tip="Animation unterbrechen"/>
|
||||
<button name="stop_btn" tool_tip="Animation anhalten"/>
|
||||
<text name="bad_animation_text">
|
||||
Animationsdatei kann nicht gelesen werden.
|
||||
|
||||
Wir empfehlen exportierte BVH-Dateien aus Poser 4.
|
||||
</text>
|
||||
<button label="Hochladen (L$ [AMOUNT])" name="ok_btn"/>
|
||||
<button label="Abbrechen" name="cancel_btn"/>
|
||||
</floater>
|
||||
|
|
@ -7,6 +7,6 @@
|
|||
Beschreibung:
|
||||
</text>
|
||||
<line_editor left="108" name="desc" width="160"/>
|
||||
<button label="Inworld abspielen" label_selected="Stopp" name="Anim play btn" tool_tip="Diese Animation so wiedergeben, dass andere sie sehen können." width="116"/>
|
||||
<button label="Lokal abspielen" label_selected="Stopp" left="171" name="Anim audition btn" tool_tip="Diese Animation so wiedergeben, dass nur Sie sie sehen." width="116"/>
|
||||
<button label="Inworld abspielen" label_selected="Stopp" name="Inworld" tool_tip="Diese Animation so wiedergeben, dass andere sie sehen können."/>
|
||||
<button label="Lokal wiedergeben" label_selected="Stopp" name="Locally" tool_tip="Diese Animation so wiedergeben, dass nur Sie sie sehen."/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Test Floater" title="TEST-FENSTER"/>
|
||||
|
|
@ -1,5 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="toolbox floater" short_title="BAU-WERKZEUGE" title="">
|
||||
<floater.string name="grid_screen_text">
|
||||
Bildschirm
|
||||
</floater.string>
|
||||
<floater.string name="grid_local_text">
|
||||
Lokal
|
||||
</floater.string>
|
||||
<floater.string name="grid_world_text">
|
||||
Welt
|
||||
</floater.string>
|
||||
<floater.string name="grid_reference_text">
|
||||
Referenz
|
||||
</floater.string>
|
||||
<floater.string name="grid_attachment_text">
|
||||
Anhang
|
||||
</floater.string>
|
||||
<floater.string name="status_rotate">
|
||||
An den farbigen Bändern ziehen, um das Objekt zu drehen
|
||||
</floater.string>
|
||||
|
|
@ -63,7 +78,12 @@
|
|||
</text>
|
||||
<check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures" top_pad="-5"/>
|
||||
<check_box initial_value="true" label="Einrasten" name="checkbox snap to grid" top_pad="15"/>
|
||||
<button label="Optionen..." label_selected="Optionen..." name="Options..." tool_tip="Mehr Raster-Optionen anzeigen"/>
|
||||
<combo_box name="combobox grid mode" tool_tip="Wählen Sie das gewünschte Rasterlineal zum Positionieren des Objekts aus.">
|
||||
<combo_box.item label="Welt" name="World"/>
|
||||
<combo_box.item label="Lokal" name="Local"/>
|
||||
<combo_box.item label="Referenz" name="Reference"/>
|
||||
</combo_box>
|
||||
<button label="" label_selected="Optionen..." name="Options..." tool_tip="Mehr Raster-Optionen anzeigen"/>
|
||||
<button label="" label_selected="" name="ToolCube" tool_tip="Würfel"/>
|
||||
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
|
||||
<button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
|
||||
|
|
|
|||
|
|
@ -42,13 +42,16 @@
|
|||
<string name="effect_Demon">
|
||||
Dämon
|
||||
</string>
|
||||
<string name="effect_Female Elf">
|
||||
Weibliche Elfe
|
||||
</string>
|
||||
<string name="effect_Flirty">
|
||||
Kokett
|
||||
</string>
|
||||
<string name="effect_Foxy">
|
||||
Attraktiv
|
||||
</string>
|
||||
<string name="effect_Halloween_2010_Bonus">
|
||||
<string name="effect_Halloween 2010 Bonus">
|
||||
Bonus_Halloween_2010
|
||||
</string>
|
||||
<string name="effect_Helium">
|
||||
|
|
@ -57,9 +60,18 @@
|
|||
<string name="effect_Husky">
|
||||
Rauchig
|
||||
</string>
|
||||
<string name="effect_Husky Whisper">
|
||||
Rauchiges Flüstern
|
||||
</string>
|
||||
<string name="effect_Intercom">
|
||||
Intercom
|
||||
</string>
|
||||
<string name="effect_Julia">
|
||||
Julia
|
||||
</string>
|
||||
<string name="effect_Lo Lilt">
|
||||
Leises Trällern
|
||||
</string>
|
||||
<string name="effect_Macho">
|
||||
Macho
|
||||
</string>
|
||||
|
|
@ -69,6 +81,9 @@
|
|||
<string name="effect_Mini">
|
||||
Mini
|
||||
</string>
|
||||
<string name="effect_Model">
|
||||
Modell
|
||||
</string>
|
||||
<string name="effect_Nano">
|
||||
Nano
|
||||
</string>
|
||||
|
|
@ -90,6 +105,9 @@
|
|||
<string name="effect_Roxanne">
|
||||
Roxanne
|
||||
</string>
|
||||
<string name="effect_Rumble">
|
||||
Rumpeln
|
||||
</string>
|
||||
<string name="effect_Sabrina">
|
||||
Sabrina
|
||||
</string>
|
||||
|
|
@ -102,6 +120,9 @@
|
|||
<string name="effect_Shorty">
|
||||
Shorty
|
||||
</string>
|
||||
<string name="effect_Smaller">
|
||||
Kleiner
|
||||
</string>
|
||||
<string name="effect_Sneaky">
|
||||
Hinterhältig
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@
|
|||
<menu_item_call label="Eigenschaften" name="Properties"/>
|
||||
<menu_item_call label="Umbenennen" name="Rename"/>
|
||||
<menu_item_call label="Asset-UUID kopieren" name="Copy Asset UUID"/>
|
||||
<menu_item_call label="Ausschneiden" name="Cut"/>
|
||||
<menu_item_call label="Kopieren" name="Copy"/>
|
||||
<menu_item_call label="Einfügen" name="Paste"/>
|
||||
<menu_item_call label="Als Link einfügen" name="Paste As Link"/>
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
<menu_item_call label="Beschäftigt" name="Set Busy"/>
|
||||
</menu>
|
||||
<menu_item_call label="L$ kaufen..." name="Buy and Sell L$"/>
|
||||
<menu_item_call label="Händler-Outbox..." name="MerchantOutbox"/>
|
||||
<menu_item_call label="Kontoübersicht..." name="Manage My Account">
|
||||
<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=de"/>
|
||||
</menu_item_call>
|
||||
|
|
@ -393,9 +394,16 @@
|
|||
<menu_item_check label="HTTP-Texturen" name="HTTP Textures"/>
|
||||
<menu_item_check label="HTTP-Inventar" name="HTTP Inventory"/>
|
||||
<menu_item_call label="Bilder komprimieren" name="Compress Images"/>
|
||||
<menu_item_call label="Visual Leak Detector aktivieren" name="Enable Visual Leak Detector"/>
|
||||
<menu_item_check label="Ausgabe Fehlerbeseitigung ausgeben" name="Output Debug Minidump"/>
|
||||
<menu_item_check label="Bei nächster Ausführung Fenster öffnen" name="Console Window"/>
|
||||
<menu label="Protokollierungsstufe festlegen" name="Set Logging Level"/>
|
||||
<menu label="Protokollierungsstufe festlegen" name="Set Logging Level">
|
||||
<menu_item_check label="Debug" name="Debug"/>
|
||||
<menu_item_check label="Info" name="Info"/>
|
||||
<menu_item_check label="Warnung" name="Warning"/>
|
||||
<menu_item_check label="Fehler" name="Error"/>
|
||||
<menu_item_check label="Keine" name="None"/>
|
||||
</menu>
|
||||
<menu_item_call label="Admin-Status anfordern" name="Request Admin Options"/>
|
||||
<menu_item_call label="Admin-Status verlassen" name="Leave Admin Options"/>
|
||||
<menu_item_check label="Admin-Menü anzeigen" name="View Admin Options"/>
|
||||
|
|
|
|||
|
|
@ -677,7 +677,7 @@ Erwartet wurde [VALIDS]
|
|||
Ausgabedatei konnte nicht erstellt werden: [FILE]
|
||||
</notification>
|
||||
<notification name="DoNotSupportBulkAnimationUpload">
|
||||
Der Mehrfach-Upload von Animationsdateien wird zurzeit von [APP_NAME] nicht unterstützt.
|
||||
Der Bulk-Upload von BVH-Animationsdateien wird zurzeit von [APP_NAME] nicht unterstützt.
|
||||
</notification>
|
||||
<notification name="CannotUploadReason">
|
||||
Datei [FILE] kann aus folgendem Grund nicht hochgeladen werden: [REASON]
|
||||
|
|
@ -2644,16 +2644,16 @@ Anfrage gestatten?
|
|||
„<nolink>[TITLE]</nolink>“ von [NAME]
|
||||
[MESSAGE]
|
||||
<form name="form">
|
||||
<button name="Mute" text="Blockieren"/>
|
||||
<button name="Ignore" text="Ignorieren"/>
|
||||
<button name="Client_Side_Mute" text="Blockieren"/>
|
||||
<button name="Client_Side_Ignore" text="Ignorieren"/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification name="ScriptDialogGroup">
|
||||
„<nolink>[TITLE]</nolink>“ von [GROUPNAME]
|
||||
[MESSAGE]
|
||||
<form name="form">
|
||||
<button name="Mute" text="Blockieren"/>
|
||||
<button name="Ignore" text="Ignorieren"/>
|
||||
<button name="Client_Side_Mute" text="Blockieren"/>
|
||||
<button name="Client_Side_Ignore" text="Ignorieren"/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification name="BuyLindenDollarSuccess">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="nearby_chat">
|
||||
<check_box label="Chat übersetzen" name="translate_chat_checkbox"/>
|
||||
<layout_stack name="stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Chat übersetzen" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@
|
|||
<text name="inbox_fresh_new_count">
|
||||
[NUM] neu
|
||||
</text>
|
||||
<panel tool_tip="Drag and drop items to your inventory to manage and use them">
|
||||
<panel name="inbox_inventory_placeholder_panel" tool_tip="Artikel zur Verwendung in Ihr Inventar ziehen">
|
||||
<text name="inbox_inventory_placeholder">
|
||||
Einkäufe auf dem Marktplatz werden hierher geliefert.
|
||||
Einkäufe aus dem Marktplatz werden hierher geliefert.
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -835,6 +835,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
|
|||
<string name="anim_yes_head">
|
||||
Ja
|
||||
</string>
|
||||
<string name="multiple_textures">
|
||||
Mehrfach
|
||||
</string>
|
||||
<string name="texture_loading">
|
||||
Wird geladen...
|
||||
</string>
|
||||
|
|
@ -1235,7 +1238,7 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
|
|||
Sie haben keine Kopie dieser Textur in Ihrem Inventar.
|
||||
</string>
|
||||
<string name="InventoryInboxNoItems">
|
||||
Hier erscheinen bestimmte Artikel, die Sie erhalten, wie z. B. Premium-Geschenke. Sie können diese dann in Ihr Inventar ziehen.
|
||||
Einkäufe aus dem Marktplatz erscheinen hier. Sie können diese dann zur Verwendung in Ihr Inventar ziehen.
|
||||
</string>
|
||||
<string name="MarketplaceURL">
|
||||
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
|
||||
|
|
@ -3921,6 +3924,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
|
|||
<string name="Saved_message">
|
||||
(Gespeichert am [LONG_TIMESTAMP])
|
||||
</string>
|
||||
<string name="IM_unblock_only_groups_friends">
|
||||
Wenn Sie diese Meldung sehen, müssen Sie unter „Einstellungen“ > „Privatsphäre“ die Option „Nur IMs und Anrufe von Freunden oder Gruppen durchstellen“ deaktivieren.
|
||||
</string>
|
||||
<string name="answered_call">
|
||||
Ihr Anruf wurde entgegengenommen
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<floater
|
||||
legacy_header_height="18"
|
||||
can_minimize="false"
|
||||
height="440"
|
||||
height="460"
|
||||
layout="topleft"
|
||||
name="Image Preview"
|
||||
help_topic="image_preview"
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
bottom="225"
|
||||
bottom="250"
|
||||
height="45"
|
||||
word_wrap="true"
|
||||
follows="top|left"
|
||||
|
|
@ -137,7 +137,7 @@ Try saving image as 24 bit Targa (.tga).
|
|||
layout="topleft"
|
||||
left="165"
|
||||
name="cancel_btn"
|
||||
top="410"
|
||||
top="430"
|
||||
width="125" />
|
||||
<button
|
||||
follows="bottom|left"
|
||||
|
|
|
|||
|
|
@ -3,15 +3,17 @@
|
|||
legacy_header_height="18"
|
||||
can_minimize="false"
|
||||
can_resize="true"
|
||||
height="290"
|
||||
height="330"
|
||||
layout="topleft"
|
||||
min_height="290"
|
||||
min_height="330"
|
||||
min_width="410"
|
||||
name="texture picker"
|
||||
help_topic="texture_picker"
|
||||
title="PICK: TEXTURE"
|
||||
width="410">
|
||||
<floater.string
|
||||
|
||||
<!-- top static -->
|
||||
<floater.string
|
||||
name="choose_picture">
|
||||
Click to choose a picture
|
||||
</floater.string>
|
||||
|
|
@ -19,6 +21,16 @@
|
|||
name="pick title">
|
||||
Pick:
|
||||
</floater.string>
|
||||
|
||||
<view
|
||||
left="4"
|
||||
top="20"
|
||||
name="preview_widget"
|
||||
height="165"
|
||||
width="165"
|
||||
follows="left|top"
|
||||
/>
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -34,70 +46,94 @@
|
|||
width="163">
|
||||
Multiple textures
|
||||
</text>
|
||||
|
||||
<!-- mode selector -->
|
||||
<radio_group
|
||||
control_name="mode_selection"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left="18"
|
||||
top_pad="80"
|
||||
name="mode_selection"
|
||||
follows="left|top">
|
||||
<radio_item
|
||||
label="Inventory"
|
||||
name="inventory"
|
||||
top_delta="20"
|
||||
layout="topleft"
|
||||
height="16"
|
||||
left="0"
|
||||
value="0"
|
||||
width="80" />
|
||||
<radio_item
|
||||
label="Local"
|
||||
left_pad="0"
|
||||
layout="topleft"
|
||||
top_delta="0"
|
||||
height="16"
|
||||
name="local"
|
||||
value="1"
|
||||
width="75" />
|
||||
</radio_group>
|
||||
<!-- -->
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="14"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
left_delta="-12"
|
||||
name="unknown"
|
||||
top_pad="80"
|
||||
width="163">
|
||||
top_pad="4"
|
||||
width="">
|
||||
Size: [DIMENSIONS]
|
||||
</text>
|
||||
|
||||
<!-- middle: inventory mode -->
|
||||
|
||||
<button
|
||||
enabled="false"
|
||||
follows="left|bottom"
|
||||
height="20"
|
||||
follows="left|top"
|
||||
height="18"
|
||||
label="Default"
|
||||
label_selected="Default"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
name="Default"
|
||||
top_pad="4"
|
||||
width="80" />
|
||||
width="73"
|
||||
left="94"
|
||||
top="215"/>
|
||||
<button
|
||||
enabled="false"
|
||||
follows="left|bottom"
|
||||
height="20"
|
||||
label="None"
|
||||
label_selected="None"
|
||||
layout="topleft"
|
||||
left_pad="4"
|
||||
name="None"
|
||||
top_delta="0"
|
||||
width="80" />
|
||||
<button
|
||||
follows="left|bottom"
|
||||
follows="left|top"
|
||||
height="20"
|
||||
label="Blank"
|
||||
label_selected="Blank"
|
||||
layout="topleft"
|
||||
left="4"
|
||||
left_delta="0"
|
||||
name="Blank"
|
||||
top_pad="5"
|
||||
width="80" />
|
||||
<button
|
||||
follows="left|bottom"
|
||||
width="73" />
|
||||
<button
|
||||
enabled="false"
|
||||
follows="left|top"
|
||||
height="20"
|
||||
label="None"
|
||||
label_selected="None"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
name="None"
|
||||
top_pad="5"
|
||||
width="73" />
|
||||
<button
|
||||
follows="left|top"
|
||||
height="28"
|
||||
image_selected="eye_button_active.tga"
|
||||
image_unselected="eye_button_inactive.tga"
|
||||
layout="topleft"
|
||||
left_pad="50"
|
||||
top_delta="3"
|
||||
left_delta="-80"
|
||||
top_delta="-25"
|
||||
name="Pipette"
|
||||
width="28" />
|
||||
<check_box
|
||||
follows="left|bottom"
|
||||
height="20"
|
||||
initial_value="true"
|
||||
label="Apply now"
|
||||
layout="topleft"
|
||||
left="4"
|
||||
name="apply_immediate_check"
|
||||
top="262"
|
||||
width="120" />
|
||||
<filter_editor
|
||||
follows="left|top|right"
|
||||
height="23"
|
||||
|
|
@ -113,7 +149,7 @@
|
|||
bg_alpha_color="DkGray2"
|
||||
border="false"
|
||||
follows="all"
|
||||
height="200"
|
||||
height="233"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
name="inventory panel"
|
||||
|
|
@ -128,23 +164,89 @@
|
|||
top_pad="0"
|
||||
left_delta="-3"
|
||||
width="200" />
|
||||
<button
|
||||
follows="right|bottom"
|
||||
|
||||
<!-- middle: local mode -->
|
||||
<button
|
||||
follows="left|top"
|
||||
height="18"
|
||||
label="Add"
|
||||
label_selected="Add"
|
||||
layout="topleft"
|
||||
left="94"
|
||||
top="215"
|
||||
name="l_add_btn"
|
||||
width="73"
|
||||
visible="false"/>
|
||||
<button
|
||||
enabled="false"
|
||||
follows="left|top"
|
||||
height="20"
|
||||
label="Remove"
|
||||
label_selected="Remove"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
name="l_rem_btn"
|
||||
top_pad="5"
|
||||
width="73"
|
||||
visible="false"/>
|
||||
<button
|
||||
enabled="false"
|
||||
follows="left|top"
|
||||
height="20"
|
||||
label="Upload"
|
||||
label_selected="Upload"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
name="l_upl_btn"
|
||||
top_pad="5"
|
||||
width="73"
|
||||
visible="false"/>
|
||||
<scroll_list
|
||||
name="l_name_list"
|
||||
left="170"
|
||||
top="22"
|
||||
width="235"
|
||||
height="260"
|
||||
follows="left|top|right|bottom"
|
||||
column_padding="0"
|
||||
can_resize="false"
|
||||
draw_heading="true"
|
||||
multi_select="true"
|
||||
search_column="1"
|
||||
visible="false">
|
||||
<column name="unit_name" label="Name" dynamicwidth="true" />
|
||||
<column name="unit_id_HIDDEN" label="ID" width="0" />
|
||||
</scroll_list>
|
||||
|
||||
<!-- bottom static -->
|
||||
<button
|
||||
follows="bottom"
|
||||
height="20"
|
||||
label="OK"
|
||||
label_selected="OK"
|
||||
layout="topleft"
|
||||
right="-120"
|
||||
left="95"
|
||||
top="-30"
|
||||
name="Select"
|
||||
width="100" />
|
||||
<button
|
||||
follows="right|bottom"
|
||||
follows="bottom"
|
||||
height="20"
|
||||
label="Cancel"
|
||||
label_selected="Cancel"
|
||||
layout="topleft"
|
||||
right="-10"
|
||||
left_pad="5"
|
||||
left_delta="120"
|
||||
top_delta="0"
|
||||
name="Cancel"
|
||||
width="100" />
|
||||
<check_box
|
||||
follows="left|bottom"
|
||||
height="20"
|
||||
initial_value="true"
|
||||
label="Apply now"
|
||||
layout="topleft"
|
||||
left="6"
|
||||
name="apply_immediate_check"
|
||||
top_delta="0"
|
||||
width="120" />
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -28,22 +28,50 @@
|
|||
tool_tip="width x height"
|
||||
top_pad="5"
|
||||
width="179">
|
||||
<combo_box.item
|
||||
label="1000 x 700 (default)"
|
||||
name="item0"
|
||||
value="1000 x 700" />
|
||||
<combo_box.item
|
||||
label="1024 x 768"
|
||||
name="item1"
|
||||
value="1024 x 768" />
|
||||
<combo_box.item
|
||||
label="1280 x 720 (720p)"
|
||||
name="item2"
|
||||
value="1280 x 720" />
|
||||
<combo_box.item
|
||||
label="1920 x 1080 (1080p)"
|
||||
name="item3"
|
||||
value="1920 x 1080" />
|
||||
<combo_box.item
|
||||
label="1000 x 700 (default)"
|
||||
name="item1"
|
||||
value="1000 x 700" />
|
||||
<combo_box.item
|
||||
label="1024 x 768 (4:3 XGA)"
|
||||
name="item2"
|
||||
value="1024 x 768" />
|
||||
<combo_box.item
|
||||
label="1280 x 720 (16:9 HDTV)"
|
||||
name="item3"
|
||||
value="1280 x 720" />
|
||||
<combo_box.item
|
||||
label="1280 x 800 (5:8 WXGA)"
|
||||
name="item4"
|
||||
value="1280 x 800" />
|
||||
<combo_box.item
|
||||
label="1280 x 1024 (5:4 SXGA)"
|
||||
name="item5"
|
||||
value="1280 x 1024" />
|
||||
<combo_box.item
|
||||
label="1440 x 900 (8:5 WSXGA)"
|
||||
name="item7"
|
||||
value="1440 x 900" />
|
||||
<combo_box.item
|
||||
label="1600 x 900 (16:9 HD+)"
|
||||
name="item8"
|
||||
value="1600 x 900" />
|
||||
<combo_box.item
|
||||
label="1600 x 1200 (4:3 UXGA)"
|
||||
name="item9"
|
||||
value="1600 x 1200" />
|
||||
<combo_box.item
|
||||
label="1680 x 1050 (8:5 WSXGA+)"
|
||||
name="item10"
|
||||
value="1680 x 1050" />
|
||||
<combo_box.item
|
||||
label="1920 x 1080 (16:9 HDTV)"
|
||||
name="item11"
|
||||
value="1920 x 1080" />
|
||||
<combo_box.item
|
||||
label="1920 x 1200 (8:5 WUXGA)"
|
||||
name="item12"
|
||||
value="1920 x 1200" />
|
||||
</combo_box>
|
||||
<button
|
||||
follows="right|bottom"
|
||||
|
|
|
|||
|
|
@ -7801,4 +7801,31 @@ Otherwise, you can look at the Map and find places marked "Infohub".
|
|||
You died and have been teleported to your home location.
|
||||
</global>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="LocalBitmapsUpdateFileNotFound"
|
||||
persist="true"
|
||||
type="notify">
|
||||
[FNAME] could not be updated because the file could no longer be found.
|
||||
Disabling future updates for this file.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="LocalBitmapsUpdateFailedFinal"
|
||||
persist="true"
|
||||
type="notify">
|
||||
[FNAME] could not be opened or decoded for [NRETRIES] attempts, and is now considered broken.
|
||||
Disabling future updates for this file.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="LocalBitmapsVerifyFail"
|
||||
persist="true"
|
||||
type="notify">
|
||||
Attempted to add an invalid or unreadable image file [FNAME] which could not be opened or decoded.
|
||||
Attempt cancelled.
|
||||
</notification>
|
||||
|
||||
</notifications>
|
||||
|
|
|
|||
|
|
@ -403,8 +403,9 @@ Please try logging in again in a minute.</string>
|
|||
<string name="AddAndRemoveJoints">Add and remove joints with other objects</string>
|
||||
<string name="ChangePermissions">Change its permissions</string>
|
||||
<string name="TrackYourCamera">Track your camera</string>
|
||||
<string name="ControlYourCamera">Control your camera</string>
|
||||
<string name="NotConnected">Not Connected</string>
|
||||
<string name="ControlYourCamera">Control your camera</string>
|
||||
<string name="TeleportYourAgent">Teleport you</string>
|
||||
<string name="NotConnected">Not Connected</string>
|
||||
|
||||
<!-- Sim Access labels -->
|
||||
<string name="SIM_ACCESS_PG">General</string>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Anim Preview" title="ANIMATION.ANIM">
|
||||
<text name="name_label">
|
||||
Nom :
|
||||
</text>
|
||||
<text name="description_label">
|
||||
Description :
|
||||
</text>
|
||||
<button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
|
||||
<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
|
||||
</floater>
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Animation Preview">
|
||||
<floater.string name="failed_to_initialize">
|
||||
Échec de l'initialisation du mouvement
|
||||
</floater.string>
|
||||
<floater.string name="anim_too_long">
|
||||
La durée du fichier d'animation est de [LENGTH] secondes.
|
||||
|
||||
La limite maximale est de [MAX_LENGTH] secondes.
|
||||
</floater.string>
|
||||
<floater.string name="failed_file_read">
|
||||
Impossible de lire le fichier d'animation.
|
||||
|
||||
[STATUS]
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_OK">
|
||||
Ok
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_EOF">
|
||||
Fin prématurée du fichier.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_CONSTRAINT">
|
||||
Impossible de lire la définition des contraintes.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_FILE">
|
||||
Impossible d'ouvrir le fichier BVH.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_HIER">
|
||||
En-tête HIERARCHY non valide.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_JOINT">
|
||||
Impossible de trouver ROOT ou JOINT.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_NAME">
|
||||
Impossible d'obtenir le nom JOINT.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_OFFSET">
|
||||
Impossible de trouver OFFSET.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_CHANNELS">
|
||||
CHANNELS introuvables.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_ROTATION">
|
||||
Impossible d'obtenir l'ordre de rotation.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_AXIS">
|
||||
Impossible d'obtenir l'axe de rotation.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_MOTION">
|
||||
Impossible de trouver MOTION.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_FRAMES">
|
||||
Impossible d'obtenir le nombre d'images.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_FRAME_TIME">
|
||||
Impossible d'obtenir la durée des images.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_POS">
|
||||
Impossible d'obtenir les valeurs de position.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_ROT">
|
||||
Impossible d'obtenir les valeurs de rotation.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_FILE">
|
||||
Impossible d'ouvrir le fichier de traduction.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_HEADER">
|
||||
Impossible de lire l'en-tête de traduction.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_NAME">
|
||||
Impossible de lire les noms de traduction.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_IGNORE">
|
||||
Impossible de lire la valeur ignorant la traduction.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_RELATIVE">
|
||||
Impossible de lire la valeur relative de la traduction.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_OUTNAME">
|
||||
Impossible de lire la valeur outname de la traduction.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_MATRIX">
|
||||
Impossible de lire la matrice de traduction.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_MERGECHILD">
|
||||
Impossible d'obtenir le nom mergechild.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_MERGEPARENT">
|
||||
Impossible d'obtenir le nom mergeparent.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_PRIORITY">
|
||||
Impossible d'obtenir la valeur priority.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_LOOP">
|
||||
Impossible d'obtenir la valeur loop.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_EASEIN">
|
||||
Impossible d'obtenir les valeurs easeIn.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_EASEOUT">
|
||||
Impossible d'obtenir les valeurs easeOut.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_HAND">
|
||||
Impossible d'obtenir la valeur hand morph.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_EMOTE">
|
||||
Impossible de lire le nom emote.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_BAD_ROOT">
|
||||
Nom root joint incorrect ; utiliser "hip".
|
||||
</floater.string>
|
||||
<text name="name_label">
|
||||
Nom :
|
||||
</text>
|
||||
<text name="description_label">
|
||||
Description :
|
||||
</text>
|
||||
<spinner label="Priorité" name="priority" tool_tip="Contrôle quelles autres animations peuvent être remplacées par cette animation."/>
|
||||
<check_box label="Boucle" name="loop_check" tool_tip="Entraîne la lecture en boucle de cette animation."/>
|
||||
<spinner label="Début (%)" name="loop_in_point" tool_tip="Définit le point de l'animation auquel retourne la boucle."/>
|
||||
<spinner label="Fin (%)" name="loop_out_point" tool_tip="Définit le point de l'animation auquel se termine la boucle."/>
|
||||
<text name="hand_label">
|
||||
Pose des mains
|
||||
</text>
|
||||
<combo_box name="hand_pose_combo" tool_tip="Contrôle ce que font les mains pendant l'animation.">
|
||||
<combo_box.item label="Écartées" name="Spread"/>
|
||||
<combo_box.item label="Détendues" name="Relaxed"/>
|
||||
<combo_box.item label="Montrer du doigt (les deux)" name="PointBoth"/>
|
||||
<combo_box.item label="Poing" name="Fist"/>
|
||||
<combo_box.item label="Détendue (gauche)" name="RelaxedLeft"/>
|
||||
<combo_box.item label="Montrer du doigt (gauche)" name="PointLeft"/>
|
||||
<combo_box.item label="Poing (gauche)" name="FistLeft"/>
|
||||
<combo_box.item label="Détendue (droite)" name="RelaxedRight"/>
|
||||
<combo_box.item label="Montrer du doigt (droite)" name="PointRight"/>
|
||||
<combo_box.item label="Poing (droite)" name="FistRight"/>
|
||||
<combo_box.item label="Salut (droite)" name="SaluteRight"/>
|
||||
<combo_box.item label="Clavier" name="Typing"/>
|
||||
<combo_box.item label="Paix (droite)" name="PeaceRight"/>
|
||||
</combo_box>
|
||||
<text name="emote_label">
|
||||
Expression
|
||||
</text>
|
||||
<combo_box name="emote_combo" tool_tip="Contrôle ce que fait le visage pendant l'animation.">
|
||||
<item label="(Aucune)" name="[None]" value=""/>
|
||||
<item label="Aaaaah" name="Aaaaah" value="Aaaaah"/>
|
||||
<item label="Effrayé" name="Afraid" value="Effrayé"/>
|
||||
<item label="En colère" name="Angry" value="En colère"/>
|
||||
<item label="Grand sourire" name="BigSmile" value="Grand sourire"/>
|
||||
<item label="Ennui" name="Bored" value="Ennui"/>
|
||||
<item label="Pleurer" name="Cry" value="Pleurer"/>
|
||||
<item label="Mépris" name="Disdain" value="Mépris"/>
|
||||
<item label="Gêne" name="Embarrassed" value="Gêne"/>
|
||||
<item label="Froncer les sourcils" name="Frown" value="Froncer les sourcils"/>
|
||||
<item label="Embrasser" name="Kiss" value="Embrasser"/>
|
||||
<item label="Rire" name="Laugh" value="Rire"/>
|
||||
<item label="Tirer la langue" name="Plllppt" value="Tirer la langue"/>
|
||||
<item label="Dégoût" name="Repulsed" value="Dégoût"/>
|
||||
<item label="Triste" name="Sad" value="Triste"/>
|
||||
<item label="Hausser les épaules" name="Shrug" value="Hausser les épaules"/>
|
||||
<item label="Sourire" name="Smile" value="Sourire"/>
|
||||
<item label="Surprise" name="Surprise" value="Surprise"/>
|
||||
<item label="Clin d'œil" name="Wink" value="Clin d'œil"/>
|
||||
<item label="Inquiétude" name="Worry" value="Inquiétude"/>
|
||||
</combo_box>
|
||||
<text name="preview_label">
|
||||
Aperçu
|
||||
</text>
|
||||
<combo_box name="preview_base_anim" tool_tip="Permet de tester le comportement de l'animation lorsque votre avatar effectue certaines actions courantes.">
|
||||
<item label="Debout" name="Standing" value="Debout"/>
|
||||
<item label="En marche" name="Walking" value="En marche"/>
|
||||
<item label="Assis" name="Sitting" value="Assis"/>
|
||||
<item label="En vol" name="Flying" value="En vol"/>
|
||||
</combo_box>
|
||||
<spinner label="Transition début (s)" name="ease_in_time" tool_tip="Durée (en secondes) de l'entrée en fondu de l'animation."/>
|
||||
<spinner label="Transition fin (s)" name="ease_out_time" tool_tip="Durée (en secondes) de la sortie en fondu de l'animation."/>
|
||||
<button name="play_btn" tool_tip="Lire l'animation."/>
|
||||
<button name="pause_btn" tool_tip="Suspendre l'animation."/>
|
||||
<button name="stop_btn" tool_tip="Arrêter la lecture de l'animation."/>
|
||||
<text name="bad_animation_text">
|
||||
Impossible de lire le fichier d'animation.
|
||||
|
||||
Les fichiers BVH exportés depuis Poser 4 sont recommandés.
|
||||
</text>
|
||||
<button label="Charger ([AMOUNT] L$)" name="ok_btn"/>
|
||||
<button label="Annuler" name="cancel_btn"/>
|
||||
</floater>
|
||||
|
|
@ -6,6 +6,6 @@
|
|||
<text name="desc txt">
|
||||
Description :
|
||||
</text>
|
||||
<button label="Exécuter dans Second Life" label_selected="Stop" name="Anim play btn" tool_tip="Lire cette animation de façon à ce que les autres puissent la voir" width="131"/>
|
||||
<button label="Exécuter localement" label_selected="Stop" left="160" name="Anim audition btn" tool_tip="Lire cette animation de façon à ce que vous soyez la seule personne à pouvoir la voir" width="120"/>
|
||||
<button label="Exécuter dans Second Life" label_selected="Arrêter" name="Inworld" tool_tip="Lire cette animation de façon à ce que les autres la voient."/>
|
||||
<button label="Exécuter localement" label_selected="Arrêter" name="Locally" tool_tip="Lire cette animation de façon à ce que vous soyez la seule personne à la voir."/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Test Floater" title="FLOATER TEST"/>
|
||||
|
|
@ -1,5 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="toolbox floater" short_title="OUTILS POUR LA CONSTRUCTION" title="">
|
||||
<floater.string name="grid_screen_text">
|
||||
Écran
|
||||
</floater.string>
|
||||
<floater.string name="grid_local_text">
|
||||
Local
|
||||
</floater.string>
|
||||
<floater.string name="grid_world_text">
|
||||
Monde
|
||||
</floater.string>
|
||||
<floater.string name="grid_reference_text">
|
||||
Référence
|
||||
</floater.string>
|
||||
<floater.string name="grid_attachment_text">
|
||||
Élément attaché
|
||||
</floater.string>
|
||||
<floater.string name="status_rotate">
|
||||
Pour faire tourner l'objet, faites glisser les bandes de couleur.
|
||||
</floater.string>
|
||||
|
|
@ -63,7 +78,12 @@
|
|||
</text>
|
||||
<check_box initial_value="true" label="Étirer les textures" name="checkbox stretch textures"/>
|
||||
<check_box initial_value="true" label="Fixer" name="checkbox snap to grid"/>
|
||||
<button label="Options..." label_selected="Options..." name="Options..." tool_tip="Afficher d'autres options de grille"/>
|
||||
<combo_box name="combobox grid mode" tool_tip="Choisir le type d'axe de grille pour le positionnement de l'objet.">
|
||||
<combo_box.item label="Monde" name="World"/>
|
||||
<combo_box.item label="Local" name="Local"/>
|
||||
<combo_box.item label="Référence" name="Reference"/>
|
||||
</combo_box>
|
||||
<button label="" label_selected="Options..." name="Options..." tool_tip="Afficher d'autres options de grille"/>
|
||||
<button label="" label_selected="" name="ToolCube" tool_tip="Cube"/>
|
||||
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisme droit"/>
|
||||
<button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/>
|
||||
|
|
@ -106,7 +126,7 @@
|
|||
Aucune sélection effectuée.
|
||||
</text>
|
||||
<text name="remaining_capacity">
|
||||
[CAPACITY_STRING] [secondlife:///app/openfloater/object_weights Plus d'infos]
|
||||
[CAPACITY_STRING] [secondlife:///app/openfloater/object_weights Plus d'infos]
|
||||
</text>
|
||||
<tab_container name="Object Info Tabs">
|
||||
<panel label="Général" name="General">
|
||||
|
|
|
|||
|
|
@ -42,13 +42,16 @@
|
|||
<string name="effect_Demon">
|
||||
Démon
|
||||
</string>
|
||||
<string name="effect_Female Elf">
|
||||
Femme elfe
|
||||
</string>
|
||||
<string name="effect_Flirty">
|
||||
Flirt
|
||||
</string>
|
||||
<string name="effect_Foxy">
|
||||
Séduction
|
||||
</string>
|
||||
<string name="effect_Halloween_2010_Bonus">
|
||||
<string name="effect_Halloween 2010 Bonus">
|
||||
Halloween_2010_Bonus
|
||||
</string>
|
||||
<string name="effect_Helium">
|
||||
|
|
@ -57,9 +60,18 @@
|
|||
<string name="effect_Husky">
|
||||
Rauque
|
||||
</string>
|
||||
<string name="effect_Husky Whisper">
|
||||
Murmure rauque
|
||||
</string>
|
||||
<string name="effect_Intercom">
|
||||
Interphone
|
||||
</string>
|
||||
<string name="effect_Julia">
|
||||
Julia
|
||||
</string>
|
||||
<string name="effect_Lo Lilt">
|
||||
Mélodieux
|
||||
</string>
|
||||
<string name="effect_Macho">
|
||||
Macho
|
||||
</string>
|
||||
|
|
@ -69,6 +81,9 @@
|
|||
<string name="effect_Mini">
|
||||
Mini
|
||||
</string>
|
||||
<string name="effect_Model">
|
||||
Modèle
|
||||
</string>
|
||||
<string name="effect_Nano">
|
||||
Nano
|
||||
</string>
|
||||
|
|
@ -90,6 +105,9 @@
|
|||
<string name="effect_Roxanne">
|
||||
Roxanne
|
||||
</string>
|
||||
<string name="effect_Rumble">
|
||||
Grondement
|
||||
</string>
|
||||
<string name="effect_Sabrina">
|
||||
Sabrina
|
||||
</string>
|
||||
|
|
@ -102,6 +120,9 @@
|
|||
<string name="effect_Shorty">
|
||||
Petite voix
|
||||
</string>
|
||||
<string name="effect_Smaller">
|
||||
Plus faible
|
||||
</string>
|
||||
<string name="effect_Sneaky">
|
||||
Sournois
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@
|
|||
<menu_item_call label="Propriétés" name="Properties"/>
|
||||
<menu_item_call label="Renommer" name="Rename"/>
|
||||
<menu_item_call label="Copier l'UUID (identifiant universel unique)" name="Copy Asset UUID"/>
|
||||
<menu_item_call label="Couper" name="Cut"/>
|
||||
<menu_item_call label="Copier" name="Copy"/>
|
||||
<menu_item_call label="Coller" name="Paste"/>
|
||||
<menu_item_call label="Coller comme lien" name="Paste As Link"/>
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
<menu_item_call label="Occupé" name="Set Busy"/>
|
||||
</menu>
|
||||
<menu_item_call label="Acheter des L$..." name="Buy and Sell L$"/>
|
||||
<menu_item_call label="Boîte d'envoi vendeur..." name="MerchantOutbox"/>
|
||||
<menu_item_call label="Page d'accueil du compte..." name="Manage My Account">
|
||||
<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=fr"/>
|
||||
</menu_item_call>
|
||||
|
|
@ -393,9 +394,16 @@
|
|||
<menu_item_check label="Textures HTTP" name="HTTP Textures"/>
|
||||
<menu_item_check label="Inventaire HTTP" name="HTTP Inventory"/>
|
||||
<menu_item_call label="Compresser les images" name="Compress Images"/>
|
||||
<menu_item_call label="Activer Visual Leak Detector" name="Enable Visual Leak Detector"/>
|
||||
<menu_item_check label="Output Debug Minidump" name="Output Debug Minidump"/>
|
||||
<menu_item_check label="Console Window on next Run" name="Console Window"/>
|
||||
<menu label="Définir le niveau de connexion" name="Set Logging Level"/>
|
||||
<menu label="Définir le niveau de connexion" name="Set Logging Level">
|
||||
<menu_item_check label="Débogage" name="Debug"/>
|
||||
<menu_item_check label="Infos" name="Info"/>
|
||||
<menu_item_check label="Avertissement" name="Warning"/>
|
||||
<menu_item_check label="Erreur" name="Error"/>
|
||||
<menu_item_check label="Aucun" name="None"/>
|
||||
</menu>
|
||||
<menu_item_call label="Demander le statut Admin" name="Request Admin Options"/>
|
||||
<menu_item_call label="Quitter le statut Admin" name="Leave Admin Options"/>
|
||||
<menu_item_check label="Afficher le menu Admin" name="View Admin Options"/>
|
||||
|
|
|
|||
|
|
@ -669,7 +669,7 @@ Assurez-vous que le fichier a l'extension correcte.
|
|||
Impossible de créer le fichier de sortie : [FILE]
|
||||
</notification>
|
||||
<notification name="DoNotSupportBulkAnimationUpload">
|
||||
Actuellement, [APP_NAME] ne prend pas en charge le chargement de lots de fichiers d'animation.
|
||||
Actuellement, [APP_NAME] ne prend pas en charge le chargement par lot de fichiers d'animation au format BVH.
|
||||
</notification>
|
||||
<notification name="CannotUploadReason">
|
||||
Impossible de charger [FILE] suite au problème suivant : [REASON]
|
||||
|
|
@ -2630,16 +2630,16 @@ Accepter cette requête ?
|
|||
<nolink>[TITLE]</nolink> de [NAME]
|
||||
[MESSAGE]
|
||||
<form name="form">
|
||||
<button name="Mute" text="Ignorer"/>
|
||||
<button name="Ignore" text="Ignorer"/>
|
||||
<button name="Client_Side_Mute" text="Bloquer"/>
|
||||
<button name="Client_Side_Ignore" text="Ignorer"/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification name="ScriptDialogGroup">
|
||||
<nolink>[TITLE]</nolink> de [GROUPNAME]
|
||||
[MESSAGE]
|
||||
<form name="form">
|
||||
<button name="Mute" text="Ignorer"/>
|
||||
<button name="Ignore" text="Ignorer"/>
|
||||
<button name="Client_Side_Mute" text="Bloquer"/>
|
||||
<button name="Client_Side_Ignore" text="Ignorer"/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification name="BuyLindenDollarSuccess">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="nearby_chat">
|
||||
<check_box label="Traduire le chat" name="translate_chat_checkbox"/>
|
||||
<layout_stack name="stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Traduire le chat" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
<text name="inbox_fresh_new_count">
|
||||
[NUM] nouv.
|
||||
</text>
|
||||
<panel tool_tip="Drag and drop items to your inventory to manage and use them">
|
||||
<panel name="inbox_inventory_placeholder_panel" tool_tip="Glisser-déposer des articles dans votre inventaire pour les utiliser.">
|
||||
<text name="inbox_inventory_placeholder">
|
||||
Ici seront livrés les achats effectués sur la Place du marché.
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -835,6 +835,9 @@ Veuillez réessayer de vous connecter dans une minute.
|
|||
<string name="anim_yes_head">
|
||||
Oui
|
||||
</string>
|
||||
<string name="multiple_textures">
|
||||
Multiples
|
||||
</string>
|
||||
<string name="texture_loading">
|
||||
Chargement...
|
||||
</string>
|
||||
|
|
@ -1235,7 +1238,7 @@ Veuillez réessayer de vous connecter dans une minute.
|
|||
Vous n'avez pas de copie de cette texture dans votre inventaire
|
||||
</string>
|
||||
<string name="InventoryInboxNoItems">
|
||||
Certains articles reçus, tels que les cadeaux Premium, s'afficheront ici. Vous pourrez alors les faire glisser vers votre inventaire.
|
||||
Les achats que vous avez effectués sur la Place du marché s'affichent ici. Vous pouvez alors les faire glisser vers votre inventaire afin de les utiliser.
|
||||
</string>
|
||||
<string name="MarketplaceURL">
|
||||
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
|
||||
|
|
@ -3921,6 +3924,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
|
|||
<string name="Saved_message">
|
||||
(Enregistrement : [LONG_TIMESTAMP])
|
||||
</string>
|
||||
<string name="IM_unblock_only_groups_friends">
|
||||
Pour afficher ce message, vous devez désactiver la case Seuls mes amis et groupes peuvent m'appeler ou m'envoyer un IM, sous Préférences/Confidentialité.
|
||||
</string>
|
||||
<string name="answered_call">
|
||||
Votre appel a fait l'objet d'une réponse
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Anim Preview" title="ANIMATION.ANIM">
|
||||
<text name="name_label">
|
||||
Nome:
|
||||
</text>
|
||||
<text name="description_label">
|
||||
Descrizione:
|
||||
</text>
|
||||
<button label="Carica ([AMOUNT] L$)" name="ok_btn"/>
|
||||
<button label="Annulla" label_selected="Annulla" name="cancel_btn"/>
|
||||
</floater>
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Animation Preview">
|
||||
<floater.string name="failed_to_initialize">
|
||||
Movimento non inizializzato
|
||||
</floater.string>
|
||||
<floater.string name="anim_too_long">
|
||||
La lunghezza del file di animazione è di [LENGTH] secondi.
|
||||
|
||||
La lunghezza massima dell'animazione è [MAX_LENGTH] secondi.
|
||||
</floater.string>
|
||||
<floater.string name="failed_file_read">
|
||||
Impossibile leggere il file di animazione.
|
||||
|
||||
[STATUS]
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_OK">
|
||||
Ok
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_EOF">
|
||||
Fine prematura del file.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_CONSTRAINT">
|
||||
Impossibile leggere la definizione del vincolo.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_FILE">
|
||||
Impossibile aprire il file BVH.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_HIER">
|
||||
Intestazione HIERARCHY non valida.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_JOINT">
|
||||
Impossibile trovare la ROOT o JOINT.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_NAME">
|
||||
Impossibile trovare il nome JOINT.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_OFFSET">
|
||||
Impossibile trovare OFFSET.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_CHANNELS">
|
||||
Impossibile trovare CHANNELS.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_ROTATION">
|
||||
Impossibile ottenere un ordine di rotazione.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_AXIS">
|
||||
Rotazione dell'asse non disponibile.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_MOTION">
|
||||
Impossibile trovare MOTION.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_FRAMES">
|
||||
Impossibile ottenere il numero dei frame.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_FRAME_TIME">
|
||||
Impossibile ottenere il tempo del frame.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_POS">
|
||||
Impossibile ottenere i valori della posizione.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_ROT">
|
||||
Impossibile ottenere i valori di rotazione.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_FILE">
|
||||
Impossibile aprire il file di traduzione.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_HEADER">
|
||||
Impossibile leggere l'intestazione della traduzione.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_NAME">
|
||||
Impossibile leggere i nomi della traduzione.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_IGNORE">
|
||||
Impossibile leggere la traduzione, ignora il valore.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_RELATIVE">
|
||||
Impossibile leggere la traduzione del valore relativo.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_OUTNAME">
|
||||
Valore non trovato.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_MATRIX">
|
||||
Impossibile leggere la matrice di traduzione.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_MERGECHILD">
|
||||
Impossibile trovare il nome mergechild.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_MERGEPARENT">
|
||||
Impossibile ottenere il nome mergeparent.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_PRIORITY">
|
||||
Impossibile ottenere il valore di priorità.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_LOOP">
|
||||
Impossibile ottenere il valore di ripetizione.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_EASEIN">
|
||||
Impossibile ottenere i valori easeIn.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_EASEOUT">
|
||||
Cannot get ease Out values.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_HAND">
|
||||
Impossibile ottenere il valore morph della mano.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_EMOTE">
|
||||
Impossibile leggere il nome emote.
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_BAD_ROOT">
|
||||
Nome non corretto del root joint, usa "hip".
|
||||
</floater.string>
|
||||
<text name="name_label">
|
||||
Nome:
|
||||
</text>
|
||||
<text name="description_label">
|
||||
Descrizione:
|
||||
</text>
|
||||
<spinner label="Priorità" name="priority" tool_tip="Definisce quali altre animazioni possono essere sostituite da questa animazione"/>
|
||||
<check_box label="Ripetizione" name="loop_check" tool_tip="Riproduce questa animazione in ripetizione"/>
|
||||
<spinner label="Dentro(%)" name="loop_in_point" tool_tip="Imposta il punto sul quale ritorna l'animazione"/>
|
||||
<spinner label="Fuori(%)" name="loop_out_point" tool_tip="Imposta il punto sul quale termina l'animazione"/>
|
||||
<text name="hand_label">
|
||||
Posa delle mani
|
||||
</text>
|
||||
<combo_box name="hand_pose_combo" tool_tip="Definisce ciò che fanno le mani durante l'animazione">
|
||||
<combo_box.item label="Estese" name="Spread"/>
|
||||
<combo_box.item label="Rilassate" name="Relaxed"/>
|
||||
<combo_box.item label="Indicano entrambe" name="PointBoth"/>
|
||||
<combo_box.item label="Pugno" name="Fist"/>
|
||||
<combo_box.item label="Sinistra rilassata" name="RelaxedLeft"/>
|
||||
<combo_box.item label="Indica sinistra" name="PointLeft"/>
|
||||
<combo_box.item label="Pugno con la sinistra" name="FistLeft"/>
|
||||
<combo_box.item label="Destra rilassata" name="RelaxedRight"/>
|
||||
<combo_box.item label="Indica destra" name="PointRight"/>
|
||||
<combo_box.item label="Pugno destro" name="FistRight"/>
|
||||
<combo_box.item label="Saluta a destra" name="SaluteRight"/>
|
||||
<combo_box.item label="Battitura" name="Typing"/>
|
||||
<combo_box.item label="Pace a destra" name="PeaceRight"/>
|
||||
</combo_box>
|
||||
<text name="emote_label">
|
||||
Espressione
|
||||
</text>
|
||||
<combo_box name="emote_combo" tool_tip="Definisce ciò che fa il viso durante l'animazione">
|
||||
<item label="(Nulla)" name="[None]" value=""/>
|
||||
<item label="Aaaaah" name="Aaaaah" value="Aaaaah"/>
|
||||
<item label="Spavento" name="Afraid" value="Spavento"/>
|
||||
<item label="Arrabbiato" name="Angry" value="Arrabbiato"/>
|
||||
<item label="Grande sorriso" name="BigSmile" value="Grande sorriso"/>
|
||||
<item label="Annoiato" name="Bored" value="Annoiato"/>
|
||||
<item label="Pianto" name="Cry" value="Pianto"/>
|
||||
<item label="Disdegno" name="Disdain" value="Disdegno"/>
|
||||
<item label="Imbarazzato" name="Embarrassed" value="Imbarazzato"/>
|
||||
<item label="Accigliato" name="Frown" value="Accigliato"/>
|
||||
<item label="Bacio" name="Kiss" value="Bacio"/>
|
||||
<item label="Risata" name="Laugh" value="Risata"/>
|
||||
<item label="Linguaccia" name="Plllppt" value="Linguaccia"/>
|
||||
<item label="Repulsione" name="Repulsed" value="Repulsione"/>
|
||||
<item label="Triste" name="Sad" value="Triste"/>
|
||||
<item label="Scrollata di spalle" name="Shrug" value="Scrollata di spalle"/>
|
||||
<item label="Sorriso" name="Smile" value="Sorriso"/>
|
||||
<item label="Stupore" name="Surprise" value="Stupore"/>
|
||||
<item label="Occhiolino" name="Wink" value="Occhiolino"/>
|
||||
<item label="Preoccupato" name="Worry" value="Preoccupato"/>
|
||||
</combo_box>
|
||||
<text name="preview_label">
|
||||
Anteprima mentre
|
||||
</text>
|
||||
<combo_box name="preview_base_anim" tool_tip="Prova il comportamento dell'animazione mentre l'avatar esegue attività comuni.">
|
||||
<item label="In piedi" name="Standing" value="In piedi"/>
|
||||
<item label="Camminare" name="Walking" value="Camminare"/>
|
||||
<item label="Seduto" name="Sitting" value="Seduto"/>
|
||||
<item label="Volare" name="Flying" value="Volare"/>
|
||||
</combo_box>
|
||||
<spinner label="Transizione in ingresso (sec)" name="ease_in_time" tool_tip="Durata (in secondi) della fusione in entrata delle animazioni"/>
|
||||
<spinner label="Transizione in uscita (sec)" name="ease_out_time" tool_tip="Durata (in secondi) della fusione in uscita delle animazioni"/>
|
||||
<button name="play_btn" tool_tip="Riproduci la tua animazione"/>
|
||||
<button name="pause_btn" tool_tip="Metti in pausa la tua animazione"/>
|
||||
<button name="stop_btn" tool_tip="Interrompi la riproduzione dell'animazione"/>
|
||||
<text name="bad_animation_text">
|
||||
Impossibile leggere il file di animazione.
|
||||
|
||||
Consigliamo file BVH esportati da Poser 4.
|
||||
</text>
|
||||
<button label="Carica ([AMOUNT] L$)" name="ok_btn"/>
|
||||
<button label="Annulla" name="cancel_btn"/>
|
||||
</floater>
|
||||
|
|
@ -6,6 +6,6 @@
|
|||
<text name="desc txt">
|
||||
Descrizione:
|
||||
</text>
|
||||
<button label="Riproduci in Second Life" label_selected="Ferma" left="20" name="Anim play btn" tool_tip="Riproduci questa animazione così che gli altri possano vederla" width="131"/>
|
||||
<button label="Esegui localmente" label_selected="Ferma" left="162" name="Anim audition btn" tool_tip="Riproduci questa animazione così che solo tu possa vederla" width="125"/>
|
||||
<button label="Riproduci in Second Life" label_selected="Ferma" name="Inworld" tool_tip="Riproduci questa animazione così che gli altri possano vederla"/>
|
||||
<button label="Riproduci localmente" label_selected="Ferma" name="Locally" tool_tip="Riproduci questa animazione così che solo tu possa vederla"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Test Floater" title="FINESTRA DI TEST"/>
|
||||
|
|
@ -1,5 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="toolbox floater" short_title="STRUMENTI PER COSTRUZIONE">
|
||||
<floater.string name="grid_screen_text">
|
||||
Schermo
|
||||
</floater.string>
|
||||
<floater.string name="grid_local_text">
|
||||
Locale
|
||||
</floater.string>
|
||||
<floater.string name="grid_world_text">
|
||||
Mondo
|
||||
</floater.string>
|
||||
<floater.string name="grid_reference_text">
|
||||
Riferimento
|
||||
</floater.string>
|
||||
<floater.string name="grid_attachment_text">
|
||||
Allegato
|
||||
</floater.string>
|
||||
<floater.string name="status_rotate">
|
||||
Sposta le fasce colorate per ruotare l'oggetto
|
||||
</floater.string>
|
||||
|
|
@ -63,7 +78,12 @@
|
|||
</text>
|
||||
<check_box initial_value="true" label="Ridimensiona le texture" name="checkbox stretch textures"/>
|
||||
<check_box initial_value="true" label="Scatto" name="checkbox snap to grid"/>
|
||||
<button label="Opzioni..." label_selected="Opzioni..." name="Options..." tool_tip="Vedi più opzioni della griglia"/>
|
||||
<combo_box name="combobox grid mode" tool_tip="Scegli il tipo di righello per posizionare l'oggetto">
|
||||
<combo_box.item label="Mondo" name="World"/>
|
||||
<combo_box.item label="Locale" name="Local"/>
|
||||
<combo_box.item label="Riferimento" name="Reference"/>
|
||||
</combo_box>
|
||||
<button label="" label_selected="Opzioni..." name="Options..." tool_tip="Vedi più opzioni della griglia"/>
|
||||
<button label="" label_selected="" name="ToolCube" tool_tip="Cubo"/>
|
||||
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
|
||||
<button label="" label_selected="" name="ToolPyramid" tool_tip="Piramide"/>
|
||||
|
|
|
|||
|
|
@ -42,13 +42,16 @@
|
|||
<string name="effect_Demon">
|
||||
Demonio
|
||||
</string>
|
||||
<string name="effect_Female Elf">
|
||||
Elfo donna
|
||||
</string>
|
||||
<string name="effect_Flirty">
|
||||
Civettuolo
|
||||
</string>
|
||||
<string name="effect_Foxy">
|
||||
Scaltro
|
||||
</string>
|
||||
<string name="effect_Halloween_2010_Bonus">
|
||||
<string name="effect_Halloween 2010 Bonus">
|
||||
Halloween_2010_Bonus
|
||||
</string>
|
||||
<string name="effect_Helium">
|
||||
|
|
@ -57,9 +60,18 @@
|
|||
<string name="effect_Husky">
|
||||
Fusto
|
||||
</string>
|
||||
<string name="effect_Husky Whisper">
|
||||
Sospiro rauco
|
||||
</string>
|
||||
<string name="effect_Intercom">
|
||||
Interfono
|
||||
</string>
|
||||
<string name="effect_Julia">
|
||||
Julia
|
||||
</string>
|
||||
<string name="effect_Lo Lilt">
|
||||
Inflessione bassa
|
||||
</string>
|
||||
<string name="effect_Macho">
|
||||
Macho
|
||||
</string>
|
||||
|
|
@ -69,6 +81,9 @@
|
|||
<string name="effect_Mini">
|
||||
Mini
|
||||
</string>
|
||||
<string name="effect_Model">
|
||||
Modella
|
||||
</string>
|
||||
<string name="effect_Nano">
|
||||
Nano
|
||||
</string>
|
||||
|
|
@ -90,6 +105,9 @@
|
|||
<string name="effect_Roxanne">
|
||||
Rosanna
|
||||
</string>
|
||||
<string name="effect_Rumble">
|
||||
Rombo
|
||||
</string>
|
||||
<string name="effect_Sabrina">
|
||||
Sabrina
|
||||
</string>
|
||||
|
|
@ -102,6 +120,9 @@
|
|||
<string name="effect_Shorty">
|
||||
Bassotto
|
||||
</string>
|
||||
<string name="effect_Smaller">
|
||||
Più piccolo
|
||||
</string>
|
||||
<string name="effect_Sneaky">
|
||||
Vile
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@
|
|||
<menu_item_call label="Proprietà" name="Properties"/>
|
||||
<menu_item_call label="Rinomina" name="Rename"/>
|
||||
<menu_item_call label="Copia UUID dell'oggetto" name="Copy Asset UUID"/>
|
||||
<menu_item_call label="Taglia" name="Cut"/>
|
||||
<menu_item_call label="Copia" name="Copy"/>
|
||||
<menu_item_call label="Incolla" name="Paste"/>
|
||||
<menu_item_call label="Incolla come link" name="Paste As Link"/>
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
<menu_item_call label="Non disponibile" name="Set Busy"/>
|
||||
</menu>
|
||||
<menu_item_call label="Acquista L$..." name="Buy and Sell L$"/>
|
||||
<menu_item_call label="Casella venditore in uscita..." name="MerchantOutbox"/>
|
||||
<menu_item_call label="Dashboard dell'account..." name="Manage My Account">
|
||||
<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=it"/>
|
||||
</menu_item_call>
|
||||
|
|
@ -334,8 +335,15 @@
|
|||
</menu>
|
||||
<menu_item_check label="Texture HTTP" name="HTTP Textures"/>
|
||||
<menu_item_check label="Inventario HTTP" name="HTTP Inventory"/>
|
||||
<menu_item_call label="Attiva Visual Leak Detector" name="Enable Visual Leak Detector"/>
|
||||
<menu_item_check label="Finestra Console al prossimo lancio" name="Console Window"/>
|
||||
<menu label="Imposta livello di registrazione" name="Set Logging Level"/>
|
||||
<menu label="Imposta livello di registrazione" name="Set Logging Level">
|
||||
<menu_item_check label="Debug" name="Debug"/>
|
||||
<menu_item_check label="Informazioni" name="Info"/>
|
||||
<menu_item_check label="Attenzione" name="Warning"/>
|
||||
<menu_item_check label="Errore" name="Error"/>
|
||||
<menu_item_check label="Nessuno" name="None"/>
|
||||
</menu>
|
||||
<menu_item_call label="Richiedi diritti Admin" name="Request Admin Options"/>
|
||||
<menu_item_call label="Lascia stato Admin" name="Leave Admin Options"/>
|
||||
<menu_item_check label="Mostra menu Admin" name="View Admin Options"/>
|
||||
|
|
|
|||
|
|
@ -668,7 +668,7 @@ Attese [VALIDS]
|
|||
Impossibile creare il file in uscita: [FILE]
|
||||
</notification>
|
||||
<notification name="DoNotSupportBulkAnimationUpload">
|
||||
[APP_NAME] non supporta ancora il caricamento in blocco di file di animazione.
|
||||
[APP_NAME] non supporta ancora il caricamento in blocco di file di animazione in formato BVH.
|
||||
</notification>
|
||||
<notification name="CannotUploadReason">
|
||||
Impossibile importare il file [FILE] a causa del seguente motivo: [REASON]
|
||||
|
|
@ -2632,16 +2632,16 @@ Concedi questa richiesta?
|
|||
'<nolink>[TITLE]</nolink>' di [NAME]
|
||||
[MESSAGE]
|
||||
<form name="form">
|
||||
<button name="Mute" text="Blocca"/>
|
||||
<button name="Ignore" text="Ignora"/>
|
||||
<button name="Client_Side_Mute" text="Blocca"/>
|
||||
<button name="Client_Side_Ignore" text="Ignora"/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification name="ScriptDialogGroup">
|
||||
'<nolink>[TITLE]</nolink>' di [GROUPNAME]
|
||||
[MESSAGE]
|
||||
<form name="form">
|
||||
<button name="Mute" text="Blocca"/>
|
||||
<button name="Ignore" text="Ignora"/>
|
||||
<button name="Client_Side_Mute" text="Blocca"/>
|
||||
<button name="Client_Side_Ignore" text="Ignora"/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification name="BuyLindenDollarSuccess">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel name="nearby_chat">
|
||||
<check_box label="Traduci chat" name="translate_chat_checkbox"/>
|
||||
<layout_stack name="stack">
|
||||
<layout_panel name="translate_chat_checkbox_lp">
|
||||
<check_box label="Traduci chat" name="translate_chat_checkbox"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
<text name="inbox_fresh_new_count">
|
||||
[NUM] nuovi
|
||||
</text>
|
||||
<panel tool_tip="Drag and drop items to your inventory to manage and use them">
|
||||
<panel name="inbox_inventory_placeholder_panel" tool_tip="Trascina gli elementi nell'inventario per usarli">
|
||||
<text name="inbox_inventory_placeholder">
|
||||
Gli acquisti dal mercato verranno consegnati qui.
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -829,6 +829,9 @@ Prova ad accedere nuovamente tra un minuto.
|
|||
<string name="anim_yes_head">
|
||||
Si
|
||||
</string>
|
||||
<string name="multiple_textures">
|
||||
Multiple
|
||||
</string>
|
||||
<string name="texture_loading">
|
||||
Caricamento in corso...
|
||||
</string>
|
||||
|
|
@ -1226,7 +1229,7 @@ Prova ad accedere nuovamente tra un minuto.
|
|||
Non hai una copia di questa texture nel tuo inventario
|
||||
</string>
|
||||
<string name="InventoryInboxNoItems">
|
||||
Alcuni elementi che riceverai, come ad esempio gli omaggi per l'abbonamento Premium, verranno mostrati qui. Potrai quindi trascinarli nel tuo inventario.
|
||||
Gli acquissti dal mercato verranno mostrati qui. Potrai quindi trascinarli nel tuo inventario per usarli.
|
||||
</string>
|
||||
<string name="MarketplaceURL">
|
||||
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
|
||||
|
|
@ -3843,6 +3846,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
|
|||
<string name="Saved_message">
|
||||
(Salvato [LONG_TIMESTAMP])
|
||||
</string>
|
||||
<string name="IM_unblock_only_groups_friends">
|
||||
Per vedere questo messaggio, devi deselezionare 'Solo amici e gruppi possono chiamarmi o mandarmi IM' in Preferenze/Privacy.
|
||||
</string>
|
||||
<string name="answered_call">
|
||||
Risposto alla chiamata
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Anim Preview" title="ANIMATION.ANIM">
|
||||
<text name="name_label">
|
||||
名前:
|
||||
</text>
|
||||
<text name="description_label">
|
||||
説明:
|
||||
</text>
|
||||
<button label="アップロード(L$[AMOUNT])" name="ok_btn"/>
|
||||
<button label="取り消し" label_selected="取り消し" name="cancel_btn"/>
|
||||
</floater>
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Animation Preview">
|
||||
<floater.string name="failed_to_initialize">
|
||||
動きを初期化できませんでした
|
||||
</floater.string>
|
||||
<floater.string name="anim_too_long">
|
||||
アニメーションファイルの長さは [LENGTH] 秒です。
|
||||
|
||||
アニメーションの最大長は [MAX_LENGTH] 秒です。
|
||||
</floater.string>
|
||||
<floater.string name="failed_file_read">
|
||||
アニメーションファイルを読み取れません。
|
||||
|
||||
[STATUS]
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_OK">
|
||||
Ok
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_EOF">
|
||||
ファイルの終端が不完全です。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_CONSTRAINT">
|
||||
制約定義を読み取れません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_FILE">
|
||||
BVH ファイルを開けません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_HIER">
|
||||
HIERARCHY ヘッダーが無効です。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_JOINT">
|
||||
ROOT または JOINT が見つかりません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_NAME">
|
||||
JOINT 名を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_OFFSET">
|
||||
OFFSET が見つかりません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_CHANNELS">
|
||||
CHANNELS が見つかりません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_ROTATION">
|
||||
回転順序を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_AXIS">
|
||||
回転軸を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_MOTION">
|
||||
MOTION が見つかりません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_FRAMES">
|
||||
フレーム数を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_FRAME_TIME">
|
||||
フレーム時間を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_POS">
|
||||
位置の値を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_ROT">
|
||||
回転値を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_FILE">
|
||||
変換ファイルを開けません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_HEADER">
|
||||
変換ヘッダーを読み取れません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_NAME">
|
||||
変換名を読み取れません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_IGNORE">
|
||||
変換無視値を読み取れません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_RELATIVE">
|
||||
変換相対値を読み取れません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_OUTNAME">
|
||||
変換 outname 値を読み取れません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_MATRIX">
|
||||
変換行列を読み取れません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_MERGECHILD">
|
||||
Mergechild 名を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_MERGEPARENT">
|
||||
Mergeparent 名を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_PRIORITY">
|
||||
priority 値を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_LOOP">
|
||||
loop 値を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_EASEIN">
|
||||
easeln 値を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_EASEOUT">
|
||||
easeOut 値を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_HAND">
|
||||
Hand morph 値を取得できません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_NO_XLT_EMOTE">
|
||||
emote 名を読みとれません。
|
||||
</floater.string>
|
||||
<floater.string name="E_ST_BAD_ROOT">
|
||||
ルートジョイント名が不正です。「hip」を使用してください。
|
||||
</floater.string>
|
||||
<text name="name_label">
|
||||
名前:
|
||||
</text>
|
||||
<text name="description_label">
|
||||
説明:
|
||||
</text>
|
||||
<spinner label="優先度" name="priority" tool_tip="このアニメーションでどのアニメーションを上書きできるかを決めます"/>
|
||||
<check_box label="ループ" name="loop_check" tool_tip="このアニメーションをループ再生にします"/>
|
||||
<spinner label="イン(%)" name="loop_in_point" tool_tip="アニメーションのループ復帰点を設定します"/>
|
||||
<spinner label="アウト(%)" name="loop_out_point" tool_tip="アニメーションのループ終了点を設定します"/>
|
||||
<text name="hand_label">
|
||||
手のポーズ
|
||||
</text>
|
||||
<combo_box name="hand_pose_combo" tool_tip="アニメーション再生中の手の動きを決めます">
|
||||
<combo_box.item label="広げる" name="Spread"/>
|
||||
<combo_box.item label="リラックス" name="Relaxed"/>
|
||||
<combo_box.item label="指を指す・両手" name="PointBoth"/>
|
||||
<combo_box.item label="拳" name="Fist"/>
|
||||
<combo_box.item label="リラックス・左" name="RelaxedLeft"/>
|
||||
<combo_box.item label="指を指す・左" name="PointLeft"/>
|
||||
<combo_box.item label="拳を上げる・左" name="FistLeft"/>
|
||||
<combo_box.item label="リラックス・右" name="RelaxedRight"/>
|
||||
<combo_box.item label="指を指す・右" name="PointRight"/>
|
||||
<combo_box.item label="拳を上げる・右" name="FistRight"/>
|
||||
<combo_box.item label="敬礼・右" name="SaluteRight"/>
|
||||
<combo_box.item label="タイピング" name="Typing"/>
|
||||
<combo_box.item label="ピース・右" name="PeaceRight"/>
|
||||
</combo_box>
|
||||
<text name="emote_label">
|
||||
表情
|
||||
</text>
|
||||
<combo_box name="emote_combo" tool_tip="アニメーション再生中の顔の表情を決めます">
|
||||
<item label="(なし)" name="[None]" value=""/>
|
||||
<item label="アーーーーー" name="Aaaaah" value="アーーーーー"/>
|
||||
<item label="恐れる" name="Afraid" value="恐れる"/>
|
||||
<item label="怒る" name="Angry" value="怒る"/>
|
||||
<item label="満面の笑み" name="BigSmile" value="満面の笑み"/>
|
||||
<item label="退屈" name="Bored" value="退屈"/>
|
||||
<item label="泣く" name="Cry" value="泣く"/>
|
||||
<item label="軽蔑" name="Disdain" value="軽蔑"/>
|
||||
<item label="恥ずかしがる" name="Embarrassed" value="恥ずかしがる"/>
|
||||
<item label="しかめっ面" name="Frown" value="しかめっ面"/>
|
||||
<item label="キス" name="Kiss" value="キス"/>
|
||||
<item label="笑う" name="Laugh" value="笑う"/>
|
||||
<item label="むかつく" name="Plllppt" value="むかつく"/>
|
||||
<item label="嫌悪感" name="Repulsed" value="嫌悪感"/>
|
||||
<item label="悲しい" name="Sad" value="悲しい"/>
|
||||
<item label="肩をすくめる" name="Shrug" value="肩をすくめる"/>
|
||||
<item label="微笑む" name="Smile" value="微笑む"/>
|
||||
<item label="驚く" name="Surprise" value="驚く"/>
|
||||
<item label="ウィンク" name="Wink" value="ウィンク"/>
|
||||
<item label="心配する" name="Worry" value="心配する"/>
|
||||
</combo_box>
|
||||
<text name="preview_label">
|
||||
プレビュー中の動作
|
||||
</text>
|
||||
<combo_box name="preview_base_anim" tool_tip="これを使用して、アバターが一般的なアクションを実行している間にアニメーションの動作をテストします。">
|
||||
<item label="立つ" name="Standing" value="立つ"/>
|
||||
<item label="歩く" name="Walking" value="歩く"/>
|
||||
<item label="座る" name="Sitting" value="座る"/>
|
||||
<item label="飛ぶ" name="Flying" value="飛ぶ"/>
|
||||
</combo_box>
|
||||
<spinner label="イーズイン(秒)" name="ease_in_time" tool_tip="アニメーションのブレンドイン時間(秒)"/>
|
||||
<spinner label="イーズアウト(秒)" name="ease_out_time" tool_tip="アニメーションのブレンドアウト時間(秒)"/>
|
||||
<button name="play_btn" tool_tip="アニメーションを再生する"/>
|
||||
<button name="pause_btn" tool_tip="アニメーションを一時停止する"/>
|
||||
<button name="stop_btn" tool_tip="アニメーションの再生を停止する"/>
|
||||
<text name="bad_animation_text">
|
||||
アニメーションファイルを読み取れません。
|
||||
|
||||
Poser 4 からエクスポートした BVH ファイルをお勧めします。
|
||||
</text>
|
||||
<button label="アップロード(L$[AMOUNT])" name="ok_btn"/>
|
||||
<button label="取り消し" name="cancel_btn"/>
|
||||
</floater>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="item properties" title="持ち物アイテムのプロパティ">
|
||||
<floater name="item properties" title="インベントリアイテムのプロパティ">
|
||||
<floater.string name="unknown">
|
||||
(不明)
|
||||
</floater.string>
|
||||
|
|
@ -24,11 +24,11 @@
|
|||
<text name="LabelCreatorTitle">
|
||||
クリエーター
|
||||
</text>
|
||||
<button label="情報" label_selected="" name="BtnCreator"/>
|
||||
<button label="プロフィール..." label_selected="" name="BtnCreator"/>
|
||||
<text name="LabelOwnerTitle">
|
||||
オーナー:
|
||||
</text>
|
||||
<button label="情報" label_selected="" name="BtnOwner"/>
|
||||
<button label="プロフィール..." label_selected="" name="BtnOwner"/>
|
||||
<text name="LabelAcquiredTitle">
|
||||
入手日時:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Inventory Finder" title="最近取得した持ち物アイテム">
|
||||
<floater name="Inventory Finder" title="インベントリ最近取得したアイテム">
|
||||
<check_box label="アニメーション" name="check_animation"/>
|
||||
<check_box label="コーリング・カード" name="check_calling_card"/>
|
||||
<check_box label="服" name="check_clothing"/>
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@
|
|||
モデルがアップロードされました。
|
||||
</text>
|
||||
<text name="inventory_text">
|
||||
それは持ち物の「オブジェクト」フォルダにあります。
|
||||
それはインベントリの「オブジェクト」フォルダにあります。
|
||||
</text>
|
||||
<text name="charged_fee">
|
||||
あなたのアカウントに L$ [FEE] が請求されました。
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_my_inventory" title="持ち物"/>
|
||||
<floater name="floater_my_inventory" title="インベントリ"/>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<text name="objects_label" value="オブジェクト"/>
|
||||
<text name="prims" value="--"/>
|
||||
<text name="prims_label" value="プリム"/>
|
||||
<text name="weights_of_selected_text" value="選択済み項目のウエイト"/>
|
||||
<text name="weights_of_selected_text" value="選択済みアイテムのウエイト"/>
|
||||
<text name="download" value="--"/>
|
||||
<text name="download_label" value="ダウンロード"/>
|
||||
<text name="physics" value="--"/>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@
|
|||
<text name="object_name">
|
||||
[DESC]:
|
||||
</text>
|
||||
<button label="持ち物にコピー" label_selected="持ち物にコピー" name="copy_to_inventory_button"/>
|
||||
<button label="インベントリにコピー" label_selected="インベントリにコピー" name="copy_to_inventory_button"/>
|
||||
<button label="コピーして装着" label_selected="コピーして装着" name="copy_and_wear_button"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_people" title="人">
|
||||
<panel_container name="main_panel">
|
||||
<panel label="グループ情報" name="panel_group_info_sidetray"/>
|
||||
<panel label="グループプロフィール" name="panel_group_info_sidetray"/>
|
||||
<panel label="ブロックされた住人とオブジェクト" name="panel_block_list_sidetray"/>
|
||||
</panel_container>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,6 @@
|
|||
<text name="desc txt">
|
||||
説明:
|
||||
</text>
|
||||
<button label="インワールドで再生" label_selected="停止" name="Anim play btn" tool_tip="他人にも見えるように再生します"/>
|
||||
<button label="ローカル再生" label_selected="停止" name="Anim audition btn" tool_tip="自分だけが見えるように再生します"/>
|
||||
<button label="インワールドで再生" label_selected="停止" name="Inworld" tool_tip="他人に見えるように再生"/>
|
||||
<button label="ローカル再生" label_selected="停止" name="Locally" tool_tip="自分だけが見えるように再生"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
テクスチャ: [NAME]
|
||||
</floater.string>
|
||||
<floater.string name="Copy">
|
||||
持ち物にコピー
|
||||
インベントリにコピー
|
||||
</floater.string>
|
||||
<text name="desc txt">
|
||||
説明:
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
投稿
|
||||
</string>
|
||||
<string name="inventory_progress_str">
|
||||
持ち物に保存
|
||||
インベントリに保存
|
||||
</string>
|
||||
<string name="local_progress_str">
|
||||
コンピュータに保存
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
メールが送信されました
|
||||
</string>
|
||||
<string name="inventory_succeeded_str">
|
||||
持ち物に保存されました
|
||||
インベントリに保存されました
|
||||
</string>
|
||||
<string name="local_succeeded_str">
|
||||
コンピュータに保存されました
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
メールを送信できませんでした。
|
||||
</string>
|
||||
<string name="inventory_failed_str">
|
||||
持ち物に保存できませんでした。
|
||||
インベントリに保存できませんでした。
|
||||
</string>
|
||||
<string name="local_failed_str">
|
||||
コンピュータに保存できませんでした。
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Test Floater" title="テスト用ウィンドウ"/>
|
||||
|
|
@ -1,5 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="toolbox floater" short_title="制作ツール" title="">
|
||||
<floater.string name="grid_screen_text">
|
||||
画面
|
||||
</floater.string>
|
||||
<floater.string name="grid_local_text">
|
||||
ローカル
|
||||
</floater.string>
|
||||
<floater.string name="grid_world_text">
|
||||
世界
|
||||
</floater.string>
|
||||
<floater.string name="grid_reference_text">
|
||||
リファレンス
|
||||
</floater.string>
|
||||
<floater.string name="grid_attachment_text">
|
||||
アタッチメント
|
||||
</floater.string>
|
||||
<floater.string name="status_rotate">
|
||||
色の付いたバンドをドラッグしてオブジェクトを回転
|
||||
</floater.string>
|
||||
|
|
@ -63,7 +78,12 @@
|
|||
</text>
|
||||
<check_box initial_value="true" label="テクスチャを引き延ばす" name="checkbox stretch textures"/>
|
||||
<check_box initial_value="true" label="スナップ" name="checkbox snap to grid"/>
|
||||
<button label="オプション..." label_selected="オプション" name="Options..." tool_tip="グリッドオプションを表示します"/>
|
||||
<combo_box name="combobox grid mode" tool_tip="オブジェクトの配置に使うグリッドルーラの種類を選択">
|
||||
<combo_box.item label="世界" name="World"/>
|
||||
<combo_box.item label="ローカル" name="Local"/>
|
||||
<combo_box.item label="リファレンス" name="Reference"/>
|
||||
</combo_box>
|
||||
<button label="" label_selected="オプション" name="Options..." tool_tip="グリッドオプションを表示します"/>
|
||||
<button label="" label_selected="" name="ToolCube" tool_tip="キューブ"/>
|
||||
<button label="" label_selected="" name="ToolPrism" tool_tip="プリズム"/>
|
||||
<button label="" label_selected="" name="ToolPyramid" tool_tip="ピラミッド"/>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue