Merge branch 'master' of https://github.com/Lirusaito/SingularityViewer
This commit is contained in:
@@ -293,7 +293,36 @@ void AIEngine::add(AIStateMachine* state_machine)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void print_statemachine_diagnostics(U64 total_clocks, U64 max_delta, AIEngine::queued_type::const_reference slowest_state_machine);
|
#if STATE_MACHINE_PROFILING
|
||||||
|
// Called from AIStateMachine::mainloop
|
||||||
|
void print_statemachine_diagnostics(U64 total_clocks, AIStateMachine::StateTimerBase::TimeData& slowest_timer, AIEngine::queued_type::const_reference slowest_element)
|
||||||
|
{
|
||||||
|
AIStateMachine const& slowest_state_machine = slowest_element.statemachine();
|
||||||
|
F64 const tfactor = 1000 / calc_clock_frequency();
|
||||||
|
std::ostringstream msg;
|
||||||
|
|
||||||
|
U64 max_delta = slowest_timer.GetDuration();
|
||||||
|
|
||||||
|
if (total_clocks > max_delta)
|
||||||
|
{
|
||||||
|
msg << "AIStateMachine::mainloop did run for " << (total_clocks * tfactor) << " ms. The slowest ";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msg << "AIStateMachine::mainloop: A ";
|
||||||
|
}
|
||||||
|
msg << "state machine " << "(" << slowest_state_machine.getName() << ") " << "ran for " << (max_delta * tfactor) << " ms";
|
||||||
|
if (slowest_state_machine.getRuntime() > max_delta)
|
||||||
|
{
|
||||||
|
msg << " (" << (slowest_state_machine.getRuntime() * tfactor) << " ms in total now)";
|
||||||
|
}
|
||||||
|
msg << ".\n";
|
||||||
|
|
||||||
|
AIStateMachine::StateTimerBase::DumpTimers(msg);
|
||||||
|
|
||||||
|
llwarns << msg.str() << llendl;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// MAIN-THREAD
|
// MAIN-THREAD
|
||||||
void AIEngine::mainloop(void)
|
void AIEngine::mainloop(void)
|
||||||
@@ -305,28 +334,33 @@ void AIEngine::mainloop(void)
|
|||||||
queued_element = engine_state_w->list.begin();
|
queued_element = engine_state_w->list.begin();
|
||||||
}
|
}
|
||||||
U64 total_clocks = 0;
|
U64 total_clocks = 0;
|
||||||
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
#if STATE_MACHINE_PROFILING
|
||||||
U64 max_delta = 0;
|
|
||||||
queued_type::value_type slowest_element(NULL);
|
queued_type::value_type slowest_element(NULL);
|
||||||
|
AIStateMachine::StateTimerRoot::TimeData slowest_timer;
|
||||||
#endif
|
#endif
|
||||||
while (queued_element != end)
|
while (queued_element != end)
|
||||||
{
|
{
|
||||||
AIStateMachine& state_machine(queued_element->statemachine());
|
AIStateMachine& state_machine(queued_element->statemachine());
|
||||||
U64 start = get_clock_count();
|
AIStateMachine::StateTimerBase::TimeData time_data;
|
||||||
if (!state_machine.sleep(start))
|
if (!state_machine.sleep(get_clock_count()))
|
||||||
{
|
{
|
||||||
state_machine.multiplex(AIStateMachine::normal_run);
|
AIStateMachine::StateTimerRoot timer(state_machine.getName());
|
||||||
|
state_machine.multiplex(AIStateMachine::normal_run);
|
||||||
|
time_data = timer.GetTimerData();
|
||||||
}
|
}
|
||||||
U64 delta = get_clock_count() - start;
|
if (U64 delta = time_data.GetDuration())
|
||||||
state_machine.add(delta);
|
|
||||||
total_clocks += delta;
|
|
||||||
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
|
||||||
if (delta > max_delta)
|
|
||||||
{
|
{
|
||||||
max_delta = delta;
|
state_machine.add(delta);
|
||||||
slowest_element = *queued_element;
|
total_clocks += delta;
|
||||||
}
|
#if STATE_MACHINE_PROFILING
|
||||||
|
if (delta > slowest_timer.GetDuration())
|
||||||
|
{
|
||||||
|
slowest_element = *queued_element;
|
||||||
|
slowest_timer = time_data;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
bool active = state_machine.active(this); // This locks mState shortly, so it must be called before locking mEngineState because add() locks mEngineState while holding mState.
|
bool active = state_machine.active(this); // This locks mState shortly, so it must be called before locking mEngineState because add() locks mEngineState while holding mState.
|
||||||
engine_state_type_wat engine_state_w(mEngineState);
|
engine_state_type_wat engine_state_w(mEngineState);
|
||||||
if (!active)
|
if (!active)
|
||||||
@@ -340,8 +374,8 @@ void AIEngine::mainloop(void)
|
|||||||
}
|
}
|
||||||
if (total_clocks >= sMaxCount)
|
if (total_clocks >= sMaxCount)
|
||||||
{
|
{
|
||||||
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
#if STATE_MACHINE_PROFILING
|
||||||
print_statemachine_diagnostics(total_clocks, max_delta, slowest_element);
|
print_statemachine_diagnostics(total_clocks, slowest_timer, slowest_element);
|
||||||
#endif
|
#endif
|
||||||
Dout(dc::statemachine, "Sorting " << engine_state_w->list.size() << " state machines.");
|
Dout(dc::statemachine, "Sorting " << engine_state_w->list.size() << " state machines.");
|
||||||
engine_state_w->list.sort(QueueElementComp());
|
engine_state_w->list.sort(QueueElementComp());
|
||||||
@@ -752,6 +786,22 @@ void AIStateMachine::multiplex(event_type event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if STATE_MACHINE_PROFILING
|
||||||
|
std::vector<AIStateMachine::StateTimerBase*> AIStateMachine::StateTimerBase::mTimerStack;
|
||||||
|
AIStateMachine::StateTimerBase::TimeData AIStateMachine::StateTimerBase::TimeData::sRoot("");
|
||||||
|
void AIStateMachine::StateTimer::TimeData::DumpTimer(std::ostringstream& msg, std::string prefix)
|
||||||
|
{
|
||||||
|
F64 const tfactor = 1000 / calc_clock_frequency();
|
||||||
|
msg << prefix << mName << " " << (mEnd - mStart)*tfactor << "ms" << std::endl;
|
||||||
|
prefix.push_back(' ');
|
||||||
|
std::vector<TimeData>::iterator it;
|
||||||
|
for (it = mChildren.begin(); it != mChildren.end(); ++it)
|
||||||
|
{
|
||||||
|
it->DumpTimer(msg, prefix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
AIStateMachine::state_type AIStateMachine::begin_loop(base_state_type base_state)
|
AIStateMachine::state_type AIStateMachine::begin_loop(base_state_type base_state)
|
||||||
{
|
{
|
||||||
DoutEntering(dc::statemachine(mSMDebug), "AIStateMachine::begin_loop(" << state_str(base_state) << ") [" << (void*)this << "]");
|
DoutEntering(dc::statemachine(mSMDebug), "AIStateMachine::begin_loop(" << state_str(base_state) << ") [" << (void*)this << "]");
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
#include "aithreadsafe.h"
|
#include "aithreadsafe.h"
|
||||||
#include <llpointer.h>
|
#include <llpointer.h>
|
||||||
|
#include "lltimer.h"
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <boost/signals2.hpp>
|
#include <boost/signals2.hpp>
|
||||||
|
|
||||||
@@ -98,11 +99,140 @@ class AIEngine
|
|||||||
extern AIEngine gMainThreadEngine;
|
extern AIEngine gMainThreadEngine;
|
||||||
extern AIEngine gStateMachineThreadEngine;
|
extern AIEngine gStateMachineThreadEngine;
|
||||||
|
|
||||||
|
#ifndef STATE_MACHINE_PROFILING
|
||||||
|
#define STATE_MACHINE_PROFILING (LL_RELEASE_FOR_DOWNLOAD)
|
||||||
|
#endif
|
||||||
|
|
||||||
class AIStateMachine : public LLThreadSafeRefCount
|
class AIStateMachine : public LLThreadSafeRefCount
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef U32 state_type; //!< The type of run_state
|
typedef U32 state_type; //!< The type of run_state
|
||||||
|
|
||||||
|
// A simple timer class that will calculate time delta between ctor and GetTimerData call.
|
||||||
|
// Time data is stored as a nested TimeData object.
|
||||||
|
// If STATE_MACHINE_PROFILING is defined then a stack of all StateTimers from root is maintained for debug output.
|
||||||
|
class StateTimerBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
class TimeData
|
||||||
|
{
|
||||||
|
friend class StateTimerBase;
|
||||||
|
public:
|
||||||
|
TimeData() : mStart(-1), mEnd(-1) {}
|
||||||
|
U64 GetDuration() { return mEnd - mStart; }
|
||||||
|
private:
|
||||||
|
U64 mStart, mEnd;
|
||||||
|
|
||||||
|
#if !STATE_MACHINE_PROFILING
|
||||||
|
TimeData(const std::string& name) : mStart(get_clock_count()), mEnd(get_clock_count()) {}
|
||||||
|
#else
|
||||||
|
TimeData(const std::string& name) : mName(name), mStart(get_clock_count()), mEnd(get_clock_count()) {}
|
||||||
|
void DumpTimer(std::ostringstream& msg, std::string prefix);
|
||||||
|
std::vector<TimeData> mChildren;
|
||||||
|
std::string mName;
|
||||||
|
static TimeData sRoot;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
protected:
|
||||||
|
#if !STATE_MACHINE_PROFILING
|
||||||
|
StateTimerBase(const std::string& name) : mData(name) {}
|
||||||
|
~StateTimerBase() {}
|
||||||
|
TimeData mData;
|
||||||
|
// Return a copy of the underlying timer data.
|
||||||
|
// This allows the data live beyond the scope of the state timer.
|
||||||
|
public:
|
||||||
|
const TimeData GetTimerData()
|
||||||
|
{
|
||||||
|
mData.mEnd = get_clock_count(); //set mEnd to current time, since GetTimerData() will always be called before the dtor, obv.
|
||||||
|
return mData;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
// Ctors/dtors are hidden. Only StateTimerRoot and StateTimer are permitted to access them.
|
||||||
|
StateTimerBase() : mData(NULL) {}
|
||||||
|
~StateTimerBase()
|
||||||
|
{
|
||||||
|
// If mData is null then the timer was not registered due to being in the wrong thread or the root timer wasn't in the expected state.
|
||||||
|
if (!mData)
|
||||||
|
return;
|
||||||
|
mData->mEnd = get_clock_count();
|
||||||
|
mTimerStack.pop_back();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Also hide internals from everything except StateTimerRoot and StateTimer
|
||||||
|
bool AddAsRoot(const std::string& name)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!is_main_thread())
|
||||||
|
return true; //Ignoring this timer, but pretending it was added.
|
||||||
|
if (!mTimerStack.empty())
|
||||||
|
return false;
|
||||||
|
TimeData::sRoot = TimeData(name);
|
||||||
|
mData = &TimeData::sRoot;
|
||||||
|
mData->mChildren.clear();
|
||||||
|
mTimerStack.push_back(this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool AddAsChild(const std::string& name)
|
||||||
|
{
|
||||||
|
if (!is_main_thread())
|
||||||
|
return true; //Ignoring this timer, but pretending it was added.
|
||||||
|
if (mTimerStack.empty())
|
||||||
|
return false;
|
||||||
|
mTimerStack.back()->mData->mChildren.push_back(TimeData(name));
|
||||||
|
mData = &mTimerStack.back()->mData->mChildren.back();
|
||||||
|
mTimerStack.push_back(this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
TimeData* mData;
|
||||||
|
static std::vector<StateTimerBase*> mTimerStack;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Debug spew
|
||||||
|
static void DumpTimers(std::ostringstream& msg)
|
||||||
|
{
|
||||||
|
TimeData::sRoot.DumpTimer(msg, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return a copy of the underlying timer data.
|
||||||
|
// This allows the data live beyond the scope of the state timer.
|
||||||
|
const TimeData GetTimerData() const
|
||||||
|
{
|
||||||
|
if (mData)
|
||||||
|
{
|
||||||
|
TimeData ret = *mData;
|
||||||
|
ret.mEnd = get_clock_count(); //set mEnd to current time, since GetTimerData() will always be called before the dtor, obv.
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return TimeData();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
public:
|
||||||
|
#if !STATE_MACHINE_PROFILING
|
||||||
|
typedef StateTimerBase StateTimerRoot;
|
||||||
|
typedef StateTimerBase StateTimer;
|
||||||
|
#else
|
||||||
|
class StateTimerRoot : public StateTimerBase
|
||||||
|
{ //A StateTimerRoot can become a child if a root already exists.
|
||||||
|
public:
|
||||||
|
StateTimerRoot(const std::string& name)
|
||||||
|
{
|
||||||
|
if(!AddAsRoot(name))
|
||||||
|
AddAsChild(name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
class StateTimer : public StateTimerBase
|
||||||
|
{ //A StateTimer can never become a root
|
||||||
|
public:
|
||||||
|
StateTimer(const std::string& name)
|
||||||
|
{
|
||||||
|
AddAsChild(name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// The type of event that causes multiplex() to be called.
|
// The type of event that causes multiplex() to be called.
|
||||||
enum event_type {
|
enum event_type {
|
||||||
@@ -302,6 +432,9 @@ class AIStateMachine : public LLThreadSafeRefCount
|
|||||||
void add(U64 count) { mRuntime += count; }
|
void add(U64 count) { mRuntime += count; }
|
||||||
U64 getRuntime(void) const { return mRuntime; }
|
U64 getRuntime(void) const { return mRuntime; }
|
||||||
|
|
||||||
|
// For diagnostics. Every derived class must override this.
|
||||||
|
virtual const char* getName() const = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void initialize_impl(void) = 0;
|
virtual void initialize_impl(void) = 0;
|
||||||
virtual void multiplex_impl(state_type run_state) = 0;
|
virtual void multiplex_impl(state_type run_state) = 0;
|
||||||
|
|||||||
@@ -232,6 +232,13 @@ class AIStateMachineThread : public AIStateMachineThreadBase {
|
|||||||
// Accessor.
|
// Accessor.
|
||||||
THREAD_IMPL& thread_impl(void) { return mThreadImpl; }
|
THREAD_IMPL& thread_impl(void) { return mThreadImpl; }
|
||||||
|
|
||||||
|
/*virtual*/ const char* getName() const
|
||||||
|
{
|
||||||
|
#define STRIZE(arg) #arg
|
||||||
|
return "AIStateMachineThread<"STRIZE(THREAD_IMPL)">";
|
||||||
|
#undef STRIZE
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/*virtual*/ AIThreadImpl& impl(void) { return mThreadImpl; }
|
/*virtual*/ AIThreadImpl& impl(void) { return mThreadImpl; }
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -98,6 +98,8 @@ class AITimer : public AIStateMachine {
|
|||||||
*/
|
*/
|
||||||
F64 getInterval(void) const { return mInterval; }
|
F64 getInterval(void) const { return mInterval; }
|
||||||
|
|
||||||
|
/*virtual*/ const char* getName() const { return "AITimer"; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Call finish() (or abort()), not delete.
|
// Call finish() (or abort()), not delete.
|
||||||
/*virtual*/ ~AITimer() { DoutEntering(dc::statemachine(mSMDebug), "~AITimer() [" << (void*)this << "]"); mFrameTimer.cancel(); }
|
/*virtual*/ ~AITimer() { DoutEntering(dc::statemachine(mSMDebug), "~AITimer() [" << (void*)this << "]"); mFrameTimer.cancel(); }
|
||||||
|
|||||||
@@ -105,8 +105,9 @@ void LLAvatarJoint::setValid( BOOL valid, BOOL recursive )
|
|||||||
for (child_list_t::iterator iter = mChildren.begin();
|
for (child_list_t::iterator iter = mChildren.begin();
|
||||||
iter != mChildren.end(); ++iter)
|
iter != mChildren.end(); ++iter)
|
||||||
{
|
{
|
||||||
LLAvatarJoint* joint = (LLAvatarJoint*)(*iter);
|
LLAvatarJoint* joint = dynamic_cast<LLAvatarJoint*>(*iter);
|
||||||
joint->setValid(valid, TRUE);
|
if (joint)
|
||||||
|
joint->setValid(valid, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,8 +139,9 @@ void LLAvatarJoint::setVisible(BOOL visible, BOOL recursive)
|
|||||||
for (child_list_t::iterator iter = mChildren.begin();
|
for (child_list_t::iterator iter = mChildren.begin();
|
||||||
iter != mChildren.end(); ++iter)
|
iter != mChildren.end(); ++iter)
|
||||||
{
|
{
|
||||||
LLAvatarJoint* joint = (LLAvatarJoint*)(*iter);
|
LLAvatarJoint* joint = dynamic_cast<LLAvatarJoint*>(*iter);
|
||||||
joint->setVisible(visible, recursive);
|
if(joint)
|
||||||
|
joint->setVisible(visible, recursive);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -366,8 +366,9 @@ void LLAvatarJointMesh::setupJoint(LLAvatarJoint* current_joint)
|
|||||||
for (LLJoint::child_list_t::iterator iter = current_joint->mChildren.begin();
|
for (LLJoint::child_list_t::iterator iter = current_joint->mChildren.begin();
|
||||||
iter != current_joint->mChildren.end(); ++iter)
|
iter != current_joint->mChildren.end(); ++iter)
|
||||||
{
|
{
|
||||||
LLAvatarJoint* child_joint = (LLAvatarJoint*)(*iter);
|
LLAvatarJoint* child_joint = dynamic_cast<LLAvatarJoint*>(*iter);
|
||||||
setupJoint(child_joint);
|
if(child_joint)
|
||||||
|
setupJoint(child_joint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -154,13 +154,13 @@ BOOL LLPolySkeletalDistortion::setInfo(LLPolySkeletalDistortionInfo *info)
|
|||||||
for (LLJoint::child_list_t::iterator iter = joint->mChildren.begin();
|
for (LLJoint::child_list_t::iterator iter = joint->mChildren.begin();
|
||||||
iter != joint->mChildren.end(); ++iter)
|
iter != joint->mChildren.end(); ++iter)
|
||||||
{
|
{
|
||||||
LLAvatarJoint* child_joint = (LLAvatarJoint*)(*iter);
|
LLAvatarJoint* child_joint = dynamic_cast<LLAvatarJoint*>(*iter);
|
||||||
if (child_joint->inheritScale())
|
if (child_joint && child_joint->inheritScale())
|
||||||
{
|
{
|
||||||
LLVector3 childDeformation = LLVector3(child_joint->getScale());
|
LLVector3 childDeformation = LLVector3(child_joint->getScale());
|
||||||
childDeformation.scaleVec(bone_info->mScaleDeformation);
|
childDeformation.scaleVec(bone_info->mScaleDeformation);
|
||||||
mJointScales[child_joint] = childDeformation;
|
mJointScales[child_joint] = childDeformation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bone_info->mHasPositionDeformation)
|
if (bone_info->mHasPositionDeformation)
|
||||||
|
|||||||
@@ -239,7 +239,7 @@ inline typename T::mapped_type get_ptr_in_map(const T& inmap, typename T::key_ty
|
|||||||
//
|
//
|
||||||
//Singu note: This has been generalized to support a broader range of sequence containers
|
//Singu note: This has been generalized to support a broader range of sequence containers
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline typename T::iterator vector_replace_with_last(T& invec, typename T::iterator& iter)
|
inline typename T::iterator vector_replace_with_last(T& invec, typename T::iterator iter)
|
||||||
{
|
{
|
||||||
typename T::iterator last = invec.end();
|
typename T::iterator last = invec.end();
|
||||||
if (iter == invec.end())
|
if (iter == invec.end())
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ LLURLRequest::LLURLRequest(LLURLRequest::ERequestAction action, std::string cons
|
|||||||
LLHTTPClient::ResponderPtr responder, AIHTTPHeaders& headers, AIPerService::Approvement* approved,
|
LLHTTPClient::ResponderPtr responder, AIHTTPHeaders& headers, AIPerService::Approvement* approved,
|
||||||
bool keepalive, bool is_auth, bool compression) :
|
bool keepalive, bool is_auth, bool compression) :
|
||||||
mAction(action), mURL(url), mKeepAlive(keepalive), mIsAuth(is_auth), mNoCompression(!compression),
|
mAction(action), mURL(url), mKeepAlive(keepalive), mIsAuth(is_auth), mNoCompression(!compression),
|
||||||
mBody(body), mResponder(responder), mHeaders(headers), mResponderNameCache(responder ? responder->getName() : "<uninitialized>")
|
mBody(body), mResponder(responder), mHeaders(headers), mResponderNameCache(std::string("LLURLRequest:") + std::string(responder ? responder->getName() : "<uninitialized>"))
|
||||||
{
|
{
|
||||||
if (approved)
|
if (approved)
|
||||||
{
|
{
|
||||||
@@ -276,32 +276,4 @@ bool LLURLRequest::configure(AICurlEasyRequest_wat const& curlEasyRequest_w)
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called from AIStateMachine::mainloop, but put here because we don't want to include llurlrequest.h there of course.
|
|
||||||
void print_statemachine_diagnostics(U64 total_clocks, U64 max_delta, AIEngine::queued_type::const_reference slowest_element)
|
|
||||||
{
|
|
||||||
AIStateMachine const& slowest_state_machine = slowest_element.statemachine();
|
|
||||||
LLURLRequest const* request = dynamic_cast<LLURLRequest const*>(&slowest_state_machine);
|
|
||||||
F64 const tfactor = 1000 / calc_clock_frequency();
|
|
||||||
std::ostringstream msg;
|
|
||||||
if (total_clocks > max_delta)
|
|
||||||
{
|
|
||||||
msg << "AIStateMachine::mainloop did run for " << (total_clocks * tfactor) << " ms. The slowest ";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
msg << "AIStateMachine::mainloop: A ";
|
|
||||||
}
|
|
||||||
msg << "state machine ";
|
|
||||||
if (request)
|
|
||||||
{
|
|
||||||
msg << "(" << request->getResponderName() << ") ";
|
|
||||||
}
|
|
||||||
msg << "ran for " << (max_delta * tfactor) << " ms";
|
|
||||||
if (slowest_state_machine.getRuntime() > max_delta)
|
|
||||||
{
|
|
||||||
msg << " (" << (slowest_state_machine.getRuntime() * tfactor) << " ms in total now)";
|
|
||||||
}
|
|
||||||
msg << ".";
|
|
||||||
llwarns << msg.str() << llendl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ class LLURLRequest : public AICurlEasyRequestStateMachine {
|
|||||||
/**
|
/**
|
||||||
* @brief Cached value of responder->getName() as passed to the constructor.
|
* @brief Cached value of responder->getName() as passed to the constructor.
|
||||||
*/
|
*/
|
||||||
char const* getResponderName(void) const { return mResponderNameCache; }
|
/*virtual*/ const char* getName() const { return mResponderNameCache.c_str(); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Call abort(), not delete.
|
// Call abort(), not delete.
|
||||||
@@ -113,7 +113,7 @@ class LLURLRequest : public AICurlEasyRequestStateMachine {
|
|||||||
U32 mBodySize;
|
U32 mBodySize;
|
||||||
LLHTTPClient::ResponderPtr mResponder;
|
LLHTTPClient::ResponderPtr mResponder;
|
||||||
AIHTTPHeaders mHeaders;
|
AIHTTPHeaders mHeaders;
|
||||||
char const* mResponderNameCache;
|
std::string mResponderNameCache;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Handle initializing the object.
|
// Handle initializing the object.
|
||||||
|
|||||||
@@ -1543,6 +1543,8 @@ class UpdateItemSM : public AIStateMachine
|
|||||||
|
|
||||||
static void add(UpdateItem const& ui);
|
static void add(UpdateItem const& ui);
|
||||||
|
|
||||||
|
/*virtual*/ const char* getName() const { return "UpdateItemSM"; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static UpdateItemSM* sSelf;
|
static UpdateItemSM* sSelf;
|
||||||
typedef std::deque<UpdateItem> updateQueue_type;
|
typedef std::deque<UpdateItem> updateQueue_type;
|
||||||
|
|||||||
@@ -46,16 +46,36 @@
|
|||||||
|
|
||||||
static LLRegisterWidget<LLRadioGroup> r("radio_group");
|
static LLRegisterWidget<LLRadioGroup> r("radio_group");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A checkbox control with use_radio_style == true.
|
||||||
|
*/
|
||||||
|
class LLRadioCtrl : public LLCheckBoxCtrl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LLRadioCtrl(const std::string& name, const LLRect& rect, const std::string& label, const std::string& value = "", const LLFontGL* font = NULL, commit_callback_t commit_callback = NULL);
|
||||||
|
/*virtual*/ ~LLRadioCtrl();
|
||||||
|
|
||||||
|
virtual LLXMLNodePtr getXML(bool save_children = true) const;
|
||||||
|
/*virtual*/ void setValue(const LLSD& value);
|
||||||
|
|
||||||
|
LLSD getPayload() { return mPayload; }
|
||||||
|
protected:
|
||||||
|
friend class LLUICtrlFactory;
|
||||||
|
|
||||||
|
LLSD mPayload; // stores data that this item represents in the radio group
|
||||||
|
};
|
||||||
|
|
||||||
LLRadioGroup::LLRadioGroup(const std::string& name, const LLRect& rect,
|
LLRadioGroup::LLRadioGroup(const std::string& name, const LLRect& rect,
|
||||||
S32 initial_index, commit_callback_t commit_callback,
|
S32 initial_index, commit_callback_t commit_callback,
|
||||||
BOOL border) :
|
bool border, bool allow_deselect) :
|
||||||
LLUICtrl(name, rect, TRUE, commit_callback, FOLLOWS_LEFT | FOLLOWS_TOP),
|
LLUICtrl(name, rect, TRUE, commit_callback, FOLLOWS_LEFT | FOLLOWS_TOP),
|
||||||
mSelectedIndex(initial_index)
|
mSelectedIndex(initial_index),
|
||||||
|
mAllowDeselect(allow_deselect)
|
||||||
{
|
{
|
||||||
init(border);
|
init(border);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLRadioGroup::init(BOOL border)
|
void LLRadioGroup::init(bool border)
|
||||||
{
|
{
|
||||||
if (border)
|
if (border)
|
||||||
{
|
{
|
||||||
@@ -67,12 +87,19 @@ void LLRadioGroup::init(BOOL border)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
LLRadioGroup::~LLRadioGroup()
|
LLRadioGroup::~LLRadioGroup()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// virtual
|
||||||
|
BOOL LLRadioGroup::postBuild()
|
||||||
|
{
|
||||||
|
if (!mRadioButtons.empty())
|
||||||
|
{
|
||||||
|
mRadioButtons[0]->setTabStop(true);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
// virtual
|
// virtual
|
||||||
void LLRadioGroup::setEnabled(BOOL enabled)
|
void LLRadioGroup::setEnabled(BOOL enabled)
|
||||||
@@ -133,16 +160,39 @@ void LLRadioGroup::setIndexEnabled(S32 index, BOOL enabled)
|
|||||||
|
|
||||||
BOOL LLRadioGroup::setSelectedIndex(S32 index, BOOL from_event)
|
BOOL LLRadioGroup::setSelectedIndex(S32 index, BOOL from_event)
|
||||||
{
|
{
|
||||||
if (index < 0 || index >= (S32)mRadioButtons.size())
|
if ((S32)mRadioButtons.size() <= index )
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mSelectedIndex >= 0)
|
||||||
|
{
|
||||||
|
LLRadioCtrl* old_radio_item = mRadioButtons[mSelectedIndex];
|
||||||
|
old_radio_item->setTabStop(false);
|
||||||
|
old_radio_item->setValue( FALSE );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mRadioButtons[0]->setTabStop(false);
|
||||||
|
}
|
||||||
|
|
||||||
mSelectedIndex = index;
|
mSelectedIndex = index;
|
||||||
|
|
||||||
|
if (mSelectedIndex >= 0)
|
||||||
|
{
|
||||||
|
LLRadioCtrl* radio_item = mRadioButtons[mSelectedIndex];
|
||||||
|
radio_item->setTabStop(true);
|
||||||
|
radio_item->setValue( TRUE );
|
||||||
|
|
||||||
|
if (hasFocus())
|
||||||
|
{
|
||||||
|
radio_item->focusFirstItem(FALSE, FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!from_event)
|
if (!from_event)
|
||||||
{
|
{
|
||||||
setControlValue(getSelectedIndex());
|
setControlValue(getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -207,41 +257,23 @@ BOOL LLRadioGroup::handleKeyHere(KEY key, MASK mask)
|
|||||||
return handled;
|
return handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLRadioGroup::draw()
|
BOOL LLRadioGroup::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||||
{
|
{
|
||||||
S32 current_button = 0;
|
// grab focus preemptively, before child button takes mousecapture
|
||||||
|
//
|
||||||
BOOL take_focus = FALSE;
|
if (hasTabStop())
|
||||||
if (gFocusMgr.childHasKeyboardFocus(this))
|
|
||||||
{
|
{
|
||||||
take_focus = TRUE;
|
focusFirstItem(FALSE, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (button_list_t::iterator iter = mRadioButtons.begin();
|
return LLUICtrl::handleMouseDown(x, y, mask);
|
||||||
iter != mRadioButtons.end(); ++iter)
|
|
||||||
{
|
|
||||||
LLRadioCtrl* radio = *iter;
|
|
||||||
BOOL selected = (current_button == mSelectedIndex);
|
|
||||||
radio->setValue( selected );
|
|
||||||
if (take_focus && selected && !gFocusMgr.childHasKeyboardFocus(radio))
|
|
||||||
{
|
|
||||||
// don't flash keyboard focus when navigating via keyboard
|
|
||||||
BOOL DONT_FLASH = FALSE;
|
|
||||||
radio->focusFirstItem(FALSE, DONT_FLASH);
|
|
||||||
}
|
|
||||||
current_button++;
|
|
||||||
}
|
|
||||||
|
|
||||||
LLView::draw();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// When adding a button, we need to ensure that the radio
|
// When adding a button, we need to ensure that the radio
|
||||||
// group gets a message when the button is clicked.
|
// group gets a message when the button is clicked.
|
||||||
LLRadioCtrl* LLRadioGroup::addRadioButton(const std::string& name, const std::string& label, const LLRect& rect, const LLFontGL* font )
|
LLRadioCtrl* LLRadioGroup::addRadioButton(const std::string& name, const std::string& label, const LLRect& rect, const LLFontGL* font, const std::string& payload)
|
||||||
{
|
{
|
||||||
// Highlight will get fixed in draw method above
|
LLRadioCtrl* radio = new LLRadioCtrl(name, rect, label, payload, font, boost::bind(&LLRadioGroup::onClickButton, this, _1));
|
||||||
LLRadioCtrl* radio = new LLRadioCtrl(name, rect, label, font, boost::bind(&LLRadioGroup::onClickButton, this, _1));
|
|
||||||
addChild(radio);
|
addChild(radio);
|
||||||
mRadioButtons.push_back(radio);
|
mRadioButtons.push_back(radio);
|
||||||
return radio;
|
return radio;
|
||||||
@@ -252,7 +284,7 @@ LLRadioCtrl* LLRadioGroup::addRadioButton(const std::string& name, const std::st
|
|||||||
|
|
||||||
void LLRadioGroup::onClickButton(LLUICtrl* ctrl)
|
void LLRadioGroup::onClickButton(LLUICtrl* ctrl)
|
||||||
{
|
{
|
||||||
// llinfos << "LLRadioGroup::onClickButton" << llendl;
|
// LL_INFOS() << "LLRadioGroup::onClickButton" << LL_ENDL;
|
||||||
LLRadioCtrl* clicked_radio = dynamic_cast<LLRadioCtrl*>(ctrl);
|
LLRadioCtrl* clicked_radio = dynamic_cast<LLRadioCtrl*>(ctrl);
|
||||||
if (!clicked_radio)
|
if (!clicked_radio)
|
||||||
return;
|
return;
|
||||||
@@ -263,9 +295,15 @@ void LLRadioGroup::onClickButton(LLUICtrl* ctrl)
|
|||||||
LLRadioCtrl* radio = *iter;
|
LLRadioCtrl* radio = *iter;
|
||||||
if (radio == clicked_radio)
|
if (radio == clicked_radio)
|
||||||
{
|
{
|
||||||
// llinfos << "clicked button " << counter << llendl;
|
if (index == mSelectedIndex && mAllowDeselect)
|
||||||
setSelectedIndex(index);
|
{
|
||||||
setControlValue(index);
|
// don't select anything
|
||||||
|
setSelectedIndex(-1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setSelectedIndex(index);
|
||||||
|
}
|
||||||
|
|
||||||
// BUG: Calls click callback even if button didn't actually change
|
// BUG: Calls click callback even if button didn't actually change
|
||||||
onCommit();
|
onCommit();
|
||||||
@@ -281,13 +319,12 @@ void LLRadioGroup::onClickButton(LLUICtrl* ctrl)
|
|||||||
|
|
||||||
void LLRadioGroup::setValue( const LLSD& value )
|
void LLRadioGroup::setValue( const LLSD& value )
|
||||||
{
|
{
|
||||||
std::string value_name = value.asString();
|
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
for (button_list_t::const_iterator iter = mRadioButtons.begin();
|
for (button_list_t::const_iterator iter = mRadioButtons.begin();
|
||||||
iter != mRadioButtons.end(); ++iter)
|
iter != mRadioButtons.end(); ++iter)
|
||||||
{
|
{
|
||||||
LLRadioCtrl* radio = *iter;
|
LLRadioCtrl* radio = *iter;
|
||||||
if (radio->getName() == value_name)
|
if (radio->getPayload().asString() == value.asString())
|
||||||
{
|
{
|
||||||
setSelectedIndex(idx);
|
setSelectedIndex(idx);
|
||||||
idx = -1;
|
idx = -1;
|
||||||
@@ -304,8 +341,7 @@ void LLRadioGroup::setValue( const LLSD& value )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
llwarns << "LLRadioGroup::setValue: radio_item with name=\"" << value_name << "\" not found, radio_group values are set by radio_item name not value. Falling back on LLUICtrl::setValue." << llendl;
|
setSelectedIndex(-1, TRUE);
|
||||||
LLUICtrl::setValue(value);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -317,7 +353,7 @@ LLSD LLRadioGroup::getValue() const
|
|||||||
for (button_list_t::const_iterator iter = mRadioButtons.begin();
|
for (button_list_t::const_iterator iter = mRadioButtons.begin();
|
||||||
iter != mRadioButtons.end(); ++iter)
|
iter != mRadioButtons.end(); ++iter)
|
||||||
{
|
{
|
||||||
if (idx == index) return LLSD((*iter)->getName());
|
if (idx == index) return LLSD((*iter)->getPayload());
|
||||||
++idx;
|
++idx;
|
||||||
}
|
}
|
||||||
return LLSD();
|
return LLSD();
|
||||||
@@ -333,6 +369,7 @@ LLXMLNodePtr LLRadioGroup::getXML(bool save_children) const
|
|||||||
// Attributes
|
// Attributes
|
||||||
|
|
||||||
node->createChild("draw_border", TRUE)->setBoolValue(mHasBorder);
|
node->createChild("draw_border", TRUE)->setBoolValue(mHasBorder);
|
||||||
|
node->createChild("allow_deselect", TRUE)->setBoolValue(mAllowDeselect);
|
||||||
|
|
||||||
// Contents
|
// Contents
|
||||||
|
|
||||||
@@ -355,17 +392,21 @@ LLView* LLRadioGroup::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory
|
|||||||
U32 initial_value = 0;
|
U32 initial_value = 0;
|
||||||
node->getAttributeU32("initial_value", initial_value);
|
node->getAttributeU32("initial_value", initial_value);
|
||||||
|
|
||||||
BOOL draw_border = TRUE;
|
bool draw_border = true;
|
||||||
node->getAttributeBOOL("draw_border", draw_border);
|
node->getAttribute_bool("draw_border", draw_border);
|
||||||
|
|
||||||
|
bool allow_deselect = false;
|
||||||
|
node->getAttribute_bool("allow_deselect", allow_deselect);
|
||||||
|
|
||||||
LLRect rect;
|
LLRect rect;
|
||||||
createRect(node, rect, parent, LLRect());
|
createRect(node, rect, parent, LLRect());
|
||||||
|
|
||||||
LLRadioGroup* radio_group = new LLRadioGroup("radio_group",
|
LLRadioGroup* radio_group = new LLRadioGroup("radio_group",
|
||||||
rect,
|
rect,
|
||||||
initial_value,
|
initial_value,
|
||||||
NULL,
|
NULL,
|
||||||
draw_border);
|
draw_border,
|
||||||
|
allow_deselect);
|
||||||
|
|
||||||
const std::string& contents = node->getValue();
|
const std::string& contents = node->getValue();
|
||||||
|
|
||||||
@@ -406,7 +447,13 @@ LLView* LLRadioGroup::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory
|
|||||||
createRect(child, item_rect, radio_group, rect);
|
createRect(child, item_rect, radio_group, rect);
|
||||||
|
|
||||||
std::string item_label = child->getTextContents();
|
std::string item_label = child->getTextContents();
|
||||||
LLRadioCtrl* radio = radio_group->addRadioButton("radio", item_label, item_rect, font);
|
node->getAttributeString("label", item_label);
|
||||||
|
std::string item_name("radio");
|
||||||
|
node->getAttributeString("name", item_name);
|
||||||
|
std::string payload(item_name); // Support old-style name as payload
|
||||||
|
node->getAttributeString("value", payload);
|
||||||
|
node->getAttributeString("initial_value", payload); // Synonym
|
||||||
|
LLRadioCtrl* radio = radio_group->addRadioButton(item_name, item_label, item_rect, font, payload);
|
||||||
|
|
||||||
radio->initFromXML(child, radio_group);
|
radio->initFromXML(child, radio_group);
|
||||||
}
|
}
|
||||||
@@ -432,11 +479,10 @@ LLUUID LLRadioGroup::getCurrentID() const
|
|||||||
BOOL LLRadioGroup::setSelectedByValue(const LLSD& value, BOOL selected)
|
BOOL LLRadioGroup::setSelectedByValue(const LLSD& value, BOOL selected)
|
||||||
{
|
{
|
||||||
S32 idx = 0;
|
S32 idx = 0;
|
||||||
std::string value_string = value.asString();
|
|
||||||
for (button_list_t::const_iterator iter = mRadioButtons.begin();
|
for (button_list_t::const_iterator iter = mRadioButtons.begin();
|
||||||
iter != mRadioButtons.end(); ++iter)
|
iter != mRadioButtons.end(); ++iter)
|
||||||
{
|
{
|
||||||
if((*iter)->getName() == value_string)
|
if((*iter)->getPayload().asString() == value.asString())
|
||||||
{
|
{
|
||||||
setSelectedIndex(idx);
|
setSelectedIndex(idx);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -455,11 +501,10 @@ LLSD LLRadioGroup::getSelectedValue()
|
|||||||
BOOL LLRadioGroup::isSelected(const LLSD& value) const
|
BOOL LLRadioGroup::isSelected(const LLSD& value) const
|
||||||
{
|
{
|
||||||
S32 idx = 0;
|
S32 idx = 0;
|
||||||
std::string value_string = value.asString();
|
|
||||||
for (button_list_t::const_iterator iter = mRadioButtons.begin();
|
for (button_list_t::const_iterator iter = mRadioButtons.begin();
|
||||||
iter != mRadioButtons.end(); ++iter)
|
iter != mRadioButtons.end(); ++iter)
|
||||||
{
|
{
|
||||||
if((*iter)->getName() == value_string)
|
if((*iter)->getPayload().asString() == value.asString())
|
||||||
{
|
{
|
||||||
if (idx == mSelectedIndex)
|
if (idx == mSelectedIndex)
|
||||||
{
|
{
|
||||||
@@ -481,6 +526,17 @@ BOOL LLRadioGroup::operateOnAll(EOperation op)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LLRadioCtrl::LLRadioCtrl(const std::string& name, const LLRect& rect, const std::string& label, const std::string& value, const LLFontGL* font, commit_callback_t commit_callback)
|
||||||
|
: LLCheckBoxCtrl(name, rect, label, font, commit_callback, FALSE, RADIO_STYLE),
|
||||||
|
mPayload(value)
|
||||||
|
{
|
||||||
|
setTabStop(FALSE);
|
||||||
|
// use name as default "Value" for backwards compatibility
|
||||||
|
if (value.empty())
|
||||||
|
{
|
||||||
|
mPayload = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LLRadioCtrl::~LLRadioCtrl()
|
LLRadioCtrl::~LLRadioCtrl()
|
||||||
{
|
{
|
||||||
@@ -499,7 +555,7 @@ LLXMLNodePtr LLRadioCtrl::getXML(bool save_children) const
|
|||||||
|
|
||||||
node->setName(LL_RADIO_ITEM_TAG);
|
node->setName(LL_RADIO_ITEM_TAG);
|
||||||
|
|
||||||
node->setStringValue(getLabel());
|
node->createChild("value", TRUE)->setStringValue(mPayload);
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,26 +37,6 @@
|
|||||||
#include "llcheckboxctrl.h"
|
#include "llcheckboxctrl.h"
|
||||||
#include "llctrlselectioninterface.h"
|
#include "llctrlselectioninterface.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A checkbox control with use_radio_style == true.
|
|
||||||
*/
|
|
||||||
class LLRadioCtrl : public LLCheckBoxCtrl
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
LLRadioCtrl(const std::string& name, const LLRect& rect, const std::string& label, const LLFontGL* font = NULL,
|
|
||||||
commit_callback_t commit_callback = NULL) :
|
|
||||||
LLCheckBoxCtrl(name, rect, label, font, commit_callback, FALSE, RADIO_STYLE)
|
|
||||||
{
|
|
||||||
setTabStop(FALSE);
|
|
||||||
}
|
|
||||||
/*virtual*/ ~LLRadioCtrl();
|
|
||||||
|
|
||||||
virtual LLXMLNodePtr getXML(bool save_children = true) const;
|
|
||||||
/*virtual*/ void setValue(const LLSD& value);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* An invisible view containing multiple mutually exclusive toggling
|
* An invisible view containing multiple mutually exclusive toggling
|
||||||
* buttons (usually radio buttons). Automatically handles the mutex
|
* buttons (usually radio buttons). Automatically handles the mutex
|
||||||
@@ -66,25 +46,32 @@ class LLRadioGroup
|
|||||||
: public LLUICtrl, public LLCtrlSelectionInterface
|
: public LLUICtrl, public LLCtrlSelectionInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Radio group constructor. Doesn't rely on
|
|
||||||
// needing a control
|
// Radio group constructor. Doesn't rely on needing a control
|
||||||
LLRadioGroup(const std::string& name, const LLRect& rect,
|
LLRadioGroup(const std::string& name, const LLRect& rect,
|
||||||
S32 initial_index,
|
S32 initial_index,
|
||||||
commit_callback_t commit_callback,
|
commit_callback_t commit_callback,
|
||||||
BOOL border = TRUE);
|
bool border = true, bool allow_deselect = false);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
friend class LLUICtrlFactory;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
virtual ~LLRadioGroup();
|
virtual ~LLRadioGroup();
|
||||||
|
|
||||||
|
virtual BOOL postBuild();
|
||||||
|
|
||||||
|
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||||
|
|
||||||
virtual BOOL handleKeyHere(KEY key, MASK mask);
|
virtual BOOL handleKeyHere(KEY key, MASK mask);
|
||||||
|
|
||||||
virtual void setEnabled(BOOL enabled);
|
virtual void setEnabled(BOOL enabled);
|
||||||
virtual LLXMLNodePtr getXML(bool save_children = true) const;
|
virtual LLXMLNodePtr getXML(bool save_children = true) const;
|
||||||
static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
|
static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
|
||||||
void setIndexEnabled(S32 index, BOOL enabled);
|
void setIndexEnabled(S32 index, BOOL enabled);
|
||||||
|
|
||||||
// return the index value of the selected item
|
// return the index value of the selected item
|
||||||
S32 getSelectedIndex() const { return mSelectedIndex; }
|
S32 getSelectedIndex() const { return mSelectedIndex; }
|
||||||
|
|
||||||
// set the index value programatically
|
// set the index value programatically
|
||||||
BOOL setSelectedIndex(S32 index, BOOL from_event = FALSE);
|
BOOL setSelectedIndex(S32 index, BOOL from_event = FALSE);
|
||||||
|
|
||||||
@@ -92,14 +79,10 @@ public:
|
|||||||
virtual void setValue(const LLSD& value );
|
virtual void setValue(const LLSD& value );
|
||||||
virtual LLSD getValue() const;
|
virtual LLSD getValue() const;
|
||||||
|
|
||||||
// Draw the group, but also fix the highlighting based on the control.
|
|
||||||
void draw();
|
|
||||||
|
|
||||||
// You must use this method to add buttons to a radio group.
|
// You must use this method to add buttons to a radio group.
|
||||||
// Don't use addChild -- it won't set the callback function
|
// Don't use addChild -- it won't set the callback function
|
||||||
// correctly.
|
// correctly.
|
||||||
LLRadioCtrl* addRadioButton(const std::string& name, const std::string& label, const LLRect& rect, const LLFontGL* font);
|
class LLRadioCtrl* addRadioButton(const std::string& name, const std::string& label, const LLRect& rect, const LLFontGL* font, const std::string& payload = "");
|
||||||
LLRadioCtrl* getRadioButton(const S32& index) { return mRadioButtons[index]; }
|
|
||||||
// Update the control as needed. Userdata must be a pointer to the button.
|
// Update the control as needed. Userdata must be a pointer to the button.
|
||||||
void onClickButton(LLUICtrl* clicked_radio);
|
void onClickButton(LLUICtrl* clicked_radio);
|
||||||
|
|
||||||
@@ -123,14 +106,15 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
// protected function shared by the two constructors.
|
// protected function shared by the two constructors.
|
||||||
void init(BOOL border);
|
void init(bool border);
|
||||||
|
|
||||||
S32 mSelectedIndex;
|
S32 mSelectedIndex;
|
||||||
typedef std::vector<LLRadioCtrl*> button_list_t;
|
|
||||||
|
typedef std::vector<class LLRadioCtrl*> button_list_t;
|
||||||
button_list_t mRadioButtons;
|
button_list_t mRadioButtons;
|
||||||
|
|
||||||
BOOL mHasBorder;
|
bool mHasBorder;
|
||||||
|
bool mAllowDeselect; // user can click on an already selected option to deselect it
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ void HippoGridInfo::setGridNick(std::string gridNick)
|
|||||||
{
|
{
|
||||||
mIsInProductionGrid = true;
|
mIsInProductionGrid = true;
|
||||||
}
|
}
|
||||||
if(gridNick == "avination")
|
else if(gridNick == "avination")
|
||||||
{
|
{
|
||||||
mIsInAvination = true;
|
mIsInAvination = true;
|
||||||
}
|
}
|
||||||
@@ -177,12 +177,12 @@ void HippoGridInfo::setLoginUri(const std::string& loginUri)
|
|||||||
useHttps();
|
useHttps();
|
||||||
setPlatform(PLATFORM_SECONDLIFE);
|
setPlatform(PLATFORM_SECONDLIFE);
|
||||||
}
|
}
|
||||||
if (utf8str_tolower(LLURI(mLoginUri).hostName()) == "login.aditi.lindenlab.com")
|
else if (utf8str_tolower(LLURI(mLoginUri).hostName()) == "login.aditi.lindenlab.com")
|
||||||
{
|
{
|
||||||
useHttps();
|
useHttps();
|
||||||
setPlatform(PLATFORM_SECONDLIFE);
|
setPlatform(PLATFORM_SECONDLIFE);
|
||||||
}
|
}
|
||||||
if (utf8str_tolower(LLURI(mLoginUri).hostName()) == "login.avination.com" ||
|
else if (utf8str_tolower(LLURI(mLoginUri).hostName()) == "login.avination.com" ||
|
||||||
utf8str_tolower(LLURI(mLoginUri).hostName()) == "login.avination.net")
|
utf8str_tolower(LLURI(mLoginUri).hostName()) == "login.avination.net")
|
||||||
{
|
{
|
||||||
mIsInAvination = true;
|
mIsInAvination = true;
|
||||||
|
|||||||
@@ -1787,7 +1787,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater, bool de
|
|||||||
child_list_t::const_iterator it, end=childs->end();
|
child_list_t::const_iterator it, end=childs->end();
|
||||||
for (it=childs->begin(); it!=end; ++it)
|
for (it=childs->begin(); it!=end; ++it)
|
||||||
{
|
{
|
||||||
LLRadioCtrl *ctrl = dynamic_cast<LLRadioCtrl*>(*it);
|
LLView* ctrl = *it;
|
||||||
if (ctrl && (ctrl->getName() == "texture"))
|
if (ctrl && (ctrl->getName() == "texture"))
|
||||||
{
|
{
|
||||||
ctrl->setLabelArg("[UPLOADFEE]", fee);
|
ctrl->setLabelArg("[UPLOADFEE]", fee);
|
||||||
|
|||||||
@@ -81,8 +81,6 @@ private:
|
|||||||
LLIconCtrl* mIcon;
|
LLIconCtrl* mIcon;
|
||||||
LLLineEditor* mLineEditor;
|
LLLineEditor* mLineEditor;
|
||||||
LLRadioGroup* mRadioGroup;
|
LLRadioGroup* mRadioGroup;
|
||||||
LLRadioCtrl* mRadio1;
|
|
||||||
LLRadioCtrl* mRadio2;
|
|
||||||
LLScrollContainer* mScroll;
|
LLScrollContainer* mScroll;
|
||||||
LLScrollListCtrl* mScrollList;
|
LLScrollListCtrl* mScrollList;
|
||||||
LLTabContainer* mTab;
|
LLTabContainer* mTab;
|
||||||
|
|||||||
@@ -2851,6 +2851,14 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
|
|||||||
restoreItem();
|
restoreItem();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// <singu> Move displaced inventory to lost and found
|
||||||
|
else if ("move_to_lost_and_found" == action)
|
||||||
|
{
|
||||||
|
gInventory.changeCategoryParent(getCategory(), gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND), TRUE);
|
||||||
|
gInventory.addChangedMask(LLInventoryObserver::REBUILD, mUUID);
|
||||||
|
gInventory.notifyObservers();
|
||||||
|
}
|
||||||
|
// </singu>
|
||||||
#ifdef DELETE_SYSTEM_FOLDERS
|
#ifdef DELETE_SYSTEM_FOLDERS
|
||||||
else if ("delete_system_folder" == action)
|
else if ("delete_system_folder" == action)
|
||||||
{
|
{
|
||||||
@@ -3365,6 +3373,14 @@ void LLFolderBridge::buildContextMenuBaseOptions(U32 flags)
|
|||||||
mWearables=TRUE;
|
mWearables=TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// <singu> Move displaced inventory to lost and found
|
||||||
|
else if (!isAgentInventory())
|
||||||
|
{
|
||||||
|
const LLUUID& library(gInventory.getLibraryRootFolderID());
|
||||||
|
if (library == mUUID || gInventory.isObjectDescendentOf(mUUID, library))
|
||||||
|
mItems.push_back(std::string("Move to Lost And Found"));
|
||||||
|
}
|
||||||
|
// </singu>
|
||||||
|
|
||||||
// Preemptively disable system folder removal if more than one item selected.
|
// Preemptively disable system folder removal if more than one item selected.
|
||||||
if ((flags & FIRST_SELECTED_ITEM) == 0)
|
if ((flags & FIRST_SELECTED_ITEM) == 0)
|
||||||
|
|||||||
@@ -766,7 +766,7 @@ std::string LLMeshRepoThread::constructUrl(LLUUID mesh_id)
|
|||||||
return http_url;
|
return http_url;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
|
bool LLMeshRepoThread::getMeshHeaderInfo(const LLUUID& mesh_id, const char* block_name, MeshHeaderInfo& info)
|
||||||
{ //protected by mMutex
|
{ //protected by mMutex
|
||||||
|
|
||||||
if (!mHeaderMutex)
|
if (!mHeaderMutex)
|
||||||
@@ -774,229 +774,141 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
mHeaderMutex->lock();
|
LLMutexLock lock(mHeaderMutex);
|
||||||
|
|
||||||
if (mMeshHeader.find(mesh_id) == mMeshHeader.end())
|
if (mMeshHeader.find(mesh_id) == mMeshHeader.end())
|
||||||
{ //we have no header info for this mesh, do nothing
|
{ //we have no header info for this mesh, do nothing
|
||||||
mHeaderMutex->unlock();
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ret = true ;
|
if ((info.mHeaderSize = mMeshHeaderSize[mesh_id]) > 0)
|
||||||
U32 header_size = mMeshHeaderSize[mesh_id];
|
|
||||||
|
|
||||||
if (header_size > 0)
|
|
||||||
{
|
{
|
||||||
S32 version = mMeshHeader[mesh_id]["version"].asInteger();
|
info.mVersion = mMeshHeader[mesh_id]["version"].asInteger();
|
||||||
S32 offset = header_size + mMeshHeader[mesh_id]["skin"]["offset"].asInteger();
|
info.mOffset = info.mHeaderSize + mMeshHeader[mesh_id][block_name]["offset"].asInteger();
|
||||||
S32 size = mMeshHeader[mesh_id]["skin"]["size"].asInteger();
|
info.mSize = mMeshHeader[mesh_id][block_name]["size"].asInteger();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
mHeaderMutex->unlock();
|
bool LLMeshRepoThread::loadInfoFromVFS(const LLUUID& mesh_id, MeshHeaderInfo& info, boost::function<bool(const LLUUID&, U8*, S32)> fn)
|
||||||
|
{
|
||||||
|
//check VFS for mesh skin info
|
||||||
|
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH);
|
||||||
|
if (file.getSize() >= info.mOffset + info.mSize)
|
||||||
|
{
|
||||||
|
LLMeshRepository::sCacheBytesRead += info.mSize;
|
||||||
|
|
||||||
if (version <= MAX_MESH_VERSION && offset >= 0 && size > 0)
|
file.seek(info.mOffset);
|
||||||
|
U8* buffer = new U8[info.mSize];
|
||||||
|
file.read(buffer, info.mSize);
|
||||||
|
|
||||||
|
//make sure buffer isn't all 0's by checking the first 1KB (reserved block but not written)
|
||||||
|
bool zero = true;
|
||||||
|
for (S32 i = 0; i < llmin(info.mSize, S32(1024)) && zero; ++i)
|
||||||
{
|
{
|
||||||
//check VFS for mesh skin info
|
zero = buffer[i] > 0 ? false : true;
|
||||||
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH);
|
}
|
||||||
if (file.getSize() >= offset+size)
|
|
||||||
|
if (!zero)
|
||||||
|
{ //attempt to parse
|
||||||
|
if (fn(mesh_id, buffer, info.mSize))
|
||||||
{
|
{
|
||||||
LLMeshRepository::sCacheBytesRead += size;
|
|
||||||
file.seek(offset);
|
|
||||||
U8* buffer = new U8[size];
|
|
||||||
file.read(buffer, size);
|
|
||||||
|
|
||||||
//make sure buffer isn't all 0's by checking the first 1KB (reserved block but not written)
|
|
||||||
bool zero = true;
|
|
||||||
for (S32 i = 0; i < llmin(size, 1024) && zero; ++i)
|
|
||||||
{
|
|
||||||
zero = buffer[i] > 0 ? false : true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!zero)
|
|
||||||
{ //attempt to parse
|
|
||||||
if (skinInfoReceived(mesh_id, buffer, size))
|
|
||||||
{
|
|
||||||
delete[] buffer;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
delete[] buffer;
|
delete[] buffer;
|
||||||
}
|
return true;
|
||||||
|
|
||||||
//reading from VFS failed for whatever reason, fetch from sim
|
|
||||||
AIHTTPHeaders headers("Accept", "application/octet-stream");
|
|
||||||
|
|
||||||
std::string http_url = constructUrl(mesh_id);
|
|
||||||
if (!http_url.empty())
|
|
||||||
{
|
|
||||||
ret = LLHTTPClient::getByteRange(http_url, headers, offset, size,
|
|
||||||
new LLMeshSkinInfoResponder(mesh_id, offset, size));
|
|
||||||
if (ret)
|
|
||||||
{
|
|
||||||
LLMeshRepository::sHTTPRequestCount++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete[] buffer;
|
||||||
}
|
}
|
||||||
else
|
return false;
|
||||||
{
|
}
|
||||||
mHeaderMutex->unlock();
|
|
||||||
|
bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
|
||||||
|
{
|
||||||
|
MeshHeaderInfo info;
|
||||||
|
if (!getMeshHeaderInfo(mesh_id, "skin", info))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info.mHeaderSize > 0 && info.mVersion <= MAX_MESH_VERSION && info.mOffset >= 0 && info.mSize > 0)
|
||||||
|
{
|
||||||
|
//check VFS for mesh skin info
|
||||||
|
if (loadInfoFromVFS(mesh_id, info, boost::bind(&LLMeshRepoThread::skinInfoReceived, this, _1, _2, _3 )))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
//reading from VFS failed for whatever reason, fetch from sim
|
||||||
|
AIHTTPHeaders headers("Accept", "application/octet-stream");
|
||||||
|
|
||||||
|
std::string http_url = constructUrl(mesh_id);
|
||||||
|
if (!http_url.empty())
|
||||||
|
{
|
||||||
|
if (!LLHTTPClient::getByteRange(http_url, headers, info.mOffset, info.mSize,
|
||||||
|
new LLMeshSkinInfoResponder(mesh_id, info.mOffset, info.mSize)))
|
||||||
|
return false;
|
||||||
|
LLMeshRepository::sHTTPRequestCount++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//early out was not hit, effectively fetched
|
//early out was not hit, effectively fetched
|
||||||
return ret;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
|
bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
|
||||||
{ //protected by mMutex
|
{
|
||||||
if (!mHeaderMutex)
|
MeshHeaderInfo info;
|
||||||
|
if (!getMeshHeaderInfo(mesh_id, "physics_convex", info))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
mHeaderMutex->lock();
|
if (info.mHeaderSize > 0 && info.mVersion <= MAX_MESH_VERSION && info.mOffset >= 0 && info.mSize > 0)
|
||||||
|
|
||||||
if (mMeshHeader.find(mesh_id) == mMeshHeader.end())
|
|
||||||
{ //we have no header info for this mesh, do nothing
|
|
||||||
mHeaderMutex->unlock();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
U32 header_size = mMeshHeaderSize[mesh_id];
|
|
||||||
bool ret = true ;
|
|
||||||
|
|
||||||
if (header_size > 0)
|
|
||||||
{
|
{
|
||||||
S32 version = mMeshHeader[mesh_id]["version"].asInteger();
|
if (loadInfoFromVFS(mesh_id, info, boost::bind(&LLMeshRepoThread::decompositionReceived, this, _1, _2, _3 )))
|
||||||
S32 offset = header_size + mMeshHeader[mesh_id]["physics_convex"]["offset"].asInteger();
|
return true;
|
||||||
S32 size = mMeshHeader[mesh_id]["physics_convex"]["size"].asInteger();
|
|
||||||
|
|
||||||
mHeaderMutex->unlock();
|
//reading from VFS failed for whatever reason, fetch from sim
|
||||||
|
AIHTTPHeaders headers("Accept", "application/octet-stream");
|
||||||
|
|
||||||
if (version <= MAX_MESH_VERSION && offset >= 0 && size > 0)
|
std::string http_url = constructUrl(mesh_id);
|
||||||
{
|
if (!http_url.empty())
|
||||||
//check VFS for mesh skin info
|
{
|
||||||
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH);
|
if (!LLHTTPClient::getByteRange(http_url, headers, info.mOffset, info.mSize,
|
||||||
if (file.getSize() >= offset+size)
|
new LLMeshDecompositionResponder(mesh_id, info.mOffset, info.mSize)))
|
||||||
{
|
return false;
|
||||||
LLMeshRepository::sCacheBytesRead += size;
|
LLMeshRepository::sHTTPRequestCount++;
|
||||||
|
|
||||||
file.seek(offset);
|
|
||||||
U8* buffer = new U8[size];
|
|
||||||
file.read(buffer, size);
|
|
||||||
|
|
||||||
//make sure buffer isn't all 0's by checking the first 1KB (reserved block but not written)
|
|
||||||
bool zero = true;
|
|
||||||
for (S32 i = 0; i < llmin(size, 1024) && zero; ++i)
|
|
||||||
{
|
|
||||||
zero = buffer[i] > 0 ? false : true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!zero)
|
|
||||||
{ //attempt to parse
|
|
||||||
if (decompositionReceived(mesh_id, buffer, size))
|
|
||||||
{
|
|
||||||
delete[] buffer;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
delete[] buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
//reading from VFS failed for whatever reason, fetch from sim
|
|
||||||
AIHTTPHeaders headers("Accept", "application/octet-stream");
|
|
||||||
|
|
||||||
std::string http_url = constructUrl(mesh_id);
|
|
||||||
if (!http_url.empty())
|
|
||||||
{
|
|
||||||
ret = LLHTTPClient::getByteRange(http_url, headers, offset, size,
|
|
||||||
new LLMeshDecompositionResponder(mesh_id, offset, size));
|
|
||||||
if(ret)
|
|
||||||
{
|
|
||||||
LLMeshRepository::sHTTPRequestCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
mHeaderMutex->unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
//early out was not hit, effectively fetched
|
//early out was not hit, effectively fetched
|
||||||
return ret;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)
|
bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)
|
||||||
{ //protected by mMutex
|
{
|
||||||
if (!mHeaderMutex)
|
MeshHeaderInfo info;
|
||||||
|
if (!getMeshHeaderInfo(mesh_id, "physics_mesh", info))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
mHeaderMutex->lock();
|
if (info.mHeaderSize > 0)
|
||||||
|
|
||||||
if (mMeshHeader.find(mesh_id) == mMeshHeader.end())
|
|
||||||
{ //we have no header info for this mesh, do nothing
|
|
||||||
mHeaderMutex->unlock();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
U32 header_size = mMeshHeaderSize[mesh_id];
|
|
||||||
bool ret = true ;
|
|
||||||
|
|
||||||
if (header_size > 0)
|
|
||||||
{
|
{
|
||||||
S32 version = mMeshHeader[mesh_id]["version"].asInteger();
|
if (info.mVersion <= MAX_MESH_VERSION && info.mOffset >= 0 && info.mSize > 0)
|
||||||
S32 offset = header_size + mMeshHeader[mesh_id]["physics_mesh"]["offset"].asInteger();
|
|
||||||
S32 size = mMeshHeader[mesh_id]["physics_mesh"]["size"].asInteger();
|
|
||||||
|
|
||||||
mHeaderMutex->unlock();
|
|
||||||
|
|
||||||
if (version <= MAX_MESH_VERSION && offset >= 0 && size > 0)
|
|
||||||
{
|
{
|
||||||
//check VFS for mesh physics shape info
|
if (loadInfoFromVFS(mesh_id, info, boost::bind(&LLMeshRepoThread::physicsShapeReceived, this, _1, _2, _3 )))
|
||||||
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH);
|
return true;
|
||||||
if (file.getSize() >= offset+size)
|
|
||||||
{
|
|
||||||
LLMeshRepository::sCacheBytesRead += size;
|
|
||||||
file.seek(offset);
|
|
||||||
U8* buffer = new U8[size];
|
|
||||||
file.read(buffer, size);
|
|
||||||
|
|
||||||
//make sure buffer isn't all 0's by checking the first 1KB (reserved block but not written)
|
|
||||||
bool zero = true;
|
|
||||||
for (S32 i = 0; i < llmin(size, 1024) && zero; ++i)
|
|
||||||
{
|
|
||||||
zero = buffer[i] > 0 ? false : true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!zero)
|
|
||||||
{ //attempt to parse
|
|
||||||
if (physicsShapeReceived(mesh_id, buffer, size))
|
|
||||||
{
|
|
||||||
delete[] buffer;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
delete[] buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
//reading from VFS failed for whatever reason, fetch from sim
|
//reading from VFS failed for whatever reason, fetch from sim
|
||||||
AIHTTPHeaders headers("Accept", "application/octet-stream");
|
AIHTTPHeaders headers("Accept", "application/octet-stream");
|
||||||
|
|
||||||
std::string http_url = constructUrl(mesh_id);
|
std::string http_url = constructUrl(mesh_id);
|
||||||
if (!http_url.empty())
|
if (!http_url.empty())
|
||||||
{
|
{
|
||||||
ret = LLHTTPClient::getByteRange(http_url, headers, offset, size,
|
if (!LLHTTPClient::getByteRange(http_url, headers, info.mOffset, info.mSize,
|
||||||
new LLMeshPhysicsShapeResponder(mesh_id, offset, size));
|
new LLMeshPhysicsShapeResponder(mesh_id, info.mOffset, info.mSize)))
|
||||||
|
return false;
|
||||||
if(ret)
|
LLMeshRepository::sHTTPRequestCount++;
|
||||||
{
|
|
||||||
LLMeshRepository::sHTTPRequestCount++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1004,13 +916,9 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)
|
|||||||
physicsShapeReceived(mesh_id, NULL, 0);
|
physicsShapeReceived(mesh_id, NULL, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
mHeaderMutex->unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
//early out was not hit, effectively fetched
|
//early out was not hit, effectively fetched
|
||||||
return ret;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//static
|
//static
|
||||||
@@ -1086,72 +994,34 @@ bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params, U32& c
|
|||||||
|
|
||||||
//return false if failed to get mesh lod.
|
//return false if failed to get mesh lod.
|
||||||
bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod, U32& count)
|
bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod, U32& count)
|
||||||
{ //protected by mMutex
|
{
|
||||||
if (!mHeaderMutex)
|
LLUUID mesh_id = mesh_params.getSculptID();
|
||||||
|
MeshHeaderInfo info;
|
||||||
|
|
||||||
|
if (!getMeshHeaderInfo(mesh_id, header_lod[lod].c_str(), info))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
mHeaderMutex->lock();
|
if (info.mHeaderSize > 0)
|
||||||
|
|
||||||
bool retval = true;
|
|
||||||
|
|
||||||
LLUUID mesh_id = mesh_params.getSculptID();
|
|
||||||
|
|
||||||
U32 header_size = mMeshHeaderSize[mesh_id];
|
|
||||||
|
|
||||||
if (header_size > 0)
|
|
||||||
{
|
{
|
||||||
S32 version = mMeshHeader[mesh_id]["version"].asInteger();
|
if(info.mVersion <= MAX_MESH_VERSION && info.mOffset >= 0 && info.mSize > 0)
|
||||||
S32 offset = header_size + mMeshHeader[mesh_id][header_lod[lod]]["offset"].asInteger();
|
|
||||||
S32 size = mMeshHeader[mesh_id][header_lod[lod]]["size"].asInteger();
|
|
||||||
mHeaderMutex->unlock();
|
|
||||||
|
|
||||||
if (version <= MAX_MESH_VERSION && offset >= 0 && size > 0)
|
|
||||||
{
|
{
|
||||||
|
if (loadInfoFromVFS(mesh_id, info, boost::bind(&LLMeshRepoThread::lodReceived, this, mesh_params, lod, _2, _3 )))
|
||||||
//check VFS for mesh asset
|
return true;
|
||||||
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH);
|
|
||||||
if (file.getSize() >= offset+size)
|
|
||||||
{
|
|
||||||
LLMeshRepository::sCacheBytesRead += size;
|
|
||||||
file.seek(offset);
|
|
||||||
U8* buffer = new U8[size];
|
|
||||||
file.read(buffer, size);
|
|
||||||
|
|
||||||
//make sure buffer isn't all 0's by checking the first 1KB (reserved block but not written)
|
|
||||||
bool zero = true;
|
|
||||||
for (S32 i = 0; i < llmin(size, 1024) && zero; ++i)
|
|
||||||
{
|
|
||||||
zero = buffer[i] > 0 ? false : true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!zero)
|
|
||||||
{ //attempt to parse
|
|
||||||
if (lodReceived(mesh_params, lod, buffer, size))
|
|
||||||
{
|
|
||||||
delete[] buffer;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
delete[] buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
//reading from VFS failed for whatever reason, fetch from sim
|
//reading from VFS failed for whatever reason, fetch from sim
|
||||||
AIHTTPHeaders headers("Accept", "application/octet-stream");
|
AIHTTPHeaders headers("Accept", "application/octet-stream");
|
||||||
|
|
||||||
std::string http_url = constructUrl(mesh_id);
|
std::string http_url = constructUrl(mesh_id);
|
||||||
if (!http_url.empty())
|
if (!http_url.empty())
|
||||||
{
|
{
|
||||||
retval = LLHTTPClient::getByteRange(constructUrl(mesh_id), headers, offset, size,
|
count++;
|
||||||
new LLMeshLODResponder(mesh_params, lod, offset, size));
|
if (!LLHTTPClient::getByteRange(constructUrl(mesh_id), headers, info.mOffset, info.mSize,
|
||||||
|
new LLMeshLODResponder(mesh_params, lod, info.mOffset, info.mSize)))
|
||||||
if (retval)
|
return false;
|
||||||
{
|
LLMeshRepository::sHTTPRequestCount++;
|
||||||
LLMeshRepository::sHTTPRequestCount++;
|
|
||||||
}
|
|
||||||
count++;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1163,12 +1033,8 @@ bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod,
|
|||||||
mUnavailableQ.push(LODRequest(mesh_params, lod));
|
mUnavailableQ.push(LODRequest(mesh_params, lod));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
return true;
|
||||||
mHeaderMutex->unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* data, S32 data_size)
|
bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* data, S32 data_size)
|
||||||
@@ -1236,16 +1102,21 @@ bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* dat
|
|||||||
|
|
||||||
bool LLMeshRepoThread::lodReceived(const LLVolumeParams& mesh_params, S32 lod, U8* data, S32 data_size)
|
bool LLMeshRepoThread::lodReceived(const LLVolumeParams& mesh_params, S32 lod, U8* data, S32 data_size)
|
||||||
{
|
{
|
||||||
|
AIStateMachine::StateTimer timer("lodReceived");
|
||||||
LLPointer<LLVolume> volume = new LLVolume(mesh_params, LLVolumeLODGroup::getVolumeScaleFromDetail(lod));
|
LLPointer<LLVolume> volume = new LLVolume(mesh_params, LLVolumeLODGroup::getVolumeScaleFromDetail(lod));
|
||||||
std::string mesh_string((char*) data, data_size);
|
std::string mesh_string((char*) data, data_size);
|
||||||
std::istringstream stream(mesh_string);
|
std::istringstream stream(mesh_string);
|
||||||
|
|
||||||
|
AIStateMachine::StateTimer timer2("unpackVolumeFaces");
|
||||||
if (volume->unpackVolumeFaces(stream, data_size))
|
if (volume->unpackVolumeFaces(stream, data_size))
|
||||||
{
|
{
|
||||||
|
AIStateMachine::StateTimer timer("getNumFaces");
|
||||||
if (volume->getNumFaces() > 0)
|
if (volume->getNumFaces() > 0)
|
||||||
{
|
{
|
||||||
|
AIStateMachine::StateTimer timer("LoadedMesh");
|
||||||
LoadedMesh mesh(volume, mesh_params, lod);
|
LoadedMesh mesh(volume, mesh_params, lod);
|
||||||
{
|
{
|
||||||
|
AIStateMachine::StateTimer timer("LLMutexLock");
|
||||||
LLMutexLock lock(mMutex);
|
LLMutexLock lock(mMutex);
|
||||||
mLoadedQ.push(mesh);
|
mLoadedQ.push(mesh);
|
||||||
}
|
}
|
||||||
@@ -1900,6 +1771,7 @@ void LLMeshLODResponder::completedRaw(LLChannelDescriptors const& channels,
|
|||||||
{
|
{
|
||||||
if (is_internal_http_error_that_warrants_a_retry(mStatus) || mStatus == HTTP_SERVICE_UNAVAILABLE)
|
if (is_internal_http_error_that_warrants_a_retry(mStatus) || mStatus == HTTP_SERVICE_UNAVAILABLE)
|
||||||
{ //timeout or service unavailable, try again
|
{ //timeout or service unavailable, try again
|
||||||
|
AIStateMachine::StateTimer timer("loadMeshLOD");
|
||||||
llwarns << "Timeout or service unavailable, retrying." << llendl;
|
llwarns << "Timeout or service unavailable, retrying." << llendl;
|
||||||
LLMeshRepository::sHTTPRetryCount++;
|
LLMeshRepository::sHTTPRetryCount++;
|
||||||
gMeshRepo.mThread->loadMeshLOD(mMeshParams, mLOD);
|
gMeshRepo.mThread->loadMeshLOD(mMeshParams, mLOD);
|
||||||
@@ -1918,12 +1790,14 @@ void LLMeshLODResponder::completedRaw(LLChannelDescriptors const& channels,
|
|||||||
|
|
||||||
if (data_size > 0)
|
if (data_size > 0)
|
||||||
{
|
{
|
||||||
|
AIStateMachine::StateTimer timer("readAfter");
|
||||||
data = new U8[data_size];
|
data = new U8[data_size];
|
||||||
buffer->readAfter(channels.in(), NULL, data, data_size);
|
buffer->readAfter(channels.in(), NULL, data, data_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gMeshRepo.mThread->lodReceived(mMeshParams, mLOD, data, data_size))
|
if (gMeshRepo.mThread->lodReceived(mMeshParams, mLOD, data, data_size))
|
||||||
{
|
{
|
||||||
|
AIStateMachine::StateTimer timer("FileOpen");
|
||||||
//good fetch from sim, write to VFS for caching
|
//good fetch from sim, write to VFS for caching
|
||||||
LLVFile file(gVFS, mMeshParams.getSculptID(), LLAssetType::AT_MESH, LLVFile::WRITE);
|
LLVFile file(gVFS, mMeshParams.getSculptID(), LLAssetType::AT_MESH, LLVFile::WRITE);
|
||||||
|
|
||||||
@@ -1932,6 +1806,7 @@ void LLMeshLODResponder::completedRaw(LLChannelDescriptors const& channels,
|
|||||||
|
|
||||||
if (file.getSize() >= offset+size)
|
if (file.getSize() >= offset+size)
|
||||||
{
|
{
|
||||||
|
AIStateMachine::StateTimer timer("WriteData");
|
||||||
file.seek(offset);
|
file.seek(offset);
|
||||||
file.write(data, size);
|
file.write(data, size);
|
||||||
LLMeshRepository::sCacheBytesWritten += size;
|
LLMeshRepository::sCacheBytesWritten += size;
|
||||||
@@ -2157,6 +2032,7 @@ void LLMeshHeaderResponder::completedRaw(LLChannelDescriptors const& channels,
|
|||||||
|
|
||||||
if (is_internal_http_error_that_warrants_a_retry(mStatus) || mStatus == HTTP_SERVICE_UNAVAILABLE)
|
if (is_internal_http_error_that_warrants_a_retry(mStatus) || mStatus == HTTP_SERVICE_UNAVAILABLE)
|
||||||
{ //retry
|
{ //retry
|
||||||
|
AIStateMachine::StateTimer timer("Retry");
|
||||||
llwarns << "Timeout or service unavailable, retrying." << llendl;
|
llwarns << "Timeout or service unavailable, retrying." << llendl;
|
||||||
LLMeshRepository::sHTTPRetryCount++;
|
LLMeshRepository::sHTTPRetryCount++;
|
||||||
LLMeshRepoThread::HeaderRequest req(mMeshParams);
|
LLMeshRepoThread::HeaderRequest req(mMeshParams);
|
||||||
@@ -2173,16 +2049,19 @@ void LLMeshHeaderResponder::completedRaw(LLChannelDescriptors const& channels,
|
|||||||
|
|
||||||
S32 data_size = buffer->countAfter(channels.in(), NULL);
|
S32 data_size = buffer->countAfter(channels.in(), NULL);
|
||||||
|
|
||||||
U8* data = NULL;
|
static U8 data[16384];
|
||||||
|
llassert_always(data_size <= sizeof(data));
|
||||||
|
memset(data + data_size, 0, sizeof(data)-data_size);
|
||||||
|
|
||||||
if (data_size > 0)
|
if (data_size > 0)
|
||||||
{
|
{
|
||||||
data = new U8[data_size];
|
AIStateMachine::StateTimer timer("readAfter");
|
||||||
buffer->readAfter(channels.in(), NULL, data, data_size);
|
buffer->readAfter(channels.in(), NULL, data, data_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
LLMeshRepository::sBytesReceived += llmin(data_size, 4096);
|
LLMeshRepository::sBytesReceived += llmin(data_size, 4096);
|
||||||
|
|
||||||
|
AIStateMachine::StateTimer timer("headerReceived");
|
||||||
bool success = gMeshRepo.mThread->headerReceived(mMeshParams, data, data_size);
|
bool success = gMeshRepo.mThread->headerReceived(mMeshParams, data, data_size);
|
||||||
|
|
||||||
llassert(success);
|
llassert(success);
|
||||||
@@ -2193,7 +2072,7 @@ void LLMeshHeaderResponder::completedRaw(LLChannelDescriptors const& channels,
|
|||||||
<< "Unable to parse mesh header: "
|
<< "Unable to parse mesh header: "
|
||||||
<< mStatus << ": " << mReason << llendl;
|
<< mStatus << ": " << mReason << llendl;
|
||||||
}
|
}
|
||||||
else if (data && data_size > 0)
|
else if (data_size > 0)
|
||||||
{
|
{
|
||||||
//header was successfully retrieved from sim, cache in vfs
|
//header was successfully retrieved from sim, cache in vfs
|
||||||
LLUUID mesh_id = mMeshParams.getSculptID();
|
LLUUID mesh_id = mMeshParams.getSculptID();
|
||||||
@@ -2225,33 +2104,27 @@ void LLMeshHeaderResponder::completedRaw(LLChannelDescriptors const& channels,
|
|||||||
//only allocate as much space in the VFS as is needed for the local cache
|
//only allocate as much space in the VFS as is needed for the local cache
|
||||||
data_size = llmin(data_size, bytes);
|
data_size = llmin(data_size, bytes);
|
||||||
|
|
||||||
|
AIStateMachine::StateTimer timer("FileOpen");
|
||||||
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH, LLVFile::WRITE);
|
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH, LLVFile::WRITE);
|
||||||
if (file.getMaxSize() >= bytes || file.setMaxSize(bytes))
|
if (file.getMaxSize() >= bytes || file.setMaxSize(bytes))
|
||||||
{
|
{
|
||||||
LLMeshRepository::sCacheBytesWritten += data_size;
|
LLMeshRepository::sCacheBytesWritten += data_size;
|
||||||
|
|
||||||
file.write((const U8*) data, data_size);
|
AIStateMachine::StateTimer timer("WriteData");
|
||||||
|
S32 bytes_remaining = bytes;
|
||||||
//zero out the rest of the file
|
while (bytes_remaining > 0)
|
||||||
U8 block[4096];
|
|
||||||
memset(block, 0, 4096);
|
|
||||||
|
|
||||||
while (bytes-file.tell() > 4096)
|
|
||||||
{
|
{
|
||||||
file.write(block, 4096);
|
const S32 bytes_written = llmin(bytes_remaining, (S32)sizeof(data));
|
||||||
}
|
file.write(data, bytes_written);
|
||||||
|
if (bytes_remaining == bytes && bytes_written < bytes_remaining)
|
||||||
S32 remaining = bytes-file.tell();
|
{
|
||||||
|
memset(data, 0, data_size);
|
||||||
if (remaining > 0)
|
}
|
||||||
{
|
bytes_remaining -= llmin(bytes_remaining, bytes_written);
|
||||||
file.write(block, remaining);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,8 @@
|
|||||||
#include "lluploadfloaterobservers.h"
|
#include "lluploadfloaterobservers.h"
|
||||||
#include "aistatemachinethread.h"
|
#include "aistatemachinethread.h"
|
||||||
|
|
||||||
|
#include <boost/function.hpp>
|
||||||
|
|
||||||
class LLVOVolume;
|
class LLVOVolume;
|
||||||
class LLMeshResponder;
|
class LLMeshResponder;
|
||||||
class LLMutex;
|
class LLMutex;
|
||||||
@@ -283,6 +285,16 @@ public:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct MeshHeaderInfo
|
||||||
|
{
|
||||||
|
MeshHeaderInfo()
|
||||||
|
: mHeaderSize(0), mVersion(0), mOffset(-1), mSize(0) {}
|
||||||
|
U32 mHeaderSize;
|
||||||
|
U32 mVersion;
|
||||||
|
S32 mOffset;
|
||||||
|
S32 mSize;
|
||||||
|
};
|
||||||
|
|
||||||
//set of requested skin info
|
//set of requested skin info
|
||||||
std::set<LLUUID> mSkinRequests;
|
std::set<LLUUID> mSkinRequests;
|
||||||
|
|
||||||
@@ -332,6 +344,9 @@ public:
|
|||||||
bool physicsShapeReceived(const LLUUID& mesh_id, U8* data, S32 data_size);
|
bool physicsShapeReceived(const LLUUID& mesh_id, U8* data, S32 data_size);
|
||||||
LLSD& getMeshHeader(const LLUUID& mesh_id);
|
LLSD& getMeshHeader(const LLUUID& mesh_id);
|
||||||
|
|
||||||
|
bool getMeshHeaderInfo(const LLUUID& mesh_id, const char* block_name, MeshHeaderInfo& info);
|
||||||
|
bool loadInfoFromVFS(const LLUUID& mesh_id, MeshHeaderInfo& info, boost::function<bool(const LLUUID&, U8*, S32)> fn);
|
||||||
|
|
||||||
void notifyLoadedMeshes();
|
void notifyLoadedMeshes();
|
||||||
S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod);
|
S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod);
|
||||||
|
|
||||||
@@ -450,6 +465,8 @@ public:
|
|||||||
|
|
||||||
void setWholeModelUploadURL(std::string const& whole_model_upload_url) { mWholeModelUploadURL = whole_model_upload_url; }
|
void setWholeModelUploadURL(std::string const& whole_model_upload_url) { mWholeModelUploadURL = whole_model_upload_url; }
|
||||||
|
|
||||||
|
/*virtual*/ const char* getName() const { return "AIMeshUpload"; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Implement AIStateMachine.
|
// Implement AIStateMachine.
|
||||||
/*virtual*/ const char* state_str_impl(state_type run_state) const;
|
/*virtual*/ const char* state_str_impl(state_type run_state) const;
|
||||||
|
|||||||
@@ -3048,7 +3048,7 @@ void LLPanelGroupBanListSubTab::populateBanList()
|
|||||||
ban_entry.columns.add().column("name").font/*.name*/("SANSSERIF_SMALL").font_style("NORMAL");
|
ban_entry.columns.add().column("name").font/*.name*/("SANSSERIF_SMALL").font_style("NORMAL");
|
||||||
|
|
||||||
// Singu Note: We have special date columns, so our code is unique here
|
// Singu Note: We have special date columns, so our code is unique here
|
||||||
ban_entry.columns.add().column("ban_date").value(bd.mBanDate).format("%Y/%m%d").font/*.name*/("SANSSERIF_SMALL").font_style("NORMAL");
|
ban_entry.columns.add().column("ban_date").value(bd.mBanDate).type("date").format("%Y/%m%d").font/*.name*/("SANSSERIF_SMALL").font_style("NORMAL");
|
||||||
|
|
||||||
mBanList->addNameItemRow(ban_entry);
|
mBanList->addNameItemRow(ban_entry);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2204,8 +2204,17 @@ void reload_objects(LLTextureReloader& texture_list, LLViewerObject::const_child
|
|||||||
for (U8 i = 0; i < object->getNumTEs(); i++)
|
for (U8 i = 0; i < object->getNumTEs(); i++)
|
||||||
{
|
{
|
||||||
texture_list.addTexture(object->getTEImage(i));
|
texture_list.addTexture(object->getTEImage(i));
|
||||||
|
const LLTextureEntry* te = object->getTE(i);
|
||||||
|
if (LLMaterial* mat = te ? te->getMaterialParams().get() : NULL)
|
||||||
|
{
|
||||||
|
if (mat->getSpecularID().notNull())
|
||||||
|
texture_list.addTexture(LLViewerTextureManager::getFetchedTexture(mat->getSpecularID()));
|
||||||
|
if (mat->getNormalID().notNull())
|
||||||
|
texture_list.addTexture(LLViewerTextureManager::getFetchedTexture(mat->getNormalID()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(recurse)
|
if(recurse)
|
||||||
{
|
{
|
||||||
reload_objects(texture_list,object->getChildren(), true);
|
reload_objects(texture_list,object->getChildren(), true);
|
||||||
|
|||||||
@@ -758,7 +758,7 @@ public:
|
|||||||
// show an error to the user?
|
// show an error to the user?
|
||||||
llwarns
|
llwarns
|
||||||
<< "Application level error when fetching object "
|
<< "Application level error when fetching object "
|
||||||
<< "cost. Message: " << mContent["error"]["message"].asString()
|
<< "cost. Message: " << mContent["error"]["message"].asString()
|
||||||
<< ", identifier: " << mContent["error"]["identifier"].asString()
|
<< ", identifier: " << mContent["error"]["identifier"].asString()
|
||||||
<< llendl;
|
<< llendl;
|
||||||
|
|
||||||
@@ -871,7 +871,7 @@ public:
|
|||||||
LLUUID object_id = iter->asUUID();
|
LLUUID object_id = iter->asUUID();
|
||||||
|
|
||||||
// Check to see if the request contains data for the object
|
// Check to see if the request contains data for the object
|
||||||
if ( mContent.has(iter->asString()) )
|
if (mContent.has(iter->asString()))
|
||||||
{
|
{
|
||||||
const LLSD& data = mContent[iter->asString()];
|
const LLSD& data = mContent[iter->asString()];
|
||||||
|
|
||||||
@@ -1459,8 +1459,7 @@ void LLViewerObjectList::removeFromActiveList(LLViewerObject* objectp)
|
|||||||
|
|
||||||
objectp->setListIndex(-1);
|
objectp->setListIndex(-1);
|
||||||
|
|
||||||
std::vector<LLPointer<LLViewerObject> >::iterator it(mActiveObjects.begin() + idx);
|
std::vector<LLPointer<LLViewerObject> >::iterator iter = vector_replace_with_last(mActiveObjects, mActiveObjects.begin() + idx);
|
||||||
std::vector<LLPointer<LLViewerObject> >::iterator iter = vector_replace_with_last(mActiveObjects, it);
|
|
||||||
if(iter != mActiveObjects.end())
|
if(iter != mActiveObjects.end())
|
||||||
(*iter)->setListIndex(idx);
|
(*iter)->setListIndex(idx);
|
||||||
|
|
||||||
|
|||||||
@@ -406,8 +406,7 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt)
|
|||||||
// Kill dead particles (either flagged dead, or too old)
|
// Kill dead particles (either flagged dead, or too old)
|
||||||
if ((part->mLastUpdateTime > part->mMaxAge) || (LLViewerPart::LL_PART_DEAD_MASK == part->mFlags))
|
if ((part->mLastUpdateTime > part->mMaxAge) || (LLViewerPart::LL_PART_DEAD_MASK == part->mFlags))
|
||||||
{
|
{
|
||||||
part_list_t::iterator it(mParticles.begin() + i);
|
vector_replace_with_last(mParticles, mParticles.begin() + i);
|
||||||
vector_replace_with_last(mParticles, it);
|
|
||||||
delete part ;
|
delete part ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -417,8 +416,7 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt)
|
|||||||
{
|
{
|
||||||
// Transfer particles between groups
|
// Transfer particles between groups
|
||||||
LLViewerPartSim::getInstance()->put(part) ;
|
LLViewerPartSim::getInstance()->put(part) ;
|
||||||
part_list_t::iterator it(mParticles.begin() + i);
|
vector_replace_with_last(mParticles, mParticles.begin() + i);
|
||||||
vector_replace_with_last(mParticles, it);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -723,8 +721,7 @@ void LLViewerPartSim::updateSimulation()
|
|||||||
|
|
||||||
if (mViewerPartSources[i]->isDead())
|
if (mViewerPartSources[i]->isDead())
|
||||||
{
|
{
|
||||||
source_list_t::iterator it(mViewerPartSources.begin() + i);
|
vector_replace_with_last(mViewerPartSources, mViewerPartSources.begin() + i);
|
||||||
vector_replace_with_last(mViewerPartSources, it);
|
|
||||||
//mViewerPartSources.erase(it);
|
//mViewerPartSources.erase(it);
|
||||||
count--;
|
count--;
|
||||||
}
|
}
|
||||||
@@ -761,8 +758,7 @@ void LLViewerPartSim::updateSimulation()
|
|||||||
if (!mViewerPartGroups[i]->getCount())
|
if (!mViewerPartGroups[i]->getCount())
|
||||||
{
|
{
|
||||||
delete mViewerPartGroups[i];
|
delete mViewerPartGroups[i];
|
||||||
group_list_t::iterator it(mViewerPartGroups.begin() + i);
|
vector_replace_with_last(mViewerPartGroups, mViewerPartGroups.begin() + i);
|
||||||
vector_replace_with_last(mViewerPartGroups, it);
|
|
||||||
//mViewerPartGroups.erase(it);
|
//mViewerPartGroups.erase(it);
|
||||||
i--;
|
i--;
|
||||||
count--;
|
count--;
|
||||||
|
|||||||
@@ -13,8 +13,6 @@
|
|||||||
|
|
||||||
<!-- Default Args - these arguments will be replaced in all strings -->
|
<!-- Default Args - these arguments will be replaced in all strings -->
|
||||||
<string name="SECOND_LIFE">Second Life</string>
|
<string name="SECOND_LIFE">Second Life</string>
|
||||||
<string name="APP_NAME">Singularity Viewer</string>
|
|
||||||
<string name="CAPITALIZED_APP_NAME">SINGULARITY VIEWER</string>
|
|
||||||
<string name="SECOND_LIFE_GRID">Second Life-Grid:</string>
|
<string name="SECOND_LIFE_GRID">Second Life-Grid:</string>
|
||||||
<string name="SUPPORT_SITE">Second Life Support-Portal</string>
|
<string name="SUPPORT_SITE">Second Life Support-Portal</string>
|
||||||
|
|
||||||
|
|||||||
@@ -227,6 +227,9 @@
|
|||||||
name="Delete" width="128">
|
name="Delete" width="128">
|
||||||
<on_click filter="" function="Inventory.DoToSelected" userdata="delete" />
|
<on_click filter="" function="Inventory.DoToSelected" userdata="delete" />
|
||||||
</menu_item_call>
|
</menu_item_call>
|
||||||
|
<menu_item_call label="Move to Lost And Found" mouse_opaque="true" name="Move to Lost And Found">
|
||||||
|
<on_click function="Inventory.DoToSelected" userdata="move_to_lost_and_found" />
|
||||||
|
</menu_item_call>
|
||||||
<menu_item_call label="Delete System Folder" mouse_opaque="true" name="Delete System Folder">
|
<menu_item_call label="Delete System Folder" mouse_opaque="true" name="Delete System Folder">
|
||||||
<on_click function="Inventory.DoToSelected" userdata="delete_system_folder" />
|
<on_click function="Inventory.DoToSelected" userdata="delete_system_folder" />
|
||||||
</menu_item_call>
|
</menu_item_call>
|
||||||
|
|||||||
@@ -998,7 +998,7 @@
|
|||||||
<on_click function="PromptShowURL" name="RequestFeature_url" userdata="WebLaunchSinguIssue,http://code.google.com/p/singularity-viewer/issues/entry?template=Feature%20request"/>
|
<on_click function="PromptShowURL" name="RequestFeature_url" userdata="WebLaunchSinguIssue,http://code.google.com/p/singularity-viewer/issues/entry?template=Feature%20request"/>
|
||||||
</menu_item_call>
|
</menu_item_call>
|
||||||
</menu>
|
</menu>
|
||||||
<menu_item_call bottom="-313" enabled="true" height="19" label="About [APP_NAME]..." left="0"
|
<menu_item_call bottom="-313" enabled="true" height="19" label="About [SHORT_APP_NAME]..." left="0"
|
||||||
mouse_opaque="true" name="About Second Life..." width="166">
|
mouse_opaque="true" name="About Second Life..." width="166">
|
||||||
<on_click function="ShowFloater" userdata="about" />
|
<on_click function="ShowFloater" userdata="about" />
|
||||||
</menu_item_call>
|
</menu_item_call>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
<floater name="floater_about" title="Acerca de Singularity Viewer">
|
<floater name="floater_about" title="Acerca de [SHORT_APP_NAME]">
|
||||||
<tab_container name="about_tab">
|
<tab_container name="about_tab">
|
||||||
<panel label="Información" name="support_panel">
|
<panel label="Información" name="support_panel">
|
||||||
<button label="Copiar al portapapeles" name="copy_btn"/>
|
<button label="Copiar al portapapeles" name="copy_btn"/>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
<floater name="autoreplace_floater" title="Configuración de reemplazo automático">
|
<floater name="autoreplace_floater" title="Configuración de reemplazo automático">
|
||||||
<check_box label="Habilitar el reemplazo automático" name="autoreplace_enable" tool_tip="Al escribir el texto del chat, reemplaza las palabras clave especificadas con la sustitución correspondiente"/>
|
<check_box label="Habilitar el reemplazo automático" name="autoreplace_enable" tool_tip="Al escribir el texto del chat, reemplaza las palabras clave especificadas con la sustitución correspondiente"/>
|
||||||
<button label="Importar lista..." name="autoreplace_import_list" tool_tip="Carga una lista previamente exportada desde un archivo."/>
|
<button label="Importar lista..." name="autoreplace_import_list" tool_tip="Carga desde un archivo una lista previamente exportada."/>
|
||||||
<button label="Exportar lista..." name="autoreplace_export_list" tool_tip="Guarda la lista seleccionada en un archivo para poder compartirla."/>
|
<button label="Exportar lista..." name="autoreplace_export_list" tool_tip="Guarda la lista seleccionada en un archivo para poder compartirla."/>
|
||||||
<button label="Lista nueva..." name="autoreplace_new_list" tool_tip="Crea una lista nueva."/>
|
<button label="Lista nueva..." name="autoreplace_new_list" tool_tip="Crea una lista nueva."/>
|
||||||
<button label="Eliminar lista" name="autoreplace_delete_list" tool_tip="Elimina la lista seleccionada."/>
|
<button label="Eliminar lista" name="autoreplace_delete_list" tool_tip="Elimina la lista seleccionada."/>
|
||||||
|
|||||||
2
indra/newview/skins/default/xui/es/floater_avatar.xml
Normal file
2
indra/newview/skins/default/xui/es/floater_avatar.xml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
|
<floater name="Avatar" title="Selecciona un Avatar"/>
|
||||||
@@ -14,10 +14,10 @@
|
|||||||
</text>
|
</text>
|
||||||
<button label="Ir al sitio web" name="error_web"/>
|
<button label="Ir al sitio web" name="error_web"/>
|
||||||
<text name="contacting">
|
<text name="contacting">
|
||||||
Contactando con LindeX...
|
Contactando con Cambio de Divisa...
|
||||||
</text>
|
</text>
|
||||||
<text name="buy_action_unknown">
|
<text name="buy_action_unknown">
|
||||||
Comprar [CURRENCY] en el sistema LindeX de cambio
|
Comprar [CURRENCY] en el sistema de cambio de divisa
|
||||||
</text>
|
</text>
|
||||||
<text name="buy_action">
|
<text name="buy_action">
|
||||||
[NAME] [CURRENCY] [PRICE]
|
[NAME] [CURRENCY] [PRICE]
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
|
<floater name="Destinations" title="Destinos"/>
|
||||||
@@ -20,7 +20,6 @@
|
|||||||
<check_box label="Contenido Adulto" name="incadult"/>
|
<check_box label="Contenido Adulto" name="incadult"/>
|
||||||
<check_box name="filter_gaming" label="Ocultar Juegos de Azar" />
|
<check_box name="filter_gaming" label="Ocultar Juegos de Azar" />
|
||||||
<scroll_list name="results">
|
<scroll_list name="results">
|
||||||
<column label="" name="icon"/>
|
|
||||||
<column label="Nombre" name="name"/>
|
<column label="Nombre" name="name"/>
|
||||||
<column label="Precio" name="price"/>
|
<column label="Precio" name="price"/>
|
||||||
<column label="Día (PT)" name="date"/>
|
<column label="Día (PT)" name="date"/>
|
||||||
@@ -45,9 +44,6 @@
|
|||||||
Buscar:
|
Buscar:
|
||||||
</text>
|
</text>
|
||||||
<line_editor label="Buscar" name="search_editor" tool_tip="Buscar en Second Life"/>
|
<line_editor label="Buscar" name="search_editor" tool_tip="Buscar en Second Life"/>
|
||||||
<button label="" name="back_btn"/>
|
|
||||||
<button label="" name="forward_btn"/>
|
|
||||||
<button label="" name="reload_btn"/>
|
|
||||||
<button label="Buscar" name="search_btn"/>
|
<button label="Buscar" name="search_btn"/>
|
||||||
<combo_box name="Category">
|
<combo_box name="Category">
|
||||||
<combo_item name="AnyCategory">
|
<combo_item name="AnyCategory">
|
||||||
@@ -141,8 +137,6 @@
|
|||||||
<button label="Buscar" label_selected="Buscar" name="Search"/>
|
<button label="Buscar" label_selected="Buscar" name="Search"/>
|
||||||
<button label="Borrar" label_selected="Borrar" name="Delete"/>
|
<button label="Borrar" label_selected="Borrar" name="Delete"/>
|
||||||
<scroll_list name="results">
|
<scroll_list name="results">
|
||||||
<column label="" name="icon"/>
|
|
||||||
<column label="" name="type"/>
|
|
||||||
<column label="Nombre" name="name"/>
|
<column label="Nombre" name="name"/>
|
||||||
<column label="Precio" name="price"/>
|
<column label="Precio" name="price"/>
|
||||||
</scroll_list>
|
</scroll_list>
|
||||||
@@ -224,8 +218,6 @@
|
|||||||
<button label="Buscar" label_selected="Buscar" name="Search"/>
|
<button label="Buscar" label_selected="Buscar" name="Search"/>
|
||||||
<button label="Borrar" label_selected="Borrar" name="Delete"/>
|
<button label="Borrar" label_selected="Borrar" name="Delete"/>
|
||||||
<scroll_list name="results">
|
<scroll_list name="results">
|
||||||
<column label="" name="icon"/>
|
|
||||||
<column label="" name="type"/>
|
|
||||||
<column label="Nombre" name="name"/>
|
<column label="Nombre" name="name"/>
|
||||||
<column label="Día (PT)" name="date"/>
|
<column label="Día (PT)" name="date"/>
|
||||||
<column label="Hora" name="time"/>
|
<column label="Hora" name="time"/>
|
||||||
@@ -242,9 +234,6 @@
|
|||||||
<string name="not_found_text">
|
<string name="not_found_text">
|
||||||
Nada encontrado.
|
Nada encontrado.
|
||||||
</string>
|
</string>
|
||||||
<button label="" name="back_btn"/>
|
|
||||||
<button label="" name="forward_btn"/>
|
|
||||||
<button label="" name="reload_btn"/>
|
|
||||||
<!-- No hay checkboxes de calificación, el escaparate es completamente PG -->
|
<!-- No hay checkboxes de calificación, el escaparate es completamente PG -->
|
||||||
<web_browser name="showcase_browser"/>
|
<web_browser name="showcase_browser"/>
|
||||||
<text bottom="5" name="status_text"/>
|
<text bottom="5" name="status_text"/>
|
||||||
@@ -305,8 +294,6 @@
|
|||||||
<line_editor left="130" name="areaedit"/>
|
<line_editor left="130" name="areaedit"/>
|
||||||
<button label="Buscar" label_selected="Buscar" name="Search"/>
|
<button label="Buscar" label_selected="Buscar" name="Search"/>
|
||||||
<scroll_list name="results">
|
<scroll_list name="results">
|
||||||
<column label="" name="icon"/>
|
|
||||||
<column label="" name="type"/>
|
|
||||||
<column label="Nombre" name="name"/>
|
<column label="Nombre" name="name"/>
|
||||||
<column label="Tipo" name="landtype"/>
|
<column label="Tipo" name="landtype"/>
|
||||||
<column label="Precio [CURRENCY]" name="price"/>
|
<column label="Precio [CURRENCY]" name="price"/>
|
||||||
@@ -338,7 +325,7 @@
|
|||||||
Cualquier Categoría
|
Cualquier Categoría
|
||||||
</combo_item>
|
</combo_item>
|
||||||
<combo_item name="LindenLocation">
|
<combo_item name="LindenLocation">
|
||||||
Localización Linden
|
Localización Oficial
|
||||||
</combo_item>
|
</combo_item>
|
||||||
<combo_item name="Arts&Cultures">
|
<combo_item name="Arts&Cultures">
|
||||||
Arte y Cultura
|
Arte y Cultura
|
||||||
@@ -423,8 +410,6 @@
|
|||||||
</combo_box>
|
</combo_box>
|
||||||
<button label="Buscar" label_selected="Buscar" name="Search"/>
|
<button label="Buscar" label_selected="Buscar" name="Search"/>
|
||||||
<scroll_list name="results">
|
<scroll_list name="results">
|
||||||
<column label="" name="icon"/>
|
|
||||||
<column label="" name="type"/>
|
|
||||||
<column label="Nombre" name="name" />
|
<column label="Nombre" name="name" />
|
||||||
<column label="Tráfico" name="dwell"/>
|
<column label="Tráfico" name="dwell"/>
|
||||||
</scroll_list>
|
</scroll_list>
|
||||||
@@ -446,8 +431,6 @@
|
|||||||
<line_editor name="name"/>
|
<line_editor name="name"/>
|
||||||
<button label="Buscar" label_selected="Buscar" name="Search"/>
|
<button label="Buscar" label_selected="Buscar" name="Search"/>
|
||||||
<scroll_list name="results">
|
<scroll_list name="results">
|
||||||
<column label="" name="icon"/>
|
|
||||||
<column label="" name="type"/>
|
|
||||||
<column label="Nombre" name="name"/>
|
<column label="Nombre" name="name"/>
|
||||||
</scroll_list>
|
</scroll_list>
|
||||||
<text name="result_text"/>
|
<text name="result_text"/>
|
||||||
@@ -474,23 +457,19 @@
|
|||||||
<check_box label="Contenido Adulto" name="incadult"/>
|
<check_box label="Contenido Adulto" name="incadult"/>
|
||||||
<check_box name="filter_gaming" label="Ocultar Juegos de Azar"/>
|
<check_box name="filter_gaming" label="Ocultar Juegos de Azar"/>
|
||||||
<scroll_list name="results">
|
<scroll_list name="results">
|
||||||
<column label="" name="icon"/>
|
|
||||||
<column label="" name="type"/>
|
|
||||||
<column label="Nombre" name="name"/>
|
<column label="Nombre" name="name"/>
|
||||||
<column label="Miembros" name="members"/>
|
<column label="Miembros" name="members"/>
|
||||||
<column label="" name="score"/>
|
|
||||||
</scroll_list>
|
</scroll_list>
|
||||||
<text name="result_text"/>
|
<text name="result_text"/>
|
||||||
</panel>
|
</panel>
|
||||||
<!-- ======================== -->
|
<!-- ======================== -->
|
||||||
<panel label="Mercado en línea" name="market_panel">
|
<panel label="Mercado en línea" name="market_panel">
|
||||||
<button label="" name="back_btn"/>
|
<button label="" tool_tip="reiniciar" name="reset_btn"/>
|
||||||
<button label="" name="forward_btn"/>
|
|
||||||
<button label="" name="reload_btn"/>
|
|
||||||
<web_browser name="market_browser"/>
|
<web_browser name="market_browser"/>
|
||||||
<text name="status_text"/>
|
<text name="status_text"/>
|
||||||
<string name="loading_text">Cargando...</string>
|
<string name="loading_text">Cargando...</string>
|
||||||
<string name="done_text">Hecho</string>
|
<string name="done_text">Hecho</string>
|
||||||
|
<string name="redirect_404_url">[APP_SITE]/404</string>
|
||||||
<string name="default_search_page">https://marketplace.secondlife.com/?lang=es-ES</string>
|
<string name="default_search_page">https://marketplace.secondlife.com/?lang=es-ES</string>
|
||||||
</panel>
|
</panel>
|
||||||
<!-- ======================== -->
|
<!-- ======================== -->
|
||||||
|
|||||||
@@ -26,6 +26,8 @@
|
|||||||
</string>
|
</string>
|
||||||
<layout_stack name="panels">
|
<layout_stack name="panels">
|
||||||
<layout_panel name="im_contents_panel">
|
<layout_panel name="im_contents_panel">
|
||||||
|
<button label="Historial" name="history_btn"/>
|
||||||
|
<button name="ding_btn" label="Timbre"/>
|
||||||
<button label="Llamar" name="start_call_btn"/>
|
<button label="Llamar" name="start_call_btn"/>
|
||||||
<button label="Colgar" name="end_call_btn"/>
|
<button label="Colgar" name="end_call_btn"/>
|
||||||
<button label="< <" label_selected="> >" name="toggle_active_speakers_btn" tool_tip="Pulse aquí para moverse por la lista de participantes activos en esta sesión de IM."/>
|
<button label="< <" label_selected="> >" name="toggle_active_speakers_btn" tool_tip="Pulse aquí para moverse por la lista de participantes activos en esta sesión de IM."/>
|
||||||
|
|||||||
@@ -22,8 +22,9 @@
|
|||||||
Pulsa aquí para un Mensaje Instantáneo.
|
Pulsa aquí para un Mensaje Instantáneo.
|
||||||
</string>
|
</string>
|
||||||
<button label="Historial" name="history_btn"/>
|
<button label="Historial" name="history_btn"/>
|
||||||
|
<button name="ding_btn" label="Timbre"/>
|
||||||
<button label="Llamar" name="start_call_btn"/>
|
<button label="Llamar" name="start_call_btn"/>
|
||||||
<button label="Terminar Llamada" name="end_call_btn" width="90"/>
|
<button label="Colgar" name="end_call_btn" width="90"/>
|
||||||
<button label="< <" label_selected="> >" left="420" right="450" tool_tip="Pulsa aquí para mostrar/ocultar la lista de participantes activos en esta sesión de MI."/>
|
<button label="< <" label_selected="> >" left="420" right="450" tool_tip="Pulsa aquí para mostrar/ocultar la lista de participantes activos en esta sesión de MI."/>
|
||||||
<layout_stack name="panels">
|
<layout_stack name="panels">
|
||||||
<layout_panel name="im_contents_panel">
|
<layout_panel name="im_contents_panel">
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
Ofrecido un Ítem de Inventario
|
Ofrecido un Ítem de Inventario
|
||||||
</string>
|
</string>
|
||||||
<flyout_button label="Perfil" name="instant_message_flyout">
|
<flyout_button label="Perfil" name="instant_message_flyout">
|
||||||
|
<flyout_button_item label="Perfil" name="profile_item"/>
|
||||||
<flyout_button_item label="Historial" name="history_btn"/>
|
<flyout_button_item label="Historial" name="history_btn"/>
|
||||||
<flyout_button_item label="Ofrecer Teleporte" name="profile_tele_btn"/>
|
<flyout_button_item label="Ofrecer Teleporte" name="profile_tele_btn"/>
|
||||||
<flyout_button_item label="Solicitar Teleporte" name="request_teleport_item"/>
|
<flyout_button_item label="Solicitar Teleporte" name="request_teleport_item"/>
|
||||||
|
|||||||
@@ -33,7 +33,8 @@
|
|||||||
<layout_stack name="panels">
|
<layout_stack name="panels">
|
||||||
<layout_panel name="im_contents_panel">
|
<layout_panel name="im_contents_panel">
|
||||||
<button label="Info del Grupo" name="group_info_btn" width="100"/>
|
<button label="Info del Grupo" name="group_info_btn" width="100"/>
|
||||||
<button label="Historial" name="history_btn" left_delta="100"/>
|
<button label="Historial" name="history_btn" left_delta="100"/>
|
||||||
|
<button name="ding_btn" label="Timbre">
|
||||||
<button label="Unirse" name="start_call_btn"/>
|
<button label="Unirse" name="start_call_btn"/>
|
||||||
<button label="Finalizar" name="end_call_btn"/>
|
<button label="Finalizar" name="end_call_btn"/>
|
||||||
<button label="< <" label_selected="> >" name="toggle_active_speakers_btn" tool_tip="Pulsa aquí para mostrar/ocultar la lista de participantes activos en esta sesión de MI."/>
|
<button label="< <" label_selected="> >" name="toggle_active_speakers_btn" tool_tip="Pulsa aquí para mostrar/ocultar la lista de participantes activos en esta sesión de MI."/>
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
</string>
|
</string>
|
||||||
<button label="Información Grupo" right="-245" name="group_info_btn" width="80"/>
|
<button label="Información Grupo" right="-245" name="group_info_btn" width="80"/>
|
||||||
<button label="Historial" left_delta="80" name="history_btn" width="80"/>
|
<button label="Historial" left_delta="80" name="history_btn" width="80"/>
|
||||||
|
<button name="ding_btn" label="Timbre"/>
|
||||||
<button label="Unirse a Llamada" left_delta="80" name="start_call_btn" width="80"/>
|
<button label="Unirse a Llamada" left_delta="80" name="start_call_btn" width="80"/>
|
||||||
<button label="Terminar Llamada" name="end_call_btn" width="80"/>
|
<button label="Terminar Llamada" name="end_call_btn" width="80"/>
|
||||||
<button label="< <" label_selected="> >" left="420" name="toggle_active_speakers_btn" right="450" tool_tip="Pulsa aquí para mostrar/ocultar la lista de participantes activos en esta sesión de MI." width="80"/>
|
<button label="< <" label_selected="> >" left="420" name="toggle_active_speakers_btn" right="450" tool_tip="Pulsa aquí para mostrar/ocultar la lista de participantes activos en esta sesión de MI." width="80"/>
|
||||||
|
|||||||
@@ -79,6 +79,12 @@
|
|||||||
<text name="ZoomDeadZone">
|
<text name="ZoomDeadZone">
|
||||||
Zona Muerta de Zoom
|
Zona Muerta de Zoom
|
||||||
</text>
|
</text>
|
||||||
|
<flyout_button label="Definir por Defecto" name="Default">
|
||||||
|
<flyout_button_item name="Space Navigator" label="Space Navigator"/>
|
||||||
|
<flyout_button_item name="OUYA" label="Controlador OUYA"/>
|
||||||
|
<flyout_button_item name="XBOX" label="Controlador XBOX"/>
|
||||||
|
<flyout_button_item name="DS3" label="DualShock 3"/>
|
||||||
|
</flyout_button>
|
||||||
<button label="OK" label_selected="OK" name="ok_btn"/>
|
<button label="OK" label_selected="OK" name="ok_btn"/>
|
||||||
<button label="Cancelar" label_selected="Cancelar" name="cancel_btn"/>
|
<button label="Cancelar" label_selected="Cancelar" name="cancel_btn"/>
|
||||||
</floater>
|
</floater>
|
||||||
|
|||||||
41
indra/newview/skins/default/xui/es/floater_media_lists.xml
Normal file
41
indra/newview/skins/default/xui/es/floater_media_lists.xml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
|
<floater name="floatermedialists" title="Filtro de Medios">
|
||||||
|
<floater.string name="EnterUrlAllow">
|
||||||
|
Ingresa dominio o URL a permitir siempre:
|
||||||
|
</floater.string>
|
||||||
|
<floater.string name="EnterUrlDeny">
|
||||||
|
Ingresa dominio o URL a rechazar siempre:
|
||||||
|
</floater.string>
|
||||||
|
|
||||||
|
<layout_stack name="lists_layout_stack">
|
||||||
|
<layout_panel name="whitelist_layout_panel">
|
||||||
|
<scroll_list name="whitelist">
|
||||||
|
<column label="Dominios Permitidos" name="list"/>
|
||||||
|
</scroll_list>
|
||||||
|
<layout_stack name="whitelist_buttons_layout_stack">
|
||||||
|
<layout_panel name="whitelist_buttons_panel_add">
|
||||||
|
<button label="Añadir..." name="add_whitelist"/>
|
||||||
|
|
||||||
|
</layout_panel>
|
||||||
|
<layout_panel name="whitelist_buttons_panel_remove">
|
||||||
|
<button label="Quitar" name="remove_whitelist"/>
|
||||||
|
</layout_panel>
|
||||||
|
</layout_stack>
|
||||||
|
|
||||||
|
</layout_panel>
|
||||||
|
|
||||||
|
<layout_panel name="blacklist_layout_panel">
|
||||||
|
<scroll_list name="blacklist">
|
||||||
|
<column label="Dominios Bloqueados" name="list"/>
|
||||||
|
</scroll_list>
|
||||||
|
<layout_stack name="blacklist_buttons_layout_stack">
|
||||||
|
<layout_panel name="blacklist_buttons_panel_add">
|
||||||
|
<button label="Añadir..." name="add_blacklist"/>
|
||||||
|
</layout_panel>
|
||||||
|
<layout_panel name="blacklist_buttons_panel_remove">
|
||||||
|
<button label="Quitar" name="remove_blacklist"/>
|
||||||
|
</layout_panel>
|
||||||
|
</layout_stack>
|
||||||
|
</layout_panel>
|
||||||
|
</layout_stack>
|
||||||
|
</floater>
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<text name="server_label" value="Servidor"/>
|
<text name="server_label" value="Servidor"/>
|
||||||
<text name="display" value="--"/>
|
<text name="display" value="--"/>
|
||||||
<text name="display_label" value="Mostrar"/>
|
<text name="display_label" value="Mostrar"/>
|
||||||
<text name="land_impacts_text" value="IMPACTOS EN EL TERRENO"/>
|
<text name="land_impacts_text" value="IMPACTO EN EL TERRENO"/>
|
||||||
<text name="selected" value="--"/>
|
<text name="selected" value="--"/>
|
||||||
<text name="selected_label" value="Seleccionados"/>
|
<text name="selected_label" value="Seleccionados"/>
|
||||||
<text name="rezzed_on_land" value="--"/>
|
<text name="rezzed_on_land" value="--"/>
|
||||||
|
|||||||
@@ -1,16 +1,20 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
<floater name="perm prefs" title="Permisos de subida por defecto">
|
<floater name="perm prefs" title="Permisos de Objetos por defecto">
|
||||||
<panel label="Permisos" name="permissions">
|
<panel label="Permisos" name="permissions">
|
||||||
<button label="?" label_selected="?" name="help"/>
|
<text name="NextOwnerLabel">Próximo Propietario:</text>
|
||||||
<check_box label="Compartir con el Grupo" name="share_with_group"/>
|
<text name="NextOwnerCopyLabel">Copiar</text>
|
||||||
<check_box label="Permitir copiar a cualquiera" name="everyone_copy"/>
|
<text name="NextOwnerModifyLabel">Modificar</text>
|
||||||
<check_box label="Permitir Exportar" name="everyone_export"/>
|
<text name="NextOwnerTransferLabel">Transferir</text>
|
||||||
<text name="NextOwnerLabel">
|
<text name="ShareWithGroupLabel">Compartir c/Grupo</text>
|
||||||
El Próximo propietario puede:
|
<text name="AnyoneCopyLabel">Permitir copiar a cualquiera</text>
|
||||||
</text>
|
<text name="ExportationLabel">Permitir Exportar</text>
|
||||||
<check_box label="Modificarlo" name="next_owner_modify"/>
|
|
||||||
<check_box label="Copiarlo" name="next_owner_copy"/>
|
<text name="ObjectsLabel" tool_tip="Definir permisos por defecto al crear objetos">Objetos</text>
|
||||||
<check_box label="Transferirlo" name="next_owner_transfer"/>
|
<text name="UploadsLabel" tool_tip="Definir permisos por defecto para los ítems subidos">Subidas</text>
|
||||||
|
<text name="ScriptsLabel" tool_tip="Definir permisos por defecto al crear scripts">Scripts</text>
|
||||||
|
<text name="NotecardsLabel" tool_tip="Definir permisos por defecto al crear notas">Notas</text>
|
||||||
|
<text name="GesturesLabel" tool_tip="Definir permisos por defecto al crear gestos">Gestos</text>
|
||||||
|
<text name="WearablesLabel" tool_tip="Definir permisos por defecto al crear Ropas o partes del cuerpo">Vestimentas</text>
|
||||||
</panel>
|
</panel>
|
||||||
<button label="OK" label_selected="OK" name="ok"/>
|
<button label="OK" label_selected="OK" name="ok"/>
|
||||||
<button label="Cancelar" label_selected="Cancelar" name="cancel"/>
|
<button label="Cancelar" label_selected="Cancelar" name="cancel"/>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
<column name="position" label="Pos." tool_tip="Posición (X, Y) dentro del sim, o dirección general (punto cardinal) fuera del sim"/>
|
<column name="position" label="Pos." tool_tip="Posición (X, Y) dentro del sim, o dirección general (punto cardinal) fuera del sim"/>
|
||||||
<column name="altitude" label="Alt." tool_tip="Altitud"/>
|
<column name="altitude" label="Alt." tool_tip="Altitud"/>
|
||||||
<column name="activity" label="Act." tool_tip="Actividad"/>
|
<column name="activity" label="Act." tool_tip="Actividad"/>
|
||||||
|
<column name="voice" tool_tip="Estado de Voz"/>
|
||||||
<column name="age" label="Edad" tool_tip="Edad"/>
|
<column name="age" label="Edad" tool_tip="Edad"/>
|
||||||
<column name="time" label="Tiempo" tool_tip="Tiempo transcurrido desde su arrivo al sim."/>
|
<column name="time" label="Tiempo" tool_tip="Tiempo transcurrido desde su arrivo al sim."/>
|
||||||
<column name="client" label="Cliente" tool_tip="Cliente-Visor que el avatar posiblemente esté usando"/>
|
<column name="client" label="Cliente" tool_tip="Cliente-Visor que el avatar posiblemente esté usando"/>
|
||||||
@@ -84,6 +85,7 @@
|
|||||||
<check_box name="hide_pos" label="Pos." tool_tip="Posición"/>
|
<check_box name="hide_pos" label="Pos." tool_tip="Posición"/>
|
||||||
<check_box name="hide_alt" label="Alt." tool_tip="Altitud"/>
|
<check_box name="hide_alt" label="Alt." tool_tip="Altitud"/>
|
||||||
<check_box name="hide_act" label="Act." tool_tip="Actividad"/>
|
<check_box name="hide_act" label="Act." tool_tip="Actividad"/>
|
||||||
|
<check_box name="hide_voice" label="Voz" tool_tip="Estado de Voz"/>
|
||||||
<check_box name="hide_age" label="Edad"/>
|
<check_box name="hide_age" label="Edad"/>
|
||||||
<check_box name="hide_time" label="Tiempo"/>
|
<check_box name="hide_time" label="Tiempo"/>
|
||||||
<check_box name="hide_client" label="Cliente"/>
|
<check_box name="hide_client" label="Cliente"/>
|
||||||
|
|||||||
@@ -1,6 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
<floater name="toolbox floater" title="" short_title="Construir">
|
<floater name="toolbox floater" title="" short_title="Construir">
|
||||||
|
|
||||||
|
<floater.string name="status_selectcount">
|
||||||
|
Primitivas: [OBJ_COUNT], LI: [LAND_IMPACT]
|
||||||
|
</floater.string>
|
||||||
|
<floater.string
|
||||||
|
name="status_remaining_capacity">
|
||||||
|
Capacidad remanente [LAND_CAPACITY].
|
||||||
|
</floater.string>
|
||||||
|
|
||||||
<!-- Main floater tabs -->
|
<!-- Main floater tabs -->
|
||||||
|
|
||||||
<button name="button focus" tool_tip="Visión"/>
|
<button name="button focus" tool_tip="Visión"/>
|
||||||
@@ -106,6 +114,8 @@
|
|||||||
<text name="link_num_obj_count">
|
<text name="link_num_obj_count">
|
||||||
[DESC] [NUM]
|
[DESC] [NUM]
|
||||||
</text>
|
</text>
|
||||||
|
<text name="selection_empty">Sin selección.</text>
|
||||||
|
|
||||||
|
|
||||||
<!-- Sub-tabs -->
|
<!-- Sub-tabs -->
|
||||||
|
|
||||||
@@ -644,7 +654,4 @@ name="button abandon land"/>
|
|||||||
<string name="grid_attachment_text">
|
<string name="grid_attachment_text">
|
||||||
Añadido
|
Añadido
|
||||||
</string>
|
</string>
|
||||||
<string name="status_selectcount">
|
|
||||||
Primitivas: [OBJ_COUNT], Peso: [LAND_IMPACT]
|
|
||||||
</string>
|
|
||||||
</floater>
|
</floater>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
<menu_item_call label="Añadir Amigo" name="Add Friend"/>
|
<menu_item_call label="Añadir Amigo" name="Add Friend"/>
|
||||||
<menu_item_call label="Quitar Amigo" name="Remove Friend"/>
|
<menu_item_call label="Quitar Amigo" name="Remove Friend"/>
|
||||||
<menu_item_call label="Invitar a Grupo" name="Invite To Group"/>
|
<menu_item_call label="Invitar a Grupo" name="Invite To Group"/>
|
||||||
|
<menu_item_call label="Prohibir Grupo" name="Ban From Group"/>
|
||||||
<menu_item_call label="Ofrecer Teleporte" name="Offer Teleport"/>
|
<menu_item_call label="Ofrecer Teleporte" name="Offer Teleport"/>
|
||||||
<menu_item_call label="Solicitar Teleporte" name="Request Teleport"/>
|
<menu_item_call label="Solicitar Teleporte" name="Request Teleport"/>
|
||||||
<menu_item_separator/>
|
<menu_item_separator/>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<menu_item_call name="Preferences..." label="Preferencias..."/>
|
<menu_item_call name="Preferences..." label="Preferencias..."/>
|
||||||
</menu>
|
</menu>
|
||||||
<menu name="Help" label="Ayuda" >
|
<menu name="Help" label="Ayuda" >
|
||||||
<menu_item_call name="Second Life Help" label="Ayuda de Second Life"/>
|
<menu_item_call name="Second Life Help" label="Ayuda de [SECOND_LIFE]"/>
|
||||||
<menu_item_call name="About Second Life..." label="Acerca de [SHORT_APP_NAME]..."/>
|
<menu_item_call name="About Second Life..." label="Acerca de [SHORT_APP_NAME]..."/>
|
||||||
</menu>
|
</menu>
|
||||||
</menu_bar>
|
</menu_bar>
|
||||||
|
|||||||
@@ -22,14 +22,16 @@
|
|||||||
<pie_menu label="Anexar" name="Object Attach" />
|
<pie_menu label="Anexar" name="Object Attach" />
|
||||||
<menu_item_call label="Regresar..." name="Return..."/>
|
<menu_item_call label="Regresar..." name="Return..."/>
|
||||||
<pie_menu label="Más" name="Rate Menu">
|
<pie_menu label="Más" name="Rate Menu">
|
||||||
|
<pie_menu label="Exportar" name="Export Menu">
|
||||||
|
<menu_item_call label="XML" name="XML"/>
|
||||||
|
<menu_item_call label="OBJ..." name="Save OBJ..."/>
|
||||||
|
<menu_item_call label="DAE..." name="Save DAE..."/>
|
||||||
|
</pie_menu>
|
||||||
<pie_menu label="Herramientas" name="Rate Menu">
|
<pie_menu label="Herramientas" name="Rate Menu">
|
||||||
<menu_item_call label="Destruir" name="Destroy"/>
|
<menu_item_call label="Destruir" name="Destroy"/>
|
||||||
<menu_item_call label="Explotar" name="Explode"/>
|
<menu_item_call label="Explotar" name="Explode"/>
|
||||||
<menu_item_call label="Medir" name="Measure"/>
|
<menu_item_call label="Medir" name="Measure"/>
|
||||||
<menu_item_call label="Información" name="Data"/>
|
<menu_item_call label="Información" name="Data"/>
|
||||||
<menu_item_call label="Exportar" name="Export"/>
|
|
||||||
<menu_item_call label="Guardar OBJ..." name="Save OBJ..."/>
|
|
||||||
<menu_item_call label="Guardar DAE..." name="Save DAE..."/>
|
|
||||||
<menu_item_call label="Recargar" name="Reload Textures"/>
|
<menu_item_call label="Recargar" name="Reload Textures"/>
|
||||||
</pie_menu>
|
</pie_menu>
|
||||||
<menu_item_call label="Silenciar" name="Object Mute"/>
|
<menu_item_call label="Silenciar" name="Object Mute"/>
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
</menu>
|
</menu>
|
||||||
<menu label="Moderación" name="Moderation">
|
<menu label="Moderación" name="Moderation">
|
||||||
<menu_item_call label="Ignorar/No Ignorar" name="Mute/Unmute"/>
|
<menu_item_call label="Ignorar/No Ignorar" name="Mute/Unmute"/>
|
||||||
|
<menu_item_call label="Prohibir en Grupo" name="Ban From Group"/>
|
||||||
<menu_item_call label="Reportar Abuso" name="Report Abuse"/>
|
<menu_item_call label="Reportar Abuso" name="Report Abuse"/>
|
||||||
<menu_item_separator/>
|
<menu_item_separator/>
|
||||||
<menu_item_call label="Congelar" name="Freeze"/>
|
<menu_item_call label="Congelar" name="Freeze"/>
|
||||||
@@ -53,6 +54,7 @@
|
|||||||
<menu_item_check label="Posición" name="Position"/>
|
<menu_item_check label="Posición" name="Position"/>
|
||||||
<menu_item_check label="Altitud" name="Altitude"/>
|
<menu_item_check label="Altitud" name="Altitude"/>
|
||||||
<menu_item_check label="Actividad" name="Activity"/>
|
<menu_item_check label="Actividad" name="Activity"/>
|
||||||
|
<menu_item_check label="Voz" name="Voice"/>
|
||||||
<menu_item_check label="Edad" name="Age"/>
|
<menu_item_check label="Edad" name="Age"/>
|
||||||
<menu_item_check label="Tiempo" name="Time"/>
|
<menu_item_check label="Tiempo" name="Time"/>
|
||||||
<menu_item_check label="Visor" name="Client"/>
|
<menu_item_check label="Visor" name="Client"/>
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
<menu_bar name="Main Menu">
|
<menu_bar name="Main Menu">
|
||||||
<menu label="Archivo" name="File">
|
<menu label="Archivo" name="File">
|
||||||
<menu_item_call label="Imagen ([UPLOADFEE])..." name="Upload Image"/>
|
<menu_item_call label="Subir Imagen ([UPLOADFEE])..." name="Upload Image"/>
|
||||||
<menu_item_call label="Sonido ([UPLOADFEE])..." name="Upload Sound"/>
|
<menu_item_call label="Subir Sonido ([UPLOADFEE])..." name="Upload Sound"/>
|
||||||
<menu_item_call label="Animación ([UPLOADFEE])..." name="Upload Animation"/>
|
<menu_item_call label="Subir Animación ([UPLOADFEE])..." name="Upload Animation"/>
|
||||||
<menu_item_call label="Subir Modelo..." name="Upload Mesh"/>
|
<menu_item_call label="Subir Modelo..." name="Upload Mesh"/>
|
||||||
<menu_item_call label="Masiva ([UPLOADFEE] por archivo)..." name="Bulk Upload"/>
|
<menu_item_call label="Subir Masivo ([UPLOADFEE] por archivo)..." name="Bulk Upload"/>
|
||||||
<menu_item_call label="Importar XML" name="Import"/>
|
<menu_item_call label="Importar Objeto XML" name="Import"/>
|
||||||
<menu_item_call label="Importar con Texturas" name="Import2"/>
|
<menu_item_call label="Importar con Texturas" name="Import2"/>
|
||||||
<menu_item_call label="Cambiar Texturas Locales" name="Change Local Textures"/>
|
<menu_item_call label="Cambiar Texturas Locales" name="Change Local Textures"/>
|
||||||
<menu_item_call label="Definir Permisos por Defecto..." name="perm prefs"/>
|
<menu_item_call label="Definir Permisos por Defecto..." name="perm prefs"/>
|
||||||
@@ -55,7 +55,6 @@
|
|||||||
<menu_item_call label="Nombre a Mostrar..." name="Display Name..."/>
|
<menu_item_call label="Nombre a Mostrar..." name="Display Name..."/>
|
||||||
<menu_item_check label="Amigos..." name="Friends..."/>
|
<menu_item_check label="Amigos..." name="Friends..."/>
|
||||||
<menu_item_call label="Grupos..." name="Groups..."/>
|
<menu_item_call label="Grupos..." name="Groups..."/>
|
||||||
<menu_item_separator label="-----------" name="separator8"/>
|
|
||||||
<menu_item_call label="Preferencias..." name="Preferences..."/>
|
<menu_item_call label="Preferencias..." name="Preferences..."/>
|
||||||
</menu>
|
</menu>
|
||||||
<!-- ============================= -->
|
<!-- ============================= -->
|
||||||
@@ -120,6 +119,8 @@
|
|||||||
<menu_item_call label="Comprar [CURRENCY]..." name="Buy and Sell L$..."/>
|
<menu_item_call label="Comprar [CURRENCY]..." name="Buy and Sell L$..."/>
|
||||||
<menu_item_call label="Mis Vestuarios" name="My Outfits"/>
|
<menu_item_call label="Mis Vestuarios" name="My Outfits"/>
|
||||||
<menu_item_call label="Favoritos" name="Favorites"/>
|
<menu_item_call label="Favoritos" name="Favorites"/>
|
||||||
|
<menu_item_check label="Avatares Predefinidos" name="Avatar Picker"/>
|
||||||
|
<menu_item_check label="Destinos" name="Destinations"/>
|
||||||
<menu_item_call label="Mi Terreno..." name="My Land..."/>
|
<menu_item_call label="Mi Terreno..." name="My Land..."/>
|
||||||
<menu_item_call label="Acerca del Terreno..." name="About Land..."/>
|
<menu_item_call label="Acerca del Terreno..." name="About Land..."/>
|
||||||
<menu_item_call label="Comprar Terreno..." name="Buy Land..."/>
|
<menu_item_call label="Comprar Terreno..." name="Buy Land..."/>
|
||||||
@@ -193,7 +194,7 @@
|
|||||||
</menu>
|
</menu>
|
||||||
<!-- ============================= -->
|
<!-- ============================= -->
|
||||||
<menu label="Ayuda" left="227" name="Help" >
|
<menu label="Ayuda" left="227" name="Help" >
|
||||||
<menu_item_call label="Ayuda de Second Life" name="Second Life Help"/>
|
<menu_item_call label="Ayuda de [SECOND_LIFE]" name="Second Life Help"/>
|
||||||
<menu_item_call label="Tutorial" name="Tutorial"/>
|
<menu_item_call label="Tutorial" name="Tutorial"/>
|
||||||
<menu_item_call label="Blog Oficial de Linden Lab..." name="Official Linden Blog..."/>
|
<menu_item_call label="Blog Oficial de Linden Lab..." name="Official Linden Blog..."/>
|
||||||
<menu_item_call label="Portal de Scripting..." name="Scripting Portal..."/>
|
<menu_item_call label="Portal de Scripting..." name="Scripting Portal..."/>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<menu_item_call label="Problemas de Seguridad..." name="Security Issues..."/>
|
<menu_item_call label="Problemas de Seguridad..." name="Security Issues..."/>
|
||||||
<menu_item_call label="Wiki de QA..." name="QA Wiki..."/>
|
<menu_item_call label="Wiki de QA..." name="QA Wiki..."/>
|
||||||
<menu_item_call label="Informar Fallos..." name="Report Bug..."/>
|
<menu_item_call label="Informar Fallos..." name="Report Bug..."/>
|
||||||
<menu_item_call label="Informar Fallos de [SHORT_APP_NAME]..." name="Report Singularity Bug..."/>
|
<menu_item_call label="Informar Fallos de [SHORT_APP_NAME]..." name="Report [SHORT_APP_NAME] Bug..."/>
|
||||||
<menu_item_call label="Solicitar Nueva Característica..." name="Request New Feature..."/>
|
<menu_item_call label="Solicitar Nueva Característica..." name="Request New Feature..."/>
|
||||||
</menu>
|
</menu>
|
||||||
<menu_item_call label="Acerca de [APP_NAME]..." name="About Second Life..."/>
|
<menu_item_call label="Acerca de [APP_NAME]..." name="About Second Life..."/>
|
||||||
|
|||||||
@@ -91,6 +91,16 @@ Puedes escoger aceptar o denegar el dominio correspondiente o el script en el mu
|
|||||||
<button index="3" name="Whitelist" text="Lista Blanca"/>
|
<button index="3" name="Whitelist" text="Lista Blanca"/>
|
||||||
</form>
|
</form>
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification name="AddToMediaList">
|
||||||
|
Ingresa el dominio a añadir en la [LIST]:
|
||||||
|
<tag>confirm</tag>
|
||||||
|
<form name="form">
|
||||||
|
<input name="url" type="text" default="true" />
|
||||||
|
<button name="Add" text="Añadir"/>
|
||||||
|
<button name="Cancel" text="Cancelar"/>
|
||||||
|
</form>
|
||||||
|
</notification>
|
||||||
|
|
||||||
<notification name="MediaBlocked">
|
<notification name="MediaBlocked">
|
||||||
La URL del Media/audio ha sido bloqueada para [DOMAIN]
|
La URL del Media/audio ha sido bloqueada para [DOMAIN]
|
||||||
@@ -289,7 +299,7 @@ Hubo un problema al subir la foto por la siguiente razón: [REASON]
|
|||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="AddGroupOwnerWarning">
|
<notification name="AddGroupOwnerWarning">
|
||||||
Estas por agregar miembros del gurpo al rol de [ROLE_NAME].
|
Estás por agregar miembros del gurpo al rol de [ROLE_NAME].
|
||||||
Estos miembros no pueden ser removidos de este rol.
|
Estos miembros no pueden ser removidos de este rol.
|
||||||
Los miembros deberán abandonar el rol por si mismos.
|
Los miembros deberán abandonar el rol por si mismos.
|
||||||
¿Estás seguro que quieres continuar?
|
¿Estás seguro que quieres continuar?
|
||||||
@@ -297,7 +307,7 @@ Los miembros deberán abandonar el rol por si mismos.
|
|||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="AssignDangerousActionWarning">
|
<notification name="AssignDangerousActionWarning">
|
||||||
Estas por agregar la capacidad '[ACTION_NAME]' al rol '[ROLE_NAME]'.
|
Estás por agregar la capacidad '[ACTION_NAME]' al rol '[ROLE_NAME]'.
|
||||||
|
|
||||||
*ADVERTENCIA*
|
*ADVERTENCIA*
|
||||||
Todos los miembros con esta capacidad podrán asignarse a sí mismos -y a otros miembros- roles con mayores poderes de los que actualmente tienen. Potencialmente, podrían elevarse hasta poderes cercanos a los del propietario. Asegúrate de lo que estás haciendo antes de otorgar esta capacidad.
|
Todos los miembros con esta capacidad podrán asignarse a sí mismos -y a otros miembros- roles con mayores poderes de los que actualmente tienen. Potencialmente, podrían elevarse hasta poderes cercanos a los del propietario. Asegúrate de lo que estás haciendo antes de otorgar esta capacidad.
|
||||||
@@ -307,7 +317,7 @@ Los miembros deberán abandonar el rol por si mismos.
|
|||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="AssignDangerousAbilityWarning">
|
<notification name="AssignDangerousAbilityWarning">
|
||||||
Estas por agregar la capacidad '[ACTION_NAME]' al rol '[ROLE_NAME]'.
|
Estás por agregar la capacidad '[ACTION_NAME]' al rol '[ROLE_NAME]'.
|
||||||
|
|
||||||
*ADVERTENCIA*
|
*ADVERTENCIA*
|
||||||
Todos los miembros con esta capacidad podrán asignarse a sí mismos -y a otros miembros- todas las capacidades, elevándose hasta poderes cercanos a los del propietario.
|
Todos los miembros con esta capacidad podrán asignarse a sí mismos -y a otros miembros- todas las capacidades, elevándose hasta poderes cercanos a los del propietario.
|
||||||
@@ -315,6 +325,24 @@ Los miembros deberán abandonar el rol por si mismos.
|
|||||||
¿Añadir esta capacidad al rol '[ROLE_NAME]'?
|
¿Añadir esta capacidad al rol '[ROLE_NAME]'?
|
||||||
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
|
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification name="AssignBanAbilityWarning">
|
||||||
|
Estás por agregar la capacidad '[ACTION_NAME]' al rol '[ROLE_NAME]'.
|
||||||
|
|
||||||
|
*ADVERTENCIA*
|
||||||
|
Todos los miembros en el rol con esta capacidad también pueden asignarla las capacidades '[ACTION_NAME_2]' y '[ACTION_NAME_3]'
|
||||||
|
<usetemplate name="okbutton" yestext="OK"/>
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification name="RemoveBanAbilityWarning">
|
||||||
|
Estás quitando la capacidad '[ACTION_NAME]' al Rol '[ROLE_NAME]'.
|
||||||
|
|
||||||
|
*ADVERTENCIA*
|
||||||
|
Quitar esta capacidad NO quitará las capacidades '[ACTION_NAME_2]' ni '[ACTION_NAME_3]'.
|
||||||
|
|
||||||
|
Si no quieres que estás capacidades estén asignadas a este rol, ¡desactívalas inmediatamente!
|
||||||
|
<usetemplate name="okbutton" yestext="OK"/>
|
||||||
|
</notification>
|
||||||
|
|
||||||
<notification name="AttachmentDrop">
|
<notification name="AttachmentDrop">
|
||||||
Estás por soltar un objeto anexado.
|
Estás por soltar un objeto anexado.
|
||||||
@@ -869,6 +897,11 @@ Temporalmente, será incapaz de moverse, usar el chat, o interactuar con el mund
|
|||||||
¿Expulsar a [AVATAR_NAME] de su terreno?
|
¿Expulsar a [AVATAR_NAME] de su terreno?
|
||||||
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar"/>
|
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar"/>
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification name="EjectAvatarFromGroup">
|
||||||
|
Has expulsado a [AVATAR_NAME] del grupo [GROUP_NAME]
|
||||||
|
<tag>group</tag>
|
||||||
|
</notification>
|
||||||
|
|
||||||
<notification name="AcquireErrorTooManyObjects">
|
<notification name="AcquireErrorTooManyObjects">
|
||||||
ERROR OBTENIDO: Hay demasiados objetos seleccionados.
|
ERROR OBTENIDO: Hay demasiados objetos seleccionados.
|
||||||
@@ -1416,6 +1449,32 @@ No tienes el permiso de comprar terreno para el grupo que tienes activado actual
|
|||||||
¿Quieres quitar a varios amigos de tu lista de amigos?
|
¿Quieres quitar a varios amigos de tu lista de amigos?
|
||||||
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
|
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification label="Añadir Lista de Auto Reemplazo" name="AddAutoReplaceList">
|
||||||
|
<tag>addlist</tag>
|
||||||
|
Nombre para la nueva lista:
|
||||||
|
<tag>confirm</tag>
|
||||||
|
<form name="form">
|
||||||
|
<input name="listname"/>
|
||||||
|
<button name="SetName" text="OK"/>
|
||||||
|
</form>
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification label="Renombrar Lista de Auto Reemplazo" name="RenameAutoReplaceList">
|
||||||
|
El nombre '[DUPNAME]' está en uso
|
||||||
|
Ingresa un nombre único:
|
||||||
|
<tag>confirm</tag>
|
||||||
|
<form name="form">
|
||||||
|
<input name="listname"/>
|
||||||
|
<button name="ReplaceList" text="Renombrar Lista actual"/>
|
||||||
|
<button name="SetName" text="Usar Nuevo Nombre"/>
|
||||||
|
</form>
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification name="InvalidAutoReplaceEntry">
|
||||||
|
La clave tiene que ser una sola palabra y su reemplazo no puede estar vacío.
|
||||||
|
<tag>fail</tag>
|
||||||
|
</notification>
|
||||||
|
|
||||||
<notification name="GodDeleteAllScriptedPublicObjectsByUser">
|
<notification name="GodDeleteAllScriptedPublicObjectsByUser">
|
||||||
¿Estás seguro de que quieres borrar todos los objetos con script propiedad de
|
¿Estás seguro de que quieres borrar todos los objetos con script propiedad de
|
||||||
@@ -1860,6 +1919,24 @@ Por favor, asegurate de que tu reporte no será un duplicado de uno ya existente
|
|||||||
¿Dejar el grupo?
|
¿Dejar el grupo?
|
||||||
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
|
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification name="OwnerCannotLeaveGroup">
|
||||||
|
Incapaz de abandonar el grupo. No puedes dejar el grupo debido a que eres el único propietario del mismo. Por favor, designa a otro miembro para este rol antes de abandonar el grupo.
|
||||||
|
<tag>group</tag>
|
||||||
|
<usetemplate name="okbutton" yestext="OK"/>
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification name="GroupDepartError">
|
||||||
|
Incapaz de abandonar el grupo: [reason].
|
||||||
|
<tag>reason</tag>
|
||||||
|
<usetemplate name="okbutton" yestext="OK"/>
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification name="GroupDepart">
|
||||||
|
Has abandonado el grupo [group_name].
|
||||||
|
<tag>group_name</tag>
|
||||||
|
<usetemplate name="okbutton" yestext="OK"/>
|
||||||
|
</notification>
|
||||||
|
|
||||||
<notification name="ConfirmKick">
|
<notification name="ConfirmKick">
|
||||||
¿REALMENTE quieres expulsar a todos los usuarios de este grid?
|
¿REALMENTE quieres expulsar a todos los usuarios de este grid?
|
||||||
@@ -2055,6 +2132,11 @@ lo cual excede el límite de [LIMIT].
|
|||||||
¿Estás seguro de que quieres teleportarte?
|
¿Estás seguro de que quieres teleportarte?
|
||||||
<usetemplate ignoretext="Cuando estás teleportando desde un hito del inventario" name="okcancelignore" notext="Cancelar" yestext="Teleportar"/>
|
<usetemplate ignoretext="Cuando estás teleportando desde un hito del inventario" name="okcancelignore" notext="Cancelar" yestext="Teleportar"/>
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification name="TeleportViaSLAPP">
|
||||||
|
¿Estás seguro que quieres teleportarte vía SLAPP?
|
||||||
|
<usetemplate ignoretext="Confirma que quieres teleportarte vía SLAPP" name="okcancelignore" notext="Cancelar" yestext="Teleportar"/>
|
||||||
|
</notification>
|
||||||
|
|
||||||
<notification label="Mensaje a todo el estado" name="MessageEstate">
|
<notification label="Mensaje a todo el estado" name="MessageEstate">
|
||||||
Escribe un anuncio breve que se enviará a todo el que esté en tu estado.
|
Escribe un anuncio breve que se enviará a todo el que esté en tu estado.
|
||||||
@@ -3781,6 +3863,10 @@ Por favor, reinténtalo en unos momentos.
|
|||||||
<button name="Profile" text="Perfil"/>
|
<button name="Profile" text="Perfil"/>
|
||||||
</form>
|
</form>
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification name="TeleportOfferSent">
|
||||||
|
Oferta de Teleporte enviada a [TO_NAME]
|
||||||
|
</notification>
|
||||||
|
|
||||||
<notification name="TeleportRequest">
|
<notification name="TeleportRequest">
|
||||||
[NAME] está solicitando ser teleportado a tu ubicación.
|
[NAME] está solicitando ser teleportado a tu ubicación.
|
||||||
@@ -5526,6 +5612,12 @@ porque la parcela está llena.
|
|||||||
No se pueden crear mega prims que intersectan con otros agentes. Por favor reintenta cuando los otros agentes se hayan movido.
|
No se pueden crear mega prims que intersectan con otros agentes. Por favor reintenta cuando los otros agentes se hayan movido.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification name="DefaultObjectPermissions">
|
||||||
|
Ha habido un problema grabando los permisos por defecto debido al siguiente motivo: [REASON]. Por favor, intenta definir los permisos por defecto mas tarde.
|
||||||
|
<tag>fail</tag>
|
||||||
|
<usetemplate name="okbutton" yestext="OK"/>
|
||||||
|
</notification>
|
||||||
|
|
||||||
<!-- Singularity Specific notifications should go below here, alphabetically -->
|
<!-- Singularity Specific notifications should go below here, alphabetically -->
|
||||||
<!-- Singu Note: RLVa notifications come first here -->
|
<!-- Singu Note: RLVa notifications come first here -->
|
||||||
<notification name="RLVChangeStrings">
|
<notification name="RLVChangeStrings">
|
||||||
@@ -5541,6 +5633,11 @@ porque la parcela está llena.
|
|||||||
AntiSpam: Se ha bloqueado newline flood de [SOURCE] ( [AMOUNT] newlines).
|
AntiSpam: Se ha bloqueado newline flood de [SOURCE] ( [AMOUNT] newlines).
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification name="ConfirmDeleteUser">
|
||||||
|
¿Estás seguro que quieres borrar al usuario seleccionado?
|
||||||
|
<usetemplate name="okcancelbuttonscanceldefault" yestext="Si" notext="No"/>
|
||||||
|
</notification>
|
||||||
|
|
||||||
<notification name="RadarChatKeysRequest">
|
<notification name="RadarChatKeysRequest">
|
||||||
Un objeto de tu propiedad ha solicitado claves de tu radar.
|
Un objeto de tu propiedad ha solicitado claves de tu radar.
|
||||||
¿Deseas habilitar anunciar claves a los objetos en el sim?
|
¿Deseas habilitar anunciar claves a los objetos en el sim?
|
||||||
|
|||||||
25
indra/newview/skins/default/xui/es/panel_group_bulk_ban.xml
Normal file
25
indra/newview/skins/default/xui/es/panel_group_bulk_ban.xml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
|
<panel label="Prohibir Residentes" name="bulk_ban_panel" width="210">
|
||||||
|
<panel.string name="loading">
|
||||||
|
(cargando...)
|
||||||
|
</panel.string>
|
||||||
|
<panel.string name="ban_selection_too_large">
|
||||||
|
Prohibiciones de Grupo no enviadas: Demasiados residentes seleccionados. La Prohibición de Grupo está limitada a 100 residentes por requerimiento.
|
||||||
|
</panel.string>
|
||||||
|
<panel.string name="already_banned">
|
||||||
|
Invitación al Grupo no enviada: el residente '[RESIDENT]' se encuentra prohibido.
|
||||||
|
</panel.string>
|
||||||
|
<text name="help_text">
|
||||||
|
Puedes seleccionar múltiples residentesYou can select multiple Residents to
|
||||||
|
para prohibirles el acceso al grupo. Pulsa 'Abrir
|
||||||
|
Selector de Residentes' para comenzar.
|
||||||
|
</text>
|
||||||
|
<button label="Abrir Selector de Residentes" name="add_button"/>
|
||||||
|
<name_list name="banned_agent_list" tool_tip="Mantén presionada la tecla Ctrl y pulsa sobre el nombre del residente para selección múltiple"/>
|
||||||
|
<button label="Quitar seleccionado de la lista" name="remove_button" tool_tip="Eliminar de la lista de prohibición a los residentes seleccionados"/>
|
||||||
|
<button label="Prohibir Residentes" name="ban_button"/>
|
||||||
|
<button label="Cancelar" name="cancel_button"/>
|
||||||
|
<string name="GroupBulkBan">
|
||||||
|
Prohibición al Grupo
|
||||||
|
</string>
|
||||||
|
</panel>
|
||||||
@@ -51,7 +51,7 @@ Coloca el cursor sobre las opciones para más información.
|
|||||||
<check_box label="Mostrar en la Búsqueda" name="show_in_group_list" tool_tip="Permitir que la gente vea este grupo en los resultados de la búsqueda" />
|
<check_box label="Mostrar en la Búsqueda" name="show_in_group_list" tool_tip="Permitir que la gente vea este grupo en los resultados de la búsqueda" />
|
||||||
<check_box label="Inscripción Libre" name="open_enrollement" tool_tip="Definir si se admiten al grupo nuevos miembros sin que sea necesario invitarlos" />
|
<check_box label="Inscripción Libre" name="open_enrollement" tool_tip="Definir si se admiten al grupo nuevos miembros sin que sea necesario invitarlos" />
|
||||||
<check_box label="Cuota de Inscripción: [CURRENCY]" name="check_enrollment_fee" tool_tip="Define si se requiere una cuota para entrar al grupo" />
|
<check_box label="Cuota de Inscripción: [CURRENCY]" name="check_enrollment_fee" tool_tip="Define si se requiere una cuota para entrar al grupo" />
|
||||||
<spinner name="spin_enrollment_fee" tool_tip="Cuando está marcado 'Cuota de inscripción', los miembros nuevos deben pagar esta cuota para entrar al grupo" />
|
<spinner name="spin_enrollment_fee" tool_tip="Cuando está marcado 'Cuota de inscripción', los miembros nuevos deben pagar esta cuota para entrar al grupo" left_delta="140"/>
|
||||||
<text name="content_rating">
|
<text name="content_rating">
|
||||||
Calificación de Contenido
|
Calificación de Contenido
|
||||||
</text>
|
</text>
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
<panel label="Invitar a un Miembro" name="invite_panel">
|
<panel label="Invitar a un Miembro" name="invite_panel" height="400" >
|
||||||
<text name="help_text">
|
<text name="help_text" bottom_delta="-90" >
|
||||||
Puedes seleccionar a varios residentes
|
Puedes seleccionar a varios residentes
|
||||||
para invitarles a tu grupo. Para
|
para invitarles a tu grupo. Para
|
||||||
empezar, pulsa 'Abrir el selector de
|
empezar, pulsa 'Abrir Selector de
|
||||||
residentes'.
|
Residentes'.
|
||||||
</text>
|
</text>
|
||||||
<button label="Abrir el Selector de Residentes" name="add_button" tool_tip=""/>
|
<button label="Abrir Selector de Residentes" name="add_button" tool_tip="" bottom_delta="-22" />
|
||||||
<name_list name="invitee_list" tool_tip="Para seleccionar a varios residentes, mantén pulsada la tecla Ctrl y pulsa sus nombres" />
|
<name_list name="invitee_list" tool_tip="Para seleccionar a varios residentes, mantén pulsada la tecla Ctrl y pulsa sus nombres" bottom_delta="-190" height="186" />
|
||||||
<button label="Eliminar de la lista a los seleccionados" name="remove_button" tool_tip="Elimina los residentes seleccionados de la lista de invitaciones" />
|
<button label="Eliminar de la lista a los seleccionados" name="remove_button" tool_tip="Elimina los residentes seleccionados de la lista de invitaciones" />
|
||||||
<text name="role_text">
|
<text name="role_text">
|
||||||
Elegir qué rol asignarles:
|
Elegir qué rol asignarles:
|
||||||
</text>
|
</text>
|
||||||
<combo_box name="role_name" tool_tip="Elige de la lista de roles cuál asignar a los miembros."/>
|
<combo_box name="role_name" tool_tip="Elige de la lista de roles cuál asignar a los miembros."/>
|
||||||
<button label="Enviar Invitaciones" name="ok_button"/>
|
<button label="Enviar Invitaciones" name="invite_button"/>
|
||||||
<button label="Cancelar" name="cancel_button"/>
|
<button label="Cancelar" name="cancel_button"/>
|
||||||
<string name="confirm_invite_owner_str">
|
<string name="confirm_invite_owner_str">
|
||||||
¿Estás seguro de que quieres invitar a un nuevo propietario/s? ¡Esta acción es permanente!
|
¿Estás seguro de que quieres invitar a un nuevo propietario/s? ¡Esta acción es permanente!
|
||||||
|
|||||||
@@ -7,21 +7,23 @@
|
|||||||
¿Deseas aplicar estos cambios?
|
¿Deseas aplicar estos cambios?
|
||||||
</string>
|
</string>
|
||||||
<button label="?" left="391" name="help_button"/>
|
<button label="?" left="391" name="help_button"/>
|
||||||
|
<!-- ============================ -->
|
||||||
<panel name="members_header">
|
<panel name="members_header">
|
||||||
<text name="static">
|
<text name="static" height="20">
|
||||||
Miembros y Roles
|
Miembros y Roles
|
||||||
</text>
|
</text>
|
||||||
<text name="static2">
|
<text name="static2" height="42">
|
||||||
Los miembros del grupo tienen asignados roles con distintas capacidades.
|
Los miembros del grupo tienen asignados roles con distintas capacidades.
|
||||||
Estas configuraciones son fácilmente personalizables, para facilitar una
|
Estas configuraciones son fácilmente personalizables, para facilitar una
|
||||||
mayor flexibilidad y organización.
|
mayor flexibilidad y organización.
|
||||||
</text>
|
</text>
|
||||||
</panel>
|
</panel>
|
||||||
|
<!-- ============================ -->
|
||||||
<panel name="roles_header">
|
<panel name="roles_header">
|
||||||
<text name="static">
|
<text name="static" bottom_delta="-10" height="10">
|
||||||
Roles
|
Roles
|
||||||
</text>
|
</text>
|
||||||
<text name="role_properties_modifiable">
|
<text name="role_properties_modifiable" height="20">
|
||||||
Elige un rol de los de abajo. Puedes modificar su nombre, su
|
Elige un rol de los de abajo. Puedes modificar su nombre, su
|
||||||
descripción, y la etiqueta de los miembros.
|
descripción, y la etiqueta de los miembros.
|
||||||
</text>
|
</text>
|
||||||
@@ -29,13 +31,14 @@ descripción, y la etiqueta de los miembros.
|
|||||||
Elige un rol de los de abajo para ver sus propiedades, miembros, y qué
|
Elige un rol de los de abajo para ver sus propiedades, miembros, y qué
|
||||||
capacidades tiene asignadas.
|
capacidades tiene asignadas.
|
||||||
</text>
|
</text>
|
||||||
<text name="role_actions_modifiable">
|
<text name="role_actions_modifiable" bottom_delta="-24">
|
||||||
También puede asignar capacidades al rol.
|
También puede asignar capacidades al rol.
|
||||||
</text>
|
</text>
|
||||||
<text name="role_actions_not_modifiable">
|
<text name="role_actions_not_modifiable">
|
||||||
Puedes ver, pero no modificar, las capacidades asignadas.
|
Puedes ver, pero no modificar, las capacidades asignadas.
|
||||||
</text>
|
</text>
|
||||||
</panel>
|
</panel>
|
||||||
|
<!-- ============================ -->
|
||||||
<panel name="actions_header">
|
<panel name="actions_header">
|
||||||
<text name="static">
|
<text name="static">
|
||||||
Capacidades
|
Capacidades
|
||||||
@@ -45,8 +48,24 @@ capacidades tiene asignadas.
|
|||||||
realizarla.
|
realizarla.
|
||||||
</text>
|
</text>
|
||||||
</panel>
|
</panel>
|
||||||
|
<!-- ============================ -->
|
||||||
|
<panel name="banlist_header">
|
||||||
|
<text name="static">
|
||||||
|
Residentes Prohibidos
|
||||||
|
</text>
|
||||||
|
<text name="static2">
|
||||||
|
Ver qué Residentes no están permitidos en el Grupo. Los miembros con
|
||||||
|
capacidad de Administrar la Lista de Prohibición pueden bloquear a ciertos usuarios unirse al Grupo.
|
||||||
|
</text>
|
||||||
|
</panel>
|
||||||
|
<!-- ============================ -->
|
||||||
<tab_container name="roles_tab_container">
|
<tab_container name="roles_tab_container">
|
||||||
<panel label="Miembros" name="members_sub_tab" tool_tip="Miembros">
|
<panel label="Miembros" name="members_sub_tab" tool_tip="Miembros">
|
||||||
|
<string name="donation_area">
|
||||||
|
[AREA] m²
|
||||||
|
</string>
|
||||||
|
<filter_editor name="filter_input" width="100" />
|
||||||
|
<button label="Buscar" name="search_button"/>
|
||||||
<name_list name="member_list">
|
<name_list name="member_list">
|
||||||
<column label="Nombre" name="name"/>
|
<column label="Nombre" name="name"/>
|
||||||
<column label="Cuotas Donadas" name="donated"/>
|
<column label="Cuotas Donadas" name="donated"/>
|
||||||
@@ -59,6 +78,7 @@ realizarla.
|
|||||||
Selecciona varios nombres manteniendo pulsada la tecla Ctrl y pulsando en cada uno de ellos.
|
Selecciona varios nombres manteniendo pulsada la tecla Ctrl y pulsando en cada uno de ellos.
|
||||||
</string>
|
</string>
|
||||||
</panel>
|
</panel>
|
||||||
|
<!-- ============================ -->
|
||||||
<panel label="Roles" name="roles_sub_tab" width="398">
|
<panel label="Roles" name="roles_sub_tab" width="398">
|
||||||
<scroll_list name="role_list">
|
<scroll_list name="role_list">
|
||||||
<column label="Nombre del Rol" name="name"/>
|
<column label="Nombre del Rol" name="name"/>
|
||||||
@@ -68,12 +88,16 @@ Selecciona varios nombres manteniendo pulsada la tecla Ctrl y pulsando en cada u
|
|||||||
<button label="Crear Nuevo Rol ..." name="role_create"/>
|
<button label="Crear Nuevo Rol ..." name="role_create"/>
|
||||||
<button label="Eliminar Rol" name="role_delete"/>
|
<button label="Eliminar Rol" name="role_delete"/>
|
||||||
<string name="help_text">
|
<string name="help_text">
|
||||||
Los roles tienen una etiqueta y una serie de capacidades permitidas que los miembros pueden desarrollar. Los miembros pueden tener más de un rol. Un grupo puede tener hasta 10 roles, incluyendo el de Todos y el de Propietarios.
|
Los roles tienen una etiqueta y una serie de capacidades
|
||||||
|
permitidas que los miembros pueden desarrollar. Los miembros pueden tener
|
||||||
|
más de un rol. Un grupo puede tener hasta 10 roles,
|
||||||
|
incluyendo el de Todos y el de Propietarios.
|
||||||
</string>
|
</string>
|
||||||
<string name="cant_delete_role">
|
<string name="cant_delete_role">
|
||||||
Los roles de 'Todos' y 'Propietarios' son especiales, y no pueden eliminarse.
|
Los roles de 'Todos' y 'Propietarios' son especiales, y no pueden eliminarse.
|
||||||
</string>
|
</string>
|
||||||
</panel>
|
</panel>
|
||||||
|
<!-- ============================ -->
|
||||||
<panel label="Capacidades" name="actions_sub_tab">
|
<panel label="Capacidades" name="actions_sub_tab">
|
||||||
<scroll_list name="action_list" tool_tip="Selecciona una capacidad para verla más en detalle.">
|
<scroll_list name="action_list" tool_tip="Selecciona una capacidad para verla más en detalle.">
|
||||||
<column label="" name="icon" />
|
<column label="" name="icon" />
|
||||||
@@ -84,7 +108,13 @@ Selecciona varios nombres manteniendo pulsada la tecla Ctrl y pulsando en cada u
|
|||||||
tareas específicas dentro de este grupo. Hay una gran variedad de capacidades.
|
tareas específicas dentro de este grupo. Hay una gran variedad de capacidades.
|
||||||
</string>
|
</string>
|
||||||
</panel>
|
</panel>
|
||||||
|
<panel label="Residentes Prohibidos" name="banlist_sub_tab">
|
||||||
|
<panel.string name="help_text">
|
||||||
|
Todo residente en la lista de Prohibidos no puede unirse al grupo.
|
||||||
|
</panel.string>
|
||||||
|
</panel>
|
||||||
</tab_container>
|
</tab_container>
|
||||||
|
<!-- ============================ -->
|
||||||
<panel name="members_footer" >
|
<panel name="members_footer" >
|
||||||
<text name="static">
|
<text name="static">
|
||||||
Roles Asignados
|
Roles Asignados
|
||||||
@@ -101,6 +131,7 @@ tareas específicas dentro de este grupo. Hay una gran variedad de capacidades.
|
|||||||
<column label="" name="action"/>
|
<column label="" name="action"/>
|
||||||
</scroll_list>
|
</scroll_list>
|
||||||
</panel>
|
</panel>
|
||||||
|
<!-- ============================ -->
|
||||||
<panel name="roles_footer">
|
<panel name="roles_footer">
|
||||||
<text name="static">
|
<text name="static">
|
||||||
Nombre
|
Nombre
|
||||||
@@ -133,6 +164,7 @@ tareas específicas dentro de este grupo. Hay una gran variedad de capacidades.
|
|||||||
<column label="" name="action"/>
|
<column label="" name="action"/>
|
||||||
</scroll_list>
|
</scroll_list>
|
||||||
</panel>
|
</panel>
|
||||||
|
<!-- ============================ -->
|
||||||
<panel name="actions_footer">
|
<panel name="actions_footer">
|
||||||
<text name="static">
|
<text name="static">
|
||||||
Descripción
|
Descripción
|
||||||
@@ -147,4 +179,15 @@ tareas específicas dentro de este grupo. Hay una gran variedad de capacidades.
|
|||||||
Miembros con la capacidad
|
Miembros con la capacidad
|
||||||
</text>
|
</text>
|
||||||
</panel>
|
</panel>
|
||||||
|
<!-- ============================ -->
|
||||||
|
<!-- Singu Note: This is a total hack, abusing that footer is not part of the tab container -->
|
||||||
|
<panel name="banlist_footer">
|
||||||
|
<name_list name="ban_list">
|
||||||
|
<column label="Residente" name="name"/>
|
||||||
|
<column label="Fecha Expulsión" name="ban_date"/>
|
||||||
|
</name_list>
|
||||||
|
<button label="Prohibir Residente(s)" name="ban_create" tool_tip="Expulsar residentes de tu grupo"/>
|
||||||
|
<button label="Quitar Prohibición" name="ban_delete" tool_tip="Quitar expulsión a residentes en tu grupo"/>
|
||||||
|
<button name="ban_refresh" label="Actualizar" tool_tip="Actualizar lista de prohibiciones"/>
|
||||||
|
</panel>
|
||||||
</panel>
|
</panel>
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
</text>
|
</text>
|
||||||
<combo_box name="username_combo"/>
|
<combo_box name="username_combo"/>
|
||||||
<check_box label="Recordar Nombre" name="remember_name_check"/>
|
<check_box label="Recordar Nombre" name="remember_name_check"/>
|
||||||
|
<button label="" tool_tip="Borrar la información de inicio de sesión de este usuario, si la hubiera." name="remove_login"/>
|
||||||
</layout_panel>
|
</layout_panel>
|
||||||
<layout_panel name="password_panel">
|
<layout_panel name="password_panel">
|
||||||
<text name="password_text">
|
<text name="password_text">
|
||||||
@@ -26,7 +27,7 @@
|
|||||||
<text name="grids_combo_text">
|
<text name="grids_combo_text">
|
||||||
Grid:
|
Grid:
|
||||||
</text>
|
</text>
|
||||||
<combo_box name="grids_combo" tool_tip="Ingresa el nombre/nick de un grid conocido o el uri de inicio de seión del mismo, o selecciona uno de la lista"/>
|
<combo_box name="grids_combo" tool_tip="Ingresa el nombre/nick de un grid conocido o el uri de inicio de sesión del mismo, o selecciona uno de la lista"/>
|
||||||
<button name="grids_btn" label="Administrar Grid"/>
|
<button name="grids_btn" label="Administrar Grid"/>
|
||||||
</layout_panel>
|
</layout_panel>
|
||||||
<layout_panel name="location_panel">
|
<layout_panel name="location_panel">
|
||||||
|
|||||||
@@ -108,6 +108,7 @@
|
|||||||
<check_box label="Botones en la misma línea de título de conferencia (Afecta nuevas conferencias de Chat)" name="conf_concise_butt"/>
|
<check_box label="Botones en la misma línea de título de conferencia (Afecta nuevas conferencias de Chat)" name="conf_concise_butt"/>
|
||||||
<check_box label="Botón Historial abre editor externo (Solo en Windows y Mac)" name="legacy_log_launch"/>
|
<check_box label="Botón Historial abre editor externo (Solo en Windows y Mac)" name="legacy_log_launch"/>
|
||||||
<check_box label="Deshabilitar apertura atajo de Comunicación fuera de la lista de amigos" name="only_comm"/>
|
<check_box label="Deshabilitar apertura atajo de Comunicación fuera de la lista de amigos" name="only_comm"/>
|
||||||
|
<check_box label="Desplazamiento automático al final de chats cuando recuperan el foco" name="scroll_to_end_on_focus"/>
|
||||||
<check_box label="Mensajes de acción en Itálica (/me)" name="italicize_actions"/>
|
<check_box label="Mensajes de acción en Itálica (/me)" name="italicize_actions"/>
|
||||||
</panel>
|
</panel>
|
||||||
<!-- =========================== -->
|
<!-- =========================== -->
|
||||||
|
|||||||
@@ -96,13 +96,25 @@
|
|||||||
Cambiar falso estado Ausente (uso: cmd)
|
Cambiar falso estado Ausente (uso: cmd)
|
||||||
</text>
|
</text>
|
||||||
<line_editor name="SinguCmdLineAway"/>
|
<line_editor name="SinguCmdLineAway"/>
|
||||||
|
<text name="cmd_line_text_15">
|
||||||
|
Enviar mensaje a la Región (uso: cmd mensaje)
|
||||||
|
</text>
|
||||||
|
<line_editor name="SinguCmdLineRegionSay" tool_tip="Sólo funciona en regiones permisivas (Sólo Administradores de Estado"/>
|
||||||
</panel>
|
</panel>
|
||||||
<!-- =========================== -->
|
<!-- =========================== -->
|
||||||
<panel label="Seguridad" name="Security">
|
<panel label="Seguridad" name="Security">
|
||||||
<check_box label="Transmitir efectos del Visor (No incluye rayos)" name="broadcast_viewer_effects"/>
|
<check_box label="Transmitir efectos del Visor (No incluye rayos)" name="broadcast_viewer_effects"/>
|
||||||
<check_box label="Desactivar Apuntar a... y Rayos" tool_tip="No apunta hacia ni muestra tus rayos de edición cuando seleccionas un objeto." name="disable_point_at_and_beams_check"/>
|
<check_box label="Desactivar Apuntar a... y Rayos" tool_tip="No apunta hacia ni muestra tus rayos de edición cuando seleccionas un objeto." name="disable_point_at_and_beams_check"/>
|
||||||
<check_box label="No mirar hacia los Objetos (anula ShowLookAt)" tool_tip="Apaga la tansmisión de los giros de cabeza y rayos lookat propios." name="private_look_at_check"/>
|
<check_box label="No mirar hacia los Objetos (anula ShowLookAt)" tool_tip="Apaga la tansmisión de los giros de cabeza y rayos lookat propios." name="private_look_at_check"/>
|
||||||
<check_box label="Mostrar las balizas LookAt de los demás" tool_tip="Te muestra hacia donde miran los demas." name="show_look_at_check"/>
|
<check_box label="Mostrar las balizas Mirar A de los demás" tool_tip="Te muestra hacia donde miran los demas." name="show_look_at_check"/>
|
||||||
|
<combo_box name="lookat_namesystem_combobox" tool_tip="Estilo para mostrar nombres en balizas Mirar A" left_delta="220" width="200">
|
||||||
|
<combo_item name="No Names">Sin Nombres</combo_item>
|
||||||
|
<combo_item name="Old Names">Nombre antiguos</combo_item>
|
||||||
|
<combo_item name="Display Names (with Username)">Nombres Mostrados (c/Nombre de usuario)</combo_item>
|
||||||
|
<combo_item name="Display Names only">Solo Nombres Mostrados</combo_item>
|
||||||
|
<combo_item name="Old Names (with Display Names)">Nombres Antiguos (c/Nombres Mostrados)</combo_item>
|
||||||
|
</combo_box>
|
||||||
|
<check_box label="Mostrar una línea desde la baliza Mirar a hasta el avatar" tool_tip="Ver una línea conectando el foco de la cámara a su avatar. Útil para encontrar donde se encuentra el avatar." name="lineslookat"/>
|
||||||
<check_box label="Notificar en el chat cuando alguien te empuja" name="announce_bumps"/>
|
<check_box label="Notificar en el chat cuando alguien te empuja" name="announce_bumps"/>
|
||||||
<check_box label="Quitarse automáticamente el Bridge LSL" tool_tip="Quitar automáticamente el Bridge LSL de los visores Phoenix o Firestorm." name="detach_bridge"/>
|
<check_box label="Quitarse automáticamente el Bridge LSL" tool_tip="Quitar automáticamente el Bridge LSL de los visores Phoenix o Firestorm." name="detach_bridge"/>
|
||||||
<check_box label="Captura silenciosa a Disco" tool_tip="Anula el sonido de la cámara y el alerta a los demás cuando realizas una captura al disco de tu PC" name="quiet_snapshots_check"/>
|
<check_box label="Captura silenciosa a Disco" tool_tip="Anula el sonido de la cámara y el alerta a los demás cuando realizas una captura al disco de tu PC" name="quiet_snapshots_check"/>
|
||||||
@@ -110,10 +122,18 @@
|
|||||||
<check_box label="Desactivar click del ratón para sentarse en los objetos" tool_tip="Algunas herramientas de griefer se basan en forzarte o engañarte para que hagas click en un objeto el cual te hará sentar, dándole automáticamente al objeto permisos para ejecutar una animación entre de otras cosas. Esta opción desactivará la función llSitTarget - Esto significa que deberás seleccionar la opción 'Sentarse' en las bolas de animación o muebles." name="disable_click_sit_check"/>
|
<check_box label="Desactivar click del ratón para sentarse en los objetos" tool_tip="Algunas herramientas de griefer se basan en forzarte o engañarte para que hagas click en un objeto el cual te hará sentar, dándole automáticamente al objeto permisos para ejecutar una animación entre de otras cosas. Esta opción desactivará la función llSitTarget - Esto significa que deberás seleccionar la opción 'Sentarse' en las bolas de animación o muebles." name="disable_click_sit_check"/>
|
||||||
<check_box left_delta="280" label="Que no son de tu propiedad" tool_tip="Deshabilita sentarse con un click en objetos que no son de tu propiedad (Si se usa con control de grupo, sólo una opción es necesaria)" name="disable_click_sit_own_check"/>
|
<check_box left_delta="280" label="Que no son de tu propiedad" tool_tip="Deshabilita sentarse con un click en objetos que no son de tu propiedad (Si se usa con control de grupo, sólo una opción es necesaria)" name="disable_click_sit_own_check"/>
|
||||||
<check_box label="Mostrar cambios del Total de Scripts en Ejecución:" name="totalscriptjumps" tool_tip="Muestra los cambios en la cuenta total de scritps en tu región, dependiendo del umbral que selecciones a la derecha."/>
|
<check_box label="Mostrar cambios del Total de Scripts en Ejecución:" name="totalscriptjumps" tool_tip="Muestra los cambios en la cuenta total de scritps en tu región, dependiendo del umbral que selecciones a la derecha."/>
|
||||||
<spinner left_delta="350" name="ScriptJumpCount" tool_tip="Umbral para el mensaje de salto de scripts [Predeterminado: 100]"/>
|
<spinner left_delta="270" name="ScriptJumpCount" tool_tip="Umbral para el mensaje de salto de scripts [Predeterminado: 100]"/>
|
||||||
<check_box label="Soporte API Restrained Love (RLVa)" name="RestrainedLove" tool_tip="Permite a los scripts tomar control del visor, si tienes vestido un objeto compatible con RLVa."/>
|
<check_box label="Soporte API Restrained Love (RLVa)" name="RestrainedLove" tool_tip="Permite a los scripts tomar control del visor, si tienes vestido un objeto compatible con RLVa."/>
|
||||||
|
<check_box label="Minimizar automáticamente aviso de reinicio de región" name="region_restart_minimized" tool_tip="Útil para dueños de sim y personas que necesitan recoger sus cosas antes de salir"/>
|
||||||
<text name="EmergencyTeleportDesc" bottom_delta="-20" >Arrastra un hito para autoteleportarte en los últimos 20 segundos previos al reinicio de región</text>
|
<text name="EmergencyTeleportDesc" bottom_delta="-20" >Arrastra un hito para autoteleportarte en los últimos 20 segundos previos al reinicio de región</text>
|
||||||
<drop_target name="emergency_teleport_landmark_drop" bottom_delta="-15" width="450"/>
|
<drop_target name="emergency_teleport_landmark_drop" bottom_delta="-15" width="450"/>
|
||||||
|
<text name="EmergencyTeleportBackupDesc" width="440" bottom_delta="-30" >
|
||||||
|
Suelta aquí un hito de resguardo para autoteleportarte, si ya tienes uno en el ítem anterior</text>
|
||||||
|
<drop_target name="emergency_teleport_landmark_backup_drop"/>
|
||||||
|
<text name="UISndRestartText" bottom_delta="-36" >
|
||||||
|
Ejecutar sonido cuando la región esté por reiniciarse:
|
||||||
|
</text>
|
||||||
|
<line_editor name="UISndRestart" tool_tip="Dejar vacío para no ejecutar sonidos" left_delta="258" />
|
||||||
</panel>
|
</panel>
|
||||||
<!-- =========================== -->
|
<!-- =========================== -->
|
||||||
<panel label="Construcción" name="Building">
|
<panel label="Construcción" name="Building">
|
||||||
@@ -130,10 +150,10 @@
|
|||||||
<spinner label="Tam.X" name="X size"/>
|
<spinner label="Tam.X" name="X size"/>
|
||||||
<spinner label="Tam. Y" name="Y size"/>
|
<spinner label="Tam. Y" name="Y size"/>
|
||||||
<spinner label="Tam.Z" name="Z size"/>
|
<spinner label="Tam.Z" name="Z size"/>
|
||||||
<text left_delta="46" name="Material">
|
<text left_delta="30" name="Material">
|
||||||
Material:
|
Material:
|
||||||
</text>
|
</text>
|
||||||
<combo_box name="material">
|
<combo_box name="material" left_delta="45" width="64" >
|
||||||
<combo_item name="Stone">
|
<combo_item name="Stone">
|
||||||
Piedra
|
Piedra
|
||||||
</combo_item>
|
</combo_item>
|
||||||
@@ -157,11 +177,16 @@
|
|||||||
</combo_item>
|
</combo_item>
|
||||||
</combo_box>
|
</combo_box>
|
||||||
<text name="text_box7">
|
<text name="text_box7">
|
||||||
Permitir sig. propietario:
|
Permisos próximo propietario:
|
||||||
</text>
|
</text>
|
||||||
<check_box label="Permiso de Copia" tool_tip="El próximo propietario puede realizar copias de las creaciones" name="next_owner_copy"/>
|
<text name="text_box8" >Objetos</text>
|
||||||
<check_box label="Permiso de Modific." tool_tip="El próximo propietario puede editar y modificar las creaciones" name="next_owner_modify"/>
|
<check_box label="Copia" tool_tip="El próximo propietario puede realizar copias de las creaciones" name="next_owner_copy"/>
|
||||||
<check_box label="Permiso de Transf." tool_tip="Next owner can give(or sell) creations" name="next_owner_transfer"/>
|
<check_box label="Modificar" tool_tip="El próximo propietario puede editar y modificar las creaciones" name="next_owner_modify"/>
|
||||||
|
<check_box label="Transferir" tool_tip="Next owner can give(or sell) creations" name="next_owner_transfer"/>
|
||||||
|
<text name="text_box9" >Scripts</text>
|
||||||
|
<check_box label="Copiar" tool_tip="El próximo propietario puede crear copias de los scripts" name="script_next_owner_copy"/>
|
||||||
|
<check_box label="Modificar" tool_tip="El próximo propietario puede editar los scripts" name="script_next_owner_modify"/>
|
||||||
|
<check_box label="Transferir" tool_tip="El próximo propietario puede dar (o vender) los scripts" name="script_next_owner_transfer"/>
|
||||||
<check_box label="Inmaterial" name="EmPhantomToggle"/>
|
<check_box label="Inmaterial" name="EmPhantomToggle"/>
|
||||||
<check_box label="Material" name="EmPhysicalToggle"/>
|
<check_box label="Material" name="EmPhysicalToggle"/>
|
||||||
<check_box label="Temporal" name="EmTemporaryToggle"/>
|
<check_box label="Temporal" name="EmTemporaryToggle"/>
|
||||||
@@ -190,7 +215,7 @@
|
|||||||
<check_box name="EmeraldBuildPrefsEmbedItem" label="Colocar un item dentro del nuevo objeto"/>
|
<check_box name="EmeraldBuildPrefsEmbedItem" label="Colocar un item dentro del nuevo objeto"/>
|
||||||
<drop_target name="build_item_add_disp_rect"/>
|
<drop_target name="build_item_add_disp_rect"/>
|
||||||
<check_box label="Activar resaltado de prims seleccionados" name="EmBuildPrefsRenderHighlight_toggle" />
|
<check_box label="Activar resaltado de prims seleccionados" name="EmBuildPrefsRenderHighlight_toggle" />
|
||||||
<check_box label="Mostrar Ejes en la posición del Prim Base" tool_tip="El comportamiento por defecto es mostrar el eje en el centro del conjunto de prims. Si está activado, el eje se muestra en la prim raíz del conjunto de enlaces." name="EmBuildPrefsActualRoot_toggle"/>
|
<check_box label="Mostrar Ejes en posición del Prim Base" tool_tip="El comportamiento por defecto es mostrar el eje en el centro del conjunto de prims. Si está activado, el eje se muestra en la prim raíz del conjunto de enlaces." name="EmBuildPrefsActualRoot_toggle"/>
|
||||||
</panel>
|
</panel>
|
||||||
</tab_container>
|
</tab_container>
|
||||||
</panel>
|
</panel>
|
||||||
|
|||||||
@@ -8,12 +8,14 @@
|
|||||||
<check_box label="Ocultar la pantalla de inicio/cierre de sesión" tool_tip="Marcado, el visor ocultará la pantalla de progreso de inicio/cierre de sesión." name="disable_logout_screen_check"/>
|
<check_box label="Ocultar la pantalla de inicio/cierre de sesión" tool_tip="Marcado, el visor ocultará la pantalla de progreso de inicio/cierre de sesión." name="disable_logout_screen_check"/>
|
||||||
<check_box label="Desactivar animaciones de chat, susurro y gritos" tool_tip="Quitar las animaciones de tu avatar. El efecto es visible para todos" name="disable_chat_animation"/>
|
<check_box label="Desactivar animaciones de chat, susurro y gritos" tool_tip="Quitar las animaciones de tu avatar. El efecto es visible para todos" name="disable_chat_animation"/>
|
||||||
<check_box label="Añadir ropa y objetos anexables en vez de reemplazarlos" tool_tip="Cuando hagas doble click o presiones la tecla Entrar sobre ropas u objetos para vestir en tu inventario, los objetos seleccionados se agregarán a tu vestuario en vez de reemplazar a los que tengas vestidos en la misma ubicación" name="add_not_replace"/>
|
<check_box label="Añadir ropa y objetos anexables en vez de reemplazarlos" tool_tip="Cuando hagas doble click o presiones la tecla Entrar sobre ropas u objetos para vestir en tu inventario, los objetos seleccionados se agregarán a tu vestuario en vez de reemplazar a los que tengas vestidos en la misma ubicación" name="add_not_replace"/>
|
||||||
|
<check_box label="Animar al entrar en el modo Apariencia" name="customize_anim"/>
|
||||||
<check_box label="Dar la vuelta al caminar hacía atrás" tool_tip="Es posible que algunos AOs puedan darte vuelta incluso con esta opción deshabilitada." name="turn_around"/>
|
<check_box label="Dar la vuelta al caminar hacía atrás" tool_tip="Es posible que algunos AOs puedan darte vuelta incluso con esta opción deshabilitada." name="turn_around"/>
|
||||||
<check_box label="Anunciar cuando alguien toma una foto" tool_tip="No avisa si el usuario ha deshabilitado en su visor el no anunciar que está tomando fotografías." name="announce_snapshots"/>
|
<check_box label="Anunciar cuando alguien toma una foto" tool_tip="No avisa si el usuario ha deshabilitado en su visor el no anunciar que está tomando fotografías." name="announce_snapshots"/>
|
||||||
<check_box label="Mostrar los metadatos de la música en stream en el chat local cuando es activada" tool_tip="Cuando comienza una nueva canción, se mostrará un mensaje en el chat local con la información disponible del tema." name="announce_stream_metadata"/>
|
<check_box label="Mostrar los metadatos de la música en stream en el chat local cuando es activada" tool_tip="Cuando comienza una nueva canción, se mostrará un mensaje en el chat local con la información disponible del tema." name="announce_stream_metadata"/>
|
||||||
<check_box label="Mostrar opacas las ventanas flotantes sin foco (requiere que se active en foco cada flotante para tener efecto)" tool_tip="Cuando un flotante pierde el foco, no se volverá transparente con esta opción habilitada. Esto puede causar conflictos con algunas pieles del visor." name="unfocused_floaters_opaque"/>
|
<check_box label="Mostrar opacas las ventanas flotantes sin foco (requiere que se active en foco cada flotante para tener efecto)" tool_tip="Cuando un flotante pierde el foco, no se volverá transparente con esta opción habilitada. Esto puede causar conflictos con algunas pieles del visor." name="unfocused_floaters_opaque"/>
|
||||||
<check_box label="Mostrar nombres completos (Nombres mostrados y nombres de usuario) en perfiles" tool_tip="Sin importar la configuración global del mostrado de nombres, no funcionará si los nombres mostrados están desactivados." name="complete_name_profiles"/>
|
<check_box label="Mostrar nombres completos (Nombres mostrados y nombres de usuario) en perfiles" tool_tip="Sin importar la configuración global del mostrado de nombres, no funcionará si los nombres mostrados están desactivados." name="complete_name_profiles"/>
|
||||||
<check_box label="Permitir a los scripts apropiarse del foco cuando no se puedan compilar debido a errores" name="script_errors_steal_focus"/>
|
<check_box label="Permitir a los scripts apropiarse del foco cuando no se puedan compilar debido a errores" name="script_errors_steal_focus"/>
|
||||||
|
<check_box label="Conectarse con regiones contiguas" name="connect_to_neighbors"/>
|
||||||
</panel>
|
</panel>
|
||||||
<!-- ============================ -->
|
<!-- ============================ -->
|
||||||
<panel label="Tags/Colores" name="TagsColors">
|
<panel label="Tags/Colores" name="TagsColors">
|
||||||
|
|||||||
@@ -10,7 +10,12 @@
|
|||||||
Preferencias de Audio:
|
Preferencias de Audio:
|
||||||
</text>
|
</text>
|
||||||
<panel label="Volumen" name="Volume Panel"/>
|
<panel label="Volumen" name="Volume Panel"/>
|
||||||
<check_box label="Solicitar Permiso (Activar Filtro de Media)" name="media_filter_enable"/>
|
<text name="Media Filtering">Filtro de Medios</text>
|
||||||
|
<radio_group name="filter_group" width="314">
|
||||||
|
<radio_item name="0">Apagado</radio_item>
|
||||||
|
<radio_item name="1">Solo Lista Negra</radio_item>
|
||||||
|
<radio_item name="2">Preguntar</radio_item>
|
||||||
|
</radio_group>
|
||||||
<check_box label="Reproducir Música cuando esté disponible (usa más ancho de banda)" name="streaming_music"/>
|
<check_box label="Reproducir Música cuando esté disponible (usa más ancho de banda)" name="streaming_music"/>
|
||||||
<check_box label="Reproducir Media cuando esté disponible (usa más ancho de banda)" name="streaming_video"/>
|
<check_box label="Reproducir Media cuando esté disponible (usa más ancho de banda)" name="streaming_video"/>
|
||||||
<check_box label="Reproducir automáticamente media en prims" name="auto_prim_streaming_video"/>
|
<check_box label="Reproducir automáticamente media en prims" name="auto_prim_streaming_video"/>
|
||||||
|
|||||||
@@ -30,6 +30,9 @@
|
|||||||
<combo_item name="Display Names only">
|
<combo_item name="Display Names only">
|
||||||
Solamente Nombres Mostrados
|
Solamente Nombres Mostrados
|
||||||
</combo_item>
|
</combo_item>
|
||||||
|
<combo_item name="Old Names (with Display Names)">
|
||||||
|
Nombres Antiguos (c/Nombres Mostrados)
|
||||||
|
</combo_item>
|
||||||
</combo_box>
|
</combo_box>
|
||||||
<check_box label="Mostrar 'Resident'" name="show_resident_checkbox" left_delta="164"/>
|
<check_box label="Mostrar 'Resident'" name="show_resident_checkbox" left_delta="164"/>
|
||||||
<check_box label="Nombres de Avatar en pequeño" name="small_avatar_names_checkbox"/>
|
<check_box label="Nombres de Avatar en pequeño" name="small_avatar_names_checkbox"/>
|
||||||
|
|||||||
@@ -5,47 +5,7 @@
|
|||||||
<text name="WindowSizeLabel">
|
<text name="WindowSizeLabel">
|
||||||
Tamaño de la Ventana:
|
Tamaño de la Ventana:
|
||||||
</text>
|
</text>
|
||||||
<combo_box name="windowsize combo">
|
<combo_box name="windowsize combo"/>
|
||||||
<combo_item name="800x600">
|
|
||||||
800x600
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="720x480">
|
|
||||||
720x480 (NTSC)
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="768x576">
|
|
||||||
768x576 (PAL)
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="1024x768">
|
|
||||||
1024x768
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="1280x720">
|
|
||||||
1280x720 (HD)
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="1366x768">
|
|
||||||
1366x768
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="1280x800">
|
|
||||||
1280x800
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="1440x900">
|
|
||||||
1440x900
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="1600x900">
|
|
||||||
1600x900 (HD+)
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="1680x1050">
|
|
||||||
1680x1050
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="1440x1080">
|
|
||||||
1440x1080 (HDV1080)
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="1920x1080">
|
|
||||||
1920x1080 (Full-HD)
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="2560x1440">
|
|
||||||
2560x1440
|
|
||||||
</combo_item>
|
|
||||||
</combo_box>
|
|
||||||
<text name="DisplayResLabel">
|
<text name="DisplayResLabel">
|
||||||
Resolución de Pantalla:
|
Resolución de Pantalla:
|
||||||
</text>
|
</text>
|
||||||
@@ -100,9 +60,8 @@
|
|||||||
<check_box label="Luces Locales" name="LightingDetailRadio"/>
|
<check_box label="Luces Locales" name="LightingDetailRadio"/>
|
||||||
<check_box label="Sombreado Básico" name="BasicShaders" tool_tip="Desactivar esta opción puede prevenir fallos con algunas tarjetas gráficas."/>
|
<check_box label="Sombreado Básico" name="BasicShaders" tool_tip="Desactivar esta opción puede prevenir fallos con algunas tarjetas gráficas."/>
|
||||||
<check_box label="Sombreado Atmosférico" name="WindLightUseAtmosShaders"/>
|
<check_box label="Sombreado Atmosférico" name="WindLightUseAtmosShaders"/>
|
||||||
<check_box label="Iluminación y Sombras" tool_tip="Sombreado Diferido" name="RenderDeferred"/>
|
<check_box label="Modelo Avanzado de Iluminación" tool_tip="Sombreado Diferido" name="RenderDeferred"/>
|
||||||
<check_box label="Oclusión Ambiental" name="UseSSAO"/>
|
<check_box label="Oclusión Ambiental" name="UseSSAO"/>
|
||||||
<check_box label="Profundidad de Campo" name="RenderDepthOfField"/>
|
|
||||||
<text name="TerrainScaleText">
|
<text name="TerrainScaleText">
|
||||||
Escala de Terreno:
|
Escala de Terreno:
|
||||||
</text>
|
</text>
|
||||||
@@ -155,20 +114,17 @@
|
|||||||
</combo_item>
|
</combo_item>
|
||||||
</combo_box>
|
</combo_box>
|
||||||
|
|
||||||
<slider label=" Física de Avatar:" name="AvatarPhysicsDetail" width="165"/>
|
<slider label=" Física de Avatar:" name="AvatarPhysicsDetail" width="165" label_width="82" />
|
||||||
<text name="AvatarPhysicsDetailText">
|
<text name="AvatarPhysicsDetailText">
|
||||||
Apagada
|
Apagada
|
||||||
</text>
|
</text>
|
||||||
<text name="DrawDistanceMeterText1">
|
<text name="DrawDistanceMeterText">
|
||||||
m
|
m
|
||||||
</text>
|
</text>
|
||||||
<text name="DrawDistanceMeterText2">
|
<slider label="Distancia de Dibujo:" name="DrawDistance" label_width="106"/>
|
||||||
m
|
<slider label="Máximo de Partículas:" name="MaxParticleCount" label_width="106"/>
|
||||||
</text>
|
<slider label="Máx No Simulados:" name="AvatarMaxVisible" label_width="106"/>
|
||||||
<slider label="Distancia de Dibujo:" name="DrawDistance"/>
|
<slider label="PostProcesado:" name="RenderPostProcess" label_width="106"/>
|
||||||
<slider label="Máximo de Partículas:" name="MaxParticleCount"/>
|
|
||||||
<slider label="Máx No Simulados" name="AvatarMaxVisible"/>
|
|
||||||
<slider label="PostProcesado:" name="RenderPostProcess"/>
|
|
||||||
<text name="PostProcessText">
|
<text name="PostProcessText">
|
||||||
Bajo
|
Bajo
|
||||||
</text>
|
</text>
|
||||||
@@ -223,22 +179,16 @@
|
|||||||
<text name="Antialiasing:">
|
<text name="Antialiasing:">
|
||||||
Antialiasing:
|
Antialiasing:
|
||||||
</text>
|
</text>
|
||||||
<combo_box label="Antialiasing" name="fsaa">
|
<combo_box label="Antialiasing" name="fsaa" width="84">
|
||||||
<combo_item name="FSAADisabled">
|
<combo_item name="FSAADisabled">
|
||||||
Desactivado
|
Desactivado
|
||||||
</combo_item>
|
</combo_item>
|
||||||
<combo_item name="2x">
|
</combo_box>
|
||||||
2x
|
<text name="VSync:">Sincronización Vertical:</text>
|
||||||
</combo_item>
|
<combo_box label="VSync" name="vsync" width="84">
|
||||||
<combo_item name="4x">
|
<combo_item name="VSyncDisabled">Desactivada</combo_item>
|
||||||
4x
|
<combo_item name="VSyncStandard">Estándar</combo_item>
|
||||||
</combo_item>
|
<combo_item name="VSyncAdaptive">Adaptiva</combo_item>
|
||||||
<combo_item name="8x">
|
|
||||||
8x
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="16x">
|
|
||||||
16x
|
|
||||||
</combo_item>
|
|
||||||
</combo_box>
|
</combo_box>
|
||||||
<spinner label="Memoria p/ Texturas (MB):" name="GrapicsCardTextureMemory" tool_tip="Cantidad de memoria asignada a las texturas. Por defecto es la memoria de la tarjeta de vídeo. Reducir esta cantidad puede mejorar el rendimiento, pero también puede hacer que las texturas se vean borrosas."/>
|
<spinner label="Memoria p/ Texturas (MB):" name="GrapicsCardTextureMemory" tool_tip="Cantidad de memoria asignada a las texturas. Por defecto es la memoria de la tarjeta de vídeo. Reducir esta cantidad puede mejorar el rendimiento, pero también puede hacer que las texturas se vean borrosas."/>
|
||||||
<check_box label="Activar OpenGL Vertex Buffer Objects" name="vbo" tool_tip="Habilitar esta opción en hardware moderno puede proporcionar una mejora en el rendimiento. Sin embargo, el hardware antiguo ofrece una pobre implementación de VBOs y puede causar fallos cuando esta opcíon esté activada."/>
|
<check_box label="Activar OpenGL Vertex Buffer Objects" name="vbo" tool_tip="Habilitar esta opción en hardware moderno puede proporcionar una mejora en el rendimiento. Sin embargo, el hardware antiguo ofrece una pobre implementación de VBOs y puede causar fallos cuando esta opcíon esté activada."/>
|
||||||
@@ -252,6 +202,15 @@ Intensidad de la Niebla no están disponibles
|
|||||||
cuando se activan las Sombras de la Atmósfera.
|
cuando se activan las Sombras de la Atmósfera.
|
||||||
</text>
|
</text>
|
||||||
</panel>
|
</panel>
|
||||||
|
<!-- =========================== -->
|
||||||
|
<panel name="DoF" label="Profundidad de Campo">
|
||||||
|
<check_box label="Habilitar Profundidad de Campo" tool_tip="Alterna el efecto de profundidad de campo en la cámara, a menudo utilizado para difuminar objetos lejanos que no deben estar en el foco" name="RenderDepthOfField"/>
|
||||||
|
<slider width="318" label_width="130" name="CameraFNum" label="Número F:" tool_tip="Valor de efecto de apertura del diafragma de la cámara para el efecto de Profundidad de Campo"/>
|
||||||
|
<slider width="318" label_width="130" name="CameraFocal" label="Longitud Focal (mm):" tool_tip="Longitud focal a de la Cámara para el efecto de Profundidad de Campo (en milímetros)"/>
|
||||||
|
<slider width="318" label_width="130" name="CameraCoF" label="Círculo de Confusión:" tool_tip="Define el Círculo de Confusión máximo de la Cámara"/>
|
||||||
|
<slider width="318" label_width="130" name="CameraFocusTrans" label="Tiempo de Transición (seg):" tool_tip="Tiempo que toma en cambiar el foco de un lugar al siguiente"/>
|
||||||
|
<slider width="318" label_width="130" name="CameraDoFRes" label="Resolución:" tool_tip="Definir la Resolución (Calidad) de cada pixel PDC (DOF)"/>
|
||||||
|
</panel>
|
||||||
</tab_container>
|
</tab_container>
|
||||||
<string name="resolution_format">[RES_X] x [RES_Y]</string>
|
<string name="resolution_format">[RES_X] x [RES_Y]</string>
|
||||||
<string name="aspect_ratio_text">[NUM]:[DEN]</string>
|
<string name="aspect_ratio_text">[NUM]:[DEN]</string>
|
||||||
|
|||||||
@@ -14,10 +14,7 @@
|
|||||||
<check_box label="Incluir MI en la consola de Chat" name="include_im_in_chat_console"/>
|
<check_box label="Incluir MI en la consola de Chat" name="include_im_in_chat_console"/>
|
||||||
<check_box label="Mostrar horario en los IMI" name="show_timestamps_check"/>
|
<check_box label="Mostrar horario en los IMI" name="show_timestamps_check"/>
|
||||||
<check_box label="Mostrar notificaciones cuando los amigos inician/terminan sesión" name="friends_online_notify_checkbox"/>
|
<check_box label="Mostrar notificaciones cuando los amigos inician/terminan sesión" name="friends_online_notify_checkbox"/>
|
||||||
<text name="text_box3" heigh="42">
|
<check_box label="Bloquear conferencias entrantes" name="block_conferences_checkbox"/>
|
||||||
Respuesta en
|
|
||||||
Modo Ocupado:
|
|
||||||
</text>
|
|
||||||
<text name="text_box4">
|
<text name="text_box4">
|
||||||
Opciones de Registro:
|
Opciones de Registro:
|
||||||
</text>
|
</text>
|
||||||
|
|||||||
@@ -7,7 +7,9 @@
|
|||||||
Sensibilidad del Ratón:
|
Sensibilidad del Ratón:
|
||||||
</text>
|
</text>
|
||||||
<check_box label="Invertir el Ratón" name="invert_mouse"/>
|
<check_box label="Invertir el Ratón" name="invert_mouse"/>
|
||||||
|
<check_box label="Acercamiento Instantáneo con Click derecho, no progresivo" name="instant_zoom"/>
|
||||||
<check_box label="Mostrar Avatar en Vista Subjetiva" name="first_person_avatar_visible"/>
|
<check_box label="Mostrar Avatar en Vista Subjetiva" name="first_person_avatar_visible"/>
|
||||||
|
<check_box label="Usar comportamiento de Cámara 'realistico' en Vista Subjetiva" name="UseRealisticMouselook"/>
|
||||||
<text name="UI Hidden in mouselook:">Esconder Interface en Vista Subjetiva:</text>
|
<text name="UI Hidden in mouselook:">Esconder Interface en Vista Subjetiva:</text>
|
||||||
<check_box name="mouselook_hides_floaters" label="Flotantes"/>
|
<check_box name="mouselook_hides_floaters" label="Flotantes"/>
|
||||||
<check_box left_delta="110" name="mouselook_hides_notices" label="Avisos"/>
|
<check_box left_delta="110" name="mouselook_hides_notices" label="Avisos"/>
|
||||||
@@ -17,7 +19,8 @@
|
|||||||
Opciones de Movimiento:
|
Opciones de Movimiento:
|
||||||
</text>
|
</text>
|
||||||
<check_box label="Despegar/Aterrizar al pulsar RePág/AvPág" name="automatic_fly"/>
|
<check_box label="Despegar/Aterrizar al pulsar RePág/AvPág" name="automatic_fly"/>
|
||||||
<check_box label="Permitir alternar estar en cuclillas presionando la tecla Mayús" name="crouch_toggle"/>
|
<check_box label="Permitir alternar estar en cuclillas presionando la tecla Mayús" name="crouch_toggle"/>
|
||||||
|
<check_box label="Usar disposición de teclado azerty en vez de qwerty" name="azerty_keys"/>
|
||||||
<text left="10" name=" Camera Options:">
|
<text left="10" name=" Camera Options:">
|
||||||
Opciones de Cámara:
|
Opciones de Cámara:
|
||||||
</text>
|
</text>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
<button label="?" name="terraform_help" left="225"/>
|
<button label="?" name="terraform_help" left="225"/>
|
||||||
<check_box label="Bloquear Volar" name="block_fly_check"/>
|
<check_box label="Bloquear Volar" name="block_fly_check"/>
|
||||||
<button label="?" name="fly_help" left="225"/>
|
<button label="?" name="fly_help" left="225"/>
|
||||||
|
<check_box label="Bloquear volar sobre la Parcela" tool_tip="Extiende el control de la parcela hacia arriba para prevenir el vuelo sobre la misma" name="block_fly_over_check"/>
|
||||||
<check_box label="Permitir Daño" name="allow_damage_check"/>
|
<check_box label="Permitir Daño" name="allow_damage_check"/>
|
||||||
<button label="?" name="damage_help" left="225"/>
|
<button label="?" name="damage_help" left="225"/>
|
||||||
<check_box label="Restringir Empujones" name="restrict_pushobject"/>
|
<check_box label="Restringir Empujones" name="restrict_pushobject"/>
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
description="Expulsar a miembros del grupo"
|
description="Expulsar a miembros del grupo"
|
||||||
longdescription="Expulsar a miembros del grupo usando el botón 'Expulsar del grupo' en Miembros y Roles > subpestaña Miembros. Un propietario puede expulsar a cualquiera, excepto a otro propietario. Si no eres un propietario, un miembro del grupo puede expulsarte sólo si tiene concedida esta capacidad específica. Para quitar capacidades a los miembros, debes tener la de 'Quitar capacidades a miembros'."
|
longdescription="Expulsar a miembros del grupo usando el botón 'Expulsar del grupo' en Miembros y Roles > subpestaña Miembros. Un propietario puede expulsar a cualquiera, excepto a otro propietario. Si no eres un propietario, un miembro del grupo puede expulsarte sólo si tiene concedida esta capacidad específica. Para quitar capacidades a los miembros, debes tener la de 'Quitar capacidades a miembros'."
|
||||||
name="member eject"/>
|
name="member eject"/>
|
||||||
|
<action description="Administrar Lista de Prohibición" longdescription="Permitir a los miembros del grupo prohibir o quitar la prohibición a este grupo." name="allow ban"/>
|
||||||
<action
|
<action
|
||||||
description="Activar/desactivar 'Inscripción libre' y cambiar 'Cuota de inscripción'"
|
description="Activar/desactivar 'Inscripción libre' y cambiar 'Cuota de inscripción'"
|
||||||
longdescription="Activar/desactivar 'Inscripción libre' para permitir o no que se unan sin invitación nuevos miembros, y cambiar la 'Cuota de inscripción' en la sección Preferencias del grupo de la pestaña General."
|
longdescription="Activar/desactivar 'Inscripción libre' para permitir o no que se unan sin invitación nuevos miembros, y cambiar la 'Cuota de inscripción' en la sección Preferencias del grupo de la pestaña General."
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ Asegurate que has ingresado el URI de inicio de sesión correcto. Un ejemplo de
|
|||||||
|
|
||||||
<!-- Default Args - these arguments will be replaced in all strings -->
|
<!-- Default Args - these arguments will be replaced in all strings -->
|
||||||
<string name="SECOND_LIFE">Second Life</string>
|
<string name="SECOND_LIFE">Second Life</string>
|
||||||
<string name="APP_NAME">Singularity Viewer</string>
|
|
||||||
<string name="CAPITALIZED_APP_NAME">SINGULARITY VIEWER</string>
|
|
||||||
<string name="SECOND_LIFE_GRID">Grid Second Life</string>
|
<string name="SECOND_LIFE_GRID">Grid Second Life</string>
|
||||||
<string name="SUPPORT_SITE">Portal de Soporte de Second Life</string>
|
<string name="SUPPORT_SITE">Portal de Soporte de Second Life</string>
|
||||||
|
|
||||||
@@ -310,6 +308,9 @@ Asegurate que has ingresado el URI de inicio de sesión correcto. Un ejemplo de
|
|||||||
<!-- build floater -->
|
<!-- build floater -->
|
||||||
<string name="multiple_textures">Múltiple</string>
|
<string name="multiple_textures">Múltiple</string>
|
||||||
<string name="use_texture">Usar textura</string>
|
<string name="use_texture">Usar textura</string>
|
||||||
|
<string name="manip_hint1">Mover cursor sobre la regla</string>
|
||||||
|
<string name="manip_hint2">para ajustar a la grilla</string>
|
||||||
|
|
||||||
|
|
||||||
<!-- world map -->
|
<!-- world map -->
|
||||||
<string name="texture_loading">Cargando...</string>
|
<string name="texture_loading">Cargando...</string>
|
||||||
@@ -2715,7 +2716,26 @@ string input = string to test for match
|
|||||||
string pattern = string to use as pattern
|
string pattern = string to use as pattern
|
||||||
returns boolean TRUE/FALSE.
|
returns boolean TRUE/FALSE.
|
||||||
</string>
|
</string>
|
||||||
|
<string name="LSLTipText_osForceCreateLink">
|
||||||
|
osForceCreateLink(key target, integer parent)
|
||||||
|
Link the script's object with target, without requiring link permissions.
|
||||||
|
</string>
|
||||||
|
<string name="LSLTipText_osForceBreakLink">
|
||||||
|
osForceBreakLink(integer link)
|
||||||
|
De-links the prim with the given link number in a linked set, without requiring link permissions.
|
||||||
|
</string>
|
||||||
|
<string name="LSLTipText_osForceBreakAllLinks">
|
||||||
|
osForceBreakAllLinks()
|
||||||
|
De-links all prims in a link set, without requiring link permissions.
|
||||||
|
</string>
|
||||||
|
<string name="LSLTipText_osGetRegionSize">
|
||||||
|
vector osGetRegionSize()
|
||||||
|
Returns the size of the region in metres.
|
||||||
|
</string>
|
||||||
|
<string name="LSLTipText_osGetPhysicsEngineType">
|
||||||
|
string osGetPhysicsEngineType()
|
||||||
|
Returns a string containing the name of the Physics Engine.
|
||||||
|
</string>
|
||||||
<string name="LSLTipText_cmSetWindlightScene">
|
<string name="LSLTipText_cmSetWindlightScene">
|
||||||
cmSetWindlightScene(list rules)
|
cmSetWindlightScene(list rules)
|
||||||
Set the current WindLight scene. Estate managers and owners only.
|
Set the current WindLight scene. Estate managers and owners only.
|
||||||
@@ -3068,8 +3088,8 @@ Where tag = tag string to match. Removes bot's matching the tag.
|
|||||||
|
|
||||||
<!-- Non-standard LLChat strings -->
|
<!-- Non-standard LLChat strings -->
|
||||||
<string name="ScriptCounting">Contando scripts, espera por favor...</string>
|
<string name="ScriptCounting">Contando scripts, espera por favor...</string>
|
||||||
<string name="ScriptCountAvatar">Contados [SCRIPTS] scripts en [OBJECTS] Accesorios en [NAME].</string>
|
<string name="ScriptCountAvatar">Contados [SCRIPTS] scripts en [OBJECTS] Accesorios en [NAME]. ([RUNNING] ejecutándose, [MONO] mono.)</string>
|
||||||
<string name="ScriptCountObject">Contados [SCRIPTS] scripts en [OBJECTS] objetos.</string>
|
<string name="ScriptCountObject">Contados [SCRIPTS] scripts en [OBJECTS] objetos. ([RUNNING] ejecutándose, [MONO] mono.)</string>
|
||||||
<string name="ScriptDeleteObject">Borrados [SCRIPTS] scripts en [OBJECTS] objetos.</string>
|
<string name="ScriptDeleteObject">Borrados [SCRIPTS] scripts en [OBJECTS] objetos.</string>
|
||||||
<string name="took_a_snapshot">ha tomado una fotografía</string>
|
<string name="took_a_snapshot">ha tomado una fotografía</string>
|
||||||
|
|
||||||
@@ -4324,6 +4344,12 @@ Intenta entrecomillando el camino al editor.
|
|||||||
<!-- teleport_strings.xml's strings we need -->
|
<!-- teleport_strings.xml's strings we need -->
|
||||||
<string name="completed_from">Teleporte completado desde</string>
|
<string name="completed_from">Teleporte completado desde</string>
|
||||||
|
|
||||||
|
<!-- Media filter -->
|
||||||
|
<string name="audio">audio</string>
|
||||||
|
<string name="media">media</string>
|
||||||
|
<string name="MediaFilterBlacklist">Lista Negra</string>
|
||||||
|
<string name="MediaFilterWhitelist">Lista Blanca</string>
|
||||||
|
|
||||||
<!-- AIAlert messages -->
|
<!-- AIAlert messages -->
|
||||||
|
|
||||||
<!-- AIFile exception alerts -->
|
<!-- AIFile exception alerts -->
|
||||||
|
|||||||
@@ -140,6 +140,7 @@
|
|||||||
<menu_item_separator label="-----------" name="separator5"/>
|
<menu_item_separator label="-----------" name="separator5"/>
|
||||||
<menu_item_call label="Mes Ensembles" name="My Outfits"/>
|
<menu_item_call label="Mes Ensembles" name="My Outfits"/>
|
||||||
<menu_item_call label="Favoris" name="Favorites"/>
|
<menu_item_call label="Favoris" name="Favorites"/>
|
||||||
|
<menu_item_check label="Avatars de Base" name="Avatar Picker"/>
|
||||||
<menu_item_separator label="-----------" name="separator5"/>
|
<menu_item_separator label="-----------" name="separator5"/>
|
||||||
<menu_item_call label="Mes terrains" name="My Land..."/>
|
<menu_item_call label="Mes terrains" name="My Land..."/>
|
||||||
<menu_item_call label="À propos du terrain" name="About Land..."/>
|
<menu_item_call label="À propos du terrain" name="About Land..."/>
|
||||||
@@ -243,6 +244,18 @@
|
|||||||
<menu_item_call label="A propos de [APP_NAME]" name="About Second Life..."/>
|
<menu_item_call label="A propos de [APP_NAME]" name="About Second Life..."/>
|
||||||
</menu>
|
</menu>
|
||||||
<menu name="Singularity">
|
<menu name="Singularity">
|
||||||
<menu_item_check label="Filtre Médias" name="Media Filter"/>
|
<menu_item_call label="Fermer toutes les Notices des Groupes" name="Close All Dialogs"/>
|
||||||
|
<menu_item_call label="Faux Absent (Simuler qu'on est ... Aplula)" name="Fake Away Status"/>
|
||||||
|
<menu_item_call label="Force le 'Ground Sit' (Assis par terre, plus bouger !)" name="Force Ground Sit"/>
|
||||||
|
<menu_item_call label="AO Intégré" name="Animation Override ..."/>
|
||||||
|
<menu_item_check label="Nimble/Super Saut ? (Dur à traduire, littéralement...Agile !)" name="Nimble"/>
|
||||||
|
<menu_item_check label="Object Area Search/Recherche par Zone des Objets" name="Object Area Search"/>
|
||||||
|
<menu_item_check label="Sound Explorer/Panneau des Sons" name="Sound Explorer"/>
|
||||||
|
<menu_item_check label="Asset Blacklist/Liste des Derenders" name="Asset Blacklist"/>
|
||||||
|
<menu_item_check label="Filtre des Médias" name="Media Filter"/>
|
||||||
|
<menu_item_check label="Affichage des Titres de la Radio + Egaliseur (joli)" name="Streaming Audio Display"/>
|
||||||
|
<menu_item_check label="Pose Stand (En français quel intérêt ? Pose Stand et puis voilà)" name="Pose Stand"/>
|
||||||
|
<menu_item_check label="Console de 'Debug' pour la région" name="Region Debug Console"/>
|
||||||
|
<menu_item_call label="Rebake/Rafraîchir" name="Rebake"/>
|
||||||
</menu>
|
</menu>
|
||||||
</menu_bar>
|
</menu_bar>
|
||||||
|
|||||||
@@ -67,16 +67,18 @@
|
|||||||
<panel label="Sécurité" name="Security">
|
<panel label="Sécurité" name="Security">
|
||||||
<check_box label="Emettre les effets du viewer (Excluant les rayons)" name="broadcast_viewer_effects"/>
|
<check_box label="Emettre les effets du viewer (Excluant les rayons)" name="broadcast_viewer_effects"/>
|
||||||
<check_box label="Désactiver le "Pointer vers" à l"édition d'un objet" tool_tip="Masque le pointeur sur l'objet édité" name="disable_point_at_and_beams_check"/>
|
<check_box label="Désactiver le "Pointer vers" à l"édition d'un objet" tool_tip="Masque le pointeur sur l'objet édité" name="disable_point_at_and_beams_check"/>
|
||||||
<check_box label="Ne pas "Regarder vers"" tool_tip="Supprime les mouvements de tête, et le "Regarder vers" pour soi-même" name="private_look_at_check"/>
|
<check_box label="Ne pas "Regarder vers" (defeat look at)" tool_tip="Supprime les mouvements de tête, et le "Regarder vers" pour soi-même" name="private_look_at_check"/>
|
||||||
<check_box label="Voir quand les autres "Regardent vers"" tool_tip="Montre où les autres regardent." name="show_look_at_check"/>
|
<check_box label="Voir quand les autres "Regardent vers" (look at Beacons)" tool_tip="Montre où les autres regardent." name="show_look_at_check"/>
|
||||||
<combo_box left_delta="260" name="lookat_namesystem_combobox" tool_tip="Style for displaying names on LookAt beacons">
|
<combo_box left_delta="320" name="lookat_namesystem_combobox" tool_tip="Style for displaying names on LookAt beacons">
|
||||||
<combo_item name="No Names">Aucun de Name</combo_item>
|
<combo_item name="No Names">Aucun de Name</combo_item>
|
||||||
<combo_item name="Old Names">Anciens Names</combo_item>
|
<combo_item name="Old Names">Anciens Names</combo_item>
|
||||||
<combo_item name="Display Names (with Username)">Display Names(w/Username)</combo_item>
|
<combo_item name="Display Names (with Username)">Display Names(w/Username)</combo_item>
|
||||||
<combo_item name="Display Names only">Display Names only</combo_item>
|
<combo_item name="Display Names only">Display Names only</combo_item>
|
||||||
<combo_item name="Old Names (with Display Names)">Anciens Names (w/Display)</combo_item>
|
<combo_item name="Old Names (with Display Names)">Anciens Names (w/Display)</combo_item>
|
||||||
</combo_box>
|
</combo_box>
|
||||||
<check_box label="Détache automatiquement ce rodjudju de LSL Bridge" tool_tip="détache le LSL Bridge de Phoenix et/ou Firestorm viewer." name="detach_bridge"/>
|
<check_box label="Montre une ligne de la cible du 'look at' à l'avatar et inversement" name="lineslookat"/>
|
||||||
|
<check_box label="Annonce dans le chat quand on vous bouscule" name="announce_bumps"/>
|
||||||
|
<check_box label="Détache automatiquement ce rodjudju de LSL Bridge" tool_tip="détache le LSL Bridge de Phoenix et/ou Firestorm viewer." name="detach_bridge"/>
|
||||||
<check_box label="Prendre discrètement un photo, sur votre disque dur" tool_tip="Permet de prendre une photo en mode "espionnage", sans bruit d'appareil, ni mouvement de caméra, ni gesture. (Uniquement vers le disque dur)." name="quiet_snapshots_check"/>
|
<check_box label="Prendre discrètement un photo, sur votre disque dur" tool_tip="Permet de prendre une photo en mode "espionnage", sans bruit d'appareil, ni mouvement de caméra, ni gesture. (Uniquement vers le disque dur)." name="quiet_snapshots_check"/>
|
||||||
<check_box label="En vous levant, annule les permissions que l'objet a sur votre avatar" tool_tip="Evite que l'objet garde le contrôle de votre avatar, comme par exemple les animations." name="revoke_perms_on_stand_up_check"/>
|
<check_box label="En vous levant, annule les permissions que l'objet a sur votre avatar" tool_tip="Evite que l'objet garde le contrôle de votre avatar, comme par exemple les animations." name="revoke_perms_on_stand_up_check"/>
|
||||||
<check_box label="Désactive le "Click to sit" automatique" tool_tip="Désactive llSitTarget. Vous devrez sélectionner vous même la fonction "sit" sur l'objet." name="disable_click_sit_check"/>
|
<check_box label="Désactive le "Click to sit" automatique" tool_tip="Désactive llSitTarget. Vous devrez sélectionner vous même la fonction "sit" sur l'objet." name="disable_click_sit_check"/>
|
||||||
@@ -84,7 +86,11 @@
|
|||||||
<check_box label="Affiche les changements de décomptes de scripts de la région." name="totalscriptjumps" tool_tip="Dépendant du seuil que vous choisissez dans la fenêtre à droite."/>
|
<check_box label="Affiche les changements de décomptes de scripts de la région." name="totalscriptjumps" tool_tip="Dépendant du seuil que vous choisissez dans la fenêtre à droite."/>
|
||||||
<spinner left_delta="350" name="ScriptJumpCount"/>
|
<spinner left_delta="350" name="ScriptJumpCount"/>
|
||||||
<check_box label="RLVa (Restrained Love API)" name="RestrainedLove" tool_tip="Active le RLVa"/>
|
<check_box label="RLVa (Restrained Love API)" name="RestrainedLove" tool_tip="Active le RLVa"/>
|
||||||
</panel>
|
<check_box label="Reduit automatiquement la notice de redémarrage de la sim" name="region_restart_minimized"/>
|
||||||
|
<text name="EmergencyTeleportDesc">Glissez un landmark ci dessous pour y être téléporté 20 sec avant le redémarrage de la sim</text>
|
||||||
|
<text name="EmergencyTeleportBackupDesc">Glissez ci dessous un second landmark de 'secours'</text>
|
||||||
|
<text name="UISndRestartText">Alerte sonore du redémarrage:</text>
|
||||||
|
</panel>
|
||||||
|
|
||||||
<panel label="Build/Création" name="Building">
|
<panel label="Build/Création" name="Building">
|
||||||
<text name="text_box6">Point de Pivot</text>
|
<text name="text_box6">Point de Pivot</text>
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ public:
|
|||||||
bool hasDirname(void) const { return hasFilename(); }
|
bool hasDirname(void) const { return hasFilename(); }
|
||||||
std::string const& getDirname(void) const { return getFilename(); }
|
std::string const& getDirname(void) const { return getFilename(); }
|
||||||
|
|
||||||
|
/*virtual*/ const char* getName() const { return "AIDirPicker"; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Basically all public members of AIStateMachine could made accessible here,
|
// Basically all public members of AIStateMachine could made accessible here,
|
||||||
// but I don't think others will ever be needed (not even these, actually).
|
// but I don't think others will ever be needed (not even these, actually).
|
||||||
|
|||||||
@@ -188,6 +188,8 @@ public:
|
|||||||
std::string getFolder(void) const;
|
std::string getFolder(void) const;
|
||||||
std::vector<std::string> const& getFilenames(void) const { return mFilenames; }
|
std::vector<std::string> const& getFilenames(void) const { return mFilenames; }
|
||||||
|
|
||||||
|
/*virtual*/ const char* getName() const { return "AIFilePicker"; }
|
||||||
|
|
||||||
// Load the sContextMap from disk.
|
// Load the sContextMap from disk.
|
||||||
static bool loadFile(std::string const& filename);
|
static bool loadFile(std::string const& filename);
|
||||||
// Save the sContextMap to disk.
|
// Save the sContextMap to disk.
|
||||||
|
|||||||
Reference in New Issue
Block a user