diff options
author | James Cook <james@lindenlab.com> | 2010-02-11 10:09:23 -0800 |
---|---|---|
committer | James Cook <james@lindenlab.com> | 2010-02-11 10:09:23 -0800 |
commit | 9dd7924b19651abf393f7b0dee632904a6b8e52a (patch) | |
tree | b22f8ca3ecdf4ec8e5288102912dccdd7289f51f /indra | |
parent | 301f250c1cd77711c0234d8ed4089453712f834e (diff) | |
parent | 39fe664b97b946daf7984b946fede6f04ae731c4 (diff) |
Merge
Diffstat (limited to 'indra')
598 files changed, 7542 insertions, 5088 deletions
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 1f578eec5f..592e9fc901 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -171,8 +171,8 @@ if (LINUX) if (NOT STANDALONE) # this stops us requiring a really recent glibc at runtime add_definitions(-fno-stack-protector) - # linking can be so slow - give us a chance to figure out why - set(CMAKE_CXX_LINK_FLAGS "-Wl,--stats,--no-keep-memory") + # linking can be very memory-hungry, especially the final viewer link + set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory") endif (NOT STANDALONE) endif (VIEWER) diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp index 528a7bb4a5..40a9752268 100644 --- a/indra/llcharacter/llcharacter.cpp +++ b/indra/llcharacter/llcharacter.cpp @@ -181,16 +181,18 @@ void LLCharacter::requestStopMotion( LLMotion* motion) // updateMotions() //----------------------------------------------------------------------------- static LLFastTimer::DeclareTimer FTM_UPDATE_ANIMATION("Update Animation"); +static LLFastTimer::DeclareTimer FTM_UPDATE_HIDDEN_ANIMATION("Update Hidden Anim"); void LLCharacter::updateMotions(e_update_t update_type) { - LLFastTimer t(FTM_UPDATE_ANIMATION); if (update_type == HIDDEN_UPDATE) { + LLFastTimer t(FTM_UPDATE_HIDDEN_ANIMATION); mMotionController.updateMotionsMinimal(); } else { + LLFastTimer t(FTM_UPDATE_ANIMATION); // unpause if the number of outstanding pause requests has dropped to the initial one if (mMotionController.isPaused() && mPauseRequest->getNumRefs() == 1) { diff --git a/indra/llcharacter/lleditingmotion.cpp b/indra/llcharacter/lleditingmotion.cpp index 381d19e614..57554bdc35 100644 --- a/indra/llcharacter/lleditingmotion.cpp +++ b/indra/llcharacter/lleditingmotion.cpp @@ -221,7 +221,7 @@ BOOL LLEditingMotion::onUpdate(F32 time, U8* joint_mask) if (!target.isFinite()) { llerrs << "Non finite target in editing motion with target distance of " << target_dist << - " and focus point " << focus_pt << " and pointAtPt: " << *pointAtPt << llendl; + " and focus point " << focus_pt << llendl; } mTarget.setPosition( target + mParentJoint.getPosition()); diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 9ead183a9e..4481d334b2 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -50,6 +50,7 @@ set(llcommon_SOURCE_FILES lleventdispatcher.cpp lleventfilter.cpp llevents.cpp + lleventtimer.cpp llfasttimer_class.cpp llfile.cpp llfindlocale.cpp @@ -164,7 +165,6 @@ set(llcommon_HEADER_FILES llhttpstatuscodes.h llindexedqueue.h llinstancetracker.h - llinstancetracker.h llkeythrottle.h lllazy.h lllistenerwrapper.h diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp index 968b92d1e7..6b2d1b7c20 100644 --- a/indra/llcommon/llapp.cpp +++ b/indra/llcommon/llapp.cpp @@ -41,7 +41,7 @@ #include "lllivefile.h" #include "llmemory.h" #include "llstl.h" // for DeletePointer() -#include "lltimer.h" +#include "lleventtimer.h" // // Signal handling diff --git a/indra/llcommon/lleventtimer.cpp b/indra/llcommon/lleventtimer.cpp new file mode 100644 index 0000000000..d44e7ec1e6 --- /dev/null +++ b/indra/llcommon/lleventtimer.cpp @@ -0,0 +1,95 @@ +/** + * @file lleventtimer.cpp + * @brief Cross-platform objects for doing timing + * + * $LicenseInfo:firstyear=2000&license=viewergpl$ + * + * Copyright (c) 2000-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "linden_common.h" + +#include "lleventtimer.h" + +#include "u64.h" + + +////////////////////////////////////////////////////////////////////////////// +// +// LLEventTimer Implementation +// +////////////////////////////////////////////////////////////////////////////// + +LLEventTimer::LLEventTimer(F32 period) +: mEventTimer() +{ + mPeriod = period; +} + +LLEventTimer::LLEventTimer(const LLDate& time) +: mEventTimer() +{ + mPeriod = (F32)(time.secondsSinceEpoch() - LLDate::now().secondsSinceEpoch()); +} + + +LLEventTimer::~LLEventTimer() +{ +} + +//static +void LLEventTimer::updateClass() +{ + std::list<LLEventTimer*> completed_timers; + + { + LLInstanceTrackerScopedGuard guard; + for (instance_iter iter = guard.beginInstances(); iter != guard.endInstances(); ) + { + LLEventTimer& timer = *iter++; + F32 et = timer.mEventTimer.getElapsedTimeF32(); + if (timer.mEventTimer.getStarted() && et > timer.mPeriod) { + timer.mEventTimer.reset(); + if ( timer.tick() ) + { + completed_timers.push_back( &timer ); + } + } + } + } + + if ( completed_timers.size() > 0 ) + { + for (std::list<LLEventTimer*>::iterator completed_iter = completed_timers.begin(); + completed_iter != completed_timers.end(); + completed_iter++ ) + { + delete *completed_iter; + } + } +} + + diff --git a/indra/llcommon/lleventtimer.h b/indra/llcommon/lleventtimer.h new file mode 100644 index 0000000000..5181cce52d --- /dev/null +++ b/indra/llcommon/lleventtimer.h @@ -0,0 +1,60 @@ +/** + * @file lleventtimer.h + * @brief Cross-platform objects for doing timing + * + * $LicenseInfo:firstyear=2000&license=viewergpl$ + * + * Copyright (c) 2000-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_EVENTTIMER_H +#define LL_EVENTTIMER_H + +#include "stdtypes.h" +#include "lldate.h" +#include "llinstancetracker.h" +#include "lltimer.h" + +// class for scheduling a function to be called at a given frequency (approximate, inprecise) +class LL_COMMON_API LLEventTimer : protected LLInstanceTracker<LLEventTimer> +{ +public: + LLEventTimer(F32 period); // period is the amount of time between each call to tick() in seconds + LLEventTimer(const LLDate& time); + virtual ~LLEventTimer(); + + //function to be called at the supplied frequency + // Normally return FALSE; TRUE will delete the timer after the function returns. + virtual BOOL tick() = 0; + + static void updateClass(); + +protected: + LLTimer mEventTimer; + F32 mPeriod; +}; + +#endif //LL_EVENTTIMER_H diff --git a/indra/llcommon/llfasttimer_class.cpp b/indra/llcommon/llfasttimer_class.cpp index 6d8d81e114..2e5edb1f3b 100644 --- a/indra/llcommon/llfasttimer_class.cpp +++ b/indra/llcommon/llfasttimer_class.cpp @@ -218,9 +218,10 @@ LLFastTimer::DeclareTimer::DeclareTimer(const std::string& name) // static void LLFastTimer::DeclareTimer::updateCachedPointers() { + DeclareTimer::LLInstanceTrackerScopedGuard guard; // propagate frame state pointers to timer declarations - for (DeclareTimer::instance_iter it = DeclareTimer::beginInstances(); - it != DeclareTimer::endInstances(); + for (DeclareTimer::instance_iter it = guard.beginInstances(); + it != guard.endInstances(); ++it) { // update cached pointer @@ -371,20 +372,23 @@ void LLFastTimer::NamedTimer::buildHierarchy() if (sCurFrameIndex < 0 ) return; // set up initial tree - for (instance_iter it = NamedTimer::beginInstances(); - it != endInstances(); - ++it) { - NamedTimer& timer = *it; - if (&timer == NamedTimerFactory::instance().getRootTimer()) continue; - - // bootstrap tree construction by attaching to last timer to be on stack - // when this timer was called - if (timer.getFrameState().mLastCaller && timer.mParent == NamedTimerFactory::instance().getRootTimer()) + NamedTimer::LLInstanceTrackerScopedGuard guard; + for (instance_iter it = guard.beginInstances(); + it != guard.endInstances(); + ++it) { - timer.setParent(timer.getFrameState().mLastCaller->mTimer); - // no need to push up tree on first use, flag can be set spuriously - timer.getFrameState().mMoveUpTree = false; + NamedTimer& timer = *it; + if (&timer == NamedTimerFactory::instance().getRootTimer()) continue; + + // bootstrap tree construction by attaching to last timer to be on stack + // when this timer was called + if (timer.getFrameState().mLastCaller && timer.mParent == NamedTimerFactory::instance().getRootTimer()) + { + timer.setParent(timer.getFrameState().mLastCaller->mTimer); + // no need to push up tree on first use, flag can be set spuriously + timer.getFrameState().mMoveUpTree = false; + } } } @@ -486,18 +490,21 @@ void LLFastTimer::NamedTimer::resetFrame() F64 total_time = 0; LLSD sd; - for (NamedTimer::instance_iter it = NamedTimer::beginInstances(); - it != NamedTimer::endInstances(); - ++it) { - NamedTimer& timer = *it; - FrameState& info = timer.getFrameState(); - sd[timer.getName()]["Time"] = (LLSD::Real) (info.mSelfTimeCounter*iclock_freq); - sd[timer.getName()]["Calls"] = (LLSD::Integer) info.mCalls; - - // computing total time here because getting the root timer's getCountHistory - // doesn't work correctly on the first frame - total_time = total_time + info.mSelfTimeCounter * iclock_freq; + NamedTimer::LLInstanceTrackerScopedGuard guard; + for (NamedTimer::instance_iter it = guard.beginInstances(); + it != guard.endInstances(); + ++it) + { + NamedTimer& timer = *it; + FrameState& info = timer.getFrameState(); + sd[timer.getName()]["Time"] = (LLSD::Real) (info.mSelfTimeCounter*iclock_freq); + sd[timer.getName()]["Calls"] = (LLSD::Integer) info.mCalls; + + // computing total time here because getting the root timer's getCountHistory + // doesn't work correctly on the first frame + total_time = total_time + info.mSelfTimeCounter * iclock_freq; + } } sd["Total"]["Time"] = (LLSD::Real) total_time; @@ -531,21 +538,24 @@ void LLFastTimer::NamedTimer::resetFrame() DeclareTimer::updateCachedPointers(); // reset for next frame - for (NamedTimer::instance_iter it = NamedTimer::beginInstances(); - it != NamedTimer::endInstances(); - ++it) { - NamedTimer& timer = *it; - - FrameState& info = timer.getFrameState(); - info.mSelfTimeCounter = 0; - info.mCalls = 0; - info.mLastCaller = NULL; - info.mMoveUpTree = false; - // update parent pointer in timer state struct - if (timer.mParent) + NamedTimer::LLInstanceTrackerScopedGuard guard; + for (NamedTimer::instance_iter it = guard.beginInstances(); + it != guard.endInstances(); + ++it) { - info.mParent = &timer.mParent->getFrameState(); + NamedTimer& timer = *it; + + FrameState& info = timer.getFrameState(); + info.mSelfTimeCounter = 0; + info.mCalls = 0; + info.mLastCaller = NULL; + info.mMoveUpTree = false; + // update parent pointer in timer state struct + if (timer.mParent) + { + info.mParent = &timer.mParent->getFrameState(); + } } } @@ -575,20 +585,23 @@ void LLFastTimer::NamedTimer::reset() } // reset all history - for (NamedTimer::instance_iter it = NamedTimer::beginInstances(); - it != NamedTimer::endInstances(); - ++it) { - NamedTimer& timer = *it; - if (&timer != NamedTimerFactory::instance().getRootTimer()) + NamedTimer::LLInstanceTrackerScopedGuard guard; + for (NamedTimer::instance_iter it = guard.beginInstances(); + it != guard.endInstances(); + ++it) { - timer.setParent(NamedTimerFactory::instance().getRootTimer()); + NamedTimer& timer = *it; + if (&timer != NamedTimerFactory::instance().getRootTimer()) + { + timer.setParent(NamedTimerFactory::instance().getRootTimer()); + } + + timer.mCountAverage = 0; + timer.mCallAverage = 0; + memset(timer.mCountHistory, 0, sizeof(U32) * HISTORY_NUM); + memset(timer.mCallHistory, 0, sizeof(U32) * HISTORY_NUM); } - - timer.mCountAverage = 0; - timer.mCallAverage = 0; - memset(timer.mCountHistory, 0, sizeof(U32) * HISTORY_NUM); - memset(timer.mCallHistory, 0, sizeof(U32) * HISTORY_NUM); } sLastFrameIndex = 0; diff --git a/indra/llcommon/llinstancetracker.cpp b/indra/llcommon/llinstancetracker.cpp new file mode 100644 index 0000000000..c962cb5be1 --- /dev/null +++ b/indra/llcommon/llinstancetracker.cpp @@ -0,0 +1,20 @@ +/** + * @file lllinstancetracker.cpp + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * Copyright (c) 2009, Linden Research, Inc. + * $/LicenseInfo$ + */ + +// Precompiled header +#include "linden_common.h" +// associated header +#include "llinstancetracker.h" +// STL headers +// std headers +// external library headers +// other Linden headers + +// llinstancetracker.h is presently header-only. This file exists only because our CMake +// test macro ADD_BUILD_TEST requires it. +int dummy = 0; diff --git a/indra/llcommon/llinstancetracker.h b/indra/llcommon/llinstancetracker.h index 11fe523651..9df7998273 100644 --- a/indra/llcommon/llinstancetracker.h +++ b/indra/llcommon/llinstancetracker.h @@ -98,7 +98,10 @@ private: mKey = key; getMap_()[key] = static_cast<T*>(this); } - void remove_() { getMap_().erase(mKey); } + void remove_() + { + getMap_().erase(mKey); + } static InstanceMap& getMap_() { @@ -129,31 +132,65 @@ public: /// for completeness of analogy with the generic implementation static T* getInstance(T* k) { return k; } - static key_iter beginKeys() { return getSet_().begin(); } - static key_iter endKeys() { return getSet_().end(); } - static instance_iter beginInstances() { return instance_iter(getSet_().begin()); } - static instance_iter endInstances() { return instance_iter(getSet_().end()); } static S32 instanceCount() { return getSet_().size(); } + // Instantiate this to get access to iterators for this type. It's a 'guard' in the sense + // that it treats deletes of this type as errors as long as there is an instance of + // this class alive in scope somewhere (i.e. deleting while iterating is bad). + class LLInstanceTrackerScopedGuard + { + public: + LLInstanceTrackerScopedGuard() + { + ++sIterationNestDepth; + } + + ~LLInstanceTrackerScopedGuard() + { + --sIterationNestDepth; + } + + static instance_iter beginInstances() { return instance_iter(getSet_().begin()); } + static instance_iter endInstances() { return instance_iter(getSet_().end()); } + static key_iter beginKeys() { return getSet_().begin(); } + static key_iter endKeys() { return getSet_().end(); } + }; + protected: - LLInstanceTracker() { getSet_().insert(static_cast<T*>(this)); } - virtual ~LLInstanceTracker() { getSet_().erase(static_cast<T*>(this)); } + LLInstanceTracker() + { + // it's safe but unpredictable to create instances of this type while all instances are being iterated over. I hate unpredictable. This assert will probably be turned on early in the next development cycle. + //llassert(sIterationNestDepth == 0); + getSet_().insert(static_cast<T*>(this)); + } + virtual ~LLInstanceTracker() + { + // it's unsafe to delete instances of this type while all instances are being iterated over. + llassert(sIterationNestDepth == 0); + getSet_().erase(static_cast<T*>(this)); + } - LLInstanceTracker(const LLInstanceTracker& other) { getSet_().insert(static_cast<T*>(this)); } + LLInstanceTracker(const LLInstanceTracker& other) + { + //llassert(sIterationNestDepth == 0); + getSet_().insert(static_cast<T*>(this)); + } - static InstanceSet& getSet_() // called after getReady() but before go() - { - if (! sInstances) - { - sInstances = new InstanceSet; - } - return *sInstances; - } + static InstanceSet& getSet_() + { + if (! sInstances) + { + sInstances = new InstanceSet; + } + return *sInstances; + } static InstanceSet* sInstances; + static S32 sIterationNestDepth; }; template <typename T, typename KEY> typename LLInstanceTracker<T, KEY>::InstanceMap* LLInstanceTracker<T, KEY>::sInstances = NULL; template <typename T> typename LLInstanceTracker<T, T*>::InstanceSet* LLInstanceTracker<T, T*>::sInstances = NULL; +template <typename T> S32 LLInstanceTracker<T, T*>::sIterationNestDepth = 0; #endif diff --git a/indra/llcommon/lllivefile.cpp b/indra/llcommon/lllivefile.cpp index effda6c49c..5ca90d82ba 100644 --- a/indra/llcommon/lllivefile.cpp +++ b/indra/llcommon/lllivefile.cpp @@ -33,7 +33,7 @@ #include "lllivefile.h" #include "llframetimer.h" -#include "lltimer.h" +#include "lleventtimer.h" const F32 DEFAULT_CONFIG_FILE_REFRESH = 5.0f; diff --git a/indra/llcommon/lltimer.cpp b/indra/llcommon/lltimer.cpp index ef3e8dbc94..25b768079b 100644 --- a/indra/llcommon/lltimer.cpp +++ b/indra/llcommon/lltimer.cpp @@ -555,54 +555,3 @@ void secondsToTimecodeString(F32 current_time, std::string& tcstring) } -////////////////////////////////////////////////////////////////////////////// -// -// LLEventTimer Implementation -// -////////////////////////////////////////////////////////////////////////////// - -LLEventTimer::LLEventTimer(F32 period) -: mEventTimer() -{ - mPeriod = period; -} - -LLEventTimer::LLEventTimer(const LLDate& time) -: mEventTimer() -{ - mPeriod = (F32)(time.secondsSinceEpoch() - LLDate::now().secondsSinceEpoch()); -} - - -LLEventTimer::~LLEventTimer() -{ -} - -void LLEventTimer::updateClass() -{ - std::list<LLEventTimer*> completed_timers; - for (instance_iter iter = beginInstances(); iter != endInstances(); ) - { - LLEventTimer& timer = *iter++; - F32 et = timer.mEventTimer.getElapsedTimeF32(); - if (timer.mEventTimer.getStarted() && et > timer.mPeriod) { - timer.mEventTimer.reset(); - if ( timer.tick() ) - { - completed_timers.push_back( &timer ); - } - } - } - - if ( completed_timers.size() > 0 ) - { - for (std::list<LLEventTimer*>::iterator completed_iter = completed_timers.begin(); - completed_iter != completed_timers.end(); - completed_iter++ ) - { - delete *completed_iter; - } - } -} - - diff --git a/indra/llcommon/lltimer.h b/indra/llcommon/lltimer.h index d009c0f5f7..baba95bfa1 100644 --- a/indra/llcommon/lltimer.h +++ b/indra/llcommon/lltimer.h @@ -39,8 +39,6 @@ #include <limits.h> #include "stdtypes.h" -#include "lldate.h" -#include "llinstancetracker.h" #include <string> #include <list> @@ -171,25 +169,6 @@ LL_COMMON_API struct tm* utc_to_pacific_time(time_t utc_time, BOOL pacific_dayli LL_COMMON_API void microsecondsToTimecodeString(U64 current_time, std::string& tcstring); LL_COMMON_API void secondsToTimecodeString(F32 current_time, std::string& tcstring); -// class for scheduling a function to be called at a given frequency (approximate, inprecise) -class LL_COMMON_API LLEventTimer : protected LLInstanceTracker<LLEventTimer> -{ -public: - LLEventTimer(F32 period); // period is the amount of time between each call to tick() in seconds - LLEventTimer(const LLDate& time); - virtual ~LLEventTimer(); - - //function to be called at the supplied frequency - // Normally return FALSE; TRUE will delete the timer after the function returns. - virtual BOOL tick() = 0; - - static void updateClass(); - -protected: - LLTimer mEventTimer; - F32 mPeriod; -}; - U64 LL_COMMON_API totalTime(); // Returns current system time in microseconds #endif diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp index 7415f2d33b..4bb3ec2922 100644 --- a/indra/llcommon/tests/llinstancetracker_test.cpp +++ b/indra/llcommon/tests/llinstancetracker_test.cpp @@ -138,23 +138,29 @@ namespace tut keys.insert(&one); keys.insert(&two); keys.insert(&three); - for (Unkeyed::key_iter ki(Unkeyed::beginKeys()), kend(Unkeyed::endKeys()); - ki != kend; ++ki) - { - ensure_equals("spurious key", keys.erase(*ki), 1); - } + { + Unkeyed::LLInstanceTrackerScopedGuard guard; + for (Unkeyed::key_iter ki(guard.beginKeys()), kend(guard.endKeys()); + ki != kend; ++ki) + { + ensure_equals("spurious key", keys.erase(*ki), 1); + } + } ensure_equals("unreported key", keys.size(), 0); KeySet instances; instances.insert(&one); instances.insert(&two); instances.insert(&three); - for (Unkeyed::instance_iter ii(Unkeyed::beginInstances()), iend(Unkeyed::endInstances()); - ii != iend; ++ii) - { - Unkeyed& ref = *ii; - ensure_equals("spurious instance", instances.erase(&ref), 1); - } + { + Unkeyed::LLInstanceTrackerScopedGuard guard; + for (Unkeyed::instance_iter ii(guard.beginInstances()), iend(guard.endInstances()); + ii != iend; ++ii) + { + Unkeyed& ref = *ii; + ensure_equals("spurious instance", instances.erase(&ref), 1); + } + } ensure_equals("unreported instance", instances.size(), 0); } } // namespace tut diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index e02be6c8c1..5649b4cab7 100644 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -676,9 +676,6 @@ void LLImageRaw::copy(LLImageRaw* src) LLImageRaw* dst = this; // Just for clarity. - llassert( (3 == src->getComponents()) || (4 == src->getComponents()) ); - llassert( (3 == dst->getComponents()) || (4 == dst->getComponents()) ); - if( (src->getWidth() == dst->getWidth()) && (src->getHeight() == dst->getHeight()) ) { // No scaling needed diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index df4c618ac1..192c6157a8 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -3822,6 +3822,7 @@ BOOL LLVolume::cleanupTriangleData( const S32 num_input_vertices, // Generate the vertex mapping and the list of vertices without // duplicates. This will crash if there are no vertices. + llassert(num_input_vertices > 0); // check for no vertices! S32 *vertex_mapping = new S32[num_input_vertices]; LLVector3 *new_vertices = new LLVector3[num_input_vertices]; LLVertexIndexPair *prev_pairp = NULL; diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp index 91c796a9e6..6a2449cf4b 100644 --- a/indra/llplugin/llpluginclassmedia.cpp +++ b/indra/llplugin/llpluginclassmedia.cpp @@ -471,7 +471,7 @@ void LLPluginClassMedia::mouseEvent(EMouseEventType type, int button, int x, int sendMessage(message); } -bool LLPluginClassMedia::keyEvent(EKeyEventType type, int key_code, MASK modifiers) +bool LLPluginClassMedia::keyEvent(EKeyEventType type, int key_code, MASK modifiers, LLSD native_key_data) { bool result = true; @@ -528,6 +528,7 @@ bool LLPluginClassMedia::keyEvent(EKeyEventType type, int key_code, MASK modifie message.setValueS32("key", key_code); message.setValue("modifiers", translateModifiers(modifiers)); + message.setValueLLSD("native_key_data", native_key_data); sendMessage(message); } @@ -546,12 +547,13 @@ void LLPluginClassMedia::scrollEvent(int x, int y, MASK modifiers) sendMessage(message); } -bool LLPluginClassMedia::textInput(const std::string &text, MASK modifiers) +bool LLPluginClassMedia::textInput(const std::string &text, MASK modifiers, LLSD native_key_data) { LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "text_event"); message.setValue("text", text); message.setValue("modifiers", translateModifiers(modifiers)); + message.setValueLLSD("native_key_data", native_key_data); sendMessage(message); @@ -682,13 +684,13 @@ LLPluginClassMedia::ETargetType getTargetTypeFromLLQtWebkit(int target_type) // so that we don't expose the llqtwebkit header in viewer code switch (target_type) { - case LinkTargetType::LTT_TARGET_NONE: + case LLQtWebKit::LTT_TARGET_NONE: return LLPluginClassMedia::TARGET_NONE; - case LinkTargetType::LTT_TARGET_BLANK: + case LLQtWebKit::LTT_TARGET_BLANK: return LLPluginClassMedia::TARGET_BLANK; - case LinkTargetType::LTT_TARGET_EXTERNAL: + case LLQtWebKit::LTT_TARGET_EXTERNAL: return LLPluginClassMedia::TARGET_EXTERNAL; default: diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h index ebb9099576..58e91fa0b4 100644 --- a/indra/llplugin/llpluginclassmedia.h +++ b/indra/llplugin/llpluginclassmedia.h @@ -114,12 +114,12 @@ public: KEY_EVENT_REPEAT }EKeyEventType; - bool keyEvent(EKeyEventType type, int key_code, MASK modifiers); + bool keyEvent(EKeyEventType type, int key_code, MASK modifiers, LLSD native_key_data); void scrollEvent(int x, int y, MASK modifiers); // Text may be unicode (utf8 encoded) - bool textInput(const std::string &text, MASK modifiers); + bool textInput(const std::string &text, MASK modifiers, LLSD native_key_data); void loadURI(const std::string &uri); diff --git a/indra/llplugin/llpluginmessagepipe.cpp b/indra/llplugin/llpluginmessagepipe.cpp index cc193fca42..1d7ddc5592 100644 --- a/indra/llplugin/llpluginmessagepipe.cpp +++ b/indra/llplugin/llpluginmessagepipe.cpp @@ -304,7 +304,14 @@ void LLPluginMessagePipe::processInput(void) while((delim = mInput.find(MESSAGE_DELIMITER, start)) != std::string::npos) { // Let the owner process this message - mOwner->receiveMessageRaw(mInput.substr(start, delim - start)); + if (mOwner) + { + mOwner->receiveMessageRaw(mInput.substr(start, delim - start)); + } + else + { + LL_WARNS("Plugin") << "!mOwner" << LL_ENDL; + } start = delim + 1; } diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp index 0f3254d78d..52b5a319ec 100644 --- a/indra/llplugin/llpluginprocesschild.cpp +++ b/indra/llplugin/llpluginprocesschild.cpp @@ -278,14 +278,21 @@ bool LLPluginProcessChild::isDone(void) void LLPluginProcessChild::sendMessageToPlugin(const LLPluginMessage &message) { - std::string buffer = message.generate(); - - LL_DEBUGS("Plugin") << "Sending to plugin: " << buffer << LL_ENDL; - LLTimer elapsed; - - mInstance->sendMessage(buffer); - - mCPUElapsed += elapsed.getElapsedTimeF64(); + if (mInstance) + { + std::string buffer = message.generate(); + + LL_DEBUGS("Plugin") << "Sending to plugin: " << buffer << LL_ENDL; + LLTimer elapsed; + + mInstance->sendMessage(buffer); + + mCPUElapsed += elapsed.getElapsedTimeF64(); + } + else + { + LL_WARNS("Plugin") << "mInstance == NULL" << LL_ENDL; + } } void LLPluginProcessChild::sendMessageToParent(const LLPluginMessage &message) diff --git a/indra/llprimitive/tests/llmediaentry_test.cpp b/indra/llprimitive/tests/llmediaentry_test.cpp index 277e370ca4..88cd96ebe4 100644 --- a/indra/llprimitive/tests/llmediaentry_test.cpp +++ b/indra/llprimitive/tests/llmediaentry_test.cpp @@ -157,14 +157,9 @@ namespace namespace tut { - bool llsd_equals(const LLSD& a, const LLSD& b) { - // cheesy, brute force, but it works - return std::string(ll_pretty_print_sd(a)) == std::string(ll_pretty_print_sd(b)); - } - void ensure_llsd_equals(const std::string& msg, const LLSD& expected, const LLSD& actual) { - if (!tut::llsd_equals(expected, actual)) + if (!llsd_equals(expected, actual)) { std::string message = msg; message += ": actual: "; diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp index 59e7d890f4..22fad792da 100644 --- a/indra/llrender/llfontfreetype.cpp +++ b/indra/llrender/llfontfreetype.cpp @@ -504,8 +504,13 @@ void LLFontFreetype::resetBitmapCache() mCharGlyphInfoMap.clear(); mFontBitmapCachep->reset(); - // Add the empty glyph - addGlyphFromFont(this, 0, 0); + // Adding default glyph is skipped for fallback fonts here as well as in loadFace(). + // This if was added as fix for EXT-4971. + if(!mIsFallback) + { + // Add the empty glyph + addGlyphFromFont(this, 0, 0); + } } void LLFontFreetype::destroyGL() diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index 1de1d6ded4..b6a6b448ee 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -601,14 +601,20 @@ S32 LLFontGL::firstDrawableChar(const llwchar* wchars, F32 max_pixels, S32 text_ { llwchar wch = wchars[i]; - F32 char_width = mFontFreetype->getXAdvance(wch); + const LLFontGlyphInfo* fgi= mFontFreetype->getGlyphInfo(wch); + + // last character uses character width, since the whole character needs to be visible + // other characters just use advance + F32 width = (i == start) + ? (F32)(fgi->mWidth + fgi->mXBearing) // use actual width for last character + : fgi->mXAdvance; // use advance for all other characters - if( scaled_max_pixels < (total_width + char_width) ) + if( scaled_max_pixels < (total_width + width) ) { break; } - total_width += char_width; + total_width += width; drawable_chars++; if( max_chars >= 0 && drawable_chars >= max_chars ) @@ -626,7 +632,17 @@ S32 LLFontGL::firstDrawableChar(const llwchar* wchars, F32 max_pixels, S32 text_ total_width = llround(total_width); } - return start_pos - drawable_chars; + if (drawable_chars == 0) + { + return start_pos; // just draw last character + } + else + { + // if only 1 character is drawable, we want to return start_pos as the first character to draw + // if 2 are drawable, return start_pos and character before start_pos, etc. + return start_pos + 1 - drawable_chars; + } + } S32 LLFontGL::charFromPixelOffset(const llwchar* wchars, S32 begin_offset, F32 target_x, F32 max_pixels, S32 max_chars, BOOL round) const diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt index ce068618e2..853f6f173d 100644 --- a/indra/llui/CMakeLists.txt +++ b/indra/llui/CMakeLists.txt @@ -90,6 +90,7 @@ set(llui_SOURCE_FILES lltextbox.cpp lltexteditor.cpp lltextparser.cpp + lltextvalidate.cpp lltransutil.cpp lltoggleablemenu.cpp lltooltip.cpp @@ -182,6 +183,7 @@ set(llui_HEADER_FILES lltextbox.h lltexteditor.h lltextparser.h + lltextvalidate.h lltoggleablemenu.h lltooltip.h lltransutil.h diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index 4944ed4fe7..1d4dc35cee 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -81,10 +81,9 @@ LLButton::Params::Params() image_pressed_selected("image_pressed_selected"), image_overlay("image_overlay"), image_overlay_alignment("image_overlay_alignment", std::string("center")), - image_left_pad("image_left_pad"), - image_right_pad("image_right_pad"), image_top_pad("image_top_pad"), image_bottom_pad("image_bottom_pad"), + imgoverlay_label_space("imgoverlay_label_space", 1), label_color("label_color"), label_color_selected("label_color_selected"), // requires is_toggle true label_color_disabled("label_color_disabled"), @@ -144,10 +143,9 @@ LLButton::LLButton(const LLButton::Params& p) mImageOverlay(p.image_overlay()), mImageOverlayColor(p.image_overlay_color()), mImageOverlayAlignment(LLFontGL::hAlignFromName(p.image_overlay_alignment)), - mImageOverlayLeftPad(p.image_left_pad), - mImageOverlayRightPad(p.image_right_pad), mImageOverlayTopPad(p.image_top_pad), mImageOverlayBottomPad(p.image_bottom_pad), + mImgOverlayLabelSpace(p.imgoverlay_label_space), mIsToggle(p.is_toggle), mScaleImage(p.scale_image), mDropShadowedText(p.label_shadow), @@ -771,12 +769,7 @@ void LLButton::draw() center_x++; } - S32 text_width_delta = overlay_width + 1; - // if image paddings set, they should participate in scaling process - S32 image_size_delta = mImageOverlayTopPad + mImageOverlayBottomPad; - overlay_width = overlay_width - image_size_delta; - overlay_height = overlay_height - image_size_delta; - + center_y += (mImageOverlayBottomPad - mImageOverlayTopPad); // fade out overlay images on disabled buttons LLColor4 overlay_color = mImageOverlayColor.get(); if (!enabled) @@ -788,10 +781,9 @@ void LLButton::draw() switch(mImageOverlayAlignment) { case LLFontGL::LEFT: - text_left += overlay_width + mImageOverlayRightPad + 1; - text_width -= text_width_delta; + text_left += overlay_width + mImgOverlayLabelSpace; mImageOverlay->draw( - mLeftHPad, + mLeftHPad, center_y - (overlay_height / 2), overlay_width, overlay_height, @@ -806,10 +798,9 @@ void LLButton::draw() overlay_color); break; case LLFontGL::RIGHT: - text_right -= overlay_width + mImageOverlayLeftPad+ 1; - text_width -= text_width_delta; + text_right -= overlay_width + mImgOverlayLabelSpace; mImageOverlay->draw( - getRect().getWidth() - mRightHPad - overlay_width, + getRect().getWidth() - mRightHPad - overlay_width, center_y - (overlay_height / 2), overlay_width, overlay_height, diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index 8e5f19602f..8f35db1007 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -107,11 +107,14 @@ public: Optional<S32> pad_bottom; // under text label //image overlay paddings - Optional<S32> image_left_pad; - Optional<S32> image_right_pad; Optional<S32> image_top_pad; Optional<S32> image_bottom_pad; + /** + * Space between image_overlay and label + */ + Optional<S32> imgoverlay_label_space; + // callbacks Optional<CommitCallbackParam> click_callback, // alias -> commit_callback mouse_down_callback, @@ -192,10 +195,6 @@ public: void setLeftHPad( S32 pad ) { mLeftHPad = pad; } void setRightHPad( S32 pad ) { mRightHPad = pad; } - void setImageOverlayLeftPad( S32 pad ) { mImageOverlayLeftPad = pad; } - S32 getImageOverlayLeftPad() const { return mImageOverlayLeftPad; } - void setImageOverlayRightPad( S32 pad ) { mImageOverlayRightPad = pad; } - S32 getImageOverlayRightPad() const { return mImageOverlayRightPad; } void setImageOverlayTopPad( S32 pad ) { mImageOverlayTopPad = pad; } S32 getImageOverlayTopPad() const { return mImageOverlayTopPad; } void setImageOverlayBottomPad( S32 pad ) { mImageOverlayBottomPad = pad; } @@ -328,11 +327,14 @@ private: S32 mRightHPad; S32 mBottomVPad; // under text label - S32 mImageOverlayLeftPad; - S32 mImageOverlayRightPad; S32 mImageOverlayTopPad; S32 mImageOverlayBottomPad; + /* + * Space between image_overlay and label + */ + S32 mImgOverlayLabelSpace; + F32 mHoverGlowStrength; F32 mCurGlowStrength; diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp index 0237c80efa..a4f69e7ac1 100644 --- a/indra/llui/llconsole.cpp +++ b/indra/llui/llconsole.cpp @@ -244,23 +244,6 @@ void LLConsole::draw() } } -void LLConsole::addLine(const std::string& utf8line) -{ - LLWString wline = utf8str_to_wstring(utf8line); - addLine(wline, 0.f, LLColor4(1.f, 1.f, 1.f, 1.f)); -} - -void LLConsole::addLine(const LLWString& wline) -{ - addLine(wline, 0.f, LLColor4(1.f, 1.f, 1.f, 1.f)); -} - -void LLConsole::addLine(const std::string& utf8line, F32 size, const LLColor4 &color) -{ - LLWString wline = utf8str_to_wstring(utf8line); - addLine(wline, size, color); -} - //Generate highlight color segments for this paragraph. Pass in default color of paragraph. void LLConsole::Paragraph::makeParagraphColorSegments (const LLColor4 &color) { @@ -383,21 +366,45 @@ void LLConsole::Paragraph::updateLines(F32 screen_width, const LLFontGL* font, b //Pass in the string and the default color for this block of text. LLConsole::Paragraph::Paragraph (LLWString str, const LLColor4 &color, F32 add_time, const LLFontGL* font, F32 screen_width) - : mParagraphText(str), mAddTime(add_time), mMaxWidth(-1) +: mParagraphText(str), mAddTime(add_time), mMaxWidth(-1) { makeParagraphColorSegments(color); updateLines( screen_width, font ); } -void LLConsole::addLine(const LLWString& wline, F32 size, const LLColor4 &color) +// called once per frame regardless of console visibility +// static +void LLConsole::updateClass() { - Paragraph paragraph(wline, color, mTimer.getElapsedTimeF32(), mFont, (F32)getRect().getWidth() ); - - mParagraphs.push_back ( paragraph ); + LLInstanceTrackerScopedGuard guard; + + for (instance_iter it = guard.beginInstances(); it != guard.endInstances(); ++it) + { + it->update(); + } +} + +void LLConsole::update() +{ + { + LLMutexLock lock(&mMutex); + + while (!mLines.empty()) + { + mParagraphs.push_back( + Paragraph( mLines.front(), + LLColor4::white, + mTimer.getElapsedTimeF32(), + mFont, + (F32)getRect().getWidth())); + mLines.pop_front(); + } + } // remove old paragraphs which can't possibly be visible any more. ::draw() will do something similar but more conservative - we do this here because ::draw() isn't guaranteed to ever be called! (i.e. the console isn't visible) - while ((S32)mParagraphs.size() > llmax((S32)0, (S32)(mMaxLines))) - { - mParagraphs.pop_front(); - } + while ((S32)mParagraphs.size() > llmax((S32)0, (S32)(mMaxLines))) + { + mParagraphs.pop_front(); + } } + diff --git a/indra/llui/llconsole.h b/indra/llui/llconsole.h index 4719950f28..f38e2bc9c2 100644 --- a/indra/llui/llconsole.h +++ b/indra/llui/llconsole.h @@ -40,7 +40,7 @@ class LLSD; -class LLConsole : public LLFixedBuffer, public LLUICtrl +class LLConsole : public LLFixedBuffer, public LLUICtrl, public LLInstanceTracker<LLConsole> { public: typedef enum e_font_size @@ -68,6 +68,9 @@ protected: friend class LLUICtrlFactory; public: + // call once per frame to pull data out of LLFixedBuffer + static void updateClass(); + //A paragraph color segment defines the color of text in a line //of text that was received for console display. It has no //notion of line wraps, screen position, or the text it contains. @@ -139,14 +142,12 @@ public: // -1 = monospace, 0 means small, font size = 1 means big void setFontSize(S32 size_index); - void addLine(const std::string& utf8line, F32 size, const LLColor4 &color); - void addLine(const LLWString& wline, F32 size, const LLColor4 &color); // Overrides /*virtual*/ void draw(); - /*virtual*/ void addLine(const std::string& utf8line); - /*virtual*/ void addLine(const LLWString& line); private: + void update(); + F32 mLinePersistTime; // Age at which to stop drawing. F32 mFadeTime; // Age at which to start fading const LLFontGL* mFont; diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index 92993650a7..2481249f91 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -42,8 +42,6 @@ static const LLDefaultChildRegistry::Register<LLFlatListView> flat_list_view("fl const LLSD SELECTED_EVENT = LLSD().with("selected", true); const LLSD UNSELECTED_EVENT = LLSD().with("selected", false); -static const std::string COMMENT_TEXTBOX = "comment_text"; - //forward declaration bool llsds_are_equal(const LLSD& llsd_1, const LLSD& llsd_2); @@ -51,7 +49,8 @@ LLFlatListView::Params::Params() : item_pad("item_pad"), allow_select("allow_select"), multi_select("multi_select"), - keep_one_selected("keep_one_selected") + keep_one_selected("keep_one_selected"), + no_items_text("no_items_text") {}; void LLFlatListView::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */) @@ -295,19 +294,6 @@ void LLFlatListView::resetSelection(bool no_commit_on_deselection /*= false*/) void LLFlatListView::setNoItemsCommentText(const std::string& comment_text) { - if (NULL == mNoItemsCommentTextbox) - { - LLRect comment_rect = getRect(); - comment_rect.setOriginAndSize(0, 0, comment_rect.getWidth(), comment_rect.getHeight()); - comment_rect.stretch(-getBorderWidth()); - LLTextBox::Params text_p; - text_p.name(COMMENT_TEXTBOX); - text_p.border_visible(false); - text_p.rect(comment_rect); - text_p.follows.flags(FOLLOWS_ALL); - mNoItemsCommentTextbox = LLUICtrlFactory::create<LLTextBox>(text_p, this); - } - mNoItemsCommentTextbox->setValue(comment_text); } @@ -361,7 +347,6 @@ bool LLFlatListView::updateValue(const LLSD& old_value, const LLSD& new_value) // PROTECTED STUFF ////////////////////////////////////////////////////////////////////////// - LLFlatListView::LLFlatListView(const LLFlatListView::Params& p) : LLScrollContainer(p) , mItemComparator(NULL) @@ -398,6 +383,25 @@ LLFlatListView::LLFlatListView(const LLFlatListView::Params& p) params.bevel_style(LLViewBorder::BEVEL_IN); mSelectedItemsBorder = LLUICtrlFactory::create<LLViewBorder> (params); mItemsPanel->addChild( mSelectedItemsBorder ); + + { + // create textbox for "No Items" comment text + LLTextBox::Params text_p = p.no_items_text; + if (!text_p.rect.isProvided()) + { + LLRect comment_rect = getRect(); + comment_rect.setOriginAndSize(0, 0, comment_rect.getWidth(), comment_rect.getHeight()); + comment_rect.stretch(-getBorderWidth()); + text_p.rect(comment_rect); + } + text_p.border_visible(false); + + if (!text_p.follows.isProvided()) + { + text_p.follows.flags(FOLLOWS_ALL); + } + mNoItemsCommentTextbox = LLUICtrlFactory::create<LLTextBox>(text_p, this); + } }; // virtual @@ -861,7 +865,11 @@ void LLFlatListView::notifyParentItemsRectChanged() // take into account comment text height if exists if (mNoItemsCommentTextbox && mNoItemsCommentTextbox->getVisible()) { + // top text padding inside the textbox is included into the height comment_height = mNoItemsCommentTextbox->getTextPixelHeight(); + + // take into account a distance from parent's top border to textbox's top + comment_height += getRect().getHeight() - mNoItemsCommentTextbox->getRect().mTop; } LLRect req_rect = getItemsRect(); @@ -892,6 +900,10 @@ void LLFlatListView::setNoItemsCommentVisible(bool visible) const { if (visible) { +/* +// *NOTE: MA 2010-02-04 +// Deprecated after params of the comment text box were moved into widget (flat_list_view.xml) +// can be removed later if nothing happened. // We have to update child rect here because of issues with rect after reshaping while creating LLTextbox // It is possible to have invalid LLRect if Flat List is in LLAccordionTab LLRect comment_rect = getLocalRect(); @@ -903,6 +915,7 @@ void LLFlatListView::setNoItemsCommentVisible(bool visible) const LLViewBorder* scroll_border = getChild<LLViewBorder>("scroll border"); comment_rect.stretch(-scroll_border->getBorderWidth()); mNoItemsCommentTextbox->setRect(comment_rect); +*/ } mNoItemsCommentTextbox->setVisible(visible); } diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h index 949a731507..92cb40332e 100644 --- a/indra/llui/llflatlistview.h +++ b/indra/llui/llflatlistview.h @@ -35,8 +35,8 @@ #include "llpanel.h" #include "llscrollcontainer.h" +#include "lltextbox.h" -class LLTextBox; /** * LLFlatListView represents a flat list ui control that operates on items in a form of LLPanel's. @@ -108,6 +108,9 @@ public: /** padding between items */ Optional<U32> item_pad; + /** textbox with info message when list is empty*/ + Optional<LLTextBox::Params> no_items_text; + Params(); }; diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 1aaba88c49..dc79550eb4 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -816,7 +816,10 @@ void LLLayoutStack::calcMinExtents() //static void LLLayoutStack::updateClass() { - for (LLLayoutStack::instance_iter it = beginInstances(); it != endInstances(); ++it) + LLInstanceTrackerScopedGuard guard; + for (LLLayoutStack::instance_iter it = guard.beginInstances(); + it != guard.endInstances(); + ++it) { it->updateLayout(); } diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index eb2b4f7705..483a394bbd 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -55,6 +55,7 @@ #include "llui.h" #include "lluictrlfactory.h" #include "llclipboard.h" +#include "llmenugl.h" // // Imported globals @@ -82,19 +83,6 @@ template class LLLineEditor* LLView::getChild<class LLLineEditor>( // Member functions // -void LLLineEditor::PrevalidateNamedFuncs::declareValues() -{ - declare("ascii", LLLineEditor::prevalidateASCII); - declare("float", LLLineEditor::prevalidateFloat); - declare("int", LLLineEditor::prevalidateInt); - declare("positive_s32", LLLineEditor::prevalidatePositiveS32); - declare("non_negative_s32", LLLineEditor::prevalidateNonNegativeS32); - declare("alpha_num", LLLineEditor::prevalidateAlphaNum); - declare("alpha_num_space", LLLineEditor::prevalidateAlphaNumSpace); - declare("ascii_printable_no_pipe", LLLineEditor::prevalidateASCIIPrintableNoPipe); - declare("ascii_printable_no_space", LLLineEditor::prevalidateASCIIPrintableNoSpace); -} - LLLineEditor::Params::Params() : max_length_bytes("max_length", 254), keystroke_callback("keystroke_callback"), @@ -164,7 +152,8 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p) mTentativeFgColor(p.text_tentative_color()), mHighlightColor(p.highlight_color()), mPreeditBgColor(p.preedit_bg_color()), - mGLFont(p.font) + mGLFont(p.font), + mContextMenuHandle() { llassert( mMaxLengthBytes > 0 ); @@ -191,6 +180,12 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p) setCursor(mText.length()); setPrevalidate(p.prevalidate_callback()); + + LLContextMenu* menu = LLUICtrlFactory::instance().createFromFile<LLContextMenu> + ("menu_text_editor.xml", + LLMenuGL::sMenuContainer, + LLMenuHolderGL::child_registry_t::instance()); + setContextMenu(menu); } LLLineEditor::~LLLineEditor() @@ -422,12 +417,16 @@ void LLLineEditor::setCursor( S32 pos ) S32 old_cursor_pos = getCursor(); mCursorPos = llclamp( pos, 0, mText.length()); + // position of end of next character after cursor S32 pixels_after_scroll = findPixelNearestPos(); if( pixels_after_scroll > mTextRightEdge ) { S32 width_chars_to_left = mGLFont->getWidth(mText.getWString().c_str(), 0, mScrollHPos); S32 last_visible_char = mGLFont->maxDrawableChars(mText.getWString().c_str(), llmax(0.f, (F32)(mTextRightEdge - mTextLeftEdge + width_chars_to_left))); - S32 min_scroll = mGLFont->firstDrawableChar(mText.getWString().c_str(), (F32)(mTextRightEdge - mTextLeftEdge), mText.length(), getCursor()); + // character immediately to left of cursor should be last one visible (SCROLL_INCREMENT_ADD will scroll in more characters) + // or first character if cursor is at beginning + S32 new_last_visible_char = llmax(0, getCursor() - 1); + S32 min_scroll = mGLFont->firstDrawableChar(mText.getWString().c_str(), (F32)(mTextRightEdge - mTextLeftEdge), mText.length(), new_last_visible_char); if (old_cursor_pos == last_visible_char) { mScrollHPos = llmin(mText.length(), llmax(min_scroll, mScrollHPos + SCROLL_INCREMENT_ADD)); @@ -663,6 +662,16 @@ BOOL LLLineEditor::handleMiddleMouseDown(S32 x, S32 y, MASK mask) return TRUE; } +BOOL LLLineEditor::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ + setFocus(TRUE); + if (!LLUICtrl::handleRightMouseDown(x, y, mask)) + { + showContextMenu(x, y); + } + return TRUE; +} + BOOL LLLineEditor::handleHover(S32 x, S32 y, MASK mask) { BOOL handled = FALSE; @@ -1962,51 +1971,12 @@ void LLLineEditor::setRect(const LLRect& rect) } } -void LLLineEditor::setPrevalidate(LLLinePrevalidateFunc func) +void LLLineEditor::setPrevalidate(LLTextValidate::validate_func_t func) { mPrevalidateFunc = func; updateAllowingLanguageInput(); } -// Limits what characters can be used to [1234567890.-] with [-] only valid in the first position. -// Does NOT ensure that the string is a well-formed number--that's the job of post-validation--for -// the simple reasons that intermediate states may be invalid even if the final result is valid. -// -// static -BOOL LLLineEditor::prevalidateFloat(const LLWString &str) -{ - LLLocale locale(LLLocale::USER_LOCALE); - - BOOL success = TRUE; - LLWString trimmed = str; - LLWStringUtil::trim(trimmed); - S32 len = trimmed.length(); - if( 0 < len ) - { - // May be a comma or period, depending on the locale - llwchar decimal_point = (llwchar)LLResMgr::getInstance()->getDecimalPoint(); - - S32 i = 0; - - // First character can be a negative sign - if( '-' == trimmed[0] ) - { - i++; - } - - for( ; i < len; i++ ) - { - if( (decimal_point != trimmed[i] ) && !LLStringOps::isDigit( trimmed[i] ) ) - { - success = FALSE; - break; - } - } - } - - return success; -} - // static BOOL LLLineEditor::postvalidateFloat(const std::string &str) { @@ -2066,223 +2036,6 @@ BOOL LLLineEditor::postvalidateFloat(const std::string &str) return success; } -// Limits what characters can be used to [1234567890-] with [-] only valid in the first position. -// Does NOT ensure that the string is a well-formed number--that's the job of post-validation--for -// the simple reasons that intermediate states may be invalid even if the final result is valid. -// -// static -BOOL LLLineEditor::prevalidateInt(const LLWString &str) -{ - LLLocale locale(LLLocale::USER_LOCALE); - - BOOL success = TRUE; - LLWString trimmed = str; - LLWStringUtil::trim(trimmed); - S32 len = trimmed.length(); - if( 0 < len ) - { - S32 i = 0; - - // First character can be a negative sign - if( '-' == trimmed[0] ) - { - i++; - } - - for( ; i < len; i++ ) - { - if( !LLStringOps::isDigit( trimmed[i] ) ) - { - success = FALSE; - break; - } - } - } - - return success; -} - -// static -BOOL LLLineEditor::prevalidatePositiveS32(const LLWString &str) -{ - LLLocale locale(LLLocale::USER_LOCALE); - - LLWString trimmed = str; - LLWStringUtil::trim(trimmed); - S32 len = trimmed.length(); - BOOL success = TRUE; - if(0 < len) - { - if(('-' == trimmed[0]) || ('0' == trimmed[0])) - { - success = FALSE; - } - S32 i = 0; - while(success && (i < len)) - { - if(!LLStringOps::isDigit(trimmed[i++])) - { - success = FALSE; - } - } - } - if (success) - { - S32 val = strtol(wstring_to_utf8str(trimmed).c_str(), NULL, 10); - if (val <= 0) - { - success = FALSE; - } - } - return success; -} - -BOOL LLLineEditor::prevalidateNonNegativeS32(const LLWString &str) -{ - LLLocale locale(LLLocale::USER_LOCALE); - - LLWString trimmed = str; - LLWStringUtil::trim(trimmed); - S32 len = trimmed.length(); - BOOL success = TRUE; - if(0 < len) - { - if('-' == trimmed[0]) - { - success = FALSE; - } - S32 i = 0; - while(success && (i < len)) - { - if(!LLStringOps::isDigit(trimmed[i++])) - { - success = FALSE; - } - } - } - if (success) - { - S32 val = strtol(wstring_to_utf8str(trimmed).c_str(), NULL, 10); - if (val < 0) - { - success = FALSE; - } - } - return success; -} - -BOOL LLLineEditor::prevalidateAlphaNum(const LLWString &str) -{ - LLLocale locale(LLLocale::USER_LOCALE); - - BOOL rv = TRUE; - S32 len = str.length(); - if(len == 0) return rv; - while(len--) - { - if( !LLStringOps::isAlnum((char)str[len]) ) - { - rv = FALSE; - break; - } - } - return rv; -} - -// static -BOOL LLLineEditor::prevalidateAlphaNumSpace(const LLWString &str) -{ - LLLocale locale(LLLocale::USER_LOCALE); - - BOOL rv = TRUE; - S32 len = str.length(); - if(len == 0) return rv; - while(len--) - { - if(!(LLStringOps::isAlnum((char)str[len]) || (' ' == str[len]))) - { - rv = FALSE; - break; - } - } - return rv; -} - -// Used for most names of things stored on the server, due to old file-formats -// that used the pipe (|) for multiline text storage. Examples include -// inventory item names, parcel names, object names, etc. -// static -BOOL LLLineEditor::prevalidateASCIIPrintableNoPipe(const LLWString &str) -{ - BOOL rv = TRUE; - S32 len = str.length(); - if(len == 0) return rv; - while(len--) - { - llwchar wc = str[len]; - if (wc < 0x20 - || wc > 0x7f - || wc == '|') - { - rv = FALSE; - break; - } - if(!(wc == ' ' - || LLStringOps::isAlnum((char)wc) - || LLStringOps::isPunct((char)wc) ) ) - { - rv = FALSE; - break; - } - } - return rv; -} - - -// Used for avatar names -// static -BOOL LLLineEditor::prevalidateASCIIPrintableNoSpace(const LLWString &str) -{ - BOOL rv = TRUE; - S32 len = str.length(); - if(len == 0) return rv; - while(len--) - { - llwchar wc = str[len]; - if (wc < 0x20 - || wc > 0x7f - || LLStringOps::isSpace(wc)) - { - rv = FALSE; - break; - } - if( !(LLStringOps::isAlnum((char)str[len]) || - LLStringOps::isPunct((char)str[len]) ) ) - { - rv = FALSE; - break; - } - } - return rv; -} - - -// static -BOOL LLLineEditor::prevalidateASCII(const LLWString &str) -{ - BOOL rv = TRUE; - S32 len = str.length(); - while(len--) - { - if (str[len] < 0x20 || str[len] > 0x7f) - { - rv = FALSE; - break; - } - } - return rv; -} - void LLLineEditor::onMouseCaptureLost() { endSelection(); @@ -2560,3 +2313,25 @@ LLWString LLLineEditor::getConvertedText() const } return text; } + +void LLLineEditor::showContextMenu(S32 x, S32 y) +{ + LLContextMenu* menu = static_cast<LLContextMenu*>(mContextMenuHandle.get()); + + if (menu) + { + gEditMenuHandler = this; + + S32 screen_x, screen_y; + localPointToScreen(x, y, &screen_x, &screen_y); + menu->show(screen_x, screen_y); + } +} + +void LLLineEditor::setContextMenu(LLContextMenu* new_context_menu) +{ + if (new_context_menu) + mContextMenuHandle = new_context_menu->getHandle(); + else + mContextMenuHandle.markDead(); +} diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h index 49e9539b16..b62138426b 100644 --- a/indra/llui/lllineeditor.h +++ b/indra/llui/lllineeditor.h @@ -51,26 +51,18 @@ #include "llviewborder.h" #include "llpreeditor.h" -#include <boost/function.hpp> +#include "lltextvalidate.h" class LLFontGL; class LLLineEditorRollback; class LLButton; - -typedef boost::function<BOOL (const LLWString &wstr)> LLLinePrevalidateFunc; +class LLContextMenu; class LLLineEditor : public LLUICtrl, public LLEditMenuHandler, protected LLPreeditor { public: - struct PrevalidateNamedFuncs - : public LLInitParam::TypeValuesHelper<LLLinePrevalidateFunc, PrevalidateNamedFuncs> - - { - static void declareValues(); - }; - typedef boost::function<void (LLLineEditor* caller)> keystroke_callback_t; struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> @@ -80,7 +72,7 @@ public: Optional<keystroke_callback_t> keystroke_callback; - Optional<LLLinePrevalidateFunc, PrevalidateNamedFuncs> prevalidate_callback; + Optional<LLTextValidate::validate_func_t, LLTextValidate::ValidateTextNamedFuncs> prevalidate_callback; Optional<LLViewBorder::Params> border; @@ -113,6 +105,7 @@ protected: LLLineEditor(const Params&); friend class LLUICtrlFactory; friend class LLFloaterEditUI; + void showContextMenu(S32 x, S32 y); public: virtual ~LLLineEditor(); @@ -122,6 +115,7 @@ public: /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); /*virtual*/ BOOL handleDoubleClick(S32 x,S32 y,MASK mask); /*virtual*/ BOOL handleMiddleMouseDown(S32 x,S32 y,MASK mask); + /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask ); /*virtual*/ BOOL handleUnicodeCharHere(llwchar uni_char); /*virtual*/ void onMouseCaptureLost(); @@ -204,6 +198,8 @@ public: const LLColor4& getReadOnlyFgColor() const { return mReadOnlyFgColor.get(); } const LLColor4& getTentativeFgColor() const { return mTentativeFgColor.get(); } + const LLFontGL* getFont() const { return mGLFont; } + void setIgnoreArrowKeys(BOOL b) { mIgnoreArrowKeys = b; } void setIgnoreTab(BOOL b) { mIgnoreTab = b; } void setPassDelete(BOOL b) { mPassDelete = b; } @@ -231,17 +227,7 @@ public: void setTextPadding(S32 left, S32 right); // Prevalidation controls which keystrokes can affect the editor - void setPrevalidate( LLLinePrevalidateFunc func ); - static BOOL prevalidateFloat(const LLWString &str ); - static BOOL prevalidateInt(const LLWString &str ); - static BOOL prevalidatePositiveS32(const LLWString &str); - static BOOL prevalidateNonNegativeS32(const LLWString &str); - static BOOL prevalidateAlphaNum(const LLWString &str ); - static BOOL prevalidateAlphaNumSpace(const LLWString &str ); - static BOOL prevalidateASCIIPrintableNoPipe(const LLWString &str); - static BOOL prevalidateASCIIPrintableNoSpace(const LLWString &str); - static BOOL prevalidateASCII(const LLWString &str); - + void setPrevalidate( LLTextValidate::validate_func_t func ); static BOOL postvalidateFloat(const std::string &str); // line history support: @@ -249,7 +235,9 @@ public: void updateHistory(); // stores current line in history void setReplaceNewlinesWithSpaces(BOOL replace); - + + void setContextMenu(LLContextMenu* new_context_menu); + private: // private helper methods @@ -319,7 +307,7 @@ protected: S32 mLastSelectionStart; S32 mLastSelectionEnd; - LLLinePrevalidateFunc mPrevalidateFunc; + LLTextValidate::validate_func_t mPrevalidateFunc; LLFrameTimer mKeystrokeTimer; LLTimer mTripleClickTimer; @@ -348,6 +336,8 @@ protected: std::vector<S32> mPreeditPositions; LLPreeditor::standouts_t mPreeditStandouts; + LLHandle<LLView> mContextMenuHandle; + private: // Instances that by default point to the statics but can be overidden in XML. LLPointer<LLUIImage> mBgImage; diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 7fa9a88059..d18abbfb2f 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -3941,7 +3941,6 @@ BOOL LLContextMenu::appendContextSubMenu(LLContextMenu *menu) item = LLUICtrlFactory::create<LLContextMenuBranch>(p); LLMenuGL::sMenuContainer->addChild(item->getBranch()); - item->setFont( LLFontGL::getFontSansSerif() ); return append( item ); } diff --git a/indra/llui/llmultifloater.cpp b/indra/llui/llmultifloater.cpp index 78738c826d..33d47a3f0e 100644 --- a/indra/llui/llmultifloater.cpp +++ b/indra/llui/llmultifloater.cpp @@ -92,14 +92,6 @@ void LLMultiFloater::draw() } else { - for (S32 i = 0; i < mTabContainer->getTabCount(); i++) - { - LLFloater* floaterp = (LLFloater*)mTabContainer->getPanelByIndex(i); - if (floaterp->getShortTitle() != mTabContainer->getPanelTitle(i)) - { - mTabContainer->setPanelTitle(i, floaterp->getShortTitle()); - } - } LLFloater::draw(); } } diff --git a/indra/llui/llmultisliderctrl.cpp b/indra/llui/llmultisliderctrl.cpp index f4434a0f78..50942e55ca 100644 --- a/indra/llui/llmultisliderctrl.cpp +++ b/indra/llui/llmultisliderctrl.cpp @@ -138,7 +138,7 @@ LLMultiSliderCtrl::LLMultiSliderCtrl(const LLMultiSliderCtrl::Params& p) params.font(p.font); params.max_length_bytes(MAX_STRING_LENGTH); params.commit_callback.function(LLMultiSliderCtrl::onEditorCommit); - params.prevalidate_callback(&LLLineEditor::prevalidateFloat); + params.prevalidate_callback(&LLTextValidate::validateFloat); params.follows.flags(FOLLOWS_LEFT | FOLLOWS_BOTTOM); mEditor = LLUICtrlFactory::create<LLLineEditor> (params); mEditor->setFocusReceivedCallback( boost::bind(LLMultiSliderCtrl::onEditorGainFocus, _1, this) ); @@ -331,6 +331,10 @@ void LLMultiSliderCtrl::updateText() void LLMultiSliderCtrl::onEditorCommit( LLUICtrl* ctrl, const LLSD& userdata) { LLMultiSliderCtrl* self = dynamic_cast<LLMultiSliderCtrl*>(ctrl->getParent()); + llassert(self); + if (!self) // cast failed - wrong type! :O + return; + if (!ctrl) return; diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 7f23fe2671..7b406e090a 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -936,7 +936,7 @@ LLPanel *LLPanel::childGetVisiblePanelWithHelp() return ::childGetVisiblePanelWithHelp(this); } -void LLPanel::childSetPrevalidate(const std::string& id, BOOL (*func)(const LLWString &) ) +void LLPanel::childSetPrevalidate(const std::string& id, bool (*func)(const LLWString &) ) { LLLineEditor* child = findChild<LLLineEditor>(id); if (child) diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h index 6de83fe3a7..4e53fd7ea3 100644 --- a/indra/llui/llpanel.h +++ b/indra/llui/llpanel.h @@ -226,7 +226,7 @@ public: std::string childGetText(const std::string& id) const { return childGetValue(id).asString(); } // LLLineEditor - void childSetPrevalidate(const std::string& id, BOOL (*func)(const LLWString &) ); + void childSetPrevalidate(const std::string& id, bool (*func)(const LLWString &) ); // LLButton void childSetAction(const std::string& id, boost::function<void(void*)> function, void* value = NULL); diff --git a/indra/llui/llsliderctrl.cpp b/indra/llui/llsliderctrl.cpp index 01c274bb4e..80ee5d0984 100644 --- a/indra/llui/llsliderctrl.cpp +++ b/indra/llui/llsliderctrl.cpp @@ -141,7 +141,7 @@ LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p) line_p.rect.setIfNotProvided(text_rect); line_p.font.setIfNotProvided(p.font); line_p.commit_callback.function(&LLSliderCtrl::onEditorCommit); - line_p.prevalidate_callback(&LLLineEditor::prevalidateFloat); + line_p.prevalidate_callback(&LLTextValidate::validateFloat); mEditor = LLUICtrlFactory::create<LLLineEditor>(line_p); mEditor->setFocusReceivedCallback( boost::bind(&LLSliderCtrl::onEditorGainFocus, _1, this )); diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp index 28f3788817..491cd7b6f3 100644 --- a/indra/llui/llspinctrl.cpp +++ b/indra/llui/llspinctrl.cpp @@ -127,7 +127,7 @@ LLSpinCtrl::LLSpinCtrl(const LLSpinCtrl::Params& p) } params.max_length_bytes(MAX_STRING_LENGTH); params.commit_callback.function((boost::bind(&LLSpinCtrl::onEditorCommit, this, _2))); - params.prevalidate_callback(&LLLineEditor::prevalidateFloat); + params.prevalidate_callback(&LLTextValidate::validateFloat); params.follows.flags(FOLLOWS_LEFT | FOLLOWS_BOTTOM); mEditor = LLUICtrlFactory::create<LLLineEditor> (params); mEditor->setFocusReceivedCallback( boost::bind(&LLSpinCtrl::onEditorGainFocus, _1, this )); diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index 6be76605fd..13340e7ded 100644 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -35,7 +35,6 @@ #include "lltabcontainer.h" #include "llfocusmgr.h" -#include "llbutton.h" #include "lllocalcliprect.h" #include "llrect.h" #include "llresizehandle.h" @@ -96,6 +95,91 @@ public: //---------------------------------------------------------------------------- +//============================================================================ +/* + * @file lltabcontainer.cpp + * @brief class implements LLButton with LLIconCtrl on it + */ +class LLCustomButtonIconCtrl : public LLButton +{ +public: + struct Params + : public LLInitParam::Block<Params, LLButton::Params> + { + // LEFT, RIGHT, TOP, BOTTOM paddings of LLIconCtrl in this class has same value + Optional<S32> icon_ctrl_pad; + + Params(): + icon_ctrl_pad("icon_ctrl_pad", 1) + {} + }; + +protected: + friend class LLUICtrlFactory; + LLCustomButtonIconCtrl(const Params& p): + LLButton(p), + mIcon(NULL), + mIconAlignment(LLFontGL::HCENTER), + mIconCtrlPad(p.icon_ctrl_pad) + {} + +public: + + void updateLayout() + { + LLRect button_rect = getRect(); + LLRect icon_rect = mIcon->getRect(); + + S32 icon_size = button_rect.getHeight() - 2*mIconCtrlPad; + + switch(mIconAlignment) + { + case LLFontGL::LEFT: + icon_rect.setLeftTopAndSize(button_rect.mLeft + mIconCtrlPad, button_rect.mTop - mIconCtrlPad, + icon_size, icon_size); + setLeftHPad(icon_size + mIconCtrlPad * 2); + break; + case LLFontGL::HCENTER: + icon_rect.setLeftTopAndSize(button_rect.mRight - (button_rect.getWidth() + mIconCtrlPad - icon_size)/2, button_rect.mTop - mIconCtrlPad, + icon_size, icon_size); + setRightHPad(icon_size + mIconCtrlPad * 2); + break; + case LLFontGL::RIGHT: + icon_rect.setLeftTopAndSize(button_rect.mRight - mIconCtrlPad - icon_size, button_rect.mTop - mIconCtrlPad, + icon_size, icon_size); + setRightHPad(icon_size + mIconCtrlPad * 2); + break; + default: + break; + } + mIcon->setRect(icon_rect); + } + + void setIcon(LLIconCtrl* icon, LLFontGL::HAlign alignment = LLFontGL::LEFT) + { + if(icon) + { + if(mIcon) + { + removeChild(mIcon); + mIcon->die(); + } + mIcon = icon; + mIconAlignment = alignment; + + addChild(mIcon); + updateLayout(); + } + } + + +private: + LLIconCtrl* mIcon; + LLFontGL::HAlign mIconAlignment; + S32 mIconCtrlPad; +}; +//============================================================================ + struct LLPlaceHolderPanel : public LLPanel { // create dummy param block to register with "placeholder" nane @@ -127,7 +211,10 @@ LLTabContainer::Params::Params() tab_padding_right("tab_padding_right"), first_tab("first_tab"), middle_tab("middle_tab"), - last_tab("last_tab") + last_tab("last_tab"), + use_custom_icon_ctrl("use_custom_icon_ctrl", false), + tab_icon_ctrl_pad("tab_icon_ctrl_pad", 0), + use_ellipses("use_ellipses") { name(std::string("tab_container")); mouse_opaque = false; @@ -162,7 +249,10 @@ LLTabContainer::LLTabContainer(const LLTabContainer::Params& p) mFont(p.font), mFirstTabParams(p.first_tab), mMiddleTabParams(p.middle_tab), - mLastTabParams(p.last_tab) + mLastTabParams(p.last_tab), + mCustomIconCtrlUsed(p.use_custom_icon_ctrl), + mTabIconCtrlPad(p.tab_icon_ctrl_pad), + mUseTabEllipses(p.use_ellipses) { static LLUICachedControl<S32> tabcntr_vert_tab_min_width ("UITabCntrVertTabMinWidth", 0); @@ -905,6 +995,11 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel) LLTextBox* textbox = NULL; LLButton* btn = NULL; + LLCustomButtonIconCtrl::Params custom_btn_params; + { + custom_btn_params.icon_ctrl_pad(mTabIconCtrlPad); + } + LLButton::Params normal_btn_params; if (placeholder) { @@ -924,7 +1019,9 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel) { if (mIsVertical) { - LLButton::Params p; + LLButton::Params& p = (mCustomIconCtrlUsed)? + custom_btn_params:normal_btn_params; + p.name(std::string("vert tab button")); p.rect(btn_rect); p.follows.flags(FOLLOWS_TOP | FOLLOWS_LEFT); @@ -942,11 +1039,22 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel) { p.pad_left(indent); } - btn = LLUICtrlFactory::create<LLButton>(p); + + + if(mCustomIconCtrlUsed) + { + btn = LLUICtrlFactory::create<LLCustomButtonIconCtrl>(custom_btn_params); + + } + else + { + btn = LLUICtrlFactory::create<LLButton>(p); + } } else { - LLButton::Params p; + LLButton::Params& p = (mCustomIconCtrlUsed)? + custom_btn_params:normal_btn_params; p.name(std::string(child->getName()) + " tab"); p.rect(btn_rect); p.click_callback.function(boost::bind(&LLTabContainer::onTabBtn, this, _2, child)); @@ -980,7 +1088,14 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel) p.follows.flags = p.follows.flags() | FOLLOWS_BOTTOM; } -++ btn = LLUICtrlFactory::create<LLButton>(p); + if(mCustomIconCtrlUsed) + { + btn = LLUICtrlFactory::create<LLCustomButtonIconCtrl>(custom_btn_params); + } + else + { + btn = LLUICtrlFactory::create<LLButton>(p); + } } } @@ -1373,8 +1488,8 @@ BOOL LLTabContainer::setTab(S32 which) { LLTabTuple* tuple = *iter; BOOL is_selected = ( tuple == selected_tuple ); - tuple->mButton->setUseEllipses(TRUE); - tuple->mButton->setHAlign(LLFontGL::LEFT); + tuple->mButton->setUseEllipses(mUseTabEllipses); + tuple->mButton->setHAlign(mFontHalign); tuple->mTabPanel->setVisible( is_selected ); // tuple->mTabPanel->setFocus(is_selected); // not clear that we want to do this here. tuple->mButton->setToggleState( is_selected ); @@ -1484,7 +1599,7 @@ void LLTabContainer::setTabImage(LLPanel* child, std::string image_name, const L if( tuple ) { tuple->mButton->setImageOverlay(image_name, LLFontGL::LEFT, color); - reshape_tuple(tuple); + reshapeTuple(tuple); } } @@ -1494,25 +1609,31 @@ void LLTabContainer::setTabImage(LLPanel* child, const LLUUID& image_id, const L if( tuple ) { tuple->mButton->setImageOverlay(image_id, LLFontGL::LEFT, color); - reshape_tuple(tuple); + reshapeTuple(tuple); } } -void LLTabContainer::reshape_tuple(LLTabTuple* tuple) +void LLTabContainer::setTabImage(LLPanel* child, LLIconCtrl* icon) +{ + LLTabTuple* tuple = getTabByPanel(child); + LLCustomButtonIconCtrl* button; + + if(tuple) + { + button = dynamic_cast<LLCustomButtonIconCtrl*>(tuple->mButton); + if(button) + { + button->setIcon(icon); + } + } +} + +void LLTabContainer::reshapeTuple(LLTabTuple* tuple) { static LLUICachedControl<S32> tab_padding ("UITabPadding", 0); - static LLUICachedControl<S32> image_left_padding ("UIButtonImageLeftPadding", 4); - static LLUICachedControl<S32> image_right_padding ("UIButtonImageRightPadding", 4); - static LLUICachedControl<S32> image_top_padding ("UIButtonImageTopPadding", 2); - static LLUICachedControl<S32> image_bottom_padding ("UIButtonImageBottomPadding", 2); if (!mIsVertical) { - tuple->mButton->setImageOverlayLeftPad(image_left_padding); - tuple->mButton->setImageOverlayRightPad(image_right_padding); - tuple->mButton->setImageOverlayTopPad(image_top_padding); - tuple->mButton->setImageOverlayBottomPad(image_bottom_padding); - // remove current width from total tab strip width mTotalTabWidth -= tuple->mButton->getRect().getWidth(); diff --git a/indra/llui/lltabcontainer.h b/indra/llui/lltabcontainer.h index 2a55877d3c..50ec2679f6 100644 --- a/indra/llui/lltabcontainer.h +++ b/indra/llui/lltabcontainer.h @@ -36,6 +36,8 @@ #include "llpanel.h" #include "lltextbox.h" #include "llframetimer.h" +#include "lliconctrl.h" +#include "llbutton.h" class LLTabTuple; @@ -90,6 +92,26 @@ public: middle_tab, last_tab; + /** + * Tab label horizontal alignment + */ + Optional<LLFontGL::HAlign> font_halign; + + /** + * Tab label ellipses + */ + Optional<bool> use_ellipses; + + /** + * Use LLCustomButtonIconCtrl or LLButton in LLTabTuple + */ + Optional<bool> use_custom_icon_ctrl; + + /** + * Paddings for LLIconCtrl in case of LLCustomButtonIconCtrl usage(use_custom_icon_ctrl = true) + */ + Optional<S32> tab_icon_ctrl_pad; + Params(); }; @@ -173,6 +195,7 @@ public: void setTabPanelFlashing(LLPanel* child, BOOL state); void setTabImage(LLPanel* child, std::string img_name, const LLColor4& color = LLColor4::white); void setTabImage(LLPanel* child, const LLUUID& img_id, const LLColor4& color = LLColor4::white); + void setTabImage(LLPanel* child, LLIconCtrl* icon); void setTitle( const std::string& title ); const std::string getPanelTitle(S32 index); @@ -228,7 +251,7 @@ private: // updates tab button images given the tuple, tab position and the corresponding params void update_images(LLTabTuple* tuple, TabParams params, LLTabContainer::TabPosition pos); - void reshape_tuple(LLTabTuple* tuple); + void reshapeTuple(LLTabTuple* tuple); // Variables @@ -278,6 +301,10 @@ private: TabParams mFirstTabParams; TabParams mMiddleTabParams; TabParams mLastTabParams; + + bool mCustomIconCtrlUsed; + S32 mTabIconCtrlPad; + bool mUseTabEllipses; }; #endif // LL_TABCONTAINER_H diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index e923e60db4..ef422dbdc5 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1137,6 +1137,7 @@ void LLTextBase::reflow() line_list_t::iterator iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), start_index, line_end_compare()); line_start_index = iter->mDocIndexStart; line_count = iter->mLineNum; + cur_top = iter->mRect.mTop; getSegmentAndOffset(iter->mDocIndexStart, &seg_iter, &seg_offset); mLineInfoList.erase(iter, mLineInfoList.end()); } @@ -1577,7 +1578,7 @@ void LLTextBase::appendText(const std::string &new_text, bool prepend_newline, c // Text will be replaced during rendering with the icon, // but string cannot be empty or the segment won't be // added (or drawn). - appendAndHighlightText(" ", prepend_newline, part, icon); + appendAndHighlightText(" ", prepend_newline, part, icon); prepend_newline = false; } } @@ -2311,7 +2312,7 @@ F32 LLNormalTextSegment::draw(S32 start, S32 end, S32 selection_start, S32 selec image->draw(draw_rect.mLeft, image_bottom, style_image_width, style_image_height, color); - const S32 IMAGE_HPAD = 2; + const S32 IMAGE_HPAD = 3; return draw_rect.mLeft + style_image_width + IMAGE_HPAD; } diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 62aeb50011..ce5f1bd082 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -237,13 +237,17 @@ private: /////////////////////////////////////////////////////////////////// LLTextEditor::Params::Params() : default_text("default_text"), + prevalidate_callback("prevalidate_callback"), embedded_items("embedded_items", false), ignore_tab("ignore_tab", true), handle_edit_keys_directly("handle_edit_keys_directly", false), show_line_numbers("show_line_numbers", false), default_color("default_color"), - commit_on_focus_lost("commit_on_focus_lost", false) -{} + commit_on_focus_lost("commit_on_focus_lost", false), + show_context_menu("show_context_menu") +{ + addSynonym(prevalidate_callback, "text_type"); +} LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) : LLTextBase(p), @@ -258,7 +262,9 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) : mMouseDownX(0), mMouseDownY(0), mTabsToNextField(p.ignore_tab), - mContextMenu(NULL) + mPrevalidateFunc(p.prevalidate_callback()), + mContextMenu(NULL), + mShowContextMenu(p.show_context_menu) { mDefaultFont = p.font; @@ -318,6 +324,17 @@ LLTextEditor::~LLTextEditor() void LLTextEditor::setText(const LLStringExplicit &utf8str, const LLStyle::Params& input_params) { + // validate incoming text if necessary + if (mPrevalidateFunc) + { + LLWString test_text = utf8str_to_wstring(utf8str); + if (!mPrevalidateFunc(test_text)) + { + // not valid text, nothing to do + return; + } + } + blockUndo(); deselect(); @@ -720,7 +737,10 @@ BOOL LLTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask) } if (!LLTextBase::handleRightMouseDown(x, y, mask)) { - showContextMenu(x, y); + if(getShowContextMenu()) + { + showContextMenu(x, y); + } } return TRUE; } @@ -906,6 +926,21 @@ S32 LLTextEditor::execute( TextCmd* cmd ) // Push the new command is now on the top (front) of the undo stack. mUndoStack.push_front(cmd); mLastCmd = cmd; + + bool need_to_rollback = mPrevalidateFunc + && !mPrevalidateFunc(getViewModel()->getDisplay()); + if (need_to_rollback) + { + // get rid of this last command and clean up undo stack + undo(); + + // remove any evidence of this command from redo history + mUndoStack.pop_front(); + delete cmd; + + // failure, nothing changed + delta = 0; + } } else { @@ -1029,7 +1064,21 @@ S32 LLTextEditor::addChar(S32 pos, llwchar wc) if (mLastCmd && mLastCmd->canExtend(pos)) { S32 delta = 0; + if (mPrevalidateFunc) + { + // get a copy of current text contents + LLWString test_string(getViewModel()->getDisplay()); + + // modify text contents as if this addChar succeeded + llassert(pos <= (S32)test_string.size()); + test_string.insert(pos, 1, wc); + if (!mPrevalidateFunc( test_string)) + { + return 0; + } + } mLastCmd->extendAndExecute(this, pos, wc, &delta); + return delta; } else diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h index a136f9ccce..71d937b2c4 100644 --- a/indra/llui/lltexteditor.h +++ b/indra/llui/lltexteditor.h @@ -44,6 +44,7 @@ #include "lldarray.h" #include "llviewborder.h" // for params #include "lltextbase.h" +#include "lltextvalidate.h" #include "llpreeditor.h" #include "llcontrol.h" @@ -63,12 +64,14 @@ public: struct Params : public LLInitParam::Block<Params, LLTextBase::Params> { Optional<std::string> default_text; + Optional<LLTextValidate::validate_func_t, LLTextValidate::ValidateTextNamedFuncs> prevalidate_callback; Optional<bool> embedded_items, ignore_tab, handle_edit_keys_directly, show_line_numbers, - commit_on_focus_lost; + commit_on_focus_lost, + show_context_menu; //colors Optional<LLUIColor> default_color; @@ -200,6 +203,9 @@ public: const LLTextSegmentPtr getPreviousSegment() const; void getSelectedSegments(segment_vec_t& segments) const; + void setShowContextMenu(bool show) { mShowContextMenu = show; } + bool getShowContextMenu() const { return mShowContextMenu; } + protected: void showContextMenu(S32 x, S32 y); void drawPreeditMarker(); @@ -319,6 +325,7 @@ private: BOOL mTakesFocus; BOOL mAllowEmbeddedItems; + bool mShowContextMenu; LLUUID mSourceID; @@ -329,6 +336,7 @@ private: LLCoordGL mLastIMEPosition; // Last position of the IME editor keystroke_signal_t mKeystrokeSignal; + LLTextValidate::validate_func_t mPrevalidateFunc; LLContextMenu* mContextMenu; }; // end class LLTextEditor diff --git a/indra/llui/lltextvalidate.cpp b/indra/llui/lltextvalidate.cpp new file mode 100644 index 0000000000..8b6bc5bd7d --- /dev/null +++ b/indra/llui/lltextvalidate.cpp @@ -0,0 +1,302 @@ +/** + * @file lltextvalidate.cpp + * @brief Text validation helper functions + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +// Text editor widget to let users enter a single line. + +#include "linden_common.h" + +#include "lltextvalidate.h" +#include "llresmgr.h" // for LLLocale + +namespace LLTextValidate +{ + void ValidateTextNamedFuncs::declareValues() + { + declare("ascii", validateASCII); + declare("float", validateFloat); + declare("int", validateInt); + declare("positive_s32", validatePositiveS32); + declare("non_negative_s32", validateNonNegativeS32); + declare("alpha_num", validateAlphaNum); + declare("alpha_num_space", validateAlphaNumSpace); + declare("ascii_printable_no_pipe", validateASCIIPrintableNoPipe); + declare("ascii_printable_no_space", validateASCIIPrintableNoSpace); + } + + // Limits what characters can be used to [1234567890.-] with [-] only valid in the first position. + // Does NOT ensure that the string is a well-formed number--that's the job of post-validation--for + // the simple reasons that intermediate states may be invalid even if the final result is valid. + // + bool validateFloat(const LLWString &str) + { + LLLocale locale(LLLocale::USER_LOCALE); + + bool success = TRUE; + LLWString trimmed = str; + LLWStringUtil::trim(trimmed); + S32 len = trimmed.length(); + if( 0 < len ) + { + // May be a comma or period, depending on the locale + llwchar decimal_point = (llwchar)LLResMgr::getInstance()->getDecimalPoint(); + + S32 i = 0; + + // First character can be a negative sign + if( '-' == trimmed[0] ) + { + i++; + } + + for( ; i < len; i++ ) + { + if( (decimal_point != trimmed[i] ) && !LLStringOps::isDigit( trimmed[i] ) ) + { + success = FALSE; + break; + } + } + } + + return success; + } + + // Limits what characters can be used to [1234567890-] with [-] only valid in the first position. + // Does NOT ensure that the string is a well-formed number--that's the job of post-validation--for + // the simple reasons that intermediate states may be invalid even if the final result is valid. + // + bool validateInt(const LLWString &str) + { + LLLocale locale(LLLocale::USER_LOCALE); + + bool success = TRUE; + LLWString trimmed = str; + LLWStringUtil::trim(trimmed); + S32 len = trimmed.length(); + if( 0 < len ) + { + S32 i = 0; + + // First character can be a negative sign + if( '-' == trimmed[0] ) + { + i++; + } + + for( ; i < len; i++ ) + { + if( !LLStringOps::isDigit( trimmed[i] ) ) + { + success = FALSE; + break; + } + } + } + + return success; + } + + bool validatePositiveS32(const LLWString &str) + { + LLLocale locale(LLLocale::USER_LOCALE); + + LLWString trimmed = str; + LLWStringUtil::trim(trimmed); + S32 len = trimmed.length(); + bool success = TRUE; + if(0 < len) + { + if(('-' == trimmed[0]) || ('0' == trimmed[0])) + { + success = FALSE; + } + S32 i = 0; + while(success && (i < len)) + { + if(!LLStringOps::isDigit(trimmed[i++])) + { + success = FALSE; + } + } + } + if (success) + { + S32 val = strtol(wstring_to_utf8str(trimmed).c_str(), NULL, 10); + if (val <= 0) + { + success = FALSE; + } + } + return success; + } + + bool validateNonNegativeS32(const LLWString &str) + { + LLLocale locale(LLLocale::USER_LOCALE); + + LLWString trimmed = str; + LLWStringUtil::trim(trimmed); + S32 len = trimmed.length(); + bool success = TRUE; + if(0 < len) + { + if('-' == trimmed[0]) + { + success = FALSE; + } + S32 i = 0; + while(success && (i < len)) + { + if(!LLStringOps::isDigit(trimmed[i++])) + { + success = FALSE; + } + } + } + if (success) + { + S32 val = strtol(wstring_to_utf8str(trimmed).c_str(), NULL, 10); + if (val < 0) + { + success = FALSE; + } + } + return success; + } + + bool validateAlphaNum(const LLWString &str) + { + LLLocale locale(LLLocale::USER_LOCALE); + + bool rv = TRUE; + S32 len = str.length(); + if(len == 0) return rv; + while(len--) + { + if( !LLStringOps::isAlnum((char)str[len]) ) + { + rv = FALSE; + break; + } + } + return rv; + } + + bool validateAlphaNumSpace(const LLWString &str) + { + LLLocale locale(LLLocale::USER_LOCALE); + + bool rv = TRUE; + S32 len = str.length(); + if(len == 0) return rv; + while(len--) + { + if(!(LLStringOps::isAlnum((char)str[len]) || (' ' == str[len]))) + { + rv = FALSE; + break; + } + } + return rv; + } + + // Used for most names of things stored on the server, due to old file-formats + // that used the pipe (|) for multiline text storage. Examples include + // inventory item names, parcel names, object names, etc. + bool validateASCIIPrintableNoPipe(const LLWString &str) + { + bool rv = TRUE; + S32 len = str.length(); + if(len == 0) return rv; + while(len--) + { + llwchar wc = str[len]; + if (wc < 0x20 + || wc > 0x7f + || wc == '|') + { + rv = FALSE; + break; + } + if(!(wc == ' ' + || LLStringOps::isAlnum((char)wc) + || LLStringOps::isPunct((char)wc) ) ) + { + rv = FALSE; + break; + } + } + return rv; + } + + + // Used for avatar names + bool validateASCIIPrintableNoSpace(const LLWString &str) + { + bool rv = TRUE; + S32 len = str.length(); + if(len == 0) return rv; + while(len--) + { + llwchar wc = str[len]; + if (wc < 0x20 + || wc > 0x7f + || LLStringOps::isSpace(wc)) + { + rv = FALSE; + break; + } + if( !(LLStringOps::isAlnum((char)str[len]) || + LLStringOps::isPunct((char)str[len]) ) ) + { + rv = FALSE; + break; + } + } + return rv; + } + + bool validateASCII(const LLWString &str) + { + bool rv = TRUE; + S32 len = str.length(); + while(len--) + { + if (str[len] < 0x20 || str[len] > 0x7f) + { + rv = FALSE; + break; + } + } + return rv; + } +} diff --git a/indra/llui/lltextvalidate.h b/indra/llui/lltextvalidate.h new file mode 100644 index 0000000000..ffb4e85e7c --- /dev/null +++ b/indra/llui/lltextvalidate.h @@ -0,0 +1,63 @@ +/** + * @file lltextbase.h + * @author Martin Reddy + * @brief The base class of text box/editor, providing Url handling support + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLTEXTVALIDATE_H +#define LL_LLTEXTVALIDATE_H + +#include "llstring.h" +#include "llinitparam.h" +#include <boost/function.hpp> + +namespace LLTextValidate +{ + typedef boost::function<BOOL (const LLWString &wstr)> validate_func_t; + + struct ValidateTextNamedFuncs + : public LLInitParam::TypeValuesHelper<validate_func_t, ValidateTextNamedFuncs> + { + static void declareValues(); + }; + + bool validateFloat(const LLWString &str ); + bool validateInt(const LLWString &str ); + bool validatePositiveS32(const LLWString &str); + bool validateNonNegativeS32(const LLWString &str); + bool validateAlphaNum(const LLWString &str ); + bool validateAlphaNumSpace(const LLWString &str ); + bool validateASCIIPrintableNoPipe(const LLWString &str); + bool validateASCIIPrintableNoSpace(const LLWString &str); + bool validateASCII(const LLWString &str); +} + + +#endif diff --git a/indra/llui/lltooltip.h b/indra/llui/lltooltip.h index 7978b6a583..c0811c56c3 100644 --- a/indra/llui/lltooltip.h +++ b/indra/llui/lltooltip.h @@ -129,7 +129,8 @@ private: class LLInspector : public LLToolTip { public: - struct Params : public LLInitParam::Block<Params, LLToolTip::Params> {}; + struct Params : public LLInitParam::Block<Params, LLToolTip::Params> + {}; }; class LLToolTipMgr : public LLSingleton<LLToolTipMgr> diff --git a/indra/llui/lluicolortable.cpp b/indra/llui/lluicolortable.cpp index 9be33483d0..1b64ef3abe 100644 --- a/indra/llui/lluicolortable.cpp +++ b/indra/llui/lluicolortable.cpp @@ -56,7 +56,7 @@ LLUIColorTable::Params::Params() { } -void LLUIColorTable::insertFromParams(const Params& p) +void LLUIColorTable::insertFromParams(const Params& p, string_color_map_t& table) { // this map will contain all color references after the following loop typedef std::map<std::string, std::string> string_string_map_t; @@ -69,14 +69,7 @@ void LLUIColorTable::insertFromParams(const Params& p) ColorEntryParams color_entry = *it; if(color_entry.color.value.isChosen()) { - if(mUserSetColors.find(color_entry.name)!=mUserSetColors.end()) - { - setColor(color_entry.name, color_entry.color.value); - } - else - { - setColor(color_entry.name, color_entry.color.value, mLoadedColors); - } + setColor(color_entry.name, color_entry.color.value, table); } else { @@ -220,16 +213,16 @@ bool LLUIColorTable::loadFromSettings() bool result = false; std::string default_filename = gDirUtilp->getExpandedFilename(LL_PATH_DEFAULT_SKIN, "colors.xml"); - result |= loadFromFilename(default_filename); + result |= loadFromFilename(default_filename, mLoadedColors); std::string current_filename = gDirUtilp->getExpandedFilename(LL_PATH_TOP_SKIN, "colors.xml"); if(current_filename != default_filename) { - result |= loadFromFilename(current_filename); + result |= loadFromFilename(current_filename, mLoadedColors); } std::string user_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "colors.xml"); - loadFromFilename(user_filename); + loadFromFilename(user_filename, mUserSetColors); return result; } @@ -299,7 +292,7 @@ void LLUIColorTable::setColor(const std::string& name, const LLColor4& color, st } } -bool LLUIColorTable::loadFromFilename(const std::string& filename) +bool LLUIColorTable::loadFromFilename(const std::string& filename, string_color_map_t& table) { LLXMLNodePtr root; @@ -320,7 +313,7 @@ bool LLUIColorTable::loadFromFilename(const std::string& filename) if(params.validateBlock()) { - insertFromParams(params); + insertFromParams(params, table); } else { @@ -330,3 +323,11 @@ bool LLUIColorTable::loadFromFilename(const std::string& filename) return true; } + +void LLUIColorTable::insertFromParams(const Params& p) +{ + insertFromParams(p, mUserSetColors); +} + +// EOF + diff --git a/indra/llui/lluicolortable.h b/indra/llui/lluicolortable.h index c87695f456..d401e5e724 100644 --- a/indra/llui/lluicolortable.h +++ b/indra/llui/lluicolortable.h @@ -45,6 +45,10 @@ class LLUIColor; class LLUIColorTable : public LLSingleton<LLUIColorTable> { LOG_CLASS(LLUIColorTable); + + // consider using sorted vector, can be much faster + typedef std::map<std::string, LLUIColor> string_color_map_t; + public: struct ColorParams : LLInitParam::Choice<ColorParams> { @@ -91,10 +95,9 @@ public: void saveUserSettings() const; private: - bool loadFromFilename(const std::string& filename); + bool loadFromFilename(const std::string& filename, string_color_map_t& table); - // consider using sorted vector, can be much faster - typedef std::map<std::string, LLUIColor> string_color_map_t; + void insertFromParams(const Params& p, string_color_map_t& table); void clearTable(string_color_map_t& table); void setColor(const std::string& name, const LLColor4& color, string_color_map_t& table); diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index f1b08c380b..63e627ceb5 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -1720,6 +1720,7 @@ LLView* LLView::findChildView(const std::string& name, BOOL recurse) const for ( child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) { LLView* childp = *child_it; + llassert(childp); if (childp->getName() == name) { return childp; @@ -1731,6 +1732,7 @@ LLView* LLView::findChildView(const std::string& name, BOOL recurse) const for ( child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) { LLView* childp = *child_it; + llassert(childp); LLView* viewp = childp->findChildView(name, recurse); if ( viewp ) { diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt index 77c6fa57b6..bf3233f386 100644 --- a/indra/llwindow/CMakeLists.txt +++ b/indra/llwindow/CMakeLists.txt @@ -113,6 +113,7 @@ if (WINDOWS) ) list(APPEND llwindow_LINK_LIBRARIES comdlg32 # Common Dialogs for ChooseColor + ole32 ) endif (WINDOWS) diff --git a/indra/llwindow/lldragdropwin32.cpp b/indra/llwindow/lldragdropwin32.cpp index 9b80fe0a84..b85960be10 100644 --- a/indra/llwindow/lldragdropwin32.cpp +++ b/indra/llwindow/lldragdropwin32.cpp @@ -50,7 +50,8 @@ class LLDragDropWin32Target: LLDragDropWin32Target( HWND hWnd ) : mRefCount( 1 ), mAppWindowHandle( hWnd ), - mAllowDrop( false) + mAllowDrop(false), + mIsSlurl(false) { }; diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h index 127dbf45e0..55b221e716 100644 --- a/indra/llwindow/llwindow.h +++ b/indra/llwindow/llwindow.h @@ -37,6 +37,7 @@ #include "llcoord.h" #include "llstring.h" #include "llcursortypes.h" +#include "llsd.h" class LLSplashScreen; class LLPreeditor; @@ -162,6 +163,9 @@ public: virtual void spawnWebBrowser(const std::string& escaped_url) {}; static std::vector<std::string> getDynamicFallbackFontList(); + + // Provide native key event data + virtual LLSD getNativeKeyData() { return LLSD::emptyMap(); } protected: LLWindow(LLWindowCallbacks* callbacks, BOOL fullscreen, U32 flags); diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index 9ccd4c7f97..ad97bc45fc 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -260,6 +260,7 @@ LLWindowMacOSX::LLWindowMacOSX(LLWindowCallbacks* callbacks, mTSMScriptCode = 0; mTSMLangCode = 0; mPreeditor = NULL; + mRawKeyEvent = NULL; mFSAASamples = fsaa_samples; mForceRebuild = FALSE; @@ -2140,10 +2141,11 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e { UInt32 modifiers = 0; + // First, process the raw event. { - EventRef rawEvent; - + EventRef rawEvent = NULL; + // Get the original event and extract the modifier keys, so we can ignore command-key events. if (GetEventParameter(event, kEventParamTextInputSendKeyboardEvent, typeEventRef, NULL, sizeof(rawEvent), NULL, &rawEvent) == noErr) { @@ -2152,6 +2154,9 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e // and call this function recursively to handle the raw key event. eventHandler (myHandler, rawEvent); + + // save the raw event until we're done processing the unicode input as well. + mRawKeyEvent = rawEvent; } } @@ -2202,6 +2207,7 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e delete[] buffer; } + mRawKeyEvent = NULL; result = err; } break; @@ -2276,6 +2282,9 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e GetEventParameter (event, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &keyCode); GetEventParameter (event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers); + // save the raw event so getNativeKeyData can use it. + mRawKeyEvent = event; + // printf("key event, key code = 0x%08x, char code = 0x%02x (%c), modifiers = 0x%08x\n", keyCode, charCode, (char)charCode, modifiers); // fflush(stdout); @@ -2371,6 +2380,8 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e result = eventNotHandledErr; break; } + + mRawKeyEvent = NULL; } break; @@ -3211,6 +3222,60 @@ void LLWindowMacOSX::spawnWebBrowser(const std::string& escaped_url) } } +LLSD LLWindowMacOSX::getNativeKeyData() +{ + LLSD result = LLSD::emptyMap(); + + if(mRawKeyEvent) + { + char char_code = 0; + UInt32 key_code = 0; + UInt32 modifiers = 0; + UInt32 keyboard_type = 0; + + GetEventParameter (mRawKeyEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(char), NULL, &char_code); + GetEventParameter (mRawKeyEvent, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &key_code); + GetEventParameter (mRawKeyEvent, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers); + GetEventParameter (mRawKeyEvent, kEventParamKeyboardType, typeUInt32, NULL, sizeof(UInt32), NULL, &keyboard_type); + + result["char_code"] = (S32)char_code; + result["key_code"] = (S32)key_code; + result["modifiers"] = (S32)modifiers; + result["keyboard_type"] = (S32)keyboard_type; + +#if 0 + // This causes trouble for control characters -- apparently character codes less than 32 (escape, control-A, etc) + // cause llsd serialization to create XML that the llsd deserializer won't parse! + std::string unicode; + OSStatus err = noErr; + EventParamType actualType = typeUTF8Text; + UInt32 actualSize = 0; + char *buffer = NULL; + + err = GetEventParameter (mRawKeyEvent, kEventParamKeyUnicodes, typeUTF8Text, &actualType, 0, &actualSize, NULL); + if(err == noErr) + { + // allocate a buffer and get the actual data. + buffer = new char[actualSize]; + err = GetEventParameter (mRawKeyEvent, kEventParamKeyUnicodes, typeUTF8Text, &actualType, actualSize, &actualSize, buffer); + if(err == noErr) + { + unicode.assign(buffer, actualSize); + } + delete[] buffer; + } + + result["unicode"] = unicode; +#endif + + } + + + lldebugs << "native key data is: " << result << llendl; + + return result; +} + BOOL LLWindowMacOSX::dialogColorPicker( F32 *r, F32 *g, F32 *b) { diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h index 377f10b6d4..7c6b324029 100644 --- a/indra/llwindow/llwindowmacosx.h +++ b/indra/llwindow/llwindowmacosx.h @@ -120,6 +120,10 @@ public: static std::vector<std::string> getDynamicFallbackFontList(); + // Provide native key event data + /*virtual*/ LLSD getNativeKeyData(); + + protected: LLWindowMacOSX(LLWindowCallbacks* callbacks, const std::string& title, const std::string& name, int x, int y, int width, int height, U32 flags, @@ -218,6 +222,7 @@ protected: friend class LLWindowManager; static WindowRef sMediaWindow; + EventRef mRawKeyEvent; }; diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index bfdf1147a1..7cd06c9c37 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -251,6 +251,10 @@ LLWindowSDL::LLWindowSDL(LLWindowCallbacks* callbacks, #if LL_X11 mFlashing = FALSE; #endif // LL_X11 + + mKeyScanCode = 0; + mKeyVirtualKey = 0; + mKeyModifiers = KMOD_NONE; } static SDL_Surface *Load_BMP_Resource(const char *basename) @@ -1617,7 +1621,7 @@ void LLWindowSDL::processMiscNativeEvents() pump_timer.setTimerExpirySec(1.0f / 15.0f); do { // Always do at least one non-blocking pump - gtk_main_iteration_do(0); + gtk_main_iteration_do(FALSE); } while (gtk_events_pending() && !pump_timer.hasExpired()); @@ -1651,24 +1655,32 @@ void LLWindowSDL::gatherInput() } case SDL_KEYDOWN: - gKeyboard->handleKeyDown(event.key.keysym.sym, event.key.keysym.mod); - // part of the fix for SL-13243 - if (SDLCheckGrabbyKeys(event.key.keysym.sym, TRUE) != 0) - SDLReallyCaptureInput(TRUE); - - if (event.key.keysym.unicode) - { - handleUnicodeUTF16(event.key.keysym.unicode, - gKeyboard->currentMask(FALSE)); - } + mKeyScanCode = event.key.keysym.scancode; + mKeyVirtualKey = event.key.keysym.unicode; + mKeyModifiers = event.key.keysym.mod; + + gKeyboard->handleKeyDown(event.key.keysym.sym, event.key.keysym.mod); + // part of the fix for SL-13243 + if (SDLCheckGrabbyKeys(event.key.keysym.sym, TRUE) != 0) + SDLReallyCaptureInput(TRUE); + + if (event.key.keysym.unicode) + { + handleUnicodeUTF16(event.key.keysym.unicode, + gKeyboard->currentMask(FALSE)); + } break; case SDL_KEYUP: - if (SDLCheckGrabbyKeys(event.key.keysym.sym, FALSE) == 0) - SDLReallyCaptureInput(FALSE); // part of the fix for SL-13243 + mKeyScanCode = event.key.keysym.scancode; + mKeyVirtualKey = event.key.keysym.unicode; + mKeyModifiers = event.key.keysym.mod; - gKeyboard->handleKeyUp(event.key.keysym.sym, event.key.keysym.mod); - break; + if (SDLCheckGrabbyKeys(event.key.keysym.sym, FALSE) == 0) + SDLReallyCaptureInput(FALSE); // part of the fix for SL-13243 + + gKeyboard->handleKeyUp(event.key.keysym.sym, event.key.keysym.mod); + break; case SDL_MOUSEBUTTONDOWN: { @@ -2224,6 +2236,39 @@ static void color_changed_callback(GtkWidget *widget, gtk_color_selection_get_current_color(colorsel, colorp); } + +/* + Make the raw keyboard data available - used to poke through to LLQtWebKit so + that Qt/Webkit has access to the virtual keycodes etc. that it needs +*/ +LLSD LLWindowSDL::getNativeKeyData() +{ + LLSD result = LLSD::emptyMap(); + + U32 modifiers = 0; // pretend-native modifiers... oh what a tangled web we weave! + + // we go through so many levels of device abstraction that I can't really guess + // what a plugin under GDK under Qt under SL under SDL under X11 considers + // a 'native' modifier mask. this has been sort of reverse-engineered... they *appear* + // to match GDK consts, but that may be co-incidence. + modifiers |= (mKeyModifiers & KMOD_LSHIFT) ? 0x0001 : 0; + modifiers |= (mKeyModifiers & KMOD_RSHIFT) ? 0x0001 : 0;// munge these into the same shift + modifiers |= (mKeyModifiers & KMOD_CAPS) ? 0x0002 : 0; + modifiers |= (mKeyModifiers & KMOD_LCTRL) ? 0x0004 : 0; + modifiers |= (mKeyModifiers & KMOD_RCTRL) ? 0x0004 : 0;// munge these into the same ctrl + modifiers |= (mKeyModifiers & KMOD_LALT) ? 0x0008 : 0;// untested + modifiers |= (mKeyModifiers & KMOD_RALT) ? 0x0008 : 0;// untested + // *todo: test ALTs - I don't have a case for testing these. Do you? + // *todo: NUM? - I don't care enough right now (and it's not a GDK modifier). + + result["scan_code"] = (S32)mKeyScanCode; + result["virtual_key"] = (S32)mKeyVirtualKey; + result["modifiers"] = (S32)modifiers; + + return result; +} + + BOOL LLWindowSDL::dialogColorPicker( F32 *r, F32 *g, F32 *b) { BOOL rtn = FALSE; diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h index 0ba1c861da..e6bdd46a77 100644 --- a/indra/llwindow/llwindowsdl.h +++ b/indra/llwindow/llwindowsdl.h @@ -102,7 +102,7 @@ public: /*virtual*/ void gatherInput(); /*virtual*/ void swapBuffers(); - /*virtual*/ void delayInputProcessing() { }; + /*virtual*/ void delayInputProcessing() { }; // handy coordinate space conversion routines /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to); @@ -155,12 +155,13 @@ protected: BOOL ignore_pixel_depth, U32 fsaa_samples); ~LLWindowSDL(); + /*virtual*/ BOOL isValid(); + /*virtual*/ LLSD getNativeKeyData(); + void initCursors(); void quitCursors(); - BOOL isValid(); void moveWindow(const LLCoordScreen& position,const LLCoordScreen& size); - // Changes display resolution. Returns true if successful BOOL setDisplayResolution(S32 width, S32 height, S32 bits, S32 refresh); @@ -204,12 +205,16 @@ protected: friend class LLWindowManager; -#if LL_X11 private: +#if LL_X11 void x11_set_urgent(BOOL urgent); BOOL mFlashing; LLTimer mFlashTimer; #endif //LL_X11 + + U32 mKeyScanCode; + U32 mKeyVirtualKey; + SDLMod mKeyModifiers; }; diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 57a4921d92..c80392ad45 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -378,6 +378,9 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks, mMousePositionModified = FALSE; mInputProcessingPaused = FALSE; mPreeditor = NULL; + mKeyCharCode = 0; + mKeyScanCode = 0; + mKeyVirtualKey = 0; mhDC = NULL; mhRC = NULL; @@ -1872,6 +1875,10 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ // allow system keys, such as ALT-F4 to be processed by Windows eat_keystroke = FALSE; case WM_KEYDOWN: + window_imp->mKeyCharCode = 0; // don't know until wm_char comes in next + window_imp->mKeyScanCode = ( l_param >> 16 ) & 0xff; + window_imp->mKeyVirtualKey = w_param; + window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_KEYDOWN"); { if (gDebugWindowProc) @@ -1891,6 +1898,9 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ eat_keystroke = FALSE; case WM_KEYUP: { + window_imp->mKeyScanCode = ( l_param >> 16 ) & 0xff; + window_imp->mKeyVirtualKey = w_param; + window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_KEYUP"); LLFastTimer t2(FTM_KEYHANDLER); @@ -1976,6 +1986,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ break; case WM_CHAR: + window_imp->mKeyCharCode = w_param; + // Should really use WM_UNICHAR eventually, but it requires a specific Windows version and I need // to figure out how that works. - Doug // @@ -3051,6 +3063,19 @@ void LLWindowWin32::spawnWebBrowser(const std::string& escaped_url ) */ } +/* + Make the raw keyboard data available - used to poke through to LLQtWebKit so + that Qt/Webkit has access to the virtual keycodes etc. that it needs +*/ +LLSD LLWindowWin32::getNativeKeyData() +{ + LLSD result = LLSD::emptyMap(); + + result["scan_code"] = (S32)mKeyScanCode; + result["virtual_key"] = (S32)mKeyVirtualKey; + + return result; +} BOOL LLWindowWin32::dialogColorPicker( F32 *r, F32 *g, F32 *b ) { diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h index 6aca31b63e..9d57735772 100644 --- a/indra/llwindow/llwindowwin32.h +++ b/indra/llwindow/llwindowwin32.h @@ -132,7 +132,7 @@ protected: HCURSOR loadColorCursor(LPCTSTR name); BOOL isValid(); void moveWindow(const LLCoordScreen& position,const LLCoordScreen& size); - + LLSD getNativeKeyData(); // Changes display resolution. Returns true if successful BOOL setDisplayResolution(S32 width, S32 height, S32 bits, S32 refresh); @@ -211,6 +211,10 @@ protected: LLDragDropWin32* mDragDrop; + U32 mKeyCharCode; + U32 mKeyScanCode; + U32 mKeyVirtualKey; + friend class LLWindowManager; }; diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp index dbc44c8334..e230fcc280 100644 --- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp +++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp @@ -724,8 +724,8 @@ private: return false; // allocate some space and grab it - UInt8* item_data = new UInt8( size + 1 ); - memset( item_data, 0, ( size + 1 ) * sizeof( UInt8* ) ); + UInt8* item_data = new UInt8[ size + 1 ]; + memset( item_data, 0, ( size + 1 ) * sizeof( UInt8 ) ); result = QTMetaDataGetItemValue( media_data_ref, item, item_data, size, NULL ); if ( noErr != result ) { diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt index 5bccd589d8..4512c22b5d 100644 --- a/indra/media_plugins/webkit/CMakeLists.txt +++ b/indra/media_plugins/webkit/CMakeLists.txt @@ -9,6 +9,7 @@ include(LLPlugin) include(LLMath) include(LLRender) include(LLWindow) +include(UI) include(Linking) include(PluginAPI) include(MediaPluginBase) @@ -38,7 +39,7 @@ add_library(media_plugin_webkit ${media_plugin_webkit_SOURCE_FILES} ) -target_link_libraries(media_plugin_webkit +set(media_plugin_webkit_LINK_LIBRARIES ${LLPLUGIN_LIBRARIES} ${MEDIA_PLUGIN_BASE_LIBRARIES} ${LLCOMMON_LIBRARIES} @@ -46,6 +47,14 @@ target_link_libraries(media_plugin_webkit ${PLUGIN_API_WINDOWS_LIBRARIES} ) +if (LINUX) + list(APPEND media_plugin_webkit_LINK_LIBRARIES + ${UI_LIBRARIES} # for glib/GTK + ) +endif (LINUX) + +target_link_libraries(media_plugin_webkit ${media_plugin_webkit_LINK_LIBRARIES}) + add_dependencies(media_plugin_webkit ${LLPLUGIN_LIBRARIES} ${MEDIA_PLUGIN_BASE_LIBRARIES} @@ -79,4 +88,5 @@ if (DARWIN) DEPENDS media_plugin_webkit ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ) -endif (DARWIN)
\ No newline at end of file +endif (DARWIN) + diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp index 3c24b4ed22..688d3bcd3d 100644 --- a/indra/media_plugins/webkit/media_plugin_webkit.cpp +++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp @@ -470,92 +470,96 @@ private: return (LLQtWebKit::EKeyboardModifier)result; } - //////////////////////////////////////////////////////////////////////////////// // - void keyEvent(LLQtWebKit::EKeyEvent key_event, int key, LLQtWebKit::EKeyboardModifier modifiers) + void deserializeKeyboardData( LLSD native_key_data, uint32_t& native_scan_code, uint32_t& native_virtual_key, uint32_t& native_modifiers ) { - int llqt_key; + native_scan_code = 0; + native_virtual_key = 0; + native_modifiers = 0; + if( native_key_data.isMap() ) + { +#if LL_DARWIN + native_scan_code = (uint32_t)(native_key_data["char_code"].asInteger()); + native_virtual_key = (uint32_t)(native_key_data["key_code"].asInteger()); + native_modifiers = (uint32_t)(native_key_data["modifiers"].asInteger()); +#elif LL_WINDOWS + native_scan_code = (uint32_t)(native_key_data["scan_code"].asInteger()); + native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger()); + // TODO: I don't think we need to do anything with native modifiers here -- please verify +#elif LL_LINUX + native_scan_code = (uint32_t)(native_key_data["scan_code"].asInteger()); + native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger()); + native_modifiers = (uint32_t)(native_key_data["modifiers"].asInteger()); +#else + // Add other platforms here as needed +#endif + }; + }; + + //////////////////////////////////////////////////////////////////////////////// + // + void keyEvent(LLQtWebKit::EKeyEvent key_event, int key, LLQtWebKit::EKeyboardModifier modifiers, LLSD native_key_data = LLSD::emptyMap()) + { // The incoming values for 'key' will be the ones from indra_constants.h - // the outgoing values are the ones from llqtwebkit.h + std::string utf8_text; + + if(key < KEY_SPECIAL) + { + // Low-ascii characters need to get passed through. + utf8_text = (char)key; + } + // Any special-case handling we want to do for particular keys... switch((KEY)key) { - // This is the list that the llqtwebkit implementation actually maps into Qt keys. -// case KEY_XXX: llqt_key = LL_DOM_VK_CANCEL; break; -// case KEY_XXX: llqt_key = LL_DOM_VK_HELP; break; - case KEY_BACKSPACE: llqt_key = LL_DOM_VK_BACK_SPACE; break; - case KEY_TAB: llqt_key = LL_DOM_VK_TAB; break; -// case KEY_XXX: llqt_key = LL_DOM_VK_CLEAR; break; - case KEY_RETURN: llqt_key = LL_DOM_VK_RETURN; break; - case KEY_PAD_RETURN: llqt_key = LL_DOM_VK_ENTER; break; - case KEY_SHIFT: llqt_key = LL_DOM_VK_SHIFT; break; - case KEY_CONTROL: llqt_key = LL_DOM_VK_CONTROL; break; - case KEY_ALT: llqt_key = LL_DOM_VK_ALT; break; -// case KEY_XXX: llqt_key = LL_DOM_VK_PAUSE; break; - case KEY_CAPSLOCK: llqt_key = LL_DOM_VK_CAPS_LOCK; break; - case KEY_ESCAPE: llqt_key = LL_DOM_VK_ESCAPE; break; - case KEY_PAGE_UP: llqt_key = LL_DOM_VK_PAGE_UP; break; - case KEY_PAGE_DOWN: llqt_key = LL_DOM_VK_PAGE_DOWN; break; - case KEY_END: llqt_key = LL_DOM_VK_END; break; - case KEY_HOME: llqt_key = LL_DOM_VK_HOME; break; - case KEY_LEFT: llqt_key = LL_DOM_VK_LEFT; break; - case KEY_UP: llqt_key = LL_DOM_VK_UP; break; - case KEY_RIGHT: llqt_key = LL_DOM_VK_RIGHT; break; - case KEY_DOWN: llqt_key = LL_DOM_VK_DOWN; break; -// case KEY_XXX: llqt_key = LL_DOM_VK_PRINTSCREEN; break; - case KEY_INSERT: llqt_key = LL_DOM_VK_INSERT; break; - case KEY_DELETE: llqt_key = LL_DOM_VK_DELETE; break; -// case KEY_XXX: llqt_key = LL_DOM_VK_CONTEXT_MENU; break; + // ASCII codes for some standard keys + case LLQtWebKit::KEY_BACKSPACE: utf8_text = (char)8; break; + case LLQtWebKit::KEY_TAB: utf8_text = (char)9; break; + case LLQtWebKit::KEY_RETURN: utf8_text = (char)13; break; + case LLQtWebKit::KEY_PAD_RETURN: utf8_text = (char)13; break; + case LLQtWebKit::KEY_ESCAPE: utf8_text = (char)27; break; - default: - if(key < KEY_SPECIAL) - { - // Pass the incoming key through -- it should be regular ASCII, which should be correct for webkit. - llqt_key = key; - } - else - { - // Don't pass through untranslated special keys -- they'll be all wrong. - llqt_key = 0; - } + default: break; } -// std::cerr << "keypress, original code = 0x" << std::hex << key << ", converted code = 0x" << std::hex << llqt_key << std::dec << std::endl; +// std::cerr << "key event " << (int)key_event << ", native_key_data = " << native_key_data << std::endl; - if(llqt_key != 0) - { - LLQtWebKit::getInstance()->keyEvent( mBrowserWindowId, key_event, llqt_key, modifiers); - } + uint32_t native_scan_code = 0; + uint32_t native_virtual_key = 0; + uint32_t native_modifiers = 0; + deserializeKeyboardData( native_key_data, native_scan_code, native_virtual_key, native_modifiers ); + + LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, key_event, (uint32_t)key, utf8_text.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers); checkEditState(); }; //////////////////////////////////////////////////////////////////////////////// // - void unicodeInput( const std::string &utf8str, LLQtWebKit::EKeyboardModifier modifiers) - { - LLWString wstr = utf8str_to_wstring(utf8str); + void unicodeInput( const std::string &utf8str, LLQtWebKit::EKeyboardModifier modifiers, LLSD native_key_data = LLSD::emptyMap()) + { + uint32_t key = LLQtWebKit::KEY_NONE; + +// std::cerr << "unicode input, native_key_data = " << native_key_data << std::endl; - unsigned int i; - for(i=0; i < wstr.size(); i++) + if(utf8str.size() == 1) { -// std::cerr << "unicode input, code = 0x" << std::hex << (unsigned long)(wstr[i]) << std::dec << std::endl; - - if(wstr[i] == 32) - { - // For some reason, the webkit plugin really wants the space bar to come in through the key-event path, not the unicode path. - LLQtWebKit::getInstance()->keyEvent( mBrowserWindowId, LLQtWebKit::KE_KEY_DOWN, 32, modifiers); - LLQtWebKit::getInstance()->keyEvent( mBrowserWindowId, LLQtWebKit::KE_KEY_UP, 32, modifiers); - } - else - { - LLQtWebKit::getInstance()->unicodeInput(mBrowserWindowId, wstr[i], modifiers); - } + // The only way a utf8 string can be one byte long is if it's actually a single 7-bit ascii character. + // In this case, use it as the key value. + key = utf8str[0]; } + uint32_t native_scan_code = 0; + uint32_t native_virtual_key = 0; + uint32_t native_modifiers = 0; + deserializeKeyboardData( native_key_data, native_scan_code, native_virtual_key, native_modifiers ); + + LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, LLQtWebKit::KE_KEY_DOWN, (uint32_t)key, utf8str.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers); + LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, LLQtWebKit::KE_KEY_UP, (uint32_t)key, utf8str.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers); + checkEditState(); }; @@ -855,6 +859,7 @@ void MediaPluginWebKit::receiveMessage(const char *message_string) std::string event = message_in.getValue("event"); S32 key = message_in.getValueS32("key"); std::string modifiers = message_in.getValue("modifiers"); + LLSD native_key_data = message_in.getValueLLSD("native_key_data"); // Treat unknown events as key-up for safety. LLQtWebKit::EKeyEvent key_event = LLQtWebKit::KE_KEY_UP; @@ -867,14 +872,15 @@ void MediaPluginWebKit::receiveMessage(const char *message_string) key_event = LLQtWebKit::KE_KEY_REPEAT; } - keyEvent(key_event, key, decodeModifiers(modifiers)); + keyEvent(key_event, key, decodeModifiers(modifiers), native_key_data); } else if(message_name == "text_event") { std::string text = message_in.getValue("text"); std::string modifiers = message_in.getValue("modifiers"); + LLSD native_key_data = message_in.getValueLLSD("native_key_data"); - unicodeInput(text, decodeModifiers(modifiers)); + unicodeInput(text, decodeModifiers(modifiers), native_key_data); } if(message_name == "edit_cut") { diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml index e825f13e82..d0e1f62a84 100644 --- a/indra/newview/app_settings/ignorable_dialogs.xml +++ b/indra/newview/app_settings/ignorable_dialogs.xml @@ -177,17 +177,6 @@ <key>Value</key> <integer>1</integer> </map> - <key>FirstStreamingMedia</key> - <map> - <key>Comment</key> - <string>Enables FirstStreamingMedia warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> <key>FirstTeleport</key> <map> <key>Comment</key> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 793d7b6207..d0c2f3cb34 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4633,6 +4633,17 @@ <key>Value</key> <integer>410</integer> </map> + <key>MePanelOpened</key> + <map> + <key>Comment</key> + <string>Indicates that Me Panel was opened at least once after Viewer was installed</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <real>0</real> + </map> <key>MigrateCacheDirectory</key> <map> <key>Comment</key> @@ -8399,7 +8410,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>1</integer> + <integer>0</integer> </map> <key>ShowTangentBasis</key> <map> @@ -8445,6 +8456,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>ShowVoiceVisualizersInCalls</key> + <map> + <key>Comment</key> + <string>Enables in-world voice visualizers, voice gestures and lip-sync while in group or P2P calls.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>ShowVolumeSettingsPopup</key> <map> <key>Comment</key> @@ -9938,50 +9960,6 @@ <key>Value</key> <integer>15</integer> </map> - <key>UIButtonImageLeftPadding</key> - <map> - <key>Comment</key> - <string>Button Overlay Image Left Padding</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>S32</string> - <key>Value</key> - <integer>4</integer> - </map> - <key>UIButtonImageRightPadding</key> - <map> - <key>Comment</key> - <string>Button Overlay Image Right Padding</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>S32</string> - <key>Value</key> - <integer>4</integer> - </map> - <key>UIButtonImageTopPadding</key> - <map> - <key>Comment</key> - <string>Button Overlay Image Top Padding</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>S32</string> - <key>Value</key> - <integer>2</integer> - </map> - <key>UIButtonImageBottomPadding</key> - <map> - <key>Comment</key> - <string>Button Overlay Image Bottom Padding</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>S32</string> - <key>Value</key> - <integer>2</integer> - </map> <key>UploadBakedTexOld</key> <map> <key>Comment</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 2354323a66..59f61dfdfb 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -956,6 +956,7 @@ void LLAgent::sendMessage() if (!mRegionp) { llerrs << "No region for agent yet!" << llendl; + return; } gMessageSystem->sendMessage(mRegionp->getHost()); } @@ -4482,7 +4483,9 @@ void LLAgent::setCameraPosAndFocusGlobal(const LLVector3d& camera_pos, const LLV { const F64 ANIM_METERS_PER_SECOND = 10.0; const F64 MIN_ANIM_SECONDS = 0.5; + const F64 MAX_ANIM_SECONDS = 10.0; F64 anim_duration = llmax( MIN_ANIM_SECONDS, sqrt(focus_delta_squared) / ANIM_METERS_PER_SECOND ); + anim_duration = llmin( anim_duration, MAX_ANIM_SECONDS ); setAnimationDuration( (F32)anim_duration ); } diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp index 1bc9aa0f2b..c890988930 100644 --- a/indra/newview/llagentui.cpp +++ b/indra/newview/llagentui.cpp @@ -125,11 +125,17 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const sim_access_string.c_str()); break; case LOCATION_FORMAT_NO_MATURITY: - case LOCATION_FORMAT_FULL: buffer = llformat("%s (%d, %d, %d)", region_name.c_str(), pos_x, pos_y, pos_z); break; + case LOCATION_FORMAT_FULL: + buffer = llformat("%s (%d, %d, %d)%s%s", + region_name.c_str(), + pos_x, pos_y, pos_z, + sim_access_string.empty() ? "" : " - ", + sim_access_string.c_str()); + break; } } else diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 41f2ff29e6..6078620e87 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -310,21 +310,24 @@ void LLAgentWearables::addWearabletoAgentInventoryDone(const S32 type, return; LLUUID old_item_id = getWearableItemID((EWearableType)type,index); + if (wearable) { wearable->setItemID(item_id); - } - if (old_item_id.notNull()) - { - gInventory.addChangedMask(LLInventoryObserver::LABEL, old_item_id); - setWearable((EWearableType)type,index,wearable); - } - else - { - pushWearable((EWearableType)type,wearable); + if (old_item_id.notNull()) + { + gInventory.addChangedMask(LLInventoryObserver::LABEL, old_item_id); + setWearable((EWearableType)type,index,wearable); + } + else + { + pushWearable((EWearableType)type,wearable); + } } + gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); + LLViewerInventoryItem* item = gInventory.getItem(item_id); if (item && wearable) { @@ -761,6 +764,8 @@ void LLAgentWearables::wearableUpdated(LLWearable *wearable) wearable->refreshName(); wearable->setLabelUpdated(); + wearable->pullCrossWearableValues(); + // Hack pt 2. If the wearable we just loaded has definition version 24, // then force a re-save of this wearable after slamming the version number to 22. // This number was incorrectly incremented for internal builds before release, and @@ -927,13 +932,6 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs if (mInitialWearablesUpdateReceived) return; mInitialWearablesUpdateReceived = true; - - // If this is the very first time the user has logged into viewer2+ (from a legacy viewer, or new account) - // then auto-populate outfits from the library into the My Outfits folder. - if (LLInventoryModel::getIsFirstTimeInViewer2() || gSavedSettings.getBOOL("MyOutfitsAutofill")) - { - gAgentWearables.populateMyOutfitsFolder(); - } LLUUID agent_id; gMessageSystem->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id); @@ -1292,25 +1290,29 @@ void LLAgentWearables::makeNewOutfit(const std::string& new_folder_name, j, new_wearable, todo); - if (isWearableCopyable((EWearableType)type, j)) + llassert(item); + if (item) { - copy_inventory_item( - gAgent.getID(), - item->getPermissions().getOwner(), - item->getUUID(), - folder_id, - new_name, - cb); - } - else - { - move_inventory_item( - gAgent.getID(), - gAgent.getSessionID(), - item->getUUID(), - folder_id, - new_name, - cb); + if (isWearableCopyable((EWearableType)type, j)) + { + copy_inventory_item( + gAgent.getID(), + item->getPermissions().getOwner(), + item->getUUID(), + folder_id, + new_name, + cb); + } + else + { + move_inventory_item( + gAgent.getID(), + gAgent.getSessionID(), + item->getUUID(), + folder_id, + new_name, + cb); + } } } } @@ -1417,7 +1419,7 @@ LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name) new_folder_name); LLPointer<LLInventoryCallback> cb = new LLShowCreatedOutfit(folder_id); - LLAppearanceManager::instance().shallowCopyCategory(LLAppearanceManager::instance().getCOF(),folder_id, cb); + LLAppearanceManager::instance().shallowCopyCategoryContents(LLAppearanceManager::instance().getCOF(),folder_id, cb); LLAppearanceManager::instance().createBaseOutfitLink(folder_id, cb); return folder_id; @@ -1623,8 +1625,10 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it } if (new_wearable) + { new_wearable->setItemID(new_item->getUUID()); - setWearable(type,0,new_wearable); + setWearable(type,0,new_wearable); + } } std::vector<LLWearable*> wearables_being_removed; @@ -2334,7 +2338,7 @@ void LLLibraryOutfitsFetch::libraryDone(void) LLUUID folder_id = gInventory.createNewCategory(mImportedClothingID, LLFolderType::FT_NONE, iter->second); - LLAppearanceManager::getInstance()->shallowCopyCategory(iter->first, folder_id, copy_waiter); + LLAppearanceManager::getInstance()->shallowCopyCategoryContents(iter->first, folder_id, copy_waiter); } } else diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 585d42f66d..018e9a92a0 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -48,6 +48,31 @@ #include "llviewerregion.h" #include "llwearablelist.h" +LLUUID findDescendentCategoryIDByName(const LLUUID& parent_id,const std::string& name) +{ + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t item_array; + LLNameCategoryCollector has_name(name); + gInventory.collectDescendentsIf(parent_id, + cat_array, + item_array, + LLInventoryModel::EXCLUDE_TRASH, + has_name); + if (0 == cat_array.count()) + return LLUUID(); + else + { + LLViewerInventoryCategory *cat = cat_array.get(0); + if (cat) + return cat->getUUID(); + else + { + llwarns << "null cat" << llendl; + return LLUUID(); + } + } +} + // support for secondlife:///app/appearance SLapps class LLAppearanceHandler : public LLCommandHandler { @@ -321,7 +346,7 @@ public: ~LLWearableHoldingPattern(); bool pollCompletion(); - bool isDone(); + bool isFetchCompleted(); bool isTimedOut(); typedef std::list<LLFoundData> found_list_t; @@ -330,10 +355,12 @@ public: LLInventoryModel::item_array_t mGestItems; S32 mResolved; LLTimer mWaitTime; + bool mFired; }; LLWearableHoldingPattern::LLWearableHoldingPattern(): - mResolved(0) + mResolved(0), + mFired(false) { } @@ -341,31 +368,34 @@ LLWearableHoldingPattern::~LLWearableHoldingPattern() { } -bool LLWearableHoldingPattern::isDone() +bool LLWearableHoldingPattern::isFetchCompleted() { - if (mResolved >= (S32)mFoundList.size()) - return true; // have everything we were waiting for - else if (isTimedOut()) - { - llwarns << "Exceeded max wait time, updating appearance based on what has arrived" << llendl; - return true; - } - return false; - + return (mResolved >= (S32)mFoundList.size()); // have everything we were waiting for? } bool LLWearableHoldingPattern::isTimedOut() { - static F32 max_wait_time = 15.0; // give up if wearable fetches haven't completed in max_wait_time seconds. + static F32 max_wait_time = 20.0; // give up if wearable fetches haven't completed in max_wait_time seconds. return mWaitTime.getElapsedTimeF32() > max_wait_time; } bool LLWearableHoldingPattern::pollCompletion() { - bool done = isDone(); - llinfos << "polling, done status: " << done << " elapsed " << mWaitTime.getElapsedTimeF32() << llendl; + bool completed = isFetchCompleted(); + bool timed_out = isTimedOut(); + bool done = completed || timed_out; + + llinfos << "polling, done status: " << completed << " timed out? " << timed_out << " elapsed " << mWaitTime.getElapsedTimeF32() << llendl; + if (done) { + mFired = true; + + if (timed_out) + { + llwarns << "Exceeded max wait time for wearables, updating appearance based on what has arrived" << llendl; + } + // Activate all gestures in this folder if (mGestItems.count() > 0) { @@ -397,7 +427,11 @@ bool LLWearableHoldingPattern::pollCompletion() LLAgentWearables::userUpdateAttachments(mObjItems); } - delete this; + if (completed) + { + // Only safe to delete if all wearable callbacks completed. + delete this; + } } return done; } @@ -432,7 +466,11 @@ static void removeDuplicateItems(LLInventoryModel::item_array_t& items) static void onWearableAssetFetch(LLWearable* wearable, void* data) { LLWearableHoldingPattern* holder = (LLWearableHoldingPattern*)data; - + if (holder->mFired) + { + llwarns << "called after holder fired" << llendl; + } + if(wearable) { for (LLWearableHoldingPattern::found_list_t::iterator iter = holder->mFoundList.begin(); @@ -506,9 +544,33 @@ void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, boo LLAppearanceManager::instance().updateCOF(category,append); } +// Create a copy of src_id + contents as a subfolder of dst_id. void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id, LLPointer<LLInventoryCallback> cb) { + LLInventoryCategory *src_cat = gInventory.getCategory(src_id); + if (!src_cat) + { + llwarns << "folder not found for src " << src_id.asString() << llendl; + return; + } + LLUUID parent_id = dst_id; + if(parent_id.isNull()) + { + parent_id = gInventory.getRootFolderID(); + } + LLUUID subfolder_id = gInventory.createNewCategory( parent_id, + LLFolderType::FT_NONE, + src_cat->getName()); + shallowCopyCategoryContents(src_id, subfolder_id, cb); + + gInventory.notifyObservers(); +} + +// Copy contents of src_id to dst_id. +void LLAppearanceManager::shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id, + LLPointer<LLInventoryCallback> cb) +{ LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t items; gInventory.collectDescendents(src_id, cats, items, @@ -604,6 +666,11 @@ void LLAppearanceManager::filterWearableItems( if (!item->isWearableType()) continue; EWearableType type = item->getWearableType(); + if(type < 0 || type >= WT_COUNT) + { + LL_WARNS("Appearance") << "Invalid wearable type. Inventory type does not match wearable flag bitfield." << LL_ENDL; + continue; + } items_by_type[type].push_back(item); } @@ -1340,6 +1407,11 @@ BOOL LLAppearanceManager::getIsInCOF(const LLUUID& obj_id) const BOOL LLAppearanceManager::getIsProtectedCOFItem(const LLUUID& obj_id) const { if (!getIsInCOF(obj_id)) return FALSE; + + // For now, don't allow direct deletion from the COF. Instead, force users + // to choose "Detach" or "Take Off". + return TRUE; + /* const LLInventoryObject *obj = gInventory.getObject(obj_id); if (!obj) return FALSE; @@ -1350,4 +1422,5 @@ BOOL LLAppearanceManager::getIsProtectedCOFItem(const LLUUID& obj_id) const if (obj->getActualType() == LLAssetType::AT_LINK_FOLDER) return TRUE; return FALSE; + */ } diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 38d1e01d08..5fdff45735 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -35,6 +35,8 @@ #include "llsingleton.h" #include "llinventorymodel.h" +#include "llinventoryobserver.h" +#include "llviewerinventory.h" #include "llcallbacklist.h" class LLWearable; @@ -54,10 +56,14 @@ public: void wearOutfitByName(const std::string& name); void changeOutfit(bool proceed, const LLUUID& category, bool append); - // Copy all items in a category. + // Copy all items and the src category itself. void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id, LLPointer<LLInventoryCallback> cb); + // Copy all items in a category. + void shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id, + LLPointer<LLInventoryCallback> cb); + // Find the Current Outfit folder. const LLUUID getCOF() const; @@ -144,6 +150,8 @@ public: #define SUPPORT_ENSEMBLES 0 +LLUUID findDescendentCategoryIDByName(const LLUUID& parent_id,const std::string& name); + // Shim class and template function to allow arbitrary boost::bind // expressions to be run as one-time idle callbacks. template <typename T> @@ -212,4 +220,103 @@ void doOnIdleRepeating(T callable) gIdleCallbacks.addFunction(&OnIdleCallbackRepeating<T>::onIdle,cb_functor); } +template <class T> +class CallAfterCategoryFetchStage2: public LLInventoryFetchObserver +{ +public: + CallAfterCategoryFetchStage2(T callable): + mCallable(callable) + { + } + ~CallAfterCategoryFetchStage2() + { + } + virtual void done() + { + gInventory.removeObserver(this); + doOnIdle(mCallable); + delete this; + } +protected: + T mCallable; +}; + +template <class T> +class CallAfterCategoryFetchStage1: public LLInventoryFetchDescendentsObserver +{ +public: + CallAfterCategoryFetchStage1(T callable): + mCallable(callable) + { + } + ~CallAfterCategoryFetchStage1() + { + } + virtual void done() + { + // What we do here is get the complete information on the items in + // the library, and set up an observer that will wait for that to + // happen. + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t item_array; + gInventory.collectDescendents(mCompleteFolders.front(), + cat_array, + item_array, + LLInventoryModel::EXCLUDE_TRASH); + S32 count = item_array.count(); + if(!count) + { + llwarns << "Nothing fetched in category " << mCompleteFolders.front() + << llendl; + //dec_busy_count(); + gInventory.removeObserver(this); + delete this; + return; + } + + CallAfterCategoryFetchStage2<T> *stage2 = new CallAfterCategoryFetchStage2<T>(mCallable); + LLInventoryFetchObserver::item_ref_t ids; + for(S32 i = 0; i < count; ++i) + { + ids.push_back(item_array.get(i)->getUUID()); + } + + gInventory.removeObserver(this); + + // do the fetch + stage2->fetchItems(ids); + if(stage2->isEverythingComplete()) + { + // everything is already here - call done. + stage2->done(); + } + else + { + // it's all on it's way - add an observer, and the inventory + // will call done for us when everything is here. + gInventory.addObserver(stage2); + } + delete this; + } +protected: + T mCallable; +}; + +template <class T> +void callAfterCategoryFetch(const LLUUID& cat_id, T callable) +{ + CallAfterCategoryFetchStage1<T> *stage1 = new CallAfterCategoryFetchStage1<T>(callable); + LLInventoryFetchDescendentsObserver::folder_ref_t folders; + folders.push_back(cat_id); + stage1->fetchDescendents(folders); + if (stage1->isEverythingComplete()) + { + stage1->done(); + } + else + { + gInventory.addObserver(stage1); + } +} + #endif diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 2d694eefd3..00a9e4d745 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -40,6 +40,7 @@ #include "lluictrlfactory.h" #include "lltexteditor.h" #include "llerrorcontrol.h" +#include "lleventtimer.h" #include "llviewertexturelist.h" #include "llgroupmgr.h" #include "llagent.h" @@ -1353,9 +1354,6 @@ bool LLAppViewer::cleanup() llinfos << "Cache files removed" << llendflush; - - cleanup_menus(); - // Wait for any pending VFS IO while (1) { @@ -1681,7 +1679,7 @@ bool LLAppViewer::initThreads() // Image decoding LLAppViewer::sImageDecodeThread = new LLImageDecodeThread(enable_threads && true); LLAppViewer::sTextureCache = new LLTextureCache(enable_threads && true); - LLAppViewer::sTextureFetch = new LLTextureFetch(LLAppViewer::getTextureCache(), sImageDecodeThread, enable_threads && false); + LLAppViewer::sTextureFetch = new LLTextureFetch(LLAppViewer::getTextureCache(), sImageDecodeThread, enable_threads && true); LLImage::initClass(); if (LLFastTimer::sLog || LLFastTimer::sMetricLog) @@ -1935,7 +1933,6 @@ bool LLAppViewer::initConfiguration() // LLFirstUse::addConfigVariable("FirstSandbox"); // LLFirstUse::addConfigVariable("FirstFlexible"); // LLFirstUse::addConfigVariable("FirstDebugMenus"); -// LLFirstUse::addConfigVariable("FirstStreamingMedia"); // LLFirstUse::addConfigVariable("FirstSculptedPrim"); // LLFirstUse::addConfigVariable("FirstVoice"); // LLFirstUse::addConfigVariable("FirstMedia"); @@ -2365,9 +2362,6 @@ bool LLAppViewer::initWindow() // store setting in a global for easy access and modification gNoRender = gSavedSettings.getBOOL("DisableRendering"); - // Hide the splash screen - LLSplashScreen::hide(); - // always start windowed BOOL ignorePixelDepth = gSavedSettings.getBOOL("IgnorePixelDepth"); gViewerWindow = new LLViewerWindow(gWindowTitle, @@ -3010,7 +3004,7 @@ bool LLAppViewer::initCache() // Purge cache if it belongs to an old version else { - static const S32 cache_version = 5; + static const S32 cache_version = 6; if (gSavedSettings.getS32("LocalCacheVersion") != cache_version) { mPurgeCache = true; diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index a011c5ebfd..a915b7fa50 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -36,6 +36,7 @@ #include "llallocator.h" #include "llcontrol.h" #include "llsys.h" // for LLOSInfo +#include "lltimer.h" class LLCommandLineParser; class LLFrameTimer; diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 7f20eb02ea..9e136b7cfb 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -181,7 +181,12 @@ void LLAvatarActions::startIM(const LLUUID& id) return; std::string name; - gCacheName->getFullName(id, name); + if (!gCacheName->getFullName(id, name)) + { + gCacheName->get(id, FALSE, boost::bind(&LLAvatarActions::startIM, id)); + return; + } + LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id); if (session_id != LLUUID::null) { diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 4c8cec3d30..93b708f299 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -80,6 +80,14 @@ public: { mNearbyChatBar = getChild<LLNearbyChatBar>("chat_bar"); mGesturePanel = getChild<LLPanel>("gesture_panel"); + + // Hide "show_nearby_chat" button + LLLineEditor* chat_box = mNearbyChatBar->getChatBox(); + LLUICtrl* show_btn = mNearbyChatBar->getChild<LLUICtrl>("show_nearby_chat"); + S32 delta_width = show_btn->getRect().getWidth(); + show_btn->setVisible(FALSE); + chat_box->reshape(chat_box->getRect().getWidth() + delta_width, chat_box->getRect().getHeight()); + return TRUE; } @@ -433,6 +441,8 @@ BOOL LLBottomTray::postBuild() mObjectDefaultWidthMap[RS_BUTTON_CAMERA] = mCamPanel->getRect().getWidth(); mObjectDefaultWidthMap[RS_BUTTON_SPEAK] = mSpeakPanel->getRect().getWidth(); + mNearbyChatBar->getChatBox()->setContextMenu(NULL); + return TRUE; } diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index 8cb240c7c2..0aaaa8e705 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -303,8 +303,8 @@ void LLCallFloater::updateSession() refreshParticipantList(); updateAgentModeratorState(); - //show floater for voice calls - if (!is_local_chat) + //show floater for voice calls & only in CONNECTED to voice channel state + if (!is_local_chat && LLVoiceChannel::STATE_CONNECTED == voice_channel->getState()) { LLIMFloater* im_floater = LLIMFloater::findInstance(session_id); bool show_me = !(im_floater && im_floater->getVisible()); @@ -720,7 +720,15 @@ void LLCallFloater::connectToChannel(LLVoiceChannel* channel) void LLCallFloater::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state) { - updateState(new_state); + // check is voice operational and if it doesn't work hide VCP (EXT-4397) + if(LLVoiceClient::voiceEnabled() && gVoiceClient->voiceWorking()) + { + updateState(new_state); + } + else + { + closeFloater(); + } } void LLCallFloater::updateState(const LLVoiceChannel::EState& new_state) @@ -749,18 +757,26 @@ void LLCallFloater::reset(const LLVoiceChannel::EState& new_state) mParticipants = NULL; mAvatarList->clear(); - // "loading" is shown in parcel with disabled voice only when state is "ringing" - // to avoid showing it in nearby chat vcp all the time- "no_one_near" is now shown there (EXT-4648) - bool show_loading = LLVoiceChannel::STATE_RINGING == new_state; - if(!show_loading && !LLViewerParcelMgr::getInstance()->allowAgentVoice() && mVoiceType == VC_LOCAL_CHAT) + // These ifs were added instead of simply showing "loading" to make VCP work correctly in parcels + // with disabled voice (EXT-4648 and EXT-4649) + if (!LLViewerParcelMgr::getInstance()->allowAgentVoice() && LLVoiceChannel::STATE_HUNG_UP == new_state) { + // hides "Leave Call" when call is ended in parcel with disabled voice- hiding usually happens in + // updateSession() which won't be called here because connect to nearby voice never happens + childSetVisible("leave_call_btn_panel", false); + // setting title to nearby chat an "no one near..." text- because in region with disabled + // voice we won't have chance to really connect to nearby, so VCP is changed here manually + setTitle(getString("title_nearby")); mAvatarList->setNoItemsCommentText(getString("no_one_near")); } - else + // "loading" is shown only when state is "ringing" to avoid showing it in nearby chat vcp + // of parcels with disabled voice all the time- "no_one_near" is now shown there (EXT-4648) + else if (new_state == LLVoiceChannel::STATE_RINGING) { // update floater to show Loading while waiting for data. mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData")); } + mAvatarList->setVisible(TRUE); mNonAvatarCaller->setVisible(FALSE); diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp index c4b7cee0d5..cbd9097dba 100644 --- a/indra/newview/llcallingcard.cpp +++ b/indra/newview/llcallingcard.cpp @@ -56,6 +56,7 @@ #include "llnotifications.h" #include "llnotificationsutil.h" #include "llresmgr.h" +#include "llslurl.h" #include "llimview.h" #include "llviewercontrol.h" #include "llviewernetwork.h" @@ -690,12 +691,8 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online) setBuddyOnline(agent_id,online); if(chat_notify) { - std::string full_name; - if(gCacheName->getFullName(agent_id, full_name)) - { - notify = TRUE; - args["NAME"] = full_name; - } + notify = TRUE; + args["NAME_SLURL"] = LLSLURL::buildCommand("agent", agent_id, "about"); } } else diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 855d109784..6004c9f309 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -66,6 +66,8 @@ static LLDefaultChildRegistry::Register<LLChatHistory> r("chat_history"); const static std::string NEW_LINE(rawstr_to_utf8("\n")); +const static U32 LENGTH_OF_TIME_STR = std::string("12:00").length(); + // support for secondlife:///app/objectim/{UUID}/ SLapps class LLObjectIMHandler : public LLCommandHandler { @@ -116,7 +118,7 @@ public: //*TODO remake it using mouse enter/leave and static LLHandle<LLIconCtrl> to add/remove as a child BOOL handleToolTip(S32 x, S32 y, MASK mask) { - LLViewerTextEditor* name = getChild<LLViewerTextEditor>("user_name"); + LLTextBase* name = getChild<LLTextBase>("user_name"); if (name && name->parentPointInView(x, y) && mAvatarID.notNull() && SYSTEM_FROM != mFrom) { @@ -257,7 +259,7 @@ public: mSourceType = CHAT_SOURCE_SYSTEM; } - LLTextEditor* userName = getChild<LLTextEditor>("user_name"); + LLTextBox* userName = getChild<LLTextBox>("user_name"); userName->setReadOnlyColor(style_params.readonly_color()); userName->setColor(style_params.color()); @@ -284,7 +286,12 @@ public: if(!chat.mFromID.isNull()) { + if(mSourceType != CHAT_SOURCE_AGENT) + icon->setValue(LLSD("OBJECT_Icon")); + else icon->setValue(chat.mFromID); + + } else if (userName->getValue().asString()==LLTrans::getString("SECOND_LIFE")) { @@ -295,7 +302,7 @@ public: /*virtual*/ void draw() { - LLTextEditor* user_name = getChild<LLTextEditor>("user_name"); + LLTextBox* user_name = getChild<LLTextBox>("user_name"); LLTextBox* time_box = getChild<LLTextBox>("time_box"); LLRect user_name_rect = user_name->getRect(); @@ -437,6 +444,7 @@ LLChatHistory::LLChatHistory(const LLChatHistory::Params& p) editor_params.rect = getLocalRect(); editor_params.follows.flags = FOLLOWS_ALL; editor_params.enabled = false; // read only + editor_params.show_context_menu = "true"; mEditor = LLUICtrlFactory::create<LLTextEditor>(editor_params, this); } @@ -531,6 +539,7 @@ void LLChatHistory::clear() void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LLStyle::Params& input_append_params) { bool use_plain_text_chat_history = args["use_plain_text_chat_history"].asBoolean(); + if (!mEditor->scrolledToEnd() && chat.mFromID != gAgent.getID() && !chat.mFromName.empty()) { mUnreadChatSources.insert(chat.mFromName); @@ -578,9 +587,16 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL bool irc_me = prefix == "/me " || prefix == "/me'"; // Delimiter after a name in header copy/past and in plain text mode - std::string delimiter = (chat.mChatType != CHAT_TYPE_SHOUT && chat.mChatType != CHAT_TYPE_WHISPER) - ? ": " - : " "; + std::string delimiter = ": "; + std::string shout = LLTrans::getString("shout"); + std::string whisper = LLTrans::getString("whisper"); + if (chat.mChatType == CHAT_TYPE_SHOUT || + chat.mChatType == CHAT_TYPE_WHISPER || + chat.mText.compare(0, shout.length(), shout) == 0 || + chat.mText.compare(0, whisper.length(), whisper) == 0) + { + delimiter = " "; + } // Don't add any delimiter after name in irc styled messages if (irc_me || chat.mChatStyle == CHAT_STYLE_IRC) @@ -589,6 +605,14 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL style_params.font.style = "ITALIC"; } + //*HACK we graying out chat history by graying out messages that contains full date in a time string + bool message_from_log = chat.mTimeStr.length() > LENGTH_OF_TIME_STR; + if (message_from_log) + { + style_params.color(LLColor4::grey); + style_params.readonly_color(LLColor4::grey); + } + if (use_plain_text_chat_history) { mEditor->appendText("[" + chat.mTimeStr + "] ", mEditor->getText().size() != 0, style_params); @@ -624,10 +648,10 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL mEditor->appendText("<nolink>" + chat.mFromName + "</nolink>" + delimiter, false, link_params); } - else if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() ) + else if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() && !message_from_log) { LLStyle::Params link_params(style_params); - link_params.fillFrom(LLStyleMap::instance().lookupAgent(chat.mFromID)); + link_params.overwriteFrom(LLStyleMap::instance().lookupAgent(chat.mFromID)); // Convert the name to a hotlink and add to message. mEditor->appendText(chat.mFromName + delimiter, false, link_params); } diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp index f772aea4bd..e164aa8fc4 100644 --- a/indra/newview/llchatitemscontainerctrl.cpp +++ b/indra/newview/llchatitemscontainerctrl.cpp @@ -321,7 +321,10 @@ void LLNearbyChatToastPanel::draw() if(icon) { icon->setDrawTooltip(mSourceType == CHAT_SOURCE_AGENT); - icon->setValue(mFromID); + if(mSourceType == CHAT_SOURCE_AGENT) + icon->setValue(mFromID); + else + icon->setValue(LLSD("OBJECT_Icon")); } mIsDirty = false; } diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index f646bcccb5..8efa814a2e 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -36,6 +36,7 @@ #include "llagent.h" #include "llavataractions.h" #include "llbottomtray.h" +#include "lleventtimer.h" #include "llgroupactions.h" #include "lliconctrl.h" #include "llimfloater.h" @@ -545,6 +546,7 @@ void LLIMChiclet::toggleSpeakerControl() } setRequiredWidth(); + mSpeakerCtrl->setSpeakerId(LLUUID::null); mSpeakerCtrl->setVisible(getShowSpeaker()); } @@ -954,7 +956,10 @@ LLIMGroupChiclet::~LLIMGroupChiclet() void LLIMGroupChiclet::draw() { - switchToCurrentSpeaker(); + if(getShowSpeaker()) + { + switchToCurrentSpeaker(); + } LLIMChiclet::draw(); } @@ -1154,10 +1159,10 @@ void im_chiclet_callback(LLChicletPanel* panel, const LLSD& data){ void object_chiclet_callback(const LLSD& data) { - LLUUID object_id = data["object_id"]; + LLUUID notification_id = data["notification_id"]; bool new_message = data["new_message"]; - std::list<LLChiclet*> chiclets = LLIMChiclet::sFindChicletsSignal(object_id); + std::list<LLChiclet*> chiclets = LLIMChiclet::sFindChicletsSignal(notification_id); std::list<LLChiclet *>::iterator iter; for (iter = chiclets.begin(); iter != chiclets.end(); iter++) { @@ -1889,12 +1894,8 @@ void LLScriptChiclet::setSessionId(const LLUUID& session_id) setShowNewMessagesIcon( getSessionId() != session_id ); LLIMChiclet::setSessionId(session_id); - LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(session_id); - LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id); - if(notification) - { - setToolTip(notification->getSubstitutions()["TITLE"].asString()); - } + + setToolTip(LLScriptFloaterManager::getObjectName(session_id)); } void LLScriptChiclet::setCounter(S32 counter) @@ -1943,13 +1944,10 @@ void LLInvOfferChiclet::setSessionId(const LLUUID& session_id) { setShowNewMessagesIcon( getSessionId() != session_id ); + setToolTip(LLScriptFloaterManager::getObjectName(session_id)); + LLIMChiclet::setSessionId(session_id); - LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(session_id); - LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id); - if(notification) - { - setToolTip(notification->getSubstitutions()["TITLE"].asString()); - } + LLNotificationPtr notification = LLNotifications::getInstance()->find(session_id); if ( notification && notification->getName() == INVENTORY_USER_OFFER ) { diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp index 00c05445e1..be6c15eab4 100644 --- a/indra/newview/llcurrencyuimanager.cpp +++ b/indra/newview/llcurrencyuimanager.cpp @@ -426,7 +426,7 @@ void LLCurrencyUIManager::Impl::prepare() LLLineEditor* lindenAmount = mPanel.getChild<LLLineEditor>("currency_amt"); if (lindenAmount) { - lindenAmount->setPrevalidate(LLLineEditor::prevalidateNonNegativeS32); + lindenAmount->setPrevalidate(LLTextValidate::validateNonNegativeS32); lindenAmount->setKeystrokeCallback(onCurrencyKey, this); } } diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index d60330024a..9fbc3408d7 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -1049,9 +1049,13 @@ LLSpatialBridge::LLSpatialBridge(LLDrawable* root, BOOL render_by_group, U32 dat llassert(mDrawable); llassert(mDrawable->getRegion()); - llassert(mDrawable->getRegion()->getSpatialPartition(mPartitionType)); + LLSpatialPartition *part = mDrawable->getRegion()->getSpatialPartition(mPartitionType); + llassert(part); - mDrawable->getRegion()->getSpatialPartition(mPartitionType)->put(this); + if (part) + { + part->put(this); + } } LLSpatialBridge::~LLSpatialBridge() @@ -1367,10 +1371,14 @@ BOOL LLSpatialBridge::updateMove() { llassert(mDrawable); llassert(mDrawable->getRegion()); - llassert(mDrawable->getRegion()->getSpatialPartition(mPartitionType)); + LLSpatialPartition* part = mDrawable->getRegion()->getSpatialPartition(mPartitionType); + llassert(part); mOctree->balance(); - mDrawable->getRegion()->getSpatialPartition(mPartitionType)->move(this, getSpatialGroup(), TRUE); + if (part) + { + part->move(this, getSpatialGroup(), TRUE); + } return TRUE; } diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index 6d77361414..7be6e82251 100644 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -180,6 +180,7 @@ void LLDrawPoolAlpha::render(S32 pass) if (LLPipeline::sFastAlpha && !deferred_render) { + LLGLDisable blend_disable(GL_BLEND); gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.33f); if (mVertexShaderLevel > 0) { diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp index 3961afe9af..830e975e8a 100644 --- a/indra/newview/lldriverparam.cpp +++ b/indra/newview/lldriverparam.cpp @@ -39,6 +39,7 @@ #include "llvoavatarself.h" #include "llagent.h" #include "llwearable.h" +#include "llagentwearables.h" //----------------------------------------------------------------------------- // LLDriverParamInfo @@ -431,6 +432,12 @@ const LLVector3* LLDriverParam::getNextDistortion(U32 *index, LLPolyMesh **poly_ } } + llassert(driven); + if (!driven) + { + return NULL; // shouldn't happen, but... + } + // We're already in the middle of a param's distortions, so get the next one. const LLVector3* v = driven->mParam->getNextDistortion( index, poly_mesh ); if( (!v) && (iter != mDriven.end()) ) @@ -528,6 +535,38 @@ void LLDriverParam::resetDrivenParams() mDriven.reserve(getInfo()->mDrivenInfoList.size()); } +void LLDriverParam::updateCrossDrivenParams(EWearableType driven_type) +{ + bool needs_update = (getWearableType()==driven_type); + + // if the driver has a driven entry for the passed-in wearable type, we need to refresh the value + for( entry_list_t::iterator iter = mDriven.begin(); iter != mDriven.end(); iter++ ) + { + LLDrivenEntry* driven = &(*iter); + if (driven && driven->mParam && driven->mParam->getCrossWearable() && driven->mParam->getWearableType() == driven_type) + { + needs_update = true; + } + } + + + if (needs_update) + { + EWearableType driver_type = (EWearableType)getWearableType(); + + // If we've gotten here, we've added a new wearable of type "type" + // Thus this wearable needs to get updates from the driver wearable. + // The call to setVisualParamWeight seems redundant, but is necessary + // as the number of driven wearables has changed since the last update. -Nyx + LLWearable *wearable = gAgentWearables.getTopWearable(driver_type); + if (wearable) + { + wearable->setVisualParamWeight(mID, wearable->getVisualParamWeight(mID), false); + } + } +} + + //----------------------------------------------------------------------------- // getDrivenWeight() //----------------------------------------------------------------------------- diff --git a/indra/newview/lldriverparam.h b/indra/newview/lldriverparam.h index 4e2daf5ba7..e963a2d55a 100644 --- a/indra/newview/lldriverparam.h +++ b/indra/newview/lldriverparam.h @@ -34,6 +34,7 @@ #define LL_LLDRIVERPARAM_H #include "llviewervisualparam.h" +#include "llwearabledictionary.h" class LLVOAvatar; class LLWearable; @@ -93,6 +94,7 @@ public: void setWearable(LLWearable *wearablep); void setAvatar(LLVOAvatar *avatarp); + void updateCrossDrivenParams(EWearableType driven_type); /*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable) const; @@ -112,6 +114,7 @@ public: /*virtual*/ LLVector3 getVertexDistortion(S32 index, LLPolyMesh *poly_mesh); /*virtual*/ const LLVector3* getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh); /*virtual*/ const LLVector3* getNextDistortion(U32 *index, LLPolyMesh **poly_mesh); + protected: F32 getDrivenWeight(const LLDrivenEntry* driven, F32 input_weight); void setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight, bool upload_bake); diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp index eca9f8aba2..cc4e1a1868 100644 --- a/indra/newview/lleventpoll.cpp +++ b/indra/newview/lleventpoll.cpp @@ -39,7 +39,7 @@ #include "llhttpclient.h" #include "llhttpstatuscodes.h" #include "llsdserialize.h" -#include "lltimer.h" +#include "lleventtimer.h" #include "llviewerregion.h" #include "message.h" #include "lltrans.h" diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 965ac1cad0..c0a3eb1316 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -301,7 +301,8 @@ void LLFace::switchTexture(LLViewerTexture* new_texture) if(!new_texture) { - llerrs << "Can not switch to a null texture." << llendl ; + llerrs << "Can not switch to a null texture." << llendl; + return; } new_texture->addTextureStats(mTexture->getMaxVirtualSize()) ; @@ -1040,17 +1041,20 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, if (rebuild_color) { - GLfloat alpha[4] = - { - 0.00f, - 0.25f, - 0.5f, - 0.75f - }; - - if (getPoolType() != LLDrawPool::POOL_ALPHA && (LLPipeline::sRenderDeferred || (LLPipeline::sRenderBump && tep->getShiny()))) + if (tep) { - color.mV[3] = U8 (alpha[tep->getShiny()] * 255); + GLfloat alpha[4] = + { + 0.00f, + 0.25f, + 0.5f, + 0.75f + }; + + if (getPoolType() != LLDrawPool::POOL_ALPHA && (LLPipeline::sRenderDeferred || (LLPipeline::sRenderBump && tep->getShiny()))) + { + color.mV[3] = U8 (alpha[tep->getShiny()] * 255); + } } } @@ -1323,6 +1327,21 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, return TRUE; } +//check if the face has a media +BOOL LLFace::hasMedia() const +{ + if(mHasMedia) + { + return TRUE ; + } + if(mTexture.notNull()) + { + return mTexture->hasParcelMedia() ; //if has a parcel media + } + + return FALSE ; //no media. +} + const F32 LEAST_IMPORTANCE = 0.05f ; const F32 LEAST_IMPORTANCE_FOR_LARGE_IMAGE = 0.3f ; @@ -1332,7 +1351,7 @@ F32 LLFace::getTextureVirtualSize() F32 cos_angle_to_view_dir; mPixelArea = calcPixelArea(cos_angle_to_view_dir, radius); - if (mPixelArea <= 0) + if (mPixelArea < 0.0001f) { return 0.f; } @@ -1377,14 +1396,38 @@ F32 LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) { //get area of circle around face LLVector3 center = getPositionAgent(); - LLVector3 size = (mExtents[1] - mExtents[0]) * 0.5f; - + LLVector3 size = (mExtents[1] - mExtents[0]) * 0.5f; LLViewerCamera* camera = LLViewerCamera::getInstance(); + + //if has media, check if the face is out of the view frustum. + BOOL has_media = hasMedia() ; + if(has_media && !camera->AABBInFrustum(center, size)) + { + mImportanceToCamera = 0.f ; + return 0.f ; + } + + F32 size_squared = size.lengthSquared() ; LLVector3 lookAt = center - camera->getOrigin(); F32 dist = lookAt.normVec() ; + cos_angle_to_view_dir = lookAt * camera->getXAxis() ; + if(has_media) + { + if(cos_angle_to_view_dir > camera->getCosHalfFov()) //the center is within the view frustum + { + cos_angle_to_view_dir = 1.0f ; + } + else + { + if(dist * dist * (lookAt - camera->getXAxis()).lengthSquared() < size_squared) + { + cos_angle_to_view_dir = 1.0f ; + } + } + } //get area of circle around node - F32 app_angle = atanf(size.length()/dist); + F32 app_angle = atanf(fsqrtf(size_squared) / dist); radius = app_angle*LLDrawable::sCurPixelAngle; F32 face_area = radius*radius * 3.14159f; @@ -1394,8 +1437,7 @@ F32 LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) mImportanceToCamera = 1.0f ; } else - { - cos_angle_to_view_dir = lookAt * camera->getXAxis() ; + { mImportanceToCamera = LLFace::calcImportanceToCamera(cos_angle_to_view_dir, dist) ; } diff --git a/indra/newview/llface.h b/indra/newview/llface.h index e12b64a2f2..bf658dc00c 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -194,6 +194,9 @@ public: F32 getTextureVirtualSize() ; F32 getImportanceToCamera()const {return mImportanceToCamera ;} + void setHasMedia(bool has_media) { mHasMedia = has_media ;} + BOOL hasMedia() const ; + //for atlas LLTextureAtlasSlot* getAtlasInfo() ; void setAtlasInUse(BOOL flag); @@ -262,7 +265,7 @@ private: //based on the distance from the face to the view point and the angle from the face center to the view direction. F32 mImportanceToCamera ; F32 mBoundingSphereRadius ; - + bool mHasMedia ; //atlas LLPointer<LLTextureAtlasSlot> mAtlasInfop ; diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index a5b62439f4..bf7c735488 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -34,7 +34,6 @@ #include "llfavoritesbar.h" -#include "llbutton.h" #include "llfloaterreg.h" #include "llfocusmgr.h" #include "llinventory.h" @@ -48,7 +47,6 @@ #include "llclipboard.h" #include "llinventoryclipboard.h" #include "llinventorybridge.h" -#include "llinventorymodel.h" #include "llfloaterworldmap.h" #include "lllandmarkactions.h" #include "llnotificationsutil.h" @@ -300,6 +298,20 @@ public: return TRUE; } + void setVisible(BOOL b) + { + // Overflow menu shouldn't hide when it still has focus. See EXT-4217. + if (!b && hasFocus()) + return; + LLToggleableMenu::setVisible(b); + setFocus(b); + } + + void onFocusLost() + { + setVisible(FALSE); + } + protected: LLFavoriteLandmarkToggleableMenu(const LLToggleableMenu::Params& p): LLToggleableMenu(p) @@ -630,8 +642,8 @@ void LLFavoritesBarCtrl::draw() if (mShowDragMarker) { - S32 w = mImageDragIndication->getWidth() / 2; - S32 h = mImageDragIndication->getHeight() / 2; + S32 w = mImageDragIndication->getWidth(); + S32 h = mImageDragIndication->getHeight(); if (mLandingTab) { @@ -674,7 +686,14 @@ void LLFavoritesBarCtrl::updateButtons() { return; } - + if(mItems.empty()) + { + mBarLabel->setVisible(TRUE); + } + else + { + mBarLabel->setVisible(FALSE); + } const child_list_t* childs = getChildList(); child_list_const_iter_t child_it = childs->begin(); int first_changed_item_index = 0; @@ -720,14 +739,22 @@ void LLFavoritesBarCtrl::updateButtons() } } // we have to remove ChevronButton to make sure that the last item will be LandmarkButton to get the right aligning + // keep in mind that we are cutting all buttons in space between the last visible child of favbar and ChevronButton if (mChevronButton->getParent() == this) { removeChild(mChevronButton); } int last_right_edge = 0; + //calculate new buttons offset if (getChildList()->size() > 0) { - last_right_edge = getChildList()->back()->getRect().mRight; + //find last visible child to get the rightest button offset + child_list_const_reverse_iter_t last_visible_it = std::find_if(childs->rbegin(), childs->rend(), + std::mem_fun(&LLView::getVisible)); + if(last_visible_it != childs->rend()) + { + last_right_edge = (*last_visible_it)->getRect().mRight; + } } //last_right_edge is saving coordinates LLButton* last_new_button = NULL; @@ -764,6 +791,15 @@ void LLFavoritesBarCtrl::updateButtons() mChevronButton->setRect(rect); mChevronButton->setVisible(TRUE); } + // Update overflow menu + LLToggleableMenu* overflow_menu = static_cast <LLToggleableMenu*> (mPopupMenuHandle.get()); + if (overflow_menu && overflow_menu->getVisible()) + { + overflow_menu->setFocus(FALSE); + overflow_menu->setVisible(FALSE); + if (mUpdateDropDownItems) + showDropDownMenu(); + } } else { @@ -879,6 +915,8 @@ void LLFavoritesBarCtrl::showDropDownMenu() if (menu) { + // Release focus to allow changing of visibility. + menu->setFocus(FALSE); if (!menu->toggleVisibility()) return; @@ -1226,8 +1264,11 @@ LLInventoryModel::item_array_t::iterator LLFavoritesBarCtrl::findItemByUUID(LLIn void LLFavoritesBarCtrl::insertBeforeItem(LLInventoryModel::item_array_t& items, const LLUUID& beforeItemId, LLViewerInventoryItem* insertedItem) { LLViewerInventoryItem* beforeItem = gInventory.getItem(beforeItemId); - - items.insert(findItemByUUID(items, beforeItem->getUUID()), insertedItem); + llassert(beforeItem); + if (beforeItem) + { + items.insert(findItemByUUID(items, beforeItem->getUUID()), insertedItem); + } } // EOF diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index fb724f30e0..fbb90c69f3 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -287,6 +287,7 @@ BOOL LLFeatureManager::loadFeatureTables() if (!flp) { LL_ERRS("RenderInit") << "Specified parameter before <list> keyword!" << LL_ENDL; + return FALSE; } S32 available; F32 recommended; diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index 9496e94780..ecb6254f8a 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -65,7 +65,7 @@ public: LLPanelCameraZoom(); /* virtual */ BOOL postBuild(); - /* virtual */ void onOpen(const LLSD& key); + /* virtual */ void draw(); protected: void onZoomPlusHeldDown(); @@ -73,7 +73,6 @@ protected: void onSliderValueChanged(); private: - F32 mSavedSliderVal; LLButton* mPlusBtn; LLButton* mMinusBtn; LLSlider* mSlider; @@ -88,8 +87,7 @@ static LLRegisterPanelClassWrapper<LLPanelCameraZoom> t_camera_zoom_panel("camer LLPanelCameraZoom::LLPanelCameraZoom() : mPlusBtn( NULL ), mMinusBtn( NULL ), - mSlider( NULL ), - mSavedSliderVal(0.f) + mSlider( NULL ) { mCommitCallbackRegistrar.add("Zoom.minus", boost::bind(&LLPanelCameraZoom::onZoomPlusHeldDown, this)); mCommitCallbackRegistrar.add("Zoom.plus", boost::bind(&LLPanelCameraZoom::onZoomMinusHeldDown, this)); @@ -101,16 +99,13 @@ BOOL LLPanelCameraZoom::postBuild() mPlusBtn = getChild <LLButton> ("zoom_plus_btn"); mMinusBtn = getChild <LLButton> ("zoom_minus_btn"); mSlider = getChild <LLSlider> ("zoom_slider"); - mSlider->setMinValue(.0f); - mSlider->setMaxValue(8.f); return LLPanel::postBuild(); } -void LLPanelCameraZoom::onOpen(const LLSD& key) +void LLPanelCameraZoom::draw() { - LLVector3d to_focus = gAgent.getPosGlobalFromAgent(LLViewerCamera::getInstance()->getOrigin()) - gAgent.calcFocusPositionTargetGlobal(); - mSavedSliderVal = 8.f - (F32)to_focus.magVec(); // maximum minus current - mSlider->setValue( mSavedSliderVal ); + mSlider->setValue(gAgent.getCameraZoomFraction()); + LLPanel::draw(); } void LLPanelCameraZoom::onZoomPlusHeldDown() @@ -135,13 +130,8 @@ void LLPanelCameraZoom::onZoomMinusHeldDown() void LLPanelCameraZoom::onSliderValueChanged() { - F32 val = mSlider->getValueF32(); - F32 rate = val - mSavedSliderVal; - - gAgent.unlockView(); - gAgent.cameraOrbitIn(rate); - - mSavedSliderVal = val; + F32 zoom_level = mSlider->getValueF32(); + gAgent.setCameraZoomFraction(zoom_level); } void activate_camera_tool() diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp index 73b79d8e13..b65457c4eb 100644 --- a/indra/newview/llfloatercolorpicker.cpp +++ b/indra/newview/llfloatercolorpicker.cpp @@ -586,7 +586,7 @@ void LLFloaterColorPicker::draw() gl_triangle_2d ( startX, startY, startX + mLumMarkerSize, startY - mLumMarkerSize, startX + mLumMarkerSize, startY + mLumMarkerSize, - LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ), TRUE ); + LLColor4 ( 0.75f, 0.75f, 0.75f, 1.0f ), TRUE ); // draw luminance slider outline gl_rect_2d ( mLumRegionLeft, diff --git a/indra/newview/llfloaterfriends.cpp b/indra/newview/llfloaterfriends.cpp index ccc5cab85a..4e2633d750 100644 --- a/indra/newview/llfloaterfriends.cpp +++ b/indra/newview/llfloaterfriends.cpp @@ -58,7 +58,7 @@ #include "llmenucommands.h" #include "llviewercontrol.h" #include "llviewermessage.h" -#include "lltimer.h" +#include "lleventtimer.h" #include "lltextbox.h" #include "llvoiceclient.h" diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp index b684e1f985..90617a337a 100644 --- a/indra/newview/llfloatergesture.cpp +++ b/indra/newview/llfloatergesture.cpp @@ -427,8 +427,13 @@ void LLFloaterGesture::onClickPlay() BOOL inform_server = TRUE; BOOL deactivate_similar = FALSE; LLGestureManager::instance().setGestureLoadedCallback(item_id, boost::bind(&LLFloaterGesture::playGesture, this, item_id)); - LLGestureManager::instance().activateGestureWithAsset(item_id, gInventory.getItem(item_id)->getAssetUUID(), inform_server, deactivate_similar); - LL_DEBUGS("Gesture")<< "Activating gesture with inventory ID: " << item_id <<LL_ENDL; + LLViewerInventoryItem *item = gInventory.getItem(item_id); + llassert(item); + if (item) + { + LLGestureManager::instance().activateGestureWithAsset(item_id, item->getAssetUUID(), inform_server, deactivate_similar); + LL_DEBUGS("Gesture")<< "Activating gesture with inventory ID: " << item_id <<LL_ENDL; + } } else { @@ -510,15 +515,16 @@ void LLFloaterGesture::onCopyPasteAction(const LLSD& command) if(ids.empty() || !gInventory.isCategoryComplete(mGestureFolderID)) return; LLInventoryCategory* gesture_dir = gInventory.getCategory(mGestureFolderID); + llassert(gesture_dir); LLPointer<GestureCopiedCallback> cb = new GestureCopiedCallback(this); for(LLDynamicArray<LLUUID>::iterator it = ids.begin(); it != ids.end(); it++) { LLInventoryItem* item = gInventory.getItem(*it); - LLStringUtil::format_map_t string_args; - string_args["[COPY_NAME]"] = item->getName(); - if(item && item->getInventoryType() == LLInventoryType::IT_GESTURE) + if(gesture_dir && item && item->getInventoryType() == LLInventoryType::IT_GESTURE) { + LLStringUtil::format_map_t string_args; + string_args["[COPY_NAME]"] = item->getName(); LL_DEBUGS("Gesture")<< "Copying gesture " << item->getName() << " "<< item->getUUID() << " into " << gesture_dir->getName() << " "<< gesture_dir->getUUID() << LL_ENDL; copy_inventory_item(gAgent.getID(), item->getPermissions().getOwner(), item->getUUID(), diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp index c2b0bd18fa..5294f09e64 100644 --- a/indra/newview/llfloatergodtools.cpp +++ b/indra/newview/llfloatergodtools.cpp @@ -414,17 +414,17 @@ LLPanelRegionTools::LLPanelRegionTools() BOOL LLPanelRegionTools::postBuild() { getChild<LLLineEditor>("region name")->setKeystrokeCallback(onChangeSimName, this); - childSetPrevalidate("region name", &LLLineEditor::prevalidateASCIIPrintableNoPipe); - childSetPrevalidate("estate", &LLLineEditor::prevalidatePositiveS32); - childSetPrevalidate("parentestate", &LLLineEditor::prevalidatePositiveS32); + childSetPrevalidate("region name", &LLTextValidate::validateASCIIPrintableNoPipe); + childSetPrevalidate("estate", &LLTextValidate::validatePositiveS32); + childSetPrevalidate("parentestate", &LLTextValidate::validatePositiveS32); childDisable("parentestate"); - childSetPrevalidate("gridposx", &LLLineEditor::prevalidatePositiveS32); + childSetPrevalidate("gridposx", &LLTextValidate::validatePositiveS32); childDisable("gridposx"); - childSetPrevalidate("gridposy", &LLLineEditor::prevalidatePositiveS32); + childSetPrevalidate("gridposy", &LLTextValidate::validatePositiveS32); childDisable("gridposy"); - childSetPrevalidate("redirectx", &LLLineEditor::prevalidatePositiveS32); - childSetPrevalidate("redirecty", &LLLineEditor::prevalidatePositiveS32); + childSetPrevalidate("redirectx", &LLTextValidate::validatePositiveS32); + childSetPrevalidate("redirecty", &LLTextValidate::validatePositiveS32); return TRUE; } diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 4f73146085..f09459d5db 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -353,7 +353,7 @@ BOOL LLPanelLandGeneral::postBuild() { mEditName = getChild<LLLineEditor>("Name"); mEditName->setCommitCallback(onCommitAny, this); - childSetPrevalidate("Name", LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("Name", LLTextValidate::validateASCIIPrintableNoPipe); mEditDesc = getChild<LLTextEditor>("Description"); mEditDesc->setCommitOnFocusLost(TRUE); @@ -1111,7 +1111,7 @@ BOOL LLPanelLandObjects::postBuild() mCleanOtherObjectsTime->setFocusLostCallback(boost::bind(onLostFocus, _1, this)); mCleanOtherObjectsTime->setCommitCallback(onCommitClean, this); - childSetPrevalidate("clean other time", LLLineEditor::prevalidateNonNegativeS32); + childSetPrevalidate("clean other time", LLTextValidate::validateNonNegativeS32); mBtnRefresh = getChild<LLButton>("Refresh List"); mBtnRefresh->setClickedCallback(onClickRefresh, this); diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp index 976af121ae..62ec17f89a 100644 --- a/indra/newview/llfloatermediasettings.cpp +++ b/indra/newview/llfloatermediasettings.cpp @@ -149,13 +149,14 @@ void LLFloaterMediaSettings::apply() { LLSD settings; sInstance->mPanelMediaSettingsGeneral->preApply(); - sInstance->mPanelMediaSettingsGeneral->getValues( settings ); + sInstance->mPanelMediaSettingsGeneral->getValues( settings, false ); sInstance->mPanelMediaSettingsSecurity->preApply(); - sInstance->mPanelMediaSettingsSecurity->getValues( settings ); + sInstance->mPanelMediaSettingsSecurity->getValues( settings, false ); sInstance->mPanelMediaSettingsPermissions->preApply(); - sInstance->mPanelMediaSettingsPermissions->getValues( settings ); - LLSelectMgr::getInstance()->selectionSetMedia( LLTextureEntry::MF_HAS_MEDIA ); - LLSelectMgr::getInstance()->selectionSetMediaData(settings); + sInstance->mPanelMediaSettingsPermissions->getValues( settings, false ); + + LLSelectMgr::getInstance()->selectionSetMedia( LLTextureEntry::MF_HAS_MEDIA, settings ); + sInstance->mPanelMediaSettingsGeneral->postApply(); sInstance->mPanelMediaSettingsSecurity->postApply(); sInstance->mPanelMediaSettingsPermissions->postApply(); @@ -176,6 +177,8 @@ void LLFloaterMediaSettings::onClose(bool app_quitting) //static void LLFloaterMediaSettings::initValues( const LLSD& media_settings, bool editable ) { + if (sInstance->hasFocus()) return; + sInstance->clearValues(editable); // update all panels with values from simulator sInstance->mPanelMediaSettingsGeneral-> @@ -204,7 +207,7 @@ void LLFloaterMediaSettings::commitFields() if (hasFocus()) { LLUICtrl* cur_focus = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus()); - if (cur_focus->acceptsTextInput()) + if (cur_focus && cur_focus->acceptsTextInput()) { cur_focus->onCommit(); }; diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp index 810761e034..159ce41b79 100644 --- a/indra/newview/llfloaternamedesc.cpp +++ b/indra/newview/llfloaternamedesc.cpp @@ -111,7 +111,7 @@ BOOL LLFloaterNameDesc::postBuild() if (NameEditor) { NameEditor->setMaxTextLength(DB_INV_ITEM_NAME_STR_LEN); - NameEditor->setPrevalidate(&LLLineEditor::prevalidateASCIIPrintableNoPipe); + NameEditor->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); } y -= llfloor(PREVIEW_LINE_HEIGHT * 1.2f); @@ -123,7 +123,7 @@ BOOL LLFloaterNameDesc::postBuild() if (DescEditor) { DescEditor->setMaxTextLength(DB_INV_ITEM_DESC_STR_LEN); - DescEditor->setPrevalidate(&LLLineEditor::prevalidateASCIIPrintableNoPipe); + DescEditor->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); } y -= llfloor(PREVIEW_LINE_HEIGHT * 1.2f); diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp index 90db8988b2..94b5ebba00 100644 --- a/indra/newview/llfloaternotificationsconsole.cpp +++ b/indra/newview/llfloaternotificationsconsole.cpp @@ -112,10 +112,15 @@ void LLNotificationChannelPanel::onClickNotification(void* user_data) { LLNotificationChannelPanel* self = (LLNotificationChannelPanel*)user_data; if (!self) return; - void* data = self->getChild<LLScrollListCtrl>("notifications_list")->getFirstSelected()->getUserdata(); - if (data) + LLScrollListItem* firstselected = self->getChild<LLScrollListCtrl>("notifications_list")->getFirstSelected(); + llassert(firstselected); + if (firstselected) { - gFloaterView->getParentFloater(self)->addDependentFloater(new LLFloaterNotification((LLNotification*)data), TRUE); + void* data = firstselected->getUserdata(); + if (data) + { + gFloaterView->getParentFloater(self)->addDependentFloater(new LLFloaterNotification((LLNotification*)data), TRUE); + } } } @@ -124,10 +129,15 @@ void LLNotificationChannelPanel::onClickNotificationReject(void* user_data) { LLNotificationChannelPanel* self = (LLNotificationChannelPanel*)user_data; if (!self) return; - void* data = self->getChild<LLScrollListCtrl>("notification_rejects_list")->getFirstSelected()->getUserdata(); - if (data) + LLScrollListItem* firstselected = self->getChild<LLScrollListCtrl>("notification_rejects_list")->getFirstSelected(); + llassert(firstselected); + if (firstselected) { - gFloaterView->getParentFloater(self)->addDependentFloater(new LLFloaterNotification((LLNotification*)data), TRUE); + void* data = firstselected->getUserdata(); + if (data) + { + gFloaterView->getParentFloater(self)->addDependentFloater(new LLFloaterNotification((LLNotification*)data), TRUE); + } } } diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp index bdfce36737..7dbcc9555c 100644 --- a/indra/newview/llfloaterpay.cpp +++ b/indra/newview/llfloaterpay.cpp @@ -201,7 +201,7 @@ BOOL LLFloaterPay::postBuild() getChild<LLLineEditor>("amount")->setKeystrokeCallback(&LLFloaterPay::onKeystroke, this); childSetText("amount", last_amount); - childSetPrevalidate("amount", LLLineEditor::prevalidateNonNegativeS32); + childSetPrevalidate("amount", LLTextValidate::validateNonNegativeS32); info = new LLGiveMoneyInfo(this, 0); mCallbackData.push_back(info); @@ -438,7 +438,7 @@ void LLFloaterPay::finishPayUI(const LLUUID& target_id, BOOL is_group) slurl = LLSLURL::buildCommand("agent", target_id, "inspect"); } childSetText("payee_name", slurl); - + // Make sure the amount field has focus childSetFocus("amount", TRUE); diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index ef444c8ba4..43111d76f7 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -110,8 +110,6 @@ const F32 MAX_USER_FAR_CLIP = 512.f; const F32 MIN_USER_FAR_CLIP = 64.f; -const S32 ASPECT_RATIO_STR_LEN = 100; - class LLVoiceSetKeyDialog : public LLModalDialog { public: @@ -283,7 +281,6 @@ void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator) } // static std::string LLFloaterPreference::sSkin = ""; -F32 LLFloaterPreference::sAspectRatio = 0.0; ////////////////////////////////////////////// // LLFloaterPreference @@ -324,11 +321,9 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key) mCommitCallbackRegistrar.add("Pref.VertexShaderEnable", boost::bind(&LLFloaterPreference::onVertexShaderEnable, this)); mCommitCallbackRegistrar.add("Pref.WindowedMod", boost::bind(&LLFloaterPreference::onCommitWindowedMode, this)); mCommitCallbackRegistrar.add("Pref.UpdateSliderText", boost::bind(&LLFloaterPreference::onUpdateSliderText,this, _1,_2)); - mCommitCallbackRegistrar.add("Pref.AutoDetectAspect", boost::bind(&LLFloaterPreference::onCommitAutoDetectAspect, this)); mCommitCallbackRegistrar.add("Pref.ParcelMediaAutoPlayEnable", boost::bind(&LLFloaterPreference::onCommitParcelMediaAutoPlayEnable, this)); mCommitCallbackRegistrar.add("Pref.MediaEnabled", boost::bind(&LLFloaterPreference::onCommitMediaEnabled, this)); mCommitCallbackRegistrar.add("Pref.MusicEnabled", boost::bind(&LLFloaterPreference::onCommitMusicEnabled, this)); - mCommitCallbackRegistrar.add("Pref.onSelectAspectRatio", boost::bind(&LLFloaterPreference::onKeystrokeAspectRatio, this)); mCommitCallbackRegistrar.add("Pref.QualityPerformance", boost::bind(&LLFloaterPreference::onChangeQuality, this, _2)); mCommitCallbackRegistrar.add("Pref.applyUIColor", boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2)); mCommitCallbackRegistrar.add("Pref.getUIColor", boost::bind(&LLFloaterPreference::getUIColor, this ,_1, _2)); @@ -359,12 +354,7 @@ BOOL LLFloaterPreference::postBuild() LLFloaterPreference::~LLFloaterPreference() { // clean up user data - LLComboBox* ctrl_aspect_ratio = getChild<LLComboBox>( "aspect_ratio"); LLComboBox* ctrl_window_size = getChild<LLComboBox>("windowsize combo"); - for (S32 i = 0; i < ctrl_aspect_ratio->getItemCount(); i++) - { - ctrl_aspect_ratio->setCurrentByIndex(i); - } for (S32 i = 0; i < ctrl_window_size->getItemCount(); i++) { ctrl_window_size->setCurrentByIndex(i); @@ -514,8 +504,6 @@ void LLFloaterPreference::cancel() LLFloaterReg::hideInstance("pref_voicedevicesettings"); - gSavedSettings.setF32("FullScreenAspectRatio", sAspectRatio); - } void LLFloaterPreference::onOpen(const LLSD& key) @@ -571,6 +559,16 @@ void LLFloaterPreference::setHardwareDefaults() { LLFeatureManager::getInstance()->applyRecommendedSettings(); refreshEnabledGraphics(); + LLTabContainer* tabcontainer = getChild<LLTabContainer>("pref core"); + child_list_t::const_iterator iter = tabcontainer->getChildList()->begin(); + child_list_t::const_iterator end = tabcontainer->getChildList()->end(); + for ( ; iter != end; ++iter) + { + LLView* view = *iter; + LLPanelPreference* panel = dynamic_cast<LLPanelPreference*>(view); + if (panel) + panel->setHardwareDefaults(); + } } //virtual @@ -592,7 +590,7 @@ void LLFloaterPreference::onBtnOK() if (hasFocus()) { LLUICtrl* cur_focus = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus()); - if (cur_focus->acceptsTextInput()) + if (cur_focus && cur_focus->acceptsTextInput()) { cur_focus->onCommit(); } @@ -625,7 +623,7 @@ void LLFloaterPreference::onBtnApply( ) if (hasFocus()) { LLUICtrl* cur_focus = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus()); - if (cur_focus->acceptsTextInput()) + if (cur_focus && cur_focus->acceptsTextInput()) { cur_focus->onCommit(); } @@ -642,7 +640,7 @@ void LLFloaterPreference::onBtnCancel() if (hasFocus()) { LLUICtrl* cur_focus = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus()); - if (cur_focus->acceptsTextInput()) + if (cur_focus && cur_focus->acceptsTextInput()) { cur_focus->onCommit(); } @@ -958,37 +956,6 @@ void LLFloaterPreference::disableUnavailableSettings() } } -void LLFloaterPreference::onCommitAutoDetectAspect() -{ - BOOL auto_detect = getChild<LLCheckBoxCtrl>("aspect_auto_detect")->get(); - F32 ratio; - - if (auto_detect) - { - S32 numerator = 0; - S32 denominator = 0; - - // clear any aspect ratio override - gViewerWindow->mWindow->setNativeAspectRatio(0.f); - fractionFromDecimal(gViewerWindow->mWindow->getNativeAspectRatio(), numerator, denominator); - - std::string aspect; - if (numerator != 0) - { - aspect = llformat("%d:%d", numerator, denominator); - } - else - { - aspect = llformat("%.3f", gViewerWindow->mWindow->getNativeAspectRatio()); - } - - getChild<LLComboBox>( "aspect_ratio")->setLabel(aspect); - - ratio = gViewerWindow->mWindow->getNativeAspectRatio(); - gSavedSettings.setF32("FullScreenAspectRatio", ratio); - } -} - void LLFloaterPreference::onCommitParcelMediaAutoPlayEnable() { BOOL autoplay = getChild<LLCheckBoxCtrl>("autoplay_enabled")->get(); @@ -1256,56 +1223,9 @@ void LLFloaterPreference::updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_b } } -void LLFloaterPreference::onKeystrokeAspectRatio() -{ - getChild<LLCheckBoxCtrl>("aspect_auto_detect")->set(FALSE); -} - void LLFloaterPreference::applyResolution() { - LLComboBox* ctrl_aspect_ratio = getChild<LLComboBox>( "aspect_ratio"); gGL.flush(); - char aspect_ratio_text[ASPECT_RATIO_STR_LEN]; /*Flawfinder: ignore*/ - if (ctrl_aspect_ratio->getCurrentIndex() == -1) - { - // *Can't pass const char* from c_str() into strtok - strncpy(aspect_ratio_text, ctrl_aspect_ratio->getSimple().c_str(), sizeof(aspect_ratio_text) -1); /*Flawfinder: ignore*/ - aspect_ratio_text[sizeof(aspect_ratio_text) -1] = '\0'; - char *element = strtok(aspect_ratio_text, ":/\\"); - if (!element) - { - sAspectRatio = 0.f; // will be clamped later - } - else - { - LLLocale locale(LLLocale::USER_LOCALE); - sAspectRatio = (F32)atof(element); - } - - // look for denominator - element = strtok(NULL, ":/\\"); - if (element) - { - LLLocale locale(LLLocale::USER_LOCALE); - - F32 denominator = (F32)atof(element); - if (denominator != 0.f) - { - sAspectRatio /= denominator; - } - } - } - else - { - sAspectRatio = (F32)ctrl_aspect_ratio->getValue().asReal(); - } - - // presumably, user entered a non-numeric value if aspect_ratio == 0.f - if (sAspectRatio != 0.f) - { - sAspectRatio = llclamp(sAspectRatio, 0.2f, 5.f); - gSavedSettings.setF32("FullScreenAspectRatio", sAspectRatio); - } // Screen resolution S32 num_resolutions; @@ -1383,48 +1303,6 @@ BOOL LLPanelPreference::postBuild() childSetText("email_address",getString("log_in_to_change") ); // childSetText("busy_response", getString("log_in_to_change")); } - - - if(hasChild("aspect_ratio")) - { - // We used to set up fullscreen resolution and window size - // controls here, see LLFloaterWindowSize::initWindowSizeControls() - - if (gSavedSettings.getBOOL("FullScreenAutoDetectAspectRatio")) - { - LLFloaterPreference::sAspectRatio = gViewerWindow->getDisplayAspectRatio(); - } - else - { - LLFloaterPreference::sAspectRatio = gSavedSettings.getF32("FullScreenAspectRatio"); - } - - getChild<LLComboBox>("aspect_ratio")->setTextEntryCallback(boost::bind(&LLPanelPreference::setControlFalse, this, LLSD("FullScreenAutoDetectAspectRatio") )); - - - S32 numerator = 0; - S32 denominator = 0; - fractionFromDecimal(LLFloaterPreference::sAspectRatio, numerator, denominator); - - LLUIString aspect_ratio_text = getString("aspect_ratio_text"); - if (numerator != 0) - { - aspect_ratio_text.setArg("[NUM]", llformat("%d", numerator)); - aspect_ratio_text.setArg("[DEN]", llformat("%d", denominator)); - } - else - { - aspect_ratio_text = llformat("%.3f", LLFloaterPreference::sAspectRatio); - } - - LLComboBox* ctrl_aspect_ratio = getChild<LLComboBox>( "aspect_ratio"); - //mCtrlAspectRatio->setCommitCallback(onSelectAspectRatio, this); - // add default aspect ratios - ctrl_aspect_ratio->add(aspect_ratio_text, &LLFloaterPreference::sAspectRatio, ADD_TOP); - ctrl_aspect_ratio->setCurrentByIndex(0); - - refresh(); - } //////////////////////PanelPrivacy /////////////////// if (hasChild("media_enabled")) @@ -1525,3 +1403,93 @@ void LLPanelPreference::setControlFalse(const LLSD& user_data) if (control) control->set(LLSD(FALSE)); } + +static LLRegisterPanelClassWrapper<LLPanelPreferenceGraphics> t_pref_graph("panel_preference_graphics"); + +BOOL LLPanelPreferenceGraphics::postBuild() +{ + return LLPanelPreference::postBuild(); +} +void LLPanelPreferenceGraphics::draw() +{ + LLPanelPreference::draw(); + + LLButton* button_apply = findChild<LLButton>("Apply"); + + if(button_apply && button_apply->getVisible()) + { + bool enable = hasDirtyChilds(); + + button_apply->setEnabled(enable); + + } +} +bool LLPanelPreferenceGraphics::hasDirtyChilds() +{ + std::list<LLView*> view_stack; + view_stack.push_back(this); + while(!view_stack.empty()) + { + // Process view on top of the stack + LLView* curview = view_stack.front(); + view_stack.pop_front(); + + LLUICtrl* ctrl = dynamic_cast<LLUICtrl*>(curview); + if (ctrl) + { + if(ctrl->isDirty()) + return true; + } + // Push children onto the end of the work stack + for (child_list_t::const_iterator iter = curview->getChildList()->begin(); + iter != curview->getChildList()->end(); ++iter) + { + view_stack.push_back(*iter); + } + } + return false; +} + +void LLPanelPreferenceGraphics::resetDirtyChilds() +{ + std::list<LLView*> view_stack; + view_stack.push_back(this); + while(!view_stack.empty()) + { + // Process view on top of the stack + LLView* curview = view_stack.front(); + view_stack.pop_front(); + + LLUICtrl* ctrl = dynamic_cast<LLUICtrl*>(curview); + if (ctrl) + { + ctrl->resetDirty(); + } + // Push children onto the end of the work stack + for (child_list_t::const_iterator iter = curview->getChildList()->begin(); + iter != curview->getChildList()->end(); ++iter) + { + view_stack.push_back(*iter); + } + } +} +void LLPanelPreferenceGraphics::apply() +{ + resetDirtyChilds(); + LLPanelPreference::apply(); +} +void LLPanelPreferenceGraphics::cancel() +{ + resetDirtyChilds(); + LLPanelPreference::cancel(); +} +void LLPanelPreferenceGraphics::saveSettings() +{ + resetDirtyChilds(); + LLPanelPreference::saveSettings(); +} +void LLPanelPreferenceGraphics::setHardwareDefaults() +{ + resetDirtyChilds(); + LLPanelPreference::setHardwareDefaults(); +} diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 8778d76a5a..93b39d72bc 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -128,10 +128,8 @@ public: void updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_box); void onUpdateSliderText(LLUICtrl* ctrl, const LLSD& name); - void onKeystrokeAspectRatio(); // void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator); - void onCommitAutoDetectAspect(); void onCommitParcelMediaAutoPlayEnable(); void onCommitMediaEnabled(); void onCommitMusicEnabled(); @@ -142,7 +140,6 @@ public: void buildPopupLists(); static void refreshSkin(void* data); static void cleanupBadSetting(); - static F32 sAspectRatio; private: static std::string sSkin; bool mGotPersonalInfo; @@ -161,6 +158,7 @@ public: virtual void apply(); virtual void cancel(); void setControlFalse(const LLSD& user_data); + virtual void setHardwareDefaults(){}; // This function squirrels away the current values of the controls so that // cancel() can restore them. @@ -177,4 +175,19 @@ private: string_color_map_t mSavedColors; }; +class LLPanelPreferenceGraphics : public LLPanelPreference +{ +public: + BOOL postBuild(); + void draw(); + void apply(); + void cancel(); + void saveSettings(); + void setHardwareDefaults(); +protected: + bool hasDirtyChilds(); + void resetDirtyChilds(); + +}; + #endif // LL_LLPREFERENCEFLOATER_H diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp index ff9002787c..5c0593ad29 100644 --- a/indra/newview/llfloaterproperties.cpp +++ b/indra/newview/llfloaterproperties.cpp @@ -130,9 +130,9 @@ BOOL LLFloaterProperties::postBuild() { // build the UI // item name & description - childSetPrevalidate("LabelItemName",&LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("LabelItemName",&LLTextValidate::validateASCIIPrintableNoPipe); getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitName,this)); - childSetPrevalidate("LabelItemDesc",&LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("LabelItemDesc",&LLTextValidate::validateASCIIPrintableNoPipe); getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLFloaterProperties:: onCommitDescription, this)); // Creator information getChild<LLUICtrl>("BtnCreator")->setCommitCallback(boost::bind(&LLFloaterProperties::onClickCreator,this)); @@ -880,7 +880,11 @@ void LLFloaterProperties::dirtyAll() iter != inst_list.end(); ++iter) { LLFloaterProperties* floater = dynamic_cast<LLFloaterProperties*>(*iter); - floater->dirty(); + llassert(floater); // else cast failed - wrong type D: + if (floater) + { + floater->dirty(); + } } } diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp index f2827919ce..2fce50007e 100644 --- a/indra/newview/llfloaterscriptlimits.cpp +++ b/indra/newview/llfloaterscriptlimits.cpp @@ -671,7 +671,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content) // an AVATAR name? JC const bool is_group = true; gCacheName->get(owner_id, is_group, - boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache, + boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache, this, _1, _2)); } } @@ -744,13 +744,13 @@ void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content) { mParcelMemoryUsed = content["summary"]["used"][0]["amount"].asInteger() / SIZE_OF_ONE_KB; mParcelMemoryMax = content["summary"]["available"][0]["amount"].asInteger() / SIZE_OF_ONE_KB; - mGotParcelMemoryUsed = TRUE; + mGotParcelMemoryUsed = true; } else if(content["summary"]["used"][1]["type"].asString() == std::string("memory")) { mParcelMemoryUsed = content["summary"]["used"][1]["amount"].asInteger() / SIZE_OF_ONE_KB; mParcelMemoryMax = content["summary"]["available"][1]["amount"].asInteger() / SIZE_OF_ONE_KB; - mGotParcelMemoryUsed = TRUE; + mGotParcelMemoryUsed = true; } else { @@ -762,13 +762,13 @@ void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content) { mParcelURLsUsed = content["summary"]["used"][0]["amount"].asInteger(); mParcelURLsMax = content["summary"]["available"][0]["amount"].asInteger(); - mGotParcelURLsUsed = TRUE; + mGotParcelURLsUsed = true; } else if(content["summary"]["used"][1]["type"].asString() == std::string("urls")) { mParcelURLsUsed = content["summary"]["used"][1]["amount"].asInteger(); mParcelURLsMax = content["summary"]["available"][1]["amount"].asInteger(); - mGotParcelURLsUsed = TRUE; + mGotParcelURLsUsed = true; } else { @@ -902,10 +902,10 @@ void LLPanelScriptLimitsRegionMemory::clearList() list->operateOnAll(LLCtrlListInterface::OP_DELETE); } - mGotParcelMemoryUsed = FALSE; - mGotParcelMemoryMax = FALSE; - mGotParcelURLsUsed = FALSE; - mGotParcelURLsMax = FALSE; + mGotParcelMemoryUsed = false; + mGotParcelMemoryMax = false; + mGotParcelURLsUsed = false; + mGotParcelURLsMax = false; LLStringUtil::format_map_t args_parcel_memory; std::string msg_empty_string(""); @@ -1208,13 +1208,13 @@ void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content) { mAttachmentMemoryUsed = content["summary"]["used"][0]["amount"].asInteger() / SIZE_OF_ONE_KB; mAttachmentMemoryMax = content["summary"]["available"][0]["amount"].asInteger() / SIZE_OF_ONE_KB; - mGotAttachmentMemoryUsed = TRUE; + mGotAttachmentMemoryUsed = true; } else if(content["summary"]["used"][1]["type"].asString() == std::string("memory")) { mAttachmentMemoryUsed = content["summary"]["used"][1]["amount"].asInteger() / SIZE_OF_ONE_KB; mAttachmentMemoryMax = content["summary"]["available"][1]["amount"].asInteger() / SIZE_OF_ONE_KB; - mGotAttachmentMemoryUsed = TRUE; + mGotAttachmentMemoryUsed = true; } else { @@ -1226,13 +1226,13 @@ void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content) { mAttachmentURLsUsed = content["summary"]["used"][0]["amount"].asInteger(); mAttachmentURLsMax = content["summary"]["available"][0]["amount"].asInteger(); - mGotAttachmentURLsUsed = TRUE; + mGotAttachmentURLsUsed = true; } else if(content["summary"]["used"][1]["type"].asString() == std::string("urls")) { mAttachmentURLsUsed = content["summary"]["used"][1]["amount"].asInteger(); mAttachmentURLsMax = content["summary"]["available"][1]["amount"].asInteger(); - mGotAttachmentURLsUsed = TRUE; + mGotAttachmentURLsUsed = true; } else { diff --git a/indra/newview/llfloaterscriptlimits.h b/indra/newview/llfloaterscriptlimits.h index cbcd64e82c..ce49209039 100644 --- a/indra/newview/llfloaterscriptlimits.h +++ b/indra/newview/llfloaterscriptlimits.h @@ -148,8 +148,8 @@ public: : LLPanelScriptLimitsInfo(), LLRemoteParcelInfoObserver(), mParcelId(LLUUID()), - mGotParcelMemoryUsed(FALSE), - mGotParcelMemoryMax(FALSE), + mGotParcelMemoryUsed(false), + mGotParcelMemoryMax(false), mParcelMemoryMax(0), mParcelMemoryUsed(0) {}; @@ -173,21 +173,21 @@ public: void returnObjects(); private: - void onNameCache( const LLUUID& id, + void onNameCache(const LLUUID& id, const std::string& name); LLSD mContent; LLUUID mParcelId; - BOOL mGotParcelMemoryUsed; - BOOL mGotParcelMemoryUsedDetails; - BOOL mGotParcelMemoryMax; + bool mGotParcelMemoryUsed; + bool mGotParcelMemoryUsedDetails; + bool mGotParcelMemoryMax; S32 mParcelMemoryMax; S32 mParcelMemoryUsed; S32 mParcelMemoryUsedDetails; - BOOL mGotParcelURLsUsed; - BOOL mGotParcelURLsUsedDetails; - BOOL mGotParcelURLsMax; + bool mGotParcelURLsUsed; + bool mGotParcelURLsUsedDetails; + bool mGotParcelURLsMax; S32 mParcelURLsMax; S32 mParcelURLsUsed; S32 mParcelURLsUsedDetails; @@ -215,7 +215,21 @@ class LLPanelScriptLimitsAttachment : public LLPanelScriptLimitsInfo public: LLPanelScriptLimitsAttachment() - : LLPanelScriptLimitsInfo() {}; + : LLPanelScriptLimitsInfo(), + mGotAttachmentMemoryUsed(false), + mGotAttachmentMemoryUsedDetails(false), + mGotAttachmentMemoryMax(false), + mAttachmentMemoryMax(0), + mAttachmentMemoryUsed(0), + mAttachmentMemoryUsedDetails(0), + mGotAttachmentURLsUsed(false), + mGotAttachmentURLsUsedDetails(false), + mGotAttachmentURLsMax(false), + mAttachmentURLsMax(0), + mAttachmentURLsUsed(0), + mAttachmentURLsUsedDetails(0) + {}; + ~LLPanelScriptLimitsAttachment() { }; @@ -231,16 +245,16 @@ public: private: - BOOL mGotAttachmentMemoryUsed; - BOOL mGotAttachmentMemoryUsedDetails; - BOOL mGotAttachmentMemoryMax; + bool mGotAttachmentMemoryUsed; + bool mGotAttachmentMemoryUsedDetails; + bool mGotAttachmentMemoryMax; S32 mAttachmentMemoryMax; S32 mAttachmentMemoryUsed; S32 mAttachmentMemoryUsedDetails; - BOOL mGotAttachmentURLsUsed; - BOOL mGotAttachmentURLsUsedDetails; - BOOL mGotAttachmentURLsMax; + bool mGotAttachmentURLsUsed; + bool mGotAttachmentURLsUsedDetails; + bool mGotAttachmentURLsMax; S32 mAttachmentURLsMax; S32 mAttachmentURLsUsed; S32 mAttachmentURLsUsedDetails; diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp index e2b0c4b66f..9895665026 100644 --- a/indra/newview/llfloatersellland.cpp +++ b/indra/newview/llfloatersellland.cpp @@ -163,7 +163,7 @@ BOOL LLFloaterSellLandUI::postBuild() { childSetCommitCallback("sell_to", onChangeValue, this); childSetCommitCallback("price", onChangeValue, this); - childSetPrevalidate("price", LLLineEditor::prevalidateNonNegativeS32); + childSetPrevalidate("price", LLTextValidate::validateNonNegativeS32); childSetCommitCallback("sell_objects", onChangeValue, this); childSetAction("sell_to_select_agent", boost::bind( &LLFloaterSellLandUI::doSelectAgent, this)); childSetAction("cancel_btn", doCancel, this); @@ -268,7 +268,7 @@ void LLFloaterSellLandUI::refreshUI() std::string price_str = childGetValue("price").asString(); bool valid_price = false; - valid_price = (price_str != "") && LLLineEditor::prevalidateNonNegativeS32(utf8str_to_wstring(price_str)); + valid_price = (price_str != "") && LLTextValidate::validateNonNegativeS32(utf8str_to_wstring(price_str)); if (valid_price && mParcelActualArea > 0) { diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index b6e9fb3f6c..a0031f0193 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -2084,10 +2084,6 @@ void LLFloaterSnapshot::draw() S32 offset_x = (getRect().getWidth() - previewp->getThumbnailWidth()) / 2 ; S32 offset_y = thumbnail_rect.mBottom + (thumbnail_rect.getHeight() - previewp->getThumbnailHeight()) / 2 ; - if (! gSavedSettings.getBOOL("AdvanceSnapshot")) - { - offset_y += getUIWinHeightShort() - getUIWinHeightLong(); - } glMatrixMode(GL_MODELVIEW); gl_draw_scaled_image(offset_x, offset_y, diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 241497aeaf..e2b083a29b 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -666,8 +666,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) if (mCheckCopyCenters) mCheckCopyCenters ->setVisible( create_visible ); if (mCheckCopyRotates) mCheckCopyRotates ->setVisible( create_visible ); - if (mCheckCopyCenters) mCheckCopyCenters->setEnabled( mCheckCopySelection->get() ); - if (mCheckCopyRotates) mCheckCopyRotates->setEnabled( mCheckCopySelection->get() ); + if (mCheckCopyCenters && mCheckCopySelection) mCheckCopyCenters->setEnabled( mCheckCopySelection->get() ); + if (mCheckCopyRotates && mCheckCopySelection) mCheckCopyRotates->setEnabled( mCheckCopySelection->get() ); // Land buttons BOOL land_visible = (tool == LLToolBrushLand::getInstance() || tool == LLToolSelectLand::getInstance() ); @@ -1321,7 +1321,7 @@ bool LLFloaterTools::deleteMediaConfirm(const LLSD& notification, const LLSD& re switch( option ) { case 0: // "Yes" - LLSelectMgr::getInstance()->selectionSetMedia( 0 ); + LLSelectMgr::getInstance()->selectionSetMedia( 0, LLSD() ); if(LLFloaterReg::instanceVisible("media_settings")) { LLFloaterReg::hideInstance("media_settings"); diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index c6e12476bd..f61c86db14 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -41,6 +41,7 @@ #include "llfloateruipreview.h" // Own header // Internal utility +#include "lleventtimer.h" #include "llrender.h" #include "llsdutil.h" #include "llxmltree.h" @@ -91,7 +92,6 @@ static std::string get_xui_dir() } // Forward declarations to avoid header dependencies -class LLEventTimer; class LLColor; class LLScrollListCtrl; class LLComboBox; @@ -362,8 +362,7 @@ BOOL LLFadeEventTimer::tick() if(NULL == mParent) // no more need to tick, so suicide { - delete this; - return FALSE; + return TRUE; } // Set up colors diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index c6135d3bc3..8dbdfff635 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -195,7 +195,8 @@ LLFolderView::LLFolderView(const Params& p) mCallbackRegistrar(NULL), mParentPanel(p.parent_panel), mUseEllipses(false), - mDraggingOverItem(NULL) + mDraggingOverItem(NULL), + mStatusTextBox(NULL) { LLRect rect = p.rect; LLRect new_rect(rect.mLeft, rect.mBottom + getRect().getHeight(), rect.mLeft + getRect().getWidth(), rect.mBottom); @@ -225,12 +226,24 @@ LLFolderView::LLFolderView(const Params& p) params.font(getLabelFontForStyle(LLFontGL::NORMAL)); params.max_length_bytes(DB_INV_ITEM_NAME_STR_LEN); params.commit_callback.function(boost::bind(&LLFolderView::commitRename, this, _2)); - params.prevalidate_callback(&LLLineEditor::prevalidateASCIIPrintableNoPipe); + params.prevalidate_callback(&LLTextValidate::validateASCIIPrintableNoPipe); params.commit_on_focus_lost(true); params.visible(false); mRenamer = LLUICtrlFactory::create<LLLineEditor> (params); addChild(mRenamer); + // Textbox + LLTextBox::Params text_p; + LLRect new_r(5, 13-50, 300, 0-50); + text_p.name(std::string(p.name)); + text_p.rect(new_r); + text_p.font(getLabelFontForStyle(mLabelStyle)); + text_p.visible(false); + text_p.allow_html(true); + mStatusTextBox = LLUICtrlFactory::create<LLTextBox> (text_p); + //addChild(mStatusTextBox); + + // make the popup menu available LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); if (!menu) @@ -253,6 +266,7 @@ LLFolderView::~LLFolderView( void ) mScrollContainer = NULL; mRenameItem = NULL; mRenamer = NULL; + mStatusTextBox = NULL; if( gEditMenuHandler == this ) { @@ -874,7 +888,7 @@ void LLFolderView::draw() LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE ); } - LLFontGL* font = getLabelFontForStyle(mLabelStyle); + //LLFontGL* font = getLabelFontForStyle(mLabelStyle); // if cursor has moved off of me during drag and drop // close all auto opened folders @@ -911,19 +925,23 @@ void LLFolderView::draw() || mFilter->getShowFolderState() == LLInventoryFilter::SHOW_ALL_FOLDERS) { mStatusText.clear(); + mStatusTextBox->setVisible( FALSE ); } else { if (gInventory.backgroundFetchActive() || mCompletedFilterGeneration < mFilter->getMinRequiredGeneration()) { mStatusText = LLTrans::getString("Searching"); - font->renderUTF8(mStatusText, 0, 2, 1, sSearchStatusColor, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE ); + //font->renderUTF8(mStatusText, 0, 2, 1, sSearchStatusColor, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE ); } else { mStatusText = LLTrans::getString(getFilter()->getEmptyLookupMessage()); - font->renderUTF8(mStatusText, 0, 2, 1, sSearchStatusColor, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE ); + //font->renderUTF8(mStatusText, 0, 2, 1, sSearchStatusColor, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE ); } + mStatusTextBox->setValue(mStatusText); + mStatusTextBox->setVisible( TRUE ); + } LLFolderViewFolder::draw(); @@ -1272,8 +1290,7 @@ BOOL LLFolderView::canCut() const const LLFolderViewItem* item = *selected_it; const LLFolderViewEventListener* listener = item->getListener(); - // *WARKAROUND: it is too many places where the "isItemRemovable" method should be changed with "const" modifier - if (!listener || !(const_cast<LLFolderViewEventListener*>(listener))->isItemRemovable()) + if (!listener || !listener->isItemRemovable()) { return FALSE; } diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index 56ebdfcf79..faf6a9cf23 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -62,6 +62,7 @@ class LLLineEditor; class LLMenuGL; class LLScrollContainer; class LLUICtrl; +class LLTextBox; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLFolderViewFunctor @@ -327,7 +328,7 @@ protected: LLUUID mSelectThisID; // if non null, select this item - LLPanel* mParentPanel; + LLPanel* mParentPanel; /** * Is used to determine if we need to cut text In LLFolderViewItem to avoid horizontal scroll. @@ -344,6 +345,8 @@ protected: public: static F32 sAutoOpenTime; + LLTextBox* mStatusTextBox; + }; bool sort_item_name(LLFolderViewItem* a, LLFolderViewItem* b); diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h index d6c4459e6f..12e100caf4 100644 --- a/indra/newview/llfoldervieweventlistener.h +++ b/indra/newview/llfoldervieweventlistener.h @@ -73,7 +73,8 @@ public: virtual BOOL isItemRenameable() const = 0; virtual BOOL renameItem(const std::string& new_name) = 0; virtual BOOL isItemMovable( void ) const = 0; // Can be moved to another folder - virtual BOOL isItemRemovable( void ) = 0; // Can be destroyed + virtual BOOL isItemRemovable( void ) const = 0; // Can be destroyed + virtual BOOL isItemInTrash( void) const { return FALSE; } // TODO: make into pure virtual. virtual BOOL removeItem() = 0; virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch) = 0; virtual void move( LLFolderViewEventListener* parent_listener ) = 0; diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index f154de39c9..3946224c0c 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -1339,10 +1339,6 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter) if (folder->getFiltered() || folder->hasFilteredDescendants(filter.getMinRequiredGeneration())) { mMostFilteredDescendantGeneration = filter_generation; - if (getRoot()->needsAutoSelect() && autoopen_folders) - { - folder->setOpenArrangeRecursively(TRUE); - } } // just skip it, it has already been filtered continue; @@ -2548,8 +2544,12 @@ bool LLInventorySort::operator()(const LLFolderViewItem* const& a, const LLFolde { // *TODO: mantipov: probably it is better to add an appropriate method to LLFolderViewItem // or to LLInvFVBridge - S32 a_sort = (static_cast<const LLItemBridge*>(a->getListener()))->getItem()->getSortField(); - S32 b_sort = (static_cast<const LLItemBridge*>(b->getListener()))->getItem()->getSortField(); + LLViewerInventoryItem* aitem = (static_cast<const LLItemBridge*>(a->getListener()))->getItem(); + LLViewerInventoryItem* bitem = (static_cast<const LLItemBridge*>(b->getListener()))->getItem(); + if (!aitem || !bitem) + return false; + S32 a_sort = aitem->getSortField(); + S32 b_sort = bitem->getSortField(); return a_sort < b_sort; } } diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp index 3653371d76..00e2365ffd 100644 --- a/indra/newview/llgroupactions.cpp +++ b/indra/newview/llgroupactions.cpp @@ -161,12 +161,17 @@ void LLGroupActions::join(const LLUUID& group_id) S32 cost = gdatap->mMembershipFee; LLSD args; args["COST"] = llformat("%d", cost); + args["NAME"] = gdatap->mName; LLSD payload; payload["group_id"] = group_id; if (can_afford_transaction(cost)) { - LLNotificationsUtil::add("JoinGroupCanAfford", args, payload, onJoinGroup); + if(cost > 0) + LLNotificationsUtil::add("JoinGroupCanAfford", args, payload, onJoinGroup); + else + LLNotificationsUtil::add("JoinGroupNoCost", args, payload, onJoinGroup); + } else { diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index 4c1019a882..4db75bbd8a 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -677,9 +677,12 @@ void LLGroupMgrGroupData::sendRoleChanges() break; } case RC_UPDATE_ALL: + // fall through case RC_UPDATE_POWERS: need_power_recalc = true; + // fall through case RC_UPDATE_DATA: + // fall through default: { LLGroupRoleData* group_role_data = (*role_it).second; @@ -762,7 +765,7 @@ void LLGroupMgr::addObserver(LLGroupMgrObserver* observer) mObservers.insert(std::pair<LLUUID, LLGroupMgrObserver*>(observer->getID(), observer)); } -void LLGroupMgr::addObserver(const LLUUID& group_id, LLParticularGroupMgrObserver* observer) +void LLGroupMgr::addObserver(const LLUUID& group_id, LLParticularGroupObserver* observer) { if(group_id.notNull() && observer) { @@ -792,7 +795,7 @@ void LLGroupMgr::removeObserver(LLGroupMgrObserver* observer) } } -void LLGroupMgr::removeObserver(const LLUUID& group_id, LLParticularGroupMgrObserver* observer) +void LLGroupMgr::removeObserver(const LLUUID& group_id, LLParticularGroupObserver* observer) { if(group_id.isNull() || !observer) { @@ -1364,7 +1367,7 @@ void LLGroupMgr::notifyObservers(LLGroupChange gc) gi->second->mChanged = FALSE; - // notify LLParticularGroupMgrObserver + // notify LLParticularGroupObserver observer_map_t::iterator obs_it = mParticularObservers.find(group_id); if(obs_it == mParticularObservers.end()) return; diff --git a/indra/newview/llgroupmgr.h b/indra/newview/llgroupmgr.h index 588b4a9034..2c86de8b97 100644 --- a/indra/newview/llgroupmgr.h +++ b/indra/newview/llgroupmgr.h @@ -53,10 +53,10 @@ protected: LLUUID mID; }; -class LLParticularGroupMgrObserver +class LLParticularGroupObserver { public: - virtual ~LLParticularGroupMgrObserver(){} + virtual ~LLParticularGroupObserver(){} virtual void changed(const LLUUID& group_id, LLGroupChange gc) = 0; }; @@ -313,9 +313,9 @@ public: ~LLGroupMgr(); void addObserver(LLGroupMgrObserver* observer); - void addObserver(const LLUUID& group_id, LLParticularGroupMgrObserver* observer); + void addObserver(const LLUUID& group_id, LLParticularGroupObserver* observer); void removeObserver(LLGroupMgrObserver* observer); - void removeObserver(const LLUUID& group_id, LLParticularGroupMgrObserver* observer); + void removeObserver(const LLUUID& group_id, LLParticularGroupObserver* observer); LLGroupMgrGroupData* getGroupData(const LLUUID& id); void sendGroupPropertiesRequest(const LLUUID& group_id); @@ -374,7 +374,7 @@ private: typedef std::map<LLUUID, LLGroupMgrGroupData*> group_map_t; group_map_t mGroups; - typedef std::set<LLParticularGroupMgrObserver*> observer_set_t; + typedef std::set<LLParticularGroupObserver*> observer_set_t; typedef std::map<LLUUID,observer_set_t> observer_map_t; observer_map_t mParticularObservers; }; diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 1eac90371d..53cdfcc9b2 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -407,12 +407,7 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id) } } - if (floater_container) - { - //selecting the panel resets a chiclet's counter - floater_container->selectFloater(floater); - floater_container->setVisible(TRUE); - } + floater->openFloater(floater->getKey()); } else { @@ -515,8 +510,11 @@ BOOL LLIMFloater::getVisible() if(isChatMultiTab()) { LLIMFloaterContainer* im_container = LLIMFloaterContainer::getInstance(); + + // Treat inactive floater as invisible. + bool is_active = im_container->getActiveFloater() == this; // getVisible() returns TRUE when Tabbed IM window is minimized. - return !im_container->isMinimized() && im_container->getVisible(); + return is_active && !im_container->isMinimized() && im_container->getVisible(); } else { diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index 22eb9a51d2..7162386d08 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -37,6 +37,7 @@ #include "llfloaterreg.h" #include "llimview.h" #include "llavatariconctrl.h" +#include "llgroupiconctrl.h" #include "llagent.h" // @@ -90,80 +91,34 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp, LLUUID session_id = floaterp->getKey(); + LLIconCtrl* icon = 0; + if(gAgent.isInGroup(session_id)) { + LLGroupIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLGroupIconCtrl>(); + icon_params.group_id = session_id; + icon = LLUICtrlFactory::instance().createWidget<LLGroupIconCtrl>(icon_params); + mSessions[session_id] = floaterp; - LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(session_id); - LLGroupMgr* gm = LLGroupMgr::getInstance(); - gm->addObserver(session_id, this); floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); - - if (group_data && group_data->mInsigniaID.notNull()) - { - mTabContainer->setTabImage(get_ptr_in_map(mSessions, session_id), group_data->mInsigniaID); - } - else - { - mTabContainer->setTabImage(floaterp, "Generic_Group"); - gm->sendGroupPropertiesRequest(session_id); - } } else { LLUUID avatar_id = LLIMModel::getInstance()->getOtherParticipantID(session_id); - LLAvatarPropertiesProcessor& app = LLAvatarPropertiesProcessor::instance(); - app.addObserver(avatar_id, this); - floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, avatar_id)); - mSessions[avatar_id] = floaterp; - LLUUID* icon_id_ptr = LLAvatarIconIDCache::getInstance()->get(avatar_id); - if(icon_id_ptr && icon_id_ptr->notNull()) - { - mTabContainer->setTabImage(floaterp, *icon_id_ptr); - } - else - { - mTabContainer->setTabImage(floaterp, "Generic_Person"); - app.sendAvatarPropertiesRequest(avatar_id); - } - } -} + LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLAvatarIconCtrl>(); + icon_params.avatar_id = avatar_id; + icon = LLUICtrlFactory::instance().createWidget<LLAvatarIconCtrl>(icon_params); -void LLIMFloaterContainer::processProperties(void* data, enum EAvatarProcessorType type) -{ - if (APT_PROPERTIES == type) - { - LLAvatarData* avatar_data = static_cast<LLAvatarData*>(data); - if (avatar_data) - { - LLUUID avatar_id = avatar_data->avatar_id; - LLUUID* cached_avatarId = LLAvatarIconIDCache::getInstance()->get(avatar_id); - if(cached_avatarId && cached_avatarId->notNull() && avatar_data->image_id != *cached_avatarId) - { - LLAvatarIconIDCache::getInstance()->add(avatar_id,avatar_data->image_id); - mTabContainer->setTabImage(get_ptr_in_map(mSessions, avatar_id), avatar_data->image_id); - } - } - } -} - -void LLIMFloaterContainer::changed(const LLUUID& group_id, LLGroupChange gc) -{ - if (GC_PROPERTIES == gc) - { - LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(group_id); - if (group_data && group_data->mInsigniaID.notNull()) - { - mTabContainer->setTabImage(get_ptr_in_map(mSessions, group_id), group_data->mInsigniaID); - } + mSessions[avatar_id] = floaterp; + floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, avatar_id)); } + mTabContainer->setTabImage(floaterp, icon); } -void LLIMFloaterContainer::onCloseFloater(LLUUID id) +void LLIMFloaterContainer::onCloseFloater(LLUUID& id) { - LLAvatarPropertiesProcessor::instance().removeObserver(id, this); - LLGroupMgr::instance().removeObserver(id, this); - + mSessions.erase(id); } void LLIMFloaterContainer::onNewMessageReceived(const LLSD& data) diff --git a/indra/newview/llimfloatercontainer.h b/indra/newview/llimfloatercontainer.h index bc06f0cbd3..46c0617c01 100644 --- a/indra/newview/llimfloatercontainer.h +++ b/indra/newview/llimfloatercontainer.h @@ -43,7 +43,7 @@ class LLTabContainer; -class LLIMFloaterContainer : public LLMultiFloater, public LLAvatarPropertiesObserver, public LLParticularGroupMgrObserver +class LLIMFloaterContainer : public LLMultiFloater { public: LLIMFloaterContainer(const LLSD& seed); @@ -51,14 +51,12 @@ public: /*virtual*/ BOOL postBuild(); /*virtual*/ void onOpen(const LLSD& key); + void onCloseFloater(LLUUID& id); /*virtual*/ void addFloater(LLFloater* floaterp, BOOL select_added_floater, LLTabContainer::eInsertionPoint insertion_point = LLTabContainer::END); - void processProperties(void* data, EAvatarProcessorType type); - void changed(const LLUUID& group_id, LLGroupChange gc); - static LLFloater* getCurrentVoiceFloater(); static LLIMFloaterContainer* findInstance(); @@ -69,7 +67,6 @@ private: typedef std::map<LLUUID,LLFloater*> avatarID_panel_map_t; avatarID_panel_map_t mSessions; - void onCloseFloater(LLUUID avatar_id); void onNewMessageReceived(const LLSD& data); }; diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 6338fbd091..8999aab50a 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -77,6 +77,9 @@ const static std::string IM_FROM_ID("from_id"); const static std::string NO_SESSION("(IM Session Doesn't Exist)"); const static std::string ADHOC_NAME_SUFFIX(" Conference"); +const static std::string NEARBY_P2P_BY_OTHER("nearby_P2P_by_other"); +const static std::string NEARBY_P2P_BY_AGENT("nearby_P2P_by_agent"); + std::string LLCallDialogManager::sPreviousSessionlName = ""; LLIMModel::LLIMSession::SType LLCallDialogManager::sPreviousSessionType = LLIMModel::LLIMSession::P2P_SESSION; std::string LLCallDialogManager::sCurrentSessionlName = ""; @@ -1372,7 +1375,7 @@ void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id) } sSession = session; - sSession->mVoiceChannel->setStateChangedCallback(boost::bind(LLCallDialogManager::onVoiceChannelStateChanged, _1, _2, _3)); + sSession->mVoiceChannel->setStateChangedCallback(boost::bind(LLCallDialogManager::onVoiceChannelStateChanged, _1, _2, _3, _4)); if(sCurrentSessionlName != session->mName) { sPreviousSessionlName = sCurrentSessionlName; @@ -1403,7 +1406,7 @@ void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id) } -void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction) +void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction, bool ended_by_agent) { LLSD mCallDialogPayload; LLOutgoingCallDialog* ocd = NULL; @@ -1423,6 +1426,7 @@ void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EStat mCallDialogPayload["state"] = new_state; mCallDialogPayload["disconnected_channel_name"] = sSession->mName; mCallDialogPayload["session_type"] = sSession->mSessionType; + mCallDialogPayload["ended_by_agent"] = ended_by_agent; switch(new_state) { @@ -1517,6 +1521,15 @@ void LLCallDialog::draw() } } +// virtual +void LLCallDialog::onOpen(const LLSD& key) +{ + LLDockableFloater::onOpen(key); + + // it should be over the all floaters. EXT-5116 + gFloaterView->bringToFront(this); +} + void LLCallDialog::setIcon(const LLSD& session_id, const LLSD& participant_id) { // *NOTE: 12/28/2009: check avaline calls: LLVoiceClient::isParticipantAvatar returns false for them @@ -1609,7 +1622,16 @@ void LLOutgoingCallDialog::show(const LLSD& key) channel_name = LLTextUtil::formatPhoneNumber(channel_name); } childSetTextArg("nearby", "[VOICE_CHANNEL_NAME]", channel_name); - childSetTextArg("nearby_P2P", "[VOICE_CHANNEL_NAME]", mPayload["disconnected_channel_name"].asString()); + childSetTextArg("nearby_P2P_by_other", "[VOICE_CHANNEL_NAME]", mPayload["disconnected_channel_name"].asString()); + + // skipping "You will now be reconnected to nearby" in notification when call is ended by disabling voice, + // so no reconnection to nearby chat happens (EXT-4397) + bool voice_works = LLVoiceClient::voiceEnabled() && gVoiceClient->voiceWorking(); + std::string reconnect_nearby = voice_works ? LLTrans::getString("reconnect_nearby") : std::string(); + childSetTextArg("nearby", "[RECONNECT_NEARBY]", reconnect_nearby); + + const std::string& nearby_str = mPayload["ended_by_agent"] ? NEARBY_P2P_BY_AGENT : NEARBY_P2P_BY_OTHER; + childSetTextArg(nearby_str, "[RECONNECT_NEARBY]", reconnect_nearby); } std::string callee_name = mPayload["session_name"].asString(); @@ -1643,6 +1665,7 @@ void LLOutgoingCallDialog::show(const LLSD& key) { case LLVoiceChannel::STATE_CALL_STARTED : getChild<LLTextBox>("calling")->setVisible(true); + getChild<LLButton>("Cancel")->setVisible(true); if(show_oldchannel) { getChild<LLTextBox>("leaving")->setVisible(true); @@ -1664,7 +1687,8 @@ void LLOutgoingCallDialog::show(const LLSD& key) case LLVoiceChannel::STATE_HUNG_UP : if (mPayload["session_type"].asInteger() == LLIMModel::LLIMSession::P2P_SESSION) { - getChild<LLTextBox>("nearby_P2P")->setVisible(true); + const std::string& nearby_str = mPayload["ended_by_agent"] ? NEARBY_P2P_BY_AGENT : NEARBY_P2P_BY_OTHER; + getChild<LLTextBox>(nearby_str)->setVisible(true); } else { @@ -1683,7 +1707,8 @@ void LLOutgoingCallDialog::hideAllText() getChild<LLTextBox>("calling")->setVisible(false); getChild<LLTextBox>("leaving")->setVisible(false); getChild<LLTextBox>("connecting")->setVisible(false); - getChild<LLTextBox>("nearby_P2P")->setVisible(false); + getChild<LLTextBox>("nearby_P2P_by_other")->setVisible(false); + getChild<LLTextBox>("nearby_P2P_by_agent")->setVisible(false); getChild<LLTextBox>("nearby")->setVisible(false); getChild<LLTextBox>("noanswer")->setVisible(false); } diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 8ad8632c99..a6c8394071 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -452,7 +452,7 @@ public: static void initClass(); static void onVoiceChannelChanged(const LLUUID &session_id); - static void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction); + static void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction, bool ended_by_agent); protected: static std::string sPreviousSessionlName; @@ -472,6 +472,7 @@ public: // check timer state /*virtual*/ void draw(); + /*virtual*/ void onOpen(const LLSD& key); protected: // lifetime timer for a notification diff --git a/indra/newview/llinspect.cpp b/indra/newview/llinspect.cpp index c7b651f37c..81cfce53b1 100644 --- a/indra/newview/llinspect.cpp +++ b/indra/newview/llinspect.cpp @@ -32,6 +32,7 @@ #include "llinspect.h" +#include "lltooltip.h" #include "llcontrol.h" // LLCachedControl #include "llui.h" // LLUI::sSettingsGroups #include "llviewermenu.h" @@ -104,6 +105,26 @@ BOOL LLInspect::handleHover(S32 x, S32 y, MASK mask) return LLView::handleHover(x, y, mask); } +BOOL LLInspect::handleToolTip(S32 x, S32 y, MASK mask) +{ + BOOL handled = FALSE; + + + //delegate handling of tooltip to the hovered child + LLView* child_handler = childFromPoint(x,y); + if (child_handler && !child_handler->getToolTip().empty())// show tooltip if a view has non-empty tooltip message + { + //build LLInspector params to get correct tooltip setting, etc. background image + LLInspector::Params params; + params.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>()); + params.message = child_handler->getToolTip(); + //set up delay if there is no visible tooltip at this moment + params.delay_time = LLToolTipMgr::instance().toolTipVisible() ? 0.f : LLUI::sSettingGroups["config"]->getF32( "ToolTipDelay" ); + LLToolTipMgr::instance().show(params); + handled = TRUE; + } + return handled; +} // virtual void LLInspect::onMouseLeave(S32 x, S32 y, MASK mask) { diff --git a/indra/newview/llinspect.h b/indra/newview/llinspect.h index f8c86618d2..6d994a8d7c 100644 --- a/indra/newview/llinspect.h +++ b/indra/newview/llinspect.h @@ -47,6 +47,7 @@ public: /*virtual*/ void draw(); /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); + /*virtual*/ BOOL handleToolTip(S32 x, S32 y, MASK mask); /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask); /// Start open animation diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp index 1a5795a2ae..91cbbbf430 100644 --- a/indra/newview/llinspectobject.cpp +++ b/indra/newview/llinspectobject.cpp @@ -51,6 +51,7 @@ #include "llmenubutton.h" #include "llresmgr.h" // getMonetaryString #include "llsafehandle.h" +#include "llsidetray.h" #include "lltextbox.h" // for description truncation #include "lltrans.h" #include "llui.h" // positionViewNearMouse() @@ -643,8 +644,9 @@ void LLInspectObject::onClickOpen() void LLInspectObject::onClickMoreInfo() { - // *TODO: Show object info side panel, once that is implemented. - LLNotificationsUtil::add("ClickUnimplemented"); + LLSD key; + key["task"] = "task"; + LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); closeFloater(); } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index f68550d8fd..da95eaefca 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -174,17 +174,21 @@ time_t LLInvFVBridge::getCreationDate() const } // Can be destroyed (or moved to trash) -BOOL LLInvFVBridge::isItemRemovable() +BOOL LLInvFVBridge::isItemRemovable() const { const LLInventoryModel* model = getInventoryModel(); if(!model) { return FALSE; } + + // Can't delete an item that's in the library. if(!model->isObjectDescendentOf(mUUID, gInventory.getRootFolderID())) { return FALSE; } + + // Disable delete from COF folder; have users explicitly choose "detach/take off". if (LLAppearanceManager::instance().getIsProtectedCOFItem(mUUID)) { return FALSE; @@ -461,11 +465,15 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const } void hide_context_entries(LLMenuGL& menu, - const std::vector<std::string> &entries_to_show, - const std::vector<std::string> &disabled_entries) + const menuentry_vec_t &entries_to_show, + const menuentry_vec_t &disabled_entries) { const LLView::child_list_t *list = menu.getChildList(); + // For removing double separators or leading separator. Start at true so that + // if the first element is a separator, it will not be shown. + BOOL is_previous_entry_separator = TRUE; + LLView::child_list_t::const_iterator itor; for (itor = list->begin(); itor != list->end(); ++itor) { @@ -480,7 +488,7 @@ void hide_context_entries(LLMenuGL& menu, bool found = false; - std::vector<std::string>::const_iterator itor2; + menuentry_vec_t::const_iterator itor2; for (itor2 = entries_to_show.begin(); itor2 != entries_to_show.end(); ++itor2) { if (*itor2 == name) @@ -488,6 +496,17 @@ void hide_context_entries(LLMenuGL& menu, found = true; } } + + // Don't allow multiple separators in a row (e.g. such as if there are no items + // between two separators). + if (found) + { + const BOOL is_entry_separator = (dynamic_cast<LLMenuItemSeparatorGL *>(*itor) != NULL); + if (is_entry_separator && is_previous_entry_separator) + found = false; + is_previous_entry_separator = is_entry_separator; + } + if (!found) { (*itor)->setVisible(FALSE); @@ -508,8 +527,8 @@ void hide_context_entries(LLMenuGL& menu, // Helper for commonly-used entries void LLInvFVBridge::getClipboardEntries(bool show_asset_id, - std::vector<std::string> &items, - std::vector<std::string> &disabled_items, U32 flags) + menuentry_vec_t &items, + menuentry_vec_t &disabled_items, U32 flags) { const LLInventoryObject *obj = getInventoryObject(); @@ -565,8 +584,12 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id, } } - items.push_back(std::string("Paste")); - if (!isClipboardPasteable() || (flags & FIRST_SELECTED_ITEM) == 0) + // Don't allow items to be pasted directly into the COF. + if (!isCOFFolder()) + { + items.push_back(std::string("Paste")); + } + if (!isClipboardPasteable() || ((flags & FIRST_SELECTED_ITEM) == 0)) { disabled_items.push_back(std::string("Paste")); } @@ -582,16 +605,7 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id, items.push_back(std::string("Paste Separator")); - if (obj && obj->getIsLinkType() && !get_is_item_worn(mUUID)) - { - items.push_back(std::string("Remove Link")); - } - - items.push_back(std::string("Delete")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Delete")); - } + addDeleteContextMenuOptions(items, disabled_items); // If multiple items are selected, disable properties (if it exists). if ((flags & FIRST_SELECTED_ITEM) == 0) @@ -603,16 +617,11 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id, void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { lldebugs << "LLInvFVBridge::buildContextMenu()" << llendl; - std::vector<std::string> items; - std::vector<std::string> disabled_items; - if(isInTrash()) + menuentry_vec_t items; + menuentry_vec_t disabled_items; + if(isItemInTrash()) { - items.push_back(std::string("PurgeItem")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("PurgeItem")); - } - items.push_back(std::string("RestoreItem")); + addTrashContextMenuOptions(items, disabled_items); } else { @@ -624,6 +633,53 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags) hide_context_entries(menu, items, disabled_items); } +void LLInvFVBridge::addTrashContextMenuOptions(menuentry_vec_t &items, + menuentry_vec_t &disabled_items) +{ + const LLInventoryObject *obj = getInventoryObject(); + if (obj && obj->getIsLinkType()) + { + items.push_back(std::string("Find Original")); + if (isLinkedObjectMissing()) + { + disabled_items.push_back(std::string("Find Original")); + } + } + items.push_back(std::string("Purge Item")); + if (!isItemRemovable()) + { + disabled_items.push_back(std::string("Purge Item")); + } + items.push_back(std::string("Restore Item")); +} + +void LLInvFVBridge::addDeleteContextMenuOptions(menuentry_vec_t &items, + menuentry_vec_t &disabled_items) +{ + // Don't allow delete as a direct option from COF folder. + if (isCOFFolder()) + { + return; + } + + const LLInventoryObject *obj = getInventoryObject(); + + // "Remove link" and "Delete" are the same operation. + if (obj && obj->getIsLinkType() && !get_is_item_worn(mUUID)) + { + items.push_back(std::string("Remove Link")); + } + else + { + items.push_back(std::string("Delete")); + } + + if (!isItemRemovable()) + { + disabled_items.push_back(std::string("Delete")); + } +} + // *TODO: remove this BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const { @@ -670,7 +726,7 @@ LLInventoryModel* LLInvFVBridge::getInventoryModel() const return panel ? panel->getModel() : NULL; } -BOOL LLInvFVBridge::isInTrash() const +BOOL LLInvFVBridge::isItemInTrash() const { LLInventoryModel* model = getInventoryModel(); if(!model) return FALSE; @@ -680,7 +736,7 @@ BOOL LLInvFVBridge::isInTrash() const BOOL LLInvFVBridge::isLinkedObjectInTrash() const { - if (isInTrash()) return TRUE; + if (isItemInTrash()) return TRUE; const LLInventoryObject *obj = getInventoryObject(); if (obj && obj->getIsLinkType()) @@ -731,7 +787,7 @@ void LLInvFVBridge::changeItemParent(LLInventoryModel* model, const LLUUID& new_parent_id, BOOL restamp) { - if(item->getParentUUID() != new_parent_id) + if (item->getParentUUID() != new_parent_id) { LLInventoryModel::update_list_t update; LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1); @@ -1057,6 +1113,9 @@ void LLItemBridge::restoreItem() void LLItemBridge::restoreToWorld() { + //Similar functionality to the drag and drop rez logic + bool remove_from_inventory = false; + LLViewerInventoryItem* itemp = (LLViewerInventoryItem*)getItem(); if (itemp) { @@ -1069,23 +1128,20 @@ void LLItemBridge::restoreToWorld() msg->nextBlockFast(_PREHASH_InventoryData); itemp->packMessage(msg); msg->sendReliable(gAgent.getRegion()->getHost()); - } - //Similar functionality to the drag and drop rez logic - BOOL remove_from_inventory = FALSE; - - //remove local inventory copy, sim will deal with permissions and removing the item - //from the actual inventory if its a no-copy etc - if(!itemp->getPermissions().allowCopyBy(gAgent.getID())) - { - remove_from_inventory = TRUE; - } - - // Check if it's in the trash. (again similar to the normal rez logic) - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); - if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id)) - { - remove_from_inventory = TRUE; + //remove local inventory copy, sim will deal with permissions and removing the item + //from the actual inventory if its a no-copy etc + if(!itemp->getPermissions().allowCopyBy(gAgent.getID())) + { + remove_from_inventory = true; + } + + // Check if it's in the trash. (again similar to the normal rez logic) + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id)) + { + remove_from_inventory = true; + } } if(remove_from_inventory) @@ -1412,7 +1468,7 @@ public: }; // Can be destroyed (or moved to trash) -BOOL LLFolderBridge::isItemRemovable() +BOOL LLFolderBridge::isItemRemovable() const { LLInventoryModel* model = getInventoryModel(); if(!model) @@ -1471,7 +1527,7 @@ BOOL LLFolderBridge::isUpToDate() const BOOL LLFolderBridge::isItemCopyable() const { - return TRUE; + return FALSE; } BOOL LLFolderBridge::copyToClipboard() const @@ -2176,7 +2232,10 @@ void LLFolderBridge::determineFolderType() { LLInventoryModel* model = getInventoryModel(); LLViewerInventoryCategory* category = model->getCategory(mUUID); - category->determineFolderType(); + if (category) + { + category->determineFolderType(); + } } } @@ -2373,7 +2432,9 @@ void LLFolderBridge::pasteFromClipboard() { // move_inventory_item() is not enough, //we have to update inventory locally too - changeItemParent(model, dynamic_cast<LLViewerInventoryItem*>(item), parent_id, FALSE); + LLViewerInventoryItem* viitem = dynamic_cast<LLViewerInventoryItem*>(item); + llassert(viitem); + changeItemParent(model, viitem, parent_id, FALSE); } else { @@ -2439,17 +2500,19 @@ void LLFolderBridge::staticFolderOptionsMenu() void LLFolderBridge::folderOptionsMenu() { - std::vector<std::string> disabled_items; + menuentry_vec_t disabled_items; LLInventoryModel* model = getInventoryModel(); if(!model) return; const LLInventoryCategory* category = model->getCategory(mUUID); + if(!category) return; + LLFolderType::EType type = category->getPreferredType(); - const bool is_system_folder = category && LLFolderType::lookupIsProtectedType(type); + const bool is_system_folder = LLFolderType::lookupIsProtectedType(type); // BAP change once we're no longer treating regular categories as ensembles. - const bool is_ensemble = category && (type == LLFolderType::FT_NONE || - LLFolderType::lookupIsEnsembleType(type)); + const bool is_ensemble = (type == LLFolderType::FT_NONE || + LLFolderType::lookupIsEnsembleType(type)); // calling card related functionality for folders. @@ -2457,7 +2520,7 @@ void LLFolderBridge::folderOptionsMenu() if (is_sidepanel) { mItems.push_back("Rename"); - mItems.push_back("Delete"); + addDeleteContextMenuOptions(mItems, disabled_items); } // Only enable calling-card related options for non-system folders. @@ -2572,7 +2635,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) lldebugs << "LLFolderBridge::buildContextMenu()" << llendl; -// std::vector<std::string> disabled_items; +// menuentry_vec_t disabled_items; LLInventoryModel* model = getInventoryModel(); if(!model) return; const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); @@ -2589,17 +2652,11 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // This is the trash. mItems.push_back(std::string("Empty Trash")); } - else if(model->isObjectDescendentOf(mUUID, trash_id)) + else if(isItemInTrash()) { // This is a folder in the trash. mItems.clear(); // clear any items that used to exist - mItems.push_back(std::string("Purge Item")); - if (!isItemRemovable()) - { - mDisabledItems.push_back(std::string("Purge Item")); - } - - mItems.push_back(std::string("Restore Item")); + addTrashContextMenuOptions(mItems, mDisabledItems); } else if(isAgentInventory()) // do not allow creating in library { @@ -2617,24 +2674,27 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) mItems.push_back(std::string("New Gesture")); mItems.push_back(std::string("New Clothes")); mItems.push_back(std::string("New Body Parts")); - mItems.push_back(std::string("Change Type")); - LLViewerInventoryCategory *cat = getCategory(); + // Changing folder types is just a debug feature; this is fairly unsupported + // and can lead to unexpected behavior if enabled. +#if !LL_RELEASE_FOR_DOWNLOAD + mItems.push_back(std::string("Change Type")); + const LLViewerInventoryCategory *cat = getCategory(); if (cat && LLFolderType::lookupIsProtectedType(cat->getPreferredType())) { mDisabledItems.push_back(std::string("Change Type")); } - +#endif getClipboardEntries(false, mItems, mDisabledItems, flags); } else { // Want some but not all of the items from getClipboardEntries for outfits. - if (cat && cat->getPreferredType()==LLFolderType::FT_OUTFIT) + if (cat && (cat->getPreferredType() == LLFolderType::FT_OUTFIT)) { mItems.push_back(std::string("Rename")); - mItems.push_back(std::string("Delete")); + addDeleteContextMenuOptions(mItems, mDisabledItems); // EXT-4030: disallow deletion of currently worn outfit const LLViewerInventoryItem *base_outfit_link = LLAppearanceManager::instance().getBaseOutfitLink(); if (base_outfit_link && (cat == base_outfit_link->getLinkedCategory())) @@ -2949,7 +3009,6 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, LLViewerObject* object = NULL; if(LLToolDragAndDrop::SOURCE_AGENT == source) { - BOOL is_movable = TRUE; switch( inv_item->getActualType() ) { @@ -2961,11 +3020,18 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, } const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); - BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id); + const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id); const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); - BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); - BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); + const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); + const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); + const BOOL move_is_outof_current_outfit = LLAppearanceManager::instance().getIsInCOF(inv_item->getUUID()); + // Can't explicitly drag things out of the COF. + if (move_is_outof_current_outfit) + { + is_movable = FALSE; + } + if(is_movable && move_is_into_trash) { is_movable = inv_item->getIsLinkType() || !get_is_item_worn(inv_item->getUUID()); @@ -3203,17 +3269,11 @@ bool LLTextureBridge::canSaveTexture(void) void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { lldebugs << "LLTextureBridge::buildContextMenu()" << llendl; - std::vector<std::string> items; - std::vector<std::string> disabled_items; - if(isInTrash()) + menuentry_vec_t items; + menuentry_vec_t disabled_items; + if(isItemInTrash()) { - items.push_back(std::string("Purge Item")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Purge Item")); - } - - items.push_back(std::string("Restore Item")); + addTrashContextMenuOptions(items, disabled_items); } else { @@ -3296,18 +3356,12 @@ void LLSoundBridge::openSoundPreview(void* which) void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { lldebugs << "LLSoundBridge::buildContextMenu()" << llendl; - std::vector<std::string> items; - std::vector<std::string> disabled_items; + menuentry_vec_t items; + menuentry_vec_t disabled_items; - if(isInTrash()) + if(isItemInTrash()) { - items.push_back(std::string("Purge Item")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Purge Item")); - } - - items.push_back(std::string("Restore Item")); + addTrashContextMenuOptions(items, disabled_items); } else { @@ -3344,19 +3398,13 @@ LLUIImagePtr LLLandmarkBridge::getIcon() const void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { - std::vector<std::string> items; - std::vector<std::string> disabled_items; + menuentry_vec_t items; + menuentry_vec_t disabled_items; lldebugs << "LLLandmarkBridge::buildContextMenu()" << llendl; - if(isInTrash()) + if(isItemInTrash()) { - items.push_back(std::string("Purge Item")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Purge Item")); - } - - items.push_back(std::string("Restore Item")); + addTrashContextMenuOptions(items, disabled_items); } else { @@ -3570,18 +3618,12 @@ void LLCallingCardBridge::openItem() void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { lldebugs << "LLCallingCardBridge::buildContextMenu()" << llendl; - std::vector<std::string> items; - std::vector<std::string> disabled_items; + menuentry_vec_t items; + menuentry_vec_t disabled_items; - if(isInTrash()) + if(isItemInTrash()) { - items.push_back(std::string("Purge Item")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Purge Item")); - } - - items.push_back(std::string("Restore Item")); + addTrashContextMenuOptions(items, disabled_items); } else { @@ -3592,9 +3634,13 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags) LLInventoryItem* item = getItem(); BOOL good_card = (item - && (LLUUID::null != item->getCreatorUUID()) - && (item->getCreatorUUID() != gAgent.getID())); - BOOL user_online = (LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID())); + && (LLUUID::null != item->getCreatorUUID()) + && (item->getCreatorUUID() != gAgent.getID())); + BOOL user_online = FALSE; + if (item) + { + user_online = (LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID())); + } items.push_back(std::string("Send Instant Message Separator")); items.push_back(std::string("Send Instant Message")); items.push_back(std::string("Offer Teleport...")); @@ -3781,7 +3827,12 @@ void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode BOOL inform_server = TRUE; BOOL deactivate_similar = FALSE; LLGestureManager::instance().setGestureLoadedCallback(mUUID, boost::bind(&LLGestureBridge::playGesture, mUUID)); - LLGestureManager::instance().activateGestureWithAsset(mUUID, gInventory.getItem(mUUID)->getAssetUUID(), inform_server, deactivate_similar); + LLViewerInventoryItem* item = gInventory.getItem(mUUID); + llassert(item); + if (item) + { + LLGestureManager::instance().activateGestureWithAsset(mUUID, item->getAssetUUID(), inform_server, deactivate_similar); + } } else { @@ -3836,17 +3887,11 @@ BOOL LLGestureBridge::removeItem() void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { lldebugs << "LLGestureBridge::buildContextMenu()" << llendl; - std::vector<std::string> items; - std::vector<std::string> disabled_items; - if(isInTrash()) + menuentry_vec_t items; + menuentry_vec_t disabled_items; + if(isItemInTrash()) { - items.push_back(std::string("Purge Item")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Purge Item")); - } - - items.push_back(std::string("Restore Item")); + addTrashContextMenuOptions(items, disabled_items); } else { @@ -3898,19 +3943,13 @@ LLUIImagePtr LLAnimationBridge::getIcon() const void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { - std::vector<std::string> items; - std::vector<std::string> disabled_items; + menuentry_vec_t items; + menuentry_vec_t disabled_items; lldebugs << "LLAnimationBridge::buildContextMenu()" << llendl; - if(isInTrash()) + if(isItemInTrash()) { - items.push_back(std::string("Purge Item")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Purge Item")); - } - - items.push_back(std::string("Restore Item")); + addTrashContextMenuOptions(items, disabled_items); } else { @@ -4036,12 +4075,13 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); gMessageSystem->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID()); gMessageSystem->sendReliable( gAgent.getRegion()->getHost()); - } - // this object might have been selected, so let the selection manager know it's gone now - LLViewerObject *found_obj = gObjectList.findObject(item->getLinkedUUID()); - if (found_obj) - { - LLSelectMgr::getInstance()->remove(found_obj); + + // this object might have been selected, so let the selection manager know it's gone now + LLViewerObject *found_obj = gObjectList.findObject(item->getLinkedUUID()); + if (found_obj) + { + LLSelectMgr::getInstance()->remove(found_obj); + } } } else LLItemBridge::performAction(folder, model, action); @@ -4179,17 +4219,11 @@ static LLNotificationFunctorRegistration confirm_replace_attachment_rez_reg("Rep void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { - std::vector<std::string> items; - std::vector<std::string> disabled_items; - if(isInTrash()) + menuentry_vec_t items; + menuentry_vec_t disabled_items; + if(isItemInTrash()) { - items.push_back(std::string("Purge Item")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Purge Item")); - } - - items.push_back(std::string("Restore Item")); + addTrashContextMenuOptions(items, disabled_items); } else { @@ -4215,9 +4249,10 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) if( get_is_item_worn( mUUID ) ) { + items.push_back(std::string("Attach Separator")); items.push_back(std::string("Detach From Yourself")); } - else if (!isInTrash() && !isLinkedObjectInTrash() && !isLinkedObjectMissing()) + else if (!isItemInTrash() && !isLinkedObjectInTrash() && !isLinkedObjectMissing()) { items.push_back(std::string("Attach Separator")); items.push_back(std::string("Object Wear")); @@ -4555,7 +4590,7 @@ void LLWearableBridge::openItem() LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); } /* - if( isInTrash() ) + if( isItemInTrash() ) { LLNotificationsUtil::add("CannotWearTrash"); } @@ -4595,17 +4630,11 @@ void LLWearableBridge::openItem() void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { lldebugs << "LLWearableBridge::buildContextMenu()" << llendl; - std::vector<std::string> items; - std::vector<std::string> disabled_items; - if(isInTrash()) + menuentry_vec_t items; + menuentry_vec_t disabled_items; + if(isItemInTrash()) { - items.push_back(std::string("Purge Item")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Purge Item")); - } - - items.push_back(std::string("Restore Item")); + addTrashContextMenuOptions(items, disabled_items); } else { // FWIW, it looks like SUPPRESS_OPEN_ITEM is not set anywhere @@ -4913,8 +4942,12 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable, } // Find and remove this item from the COF. + // FIXME 2.1 - call removeCOFItemLinks in llappearancemgr instead. LLInventoryModel::item_array_t items = gInventory.collectLinkedItems(item_id, LLAppearanceManager::instance().getCOF()); - llassert(items.size() == 1); // Should always have one and only one item linked to this in the COF. + if (items.size() != 1) + { + llwarns << "Found " << items.size() << " COF links to " << item_id.asString() << ", expected 1" << llendl; + } for (LLInventoryModel::item_array_t::const_iterator iter = items.begin(); iter != items.end(); ++iter) @@ -4950,7 +4983,10 @@ void LLWearableBridge::removeAllClothesFromAvatar() // Find and remove this item from the COF. LLInventoryModel::item_array_t items = gInventory.collectLinkedItems( item_id, LLAppearanceManager::instance().getCOF()); - llassert(items.size() == 1); // Should always have one and only one item linked to this in the COF. + if (items.size() != 1) + { + llwarns << "Found " << items.size() << " COF links to " << item_id.asString() << ", expected 1" << llendl; + } for (LLInventoryModel::item_array_t::const_iterator iter = items.begin(); iter != items.end(); ++iter) @@ -5192,7 +5228,7 @@ void LLLSLTextBridgeAction::doIt() } -BOOL LLWearableBridgeAction::isInTrash() const +BOOL LLWearableBridgeAction::isItemInTrash() const { if(!mModel) return FALSE; const LLUUID trash_id = mModel->findCategoryUUIDForType(LLFolderType::FT_TRASH); @@ -5240,7 +5276,7 @@ void LLWearableBridgeAction::wearOnAvatar() //virtual void LLWearableBridgeAction::doIt() { - if(isInTrash()) + if(isItemInTrash()) { LLNotificationsUtil::add("CannotWearTrash"); } @@ -5299,30 +5335,20 @@ void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { // *TODO: Translate lldebugs << "LLLink::buildContextMenu()" << llendl; - std::vector<std::string> items; - std::vector<std::string> disabled_items; + menuentry_vec_t items; + menuentry_vec_t disabled_items; items.push_back(std::string("Find Original")); disabled_items.push_back(std::string("Find Original")); - if(isInTrash()) + if(isItemInTrash()) { - items.push_back(std::string("Purge Item")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Purge Item")); - } - - items.push_back(std::string("Restore Item")); + addTrashContextMenuOptions(items, disabled_items); } else { items.push_back(std::string("Properties")); - items.push_back(std::string("Delete")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Delete")); - } + addDeleteContextMenuOptions(items, disabled_items); } hide_context_entries(menu, items, disabled_items); } @@ -5353,27 +5379,17 @@ void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { // *TODO: Translate lldebugs << "LLLink::buildContextMenu()" << llendl; - std::vector<std::string> items; - std::vector<std::string> disabled_items; + menuentry_vec_t items; + menuentry_vec_t disabled_items; - if(isInTrash()) + if (isItemInTrash()) { - items.push_back(std::string("Purge Item")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Purge Item")); - } - - items.push_back(std::string("Restore Item")); + addTrashContextMenuOptions(items, disabled_items); } else { items.push_back(std::string("Find Original")); - items.push_back(std::string("Delete")); - if (!isItemRemovable()) - { - disabled_items.push_back(std::string("Delete")); - } + addDeleteContextMenuOptions(items, disabled_items); } hide_context_entries(menu, items, disabled_items); } diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 6fffec96a0..32504091cb 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -107,13 +107,15 @@ struct LLAttachmentRezAction S32 mAttachPt; }; +typedef std::vector<std::string> menuentry_vec_t; + const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type); void hide_context_entries(LLMenuGL& menu, - const std::vector<std::string> &entries_to_show, - const std::vector<std::string> &disabled_entries); + const menuentry_vec_t &entries_to_show, + const menuentry_vec_t &disabled_entries); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLInvFVBridge (& it's derived classes) +// Class LLInvFVBridge (& its derived classes) // // Short for Inventory-Folder-View-Bridge. This is an // implementation class to be able to view inventory items. @@ -158,8 +160,10 @@ public: virtual void showProperties(); virtual BOOL isItemRenameable() const { return TRUE; } //virtual BOOL renameItem(const std::string& new_name) {} - virtual BOOL isItemRemovable(); + virtual BOOL isItemRemovable() const; virtual BOOL isItemMovable() const; + virtual BOOL isItemInTrash() const; + //virtual BOOL removeItem() = 0; virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch); virtual void move(LLFolderViewEventListener* new_parent_bridge) {} @@ -170,8 +174,8 @@ public: virtual BOOL isClipboardPasteableAsLink() const; virtual void pasteFromClipboard() {} virtual void pasteLinkFromClipboard() {} - void getClipboardEntries(bool show_asset_id, std::vector<std::string> &items, - std::vector<std::string> &disabled_items, U32 flags); + void getClipboardEntries(bool show_asset_id, menuentry_vec_t &items, + menuentry_vec_t &disabled_items, U32 flags); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const; virtual BOOL dragOrDrop(MASK mask, BOOL drop, @@ -185,13 +189,21 @@ public: // Allow context menus to be customized for side panel. bool isInOutfitsSidePanel() const; + //-------------------------------------------------------------------- + // Convenience functions for adding various common menu options. + //-------------------------------------------------------------------- +protected: + virtual void addTrashContextMenuOptions(menuentry_vec_t &items, + menuentry_vec_t &disabled_items); + virtual void addDeleteContextMenuOptions(menuentry_vec_t &items, + menuentry_vec_t &disabled_items); + protected: LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid); LLInventoryObject* getInventoryObject() const; LLInventoryModel* getInventoryModel() const; - BOOL isInTrash() const; BOOL isLinkedObjectInTrash() const; // Is this obj or its baseobj in the trash? BOOL isLinkedObjectMissing() const; // Is this a linked obj whose baseobj is not in inventory? @@ -306,7 +318,7 @@ public: EDragAndDropType cargo_type, void* cargo_data); - virtual BOOL isItemRemovable(); + virtual BOOL isItemRemovable() const; virtual BOOL isItemMovable() const ; virtual BOOL isUpToDate() const; virtual BOOL isItemCopyable() const; @@ -359,8 +371,8 @@ private: BOOL mCallingCards; BOOL mWearables; LLMenuGL* mMenu; - std::vector<std::string> mItems; - std::vector<std::string> mDisabledItems; + menuentry_vec_t mItems; + menuentry_vec_t mDisabledItems; }; // DEPRECATED @@ -786,7 +798,7 @@ protected: LLWearableBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - BOOL isInTrash() const; + BOOL isItemInTrash() const; // return true if the item is in agent inventory. if false, it // must be lost or in the inventory library. BOOL isAgentInventory() const; @@ -814,7 +826,7 @@ void teleport_via_landmark(const LLUUID& asset_id); // Utility function to hide all entries except those in the list void hide_context_entries(LLMenuGL& menu, - const std::vector<std::string> &entries_to_show, - const std::vector<std::string> &disabled_entries); + const menuentry_vec_t &entries_to_show, + const menuentry_vec_t &disabled_entries); #endif // LL_LLINVENTORYBRIDGE_H diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 12a2c370d2..ca9b942629 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -143,6 +143,7 @@ BOOL LLInventoryPanel::postBuild() addChild(mScroller); mScroller->addChild(mFolders); mFolders->setScrollContainer(mScroller); + mFolders->addChild(mFolders->mStatusTextBox); } // Set up the callbacks from the inventory we're viewing, and then build everything. @@ -432,7 +433,26 @@ void LLInventoryPanel::initializeViews() rebuildViewsFor(mStartFolderID); mViewsInitialized = true; + openStartFolderOrMyInventory(); + + // Special case for new user login + if (gAgent.isFirstLogin()) + { + // Auto open the user's library + LLFolderViewFolder* lib_folder = mFolders->getFolderByID(gInventory.getLibraryRootFolderID()); + if (lib_folder) + { + lib_folder->setOpen(TRUE); + } + + // Auto close the user's my inventory folder + LLFolderViewFolder* my_inv_folder = mFolders->getFolderByID(gInventory.getRootFolderID()); + if (my_inv_folder) + { + my_inv_folder->setOpenArrangeRecursively(FALSE, LLFolderViewFolder::RECURSE_DOWN); + } + } } void LLInventoryPanel::rebuildViewsFor(const LLUUID& id) @@ -503,6 +523,11 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) { folderp->setHidden(TRUE); } + const LLViewerInventoryCategory *cat = dynamic_cast<LLViewerInventoryCategory *>(objectp); + if (cat && getIsHiddenFolderType(cat->getPreferredType())) + { + folderp->setHidden(TRUE); + } } } else @@ -534,6 +559,12 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) if (itemp) { itemp->addToFolder(parent_folder, mFolders); + + // Don't add children of hidden folders unless this is the panel's root folder. + if (itemp->getHidden() && (id != mStartFolderID)) + { + return; + } } } @@ -935,3 +966,16 @@ LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open) return NULL; } + +void LLInventoryPanel::addHideFolderType(LLFolderType::EType folder_type) +{ + if (!getIsHiddenFolderType(folder_type)) + { + mHiddenFolderTypes.push_back(folder_type); + } +} + +BOOL LLInventoryPanel::getIsHiddenFolderType(LLFolderType::EType folder_type) const +{ + return (std::find(mHiddenFolderTypes.begin(), mHiddenFolderTypes.end(), folder_type) != mHiddenFolderTypes.end()); +} diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index ccff795a51..f312b588b9 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -61,6 +61,9 @@ class LLTabContainer; class LLInventoryPanel : public LLPanel { + //-------------------------------------------------------------------- + // Data + //-------------------------------------------------------------------- public: static const std::string DEFAULT_SORT_ORDER; static const std::string RECENTITEMS_SORT_ORDER; @@ -97,13 +100,16 @@ public: {} }; + //-------------------------------------------------------------------- + // Initialization + //-------------------------------------------------------------------- protected: LLInventoryPanel(const Params&); friend class LLUICtrlFactory; - public: virtual ~LLInventoryPanel(); +public: LLInventoryModel* getModel() { return mInventory; } BOOL postBuild(); @@ -187,6 +193,16 @@ protected: const LLInventoryFVBridgeBuilder* mInvFVBridgeBuilder; //-------------------------------------------------------------------- + // Hidden folders + //-------------------------------------------------------------------- +public: + void addHideFolderType(LLFolderType::EType folder_type); +protected: + BOOL getIsHiddenFolderType(LLFolderType::EType folder_type) const; +private: + std::vector<LLFolderType::EType> mHiddenFolderTypes; + + //-------------------------------------------------------------------- // Initialization routines for building up the UI ("views") //-------------------------------------------------------------------- public: diff --git a/indra/newview/lllocaltextureobject.cpp b/indra/newview/lllocaltextureobject.cpp index 69eb5fce2f..116d9bc446 100644 --- a/indra/newview/lllocaltextureobject.cpp +++ b/indra/newview/lllocaltextureobject.cpp @@ -70,6 +70,7 @@ LLLocalTextureObject::LLLocalTextureObject(const LLLocalTextureObject& lto) : if (!original_layer) { llerrs << "could not clone Local Texture Object: unable to extract texlayer!" << llendl; + continue; } LLTexLayer* new_layer = new LLTexLayer(*original_layer); diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 4f40a0a532..f48c96190f 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -176,7 +176,9 @@ private: static LLDefaultChildRegistry::Register<LLLocationInputCtrl> r("location_input"); LLLocationInputCtrl::Params::Params() -: add_landmark_image_enabled("add_landmark_image_enabled"), +: icon_maturity_general("icon_maturity_general"), + icon_maturity_adult("icon_maturity_adult"), + add_landmark_image_enabled("add_landmark_image_enabled"), add_landmark_image_disabled("add_landmark_image_disabled"), add_landmark_image_hover("add_landmark_image_hover"), add_landmark_image_selected("add_landmark_image_selected"), @@ -185,6 +187,7 @@ LLLocationInputCtrl::Params::Params() add_landmark_button("add_landmark_button"), for_sale_button("for_sale_button"), info_button("info_button"), + maturity_icon("maturity_icon"), voice_icon("voice_icon"), fly_icon("fly_icon"), push_icon("push_icon"), @@ -204,7 +207,9 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p) mForSaleBtn(NULL), mInfoBtn(NULL), mLandmarkImageOn(NULL), - mLandmarkImageOff(NULL) + mLandmarkImageOff(NULL), + mIconMaturityGeneral(NULL), + mIconMaturityAdult(NULL) { // Lets replace default LLLineEditor with LLLocationLineEditor // to make needed escaping while copying and cutting url @@ -227,6 +232,7 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p) params.commit_on_focus_lost(false); params.follows.flags(FOLLOWS_ALL); mTextEntry = LLUICtrlFactory::create<LLURLLineEditor>(params); + mTextEntry->setContextMenu(NULL); addChild(mTextEntry); // LLLineEditor is replaced with LLLocationLineEditor @@ -263,7 +269,20 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p) mAddLandmarkBtn = LLUICtrlFactory::create<LLButton>(al_params); enableAddLandmarkButton(true); addChild(mAddLandmarkBtn); - + + if (p.icon_maturity_general()) + { + mIconMaturityGeneral = p.icon_maturity_general; + } + if (p.icon_maturity_adult()) + { + mIconMaturityAdult = p.icon_maturity_adult; + } + + LLIconCtrl::Params maturity_icon = p.maturity_icon; + mMaturityIcon = LLUICtrlFactory::create<LLIconCtrl>(maturity_icon); + addChild(mMaturityIcon); + LLButton::Params for_sale_button = p.for_sale_button; for_sale_button.tool_tip = LLTrans::getString("LocationCtrlForSaleTooltip"); for_sale_button.click_callback.function( @@ -470,7 +489,10 @@ void LLLocationInputCtrl::onTextEntry(LLLineEditor* line_editor) */ void LLLocationInputCtrl::setText(const LLStringExplicit& text) { - mTextEntry->setText(text); + if (mTextEntry) + { + mTextEntry->setText(text); + } mHasAutocompletedText = FALSE; } @@ -479,7 +501,9 @@ void LLLocationInputCtrl::setFocus(BOOL b) LLComboBox::setFocus(b); if (mTextEntry && b && !mList->getVisible()) + { mTextEntry->setFocus(TRUE); + } } void LLLocationInputCtrl::handleLoginComplete() @@ -521,6 +545,25 @@ void LLLocationInputCtrl::draw() LLComboBox::draw(); } +void LLLocationInputCtrl::reshape(S32 width, S32 height, BOOL called_from_parent) +{ + LLComboBox::reshape(width, height, called_from_parent); + + // Setting cursor to 0 to show the left edge of the text. See EXT-4967. + mTextEntry->setCursor(0); + if (mTextEntry->hasSelection()) + { + // Deselecting because selection position is changed together with + // cursor position change. + mTextEntry->deselect(); + } + + if (isHumanReadableLocationVisible) + { + positionMaturityIcon(); + } +} + void LLLocationInputCtrl::onInfoButtonClicked() { LLSideTray::getInstance()->showPanel("panel_places", LLSD().with("type", "agent")); @@ -650,8 +693,8 @@ void LLLocationInputCtrl::refreshLocation() { // Is one of our children focused? if (LLUICtrl::hasFocus() || mButton->hasFocus() || mList->hasFocus() || - (mTextEntry && mTextEntry->hasFocus()) || (mAddLandmarkBtn->hasFocus())) - + (mTextEntry && mTextEntry->hasFocus()) || + (mAddLandmarkBtn->hasFocus())) { llwarns << "Location input should not be refreshed when having focus" << llendl; return; @@ -671,6 +714,34 @@ void LLLocationInputCtrl::refreshLocation() // store human-readable location to compare it in changeLocationPresentation() mHumanReadableLocation = location_name; setText(location_name); + isHumanReadableLocationVisible = true; + + // Updating maturity rating icon. + LLViewerRegion* region = gAgent.getRegion(); + if (!region) + return; + + U8 sim_access = region->getSimAccess(); + switch(sim_access) + { + case SIM_ACCESS_PG: + mMaturityIcon->setValue(mIconMaturityGeneral->getName()); + mMaturityIcon->setVisible(TRUE); + break; + + case SIM_ACCESS_ADULT: + mMaturityIcon->setValue(mIconMaturityAdult->getName()); + mMaturityIcon->setVisible(TRUE); + break; + + default: + mMaturityIcon->setVisible(FALSE); + } + + if (mMaturityIcon->getVisible()) + { + positionMaturityIcon(); + } } // returns new right edge @@ -691,7 +762,7 @@ void LLLocationInputCtrl::refreshParcelIcons() { // Our "cursor" moving right to left S32 x = mAddLandmarkBtn->getRect().mLeft; - + static LLUICachedControl<bool> show_properties("NavBarShowParcelProperties", false); if (show_properties) { @@ -761,7 +832,7 @@ void LLLocationInputCtrl::refreshParcelIcons() } mDamageText->setVisible(false); } - + S32 left_pad, right_pad; mTextEntry->getTextPadding(&left_pad, &right_pad); right_pad = mTextEntry->getRect().mRight - x; @@ -784,6 +855,25 @@ void LLLocationInputCtrl::refreshHealth() } } +void LLLocationInputCtrl::positionMaturityIcon() +{ + const LLFontGL* font = mTextEntry->getFont(); + if (!font) + return; + + S32 left_pad, right_pad; + mTextEntry->getTextPadding(&left_pad, &right_pad); + + // Calculate the right edge of rendered text + a whitespace. + left_pad = left_pad + font->getWidth(mTextEntry->getText()) + font->getWidth(" "); + + LLRect rect = mMaturityIcon->getRect(); + mMaturityIcon->setRect(rect.setOriginAndSize(left_pad, rect.mBottom, rect.getWidth(), rect.getHeight())); + + // Hide icon if it text area is not width enough to display it, show otherwise. + mMaturityIcon->setVisible(rect.mRight < mTextEntry->getRect().getWidth() - right_pad); +} + void LLLocationInputCtrl::rebuildLocationHistory(std::string filter) { LLLocationHistory::location_list_t filtered_items; @@ -884,16 +974,23 @@ void LLLocationInputCtrl::updateWidgetlayout() void LLLocationInputCtrl::changeLocationPresentation() { - //change location presentation only if user does not select/past anything and - //human-readable region name is being displayed + if (!mTextEntry) + return; + + //change location presentation only if user does not select/paste anything and + //human-readable region name is being displayed std::string text = mTextEntry->getText(); LLStringUtil::trim(text); - if(mTextEntry && !mTextEntry->hasSelection() && text == mHumanReadableLocation ) + if(!mTextEntry->hasSelection() && text == mHumanReadableLocation) { //needs unescaped one mTextEntry->setText(LLAgentUI::buildSLURL(false)); mTextEntry->selectAll(); - } + + mMaturityIcon->setVisible(FALSE); + + isHumanReadableLocationVisible = false; + } } void LLLocationInputCtrl::onLocationContextMenuItemClicked(const LLSD& userdata) diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h index a830b33f6f..caa62daa1b 100644 --- a/indra/newview/lllocationinputctrl.h +++ b/indra/newview/lllocationinputctrl.h @@ -63,7 +63,9 @@ public: struct Params : public LLInitParam::Block<Params, LLComboBox::Params> { - Optional<LLUIImage*> add_landmark_image_enabled, + Optional<LLUIImage*> icon_maturity_general, + icon_maturity_adult, + add_landmark_image_enabled, add_landmark_image_disabled, add_landmark_image_hover, add_landmark_image_selected; @@ -72,7 +74,8 @@ public: Optional<LLButton::Params> add_landmark_button, for_sale_button, info_button; - Optional<LLIconCtrl::Params> voice_icon, + Optional<LLIconCtrl::Params> maturity_icon, + voice_icon, fly_icon, push_icon, build_icon, @@ -89,6 +92,7 @@ public: /*virtual*/ void onFocusReceived(); /*virtual*/ void onFocusLost(); /*virtual*/ void draw(); + /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); //======================================================================== // LLUICtrl interface @@ -131,6 +135,7 @@ private: void refreshParcelIcons(); // Refresh the value in the health percentage text field void refreshHealth(); + void positionMaturityIcon(); void rebuildLocationHistory(std::string filter = ""); bool findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter); @@ -160,7 +165,8 @@ private: LLButton* mInfoBtn; S32 mIconHPad; // pad between all icons S32 mAddLandmarkHPad; // pad to left of landmark star - + + LLIconCtrl* mMaturityIcon; LLIconCtrl* mParcelIcon[ICON_COUNT]; LLTextBox* mDamageText; @@ -172,11 +178,14 @@ private: boost::signals2::connection mLocationHistoryConnection; LLUIImage* mLandmarkImageOn; LLUIImage* mLandmarkImageOff; + LLUIImage* mIconMaturityGeneral; + LLUIImage* mIconMaturityAdult; std::string mAddLandmarkTooltip; std::string mEditLandmarkTooltip; // this field holds a human-readable form of the location string, it is needed to be able to compare copy-pated value and real location std::string mHumanReadableLocation; + bool isHumanReadableLocationVisible; }; #endif diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index d464862eed..501a137b42 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -542,9 +542,9 @@ void LLMediaCtrl::navigateToLocalPage( const std::string& subdir, const std::str if (! gDirUtilp->fileExists(expanded_filename)) { - if (language != "en-us") + if (language != "en") { - expanded_filename = gDirUtilp->findSkinnedFilename("html", "en-us", filename); + expanded_filename = gDirUtilp->findSkinnedFilename("html", "en", filename); if (! gDirUtilp->fileExists(expanded_filename)) { llwarns << "File " << subdir << delim << filename_in << "not found" << llendl; @@ -982,16 +982,20 @@ void LLMediaCtrl::onClickLinkHref( LLPluginClassMedia* self ) U32 target_type = self->getClickTargetType(); // is there is a target specified for the link? - if (gSavedSettings.getBOOL("UseExternalBrowser") || target_type == LLPluginClassMedia::TARGET_EXTERNAL) + if (target_type == LLPluginClassMedia::TARGET_EXTERNAL || + target_type == LLPluginClassMedia::TARGET_BLANK ) { - LLSD payload; - payload["url"] = url; - payload["target_type"] = LLSD::Integer(target_type); - LLNotificationsUtil::add( "WebLaunchExternalTarget", LLSD(), payload, onClickLinkExternalTarget); - } - else if (target_type == LLPluginClassMedia::TARGET_BLANK) - { - clickLinkWithTarget(url, target_type); + if (gSavedSettings.getBOOL("UseExternalBrowser")) + { + LLSD payload; + payload["url"] = url; + payload["target_type"] = LLSD::Integer(target_type); + LLNotificationsUtil::add( "WebLaunchExternalTarget", LLSD(), payload, onClickLinkExternalTarget); + } + else + { + clickLinkWithTarget(url, target_type); + } } else { const std::string protocol1( "http://" ); @@ -1042,7 +1046,7 @@ bool LLMediaCtrl::onClickLinkExternalTarget(const LLSD& notification, const LLSD // static void LLMediaCtrl::clickLinkWithTarget(const std::string& url, const S32& target_type ) { - if (gSavedSettings.getBOOL("UseExternalBrowser") || target_type == LLPluginClassMedia::TARGET_EXTERNAL) + if (target_type == LLPluginClassMedia::TARGET_EXTERNAL) { // load target in an external browser LLWeb::loadURLExternal(url); diff --git a/indra/newview/llmediadataclient.h b/indra/newview/llmediadataclient.h index 75d32e707b..8dd72cb595 100755 --- a/indra/newview/llmediadataclient.h +++ b/indra/newview/llmediadataclient.h @@ -37,7 +37,7 @@ #include <queue> #include "llrefcount.h" #include "llpointer.h" -#include "lltimer.h" +#include "lleventtimer.h" // Link seam for LLVOVolume diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index 73d5fccfbd..5058939b0a 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -152,6 +152,7 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask) if (avatar_id.notNull()) { // ...valid avatar id + LLScrollListCell* hit_cell = hit_item->getColumn(column_index); if (hit_cell) { @@ -162,8 +163,8 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask) localRectToScreen(cell_rect, &sticky_rect); // Spawn at right side of cell - LLCoordGL pos( sticky_rect.mRight - 16, sticky_rect.mTop + (sticky_rect.getHeight()-16)/2 ); LLPointer<LLUIImage> icon = LLUI::getUIImage("Info_Small"); + LLCoordGL pos( sticky_rect.mRight - 16, sticky_rect.mTop - (sticky_rect.getHeight() - icon->getHeight())/2 ); // Should we show a group or an avatar inspector? bool is_group = hit_item->getValue()["is_group"].asBoolean(); @@ -327,8 +328,7 @@ void LLNameListCtrl::refresh(const LLUUID& id, const std::string& full_name, boo LLScrollListItem* item = *iter; if (item->getUUID() == id) { - LLScrollListCell* cell = (LLScrollListCell*)item->getColumn(0); - cell = item->getColumn(mNameColumnIndex); + LLScrollListCell* cell = item->getColumn(mNameColumnIndex); if (cell) { cell->setValue(full_name); @@ -343,8 +343,9 @@ void LLNameListCtrl::refresh(const LLUUID& id, const std::string& full_name, boo // static void LLNameListCtrl::refreshAll(const LLUUID& id, const std::string& full_name, bool is_group) { + LLInstanceTrackerScopedGuard guard; LLInstanceTracker<LLNameListCtrl>::instance_iter it; - for (it = beginInstances(); it != endInstances(); ++it) + for (it = guard.beginInstances(); it != guard.endInstances(); ++it) { LLNameListCtrl& ctrl = *it; ctrl.refresh(id, full_name, is_group); diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index 59708fcfb5..46cab0d868 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -185,43 +185,46 @@ void LLTeleportHistoryMenuItem::onMouseLeave(S32 x, S32 y, MASK mask) static LLDefaultChildRegistry::Register<LLPullButton> menu_button("pull_button"); -LLPullButton::LLPullButton(const LLPullButton::Params& params): - LLButton(params) - , mClickDraggingSignal(NULL) +LLPullButton::LLPullButton(const LLPullButton::Params& params) : + LLButton(params) { setDirectionFromName(params.direction); } -boost::signals2::connection LLPullButton::setClickDraggingCallback( const commit_signal_t::slot_type& cb ) -{ - if (!mClickDraggingSignal) mClickDraggingSignal = new commit_signal_t(); - return mClickDraggingSignal->connect(cb); +boost::signals2::connection LLPullButton::setClickDraggingCallback(const commit_signal_t::slot_type& cb) +{ + return mClickDraggingSignal.connect(cb); } /*virtual*/ void LLPullButton::onMouseLeave(S32 x, S32 y, MASK mask) { LLButton::onMouseLeave(x, y, mask); - - if(mMouseDownTimer.getStarted() ) + + if (mMouseDownTimer.getStarted()) //an user have done a mouse down, if the timer started. see LLButton::handleMouseDown for details { - const LLVector2 cursor_direction = LLVector2(F32(x),F32(y)) - mLastMouseDown; - if( angle_between(mDraggingDirection, cursor_direction) < 0.5 * F_PI_BY_TWO)//call if angle < pi/4 - { - if(mClickDraggingSignal) - { - (*mClickDraggingSignal)(this, LLSD()); - } - } + const LLVector2 cursor_direction = LLVector2(F32(x), F32(y)) - mLastMouseDown; + /* For now cursor_direction points to the direction of mouse movement + * Need to decide whether should we fire a signal. + * We fire if angle between mDraggingDirection and cursor_direction is less that 45 degree + * Note: + * 0.5 * F_PI_BY_TWO equals to PI/4 radian that equals to angle of 45 degrees + */ + if (angle_between(mDraggingDirection, cursor_direction) < 0.5 * F_PI_BY_TWO)//call if angle < pi/4 + { + mClickDraggingSignal(this, LLSD()); + } } } /*virtual*/ BOOL LLPullButton::handleMouseDown(S32 x, S32 y, MASK mask) +{ + BOOL handled = LLButton::handleMouseDown(x, y, mask); + if (handled) { - BOOL handled = LLButton::handleMouseDown(x,y, mask); - if(handled) - { + //if mouse down was handled by button, + //capture mouse position to calculate the direction of mouse move after mouseLeave event mLastMouseDown.set(F32(x), F32(y)); } return handled; @@ -230,27 +233,31 @@ BOOL LLPullButton::handleMouseDown(S32 x, S32 y, MASK mask) /*virtual*/ BOOL LLPullButton::handleMouseUp(S32 x, S32 y, MASK mask) { + // reset data to get ready for next circle mLastMouseDown.clear(); return LLButton::handleMouseUp(x, y, mask); } - +/** + * this function is setting up dragging direction vector. + * Last one is just unit vector. It points to direction of mouse drag that we need to handle + */ void LLPullButton::setDirectionFromName(const std::string& name) { if (name == "left") { - mDraggingDirection.set(F32(-1), F32(0)); + mDraggingDirection.set(F32(-1), F32(0)); } else if (name == "right") { - mDraggingDirection.set(F32(0), F32(1)); + mDraggingDirection.set(F32(0), F32(1)); } else if (name == "down") { - mDraggingDirection.set(F32(0), F32(-1)); + mDraggingDirection.set(F32(0), F32(-1)); } else if (name == "up") { - mDraggingDirection.set(F32(0), F32(1)); + mDraggingDirection.set(F32(0), F32(1)); } } diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h index 9d0abc7a3a..b512f2a79c 100644 --- a/indra/newview/llnavigationbar.h +++ b/indra/newview/llnavigationbar.h @@ -44,46 +44,41 @@ class LLSearchComboBox; /** * This button is able to handle click-dragging mouse event. * It has appropriated signal for this event. - * Dragging direction can be set from xml by attribute called 'direction' + * Dragging direction can be set from xml attribute called 'direction' * * *TODO: move to llui? */ -class LLPullButton : public LLButton +class LLPullButton: public LLButton { LOG_CLASS(LLPullButton); - + public: - - struct Params : public LLInitParam::Block<Params, LLButton::Params> + struct Params: public LLInitParam::Block<Params, LLButton::Params> { - Optional<std::string> direction; // left, right, down, up - - Params() - : direction("direction","down") - {} + Optional<std::string> direction; // left, right, down, up + + Params() + : direction("direction", "down") + { + } }; /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); - + /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); - + /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask); - boost::signals2::connection setClickDraggingCallback( const commit_signal_t::slot_type& cb ); - - /* virtual*/ ~LLPullButton() - { - delete mClickDraggingSignal; - } - + boost::signals2::connection setClickDraggingCallback(const commit_signal_t::slot_type& cb); + protected: friend class LLUICtrlFactory; // convert string name into direction vector void setDirectionFromName(const std::string& name); LLPullButton(const LLPullButton::Params& params); - - commit_signal_t* mClickDraggingSignal; + + commit_signal_t mClickDraggingSignal; LLVector2 mLastMouseDown; LLVector2 mDraggingDirection; }; diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 6de47fccd2..8fc11d3929 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -200,18 +200,16 @@ void LLNearbyChat::addMessage(const LLChat& chat,bool archive,const LLSD &args) mMessageArchive.push_back(chat); if(mMessageArchive.size()>200) mMessageArchive.erase(mMessageArchive.begin()); + } - if (gSavedPerAccountSettings.getBOOL("LogChat")) - { - if (chat.mChatType != CHAT_TYPE_WHISPER && chat.mChatType != CHAT_TYPE_SHOUT) - { - LLLogChat::saveHistory("chat", chat.mFromName, chat.mFromID, chat.mText); - } - else - { - LLLogChat::saveHistory("chat", "", chat.mFromID, chat.mFromName + " " + chat.mText); - } - } + if (args["do_not_log"].asBoolean()) + { + return; + } + + if (gSavedPerAccountSettings.getBOOL("LogChat")) + { + LLLogChat::saveHistory("chat", chat.mFromName, chat.mFromID, chat.mText); } } @@ -282,6 +280,9 @@ void LLNearbyChat::processChatHistoryStyleUpdate(const LLSD& newvalue) void LLNearbyChat::loadHistory() { + LLSD do_not_log; + do_not_log["do_not_log"] = true; + std::list<LLSD> history; LLLogChat::loadAllHistory("chat", history); @@ -302,7 +303,7 @@ void LLNearbyChat::loadHistory() chat.mFromID = from_id; chat.mText = msg[IM_TEXT].asString(); chat.mTimeStr = msg[IM_TIME].asString(); - addMessage(chat); + addMessage(chat, true, do_not_log); it++; } diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index c08ca30bab..29e3c66684 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -274,6 +274,13 @@ void LLNearbyChatScreenChannel::showToastsBottom() toast->setRect(toast_rect); toast->setIsHidden(false); toast->setVisible(TRUE); + + if(!toast->hasFocus()) + { + // Fixing Z-order of toasts (EXT-4862) + // Next toast will be positioned under this one. + gFloaterView->sendChildToBack(toast); + } bottom = toast->getRect().mTop; } @@ -338,8 +345,10 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args) // tmp_chat.mFromName = tmp_chat.mFromID.asString(); } nearby_chat->addMessage(chat_msg, true, args); - if(nearby_chat->getVisible()) - return;//no need in toast if chat is visible + if( nearby_chat->getVisible() + || ( chat_msg.mSourceType == CHAT_SOURCE_AGENT + && gSavedSettings.getBOOL("UseChatBubbles") ) ) + return;//no need in toast if chat is visible or if bubble chat is enabled // Handle irc styled messages for toast panel if (tmp_chat.mChatStyle == CHAT_STYLE_IRC) diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp index 388fdeea7a..9857e37bc3 100644 --- a/indra/newview/lloutputmonitorctrl.cpp +++ b/indra/newview/lloutputmonitorctrl.cpp @@ -249,6 +249,11 @@ void LLOutputMonitorCtrl::draw() void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id) { + if (speaker_id.isNull() && mSpeakerId.notNull()) + { + LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this); + } + if (speaker_id.isNull() || speaker_id == mSpeakerId) return; if (mSpeakerId.notNull()) @@ -256,6 +261,7 @@ void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id) // Unregister previous registration to avoid crash. EXT-4782. LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this); } + mSpeakerId = speaker_id; LLSpeakingIndicatorManager::registerSpeakingIndicator(mSpeakerId, this); diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index 500142aa67..1cc16a14bb 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -196,10 +196,9 @@ void LLPanelAvatarNotes::fillRightsData() childSetValue("map_check",LLRelationship::GRANT_MAP_LOCATION & rights ? TRUE : FALSE); childSetValue("objects_check",LLRelationship::GRANT_MODIFY_OBJECTS & rights ? TRUE : FALSE); - childSetEnabled("status_check",TRUE); - childSetEnabled("map_check",TRUE); - childSetEnabled("objects_check",TRUE); } + + enableCheckboxes(NULL != relation); } void LLPanelAvatarNotes::onCommitNotes() @@ -249,6 +248,17 @@ void LLPanelAvatarNotes::confirmModifyRights(bool grant, S32 rights) void LLPanelAvatarNotes::onCommitRights() { + const LLRelationship* buddy_relationship = + LLAvatarTracker::instance().getBuddyInfo(getAvatarId()); + + if (NULL == buddy_relationship) + { + // Lets have a warning log message instead of having a crash. EXT-4947. + llwarns << "Trying to modify rights for non-friend avatar. Skipped." << llendl; + return; + } + + S32 rights = 0; if(childGetValue("status_check").asBoolean()) @@ -258,8 +268,6 @@ void LLPanelAvatarNotes::onCommitRights() if(childGetValue("objects_check").asBoolean()) rights |= LLRelationship::GRANT_MODIFY_OBJECTS; - const LLRelationship* buddy_relationship = - LLAvatarTracker::instance().getBuddyInfo(getAvatarId()); bool allow_modify_objects = childGetValue("objects_check").asBoolean(); // if modify objects checkbox clicked @@ -303,9 +311,7 @@ void LLPanelAvatarNotes::resetControls() //Disable "Add Friend" button for friends. childSetEnabled("add_friend", TRUE); - childSetEnabled("status_check",FALSE); - childSetEnabled("map_check",FALSE); - childSetEnabled("objects_check",FALSE); + enableCheckboxes(false); } void LLPanelAvatarNotes::onAddFriendButtonClick() @@ -333,6 +339,13 @@ void LLPanelAvatarNotes::onShareButtonClick() //*TODO not implemented. } +void LLPanelAvatarNotes::enableCheckboxes(bool enable) +{ + childSetEnabled("status_check", enable); + childSetEnabled("map_check", enable); + childSetEnabled("objects_check", enable); +} + LLPanelAvatarNotes::~LLPanelAvatarNotes() { if(getAvatarId().notNull()) @@ -347,6 +360,9 @@ LLPanelAvatarNotes::~LLPanelAvatarNotes() void LLPanelAvatarNotes::changed(U32 mask) { childSetEnabled("teleport", LLAvatarTracker::instance().isBuddyOnline(getAvatarId())); + + // update rights to avoid have checkboxes enabled when friendship is terminated. EXT-4947. + fillRightsData(); } // virtual diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h index 632590aa27..52b4255e34 100644 --- a/indra/newview/llpanelavatar.h +++ b/indra/newview/llpanelavatar.h @@ -259,8 +259,8 @@ private: }; /** -* Panel for displaying Avatar's notes and modifying friend's rights. -*/ + * Panel for displaying Avatar's notes and modifying friend's rights. + */ class LLPanelAvatarNotes : public LLPanelProfileTab , public LLFriendObserver @@ -311,6 +311,7 @@ protected: void onCallButtonClick(); void onTeleportButtonClick(); void onShareButtonClick(); + void enableCheckboxes(bool enable); }; #endif // LL_LLPANELAVATAR_H diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index 1e46827c1a..8ca044f72b 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -242,7 +242,7 @@ BOOL LLPanelClassified::postBuild() mNameEditor->setCommitOnFocusLost(TRUE); mNameEditor->setFocusReceivedCallback(boost::bind(focusReceived, _1, this)); mNameEditor->setCommitCallback(onCommitAny, this); - mNameEditor->setPrevalidate( LLLineEditor::prevalidateASCII ); + mNameEditor->setPrevalidate( LLTextValidate::validateASCII ); mDescEditor = getChild<LLTextEditor>("desc_editor"); mDescEditor->setCommitOnFocusLost(TRUE); @@ -1072,7 +1072,7 @@ BOOL LLFloaterPriceForListing::postBuild() LLLineEditor* edit = getChild<LLLineEditor>("price_edit"); if (edit) { - edit->setPrevalidate(LLLineEditor::prevalidateNonNegativeS32); + edit->setPrevalidate(LLTextValidate::validateNonNegativeS32); std::string min_price = llformat("%d", MINIMUM_PRICE_FOR_LISTING); edit->setText(min_price); edit->selectAll(); diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp index 469f1c1739..ce4078409a 100644 --- a/indra/newview/llpanelgroup.cpp +++ b/indra/newview/llpanelgroup.cpp @@ -90,6 +90,7 @@ LLPanelGroup::LLPanelGroup() : LLPanel(), LLGroupMgrObserver( LLUUID() ), mSkipRefresh(FALSE), + mButtonJoin(NULL), mShowingNotifyDialog(false) { // Set up the factory callbacks. @@ -159,10 +160,6 @@ BOOL LLPanelGroup::postBuild() button = getChild<LLButton>("btn_chat"); button->setClickedCallback(onBtnGroupChatClicked, this); - button = getChild<LLButton>("btn_join"); - button->setVisible(false); - button->setEnabled(true); - button = getChild<LLButton>("btn_cancel"); button->setVisible(false); button->setEnabled(true); @@ -174,7 +171,7 @@ BOOL LLPanelGroup::postBuild() childSetCommitCallback("back",boost::bind(&LLPanelGroup::onBackBtnClick,this),NULL); childSetCommitCallback("btn_create",boost::bind(&LLPanelGroup::onBtnCreate,this),NULL); - childSetCommitCallback("btn_join",boost::bind(&LLPanelGroup::onBtnJoin,this),NULL); + childSetCommitCallback("btn_cancel",boost::bind(&LLPanelGroup::onBtnCancel,this),NULL); LLPanelGroupTab* panel_general = findChild<LLPanelGroupTab>("group_general_tab_panel"); @@ -188,7 +185,17 @@ BOOL LLPanelGroup::postBuild() if(panel_land) mTabs.push_back(panel_land); if(panel_general) + { panel_general->setupCtrls(this); + button = panel_general->getChild<LLButton>("btn_join"); + button->setVisible(false); + button->setEnabled(true); + + mButtonJoin = button; + mButtonJoin->setCommitCallback(boost::bind(&LLPanelGroup::onBtnJoin,this)); + + mJoinText = panel_general->getChild<LLUICtrl>("join_cost_text"); + } gVoiceClient->addObserver(this); @@ -326,16 +333,13 @@ void LLPanelGroup::update(LLGroupChange gc) { childSetValue("group_name", gdatap->mName); childSetToolTip("group_name",gdatap->mName); - - LLButton* btn_join = getChild<LLButton>("btn_join"); - LLUICtrl* join_text = getChild<LLUICtrl>("join_cost_text"); - + LLGroupData agent_gdatap; bool is_member = gAgent.getGroupData(mID,agent_gdatap); bool join_btn_visible = !is_member && gdatap->mOpenEnrollment; - btn_join->setVisible(join_btn_visible); - join_text->setVisible(join_btn_visible); + mButtonJoin->setVisible(join_btn_visible); + mJoinText->setVisible(join_btn_visible); if(join_btn_visible) { @@ -351,7 +355,7 @@ void LLPanelGroup::update(LLGroupChange gc) { fee_buff = getString("group_join_free", string_args); } - childSetValue("join_cost_text",fee_buff); + mJoinText->setValue(fee_buff); } } } @@ -380,7 +384,7 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id) LLButton* button_apply = findChild<LLButton>("btn_apply"); LLButton* button_refresh = findChild<LLButton>("btn_refresh"); LLButton* button_create = findChild<LLButton>("btn_create"); - LLButton* button_join = findChild<LLButton>("btn_join"); + LLButton* button_cancel = findChild<LLButton>("btn_cancel"); LLButton* button_call = findChild<LLButton>("btn_call"); LLButton* button_chat = findChild<LLButton>("btn_chat"); @@ -417,8 +421,8 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id) if(!tab_general || !tab_roles || !tab_notices || !tab_land) return; - if(button_join) - button_join->setVisible(false); + if(mButtonJoin) + mButtonJoin->setVisible(false); if(is_null_group_id)//creating new group @@ -478,6 +482,7 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id) } reposButtons(); + update(GC_ALL);//show/hide "join" button if data is already ready } bool LLPanelGroup::apply(LLPanelGroupTab* tab) diff --git a/indra/newview/llpanelgroup.h b/indra/newview/llpanelgroup.h index 6e23eedffb..136868a60d 100644 --- a/indra/newview/llpanelgroup.h +++ b/indra/newview/llpanelgroup.h @@ -130,6 +130,9 @@ protected: std::vector<LLPanelGroupTab* > mTabs; + LLButton* mButtonJoin; + LLUICtrl* mJoinText; + }; class LLPanelGroupTab : public LLPanel diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index 51fc670d87..555e277ce5 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -206,15 +206,19 @@ BOOL LLPanelGroupGeneral::postBuild() void LLPanelGroupGeneral::setupCtrls(LLPanel* panel_group) { - mInsignia = panel_group->getChild<LLTextureCtrl>("insignia"); + mInsignia = getChild<LLTextureCtrl>("insignia"); if (mInsignia) { mInsignia->setCommitCallback(onCommitAny, this); mDefaultIconID = mInsignia->getImageAssetID(); } - mFounderName = panel_group->getChild<LLNameBox>("founder_name"); + mFounderName = getChild<LLNameBox>("founder_name"); + + mGroupNameEditor = panel_group->getChild<LLLineEditor>("group_name_editor"); - mGroupNameEditor->setPrevalidate( LLLineEditor::prevalidateASCII ); + mGroupNameEditor->setPrevalidate( LLTextValidate::validateASCII ); + + } // static diff --git a/indra/newview/llpanellandaudio.cpp b/indra/newview/llpanellandaudio.cpp index 6a4c909759..a92b4357ed 100644 --- a/indra/newview/llpanellandaudio.cpp +++ b/indra/newview/llpanellandaudio.cpp @@ -153,6 +153,13 @@ void LLPanelLandAudio::refresh() mCheckParcelEnableVoice->set(allow_voice); mCheckParcelVoiceLocal->set(!parcel->getParcelFlagUseEstateVoiceChannel()); + // don't display urls if you're not able to change it + // much requested change in forums so people can't 'steal' urls + // NOTE: bug#2009 means this is still vunerable - however, bug + // should be closed since this bug opens up major security issues elsewhere. + bool obscure_music = ! can_change_media && parcel->getObscureMusic(); + + mMusicURLEdit->setDrawAsterixes(obscure_music); mMusicURLEdit->setText(parcel->getMusicURL()); mMusicURLEdit->setEnabled( can_change_media ); } diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp index ff27282cbf..3f292dc416 100644 --- a/indra/newview/llpanellandmarkinfo.cpp +++ b/indra/newview/llpanellandmarkinfo.cpp @@ -413,21 +413,24 @@ void LLPanelLandmarkInfo::populateFoldersList() // Put the "Landmarks" folder first in list. LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); - const LLViewerInventoryCategory* cat = gInventory.getCategory(landmarks_id); - if (!cat) + const LLViewerInventoryCategory* lmcat = gInventory.getCategory(landmarks_id); + if (!lmcat) { llwarns << "Cannot find the landmarks folder" << llendl; } - std::string cat_full_name = getFullFolderName(cat); - mFolderCombo->add(cat_full_name, cat->getUUID()); + else + { + std::string cat_full_name = getFullFolderName(lmcat); + mFolderCombo->add(cat_full_name, lmcat->getUUID()); + } typedef std::vector<folder_pair_t> folder_vec_t; folder_vec_t folders; // Sort the folders by their full name. for (S32 i = 0; i < cats.count(); i++) { - cat = cats.get(i); - cat_full_name = getFullFolderName(cat); + const LLViewerInventoryCategory* cat = cats.get(i); + std::string cat_full_name = getFullFolderName(cat); folders.push_back(folder_pair_t(cat->getUUID(), cat_full_name)); } sort(folders.begin(), folders.end(), cmp_folders); diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 47feef496a..f1cb6e87a3 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -171,8 +171,6 @@ BOOL LLLandmarksPanel::postBuild() initLandmarksInventoryPanel(); initMyInventoryPanel(); initLibraryInventoryPanel(); - getChild<LLAccordionCtrlTab>("tab_favorites")->setDisplayChildren(true); - getChild<LLAccordionCtrlTab>("tab_landmarks")->setDisplayChildren(true); return TRUE; } @@ -462,7 +460,7 @@ void LLLandmarksPanel::initFavoritesInventoryPanel() initLandmarksPanel(mFavoritesInventoryPanel); mFavoritesInventoryPanel->getFilter()->setEmptyLookupMessage("FavoritesNoMatchingItems"); - initAccordion("tab_favorites", mFavoritesInventoryPanel); + initAccordion("tab_favorites", mFavoritesInventoryPanel, true); } void LLLandmarksPanel::initLandmarksInventoryPanel() @@ -481,7 +479,7 @@ void LLLandmarksPanel::initLandmarksInventoryPanel() // subscribe to have auto-rename functionality while creating New Folder mLandmarksInventoryPanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mLandmarksInventoryPanel, _1, _2)); - initAccordion("tab_landmarks", mLandmarksInventoryPanel); + initAccordion("tab_landmarks", mLandmarksInventoryPanel, true); } void LLLandmarksPanel::initMyInventoryPanel() @@ -490,7 +488,7 @@ void LLLandmarksPanel::initMyInventoryPanel() initLandmarksPanel(mMyInventoryPanel); - initAccordion("tab_inventory", mMyInventoryPanel); + initAccordion("tab_inventory", mMyInventoryPanel, false); } void LLLandmarksPanel::initLibraryInventoryPanel() @@ -499,7 +497,15 @@ void LLLandmarksPanel::initLibraryInventoryPanel() initLandmarksPanel(mLibraryInventoryPanel); - initAccordion("tab_library", mLibraryInventoryPanel); + // We want to fetch only "Landmarks" category from the library. + const LLUUID &landmarks_cat = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false, true); + if (landmarks_cat.notNull()) + { + gInventory.startBackgroundFetch(landmarks_cat); + } + + // Expanding "Library" tab for new users who have no landmarks in "My Inventory". + initAccordion("tab_library", mLibraryInventoryPanel, true); } void LLLandmarksPanel::initLandmarksPanel(LLPlacesInventoryPanel* inventory_list) @@ -520,20 +526,21 @@ void LLLandmarksPanel::initLandmarksPanel(LLPlacesInventoryPanel* inventory_list { root_folder->setupMenuHandle(LLInventoryType::IT_CATEGORY, mGearFolderMenu->getHandle()); root_folder->setupMenuHandle(LLInventoryType::IT_LANDMARK, mGearLandmarkMenu->getHandle()); + + root_folder->setParentLandmarksPanel(this); } - root_folder->setParentLandmarksPanel(this); inventory_list->saveFolderState(); } -void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list) +void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list, bool expand_tab) { LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>(accordion_tab_name); mAccordionTabs.push_back(accordion_tab); accordion_tab->setDropDownStateChangedCallback( boost::bind(&LLLandmarksPanel::onAccordionExpandedCollapsed, this, _2, inventory_list)); - accordion_tab->setDisplayChildren(false); + accordion_tab->setDisplayChildren(expand_tab); } void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLPlacesInventoryPanel* inventory_list) diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h index 96b790844c..cbbd10ac26 100644 --- a/indra/newview/llpanellandmarks.h +++ b/indra/newview/llpanellandmarks.h @@ -110,7 +110,7 @@ private: void initMyInventoryPanel(); void initLibraryInventoryPanel(); void initLandmarksPanel(LLPlacesInventoryPanel* inventory_list); - void initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list); + void initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list, bool expand_tab); void onAccordionExpandedCollapsed(const LLSD& param, LLPlacesInventoryPanel* inventory_list); void deselectOtherThan(const LLPlacesInventoryPanel* inventory_list); diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 55b6249fd9..04fefe5874 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -213,8 +213,8 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, } #if !USE_VIEWER_AUTH - //childSetPrevalidate("login_id_edit", LLLineEditor::prevalidateASCIIPrintableNoSpace); - childSetPrevalidate("last_name_edit", LLLineEditor::prevalidateASCIIPrintableNoSpace); + //childSetPrevalidate("login_id_edit", LLTextValidate::validateASCIIPrintableNoSpace); + childSetPrevalidate("last_name_edit", LLTextValidate::validateASCIIPrintableNoSpace); childSetCommitCallback("password_edit", mungePassword, this); getChild<LLLineEditor>("password_edit")->setKeystrokeCallback(onPassKey, this); @@ -696,8 +696,7 @@ void LLPanelLogin::refreshLocation( bool force_visible ) { // Don't show on first run after install // Otherwise ShowStartLocation defaults to true. - show_start = gSavedSettings.getBOOL("ShowStartLocation") - && !gSavedSettings.getBOOL("FirstRunThisInstall"); + show_start = gSavedSettings.getBOOL("ShowStartLocation"); } sInstance->childSetVisible("start_location_combo", show_start); @@ -867,8 +866,7 @@ void LLPanelLogin::loadLoginPage() { oStr << "&auto_login=TRUE"; } - if (gSavedSettings.getBOOL("ShowStartLocation") - && !gSavedSettings.getBOOL("FirstRunThisInstall")) + if (gSavedSettings.getBOOL("ShowStartLocation")) { oStr << "&show_start_location=TRUE"; } diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index a5a61f0c7b..1895993a8e 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -1071,7 +1071,11 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata) { const LLUUID &item_id = (*iter); LLFolderViewItem *item = folder->getItemByID(item_id); - can_delete &= item->getListener()->isItemRemovable(); + const LLFolderViewEventListener *listener = item->getListener(); + llassert(listener); + if (!listener) return FALSE; + can_delete &= listener->isItemRemovable(); + can_delete &= !listener->isItemInTrash(); } return can_delete; } diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp index 75b93ad2c2..77a2ac3a8c 100644 --- a/indra/newview/llpanelme.cpp +++ b/indra/newview/llpanelme.cpp @@ -41,6 +41,7 @@ #include "llsidetray.h" #include "lltabcontainer.h" #include "lltexturectrl.h" +#include "llviewercontrol.h" #define PICKER_SECOND_LIFE "2nd_life_pic" #define PICKER_FIRST_LIFE "real_world_pic" @@ -69,6 +70,18 @@ BOOL LLPanelMe::postBuild() void LLPanelMe::onOpen(const LLSD& key) { LLPanelProfile::onOpen(key); + + // Force Edit My Profile if this is the first time when user is opening Me Panel (EXT-5068) + bool opened = gSavedSettings.getBOOL("MePanelOpened"); + // In some cases Side Tray my call onOpen() twice, check getCollapsed() to be sure this + // is the last time onOpen() is called + if( !opened && !LLSideTray::getInstance()->getCollapsed() ) + { + buildEditPanel(); + openPanel(mEditPanel, getAvatarId()); + + gSavedSettings.setBOOL("MePanelOpened", true); + } } bool LLPanelMe::notifyChildren(const LLSD& info) diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp index f574f55beb..64a265219b 100644 --- a/indra/newview/llpanelmediasettingsgeneral.cpp +++ b/indra/newview/llpanelmediasettingsgeneral.cpp @@ -206,7 +206,7 @@ void LLPanelMediaSettingsGeneral::clearValues( void* userdata, bool editable) { LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata; self->mAutoLoop->clear(); - self->mAutoPlay->clear(); + self->mAutoPlay->setValue(LLSD(TRUE)); // set default value for auto play to true; self->mAutoScale->clear(); self->mAutoZoom ->clear(); self->mCurrentURL->clear(); @@ -250,18 +250,18 @@ bool LLPanelMediaSettingsGeneral::isMultiple() //////////////////////////////////////////////////////////////////////////////// // static -void LLPanelMediaSettingsGeneral::initValues( void* userdata, const LLSD& media_settings ,bool editable) +void LLPanelMediaSettingsGeneral::initValues( void* userdata, const LLSD& _media_settings, bool editable) { LLPanelMediaSettingsGeneral *self =(LLPanelMediaSettingsGeneral *)userdata; self->mMediaEditable = editable; + LLSD media_settings = _media_settings; + if ( LLPanelMediaSettingsGeneral::isMultiple() ) { - self->clearValues(self, self->mMediaEditable); - // only show multiple - self->mHomeURL->setText(LLTrans::getString("Multiple Media")); - self->mCurrentURL->setText(LLTrans::getString("Multiple Media")); - return; + // *HACK: "edit" the incoming media_settings + media_settings[LLMediaEntry::CURRENT_URL_KEY] = LLTrans::getString("Multiple Media"); + media_settings[LLMediaEntry::HOME_URL_KEY] = LLTrans::getString("Multiple Media"); } std::string base_key( "" ); @@ -286,7 +286,7 @@ void LLPanelMediaSettingsGeneral::initValues( void* userdata, const LLSD& media_ { LLMediaEntry::WIDTH_PIXELS_KEY, self->mWidthPixels, "LLSpinCtrl" }, { "", NULL , "" } }; - + for( int i = 0; data_set[ i ].key_name.length() > 0; ++i ) { base_key = std::string( data_set[ i ].key_name ); @@ -405,20 +405,21 @@ void LLPanelMediaSettingsGeneral::preApply() //////////////////////////////////////////////////////////////////////////////// // -void LLPanelMediaSettingsGeneral::getValues( LLSD &fill_me_in ) +void LLPanelMediaSettingsGeneral::getValues( LLSD &fill_me_in, bool include_tentative ) { - fill_me_in[LLMediaEntry::AUTO_LOOP_KEY] = (LLSD::Boolean)mAutoLoop->getValue(); - fill_me_in[LLMediaEntry::AUTO_PLAY_KEY] = (LLSD::Boolean)mAutoPlay->getValue(); - fill_me_in[LLMediaEntry::AUTO_SCALE_KEY] = (LLSD::Boolean)mAutoScale->getValue(); - fill_me_in[LLMediaEntry::AUTO_ZOOM_KEY] = (LLSD::Boolean)mAutoZoom->getValue(); + if (include_tentative || !mAutoLoop->getTentative()) fill_me_in[LLMediaEntry::AUTO_LOOP_KEY] = (LLSD::Boolean)mAutoLoop->getValue(); + if (include_tentative || !mAutoPlay->getTentative()) fill_me_in[LLMediaEntry::AUTO_PLAY_KEY] = (LLSD::Boolean)mAutoPlay->getValue(); + if (include_tentative || !mAutoScale->getTentative()) fill_me_in[LLMediaEntry::AUTO_SCALE_KEY] = (LLSD::Boolean)mAutoScale->getValue(); + if (include_tentative || !mAutoZoom->getTentative()) fill_me_in[LLMediaEntry::AUTO_ZOOM_KEY] = (LLSD::Boolean)mAutoZoom->getValue(); //Don't fill in current URL: this is only supposed to get changed via navigate - // fill_me_in[LLMediaEntry::CURRENT_URL_KEY] = mCurrentURL->getValue(); - fill_me_in[LLMediaEntry::HEIGHT_PIXELS_KEY] = (LLSD::Integer)mHeightPixels->getValue(); + // if (include_tentative || !mCurrentURL->getTentative()) fill_me_in[LLMediaEntry::CURRENT_URL_KEY] = mCurrentURL->getValue(); + if (include_tentative || !mHeightPixels->getTentative()) fill_me_in[LLMediaEntry::HEIGHT_PIXELS_KEY] = (LLSD::Integer)mHeightPixels->getValue(); // Don't fill in the home URL if it is the special "Multiple Media" string! - if (LLTrans::getString("Multiple Media") != mHomeURL->getValue()) - fill_me_in[LLMediaEntry::HOME_URL_KEY] = (LLSD::String)mHomeURL->getValue(); - fill_me_in[LLMediaEntry::FIRST_CLICK_INTERACT_KEY] = (LLSD::Boolean)mFirstClick->getValue(); - fill_me_in[LLMediaEntry::WIDTH_PIXELS_KEY] = (LLSD::Integer)mWidthPixels->getValue(); + if ((include_tentative || !mHomeURL->getTentative()) + && LLTrans::getString("Multiple Media") != mHomeURL->getValue()) + fill_me_in[LLMediaEntry::HOME_URL_KEY] = (LLSD::String)mHomeURL->getValue(); + if (include_tentative || !mFirstClick->getTentative()) fill_me_in[LLMediaEntry::FIRST_CLICK_INTERACT_KEY] = (LLSD::Boolean)mFirstClick->getValue(); + if (include_tentative || !mWidthPixels->getTentative()) fill_me_in[LLMediaEntry::WIDTH_PIXELS_KEY] = (LLSD::Integer)mWidthPixels->getValue(); } //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelmediasettingsgeneral.h b/indra/newview/llpanelmediasettingsgeneral.h index 5f90321362..a3f0990f35 100644 --- a/indra/newview/llpanelmediasettingsgeneral.h +++ b/indra/newview/llpanelmediasettingsgeneral.h @@ -54,7 +54,8 @@ public: // Hook that the floater calls before applying changes from the panel void preApply(); // Function that asks the panel to fill in values associated with the panel - void getValues(LLSD &fill_me_in); + // 'include_tentative' means fill in tentative values as well, otherwise do not + void getValues(LLSD &fill_me_in, bool include_tentative = true); // Hook that the floater calls after applying changes to the panel void postApply(); diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp index dcc052f15e..227dbb3da7 100644 --- a/indra/newview/llpanelmediasettingspermissions.cpp +++ b/indra/newview/llpanelmediasettingspermissions.cpp @@ -149,27 +149,6 @@ void LLPanelMediaSettingsPermissions::clearValues( void* userdata, bool editable void LLPanelMediaSettingsPermissions::initValues( void* userdata, const LLSD& media_settings , bool editable) { LLPanelMediaSettingsPermissions *self =(LLPanelMediaSettingsPermissions *)userdata; - - if ( LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo ) - { - if(LLFloaterMediaSettings::getInstance()->mMultipleMedia) - { - self->clearValues(self, editable); - // only show multiple - return; - } - - } - else - { - if(LLFloaterMediaSettings::getInstance()->mMultipleValidMedia) - { - self->clearValues(self, editable); - // only show multiple - return; - } - - } std::string base_key( "" ); std::string tentative_key( "" ); @@ -216,6 +195,28 @@ void LLPanelMediaSettingsPermissions::initValues( void* userdata, const LLSD& me }; }; + // *NOTE: If any of a particular flavor is tentative, we have to disable + // them all because of an architectural issue: namely that we represent + // these as a bit field, and we can't selectively apply only one bit to all selected + // faces if they don't match. Also see the *NOTE below. + if ( self->mPermsOwnerInteract->getTentative() || + self->mPermsGroupInteract->getTentative() || + self->mPermsWorldInteract->getTentative()) + { + self->mPermsOwnerInteract->setEnabled(false); + self->mPermsGroupInteract->setEnabled(false); + self->mPermsWorldInteract->setEnabled(false); + } + if ( self->mPermsOwnerControl->getTentative() || + self->mPermsGroupControl->getTentative() || + self->mPermsWorldControl->getTentative()) + { + self->mPermsOwnerControl->setEnabled(false); + self->mPermsGroupControl->setEnabled(false); + self->mPermsWorldControl->setEnabled(false); + } + + self->childSetEnabled("media_perms_label_owner", editable ); self->childSetText("media_perms_label_owner", LLTrans::getString("Media Perms Owner") ); self->childSetEnabled("media_perms_label_group", editable ); @@ -233,10 +234,10 @@ void LLPanelMediaSettingsPermissions::preApply() //////////////////////////////////////////////////////////////////////////////// // -void LLPanelMediaSettingsPermissions::getValues( LLSD &fill_me_in ) +void LLPanelMediaSettingsPermissions::getValues( LLSD &fill_me_in, bool include_tentative ) { // moved over from the 'General settings' tab - fill_me_in[LLMediaEntry::CONTROLS_KEY] = (LLSD::Integer)mControls->getCurrentIndex(); + if (include_tentative || !mControls->getTentative()) fill_me_in[LLMediaEntry::CONTROLS_KEY] = (LLSD::Integer)mControls->getCurrentIndex(); // *NOTE: For some reason, gcc does not like these symbol references in the // expressions below (inside the static_casts). I have NO idea why :(. @@ -254,9 +255,27 @@ void LLPanelMediaSettingsPermissions::getValues( LLSD &fill_me_in ) (mPermsOwnerInteract->getValue() ? owner: none ) | (mPermsGroupInteract->getValue() ? group : none ) | (mPermsWorldInteract->getValue() ? anyone : none )); + + // *TODO: This will fill in the values of all permissions values, even if + // one or more is tentative. This is not quite the user expectation...what + // it should do is only change the bit that was made "untentative", but in + // a multiple-selection situation, this isn't possible given the architecture + // for how settings are applied. + if (include_tentative || + !mPermsOwnerControl->getTentative() || + !mPermsGroupControl->getTentative() || + !mPermsWorldControl->getTentative()) + { fill_me_in[LLMediaEntry::PERMS_CONTROL_KEY] = control; + } + if (include_tentative || + !mPermsOwnerInteract->getTentative() || + !mPermsGroupInteract->getTentative() || + !mPermsWorldInteract->getTentative()) + { fill_me_in[LLMediaEntry::PERMS_INTERACT_KEY] = interact; } +} //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelmediasettingspermissions.h b/indra/newview/llpanelmediasettingspermissions.h index bd0c3b8ab5..858544605c 100644 --- a/indra/newview/llpanelmediasettingspermissions.h +++ b/indra/newview/llpanelmediasettingspermissions.h @@ -57,7 +57,8 @@ public: // Hook that the floater calls before applying changes from the panel void preApply(); // Function that asks the panel to fill in values associated with the panel - void getValues(LLSD &fill_me_in); + // 'include_tentative' means fill in tentative values as well, otherwise do not + void getValues(LLSD &fill_me_in, bool include_tentative = true); // Hook that the floater calls after applying changes to the panel void postApply(); diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp index 81842e3851..1b1346c41a 100644 --- a/indra/newview/llpanelmediasettingssecurity.cpp +++ b/indra/newview/llpanelmediasettingssecurity.cpp @@ -94,27 +94,6 @@ void LLPanelMediaSettingsSecurity::draw() void LLPanelMediaSettingsSecurity::initValues( void* userdata, const LLSD& media_settings , bool editable) { LLPanelMediaSettingsSecurity *self =(LLPanelMediaSettingsSecurity *)userdata; - - if ( LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo ) - { - if(LLFloaterMediaSettings::getInstance()->mMultipleMedia) - { - self->clearValues(self, editable); - // only show multiple - return; - } - - } - else - { - if(LLFloaterMediaSettings::getInstance()->mMultipleValidMedia) - { - self->clearValues(self, editable); - // only show multiple - return; - } - - } std::string base_key( "" ); std::string tentative_key( "" ); @@ -136,6 +115,8 @@ void LLPanelMediaSettingsSecurity::initValues( void* userdata, const LLSD& media base_key = std::string( data_set[ i ].key_name ); tentative_key = base_key + std::string( LLPanelContents::TENTATIVE_SUFFIX ); + bool enabled_overridden = false; + // TODO: CP - I bet there is a better way to do this using Boost if ( media_settings[ base_key ].isDefined() ) { @@ -150,20 +131,31 @@ void LLPanelMediaSettingsSecurity::initValues( void* userdata, const LLSD& media // get control LLScrollListCtrl* list = static_cast< LLScrollListCtrl* >( data_set[ i ].ctrl_ptr ); list->deleteAllItems(); - + // points to list of white list URLs LLSD url_list = media_settings[ base_key ]; - - // iterate over them and add to scroll list - LLSD::array_iterator iter = url_list.beginArray(); - while( iter != url_list.endArray() ) + + // better be the whitelist + llassert(data_set[ i ].ctrl_ptr == self->mWhiteListList); + + // If tentative, don't add entries + if (media_settings[ tentative_key ].asBoolean()) { - std::string entry = *iter; - self->addWhiteListEntry( entry ); - ++iter; - }; + self->mWhiteListList->setEnabled(false); + enabled_overridden = true; + } + else { + // iterate over them and add to scroll list + LLSD::array_iterator iter = url_list.beginArray(); + while( iter != url_list.endArray() ) + { + std::string entry = *iter; + self->addWhiteListEntry( entry ); + ++iter; + } + } }; - data_set[ i ].ctrl_ptr->setEnabled(editable); + if ( ! enabled_overridden) data_set[ i ].ctrl_ptr->setEnabled(editable); data_set[ i ].ctrl_ptr->setTentative( media_settings[ tentative_key ].asBoolean() ); }; }; @@ -192,25 +184,29 @@ void LLPanelMediaSettingsSecurity::preApply() //////////////////////////////////////////////////////////////////////////////// // -void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in ) +void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in, bool include_tentative ) { - fill_me_in[LLMediaEntry::WHITELIST_ENABLE_KEY] = (LLSD::Boolean)mEnableWhiteList->getValue(); - - // iterate over white list and extract items - std::vector< LLScrollListItem* > whitelist_items = mWhiteListList->getAllData(); - std::vector< LLScrollListItem* >::iterator iter = whitelist_items.begin(); - - // *NOTE: need actually set the key to be an emptyArray(), or the merge - // we do with this LLSD will think there's nothing to change. - fill_me_in[LLMediaEntry::WHITELIST_KEY] = LLSD::emptyArray(); - while( iter != whitelist_items.end() ) - { - LLScrollListCell* cell = (*iter)->getColumn( ENTRY_COLUMN ); - std::string whitelist_url = cell->getValue().asString(); - - fill_me_in[ LLMediaEntry::WHITELIST_KEY ].append( whitelist_url ); - ++iter; - }; + if (include_tentative || !mEnableWhiteList->getTentative()) + fill_me_in[LLMediaEntry::WHITELIST_ENABLE_KEY] = (LLSD::Boolean)mEnableWhiteList->getValue(); + + if (include_tentative || !mWhiteListList->getTentative()) + { + // iterate over white list and extract items + std::vector< LLScrollListItem* > whitelist_items = mWhiteListList->getAllData(); + std::vector< LLScrollListItem* >::iterator iter = whitelist_items.begin(); + + // *NOTE: need actually set the key to be an emptyArray(), or the merge + // we do with this LLSD will think there's nothing to change. + fill_me_in[LLMediaEntry::WHITELIST_KEY] = LLSD::emptyArray(); + while( iter != whitelist_items.end() ) + { + LLScrollListCell* cell = (*iter)->getColumn( ENTRY_COLUMN ); + std::string whitelist_url = cell->getValue().asString(); + + fill_me_in[ LLMediaEntry::WHITELIST_KEY ].append( whitelist_url ); + ++iter; + }; + } } //////////////////////////////////////////////////////////////////////////////// @@ -247,6 +243,10 @@ const std::string LLPanelMediaSettingsSecurity::makeValidUrl( const std::string& // white list list box widget and build a list to test against. bool LLPanelMediaSettingsSecurity::urlPassesWhiteList( const std::string& test_url ) { + // If the whitlelist list is tentative, it means we have multiple settings. + // In that case, we have no choice but to return true + if ( mWhiteListList->getTentative() ) return true; + // the checkUrlAgainstWhitelist(..) function works on a vector // of strings for the white list entries - in this panel, the white list // is stored in the widgets themselves so we need to build something compatible. @@ -330,7 +330,7 @@ void LLPanelMediaSettingsSecurity::addWhiteListEntry( const std::string& entry ) // always add in the entry itself row[ "columns" ][ ENTRY_COLUMN ][ "type" ] = "text"; row[ "columns" ][ ENTRY_COLUMN ][ "value" ] = entry; - + // add to the white list scroll box mWhiteListList->addElement( row ); }; diff --git a/indra/newview/llpanelmediasettingssecurity.h b/indra/newview/llpanelmediasettingssecurity.h index 66ccb23f46..94f2fdc89c 100644 --- a/indra/newview/llpanelmediasettingssecurity.h +++ b/indra/newview/llpanelmediasettingssecurity.h @@ -53,11 +53,12 @@ public: // Hook that the floater calls before applying changes from the panel void preApply(); // Function that asks the panel to fill in values associated with the panel - void getValues(LLSD &fill_me_in); + // 'include_tentative' means fill in tentative values as well, otherwise do not + void getValues(LLSD &fill_me_in, bool include_tentative = true); // Hook that the floater calls after applying changes to the panel void postApply(); - static void initValues( void* userdata, const LLSD& media_settings,bool editable ); + static void initValues( void* userdata, const LLSD& media_settings, bool editable); static void clearValues( void* userdata, bool editable); void addWhiteListEntry( const std::string& url ); void setParent( LLFloaterMediaSettings* parent ); diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 5c5c35141e..e8ae006968 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -117,7 +117,7 @@ public: virtual BOOL isItemRenameable() const; virtual BOOL renameItem(const std::string& new_name); virtual BOOL isItemMovable() const; - virtual BOOL isItemRemovable(); + virtual BOOL isItemRemovable() const; virtual BOOL removeItem(); virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch); virtual void move(LLFolderViewEventListener* parent_listener); @@ -412,9 +412,9 @@ BOOL LLTaskInvFVBridge::isItemMovable() const return TRUE; } -BOOL LLTaskInvFVBridge::isItemRemovable() +BOOL LLTaskInvFVBridge::isItemRemovable() const { - LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); + const LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); if(object && (object->permModify() || object->permYouOwner())) { @@ -710,7 +710,7 @@ public: virtual BOOL isItemRenameable() const; // virtual BOOL isItemCopyable() const { return FALSE; } virtual BOOL renameItem(const std::string& new_name); - virtual BOOL isItemRemovable(); + virtual BOOL isItemRemovable() const; virtual void buildContextMenu(LLMenuGL& menu, U32 flags); virtual BOOL hasChildren() const; virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const; @@ -742,7 +742,7 @@ BOOL LLTaskCategoryBridge::renameItem(const std::string& new_name) return FALSE; } -BOOL LLTaskCategoryBridge::isItemRemovable() +BOOL LLTaskCategoryBridge::isItemRemovable() const { return FALSE; } diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index cf903958ee..c2f2d32142 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -159,6 +159,27 @@ void LLPanelOutfitsInventory::onOpen(const LLSD& key) // Make sure we know which tab is selected, update the filter, // and update verbs. onTabChange(); + + // Auto open the first outfit newly created so new users can see sample outfit contents + static bool should_open_outfit = true; + if (should_open_outfit && gAgent.isFirstLogin()) + { + LLInventoryPanel* outfits_panel = getChild<LLInventoryPanel>(OUTFITS_TAB_NAME); + if (outfits_panel) + { + LLUUID my_outfits_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS); + LLFolderViewFolder* my_outfits_folder = outfits_panel->getRootFolder()->getFolderByID(my_outfits_id); + if (my_outfits_folder) + { + LLFolderViewFolder* first_outfit = dynamic_cast<LLFolderViewFolder*>(my_outfits_folder->getFirstChild()); + if (first_outfit) + { + first_outfit->setOpen(TRUE); + } + } + } + } + should_open_outfit = false; } void LLPanelOutfitsInventory::updateVerbs() diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 423ee61e25..36fab86280 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -36,6 +36,7 @@ #include "llfloaterreg.h" #include "llmenugl.h" #include "llnotificationsutil.h" +#include "lleventtimer.h" #include "llfiltereditor.h" #include "lltabcontainer.h" #include "lluictrlfactory.h" diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index b820adeaf3..78a0a5cfac 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -142,9 +142,9 @@ LLPanelPermissions::LLPanelPermissions() : BOOL LLPanelPermissions::postBuild() { childSetCommitCallback("Object Name",LLPanelPermissions::onCommitName,this); - childSetPrevalidate("Object Name",LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("Object Name",LLTextValidate::validateASCIIPrintableNoPipe); childSetCommitCallback("Object Description",LLPanelPermissions::onCommitDesc,this); - childSetPrevalidate("Object Description",LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("Object Description",LLTextValidate::validateASCIIPrintableNoPipe); getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLPanelPermissions::onClickGroup,this)); diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 87ac5f20ff..c867a2c64b 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -843,13 +843,16 @@ void LLPanelPicks::onPanelClassifiedClose(LLPanelClassifiedInfo* panel) { LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>( mClassifiedsList->getItemByValue(values[n])); - + llassert(c_item); + if (c_item) + { c_item->setClassifiedName(panel->getClassifiedName()); c_item->setDescription(panel->getDescription()); c_item->setSnapshotId(panel->getSnapshotId()); } } } + } onPanelPickClose(panel); updateButtons(); diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index a49386cb5c..26b57c003b 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -1015,7 +1015,8 @@ void LLPanelPlaces::showAddedLandmarkInfo(const std::vector<LLUUID>& items) LLInventoryItem* item = gInventory.getItem(item_id); - if (LLAssetType::AT_LANDMARK == item->getType()) + llassert(item); + if (item && (LLAssetType::AT_LANDMARK == item->getType()) ) { // Created landmark is passed to Places panel to allow its editing. // If the panel is closed we don't reopen it until created landmark is loaded. @@ -1023,7 +1024,6 @@ void LLPanelPlaces::showAddedLandmarkInfo(const std::vector<LLUUID>& items) { setItem(item); } - break; } } } @@ -1048,14 +1048,13 @@ void LLPanelPlaces::updateVerbs() mTeleportBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn); mShowOnMapBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn); - mOverflowBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn); + mOverflowBtn->setVisible(is_place_info_visible && !is_create_landmark_visible && !isLandmarkEditModeOn); mEditBtn->setVisible(mPlaceInfoType == LANDMARK_INFO_TYPE && !isLandmarkEditModeOn); mSaveBtn->setVisible(isLandmarkEditModeOn); mCancelBtn->setVisible(isLandmarkEditModeOn); mCloseBtn->setVisible(is_create_landmark_visible && !isLandmarkEditModeOn); mShowOnMapBtn->setEnabled(!is_create_landmark_visible && !isLandmarkEditModeOn && have_3d_pos); - mOverflowBtn->setEnabled(is_place_info_visible && !is_create_landmark_visible); if (is_place_info_visible) { diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 2dc3a62637..479769ee20 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -1036,8 +1036,9 @@ void LLPanelPrimMediaControls::updateZoom() } if (zoom_padding > 0.0f) - { - LLViewerMediaFocus::setCameraZoom(getTargetObject(), mTargetObjectNormal, zoom_padding); + { + // since we only zoom into medium for now, always set zoom_in constraint to true + LLViewerMediaFocus::setCameraZoom(getTargetObject(), mTargetObjectNormal, zoom_padding, true); } // Remember the object ID/face we zoomed into, so we can update the zoom icon appropriately diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index c73ade53c8..b5d85dfd4b 100644 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -197,11 +197,7 @@ void LLPanelProfile::togglePanel(LLPanel* panel, const LLSD& key) } else { - panel->setVisible(FALSE); - if (panel->getParent() == this) - { - removeChild(panel); - } + closePanel(panel); getTabCtrl()->getCurrentPanel()->onOpen(getAvatarId()); } @@ -248,6 +244,16 @@ void LLPanelProfile::openPanel(LLPanel* panel, const LLSD& params) panel->setRect(new_rect); } +void LLPanelProfile::closePanel(LLPanel* panel) +{ + panel->setVisible(FALSE); + + if (panel->getParent() == this) + { + removeChild(panel); + } +} + S32 LLPanelProfile::notifyParent(const LLSD& info) { std::string action = info["action"]; diff --git a/indra/newview/llpanelprofile.h b/indra/newview/llpanelprofile.h index bcf4bdd0ec..f1aa3f10f8 100644 --- a/indra/newview/llpanelprofile.h +++ b/indra/newview/llpanelprofile.h @@ -55,6 +55,8 @@ public: virtual void openPanel(LLPanel* panel, const LLSD& params); + virtual void closePanel(LLPanel* panel); + S32 notifyParent(const LLSD& info); protected: diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index ad47e351ee..1c4004c37a 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -584,7 +584,7 @@ bool LLParticipantList::LLParticipantListMenu::enableContextMenuItem(const LLSD& { std::string item = userdata.asString(); if (item == "can_mute_text" || "can_block" == item || "can_share" == item || "can_im" == item - || "can_pay" == item || "can_add" == item) + || "can_pay" == item) { return mUUIDs.front() != gAgentID; } @@ -619,7 +619,7 @@ bool LLParticipantList::LLParticipantListMenu::enableContextMenuItem(const LLSD& for (;id != uuids_end; ++id) { - if ( LLAvatarActions::isFriend(*id) ) + if ( *id == gAgentID || LLAvatarActions::isFriend(*id) ) { result = false; break; diff --git a/indra/newview/llplacesinventorybridge.cpp b/indra/newview/llplacesinventorybridge.cpp index 83443687c9..4fe69f295c 100644 --- a/indra/newview/llplacesinventorybridge.cpp +++ b/indra/newview/llplacesinventorybridge.cpp @@ -66,7 +66,7 @@ void LLPlacesLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags) std::vector<std::string> items; std::vector<std::string> disabled_items; - if(isInTrash()) + if(isItemInTrash()) { items.push_back(std::string("Purge Item")); if (!isItemRemovable()) diff --git a/indra/newview/llplacesinventorypanel.cpp b/indra/newview/llplacesinventorypanel.cpp index 8edeebaeeb..f1e450a083 100644 --- a/indra/newview/llplacesinventorypanel.cpp +++ b/indra/newview/llplacesinventorypanel.cpp @@ -118,6 +118,7 @@ BOOL LLPlacesInventoryPanel::postBuild() mScroller->addChild(mFolders); mFolders->setScrollContainer(mScroller); + mFolders->addChild(mFolders->mStatusTextBox); // cut subitems @@ -174,6 +175,15 @@ S32 LLPlacesInventoryPanel::notify(const LLSD& info) // PUBLIC METHODS ////////////////////////////////////////////////////////////////////////// +LLPlacesFolderView::LLPlacesFolderView(const LLFolderView::Params& p) +: LLFolderView(p) +{ + // we do not need auto select functionality in places landmarks, so override default behavior. + // this disables applying of the LLSelectFirstFilteredItem in LLFolderView::doIdle. + // Fixed issues: EXT-1631, EXT-4994. + mAutoSelectOverride = TRUE; +} + BOOL LLPlacesFolderView::handleRightMouseDown(S32 x, S32 y, MASK mask) { // let children to change selection first diff --git a/indra/newview/llplacesinventorypanel.h b/indra/newview/llplacesinventorypanel.h index 86937e7c7f..04c6758eae 100644 --- a/indra/newview/llplacesinventorypanel.h +++ b/indra/newview/llplacesinventorypanel.h @@ -67,7 +67,7 @@ private: class LLPlacesFolderView : public LLFolderView { public: - LLPlacesFolderView(const LLFolderView::Params& p) : LLFolderView(p) {}; + LLPlacesFolderView(const LLFolderView::Params& p); /** * Handles right mouse down * diff --git a/indra/newview/llpreview.h b/indra/newview/llpreview.h index 3b9f7f9882..551e247d8c 100644 --- a/indra/newview/llpreview.h +++ b/indra/newview/llpreview.h @@ -74,7 +74,7 @@ public: /*virtual*/ BOOL postBuild(); - void setObjectID(const LLUUID& object_id); + virtual void setObjectID(const LLUUID& object_id); void setItem( LLInventoryItem* item ); void setAssetId(const LLUUID& asset_id); diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp index 92bd4dc62b..0cc747f789 100644 --- a/indra/newview/llpreviewanim.cpp +++ b/indra/newview/llpreviewanim.cpp @@ -79,7 +79,7 @@ BOOL LLPreviewAnim::postBuild() childSetAction("Anim audition btn",auditionAnim, this); childSetCommitCallback("desc", LLPreview::onText, this); - childSetPrevalidate("desc", &LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe); return LLPreview::postBuild(); } diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index 53e351e66e..57a8ca3d12 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -472,7 +472,7 @@ BOOL LLPreviewGesture::postBuild() edit = getChild<LLLineEditor>("wait_time_editor"); edit->setEnabled(FALSE); edit->setVisible(FALSE); - edit->setPrevalidate(LLLineEditor::prevalidateFloat); + edit->setPrevalidate(LLTextValidate::validateFloat); // edit->setKeystrokeCallback(onKeystrokeCommit, this); edit->setCommitOnFocusLost(TRUE); edit->setCommitCallback(onCommitWaitTime, this); @@ -504,10 +504,10 @@ BOOL LLPreviewGesture::postBuild() if (item) { childSetText("desc", item->getDescription()); - childSetPrevalidate("desc", &LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe); childSetText("name", item->getName()); - childSetPrevalidate("name", &LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("name", &LLTextValidate::validateASCIIPrintableNoPipe); } return LLPreview::postBuild(); diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp index cc70360528..ee8e3f1db6 100644 --- a/indra/newview/llpreviewnotecard.cpp +++ b/indra/newview/llpreviewnotecard.cpp @@ -95,7 +95,7 @@ BOOL LLPreviewNotecard::postBuild() childSetCommitCallback("desc", LLPreview::onText, this); if (item) childSetText("desc", item->getDescription()); - childSetPrevalidate("desc", &LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe); return LLPreview::postBuild(); } diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 7bcbe334ff..3221745fa3 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -661,7 +661,9 @@ void LLScriptEdCore::onBtnDynamicHelp() live_help_floater = new LLFloater(LLSD()); LLUICtrlFactory::getInstance()->buildFloater(live_help_floater, "floater_lsl_guide.xml", NULL); LLFloater* parent = dynamic_cast<LLFloater*>(getParent()); - parent->addDependentFloater(live_help_floater, TRUE); + llassert(parent); + if (parent) + parent->addDependentFloater(live_help_floater, TRUE); live_help_floater->childSetCommitCallback("lock_check", onCheckLock, this); live_help_floater->childSetValue("lock_check", gSavedSettings.getBOOL("ScriptHelpFollowsCursor")); live_help_floater->childSetCommitCallback("history_combo", onHelpComboCommit, this); @@ -955,7 +957,7 @@ BOOL LLPreviewLSL::postBuild() childSetCommitCallback("desc", LLPreview::onText, this); childSetText("desc", item->getDescription()); - childSetPrevalidate("desc", &LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe); return LLPreview::postBuild(); } diff --git a/indra/newview/llpreviewsound.cpp b/indra/newview/llpreviewsound.cpp index d7fd252fb6..44b828854b 100644 --- a/indra/newview/llpreviewsound.cpp +++ b/indra/newview/llpreviewsound.cpp @@ -75,7 +75,7 @@ BOOL LLPreviewSound::postBuild() button->setSoundFlags(LLView::SILENT); childSetCommitCallback("desc", LLPreview::onText, this); - childSetPrevalidate("desc", &LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe); return LLPreview::postBuild(); } diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index 028807a6bd..0ed6bea74f 100644 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -74,22 +74,10 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key) mLastHeight(0), mLastWidth(0), mAspectRatio(0.f), - mPreviewToSave(FALSE) + mPreviewToSave(FALSE), + mImage(NULL) { - const LLViewerInventoryItem *item = static_cast<const LLViewerInventoryItem*>(getItem()); - if(item) - { - mShowKeepDiscard = item->getPermissions().getCreator() != gAgent.getID(); - mImageID = item->getAssetUUID(); - mIsCopyable = item->checkPermissionsSet(PERM_ITEM_UNRESTRICTED); - } - else // not an item, assume it's an asset id - { - mImageID = mItemUUID; - mCopyToInv = TRUE; - mIsCopyable = TRUE; - } - + updateImageID(); if (key.has("save_as")) { mPreviewToSave = TRUE; @@ -97,7 +85,6 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key) //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_texture.xml", FALSE); } - LLPreviewTexture::~LLPreviewTexture() { if( mLoadingFullImage ) @@ -139,7 +126,7 @@ BOOL LLPreviewTexture::postBuild() { childSetCommitCallback("desc", LLPreview::onText, this); childSetText("desc", item->getDescription()); - childSetPrevalidate("desc", &LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe); } } @@ -493,3 +480,42 @@ LLPreview::EAssetStatus LLPreviewTexture::getAssetStatus() } return mAssetStatus; } + +void LLPreviewTexture::updateImageID() +{ + const LLViewerInventoryItem *item = static_cast<const LLViewerInventoryItem*>(getItem()); + if(item) + { + mImageID = item->getAssetUUID(); + mShowKeepDiscard = item->getPermissions().getCreator() != gAgent.getID(); + mCopyToInv = FALSE; + mIsCopyable = item->checkPermissionsSet(PERM_ITEM_UNRESTRICTED); + } + else // not an item, assume it's an asset id + { + mImageID = mItemUUID; + mShowKeepDiscard = FALSE; + mCopyToInv = TRUE; + mIsCopyable = TRUE; + } + +} + +/* virtual */ +void LLPreviewTexture::setObjectID(const LLUUID& object_id) +{ + mObjectUUID = object_id; + + const LLUUID old_image_id = mImageID; + + // Update what image we're pointing to, such as if we just specified the mObjectID + // that this mItemID is part of. + updateImageID(); + + // If the imageID has changed, start over and reload the new image. + if (mImageID != old_image_id) + { + mAssetStatus = PREVIEW_ASSET_UNLOADED; + loadAsset(); + } +} diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h index 980aecee6d..7cd2adad56 100644 --- a/indra/newview/llpreviewtexture.h +++ b/indra/newview/llpreviewtexture.h @@ -69,6 +69,8 @@ public: void openToSave(); static void onSaveAsBtn(void* data); + + /*virtual*/ void setObjectID(const LLUUID& object_id); protected: void init(); /* virtual */ BOOL postBuild(); @@ -76,6 +78,7 @@ protected: static void onAspectRatioCommit(LLUICtrl*,void* userdata); private: + void updateImageID(); // set what image is being uploaded. void updateDimensions(); LLUUID mImageID; LLPointer<LLViewerFetchedTexture> mImage; diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 8f36c0e88a..7c2e7e3319 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -533,9 +533,13 @@ void LLScreenChannel::showToastsBottom() // HACK // EXT-2653: it is necessary to prevent overlapping for secondary showed toasts (*it).toast->setVisible(TRUE); - // Show toast behind floaters. (EXT-3089) - gFloaterView->sendChildToBack((*it).toast); } + if(!(*it).toast->hasFocus()) + { + // Fixing Z-order of toasts (EXT-4862) + // Next toast will be positioned under this one. + gFloaterView->sendChildToBack((*it).toast); + } } if(it != mToastList.rend()) diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp index 0d9cf06bc3..a81ec61263 100644 --- a/indra/newview/llscriptfloater.cpp +++ b/indra/newview/llscriptfloater.cpp @@ -38,9 +38,11 @@ #include "llchiclet.h" #include "llfloaterreg.h" #include "llnotifications.h" +#include "llnotificationsutil.h" #include "llscreenchannel.h" #include "llsyswellwindow.h" #include "lltoastnotifypanel.h" +#include "lltrans.h" #include "llviewerwindow.h" #include "llimfloater.h" @@ -70,12 +72,8 @@ LLScriptFloater::LLScriptFloater(const LLSD& key) setOverlapsScreenChannel(true); } -bool LLScriptFloater::toggle(const LLUUID& object_id) +bool LLScriptFloater::toggle(const LLUUID& notification_id) { - // Force chiclet toggle on here because first onFocusReceived() will not toggle it on. - LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(object_id, true); - - LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(object_id); LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id); // show existing floater @@ -90,28 +88,28 @@ bool LLScriptFloater::toggle(const LLUUID& object_id) { floater->setVisible(TRUE); floater->setFocus(TRUE); - return true; } } // create and show new floater else { - show(object_id); - return true; + show(notification_id); } + + LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(notification_id, true); + return true; } -LLScriptFloater* LLScriptFloater::show(const LLUUID& object_id) +LLScriptFloater* LLScriptFloater::show(const LLUUID& notification_id) { - LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(object_id); - - LLScriptFloater* floater = LLFloaterReg::showTypedInstance<LLScriptFloater>("script_floater", notification_id); - floater->setObjectId(object_id); - floater->createForm(object_id); + LLScriptFloater* floater = LLFloaterReg::getTypedInstance<LLScriptFloater>("script_floater", notification_id); + floater->setNotificationId(notification_id); + floater->createForm(notification_id); + LLFloaterReg::showTypedInstance<LLScriptFloater>("script_floater", notification_id, TRUE); if (floater->getDockControl() == NULL) { - LLChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLChiclet>(object_id); + LLChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLChiclet>(notification_id); if (chiclet == NULL) { llerror("Dock chiclet for LLScriptFloater doesn't exist", 0); @@ -133,7 +131,7 @@ void LLScriptFloater::getAllowedRect(LLRect& rect) rect = gViewerWindow->getWorldViewRectRaw(); } -void LLScriptFloater::createForm(const LLUUID& object_id) +void LLScriptFloater::createForm(const LLUUID& notification_id) { // delete old form if(mScriptForm) @@ -142,8 +140,7 @@ void LLScriptFloater::createForm(const LLUUID& object_id) mScriptForm->die(); } - LLNotificationPtr notification = LLNotifications::getInstance()->find( - LLScriptFloaterManager::getInstance()->findNotificationId(object_id)); + LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id); if(NULL == notification) { return; @@ -165,9 +162,9 @@ void LLScriptFloater::createForm(const LLUUID& object_id) void LLScriptFloater::onClose(bool app_quitting) { - if(getObjectId().notNull()) + if(getNotificationId().notNull()) { - LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(getObjectId()); + LLScriptFloaterManager::getInstance()->onRemoveNotification(getNotificationId()); } } @@ -186,7 +183,7 @@ void LLScriptFloater::setVisible(BOOL visible) if(!visible) { - LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getObjectId()); + LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getNotificationId()); if(chiclet) { chiclet->setToggleState(false); @@ -196,10 +193,10 @@ void LLScriptFloater::setVisible(BOOL visible) void LLScriptFloater::onMouseDown() { - if(getObjectId().notNull()) + if(getNotificationId().notNull()) { // Remove new message icon - LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getObjectId()); + LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getNotificationId()); if (chiclet == NULL) { llerror("Dock chiclet for LLScriptFloater doesn't exist", 0); @@ -213,15 +210,18 @@ void LLScriptFloater::onMouseDown() void LLScriptFloater::onFocusLost() { - LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(getObjectId(), false); + if(getNotificationId().notNull()) + { + LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(getNotificationId(), false); + } } void LLScriptFloater::onFocusReceived() { // first focus will be received before setObjectId() call - don't toggle chiclet - if(getObjectId().notNull()) + if(getNotificationId().notNull()) { - LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(getObjectId(), true); + LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(getNotificationId(), true); } } @@ -246,200 +246,203 @@ void LLScriptFloater::hideToastsIfNeeded() void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id) { - // get scripted Object's ID - LLUUID object_id = notification_id_to_object_id(notification_id); - if(object_id.isNull()) + if(notification_id.isNull()) { - llwarns << "Invalid notification, no object id" << llendl; + llwarns << "Invalid notification ID" << llendl; return; } + // get scripted Object's ID + LLUUID object_id = notification_id_to_object_id(notification_id); + // Need to indicate of "new message" for object chiclets according to requirements // specified in the Message Bar design specification. See EXT-3142. bool set_new_message = false; + EObjectType obj_type = getObjectType(notification_id); - // If an Object spawns more-than-one floater, only the newest one is shown. - // The previous is automatically closed. - script_notification_map_t::iterator it = mNotifications.find(object_id); - if(it != mNotifications.end()) + // LLDialog can spawn only one instance, LLLoadURL and LLGiveInventory can spawn unlimited number of instances + if(OBJ_SCRIPT == obj_type) { - LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(object_id); - if(chiclet) + // If an Object spawns more-than-one floater, only the newest one is shown. + // The previous is automatically closed. + script_notification_map_t::const_iterator it = findUsingObjectId(object_id); + if(it != mNotifications.end()) { - // Pass the new_message icon state further. - set_new_message = chiclet->getShowNewMessagesIcon(); - } + LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(it->first); + if(chiclet) + { + // Pass the new_message icon state further. + set_new_message = chiclet->getShowNewMessagesIcon(); + } - LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", it->second.notification_id); - if(floater) - { - // Generate chiclet with a "new message" indicator if a docked window was opened but not in focus. See EXT-3142. - set_new_message |= !floater->hasFocus(); - } + LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", it->first); + if(floater) + { + // Generate chiclet with a "new message" indicator if a docked window was opened but not in focus. See EXT-3142. + set_new_message |= !floater->hasFocus(); + } - onRemoveNotification(it->second.notification_id); + onRemoveNotification(it->first); + } } - LLNotificationData nd = {notification_id}; - mNotifications.insert(std::make_pair(object_id, nd)); + mNotifications.insert(std::make_pair(notification_id, object_id)); // Create inventory offer chiclet for offer type notifications - LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id); - if( notification && notification->getType() == "offer" ) + if( OBJ_GIVE_INVENTORY == obj_type ) { - LLBottomTray::instance().getChicletPanel()->createChiclet<LLInvOfferChiclet>(object_id); + LLBottomTray::instance().getChicletPanel()->createChiclet<LLInvOfferChiclet>(notification_id); } else { - LLBottomTray::getInstance()->getChicletPanel()->createChiclet<LLScriptChiclet>(object_id); + LLBottomTray::getInstance()->getChicletPanel()->createChiclet<LLScriptChiclet>(notification_id); } - LLIMWellWindow::getInstance()->addObjectRow(object_id, set_new_message); + LLIMWellWindow::getInstance()->addObjectRow(notification_id, set_new_message); LLSD data; - data["object_id"] = object_id; + data["notification_id"] = notification_id; data["new_message"] = set_new_message; data["unread"] = 1; // each object has got only one floater mNewObjectSignal(data); - toggleScriptFloater(object_id, set_new_message); + toggleScriptFloater(notification_id, set_new_message); } void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id) { - LLUUID object_id = findObjectId(notification_id); - if(object_id.isNull()) + if(notification_id.isNull()) { - llwarns << "Invalid notification, no object id" << llendl; + llwarns << "Invalid notification ID" << llendl; return; } - using namespace LLNotificationsUI; - - // remove related toast - LLUUID channel_id(gSavedSettings.getString("NotificationChannelUUID")); - LLScreenChannel* channel = dynamic_cast<LLScreenChannel*> - (LLChannelManager::getInstance()->findChannelByID(channel_id)); - LLUUID n_toast_id = findNotificationToastId(object_id); - if(channel && n_toast_id.notNull()) - { - channel->killToastByNotificationID(n_toast_id); - } - // remove related chiclet - LLBottomTray::getInstance()->getChicletPanel()->removeChiclet(object_id); + LLBottomTray::getInstance()->getChicletPanel()->removeChiclet(notification_id); - LLIMWellWindow::getInstance()->removeObjectRow(object_id); + LLIMWellWindow::getInstance()->removeObjectRow(notification_id); // close floater LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id); if(floater) { - floater->setObjectId(LLUUID::null); + floater->setNotificationId(LLUUID::null); floater->closeFloater(); } - mNotifications.erase(object_id); -} - -void LLScriptFloaterManager::removeNotificationByObjectId(const LLUUID& object_id) -{ - // Check we have not removed notification yet - LLNotificationPtr notification = LLNotifications::getInstance()->find( - findNotificationId(object_id)); - if(notification) - { - onRemoveNotification(notification->getID()); - } + mNotifications.erase(notification_id); } -void LLScriptFloaterManager::toggleScriptFloater(const LLUUID& object_id, bool set_new_message) +void LLScriptFloaterManager::toggleScriptFloater(const LLUUID& notification_id, bool set_new_message) { - // kill toast - using namespace LLNotificationsUI; - LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(LLChannelManager::getInstance()->findChannelByID( - LLUUID(gSavedSettings.getString("NotificationChannelUUID")))); - if(channel) - { - channel->killToastByNotificationID(findNotificationToastId(object_id)); - } - LLSD data; - data["object_id"] = object_id; + data["notification_id"] = notification_id; data["new_message"] = set_new_message; mToggleFloaterSignal(data); // toggle floater - LLScriptFloater::toggle(object_id); + LLScriptFloater::toggle(notification_id); } -void LLScriptFloaterManager::setNotificationToastId(const LLUUID& object_id, const LLUUID& notification_id) +LLUUID LLScriptFloaterManager::findObjectId(const LLUUID& notification_id) { - script_notification_map_t::iterator it = mNotifications.find(object_id); + script_notification_map_t::const_iterator it = mNotifications.find(notification_id); if(mNotifications.end() != it) { - it->second.toast_notification_id = notification_id; + return it->second; } + return LLUUID::null; } -LLUUID LLScriptFloaterManager::findObjectId(const LLUUID& notification_id) +LLUUID LLScriptFloaterManager::findNotificationId(const LLUUID& object_id) { - if(notification_id.notNull()) + if(object_id.notNull()) { - script_notification_map_t::const_iterator it = mNotifications.begin(); - for(; mNotifications.end() != it; ++it) + script_notification_map_t::const_iterator it = findUsingObjectId(object_id); + if(mNotifications.end() != it) { - if(notification_id == it->second.notification_id) - { - return it->first; - } + return it->first; } } return LLUUID::null; } -LLUUID LLScriptFloaterManager::findNotificationId(const LLUUID& object_id) +// static +LLScriptFloaterManager::EObjectType LLScriptFloaterManager::getObjectType(const LLUUID& notification_id) { - script_notification_map_t::const_iterator it = mNotifications.find(object_id); - if(mNotifications.end() != it) + if(notification_id.isNull()) { - return it->second.notification_id; + llwarns << "Invalid notification ID" << llendl; + return OBJ_UNKNOWN; } - return LLUUID::null; -} -LLUUID LLScriptFloaterManager::findNotificationToastId(const LLUUID& object_id) -{ - script_notification_map_t::const_iterator it = mNotifications.find(object_id); - if(mNotifications.end() != it) + static const object_type_map TYPE_MAP = initObjectTypeMap(); + + LLNotificationPtr notification = LLNotificationsUtil::find(notification_id); + object_type_map::const_iterator it = TYPE_MAP.find(notification->getName()); + if(it != TYPE_MAP.end()) { - return it->second.toast_notification_id; + return it->second; } - return LLUUID::null; + + llwarns << "Unknown object type" << llendl; + return OBJ_UNKNOWN; } -//static -void LLScriptFloaterManager::onToastButtonClick(const LLSD¬ification, const LLSD&response) +// static +std::string LLScriptFloaterManager::getObjectName(const LLUUID& notification_id) { - S32 option = LLNotification::getSelectedOption(notification, response); - LLUUID object_id = notification["payload"]["object_id"].asUUID(); + using namespace LLNotificationsUI; + LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id); + if(!notification) + { + llwarns << "Invalid notification" << llendl; + return LLStringUtil::null; + } - switch(option) + std::string text; + + switch(LLScriptFloaterManager::getObjectType(notification_id)) { - case 0: // "Open" - LLScriptFloaterManager::getInstance()->toggleScriptFloater(object_id); + case LLScriptFloaterManager::OBJ_SCRIPT: + text = notification->getSubstitutions()["TITLE"].asString(); break; - case 1: // "Ignore" - LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(object_id); + case LLScriptFloaterManager::OBJ_LOAD_URL: + text = notification->getSubstitutions()["OBJECTNAME"].asString(); break; - case 2: // "Block" - LLMuteList::getInstance()->add(LLMute(object_id, notification["substitutions"]["TITLE"], LLMute::OBJECT)); - LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(object_id); + case LLScriptFloaterManager::OBJ_GIVE_INVENTORY: + text = notification->getSubstitutions()["NAME"].asString(); break; default: - llwarns << "Unexpected value" << llendl; + text = LLTrans::getString("object"); break; } + + return text; +} + +//static +LLScriptFloaterManager::object_type_map LLScriptFloaterManager::initObjectTypeMap() +{ + object_type_map type_map; + type_map["ScriptDialog"] = OBJ_SCRIPT; + type_map["ScriptDialogGroup"] = OBJ_SCRIPT; + type_map["LoadWebPage"] = OBJ_LOAD_URL; + type_map["ObjectGiveItem"] = OBJ_GIVE_INVENTORY; + return type_map; +} + +LLScriptFloaterManager::script_notification_map_t::const_iterator LLScriptFloaterManager::findUsingObjectId(const LLUUID& object_id) +{ + script_notification_map_t::const_iterator it = mNotifications.begin(); + for(; mNotifications.end() != it; ++it) + { + if(object_id == it->second) + { + return it; + } + } + return mNotifications.end(); } // EOF diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h index f86605c5d1..f7efff83f9 100644 --- a/indra/newview/llscriptfloater.h +++ b/indra/newview/llscriptfloater.h @@ -48,6 +48,15 @@ class LLScriptFloaterManager : public LLSingleton<LLScriptFloaterManager> // know how script notifications should look like. public: + typedef enum e_object_type + { + OBJ_SCRIPT, + OBJ_GIVE_INVENTORY, + OBJ_LOAD_URL, + + OBJ_UNKNOWN + }EObjectType; + /** * Handles new notifications. * Saves notification and object ids, removes old notification if needed, creates script chiclet @@ -62,11 +71,6 @@ public: void onRemoveNotification(const LLUUID& notification_id); /** - * Wrapper for onRemoveNotification, removes notification by object id. - */ - void removeNotificationByObjectId(const LLUUID& object_id); - - /** * Toggles script floater. * Removes "new message" icon from chiclet and removes notification toast. */ @@ -76,12 +80,9 @@ public: LLUUID findNotificationId(const LLUUID& object_id); - LLUUID findNotificationToastId(const LLUUID& object_id); + static EObjectType getObjectType(const LLUUID& notification_id); - /** - * Associate notification toast id with object id. - */ - void setNotificationToastId(const LLUUID& object_id, const LLUUID& notification_id); + static std::string getObjectName(const LLUUID& notification_id); /** * Callback for notification toast buttons. @@ -93,16 +94,18 @@ public: boost::signals2::connection addNewObjectCallback(const object_signal_t::slot_type& cb) { return mNewObjectSignal.connect(cb); } boost::signals2::connection addToggleObjectFloaterCallback(const object_signal_t::slot_type& cb) { return mToggleFloaterSignal.connect(cb); } -private: +protected: - struct LLNotificationData - { - LLUUID notification_id; - LLUUID toast_notification_id; - }; + typedef std::map<std::string, EObjectType> object_type_map; + + static object_type_map initObjectTypeMap(); - // <object_id, notification_data> - typedef std::map<LLUUID, LLNotificationData> script_notification_map_t; + // <notification_id, object_id> + typedef std::map<LLUUID, LLUUID> script_notification_map_t; + + script_notification_map_t::const_iterator findUsingObjectId(const LLUUID& object_id); + +private: script_notification_map_t mNotifications; @@ -136,9 +139,9 @@ public: */ static LLScriptFloater* show(const LLUUID& object_id); - const LLUUID& getObjectId() { return mObjectId; } + const LLUUID& getNotificationId() { return mNotificationId; } - void setObjectId(const LLUUID& id) { mObjectId = id; } + void setNotificationId(const LLUUID& id) { mNotificationId = id; } /** * Close notification if script floater is closed. @@ -180,7 +183,7 @@ protected: private: LLToastNotifyPanel* mScriptForm; - LLUUID mObjectId; + LLUUID mNotificationId; }; #endif //LL_SCRIPTFLOATER_H diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index bf08756051..9540894646 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -41,6 +41,7 @@ #include "lldbstrings.h" #include "lleconomy.h" #include "llgl.h" +#include "llmediaentry.h" #include "llrender.h" #include "llnotifications.h" #include "llpermissions.h" @@ -1739,70 +1740,70 @@ void LLSelectMgr::selectionSetFullbright(U8 fullbright) getSelection()->applyToObjects(&sendfunc); } -void LLSelectMgr::selectionSetMedia(U8 media_type) -{ - - struct f : public LLSelectedTEFunctor - { - U8 mMediaFlags; - f(const U8& t) : mMediaFlags(t) {} - bool apply(LLViewerObject* object, S32 te) - { - if (object->permModify()) - { - // update viewer has media - object->setTEMediaFlags(te, mMediaFlags); - } - return true; - } - } setfunc(media_type); - getSelection()->applyToTEs(&setfunc); - struct f2 : public LLSelectedObjectFunctor - { - virtual bool apply(LLViewerObject* object) - { - if (object->permModify()) - { - object->sendTEUpdate(); - } - return true; - } - } func2; - mSelectedObjects->applyToObjects( &func2 ); -} - // This function expects media_data to be a map containing relevant // media data name/value pairs (e.g. home_url, etc.) -void LLSelectMgr::selectionSetMediaData(const LLSD &media_data) -{ - +void LLSelectMgr::selectionSetMedia(U8 media_type, const LLSD &media_data) +{ struct f : public LLSelectedTEFunctor { + U8 mMediaFlags; const LLSD &mMediaData; - f(const LLSD& t) : mMediaData(t) {} + f(const U8& t, const LLSD& d) : mMediaFlags(t), mMediaData(d) {} bool apply(LLViewerObject* object, S32 te) { if (object->permModify()) { - LLVOVolume *vo = dynamic_cast<LLVOVolume*>(object); - if (NULL != vo) - { - vo->syncMediaData(te, mMediaData, true/*merge*/, true/*ignore_agent*/); - } + // If we are adding media, then check the current state of the + // media data on this face. + // - If it does not have media, AND we are NOT setting the HOME URL, then do NOT add media to this + // face. + // - If it does not have media, and we ARE setting the HOME URL, add media to this face. + // - If it does already have media, add/update media to/on this face + // If we are removing media, just do it (ignore the passed-in LLSD). + if (mMediaFlags & LLTextureEntry::MF_HAS_MEDIA) + { + llassert(mMediaData.isMap()); + const LLTextureEntry *texture_entry = object->getTE(te); + if (!mMediaData.isMap() || + (NULL != texture_entry) && !texture_entry->hasMedia() && !mMediaData.has(LLMediaEntry::HOME_URL_KEY)) + { + // skip adding/updating media + } + else { + // Add/update media + object->setTEMediaFlags(te, mMediaFlags); + LLVOVolume *vo = dynamic_cast<LLVOVolume*>(object); + llassert(NULL != vo); + if (NULL != vo) + { + vo->syncMediaData(te, mMediaData, true/*merge*/, true/*ignore_agent*/); + } + } + } + else + { + // delete media (or just set the flags) + object->setTEMediaFlags(te, mMediaFlags); + } } return true; } - } setfunc(media_data); + } setfunc(media_type, media_data); getSelection()->applyToTEs(&setfunc); - + struct f2 : public LLSelectedObjectFunctor { virtual bool apply(LLViewerObject* object) { if (object->permModify()) { - LLVOVolume *vo = dynamic_cast<LLVOVolume*>(object); - if (NULL != vo) + object->sendTEUpdate(); + LLVOVolume *vo = dynamic_cast<LLVOVolume*>(object); + llassert(NULL != vo); + // It's okay to skip this object if hasMedia() is false... + // the sendTEUpdate() above would remove all media data if it were + // there. + if (NULL != vo && vo->hasMedia()) { // Send updated media data FOR THE ENTIRE OBJECT vo->sendMediaDataUpdate(); @@ -1811,11 +1812,9 @@ void LLSelectMgr::selectionSetMediaData(const LLSD &media_data) return true; } } func2; - getSelection()->applyToObjects(&func2); + mSelectedObjects->applyToObjects( &func2 ); } - - void LLSelectMgr::selectionSetGlow(F32 glow) { struct f1 : public LLSelectedTEFunctor diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index f8ecfd0674..00474827ca 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -502,8 +502,7 @@ public: void selectionSetTexGen( U8 texgen ); void selectionSetShiny( U8 shiny ); void selectionSetFullbright( U8 fullbright ); - void selectionSetMedia( U8 media_type ); - void selectionSetMediaData(const LLSD &media_data); // NOTE: modifies media_data!!! + void selectionSetMedia( U8 media_type, const LLSD &media_data ); void selectionSetClickAction(U8 action); void selectionSetIncludeInSearch(bool include_in_search); void selectionSetGlow(const F32 glow); diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 43215f86bd..cd4a821774 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -278,7 +278,7 @@ void LLSidepanelAppearance::toggleLookInfoPanel(BOOL visible) return; mLookInfo->setVisible(visible); - mPanelOutfitsInventory->setVisible(!visible); + if (mPanelOutfitsInventory) mPanelOutfitsInventory->setVisible(!visible); mFilterEditor->setVisible(!visible); mEditBtn->setVisible(!visible); mNewOutfitBtn->setVisible(!visible); @@ -305,7 +305,7 @@ void LLSidepanelAppearance::updateVerbs() { bool is_look_info_visible = mLookInfo->getVisible(); - if (!is_look_info_visible) + if (mPanelOutfitsInventory && !is_look_info_visible) { const bool is_correct_type = (mPanelOutfitsInventory->getCorrectListenerForAction() != NULL); mEditBtn->setEnabled(is_correct_type); diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 3fd5309947..73880563d7 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -62,7 +62,7 @@ BOOL LLSidepanelInventory::postBuild() // UI elements from inventory panel { mInventoryPanel = getChild<LLPanel>("sidepanel__inventory_panel"); - + mInfoBtn = mInventoryPanel->getChild<LLButton>("info_btn"); mInfoBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onInfoButtonClicked, this)); @@ -83,6 +83,14 @@ BOOL LLSidepanelInventory::postBuild() mPanelMainInventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory"); mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2)); + + /* + EXT-4846 : "Can we suppress the "Landmarks" and "My Favorites" folder since they have their own Task Panel?" + Deferring this until 2.1. + LLInventoryPanel *my_inventory_panel = mPanelMainInventory->getChild<LLInventoryPanel>("All Items"); + my_inventory_panel->addHideFolderType(LLFolderType::FT_LANDMARK); + my_inventory_panel->addHideFolderType(LLFolderType::FT_FAVORITE); + */ } // UI elements from item panel diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index 94fe95d215..0275736f6d 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -109,9 +109,9 @@ BOOL LLSidepanelItemInfo::postBuild() { LLSidepanelInventorySubpanel::postBuild(); - childSetPrevalidate("LabelItemName",&LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("LabelItemName",&LLTextValidate::validateASCIIPrintableNoPipe); getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitName,this)); - childSetPrevalidate("LabelItemDesc",&LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("LabelItemDesc",&LLTextValidate::validateASCIIPrintableNoPipe); getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLSidepanelItemInfo:: onCommitDescription, this)); // Creator information getChild<LLUICtrl>("BtnCreator")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickCreator,this)); @@ -231,20 +231,23 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) // PERMISSIONS LOOKUP // //////////////////////// + llassert(item); + if (!item) return; + // do not enable the UI for incomplete items. BOOL is_complete = item->isComplete(); const BOOL cannot_restrict_permissions = LLInventoryType::cannotRestrictPermissions(item->getInventoryType()); const BOOL is_calling_card = (item->getInventoryType() == LLInventoryType::IT_CALLINGCARD); const LLPermissions& perm = item->getPermissions(); const BOOL can_agent_manipulate = gAgent.allowOperation(PERM_OWNER, perm, - GP_OBJECT_MANIPULATE); + GP_OBJECT_MANIPULATE); const BOOL can_agent_sell = gAgent.allowOperation(PERM_OWNER, perm, - GP_OBJECT_SET_SALE) && + GP_OBJECT_SET_SALE) && !cannot_restrict_permissions; const BOOL is_link = item->getIsLinkType(); const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); - bool not_in_trash = item && (item->getUUID() != trash_id) && !gInventory.isObjectDescendentOf(item->getUUID(), trash_id); + bool not_in_trash = (item->getUUID() != trash_id) && !gInventory.isObjectDescendentOf(item->getUUID(), trash_id); // You need permission to modify the object to modify an inventory // item in it. diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp index 1da6fc516d..b0cdbe74dd 100644 --- a/indra/newview/llsidepaneltaskinfo.cpp +++ b/indra/newview/llsidepaneltaskinfo.cpp @@ -104,9 +104,9 @@ BOOL LLSidepanelTaskInfo::postBuild() mLabelGroupName = getChild<LLNameBox>("Group Name Proxy"); childSetCommitCallback("Object Name", LLSidepanelTaskInfo::onCommitName,this); - childSetPrevalidate("Object Name", LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("Object Name", LLTextValidate::validateASCIIPrintableNoPipe); childSetCommitCallback("Object Description", LLSidepanelTaskInfo::onCommitDesc,this); - childSetPrevalidate("Object Description", LLLineEditor::prevalidateASCIIPrintableNoPipe); + childSetPrevalidate("Object Description", LLTextValidate::validateASCIIPrintableNoPipe); getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLSidepanelTaskInfo::onClickGroup,this)); childSetCommitCallback("checkbox share with group", &LLSidepanelTaskInfo::onCommitGroupShare,this); childSetAction("button deed", &LLSidepanelTaskInfo::onClickDeedToGroup,this); diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index b1c8675793..140a9c818a 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -139,6 +139,8 @@ public: LLPanel* getButtonsPanel() { return mButtonsPanel; } + bool getCollapsed() { return mCollapsed; } + public: virtual ~LLSideTray(){}; diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index 2d4f3ff3c6..4e121021fc 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -176,6 +176,11 @@ BOOL LLSpeakerActionTimer::tick() return TRUE; } +void LLSpeakerActionTimer::unset() +{ + mActionCallback = 0; +} + LLSpeakersDelayActionsStorage::LLSpeakersDelayActionsStorage(LLSpeakerActionTimer::action_callback_t action_cb, F32 action_delay) : mActionCallback(action_cb) , mActionDelay(action_delay) @@ -214,7 +219,7 @@ void LLSpeakersDelayActionsStorage::unsetActionTimer(const LLUUID& speaker_id) if (it_speaker != mActionTimersMap.end()) { - delete it_speaker->second; + it_speaker->second->unset(); mActionTimersMap.erase(it_speaker); } } @@ -238,9 +243,7 @@ bool LLSpeakersDelayActionsStorage::onTimerActionCallback(const LLUUID& speaker_ mActionCallback(speaker_id); } - // do not return true to avoid deleting of an timer twice: - // in LLSpeakersDelayActionsStorage::unsetActionTimer() & LLEventTimer::updateClass() - return false; + return true; } @@ -293,7 +296,6 @@ LLPointer<LLSpeaker> LLSpeakerMgr::setSpeaker(const LLUUID& id, const std::strin } mSpeakerDelayRemover->unsetActionTimer(speakerp->mID); - return speakerp; } diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h index cf236f4fe8..8c9e85dd14 100644 --- a/indra/newview/llspeakers.h +++ b/indra/newview/llspeakers.h @@ -34,6 +34,7 @@ #define LL_LLSPEAKERS_H #include "llevent.h" +#include "lleventtimer.h" #include "llspeakers.h" #include "llvoicechannel.h" @@ -155,6 +156,13 @@ public: */ virtual BOOL tick(); + /** + * Clears the callback. + * + * Use this instead of deleteing this object. + * The next call to tick() will return true and that will destroy this object. + */ + void unset(); private: action_callback_t mActionCallback; LLUUID mSpeakerId; @@ -176,7 +184,7 @@ public: void setActionTimer(const LLUUID& speaker_id); /** - * Removes stored LLSpeakerActionTimer for passed speaker UUID from internal map and deletes it. + * Removes stored LLSpeakerActionTimer for passed speaker UUID from internal map and optionally deletes it. * * @see onTimerActionCallback() */ @@ -188,7 +196,6 @@ private: * Callback of the each instance of LLSpeakerActionTimer. * * Unsets an appropriate timer instance and calls action callback for specified speacker_id. - * It always returns false to not use LLEventTimer::updateClass functionality of timer deleting. * * @see unsetActionTimer() */ diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 15c5640841..cfad29df89 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -135,13 +135,14 @@ #include "llsecondlifeurls.h" #include "llselectmgr.h" #include "llsky.h" +#include "llsidetray.h" #include "llstatview.h" -#include "lltrans.h" #include "llstatusbar.h" // sendMoneyBalanceRequest(), owns L$ balance #include "llsurface.h" #include "lltexturecache.h" #include "lltexturefetch.h" #include "lltoolmgr.h" +#include "lltrans.h" #include "llui.h" #include "llurldispatcher.h" #include "llurlsimstring.h" @@ -800,6 +801,9 @@ bool idle_startup() gLoginMenuBarView->setVisible( TRUE ); gLoginMenuBarView->setEnabled( TRUE ); + // Hide the splash screen + LLSplashScreen::hide(); + // Push our window frontmost gViewerWindow->getWindow()->show(); display_startup(); @@ -1198,6 +1202,7 @@ bool idle_startup() display_startup(); LLStartUp::setStartupState( STATE_MULTIMEDIA_INIT ); + return FALSE; } @@ -1700,6 +1705,13 @@ bool idle_startup() << " kbps" << LL_ENDL; gViewerThrottle.setMaxBandwidth(FAST_RATE_BPS / 1024.f); } + + // Set the show start location to true, now that the user has logged + // on with this install. + gSavedSettings.setBOOL("ShowStartLocation", TRUE); + + LLSideTray::getInstance()->showPanel("panel_home", LLSD()); + } // We're successfully logged in. @@ -1879,6 +1891,17 @@ bool idle_startup() } } + // If this is the very first time the user has logged into viewer2+ (from a legacy viewer, or new account) + // then auto-populate outfits from the library into the My Outfits folder. + static bool check_populate_my_outfits = true; + if (check_populate_my_outfits && + (LLInventoryModel::getIsFirstTimeInViewer2() + || gSavedSettings.getBOOL("MyOutfitsAutofill"))) + { + gAgentWearables.populateMyOutfitsFolder(); + } + check_populate_my_outfits = false; + return TRUE; } @@ -2541,27 +2564,53 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name, // try to find the outfit - if not there, create some default // wearables. - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t item_array; - LLNameCategoryCollector has_name(outfit_folder_name); - gInventory.collectDescendentsIf(gInventory.getLibraryRootFolderID(), - cat_array, - item_array, - LLInventoryModel::EXCLUDE_TRASH, - has_name); - if (0 == cat_array.count()) + LLUUID cat_id = findDescendentCategoryIDByName( + gInventory.getLibraryRootFolderID(), + outfit_folder_name); + if (cat_id.isNull()) { gAgentWearables.createStandardWearables(gender); } else { - LLInventoryCategory* cat = cat_array.get(0); bool do_copy = true; bool do_append = false; + LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id); LLAppearanceManager::instance().wearInventoryCategory(cat, do_copy, do_append); } - LLAppearanceManager::instance().wearOutfitByName(gestures); - LLAppearanceManager::instance().wearOutfitByName(COMMON_GESTURES_FOLDER); + + // Copy gestures + LLUUID dst_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE); + LLPointer<LLInventoryCallback> cb(NULL); + LLAppearanceManager *app_mgr = &(LLAppearanceManager::instance()); + + // - Copy gender-specific gestures. + LLUUID gestures_cat_id = findDescendentCategoryIDByName( + gInventory.getLibraryRootFolderID(), + gestures); + if (gestures_cat_id.notNull()) + { + callAfterCategoryFetch(gestures_cat_id, + boost::bind(&LLAppearanceManager::shallowCopyCategory, + app_mgr, + gestures_cat_id, + dst_id, + cb)); + } + + // - Copy common gestures. + LLUUID common_gestures_cat_id = findDescendentCategoryIDByName( + gInventory.getLibraryRootFolderID(), + COMMON_GESTURES_FOLDER); + if (common_gestures_cat_id.notNull()) + { + callAfterCategoryFetch(common_gestures_cat_id, + boost::bind(&LLAppearanceManager::shallowCopyCategory, + app_mgr, + common_gestures_cat_id, + dst_id, + cb)); + } // This is really misnamed -- it means we have started loading // an outfit/shape that will give the avatar a gender eventually. JC diff --git a/indra/newview/llstylemap.cpp b/indra/newview/llstylemap.cpp index 2485563cbc..61705c4eb3 100644 --- a/indra/newview/llstylemap.cpp +++ b/indra/newview/llstylemap.cpp @@ -49,6 +49,7 @@ const LLStyle::Params &LLStyleMap::lookupAgent(const LLUUID &source) if (source != LLUUID::null && source != gAgent.getID() ) { style_params.color.control = "HTMLLinkColor"; + style_params.readonly_color.control = "HTMLLinkColor"; style_params.link_href = LLSLURL::buildCommand("agent", source, "inspect"); } @@ -56,6 +57,7 @@ const LLStyle::Params &LLStyleMap::lookupAgent(const LLUUID &source) { // Make the resident's own name white and don't make the name clickable. style_params.color = LLColor4::white; + style_params.readonly_color = LLColor4::white; } mMap[source] = style_params; @@ -75,11 +77,13 @@ const LLStyle::Params &LLStyleMap::lookup(const LLUUID& id, const std::string& l if (id != LLUUID::null && !link.empty()) { style_params.color.control = "HTMLLinkColor"; + style_params.readonly_color.control = "HTMLLinkColor"; style_params.link_href = link; } else { style_params.color = LLColor4::white; + style_params.readonly_color = LLColor4::white; } mMap[id] = style_params; } diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index ba15053381..127b4265ca 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -404,7 +404,10 @@ BOOL LLIMWellWindow::RowPanel::handleMouseDown(S32 x, S32 y, MASK mask) { // Pass the mouse down event to the chiclet (EXT-596). if (!mChiclet->pointInView(x, y) && !mCloseBtn->getRect().pointInRect(x, y)) // prevent double call of LLIMChiclet::onMouseDown() + { mChiclet->onMouseDown(); + return TRUE; + } return LLPanel::handleMouseDown(x, y, mask); } @@ -418,16 +421,16 @@ BOOL LLIMWellWindow::RowPanel::handleRightMouseDown(S32 x, S32 y, MASK mask) /* ObjectRowPanel implementation */ /************************************************************************/ -LLIMWellWindow::ObjectRowPanel::ObjectRowPanel(const LLUUID& object_id, bool new_message/* = false*/) +LLIMWellWindow::ObjectRowPanel::ObjectRowPanel(const LLUUID& notification_id, bool new_message/* = false*/) : LLPanel() , mChiclet(NULL) { LLUICtrlFactory::getInstance()->buildPanel(this, "panel_active_object_row.xml", NULL); - initChiclet(object_id); + initChiclet(notification_id); LLTextBox* obj_name = getChild<LLTextBox>("object_name"); - obj_name->setValue(getObjectName(object_id)); + obj_name->setValue(LLScriptFloaterManager::getObjectName(notification_id)); mCloseBtn = getChild<LLButton>("hide_btn"); mCloseBtn->setCommitCallback(boost::bind(&LLIMWellWindow::ObjectRowPanel::onClosePanel, this)); @@ -438,90 +441,18 @@ LLIMWellWindow::ObjectRowPanel::~ObjectRowPanel() { } -std::string LLIMWellWindow::ObjectRowPanel::getObjectName(const LLUUID& object_id) -{ - using namespace LLNotificationsUI; - LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(object_id); - LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id); - if(!notification) - { - llwarns << "Invalid notification" << llendl; - return LLStringUtil::null; - } - - std::string text; - - switch(getObjectType(notification)) - { - case OBJ_SCRIPT: - text = notification->getSubstitutions()["TITLE"].asString(); - break; - case OBJ_LOAD_URL: - text = notification->getSubstitutions()["OBJECTNAME"].asString(); - break; - case OBJ_GIVE_INVENTORY: - text = notification->getSubstitutions()["NAME"].asString(); - break; - default: - text = getString("unknown_obj"); - break; - } - - return text; -} - //--------------------------------------------------------------------------------- void LLIMWellWindow::ObjectRowPanel::onClosePanel() { - LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(mChiclet->getSessionId()); -} - -//static -LLIMWellWindow::ObjectRowPanel::object_type_map LLIMWellWindow::ObjectRowPanel::initObjectTypeMap() -{ - object_type_map type_map; - type_map["ScriptDialog"] = OBJ_SCRIPT; - type_map["LoadWebPage"] = OBJ_LOAD_URL; - type_map["ObjectGiveItem"] = OBJ_GIVE_INVENTORY; - return type_map; -} - -// static -LLIMWellWindow::ObjectRowPanel::EObjectType LLIMWellWindow::ObjectRowPanel::getObjectType(const LLNotificationPtr& notification) -{ - if(!notification) - { - llwarns << "Invalid notification" << llendl; - return OBJ_UNKNOWN; - } - - static object_type_map type_map = initObjectTypeMap(); - std::string name = notification->getName(); - object_type_map::const_iterator it = type_map.find(name); - if(it != type_map.end()) - { - return it->second; - } - - llwarns << "Unknown object type" << llendl; - return OBJ_UNKNOWN; + LLScriptFloaterManager::getInstance()->onRemoveNotification(mChiclet->getSessionId()); } -void LLIMWellWindow::ObjectRowPanel::initChiclet(const LLUUID& object_id, bool new_message/* = false*/) +void LLIMWellWindow::ObjectRowPanel::initChiclet(const LLUUID& notification_id, bool new_message/* = false*/) { - using namespace LLNotificationsUI; - LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(object_id); - LLNotificationPtr notification = LLNotifications::getInstance()->find(notification_id); - if(!notification) - { - llwarns << "Invalid notification" << llendl; - return; - } - // Choose which of the pre-created chiclets to use. - switch(getObjectType(notification)) + switch(LLScriptFloaterManager::getObjectType(notification_id)) { - case OBJ_GIVE_INVENTORY: + case LLScriptFloaterManager::OBJ_GIVE_INVENTORY: mChiclet = getChild<LLInvOfferChiclet>("inv_offer_chiclet"); break; default: @@ -530,8 +461,7 @@ void LLIMWellWindow::ObjectRowPanel::initChiclet(const LLUUID& object_id, bool n } mChiclet->setVisible(true); - mChiclet->setSessionId(object_id); -// mChiclet->setShowNewMessagesIcon(new_message); + mChiclet->setSessionId(notification_id); } //--------------------------------------------------------------------------------- @@ -552,7 +482,10 @@ BOOL LLIMWellWindow::ObjectRowPanel::handleMouseDown(S32 x, S32 y, MASK mask) { // Pass the mouse down event to the chiclet (EXT-596). if (!mChiclet->pointInView(x, y) && !mCloseBtn->getRect().pointInRect(x, y)) // prevent double call of LLIMChiclet::onMouseDown() + { mChiclet->onMouseDown(); + return TRUE; + } return LLPanel::handleMouseDown(x, y, mask); } @@ -780,10 +713,10 @@ void LLIMWellWindow::sessionIDUpdated(const LLUUID& old_session_id, const LLUUID } } -LLChiclet* LLIMWellWindow::findObjectChiclet(const LLUUID& object_id) +LLChiclet* LLIMWellWindow::findObjectChiclet(const LLUUID& notification_id) { LLChiclet* res = NULL; - ObjectRowPanel* panel = mMessageList->getTypedItemByValue<ObjectRowPanel>(object_id); + ObjectRowPanel* panel = mMessageList->getTypedItemByValue<ObjectRowPanel>(notification_id); if (panel != NULL) { res = panel->mChiclet; @@ -861,33 +794,33 @@ void LLIMWellWindow::delIMRow(const LLUUID& sessionId) } } -void LLIMWellWindow::addObjectRow(const LLUUID& object_id, bool new_message/* = false*/) +void LLIMWellWindow::addObjectRow(const LLUUID& notification_id, bool new_message/* = false*/) { - if (mMessageList->getItemByValue(object_id) == NULL) + if (mMessageList->getItemByValue(notification_id) == NULL) { - ObjectRowPanel* item = new ObjectRowPanel(object_id, new_message); - if (mMessageList->insertItemAfter(mSeparator, item, object_id)) + ObjectRowPanel* item = new ObjectRowPanel(notification_id, new_message); + if (mMessageList->insertItemAfter(mSeparator, item, notification_id)) { handleItemAdded(IT_INSTANT_MESSAGE); } else { - llwarns << "Unable to add Object Row into the list, objectID: " << object_id << llendl; + llwarns << "Unable to add Object Row into the list, notificationID: " << notification_id << llendl; item->die(); } reshapeWindow(); } } -void LLIMWellWindow::removeObjectRow(const LLUUID& object_id) +void LLIMWellWindow::removeObjectRow(const LLUUID& notification_id) { - if (mMessageList->removeItemByValue(object_id)) + if (mMessageList->removeItemByValue(notification_id)) { handleItemRemoved(IT_INSTANT_MESSAGE); } else { - llwarns << "Unable to remove Object Row from the list, objectID: " << object_id << llendl; + llwarns << "Unable to remove Object Row from the list, notificationID: " << notification_id << llendl; } reshapeWindow(); @@ -967,8 +900,7 @@ void LLIMWellWindow::closeAllImpl() ObjectRowPanel* obj_panel = dynamic_cast <ObjectRowPanel*> (panel); if (obj_panel) { - LLScriptFloaterManager::instance() - .removeNotificationByObjectId(*iter); + LLScriptFloaterManager::instance().onRemoveNotification(*iter); } } } diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h index 0c81d1f369..3790aa3ea9 100644 --- a/indra/newview/llsyswellwindow.h +++ b/indra/newview/llsyswellwindow.h @@ -188,8 +188,8 @@ public: /*virtual*/ void sessionRemoved(const LLUUID& session_id); /*virtual*/ void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id); - void addObjectRow(const LLUUID& object_id, bool new_message = false); - void removeObjectRow(const LLUUID& object_id); + void addObjectRow(const LLUUID& notification_id, bool new_message = false); + void removeObjectRow(const LLUUID& notification_id); void addIMRow(const LLUUID& session_id); bool hasIMRow(const LLUUID& session_id); @@ -201,7 +201,7 @@ protected: private: LLChiclet * findIMChiclet(const LLUUID& sessionId); - LLChiclet* findObjectChiclet(const LLUUID& object_id); + LLChiclet* findObjectChiclet(const LLUUID& notification_id); void addIMRow(const LLUUID& sessionId, S32 chicletCounter, const std::string& name, const LLUUID& otherParticipantId); void delIMRow(const LLUUID& sessionId); @@ -235,17 +235,8 @@ private: class ObjectRowPanel: public LLPanel { - typedef enum e_object_type - { - OBJ_UNKNOWN, - - OBJ_SCRIPT, - OBJ_GIVE_INVENTORY, - OBJ_LOAD_URL - }EObjectType; - public: - ObjectRowPanel(const LLUUID& object_id, bool new_message = false); + ObjectRowPanel(const LLUUID& notification_id, bool new_message = false); virtual ~ObjectRowPanel(); /*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask); /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask); @@ -254,12 +245,8 @@ private: private: void onClosePanel(); - static EObjectType getObjectType(const LLNotificationPtr& notification); - void initChiclet(const LLUUID& object_id, bool new_message = false); - std::string getObjectName(const LLUUID& object_id); + void initChiclet(const LLUUID& notification_id, bool new_message = false); - typedef std::map<std::string, EObjectType> object_type_map; - static object_type_map initObjectTypeMap(); public: LLIMChiclet* mChiclet; private: diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index a7f26f1df1..91c303c79e 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -51,7 +51,8 @@ // cache/textures/[0-F]/UUID.texture // Actual texture body files -const S32 TEXTURE_CACHE_ENTRY_SIZE = 1024; +//note: there is no good to define 1024 for TEXTURE_CACHE_ENTRY_SIZE while FIRST_PACKET_SIZE is 600 on sim side. +const S32 TEXTURE_CACHE_ENTRY_SIZE = FIRST_PACKET_SIZE;//1024; const F32 TEXTURE_CACHE_PURGE_AMOUNT = .20f; // % amount to reduce the cache by when it exceeds its limit const F32 TEXTURE_CACHE_LRU_SIZE = .10f; // % amount for LRU list (low overhead to regenerate) diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 404b79bfaf..4a61130785 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -73,13 +73,11 @@ private: } virtual void completed(bool success) { - mFetcher->lockQueue(); LLTextureFetchWorker* worker = mFetcher->getWorker(mID); if (worker) { worker->callbackCacheRead(success, mFormattedImage, mImageSize, mImageLocal); } - mFetcher->unlockQueue(); } private: LLTextureFetch* mFetcher; @@ -95,13 +93,11 @@ private: } virtual void completed(bool success) { - mFetcher->lockQueue(); LLTextureFetchWorker* worker = mFetcher->getWorker(mID); if (worker) { worker->callbackCacheWrite(success); } - mFetcher->unlockQueue(); } private: LLTextureFetch* mFetcher; @@ -117,13 +113,11 @@ private: } virtual void completed(bool success, LLImageRaw* raw, LLImageRaw* aux) { - mFetcher->lockQueue(); LLTextureFetchWorker* worker = mFetcher->getWorker(mID); if (worker) { worker->callbackDecoded(success, raw, aux); } - mFetcher->unlockQueue(); } private: LLTextureFetch* mFetcher; @@ -166,6 +160,8 @@ public: void setGetStatus(U32 status, const std::string& reason) { + LLMutexLock lock(&mWorkMutex); + mGetStatus = status; mGetReason = reason; } @@ -307,7 +303,6 @@ public: } lldebugs << "HTTP COMPLETE: " << mID << llendl; - mFetcher->lockQueue(); LLTextureFetchWorker* worker = mFetcher->getWorker(mID); if (worker) { @@ -339,7 +334,6 @@ public: mFetcher->removeFromHTTPQueue(mID); llwarns << "Worker not found: " << mID << llendl; } - mFetcher->unlockQueue(); } private: @@ -494,8 +488,9 @@ void LLTextureFetchWorker::setupPacketData() U32 LLTextureFetchWorker::calcWorkPriority() { -// llassert_always(mImagePriority >= 0 && mImagePriority <= LLViewerTexture::maxDecodePriority()); - static F32 PRIORITY_SCALE = (F32)LLWorkerThread::PRIORITY_LOWBITS / LLViewerFetchedTexture::maxDecodePriority(); + //llassert_always(mImagePriority >= 0 && mImagePriority <= LLViewerFetchedTexture::maxDecodePriority()); + static const F32 PRIORITY_SCALE = (F32)LLWorkerThread::PRIORITY_LOWBITS / LLViewerFetchedTexture::maxDecodePriority(); + mWorkPriority = (U32)(mImagePriority * PRIORITY_SCALE); return mWorkPriority; } @@ -1440,12 +1435,9 @@ bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, con return false; } - LLTextureFetchWorker* worker = NULL; - LLMutexLock lock(&mQueueMutex); - map_t::iterator iter = mRequestMap.find(id); - if (iter != mRequestMap.end()) + LLTextureFetchWorker* worker = getWorker(id) ; + if (worker) { - worker = iter->second; if (worker->mHost != host) { llwarns << "LLTextureFetch::createRequest " << id << " called with multiple hosts: " @@ -1494,41 +1486,48 @@ bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, con return false; // need to wait for previous aborted request to complete } worker->lockWorkMutex(); + worker->mActiveCount++; + worker->mNeedsAux = needs_aux; worker->setImagePriority(priority); worker->setDesiredDiscard(desired_discard, desired_size); - worker->unlockWorkMutex(); if (!worker->haveWork()) { worker->mState = LLTextureFetchWorker::INIT; + worker->unlockWorkMutex(); + worker->addWork(0, LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority); } + else + { + worker->unlockWorkMutex(); + } } else { worker = new LLTextureFetchWorker(this, url, id, host, priority, desired_discard, desired_size); + lockQueue() ; mRequestMap[id] = worker; - } + unlockQueue() ; + + worker->lockWorkMutex(); worker->mActiveCount++; worker->mNeedsAux = needs_aux; + worker->unlockWorkMutex(); + } + // llinfos << "REQUESTED: " << id << " Discard: " << desired_discard << llendl; return true; } -void LLTextureFetch::deleteRequest(const LLUUID& id, bool cancel) -{ - LLMutexLock lock(&mQueueMutex); - LLTextureFetchWorker* worker = getWorker(id); - if (worker) - { - removeRequest(worker, cancel); - } -} - // protected void LLTextureFetch::addToNetworkQueue(LLTextureFetchWorker* worker) { + lockQueue() ; + bool in_request_map = (mRequestMap.find(worker->mID) != mRequestMap.end()) ; + unlockQueue() ; + LLMutexLock lock(&mNetworkQueueMutex); - if (mRequestMap.find(worker->mID) != mRequestMap.end()) + if (in_request_map) { // only add to the queue if in the request map // i.e. a delete has not been requested @@ -1564,10 +1563,34 @@ void LLTextureFetch::removeFromHTTPQueue(const LLUUID& id) mHTTPTextureQueue.erase(id); } -// call lockQueue() first! +void LLTextureFetch::deleteRequest(const LLUUID& id, bool cancel) +{ + lockQueue() ; + LLTextureFetchWorker* worker = getWorkerAfterLock(id); + if (worker) + { + size_t erased_1 = mRequestMap.erase(worker->mID); + unlockQueue() ; + + llassert_always(erased_1 > 0) ; + + removeFromNetworkQueue(worker, cancel); + llassert_always(!(worker->getFlags(LLWorkerClass::WCF_DELETE_REQUESTED))) ; + + worker->scheduleDelete(); + } + else + { + unlockQueue() ; + } +} + void LLTextureFetch::removeRequest(LLTextureFetchWorker* worker, bool cancel) { + lockQueue() ; size_t erased_1 = mRequestMap.erase(worker->mID); + unlockQueue() ; + llassert_always(erased_1 > 0) ; removeFromNetworkQueue(worker, cancel); llassert_always(!(worker->getFlags(LLWorkerClass::WCF_DELETE_REQUESTED))) ; @@ -1575,8 +1598,26 @@ void LLTextureFetch::removeRequest(LLTextureFetchWorker* worker, bool cancel) worker->scheduleDelete(); } +S32 LLTextureFetch::getNumRequests() +{ + lockQueue() ; + S32 size = (S32)mRequestMap.size(); + unlockQueue() ; + + return size ; +} + +S32 LLTextureFetch::getNumHTTPRequests() +{ + mNetworkQueueMutex.lock() ; + S32 size = (S32)mHTTPTextureQueue.size(); + mNetworkQueueMutex.unlock() ; + + return size ; +} + // call lockQueue() first! -LLTextureFetchWorker* LLTextureFetch::getWorker(const LLUUID& id) +LLTextureFetchWorker* LLTextureFetch::getWorkerAfterLock(const LLUUID& id) { LLTextureFetchWorker* res = NULL; map_t::iterator iter = mRequestMap.find(id); @@ -1587,12 +1628,18 @@ LLTextureFetchWorker* LLTextureFetch::getWorker(const LLUUID& id) return res; } +LLTextureFetchWorker* LLTextureFetch::getWorker(const LLUUID& id) +{ + LLMutexLock lock(&mQueueMutex) ; + + return getWorkerAfterLock(id) ; +} + bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level, LLPointer<LLImageRaw>& raw, LLPointer<LLImageRaw>& aux) { bool res = false; - LLMutexLock lock(&mQueueMutex); LLTextureFetchWorker* worker = getWorker(id); if (worker) { @@ -1644,7 +1691,6 @@ bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level, bool LLTextureFetch::updateRequestPriority(const LLUUID& id, F32 priority) { bool res = false; - LLMutexLock lock(&mQueueMutex); LLTextureFetchWorker* worker = getWorker(id); if (worker) { @@ -1760,8 +1806,6 @@ void LLTextureFetch::sendRequestListToSimulators() } timer.reset(); - LLMutexLock lock(&mQueueMutex); - // Send requests typedef std::set<LLTextureFetchWorker*,LLTextureFetchWorker::Compare> request_list_t; typedef std::map< LLHost, request_list_t > work_request_map_t; @@ -1970,7 +2014,6 @@ bool LLTextureFetchWorker::insertPacket(S32 index, U8* data, S32 size) bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8 codec, U16 packets, U32 totalbytes, U16 data_size, U8* data) { - LLMutexLock lock(&mQueueMutex); LLTextureFetchWorker* worker = getWorker(id); bool res = true; @@ -2003,7 +2046,9 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8 if (!res) { ++mBadPacketCount; + mNetworkQueueMutex.lock() ; mCancelQueue[host].insert(id); + mNetworkQueueMutex.unlock() ; return false; } @@ -2024,7 +2069,6 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8 bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U16 packet_num, U16 data_size, U8* data) { - LLMutexLock lock(&mQueueMutex); LLTextureFetchWorker* worker = getWorker(id); bool res = true; @@ -2048,7 +2092,9 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1 if (!res) { ++mBadPacketCount; + mNetworkQueueMutex.lock() ; mCancelQueue[host].insert(id); + mNetworkQueueMutex.unlock() ; return false; } @@ -2088,7 +2134,6 @@ BOOL LLTextureFetch::isFromLocalCache(const LLUUID& id) { BOOL from_cache = FALSE ; - LLMutexLock lock(&mQueueMutex); LLTextureFetchWorker* worker = getWorker(id); if (worker) { @@ -2110,7 +2155,6 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r F32 request_dtime = 999999.f; U32 fetch_priority = 0; - LLMutexLock lock(&mQueueMutex); LLTextureFetchWorker* worker = getWorker(id); if (worker && worker->haveWork()) { diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h index 373e38a83c..5213c4f488 100644 --- a/indra/newview/lltexturefetch.h +++ b/indra/newview/lltexturefetch.h @@ -77,13 +77,14 @@ public: S32 getFetchState(const LLUUID& id, F32& decode_progress_p, F32& requested_priority_p, U32& fetch_priority_p, F32& fetch_dtime_p, F32& request_dtime_p); void dump(); - S32 getNumRequests() { return mRequestMap.size(); } - S32 getNumHTTPRequests() { return mHTTPTextureQueue.size(); } + S32 getNumRequests() ; + S32 getNumHTTPRequests() ; // Public for access by callbacks void lockQueue() { mQueueMutex.lock(); } void unlockQueue() { mQueueMutex.unlock(); } LLTextureFetchWorker* getWorker(const LLUUID& id); + LLTextureFetchWorker* getWorkerAfterLock(const LLUUID& id); LLTextureInfo* getTextureInfo() { return &mTextureInfo; } @@ -92,7 +93,7 @@ protected: void removeFromNetworkQueue(LLTextureFetchWorker* worker, bool cancel); void addToHTTPQueue(const LLUUID& id); void removeFromHTTPQueue(const LLUUID& id); - S32 getHTTPQueueSize() { return (S32)mHTTPTextureQueue.size(); } + S32 getHTTPQueueSize() { return getNumHTTPRequests(); } void removeRequest(LLTextureFetchWorker* worker, bool cancel); // Called from worker thread (during doWork) void processCurlRequests(); @@ -111,8 +112,8 @@ public: S32 mBadPacketCount; private: - LLMutex mQueueMutex; - LLMutex mNetworkQueueMutex; + LLMutex mQueueMutex; //to protect mRequestMap only + LLMutex mNetworkQueueMutex; //to protect mNetworkQueue, mHTTPTextureQueue and mCancelQueue. LLTextureCache* mTextureCache; LLImageDecodeThread* mImageDecodeThread; diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp index 7ae2404203..cb43beb819 100644 --- a/indra/newview/lltoastimpanel.cpp +++ b/indra/newview/lltoastimpanel.cpp @@ -141,32 +141,6 @@ BOOL LLToastIMPanel::handleToolTip(S32 x, S32 y, MASK mask) return LLToastPanel::handleToolTip(x, y, mask); } -void LLToastIMPanel::showInspector() -{ - LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(mSessionID); - if(!im_session) - { - llwarns << "Invalid IM session" << llendl; - return; - } - - switch(im_session->mSessionType) - { - case LLIMModel::LLIMSession::P2P_SESSION: - LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", mAvatarID)); - break; - case LLIMModel::LLIMSession::GROUP_SESSION: - LLFloaterReg::showInstance("inspect_group", LLSD().with("group_id", mSessionID)); - break; - case LLIMModel::LLIMSession::ADHOC_SESSION: - LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", im_session->mOtherParticipantID)); - break; - default: - llwarns << "Unknown IM session type" << llendl; - break; - } -} - void LLToastIMPanel::spawnNameToolTip() { // Spawn at right side of the name textbox. @@ -176,7 +150,7 @@ void LLToastIMPanel::spawnNameToolTip() LLToolTip::Params params; params.background_visible(false); - params.click_callback(boost::bind(&LLToastIMPanel::showInspector, this)); + params.click_callback(boost::bind(&LLFloaterReg::showInstance, "inspect_avatar", LLSD().with("avatar_id", mAvatarID), FALSE)); params.delay_time(0.0f); // spawn instantly on hover params.image(LLUI::getUIImage("Info_Small")); params.message(""); @@ -201,7 +175,7 @@ void LLToastIMPanel::spawnGroupIconToolTip() LLInspector::Params params; params.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>()); - params.click_callback(boost::bind(&LLToastIMPanel::showInspector, this)); + params.click_callback(boost::bind(&LLFloaterReg::showInstance, "inspect_group", LLSD().with("group_id", mSessionID), FALSE)); params.delay_time(0.100f); params.image(LLUI::getUIImage("Info_Small")); params.message(g_data.mName); @@ -214,16 +188,15 @@ void LLToastIMPanel::spawnGroupIconToolTip() void LLToastIMPanel::initIcon() { - LLIconCtrl* sys_msg_icon = getChild<LLIconCtrl>("sys_msg_icon"); - mAvatarIcon->setVisible(FALSE); mGroupIcon->setVisible(FALSE); - sys_msg_icon->setVisible(FALSE); mAdhocIcon->setVisible(FALSE); if(mAvatarName->getValue().asString() == SYSTEM_FROM) { - sys_msg_icon->setVisible(TRUE); + // "sys_msg_icon" was disabled by Erica in the changeset: 5109 (85181bc92cbe) + // and "dummy widget" warnings appeared in log. + // It does not make sense to have such image with empty name. Removed for EXT-5057. } else { diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index fa1c99ece7..4a61bed475 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -859,10 +859,10 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l std::string full_name; if (!gCacheName->getFullName(hover_object->getID(), full_name)) { - LLNameValue* firstname = hover_object->getNVPair("FirstName"); - LLNameValue* lastname = hover_object->getNVPair("LastName"); - if (firstname && lastname) - { + LLNameValue* firstname = hover_object->getNVPair("FirstName"); + LLNameValue* lastname = hover_object->getNVPair("LastName"); + if (firstname && lastname) + { full_name = LLCacheName::buildFullName( firstname->getString(), lastname->getString()); } @@ -880,7 +880,7 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l { final_name = full_name; } - + // *HACK: We may select this object, so pretend it was clicked mPick = mHoverPick; LLInspector::Params p; @@ -1500,6 +1500,12 @@ BOOL LLToolPie::pickRightMouseDownCallback() while( object && object->isAttachment()) { object = (LLViewerObject*)object->getParent(); + llassert(object); + } + + if (!object) + { + return TRUE; // unexpected, but escape } // Object is an avatar, so check for mute by id. diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 9ced0194a2..0e133f8729 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -57,6 +57,7 @@ #include "llkeyboard.h" #include "llmutelist.h" //#include "llfirstuse.h" +#include "llwindow.h" #include <boost/bind.hpp> // for SkinFolder listener #include <boost/signals2.hpp> @@ -712,7 +713,6 @@ void LLViewerMedia::updateMedia(void *dummy_arg) std::vector<LLViewerMediaImpl*> proximity_order; bool inworld_media_enabled = gSavedSettings.getBOOL("AudioStreamingMedia"); - bool needs_first_run = LLViewerMedia::needsMediaFirstRun(); U32 max_instances = gSavedSettings.getU32("PluginInstancesTotal"); U32 max_normal = gSavedSettings.getU32("PluginInstancesNormal"); U32 max_low = gSavedSettings.getU32("PluginInstancesLow"); @@ -838,12 +838,6 @@ void LLViewerMedia::updateMedia(void *dummy_arg) if(!pimpl->getUsedInUI()) { new_priority = LLPluginClassMedia::PRIORITY_UNLOADED; - if(needs_first_run) - { - // Don't do this more than once in this loop. - needs_first_run = false; - LLViewerMedia::displayMediaFirstRun(); - } } } @@ -913,59 +907,6 @@ void LLViewerMedia::cleanupClass() gIdleCallbacks.deleteFunction(LLViewerMedia::updateMedia, NULL); } - -////////////////////////////////////////////////////////////////////////////////////////// -// static -bool LLViewerMedia::needsMediaFirstRun() -{ - return gWarningSettings.getBOOL("FirstStreamingMedia"); -} - -////////////////////////////////////////////////////////////////////////////////////////// -// static -void LLViewerMedia::displayMediaFirstRun() -{ - gWarningSettings.setBOOL("FirstStreamingMedia", FALSE); - - LLNotificationsUtil::add("ParcelCanPlayMedia", LLSD(), LLSD(), - boost::bind(firstRunCallback, _1, _2)); -} - -////////////////////////////////////////////////////////////////////////////////////////// -// static -bool LLViewerMedia::firstRunCallback(const LLSD& notification, const LLSD& response) -{ - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - if (option == 0) - { - // user has elected to automatically play media. - gSavedSettings.setBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING, TRUE); - gSavedSettings.setBOOL("AudioStreamingMusic", TRUE); - gSavedSettings.setBOOL("AudioStreamingMedia", TRUE); - - LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); - - if (parcel) - { - // play media right now, if available - LLViewerParcelMedia::play(parcel); - - // play music right now, if available - std::string music_url = parcel->getMusicURL(); - if (gAudiop && !music_url.empty()) - gAudiop->startInternetStream(music_url); - } - } - else - { - gSavedSettings.setBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING, FALSE); - gSavedSettings.setBOOL("AudioStreamingMedia", FALSE); - gSavedSettings.setBOOL("AudioStreamingMusic", FALSE); - } - return false; -} - - ////////////////////////////////////////////////////////////////////////////////////////// // LLViewerMediaImpl ////////////////////////////////////////////////////////////////////////////////////////// @@ -1839,9 +1780,12 @@ bool LLViewerMediaImpl::handleKeyHere(KEY key, MASK mask) if(!result) { - result = mMediaSource->keyEvent(LLPluginClassMedia::KEY_EVENT_DOWN ,key, mask); + + LLSD native_key_data = gViewerWindow->getWindow()->getNativeKeyData(); + + result = mMediaSource->keyEvent(LLPluginClassMedia::KEY_EVENT_DOWN ,key, mask, native_key_data); // Since the viewer internal event dispatching doesn't give us key-up events, simulate one here. - (void)mMediaSource->keyEvent(LLPluginClassMedia::KEY_EVENT_UP ,key, mask); + (void)mMediaSource->keyEvent(LLPluginClassMedia::KEY_EVENT_UP ,key, mask, native_key_data); } } @@ -1859,7 +1803,9 @@ bool LLViewerMediaImpl::handleUnicodeCharHere(llwchar uni_char) if (uni_char >= 32 // discard 'control' characters && uni_char != 127) // SDL thinks this is 'delete' - yuck. { - mMediaSource->textInput(wstring_to_utf8str(LLWString(1, uni_char)), gKeyboard->currentMask(FALSE)); + LLSD native_key_data = gViewerWindow->getWindow()->getNativeKeyData(); + + mMediaSource->textInput(wstring_to_utf8str(LLWString(1, uni_char)), gKeyboard->currentMask(FALSE), native_key_data); } } diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index ff18ed605a..daad70f14f 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -117,11 +117,6 @@ class LLViewerMedia // This is the comparitor used to sort the list. static bool priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2); - // For displaying the media first-run dialog. - static bool needsMediaFirstRun(); - static void displayMediaFirstRun(); - static bool firstRunCallback(const LLSD& notification, const LLSD& response); - }; // Implementation functions not exported into header file diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp index a0ac9c2091..f508a3462a 100644 --- a/indra/newview/llviewermediafocus.cpp +++ b/indra/newview/llviewermediafocus.cpp @@ -157,7 +157,6 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac mFocusedObjectFace = 0; } } - } void LLViewerMediaFocus::clearFocus() @@ -198,7 +197,7 @@ bool LLViewerMediaFocus::getFocus() } // This function selects an ideal viewing distance based on the focused object, pick normal, and padding value -void LLViewerMediaFocus::setCameraZoom(LLViewerObject* object, LLVector3 normal, F32 padding_factor) +void LLViewerMediaFocus::setCameraZoom(LLViewerObject* object, LLVector3 normal, F32 padding_factor, bool zoom_in_only) { if (object) { @@ -269,7 +268,16 @@ void LLViewerMediaFocus::setCameraZoom(LLViewerObject* object, LLVector3 normal, camera_pos += 0.01 * len * delta; } + // If we are not allowing zooming out and the old camera position is closer to + // the center then the new intended camera position, don't move camera and return + if (zoom_in_only && + (dist_vec_squared(gAgent.getCameraPositionGlobal(), target_pos) < dist_vec_squared(camera_pos, target_pos))) + { + return; + } + gAgent.setCameraPosAndFocusGlobal(camera_pos, target_pos, object->getID() ); + } else { diff --git a/indra/newview/llviewermediafocus.h b/indra/newview/llviewermediafocus.h index 89ee0ae283..002044ea2e 100644 --- a/indra/newview/llviewermediafocus.h +++ b/indra/newview/llviewermediafocus.h @@ -66,7 +66,7 @@ public: void update(); - static void setCameraZoom(LLViewerObject* object, LLVector3 normal, F32 padding_factor); + static void setCameraZoom(LLViewerObject* object, LLVector3 normal, F32 padding_factor, bool zoom_in_only = false); static F32 getBBoxAspectRatio(const LLBBox& bbox, const LLVector3& normal, F32* height, F32* width, F32* depth); bool isFocusedOnFace(LLPointer<LLViewerObject> objectp, S32 face); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 6f6932367f..7fc7f2101a 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -603,6 +603,10 @@ class LLAdvancedToggleHUDInfo : public view_listener_t { gDisplayFOV = !(gDisplayFOV); } + else if ("badge" == info_type) + { + gDisplayBadge = !(gDisplayBadge); + } return true; } }; @@ -625,6 +629,10 @@ class LLAdvancedCheckHUDInfo : public view_listener_t { new_value = gDisplayFOV; } + else if ("badge" == info_type) + { + new_value = gDisplayBadge; + } return new_value; } }; @@ -5267,7 +5275,7 @@ class LLWorldCreateLandmark : public view_listener_t void handle_look_at_selection(const LLSD& param) { - const F32 PADDING_FACTOR = 2.f; + const F32 PADDING_FACTOR = 1.75f; BOOL zoom = (param.asString() == "zoom"); if (!LLSelectMgr::getInstance()->getSelection()->isEmpty()) { @@ -5287,9 +5295,14 @@ void handle_look_at_selection(const LLSD& param) } if (zoom) { + // Make sure we are not increasing the distance between the camera and object + LLVector3d orig_distance = gAgent.getCameraPositionGlobal() - LLSelectMgr::getInstance()->getSelectionCenterGlobal(); + distance = llmin(distance, (F32) orig_distance.length()); + gAgent.setCameraPosAndFocusGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal() + LLVector3d(obj_to_cam * distance), LLSelectMgr::getInstance()->getSelectionCenterGlobal(), object_id ); + } else { @@ -5529,50 +5542,55 @@ void handle_buy_currency() LLFloaterBuyCurrency::buyCurrency(); } - - -class LLFloaterVisible : public view_listener_t +class LLShowHelp : public view_listener_t { bool handleEvent(const LLSD& userdata) { - std::string floater_name = userdata.asString(); - bool new_value = false; - { - new_value = LLFloaterReg::instanceVisible(floater_name); - } - return new_value; + std::string help_topic = userdata.asString(); + LLViewerHelp* vhelp = LLViewerHelp::getInstance(); + vhelp->showTopic(help_topic); + return true; } }; -class LLShowHelp : public view_listener_t +class LLShowSidetrayPanel : public view_listener_t { bool handleEvent(const LLSD& userdata) { - std::string help_topic = userdata.asString(); - LLViewerHelp* vhelp = LLViewerHelp::getInstance(); - vhelp->showTopic(help_topic); + std::string panel_name = userdata.asString(); + // Toggle the panel + if (!LLSideTray::getInstance()->isPanelActive(panel_name)) + { + // LLFloaterInventory::showAgentInventory(); + LLSideTray::getInstance()->showPanel(panel_name, LLSD()); + } + else + { + LLSideTray::getInstance()->collapseSideBar(); + } return true; } }; -class LLShowSidetrayPanel : public view_listener_t +class LLSidetrayPanelVisible : public view_listener_t { bool handleEvent(const LLSD& userdata) { std::string panel_name = userdata.asString(); - // Open up either the sidepanel or new floater. + // Toggle the panel if (LLSideTray::getInstance()->isPanelActive(panel_name)) { - LLFloaterInventory::showAgentInventory(); + return true; } else { - LLSideTray::getInstance()->showPanel(panel_name, LLSD()); + return false; } - return true; + } }; + bool callback_show_url(const LLSD& notification, const LLSD& response) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); @@ -7122,25 +7140,7 @@ void handle_buy_currency_test(void*) LLStringUtil::format_map_t replace; replace["[AGENT_ID]"] = gAgent.getID().asString(); replace["[SESSION_ID]"] = gAgent.getSecureSessionID().asString(); - - // *TODO: Replace with call to LLUI::getLanguage() after windows-setup - // branch merges in. JC - std::string language = "en"; - language = gSavedSettings.getString("Language"); - if (language.empty() || language == "default") - { - language = gSavedSettings.getString("InstallLanguage"); - } - if (language.empty() || language == "default") - { - language = gSavedSettings.getString("SystemLanguage"); - } - if (language.empty() || language == "default") - { - language = "en"; - } - - replace["[LANGUAGE]"] = language; + replace["[LANGUAGE]"] = LLUI::getLanguage(); LLStringUtil::format(url, replace); llinfos << "buy currency url " << url << llendl; @@ -7972,8 +7972,8 @@ void initialize_menus() enable.add("EnableEdit", boost::bind(&enable_object_edit)); enable.add("VisibleBuild", boost::bind(&enable_object_build)); - view_listener_t::addMenu(new LLFloaterVisible(), "FloaterVisible"); view_listener_t::addMenu(new LLShowSidetrayPanel(), "ShowSidetrayPanel"); + view_listener_t::addMenu(new LLSidetrayPanelVisible(), "SidetrayPanelVisible"); view_listener_t::addMenu(new LLSomethingSelected(), "SomethingSelected"); view_listener_t::addMenu(new LLSomethingSelectedNoHUD(), "SomethingSelectedNoHUD"); view_listener_t::addMenu(new LLEditableSelected(), "EditableSelected"); diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 6bad8843fd..84b270f8cc 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -796,84 +796,88 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt //LLAssetType::EType pref_loc = data->mPreferredLocation; BOOL is_balance_sufficient = TRUE; - if(result >= 0) + if(data) { - LLFolderType::EType dest_loc = (data->mPreferredLocation == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(data->mAssetInfo.mType) : data->mPreferredLocation; - - if (LLAssetType::AT_SOUND == data->mAssetInfo.mType || - LLAssetType::AT_TEXTURE == data->mAssetInfo.mType || - LLAssetType::AT_ANIMATION == data->mAssetInfo.mType) + if (result >= 0) { - // Charge the user for the upload. - LLViewerRegion* region = gAgent.getRegion(); - - if(!(can_afford_transaction(expected_upload_cost))) - { - LLFloaterBuyCurrency::buyCurrency( - llformat(LLTrans::getString("UploadingCosts").c_str(), - data->mAssetInfo.getName().c_str()), - expected_upload_cost); - is_balance_sufficient = FALSE; - } - else if(region) + LLFolderType::EType dest_loc = (data->mPreferredLocation == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(data->mAssetInfo.mType) : data->mPreferredLocation; + + if (LLAssetType::AT_SOUND == data->mAssetInfo.mType || + LLAssetType::AT_TEXTURE == data->mAssetInfo.mType || + LLAssetType::AT_ANIMATION == data->mAssetInfo.mType) { - // Charge user for upload - gStatusBar->debitBalance(expected_upload_cost); + // Charge the user for the upload. + LLViewerRegion* region = gAgent.getRegion(); - LLMessageSystem* msg = gMessageSystem; - msg->newMessageFast(_PREHASH_MoneyTransferRequest); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_MoneyData); - msg->addUUIDFast(_PREHASH_SourceID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_DestID, LLUUID::null); - msg->addU8("Flags", 0); - // we tell the sim how much we were expecting to pay so it - // can respond to any discrepancy - msg->addS32Fast(_PREHASH_Amount, expected_upload_cost); - msg->addU8Fast(_PREHASH_AggregatePermNextOwner, (U8)LLAggregatePermissions::AP_EMPTY); - msg->addU8Fast(_PREHASH_AggregatePermInventory, (U8)LLAggregatePermissions::AP_EMPTY); - msg->addS32Fast(_PREHASH_TransactionType, TRANS_UPLOAD_CHARGE); - msg->addStringFast(_PREHASH_Description, NULL); - msg->sendReliable(region->getHost()); + if(!(can_afford_transaction(expected_upload_cost))) + { + LLFloaterBuyCurrency::buyCurrency( + llformat(LLTrans::getString("UploadingCosts").c_str(), + data->mAssetInfo.getName().c_str()), + expected_upload_cost); + is_balance_sufficient = FALSE; + } + else if(region) + { + // Charge user for upload + gStatusBar->debitBalance(expected_upload_cost); + + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_MoneyTransferRequest); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_MoneyData); + msg->addUUIDFast(_PREHASH_SourceID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_DestID, LLUUID::null); + msg->addU8("Flags", 0); + // we tell the sim how much we were expecting to pay so it + // can respond to any discrepancy + msg->addS32Fast(_PREHASH_Amount, expected_upload_cost); + msg->addU8Fast(_PREHASH_AggregatePermNextOwner, (U8)LLAggregatePermissions::AP_EMPTY); + msg->addU8Fast(_PREHASH_AggregatePermInventory, (U8)LLAggregatePermissions::AP_EMPTY); + msg->addS32Fast(_PREHASH_TransactionType, TRANS_UPLOAD_CHARGE); + msg->addStringFast(_PREHASH_Description, NULL); + msg->sendReliable(region->getHost()); + } } - } - if(is_balance_sufficient) - { - // Actually add the upload to inventory - llinfos << "Adding " << uuid << " to inventory." << llendl; - const LLUUID folder_id = gInventory.findCategoryUUIDForType(dest_loc); - if(folder_id.notNull()) + if(is_balance_sufficient) { - U32 next_owner_perms = data->mNextOwnerPerm; - if(PERM_NONE == next_owner_perms) + // Actually add the upload to inventory + llinfos << "Adding " << uuid << " to inventory." << llendl; + const LLUUID folder_id = gInventory.findCategoryUUIDForType(dest_loc); + if(folder_id.notNull()) { - next_owner_perms = PERM_MOVE | PERM_TRANSFER; + U32 next_owner_perms = data->mNextOwnerPerm; + if(PERM_NONE == next_owner_perms) + { + next_owner_perms = PERM_MOVE | PERM_TRANSFER; + } + create_inventory_item(gAgent.getID(), gAgent.getSessionID(), + folder_id, data->mAssetInfo.mTransactionID, data->mAssetInfo.getName(), + data->mAssetInfo.getDescription(), data->mAssetInfo.mType, + data->mInventoryType, NOT_WEARABLE, next_owner_perms, + LLPointer<LLInventoryCallback>(NULL)); + } + else + { + llwarns << "Can't find a folder to put it in" << llendl; } - create_inventory_item(gAgent.getID(), gAgent.getSessionID(), - folder_id, data->mAssetInfo.mTransactionID, data->mAssetInfo.getName(), - data->mAssetInfo.getDescription(), data->mAssetInfo.mType, - data->mInventoryType, NOT_WEARABLE, next_owner_perms, - LLPointer<LLInventoryCallback>(NULL)); - } - else - { - llwarns << "Can't find a folder to put it in" << llendl; } } - } - else // if(result >= 0) - { - LLSD args; - args["FILE"] = LLInventoryType::lookupHumanReadable(data->mInventoryType); - args["REASON"] = std::string(LLAssetStorage::getErrorString(result)); - LLNotificationsUtil::add("CannotUploadReason", args); + else // if(result >= 0) + { + LLSD args; + args["FILE"] = LLInventoryType::lookupHumanReadable(data->mInventoryType); + args["REASON"] = std::string(LLAssetStorage::getErrorString(result)); + LLNotificationsUtil::add("CannotUploadReason", args); + } } LLUploadDialog::modalUploadFinished(); delete data; + data = NULL; // *NOTE: This is a pretty big hack. What this does is check the // file picker if there are any more pending uploads. If so, diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 3cc6b9b591..10d5d002cd 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -38,6 +38,7 @@ #include "llavataractions.h" #include "lscript_byteformat.h" #include "lleconomy.h" +#include "lleventtimer.h" #include "llfloaterreg.h" #include "llfollowcamparams.h" #include "llregionhandle.h" @@ -866,6 +867,10 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f } LLInventoryItem* item = gInventory.getItem(item_id); + llassert(item); + if (!item) { + continue; + } //////////////////////////////////////////////////////////////////////////////// // Special handling for various types. @@ -914,12 +919,13 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f { // Landmark creation handling is moved to LLPanelPlaces::showAddedLandmarkInfo() // TODO* LLPanelPlaces dependency is going to be removed. See EXT-4347. - if("create_landmark" == places_panel->getPlaceInfoType() && !places_panel->getItem()) - { + //if("create_landmark" == places_panel->getPlaceInfoType() && !places_panel->getItem()) + //{ //places_panel->setItem(item); - } + //} + //else // we are opening a group notice attachment - else + if("create_landmark" != places_panel->getPlaceInfoType()) { LLSD args; args["type"] = "landmark"; @@ -1257,10 +1263,6 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& gInventory.addObserver(opener); } - // Remove script dialog because there is no need in it no more. - LLUUID object_id = notification["payload"]["object_id"].asUUID(); - LLScriptFloaterManager::instance().removeNotificationByObjectId(object_id); - delete this; return false; } @@ -1300,13 +1302,6 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const msg->addUUIDFast(_PREHASH_RegionID, LLUUID::null); msg->addVector3Fast(_PREHASH_Position, gAgent.getPositionAgent()); LLInventoryObserver* opener = NULL; - LLViewerInventoryCategory* catp = NULL; - catp = (LLViewerInventoryCategory*)gInventory.getCategory(mObjectID); - LLViewerInventoryItem* itemp = NULL; - if(!catp) - { - itemp = (LLViewerInventoryItem*)gInventory.getItem(mObjectID); - } std::string from_string; // Used in the pop-up. std::string chatHistory_string; // Used in chat history. @@ -1434,10 +1429,6 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const gInventory.addObserver(opener); } - // Remove script dialog because there is no need in it no more. - LLUUID object_id = notification["payload"]["object_id"].asUUID(); - LLScriptFloaterManager::instance().removeNotificationByObjectId(object_id); - delete this; return false; } @@ -1571,7 +1562,6 @@ void inventory_offer_handler(LLOfferInfo* info) { payload["give_inventory_notification"] = TRUE; LLNotificationPtr notification = LLNotifications::instance().add(p.payload(payload)); - LLScriptFloaterManager::getInstance()->setNotificationToastId(object_id, notification->getID()); } } } @@ -1884,6 +1874,11 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) } else { + /* + EXT-5099 + currently there is no way to store in history only... + using LLNotificationsUtil::add will add message to Nearby Chat + // muted user, so don't start an IM session, just record line in chat // history. Pretend the chat is from a local agent, // so it will go into the history but not be shown on screen. @@ -1891,6 +1886,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) LLSD args; args["MESSAGE"] = buffer; LLNotificationsUtil::add("SystemMessageTip", args); + */ } } break; diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 886f1d9ef5..d0afa9d9de 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -4019,9 +4019,14 @@ LLBBox LLViewerObject::getBoundingBoxAgent() const { LLVector3 position_agent; LLQuaternion rot; + LLViewerObject* avatar_parent = NULL; LLViewerObject* root_edit = (LLViewerObject*)getRootEdit(); - LLViewerObject* avatar_parent = (LLViewerObject*)root_edit->getParent(); - if (avatar_parent && avatar_parent->isAvatar() && root_edit->mDrawable.notNull()) + if (root_edit) + { + avatar_parent = (LLViewerObject*)root_edit->getParent(); + } + + if (avatar_parent && avatar_parent->isAvatar() && root_edit && root_edit->mDrawable.notNull()) { LLXform* parent_xform = root_edit->mDrawable->getXform()->getParent(); position_agent = (getPositionEdit() * parent_xform->getWorldRotation()) + parent_xform->getWorldPosition(); diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp index c4fc2e5cab..2c5c0a37e8 100644 --- a/indra/newview/llviewerparcelmedia.cpp +++ b/indra/newview/llviewerparcelmedia.cpp @@ -105,15 +105,6 @@ void LLViewerParcelMedia::update(LLParcel* parcel) std::string mediaUrl = std::string ( parcel->getMediaURL () ); std::string mediaCurrentUrl = std::string( parcel->getMediaCurrentURL()); - // First use warning - if( (!mediaUrl.empty() || - !parcel->getMusicURL().empty()) - && LLViewerMedia::needsMediaFirstRun()) - { - LLViewerMedia::displayMediaFirstRun(); - return; - } - // if we have a current (link sharing) url, use it instead if (mediaCurrentUrl != "" && parcel->getMediaType() == "text/html") { diff --git a/indra/newview/llviewerparcelmediaautoplay.h b/indra/newview/llviewerparcelmediaautoplay.h index 1d80b4756c..40142c1dd1 100644 --- a/indra/newview/llviewerparcelmediaautoplay.h +++ b/indra/newview/llviewerparcelmediaautoplay.h @@ -33,7 +33,7 @@ #ifndef LLVIEWERPARCELMEDIAAUTOPLAY_H #define LLVIEWERPARCELMEDIAAUTOPLAY_H -#include "lltimer.h" +#include "lleventtimer.h" #include "lluuid.h" // timer to automatically play media diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 3f27453370..ba1e7ed89b 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -1762,6 +1762,12 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use { optionally_start_music(music_url); } + else + { + llinfos << "Stopping parcel music (invalid audio stream URL)" << llendl; + // clears the URL + gAudiop->startInternetStream(LLStringUtil::null); + } } else if (!gAudiop->getInternetStreamURL().empty()) { diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 0ad269392d..984f003411 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -715,7 +715,7 @@ void LLViewerTexture::generateGLTexture() LLImageGL* LLViewerTexture::getGLTexture() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep ; } @@ -732,7 +732,7 @@ BOOL LLViewerTexture::createGLTexture() BOOL LLViewerTexture::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename, BOOL to_create, S32 category) { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; BOOL ret = mGLTexturep->createGLTexture(discard_level, imageraw, usename, to_create, category) ; @@ -748,55 +748,55 @@ BOOL LLViewerTexture::createGLTexture(S32 discard_level, const LLImageRaw* image void LLViewerTexture::setExplicitFormat(LLGLint internal_format, LLGLenum primary_format, LLGLenum type_format, BOOL swap_bytes) { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; mGLTexturep->setExplicitFormat(internal_format, primary_format, type_format, swap_bytes) ; } void LLViewerTexture::setAddressMode(LLTexUnit::eTextureAddressMode mode) { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; mGLTexturep->setAddressMode(mode) ; } void LLViewerTexture::setFilteringOption(LLTexUnit::eTextureFilterOptions option) { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; mGLTexturep->setFilteringOption(option) ; } //virtual S32 LLViewerTexture::getWidth(S32 discard_level) const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getWidth(discard_level) ; } //virtual S32 LLViewerTexture::getHeight(S32 discard_level) const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getHeight(discard_level) ; } S32 LLViewerTexture::getMaxDiscardLevel() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getMaxDiscardLevel() ; } S32 LLViewerTexture::getDiscardLevel() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getDiscardLevel() ; } S8 LLViewerTexture::getComponents() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getComponents() ; } LLGLuint LLViewerTexture::getTexName() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getTexName() ; } @@ -821,124 +821,124 @@ BOOL LLViewerTexture::getBoundRecently() const LLTexUnit::eTextureType LLViewerTexture::getTarget(void) const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getTarget() ; } BOOL LLViewerTexture::setSubImage(const LLImageRaw* imageraw, S32 x_pos, S32 y_pos, S32 width, S32 height) { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->setSubImage(imageraw, x_pos, y_pos, width, height) ; } BOOL LLViewerTexture::setSubImage(const U8* datap, S32 data_width, S32 data_height, S32 x_pos, S32 y_pos, S32 width, S32 height) { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->setSubImage(datap, data_width, data_height, x_pos, y_pos, width, height) ; } void LLViewerTexture::setGLTextureCreated (bool initialized) { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; mGLTexturep->setGLTextureCreated (initialized) ; } void LLViewerTexture::setCategory(S32 category) { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; mGLTexturep->setCategory(category) ; } LLTexUnit::eTextureAddressMode LLViewerTexture::getAddressMode(void) const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getAddressMode() ; } S32 LLViewerTexture::getTextureMemory() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->mTextureMemory ; } LLGLenum LLViewerTexture::getPrimaryFormat() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getPrimaryFormat() ; } BOOL LLViewerTexture::getIsAlphaMask() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getIsAlphaMask() ; } BOOL LLViewerTexture::getMask(const LLVector2 &tc) { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getMask(tc) ; } F32 LLViewerTexture::getTimePassedSinceLastBound() { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getTimePassedSinceLastBound() ; } BOOL LLViewerTexture::getMissed() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getMissed() ; } BOOL LLViewerTexture::isJustBound() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->isJustBound() ; } void LLViewerTexture::forceUpdateBindStats(void) const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->forceUpdateBindStats() ; } U32 LLViewerTexture::getTexelsInAtlas() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getTexelsInAtlas() ; } U32 LLViewerTexture::getTexelsInGLTexture() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getTexelsInGLTexture() ; } BOOL LLViewerTexture::isGLTextureCreated() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->isGLTextureCreated() ; } S32 LLViewerTexture::getDiscardLevelInAtlas() const { - llassert_always(mGLTexturep.notNull()) ; + llassert(mGLTexturep.notNull()) ; return mGLTexturep->getDiscardLevelInAtlas() ; } @@ -974,12 +974,6 @@ void LLViewerTexture::updateBindStatsForTester() //start of LLViewerFetchedTexture //---------------------------------------------------------------------------------------------- -//static -F32 LLViewerFetchedTexture::maxDecodePriority() -{ - return 6000000.f; -} - LLViewerFetchedTexture::LLViewerFetchedTexture(const LLUUID& id, const LLHost& host, BOOL usemipmaps) : LLViewerTexture(id, usemipmaps), mTargetHost(host) @@ -1426,6 +1420,13 @@ void LLViewerFetchedTexture::processTextureStats() } } +const F32 MAX_PRIORITY_PIXEL = 999.f ; //pixel area +const F32 PRIORITY_BOOST_LEVEL_FACTOR = 1000.f ; //boost level +const F32 PRIORITY_DELTA_DISCARD_LEVEL_FACTOR = 100000.f ; //delta discard +const S32 MAX_DELTA_DISCARD_LEVEL_FOR_PRIORITY = 4 ; +const F32 PRIORITY_ADDITIONAL_FACTOR = 1000000.f ; //additional +const S32 MAX_ADDITIONAL_LEVEL_FOR_PRIORITY = 8 ; +const F32 PRIORITY_BOOST_HIGH_FACTOR = 10000000.f ;//boost high F32 LLViewerFetchedTexture::calcDecodePriority() { #ifndef LL_RELEASE_FOR_DOWNLOAD @@ -1453,7 +1454,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority() bool have_all_data = (cur_discard >= 0 && (cur_discard <= mDesiredDiscardLevel)); F32 pixel_priority = fsqrtf(mMaxVirtualSize); - F32 priority; + F32 priority = 0.f; if (mIsMissingAsset) { priority = 0.0f; @@ -1496,8 +1497,8 @@ F32 LLViewerFetchedTexture::calcDecodePriority() static const F64 log_2 = log(2.0); F32 desired = (F32)(log(32.0/pixel_priority) / log_2); S32 ddiscard = MAX_DISCARD_LEVEL - (S32)desired; - ddiscard = llclamp(ddiscard, 0, 4); - priority = (ddiscard+1)*100000.f; + ddiscard = llclamp(ddiscard, 0, MAX_DELTA_DISCARD_LEVEL_FOR_PRIORITY); + priority = (ddiscard + 1) * PRIORITY_DELTA_DISCARD_LEVEL_FACTOR; } else if ((mMinDiscardLevel > 0) && (cur_discard <= mMinDiscardLevel)) { @@ -1523,42 +1524,53 @@ F32 LLViewerFetchedTexture::calcDecodePriority() // We haven't rendered this in a while, de-prioritize it desired_discard += 2; } - //else - //{ - // // We haven't rendered this in the last half second, and we have a cached raw image, leave the desired discard as-is - // desired_discard = cur_discard; - //} + else + { + // We haven't rendered this in the last half second, and we have a cached raw image, leave the desired discard as-is + desired_discard = cur_discard; + } } S32 ddiscard = cur_discard - desired_discard; - ddiscard = llclamp(ddiscard, 0, 4); - priority = (ddiscard+1)*100000.f; + ddiscard = llclamp(ddiscard, 0, MAX_DELTA_DISCARD_LEVEL_FOR_PRIORITY); + priority = (ddiscard + 1) * PRIORITY_DELTA_DISCARD_LEVEL_FACTOR; } // Priority Formula: // BOOST_HIGH + ADDITIONAL PRI + DELTA DISCARD + BOOST LEVEL + PIXELS - // [10,000,000] + [1-9,000,000] + [1-400,000] + [1-20,000] + [0-999] + // [10,000,000] + [1,000,000-9,000,000] + [100,000-500,000] + [1-20,000] + [0-999] if (priority > 0.0f) { - pixel_priority = llclamp(pixel_priority, 0.0f, 999.f); + pixel_priority = llclamp(pixel_priority, 0.0f, MAX_PRIORITY_PIXEL); - priority = pixel_priority + 1000.f * mBoostLevel; + priority += pixel_priority + PRIORITY_BOOST_LEVEL_FACTOR * mBoostLevel; if ( mBoostLevel > BOOST_HIGH) { - priority += 10000000.f; + priority += PRIORITY_BOOST_HIGH_FACTOR; } if(mAdditionalDecodePriority > 0.0f) { - // 1-9 - S32 additional_priority = (S32)(1.0f + mAdditionalDecodePriority*8.0f + .5f); // round - // priority range += 0-9,000,000 - priority += 1000000.f * (F32)additional_priority; + // priority range += 1,000,000.f-9,000,000.f + priority += PRIORITY_ADDITIONAL_FACTOR * (1.0 + mAdditionalDecodePriority * MAX_ADDITIONAL_LEVEL_FOR_PRIORITY); } } return priority; } + +//static +F32 LLViewerFetchedTexture::maxDecodePriority() +{ + static const F32 max_priority = PRIORITY_BOOST_HIGH_FACTOR + //boost_high + PRIORITY_ADDITIONAL_FACTOR * (MAX_ADDITIONAL_LEVEL_FOR_PRIORITY + 1) + //additional (view dependent factors) + PRIORITY_DELTA_DISCARD_LEVEL_FACTOR * (MAX_DELTA_DISCARD_LEVEL_FOR_PRIORITY + 1) + //delta discard + PRIORITY_BOOST_LEVEL_FACTOR * (BOOST_MAX_LEVEL - 1) + //boost level + MAX_PRIORITY_PIXEL + 1.0f ; //pixel area. + + return max_priority ; +} + //============================================================================ void LLViewerFetchedTexture::setDecodePriority(F32 priority) @@ -2983,6 +2995,10 @@ void LLViewerMediaTexture::initVirtualSize() void LLViewerMediaTexture::addMediaToFace(LLFace* facep) { + if(facep) + { + facep->setHasMedia(true) ; + } if(!mIsPlaying) { return ; //no need to add the face because the media is not in playing. @@ -2993,14 +3009,16 @@ void LLViewerMediaTexture::addMediaToFace(LLFace* facep) void LLViewerMediaTexture::removeMediaFromFace(LLFace* facep) { - if(!mIsPlaying) - { - return ; //no need to remove the face because the media is not in playing. - } if(!facep) { return ; } + facep->setHasMedia(false) ; + + if(!mIsPlaying) + { + return ; //no need to remove the face because the media is not in playing. + } mIsPlaying = FALSE ; //set to remove the media from the face. switchTexture(facep) ; diff --git a/indra/newview/llviewervisualparam.h b/indra/newview/llviewervisualparam.h index 3550a46fbf..1a3975eb99 100644 --- a/indra/newview/llviewervisualparam.h +++ b/indra/newview/llviewervisualparam.h @@ -111,6 +111,7 @@ public: F32 getSimpleMax() const { return getInfo()->mSimpleMax; } BOOL getCrossWearable() const { return getInfo()->mCrossWearable; } + }; #endif // LL_LLViewerVisualParam_H diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 3f815314f0..c09f8e46b0 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -233,6 +233,7 @@ S32 gDebugRaycastFaceHit; BOOL gDisplayWindInfo = FALSE; BOOL gDisplayCameraPos = FALSE; BOOL gDisplayFOV = FALSE; +BOOL gDisplayBadge = FALSE; S32 CHAT_BAR_HEIGHT = 28; S32 OVERLAY_BAR_HEIGHT = 20; @@ -422,6 +423,11 @@ public: addText(xpos, ypos, llformat("FOV: %2.1f deg", RAD_TO_DEG * LLViewerCamera::getInstance()->getView())); ypos += y_inc; } + if (gDisplayBadge) + { + addText(xpos, ypos+(y_inc/2), llformat("Hippos!", RAD_TO_DEG * LLViewerCamera::getInstance()->getView())); + ypos += y_inc * 2; + } /*if (LLViewerJoystick::getInstance()->getOverrideCamera()) { @@ -1717,6 +1723,10 @@ void LLViewerWindow::shutdownViews() // *TODO: Make LLNavigationBar part of gViewerWindow delete LLNavigationBar::getInstance(); + // destroy menus after instantiating navbar above, as it needs + // access to gMenuHolder + cleanup_menus(); + // Delete all child views. delete mRootView; mRootView = NULL; @@ -2449,6 +2459,8 @@ void LLViewerWindow::updateUI() { static std::string last_handle_msg; + LLConsole::updateClass(); + // animate layout stacks so we have up to date rect for world view LLLayoutStack::updateClass(); diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index 98d2958d9a..bfce65f2ba 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -506,5 +506,6 @@ extern S32 CHAT_BAR_HEIGHT; extern BOOL gDisplayCameraPos; extern BOOL gDisplayWindInfo; extern BOOL gDisplayFOV; +extern BOOL gDisplayBadge; #endif diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 124851144a..265adb3e7f 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -1496,9 +1496,9 @@ BOOL LLVOAvatar::parseSkeletonFile(const std::string& filename) //------------------------------------------------------------------------- // parse the file //------------------------------------------------------------------------- - BOOL success = sSkeletonXMLTree.parseFile( filename, FALSE ); + BOOL parsesuccess = sSkeletonXMLTree.parseFile( filename, FALSE ); - if (!success) + if (!parsesuccess) { llerrs << "Can't parse skeleton file: " << filename << llendl; return FALSE; @@ -1509,11 +1509,13 @@ BOOL LLVOAvatar::parseSkeletonFile(const std::string& filename) if (!root) { llerrs << "No root node found in avatar skeleton file: " << filename << llendl; + return FALSE; } if( !root->hasName( "linden_skeleton" ) ) { llerrs << "Invalid avatar skeleton file header: " << filename << llendl; + return FALSE; } std::string version; @@ -1521,6 +1523,7 @@ BOOL LLVOAvatar::parseSkeletonFile(const std::string& filename) if( !root->getFastAttributeString( version_string, version ) || (version != "1.0") ) { llerrs << "Invalid avatar skeleton file version: " << version << " in file: " << filename << llendl; + return FALSE; } return TRUE; @@ -2196,13 +2199,16 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) // store off last frame's root position to be consistent with camera position LLVector3 root_pos_last = mRoot.getWorldPosition(); BOOL detailed_update = updateCharacter(agent); - BOOL voice_enabled = gVoiceClient->getVoiceEnabled( mID ) && gVoiceClient->inProximalChannel(); if (gNoRender) { return TRUE; } + static LLUICachedControl<bool> visualizers_in_calls("ShowVoiceVisualizersInCalls", false); + bool voice_enabled = (visualizers_in_calls || gVoiceClient->inProximalChannel()) && + gVoiceClient->getVoiceEnabled(mID); + idleUpdateVoiceVisualizer( voice_enabled ); idleUpdateMisc( detailed_update ); idleUpdateAppearanceAnimation(); @@ -2734,9 +2740,9 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) sNumVisibleChatBubbles++; new_name = TRUE; } - + idleUpdateNameTagColor(new_name, alpha); - + LLVector3 name_position = idleUpdateNameTagPosition(root_pos_last); mNameText->setPositionAgent(name_position); @@ -2973,10 +2979,10 @@ LLVector3 LLVOAvatar::idleUpdateNameTagPosition(const LLVector3& root_pos_last) (projected_vec(local_camera_at * root_rot, camera_to_av)); name_position += pixel_up_vec * 15.f; return name_position; -} + } void LLVOAvatar::idleUpdateNameTagColor(BOOL new_name, F32 alpha) -{ + { llassert(mNameText); bool is_friend = LLAvatarTracker::instance().isBuddy(getID()); @@ -3130,7 +3136,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent) if (!visible) { - //updateMotions(LLCharacter::HIDDEN_UPDATE); + updateMotions(LLCharacter::HIDDEN_UPDATE); return FALSE; } @@ -4099,6 +4105,7 @@ void LLVOAvatar::updateTextures() // Spam if this is a baked texture, not set to default image, without valid host info if (isIndexBakedTexture((ETextureIndex)texture_index) && imagep->getID() != IMG_DEFAULT_AVATAR + && imagep->getID() != IMG_INVISIBLE && !imagep->getTargetHost().isOk()) { LL_WARNS_ONCE("Texture") << "LLVOAvatar::updateTextures No host for texture " diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 5cc4aaa52e..cf3f40979b 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -567,7 +567,7 @@ public: void updateMeshData(); protected: void releaseMeshData(); - /*virtual*/ void restoreMeshData(); + virtual void restoreMeshData(); private: BOOL mDirtyMesh; BOOL mMeshTexturesDirty; diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index ecd6b05ded..00998b300a 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -510,8 +510,12 @@ BOOL LLVOAvatarSelf::buildMenus() LLVOAvatarSelf::~LLVOAvatarSelf() { - gAgent.setAvatarObject(NULL); - gAgentWearables.setAvatarObject(NULL); + // gAgents pointer might have been set to a different Avatar Self, don't get rid of it if so. + if (gAgent.getAvatarObject() == this) + { + gAgent.setAvatarObject(NULL); + gAgentWearables.setAvatarObject(NULL); + } delete mScreenp; mScreenp = NULL; } @@ -928,6 +932,13 @@ void LLVOAvatarSelf::wearableUpdated( EWearableType type, BOOL upload_result ) { const LLVOAvatarDictionary::BakedEntry *baked_dict = baked_iter->second; const LLVOAvatarDefines::EBakedTextureIndex index = baked_iter->first; + + // if we're editing our appearance, ensure that we're not using baked textures + // The baked texture for alpha masks is set explicitly when you hit "save" + if (gAgent.cameraCustomizeAvatar()) + { + setNewBakedTexture(index,IMG_DEFAULT_AVATAR); + } if (baked_dict) { for (LLVOAvatarDefines::wearables_vec_t::const_iterator type_iter = baked_dict->mWearables.begin(); @@ -1966,6 +1977,7 @@ void LLVOAvatarSelf::forceBakeAllTextures(bool slam_for_debug) // Don't know if this is needed updateMeshTextures(); + } //----------------------------------------------------------------------------- diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index bb09a18cc3..dfd67d0c38 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -122,7 +122,8 @@ LLVoiceChannel::LLVoiceChannel(const LLUUID& session_id, const std::string& sess mState(STATE_NO_CHANNEL_INFO), mSessionName(session_name), mCallDirection(OUTGOING_CALL), - mIgnoreNextSessionLeave(FALSE) + mIgnoreNextSessionLeave(FALSE), + mCallEndedByAgent(false) { mNotifyArgs["VOICE_CHANNEL_NAME"] = mSessionName; @@ -412,7 +413,7 @@ void LLVoiceChannel::doSetState(const EState& new_state) EState old_state = mState; mState = new_state; if (!mStateChangedCallback.empty()) - mStateChangedCallback(old_state, mState, mCallDirection); + mStateChangedCallback(old_state, mState, mCallDirection, mCallEndedByAgent); } //static @@ -779,7 +780,8 @@ void LLVoiceChannelP2P::handleStatusChange(EStatusType type) } else { - // other user hung up + // other user hung up, so we didn't end the call + mCallEndedByAgent = false; } deactivate(); } @@ -810,6 +812,9 @@ void LLVoiceChannelP2P::activate() { if (callStarted()) return; + //call will be counted as ended by user unless this variable is changed in handleStatusChange() + mCallEndedByAgent = true; + LLVoiceChannel::activate(); if (callStarted()) diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h index cb86671305..941cccacc3 100644 --- a/indra/newview/llvoicechannel.h +++ b/indra/newview/llvoicechannel.h @@ -58,7 +58,7 @@ public: OUTGOING_CALL } EDirection; - typedef boost::signals2::signal<void(const EState& old_state, const EState& new_state, const EDirection& direction)> state_changed_signal_t; + typedef boost::signals2::signal<void(const EState& old_state, const EState& new_state, const EDirection& direction, bool ended_by_agent)> state_changed_signal_t; // on current channel changed signal typedef boost::function<void(const LLUUID& session_id)> channel_changed_callback_t; @@ -122,6 +122,8 @@ protected: std::string mSessionName; LLSD mNotifyArgs; LLSD mCallDialogPayload; + // true if call was ended by agent + bool mCallEndedByAgent; BOOL mIgnoreNextSessionLeave; LLHandle<LLPanel> mLoginNotificationHandle; diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 13735071af..b57e33fd08 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -1107,16 +1107,17 @@ public: * Sets internal voluem level for specified user. * * @param[in] speaker_id - LLUUID of user to store volume level for - * @param[in] volume - internal volume level to be stored for user. + * @param[in] volume - external (vivox) volume level to be stored for user. */ - void storeSpeakerVolume(const LLUUID& speaker_id, S32 volume); + void storeSpeakerVolume(const LLUUID& speaker_id, F32 volume); /** - * Gets stored internal volume level for specified speaker. + * Gets stored external (vivox) volume level for specified speaker and + * transforms it into internal (viewer) level. * * If specified user is not found default level will be returned. It is equivalent of * external level 0.5 from the 0.0..1.0 range. - * Default internal level is calculated as: internal = 400 * external^2 + * Internal level is calculated as: internal = 400 * external^2 * Maps 0.0 to 1.0 to internal values 0-400 with default 0.5 == 100 * * @param[in] speaker_id - LLUUID of user to get his volume level @@ -1133,7 +1134,7 @@ private: void load(); void save(); - typedef std::map<LLUUID, S32> speaker_data_map_t; + typedef std::map<LLUUID, F32> speaker_data_map_t; speaker_data_map_t mSpeakersData; }; @@ -1149,7 +1150,7 @@ LLSpeakerVolumeStorage::~LLSpeakerVolumeStorage() save(); } -void LLSpeakerVolumeStorage::storeSpeakerVolume(const LLUUID& speaker_id, S32 volume) +void LLSpeakerVolumeStorage::storeSpeakerVolume(const LLUUID& speaker_id, F32 volume) { mSpeakersData[speaker_id] = volume; } @@ -1163,7 +1164,10 @@ S32 LLSpeakerVolumeStorage::getSpeakerVolume(const LLUUID& speaker_id) if (it != mSpeakersData.end()) { - ret_val = it->second; + F32 f_val = it->second; + // volume can amplify by as much as 4x! + S32 ivol = (S32)(400.f * f_val * f_val); + ret_val = llclamp(ivol, 0, 400); } return ret_val; } @@ -1184,7 +1188,7 @@ void LLSpeakerVolumeStorage::load() for (LLSD::map_const_iterator iter = settings_llsd.beginMap(); iter != settings_llsd.endMap(); ++iter) { - mSpeakersData.insert(std::make_pair(LLUUID(iter->first), (S32)iter->second.asInteger())); + mSpeakersData.insert(std::make_pair(LLUUID(iter->first), (F32)iter->second.asReal())); } } @@ -6288,14 +6292,14 @@ void LLVoiceClient::setUserVolume(const LLUUID& id, F32 volume) participantState *participant = findParticipantByID(id); if (participant) { + // store this volume setting for future sessions + LLSpeakerVolumeStorage::getInstance()->storeSpeakerVolume(id, volume); + // volume can amplify by as much as 4x! S32 ivol = (S32)(400.f * volume * volume); participant->mUserVolume = llclamp(ivol, 0, 400); participant->mVolumeDirty = TRUE; mAudioSession->mVolumeDirty = TRUE; - - // store this volume setting for future sessions - LLSpeakerVolumeStorage::getInstance()->storeSpeakerVolume(id, participant->mUserVolume); } } } diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index d093031bea..acfbc23f62 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -625,7 +625,9 @@ void LLWearable::writeToAvatar() // Pull params for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() ) { - if( (((LLViewerVisualParam*)param)->getWearableType() == mType) ) + // cross-wearable parameters are not authoritative, as they are driven by a different wearable. So don't copy the values to the + // avatar object if cross wearable. Cross wearable params get their values from the avatar, they shouldn't write the other way. + if( (((LLViewerVisualParam*)param)->getWearableType() == mType) && (!((LLViewerVisualParam*)param)->getCrossWearable()) ) { S32 param_id = param->getID(); F32 weight = getVisualParamWeight(param_id); @@ -1085,6 +1087,26 @@ void LLWearable::destroyTextures() mSavedTEMap.clear(); } +void LLWearable::pullCrossWearableValues() +{ + // scan through all of the avatar's visual parameters + LLVOAvatar* avatar = gAgent.getAvatarObject(); + for (LLViewerVisualParam* param = (LLViewerVisualParam*) avatar->getFirstVisualParam(); + param; + param = (LLViewerVisualParam*) avatar->getNextVisualParam()) + { + if( param ) + { + LLDriverParam *driver_param = dynamic_cast<LLDriverParam*>(param); + if(driver_param) + { + // parameter is a driver parameter, have it update its + driver_param->updateCrossDrivenParams(getType()); + } + } + } +} + void LLWearable::setLabelUpdated() const { diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h index dae983bcf3..7bd5305079 100644 --- a/indra/newview/llwearable.h +++ b/indra/newview/llwearable.h @@ -128,6 +128,7 @@ public: void revertValues(); void saveValues(); + void pullCrossWearableValues(); BOOL isOnTop() const; @@ -145,7 +146,7 @@ private: void createLayers(S32 te); void createVisualParams(); void syncImages(te_map_t &src, te_map_t &dst); - void destroyTextures(); + void destroyTextures(); static S32 sCurrentDefinitionVersion; // Depends on the current state of the avatar_lad.xml. S32 mDefinitionVersion; // Depends on the state of the avatar_lad.xml when this asset was created. diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index 7866f735c5..100ec0bb69 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -145,11 +145,20 @@ std::string LLWeb::expandURLSubstitutions(const std::string &url, substitution["VERSION_PATCH"] = LLVersionInfo::getPatch(); substitution["VERSION_BUILD"] = LLVersionInfo::getBuild(); substitution["CHANNEL"] = LLVersionInfo::getChannel(); - substitution["LANGUAGE"] = LLUI::getLanguage(); substitution["GRID"] = LLViewerLogin::getInstance()->getGridLabel(); substitution["OS"] = LLAppViewer::instance()->getOSInfo().getOSStringSimple(); substitution["SESSION_ID"] = gAgent.getSessionID(); + // work out the current language + std::string lang = LLUI::getLanguage(); + if (lang == "en-us") + { + // *HACK: the correct fix is to change English.lproj/language.txt, + // but we're late in the release cycle and this is a less risky fix + lang = "en"; + } + substitution["LANGUAGE"] = lang; + // find the region ID LLUUID region_id; LLViewerRegion *region = gAgent.getRegion(); @@ -159,14 +168,14 @@ std::string LLWeb::expandURLSubstitutions(const std::string &url, } substitution["REGION_ID"] = region_id; - // find the parcel ID - LLUUID parcel_id; + // find the parcel local ID + S32 parcel_id = 0; LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); if (parcel) { - parcel_id = parcel->getID(); + parcel_id = parcel->getLocalID(); } - substitution["PARCEL_ID"] = parcel_id; + substitution["PARCEL_ID"] = llformat("%d", parcel_id); // expand all of the substitution strings and escape the url std::string expanded_url = url; diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 1940d65ae4..5edf72d4ae 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -128,10 +128,10 @@ void LLWorldMapView::initClass() sHomeImage = LLUI::getUIImage("map_home.tga"); sTelehubImage = LLUI::getUIImage("map_telehub.tga"); sInfohubImage = LLUI::getUIImage("map_infohub.tga"); - sEventImage = LLUI::getUIImage("map_event.tga"); - sEventMatureImage = LLUI::getUIImage("map_event_mature.tga"); + sEventImage = LLUI::getUIImage("Parcel_PG_Dark"); + sEventMatureImage = LLUI::getUIImage("Parcel_M_Dark"); // To Do: update the image resource for adult events. - sEventAdultImage = LLUI::getUIImage("map_event_adult.tga"); + sEventAdultImage = LLUI::getUIImage("Parcel_R_Dark"); sTrackCircleImage = LLUI::getUIImage("map_track_16.tga"); sTrackArrowImage = LLUI::getUIImage("direction_arrow.tga"); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 4f4fc83819..dd9634a234 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -1355,6 +1355,7 @@ void LLPipeline::updateMoveNormalAsync(LLDrawable* drawablep) if (!drawablep) { llerrs << "updateMove called with NULL drawablep" << llendl; + return; } if (drawablep->isState(LLDrawable::EARLY_MOVE)) { @@ -1970,7 +1971,7 @@ void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera) if (root && root->getParent() && root->getVObj() && root->getVObj()->isAttachment()) { LLVOAvatar* av = root->getParent()->getVObj()->asAvatar(); - if (av->isImpostor()) + if (av && av->isImpostor()) { return; } diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index cbc69f5c04..93dafcf2c1 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -293,7 +293,7 @@ reference="Black" /> <color name="ContextSilhouetteColor" - value="0.94 0.61 0 1" /> + reference="EmphasisColor" /> <color name="DefaultHighlightDark" reference="White_10" /> @@ -557,7 +557,7 @@ reference="White" /> <color name="ObjectChatColor" - reference="EmphasisColor_35" /> + reference="EmphasisColor" /> <color name="OverdrivenColor" reference="Red" /> @@ -605,7 +605,7 @@ value="0.39 0.39 0.39 1" /> <color name="ScriptErrorColor" - value="Red" /> + reference="Red" /> <color name="ScrollBGStripeColor" reference="Transparent" /> diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png b/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png Binary files differindex 6343ddf035..e8fe243dc7 100644 --- a/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png +++ b/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png diff --git a/indra/newview/skins/default/textures/icons/object_icon.png b/indra/newview/skins/default/textures/icons/object_icon.png Binary files differnew file mode 100644 index 0000000000..223874e631 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/object_icon.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index ea66897b35..18d1779702 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -143,12 +143,12 @@ with the same filename but different name <texture name="DownArrow" file_name="bottomtray/DownArrow.png" preload="false" /> - <texture name="DropDown_Disabled" file_name="widgets/DropDown_Disabled.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> - <texture name="DropDown_Over" file_name="widgets/DropDown_Over.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> - <texture name="DropDown_Press" file_name="widgets/DropDown_Press.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> - <texture name="DropDown_Selected" file_name="widgets/DropDown_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> - <texture name="DropDown_On" file_name="widgets/DropDown_On.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> - <texture name="DropDown_Off" file_name="widgets/DropDown_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> + <texture name="DropDown_Disabled" file_name="widgets/DropDown_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> + <texture name="DropDown_Over" file_name="widgets/DropDown_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> + <texture name="DropDown_Press" file_name="widgets/DropDown_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> + <texture name="DropDown_Selected" file_name="widgets/DropDown_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> + <texture name="DropDown_On" file_name="widgets/DropDown_On.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> + <texture name="DropDown_Off" file_name="widgets/DropDown_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> <texture name="DropTarget" file_name="widgets/DropTarget.png" preload="false" /> @@ -265,8 +265,8 @@ with the same filename but different name <texture name="Linden_Dollar_Alert" file_name="widgets/Linden_Dollar_Alert.png"/> <texture name="Linden_Dollar_Background" file_name="widgets/Linden_Dollar_Background.png"/> - <texture name="ListItem_Select" file_name="widgets/ListItem_Select.png" preload="true" /> - <texture name="ListItem_Over" file_name="widgets/ListItem_Over.png" preload="true" /> + <texture name="ListItem_Select" file_name="widgets/ListItem_Select.png" preload="true" scale.left="2" scale.bottom="2" scale.top="22" scale.right="278" /> + <texture name="ListItem_Over" file_name="widgets/ListItem_Over.png" preload="true" scale.left="2" scale.bottom="2" scale.top="22" scale.right="278" /> <texture name="Lock" file_name="icons/Lock.png" preload="false" /> <texture name="Lock2" file_name="navbar/Lock.png" preload="false" /> @@ -368,7 +368,7 @@ with the same filename but different name <texture name="Parcel_Build_Dark" file_name="icons/Parcel_Build_Dark.png" preload="false" /> <texture name="Parcel_BuildNo_Dark" file_name="icons/Parcel_BuildNo_Dark.png" preload="false" /> - <texture name="Parcel_Damage_Dark" file_name="icons/Parcel_Health_Dark.png" preload="false" /> + <texture name="Parcel_Damage_Dark" file_name="icons/Parcel_Damage_Dark.png" preload="false" /> <texture name="Parcel_DamageNo_Dark" file_name="icons/Parcel_DamageNo_Dark.png" preload="false" /> <texture name="Parcel_Evry_Dark" file_name="icons/Parcel_Evry_Dark.png" preload="false" /> <texture name="Parcel_Exp_Dark" file_name="icons/Parcel_Exp_Dark.png" preload="false" /> @@ -376,6 +376,7 @@ with the same filename but different name <texture name="Parcel_FlyNo_Dark" file_name="icons/Parcel_FlyNo_Dark.png" preload="false" /> <texture name="Parcel_ForSale_Dark" file_name="icons/Parcel_ForSale_Dark.png" preload="false" /> <texture name="Parcel_ForSaleNo_Dark" file_name="icons/Parcel_ForSaleNo_Dark.png" preload="false" /> + <texture name="Parcel_Health_Dark" file_name="icons/Parcel_Health_Dark.png" preload="false" /> <texture name="Parcel_M_Dark" file_name="icons/Parcel_M_Dark.png" preload="false" /> <texture name="Parcel_PG_Dark" file_name="icons/Parcel_PG_Dark.png" preload="false" /> <texture name="Parcel_Push_Dark" file_name="icons/Parcel_Push_Dark.png" preload="false" /> @@ -514,6 +515,7 @@ with the same filename but different name <texture name="SliderThumb_Press" file_name="widgets/SliderThumb_Press.png" /> <texture name="SL_Logo" file_name="icons/SL_Logo.png" preload="true" /> + <texture name="OBJECT_Icon" file_name="icons/object_icon.png" preload="true" /> <texture name="Snapshot_Off" file_name="bottomtray/Snapshot_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="Snapshot_Over" file_name="bottomtray/Snapshot_Over.png" preload="false" /> diff --git a/indra/newview/skins/default/textures/world/BeaconArrow.png b/indra/newview/skins/default/textures/world/BeaconArrow.png Binary files differindex 12dc246d51..54934f738a 100644 --- a/indra/newview/skins/default/textures/world/BeaconArrow.png +++ b/indra/newview/skins/default/textures/world/BeaconArrow.png diff --git a/indra/newview/skins/default/xui/da/floater_about_land.xml b/indra/newview/skins/default/xui/da/floater_about_land.xml index cb5d618dde..b4af427538 100644 --- a/indra/newview/skins/default/xui/da/floater_about_land.xml +++ b/indra/newview/skins/default/xui/da/floater_about_land.xml @@ -1,7 +1,59 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floaterland" title="OM LAND"> + <floater.string name="Minutes"> + [MINUTES] minutter + </floater.string> + <floater.string name="Minute"> + minut + </floater.string> + <floater.string name="Seconds"> + [SECONDS] sekunder + </floater.string> + <floater.string name="Remaining"> + mangler + </floater.string> <tab_container name="landtab"> - <panel label="Generelt" name="land_general_panel"> + <panel label="GENERELT" name="land_general_panel"> + <panel.string name="new users only"> + Kun nye brugere + </panel.string> + <panel.string name="anyone"> + Alle + </panel.string> + <panel.string name="area_text"> + Størrelse + </panel.string> + <panel.string name="area_size_text"> + [AREA] m² + </panel.string> + <panel.string name="auction_id_text"> + Auktion nr: [ID] + </panel.string> + <panel.string name="need_tier_to_modify"> + Du skal godkende dit køb for at kunne æmdre på dette land. + </panel.string> + <panel.string name="group_owned_text"> + (Gruppe ejet) + </panel.string> + <panel.string name="profile_text"> + Profil... + </panel.string> + <panel.string name="info_text"> + Info... + </panel.string> + <panel.string name="public_text"> + (offentlig) + </panel.string> + <panel.string name="none_text"> + (ingen) + </panel.string> + <panel.string name="sale_pending_text"> + (Salg i gang) + </panel.string> + <panel.string name="no_selection_text"> + Pacel ikke valgt. +Gå til 'Verden' > 'Om land' eller vælg en anden parcel for at se detaljer. + </panel.string> <text name="Name:"> Navn: </text> @@ -26,7 +78,6 @@ <text name="OwnerText"> Leyla Linden </text> - <button label="Profil..." label_selected="Profil..." name="Profile..."/> <text name="Group:"> Gruppe: </text> @@ -78,54 +129,23 @@ <button label="Efterlad land..." label_selected="Efterlad land..." name="Abandon Land..."/> <button label="Kræv tilbage..." label_selected="Kræv tilbage..." name="Reclaim Land..."/> <button label="Linden salg..." label_selected="Linden salg..." name="Linden Sale..." tool_tip="Land skal være ejet, indholdsrating sat og ikke allerede på auktion."/> - <panel.string name="new users only"> - Kun nye brugere - </panel.string> - <panel.string name="anyone"> - Alle - </panel.string> - <panel.string name="area_text"> - Størrelse - </panel.string> - <panel.string name="area_size_text"> - [AREA] m² - </panel.string> - <panel.string name="auction_id_text"> - Auktion nr: [ID] - </panel.string> - <panel.string name="need_tier_to_modify"> - Du skal godkende dit køb for at kunne æmdre på dette land. - </panel.string> - <panel.string name="group_owned_text"> - (Gruppe ejet) - </panel.string> - <panel.string name="profile_text"> - Profil... - </panel.string> - <panel.string name="info_text"> - Info... - </panel.string> - <panel.string name="public_text"> - (offentlig) + </panel> + <panel label="REGLER" name="land_covenant_panel"> + <panel.string name="can_resell"> + Købt land i denne region må sælges videre </panel.string> - <panel.string name="none_text"> - (ingen) + <panel.string name="can_not_resell"> + Købt land i denne region må ikke sælges videre </panel.string> - <panel.string name="sale_pending_text"> - (Salg i gang) + <panel.string name="can_change"> + Købt jord i denne region må gerne samles eller opdeles. </panel.string> - <panel.string name="no_selection_text"> - Pacel ikke valgt. -Gå til 'Verden' > 'Om land' eller vælg en anden parcel for at se detaljer. + <panel.string name="can_not_change"> + Købt jord i denne region må íkke samles eller opdeles. </panel.string> - </panel> - <panel label="Regler" name="land_covenant_panel"> <text name="estate_section_lbl"> Estate: </text> - <text name="estate_name_lbl"> - Navn: - </text> <text name="estate_name_text"> Hovedland </text> @@ -144,9 +164,6 @@ Gå til 'Verden' > 'Om land' eller vælg en anden parcel <text name="region_section_lbl"> Region: </text> - <text name="region_name_lbl"> - Navn: - </text> <text name="region_name_text"> leyla </text> @@ -174,35 +191,23 @@ Gå til 'Verden' > 'Om land' eller vælg en anden parcel <text name="changeable_clause"> Land i denne region må ikke samles/opdeles. </text> - <panel.string name="can_resell"> - Købt land i denne region må sælges videre - </panel.string> - <panel.string name="can_not_resell"> - Købt land i denne region må ikke sælges videre - </panel.string> - <panel.string name="can_change"> - Købt jord i denne region må gerne samles eller opdeles. + </panel> + <panel label="OBJEKTER" name="land_objects_panel"> + <panel.string name="objects_available_text"> + [COUNT] ud af [MAX] ([AVAILABLE] ledige) </panel.string> - <panel.string name="can_not_change"> - Købt jord i denne region må íkke samles eller opdeles. + <panel.string name="objects_deleted_text"> + [COUNT] ud af [MAX] ([DELETED] bliver slettet) </panel.string> - </panel> - <panel label="Objekter" name="land_objects_panel"> <text name="parcel_object_bonus"> Region objekt bonus faktor: [BONUS] </text> <text name="Simulator primitive usage:"> - Prims brugt i denne Sim: + Prim forbrug: </text> <text name="objects_available"> [COUNT] ud af [MAX] ([AVAILABLE] ledige) </text> - <panel.string name="objects_available_text"> - [COUNT] ud af [MAX] ([AVAILABLE] ledige) - </panel.string> - <panel.string name="objects_deleted_text"> - [COUNT] ud af [MAX] ([DELETED] bliver slettet) - </panel.string> <text name="Primitives parcel supports:"> Prims til rådighed: </text> @@ -251,33 +256,63 @@ Gå til 'Verden' > 'Om land' eller vælg en anden parcel <text name="Object Owners:"> Objekt ejere: </text> - <button label="Gentegn liste" label_selected="Gentegn liste" name="Refresh List"/> + <button label="Gentegn liste" label_selected="Gentegn liste" name="Refresh List" tool_tip="Refresh Object List"/> <button label="Returnér objekter..." label_selected="Returnér objekter..." name="Return objects..."/> <name_list name="owner list"> - <column label="Type" name="type"/> - <column label="Navn" name="name"/> - <column label="Antal" name="count"/> - <column label="Nyeste" name="mostrecent"/> + <name_list.columns label="Type" name="type"/> + <name_list.columns label="Navn" name="name"/> + <name_list.columns label="Antal" name="count"/> + <name_list.columns label="Nyeste" name="mostrecent"/> </name_list> </panel> - <panel label="Indstillinger" name="land_options_panel"> + <panel label="INDSTILLINGER" name="land_options_panel"> + <panel.string name="search_enabled_tooltip"> + Lad beboere se denne parcel i søgeresultater + </panel.string> + <panel.string name="search_disabled_small_tooltip"> + Denne mulighed er ikke til stede da parcellens område er 128 m² eller mindre. +Kun større parceller kan vises i søgning. + </panel.string> + <panel.string name="search_disabled_permissions_tooltip"> + Dette valg er lukket da du ikke kan ændre på denne parcels opsætning. + </panel.string> + <panel.string name="mature_check_mature"> + Mature indhold + </panel.string> + <panel.string name="mature_check_adult"> + Adult indhold + </panel.string> + <panel.string name="mature_check_mature_tooltip"> + Din parcel information eller indhold anses for at være 'adult'. + </panel.string> + <panel.string name="mature_check_adult_tooltip"> + Din parcel information eller indhold anses for at være 'adult'. + </panel.string> + <panel.string name="landing_point_none"> + (ingen) + </panel.string> + <panel.string name="push_restrict_text"> + Skub forbudt + </panel.string> + <panel.string name="push_restrict_region_text"> + Skub forbudt (Uanset region indstilling) + </panel.string> <text name="allow_label"> Tillad andre beboere at: </text> <check_box label="Redigere terræn" name="edit land check" tool_tip="Hvis dette er valg, kan enhver redigere dit land. Det er bedst ikke at vælge her, da det altid er muligt for dig som ejer at ændre terræn på dit eget land."/> - <check_box label="Lave landemærker" name="check landmark"/> <check_box label="Flyve" name="check fly" tool_tip="Hvis valgt, kan beboere flyve på dit land. Hvis ikke valgt kan beboere kun flyve ind på dit land og over dit land."/> - <text name="allow_label2" left="194"> + <text left="194" name="allow_label2"> Lave objekter: </text> <check_box label="Alle beboere" name="edit objects check"/> <check_box label="Gruppe" name="edit group objects check"/> - <text name="allow_label3" left="170"> + <text left="170" name="allow_label3"> Anbringe objekter: </text> <check_box label="Alle beboere" name="all object entry check"/> <check_box label="Gruppe" name="group object entry check"/> - <text name="allow_label4" left="200"> + <text left="200" name="allow_label4"> Køre scripts: </text> <check_box label="Alle beboere" name="check other scripts"/> @@ -287,73 +322,37 @@ Gå til 'Verden' > 'Om land' eller vælg en anden parcel </text> <check_box label="Sikker (ingen skade)" name="check safe" tool_tip="Hvis valgt, er det ikke muligt at forårsage skade på andre beboere. Hvis fravalgt er det muligt at få skader (f.eks. ved kamp)."/> <check_box label="Skub forbudt" name="PushRestrictCheck" tool_tip="Forhindrer scripts i at skubbe. Valg af denne mulighed, kan være nyttigt for at forhindre forstyrrende adfærd på dit land."/> - <check_box label="Vis sted i søgning (L$30/uge) i kategorien:" name="ShowDirectoryCheck" tool_tip="Lad dit parcel blive vist i søge resultaterne"/> - <panel.string name="search_enabled_tooltip"> - Lad beboere se denne parcel i søgeresultater - </panel.string> - <panel.string name="search_disabled_small_tooltip"> - Denne mulighed er ikke til stede da parcellens område er 128 m² eller mindre. -Kun større parceller kan vises i søgning. - </panel.string> - <panel.string name="search_disabled_permissions_tooltip"> - Dette valg er lukket da du ikke kan ændre på denne parcels opsætning. - </panel.string> + <check_box label="Vis sted i søgning (L$30/uge)" name="ShowDirectoryCheck" tool_tip="Lad dit parcel blive vist i søge resultaterne"/> <combo_box name="land category with adult"> - <combo_box.item name="item0" label="Enhver kategori" - /> - <combo_box.item name="item1" label="Linden sted" - /> - <combo_box.item name="item2" label="Adult" - /> - <combo_box.item name="item3" label="Kunst & kultur" - /> - <combo_box.item name="item4" label="Business" - /> - <combo_box.item name="item5" label="Uddannelse" - /> - <combo_box.item name="item6" label="Spil" - /> - <combo_box.item name="item7" label="Afslapning" - /> - <combo_box.item name="item8" label="Nybegynder venligt" - /> - <combo_box.item name="item9" label="Parker & natur" - /> - <combo_box.item name="item10" label="Beboelse" - /> - <combo_box.item name="item11" label="Indkøb" - /> - <combo_box.item name="item12" label="Andet" - /> + <combo_box.item label="Enhver kategori" name="item0"/> + <combo_box.item label="Linden sted" name="item1"/> + <combo_box.item label="Adult" name="item2"/> + <combo_box.item label="Kunst & kultur" name="item3"/> + <combo_box.item label="Business" name="item4"/> + <combo_box.item label="Uddannelse" name="item5"/> + <combo_box.item label="Spil" name="item6"/> + <combo_box.item label="Afslapning" name="item7"/> + <combo_box.item label="Nybegynder venligt" name="item8"/> + <combo_box.item label="Parker & natur" name="item9"/> + <combo_box.item label="Beboelse" name="item10"/> + <combo_box.item label="Indkøb" name="item11"/> + <combo_box.item label="Andet" name="item12"/> </combo_box> <combo_box name="land category"> - <combo_box.item name="item0" label="Enhver kategori" /> - <combo_box.item name="item1" label="Linden sted" /> - <combo_box.item name="item3" label="Kunst & kultur" /> - <combo_box.item name="item4" label="Business" /> - <combo_box.item name="item5" label="Uddannelse" /> - <combo_box.item name="item6" label="Spil" /> - <combo_box.item name="item7" label="Afslapning" /> - <combo_box.item name="item8" label="Nybegynder venligt" /> - <combo_box.item name="item9" label="Parker & natur" /> - <combo_box.item name="item10" label="Beboelse" /> - <combo_box.item name="item11" label="Indkøb" /> - <combo_box.item name="item12" label="Andet" /> + <combo_box.item label="Enhver kategori" name="item0"/> + <combo_box.item label="Linden sted" name="item1"/> + <combo_box.item label="Kunst & kultur" name="item3"/> + <combo_box.item label="Business" name="item4"/> + <combo_box.item label="Uddannelse" name="item5"/> + <combo_box.item label="Spil" name="item6"/> + <combo_box.item label="Afslapning" name="item7"/> + <combo_box.item label="Nybegynder venligt" name="item8"/> + <combo_box.item label="Parker & natur" name="item9"/> + <combo_box.item label="Beboelse" name="item10"/> + <combo_box.item label="Indkøb" name="item11"/> + <combo_box.item label="Andet" name="item12"/> </combo_box> - <button label="?" label_selected="?" name="?"/> <check_box label="Mature indhold" name="MatureCheck" tool_tip=""/> - <panel.string name="mature_check_mature"> - Mature indhold - </panel.string> - <panel.string name="mature_check_adult"> - Adult indhold - </panel.string> - <panel.string name="mature_check_mature_tooltip"> - Din parcel information eller indhold anses for at være 'adult'. - </panel.string> - <panel.string name="mature_check_adult_tooltip"> - Din parcel information eller indhold anses for at være 'adult'. - </panel.string> <text name="Snapshot:"> Foto: </text> @@ -361,40 +360,35 @@ Kun større parceller kan vises i søgning. <text name="landing_point"> Landingspunkt: [LANDING] </text> - <panel.string name="landing_point_none"> - (ingen) - </panel.string> <button label="Vælg" label_selected="Vælg" name="Set" tool_tip="Indstiller landingspunkt, hvor de besøgende ankommer. Sættes til din avatars aktuelle placering i denne parcel."/> <button label="Fjern" label_selected="Fjern" name="Clear" tool_tip="Fjerner oplysning om landingspunkt."/> <text name="Teleport Routing: "> Teleport valg: </text> <combo_box name="landing type" tool_tip="Vælg hvordan du vil håndtere teleporteringer til dit land."> - <combo_box.item name="Blocked" label="Blokeret" /> - <combo_box.item name="LandingPoint" label="Landingspunkt" /> - <combo_box.item name="Anywhere" label="Hvor som helst" /> + <combo_box.item label="Blokeret" name="Blocked"/> + <combo_box.item label="Landingspunkt" name="LandingPoint"/> + <combo_box.item label="Hvor som helst" name="Anywhere"/> </combo_box> - <panel.string name="push_restrict_text"> - Skub forbudt - </panel.string> - <panel.string name="push_restrict_region_text"> - Skub forbudt (Uanset region indstilling) - </panel.string> </panel> - <panel label="Medier" name="land_media_panel"> - <text name="with media:" left="4"> + <panel label="MEDIA" name="land_media_panel"> + <text left="4" name="with media:"> Medie type: </text> <combo_box name="media type" tool_tip="Specificer om URL-adressen er til en film, hjemmeside eller et andet medie."/> - <text name="at URL:" left="4"> + <text left="4" name="at URL:"> Medie URL: </text> <button label="Vælg..." label_selected="Vælg..." name="set_media_url"/> - <text name="Description:" left="4"> + <text name="CurrentURL:"> + Nuværende side: + </text> + <check_box label="Skjul medie URL" name="hide_media_url" tool_tip="Klik her for at skjule medie adressen så det kun er dig og evt. parcel gruppens ejer/administratorer der kan se den."/> + <text left="4" name="Description:"> Beskrivelse: </text> <line_editor name="url_description" tool_tip="Tekst vist ved siden af Afspil/Hent knappen"/> - <text name="Media texture:" left="4"> + <text left="4" name="Media texture:"> Erstat tekstur: </text> <texture_picker label="" name="media texture" tool_tip="Klik for at vælge billede"/> @@ -402,13 +396,7 @@ Kun større parceller kan vises i søgning. (Objekter der har denne tekstur vil vise filmen eller web-siden, efter du klikker på play knappen.) </text> - <text name="Options:"> - Medie valg: - </text> <check_box label="Auto skalér" name="media_auto_scale" tool_tip="Vælg denne mulighed for at skalere indholdet for dette parcel automatisk. Det kan være lidt langsommere og have lavere kvalitet, men ingen anden tekstur skalering eller tilpasning vil være nødvendigt."/> - <check_box label="Gentag afspil" name="media_loop" tool_tip="Gentager automatisk medie, når det er færdigt med at spille starter det automatisk forfra."/> - <check_box label="Skjul medie URL" name="hide_media_url" tool_tip="Klik her for at skjule medie adressen så det kun er dig og evt. parcel gruppens ejer/administratorer der kan se den."/> - <check_box label="Skjul musik URL" name="hide_music_url" tool_tip="Klik her for at skjule musik adressen så det kun er dig og evt. parcel gruppens ejer/administratorer der kan se den."/> <text name="media_size" tool_tip="Størrelse for rendering af Web medie, benyt 0 for standard." width="105"> Medie Størrelse: </text> @@ -417,56 +405,42 @@ web-siden, efter du klikker på play knappen.) <text name="pixels"> pixels </text> - <text name="MusicURL:"> - Musik URL: - </text> - <text name="Sound:"> - Lyd: - </text> - <check_box label="Begræns lyde fra bevægelser og objekter til denne parcel" name="check sound local"/> - <button label="?" label_selected="?" name="?" left="400"/> - <text name="Voice settings:"> - Stemme: + <text name="Options:"> + Medie valg: </text> - <radio_group name="parcel_voice_channel"> - <radio_item name="Estate" label="Brug Estate kanalen" /> - <radio_item name="Private" label="Brug en privat kanal" /> - <radio_item name="Disabled" label="Slå stemme chat fra på denne parcel" /> - </radio_group> + <check_box label="Gentag afspil" name="media_loop" tool_tip="Gentager automatisk medie, når det er færdigt med at spille starter det automatisk forfra."/> + </panel> + <panel label="LYD" name="land_audio_panel"> + <check_box label="Tillad stemmer" name="parcel_enable_voice_channel"/> + <check_box label="Tillad stemmer (håndteret af estate)" name="parcel_enable_voice_channel_is_estate_disabled"/> </panel> - <panel label="Adgang" name="land_access_panel"> + <panel label="ADGANG" name="land_access_panel"> + <panel.string name="access_estate_defined"> + (Defineret via estate) + </panel.string> + <panel.string name="estate_override"> + En eller flere af disse valg er indstillet på estate niveau + </panel.string> <text name="Limit access to this parcel to:"> Adgang til denne parcel </text> - <check_box label="Tillad offentlig adgang" name="public_access"/> + <check_box label="Tillad offentlig adgang [MATURITY]" name="public_access"/> <text name="Only Allow"> - Blokér adgang for: + Blokér adgang for:: </text> - <check_box label="Beboere der ikke har givet betalings oplysninger til Linden Lab" name="limit_payment" tool_tip="Blokér beboere der ikke har afgivet identifikationsoplysninger."/> - <check_box label="Beboere der ikke er godkendt som voksne" name="limit_age_verified" tool_tip="Blokér beboere der ikke har verificeret deres alder. Se support.secondlife.com for mere information."/> - <panel.string name="estate_override"> - En eller flere af disse valg er indstillet på estate niveau - </panel.string> + <check_box label="Beboere der ikke har givet betalings oplysninger til Linden Lab [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Blokér beboere der ikke har afgivet identifikationsoplysninger."/> + <check_box label="Alders verifikation [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Blokér beboere der ikke har verificeret deres alder. Se support.secondlife.com for mere information."/> <check_box label="Tillad adgang til gruppen: [GROUP]" name="GroupCheck" tool_tip="Vælg gruppe under fanen 'generelt'."/> <check_box label="Sælg adgang til:" name="PassCheck" tool_tip="Tillader midlertidig adgang til denne parcel"/> <combo_box name="pass_combo"> - <combo_box.item name="Anyone" label="Alle" /> - <combo_box.item name="Group" label="Gruppe" /> + <combo_box.item label="Alle" name="Anyone"/> + <combo_box.item label="Gruppe" name="Group"/> </combo_box> <spinner label="Pris i L$:" name="PriceSpin"/> <spinner label="Timers adgang:" name="HoursSpin"/> - <text label="Tillad altid" name="AllowedText"> - Altid godkendte beboere - </text> - <name_list name="AccessList" tool_tip="([LISTED] vist, [MAX] max)"/> - <button label="Tilføj..." label_selected="Tilføj..." name="add_allowed"/> - <button label="Fjern" label_selected="Fjern" name="remove_allowed"/> - <text label="Blokér" name="BanCheck"> - Blokerede beboere - </text> - <name_list name="BannedList" tool_tip="([LISTED] vist, [MAX] max)"/> - <button label="Tilføj..." label_selected="Tilføj..." name="add_banned"/> - <button label="Fjern" label_selected="Fjern" name="remove_banned"/> + <panel name="Allowed_layout_panel"> + <name_list name="AccessList" tool_tip="([LISTED] vist, [MAX] maks.)"/> + </panel> </panel> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_animation_preview.xml b/indra/newview/skins/default/xui/da/floater_animation_preview.xml index 8cb0eee601..47e02f0704 100644 --- a/indra/newview/skins/default/xui/da/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/da/floater_animation_preview.xml @@ -1,97 +1,184 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Animation Preview" title=""> + <floater.string name="failed_to_initialize"> + Fejlede at starte bevægelse + </floater.string> + <floater.string name="anim_too_long"> + Animations filen er [LENGTH] sekunder lang. + +Maksimal animations længde er [MAX_LENGTH] sekunder. + </floater.string> + <floater.string name="failed_file_read"> + Kan ikke læse animations fil. + +[STATUS] + </floater.string> + <floater.string name="E_ST_OK"> + OK + </floater.string> + <floater.string name="E_ST_EOF"> + Fil afsluttet for tidligt. + </floater.string> + <floater.string name="E_ST_NO_CONSTRAINT"> + Kan ikke læse "constraint definition". + </floater.string> + <floater.string name="E_ST_NO_FILE"> + Kan ikke åbne BVH fil. + </floater.string> + <floater.string name="E_ST_NO_HIER"> + Ugyldig header i HIERARCHY. + </floater.string> + <floater.string name="E_ST_NO_JOINT"> + Kan ikke finde "ROOT" eller "JOINT". + </floater.string> + <floater.string name="E_ST_NO_NAME"> + Kan ikke finde JOINT navn. + </floater.string> + <floater.string name="E_ST_NO_OFFSET"> + Kan ikke finde OFFSET. + </floater.string> + <floater.string name="E_ST_NO_CHANNELS"> + Kan ikke finde CHANNELS. + </floater.string> + <floater.string name="E_ST_NO_ROTATION"> + Kan ikke læse "rotation order". + </floater.string> + <floater.string name="E_ST_NO_AXIS"> + Kan ikke finde rotationsakser. + </floater.string> + <floater.string name="E_ST_NO_MOTION"> + Kan ikke finde MOTION. + </floater.string> + <floater.string name="E_ST_NO_FRAMES"> + Kan ikke læse antal "frames". + </floater.string> + <floater.string name="E_ST_NO_FRAME_TIME"> + Kan ikke læse "frame time". + </floater.string> + <floater.string name="E_ST_NO_POS"> + Kan ikke læse positionsværdier. + </floater.string> + <floater.string name="E_ST_NO_ROT"> + Kan ikke læse rotationsværdier. + </floater.string> + <floater.string name="E_ST_NO_XLT_FILE"> + kan ikke åbne "translation file". + </floater.string> + <floater.string name="E_ST_NO_XLT_HEADER"> + Kan ikke læse "translation header. + </floater.string> + <floater.string name="E_ST_NO_XLT_NAME"> + Kan ikke aflæse "translation" navne. + </floater.string> + <floater.string name="E_ST_NO_XLT_IGNORE"> + Kan ikke læse "translation ignore" værdi. + </floater.string> + <floater.string name="E_ST_NO_XLT_RELATIVE"> + Kan ikke læse "translation relative" værdi. + </floater.string> + <floater.string name="E_ST_NO_XLT_OUTNAME"> + Kan ikke læse "translation outname" værdi. + </floater.string> + <floater.string name="E_ST_NO_XLT_MATRIX"> + Kan ikke læse "translation matrix". + </floater.string> + <floater.string name="E_ST_NO_XLT_MERGECHILD"> + Kan ikke læse "mergechild" navn. + </floater.string> + <floater.string name="E_ST_NO_XLT_MERGEPARENT"> + Kan ikke læse "mergeparent" navn. + </floater.string> + <floater.string name="E_ST_NO_XLT_PRIORITY"> + Kan ikke finde prioritetsværdi. + </floater.string> + <floater.string name="E_ST_NO_XLT_LOOP"> + Kan ikke læse "loop" værdi. + </floater.string> + <floater.string name="E_ST_NO_XLT_EASEIN"> + kan ikke læse "easeIn" værdier. + </floater.string> + <floater.string name="E_ST_NO_XLT_EASEOUT"> + Kan ikke læse "easeOut" værdier. + </floater.string> + <floater.string name="E_ST_NO_XLT_HAND"> + Kan ikke læse "hand morph" værdi. + </floater.string> + <floater.string name="E_ST_NO_XLT_EMOTE"> + kan ikke læse "emote" navn. + </floater.string> <text name="name_label"> Navn: </text> <text name="description_label"> Beskrivelse: </text> - <spinner label="Prioritet" name="priority" - tool_tip="Vælg hvilke andre animationer der har lavere prioritet end denne." /> - <check_box label="Gentag" name="loop_check" tool_tip="Gentager animationen konstant." /> - <spinner left="76" label_width="40" width="105" label="Ind(%)" name="loop_in_point" tool_tip="Sætter punktet hvor gentagelsen genstarter fra."/> - <spinner label="Ud (%)" name="loop_out_point" - tool_tip="Sætter punktet i animationen der afslutter gentagelsen." /> + <spinner label="Prioritet" name="priority" tool_tip="Vælg hvilke andre animationer der "overstyres" af denne"/> + <check_box label="Gentag" name="loop_check" tool_tip="Gentager animationen konstant"/> + <spinner label="Ind(%)" label_width="40" left="76" name="loop_in_point" tool_tip="Sætter punktet hvor gentagelsen genstarter fra" width="105"/> + <spinner label="Ud (%)" name="loop_out_point" tool_tip="Sætter punktet i animationen der afslutter gentagelsen"/> <text name="hand_label"> Hånd posering </text> - <combo_box label="" name="hand_pose_combo" - tool_tip="Kontrollerer hvad hænderne går i løbet af animationen." width="140"> - <combo_box.item name="Spread" label="Spredt" /> - <combo_box.item name="Relaxed" label="Afslappet" /> - <combo_box.item name="PointBoth" label="Peg begge" /> - <combo_box.item name="Fist" label="Knytnæver" /> - <combo_box.item name="RelaxedLeft" label="Afslappet venstre" /> - <combo_box.item name="PointLeft" label="Peg venstre" /> - <combo_box.item name="FistLeft" label="Knytnæve venstre" /> - <combo_box.item name="RelaxedRight" label="Afslappet højre" /> - <combo_box.item name="PointRight" label="Peg højre" /> - <combo_box.item name="FistRight" label="Knytnæve højre" /> - <combo_box.item name="SaluteRight" label="Honnør højre" /> - <combo_box.item name="Typing" label="Skriver" /> - <combo_box.item name="PeaceRight" label="Fredstegn højre" /> + <combo_box label="" name="hand_pose_combo" tool_tip="Kontrollerer hvad hænderne går i løbet af animationen" width="140"> + <combo_box.item label="Spredt" name="Spread"/> + <combo_box.item label="Afslappet" name="Relaxed"/> + <combo_box.item label="Peg begge" name="PointBoth"/> + <combo_box.item label="Knytnæver" name="Fist"/> + <combo_box.item label="Afslappet venstre" name="RelaxedLeft"/> + <combo_box.item label="Peg venstre" name="PointLeft"/> + <combo_box.item label="Knytnæve venstre" name="FistLeft"/> + <combo_box.item label="Afslappet højre" name="RelaxedRight"/> + <combo_box.item label="peg højre" name="PointRight"/> + <combo_box.item label="knytnæve højre" name="FistRight"/> + <combo_box.item label="Honnør højre" name="SaluteRight"/> + <combo_box.item label="Skrivende" name="Typing"/> + <combo_box.item label="Fredstegn højre" name="PeaceRight"/> </combo_box> <text name="emote_label"> Ansigtsudtryk </text> - <combo_box label="" name="emote_combo" - tool_tip="Angiver hvad ansigtet gør under animationen" width="140"> - <combo_box.item name="[None]" label="Intet]" /> - <combo_box.item name="Aaaaah" label="Aaaaah" /> - <combo_box.item name="Afraid" label="Bange" /> - <combo_box.item name="Angry" label="Vred" /> - <combo_box.item name="BigSmile" label="Stort smil" /> - <combo_box.item name="Bored" label="Keder sig" /> - <combo_box.item name="Cry" label="Græder" /> - <combo_box.item name="Disdain" label="Forarget" /> - <combo_box.item name="Embarrassed" label="Flov" /> - <combo_box.item name="Frown" label="Skuler" /> - <combo_box.item name="Kiss" label="Kysser" /> - <combo_box.item name="Laugh" label="Griner" /> - <combo_box.item name="Plllppt" label="Plllppt" /> - <combo_box.item name="Repulsed" label="Frastødt" /> - <combo_box.item name="Sad" label="Ked af det" /> - <combo_box.item name="Shrug" label="Skuldertræk" /> - <combo_box.item name="Smile" label="Smiler" /> - <combo_box.item name="Surprise" label="Overrasket" /> - <combo_box.item name="Wink" label="Blinker" /> - <combo_box.item name="Worry" label="Bekymret" /> + <combo_box label="" name="emote_combo" tool_tip="Angiver hvad ansigtet gør under animationen" width="140"> + <combo_box.item label="(Intet)" name="[None]"/> + <combo_box.item label="Aaaaah" name="Aaaaah"/> + <combo_box.item label="Bange" name="Afraid"/> + <combo_box.item label="Vred" name="Angry"/> + <combo_box.item label="Stort smil" name="BigSmile"/> + <combo_box.item label="Keder sig" name="Bored"/> + <combo_box.item label="Græder" name="Cry"/> + <combo_box.item label="Forarget" name="Disdain"/> + <combo_box.item label="Flov" name="Embarrassed"/> + <combo_box.item label="Skuler" name="Frown"/> + <combo_box.item label="Kysser" name="Kiss"/> + <combo_box.item label="Griner" name="Laugh"/> + <combo_box.item label="Plllppt" name="Plllppt"/> + <combo_box.item label="Frastødt" name="Repulsed"/> + <combo_box.item label="Ked af det" name="Sad"/> + <combo_box.item label="Skuldertræk" name="Shrug"/> + <combo_box.item label="Smil" name="Smile"/> + <combo_box.item label="Overrasket" name="Surprise"/> + <combo_box.item label="Blinker" name="Wink"/> + <combo_box.item label="Bekymret" name="Worry"/> </combo_box> <text name="preview_label"> Vis mens </text> - <combo_box label="" name="preview_base_anim" - tool_tip="Se hvordan animation ser ud i forskellige typiske avatar-situationer." width="140"> - <combo_box.item name="Standing" label="Står" /> - <combo_box.item name="Walking" label="Går" /> - <combo_box.item name="Sitting" label="Sidder" /> - <combo_box.item name="Flying" label="Flyver" /> + <combo_box label="" name="preview_base_anim" tool_tip="Se hvordan animation ser ud i forskellige typiske avatar-situationer." width="140"> + <combo_box.item label="Stående" name="Standing"/> + <combo_box.item label="Gående" name="Walking"/> + <combo_box.item label="Sidder" name="Sitting"/> + <combo_box.item label="Flyver" name="Flying"/> </combo_box> - <spinner label="start (sec)" name="ease_in_time" - tool_tip="Tid i sekunder animationen bruger på at komme i gang." /> - <spinner label="Afslut (sec)" name="ease_out_time" - tool_tip="Tid i sekunder animationen bruger på at afslutte." /> - <button label="" name="play_btn" tool_tip="Start/pause din animation." /> - <button label="" name="stop_btn" tool_tip="Stop afspilning af animation" /> - <slider label="" name="playback_slider" /> + <spinner label="start (sec)" name="ease_in_time" tool_tip="Tid (i sekunder) animationen bruger på at komme i gang."/> + <spinner label="Afslut (sec)" name="ease_out_time" tool_tip="Tid (i sekunder) animationen bruger på at afslutte"/> + <button label="" name="play_btn" tool_tip="Start din animation"/> + <button name="pause_btn" tool_tip="Pause din animation"/> + <button label="" name="stop_btn" tool_tip="Stop afspilning af animation"/> + <slider label="" name="playback_slider"/> <text name="bad_animation_text"> Kan ikke læse animations fil. Vi anbefaler BVH filer der er exporteret fra Poser 4. </text> - <button label="Annullér" name="cancel_btn" /> - <button label="Hent (L$[AMOUNT])" name="ok_btn" /> - <string name="failed_to_initialize"> - Fejlede at starte bevægelse - </string> - <string name="anim_too_long"> - Animations filen er [LENGTH] sekunder lang. - -Maksimal animations længde er [MAX_LENGTH] sekunder. - </string> - <string name="failed_file_read"> - Kan ikke læse animations fil. - -[STATUS] - </string> + <button label="Hent (L$[AMOUNT])" name="ok_btn"/> + <button label="Annullér" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_avatar_textures.xml b/indra/newview/skins/default/xui/da/floater_avatar_textures.xml index 27bfa367f6..1111c5e18b 100644 --- a/indra/newview/skins/default/xui/da/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/da/floater_avatar_textures.xml @@ -1,30 +1,32 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="avatar_texture_debug" title="AVATAR TEKSTURER"> - <text name="baked_label"> - Faste teksturer - </text> + <floater.string name="InvalidAvatar"> + UGYLDING AVATAR + </floater.string> <text name="composite_label"> Blandede teksturer </text> - <texture_picker label="Hoved" name="baked_head" /> - <texture_picker label="Makeup" name="head_bodypaint" /> - <texture_picker label="Hår" name="hair" /> - <button label="Drop" label_selected="Dump" name="Dump" /> - <texture_picker label="øjne" name="baked_eyes" /> - <texture_picker label="øje" name="eye_texture" /> - <texture_picker label="Overkrop" name="baked_upper_body" /> - <texture_picker label="Tatovering overkrop" name="upper_bodypaint" /> - <texture_picker label="Undertrøje" name="undershirt" /> - <texture_picker label="Handsker" name="gloves" /> - <texture_picker label="Trøje" name="shirt" /> - <texture_picker label="øvre jakke" name="upper_jacket" /> - <texture_picker label="Underkrop" name="baked_lower_body" /> - <texture_picker label="Tatovering underkrop" name="lower_bodypaint" /> - <texture_picker label="Underbukser" name="underpants" /> - <texture_picker label="Strømper" name="socks" /> - <texture_picker label="Sko" name="shoes" /> - <texture_picker label="Bukser" name="pants" /> - <texture_picker label="Jakke" name="jacket" /> - <texture_picker label="Nederdel" name="baked_skirt" /> - <texture_picker label="Nederdel" name="skirt_texture" /> + <button label="Drop" label_selected="Dump" name="Dump"/> + <texture_picker label="Hår" name="hair_grain"/> + <texture_picker label="Alpha - hår" name="hair_alpha"/> + <texture_picker label="Makeup" name="head_bodypaint"/> + <texture_picker label="Alpha - hoved" name="head_alpha"/> + <texture_picker label="Tatovering hovede" name="head_tattoo"/> + <texture_picker label="Øje" name="eyes_iris"/> + <texture_picker label="Alpha - øjne" name="eyes_alpha"/> + <texture_picker label="Bodypaint - overkrop" name="upper_bodypaint"/> + <texture_picker label="Undertrøje" name="upper_undershirt"/> + <texture_picker label="Handsker" name="upper_gloves"/> + <texture_picker label="Trøje" name="upper_shirt"/> + <texture_picker label="Øvre jakke" name="upper_jacket"/> + <texture_picker label="Alpha - øvre" name="upper_alpha"/> + <texture_picker label="Øvre tatovering" name="upper_tattoo"/> + <texture_picker label="Bodypaint - underkrop" name="lower_bodypaint"/> + <texture_picker label="Undertøj" name="lower_underpants"/> + <texture_picker label="Strømper" name="lower_socks"/> + <texture_picker label="Sko" name="lower_shoes"/> + <texture_picker label="Bukser" name="lower_pants"/> + <texture_picker label="Jakke" name="lower_jacket"/> + <texture_picker label="Alpha - nedre" name="lower_alpha"/> + <texture_picker label="Nedre tatovering" name="lower_tattoo"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_beacons.xml b/indra/newview/skins/default/xui/da/floater_beacons.xml index 18bc7aeb31..d67d859e7b 100644 --- a/indra/newview/skins/default/xui/da/floater_beacons.xml +++ b/indra/newview/skins/default/xui/da/floater_beacons.xml @@ -1,15 +1,21 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="beacons" title="PEJLELYS"> <panel name="beacons_panel"> - <check_box label="Kun scriptede objekter med "rør"" name="touch_only" /> - <check_box label="Scriptede objekter" name="scripted" /> - <check_box label="Fysiske objekter" name="physical" /> - <check_box label="Lyd kilder" name="sounds" /> - <check_box label="Partikel kilder" name="particles" /> - <check_box label="Rendér highlights" name="highlights" /> - <check_box label="Rendér pejlelys" name="beacons" /> - <text name="beacon_width_label"> - Pejlelys bredde: + <text name="label_show"> + Vis: </text> + <check_box label="Pejlelys" name="beacons"/> + <check_box label="Fremhævninger" name="highlights"/> + <text name="beacon_width_label" tool_tip="Pejlelys bredde"> + Bredde: + </text> + <text name="label_objects"> + For disse objekter: + </text> + <check_box label="Fysisk" name="physical"/> + <check_box label="Scriptet" name="scripted"/> + <check_box label="Kun berøring" name="touch_only"/> + <check_box label="Lydkilder" name="sounds"/> + <check_box label="Partikel kilder" name="particles"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_build_options.xml b/indra/newview/skins/default/xui/da/floater_build_options.xml index 7eb0d4c035..9196f19b78 100644 --- a/indra/newview/skins/default/xui/da/floater_build_options.xml +++ b/indra/newview/skins/default/xui/da/floater_build_options.xml @@ -1,8 +1,11 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="build options floater" title="GITTER INDSTILLINGER"> - <spinner label="Gitter enhed (meter)" name="GridResolution" width="200" label_width="136"/> - <spinner label="Gitter rækkevidde (meter)" name="GridDrawSize" width="200" label_width="136"/> - <check_box label="Aktiver låsning til under-enheder" name="GridSubUnit" /> - <check_box label="Vis 'cross sections'" name="GridCrossSection" /> - <slider label="Gitter synlighed" name="GridOpacity" /> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="build options floater" title="GITTER VALG"> + <spinner label="Gitter enheder (meter)" label_width="136" name="GridResolution" width="200"/> + <spinner label="Gitter rækkevidde (meter)" label_width="136" name="GridDrawSize" width="200"/> + <check_box label="Aktivér låsning til underenheder" name="GridSubUnit"/> + <check_box label="Vis 'cross-sections'" name="GridCrossSection"/> + <text name="grid_opacity_label" tool_tip="Gitter synlighed"> + Uigennemsigtighed: + </text> + <slider label="Gitter synlighed" name="GridOpacity"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_buy_contents.xml b/indra/newview/skins/default/xui/da/floater_buy_contents.xml index 8dccf32304..c2b2ccc244 100644 --- a/indra/newview/skins/default/xui/da/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/da/floater_buy_contents.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_buy_contents" title="KØB INDHOLD"> <text name="contains_text"> [NAME] indeholder: @@ -6,9 +6,9 @@ <text name="buy_text"> Køb for L$[AMOUNT] fra [NAME]? </text> - <button label="Annullér" label_selected="Annullér" name="cancel_btn" /> - <button label="Køb" label_selected="Køb" name="buy_btn" /> - <check_box label="Tag tøj på nu" name="wear_check" /> + <button label="Annullér" label_selected="Annullér" name="cancel_btn"/> + <button label="Køb" label_selected="Køb" name="buy_btn"/> + <check_box label="Tag tøj på nu" name="wear_check"/> <string name="no_copy_text"> (kopiér ej) </string> diff --git a/indra/newview/skins/default/xui/da/floater_buy_currency.xml b/indra/newview/skins/default/xui/da/floater_buy_currency.xml index d1fca8984d..18ee0e0597 100644 --- a/indra/newview/skins/default/xui/da/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/da/floater_buy_currency.xml @@ -1,68 +1,66 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="buy currency" title="KØB VALUTA"> - <text name="info_buying"> - Køber valuta: - </text> - <text name="info_cannot_buy"> - Kan ikke købe nu: - </text> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="buy currency" title="KØB L$"> + <floater.string name="buy_currency"> + Køb L$ [LINDENS] for ca. [LOCALAMOUNT] + </floater.string> <text name="info_need_more"> - Du har ikke penge nok: + Du skal bruge flere L$ </text> - <text name="error_message"> - Noget er gået galt. - </text> - <button label="Gå til hjemmeside" name="error_web" /> <text name="contacting"> Kontakter LindeX... </text> - <text name="buy_action_unknown"> - Køb L$ på LindeX valuta marked + <text name="info_buying"> + Køb L$ </text> - <text name="buy_action"> - [NAME] L$ [PRICE] + <text name="balance_label"> + Jeg har + </text> + <text name="balance_amount"> + L$ [AMT] </text> <text name="currency_action"> - Køb L$ + Jeg ønsker at købe </text> - <line_editor name="currency_amt"> + <text name="currency_label"> + L$ + </text> + <line_editor label="L$" name="currency_amt"> 1234 </line_editor> + <text name="buying_label"> + Til prisen + </text> <text name="currency_est"> - for ca. [LOCALAMOUNT] + ca. [LOCALAMOUNT] </text> <text name="getting_data"> - Henter data... - </text> - <text name="balance_label"> - Du har i øjeblikket - </text> - <text name="balance_amount"> - L$ [AMT] - </text> - <text name="buying_label"> - Du køber + Estimerer... </text> - <text name="buying_amount"> - L$ [AMT] + <text name="buy_action"> + [NAME] L$ [PRICE] </text> <text name="total_label"> - Din balance bliver + Min nye beholdning vil være </text> <text name="total_amount"> L$ [AMT] </text> + <text name="currency_links"> + [http://www.secondlife.com/ payment method] | [http://www.secondlife.com/ currency] | [http://www.secondlife.com/my/account/exchange_rates.php exchange rate] + </text> + <text name="exchange_rate_note"> + Indtast beløbet for at se nyeste valutakurs. + </text> <text name="purchase_warning_repurchase"> - Bekræfter at denne handel kun omfatter valuta. -Gentag operationen venligst igen. + Bekræftelse af dette køb medfører kun køb af L$, ikke objektet. </text> <text name="purchase_warning_notenough"> - Du køber ikke nok valuta, tast et større beløb -og prøv igen. + Du køber ikke nok L$. Forøg venligst beløbet. </text> - <button label="Annullér" name="cancel_btn" /> - <button label="Køb" name="buy_btn" /> - <string name="buy_currency"> - Køb L$ [LINDENS] for ca. [LOCALAMOUNT] - </string> + <button label="Køb nu" name="buy_btn"/> + <button label="Annullér" name="cancel_btn"/> + <text name="info_cannot_buy"> + Kan ikke købe + </text> + <button label="Fortsæt til web" name="error_web"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_buy_land.xml b/indra/newview/skins/default/xui/da/floater_buy_land.xml index 71e6eaa7f7..987ad6585f 100644 --- a/indra/newview/skins/default/xui/da/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/da/floater_buy_land.xml @@ -59,7 +59,7 @@ <text left_delta="62" name="info_price"> L$ 1500 (L$ 1.1/m²) -sælges med objekter +solgt med objekter </text> <text name="info_action"> Køb af dette land vil: @@ -75,16 +75,16 @@ sælges med objekter Kun premium medlemmer kan eje land. </text> <combo_box name="account_level"> - <combo_box.item name="US$9.95/month,billedmonthly" label="US$9.95/md, månedlig afregning" /> - <combo_box.item name="US$7.50/month,billedquarterly" label="US$7.50/md, kvartalsvis afregning" /> - <combo_box.item name="US$6.00/month,billedannually" label="US$6.00/md, årlig afregning" /> + <combo_box.item label="US$9.95 pr. måned, faktureret månedligt" name="US$9.95/month,billedmonthly"/> + <combo_box.item label="US$7.50 pr. måned, faktureret kvartalsvist" name="US$7.50/month,billedquarterly"/> + <combo_box.item label="US$6.00 pr. måned, faktureret årligt" name="US$6.00/month,billedannually"/> </combo_box> <text name="land_use_action"> Forøg dine månedlige arealanvendelse gebyrer til US $ 40/måned. </text> <text name="land_use_reason"> - You hold 1309 m² of land. -This parcel is 512 m² of land. + Du ejer 1309 m² land. +Denne parcel er på 512 m². </text> <text name="purchase_action"> Betal Joe Resident L$ 4000 dette areal @@ -99,12 +99,12 @@ This parcel is 512 m² of land. 1000 </line_editor> <text name="currency_est"> - for ca. US$ [AMOUNT2] + for ca. [LOCAL_AMOUNT] </text> <text name="currency_balance"> Du har L$2,100. </text> - <check_box label="Fjern [AMOUNT] kvadratmeter af bidrag fra gruppe." name="remove_contribution"/> + <check_box label="Fjern [AMOUNT] m² af bidrag fra gruppe." name="remove_contribution"/> <button label="Køb" name="buy_btn"/> <button label="Annullér" name="cancel_btn"/> <string name="can_resell"> @@ -181,16 +181,16 @@ Prøv at vælge et mindre område. Din konto kan eje jord. </string> <string name="land_holdings"> - Du har [BUYER] m² jord. + Du ejer [BUYER] m² land. </string> <string name="pay_to_for_land"> Betal L$ [AMOUNT] til [SELLER] for dette stykke jord </string> <string name="buy_for_US"> - Køb L$ [AMOUNT] for ca. US$ [AMOUNT2], + Køb L$ [AMOUNT] for ca. [LOCAL_AMOUNT], </string> <string name="parcel_meters"> - Denne parcel er [AMOUNT] m². + Denne parcel er på [AMOUNT] m² </string> <string name="premium_land"> Dette stykke jord er premium, og vil tælle som [AMOUNT] m². @@ -200,7 +200,7 @@ Prøv at vælge et mindre område. </string> <string name="meters_supports_object"> [AMOUNT] m² -kan indeholder [AMOUNT2] objekter +kan indeholde [AMOUNT2] objekter </string> <string name="sold_with_objects"> solgt med objekter diff --git a/indra/newview/skins/default/xui/da/floater_choose_group.xml b/indra/newview/skins/default/xui/da/floater_choose_group.xml index 9f02f281db..1ccda4f1d7 100644 --- a/indra/newview/skins/default/xui/da/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/da/floater_choose_group.xml @@ -1,8 +1,8 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="groups" title="GRUPPER"> <text name="groupdesc"> Vælg en gruppe: </text> - <button label="OK" label_selected="OK" name="OK" /> - <button label="Annullér" label_selected="Annullér" name="Cancel" /> + <button label="OK" label_selected="OK" name="OK"/> + <button label="Annullér" label_selected="Annullér" name="Cancel"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_customize.xml b/indra/newview/skins/default/xui/da/floater_customize.xml index b2409f1682..379302ef6a 100644 --- a/indra/newview/skins/default/xui/da/floater_customize.xml +++ b/indra/newview/skins/default/xui/da/floater_customize.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="APPEARANCE" width="509"> +<floater name="floater customize" title="UDSEENDE" width="509"> <tab_container name="customize tab container" width="507"> <placeholder label="Krops Dele" name="body_parts_placeholder"/> <panel label="Kropsbygning" name="Shape"> @@ -14,8 +14,8 @@ <button label="Overkrop" label_selected="Overkrop" name="Torso"/> <button label="Ben" label_selected="Ben" name="Legs"/> <radio_group name="sex radio"> - <radio_item name="radio" label="Kvinde" /> - <radio_item name="radio2" label="Mand" /> + <radio_item label="Kvinde" name="radio"/> + <radio_item label="Mand" name="radio2"/> </radio_group> <text name="title"> [DESC] @@ -78,9 +78,9 @@ og bagefter 'tage den på'. <text name="Item Action Label"> Hud: </text> - <texture_picker width="98" label="Tatoveringer hoved" name="Head Tattoos" tool_tip="Klik for at vælge et billede"/> - <texture_picker width="98" label="Tatover. overkrop" name="Upper Tattoos" tool_tip="Klik for at vælge et billede"/> - <texture_picker width="98" label="Tatover. underkrop" name="Lower Tattoos" tool_tip="Klik for at vælge et billede"/> + <texture_picker label="Tatoveringer hoved" name="Head Tattoos" tool_tip="Klik for at vælge et billede" width="98"/> + <texture_picker label="Tatover. overkrop" name="Upper Tattoos" tool_tip="Klik for at vælge et billede" width="98"/> + <texture_picker label="Tatover. underkrop" name="Lower Tattoos" tool_tip="Klik for at vælge et billede" width="98"/> <button label="Lav ny hud" label_selected="Lav nyt hud" name="Create New"/> <button label="Gem" label_selected="Gem" name="Save"/> <button label="Gem som..." label_selected="Gem som..." name="Save As"/> @@ -156,7 +156,7 @@ og bagefter 'tage dem på'. <button label="Gem som..." label_selected="Gem som..." name="Save As"/> <button label="Annullér" label_selected="Annullér" name="Revert"/> </panel> - <panel label="Tøje" name="clothes_placeholder"/> + <placeholder label="Tøje" name="clothes_placeholder"/> <panel label="Trøje" name="Shirt"> <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/> <color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> @@ -471,9 +471,81 @@ og bagefter 'tage den på'. <button label="Gem som..." label_selected="Gem som..." name="Save As"/> <button label="Annullér" label_selected="Annullér" name="Revert"/> </panel> + <panel label="Alpha" name="Alpha"> + <text name="title"> + [DESC] + </text> + <text name="title_no_modify"> + [DESC]: kan ikke ændre + </text> + <text name="title_loading"> + [DESC]: indlæser... + </text> + <text name="title_not_worn"> + [DESC]: ikke båret + </text> + <text name="path"> + Placeret i [PATH] + </text> + <text name="not worn instructions"> + Brug en ny "alpha mask" ved at trække en fra din beholding til din avatar. +Alternativt kan du lave en fra bunden og bære denne. + </text> + <text name="no modify instructions"> + Du har ikke rettigheder til at ændre denne. + </text> + <text name="Item Action Label"> + Alpha: + </text> + <texture_picker label="Alpha - nedre" name="Lower Alpha" tool_tip="Klik for at vælge et billede"/> + <texture_picker label="Øvre alpha" name="Upper Alpha" tool_tip="Klik for at vælge et billede"/> + <texture_picker label="Alpha - hoved" name="Head Alpha" tool_tip="Klik for at vælge et billede"/> + <texture_picker label="Alpha - øjne" name="Eye Alpha" tool_tip="Klik for at vælge et billede"/> + <texture_picker label="Alpha - hår" name="Hair Alpha" tool_tip="Klik for at vælge et billede"/> + <button label="Lav ny "Alpha"" label_selected="Lav ny "Alpha"" name="Create New"/> + <button label="Tag af" label_selected="Tag af" name="Take Off"/> + <button label="Gem" label_selected="Gem" name="Save"/> + <button label="Gem som..." label_selected="Gem som..." name="Save As"/> + <button label="Vend tilbage" label_selected="Vend tilbage" name="Revert"/> + </panel> + <panel label="Tatovering" name="Tattoo"> + <text name="title"> + [DESC] + </text> + <text name="title_no_modify"> + [DESC]: kan ikke ændre + </text> + <text name="title_loading"> + [DESC]: indlæser... + </text> + <text name="title_not_worn"> + [DESC]: ikke båret + </text> + <text name="path"> + Placeret i [PATH] + </text> + <text name="not worn instructions"> + Brug en ny tatovering ved at trække en fra din beholding til din avatar. +Alternativt kan du lave en fra bunden og bære denne. + </text> + <text name="no modify instructions"> + Du har ikke rettigheder til at ændre denne. + </text> + <text name="Item Action Label"> + Tatovering: + </text> + <texture_picker label="Tatovering - hovede" name="Head Tattoo" tool_tip="Klik for at vælge et billede"/> + <texture_picker label="Øvre tatovering" name="Upper Tattoo" tool_tip="Klik for at vælge et billede"/> + <texture_picker label="Nedre tatovering" name="Lower Tattoo" tool_tip="Klik for at vælge et billede"/> + <button label="lav ny tatovering" label_selected="Lav ny tatovering" name="Create New"/> + <button label="Tag af" label_selected="Tag af" name="Take Off"/> + <button label="Gem" label_selected="Gem" name="Save"/> + <button label="Gem som..." label_selected="Gem som..." name="Save As"/> + <button label="Vend tilbage" label_selected="Vend tilbage" name="Revert"/> + </panel> </tab_container> <scroll_container left="212" name="panel_container"/> + <button label="Lav sæt" label_selected="Lav sæt" name="make_outfit_btn"/> <button label="Annullér" label_selected="Annullér" name="Cancel"/> <button label="OK" label_selected="OK" name="Ok"/> - <button label="Opret sæt..." label_selected="Opret sæt..." name="Make Outfit"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_device_settings.xml b/indra/newview/skins/default/xui/da/floater_device_settings.xml index 5e53a697f2..06d431a8f9 100644 --- a/indra/newview/skins/default/xui/da/floater_device_settings.xml +++ b/indra/newview/skins/default/xui/da/floater_device_settings.xml @@ -1,2 +1,2 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_device_settings" title="STEMME CHAT INDSTILLINGER" /> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_device_settings" title="STEMME CHAT ENHEDSOPSÆTNING"/> diff --git a/indra/newview/skins/default/xui/da/floater_env_settings.xml b/indra/newview/skins/default/xui/da/floater_env_settings.xml index 6c5b6d3b6b..8d9c05500b 100644 --- a/indra/newview/skins/default/xui/da/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/da/floater_env_settings.xml @@ -1,26 +1,28 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Environment Editor Floater" title="REDIGERING AF OMGIVELSER"> + <floater.string name="timeStr"> + [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc] + </floater.string> <text name="EnvTimeText"> Tid på dagen </text> <text name="EnvTimeText2"> 00:00 </text> - <slider label="" name="EnvTimeSlider" /> + <slider label="" name="EnvTimeSlider"/> <text name="EnvCloudText"> Skydække </text> - <slider label="" name="EnvCloudSlider" /> + <slider label="" name="EnvCloudSlider"/> <text name="EnvWaterColorText"> Farve på vand </text> - <color_swatch label="" name="EnvWaterColor" tool_tip="Klik for at åbne farvevælger" /> + <color_swatch label="" name="EnvWaterColor" tool_tip="Klik for at åbne farvevælger"/> <text name="EnvWaterFogText"> Tåge på vand </text> - <slider label="" name="EnvWaterFogSlider" /> - <button label="Benyt tid fra estate" name="EnvUseEstateTimeButton" /> - <button label="Avanceret himmel" name="EnvAdvancedSkyButton" /> - <button label="Avanceret vand" name="EnvAdvancedWaterButton" /> - <button label="?" name="EnvSettingsHelpButton" /> + <slider label="" name="EnvWaterFogSlider"/> + <button label="Benyt tid fra estate" name="EnvUseEstateTimeButton"/> + <button label="Avanceret himmel" name="EnvAdvancedSkyButton"/> + <button label="Avanceret vand" name="EnvAdvancedWaterButton"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_hardware_settings.xml b/indra/newview/skins/default/xui/da/floater_hardware_settings.xml index fc1231ceef..2b10afe7e3 100644 --- a/indra/newview/skins/default/xui/da/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/da/floater_hardware_settings.xml @@ -1,30 +1,28 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Hardware Settings Floater" title="HARDWARE OPSÆTNING"> <text name="Filtering:"> Filtrering: </text> - <check_box label="Anisotropic filtrering (langsommere når aktiveret)" name="ani" /> + <check_box label="Anisotropic filtrering (langsommere når aktiveret)" name="ani"/> <text name="Antialiasing:"> Antialiasing: </text> <combo_box label="Antialiasing" name="fsaa" width="100"> - <combo_box.item name="FSAADisabled" label="Slået fra"/> - <combo_box.item name="2x" label="2x"/> - <combo_box.item name="4x" label="4x"/> - <combo_box.item name="8x" label="8x"/> - <combo_box.item name="16x" label="16x"/> + <combo_box.item label="Slået fra" name="FSAADisabled"/> + <combo_box.item label="2x" name="2x"/> + <combo_box.item label="4x" name="4x"/> + <combo_box.item label="8x" name="8x"/> + <combo_box.item label="16x" name="16x"/> </combo_box> - <spinner label="Gamma:" name="gamma" /> + <spinner label="Gamma:" name="gamma"/> <text name="(brightness, lower is brighter)"> (Lysstyrke, lavere er lysere, 0=benyt standard) </text> <text name="Enable VBO:"> Aktivér VBO: </text> - <check_box label="Aktivér OpenGL Vertex Buffer objekter" name="vbo" - tool_tip="Aktivér af dette på nyere hardware giver performance forbedring. På ældre hardware kan aktivering medfø nedbrud." /> - <slider label="Tekstur hukommelse (MB):" name="GrapicsCardTextureMemory" - tool_tip="Mængde hukommelse der skal allokeres til teksturer (textures). Standardindstilling er hukommelse på grafikkortet. Reduktion kan medfø bedre ydeevne, men kan samtidig gøre teksturer mere udflydende." /> - <spinner label="Tåge: afstandsforhold:" name="fog" /> - <button label="OK" label_selected="OK" name="OK" /> + <check_box initial_value="true" label="Aktivér OpenGL Vertex Buffer objekter" name="vbo" tool_tip="Aktivér af dette på nyere hardware giver performance forbedring. På ældre hardware kan aktivering medfø nedbrud."/> + <slider label="Tekstur hukommelse (MB):" name="GraphicsCardTextureMemory" tool_tip="Mængde hukommelse der skal allokeres til teksturer (textures). Standardindstilling er hukommelse på grafikkortet. Reduktion kan medfø bedre ydeevne, men kan samtidig gøre teksturer mere udflydende."/> + <spinner label="Tåge: afstandsforhold:" name="fog"/> + <button label="OK" label_selected="OK" name="OK"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_help_browser.xml b/indra/newview/skins/default/xui/da/floater_help_browser.xml new file mode 100644 index 0000000000..fc52796344 --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_help_browser.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_help_browser" title="HJÆLP"> + <layout_stack name="stack1"> + <layout_panel name="external_controls"> + <button label="Åben i min web browser" name="open_browser"/> + </layout_panel> + </layout_stack> +</floater> diff --git a/indra/newview/skins/default/xui/da/floater_im.xml b/indra/newview/skins/default/xui/da/floater_im.xml index 0b42b78706..519a70d1d9 100644 --- a/indra/newview/skins/default/xui/da/floater_im.xml +++ b/indra/newview/skins/default/xui/da/floater_im.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <multi_floater name="im_floater" title="Personlig samtale (IM)"> <string name="only_user_message"> Du er den eneste deltager i denne samtale @@ -10,7 +10,7 @@ Tryk på [BUTTON NAME] knappen for at acceptére/tilslutte til denne stemme chat. </string> <string name="muted_message"> - Du har blokeret denne beboer. Hvis du starter en samtale vil denne blokering automatisk blive fjernet. + Du har blokeret denne beboer. Hvis du sender besked vil denne blokering fjernes. </string> <string name="generic_request_error"> Kunne ikke etablere forbindelse, prøv igen senere diff --git a/indra/newview/skins/default/xui/da/floater_im_container.xml b/indra/newview/skins/default/xui/da/floater_im_container.xml new file mode 100644 index 0000000000..da6f877f56 --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_im_container.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<multi_floater name="floater_im_box" title="Personlige beskeder"/> diff --git a/indra/newview/skins/default/xui/da/floater_image_preview.xml b/indra/newview/skins/default/xui/da/floater_image_preview.xml index 345c9aa6d1..52fd9f80c0 100644 --- a/indra/newview/skins/default/xui/da/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/da/floater_image_preview.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Image Preview" title=""> <text name="name_label"> Navn: @@ -10,23 +10,23 @@ Se billede som: </text> <combo_box label="Tøj type" name="clothing_type_combo"> - <combo_box.item name="Image" label="Billede"/> - <combo_box.item name="Hair" label="Hår"/> - <combo_box.item name="FemaleHead" label="Kvinde - hoved"/> - <combo_box.item name="FemaleUpperBody" label="Kvinde - overkrop"/> - <combo_box.item name="FemaleLowerBody" label="Kvinde - underkrop"/> - <combo_box.item name="MaleHead" label="Mand - hoved"/> - <combo_box.item name="MaleUpperBody" label="Mand - overkrop"/> - <combo_box.item name="MaleLowerBody" label="Mand - underkrop"/> - <combo_box.item name="Skirt" label="Nederdel"/> - <combo_box.item name="SculptedPrim" label="Sculpted prim"/> + <combo_box.item label="Billede" name="Image"/> + <combo_box.item label="Hår" name="Hair"/> + <combo_box.item label="Kvinde - hoved" name="FemaleHead"/> + <combo_box.item label="Kvinde - overkrop" name="FemaleUpperBody"/> + <combo_box.item label="Kvinde - underkrop" name="FemaleLowerBody"/> + <combo_box.item label="Mand - hoved" name="MaleHead"/> + <combo_box.item label="Mand - overkrop" name="MaleUpperBody"/> + <combo_box.item label="Mand - underkrop" name="MaleLowerBody"/> + <combo_box.item label="Nederdel" name="Skirt"/> + <combo_box.item label="Sculpted Prim" name="SculptedPrim"/> </combo_box> <text name="bad_image_text"> Kunne ikke læse billede. Prøv at gemme billede som en 24 bit Targa fil (.tga). </text> - <check_box label="Benyt komprimering uden tab" name="lossless_check" /> - <button label="Annullér" name="cancel_btn" /> - <button label="Hent (L$[AMOUNT])" name="ok_btn" /> + <check_box label="Benyt komprimering uden tab" name="lossless_check"/> + <button label="Annullér" name="cancel_btn"/> + <button label="Hent (L$[AMOUNT])" name="ok_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_incoming_call.xml b/indra/newview/skins/default/xui/da/floater_incoming_call.xml new file mode 100644 index 0000000000..3a1ef2e47d --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_incoming_call.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="incoming call" title="UKENDT PERSON KALDER OP"> + <floater.string name="localchat"> + Stemme chat nærved + </floater.string> + <floater.string name="anonymous"> + anonym + </floater.string> + <floater.string name="VoiceInviteP2P"> + kalder op. + </floater.string> + <floater.string name="VoiceInviteAdHoc"> + har sluttet sig til stemme chat opkald med en konference chat. + </floater.string> + <text name="question"> + Ønsker du at forlade [CURRENT_CHAT] og slutte dig til denne stemme chat? + </text> + <button label="Acceptér" label_selected="Acceptér" name="Accept"/> + <button label="Afvis" label_selected="Afvis" name="Reject"/> + <button label="Start IM" name="Start IM"/> +</floater> diff --git a/indra/newview/skins/default/xui/da/floater_inspect.xml b/indra/newview/skins/default/xui/da/floater_inspect.xml index 0610e9408f..d0dca8863a 100644 --- a/indra/newview/skins/default/xui/da/floater_inspect.xml +++ b/indra/newview/skins/default/xui/da/floater_inspect.xml @@ -1,10 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="inspect" title="INSPECÉR OBJEKTER"> +<floater name="inspect" title="UNDERSØG OBJEKT"> + <floater.string name="timeStamp"> + [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] + </floater.string> <scroll_list name="object_list" tool_tip="Vælg et objekt fra listen for at markere det"> - <column label="Objekt navn" name="object_name"/> - <column label="Objekt ejer" name="owner_name"/> - <column label="Bygget af" name="creator_name"/> - <column label="Lavet den " name="creation_date"/> + <scroll_list.columns label="Objekt navn" name="object_name"/> + <scroll_list.columns label="Objekt ejer" name="owner_name"/> + <scroll_list.columns label="Bygget af" name="creator_name"/> + <scroll_list.columns label="Lavet den " name="creation_date"/> </scroll_list> <button label="Se profil for ejer..." label_selected="" name="button owner" tool_tip="Se profilen for ejeren af det markerede objekt på listen"/> <button label="Se profil for bygger..." label_selected="" name="button creator" tool_tip="Se profilen for den beboer der har bygget det markerede objekt på listen"/> diff --git a/indra/newview/skins/default/xui/da/floater_inventory.xml b/indra/newview/skins/default/xui/da/floater_inventory.xml index 8bfe7164d0..d80051fb84 100644 --- a/indra/newview/skins/default/xui/da/floater_inventory.xml +++ b/indra/newview/skins/default/xui/da/floater_inventory.xml @@ -1,47 +1,16 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Inventory" title="BEHOLDNING"> - <search_editor label="Skriv her for at søge" name="inventory search editor" /> - <tab_container name="inventory filter tabs"> - <inventory_panel label="Alle ting" name="All Items" /> - <inventory_panel label="Nye ting" name="Recent Items" /> - </tab_container> - <menu_bar name="Inventory Menu"> - <menu label="Filer" name="File"> - <menu_item_call label="Åben" name="Open" /> - <menu_item_call label="Nyt vindue" name="New Window" /> - <menu_item_call label="Vis filtre" name="Show Filters" /> - <menu_item_call label="Nulstil filtre" name="Reset Current" /> - <menu_item_call label="Luk alle mapper" name="Close All Folders" /> - <menu_item_call label="Tøm papirkurv" name="Empty Trash" /> - </menu> - <menu label="Opret" name="Create"> - <menu_item_call label="Ny mappe" name="New Folder" /> - <menu_item_call label="Nyt script" name="New Script" /> - <menu_item_call label="Ny note" name="New Note" /> - <menu_item_call label="Ny bevægelse" name="New Gesture" /> - <menu name="New Clothes"> - <menu_item_call label="Ny trøje" name="New Shirt" /> - <menu_item_call label="Nye bukser" name="New Pants" /> - <menu_item_call label="Nye sko" name="New Shoes" /> - <menu_item_call label="Nye strømper" name="New Socks" /> - <menu_item_call label="Ny jakke" name="New Jacket" /> - <menu_item_call label="Ny nederdel" name="New Skirt" /> - <menu_item_call label="Nye handsker" name="New Gloves" /> - <menu_item_call label="Ny undertrøje" name="New Undershirt" /> - <menu_item_call label="Nye underbukser" name="New Underpants" /> - </menu> - <menu name="New Body Parts"> - <menu_item_call label="Ny figur" name="New Shape" /> - <menu_item_call label="Ny hud" name="New Skin" /> - <menu_item_call label="Nyt hår" name="New Hair" /> - <menu_item_call label="Nye øjne" name="New Eyes" /> - </menu> - </menu> - <menu label="Sortér" name="Sort"> - <menu_item_check label="Efter navn" name="By Name" /> - <menu_item_check label="Efter dato" name="By Date" /> - <menu_item_check label="Altid mapper efter navn" name="Folders Always By Name" /> - <menu_item_check label="System-mapper i toppen" name="System Folders To Top" /> - </menu> - </menu_bar> + <floater.string name="Title"> + Beholdning + </floater.string> + <floater.string name="TitleFetching"> + Beholdning (henter [ITEM_COUNT] genstande...) [FILTER] + </floater.string> + <floater.string name="TitleCompleted"> + Beholdning ([ITEM_COUNT] genstande) [FILTER] + </floater.string> + <floater.string name="Fetched"> + Hentet + </floater.string> + <panel label="Beholdningspanel" name="Inventory Panel"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml index fbcf202c54..fa36fab762 100644 --- a/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml @@ -1,5 +1,20 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="item properties" title="EGENSKABER FOR OBJEKT I BEHOLDNING"> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="item properties" title="OPLYSNINGER OM BEHOLDNINGSGENSTAND"> + <floater.string name="unknown"> + (ukendt) + </floater.string> + <floater.string name="public"> + (offentlig) + </floater.string> + <floater.string name="you_can"> + Du kan: + </floater.string> + <floater.string name="owner_can"> + Ejer kan: + </floater.string> + <floater.string name="acquiredDate"> + [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] + </floater.string> <text name="LabelItemNameTitle"> Navn: </text> @@ -12,14 +27,14 @@ <text name="LabelCreatorName"> Nicole Linden </text> - <button label="Profil..." label_selected="" name="BtnCreator" /> + <button label="Profil..." label_selected="" name="BtnCreator"/> <text name="LabelOwnerTitle"> Ejer: </text> <text name="LabelOwnerName"> Thrax Linden </text> - <button label="Profil..." label_selected="" name="BtnOwner" /> + <button label="Profil..." label_selected="" name="BtnOwner"/> <text name="LabelAcquiredTitle"> Erhvervet: </text> @@ -27,55 +42,32 @@ Wed May 24 12:50:46 2006 </text> <text name="OwnerLabel"> - Du kan: - </text> - <check_box label="Redigere" name="CheckOwnerModify" /> - <check_box label="Kopiere" name="CheckOwnerCopy" /> - <check_box label="Sælge/give væk" name="CheckOwnerTransfer" /> - <text name="BaseMaskDebug"> - S: - </text> - <text name="OwnerMaskDebug"> - E: + Dig: </text> - <text name="GroupMaskDebug"> - G: + <check_box label="Redigér" name="CheckOwnerModify"/> + <check_box label="Kopiere" name="CheckOwnerCopy"/> + <check_box label="Sælg" name="CheckOwnerTransfer"/> + <text name="AnyoneLabel"> + Enhver: </text> - <text name="EveryoneMaskDebug"> - A: + <check_box label="Kopiér" name="CheckEveryoneCopy"/> + <text name="GroupLabel"> + Gruppe: </text> - <text name="NextMaskDebug"> - N: - </text> - <check_box label="Del med gruppe" name="CheckShareWithGroup" /> - <check_box label="Tillad alle at kopiere" name="CheckEveryoneCopy" /> + <check_box label="Del" name="CheckShareWithGroup"/> <text name="NextOwnerLabel"> - Næste ejer kan: - </text> - <check_box label="Redigere" name="CheckNextOwnerModify" /> - <check_box label="Kopiere" name="CheckNextOwnerCopy" /> - <check_box label="Sælge/Give væk" name="CheckNextOwnerTransfer" /> - <text name="SaleLabel"> - Markér ting: + Næste ejer: + </text> + <check_box label="Redigér" name="CheckNextOwnerModify"/> + <check_box label="Kopiere" name="CheckNextOwnerCopy"/> + <check_box label="Sælg" name="CheckNextOwnerTransfer"/> + <check_box label="Til salg" name="CheckPurchase"/> + <combo_box name="combobox sale copy"> + <combo_box.item label="Kopiér" name="Copy"/> + <combo_box.item label="Original" name="Original"/> + </combo_box> + <spinner label="Pris:" name="Edit Cost"/> + <text name="CurrencySymbol"> + L$ </text> - <check_box label="Til salg" name="CheckPurchase" /> - <radio_group name="RadioSaleType"> - <radio_item name="radio" label="Original" /> - <radio_item name="radio2" label="Kopi" /> - </radio_group> - <text name="TextPrice"> - Pris: L$ - </text> - <string name="unknown"> - (ukendt) - </string> - <string name="public"> - (offentlig) - </string> - <string name="you_can"> - Du kan: - </string> - <string name="owner_can"> - Ejer kan: - </string> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_joystick.xml b/indra/newview/skins/default/xui/da/floater_joystick.xml index 4954b7b619..49e1397e9f 100644 --- a/indra/newview/skins/default/xui/da/floater_joystick.xml +++ b/indra/newview/skins/default/xui/da/floater_joystick.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Joystick" title="JOYSTICK OPSÆTNING"> - <check_box name="enable_joystick" label="Aktiver Joystick:"/> + <check_box label="Aktiver Joystick:" name="enable_joystick"/> <spinner label="X akse mapping" name="JoystickAxis1"/> <spinner label="Y akse mapping" name="JoystickAxis2"/> <spinner label="Z akse mapping" name="JoystickAxis0"/> @@ -14,9 +14,9 @@ <text name="Control Modes:"> Kontrollér: </text> - <check_box name="JoystickAvatarEnabled" label="Avatar"/> - <check_box name="JoystickBuildEnabled" label="Build"/> - <check_box name="JoystickFlycamEnabled" label="Flycam"/> + <check_box label="Avatar" name="JoystickAvatarEnabled"/> + <check_box label="Build" name="JoystickBuildEnabled"/> + <check_box label="Flycam" name="JoystickFlycamEnabled"/> <text name="XScale"> X følsomhed </text> diff --git a/indra/newview/skins/default/xui/da/floater_lagmeter.xml b/indra/newview/skins/default/xui/da/floater_lagmeter.xml index bcf15ea926..149d174c34 100644 --- a/indra/newview/skins/default/xui/da/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/da/floater_lagmeter.xml @@ -1,152 +1,151 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_lagmeter" title="LAG MÅLER"> - <button label="" label_selected="" name="client_lagmeter" tool_tip="Status for klient lag"/> - <text name="client"> - Klient: - </text> - <text name="client_text"> - Normal - </text> - <button label="" label_selected="" name="network_lagmeter" tool_tip="Network lag status"/> - <text name="network"> - Netværk: - </text> - <text name="network_text"> - Normal - </text> - <button label="" label_selected="" name="server_lagmeter" tool_tip="Status for server lag"/> - <text name="server"> - Server: - </text> - <text name="server_text"> - Normal - </text> - <button label="?" name="server_help"/> - <button label=">>" name="minimize"/> - <string name="max_title_msg"> +<floater name="floater_lagmeter" title="LAG METER"> + <floater.string name="max_title_msg"> Lag måler - </string> - <string name="max_width_px"> + </floater.string> + <floater.string name="max_width_px"> 360 - </string> - <string name="min_title_msg"> + </floater.string> + <floater.string name="min_title_msg"> Lag - </string> - <string name="min_width_px"> + </floater.string> + <floater.string name="min_width_px"> 90 - </string> - <string name="client_text_msg"> + </floater.string> + <floater.string name="client_text_msg"> Klient - </string> - <string name="client_frame_rate_critical_fps"> + </floater.string> + <floater.string name="client_frame_rate_critical_fps"> 10 - </string> - <string name="client_frame_rate_warning_fps"> + </floater.string> + <floater.string name="client_frame_rate_warning_fps"> 15 - </string> - <string name="client_frame_time_window_bg_msg"> + </floater.string> + <floater.string name="client_frame_time_window_bg_msg"> Normal, vindue i baggrund - </string> - <string name="client_frame_time_critical_msg"> + </floater.string> + <floater.string name="client_frame_time_critical_msg"> Klients billeder/sek under [CLIENT_FRAME_RATE_CRITICAL] - </string> - <string name="client_frame_time_warning_msg"> + </floater.string> + <floater.string name="client_frame_time_warning_msg"> Klients billeder/sek mellem [CLIENT_FRAME_RATE_CRITICAL] og [CLIENT_FRAME_RATE_WARNING] - </string> - <string name="client_frame_time_normal_msg"> + </floater.string> + <floater.string name="client_frame_time_normal_msg"> Normal - </string> - <string name="client_draw_distance_cause_msg"> + </floater.string> + <floater.string name="client_draw_distance_cause_msg"> Mulig årsag: 'Vis afstand' sat for højt i grafik indstillinger - </string> - <string name="client_texture_loading_cause_msg"> + </floater.string> + <floater.string name="client_texture_loading_cause_msg"> Mulig årsag: Billeder hentes - </string> - <string name="client_texture_memory_cause_msg"> + </floater.string> + <floater.string name="client_texture_memory_cause_msg"> Mulig årsag: For mange billeder i hukommelse - </string> - <string name="client_complex_objects_cause_msg"> + </floater.string> + <floater.string name="client_complex_objects_cause_msg"> Mulig årsag: For mange komplekse objekter i scenariet - </string> - <string name="network_text_msg"> + </floater.string> + <floater.string name="network_text_msg"> Netværk - </string> - <string name="network_packet_loss_critical_pct"> + </floater.string> + <floater.string name="network_packet_loss_critical_pct"> 10 - </string> - <string name="network_packet_loss_warning_pct"> + </floater.string> + <floater.string name="network_packet_loss_warning_pct"> 5 - </string> - <string name="network_packet_loss_critical_msg"> + </floater.string> + <floater.string name="network_packet_loss_critical_msg"> Forbindelsen mister over [NETWORK_PACKET_LOSS_CRITICAL]% pakker - </string> - <string name="network_packet_loss_warning_msg"> + </floater.string> + <floater.string name="network_packet_loss_warning_msg"> Forbindelsen mister [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% pakker - </string> - <string name="network_performance_normal_msg"> + </floater.string> + <floater.string name="network_performance_normal_msg"> Normal - </string> - <string name="network_ping_critical_ms"> + </floater.string> + <floater.string name="network_ping_critical_ms"> 600 - </string> - <string name="network_ping_warning_ms"> + </floater.string> + <floater.string name="network_ping_warning_ms"> 300 - </string> - <string name="network_ping_critical_msg"> + </floater.string> + <floater.string name="network_ping_critical_msg"> Forbindelsens ping tider er over [NETWORK_PING_CRITICAL] ms - </string> - <string name="network_ping_warning_msg"> + </floater.string> + <floater.string name="network_ping_warning_msg"> Forbindelsens ping tider er [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms - </string> - <string name="network_packet_loss_cause_msg"> + </floater.string> + <floater.string name="network_packet_loss_cause_msg"> Muligvis dårlig forbindelse eller 'båndbredde' sat for højt i netværksopsætning. - </string> - <string name="network_ping_cause_msg"> + </floater.string> + <floater.string name="network_ping_cause_msg"> Muligvis dårlig forbindelse eller fil delings program. - </string> - <string name="server_text_msg"> + </floater.string> + <floater.string name="server_text_msg"> Server - </string> - <string name="server_frame_rate_critical_fps"> + </floater.string> + <floater.string name="server_frame_rate_critical_fps"> 20 - </string> - <string name="server_frame_rate_warning_fps"> + </floater.string> + <floater.string name="server_frame_rate_warning_fps"> 30 - </string> - <string name="server_single_process_max_time_ms"> + </floater.string> + <floater.string name="server_single_process_max_time_ms"> 20 - </string> - <string name="server_frame_time_critical_msg"> + </floater.string> + <floater.string name="server_frame_time_critical_msg"> Simulator framerate er under [SERVER_FRAME_RATE_CRITICAL] - </string> - <string name="server_frame_time_warning_msg"> + </floater.string> + <floater.string name="server_frame_time_warning_msg"> Simulator framerate er mellem [SERVER_FRAME_RATE_CRITICAL] og [SERVER_FRAME_RATE_WARNING] - </string> - <string name="server_frame_time_normal_msg"> + </floater.string> + <floater.string name="server_frame_time_normal_msg"> Normal - </string> - <string name="server_physics_cause_msg"> + </floater.string> + <floater.string name="server_physics_cause_msg"> Mulig årsag: For mange fysiske objekter - </string> - <string name="server_scripts_cause_msg"> + </floater.string> + <floater.string name="server_scripts_cause_msg"> Mulig årsag: For mange objekter med script - </string> - <string name="server_net_cause_msg"> + </floater.string> + <floater.string name="server_net_cause_msg"> Mulig årsag: For meget netværks trafik - </string> - <string name="server_agent_cause_msg"> + </floater.string> + <floater.string name="server_agent_cause_msg"> Mulig årsag: For mange avatarer i bevægelse i regionen - </string> - <string name="server_images_cause_msg"> + </floater.string> + <floater.string name="server_images_cause_msg"> Mulig årsag: For mange billed udregninger - </string> - <string name="server_generic_cause_msg"> + </floater.string> + <floater.string name="server_generic_cause_msg"> Mulig årsag: Simulator belastning for stor - </string> - <string name="smaller_label"> + </floater.string> + <floater.string name="smaller_label"> >> - </string> - <string name="bigger_label"> + </floater.string> + <floater.string name="bigger_label"> << - </string> + </floater.string> + <button label="" label_selected="" name="client_lagmeter" tool_tip="Status for klient lag"/> + <text name="client"> + Klient + </text> + <text name="client_text"> + Normal + </text> + <button label="" label_selected="" name="network_lagmeter" tool_tip="Network lag status"/> + <text name="network"> + Netværk + </text> + <text name="network_text"> + Normal + </text> + <button label="" label_selected="" name="server_lagmeter" tool_tip="Status for server lag"/> + <text name="server"> + Server + </text> + <text name="server_text"> + Normal + </text> + <button label=">>" name="minimize" tool_tip="Ændre størrelse"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_lsl_guide.xml b/indra/newview/skins/default/xui/da/floater_lsl_guide.xml index ebc86c5c73..2b008f133c 100644 --- a/indra/newview/skins/default/xui/da/floater_lsl_guide.xml +++ b/indra/newview/skins/default/xui/da/floater_lsl_guide.xml @@ -1,7 +1,7 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="script ed float" title="LSL WIKI"> - <check_box label="Følg markøreren" name="lock_check" /> - <combo_box label="Lås" name="history_combo" left_delta="114" width="70"/> - <button label="Tilbage" name="back_btn" /> - <button label="Frem" name="fwd_btn" /> + <check_box label="Følg markøreren" name="lock_check"/> + <combo_box label="Lås" left_delta="114" name="history_combo" width="70"/> + <button label="Tilbage" name="back_btn"/> + <button label="Frem" name="fwd_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_media_settings.xml b/indra/newview/skins/default/xui/da/floater_media_settings.xml new file mode 100644 index 0000000000..67c122b9d5 --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_media_settings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="media_settings" title="MEDIA INDSTILLINGER"> + <button label="OK" label_selected="OK" name="OK"/> + <button label="Annullér" label_selected="Annullér" name="Cancel"/> + <button label="Anvend" label_selected="Anvend" name="Apply"/> +</floater> diff --git a/indra/newview/skins/default/xui/da/floater_nearby_chat.xml b/indra/newview/skins/default/xui/da/floater_nearby_chat.xml new file mode 100644 index 0000000000..ef4e4cbe7e --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_nearby_chat.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="nearby_chat" title="CHAT NÆRVED"/> diff --git a/indra/newview/skins/default/xui/da/floater_openobject.xml b/indra/newview/skins/default/xui/da/floater_openobject.xml index 5875b7a967..92fdd1e0a6 100644 --- a/indra/newview/skins/default/xui/da/floater_openobject.xml +++ b/indra/newview/skins/default/xui/da/floater_openobject.xml @@ -1,10 +1,8 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="objectcontents" title="OBJEKT INDHOLD"> <text name="object_name"> [DESC]: </text> - <button label="Kopiér til beholdning" label_selected="Kopiér til beholdning" - name="copy_to_inventory_button" /> - <button label="Kopiér og tag på" label_selected="Kopiér og tag på" - name="copy_and_wear_button" /> + <button label="Kopiér til beholdning" label_selected="Kopiér til beholdning" name="copy_to_inventory_button"/> + <button label="Kopiér og tag på" label_selected="Kopiér og tag på" name="copy_and_wear_button"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_outgoing_call.xml b/indra/newview/skins/default/xui/da/floater_outgoing_call.xml new file mode 100644 index 0000000000..5c98d9855f --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_outgoing_call.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="outgoing call" title="KALDER"> + <floater.string name="localchat"> + Stemme chat nærved + </floater.string> + <floater.string name="anonymous"> + anonym + </floater.string> + <floater.string name="VoiceInviteP2P"> + kalder op. + </floater.string> + <floater.string name="VoiceInviteAdHoc"> + har sluttet sig til stemmechat med en konference chat. + </floater.string> + <text name="connecting"> + Tilslutter til [CALLEE_NAME] + </text> + <text name="calling"> + Kalder [CALLEE_NAME] + </text> + <text name="noanswer"> + Intet svar. Prøv igen senere. + </text> + <text name="leaving"> + Forlader [CURRENT_CHAT]. + </text> + <button label="Annullér" label_selected="Annullér" name="Cancel"/> +</floater> diff --git a/indra/newview/skins/default/xui/da/floater_pay.xml b/indra/newview/skins/default/xui/da/floater_pay.xml index f39cfa4871..b2cdc0bfe7 100644 --- a/indra/newview/skins/default/xui/da/floater_pay.xml +++ b/indra/newview/skins/default/xui/da/floater_pay.xml @@ -1,21 +1,25 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Give Money" title=""> - <button label="L$1" label_selected="L$1" name="fastpay 1" /> - <button label="L$5" label_selected="L$5" name="fastpay 5" /> - <button label="L$10" label_selected="L$10" name="fastpay 10" /> - <button label="L$20" label_selected="L$20" name="fastpay 20" /> - <button label="Betal" label_selected="Betal" name="pay btn" /> - <button label="Annullér" label_selected="Annullér" name="cancel btn" /> - <text name="payee_label" left="5" width="81"> - Betal beboer: + <string name="payee_group"> + Betal gruppe + </string> + <string name="payee_resident"> + Betal beboer + </string> + <text left="5" name="payee_label" width="81"> + Betal: </text> + <icon name="icon_person" tool_tip="Person"/> <text name="payee_name"> [FIRST] [LAST] </text> - <text name="fastpay text"> - Hurtig betal: - </text> - <text name="amount text" left="4" > - Beløb: + <button label="L$1" label_selected="L$1" name="fastpay 1"/> + <button label="L$5" label_selected="L$5" name="fastpay 5"/> + <button label="L$10" label_selected="L$10" name="fastpay 10"/> + <button label="L$20" label_selected="L$20" name="fastpay 20"/> + <text left="4" name="amount text"> + eler vælg beløb: </text> + <button label="Betal" label_selected="Betal" name="pay btn"/> + <button label="Annullér" label_selected="Annullér" name="cancel btn"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_pay_object.xml b/indra/newview/skins/default/xui/da/floater_pay_object.xml index 09e2e3f5d0..f74e097da2 100644 --- a/indra/newview/skins/default/xui/da/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/da/floater_pay_object.xml @@ -1,30 +1,29 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Give Money" title=""> - <text name="payee_group"> - Betal gruppe: - </text> - <text name="payee_resident"> - Betal beboer: - </text> + <string name="payee_group"> + Betal gruppe + </string> + <string name="payee_resident"> + Betal beboer + </string> + <icon name="icon_person" tool_tip="Person"/> <text name="payee_name"> [FIRST] [LAST] </text> <text name="object_name_label"> Via objekt: </text> + <icon name="icon_object" tool_tip="Objekter"/> <text name="object_name_text"> ... </text> - <text name="fastpay text"> - Hurtig betal: - </text> + <button label="L$1" label_selected="L$1" name="fastpay 1"/> + <button label="L$5" label_selected="L$5" name="fastpay 5"/> + <button label="L$10" label_selected="L$10" name="fastpay 10"/> + <button label="L$20" label_selected="L$20" name="fastpay 20"/> <text name="amount text"> - Beløb: + Eller vælg beløb: </text> - <button label="L$1" label_selected="L$1" name="fastpay 1" /> - <button label="L$5" label_selected="L$5" name="fastpay 5" /> - <button label="L$10" label_selected="L$10" name="fastpay 10" /> - <button label="L$20" label_selected="L$20" name="fastpay 20" /> - <button label="Betal" label_selected="Betal" name="pay btn" /> - <button label="Annullér" label_selected="Annullér" name="cancel btn" /> + <button label="Betal" label_selected="Betal" name="pay btn"/> + <button label="Annullér" label_selected="Annullér" name="cancel btn"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_preview_event.xml b/indra/newview/skins/default/xui/da/floater_preview_event.xml index 584085fea0..3e870b58ae 100644 --- a/indra/newview/skins/default/xui/da/floater_preview_event.xml +++ b/indra/newview/skins/default/xui/da/floater_preview_event.xml @@ -1,2 +1,6 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="event_preview" title="EVENT INFORMATION" /> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="event_preview" title="EVENT INFORMATION"> + <floater.string name="Title"> + Event: [NAME] + </floater.string> +</floater> diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture.xml index 0053cb852f..bfa3c150a9 100644 --- a/indra/newview/skins/default/xui/da/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/da/floater_preview_gesture.xml @@ -1,14 +1,29 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="gesture_preview"> - <string name="stop_txt"> + <floater.string name="step_anim"> + Animation til afspilning: + </floater.string> + <floater.string name="step_sound"> + Lyd til afspilning: + </floater.string> + <floater.string name="step_chat"> + Sig: + </floater.string> + <floater.string name="step_wait"> + Vent: + </floater.string> + <floater.string name="stop_txt"> Stop - </string> - <string name="preview_txt"> + </floater.string> + <floater.string name="preview_txt"> Vis - </string> - <string name="none_text"> + </floater.string> + <floater.string name="none_text"> -- Intet -- - </string> + </floater.string> + <floater.string name="Title"> + Bevægelse: [NAME] + </floater.string> <text name="desc_label"> Beskrivelse: </text> @@ -23,33 +38,27 @@ Genvejstast: </text> <combo_box label="Ingen" name="modifier_combo" width="60"/> - <combo_box label="Ingen" name="key_combo" left_delta="70" width="60"/> + <combo_box label="Ingen" left_delta="70" name="key_combo" width="60"/> <text name="library_label"> Type: </text> + <scroll_list name="library_list"/> + <button label="Tilføj >>" name="add_btn"/> <text name="steps_label"> Trin: </text> - <scroll_list name="library_list"> - Animation -Lyd -Chat -Vent - </scroll_list> - <button label="Tilføj >>" name="add_btn"/> - <button label="Flyt op" name="up_btn"/> - <button label="Flyt ned" name="down_btn"/> + <button label="Op" name="up_btn"/> + <button label="Ned" name="down_btn"/> <button label="Fjern" name="delete_btn"/> - <text name="help_label"> - Alle trin vil ske samtidigt, -medmindre du tilføjer vente trin. - </text> <radio_group name="animation_trigger_type"> - <radio_item name="start" label="Start" /> - <radio_item name="stop" label="Stop" /> + <radio_item label="Start" name="start"/> + <radio_item label="Stop" name="stop"/> </radio_group> <check_box label="Indtil animation er færdig" name="wait_anim_check"/> <check_box label="tid i sekunder" name="wait_time_check"/> + <text name="help_label"> + Alle trin vil ske samtidigt, medmindre du tilføjer vente trin. + </text> <check_box label="Aktiv" name="active_check" tool_tip="Aktive bevægelser kan blive aktiveret ved at skrive deress udløser tekst eller ved at trykke på genvejstaste. Bevægelser vil normalt være inaktive hvis der allerede findes en tilsvarende genvejstaste."/> <button label="Vis" name="preview_btn"/> <button label="Gem" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml new file mode 100644 index 0000000000..9892a92e4c --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Gesture" title="BEVÆGELSE GENVEJ"/> diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml new file mode 100644 index 0000000000..4d4cca1d90 --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Gesture" title="GENVEJ BEVÆGELSER"> + <text name="trigger_label"> + Chat: + </text> + <text name="key_label"> + Tastatur: + </text> + <combo_box label="Intet" name="modifier_combo"/> + <combo_box label="Intet" name="key_combo"/> + <text name="replace_text" tool_tip="Erstat udløser ord med disse ord. For eksempel uløser "hello" erstat med "hej" vil ændre chat 'Jeg ville bare sige hello' til 'Jeg ville bare sige hej' samtidig med bevægelsen afspilles!"> + Erstat: + </text> + <line_editor name="replace_editor" tool_tip="Erstat udløser ord med disse ord. For eksempel uløser "hello" erstat med "hej" vil ændre chat 'Jeg ville bare sige hello' til 'Jeg ville bare sige hej' samtidig med bevægelsen afspilles!"/> +</floater> diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml new file mode 100644 index 0000000000..9892a92e4c --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Gesture" title="BEVÆGELSE GENVEJ"/> diff --git a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml index 7258824878..2ebec4462f 100644 --- a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml @@ -1,16 +1,22 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview notecard" title="NOTE:"> - <button label="Gem" label_selected="Gem" name="Save"/> + <floater.string name="no_object"> + Kunne ikke finde objekt der indeholder denne note. + </floater.string> + <floater.string name="not_allowed"> + Du har ikke rettigheder til at se denne note. + </floater.string> + <floater.string name="Title"> + Note: [NAME] + </floater.string> + <floater.string label="Gem" label_selected="Gem" name="Save"> + Gem + </floater.string> <text name="desc txt"> Beskrivelse: </text> <text_editor name="Notecard Editor"> Indlæser... </text_editor> - <string name="no_object"> - Kunne ikke finde objekt der indeholder denne note. - </string> - <string name="not_allowed"> - Du har ikke tilladelse til at læse denne note. - </string> + <button label="Gem" label_selected="Gem" name="Save"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_preview_texture.xml b/indra/newview/skins/default/xui/da/floater_preview_texture.xml index 250659f249..ab7ddbcc72 100644 --- a/indra/newview/skins/default/xui/da/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/da/floater_preview_texture.xml @@ -1,9 +1,44 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview_texture"> + <floater.string name="Title"> + Tekstur: [NAME] + </floater.string> + <floater.string name="Copy"> + Kopiér til beholdning + </floater.string> <text name="desc txt"> Beskrivelse: </text> <text name="dimensions"> - Størrelse: [WIDTH] x [HEIGHT] + [WIDTH]px x [HEIGHT]px </text> + <combo_box name="combo_aspect_ratio" tool_tip="Forhåndsvisning med et bestemt billedformat"> + <combo_item name="Unconstrained"> + Ikke låst + </combo_item> + <combo_item name="1:1" tool_tip="Typisk valg til gruppe logo eller "Real world" profil billede"> + 1:1 + </combo_item> + <combo_item name="4:3" tool_tip="Typisk valg til din "Second Life Profil" billede"> + 4:3 + </combo_item> + <combo_item name="10:7" tool_tip="Typisk valg til billeder i annoncer, landemærker og søgninger"> + 10:7 + </combo_item> + <combo_item name="3:2" tool_tip="Typisk valg til "Om land" billede"> + 3:2 + </combo_item> + <combo_item name="16:10"> + 16:10 + </combo_item> + <combo_item name="16:9" tool_tip="Typisk valg til favorit billeder i profil"> + 16:9 + </combo_item> + <combo_item name="2:1"> + 2:1 + </combo_item> + </combo_box> + <button label="OK" name="keep"/> + <button label="Annullér" name="discard"/> + <button label="Gem som" name="save_tex_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/da/floater_script_debug_panel.xml new file mode 100644 index 0000000000..e70a30fa24 --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_script_debug_panel.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="script" short_title="[ALL SCRIPTS]" title="[ALL SCRIPTS]"/> diff --git a/indra/newview/skins/default/xui/da/floater_script_preview.xml b/indra/newview/skins/default/xui/da/floater_script_preview.xml index ede277bbd2..1e8d869716 100644 --- a/indra/newview/skins/default/xui/da/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/da/floater_script_preview.xml @@ -1,5 +1,8 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="preview lsl text" title="SCRIPT: ROTATION SCRIPT"> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="preview lsl text" title="SCRIPT: ROTATIONS SCRIPT"> + <floater.string name="Title"> + Script: [NAME] + </floater.string> <text name="desc txt"> Beskrivelse: </text> diff --git a/indra/newview/skins/default/xui/da/floater_script_search.xml b/indra/newview/skins/default/xui/da/floater_script_search.xml index 62f311be6e..f1605cac34 100644 --- a/indra/newview/skins/default/xui/da/floater_script_search.xml +++ b/indra/newview/skins/default/xui/da/floater_script_search.xml @@ -1,9 +1,9 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="script search" title="SCRIPT SØGNING"> - <check_box label="Store/små bogstaver har ingen betydning" name="case_text" /> - <button label="Søg" label_selected="Søg" name="search_btn" /> - <button label="Erstat" label_selected="Erstat" name="replace_btn" /> - <button label="Erstat alle" label_selected="Erstat alle" name="replace_all_btn" /> + <check_box label="Store/små bogstaver har ingen betydning" name="case_text"/> + <button label="Søg" label_selected="Søg" name="search_btn"/> + <button label="Erstat" label_selected="Erstat" name="replace_btn"/> + <button label="Erstat alle" label_selected="Erstat alle" name="replace_all_btn"/> <text name="txt"> Søg </text> diff --git a/indra/newview/skins/default/xui/da/floater_sell_land.xml b/indra/newview/skins/default/xui/da/floater_sell_land.xml index fcbe0abe08..873e6d7995 100644 --- a/indra/newview/skins/default/xui/da/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/da/floater_sell_land.xml @@ -1,62 +1,65 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="sell land" title="SÆLG LAND"> - <scroll_container name="profile_scroll"> - <panel name="scroll_content_panel"> - <text name="info_parcel_label"> - Parcel: - </text> - <text name="info_parcel"> - PARCEL NAME - </text> - <text name="info_size_label"> - Størrelse: - </text> - <text name="info_size"> - [AREA] m² - </text> - <text name="info_action"> - Sælg denne parcel: - </text> - <text name="price_label"> - Sæt en pris: - </text> - <text name="price_text"> - Vælg en passende pris for jorden. - </text> - <text name="price_ld"> - L$ - </text> - <text name="price_per_m"> - (L$[PER_METER] pr. kvadratmeter) - </text> - <text name="sell_to_label"> - Sælg denne jord til: - </text> - <text name="sell_to_text"> - Vælg om du vil sælge til hvem som helst eller en specifik køber. - </text> - <combo_box name="sell_to"> - <combo_box.item name="--selectone--" label="Vælg --" /> - <combo_box.item name="Anyone" label="Alle" /> - <combo_box.item name="Specificuser:" label="Specifik bruger:" /> - </combo_box> - <button label="Vælg..." name="sell_to_select_agent" /> - <text name="sell_objects_label"> - Sælg objekter sammen med jorden? - </text> - <text name="sell_objects_text"> - Dine objekter der kan videregives sælges med jorden. - </text> - <radio_group name="sell_objects"> - <radio_item name="no" label="Nej, behold ejerskab til objekterne" /> - <radio_item name="yes" label="Ja, sælg objekter med jorden" /> - </radio_group> - <button label="Vis objekter" name="show_objects" /> - <text name="nag_message_label"> - HUSK: Alle salg er endegyldige. - </text> - <button label="Sæt land til salg" name="sell_btn" /> - <button label="Annullér" name="cancel_btn" /> - </panel> - </scroll_container> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <text name="info_parcel_label"> + Parcel: + </text> + <text name="info_parcel"> + PARCEL + </text> + <text name="info_size_label"> + Størrelse: + </text> + <text name="info_size"> + [AREA] m² + </text> + <text name="info_action"> + For at sælge: + </text> + <text name="price_label"> + 1. Sæt en pris: + </text> + <text name="price_text"> + Vælg en passende pris for jorden. + </text> + <text name="price_ld"> + L$ + </text> + <line_editor name="price"> + 0 + </line_editor> + <text name="price_per_m"> + (L$[PER_METER] pr. m²) + </text> + <text name="sell_to_label"> + 2. Sælg denne parcel til: + </text> + <text name="sell_to_text"> + Vælg om du vil sælge til hvem som helst eller en specifik køber. + </text> + <combo_box name="sell_to"> + <combo_box.item label="- Vælg -" name="--selectone--"/> + <combo_box.item label="Enhver" name="Anyone"/> + <combo_box.item label="Specifik person:" name="Specificuser:"/> + </combo_box> + <button label="Vælg" name="sell_to_select_agent"/> + <text name="sell_objects_label"> + 3. Sælg objekter sammen med jorden? + </text> + <text name="sell_objects_text"> + Objekter der kan vidergives og som tilhører ejer af land på parcel vil skifte ejerskab + </text> + <radio_group name="sell_objects"> + <radio_item label="Nej, behold ejerskab til objekter" name="no"/> + <radio_item label="Ja, sælg objekter med jorden" name="yes"/> + </radio_group> + <button label="Vis objekter" name="show_objects"/> + <text name="nag_message_label"> + HUSK: Alle salg er endegyldige. + </text> + <button label="Sæt land til salg" name="sell_btn"/> + <button label="Annullér" name="cancel_btn"/> + </panel> + </scroll_container> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_settings_debug.xml b/indra/newview/skins/default/xui/da/floater_settings_debug.xml index c1429ed3a3..41cf100d94 100644 --- a/indra/newview/skins/default/xui/da/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/da/floater_settings_debug.xml @@ -1,13 +1,13 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="settings_debug" title="TEKNISKE INDSTILLINGER"> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="settings_debug" title="DEBUG INDSTILLINGER"> <combo_box name="boolean_combo"> - <combo_box.item name="TRUE" label="TRUE (Valgt)" /> - <combo_box.item name="FALSE" label="FALSE (Fravalgt)" /> + <combo_box.item label="SANDT" name="TRUE"/> + <combo_box.item label="FALSK" name="FALSE"/> </combo_box> - <color_swatch label="Farve" name="color_swatch" /> - <spinner label="x" name="val_spinner_1" /> - <spinner label="x" name="val_spinner_2" /> - <spinner label="x" name="val_spinner_3" /> - <spinner label="x" name="val_spinner_4" /> - <button label="Sæt til standard" name="default_btn" /> + <color_swatch label="Farve" name="val_color_swatch"/> + <spinner label="x" name="val_spinner_1"/> + <spinner label="x" name="val_spinner_2"/> + <spinner label="x" name="val_spinner_3"/> + <spinner label="x" name="val_spinner_4"/> + <button label="Sæt til standard" name="default_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_snapshot.xml b/indra/newview/skins/default/xui/da/floater_snapshot.xml index 3eed869db4..5e8c64e21f 100644 --- a/indra/newview/skins/default/xui/da/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/da/floater_snapshot.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="SE FOTO"> +<floater name="Snapshot" title="FOTO FORHÅNDSVINSNING"> <text name="type_label"> Hvor skal foto hen? </text> <radio_group label="Snapshot type" name="snapshot_type_radio"> - <radio_item name="postcard" label="Send via e-mail" /> - <radio_item name="texture" label="Gem i din beholdning (L$[AMOUNT])" /> - <radio_item name="local" label="Gem på din computer" /> + <radio_item label="Send via e-mail" name="postcard"/> + <radio_item label="Gem i din beholdning (L$[AMOUNT])" name="texture"/> + <radio_item label="Gem på din computer" name="local"/> </radio_group> <text name="file_size_label"> Fil størrelse: [SIZE] KB @@ -15,12 +15,12 @@ <button label="Send" name="send_btn"/> <button label="Gem (L$[AMOUNT])" name="upload_btn"/> <flyout_button label="Gem" name="save_btn" tool_tip="Gem billede i på din computer"> - <flyout_button_item name="save_item" label="Gem"/> - <flyout_button_item name="saveas_item" label="Gem som..."/> + <flyout_button_item label="Gem" name="save_item"/> + <flyout_button_item label="Gem som..." name="saveas_item"/> </flyout_button> <button label="Annullér" name="discard_btn"/> - <button label="Mere >>" name="more_btn" tool_tip="Avancerede valg"/> - <button label="<< Mindre" name="less_btn" tool_tip="Avancerede valg"/> + <button label="Mere >>" name="more_btn" tool_tip="Avancerede muligheder"/> + <button label="<< Mindre" name="less_btn" tool_tip="Avancerede muligheder"/> <text name="type_label2"> Størrelse </text> @@ -28,45 +28,45 @@ Format </text> <combo_box label="Opløsning" name="postcard_size_combo"> - <combo_box.item name="CurrentWindow" label="Aktuelle vindue"/> - <combo_box.item name="640x480" label="640x480"/> - <combo_box.item name="800x600" label="800x600"/> - <combo_box.item name="1024x768" label="1024x768"/> - <combo_box.item name="Custom" label="Manuel"/> + <combo_box.item label="Aktuelle vindue" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="Manuel" name="Custom"/> </combo_box> <combo_box label="Opløsning" name="texture_size_combo"> - <combo_box.item name="CurrentWindow" label="Aktuelle vindue"/> - <combo_box.item name="Small(128x128)" label="Lille (128x128)"/> - <combo_box.item name="Medium(256x256)" label="Medium (256x256)"/> - <combo_box.item name="Large(512x512)" label="Stor (512x512)"/> - <combo_box.item name="Custom" label="Manuel"/> + <combo_box.item label="Aktuelle vindue" name="CurrentWindow"/> + <combo_box.item label="Lille (128x128)" name="Small(128x128)"/> + <combo_box.item label="Medium (256x256)" name="Medium(256x256)"/> + <combo_box.item label="Stor (512x512)" name="Large(512x512)"/> + <combo_box.item label="Manuel" name="Custom"/> </combo_box> <combo_box label="Opløsning" name="local_size_combo"> - <combo_box.item name="CurrentWindow" label="Aktuelle vindue"/> - <combo_box.item name="320x240" label="320x240"/> - <combo_box.item name="640x480" label="640x480"/> - <combo_box.item name="800x600" label="800x600"/> - <combo_box.item name="1024x768" label="1024x768"/> - <combo_box.item name="1280x1024" label="1280x1024"/> - <combo_box.item name="1600x1200" label="1600x1200"/> - <combo_box.item name="Custom" label="Manuelt"/> + <combo_box.item label="Aktuelle vindue" name="CurrentWindow"/> + <combo_box.item label="320x240" name="320x240"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1280x1024" name="1280x1024"/> + <combo_box.item label="1600x1200" name="1600x1200"/> + <combo_box.item label="Manuelt" name="Custom"/> </combo_box> <combo_box label="Fil-format" name="local_format_combo" width="76"> - <combo_box.item name="PNG" label="PNG"/> - <combo_box.item name="JPEG" label="JPEG"/> - <combo_box.item name="BMP" label="BMP"/> + <combo_box.item label="PNG" name="PNG"/> + <combo_box.item label="JPEG" name="JPEG"/> + <combo_box.item label="BMP" name="BMP"/> </combo_box> - <spinner label="Bredde" name="snapshot_width" label_width="41" width="101"/> - <spinner label="Højde" name="snapshot_height" label_width="32" width="92" left="117"/> + <spinner label="Bredde" label_width="41" name="snapshot_width" width="101"/> + <spinner label="Højde" label_width="32" left="117" name="snapshot_height" width="92"/> <check_box label="Fasthold proportioner" name="keep_aspect_check"/> <slider label="Billed-kvalitet" name="image_quality_slider"/> <text name="layer_type_label"> Benyt: </text> <combo_box label="Billedlag" name="layer_types"> - <combo_box.item name="Colors" label="Farver"/> - <combo_box.item name="Depth" label="Dybde"/> - <combo_box.item name="ObjectMattes" label="Materinger"/> + <combo_box.item label="Farver" name="Colors"/> + <combo_box.item label="Dybde" name="Depth"/> + <combo_box.item label="Materinger" name="ObjectMattes"/> </combo_box> <check_box label="Vis brugerflade på foto" name="ui_check"/> <check_box label="Vis HUD objekter på foto" name="hud_check"/> diff --git a/indra/newview/skins/default/xui/da/floater_sys_well.xml b/indra/newview/skins/default/xui/da/floater_sys_well.xml new file mode 100644 index 0000000000..b5cecf93e9 --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_sys_well.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="sys_well_window" title="BESKEDER"> + <string name="title_im_well_window"> + IM SESSIONER + </string> + <string name="title_notification_well_window"> + BESKEDER + </string> +</floater> diff --git a/indra/newview/skins/default/xui/da/floater_telehub.xml b/indra/newview/skins/default/xui/da/floater_telehub.xml index bf31da9515..5a0e89aa98 100644 --- a/indra/newview/skins/default/xui/da/floater_telehub.xml +++ b/indra/newview/skins/default/xui/da/floater_telehub.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="telehub" title="TELEHUB"> <text name="status_text_connected"> Telehub forbundet til objekt [OBJECT] @@ -12,17 +12,14 @@ <text name="help_text_not_connected"> 230;lg objekt og klik 'Forbind telehub'. </text> - <button label="Forbind telehub" name="connect_btn" /> - <button label="Afslut" name="disconnect_btn" /> + <button label="Forbind telehub" name="connect_btn"/> + <button label="Afslut" name="disconnect_btn"/> <text name="spawn_points_text" width="300"> Ankomst punkter (positioner, ikke objekter): </text> - <button label="Tilføj punkt" name="add_spawn_point_btn" /> - <button label="Fjern punkt" name="remove_spawn_point_btn" /> + <button label="Tilføj punkt" name="add_spawn_point_btn"/> + <button label="Fjern punkt" name="remove_spawn_point_btn"/> <text name="spawn_point_help"> - Vælg objekt og klik på 'Tilføj punkt'for at angive -position. Du kan derefter flytte eller slette -objektet. Positioner er i forhold til telehub center. -Vælg emne i listen for at vise position i verden. + Vælg objekt og klik på 'Tilføj punkt' for at angive position. Du kan derefter flytte eller slette objektet. Positioner er i forhold til telehub center. Vælg emne i listen for at vise position i verden. </text> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_top_objects.xml b/indra/newview/skins/default/xui/da/floater_top_objects.xml index 0cfbe77def..3f19350e30 100644 --- a/indra/newview/skins/default/xui/da/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/da/floater_top_objects.xml @@ -1,33 +1,33 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="top_objects" title="INDLÆSER..."> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="top_objects" title="Top objekter"> <text name="title_text"> Henter... </text> <scroll_list name="objects_list"> - <column label="Point" name="score" /> - <column label="Navn" name="name" /> - <column label="Ejer" name="owner" /> - <column label="Lokation" name="location" /> - <column label="Tid" name="time" /> - <column label="Mono tid" name="mono_time" /> + <column label="Point" name="score"/> + <column label="Navn" name="name"/> + <column label="Ejer" name="owner"/> + <column label="Lokation" name="location"/> + <column label="Tid" name="time"/> + <column label="Mono tid" name="mono_time"/> </scroll_list> <text name="id_text"> Objekt ID: </text> - <button label="Vis pejlelys" name="show_beacon_btn" /> + <button label="Vis pejlelys" name="show_beacon_btn"/> <text name="obj_name_text"> Objekt navn: </text> - <button label="Filter" name="filter_object_btn" /> + <button label="Filter" name="filter_object_btn"/> <text name="owner_name_text"> - Ejers navn: + Ejer: </text> - <button label="Filter" name="filter_owner_btn" /> - <button label="Returnér valgte" name="return_selected_btn" /> - <button label="Returnér alle" name="return_all_btn" /> - <button label="Afbryd valgte" name="disable_selected_btn" /> - <button label="Afbryd alle" name="disable_all_btn" /> - <button label="Genopfrisk" name="refresh_btn" /> + <button label="Filter" name="filter_owner_btn"/> + <button label="Returnér valgte" name="return_selected_btn"/> + <button label="Returnér alle" name="return_all_btn"/> + <button label="Afbryd valgte" name="disable_selected_btn"/> + <button label="Afbryd alle" name="disable_all_btn"/> + <button label="Genopfrisk" name="refresh_btn"/> <string name="top_scripts_title"> Mest krævende scripts </string> diff --git a/indra/newview/skins/default/xui/da/floater_tos.xml b/indra/newview/skins/default/xui/da/floater_tos.xml index 9a348ca7bf..77906f0f46 100644 --- a/indra/newview/skins/default/xui/da/floater_tos.xml +++ b/indra/newview/skins/default/xui/da/floater_tos.xml @@ -1,11 +1,10 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="modal container" title=""> - <button label="Fortsæt" label_selected="Fortsæt" name="Continue" /> - <button label="Annullér" label_selected="Annullér" name="Cancel" /> - <check_box label="Jeg accepterer vilkårene for brug af tjenesten" name="agree_chk" /> + <button label="Fortsæt" label_selected="Fortsæt" name="Continue"/> + <button label="Annullér" label_selected="Annullér" name="Cancel"/> + <check_box label="Jeg accepterer vilkårene for brug af tjenesten" name="agree_chk"/> <text name="tos_heading"> - Læs venligst de almindelige bestemmelser og vilkår igennem, for at fortsætte til [SECOND_LIFE] -skal du acceptere vilkårene. + Læs venligst de almindelige bestemmelser og vilkår igennem, for at fortsætte til [SECOND LIFE] skal du acceptere vilkårene. </text> <text_editor name="tos_text"> TOS_TEXT diff --git a/indra/newview/skins/default/xui/da/floater_water.xml b/indra/newview/skins/default/xui/da/floater_water.xml index 63880b4a69..103feaa879 100644 --- a/indra/newview/skins/default/xui/da/floater_water.xml +++ b/indra/newview/skins/default/xui/da/floater_water.xml @@ -1,32 +1,32 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Water Floater" title="AVANCERET OPSÆTNING AF VAND"> <text name="KeyFramePresetsText"> Vand opsætninger: </text> - <button label="Ny" label_selected="Ny" name="WaterNewPreset" /> - <button label="Gem" label_selected="Gem" name="WaterSavePreset" /> - <button label="Slet" label_selected="Slet" name="WaterDeletePreset" /> + <button label="Ny" label_selected="Ny" name="WaterNewPreset"/> + <button label="Gem" label_selected="Gem" name="WaterSavePreset"/> + <button label="Slet" label_selected="Slet" name="WaterDeletePreset"/> <tab_container name="Water Tabs"> <panel label="Opsætning" name="Settings"> <text name="BHText"> Vandtåge farve </text> - <button label="?" name="WaterFogColorHelp" /> - <color_swatch label="" name="WaterFogColor" tool_tip="Click to open Color Picker" /> + <button label="?" name="WaterFogColorHelp"/> + <color_swatch label="" name="WaterFogColor" tool_tip="Klik for at åbne farvevælger"/> <text name="WaterFogDensText"> Tåge tæthedskarakteristik </text> - <button label="?" name="WaterFogDensityHelp" /> - <slider label="" name="WaterFogDensity" /> + <button label="?" name="WaterFogDensityHelp"/> + <slider label="" name="WaterFogDensity"/> <text name="WaterUnderWaterFogModText"> Tilretning undervandståge </text> - <button label="?" name="WaterUnderWaterFogModHelp" /> - <slider label="" name="WaterUnderWaterFogMod" /> + <button label="?" name="WaterUnderWaterFogModHelp"/> + <slider label="" name="WaterUnderWaterFogMod"/> <text name="BDensText"> Lille bølge reflektionsskala </text> - <button label="?" name="WaterNormalScaleHelp" /> + <button label="?" name="WaterNormalScaleHelp"/> <text name="BHText2"> 1 </text> @@ -36,65 +36,65 @@ <text name="BHText4"> 3 </text> - <slider label="" name="WaterNormalScaleX" /> - <slider label="" name="WaterNormalScaleY" /> - <slider label="" name="WaterNormalScaleZ" /> + <slider label="" name="WaterNormalScaleX"/> + <slider label="" name="WaterNormalScaleY"/> + <slider label="" name="WaterNormalScaleZ"/> <text name="HDText"> Spredningsskala </text> - <button label="?" name="WaterFresnelScaleHelp" /> - <slider label="" name="WaterFresnelScale" /> + <button label="?" name="WaterFresnelScaleHelp"/> + <slider label="" name="WaterFresnelScale"/> <text name="FresnelOffsetText"> Spredning offset </text> - <button label="?" name="WaterFresnelOffsetHelp" /> - <slider label="" name="WaterFresnelOffset" /> + <button label="?" name="WaterFresnelOffsetHelp"/> + <slider label="" name="WaterFresnelOffset"/> <text name="DensMultText"> Lysbrydning fra oven </text> - <button label="?" name="WaterScaleAboveHelp" /> - <slider label="" name="WaterScaleAbove" /> + <button label="?" name="WaterScaleAboveHelp"/> + <slider label="" name="WaterScaleAbove"/> <text name="WaterScaleBelowText"> Lysbrydning fra neden </text> - <button label="?" name="WaterScaleBelowHelp" /> - <slider label="" name="WaterScaleBelow" /> + <button label="?" name="WaterScaleBelowHelp"/> + <slider label="" name="WaterScaleBelow"/> <text name="MaxAltText"> Udviskning </text> - <button label="?" name="WaterBlurMultiplierHelp" /> - <slider label="" name="WaterBlurMult" /> + <button label="?" name="WaterBlurMultiplierHelp"/> + <slider label="" name="WaterBlurMult"/> </panel> <panel label="Billede" name="Waves"> <text name="BHText"> Retning for store bølger </text> - <button label="?" name="WaterWave1Help" /> + <button label="?" name="WaterWave1Help"/> <text name="WaterWave1DirXText"> X </text> <text name="WaterWave1DirYText"> Y </text> - <slider label="" name="WaterWave1DirX" /> - <slider label="" name="WaterWave1DirY" /> + <slider label="" name="WaterWave1DirX"/> + <slider label="" name="WaterWave1DirY"/> <text name="BHText2"> Retning for små bølger </text> - <button label="?" name="WaterWave2Help" /> + <button label="?" name="WaterWave2Help"/> <text name="WaterWave2DirXText"> X </text> <text name="WaterWave2DirYText"> Y </text> - <slider label="" name="WaterWave2DirX" /> - <slider label="" name="WaterWave2DirY" /> + <slider label="" name="WaterWave2DirX"/> + <slider label="" name="WaterWave2DirY"/> <text name="BHText3"> Tekstur map </text> - <button label="?" name="WaterNormalMapHelp" /> - <texture_picker label="" name="WaterNormalMap" /> + <button label="?" name="WaterNormalMapHelp"/> + <texture_picker label="" name="WaterNormalMap"/> </panel> </tab_container> <string name="WLDefaultWaterNames"> diff --git a/indra/newview/skins/default/xui/da/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/da/floater_whitelist_entry.xml new file mode 100644 index 0000000000..d2f618579d --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_whitelist_entry.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="whitelist_entry"> + <text name="media_label"> + Indtast en URL eller et URL mønster for at tilføje til listen med godkendte domæner + </text> + <line_editor name="whitelist_entry" tool_tip="Indtast en URL eller et URL mønster for at godkende side(r)"/> + <button label="OK" name="ok_btn"/> + <button label="Annullér" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/da/inspect_object.xml b/indra/newview/skins/default/xui/da/inspect_object.xml new file mode 100644 index 0000000000..8cbcf6cac8 --- /dev/null +++ b/indra/newview/skins/default/xui/da/inspect_object.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<!-- + Not can_close / no title to avoid window chrome + Single instance - only have one at a time, recycle it each spawn +--> +<floater name="inspect_object"> + <string name="Creator"> + Af [CREATOR] + </string> + <string name="CreatorAndOwner"> + af [CREATOR] +ejer [OWNER] + </string> + <string name="Price"> + L$[AMOUNT] + </string> + <string name="PriceFree"> + Gratis! + </string> + <string name="Touch"> + Berør + </string> + <string name="Sit"> + Sid + </string> + <button label="Køb" name="buy_btn"/> + <button label="Betal" name="pay_btn"/> + <button label="Tag kopi" name="take_free_copy_btn"/> + <button label="Berør" name="touch_btn"/> + <button label="Sid" name="sit_btn"/> + <button label="Åben" name="open_btn"/> + <icon name="secure_browsing" tool_tip="Sikker Browsing"/> + <button label="Mere" name="more_info_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/da/mime_types_linux.xml b/indra/newview/skins/default/xui/da/mime_types_linux.xml new file mode 100644 index 0000000000..69a0fb23f6 --- /dev/null +++ b/indra/newview/skins/default/xui/da/mime_types_linux.xml @@ -0,0 +1,217 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<mimetypes name="default"> + <widgetset name="web"> + <label name="web_label"> + Web indhold + </label> + <tooltip name="web_tooltip"> + Dette sted har ikke noget web indhold + </tooltip> + <playtip name="web_playtip"> + Vis web indhold + </playtip> + </widgetset> + <widgetset name="movie"> + <label name="movie_label"> + Film + </label> + <tooltip name="movie_tooltip"> + Der er en film der kan afspilles her + </tooltip> + <playtip name="movie_playtip"> + Afspil film + </playtip> + </widgetset> + <widgetset name="image"> + <label name="image_label"> + Billede + </label> + <tooltip name="image_tooltip"> + Der er et billede på dette sted + </tooltip> + <playtip name="image_playtip"> + Vis stedets billede + </playtip> + </widgetset> + <widgetset name="audio"> + <label name="audio_label"> + Lyd + </label> + <tooltip name="audio_tooltip"> + Der er lyd på dette sted + </tooltip> + <playtip name="audio_playtip"> + Afspil lyden for dette sted + </playtip> + </widgetset> + <scheme name="rtsp"> + <label name="rtsp_label"> + Realtids streaming + </label> + </scheme> + <mimetype name="blank"> + <label name="blank_label"> + - Ingen - + </label> + </mimetype> + <mimetype name="none/none"> + <label name="none/none_label"> + - Ingen - + </label> + </mimetype> + <mimetype name="audio/*"> + <label name="audio2_label"> + Lyd + </label> + </mimetype> + <mimetype name="video/*"> + <label name="video2_label"> + Video + </label> + </mimetype> + <mimetype name="image/*"> + <label name="image2_label"> + Billede + </label> + </mimetype> + <mimetype name="video/vnd.secondlife.qt.legacy"> + <label name="vnd.secondlife.qt.legacy_label"> + Film (QuickTime) + </label> + </mimetype> + <mimetype name="application/javascript"> + <label name="application/javascript_label"> + Javascript + </label> + </mimetype> + <mimetype name="application/ogg"> + <label name="application/ogg_label"> + Ogg Lyd/Video + </label> + </mimetype> + <mimetype name="application/pdf"> + <label name="application/pdf_label"> + PDF Dokument + </label> + </mimetype> + <mimetype name="application/postscript"> + <label name="application/postscript_label"> + Postscript Dokument + </label> + </mimetype> + <mimetype name="application/rtf"> + <label name="application/rtf_label"> + Rich Text (RTF) + </label> + </mimetype> + <mimetype name="application/smil"> + <label name="application/smil_label"> + Synchronized Multimedia Integration Language (SMIL) + </label> + </mimetype> + <mimetype name="application/xhtml+xml"> + <label name="application/xhtml+xml_label"> + Hjemmeside (XHTML) + </label> + </mimetype> + <mimetype name="application/x-director"> + <label name="application/x-director_label"> + Macromedia Director + </label> + </mimetype> + <mimetype name="audio/mid"> + <label name="audio/mid_label"> + Lyd (MIDI) + </label> + </mimetype> + <mimetype name="audio/mpeg"> + <label name="audio/mpeg_label"> + Lyd (MP3) + </label> + </mimetype> + <mimetype name="audio/x-aiff"> + <label name="audio/x-aiff_label"> + Lyd (AIFF) + </label> + </mimetype> + <mimetype name="audio/x-wav"> + <label name="audio/x-wav_label"> + Lyd (WAV) + </label> + </mimetype> + <mimetype name="image/bmp"> + <label name="image/bmp_label"> + Billede (BMP) + </label> + </mimetype> + <mimetype name="image/gif"> + <label name="image/gif_label"> + Billede (GIF) + </label> + </mimetype> + <mimetype name="image/jpeg"> + <label name="image/jpeg_label"> + Billede (JPEG) + </label> + </mimetype> + <mimetype name="image/png"> + <label name="image/png_label"> + Billede (PNG) + </label> + </mimetype> + <mimetype name="image/svg+xml"> + <label name="image/svg+xml_label"> + Billede (SVG) + </label> + </mimetype> + <mimetype name="image/tiff"> + <label name="image/tiff_label"> + Billede (TIFF) + </label> + </mimetype> + <mimetype name="text/html"> + <label name="text/html_label"> + Hjemmeside + </label> + </mimetype> + <mimetype name="text/plain"> + <label name="text/plain_label"> + Tekst + </label> + </mimetype> + <mimetype name="text/xml"> + <label name="text/xml_label"> + XML + </label> + </mimetype> + <mimetype name="video/mpeg"> + <label name="video/mpeg_label"> + Film (MPEG) + </label> + </mimetype> + <mimetype name="video/mp4"> + <label name="video/mp4_label"> + Film (MP4) + </label> + </mimetype> + <mimetype name="video/quicktime"> + <label name="video/quicktime_label"> + Film (QuickTime) + </label> + </mimetype> + <mimetype name="video/x-ms-asf"> + <label name="video/x-ms-asf_label"> + Film (Windows Media ASF) + </label> + </mimetype> + <mimetype name="video/x-ms-wmv"> + <label name="video/x-ms-wmv_label"> + Film (Windows Media WMV) + </label> + </mimetype> + <mimetype name="video/x-msvideo"> + <label name="video/x-msvideo_label"> + Film (AVI) + </label> + </mimetype> +</mimetypes> diff --git a/indra/newview/skins/default/xui/da/panel_active_object_row.xml b/indra/newview/skins/default/xui/da/panel_active_object_row.xml new file mode 100644 index 0000000000..9c27ea7fe2 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_active_object_row.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_activeim_row"> + <string name="unknown_obj"> + Ukendt objekt + </string> + <text name="object_name"> + Unavngivet objekt + </text> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml new file mode 100644 index 0000000000..ab2e7a6e31 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_im_control_panel"> + <panel name="panel_call_buttons"> + <button label="Opkald" name="call_btn"/> + <button label="Forlad samtale" name="end_call_btn"/> + <button label="Stemmekontroller" name="voice_ctrls_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_bottomtray.xml b/indra/newview/skins/default/xui/da/panel_bottomtray.xml new file mode 100644 index 0000000000..2085840bb5 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_bottomtray.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="bottom_tray"> + <string name="SpeakBtnToolTip"> + Slukker/tænder mikrofon + </string> + <string name="VoiceControlBtnToolTip"> + Skjuler/viser stemme kontrol panel + </string> + <layout_stack name="toolbar_stack"> + <layout_panel name="gesture_panel"> + <gesture_combo_box label="Bevægelse" name="Gesture" tool_tip="Skjuler/viser bevægelser"/> + </layout_panel> + <layout_panel name="movement_panel"> + <button label="Flyt" name="movement_btn" tool_tip="Vis/skjul bevægelseskontroller"/> + </layout_panel> + <layout_panel name="cam_panel"> + <button label="Vis" name="camera_btn" tool_tip="Vis/Skjul kamerakontroller"/> + </layout_panel> + <layout_panel name="snapshot_panel"> + <button label="" name="snapshots" tool_tip="Tag foto"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_alpha.xml b/indra/newview/skins/default/xui/da/panel_edit_alpha.xml new file mode 100644 index 0000000000..3826e8a228 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_edit_alpha.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_alpha_panel"> + <panel name="avatar_alpha_color_panel"> + <texture_picker label="Alpha - nedre" name="Lower Alpha" tool_tip="Klik for at vælge et billede"/> + <texture_picker label="Alpha - øvre" name="Upper Alpha" tool_tip="Klik for at vælge et billede"/> + <texture_picker label="Alpha - hoved" name="Head Alpha" tool_tip="Klik for at vælge et billede"/> + <texture_picker label="Alpha - øje" name="Eye Alpha" tool_tip="Klik for at vælge et billede"/> + <texture_picker label="Alpha - hår" name="Hair Alpha" tool_tip="Klik for at vælge et billede"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_eyes.xml b/indra/newview/skins/default/xui/da/panel_edit_eyes.xml new file mode 100644 index 0000000000..9c0d77c370 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_edit_eyes.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_eyes_panel"> + <panel name="avatar_eye_color_panel"> + <texture_picker label="Iris" name="Iris" tool_tip="Klik for at vælge billede"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="eyes_main_tab" title="Øjne"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_gloves.xml b/indra/newview/skins/default/xui/da/panel_edit_gloves.xml new file mode 100644 index 0000000000..1d3ba061bc --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_edit_gloves.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_gloves_panel"> + <panel name="avatar_gloves_color_panel"> + <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge bilede"/> + <color_swatch label="Farve/nuance" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="gloves_main_tab" title="Handsker"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_jacket.xml b/indra/newview/skins/default/xui/da/panel_edit_jacket.xml new file mode 100644 index 0000000000..4c9973c0bd --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_edit_jacket.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_jacket_panel"> + <panel name="avatar_jacket_color_panel"> + <texture_picker label="Stof foroven" name="Upper Fabric" tool_tip="Klik for at vælge et billede"/> + <texture_picker label="Stof forneden" name="Lower Fabric" tool_tip="Klik for at vælge et billede"/> + <color_swatch label="Farve/nuance" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="jacket_main_tab" title="Jakke"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_pants.xml b/indra/newview/skins/default/xui/da/panel_edit_pants.xml new file mode 100644 index 0000000000..bcb1450258 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_edit_pants.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_pants_panel"> + <panel name="avatar_pants_color_panel"> + <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et bilede"/> + <color_swatch label="Farve/Nuance" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="pants_main_tab" title="Bukser"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_pick.xml b/indra/newview/skins/default/xui/da/panel_edit_pick.xml new file mode 100644 index 0000000000..41db2be5e8 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_edit_pick.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Redigér Pick" name="panel_edit_pick"> + <text name="title"> + Redigér favorit + </text> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <icon label="" name="edit_icon" tool_tip="Klik for at vælge billede"/> + <text name="Name:"> + Titel: + </text> + <text name="description_label"> + Beskrivelse: + </text> + <text name="location_label"> + Lokation: + </text> + <text name="pick_location"> + henter... + </text> + <button label="Sæt til nuværende lokation" name="set_to_curr_location_btn"/> + </panel> + </scroll_container> + <panel label="bottom_panel" name="bottom_panel"> + <button label="Gem [WHAT]" name="save_changes_btn"/> + <button label="Annullér" name="cancel_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_shoes.xml b/indra/newview/skins/default/xui/da/panel_edit_shoes.xml new file mode 100644 index 0000000000..54a0cc01a4 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_edit_shoes.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_shoes_panel"> + <panel name="avatar_shoes_color_panel"> + <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/> + <color_swatch label="Farve/nuance" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="shoes_main_tab" title="Sko"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_skin.xml b/indra/newview/skins/default/xui/da/panel_edit_skin.xml new file mode 100644 index 0000000000..46dce354a9 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_edit_skin.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_skin_panel"> + <panel name="avatar_skin_color_panel"> + <texture_picker label="Hoved tatoveringer" name="Head Tattoos" tool_tip="Klik for at vælge et bilede"/> + <texture_picker label="Øvre tatoveringer" name="Upper Tattoos" tool_tip="Klik for at vælge et bilede"/> + <texture_picker label="Nedre tatoveringer" name="Lower Tattoos" tool_tip="Klik for at vælge et bilede"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="skin_color_tab" title="Hudfarve"/> + <accordion_tab name="skin_face_tab" title="Ansigtsdetaljer"/> + <accordion_tab name="skin_makeup_tab" title="Makeup"/> + <accordion_tab name="skin_body_tab" title="Kropsdetaljer"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_socks.xml b/indra/newview/skins/default/xui/da/panel_edit_socks.xml new file mode 100644 index 0000000000..6ef6dad86c --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_edit_socks.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_socks_panel"> + <panel name="avatar_socks_color_panel"> + <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/> + <color_swatch label="Farve/Nuance" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="socks_main_tab" title="Strømper"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_underpants.xml b/indra/newview/skins/default/xui/da/panel_edit_underpants.xml new file mode 100644 index 0000000000..de52146e29 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_edit_underpants.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_underpants_panel"> + <panel name="avatar_underpants_color_panel"> + <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge bilede"/> + <color_swatch label="Farve/nuance" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="underpants_main_tab" title="Underbukser"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/da/panel_edit_undershirt.xml new file mode 100644 index 0000000000..6c2e1f5833 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_edit_undershirt.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_undershirt_panel"> + <panel name="avatar_undershirt_color_panel"> + <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge bilede"/> + <color_swatch label="Farve/nuance" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="undershirt_main_tab" title="Undertrøje"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_wearable.xml b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml new file mode 100644 index 0000000000..12bc120c45 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Kan bæres" name="panel_edit_wearable"> + <string name="edit_shape_title"> + Redigerer kropsbygning + </string> + <string name="edit_skin_title"> + Redigerer hud + </string> + <string name="edit_hair_title"> + Redigerer hår + </string> + <string name="edit_eyes_title"> + Redigerer øjne + </string> + <string name="edit_shirt_title"> + Redigerer trøje + </string> + <string name="edit_pants_title"> + Redigerer bukser + </string> + <string name="edit_shoes_title"> + Redigerer sko + </string> + <string name="edit_socks_title"> + Redigerer strømper + </string> + <string name="edit_jacket_title"> + Redigerer jakke + </string> + <string name="edit_skirt_title"> + Redigerer nederdel + </string> + <string name="edit_gloves_title"> + Redigerer handsker + </string> + <string name="edit_undershirt_title"> + Redigerer undertrøje + </string> + <string name="edit_underpants_title"> + Redigerer underbukser + </string> + <string name="edit_alpha_title"> + Redigerer Alpha maske + </string> + <string name="edit_tattoo_title"> + Redigerer tatovering + </string> + <string name="shape_desc_text"> + Kropsbygning: + </string> + <string name="skin_desc_text"> + Hud: + </string> + <string name="hair_desc_text"> + Hår: + </string> + <string name="eyes_desc_text"> + Øjne: + </string> + <string name="shirt_desc_text"> + Trøje: + </string> + <string name="pants_desc_text"> + Bukser: + </string> + <string name="shoes_desc_text"> + Sko: + </string> + <string name="socks_desc_text"> + Strømper: + </string> + <string name="jacket_desc_text"> + Jakke: + </string> + <string name="skirt_skirt_desc_text"> + Nederdel: + </string> + <string name="gloves_desc_text"> + Handsker: + </string> + <string name="undershirt_desc_text"> + Undertrøje: + </string> + <string name="underpants_desc_text"> + Underbukser: + </string> + <string name="alpha_desc_text"> + Alpha maske: + </string> + <string name="tattoo_desc_text"> + Tatovering: + </string> + <text name="edit_wearable_title" value="Redigerer kropsbygning"/> + <panel label="Trøje" name="wearable_type_panel"> + <text name="description_text" value="Kropsbygning:"/> + </panel> + <panel name="button_panel"> + <button label="Gem som" name="save_as_button"/> + <button label="Vend tilbage" name="revert_button"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_friends.xml b/indra/newview/skins/default/xui/da/panel_friends.xml index 2644b80968..a41eaf20c1 100644 --- a/indra/newview/skins/default/xui/da/panel_friends.xml +++ b/indra/newview/skins/default/xui/da/panel_friends.xml @@ -1,26 +1,20 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="friends"> <string name="Multiple"> - Flere venner... + Flere venner </string> - <scroll_list name="friend_list" - tool_tip="Hold Shift eller Ctrl nede imens du klikker for at vælge flere venner"> - <column name="icon_online_status" tool_tip="Online status" /> - <column label="Name" name="friend_name" tool_tip="Navn" /> - <column name="icon_visible_online" tool_tip="Venner kan se at du er online" /> - <column name="icon_visible_map" tool_tip="Venner kan finde dig på kortet" /> - <column name="icon_edit_mine" - tool_tip="Venner kan rette i, slette eller tage dine objekter" /> - <column name="icon_edit_theirs" tool_tip="Du kan rette i denne vens objekter" /> + <scroll_list name="friend_list" tool_tip="Hold Shift eller Ctrl nede imens du klikker for at vælge flere venner"> + <column name="icon_online_status" tool_tip="Online status"/> + <column label="Name" name="friend_name" tool_tip="Navn"/> + <column name="icon_visible_online" tool_tip="Venner kan se at du er online"/> + <column name="icon_visible_map" tool_tip="Venner kan finde dig på kortet"/> + <column name="icon_edit_mine" tool_tip="Venner kan rette i, slette eller tage dine objekter"/> + <column name="icon_edit_theirs" tool_tip="Du kan rette i denne vens objekter"/> </scroll_list> - <button label="IM" name="im_btn" tool_tip="Skriv en personlig besked (IM)" /> - <button label="Profil" name="profile_btn" - tool_tip="Vis billede, grupper og anden information" /> - <button label="Teleport..." name="offer_teleport_btn" - tool_tip="Tilbyd denne ven at blive teleporteret til din nuværende position" /> - <button label="Betal..." name="pay_btn" - tool_tip="Giv Linden dollars (L$) til denne ven" /> - <button label="Fjern..." name="remove_btn" - tool_tip="Fjern denne beboer fra din venneliste" /> - <button label="Tilføj..." name="add_btn" tool_tip="Tilbyd venskab til denne beboer" /> + <button label="IM" name="im_btn" tool_tip="Skriv en personlig besked (IM)"/> + <button label="Profil" name="profile_btn" tool_tip="Vis billede, grupper og anden information"/> + <button label="Teleport" name="offer_teleport_btn" tool_tip="Tilbyd denne ven at blive teleporteret til din nuværende position"/> + <button label="Betal" name="pay_btn" tool_tip="Giv Linden dollars (L$) til denne ven"/> + <button label="Fjern" name="remove_btn" tool_tip="Fjern denne beboer fra din venneliste"/> + <button label="Tilføj" name="add_btn" tool_tip="Tilbyd venskab til denne beboer"/> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_group_control_panel.xml b/indra/newview/skins/default/xui/da/panel_group_control_panel.xml new file mode 100644 index 0000000000..1db2db45af --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_group_control_panel.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_im_control_panel"> + <button label="Group Profile" name="group_info_btn"/> + <panel name="panel_call_buttons"> + <button label="Opkaldsgruppe" name="call_btn"/> + <button label="Forlad samtale" name="end_call_btn"/> + <button label="Kontroller for åben stemmechat" name="voice_ctrls_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_group_general.xml b/indra/newview/skins/default/xui/da/panel_group_general.xml index 4e98ca2bc2..ec957e6094 100644 --- a/indra/newview/skins/default/xui/da/panel_group_general.xml +++ b/indra/newview/skins/default/xui/da/panel_group_general.xml @@ -1,72 +1,35 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Generelt" name="general_tab"> - <string name="help_text"> - Generel-fanen indeholder generel information om denne gruppe, en liste med ejere og synlige medlemmer, generel-gruppeindstillinger og medlemsmuligheder. - -Bevæg din mus over mulighederne for mere hjælp. - </string> - <string name="group_info_unchanged"> - Generel gruppeinformation er ændret. - </string> - <button label="?" label_selected="?" name="help_button"/> - <line_editor label="Indtast nyt gruppenavn her" name="group_name_editor"/> - <text name="group_name"> - Skriv det nye gruppenavn her - </text> - <text name="prepend_founded_by"> - Grundlagt af - </text> - <text name="founder_name" left_delta="70" > - (venter) - </text> - <text name="group_charter_label"> - Gruppens formål - </text> - <texture_picker label="Gruppe distinktioner" name="insignia" tool_tip="Klik for at vælge et billede"/> + <panel.string name="help_text"> + Generelt-fanen indeholder generel information om denne gruppe, en liste med ejere og synlige medlemmer, generel-gruppeindstillinger og medlemsmuligheder. Bevæg din mus over mulighederne for mere hjælp. + </panel.string> + <panel.string name="group_info_unchanged"> + Generel gruppeinformation er ændret + </panel.string> + <panel.string name="incomplete_member_data_str"> + Henter medlemsinformationer + </panel.string> <text_editor name="charter"> Gruppens formål </text_editor> - <button label="Tilmeld (L$0)" label_selected="Tilmeld (L$0)" name="join_button"/> - <button label="Detaljeret visning" label_selected="Detaljeret visning" name="info_button"/> - <text name="text_owners_and_visible_members"> - Ejere & synlige medlemmer - </text> - <text name="text_owners_are_shown_in_bold"> - (Ejere er vist med fed skrift) - </text> <name_list name="visible_members"> - <name_list.columns label="Medlemsnavn" name="name"/> + <name_list.columns label="Medlem" name="name"/> <name_list.columns label="Titel" name="title"/> - <name_list.columns label="Senest på d." name="online"/> </name_list> - <text name="text_group_preferences"> - Gruppeindstillinger + <text name="active_title_label"> + Min titel </text> + <combo_box name="active_title" tool_tip="Angiver den titel der vises i din avatars navnefelt, når denne gruppe er aktiv"/> + <check_box label="Modtag gruppeinformationer" name="receive_notices" tool_tip="Angiver om du vil modtage informationer fra denne gruppe. Fjern markeringen i boksen hvis gruppen spammer dig."/> + <check_box label="Vis gruppen i min profil" name="list_groups_in_profile" tool_tip="Angiver om du vil vise denne gruppe i dine profilinformationer"/> <panel name="preferences_container"> - <check_box label="Vis i søgning" name="show_in_group_list" tool_tip="Lad folk se denne gruppe i søgeresultater."/> <check_box label="Åben tilmelding" name="open_enrollement" tool_tip="Angiver om denne gruppe tillader nye medlemmer at tilmelde sig, uden de er inviteret."/> - <check_box label="Tilmeldingsgebyr:" name="check_enrollment_fee" tool_tip="Angiver om der kræves et gebyr, for at tilmelde sig gruppen."/> - <spinner name="spin_enrollment_fee" tool_tip="Nye medlemmer skal betale dette gebyr for at tilmelde sig gruppen, når Tilmeldingsgebyr er valgt." width="60" left_delta="130"/> + <check_box label="Tilmeldingsgebyr" name="check_enrollment_fee" tool_tip="Angiver om der kræves et gebyr, for at tilmelde sig gruppen"/> + <spinner label="L$" left_delta="130" name="spin_enrollment_fee" tool_tip="Nye medlemmer skal betale dette gebyr for at tilmelde sig gruppen, når "Tilmeldingsgebyr" er valgt." width="60"/> <combo_box name="group_mature_check" tool_tip="Angiver om din gruppes information anses som 'mature'." width="150"> - <combo_box.item name="select_mature" label="- Vælg indholdsrating -"/> - <combo_box.item name="mature" label="Mature indhold"/> - <combo_box.item name="pg" label="PG indhold"/> + <combo_box.item label="PG indhold" name="pg"/> + <combo_box.item label="Mature indhold" name="mature"/> </combo_box> - <panel name="title_container"> - <text name="active_title_label"> - Min aktive titel - </text> - <combo_box name="active_title" tool_tip="Angiver den titel der vises i din avatars navnefelt, når denne gruppe er aktiv."/> - </panel> - <check_box label="Modtag gruppeinformationer" name="receive_notices" tool_tip="Angiver om du vil modtage informationer fra denne gruppe. Fjern markeringen i boksen hvis gruppen spammer dig."/> - <check_box label="Vis gruppen i min profil" name="list_groups_in_profile" tool_tip="Angiver om du vil vise denne gruppe i dine profilinformationer"/> + <check_box initial_value="true" label="Vis i søgning" name="show_in_group_list" tool_tip="Lad folk se denne gruppe i søgeresultater."/> </panel> - <string name="incomplete_member_data_str"> - Henter medlemsinformationer - </string> - <string name="confirm_group_create_str"> - Creating this group will cost L$100. -Er du virkelig, virkelig, VIRKELIG sikker på, at du vil bruge L$100 på at lave denne gruppe? -Du skal være opmærksom på, at hvis ingen andre indmelder sig i denne gruppe indenfor 48 timer, så vil gruppen blive opløst, og gruppens navn vil ikke være tilgængelig i fremtiden. - </string> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml new file mode 100644 index 0000000000..9940ebbd4d --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Gruppe info" name="GroupInfo"> + <panel.string name="default_needs_apply_text"> + Der er ændringer på denne fane der ikke er gemt + </panel.string> + <panel.string name="want_apply_text"> + Ønsker du at gemme disse ændringer? + </panel.string> + <panel.string name="group_join_btn"> + Tilmeld (L$[AMOUNT]) + </panel.string> + <panel.string name="group_join_free"> + Gratis + </panel.string> + <text name="group_name" value="(Henter...)"/> + <line_editor label="Indtast dit nye gruppenavn her" name="group_name_editor"/> + <texture_picker label="" name="insignia" tool_tip="Klik for at vælge bilede"/> + <text name="prepend_founded_by"> + Grundlægger: + </text> + <name_box initial_value="(finder)" name="founder_name"/> + <text name="join_cost_text"> + Gratis + </text> + <button label="MELD IND NU!" name="btn_join"/> + <accordion name="groups_accordion"> + <accordion_tab name="group_general_tab" title="Generelt"/> + <accordion_tab name="group_roles_tab" title="Roller"/> + <accordion_tab name="group_notices_tab" title="Beskeder"/> + <accordion_tab name="group_land_tab" title="Land/Aktiver"/> + </accordion> + <panel name="button_row"> + <button label="Lav" label_selected="Ny gruppe" name="btn_create"/> + <button label="Gem" label_selected="Gem" name="btn_apply"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_group_invite.xml b/indra/newview/skins/default/xui/da/panel_group_invite.xml index 813007aee0..1e00642c29 100644 --- a/indra/newview/skins/default/xui/da/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/da/panel_group_invite.xml @@ -1,31 +1,30 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Invitér et medlem" name="invite_panel"> + <panel.string name="confirm_invite_owner_str"> + Er du sikker på, at du vil invitere ny(e) ejer(e)? Denne handling er permanent! + </panel.string> + <panel.string name="loading"> + (indlæser...) + </panel.string> + <panel.string name="already_in_group"> + Nogen af avatarerne var allerede i gruppen og blev ikke inviteret + </panel.string> <text name="help_text"> Du kan invitere flere beboere ad gangen til at blive medlem af din gruppe. Klik 'Åben personvælger' for at begynde. </text> - <button label="Åben personvælger" name="add_button" bottom_delta="-30"/> - <name_list name="invitee_list" - tool_tip="Hold Ctrl-tasten nede og klik på beboere for at vælge flere." /> - <button label="Fjern valgte fra listen" name="remove_button" - tool_tip="Fjerner beboere, der er valgt på ovenstående invitationsliste." /> + <button bottom_delta="-30" label="Åben personvælger" name="add_button"/> + <name_list name="invitee_list" tool_tip="Hold Ctrl knappen nede og klik på beboer navne for at vælge flere"/> + <button label="Fjern valgte fra listen" name="remove_button" tool_tip="Fjern beboere valgt ovenfor fra invitationslisten"/> <text name="role_text"> Vælg hvilken rolle, du vil tildele dem: </text> - <combo_box name="role_name" - tool_tip="Vælg fra listen med roller, du har tilladelse til at tildele medlemmerne." /> - <button label="Send invitationer" name="ok_button" /> - <button label="Annullér" name="cancel_button" /> - <string name="confirm_invite_owner_str"> - Er du sikker på, at du vil invitere ny(e) ejer(e)? Denne handling er permanent! - </string> - <!--button bottom="25" font="SansSerifSmall" halign="center" height="20" - label="Send invitationer" left="65" name="ok_button" width="140" /> - <button bottom_delta="-22" font="SansSerifSmall" halign="center" height="20" - label="Annullér" left_delta="0" name="cancel_button" width="140" /--> - <string name="loading"> - (indlæser...) + <combo_box name="role_name" tool_tip="Vælg fra en liste med roller du har ret til at tildele medlemmer"/> + <button label="Send invitationer" name="ok_button"/> + <button label="Annullér" name="cancel_button"/> + <string name="GroupInvitation"> + Gruppe invitation </string> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_group_land_money.xml b/indra/newview/skins/default/xui/da/panel_group_land_money.xml index 636a16f97b..c73d7c807d 100644 --- a/indra/newview/skins/default/xui/da/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/da/panel_group_land_money.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Land & L$" name="land_money_tab"> <string name="help_text"> - Grunde ejet af gruppen er vist sammen med bidragsdetaljer. En advarsel vises indtil Total land i brug er mindre end eller lig med det totale bidrag. Planlægning, detaljer og salgsfaneblade viser information om gruppens økonomi. + En advarsel vises indtil Total land i brug er mindre end eller lig med det totale bidrag. </string> <button label="?" name="help_button"/> <string name="cant_view_group_land_text"> @@ -17,27 +17,27 @@ Gruppeejet land </text> <scroll_list name="group_parcel_list"> - <column label="Grundens navn" name="name"/> + <column label="Parcel" name="name"/> <column label="Region" name="location"/> <column label="Type" name="type"/> <column label="Område" name="area"/> <column label="" name="hidden"/> </scroll_list> - <button label="Vis på kort" label_selected="Vis på kort" name="map_button"/> + <button label="Kort" label_selected="Kort" name="map_button"/> <text name="total_contributed_land_label"> - Total bidrag: + Totalt bidrag: </text> <text name="total_contributed_land_value"> [AREA] m² </text> <text name="total_land_in_use_label"> - Total land i brug: + Totalt land i brug: </text> <text name="total_land_in_use_value"> [AREA] m² </text> <text name="land_available_label"> - Tilgængeligt land: + Ledigt land: </text> <text name="land_available_value"> [AREA] m² @@ -46,40 +46,39 @@ Dit bidrag: </text> <string name="land_contrib_error"> - Ikke muligt at lave dit bidrag til landet. + Ikke muligt at lave dit bidrag til landet </string> <text name="your_contribution_units"> - ( m² ) + m² </text> <text name="your_contribution_max_value"> ([AMOUNT] maks.) </text> <text name="group_over_limit_text"> - Gruppemedlemmer må bidrag med mere, for at understøtte -med det land der bliver brugt. + Gruppemedlemmer må bidrag med mere, for at understøtte med det land der bliver brugt </text> <text name="group_money_heading"> Gruppe L$ </text> <tab_container name="group_money_tab_container"> - <panel label="Planlægning" name="group_money_planning_tab"> + <panel label="PLANLÆGNING" name="group_money_planning_tab"> <text_editor name="group_money_planning_text"> - Beregner... + Henter... </text_editor> </panel> - <panel label="Detaljer" name="group_money_details_tab"> + <panel label="DETALJER" name="group_money_details_tab"> <text_editor name="group_money_details_text"> - Beregner... + Henter... </text_editor> - <button label="< Før" label_selected="< Før" name="earlier_details_button" tool_tip="Gå tilbage i tid"/> - <button label="Efter >" label_selected="Efter >" name="later_details_button" tool_tip="Gå frem i tid"/> + <button label="< Før" label_selected="< Før" name="earlier_details_button" tool_tip="Tilbage"/> + <button label="Efter >" label_selected="Efter >" name="later_details_button" tool_tip="Næste"/> </panel> - <panel label="Salg" name="group_money_sales_tab"> + <panel label="SALG" name="group_money_sales_tab"> <text_editor name="group_money_sales_text"> - Beregner... + Henter... </text_editor> - <button label="< Før" label_selected="< Før" name="earlier_sales_button" tool_tip="Gå tilbage i tid"/> - <button label="Efter >" label_selected="Efter >" name="later_sales_button" tool_tip="Gå frem i tid"/> + <button label="< Før" label_selected="< Før" name="earlier_sales_button" tool_tip="Tilbage"/> + <button label="Efter >" label_selected="Efter >" name="later_sales_button" tool_tip="Næste"/> </panel> </tab_container> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_group_notices.xml b/indra/newview/skins/default/xui/da/panel_group_notices.xml index 9e6aa9eb7c..ec503c37dc 100644 --- a/indra/newview/skins/default/xui/da/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/da/panel_group_notices.xml @@ -1,42 +1,35 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Beskeder" name="notices_tab"> - <string name="help_text"> + <panel.string name="help_text"> Beskeder er en hurtig måde at kommunikere på på tværs i gruppen ved at sende en meddelelse eller en eventuel vedlagt genstand. beskeder sendes kun til gruppemedlemmer i roller som giver evnen til at modtage dem. Du kan slå beskeder fra i Generel-fanebladet. - </string> - <string name="no_notices_text"> - Der er ingen tidligere beskeder. - </string> - <button label="?" label_selected="?" name="help_button" /> - <text name="lbl"> - Arkiv med gruppebeskeder - </text> + </panel.string> + <panel.string name="no_notices_text"> + Der er ikke nogen tidligere beskeder + </panel.string> <text name="lbl2"> - Beskeder er gemt i 14 dage. -Listen er begrænset til 200 beskeder pr. gruppe hver dag. + Beskeder gemmes i 14 dage. +Maksimum er 200 pr. gruppe pr. dag </text> <scroll_list name="notice_list"> - <column label="" name="icon" /> - <column label="Emne" name="subject" /> - <column label="Fra" name="from" /> - <column label="Dato" name="date" /> + <scroll_list.columns label="" name="icon"/> + <scroll_list.columns label="Emne" name="subject"/> + <scroll_list.columns label="Fra" name="from"/> + <scroll_list.columns label="Dato" name="date"/> </scroll_list> <text name="notice_list_none_found"> - Ingen fundet. + Ingen fundet </text> - <button label="Lav ny besked" label_selected="Lav ny besked" name="create_new_notice" /> - <button label="Genopfrisk" label_selected="Genopfrisk liste" name="refresh_notices" /> + <button label="Lav en ny besked" label_selected="Lav ny besked" name="create_new_notice" tool_tip="Lav en ny besked"/> + <button label="Genopfrisk" label_selected="Genopfrisk liste" name="refresh_notices" tool_tip="Genopfrisk beskedliste"/> <panel label="Lav ny besked" name="panel_create_new_notice"> <text name="lbl"> Lav en besked </text> - <text name="lbl2"> - Du kan tilføje et bilag til beskeden ved at trække den fra beholdningen til dette felt. Vedhæftede objekter skal være sat til at kunne kopieres og overføres, og du kan ikke sende en mappe. - </text> <text name="lbl3"> Emne: </text> @@ -46,17 +39,19 @@ Listen er begrænset til 200 beskeder pr. gruppe hver dag. <text name="lbl5"> Vedhæft: </text> - <button label="Fjern bilag" label_selected="Fjern bilag" name="remove_attachment" /> - <button label="Afsend" label_selected="Afsend" name="send_notice" /> - <panel name="drop_target" - tool_tip="Træk en genstand fra beholdningen over på denne boks for at sende den sammen med beskeden. Du skal have tilladelse til at kopiere og overføre genstanden, for at kunne sende den med beskeden." /> + <text name="string"> + Træk og slip en gensand for at vedhæfte den: + </text> + <button label="Fjern" label_selected="Fjern bilag" name="remove_attachment"/> + <button label="Send" label_selected="Send" name="send_notice"/> + <group_drop_target name="drop_target" tool_tip="Træk en genstand fra din beholdning til dette felt for at sende den med denne besked. Du skal have rettigheder til at kopiere og overdrage denne genstand for at kunne vedhæfte den."/> </panel> <panel label="Se tidligere beskeder" name="panel_view_past_notice"> <text name="lbl"> Arkiverede beskeder </text> <text name="lbl2"> - For at sende en ny besked, klik på 'Lav ny besked'-knappen foroven. + For at sende en ny besked, tryk på + knappen </text> <text name="lbl3"> Emne: @@ -64,6 +59,6 @@ Listen er begrænset til 200 beskeder pr. gruppe hver dag. <text name="lbl4"> Besked: </text> - <button label="åben bilag" label_selected="åben bilag" name="open_attachment" /> + <button label="Åben bilag" label_selected="åben bilag" name="open_attachment"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_me.xml b/indra/newview/skins/default/xui/da/panel_me.xml new file mode 100644 index 0000000000..2cfd358d13 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_me.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Min profil" name="panel_me"> + <tab_container name="tabs"> + <panel label="PROFIL" name="panel_profile"/> + <panel label="FAVORITTER" name="panel_picks"/> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_media_settings_general.xml b/indra/newview/skins/default/xui/da/panel_media_settings_general.xml new file mode 100644 index 0000000000..7f1581888d --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_media_settings_general.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Generelt" name="Media Settings General"> + <text name="home_label"> + Hjemmeside: + </text> + <text name="home_fails_whitelist_label"> + (Denne side optræder ikke i godkendte sider) + </text> + <line_editor name="home_url" tool_tip="Hjemmesiden for kilden til dette media"/> + <text name="preview_label"> + Vis + </text> + <text name="current_url_label"> + Nuværende side: + </text> + <text name="current_url" tool_tip="Den nuværende hjemmeside for kilden til dette media" value=""/> + <button label="Nulstil" name="current_url_reset_btn"/> + <check_box initial_value="false" label="Gentag afspil" name="auto_loop"/> + <check_box initial_value="false" label="Første klik medfører interaktion" name="first_click_interact"/> + <check_box initial_value="false" label="Auto zoom" name="auto_zoom"/> + <check_box initial_value="false" label="Afspil automatisk media" name="auto_play"/> + <text name="media_setting_note"> + Note: Beboere kan selv ændre denne indstilling + </text> + <check_box initial_value="false" label="Auto skalér media på objektets overflade" name="auto_scale"/> + <text name="size_label"> + Størrelse: + </text> + <text name="X_label"> + X + </text> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_media_settings_security.xml b/indra/newview/skins/default/xui/da/panel_media_settings_security.xml new file mode 100644 index 0000000000..ee341f9142 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_media_settings_security.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Sikkerhed" name="Media Settings Security"> + <check_box initial_value="false" label="Tillad kun adgang til specifikke URL'er (via "prefix")" name="whitelist_enable"/> + <text name="home_url_fails_some_items_in_whitelist"> + Opslag som hjemmesiden fejler ved er markeret: + </text> + <button label="Tilføj" name="whitelist_add"/> + <button label="Slet" name="whitelist_del"/> + <text name="home_url_fails_whitelist"> + Advarsel: Hjemmesiden angive i "Generelt" fanen er ikke indeholdt i godkendte sider. Den er slået fra, indtil en gyldig værdi er tilføjet. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_my_profile.xml b/indra/newview/skins/default/xui/da/panel_my_profile.xml new file mode 100644 index 0000000000..1dffc73239 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_my_profile.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Profil" name="panel_profile"> + <string name="no_partner_text" value="Ingen"/> + <string name="RegisterDateFormat"> + [REG_DATE] ([AGE]) + </string> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <panel name="second_life_image_panel"> + <icon label="" name="2nd_life_edit_icon" tool_tip="Klik på Rediger Profil knappen nedenfor for at ændre billede"/> + </panel> + <panel name="first_life_image_panel"> + <icon label="" name="real_world_edit_icon" tool_tip="Klik på Rediger Profil knappen nedenfor for at ændre billede"/> + <text name="title_rw_descr_text" value="RL:"/> + </panel> + <text name="me_homepage_text"> + Web: + </text> + <text name="title_member_text" value="Medlem siden:"/> + <text name="title_acc_status_text" value="Konto:"/> + <text name="acc_status_text" value="Beboer. Ingen betalingsinfo"/> + <text name="title_partner_text" value="Partner:"/> + <text name="title_groups_text" value="Grupper:"/> + </panel> + </scroll_container> + <panel name="profile_buttons_panel"> + <button label="Tilføj ven" name="add_friend"/> + <button label="IM" name="im"/> + <button label="Opkald" name="call"/> + <button label="Kort" name="show_on_map_btn"/> + <button label="Teleportér" name="teleport"/> + </panel> + <panel name="profile_me_buttons_panel"> + <button label="Rediger profil" name="edit_profile_btn" tool_tip="Redigér personlig information"/> + <button label="Ændre udseende" name="edit_appearance_btn" tool_tip="Ændre dit udseende: fysiske data, tøj m.v."/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_nearby_chat.xml b/indra/newview/skins/default/xui/da/panel_nearby_chat.xml new file mode 100644 index 0000000000..7f94345976 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_nearby_chat.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<!-- All our XML is utf-8 encoded. --> +<panel name="nearby_chat"> + <panel name="chat_caption"> + <text name="sender_name"> + CHAT NÆRVED + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/da/panel_nearby_chat_bar.xml new file mode 100644 index 0000000000..2aa7ed7c6c --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_nearby_chat_bar.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="chat_bar"> + <string name="min_width"> + 192 + </string> + <string name="max_width"> + 320 + </string> + <line_editor label="Klik her for at chatte." name="chat_box" tool_tip="Tryk på enter for at tale, Ctrl-Enter for at råbe."/> + <button name="show_nearby_chat" tool_tip="Viser/skjuler log for chat nærved"/> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_pick_info.xml b/indra/newview/skins/default/xui/da/panel_pick_info.xml new file mode 100644 index 0000000000..ce05018b5b --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_pick_info.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_pick_info"> + <text name="title" value="Favorit info"/> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <text name="pick_name" value="[name]"/> + <text name="pick_location" value="[loading...]"/> + <text name="pick_desc" value="[description]"/> + </panel> + </scroll_container> + <panel name="buttons"> + <button label="Teleportér" name="teleport_btn"/> + <button label="Kort" name="show_on_map_btn"/> + <button label="Redigér" name="edit_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_place_profile.xml b/indra/newview/skins/default/xui/da/panel_place_profile.xml new file mode 100644 index 0000000000..24316fea14 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_place_profile.xml @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="place_profile"> + <string name="on" value="Til"/> + <string name="off" value="Fra"/> + <string name="anyone" value="Enhver"/> + <string name="available" value="ledig"/> + <string name="allocated" value="fordelt"/> + <string name="title_place" value="Sted profil"/> + <string name="title_teleport_history" value="Teleport historik sted"/> + <string name="not_available" value="(N\A)"/> + <string name="unknown" value="(ukendt)"/> + <string name="public" value="(offentlig)"/> + <string name="none_text" value="(ingen)"/> + <string name="sale_pending_text" value="(Salg igang)"/> + <string name="group_owned_text" value="(Gruppe ejet)"/> + <string name="price_text" value="L$"/> + <string name="area_text" value="m²"/> + <string name="all_residents_text" value="Alle beboere"/> + <string name="group_text" value="Gruppe"/> + <string name="can_resell"> + Købt land i denne region må sælges videre + </string> + <string name="can_not_resell"> + Købt land i denne region må ikke sælges videre + </string> + <string name="can_change"> + Købt jord i denne region må gerne samles eller opdeles. + </string> + <string name="can_not_change"> + Købt jord i denne region må ikke samles eller opdeles. + </string> + <string name="server_update_text"> + Information om dette sted er ikke tilgængelig før en server opdatering. + </string> + <string name="server_error_text"> + Information om dette sted er ikke tilgængelig lige nu, prøv venligst igen senere. + </string> + <string name="server_forbidden_text"> + Information om dette sted er ikke tilgængelig på grund af adgangsbegrænsninger. Check venligst dine rettigheder med stedets ejer. + </string> + <string name="acquired_date"> + [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] + </string> + <text name="title" value="Sted profil"/> + <scroll_container name="place_scroll"> + <panel name="scrolling_panel"> + <text name="owner_label" value="Ejer:"/> + <text name="maturity_value" value="ukendt"/> + <accordion name="advanced_info_accordion"> + <accordion_tab name="parcel_characteristics_tab" title="Parcel"> + <panel> + <text name="rating_label" value="Rating:"/> + <text name="rating_value" value="ukendt"/> + <text name="voice_label" value="Stem:"/> + <text name="voice_value" value="Til"/> + <text name="fly_label" value="Flyve:"/> + <text name="fly_value" value="Til"/> + <text name="push_label" value="Skub:"/> + <text name="push_value" value="Fra"/> + <text name="build_label" value="Byg:"/> + <text name="build_value" value="Til"/> + <text name="scripts_label" value="Scripts:"/> + <text name="scripts_value" value="Til"/> + <text name="damage_label" value="Skade:"/> + <text name="damage_value" value="Fra"/> + <button label="Om land" name="about_land_btn"/> + </panel> + </accordion_tab> + <accordion_tab name="region_information_tab" title="Region"> + <panel> + <text name="region_name_label" value="Region:"/> + <text name="region_type_label" value="Type:"/> + <text name="region_rating_label" value="Rating:"/> + <text name="region_owner_label" value="Ejer:"/> + <text name="region_group_label" value="Gruppe:"/> + <button label="Region/Estate" name="region_info_btn"/> + </panel> + </accordion_tab> + <accordion_tab name="estate_information_tab" title="Estate"> + <panel> + <text name="estate_name_label" value="Estate:"/> + <text name="estate_rating_label" value="Rating:"/> + <text name="estate_owner_label" value="Ejer:"/> + <text name="covenant_label" value="Regler:"/> + </panel> + </accordion_tab> + <accordion_tab name="sales_tab" title="Til salg"> + <panel> + <text name="sales_price_label" value="Pris:"/> + <text name="area_label" value="Areal:"/> + <text name="traffic_label" value="Trafik:"/> + <text name="primitives_label" value="Prims:"/> + <text name="parcel_scripts_label" value="Scripts:"/> + <text name="terraform_limits_label" value="Terraform begrænsninger:"/> + <text name="subdivide_label" value="Mulighed for at Opdele/samle:"/> + <text name="resale_label" value="Mulighed for videresalg:"/> + <text name="sale_to_label" value="Til salg til:"/> + </panel> + </accordion_tab> + </accordion> + </panel> + </scroll_container> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml index c8602d3119..609512bc1b 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml @@ -39,4 +39,8 @@ </text> <check_box initial_value="true" label="Afspil skrive animation ved chat" name="play_typing_animation"/> <check_box label="Send e-mail til mig når jeg modtager IM og er offline" name="send_im_to_email"/> + <radio_group name="chat_window" tool_tip="Vis dine personlige beskeder i separate vinduer eller i ét vindue med mange faner (ændring kræver genstart)"> + <radio_item label="Flere vinduer" name="radio"/> + <radio_item label="Et vindue" name="radio2"/> + </radio_group> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_general.xml b/indra/newview/skins/default/xui/da/panel_preferences_general.xml index ed23a9a706..e17ccca4a1 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_general.xml @@ -1,85 +1,62 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Generelt" name="general_panel"> - <combo_box name="start_location_combo"> - <combo_box.item name="MyHome" tool_tip="Log ind til min hjemme lokation som standard." label="Mit hjem" /> - <combo_box.item name="MyLastLocation" tool_tip="Log ind til min sidste lokation som standard." label="Min sidste lokation" /> - </combo_box> - <check_box label="Vis start lokation på login billedet" name="show_location_checkbox"/> - <combo_box name="fade_out_combobox"> - <combo_box.item name="Never" label="Aldrig"/> - <combo_box.item name="Show Temporarily" label="Vis midlertidigt"/> - <combo_box.item name="Always" label="Altid"/> - </combo_box> - <check_box label="Små avatar navne" name="small_avatar_names_checkbox"/> - <check_box label="Skjul mit navn på min skærm" name="show_my_name_checkbox"/> - <text name="group_titles_textbox"> - Gruppe titler: - </text> - <check_box label="Skjul alle gruppe titler" name="show_all_title_checkbox"/> - <check_box label="Gem min gruppe titel" name="show_my_title_checkbox"/> - <color_swatch label="" name="effect_color_swatch" tool_tip="Klik for at åbne farvevælger"/> - <text name="UI Size:"> - UI Størrelse: + <text name="language_textbox"> + Sprog: </text> - <check_box label="Brug opløsnings uafhængig skalering" name="ui_auto_scale"/> - <spinner label="Tid før inaktiv:" name="afk_timeout_spinner"/> - <check_box label="Giv besked når Linden dollars (L$) bliver brugt eller modtaget" name="notify_money_change_checkbox"/> - <text name="maturity_desired_label"> - Rating: + <combo_box name="language_combobox"> + <combo_box.item label="System standard" name="System Default Language"/> + <combo_box.item label="English (Engelsk)" name="English"/> + <combo_box.item label="Dansk - Beta" name="Danish"/> + <combo_box.item label="Deutsch (Tysk) - Beta" name="Deutsch(German)"/> + <combo_box.item label="Español (Spansk) - Beta" name="Spanish"/> + <combo_box.item label="Français (Fransk) - Beta" name="French"/> + <combo_box.item label="Polski (Polsk) - Beta" name="Polish"/> + <combo_box.item label="Portugués (Portugisisk) - Beta" name="Portugese"/> + <combo_box.item label="日本語 (Japansk) - Beta" name="(Japanese)"/> + </combo_box> + <text name="language_textbox2"> + (Kræver genstart) </text> <text name="maturity_desired_prompt"> Jeg ønsker adgang til inhold med rating: </text> + <text name="maturity_desired_textbox"/> <combo_box name="maturity_desired_combobox"> - <combo_box.item name="Desired_Adult" label="PG, Mature og Adult"/> - <combo_box.item name="Desired_Mature" label="PG and Mature"/> - <combo_box.item name="Desired_PG" label="PG"/> + <combo_box.item label="PG, Mature og Adult" name="Desired_Adult"/> + <combo_box.item label="PG and Mature" name="Desired_Mature"/> + <combo_box.item label="PG" name="Desired_PG"/> </combo_box> - <text name="maturity_desired_textbox"> - PG - </text> <text name="start_location_textbox"> Start lokation: </text> - <text name="show_names_textbox"> - Vis navne: - </text> + <combo_box name="start_location_combo"> + <combo_box.item label="Min sidste lokation" name="MyLastLocation" tool_tip="Log ind til min sidste lokation som standard."/> + <combo_box.item label="Mit hjem" name="MyHome" tool_tip="Log ind til min hjemme lokation som standard."/> + </combo_box> + <check_box initial_value="true" label="Vis start lokation på login billedet" name="show_location_checkbox"/> + <text name="name_tags_textbox"> + Navneskilte: + </text> + <radio_group name="Name_Tag_Preference"> + <radio_item label="Skjul" name="radio"/> + <radio_item label="Vis" name="radio2"/> + <radio_item label="Vis et øjeblik" name="radio3"/> + </radio_group> + <check_box label="Vis mit navn" name="show_my_name_checkbox1"/> + <check_box initial_value="true" label="Små avatar navne" name="small_avatar_names_checkbox"/> + <check_box label="Gruppetitler" name="show_all_title_checkbox1"/> <text name="effects_color_textbox"> Farve til mine effekter: </text> + <color_swatch label="" name="effect_color_swatch" tool_tip="Klik for at åbne farvevælger"/> + <text name="title_afk_text"> + Tid inden "væk": + </text> + <spinner label="Tid før inaktiv:" name="afk_timeout_spinner"/> <text name="seconds_textbox"> sekunder </text> - <text name="crash_report_textbox"> - Nedbrudsrapporter: + <text name="text_box3"> + Optaget autosvar: </text> - <text name="language_textbox"> - Sprog: - </text> - <text name="language_textbox2"> - (Kræver genstart for at virke optimalt) - </text> - <string name="region_name_prompt"> - <Skriv regions navn> - </string> - <combo_box name="crash_behavior_combobox"> - <combo_box.item name="Askbeforesending" label="Bed om bekræftigelse"/> - <combo_box.item name="Alwayssend" label="Send altid"/> - <combo_box.item name="Neversend" label="Send aldrig"/> - </combo_box> - <combo_box name="language_combobox"> - <combo_box.item name="System Default Language" label="System standard"/> - <combo_box.item name="English" label="English (Engelsk)"/> - <combo_box.item name="Danish" label="Dansk - Beta"/> - <combo_box.item name="Deutsch(German)" label="Deutsch (Tysk) - Beta"/> - <combo_box.item name="Spanish" label="Español (Spansk) - Beta"/> - <combo_box.item name="French" label="Français (Fransk) - Beta"/> - <combo_box.item name="Hungarian" label="Magyar (Ungarsk) - Beta"/> - <combo_box.item name="Polish" label="Polski (Polsk) - Beta"/> - <combo_box.item name="Portugese" label="Portugués (Portugisisk) - Beta"/> - <combo_box.item name="Chinese" label="中文 (简体) (Kinesisk) - Beta"/> - <combo_box.item name="(Japanese)" label="日本語 (Japansk) - Beta"/> - <combo_box.item name="(Korean)" label="한국어 (Koreansk) - Beta"/> - </combo_box> - <check_box label="Del sprog med objekter" name="language_is_public" tool_tip="Dette lader objekter i verden vide hvad dit foretrukne sprog er."/> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml index 4dac7be413..bb1cacc773 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml @@ -1,42 +1,18 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Grafik" name="Display panel"> - <button label="?" name="GraphicsPreferencesHelpButton" /> - <check_box label="Kør Second Life i et vindue" name="windowed mode" /> - <text_editor name="FullScreenInfo"> - Hvis dette ikke er valgt kører Second Life i Fuld skærm. - </text_editor> - <text name="WindowSizeLabel"> - Opløsning: + <text name="UI Size:"> + UI størrelse: </text> - <combo_box name="windowsize combo"> - <combo_box.item name="640x480" label="640x480" /> - <combo_box.item name="800x600" label="800x600" /> - <combo_box.item name="720x480" label="720x480 (NTSC)" /> - <combo_box.item name="768x576" label="768x576 (PAL)" /> - <combo_box.item name="1024x768" label="1024x768" /> - </combo_box> - <text name="DisplayResLabel"> - Skærm opløsning: - </text> - <text name="AspectRatioLabel1" tool_tip="bredde / højde"> - Format: - </text> - <combo_box name="aspect_ratio" tool_tip="bredde/ højde"> - <combo_box.item name="4:3(StandardCRT)" label="4:3 (Standard CRT)" /> - <combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)" /> - <combo_box.item name="8:5(Widescreen)" label="8:5 (Widescreen)" /> - <combo_box.item name="16:9(Widescreen)" label="16:9 (Widescreen)" /> - </combo_box> - <check_box label="Auto-detect format" name="aspect_auto_detect" /> - <text name="HigherText"> - Kvalitet og - </text> - <text name="QualityText"> - Ydelse: + <text name="QualitySpeed"> + Kvalitet og hastighed: </text> <text name="FasterText"> Hurtigere </text> + <text name="BetterText"> + Bedre + </text> + <slider label="" name="QualityPerformanceSelection"/> <text name="ShadersPrefText"> Lav </text> @@ -49,99 +25,82 @@ <text name="ShadersPrefText4"> Ultra </text> - <text name="HigherText2"> - Højere - </text> - <text name="QualityText2"> - Kvalitet - </text> - <slider label="" name="QualityPerformanceSelection" /> - <check_box label="Manuelt" name="CustomSettings" /> - <panel name="CustomGraphics Panel"> - <text name="ShadersText"> - Overflader: - </text> - <check_box label="Glatte flader og skin" name="BumpShiny" /> - <check_box label="Basale flader" name="BasicShaders" - tool_tip="Ved at slå dette valg fra, kan det forhindres at visse grafikkort drivere crasher." /> - <check_box label="Atmosfæriske flader" name="WindLightUseAtmosShaders" /> - <check_box label="Reflektioner i vand" name="Reflections" /> - <text name="ReflectionDetailText"> - Spejlnings detaljer: - </text> - <radio_group name="ReflectionDetailRadio"> - <radio_item name="0" label="Terræn og træer" /> - <radio_item name="1" label="Alle statiske objekter" /> - <radio_item name="2" label="Alle avatarer og objekter" /> - <radio_item name="3" label="Alt" /> - </radio_group> - <text name="AvatarRenderingText"> - Avatar gengivelse - </text> - <check_box label="Mini-figurer på lang afstand" name="AvatarImpostors" /> - <check_box label="Hardware Skinning" name="AvatarVertexProgram" /> - <check_box label="Avatar tøj" name="AvatarCloth" /> - <text name="DrawDistanceMeterText1"> - m - </text> - <text name="DrawDistanceMeterText2"> - m - </text> - <slider label="Maks. visnings-afstand:" name="DrawDistance" /> - <slider label="Maks. antal partikler:" name="MaxParticleCount" /> - <slider label="Efterbehandlingskvalitet:" name="RenderPostProcess" /> - <text name="MeshDetailText"> - Netmaske detaljer: - </text> - <slider label=" Objekter:" name="ObjectMeshDetail" /> - <slider label=" Flexiprims:" name="FlexibleMeshDetail" /> - <slider label=" Træer:" name="TreeMeshDetail" /> - <slider label=" Avatarer:" name="AvatarMeshDetail" /> - <slider label=" Terræn:" name="TerrainMeshDetail" /> - <slider label=" Himmel:" name="SkyMeshDetail" /> - <text name="PostProcessText"> - Lav - </text> - <text name="ObjectMeshDetailText"> - Lav - </text> - <text name="FlexibleMeshDetailText"> - Lav - </text> - <text name="TreeMeshDetailText"> - Lav - </text> - <text name="AvatarMeshDetailText"> - Lav - </text> - <text name="TerrainMeshDetailText"> - Lav - </text> - <text name="SkyMeshDetailText"> - Lav - </text> - <text name="LightingDetailText"> - Lys detaljer: - </text> - <radio_group name="LightingDetailRadio"> - <radio_item name="SunMoon" label="Kun sol og måne" /> - <radio_item name="LocalLights" label="Lys i nærheden" /> - </radio_group> - <text name="TerrainDetailText"> - Terræn detaljer: - </text> - <radio_group name="TerrainDetailRadio"> - <radio_item name="0" label="Lav" /> - <radio_item name="2" label="Høj" /> - </radio_group> + <panel label="CustomGraphics" name="CustomGraphics Panel"> + <text name="ShadersText"> + Overflader: + </text> + <check_box initial_value="true" label="Glatte flader og skin" name="BumpShiny"/> + <check_box initial_value="true" label="Basale flader" name="BasicShaders" tool_tip="Ved at slå dette valg fra, kan det forhindres at visse grafikkort drivere crasher."/> + <check_box initial_value="true" label="Atmosfæriske flader" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="Reflektioner i vand" name="Reflections"/> + <text name="ReflectionDetailText"> + Spejlnings detaljer: + </text> + <radio_group name="ReflectionDetailRadio"> + <radio_item label="Terræn og træer" name="0"/> + <radio_item label="Alle statiske objekter" name="1"/> + <radio_item label="Alle avatarer og objekter" name="2"/> + <radio_item label="Alt" name="3"/> + </radio_group> + <text name="AvatarRenderingText"> + Avatar gengivelse + </text> + <check_box initial_value="true" label="Mini-figurer på lang afstand" name="AvatarImpostors"/> + <check_box initial_value="true" label="Hardware Skinning" name="AvatarVertexProgram"/> + <check_box initial_value="true" label="Avatar tøj" name="AvatarCloth"/> + <slider label="Maks. visnings-afstand:" name="DrawDistance"/> + <text name="DrawDistanceMeterText2"> + m + </text> + <slider label="Maks. antal partikler:" name="MaxParticleCount"/> + <slider label="Efterbehandlingskvalitet:" name="RenderPostProcess"/> + <text name="MeshDetailText"> + Netmaske detaljer: + </text> + <slider label=" Objekter:" name="ObjectMeshDetail"/> + <slider label=" Flexiprims:" name="FlexibleMeshDetail"/> + <slider label=" Træer:" name="TreeMeshDetail"/> + <slider label=" Avatarer:" name="AvatarMeshDetail"/> + <slider label=" Terræn:" name="TerrainMeshDetail"/> + <slider label=" Himmel:" name="SkyMeshDetail"/> + <text name="PostProcessText"> + Lav + </text> + <text name="ObjectMeshDetailText"> + Lav + </text> + <text name="FlexibleMeshDetailText"> + Lav + </text> + <text name="TreeMeshDetailText"> + Lav + </text> + <text name="AvatarMeshDetailText"> + Lav + </text> + <text name="TerrainMeshDetailText"> + Lav + </text> + <text name="SkyMeshDetailText"> + Lav + </text> + <text name="LightingDetailText"> + Lys detaljer: + </text> + <radio_group name="LightingDetailRadio"> + <radio_item label="Kun sol og måne" name="SunMoon"/> + <radio_item label="Lys i nærheden" name="LocalLights"/> + </radio_group> + <text name="TerrainDetailText"> + Terræn detaljer: + </text> + <radio_group name="TerrainDetailRadio"> + <radio_item label="Lav" name="0"/> + <radio_item label="Høj" name="2"/> + </radio_group> </panel> - <button label="Anbefalede indstillinger" name="Defaults" /> - <button label="Hardware valg" label_selected="Hardware Options" - name="GraphicsHardwareButton" /> - <panel.string name="resolution_format"> - [RES_X] x [RES_Y] - </panel.string> - <panel.string name="aspect_ratio_text"> - [NUM]:[DEN] - </panel.string> + <button label="Benyt" label_selected="Benyt" name="Apply"/> + <button label="Nulstil" name="Defaults"/> + <button label="Avanceret" name="Advanced"/> + <button label="Hardware" label_selected="Hardware" name="GraphicsHardwareButton"/> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml new file mode 100644 index 0000000000..987ba2a3f8 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="MediaControls"> + <layout_stack name="media_controls"> + <layout_panel name="media_address"> + <line_editor name="media_address_url" tool_tip="Media URL"/> + <layout_stack name="media_address_url_icons"> + <layout_panel> + <icon name="media_whitelist_flag" tool_tip="Godkendt side"/> + </layout_panel> + <layout_panel> + <icon name="media_secure_lock_flag" tool_tip="Sikker browsing"/> + </layout_panel> + </layout_stack> + </layout_panel> + <layout_panel name="media_play_position"> + <slider_bar initial_value="0.5" name="media_play_slider" tool_tip="Filmafspilning fremskridt"/> + </layout_panel> + <layout_panel name="media_volume"> + <button name="media_mute_button" tool_tip="Sluk for dette media"/> + <slider name="volume_slider" tool_tip="Media lydstyrke"/> + </layout_panel> + </layout_stack> + <layout_stack> + <panel name="media_progress_indicator"> + <progress_bar name="media_progress_bar" tool_tip="Media hentes"/> + </panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_profile_view.xml b/indra/newview/skins/default/xui/da/panel_profile_view.xml new file mode 100644 index 0000000000..23b9d3ba83 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_profile_view.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_target_profile"> + <string name="status_online"> + Online + </string> + <string name="status_offline"> + Offline + </string> + <text_editor name="user_name" value="(Henter...)"/> + <text name="status" value="Online"/> + <tab_container name="tabs"> + <panel label="PROFIL" name="panel_profile"/> + <panel label="FAVORITTER" name="panel_picks"/> + <panel label="NOTER & PRIVATLIV" name="panel_notes"/> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_region_estate.xml b/indra/newview/skins/default/xui/da/panel_region_estate.xml index 5d0799cab9..d726fedfe9 100644 --- a/indra/newview/skins/default/xui/da/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/da/panel_region_estate.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Estate" name="Estate"> <text name="estate_help_text"> Ændringer i dette afsnit vil påvirke alle @@ -11,61 +11,59 @@ regioner i dette estate. (ukendt) </text> <text name="owner_text"> - Ejer: + Estate ejer: </text> <text name="estate_owner"> (ukendt) </text> - <check_box label="Brug global tid" name="use_global_time_check" /> - <button label="?" name="use_global_time_help" /> - <check_box label="Sol i fast position" name="fixed_sun_check" /> - <button label="?" name="fixed_sun_help" /> - <slider label="Fase" name="sun_hour_slider" /> - <check_box label="Tillad offentlig adgang" name="externally_visible_check" /> - <button label="?" name="externally_visible_help" /> + <check_box label="Brug global tid" name="use_global_time_check"/> + <button label="?" name="use_global_time_help"/> + <check_box label="Sol i fast position" name="fixed_sun_check"/> + <button label="?" name="fixed_sun_help"/> + <slider label="Fase" name="sun_hour_slider"/> + <check_box label="Tillad offentlig adgang" name="externally_visible_check"/> + <button label="?" name="externally_visible_help"/> <text name="Only Allow"> Begræns adgang til: </text> - <check_box label="Beboere med betalingsoplysninger" name="limit_payment" - tool_tip="Blokér for brugere uden identifikation" /> - <check_box label="Beboere der er godkendt som voksne" name="limit_age_verified" - tool_tip="Blokér for brugere der ikke har verificéret deres alder. Se support.secondlife.com for mere information." /> - <check_box label="Tillad stemme chat" name="voice_chat_check" /> - <button label="?" name="voice_chat_help" /> - <check_box label="Tillad direkte teleport" name="allow_direct_teleport" /> - <button label="?" name="allow_direct_teleport_help" /> + <check_box label="Beboere med betalingsoplysninger" name="limit_payment" tool_tip="Blokér for brugere uden identifikation"/> + <check_box label="Beboere der er godkendt som voksne" name="limit_age_verified" tool_tip="Blokér for brugere der ikke har verificéret deres alder. Se [SUPPORT_SITE] for mere information."/> + <check_box label="Tillad stemme chat" name="voice_chat_check"/> + <button label="?" name="voice_chat_help"/> + <check_box label="Tillad direkte teleport" name="allow_direct_teleport"/> + <button label="?" name="allow_direct_teleport_help"/> <text name="abuse_email_text" width="260"> Send beskeder misbrug til email adresse: </text> <string name="email_unsupported"> Ikke supporteret </string> - <button label="?" name="abuse_email_address_help" /> - <button label="Gem" name="apply_btn" /> - <button label="Smid bruger ud fra estate..." name="kick_user_from_estate_btn" /> - <button label="Send besked til estate..." name="message_estate_btn" /> + <button label="?" name="abuse_email_address_help"/> + <button label="Gem" name="apply_btn"/> + <button label="Smid bruger ud fra estate..." name="kick_user_from_estate_btn"/> + <button label="Send besked til estate..." name="message_estate_btn"/> <text name="estate_manager_label"> Administratorer: </text> - <button label="?" name="estate_manager_help" /> - <button label="Fjern..." name="remove_estate_manager_btn" /> - <button label="Tilføj..." name="add_estate_manager_btn" /> + <button label="?" name="estate_manager_help"/> + <button label="Fjern..." name="remove_estate_manager_btn"/> + <button label="Tilføj..." name="add_estate_manager_btn"/> <text name="allow_resident_label"> Godkendte beboere: </text> - <button label="?" name="allow_resident_help" /> - <button label="Fjern..." name="remove_allowed_avatar_btn" /> - <button label="Tilføj..." name="add_allowed_avatar_btn" /> + <button label="?" name="allow_resident_help"/> + <button label="Fjern..." name="remove_allowed_avatar_btn"/> + <button label="Tilføj..." name="add_allowed_avatar_btn"/> <text name="allow_group_label"> Tilladte grupper: </text> - <button label="?" name="allow_group_help" /> - <button label="Fjern..." name="remove_allowed_group_btn" /> - <button label="Tilføj..." name="add_allowed_group_btn" /> + <button label="?" name="allow_group_help"/> + <button label="Fjern..." name="remove_allowed_group_btn"/> + <button label="Tilføj..." name="add_allowed_group_btn"/> <text name="ban_resident_label"> Blokérede beboere: </text> - <button label="?" name="ban_resident_help" /> - <button label="Fjern..." name="remove_banned_avatar_btn" /> - <button label="Tilføj..." name="add_banned_avatar_btn" /> + <button label="?" name="ban_resident_help"/> + <button label="Fjern..." name="remove_banned_avatar_btn"/> + <button label="Tilføj..." name="add_banned_avatar_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/da/panel_side_tray_tab_caption.xml new file mode 100644 index 0000000000..5c0bd829d8 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_side_tray_tab_caption.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="sidetray_tab_panel"> + <text name="sidetray_tab_title" value="Side bjælke"/> + <button name="show_help" tool_tip="Vis hjælp"/> +</panel> diff --git a/indra/newview/skins/default/xui/da/panel_status_bar.xml b/indra/newview/skins/default/xui/da/panel_status_bar.xml index 20e72827f2..4e45b7e328 100644 --- a/indra/newview/skins/default/xui/da/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/da/panel_status_bar.xml @@ -1,44 +1,29 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="status"> - <text name="ParcelNameText" - tool_tip="Navn på det land/parcel som du står på. Klik på teksten for yderligere info."> - parcel name goes here - </text> - <text name="BalanceText" tool_tip="Konto balance"> - Henter... - </text> - <button label="" label_selected="" name="buycurrency" tool_tip="Køb valuta" /> - <text name="TimeText" tool_tip="Nuværende [SECOND_LIFE] tid"> - 12:00 - </text> - <string name="StatBarDaysOfWeek"> + <panel.string name="StatBarDaysOfWeek"> Søndag:Mandag:Tirsdag:Onsdag:Torsdag:Fredag:Lørdag - </string> - <string name="StatBarMonthsOfYear"> + </panel.string> + <panel.string name="StatBarMonthsOfYear"> Januar:Februar:Marts:April:Maj:Juni:Juli:August:September:Oktober:November:December - </string> - <button label="" label_selected="" name="scriptout" tool_tip="Script advarsler og fejl" /> - <button label="" label_selected="" name="health" tool_tip="Helbred" /> - <text name="HealthText" tool_tip="Helbred"> - 100% - </text> - <button label="" label_selected="" name="no_fly" tool_tip="Flyvning ikke tilladt" /> - <button label="" label_selected="" name="no_build" - tool_tip="Bygning og placering af objekter ikke tilladt" /> - <button label="" label_selected="" name="no_scripts" - tool_tip="Afvikling af scripts ikke tilladt" /> - <button label="" label_selected="" name="restrictpush" - tool_tip="Ikke tilladt at skubbe" /> - <button label="" label_selected="" name="status_no_voice" - tool_tip="Stemme chat ikke tilgængelig" /> - <button label="" label_selected="" name="buyland" tool_tip="Køb denne parcel" /> - <button label="" name="menubar_search_bevel_bg" /> - <line_editor label="Søg" name="search_editor" tool_tip="Søg [SECOND_LIFE]" /> - <button label="" label_selected="" name="search_btn" tool_tip="Søg [SECOND_LIFE]" /> - <string name="packet_loss_tooltip"> + </panel.string> + <panel.string name="packet_loss_tooltip"> Packet Loss - </string> - <string name="bandwidth_tooltip"> + </panel.string> + <panel.string name="bandwidth_tooltip"> Båndbredde - </string> + </panel.string> + <panel.string name="time"> + [hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt] + </panel.string> + <panel.string name="timeTooltip"> + [weekday, datetime, slt], [day, datetime, slt] [month, datetime, slt] [year, datetime, slt] + </panel.string> + <panel.string name="buycurrencylabel"> + L$ [AMT] + </panel.string> + <button label="" label_selected="" name="buycurrency" tool_tip="My Balance: Click to buy more L$"/> + <text name="TimeText" tool_tip="Nuværende tid (Pacific)"> + 12:00 + </text> + <button name="volume_btn" tool_tip="Kontrol for generel lydstyrke"/> </panel> diff --git a/indra/newview/skins/default/xui/da/role_actions.xml b/indra/newview/skins/default/xui/da/role_actions.xml index e4c8c4b93b..5ec90a759a 100644 --- a/indra/newview/skins/default/xui/da/role_actions.xml +++ b/indra/newview/skins/default/xui/da/role_actions.xml @@ -1,201 +1,76 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <role_actions> - <action_set - description="Disse rettigheder inkluderer adgang til at tilføje og fjerne gruppe medlemmer og tillade nye medlemmer at melde sig ind uden invitation" - name="Membership"> - <action description="Invitér personer til denne gruppe" - longdescription="Invitér personer til denne gruppe via 'Invitér ny person...' knappen i fanen: medlemmer & roller > underfanen: medlemmer" - name="member invite" /> - <action description="Fjern medlemmer fra denne gruppe" - longdescription="Fjern medlemmer i denne gruppe via 'Fjern fra gruppe' knappen i fanen: medlemmer & roller > underfanen: medlemmer. En ejer kan fjerne alle undtagen en anden ejer. Hvis du ikke er en ejer, kan et medlem kun fjernes fra gruppen hvis, og kun hvis, medlemmet kun findes i Alle rollen, og ikke i andre roller. for at fjerne medlemmer fra roller, skal du have rettigheden 'Fjern medlemmer fra roller'" - name="member eject" /> - <action - description="Åben eller luk for 'fri tilmelding' og ændre 'tilmeldingsgebyr'" - longdescription="Åben for 'fri tilmelding' så alle kan blive medlem af gruppen, eller luk for 'fri tilmelding' så kun inveterede kan blive medlem. ændre 'tilmeldingsgebyr' i gruppe opsætningsbilledet sektionen i Generelt fanen" - name="member options" /> + <action_set description="Disse rettigheder inkluderer adgang til at tilføje og fjerne gruppe medlemmer og tillade nye medlemmer at melde sig ind uden invitation" name="Membership"> + <action description="Invitér personer til denne gruppe" longdescription="Invitér personer til denne gruppe via 'Invitér ny person...' knappen i fanen: medlemmer & roller > underfanen: medlemmer" name="member invite"/> + <action description="Fjern medlemmer fra denne gruppe" longdescription="Fjern medlemmer i denne gruppe via 'Fjern fra gruppe' knappen i fanen: medlemmer & roller > underfanen: medlemmer. En ejer kan fjerne alle undtagen en anden ejer. Hvis du ikke er en ejer, kan et medlem kun fjernes fra gruppen hvis, og kun hvis, medlemmet kun findes i Alle rollen, og ikke i andre roller. for at fjerne medlemmer fra roller, skal du have rettigheden 'Fjern medlemmer fra roller" name="member eject"/> + <action description="Åben eller luk for 'fri tilmelding' og ændre 'tilmeldingsgebyr'" longdescription="Åben for 'fri tilmelding' så alle kan blive medlem af gruppen, eller luk for 'fri tilmelding' så kun inveterede kan blive medlem. ændre 'tilmeldingsgebyr' i gruppe opsætningsbilledet sektionen i Generelt fanen" name="member options"/> </action_set> - <action_set - description="Disse rettigheder inkluderer adgang til at tilføje, fjerne og ændre gruppe-roller, tilføje og fjerne medlemmer i roller, og give rettigheder til roller" - name="Roles"> - <action description="Opret nye roller" - longdescription="Opret nye roller i fanen: Medlemmer & roller > under-fanen: Roller." - name="role create" /> - <action description="Slet roller" - longdescription="Slet roller i roller i fanen: Medlemmer & roller > under-fanen: Roller." - name="role delete" /> - <action - description="Ændre rolle navne, titler, beskrivelser og angivelse af om rollemedlemmer kan ses af andre udenfor gruppen" - longdescription="Ændre rolle navne, titler, beskrivelser og angivelse af om rollemedlemmer kan ses af andre udenfor gruppen. Dette håndteres i bunden af fanen:: Medlemmer & roller > under-fanen: Roller efter at have valgt en rolle." - name="role properties" /> - <action description="Tildel andre samme roller som dig selv" - longdescription="Tildel andre medlemmer til roller i Tildelte roller sektionen på fanen: Medlemmer & roller > under-fanen: Medlemmer. Et medlem med denne rettighed kan kun tildele andre medlemmer en rolle som tildeleren allerede selv har." - name="role assign member limited" /> - <action description="Tildele medlemmer enhver rolle" - longdescription="Tildel andre medlemmer til en hvilken som helst rolle i Tildelte roller sektionen på fanen: Medlemmer & roller > under-fanen: Medlemmer. *ADVARSEL* Ethvert medlem i en rolle med denne rettighed kan tildele sig selv - og enhver anden - roller som giver dem flere rettigheder end de havde tidligere, og dermed potentielt få næsten samme magt som ejer. Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." - name="role assign member" /> - <action description="Fjern medlemmer fra roller" - longdescription="Fjern medlemmer fra roller i in Tildelte roller sektionen på fanen: Medlemmer & roller > under-fanen: Medlemmer. Ejere kan ikke fjernes." - name="role remove member" /> - <action description="Tildel og fjern rettigheder for roller" - longdescription="Tildel og fjern rettigheder for roller i tilladte rettigheder sektionen på fanen: Medlemmer & roller > under-fanen: Roller. *ADVARSEL* Ethvert medlem i en rolle med denne rettighed kan tildele sig selv - og enhver anden - rettigheder som giver dem flere rettigheder end de havde tidligere, og dermed potentielt få næsten samme magt som ejer. Vær sikker på at vide hvad du gør inden du tildeler denne rettighed." - name="role change actions" /> + <action_set description="Disse rettigheder inkluderer adgang til at tilføje, fjerne og ændre gruppe-roller, tilføje og fjerne medlemmer i roller, og give rettigheder til roller" name="Roles"> + <action description="Opret nye roller" longdescription="Opret nye roller i fanen: Medlemmer & roller > under-fanen: Roller." name="role create"/> + <action description="Slet roller" longdescription="Slet roller i roller i fanen: Medlemmer & roller > under-fanen: Roller." name="role delete"/> + <action description="Ændre rolle navne, titler, beskrivelser og angivelse af om rollemedlemmer kan ses af andre udenfor gruppen" longdescription="Ændre rolle navne, titler, beskrivelser og angivelse af om rollemedlemmer kan ses af andre udenfor gruppen. Dette håndteres i bunden af fanen:: Medlemmer & roller > under-fanen: Roller efter at have valgt en rolle." name="role properties"/> + <action description="Tildel andre samme roller som dig selv" longdescription="Tildel andre medlemmer til roller i Tildelte roller sektionen på fanen: Medlemmer & roller > under-fanen: Medlemmer. Et medlem med denne rettighed kan kun tildele andre medlemmer en rolle som tildeleren allerede selv har." name="role assign member limited"/> + <action description="Tildele medlemmer enhver rolle" longdescription="Tildel andre medlemmer til en hvilken som helst rolle i Tildelte roller sektionen på fanen: Medlemmer & roller > under-fanen: Medlemmer. *ADVARSEL* Ethvert medlem i en rolle med denne rettighed kan tildele sig selv - og enhver anden - roller som giver dem flere rettigheder end de havde tidligere, og dermed potentielt få næsten samme magt som ejer. Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." name="role assign member"/> + <action description="Fjern medlemmer fra roller" longdescription="Fjern medlemmer fra roller i in Tildelte roller sektionen på fanen: Medlemmer & roller > under-fanen: Medlemmer. Ejere kan ikke fjernes." name="role remove member"/> + <action description="Tildel og fjern rettigheder for roller" longdescription="Tildel og fjern rettigheder for roller i tilladte rettigheder sektionen på fanen: Medlemmer & roller > under-fanen: Roller. *ADVARSEL* Ethvert medlem i en rolle med denne rettighed kan tildele sig selv - og enhver anden - rettigheder som giver dem flere rettigheder end de havde tidligere, og dermed potentielt få næsten samme magt som ejer. Vær sikker på at vide hvad du gør inden du tildeler denne rettighed." name="role change actions"/> </action_set> - <action_set - description="Disse rettigheder inkluderer adgang til at ændre denne gruppes identitetsoplysninger, som f.eks. om gruppen kan ses af andre, gruppens fundats og billede." - name="Group Identity"> - <action description="Ændre fundats, billede og 'Vis i søgning'" - longdescription="Ændre fundats og 'Vis i søgning'. Dette gøres under fanen Generelt." - name="group change identity" /> + <action_set description="Disse rettigheder inkluderer adgang til at ændre denne gruppes identitetsoplysninger, som f.eks. om gruppen kan ses af andre, gruppens fundats og billede." name="Group Identity"> + <action description="Ændre fundats, billede og 'Vis i søgning'" longdescription="Ændre fundats og 'Vis i søgning'. Dette gøres under fanen Generelt." name="group change identity"/> </action_set> - <action_set - description="Disse rettigheder inkluderer adgang til dedikere, ændre og sælge land fra denne gruppes besiddelser. For at åbne 'Om land...' vinduet, højre-klik på jorden og vælg 'Om land...', eller klik på 'Om land...' i 'Verden' menuen." - name="Parcel Management"> - <action description="Dedikér eller køb land til gruppen" - longdescription="Dedikér eller køb land til gruppen. Dette gøres i fanen Generelt i 'Om land...'." - name="land deed" /> - <action description="Forlad land og overgiv det til guvernør Linden" - longdescription="Forlad land og overgiv det til guvernør Linden. *ADVARSEL* Ethvert medlem med en rolle med denne rettighed kan overdrage gruppe-ejet land via fanen Generelt i 'Om land...' til Lindens ejerskab uden salg! Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." - name="land release" /> - <action description="Sæt land til salg" - longdescription="Sæt land til salg. *ADVARSEL* Ethvert medlem med en rolle med denne rettighed kan sælge gruppe-ejet land via fanen Generelt i 'Om land...'! Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." - name="land set sale info" /> - <action description="Opdel og saml parceller" - longdescription="Opdel og saml parceller. Dette gøres ved at højreklikke på jorden og vælge 'Redigér terræn'" - name="land divide join" /> + <action_set description="Disse rettigheder inkluderer adgang til dedikere, ændre og sælge land fra denne gruppes besiddelser. For at åbne 'Om land...' vinduet, højre-klik på jorden og vælg 'Om land...', eller klik på 'Om land...' i 'Verden' menuen." name="Parcel Management"> + <action description="Dedikér eller køb land til gruppen" longdescription="Dedikér eller køb land til gruppen. Dette gøres i fanen Generelt i 'Om land...'." name="land deed"/> + <action description="Forlad land og overgiv det til guvernør Linden" longdescription="Forlad land og overgiv det til guvernør Linden. *ADVARSEL* Ethvert medlem med en rolle med denne rettighed kan overdrage gruppe-ejet land via fanen Generelt i 'Om land...' til Lindens ejerskab uden salg! Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." name="land release"/> + <action description="Sæt land til salg" longdescription="Sæt land til salg. *ADVARSEL* Ethvert medlem med en rolle med denne rettighed kan sælge gruppe-ejet land via fanen Generelt i 'Om land...'! Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." name="land set sale info"/> + <action description="Opdel og saml parceller" longdescription="Opdel og saml parceller. Dette gøres ved at højreklikke på jorden og vælge 'Redigér terræn'" name="land divide join"/> </action_set> - <action_set - description="Disse rettigheder inkluderer adgang til at ændre parcel navn og en række parametre om f.eks. landingspunkt, teleports m.v.." - name="Parcel Identity"> - <action - description="Angive om sted skal vises i 'vis i Søg steder' og angivelse af kategori" - longdescription="Angive om sted skal vises i 'vis i Søg steder' og angivelse af kategori i 'Om land...' > Indstillinger fanen." - name="land find places" /> - <action - description="Ændre parcel navn, beskrivelse, og 'Vis i Søg' opsætning" - longdescription="Ændre parcel navn, beskrivelse, og 'Vis i Søg' opsætning. Dette håndteres i 'Om land...'> Opsætning fanen." - name="land change identity" /> - <action description="Sæt landingspunkt og teleport muligheder" - longdescription="På en gruppe-ejet parcel kan medlemmer, med en rolle med denne rettighed, sætte landingspunktet og dermed angive hvor indkommende teleporte skal ankomme og desuden angive dealjer om teleporte. Dette håndteres i 'Om land...'> Opsætning fanen." - name="land set landing point" /> + <action_set description="Disse rettigheder inkluderer adgang til at ændre parcel navn og en række parametre om f.eks. landingspunkt, teleports m.v.." name="Parcel Identity"> + <action description="Angive om sted skal vises i 'vis i Søg steder' og angivelse af kategori" longdescription="Angive om sted skal vises i 'vis i Søg steder' og angivelse af kategori i 'Om land...' > Indstillinger fanen." name="land find places"/> + <action description="Ændre parcel navn, beskrivelse, og 'Vis i Søg' opsætning" longdescription="Ændre parcel navn, beskrivelse, og 'Vis i Søg' opsætning. Dette håndteres i 'Om land...'> Opsætning fanen." name="land change identity"/> + <action description="Sæt landingspunkt og teleport muligheder" longdescription="På en gruppe-ejet parcel kan medlemmer, med en rolle med denne rettighed, sætte landingspunktet og dermed angive hvor indkommende teleporte skal ankomme og desuden angive dealjer om teleporte. Dette håndteres i 'Om land...'> Opsætning fanen." name="land set landing point"/> </action_set> - <action_set - description="Disse rettigheder inkluderer adgang til at opsætte parcel indstillinger som f.eks. 'Lave objekter', 'Redigere terræn', samt musik og media indstillinger." - name="Parcel Settings"> - <action description="Ændre musik og media indstillinger" - longdescription="Ændre oplysninger om streaming musik og film i 'Om land...' > Media fanen." - name="land change media" /> - <action description="Ændre rettighed til 'Redigere terræn'" - longdescription="Ændre rettighed til 'Redigere terræn'. *ADVARSEL*: Redigere terræn' kan give alle og enhver ret til at ændre terræn og opsætte og flytte Linden planter. Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." - name="land edit" /> - <action - description="Ændre diverse andre indstillinger i 'Om land...'> indstillinger fanen" - longdescription="Giv adgang til at ændre 'Sikker (ingen skade)', 'Flyve', og tillad andre beboere at: 'Lave objekter', 'Redigere terræn', 'Lave landemærker', og 'Køre scripts' på gruppe-ejet land via About Land > Indstillinger fanen." - name="land options" /> + <action_set description="Disse rettigheder inkluderer adgang til at opsætte parcel indstillinger som f.eks. 'Lave objekter', 'Redigere terræn', samt musik og media indstillinger." name="Parcel Settings"> + <action description="Ændre musik og media indstillinger" longdescription="Ændre oplysninger om streaming musik og film i 'Om land...' > Media fanen." name="land change media"/> + <action description="Ændre rettighed til 'Redigere terræn'" longdescription="Ændre rettighed til 'Redigere terræn'. *ADVARSEL*: Redigere terræn' kan give alle og enhver ret til at ændre terræn og opsætte og flytte Linden planter. Vær sikker på at vide hvad du ør inden du tildeler denne rettighed." name="land edit"/> + <action description="Ændre diverse andre indstillinger i 'Om land...'> indstillinger fanen" longdescription="Giv adgang til at ændre 'Sikker (ingen skade)', 'Flyve', og tillad andre beboere at: 'Lave objekter', 'Redigere terræn', 'Lave landemærker', og 'Køre scripts' på gruppe-ejet land via About Land > Indstillinger fanen." name="land options"/> </action_set> - <action_set - description="Disse rettigheder inkluderer adgang til at medlemmer kan omgå restriktioner på gruppe-ejede parceller." - name="Parcel Powers"> - <action description="Tillad altid 'Rediger Terræn'" - longdescription="Medlemmer med denne rolle har adgang til at redigere terræn på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på 'Om land...' > Indstillinger fanen." - name="land allow edit land" /> - <action description="Tillad altid at 'Flyve'" - longdescription="Medlemmer med denne rolle har adgang til at flyve på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på 'Om land...' > Indstillinger fanen." - name="land allow fly" /> - <action description="Tillad altid 'Lave objekter'" - longdescription="Medlemmer med denne rolle har adgang til at lave nye objekter på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på 'Om land...' > Indstillinger fanen." - name="land allow create" /> - <action description="Tillad altid at 'Lave landemærker'" - longdescription="Medlemmer med denne rolle har adgang til at lave landemærker på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på 'Om land...' > Indstillinger fanen." - name="land allow landmark" /> - <action description="Tillad altid 'sæt til hjem' på gruppe-ejet land" - longdescription="Medlemmer med denne rolle har adgang til at benytte 'Verden' menuen og vælge 'sæt til hjem' på en parcel der er dedikeret til gruppen." - name="land allow set home" /> + <action_set description="Disse rettigheder inkluderer adgang til at medlemmer kan omgå restriktioner på gruppe-ejede parceller." name="Parcel Powers"> + <action description="Tillad altid 'Rediger Terræn'" longdescription="Medlemmer med denne rolle har adgang til at redigere terræn på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på 'Om land...' > Indstillinger fanen." name="land allow edit land"/> + <action description="Tillad altid at 'Flyve'" longdescription="Medlemmer med denne rolle har adgang til at flyve på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på 'Om land...' > Indstillinger fanen." name="land allow fly"/> + <action description="Tillad altid 'Lave objekter'" longdescription="Medlemmer med denne rolle har adgang til at lave nye objekter på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på 'Om land...' > Indstillinger fanen." name="land allow create"/> + <action description="Tillad altid at 'Lave landemærker'" longdescription="Medlemmer med denne rolle har adgang til at lave landemærker på gruppe-ejede parceller, også selvom denne mulighed ikke er aktiveret på 'Om land...' > Indstillinger fanen." name="land allow landmark"/> + <action description="Tillad altid 'sæt til hjem' på gruppe-ejet land" longdescription="Medlemmer med denne rolle har adgang til at benytte 'Verden' menuen og vælge 'sæt til hjem' på en parcel der er dedikeret til gruppen." name="land allow set home"/> </action_set> - <action_set - description="Disse rettigheder inkluderer adgang til at medlemmer kan tillade eller forbyde adgang til gruppe-ejede parceller, inkluderende at 'fryse' og udsmide beboere." - name="Parcel Access"> - <action description="Administrér adgangsregler for parceller" - longdescription="Administrér adgangsregler for parceller i 'Om land' > 'Adgang' fanen." - name="land manage allowed" /> - <action description="Administrér liste med blokerede beboere på parceller" - longdescription="Administrér liste med blokerede beboere på parceller i 'Om land' > 'Adgang' fanen." - name="land manage banned" /> - <action - description="Ændre indstillinger for at 'Sælge adgang til' parceller" - longdescription="Ændre indstillinger for at 'Sælge adgang til' parceller i 'Om land' > 'Adgang' fanen." - name="land manage passes" /> - <action - description="Adgang til at smide beboere ud og 'fryse' beboere på parceller" - longdescription="Medlermmer med denne rolle kan håndtere beboere som ikke er velkomne på gruppe-ejet parceller ved at højreklikke på dem, vælge Mere>, og vælge 'Smid ud...' eller 'Frys...'." - name="land admin" /> + <action_set description="Disse rettigheder inkluderer adgang til at medlemmer kan tillade eller forbyde adgang til gruppe-ejede parceller, inkluderende at 'fryse' og udsmide beboere." name="Parcel Access"> + <action description="Administrér adgangsregler for parceller" longdescription="Administrér adgangsregler for parceller i 'Om land' > 'Adgang' fanen." name="land manage allowed"/> + <action description="Administrér liste med blokerede beboere på parceller" longdescription="Administrér liste med blokerede beboere på parceller i 'Om land' > 'Adgang' fanen." name="land manage banned"/> + <action description="Ændre indstillinger for at 'Sælge adgang til' parceller" longdescription="Ændre indstillinger for at 'Sælge adgang til' parceller i 'Om land' > 'Adgang' fanen." name="land manage passes"/> + <action description="Adgang til at smide beboere ud og 'fryse' beboere på parceller" longdescription="Medlemmer med denne rolle kan håndtere beboere som ikke er velkomne på gruppe-ejet parceller ved at højreklikke på dem, vælge Mere>, og vælge 'Smid ud...' eller 'Frys...'." name="land admin"/> </action_set> - <action_set - description="Disse rettigheder inkluderer mulighed til at tillade beboere at returnere objekter og placere og flytte Linden planter. Dette er brugbart for at medlemmer kan holde orden og tilpasse landskabet. Denne mulighed skal benyttes med varsomhed, da der ikke er mulighed for at fortryde returnering af objekter og ændringer i landskabet." - name="Parcel Content"> - <action description="Returnere objekter ejet af gruppen" - longdescription="Returne objekter på gruppe-ejede parceller der er ejet af gruppen. Dette håndteres i 'Om land...'> 'Objekter' fanen." - name="land return group owned" /> - <action description="Returnere objekter der er sat til 'gruppe'" - longdescription="Returnere objekter på gruppe-ejede parceller, der er 'sat til gruppe' i 'Om land...'> 'Objekter' fanen." - name="land return group set" /> - <action description="Returnere objekter der ikke er ejet af andre" - longdescription="Returnere objekter på gruppe-ejede parceller, der er 'Ejet af andre' i 'Om land...'> 'Objekter' fanen." - name="land return non group" /> - <action description="Ændre landskab med Linden planter" - longdescription="Mulighed for at ændre landskabet ved at placere og flytte Linden træer, planter, og græs. Disse genstande kan findes i din beholdnings Library > Objects mappe eller de kan oprettes via 'Byg' knappen." - name="land gardening" /> + <action_set description="Disse rettigheder inkluderer mulighed til at tillade beboere at returnere objekter og placere og flytte Linden planter. Dette er brugbart for at medlemmer kan holde orden og tilpasse landskabet. Denne mulighed skal benyttes med varsomhed, da der ikke er mulighed for at fortryde returnering af objekter og ændringer i landskabet." name="Parcel Content"> + <action description="Returnere objekter ejet af gruppen" longdescription="Returne objekter på gruppe-ejede parceller der er ejet af gruppen. Dette håndteres i 'Om land...'> 'Objekter' fanen." name="land return group owned"/> + <action description="Returnere objekter der er sat til 'gruppe'" longdescription="Returnere objekter på gruppe-ejede parceller, der er 'sat til gruppe' i 'Om land...'> 'Objekter' fanen." name="land return group set"/> + <action description="Returnere objekter der ikke er ejet af andre" longdescription="Returnere objekter på gruppe-ejede parceller, der er 'Ejet af andre' i 'Om land...'> 'Objekter' fanen." name="land return non group"/> + <action description="Ændre landskab med Linden planter" longdescription="Disse rettigheder inkluderer mulighed til at tillade beboere at returnere objekter og placere og flytte Linden planter. Dette er brugbart for at medlemmer kan holde orden og tilpasse landskabet. Denne mulighed skal benyttes med varsomhed, da der ikke er mulighed for at fortryde returnering af objekter og ændringer i landskabet." name="land gardening"/> </action_set> - <action_set - description="Disse rettigheder inkluderer mulighed til at dedikere, ændre og sælge gruppe-ejede objekter. Disse ændringer sker i 'Rediger'> 'Generelt' fanen." - name="Object Management"> - <action description="Dediker objekter til gruppe" - longdescription="Dediker objekter til gruppe i 'Rediger'> 'Generelt' fanen." - name="object deed" /> - <action description="Manipulér (flyt, kopiér, ændre) gruppe-ejede objekter" - longdescription="Manipulér (flyt, kopiér, ændre) gruppe-ejede objekter i 'Rediger'> 'Generelt' fanen." - name="object manipulate" /> - <action description="Sæt gruppe-ejede objekter til salg" - longdescription="Sæt gruppe-ejede objekter til salg i 'Rediger'> 'Generelt' fanen." - name="object set sale" /> + <action_set description="Disse rettigheder inkluderer mulighed til at dedikere, ændre og sælge gruppe-ejede objekter. Disse ændringer sker i 'Rediger'> 'Generelt' fanen." name="Object Management"> + <action description="Dediker objekter til gruppe" longdescription="Dediker objekter til gruppe i 'Rediger'> 'Generelt' fanen." name="object deed"/> + <action description="Manipulér (flyt, kopiér, ændre) gruppe-ejede objekter" longdescription="Manipulér (flyt, kopiér, ændre) gruppe-ejede objekter i 'Rediger'> 'Generelt' fanen." name="object manipulate"/> + <action description="Sæt gruppe-ejede objekter til salg" longdescription="Sæt gruppe-ejede objekter til salg i 'Rediger'> 'Generelt' fanen." name="object set sale"/> </action_set> - <action_set - description="Disse rettigheder inkluderer mulighed til at håndtere betalinger for gruppen og styre adgang til gruppens kontobevægelser." - name="Accounting"> - <action description="Betale gruppe regninger og modtage gruppe udbytte" - longdescription="Medlemmer med denne rolle vil automatisk betale gruppe regninger og modtage gruppe udbytte. Det betyder at de vil modtager en andel af indtægter fra salg af gruppe-ejet land og bidrage til betaling af gruppe-relaterede betalinger, som f.eks. betaling for at paceller vises i lister. " - name="accounting accountable" /> + <action_set description="Disse rettigheder inkluderer mulighed til at håndtere betalinger for gruppen og styre adgang til gruppens kontobevægelser." name="Accounting"> + <action description="Betale gruppe regninger og modtage gruppe udbytte" longdescription="Medlemmer med denne rolle vil automatisk betale gruppe regninger og modtage gruppe udbytte. Det betyder at de vil modtager en andel af indtægter fra salg af gruppe-ejet land og bidrage til betaling af gruppe-relaterede betalinger, som f.eks. betaling for at paceller vises i lister. " name="accounting accountable"/> </action_set> - <action_set - description="Disse rettigheder inkluderer adgang til at kunne sende, modtage og se gruppe beskeder." - name="Notices"> - <action description="Send beskeder" - longdescription="Medlemmer med denne rolle kan sende beskeder i 'Beskeder' fanen." - name="notices send" /> - <action description="Modtage og se tidligere beskeder" - longdescription="Medlemmer med denne rolle kan modtage og se tidligere beskeder i 'Beskeder' fanen." - name="notices receive" /> + <action_set description="Disse rettigheder inkluderer adgang til at kunne sende, modtage og se gruppe beskeder." name="Notices"> + <action description="Send beskeder" longdescription="Medlemmer med denne rolle kan sende beskeder i 'Beskeder' fanen." name="notices send"/> + <action description="Modtage og se tidligere beskeder" longdescription="Medlemmer med denne rolle kan modtage og se tidligere beskeder i 'Beskeder' fanen." name="notices receive"/> </action_set> - <action_set - description="Disse rettigheder inkluderer adgang til at kunne oprette forslag, stemme på forslag og se historik med forslag." - name="Proposals"> - <action description="Opret forslag" - longdescription="Medlemmer med denne rolle kan oprette forslag som der kan stemmes om i 'Forslag' fanen." - name="proposal start" /> - <action description="Stem på forslag" - longdescription="Medlemmer med denne rolle kan stemme på forslag i 'Forslag' fanen." - name="proposal vote" /> + <action_set description="Disse rettigheder inkluderer adgang til at kunne oprette forslag, stemme på forslag og se historik med forslag." name="Proposals"> + <action description="Opret forslag" longdescription="Medlemmer med denne rolle kan oprette forslag som der kan stemmes om i 'Forslag' fanen." name="proposal start"/> + <action description="Stem på forslag" longdescription="Medlemmer med denne rolle kan stemme på forslag i 'Forslag' fanen." name="proposal vote"/> </action_set> - <action_set - description="Disse rettigheder styrer hvem der kan deltage i gruppe-chat og gruppe stemme-chat." - name="Chat"> - <action description="Deltage i gruppe-chat" - longdescription="Medlemmer med denne rolle kan deltage i gruppe-chat sessioner" - name="join group chat" /> - <action description="Deltag i gruppe stemme-chat" - longdescription="Medlemmer med denne rolle kan deltage i gruppe stemme-chat sessioner. BEMÆRK: Medlemmet skal også have rollen 'Deltage i gruppe-chat' for at denne rolle har effekt." - name="join voice chat" /> - <action description="Styr gruppe-chat" - longdescription="Medlemmer med denne rolle kan kontrollere adgang og deltagelse i gruppe-chat og gruppe stemme-chat sessioner." - name="moderate group chat" /> + <action_set description="Disse rettigheder styrer hvem der kan deltage i gruppe-chat og gruppe stemme-chat." name="Chat"> + <action description="Deltage i gruppe-chat" longdescription="Medlemmer med denne rolle kan deltage i gruppe-chat sessioner" name="join group chat"/> + <action description="Deltag i gruppe stemme-chat" longdescription="Medlemmer med denne rolle kan deltage i gruppe stemme-chat sessioner. BEMÆRK: Medlemmet skal også have rollen 'Deltage i gruppe-chat' for at denne rolle har effekt." name="join voice chat"/> + <action description="Styr gruppe-chat" longdescription="Medlemmer med denne rolle kan kontrollere adgang og deltagelse i gruppe-chat og gruppe stemme-chat sessioner." name="moderate group chat"/> </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/da/sidepanel_appearance.xml b/indra/newview/skins/default/xui/da/sidepanel_appearance.xml new file mode 100644 index 0000000000..27708f5c7a --- /dev/null +++ b/indra/newview/skins/default/xui/da/sidepanel_appearance.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Sæt" name="appearance panel"> + <string name="No Outfit" value="Intet sæt"/> + <filter_editor label="Filtrér sæt" name="Filter"/> + <panel name="bottom_panel"> + <button name="options_gear_btn" tool_tip="Vis flere muligheder"/> + <button name="newlook_btn" tool_tip="Tilføj nyt sæt"/> + <dnd_button name="trash_btn" tool_tip="Fjern valgte del"/> + <button label="Bær" name="wear_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/da/sidepanel_inventory.xml b/indra/newview/skins/default/xui/da/sidepanel_inventory.xml new file mode 100644 index 0000000000..ae029f5939 --- /dev/null +++ b/indra/newview/skins/default/xui/da/sidepanel_inventory.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Ting" name="objects panel"> + <panel label="" name="sidepanel__inventory_panel"> + <panel name="button_panel"> + <button label="Profil" name="info_btn"/> + <button label="Bær" name="wear_btn"/> + <button label="Afspil" name="play_btn"/> + <button label="Teleportér" name="teleport_btn"/> + </panel> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml index 0beb54032f..5f3762c224 100644 --- a/indra/newview/skins/default/xui/de/floater_about.xml +++ b/indra/newview/skins/default/xui/de/floater_about.xml @@ -73,7 +73,8 @@ google-perftools Copyright (c) 2005, Google Inc. Alle Rechte vorbehalten. Details siehe licenses.txt. -Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) (ITU-T Empf.G.722.1 Anhang C) +Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) +(ITU-T Empf.G.722.1 Anhang C) </text_editor> </panel> </tab_container> diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml index cd5abf86e0..aec1179901 100644 --- a/indra/newview/skins/default/xui/de/floater_about_land.xml +++ b/indra/newview/skins/default/xui/de/floater_about_land.xml @@ -12,7 +12,7 @@ <floater.string name="Remaining"> Restzeit </floater.string> - <tab_container name="landtab"> + <tab_container name="landtab" width="489" tab_min_width="40"> <panel label="ALLGEMEIN" name="land_general_panel"> <panel.string name="new users only"> Nur neue Benutzer @@ -83,7 +83,7 @@ <text name="GroupText"> Leyla Linden </text> - <button label="Festlegen" label_selected="Einstellen..." name="Set..."/> + <button label="Festlegen" label_selected="Einstellen..." name="Set..." width="90"/> <check_box label="Übertragung an Gruppe zulassen" name="check deed" tool_tip="Ein Gruppen-Officer kann dieses Land der Gruppe übertragen. Das Land wird dann über die Landzuteilung der Gruppe verwaltet."/> <button label="Übertragung" label_selected="Übertragen..." name="Deed..." tool_tip="Sie können Land nur übertragen, wenn Sie in der ausgewählten Gruppe Officer sind."/> <check_box label="Eigentümer leistet Beitrag durch Übertragung" name="check contrib" tool_tip="Wenn das Land an die Gruppe übertragen wird, trägt der frühere Eigentümer ausreichend Landnutzungsrechte bei, um es zu halten."/> @@ -101,10 +101,10 @@ <text name="For sale to"> Zum Verkauf an: [BUYER] </text> - <text name="Sell with landowners objects in parcel." width="210"> + <text name="Sell with landowners objects in parcel." left_delta="-50" width="240"> Objekte sind im Verkauf eingeschlossen </text> - <text name="Selling with no objects in parcel." width="237"> + <text name="Selling with no objects in parcel." width="260"> Objekte sind im Verkauf nicht eingeschlossen </text> <button bottom="-222" label="Landverkauf abbrechen" label_selected="Landverkauf abbrechen" name="Cancel Land Sale"/> @@ -230,7 +230,7 @@ werden. <text left="14" name="Owned by parcel owner:" width="200"> Im Eigentum des Parzellenbesitzers: </text> - <text left="204" name="owner_objects_text" width="48"> + <text left="204" left_delta="200" name="owner_objects_text" width="48"> [COUNT] </text> <button label="Anzeigen" label_selected="Anzeigen" name="ShowOwner" right="-135" width="60"/> @@ -257,7 +257,7 @@ werden. <text left="204" name="selected_objects_text" width="48"> [COUNT] </text> - <text left="4" name="Autoreturn" width="380"> + <text left="4" name="Autoreturn" width="410"> Objekte anderer Einwohner automatisch zurückgeben (Minuten, 0 für aus): </text> <line_editor name="clean other time" right="-10" width="56"/> @@ -269,7 +269,7 @@ werden. <name_list name="owner list"> <name_list.columns label="Typ" name="type"/> <name_list.columns label="Name" name="name"/> - <name_list.columns label="Zählen" name="count"/> + <name_list.columns label="Zählen" name="count" width="80"/> <name_list.columns label="Aktuellster" name="mostrecent"/> </name_list> </panel> @@ -368,7 +368,7 @@ Nur große Parzellen können in der Suche aufgeführt werden. <text name="landing_point"> Landepunkt: [LANDING] </text> - <button label="Festlegen" label_selected="Festlegen" left="234" name="Set" tool_tip="Legt den Landepunkt fest, an dem Besucher ankommen. Legt die Position Ihres Avatars innerhalb dieser Parzelle fest." width="70"/> + <button label="Festlegen" label_selected="Festlegen" left="234" right="-88" name="Set" tool_tip="Legt den Landepunkt fest, an dem Besucher ankommen. Legt die Position Ihres Avatars innerhalb dieser Parzelle fest." width="70"/> <button label="Löschen" label_selected="Löschen" left="312" name="Clear" tool_tip="Landepunkt löschen" width="70"/> <text name="Teleport Routing: "> Teleport-Route: @@ -444,7 +444,7 @@ Nur große Parzellen können in der Suche aufgeführt werden. Zugang zu dieser Parzelle </text> <check_box label="Öffentlichen Zugang erlauben [MATURITY]" name="public_access"/> - <text name="Only Allow"> + <text name="Only Allow" width="400"> Zugang auf Einwohner beschränken, die überprüft wurden von: </text> <check_box label="Zahlungsinformation gespeichert [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Nicht identifizierte Einwohner verbannen."/> diff --git a/indra/newview/skins/default/xui/de/floater_animation_preview.xml b/indra/newview/skins/default/xui/de/floater_animation_preview.xml index ce971d158d..be573b524f 100644 --- a/indra/newview/skins/default/xui/de/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/de/floater_animation_preview.xml @@ -180,6 +180,6 @@ Maximal erlaubt sind [MAX_LENGTH] Sekunden. Wir empfehlen exportierte BVH-Dateien aus Poser 4. </text> - <button label="Hochladen ([AMOUNT] L$)" name="ok_btn"/> - <button label="Abbrechen" name="cancel_btn"/> + <button label="Hochladen ([AMOUNT] L$)" name="ok_btn" width="160"/> + <button label="Abbrechen" name="cancel_btn" left="180" width="88"/> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml index bc78ccd7f8..f1281bfb9b 100644 --- a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml @@ -21,11 +21,12 @@ <tab_container name="ResidentChooserTabs"> <panel label="Suchen" name="SearchPanel"> <text name="InstructSearchResidentName"> - Geben Sie einen Teil des Namens einer Person ein: + Geben Sie einen Teil des Namens einer +Person ein: </text> - <line_editor bottom_delta="-36" name="Edit"/> - <button label="Los" label_selected="Los" name="Find"/> - <scroll_list bottom_delta="-79" height="74" name="SearchResults"/> + <line_editor bottom_delta="-76" name="Edit" top_pad="16"/> + <button label="Los" label_selected="Los" name="Find" top="70"/> + <scroll_list top="80" height="54" name="SearchResults"/> </panel> <panel label="Freunde" name="FriendsPanel"> <text name="InstructSelectFriend"> diff --git a/indra/newview/skins/default/xui/de/floater_avatar_textures.xml b/indra/newview/skins/default/xui/de/floater_avatar_textures.xml index 3be5194a8f..cf1b809aa1 100644 --- a/indra/newview/skins/default/xui/de/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/de/floater_avatar_textures.xml @@ -3,10 +3,10 @@ <floater.string name="InvalidAvatar"> UNGÜLTIGER AVATAR </floater.string> - <text name="label"> + <text name="label" width="120"> Gebackene Texturen </text> - <text name="composite_label" width="150"> + <text name="composite_label" width="170"> Zusammengesetzte Texturen </text> <button label="Läd IDs in Konsole ab" label_selected="Abladen" name="Dump"/> @@ -23,7 +23,8 @@ <texture_picker label="Auge" name="eyes_iris"/> <texture_picker label="Alpha: Augen" name="eyes_alpha"/> <texture_picker label="Oberkörper" name="upper-baked"/> - <texture_picker label="Oberkörper: Körperfarbe" name="upper_bodypaint"/> + <texture_picker label="Oberkörper: Körperfarbe" name="upper_bodypaint" width= + "140"/> <texture_picker label="Unterhemd" name="upper_undershirt"/> <texture_picker label="Handschuhe" name="upper_gloves"/> <texture_picker label="Hemd" name="upper_shirt"/> @@ -31,7 +32,8 @@ <texture_picker label="Alpha: Oben" name="upper_alpha"/> <texture_picker label="Obere Tattoos" name="upper_tattoo"/> <texture_picker label="Unterkörper" name="lower-baked"/> - <texture_picker label="Unterkörper: Körperfarbe" name="lower_bodypaint"/> + <texture_picker label="Unterkörper: Körperfarbe" name="lower_bodypaint" width= + "140"/> <texture_picker label="Unterhose" name="lower_underpants"/> <texture_picker label="Socken" name="lower_socks"/> <texture_picker label="Schuhe" name="lower_shoes"/> diff --git a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml index 218c66d298..1d766ac07b 100644 --- a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml @@ -43,7 +43,7 @@ Jeder: </text> <check_box label="Kopieren" name="everyone_copy"/> - <text name="NextOwnerLabel"> + <text name="NextOwnerLabel" top="160" left="10"> Nächster Eigentümer: </text> <check_box label="Bearbeiten" name="next_owner_modify"/> diff --git a/indra/newview/skins/default/xui/de/floater_buy_currency.xml b/indra/newview/skins/default/xui/de/floater_buy_currency.xml index aa6201ec26..72959c7a0c 100644 --- a/indra/newview/skins/default/xui/de/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/de/floater_buy_currency.xml @@ -59,8 +59,9 @@ </text> <button label="Jetzt kaufen" name="buy_btn"/> <button label="Abbrechen" name="cancel_btn"/> - <text name="info_cannot_buy"> - Kauf nicht möglich + <text name="info_cannot_buy" left="160" width="200" height="40"> + Kauf nicht +möglich </text> <button label="Weiter zum Internet" name="error_web"/> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_buy_land.xml b/indra/newview/skins/default/xui/de/floater_buy_land.xml index 4c59f1e8e6..5efa557869 100644 --- a/indra/newview/skins/default/xui/de/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/de/floater_buy_land.xml @@ -3,41 +3,41 @@ <text name="region_name_label"> Region: </text> - <text left="580" name="region_name_text"> + <text left="680" name="region_name_text" left_delta="140"> (unbekannt) </text> <text name="region_type_label"> Typ: </text> - <text left="580" name="region_type_text"> + <text left="680" name="region_type_text" left_delta="140"> (unbekannt) </text> <text name="estate_name_label"> Grundstück: </text> - <text left="580" name="estate_name_text"> + <text left="680" name="estate_name_text" left_delta="140"> (unbekannt) </text> <text name="estate_owner_label" right="600" width="200"> Grundstückseigentümer: </text> - <text left="580" name="estate_owner_text"> + <text left="680" name="estate_owner_text" left_delta="140"> (unbekannt) </text> - <text name="resellable_changeable_label"> + <text name="resellable_changeable_label" left="410"> Gekauftes Land in dieser Region: </text> - <text name="resellable_clause"> + <text name="resellable_clause" left="410"> Wiederverkauf möglich oder nicht möglich. </text> - <text name="changeable_clause"> + <text name="changeable_clause" left="410"> Darft oder darf nicht zusammengelegt/unterteilt werden. </text> - <text name="covenant_text"> + <text name="covenant_text" left="410"> Sie müssen dem Grundstücksvertrag zustimmen: </text> <text left="470" name="covenant_timestamp_text"/> - <text_editor name="covenant_editor"> + <text_editor name="covenant_editor" left="470"> Wird geladen... </text_editor> <check_box label="Ich stimme dem obigen Vertrag zu." name="agree_covenant"/> @@ -67,7 +67,7 @@ Objekte im Verkauf eingeschlossen <text name="error_message"> Irgendetwas stimmt nicht. </text> - <button label="Gehe zu Website" name="error_web"/> + <button label="Gehe zu Website" name="error_web" top_delta="136"/> <text name="account_action"> Macht Sie zum Premium-Mitglied. </text> @@ -79,8 +79,9 @@ Objekte im Verkauf eingeschlossen <combo_box.item label="7,50 US$/Monat, vierteljährliche Abrechnung" name="US$7.50/month,billedquarterly"/> <combo_box.item label="6,00 US$/Monat, jährliche Abrechnung" name="US$6.00/month,billedannually"/> </combo_box> - <text name="land_use_action"> - Erhöhen Sie Ihre monatlichen Landnutzungsgebühren auf 40 US$/month. + <text name="land_use_action" top="270" height="36"> + Erhöhen Sie Ihre monatlichen Landnutzungsgebühren +auf 40 US$/month. </text> <text name="land_use_reason"> Sie besitzen 1309 m² Land. diff --git a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml index 7f4dc4a79e..9baf30fb53 100644 --- a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml @@ -66,7 +66,7 @@ Key-Zeit: </text> <spinner label="Std." name="WLCurKeyHour" /> - <spinner label="Min." name="WLCurKeyMin" /> + <spinner label="Min." name="WLCurKeyMin" label_width="100" width="66"/> <text name="WLCurKeyTimeText2"> Key-Voreinstellung: </text> @@ -79,8 +79,8 @@ Zykluslänge: </text> <spinner label="Std." name="WLLengthOfDayHour" /> - <spinner label="Min." name="WLLengthOfDayMin" /> - <spinner label="Sek." name="WLLengthOfDaySec" /> + <spinner label="Min." name="WLLengthOfDayMin" label_width="100" width="66"/> + <spinner label="Sek." name="WLLengthOfDaySec" label_width="100" width="66"/> <text name="DayCycleText3"> Vorschau: </text> diff --git a/indra/newview/skins/default/xui/de/floater_god_tools.xml b/indra/newview/skins/default/xui/de/floater_god_tools.xml index 716165bb6b..30b151ca58 100644 --- a/indra/newview/skins/default/xui/de/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/de/floater_god_tools.xml @@ -11,15 +11,15 @@ </text> <check_box label="Startbereich Einleitung" name="check prelude" tool_tip="Diese Region zu einem Startbereich machen."/> <check_box label="Sonne fest" name="check fixed sun" tool_tip="Fixiert den Sonnenstand (wie in „Region/Grundstück“ > „Terrain“."/> - <check_box height="32" label="Zuhause auf Teleport zurücksetzen" name="check reset home" tool_tip="Wenn Einwohner weg teleportieren, ihr Zuhause auf Zielposition setzen."/> - <check_box bottom_delta="-32" label="Sichtbar" name="check visible" tool_tip="Diese Region für Nicht-Götter sichtbar machen."/> + <check_box label="Zuhause auf Teleport zurücksetzen" name="check reset home" tool_tip="Wenn Einwohner weg teleportieren, ihr Zuhause auf Zielposition setzen."/> + <check_box label="Sichtbar" name="check visible" tool_tip="Diese Region für Nicht-Götter sichtbar machen."/> <check_box label="Schaden" name="check damage" tool_tip="Schaden in dieser Region aktivieren."/> <check_box label="Trafficüberwachung blockieren" name="block dwell" tool_tip="In dieser Region die Traffic-Berechnung abschalten."/> <check_box label="Terraformen blockieren" name="block terraform" tool_tip="Das Terraformen von Land verbieten (Benutzen Sie dies um Leuten das Terraformen ihres Landes zu verbieten)"/> <check_box label="Sandkasten" name="is sandbox" tool_tip="Sandkastenregion ein-/ausschalten."/> - <button label="Terrain formen" label_selected="Terrain formen" name="Bake Terrain" tool_tip="Das aktuelle Terrain als Standard speichern." width="118"/> - <button label="Terrain zurücksetzen" label_selected="Terrain zurücksetzen" name="Revert Terrain" tool_tip="Das aktuelle Terrain mit dem Standard ersetzen." width="118"/> - <button label="Terrain tauschen" label_selected="Terrain tauschen" name="Swap Terrain" tool_tip="Aktuelles Terrain gegen Standard austauschen." width="118"/> + <button label="Terrain formen" label_selected="Terrain formen" name="Bake Terrain" tool_tip="Das aktuelle Terrain als Standard speichern." width="120"/> + <button label="Terrain zurücksetzen" label_selected="Terrain zurücksetzen" name="Revert Terrain" tool_tip="Das aktuelle Terrain mit dem Standard ersetzen." width="120"/> + <button label="Terrain tauschen" label_selected="Terrain tauschen" name="Swap Terrain" tool_tip="Aktuelles Terrain gegen Standard austauschen." width="120"/> <text name="estate id"> Grundstücks-ID: </text> @@ -32,11 +32,11 @@ </text> <line_editor left_delta="110" name="gridposx" tool_tip="Die X-Rasterposition dieser Region" width="35"/> <line_editor left_delta="45" name="gridposy" tool_tip="Die Y-Rasterposition dieser Region" width="35"/> - <text name="Redirect to Grid: "> + <text name="Redirect to Grid: " width="110"> Auf Raster umleiten: </text> - <line_editor left_delta="110" name="redirectx" width="35"/> - <line_editor left_delta="45" name="redirecty" width="35"/> + <line_editor left_delta="110" name="redirectx" width="35" left_pad="0"/> + <line_editor left_delta="45" name="redirecty" width="35" /> <text font="SansSerifSmall" name="billable factor text"> Abrechnungsfaktor: </text> @@ -45,8 +45,8 @@ </text> <button label="Aktualisieren" label_selected="Aktualisieren" name="Refresh" tool_tip="Klicken Sie hier, um die obigen Informationen zu aktualisieren."/> <button label="Übernehmen" label_selected="Übernehmen" name="Apply" tool_tip="Klicken Sie hier, um die obigen Änderungen zu übernehmen."/> - <button label="Region auswählen" label_selected="Region auswählen" left="136" name="Select Region" tool_tip="Die gesamte Region mit dem Landwerkzeug auswählen." width="130"/> - <button label="Automatisch speichern" label_selected="Automatisch speichern" left="136" name="Autosave now" tool_tip="gzipped-Status im Autosave-Verzeichnis speichern." width="130"/> + <button label="Region auswählen" label_selected="Region auswählen" left="136" name="Select Region" tool_tip="Die gesamte Region mit dem Landwerkzeug auswählen." width="132"/> + <button label="Automatisch speichern" label_selected="Automatisch speichern" left="136" name="Autosave now" tool_tip="gzipped-Status im Autosave-Verzeichnis speichern." width="132"/> </panel> <panel label="Objekte" name="objects"> <panel.string name="no_target"> diff --git a/indra/newview/skins/default/xui/de/floater_image_preview.xml b/indra/newview/skins/default/xui/de/floater_image_preview.xml index 7f66234dab..fd675f8808 100644 --- a/indra/newview/skins/default/xui/de/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/de/floater_image_preview.xml @@ -28,5 +28,5 @@ Speichern Sie das Bild als 24 Bit Targa (.tga). </text> <check_box label="Verlustfreie Komprimierung verwenden" name="lossless_check"/> <button label="Abbrechen" name="cancel_btn"/> - <button label="Hochladen ([AMOUNT] L$)" name="ok_btn"/> + <button label="Hochladen ([AMOUNT] L$)" name="ok_btn" width="146"/> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_inspect.xml b/indra/newview/skins/default/xui/de/floater_inspect.xml index 939aa964c0..da97ceb2d8 100644 --- a/indra/newview/skins/default/xui/de/floater_inspect.xml +++ b/indra/newview/skins/default/xui/de/floater_inspect.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater min_width="450" name="inspect" title="OBJEKTE UNTERSUCHEN"> +<floater min_width="460" name="inspect" title="OBJEKTE UNTERSUCHEN" width="460"> <floater.string name="timeStamp"> [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] </floater.string> <scroll_list name="object_list" tool_tip="Wählen Sie ein Objekt aus dieser Liste, um es in der Second Life-Welt zu markieren"> <scroll_list.columns label="Objektname" name="object_name"/> - <scroll_list.columns label="Besitzer" name="owner_name"/> + <scroll_list.columns label="Besitzer" name="owner_name" /> <scroll_list.columns label="Ersteller" name="creator_name"/> - <scroll_list.columns label="Erstellungsdatum" name="creation_date"/> + <scroll_list.columns label="Erstellungsdatum" name="creation_date" width="116"/> </scroll_list> <button label="Besitzerprofil einsehen..." name="button owner" tool_tip="Profil des Besitzers des markierten Objekts einsehen" width="155"/> <button label="Erstellerprofil einsehen..." left="175" name="button creator" tool_tip="Profil des ursprünglichen Erstellers des markierten Objekts einsehen" width="155"/> diff --git a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml index e894f666c9..f98e23bbc4 100644 --- a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml @@ -59,10 +59,10 @@ Nächster Eigentümer: </text> <check_box label="Bearbeiten" name="CheckNextOwnerModify"/> - <check_box label="Kopieren" left_delta="85" name="CheckNextOwnerCopy"/> + <check_box label="Kopieren" left_delta="55" name="CheckNextOwnerCopy"/> <check_box label="Wiederverkaufen" name="CheckNextOwnerTransfer"/> <check_box label="Zum Verkauf" name="CheckPurchase"/> - <combo_box name="combobox sale copy"> + <combo_box name="combobox sale copy" left_pad="25"> <combo_box.item label="Kopieren" name="Copy"/> <combo_box.item label="Original" name="Original"/> </combo_box> diff --git a/indra/newview/skins/default/xui/de/floater_lsl_guide.xml b/indra/newview/skins/default/xui/de/floater_lsl_guide.xml index 1d6f690d3c..73c21edc67 100644 --- a/indra/newview/skins/default/xui/de/floater_lsl_guide.xml +++ b/indra/newview/skins/default/xui/de/floater_lsl_guide.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="script ed float" title="LSL-REFERENZ"> <check_box label="Cursor folgen" name="lock_check"/> - <combo_box label="Sperren" name="history_combo"/> + <combo_box label="Sperren" name="history_combo" left_pad="50" width="80"/> <button label="Zurück" name="back_btn"/> <button label="Weiter" name="fwd_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_media_browser.xml b/indra/newview/skins/default/xui/de/floater_media_browser.xml index 18adb5ee7f..2d438dfe21 100644 --- a/indra/newview/skins/default/xui/de/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/de/floater_media_browser.xml @@ -14,8 +14,8 @@ <button label="Los" name="go"/> </layout_panel> <layout_panel name="time_controls"> - <button label="zurückspulen" name="rewind"/> - <button label="anhalten" name="stop"/> + <button label="zurückspulen" name="rewind" width="100"/> + <button label="anhalten" name="stop" left_pad="20"/> <button label="vorwärts" name="seek"/> </layout_panel> <layout_panel name="parcel_owner_controls"> diff --git a/indra/newview/skins/default/xui/de/floater_mem_leaking.xml b/indra/newview/skins/default/xui/de/floater_mem_leaking.xml index b730146aa6..fdc9b950b6 100644 --- a/indra/newview/skins/default/xui/de/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/de/floater_mem_leaking.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="MemLeak" title="SPEICHERVERLUST SIMULIEREN"> - <spinner label="Verlustgeschwindigkeit (Bytes pro Frame):" name="leak_speed"/> - <spinner label="Max. Speicherverlust (MB):" name="max_leak"/> + <spinner label="Verlustgeschwindigkeit (Bytes pro Frame):" name="leak_speed" label_width="224"/> + <spinner label="Max. Speicherverlust (MB):" name="max_leak" label_width="224"/> <text name="total_leaked_label"> Aktueller Speicherverlust:[SIZE] KB </text> diff --git a/indra/newview/skins/default/xui/de/floater_openobject.xml b/indra/newview/skins/default/xui/de/floater_openobject.xml index f0b6aa498b..c3e7052283 100644 --- a/indra/newview/skins/default/xui/de/floater_openobject.xml +++ b/indra/newview/skins/default/xui/de/floater_openobject.xml @@ -3,6 +3,6 @@ <text name="object_name"> [DESC]: </text> - <button label="In Inventar kopieren" label_selected="In Inventar kopieren" name="copy_to_inventory_button" width="132"/> - <button label="Kopieren und anziehen" label_selected="Kopieren und anziehen" left="150" name="copy_and_wear_button" width="132"/> + <button label="In Inventar kopieren" label_selected="In Inventar kopieren" name="copy_to_inventory_button" width="120"/> + <button label="Kopieren und anziehen" label_selected="Kopieren und anziehen" left_pad="6" name="copy_and_wear_button" width="136"/> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_pay_object.xml b/indra/newview/skins/default/xui/de/floater_pay_object.xml index 92f5ea415e..bc714361cc 100644 --- a/indra/newview/skins/default/xui/de/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/de/floater_pay_object.xml @@ -17,10 +17,10 @@ <text left="105" name="object_name_text"> ... </text> - <button label="1 L$" label_selected="1 L$" left="105" name="fastpay 1"/> - <button label="5 L$" label_selected="5 L$" left="190" name="fastpay 5"/> - <button label="10 L$" label_selected="10 L$" left="105" name="fastpay 10"/> - <button label="20 L$" label_selected="20 L$" left="190" name="fastpay 20"/> + <button label="1 L$" label_selected="1 L$" name="fastpay 1"/> + <button label="5 L$" label_selected="5 L$" name="fastpay 5"/> + <button label="10 L$" label_selected="10 L$" name="fastpay 10"/> + <button label="20 L$" label_selected="20 L$" name="fastpay 20"/> <text name="amount text"> Oder Betrag auswählen: </text> diff --git a/indra/newview/skins/default/xui/de/floater_postcard.xml b/indra/newview/skins/default/xui/de/floater_postcard.xml index 37a0a0ad1d..91e0bb8133 100644 --- a/indra/newview/skins/default/xui/de/floater_postcard.xml +++ b/indra/newview/skins/default/xui/de/floater_postcard.xml @@ -3,19 +3,19 @@ <text name="to_label"> E-Mail des Empfängers: </text> - <line_editor left="145" name="to_form" width="125"/> + <line_editor left_delta="145" name="to_form" width="125"/> <text name="from_label"> Ihre E-Mail: </text> - <line_editor left="145" name="from_form" width="125"/> + <line_editor left_delta="145" name="from_form" width="125"/> <text name="name_label"> Ihr Name: </text> - <line_editor left="145" name="name_form" width="125"/> + <line_editor left_delta="145" name="name_form" width="125"/> <text name="subject_label"> Betreff: </text> - <line_editor label="Betreff hier eingeben." left="145" name="subject_form" width="125"/> + <line_editor label="Betreff hier eingeben." left_delta="145" name="subject_form" width="125"/> <text name="msg_label"> Nachricht: </text> @@ -25,7 +25,7 @@ <check_box label="Im Web veröffentlichen" name="allow_publish_check" tool_tip="Veröffentlicht diese Postkarte im Web."/> <check_box label="Ab-18-Inhalt" name="mature_check" tool_tip="Diese Postkarte enthält nicht jugendfreie Inhalte."/> <button label="?" name="publish_help_btn"/> - <text name="fine_print"> + <text name="fine_print" bottom_delta="21" height="140"> Wenn sich der Empfänger bei SL anmeldet, erhalten Sie einen Empfehlungsbonus. </text> <button label="Abbrechen" name="cancel_btn"/> diff --git a/indra/newview/skins/default/xui/de/floater_preview_animation.xml b/indra/newview/skins/default/xui/de/floater_preview_animation.xml index e98faeb1f4..b2e9c2e66d 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_animation.xml @@ -3,10 +3,10 @@ <floater.string name="Title"> Animation: [NAME] </floater.string> - <text name="desc txt"> + <text name="desc txt" width="140"> Beschreibung: </text> - <line_editor left="98" name="desc" width="189"/> + <line_editor left="108" name="desc" width="160"/> <button label="In Welt abspielen" label_selected="Stopp" name="Anim play btn" tool_tip="Diese Animation so wiedergeben, dass andere sie sehen können." width="116"/> <button label="Lokal wiedergeben" label_selected="Stopp" left="171" name="Anim audition btn" tool_tip="Diese Animation so wiedergeben, dass nur Sie sie sehen." width="116"/> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture.xml index 51c41a3209..1426a33d1d 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_gesture.xml @@ -36,7 +36,7 @@ <text name="replace_text" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht's“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht's sagen“ und die zugehörige Geste wird abgespielt."> Ersetzen mit: </text> - <line_editor name="replace_editor" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht's“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht's sagen“ und die zugehörige Geste wird abgespielt."/> + <line_editor name="replace_editor" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht's“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht's sagen“ und die zugehörige Geste wird abgespielt." left_delta="94" width="160"/> <text name="key_label"> Tastenkürzel: </text> @@ -45,8 +45,8 @@ <text name="library_label"> Bibliothek: </text> - <scroll_list name="library_list"/> - <button label="Hinzufügen >>" name="add_btn"/> + <scroll_list name="library_list" width="166"/> + <button label="Hinzufügen >>" name="add_btn" left_pad="6" width="94"/> <text name="steps_label"> Schritte: </text> diff --git a/indra/newview/skins/default/xui/de/floater_report_abuse.xml b/indra/newview/skins/default/xui/de/floater_report_abuse.xml index 3edf5959a2..f471866967 100644 --- a/indra/newview/skins/default/xui/de/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/de/floater_report_abuse.xml @@ -23,7 +23,8 @@ {128.1, 128.1, 15.4} </text> <text bottom_delta="-38" height="32" name="select_object_label"> - Klicken Sie auf die Schaltfläche, dann auf das entsprechende Objekt: + Klicken Sie auf die Schaltfläche, dann auf das entsprechende +Objekt: </text> <button label="" label_selected="" name="pick_btn" tool_tip="Objektauswahl – Wählen Sie ein Objekt als Thema dieses Berichts aus"/> <text name="object_name_label"> @@ -95,7 +96,7 @@ <text name="bug_aviso"> Bitte beschreiben Sie alles so genau wie möglich. </text> - <text_editor bottom_delta="-136" height="130" name="details_edit"/> + <text_editor bottom_delta="-136" height="70" name="details_edit"/> <text bottom_delta="-20" name="incomplete_title"> * Unvollständige Berichte werden nicht bearbeitet </text> diff --git a/indra/newview/skins/default/xui/de/floater_script_preview.xml b/indra/newview/skins/default/xui/de/floater_script_preview.xml index 27c40aff07..1ea3803aea 100644 --- a/indra/newview/skins/default/xui/de/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/de/floater_script_preview.xml @@ -3,7 +3,7 @@ <floater.string name="Title"> Skript: [NAME] </floater.string> - <text name="desc txt"> + <text name="desc txt" width="120"> Beschreibung: </text> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_sell_land.xml b/indra/newview/skins/default/xui/de/floater_sell_land.xml index 2bc7356e65..a2c86e7bb0 100644 --- a/indra/newview/skins/default/xui/de/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/de/floater_sell_land.xml @@ -5,13 +5,13 @@ <text name="info_parcel_label"> Parzelle: </text> - <text bottom_delta="-5" height="16" name="info_parcel"> + <text bottom_delta="-5" height="16" name="info_parcel" left="70"> PARZELLENNAME </text> <text name="info_size_label"> Größe: </text> - <text bottom_delta="-21" height="32" name="info_size"> + <text bottom_delta="-21" height="32" name="info_size" left="70"> [AREA] m². </text> <text bottom_delta="-57" height="28" name="info_action"> @@ -20,7 +20,7 @@ <text name="price_label"> 1. Preis festlegen: </text> - <text name="price_text"> + <text name="price_text" > Einen angemessenen Preis auswählen. </text> <text name="price_ld"> diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml index 80573d69ad..b48c9a77c8 100644 --- a/indra/newview/skins/default/xui/de/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml @@ -60,7 +60,7 @@ <spinner label="Höhe" name="snapshot_height"/> <check_box label="Seitenverhältnis beibehalten" name="keep_aspect_check"/> <slider label="Bildqualität" name="image_quality_slider"/> - <text name="layer_type_label" width="63"> + <text name="layer_type_label" width="66"> Aufnehmen: </text> <combo_box label="Bildlayer" left="73" name="layer_types" width="132"> diff --git a/indra/newview/skins/default/xui/de/floater_stats.xml b/indra/newview/skins/default/xui/de/floater_stats.xml index dcea484e13..1eb2dd4288 100644 --- a/indra/newview/skins/default/xui/de/floater_stats.xml +++ b/indra/newview/skins/default/xui/de/floater_stats.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Statistics" title="STATISTIKEN"> - <scroll_container name="statistics_scroll"> - <container_view name="statistics_view"> +<floater name="Statistics" title="STATISTIKEN" width="280"> + <scroll_container name="statistics_scroll" width="280"> + <container_view name="statistics_view" width="280"> <stat_view label="Basic" name="basic"> <stat_bar label="FPS" name="fps"/> <stat_bar label="Bandbreite" name="bandwidth"/> diff --git a/indra/newview/skins/default/xui/de/floater_telehub.xml b/indra/newview/skins/default/xui/de/floater_telehub.xml index 923b4c0079..4d3c96bc87 100644 --- a/indra/newview/skins/default/xui/de/floater_telehub.xml +++ b/indra/newview/skins/default/xui/de/floater_telehub.xml @@ -6,15 +6,15 @@ <text name="status_text_not_connected"> Kein Telehub verbunden. </text> - <text name="help_text_connected"> + <text name="help_text_connected" width="300"> Klicken Sie zum Entfernen auf „Trennen“. </text> <text bottom_delta="-18" height="38" name="help_text_not_connected"> Wählen Sie ein Objekt und klicken Sie auf „Mit Telehub verbinden“. </text> - <button label="Mit Telehub verbinden" name="connect_btn" width="122"/> - <button label="Trennen" left="142" name="disconnect_btn" width="98"/> + <button label="Mit Telehub verbinden" name="connect_btn" width="134"/> + <button label="Trennen" left="152" name="disconnect_btn" width="88"/> <text name="spawn_points_text" width="230"> Spawn-Punkte (Positionen, nicht Objekte): </text> diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml index b2f8cbed45..b5c02cce0b 100644 --- a/indra/newview/skins/default/xui/de/floater_tools.xml +++ b/indra/newview/skins/default/xui/de/floater_tools.xml @@ -363,7 +363,7 @@ <text name="edit_object"> Objekteigenschaften bearbeiten: </text> - <check_box label="Flexibler Weg" name="Flexible1D Checkbox Ctrl" tool_tip="Bewirkt, dass sich das Objekt um die Z-Achse biegen kann. (Nur Client-Seite)"/> + <check_box label="Flexibler Pfad" name="Flexible1D Checkbox Ctrl" tool_tip="Bewirkt, dass sich das Objekt um die Z-Achse biegen kann. (Nur Client-Seite)"/> <spinner label="Weichheit" name="FlexNumSections"/> <spinner label="Schwerkraft" name="FlexGravity"/> <spinner label="Ziehen" name="FlexFriction"/> diff --git a/indra/newview/skins/default/xui/de/floater_url_entry.xml b/indra/newview/skins/default/xui/de/floater_url_entry.xml index 392d53a33d..f5fa449c85 100644 --- a/indra/newview/skins/default/xui/de/floater_url_entry.xml +++ b/indra/newview/skins/default/xui/de/floater_url_entry.xml @@ -3,10 +3,10 @@ <text name="media_label"> Medien-URL: </text> - <button label="OK" name="ok_btn" /> - <button label="Abbrechen" name="cancel_btn" width="75" /> - <button label="Löschen" name="clear_btn" /> - <text name="loading_label"> + <button label="OK" name="ok_btn" width="30"/> + <button label="Abbrechen" name="cancel_btn" width="66" /> + <button label="Löschen" name="clear_btn" left_pad="100"/> + <text name="loading_label" left="120"> Wird geladen... </text> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_water.xml b/indra/newview/skins/default/xui/de/floater_water.xml index ed18dfdfff..ecd6d7ff3e 100644 --- a/indra/newview/skins/default/xui/de/floater_water.xml +++ b/indra/newview/skins/default/xui/de/floater_water.xml @@ -3,7 +3,7 @@ <floater.string name="WLDefaultWaterNames"> Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez </floater.string> - <text name="KeyFramePresetsText"> + <text name="KeyFramePresetsText" width="116"> Voreinstellungen: </text> <button label="Neu" label_selected="Neu" name="WaterNewPreset"/> diff --git a/indra/newview/skins/default/xui/de/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/de/floater_whitelist_entry.xml index 35a5ec35f7..1332509529 100644 --- a/indra/newview/skins/default/xui/de/floater_whitelist_entry.xml +++ b/indra/newview/skins/default/xui/de/floater_whitelist_entry.xml @@ -5,5 +5,5 @@ </text> <line_editor name="whitelist_entry" tool_tip="Eine URL oder URL-Patten in die Whitelist eingeben"/> <button label="OK" name="ok_btn"/> - <button label="Abbrechen" name="cancel_btn"/> + <button label="Abbrechen" name="cancel_btn" width="80"/> </floater> diff --git a/indra/newview/skins/default/xui/de/inspect_avatar.xml b/indra/newview/skins/default/xui/de/inspect_avatar.xml index 489e257867..eedbdc9904 100644 --- a/indra/newview/skins/default/xui/de/inspect_avatar.xml +++ b/indra/newview/skins/default/xui/de/inspect_avatar.xml @@ -16,9 +16,9 @@ Dies ist meine Beschreibung und ich finde sie wirklich gut! </text> <slider name="volume_slider" tool_tip="Lautstärke" value="0.5"/> - <button label="Freund hinzufügen" name="add_friend_btn"/> + <button label="Freund hinzufügen" name="add_friend_btn" width="110"/> <button label="IM" name="im_btn"/> - <button label="Mehr" name="view_profile_btn"/> + <button label="Mehr" name="view_profile_btn" width="44" left_delta="120"/> <panel name="moderator_panel"> <button label="Voice deaktivieren" name="disable_voice"/> <button label="Voice aktivieren" name="enable_voice"/> diff --git a/indra/newview/skins/default/xui/de/inspect_group.xml b/indra/newview/skins/default/xui/de/inspect_group.xml index 81d946be9d..badb47bf08 100644 --- a/indra/newview/skins/default/xui/de/inspect_group.xml +++ b/indra/newview/skins/default/xui/de/inspect_group.xml @@ -24,7 +24,7 @@ </text> <text name="group_details"> Eine Gruppe für Leute, die sich gerne mit Elchen unterhält. -Hoch solln sie leben! Elche forever! Und auch Mungos! +Hoch solln sie leben! Elche forever! Und auch Mungos! </text> <text name="group_cost"> Mitgliedschaft: 123 L$ diff --git a/indra/newview/skins/default/xui/de/inspect_object.xml b/indra/newview/skins/default/xui/de/inspect_object.xml index 61f2cc8dc9..bcf4b91527 100644 --- a/indra/newview/skins/default/xui/de/inspect_object.xml +++ b/indra/newview/skins/default/xui/de/inspect_object.xml @@ -39,7 +39,7 @@ Besitzer secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about </text> <button label="Kaufen" name="buy_btn"/> <button label="Zahlen" name="pay_btn"/> - <button label="Kopie nehmen" name="take_free_copy_btn"/> + <button label="Kopie nehmen" name="take_free_copy_btn" width="100"/> <button label="Berühren" name="touch_btn"/> <button label="Sitzen" name="sit_btn"/> <button label="Öffnen" name="open_btn"/> diff --git a/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml index eb4832770e..eeb5de749d 100644 --- a/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="block_list_panel"> - <text name="title_text"> +<panel name="block_list_panel" width="300"> + <text name="title_text" left_pad="5" width="260"> Liste der ignorierten Einwohner </text> - <scroll_list name="blocked" tool_tip="Liste der zur Zeit ignorierten Einwohner"/> + <scroll_list name="blocked" tool_tip="Liste der zur Zeit ignorierten Einwohner" width="290"/> <button label="Einwohner ignorieren" label_selected="Einwohner ignorieren..." name="Block resident..." tool_tip="Wählen Sie einen Einwohner, um ihn zu ignorieren"/> <button label="Objekt nach Name ignorieren" label_selected="Objekt nach Name ignorieren..." name="Block object by name..." tool_tip="Ein Objekt auswählen, um nach Namen zu ignorieren."/> <button label="Freischalten" label_selected="Freischalten" name="Unblock" tool_tip="Einwohner oder Objekt von der Liste der ignorierten Einwohner oder Objekte entfernen"/> diff --git a/indra/newview/skins/default/xui/de/panel_edit_alpha.xml b/indra/newview/skins/default/xui/de/panel_edit_alpha.xml index 4b48950341..b6c53be778 100644 --- a/indra/newview/skins/default/xui/de/panel_edit_alpha.xml +++ b/indra/newview/skins/default/xui/de/panel_edit_alpha.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="edit_alpha_panel"> - <panel name="avatar_alpha_color_panel"> - <texture_picker label="Alpha: Unten" name="Lower Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Alpha: Oben" name="Upper Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> +<panel name="edit_alpha_panel" width="320"> + <panel name="avatar_alpha_color_panel" width="300"> + <texture_picker label="Alpha: Unten" name="Lower Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken" width="70"/> + <texture_picker label="Alpha: Oben" name="Upper Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken" width="66"/> <texture_picker label="Kopf: Alpha" name="Head Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Alpha: Augen" name="Eye Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Alpha: Haare" name="Hair Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> + <texture_picker label="Alpha: Augen" name="Eye Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken" width="72"/> + <texture_picker label="Alpha: Haare" name="Hair Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken" width="70"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/de/panel_edit_tattoo.xml index c05a3a6645..12649e9251 100644 --- a/indra/newview/skins/default/xui/de/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/de/panel_edit_tattoo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_tattoo_panel"> <panel name="avatar_tattoo_color_panel"> - <texture_picker label="Kopftattoo" name="Head Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Obere Tattoos" name="Upper Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Untere Tattoos" name="Lower Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/> + <texture_picker label="Kopftattoo" name="Head Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken" width="80"/> + <texture_picker label="Obere Tattoos" name="Upper Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken" width="80"/> + <texture_picker label="Untere Tattoos" name="Lower Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken" width="80"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_group_invite.xml b/indra/newview/skins/default/xui/de/panel_group_invite.xml index 8e1fb5e4b2..fb357093bb 100644 --- a/indra/newview/skins/default/xui/de/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/de/panel_group_invite.xml @@ -9,18 +9,18 @@ <panel.string name="already_in_group"> Einige der ausgewählten Einwohner sind bereits Gruppenmitglieder und haben aus diesem Grund keine Einladung erhalten. </panel.string> - <text name="help_text"> + <text name="help_text" top="10"> Sie können mehrere Einwohner auswählen, um diese in Ihre Gruppe einzuladen. Klicken Sie hierzu auf „Einwohnerliste öffnen“. </text> - <button label="Einwohnerliste öffnen" name="add_button" tool_tip=""/> + <button label="Einwohnerliste öffnen" name="add_button" tool_tip="" top_delta="62"/> <name_list name="invitee_list" tool_tip="Halten Sie zur Mehrfachauswahl die Strg-Taste gedrückt und klicken Sie auf die Namen."/> <button label="Auswahl aus Liste löschen" name="remove_button" tool_tip="Die oben ausgewählten Einwohner von der Einladungsliste entfernen."/> <text name="role_text"> Wählen Sie eine Rolle aus: </text> <combo_box name="role_name" tool_tip="Wählen Sie aus der Liste der Rollen, die Sie an Mitglieder vergeben dürfen."/> - <button label="Einladungen versenden" name="ok_button"/> - <button label="Abbrechen" name="cancel_button"/> + <button label="Einladungen versenden" name="ok_button" width="136"/> + <button label="Abbrechen" name="cancel_button" width="66"/> <string name="GroupInvitation"> Gruppeneinladung </string> diff --git a/indra/newview/skins/default/xui/de/panel_group_land_money.xml b/indra/newview/skins/default/xui/de/panel_group_land_money.xml index e9743c5d5d..d6cfb22cfe 100644 --- a/indra/newview/skins/default/xui/de/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/de/panel_group_land_money.xml @@ -30,13 +30,13 @@ <text name="total_contributed_land_value"> [AREA] m². </text> - <text name="total_land_in_use_label"> + <text name="total_land_in_use_label" left="28" width="180"> Insgesamt verwendetes Land: </text> <text name="total_land_in_use_value"> [AREA] m². </text> - <text name="land_available_label"> + <text name="land_available_label" left="4"> Land verfügbar: </text> <text name="land_available_value"> @@ -54,10 +54,10 @@ <text name="your_contribution_max_value"> ([AMOUNT] max.) </text> - <text name="group_over_limit_text"> + <text name="group_over_limit_text" width="300"> Um das benutzte Land zu unterstützen, sind weitere Landnutzungsrechte erforderlich. </text> - <text name="group_money_heading"> + <text name="group_money_heading" left="10" top_pad="10"> Gruppen-L$ </text> <tab_container name="group_money_tab_container"> diff --git a/indra/newview/skins/default/xui/de/panel_group_roles.xml b/indra/newview/skins/default/xui/de/panel_group_roles.xml index 3103fd65b1..b2e885e639 100644 --- a/indra/newview/skins/default/xui/de/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/de/panel_group_roles.xml @@ -15,8 +15,8 @@ um mehrere Mitglieder auszuwählen. </panel.string> <filter_editor label="Mitglieder filtern" name="filter_input"/> <name_list name="member_list"> - <name_list.columns label="Mitglied" name="name"/> - <name_list.columns label="Übereignung" name="donated"/> + <name_list.columns label="Mitglied" name="name" relative_width="0.30"/> + <name_list.columns label="Übereignung" name="donated" relative_width="0.33"/> <name_list.columns label="Status" name="online"/> </name_list> <button label="Einladen" name="member_invite"/> diff --git a/indra/newview/skins/default/xui/de/panel_groups.xml b/indra/newview/skins/default/xui/de/panel_groups.xml index 95a2ef14f9..f857a6c7ac 100644 --- a/indra/newview/skins/default/xui/de/panel_groups.xml +++ b/indra/newview/skins/default/xui/de/panel_groups.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="groups"> - <text name="groupdesc"> + <text name="groupdesc" width="300"> Die derzeit aktive Gruppe ist fett hervorgehoben. </text> - <text name="groupcount"> + <text name="groupcount" width="360"> Sie sind Mitglied bei [COUNT] Gruppen (von max. [MAX]). </text> <button label="IM/Anruf" name="IM" tool_tip="Beginnt eine Instant Message-Sitzung" /> diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml index bd82fc6872..2a6ea42c73 100644 --- a/indra/newview/skins/default/xui/de/panel_login.xml +++ b/indra/newview/skins/default/xui/de/panel_login.xml @@ -23,7 +23,7 @@ <text name="start_location_text"> Hier anfangen: </text> - <combo_box name="start_location_combo"> + <combo_box name="start_location_combo" width="150"> <combo_box.item label="Mein letzter Standort" name="MyLastLocation"/> <combo_box.item label="Mein Zuhause" name="MyHome"/> <combo_box.item label="<Region eingeben>" name="Typeregionname"/> diff --git a/indra/newview/skins/default/xui/de/panel_media_settings_security.xml b/indra/newview/skins/default/xui/de/panel_media_settings_security.xml index 8ff013f66b..adc0d22ce6 100644 --- a/indra/newview/skins/default/xui/de/panel_media_settings_security.xml +++ b/indra/newview/skins/default/xui/de/panel_media_settings_security.xml @@ -2,7 +2,8 @@ <panel label="Sicherheit" name="Media Settings Security"> <check_box initial_value="false" label="Nur Zugriff auf festgelegte URL-Muster zulassen" name="whitelist_enable"/> <text name="home_url_fails_some_items_in_whitelist"> - Einträge, die für die Startseite nicht akzeptiert werden, sind markiert: + Einträge, die für die Startseite nicht akzeptiert +werden, sind markiert: </text> <button label="Hinzufügen" name="whitelist_add"/> <button label="Löschen" name="whitelist_del"/> diff --git a/indra/newview/skins/default/xui/de/panel_nearby_chat.xml b/indra/newview/skins/default/xui/de/panel_nearby_chat.xml index 699bddc6eb..3f4f5a71b5 100644 --- a/indra/newview/skins/default/xui/de/panel_nearby_chat.xml +++ b/indra/newview/skins/default/xui/de/panel_nearby_chat.xml @@ -2,7 +2,7 @@ <!-- All our XML is utf-8 encoded. --> <panel name="nearby_chat"> <panel name="chat_caption"> - <text name="sender_name"> + <text name="sender_name" width="200"> CHAT IN DER NÄHE </text> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_notes.xml b/indra/newview/skins/default/xui/de/panel_notes.xml index e6a63fc0c8..374c117cdd 100644 --- a/indra/newview/skins/default/xui/de/panel_notes.xml +++ b/indra/newview/skins/default/xui/de/panel_notes.xml @@ -13,10 +13,10 @@ </scroll_container> </layout_panel> <layout_panel name="notes_buttons_panel"> - <button label="Freund hinzufügen" name="add_friend" tool_tip="Bieten Sie dem Einwohner die Freundschaft an"/> - <button label="IM" name="im" tool_tip="Instant Messenger öffnen"/> + <button label="Freund hinzufügen" name="add_friend" tool_tip="Bieten Sie dem Einwohner die Freundschaft an" width="109"/> + <button label="IM" name="im" tool_tip="Instant Messenger öffnen" width="24"/> <button label="Anrufen" name="call" tool_tip="Diesen Einwohner anrufen"/> - <button label="Karte" name="show_on_map_btn" tool_tip="Einwohner auf Karte anzeigen"/> + <button label="Karte" name="show_on_map_btn" tool_tip="Einwohner auf Karte anzeigen" width="40"/> <button label="Teleportieren" name="teleport" tool_tip="Teleport anbieten"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/de/panel_picks.xml b/indra/newview/skins/default/xui/de/panel_picks.xml index a07bc170f6..df68381082 100644 --- a/indra/newview/skins/default/xui/de/panel_picks.xml +++ b/indra/newview/skins/default/xui/de/panel_picks.xml @@ -11,7 +11,7 @@ </panel> <panel name="buttons_cucks"> <button label="Info" name="info_btn" tool_tip="Auswahl-Information anzeigen"/> - <button label="Teleportieren" name="teleport_btn" tool_tip="Zu entsprechendem Standort teleportieren"/> + <button label="Teleportieren" name="teleport_btn" tool_tip="Zu entsprechendem Standort teleportieren" width="100"/> <button label="Karte" name="show_on_map_btn" tool_tip="Den entsprechenden Standort auf der Karte anzeigen"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_places.xml b/indra/newview/skins/default/xui/de/panel_places.xml index 8ee26f4e5f..0b3ed26dce 100644 --- a/indra/newview/skins/default/xui/de/panel_places.xml +++ b/indra/newview/skins/default/xui/de/panel_places.xml @@ -5,11 +5,11 @@ <filter_editor label="Orte filtern" name="Filter"/> <panel name="button_panel"> <button label="Teleportieren" name="teleport_btn" tool_tip="Zu ausgewähltem Standort teleportieren"/> - <button label="Karte" name="map_btn"/> + <button label="Karte" name="map_btn" width="60"/> <button label="Bearbeiten" name="edit_btn" tool_tip="Landmarken-Info bearbeiten"/> <button name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/> <button label="Schließen" name="close_btn"/> - <button label="Abbrechen" name="cancel_btn"/> - <button label="Speichern" name="save_btn"/> + <button label="Abbrechen" name="cancel_btn" width="66"/> + <button label="Speichern" name="save_btn" width="66"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml index 14d4e01586..c9d6faf3ba 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml @@ -8,7 +8,7 @@ </panel.string> <check_box label="Blasen-Chat" name="bubble_text_chat"/> <color_swatch name="background" tool_tip="Farbe für Blasen-Chat auswählen"/> - <slider label="Deckkraft" name="bubble_chat_opacity"/> + <slider label="Deckkraft" name="bubble_chat_opacity" label_width="66"/> <text name="AspectRatioLabel1" tool_tip="Breite/Höhe"> Seitenverhältnis </text> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_general.xml b/indra/newview/skins/default/xui/de/panel_preferences_general.xml index 490b0b296b..2af1b72472 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_general.xml @@ -19,7 +19,7 @@ <text name="language_textbox2"> (Erfordert Neustart) </text> - <text name="maturity_desired_prompt"> + <text name="maturity_desired_prompt" width="350"> Ich möchte auf Inhalt mit folgender Alterseinstufung zugreifen: </text> <text name="maturity_desired_textbox"/> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml index 0c0924026e..43664f4f8a 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml @@ -23,5 +23,5 @@ Speicherort für Protokolle: </text> <button label="Durchsuchen" label_selected="Durchsuchen" name="log_path_button"/> - <button label="Ignorierte Einwohner/Objekte" name="block_list"/> + <button label="Ignorierte Einwohner/Objekte" name="block_list" width="180"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_profile.xml b/indra/newview/skins/default/xui/de/panel_profile.xml index 82467eb570..4ce5ed8fba 100644 --- a/indra/newview/skins/default/xui/de/panel_profile.xml +++ b/indra/newview/skins/default/xui/de/panel_profile.xml @@ -38,10 +38,10 @@ </scroll_container> </layout_panel> <layout_panel name="profile_buttons_panel"> - <button label="Freund hinzufügen" name="add_friend" tool_tip="Bieten Sie dem Einwohner die Freundschaft an"/> - <button label="IM" name="im" tool_tip="Instant Messenger öffnen"/> + <button label="Freund hinzufügen" name="add_friend" tool_tip="Bieten Sie dem Einwohner die Freundschaft an" width="109"/> + <button label="IM" name="im" tool_tip="Instant Messenger öffnen" width="24"/> <button label="Anrufen" name="call" tool_tip="Diesen Einwohner anrufen"/> - <button label="Karte" name="show_on_map_btn" tool_tip="Einwohner auf Karte anzeigen"/> + <button label="Karte" name="show_on_map_btn" tool_tip="Einwohner auf Karte anzeigen" width="36"/> <button label="Teleportieren" name="teleport" tool_tip="Teleport anbieten"/> </layout_panel> <layout_panel name="profile_me_buttons_panel"> diff --git a/indra/newview/skins/default/xui/de/panel_profile_view.xml b/indra/newview/skins/default/xui/de/panel_profile_view.xml index 4d59c16e98..f02457dd80 100644 --- a/indra/newview/skins/default/xui/de/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/de/panel_profile_view.xml @@ -8,7 +8,7 @@ </string> <text_editor name="user_name" value="(wird geladen...)"/> <text name="status" value="Online"/> - <tab_container name="tabs"> + <tab_container name="tabs" tab_min_width="60"> <panel label="PROFIL" name="panel_profile"/> <panel label="AUSWAHL" name="panel_picks"/> <panel label="NOTIZEN & PRIVATSPHÄRE" name="panel_notes"/> diff --git a/indra/newview/skins/default/xui/de/panel_region_covenant.xml b/indra/newview/skins/default/xui/de/panel_region_covenant.xml index 14be8def7e..153082909a 100644 --- a/indra/newview/skins/default/xui/de/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/de/panel_region_covenant.xml @@ -18,7 +18,7 @@ <text name="estate_cov_lbl"> Vertrag: </text> - <text name="covenant_timestamp_text"> + <text name="covenant_timestamp_text" width="320"> Letzte Änderung am Mittwoch, den 31. Dez. 1969, 16:00:00 </text> <button label="?" name="covenant_help"/> @@ -28,7 +28,7 @@ <button label="Zurücksetzen" name="reset_covenant"/> <text name="covenant_help_text"> Änderungen am Vertrag werden für alle Parzellen auf dem - Grundstück übernommen. +Grundstück übernommen. </text> <text bottom_delta="-36" name="covenant_instructions"> Ziehen Sie eine Notizkarte an diese Stelle, um den Vertrag für dieses Grundstück zu ändern. @@ -63,7 +63,7 @@ <text name="changeable_lbl"> Unterteilen: </text> - <text name="changeable_clause"> + <text name="changeable_clause" width="366"> Land in dieser Region kann nicht zusammengelegt/geteilt werden. </text> <string name="can_resell"> diff --git a/indra/newview/skins/default/xui/de/panel_region_debug.xml b/indra/newview/skins/default/xui/de/panel_region_debug.xml index 40befab4dd..920a513308 100644 --- a/indra/newview/skins/default/xui/de/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/de/panel_region_debug.xml @@ -13,7 +13,7 @@ <check_box label="Physik deaktivieren" name="disable_physics_check" tool_tip="Physik in dieser Region deaktivieren"/> <button label="?" name="disable_physics_help"/> <button label="Übernehmen" name="apply_btn"/> - <text name="objret_text_lbl" width="105"> + <text name="objret_text_lbl" width="110"> Objekt zurückgeben </text> <text name="resident_text_lbl"> diff --git a/indra/newview/skins/default/xui/de/panel_region_texture.xml b/indra/newview/skins/default/xui/de/panel_region_texture.xml index d489b5bac8..f9997f300a 100644 --- a/indra/newview/skins/default/xui/de/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/de/panel_region_texture.xml @@ -36,14 +36,14 @@ <text name="height_text_lbl9"> Nordost </text> - <spinner label="Niedrig" name="height_start_spin_0"/> - <spinner label="Niedrig" name="height_start_spin_1"/> - <spinner label="Niedrig" name="height_start_spin_2"/> - <spinner label="Niedrig" name="height_start_spin_3"/> - <spinner label="Hoch" name="height_range_spin_0"/> - <spinner label="Hoch" name="height_range_spin_1"/> - <spinner label="Hoch" name="height_range_spin_2"/> - <spinner label="Hoch" name="height_range_spin_3"/> + <spinner label="Niedrig" name="height_start_spin_0" label_width="40"/> + <spinner label="Niedrig" name="height_start_spin_1" label_width="40"/> + <spinner label="Niedrig" name="height_start_spin_2" label_width="40"/> + <spinner label="Niedrig" name="height_start_spin_3" label_width="40"/> + <spinner label="Hoch" name="height_range_spin_0" label_width="40"/> + <spinner label="Hoch" name="height_range_spin_1" label_width="40"/> + <spinner label="Hoch" name="height_range_spin_2" label_width="40"/> + <spinner label="Hoch" name="height_range_spin_3" label_width="40"/> <text name="height_text_lbl10"> Diese Werte geben den Mischungsgrad für die obigen Texturen an. </text> diff --git a/indra/newview/skins/default/xui/de/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/de/panel_script_limits_my_avatar.xml index f6a1d7e9b5..16bf4e8eb4 100644 --- a/indra/newview/skins/default/xui/de/panel_script_limits_my_avatar.xml +++ b/indra/newview/skins/default/xui/de/panel_script_limits_my_avatar.xml @@ -4,7 +4,7 @@ Wird geladen... </text> <scroll_list name="scripts_list"> - <scroll_list.columns label="Größe (KB)" name="size"/> + <scroll_list.columns label="Größe (KB)" name="size" width="80"/> <scroll_list.columns label="URLs" name="urls"/> <scroll_list.columns label="Objektname" name="name"/> <scroll_list.columns label="Ort" name="location"/> diff --git a/indra/newview/skins/default/xui/de/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/de/panel_script_limits_region_memory.xml index c466c04e86..3eec66fe75 100644 --- a/indra/newview/skins/default/xui/de/panel_script_limits_region_memory.xml +++ b/indra/newview/skins/default/xui/de/panel_script_limits_region_memory.xml @@ -13,12 +13,12 @@ Wird geladen... </text> <scroll_list name="scripts_list"> - <scroll_list.columns label="Größe (KB)" name="size"/> + <scroll_list.columns label="Größe (KB)" name="size" width="80"/> <scroll_list.columns label="Objektname" name="name"/> - <scroll_list.columns label="Objekteigentümer" name="owner"/> + <scroll_list.columns label="Objekteigentümer" name="owner" width="130"/> <scroll_list.columns label="Parzelle / Standort" name="location"/> </scroll_list> - <button label="Liste aktualisieren" name="refresh_list_btn"/> + <button label="Liste aktualisieren" name="refresh_list_btn" width="110"/> <button label="Markieren" name="highlight_btn"/> <button label="Zurückgeben" name="return_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_side_tray.xml b/indra/newview/skins/default/xui/de/panel_side_tray.xml index 2cd11cdcef..446117962f 100644 --- a/indra/newview/skins/default/xui/de/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/de/panel_side_tray.xml @@ -2,26 +2,26 @@ <!-- Side tray cannot show background because it is always partially on screen to hold tab buttons. --> <side_tray name="sidebar"> - <sidetray_tab description="Seitenleiste auf-/zuklappen." name="sidebar_openclose"/> - <sidetray_tab description="Startseite." name="sidebar_home"> + <sidetray_tab description="Seitenleiste auf-/zuklappen." name="sidebar_openclose" tab_title="Seitenleiste auf-/zuklappen"/> + <sidetray_tab description="Startseite." name="sidebar_home" tab_title="Startseite"> <panel label="Startseite" name="panel_home"/> </sidetray_tab> - <sidetray_tab description="Ihr öffentliches Profil und Auswahl bearbeiten." name="sidebar_me"> + <sidetray_tab description="Ihr öffentliches Profil und Auswahl bearbeiten." name="sidebar_me" tab_title="Mein Profil"> <panel label="Ich" name="panel_me"/> </sidetray_tab> - <sidetray_tab description="Freunde, Kontakte und Leute in Ihrer Nähe finden." name="sidebar_people"> + <sidetray_tab description="Freunde, Kontakte und Leute in Ihrer Nähe finden." name="sidebar_people" tab_title="Leute"> <panel_container name="panel_container"> <panel label="Gruppeninfo" name="panel_group_info_sidetray"/> <panel label="Ignorierte Einwohner & Objekte" name="panel_block_list_sidetray"/> </panel_container> </sidetray_tab> - <sidetray_tab description="Hier finden Sie neue Orte und Orte, die Sie bereits besucht haben." label="Orte" name="sidebar_places"> + <sidetray_tab description="Hier finden Sie neue Orte und Orte, die Sie bereits besucht haben." label="Orte" name="sidebar_places" tab_title="Orte"> <panel label="Orte" name="panel_places"/> </sidetray_tab> - <sidetray_tab description="Inventar durchsuchen." name="sidebar_inventory"> + <sidetray_tab description="Inventar durchsuchen." name="sidebar_inventory" tab_title="Mein Inventar"> <panel label="Inventar bearbeiten" name="sidepanel_inventory"/> </sidetray_tab> - <sidetray_tab description="Ändern Sie Ihr Aussehen und Ihren aktuellen Look." name="sidebar_appearance"> + <sidetray_tab description="Ändern Sie Ihr Aussehen und Ihren aktuellen Look." name="sidebar_appearance" tab_title="Mein Aussehen"> <panel label="Aussehen bearbeiten" name="sidepanel_appearance"/> </sidetray_tab> </side_tray> diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index 61ca783d14..44c9284b36 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1825,6 +1825,15 @@ Only large parcels can be listed in search. top_delta="0" right="-15" select_on_focus="true" /> + <check_box + height="16" + label="Hide URL" + layout="topleft" + name="hide_music_url" + tool_tip="Checking this option will hide the music url to any non-authorized viewers of this parcel information." + left_delta="10" + top_pad="5" + width="292" /> <text type="string" length="1" diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index a797d54749..2bd8420925 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -82,6 +82,8 @@ orientation="vertical" tool_tip="Zoom camera toward focus" top_pad="0" + min_val="0" + max_val="1" width="18"> <commit_callback function="Slider.value_changed"/> </slider_bar> diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml index be32e917e5..214fb6ce54 100644 --- a/indra/newview/skins/default/xui/en/floater_help_browser.xml +++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml @@ -2,7 +2,7 @@ <floater legacy_header_height="18" can_resize="true" - height="480" + height="600" layout="topleft" min_height="150" min_width="500" @@ -11,7 +11,7 @@ save_rect="true" single_instance="true" title="HELP BROWSER" - width="620"> + width="650"> <floater.string name="loading_text"> Loading... @@ -20,20 +20,20 @@ name="done_text"> </floater.string> <layout_stack - bottom="480" + bottom="600" follows="left|right|top|bottom" layout="topleft" left="5" name="stack1" top="20" - width="610"> + width="640"> <layout_panel layout="topleft" left_delta="0" top_delta="0" name="external_controls" user_resize="false" - width="590"> + width="620"> <web_browser bottom="-11" follows="left|right|top|bottom" @@ -41,8 +41,8 @@ left="0" name="browser" top="0" - height="500" - width="590" /> + height="610" + width="620" /> <text follows="bottom|left" height="16" diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml index bd25288a9e..964713adbf 100644 --- a/indra/newview/skins/default/xui/en/floater_im_container.xml +++ b/indra/newview/skins/default/xui/en/floater_im_container.xml @@ -19,8 +19,13 @@ left="1" name="im_box_tab_container" tab_position="bottom" - tab_width="80" + tab_width="64" + tab_max_width = "134" tab_height="16" + use_custom_icon_ctrl="true" + tab_icon_ctrl_pad="2" + font_halign="left" + use_ellipses="true" top="0" width="390" /> <icon diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml index e187eabd3a..0d381fe5cb 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory.xml @@ -20,11 +20,11 @@ </floater.string> <floater.string name="TitleFetching"> - Inventory (Fetching [ITEM_COUNT] Items...) [FILTER] + MY INVENTORY (Fetching [ITEM_COUNT] Items...) [FILTER] </floater.string> <floater.string name="TitleCompleted"> - Inventory ([ITEM_COUNT] Items) [FILTER] + MY INVENTORY ([ITEM_COUNT] Items) [FILTER] </floater.string> <floater.string name="Fetched"> diff --git a/indra/newview/skins/default/xui/en/floater_map.xml b/indra/newview/skins/default/xui/en/floater_map.xml index 1903e7c714..5d35275e17 100644 --- a/indra/newview/skins/default/xui/en/floater_map.xml +++ b/indra/newview/skins/default/xui/en/floater_map.xml @@ -3,12 +3,10 @@ legacy_header_height="18" can_minimize="true" can_resize="true" - center_horiz="true" - center_vert="true" follows="top|right" height="218" layout="topleft" - min_height="60" + min_height="174" min_width="174" name="Map" title="Mini Map" @@ -16,6 +14,8 @@ save_rect="true" save_visibility="true" single_instance="true" + left="0" + top="0" width="200"> <floater.string name="mini_map_north"> diff --git a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml index eb772cc0bd..2bafd1bdef 100644 --- a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml +++ b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml @@ -89,18 +89,29 @@ No Answer. Please try again later. top="27" width="315" word_wrap="true"> - You have been disconnected from [VOICE_CHANNEL_NAME]. You will now be reconnected to Nearby Voice Chat. + You have been disconnected from [VOICE_CHANNEL_NAME]. [RECONNECT_NEARBY] </text> <text font="SansSerifLarge" height="40" layout="topleft" left="77" - name="nearby_P2P" + name="nearby_P2P_by_other" top="27" width="315" word_wrap="true"> - [VOICE_CHANNEL_NAME] has ended the call. You will now be reconnected to Nearby Voice Chat. + [VOICE_CHANNEL_NAME] has ended the call. [RECONNECT_NEARBY] + </text> + <text + font="SansSerifLarge" + height="40" + layout="topleft" + left="77" + name="nearby_P2P_by_agent" + top="27" + width="315" + word_wrap="true"> + You have ended the call. [RECONNECT_NEARBY] </text> <text font="SansSerif" diff --git a/indra/newview/skins/default/xui/en/floater_postcard.xml b/indra/newview/skins/default/xui/en/floater_postcard.xml index 3a7b6cc832..6f78363b25 100644 --- a/indra/newview/skins/default/xui/en/floater_postcard.xml +++ b/indra/newview/skins/default/xui/en/floater_postcard.xml @@ -128,19 +128,9 @@ width="420"> Type your message here. </text_editor> - <text - type="string" - length="1" - bottom_delta="37" - follows="left|bottom" - layout="topleft" - left="12" - name="fine_print"> - If your recipient joins SL, you'll get a referral bonus. - </text> <button follows="right|bottom" - height="20" + height="23" label="Cancel" layout="topleft" name="cancel_btn" @@ -149,7 +139,7 @@ width="100" /> <button follows="right|bottom" - height="20" + height="23" label="Send" layout="topleft" left_delta="-106" diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml index 15655a920e..05deca705a 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences.xml @@ -56,7 +56,7 @@ help_topic="preferences_general_tab" name="general" /> <panel - class="panel_preference" + class="panel_preference_graphics" filename="panel_preferences_graphics1.xml" label="Graphics" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_preview_texture.xml b/indra/newview/skins/default/xui/en/floater_preview_texture.xml index 0d155fb01e..fc6f06ffd4 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_texture.xml @@ -114,7 +114,7 @@ left="6" name="Keep" top_pad="5" - width="100" /> + width="110" /> <button follows="right|bottom" height="22" @@ -123,7 +123,7 @@ left_pad="5" name="Discard" top_delta="0" - width="100" /> + width="110" /> <button follows="right|bottom" height="22" @@ -132,5 +132,5 @@ left_pad="5" name="save_tex_btn" top_delta="0" - width="100" /> + width="110" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml index 775e7d66f7..9ca18d455b 100644 --- a/indra/newview/skins/default/xui/en/floater_search.xml +++ b/indra/newview/skins/default/xui/en/floater_search.xml @@ -2,16 +2,16 @@ <floater legacy_header_height="13" can_resize="true" - height="546" + height="600" layout="topleft" - min_height="546" - min_width="670" + min_height="400" + min_width="450" name="floater_search" help_topic="floater_search" save_rect="true" single_instance="true" title="FIND" - width="670"> + width="650"> <floater.string name="loading_text"> Loading... @@ -21,20 +21,20 @@ Done </floater.string> <layout_stack - bottom="541" + bottom="595" follows="left|right|top|bottom" layout="topleft" left="10" name="stack1" top="20" - width="650"> + width="630"> <layout_panel layout="topleft" left_delta="0" top_delta="0" name="browser_layout" user_resize="false" - width="650"> + width="630"> <web_browser bottom="-10" follows="left|right|top|bottom" @@ -42,8 +42,8 @@ left="0" name="browser" top="0" - height="500" - width="650" /> + height="555" + width="630" /> <text follows="bottom|left" height="16" diff --git a/indra/newview/skins/default/xui/en/floater_test_text_editor.xml b/indra/newview/skins/default/xui/en/floater_test_text_editor.xml index dc8f00d5f3..b730f0e511 100644 --- a/indra/newview/skins/default/xui/en/floater_test_text_editor.xml +++ b/indra/newview/skins/default/xui/en/floater_test_text_editor.xml @@ -28,4 +28,17 @@ width="200"> This contains long text and should scroll horizontally to the right </text_editor> + <text_editor + height="50" + follows="top|left|bottom" + font="SansSerif" + left="10" + name="numeric_text_editor" + tool_tip="text editor for numeric text entry only" + top_pad="10" + text_type="int" + width="200"> + This is text that is NOT a number, so shouldn't appear + </text_editor> + </floater> diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 5630dfbe8f..23203d227e 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -67,80 +67,75 @@ </floater.string> <button follows="left|top" - height="20" - image_disabled="Tool_Zoom" - image_disabled_selected="Tool_Zoom" - image_selected="Tool_Zoom_Selected" - image_unselected="Tool_Zoom" + height="25" + image_bottom_pad="1" + image_overlay="Tool_Zoom" + image_selected="PushButton_Selected_Press" layout="topleft" left="10" name="button focus" tool_tip="Focus" - width="20"> + width="35"> <button.commit_callback function="BuildTool.setTool" parameter="Focus" /> </button> <button follows="left|top" - height="20" - image_disabled="Tool_Grab" - image_disabled_selected="Tool_Grab" - image_selected="Tool_Grab_Selected" - image_unselected="Tool_Grab" + height="25" + image_bottom_pad="1" + image_overlay="Tool_Grab" + image_selected="PushButton_Selected_Press" layout="topleft" - left_pad="20" + left_pad="10" name="button move" tool_tip="Move" - width="20"> + width="35"> <button.commit_callback function="BuildTool.setTool" parameter="Move" /> </button> <button follows="left|top" - height="20" - image_disabled="Tool_Face" - image_disabled_selected="Tool_Face" - image_selected="Tool_Face_Selected" - image_unselected="Tool_Face" + height="25" + image_bottom_pad="1" + image_overlay="Tool_Face" + image_selected="PushButton_Selected_Press" layout="topleft" - left_pad="20" + left_pad="10" name="button edit" tool_tip="Edit" - width="20"> + width="35"> <button.commit_callback function="BuildTool.setTool" parameter="Edit" /> </button> <button follows="left|top" - height="20" - image_disabled="Tool_Create" - image_disabled_selected="Tool_Create" - image_selected="Tool_Create_Selected" - image_unselected="Tool_Create" + height="25" + image_bottom_pad="1" + image_overlay="Tool_Create" + image_selected="PushButton_Selected_Press" layout="topleft" - left_pad="20" + left_pad="10" name="button create" tool_tip="Create" - width="20"> + width="35"> <button.commit_callback function="BuildTool.setTool" parameter="Create" /> </button> <button follows="left|top" - height="20" - image_disabled="Tool_Dozer" - image_disabled_selected="Tool_Dozer" - image_selected="Tool_Dozer_Selected" - image_unselected="Tool_Dozer" + height="25" + image_bottom_pad="1" + image_overlay="Tool_Dozer" + image_selected="PushButton_Selected_Press" layout="topleft" - left_pad="20" + left_pad="10" name="button land" tool_tip="Land" - width="20"> + width="35"> <button.commit_callback function="BuildTool.setTool" parameter="Land" /> @@ -1043,7 +1038,7 @@ even though the user gets a free copy. <check_box height="15" width="110" - top_pad="3" + top_pad="5" label="Show in search" layout="topleft" left="100" diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml index e1df50bf58..86ac7c8e54 100644 --- a/indra/newview/skins/default/xui/en/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en/floater_world_map.xml @@ -4,7 +4,7 @@ can_resize="true" center_horiz="true" center_vert="true" - height="535" + height="600" layout="topleft" min_height="520" min_width="520" @@ -14,16 +14,16 @@ save_visibility="true" single_instance="true" title="WORLD MAP" - width="800"> + width="650"> <panel filename="panel_world_map.xml" follows="all" - height="500" + height="555" layout="topleft" left="10" name="objects_mapview" top="25" - width="542" /> + width="375" /> <panel name="layout_panel_1" height="22" @@ -279,12 +279,12 @@ <icon follows="top|right" height="16" - image_name="map_event.tga" + image_name="Parcel_PG_Dark" layout="topleft" mouse_opaque="true" name="event" left_pad="0" - width="16" /> + width="18" /> <text type="string" length="1" @@ -312,13 +312,13 @@ <icon follows="top|right" height="16" - image_name="map_event_mature.tga" + image_name="Parcel_M_Dark" layout="topleft" mouse_opaque="true" name="events_mature_icon" top_delta="0" left_pad="0" - width="16" /> + width="18" /> <text type="string" length="1" @@ -345,13 +345,13 @@ <icon follows="top|right" height="16" - image_name="map_event_adult.tga" + image_name="Parcel_R_Dark" layout="topleft" left_pad="0" mouse_opaque="true" name="events_adult_icon" top_delta="0" - width="16" /> + width="18" /> <text type="string" length="1" @@ -394,7 +394,7 @@ <panel follows="right|top|bottom" - height="270" + height="310" top_pad="0" width="238"> <icon @@ -514,7 +514,7 @@ draw_stripes="false" bg_writeable_color="MouseGray" follows="all" - height="115" + height="145" layout="topleft" left="28" name="search_results" diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index 1993af6730..2874151df5 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -370,6 +370,14 @@ layout="topleft" name="Outfit Separator" /> <menu_item_call + label="Find Original" + layout="topleft" + name="Find Original"> + <menu_item_call.on_click + function="Inventory.DoToSelected" + parameter="goto" /> + </menu_item_call> + <menu_item_call label="Purge Item" layout="topleft" name="Purge Item"> @@ -386,14 +394,6 @@ parameter="restore" /> </menu_item_call> <menu_item_call - label="Find Original" - layout="topleft" - name="Find Original"> - <menu_item_call.on_click - function="Inventory.DoToSelected" - parameter="goto" /> - </menu_item_call> - <menu_item_call label="Open" layout="topleft" name="Open"> diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml index 5a9509e284..d66818e91a 100644 --- a/indra/newview/skins/default/xui/en/menu_object.xml +++ b/indra/newview/skins/default/xui/en/menu_object.xml @@ -87,16 +87,6 @@ label="Remove ▶" name="Remove"> <menu_item_call - enabled="false" - label="Take" - name="Pie Object Take"> - <menu_item_call.on_click - function="Tools.BuyOrTake" /> - <menu_item_call.on_enable - function="Tools.EnableBuyOrTake" - parameter="Buy,Take" /> - </menu_item_call> - <menu_item_call enabled="false" label="Report Abuse" name="Report Abuse..."> @@ -134,6 +124,16 @@ </menu_item_call> </context_menu> <menu_item_separator layout="topleft" /> + <menu_item_call + enabled="false" + label="Take" + name="Pie Object Take"> + <menu_item_call.on_click + function="Tools.BuyOrTake" /> + <menu_item_call.on_enable + function="Tools.EnableBuyOrTake" + parameter="Buy,Take" /> + </menu_item_call> <menu_item_call enabled="false" label="Take Copy" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 7a4f63bfe4..95ce6d6ff4 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -57,13 +57,13 @@ label="My Inventory" layout="topleft" name="Inventory" - shortcut="control|shift|I"> + shortcut="control|I"> <menu_item_check.on_check - function="Floater.Visible" - parameter="inventory" /> + function="SidetrayPanelVisible" + parameter="sidepanel_inventory" /> <menu_item_check.on_click - function="Floater.Toggle" - parameter="inventory" /> + function="ShowSidetrayPanel" + parameter="sidepanel_inventory" /> </menu_item_check> <menu_item_call label="Show Inventory in Side Tray" @@ -1594,6 +1594,17 @@ name="Shortcuts" tear_off="true" visible="false"> + <menu_item_call + label="Image (L$[COST])..." + layout="topleft" + name="Upload Image" + shortcut="control|U"> + <menu_item_call.on_click + function="File.UploadImage" + parameter="" /> + <menu_item_call.on_enable + function="File.EnableUpload" /> + </menu_item_call> <menu_item_check label="Search" layout="topleft" @@ -1998,6 +2009,18 @@ function="Advanced.ToggleHUDInfo" parameter="fov" /> </menu_item_check> + <menu_item_check + label="Badge" + layout="topleft" + name="Badge" + shortcut="alt|control|shift|h"> + <menu_item_check.on_check + function="Advanced.CheckHUDInfo" + parameter="badge" /> + <menu_item_check.on_click + function="Advanced.ToggleHUDInfo" + parameter="badge" /> + </menu_item_check> </menu> <menu create_jump_keys="true" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index e726b6e333..665a49b6d8 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -391,19 +391,23 @@ Add this Ability to '[ROLE_NAME]'? notext="No" yestext="Yes"/> </notification> - <notification icon="alertmodal.tga" - name="ClickUnimplemented" + name="JoinGroupCanAfford" type="alertmodal"> -Sorry, not implemented yet. +Joining this group costs L$[COST]. +Do you wish to proceed? + <usetemplate + name="okcancelbuttons" + notext="Cancel" + yestext="Join"/> </notification> <notification icon="alertmodal.tga" - name="JoinGroupCanAfford" + name="JoinGroupNoCost" type="alertmodal"> -Joining this group costs L$[COST]. +You are joining group [NAME]. Do you wish to proceed? <usetemplate name="okcancelbuttons" @@ -411,6 +415,7 @@ Do you wish to proceed? yestext="Join"/> </notification> + <notification icon="alertmodal.tga" name="JoinGroupCannotAfford" @@ -1029,10 +1034,10 @@ Unable to write file [[FILE]] icon="alertmodal.tga" name="UnsupportedHardware" type="alertmodal"> -Warning: Your system does not meet [APP_NAME]'s minimum system requirements. If you continue using [APP_NAME], you may experience poor performance. Unfortunately, the [SUPPORT_SITE] cannot provide technical support for unsupported system configurations. +Just so you know, your computer does not meet [APP_NAME]'s minimum system requirements. You may experience poor performance. Unfortunately, the [SUPPORT_SITE] can't provide technical support for unsupported system configurations. MINSPECS -Do you wish to visit [_URL] for more information? +Visit [_URL] for more information? <url option="0" name="url"> http://www.secondlife.com/corporate/sysreqs.php @@ -1048,8 +1053,8 @@ Do you wish to visit [_URL] for more information? icon="alertmodal.tga" name="UnknownGPU" type="alertmodal"> -Your system contains a graphics card that is unknown to [APP_NAME] at this time. -This is often the case with new hardware that hasn't been tested yet with [APP_NAME]. [APP_NAME] will most likely run properly, but you may need to adjust your graphics settings to something more appropriate. +Your system contains a graphics card that [APP_NAME] doesn't recognize. +This is often the case with new hardware that hasn't been tested yet with [APP_NAME]. It will probably be ok, but you may need to adjust your graphics settings. (Me > Preferences > Graphics). <form name="form"> <ignore name="ignore" @@ -1527,7 +1532,7 @@ Your search terms were too short so no search was performed. icon="alertmodal.tga" name="CouldNotTeleportReason" type="alertmodal"> -Could not teleport. +Teleport failed. [REASON] </notification> @@ -1728,21 +1733,6 @@ Try selecting a single parcel. <notification icon="alertmodal.tga" - name="ParcelCanPlayMedia" - type="alertmodal"> -This location can play streaming media. -Streaming media requires a fast Internet connection. - -Play streaming media when available? -(You can change this option later under Preferences > Privacy.) - <usetemplate - name="okcancelbuttons" - notext="Disable" - yestext="Play Media"/> - </notification> - - <notification - icon="alertmodal.tga" name="CannotDeedLandWaitingForServer" type="alertmodal"> Unable to deed land: @@ -1980,9 +1970,8 @@ This is usually a temporary failure. Please customize and save the wearable agai icon="alertmodal.tga" name="YouHaveBeenLoggedOut" type="alertmodal"> -You have been logged out of [SECOND_LIFE]: +Darn. You have been logged out of [SECOND_LIFE] [MESSAGE] -You can still look at existing IM and chat by clicking 'View IM & Chat'. Otherwise, click 'Quit' to exit [APP_NAME] immediately. <usetemplate name="okcancelbuttons" notext="Quit" @@ -3847,7 +3836,7 @@ Are you sure you want to quit? <notification icon="alertmodal.tga" name="HelpReportAbuseEmailLL" - type="alertmodal"> + type="alert"> Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards]. All reported abuses are investigated and resolved. @@ -4318,14 +4307,14 @@ Topic: [SUBJECT], Message: [MESSAGE] icon="notifytip.tga" name="FriendOnline" type="notifytip"> -[NAME] is Online +[NAME_SLURL] is Online </notification> <notification icon="notifytip.tga" name="FriendOffline" type="notifytip"> -[NAME] is Offline +[NAME_SLURL] is Offline </notification> <notification @@ -4752,7 +4741,7 @@ The objects on the selected parcel that are NOT owned by you have been returned name="ServerObjectMessage" type="notify"> Message from [NAME]: -[MSG] +<nolink>[MSG]</nolink> </notification> <notification diff --git a/indra/newview/skins/default/xui/en/panel_active_object_row.xml b/indra/newview/skins/default/xui/en/panel_active_object_row.xml index 7657fb8055..bef5f8dafd 100644 --- a/indra/newview/skins/default/xui/en/panel_active_object_row.xml +++ b/indra/newview/skins/default/xui/en/panel_active_object_row.xml @@ -10,10 +10,6 @@ background_opaque="false" background_visible="true" bg_alpha_color="0.0 0.0 0.0 0.0" > - <string - name="unknown_obj"> - Unknown Object - </string> <chiclet_script name="object_chiclet" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index aad55685d2..0755813389 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -247,7 +247,7 @@ <layout_panel mouse_opaque="false" follows="left|right" - height="29" + height="30" layout="topleft" top="0" name="chiclet_list_panel" @@ -260,12 +260,12 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. <chiclet_panel mouse_opaque="false" follows="left|right" - height="23" + height="24" layout="topleft" left="1" min_width="110" name="chiclet_list" - top="8" + top="7" chiclet_padding="4" scrolling_offset="40" width="189"> diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml index 89d632c4c6..51e2256a7d 100644 --- a/indra/newview/skins/default/xui/en/panel_chat_header.xml +++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml @@ -19,7 +19,7 @@ name="avatar_icon" top="3" width="18" /> - <text_editor + <text allow_scroll="false" v_pad = "7" read_only = "true" diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml index 31719aad20..34c1923582 100644 --- a/indra/newview/skins/default/xui/en/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml @@ -29,7 +29,7 @@ layout="topleft" name="back_btn" picture_style="true" - left="10" + left="11" tab_stop="false" top="2" width="23" /> @@ -40,7 +40,7 @@ layout="topleft" left_pad="10" name="title" - text_color="white" + text_color="LtGray" top="0" value="Classified Info" use_ellipses="true" @@ -49,13 +49,13 @@ color="DkGray2" opaque="true" follows="all" - height="500" + height="502" layout="topleft" - left="10" + left="9" top_pad="10" name="profile_scroll" reserve_scroll_corner="false" - width="313"> + width="310"> <panel name="scroll_content_panel" follows="left|top" @@ -65,16 +65,16 @@ background_visible="false" height="500" left="0" - width="295"> + width="285"> <texture_picker enabled="false" - follows="left|top" + follows="left|top|right" height="197" layout="topleft" - left="10" + left="11" name="classified_snapshot" - top="20" - width="290" /> + top="10" + width="286" /> <text_editor allow_scroll="false" bg_visible="false" @@ -181,37 +181,35 @@ </scroll_container> <panel follows="left|right|bottom" - height="20" + height="35" layout="topleft" - top_pad="8" - left="10" + top_pad="5" + left="9" name="buttons"> <button follows="bottom|left" - height="19" + height="23" label="Teleport" layout="topleft" left="0" name="teleport_btn" top="0" - width="90" /> + width="101" /> <button follows="bottom|left" - height="19" + height="23" label="Map" layout="topleft" - left_pad="10" + left_pad="3" name="show_on_map_btn" - top="0" - width="90" /> + width="100" /> <button follows="bottom|left" - height="19" + height="23" label="Edit" layout="topleft" - right="-1" name="edit_btn" - top="0" - width="90" /> + left_pad="3" + width="101" /> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml index b881719e3a..1375eb87d9 100644 --- a/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml @@ -64,6 +64,7 @@ layout="topleft" left="103" name="description" + textbox.show_context_menu="false" top_pad="0" width="178" word_wrap="true" /> @@ -75,6 +76,6 @@ left_pad="5" right="-8" name="info_chevron" - top_delta="15" + top_delta="24" width="20" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml index 188ded3dab..a357ba1d97 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml @@ -23,7 +23,7 @@ layout="topleft" name="back_btn" picture_style="true" - left="10" + left="11" tab_stop="false" top="2" width="23" /> @@ -31,27 +31,27 @@ type="string" length="1" follows="top" - font="SansSerifHuge" - height="15" + font="SansSerifHugeBold" + height="26" layout="topleft" left_pad="10" name="title" - text_color="white" - top="5" + text_color="LtGray" + top="0" width="250"> Edit Classified </text> <scroll_container color="DkGray2" follows="all" - height="510" + height="502" layout="topleft" - left="10" + left="9" top_pad="10" name="profile_scroll" reserve_scroll_corner="false" opaque="true" - width="313"> + width="310"> <panel name="scroll_content_panel" follows="left|top" @@ -65,10 +65,10 @@ <texture_picker follows="left|top|right" height="197" - width="290" + width="286" layout="topleft" - top="20" - left="10" + top="10" + left="11" name="classified_snapshot" /> <icon height="18" @@ -78,7 +78,7 @@ name="edit_icon" label="" tool_tip="Click to select an image" - top="27" + top="17" width="18" /> <text type="string" @@ -165,29 +165,29 @@ </text> <button follows="left|top" - height="20" + height="23" label="Set to Current Location" layout="topleft" - left="8" + left="10" top_pad="5" name="set_to_curr_location_btn" - width="200" /> + width="156" /> <combo_box follows="left|top" - height="18" + height="23" label="" left="10" name="category" top_pad="5" - width="200" /> + width="156" /> <combo_box allow_text_entry="false" follows="left|top" - height="18" + height="23" left="10" name="content_type" top_pad="5" - width="200"> + width="156"> <combo_item name="mature_ci" value="Mature"> @@ -203,10 +203,11 @@ decimal_digits="0" follows="left|top" halign="left" - height="16" + height="23" increment="1" label_width="20" label="L$" + v_pad="10" layout="topleft" left="10" value="50" @@ -228,30 +229,29 @@ </scroll_container> <panel follows="left|right|bottom" - height="20" + height="23" label="bottom_panel" layout="topleft" - left="10" + left="9" name="bottom_panel" top_pad="5" width="303"> <button follows="bottom|left" - height="19" + height="23" label="Save" layout="topleft" name="save_changes_btn" left="0" top="0" - width="130" /> + width="152" /> <button follows="bottom|left" - height="19" + height="23" label="Cancel" layout="topleft" name="cancel_btn" - left_pad="5" - right="-1" - width="130" /> + left_pad="3" + width="152" /> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml index 8e39697a16..6ef762dc1d 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml @@ -18,7 +18,7 @@ image_overlay="BackArrow_Off" layout="topleft" name="back_btn" - left="10" + left="11" tab_stop="false" top="2" width="23" /> @@ -26,26 +26,26 @@ type="string" length="1" follows="top" - font="SansSerifHuge" - height="15" + font="SansSerifHugeBold" + height="26" layout="topleft" left_pad="10" name="title" - text_color="white" - top="5" + text_color="LtGray" + top="0" width="250"> Edit Pick </text> <scroll_container color="DkGray2" follows="all" - height="500" + height="502" layout="topleft" - left="10" + left="9" top_pad="10" name="profile_scroll" opaque="true" - width="313"> + width="310"> <panel name="scroll_content_panel" follows="left|top|right" @@ -59,11 +59,11 @@ <texture_picker follows="left|top|right" height="197" - width="280" + width="272" layout="topleft" no_commit_on_selection="true" - top="20" - left="10" + top="10" + left="11" name="pick_snapshot" /> <icon height="18" @@ -73,7 +73,7 @@ name="edit_icon" label="" tool_tip="Click to select an image" - top="27" + top="17" width="18" /> <text type="string" @@ -100,7 +100,7 @@ max_length="63" name="pick_name" text_color="black" - width="280" /> + width="273" /> <text type="string" length="1" @@ -119,7 +119,7 @@ <text_editor follows="left|top|right" height="100" - width="280" + width="273" hide_scrollbar="false" layout="topleft" left="10" @@ -158,41 +158,40 @@ </text> <button follows="left|top" - height="20" + height="23" label="Set to Current Location" layout="topleft" left="8" top_pad="0" name="set_to_curr_location_btn" - width="200" /> + width="156" /> </panel> </scroll_container> <panel follows="left|right|bottom" - height="20" + height="23" label="bottom_panel" layout="topleft" - left="10" + left="9" name="bottom_panel" top_pad="5" width="303"> <button follows="bottom|left" - height="19" + height="23" label="Save [WHAT]" layout="topleft" name="save_changes_btn" left="0" top="0" - width="130" /> + width="152" /> <button follows="bottom|left" - height="19" + height="23" label="Cancel" layout="topleft" name="cancel_btn" - left_pad="5" - right="-1" - width="130" /> + left_pad="3" + width="152" /> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml index 618167181f..662fd1ae73 100644 --- a/indra/newview/skins/default/xui/en/panel_group_general.xml +++ b/indra/newview/skins/default/xui/en/panel_group_general.xml @@ -20,15 +20,84 @@ Hover your mouse over the options for more help. name="incomplete_member_data_str"> Retrieving member data </panel.string> + <panel + name="group_info_top" + follows="top|left" + top="0" + left="0" + height="129" + width="313" + layout="topleft"> + <texture_picker + follows="left|top" + height="110" + label="" + layout="topleft" + left="10" + name="insignia" + no_commit_on_selection="true" + tool_tip="Click to choose a picture" + top="5" + width="100" /> + <text + font="SansSerifSmall" + text_color="White_50" + width="190" + follows="top|left" + layout="topleft" + mouse_opaque="false" + type="string" + height="16" + length="1" + left_pad="10" + name="prepend_founded_by" + top_delta="0"> + Founder: + </text> + <name_box + follows="left|top" + height="16" + initial_value="(retrieving)" + layout="topleft" + left_delta="0" + link="true" + name="founder_name" + top_pad="2" + use_ellipses="true" + width="190" /> + <text + font="SansSerifMedium" + text_color="EmphasisColor" + type="string" + follows="left|top" + height="16" + layout="topleft" + left_delta="0" + name="join_cost_text" + top_pad="10" + visible="true" + width="190"> + Free + </text> + <button + follows="left|top" + left_delta="0" + top_pad="6" + height="23" + label="JOIN NOW!" + name="btn_join" + visible="true" + width="120" /> + </panel> <text_editor type="string" follows="left|top|right" left="5" - height="150" + height="80" layout="topleft" max_length="511" name="charter" - top="5" + top="105" right="-1" bg_readonly_color="DkGray2" text_readonly_color="White" @@ -40,7 +109,7 @@ Hover your mouse over the options for more help. draw_heading="true" follows="left|top|right" heading_height="23" - height="200" + height="160" layout="topleft" left="0" name="visible_members" diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml index 9727c54c6b..375de64923 100644 --- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml @@ -31,7 +31,7 @@ background_visible="true" follows="top|left" top="0" left="0" - height="129" + height="29" width="313" layout="topleft"> <button @@ -70,66 +70,6 @@ background_visible="true" width="270" height="20" visible="false" /> - <texture_picker - follows="left|top" - height="113" - label="" - layout="topleft" - left="10" - name="insignia" - no_commit_on_selection="true" - tool_tip="Click to choose a picture" - top_pad="5" - width="100" /> - <text - font="SansSerifSmall" - text_color="White_50" - width="190" - follows="top|left" - layout="topleft" - mouse_opaque="false" - type="string" - height="16" - length="1" - left_pad="10" - name="prepend_founded_by" - top_delta="0"> - Founder: - </text> - <name_box - follows="left|top" - height="16" - initial_value="(retrieving)" - layout="topleft" - left_delta="0" - link="true" - name="founder_name" - top_pad="2" - use_ellipses="true" - width="190" /> - <text - font="SansSerifMedium" - text_color="EmphasisColor" - type="string" - follows="left|top" - height="16" - layout="topleft" - left_delta="0" - name="join_cost_text" - top_pad="10" - visible="true" - width="190"> - Free - </text> - <button - follows="left|top" - left_delta="0" - top_pad="6" - height="23" - label="JOIN NOW!" - name="btn_join" - visible="true" - width="120" /> </panel> <layout_stack name="layout" @@ -137,7 +77,7 @@ background_visible="true" follows="all" left="0" top_pad="0" - height="437" + height="537" width="313" border_size="0"> <layout_panel diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml index 5f46ad7860..1f16aea2ef 100644 --- a/indra/newview/skins/default/xui/en/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml @@ -159,6 +159,7 @@ Maximum 200 per group daily left_pad="3" max_length="511" name="create_message" + text_type="ascii" top_delta="0" width="220" word_wrap="true" /> diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml index c7e5b25e06..28c4adf67c 100644 --- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml @@ -11,15 +11,6 @@ name="avatar_icon" top="-5" width="105"/> - <text - follows="top|left|right" - font="SansSerifLarge" - height="19" - layout="topleft" - name="avatar_name" - use_ellipses="true" - value="Unknown" - width="110" /> <layout_stack mouse_opaque="false" border_size="0" @@ -30,7 +21,7 @@ left="5" name="button_stack" orientation="vertical" - top_pad="-5" + top_pad="5" width="105"> <layout_panel mouse_opaque="false" diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml index a0ad38cf76..34fd3352a3 100644 --- a/indra/newview/skins/default/xui/en/panel_instant_message.xml +++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml @@ -56,16 +56,6 @@ name="adhoc_icon" top="3" width="18" /> - <!--<icon - follows="right" - height="20" - image_name="" - layout="topleft" - left="3" - mouse_opaque="true" - name="sys_msg_icon" - top="0" - width="20" />--> <text follows="left|right" font.style="BOLD" diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml index 396699ad6c..6927906d3d 100644 --- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml @@ -71,7 +71,7 @@ layout="topleft" left_pad="10" name="title" - text_color="white" + text_color="LtGray" top="0" use_ellipses="true" value="Place Profile" @@ -269,6 +269,7 @@ name="notes_editor" read_only="true" text_readonly_color="white" + text_type="ascii" top_pad="5" width="290" wrap="true" /> diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 2777b641c9..20f91d85ab 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -122,7 +122,7 @@ control_name="RememberPassword" follows="left|bottom" font="SansSerifSmall" height="16" -label="Remember" +label="Remember password" top_pad="3" name="remember_check" width="135" /> diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index 4030c7184a..c6a4233c9c 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -37,7 +37,7 @@ halign="center" top_pad="4" width="305"> <inventory_panel - border="false" + border="false" follows="all" height="295" label="MY INVENTORY" @@ -48,7 +48,7 @@ halign="center" top="16" width="290" /> <inventory_panel - border="false" + border="false" follows="all" height="295" label="RECENT" @@ -67,7 +67,7 @@ halign="center" height="30" layout="bottomleft" left="0" - visible="true" + visible="true" name="bottom_panel" width="330"> <button @@ -118,7 +118,7 @@ halign="center" mouse_opaque="false" name="Inventory Menu" top="0" - visible="true" + visible="true" width="290"> <menu height="101" diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index b2ed51abf3..d484564e0d 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -44,6 +44,7 @@ direction="down" height="23" image_overlay="Arrow_Left_Off" + image_bottom_pad="1" layout="topleft" left="10" name="back_btn" @@ -55,6 +56,7 @@ direction="down" height="23" image_overlay="Arrow_Right_Off" + image_bottom_pad="1" layout="topleft" left_pad="0" name="forward_btn" diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 3b5add33a8..446bf0dc6e 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -137,6 +137,7 @@ background_visible="true" <avatar_list allow_select="true" follows="all" + height="235" layout="topleft" left="0" multi_select="true" @@ -152,6 +153,7 @@ background_visible="true" <avatar_list allow_select="true" follows="all" + height="235" layout="topleft" left="0" multi_select="true" @@ -234,8 +236,8 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t layout="topleft" left="0" name="group_list" - no_filtered_groups_msg="No groups" - no_groups_msg="[secondlife:///app/search/groups Trying searching for some groups to join.]" + no_filtered_groups_msg="[secondlife:///app/search/groups Try fine the group in search?]" + no_groups_msg="[secondlife:///app/search/groups Try searching for some groups to join.]" top="0" width="313" /> <panel diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml index 375f369ba7..097813131f 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_info.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml @@ -16,7 +16,7 @@ image_overlay="BackArrow_Off" layout="topleft" name="back_btn" - left="10" + left="11" tab_stop="false" top="2" width="23" /> @@ -27,7 +27,7 @@ layout="topleft" left_pad="10" name="title" - text_color="white" + text_color="LtGray" top="0" value="Pick Info" use_ellipses="true" @@ -36,12 +36,12 @@ color="DkGray2" opaque="true" follows="all" - height="500" + height="502" layout="topleft" - left="10" - top_pad="5" + left="9" + top_pad="10" name="profile_scroll" - width="313"> + width="310"> <panel name="scroll_content_panel" follows="left|top|right" @@ -57,10 +57,10 @@ follows="left|top|right" height="197" layout="topleft" - left="10" + left="11" name="pick_snapshot" - top="20" - width="280" /> + top="10" + width="272" /> <text_editor allow_scroll="false" bg_visible="false" @@ -115,8 +115,8 @@ follows="left|right|bottom" height="35" layout="topleft" - top_pad="8" - left="10" + top_pad="5" + left="9" name="buttons"> <button follows="bottom|left" @@ -126,24 +126,22 @@ left="0" name="teleport_btn" top="0" - width="90" /> + width="101" /> <button follows="bottom|left" height="23" label="Map" layout="topleft" - left_pad="10" + left_pad="3" name="show_on_map_btn" - top="0" - width="90" /> + width="100" /> <button follows="bottom|left" height="23" label="Edit" layout="topleft" - right="-1" name="edit_btn" - top="0" - width="90" /> + left_pad="3" + width="101" /> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml index 023b1fc81d..8b25fb5d2a 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml @@ -64,6 +64,7 @@ layout="topleft" left="103" name="picture_descr" + textbox.show_context_menu="false" top_pad="0" width="178" word_wrap="true" /> @@ -75,6 +76,6 @@ left_pad="5" right="-8" name="info_chevron" - top_delta="15" + top_delta="24" width="20" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index d31f4d039f..9ef3649d9c 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel +bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" follows="all" height="540" label="Picks" @@ -21,6 +24,7 @@ layout="topleft" left="6" name="picks_panel_text" + wrap="true" top="10" width="313"/> <accordion @@ -70,13 +74,15 @@ </accordion_tab> </accordion> <panel - background_visible="true" +bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" bevel_style="none" enabled="false" auto_resize="false" follows="bottom" - left="0" - height="18" + left="1" + height="27" label="bottom_panel" layout="topleft" name="edit_panel" @@ -90,9 +96,9 @@ image_unselected="OptionsMenu_Off" image_disabled="OptionsMenu_Disabled" layout="topleft" - left="0" + left="10" name="gear_menu_btn" - top="5" + top="9" width="18" /> <button follows="bottom|left" @@ -104,7 +110,7 @@ left_pad="15" name="new_btn" tool_tip="Create a new pick or classified at the current location" - top="5" + top="9" width="18" /> <button follows="bottom|right" @@ -115,14 +121,17 @@ layout="topleft" name="trash_btn" right="-10" - top="5" + top="9" width="18" /> </panel> <panel + bg_opaque_color="DkGray" + background_visible="true" + background_opaque="true" layout="topleft" left="0" height="30" - top_pad="10" + top_pad="7" name="buttons_cucks" width="313"> <button @@ -131,35 +140,33 @@ height="23" label="Info" layout="topleft" - left="5" + left="2" name="info_btn" tab_stop="false" tool_tip="Show pick information" - top="0" - width="55" /> + top="5" + width="95" /> <button enabled="false" follows="bottom|left" height="23" label="Teleport" layout="topleft" - left_pad="5" + left_pad="3" name="teleport_btn" tab_stop="false" tool_tip="Teleport to the corresponding area" - top="0" - width="77" /> + width="117" /> <button enabled="false" follows="bottom|left" height="23" label="Map" layout="topleft" - left_pad="5" + left_pad="3" name="show_on_map_btn" tab_stop="false" tool_tip="Show the corresponding area on the World Map" - top="0" - width="50" /> + width="90" /> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index 7ac771de27..94c9b2de01 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -29,7 +29,7 @@ value="Place Profile" /> <string name="title_teleport_history" - value="Teleport History Location" /> + value="Teleport History" /> <string name="not_available" value="(N\A)" /> @@ -156,7 +156,7 @@ layout="topleft" left_pad="10" name="title" - text_color="white" + text_color="LtGray" top="0" use_ellipses="true" value="Place Profile" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml index 4d14d46743..05a3771edf 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -266,61 +266,4 @@ Automatic position for: <button.commit_callback function="Pref.VoiceSetMiddleMouse" /> </button> - <text - follows="left|top" - type="string" - length="1" - height="13" - layout="topleft" - left="30" - top_pad="8" - name="AspectRatioLabel1" - tool_tip="width / height" - label_width="50" - width="120"> - Aspect ratio - </text> - <combo_box - allow_text_entry="true" - height="23" - follows="left|top" - layout="topleft" - left="80" - max_chars="100" - name="aspect_ratio" - tool_tip="width / height" - width="150"> - <combo_box.item - enabled="true" - label=" 4:3 (Standard CRT)" - name="item1" - value="1.333333" /> - <combo_box.item - enabled="true" - label=" 5:4 (1280x1024 LCD)" - name="item2" - value="1.25" /> - <combo_box.item - enabled="true" - label=" 8:5 (Widescreen)" - name="item3" - value="1.6" /> - <combo_box.item - enabled="true" - label=" 16:9 (Widescreen)" - name="item4" - value="1.7777777" /> - </combo_box> - <check_box - control_name="FullScreenAutoDetectAspectRatio" - follows="left|top" - height="25" - label="Automatic" - layout="topleft" - left_pad="10" - name="aspect_auto_detect" - width="256"> - <check_box.commit_callback - function="Pref.AutoDetectAspect" /> - </check_box> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml index f7e3ede93c..f78d90c434 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml @@ -17,6 +17,7 @@ follows="left|bottom" height="23" label="Clear History" + tool_tip="Clear login image, last location, teleport history, web, and texture cache" layout="topleft" left="30" name="clear_cache" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml index 8bff865eb1..ae5e6fbbfa 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml @@ -38,7 +38,7 @@ image_unselected="Audio_Off" is_toggle="true" layout="topleft" - left_pad="10" + left_pad="16" name="mute_audio" tab_stop="false" width="16" /> @@ -82,7 +82,7 @@ image_unselected="Audio_Off" is_toggle="true" layout="topleft" - left_pad="10" + left_pad="16" name="mute_audio" tab_stop="false" width="16" /> @@ -116,7 +116,7 @@ image_unselected="Audio_Off" is_toggle="true" layout="topleft" - left_pad="10" + left_pad="16" name="mute_audio" tab_stop="false" width="16" /> @@ -150,7 +150,7 @@ image_unselected="Audio_Off" is_toggle="true" layout="topleft" - left_pad="10" + left_pad="16" name="mute_audio" tab_stop="false" width="16" /> @@ -184,7 +184,7 @@ image_unselected="Audio_Off" is_toggle="true" layout="topleft" - left_pad="10" + left_pad="16" name="mute_audio" tab_stop="false" width="16" /> @@ -218,7 +218,7 @@ image_unselected="Audio_Off" is_toggle="true" layout="topleft" - left_pad="10" + left_pad="16" name="mute_audio" tab_stop="false" width="16" /> @@ -267,7 +267,7 @@ image_unselected="Audio_Off" is_toggle="true" layout="topleft" - left_pad="10" + left_pad="16" name="mute_audio" tab_stop="false" width="16" /> diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml index f5396951ca..607de65c5c 100644 --- a/indra/newview/skins/default/xui/en/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml @@ -35,7 +35,7 @@ layout="topleft" left_pad="10" name="user_name" - text_color="white" + text_color="LtGray" top="0" value="(Loading...)" use_ellipses="true" diff --git a/indra/newview/skins/default/xui/en/panel_region_general.xml b/indra/newview/skins/default/xui/en/panel_region_general.xml index 26568c2a28..c06e67a4bb 100644 --- a/indra/newview/skins/default/xui/en/panel_region_general.xml +++ b/indra/newview/skins/default/xui/en/panel_region_general.xml @@ -134,6 +134,7 @@ top="200" width="80" /> <spinner + decimal_digits="0" follows="left|top" height="20" increment="1" diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index fab1f11273..bde45a9487 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -46,10 +46,10 @@ width="333"> top="0" width="30" /> <text - font="SansSerifHuge" + font="SansSerifHugeBold" height="20" left_pad="5" - text_color="white" + text_color="LtGray" top="3" use_ellipses="true" width="305" diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index e18f59ab64..18b59741bf 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -50,7 +50,7 @@ width="23" /> <text follows="top|left|right" - font="SansSerifHuge" + font="SansSerifHugeBold" height="26" layout="topleft" left_pad="10" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index a3da55e2a6..ae986f1851 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -115,9 +115,6 @@ <!-- Avatar name: More than one avatar is selected/used here --> <string name="AvatarNameMultiple">(multiple)</string> - <!-- Avatar name: text shown as an alternative to AvatarNameFetching, easter egg. --> - <string name="AvatarNameHippos">(hippos)</string> - <!-- Group name: text shown for LLUUID::null --> <string name="GroupNameNone">(none)</string> @@ -254,6 +251,7 @@ <string name="connected">Connected</string> <string name="unavailable">Voice not available at your current location</string> <string name="hang_up">Disconnected from in-world Voice Chat</string> + <string name="reconnect_nearby">You will now be reconnected to Nearby Voice Chat</string> <string name="ScriptQuestionCautionChatGranted">'[OBJECTNAME]', an object owned by '[OWNERNAME]', located in [REGIONNAME] at [REGIONPOS], has been granted permission to: [PERMISSIONS].</string> <string name="ScriptQuestionCautionChatDenied">'[OBJECTNAME]', an object owned by '[OWNERNAME]', located in [REGIONNAME] at [REGIONPOS], has been denied permission to: [PERMISSIONS].</string> <string name="ScriptTakeMoney">Take Linden dollars (L$) from you</string> @@ -1807,7 +1805,7 @@ Clears (deletes) the media and all params from the given face. <string name="LeaveMouselook">Press ESC to return to World View</string> <!-- inventory --> - <string name="InventoryNoMatchingItems">No matching items found in inventory.</string> + <string name="InventoryNoMatchingItems">[secondlife:///app/search/groups No matching items found in inventory.Try "Search"?]</string> <string name="FavoritesNoMatchingItems">Drag a landmark here to add it to your favorites.</string> <string name="InventoryNoTexture"> You do not have a copy of @@ -2131,7 +2129,7 @@ this texture in your inventory <string name="ClassifiedUpdateAfterPublish">(will update after publish)</string> <!-- panel picks --> - <string name="NoPicksClassifiedsText">There are no picks/classifieds here</string> + <string name="NoPicksClassifiedsText">You haven't created any Picks or Classifieds. Click the Plus button below to create a Pick or Classified.</string> <string name="PicksClassifiedsLoadingText">Loading...</string> <!-- Multi Preview Floater --> diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml index 74d8478551..1b34a731a5 100644 --- a/indra/newview/skins/default/xui/en/widgets/button.xml +++ b/indra/newview/skins/default/xui/en/widgets/button.xml @@ -7,10 +7,9 @@ image_selected="PushButton_Selected" image_disabled_selected="PushButton_Selected_Disabled" image_disabled="PushButton_Disabled" - image_left_pad="0" - image_right_pad="0" image_top_pad="0" image_bottom_pad="0" + imgoverlay_label_space="1" label_color="ButtonLabelColor" label_color_selected="ButtonLabelSelectedColor" label_color_disabled="ButtonLabelDisabledColor" diff --git a/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml b/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml index 888b4eaf7c..a71b293f31 100644 --- a/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml +++ b/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml @@ -5,4 +5,12 @@ item_pad="0" keep_one_selected="true" multi_select="false" - opaque="true" />
\ No newline at end of file + opaque="true"> + <flat_list_view.no_items_text + follows="all" + name="no_items_msg" + v_pad="10" + h_pad="10" + value="There are no any items in the list" + wrap="true" /> +</flat_list_view>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/widgets/inspector.xml b/indra/newview/skins/default/xui/en/widgets/inspector.xml index 8ec206023e..428b2ce03b 100644 --- a/indra/newview/skins/default/xui/en/widgets/inspector.xml +++ b/indra/newview/skins/default/xui/en/widgets/inspector.xml @@ -1,10 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<!-- See also settings.xml UIFloater* settings for configuration --> <inspector name="inspector" - bg_opaque_color="DkGray_66" - background_visible="true" - bg_opaque_image="none" - background_opaque="true" - bg_alpha_image="none" - text_color="InspectorTipTextColor" - /> + bg_opaque_color="DkGray_66" + background_visible="true" + bg_opaque_image="Inspector_Hover" + background_opaque="true" + bg_alpha_image="none" + mouse_opaque="true" + text_color="InspectorTipTextColor"/> diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml index 2163660206..1d61447e31 100644 --- a/indra/newview/skins/default/xui/en/widgets/location_input.xml +++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml @@ -4,6 +4,8 @@ Currently that doesn't work because LLUIImage::getWidth/getHeight() return 1 for the images. --> <location_input font="SansSerifSmall" + icon_maturity_general="Parcel_PG_Light" + icon_maturity_adult="Parcel_R_Light" add_landmark_image_enabled="Favorite_Star_Active" add_landmark_image_disabled="Favorite_Star_Off" add_landmark_image_hover="Favorite_Star_Over" @@ -41,6 +43,13 @@ scale_image="false" top="19" left="-3" /> + <maturity_icon + name="maturity_icon" + width="18" + height="16" + top="20" + follows="left|top" + /> <for_sale_button name="for_sale_btn" image_unselected="Parcel_ForSale_Light" @@ -99,7 +108,7 @@ top="19" left="2" follows="right|top" - image_name="Parcel_Damage_Dark" + image_name="Parcel_Health_Dark" /> <!-- Default text color is invisible on top of nav bar background --> <damage_text diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml index 597c4e83b6..4a163fc1e3 100644 --- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml +++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml @@ -5,6 +5,7 @@ label_pad_left - padding to the left of tab button labels --> <tab_container tab_min_width="60" tab_max_width="150" + use_custom_icon_ctrl="false" halign="center" font="SansSerifSmall" tab_height="21" diff --git a/indra/newview/skins/default/xui/en/widgets/text_editor.xml b/indra/newview/skins/default/xui/en/widgets/text_editor.xml index 23ca8ea338..2ced8b1b4b 100644 --- a/indra/newview/skins/default/xui/en/widgets/text_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/text_editor.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <!-- Core parameters are in simple_text_editor.xml --> <text_editor - allow_html="false"/> + allow_html="false" + show_context_menu="true"/> diff --git a/indra/newview/skins/default/xui/en/widgets/tool_tip.xml b/indra/newview/skins/default/xui/en/widgets/tool_tip.xml index a19201f7c3..9ca15ae50d 100644 --- a/indra/newview/skins/default/xui/en/widgets/tool_tip.xml +++ b/indra/newview/skins/default/xui/en/widgets/tool_tip.xml @@ -1,12 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<!-- See also settings.xml UIFloater* settings for configuration --> <tool_tip name="tooltip" max_width="200" padding="4" wrap="true" font="SansSerif" + mouse_opaque="false" bg_opaque_image="Tooltip" background_opaque="true" background_visible="true" - text_color="ToolTipTextColor" - /> + text_color="ToolTipTextColor"/> diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml index 7d6d736c5e..440412c0c0 100644 --- a/indra/newview/skins/default/xui/fr/floater_about.xml +++ b/indra/newview/skins/default/xui/fr/floater_about.xml @@ -49,19 +49,20 @@ Version Vivox : [VIVOX_VERSION] - Pour réussir dans les affaires, soyez audacieux, créatif et différent. - Henry Marchant +Pour réussir dans les affaires, soyez audacieux, créatif et différent. - Henry Marchant </text_editor> </panel> <panel label="Licences" name="licenses_panel"> <text_editor name="credits_editor"> - 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion + 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion APR Copyright (C) 2000-2004 The Apache Software Foundation cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). GL Copyright (C) 1999-2004 Brian Paul. Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. - jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) + jpeg2000 Copyright (C) 2001, David Taubman, The University of New South + Wales (UNSW) jpeglib Copyright (C) 1991-1998, Thomas G. Lane. ogg/vorbis Copyright (C) 2001, Xiphophorus OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. @@ -73,7 +74,8 @@ Version Vivox : [VIVOX_VERSION] Tous droits réservés. Voir licenses.txt pour plus de détails. - Codage Audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) + Codage Audio du chat vocal : Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 + Annex C) </text_editor> </panel> </tab_container> diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml index 4c97551e55..8e2b27aca6 100644 --- a/indra/newview/skins/default/xui/fr/floater_about_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml @@ -12,7 +12,7 @@ <floater.string name="Remaining"> restantes </floater.string> - <tab_container name="landtab"> + <tab_container name="landtab" tab_min_width="60"> <panel label="GÉNÉRAL" name="land_general_panel"> <panel.string name="new users only"> Nouveaux utilisateurs uniquement @@ -128,10 +128,10 @@ <text name="DwellText"> 0 </text> - <button label="Acheter du terrain" label_selected="Acheter le terrain..." left="130" name="Buy Land..." width="125"/> - <button label="Infos sur les scripts" name="Scripts..."/> + <button label="Acheter du terrain" label_selected="Acheter le terrain..." left_delta="60" name="Buy Land..." width="125"/> + <button label="Infos sur les scripts" name="Scripts..." width="110"/> <button label="Acheter pour le groupe" label_selected="Acheter pour le groupe..." name="Buy For Group..."/> - <button label="Acheter un pass" label_selected="Acheter un pass..." left="130" name="Buy Pass..." tool_tip="Un pass vous donne un accès temporaire à ce terrain." width="125"/> + <button label="Acheter un pass" label_selected="Acheter un pass..." left_delta="-127" name="Buy Pass..." tool_tip="Un pass vous donne un accès temporaire à ce terrain." width="125"/> <button label="Abandonner le terrain" label_selected="Abandonner le terrain..." name="Abandon Land..."/> <button label="Récupérer le terrain" label_selected="Redemander le terrain…" name="Reclaim Land..."/> <button label="Vente Linden" label_selected="Vente Linden..." name="Linden Sale..." tool_tip="Le terrain doit être la propriété d'un résident, avoir un contenu défini et ne pas être aux enchères."/> @@ -252,13 +252,13 @@ ou divisé. </text> <button label="Afficher" label_selected="Afficher" name="ShowOther" right="-135" width="60"/> <button label="Retour" label_selected="Renvoyer..." name="ReturnOther..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/> - <text left="14" name="Selected / sat upon:" width="193"> + <text left="14" name="Selected / sat upon:" width="220"> Sélectionnées/où quelqu'un est assis : </text> - <text left="214" name="selected_objects_text" width="48"> + <text left_delta="214" name="selected_objects_text" width="48"> [COUNT] </text> - <text left="4" name="Autoreturn" width="412"> + <text left="4" name="Autoreturn" width="440"> Renvoi automatique des objets d'autres résidents (minutes, 0 pour désactiver) : </text> <line_editor name="clean other time" right="-6" width="36"/> @@ -270,9 +270,9 @@ ou divisé. <name_list label="Plus récents" name="owner list"> <name_list.columns label="Type" name="type"/> <name_list.columns name="online_status"/> - <name_list.columns label="Nom" name="name"/> - <name_list.columns label="Nombre" name="count"/> - <name_list.columns label="Plus récents" name="mostrecent"/> + <name_list.columns label="Nom" name="name" width="100"/> + <name_list.columns label="Nombre" name="count" width="100"/> + <name_list.columns label="Plus récents" name="mostrecent" width="120"/> </name_list> </panel> <panel label="OPTIONS" name="land_options_panel"> @@ -317,7 +317,7 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche. </text> <check_box label="Tous" left="285" name="edit objects check"/> <check_box label="Groupe" left="395" name="edit group objects check"/> - <text left="152" name="allow_label3" width="134"> + <text left="152" name="allow_label3" width="150"> Laisser entrer des objets : </text> <check_box label="Tous" left="285" name="all object entry check"/> @@ -402,7 +402,8 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche. </text> <line_editor left="97" name="url_description" tool_tip="Texte affiché à côté du bouton Jouer/Charger"/> <text name="Media texture:"> - Remplacer la texture : + Remplacer la +texture : </text> <texture_picker label="" left="97" name="media texture" tool_tip="Cliquez pour sélectionner une image"/> <text name="replace_texture_help"> @@ -423,8 +424,9 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche. <check_box label="En boucle" name="media_loop" tool_tip="Jouer le média en boucle. Lorsque le média aura fini de jouer, il recommencera."/> </panel> <panel label="SON" name="land_audio_panel"> - <text name="MusicURL:"> - URL de la musique : + <text name="MusicURL:" bottom_delta="-28" > + URL de la +musique : </text> <text name="Sound:"> Son : @@ -455,7 +457,7 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche. <check_box label="Vérification de l'âge [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Bannir les résidents qui n'ont pas vérifié leur âge. Consultez la page [SUPPORT_SITE] pour plus d'informations."/> <check_box label="Autoriser l'accès au groupe : [GROUP]" name="GroupCheck" tool_tip="Définir le groupe à l'onglet Général."/> <check_box label="Vendre des pass à :" name="PassCheck" tool_tip="Autoriser un accès temporaire à cette parcelle"/> - <combo_box name="pass_combo"> + <combo_box name="pass_combo" width="110"> <combo_box.item label="Tout le monde" name="Anyone"/> <combo_box.item label="Groupe" name="Group"/> </combo_box> diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml index e784bda2e5..65bb683e4c 100644 --- a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml @@ -20,7 +20,7 @@ </string> <tab_container name="ResidentChooserTabs"> <panel label="Rechercher" name="SearchPanel"> - <text name="InstructSearchResidentName"> + <text name="InstructSearchResidentName" width="240"> Saisissez une partie du nom du résident : </text> <button label="OK" label_selected="OK" name="Find"/> diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml index 313c9496a2..983efcdc47 100644 --- a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml @@ -23,8 +23,8 @@ <texture_picker label="Œil" name="eyes_iris"/> <texture_picker label="Alpha yeux" name="eyes_alpha"/> <texture_picker label="Haut du corps" name="upper-baked"/> - <texture_picker label="Peinture corporelle haut" name="upper_bodypaint"/> - <texture_picker label="Sous-vêtements (homme)" name="upper_undershirt"/> + <texture_picker label="Peinture corporelle haut" name="upper_bodypaint"/> + <texture_picker label="Sous-vêtements (homme)" name="upper_undershirt"/> <texture_picker label="Gants" name="upper_gloves"/> <texture_picker label="Chemise" name="upper_shirt"/> <texture_picker label="Veste (haut)" name="upper_jacket"/> @@ -32,7 +32,7 @@ <texture_picker label="Tatouage haut" name="upper_tattoo"/> <texture_picker label="Bas du corps" name="lower-baked"/> <texture_picker label="Peinture corporelle bas" name="lower_bodypaint"/> - <texture_picker label="Sous-vêtements (femme)" name="lower_underpants"/> + <texture_picker label="Sous-vêtements (femme)" name="lower_underpants"/> <texture_picker label="Chaussettes" name="lower_socks"/> <texture_picker label="Chaussures" name="lower_shoes"/> <texture_picker label="Pantalon" name="lower_pants"/> diff --git a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml index 5ea36d8505..c7437c4603 100644 --- a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml @@ -7,7 +7,8 @@ Vous avez besoin de plus de L$ </text> <text name="contacting"> - En train de contacter le Lindex... + En train de contacter +le Lindex... </text> <text left="5" name="info_buying"> Acheter des L$ @@ -59,7 +60,7 @@ </text> <button label="Acheter" name="buy_btn"/> <button label="Annuler" name="cancel_btn"/> - <text left="5" name="info_cannot_buy" right="-5"> + <text left="5" name="info_cannot_buy" width="200" right="-5"> Achat impossible </text> <button label="Accéder au Web" name="error_web"/> diff --git a/indra/newview/skins/default/xui/fr/floater_buy_land.xml b/indra/newview/skins/default/xui/fr/floater_buy_land.xml index 1d7eeca3c4..f5cf871844 100644 --- a/indra/newview/skins/default/xui/fr/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_buy_land.xml @@ -37,10 +37,10 @@ Vous devez accepter le règlement du domaine : </text> <text left="470" name="covenant_timestamp_text"/> - <text_editor name="covenant_editor"> + <text_editor name="covenant_editor" left="510"> Chargement... </text_editor> - <check_box label="J'accepte le règlement ci-dessus." name="agree_covenant"/> + <check_box label="J'accepte le règlement ci-dessus." name="agree_covenant" left="510"/> <text name="info_parcel_label"> Parcelle : </text> @@ -79,9 +79,20 @@ vendu avec objets <combo_box.item label="7,50 US$/mois, facturation trimestrielle" name="US$7.50/month,billedquarterly"/> <combo_box.item label="6,00 US$/mois, facturation annuelle" name="US$6.00/month,billedannually"/> </combo_box> - <text name="land_use_action"> - Augmentez vos frais d'occupation de terrain à 40 US$/mois. - </text> + <text + type="string" + length="1" + follows="top|left" + font="SansSerifBig" + height="16" + layout="topleft" + left="72" + name="land_use_action" + right="500" + top="284" + width="400"> + Augmentez vos frais d'occupation de terrain à 40 US$/mois. + </text> <text name="land_use_reason"> Vous détenez 1 309 m² de terrain. Cette parcelle fait 512 m². diff --git a/indra/newview/skins/default/xui/fr/floater_color_picker.xml b/indra/newview/skins/default/xui/fr/floater_color_picker.xml index c509a4783e..8d7fe76b35 100644 --- a/indra/newview/skins/default/xui/fr/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/fr/floater_color_picker.xml @@ -25,7 +25,7 @@ <text left="8" name="Current color:"> Couleur actuelle : </text> - <text left="8" name="(Drag below to save.)" width="114"> + <text left="8" name="(Drag below to save.)" width="220"> (Faire glisser dessous pour enregistrer.) </text> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml index 0b36b7b8ca..15cc6cd1ba 100644 --- a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml @@ -59,14 +59,14 @@ </text> <button label="Ajouter clé" label_selected="Ajouter clé" name="WLAddKey" width="89" bottom="-45" /> <button label="Supprimer clé" label_selected="Supprimer clé" name="WLDeleteKey" width="89" bottom="-70" /> - <text name="WLCurKeyFrameText"> + <text name="WLCurKeyFrameText" width="170"> Réglages des images-clés : </text> - <text name="WLCurKeyTimeText"> + <text name="WLCurKeyTimeText" width="170"> Heure de la clé : </text> - <spinner label="Heure" name="WLCurKeyHour" /> - <spinner label="Min" name="WLCurKeyMin" /> + <spinner label="Heure" name="WLCurKeyHour" label_width="80" width="74"/> + <spinner label="Min" name="WLCurKeyMin" label_width="80"/> <text name="WLCurKeyTimeText2"> Préréglages clés : </text> @@ -78,13 +78,13 @@ <text name="DayCycleText2"> Durée du cycle : </text> - <spinner label="Heure" name="WLLengthOfDayHour" /> + <spinner label="Heure" name="WLLengthOfDayHour" label_width="80" width="74" /> <spinner label="Min" name="WLLengthOfDayMin" /> - <spinner label="S" name="WLLengthOfDaySec" label_width="10" width="50" left_delta="75"/> - <text name="DayCycleText3"> + <spinner label="S" name="WLLengthOfDaySec" label_width="10" width="50" left_delta="95"/> + <text name="DayCycleText3" left="280" width="200"> Prévisualiser : </text> - <button label="Jouer" label_selected="Jouer" name="WLAnimSky" /> + <button label="Jouer" label_selected="Jouer" name="WLAnimSky" left_delta="90"/> <button label="Stop !" label_selected="Stop" name="WLStopAnimSky" /> <button label="Utiliser heure domaine" label_selected="Aller heure domaine" name="WLUseLindenTime" /> diff --git a/indra/newview/skins/default/xui/fr/floater_env_settings.xml b/indra/newview/skins/default/xui/fr/floater_env_settings.xml index 505c9236c7..dd714e85b6 100644 --- a/indra/newview/skins/default/xui/fr/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/fr/floater_env_settings.xml @@ -3,7 +3,7 @@ <floater.string name="timeStr"> [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc] </floater.string> - <text bottom="-45" name="EnvTimeText"> + <text bottom="-45" name="EnvTimeText" top="29"> Heure de la journée </text> @@ -14,7 +14,7 @@ journée Couverture nuageuse </text> - <text bottom="-45" name="EnvWaterColorText"> + <text bottom="-45" name="EnvWaterColorText" top="29"> Couleur de l'eau </text> @@ -23,7 +23,7 @@ l'eau Brouillard dans l'eau </text> - <button bottom="-144" label="Utiliser heure du domaine" name="EnvUseEstateTimeButton" width="145"/> + <button bottom="-144" label="Utiliser heure du domaine" name="EnvUseEstateTimeButton" width="152"/> <button label="Ciel avancé" left="162" name="EnvAdvancedSkyButton" width="145"/> <button label="Eau avancée" left="316" name="EnvAdvancedWaterButton" width="145"/> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_god_tools.xml b/indra/newview/skins/default/xui/fr/floater_god_tools.xml index 0dedf499bb..187814eba2 100644 --- a/indra/newview/skins/default/xui/fr/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/fr/floater_god_tools.xml @@ -12,7 +12,7 @@ <line_editor left="85" name="region name" width="198"/> <check_box label="Initiation" name="check prelude" tool_tip="Définir cette région comme zone d'initiation."/> <check_box label="Soleil fixe" name="check fixed sun" tool_tip="Définir la position du soleil (comme dans Région et Domaine > Terrain.)"/> - <check_box height="32" label="Réinitialiser le domicile à la téléportation" name="check reset home" tool_tip="Quand les résidents s'en vont par téléportation, réinitialisez leur domicile sur l'emplacement de destination."/> + <check_box height="32" label="Réinitialiser le domicile à la téléportation" name="check reset home" tool_tip="Quand les résidents s'en vont par téléportation, réinitialisez leur domicile sur l'emplacement de destination."/> <check_box bottom_delta="-32" label="Visible" name="check visible" tool_tip="Cochez pour rendre la région visible aux non-admins."/> <check_box label="Dégâts" name="check damage" tool_tip="Cochez pour activer les dégâts dans cette région."/> <check_box label="Bloquer le suivi de trafic" name="block dwell" tool_tip="Cochez pour que la région ne comptabilise pas le trafic."/> @@ -48,8 +48,8 @@ <spinner left="320" name="land cost" width="70"/> <button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh" tool_tip="Cliquez ici pour rafraîchir les informations ci-dessus."/> <button label="Appliquer" label_selected="Appliquer" name="Apply" tool_tip="Cliquez ici pour appliquer les modifications effectuées ci-dessus."/> - <button label="Sélectionner une région" label_selected="Sélectionner une région" left="136" name="Select Region" tool_tip="Sélectionnez une région entière à l'aide de l'outil Terrain." width="140"/> - <button label="Sauvegarde automatique" label_selected="Sauvegarde automatique" left="136" name="Autosave now" tool_tip="Sauvegarde automatique au format gzip." width="140"/> + <button label="Sélectionner une région" label_selected="Sélectionner une région" left="136" name="Select Region" tool_tip="Sélectionnez une région entière à l'aide de l'outil Terrain." width="160"/> + <button label="Sauvegarde automatique" label_selected="Sauvegarde automatique" left="136" name="Autosave now" tool_tip="Sauvegarde automatique au format gzip." width="160"/> </panel> <panel label="Objets" name="objects"> <panel.string name="no_target"> diff --git a/indra/newview/skins/default/xui/fr/floater_inspect.xml b/indra/newview/skins/default/xui/fr/floater_inspect.xml index de74f47bcf..9b1bdf106d 100644 --- a/indra/newview/skins/default/xui/fr/floater_inspect.xml +++ b/indra/newview/skins/default/xui/fr/floater_inspect.xml @@ -7,7 +7,7 @@ <scroll_list.columns label="Nom" name="object_name"/> <scroll_list.columns label="Propriétaire" name="owner_name"/> <scroll_list.columns label="Créateur" name="creator_name"/> - <scroll_list.columns label="Date de création" name="creation_date"/> + <scroll_list.columns label="Date de création" name="creation_date" width="114"/> </scroll_list> <button label="Voir le profil du propriétaire..." name="button owner" tool_tip="Voir le profil du propriétaire de l'objet en surbrillance" width="172"/> <button label="Voir le profil du créateur..." left="192" name="button creator" tool_tip="Voir le profil du créateur de l'objet en surbrillance" width="172"/> diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml index b0d5df161c..fca1a329a2 100644 --- a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml @@ -47,11 +47,11 @@ <check_box label="Éditer" name="CheckOwnerModify"/> <check_box label="Copier" name="CheckOwnerCopy"/> <check_box label="Revendre" name="CheckOwnerTransfer"/> - <text name="AnyoneLabel"> + <text name="AnyoneLabel" width="80"> N'importe qui : </text> <check_box label="Copier" name="CheckEveryoneCopy"/> - <text name="GroupLabel"> + <text name="GroupLabel" width="80"> Groupe : </text> <check_box label="Partager" name="CheckShareWithGroup"/> diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml index 52f8597dc2..6cd886d4b9 100644 --- a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml @@ -13,7 +13,7 @@ <check_box label="Photos" name="check_snapshot"/> <button label="Tout" label_selected="Tout" name="All" width="70"/> <button bottom_delta="0" label="Aucun" label_selected="Aucun" left="83" name="None" width="70"/> - <check_box bottom_delta="-20" label="Toujours montrer les dossiers" name="check_show_empty"/> + <check_box bottom_delta="-20" label="Toujours montrer les dossiers" name="check_show_empty"/> <check_box bottom_delta="-36" label="Depuis la déconnexion" name="check_since_logoff"/> <text name="- OR -"> Ou il y a... diff --git a/indra/newview/skins/default/xui/fr/floater_joystick.xml b/indra/newview/skins/default/xui/fr/floater_joystick.xml index d3a1b6c61b..e00f9564e8 100644 --- a/indra/newview/skins/default/xui/fr/floater_joystick.xml +++ b/indra/newview/skins/default/xui/fr/floater_joystick.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Joystick" title="CONFIGURATION DU JOYSTICK"> <check_box label="Activer :" name="enable_joystick"/> - <spinner label="Mapping axe des X " name="JoystickAxis1"/> - <spinner label="Mapping axe des Y" name="JoystickAxis2"/> - <spinner label="Mapping axe des Z" name="JoystickAxis0"/> - <spinner label="Mapping du tangage" label_width="111" left="8" name="JoystickAxis4" width="152"/> - <spinner label="Mapping du lacet" name="JoystickAxis5"/> - <spinner label="Mapping du roulis" name="JoystickAxis3"/> - <spinner label="Mapping du zoom" name="JoystickAxis6"/> + <spinner label="Mapping axe des X " name="JoystickAxis1" left="20" width="154" label_width="130"/> + <spinner label="Mapping axe des Y" name="JoystickAxis2" width="154" label_width="130"/> + <spinner label="Mapping axe des Z" name="JoystickAxis0" width="154" label_width="130"/> + <spinner label="Mapping du tangage" label_width="136" left="20" name="JoystickAxis4" width="154"/> + <spinner label="Mapping du lacet" name="JoystickAxis5" width="154" label_width="130"/> + <spinner label="Mapping du roulis" name="JoystickAxis3" width="154" label_width="130"/> + <spinner label="Mapping du zoom" name="JoystickAxis6" left="20" width="154" label_width="130"/> <check_box label="Zoom direct" name="ZoomDirect"/> - <check_box label="Curseur 3D" name="Cursor3D"/> - <check_box label="Niveau automatique" name="AutoLeveling"/> + <check_box label="Curseur 3D" name="Cursor3D" left="300"/> + <check_box label="Niveau automatique" name="AutoLeveling" left="400"/> <text name="Control Modes:"> Modes de contrôle : </text> @@ -44,13 +44,13 @@ <text name="ZDeadZone"> Zone neutre Z </text> - <text left="4" name="PitchDeadZone" width="110"> - Zone neutre Tangage + <text left="4" name="PitchDeadZone" width="116"> + Zone neutre tangage </text> - <text name="YawDeadZone"> + <text name="YawDeadZone" left="10" width="104"> Zone neutre lacet </text> - <text name="RollDeadZone"> + <text name="RollDeadZone" left="10" width="104"> Zone neutre roulis </text> <text name="Feathering"> @@ -59,7 +59,7 @@ <text name="ZoomScale2"> Échelle du zoom </text> - <text left="6" name="ZoomDeadZone" width="110"> + <text left="6" name="ZoomDeadZone" width="120"> Zone neutre du zoom </text> <button label="Options par défaut du joystick" name="SpaceNavigatorDefaults"/> diff --git a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml index b0a2f92f7c..7e7180166d 100644 --- a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml @@ -11,5 +11,5 @@ </floater.string> <button label="Réinitialiser" label_selected="Réinitialiser" left="390" name="Reset" width="100"/> <check_box initial_value="true" label="Exécution en cours" left="4" name="running"/> - <check_box initial_value="true" label="Mono" left="130" name="mono"/> + <check_box initial_value="true" label="Mono" left_delta="160" name="mono"/> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml b/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml index b92c0944de..71d2c42578 100644 --- a/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml +++ b/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="script ed float" title="RÉFÉRENCE LSL"> - <check_box label="Suivre le curseur" name="lock_check"/> - <combo_box label="Verrouiller" left_delta="120" name="history_combo" width="70"/> - <button label="Précédente" left_delta="75" name="back_btn"/> - <button label="Suivante" name="fwd_btn"/> + + <check_box label="Suivre le curseur" name="lock_check" width="90" /> + <combo_box label="Verrouiller" left_delta="120" name="history_combo" width="82"/> + <button label="Précédente" name="back_btn" left_delta="75"/> + <button label="Suivante" name="fwd_btn" width="60"/> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_media_browser.xml b/indra/newview/skins/default/xui/fr/floater_media_browser.xml index 0677c5d41f..58535eddf5 100644 --- a/indra/newview/skins/default/xui/fr/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/fr/floater_media_browser.xml @@ -15,12 +15,12 @@ <button label="OK" left_delta="515" name="go"/> </layout_panel> <layout_panel name="time_controls"> - <button label="en arrière" name="rewind"/> + <button label="en arrière" name="rewind" width="60"/> <button label="stop" name="stop"/> - <button label="en avant" name="seek"/> + <button label="en avant" name="seek" width="60"/> </layout_panel> <layout_panel name="parcel_owner_controls"> - <button label="Envoyer la page actuelle à la parcelle" name="assign"/> + <button label="Envoyer la page actuelle à la parcelle" name="assign" width="220"/> </layout_panel> <layout_panel name="external_controls"> <button label="Ouvrir dans mon navigateur web" name="open_browser" width="196"/> diff --git a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml index 5993f90cef..d03c4d7544 100644 --- a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml @@ -12,7 +12,7 @@ [NOTE2] </text> <button label="Commencer" name="start_btn" width="85"/> - <button label="Stop" left="100" name="stop_btn"/> - <button label="Libérer" left="177" name="release_btn"/> - <button label="Fermer" name="close_btn"/> + <button label="Stop" name="stop_btn"/> + <button label="Libérer" name="release_btn"/> + <button label="Fermer" name="close_btn" left_pad="20"/> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_notification.xml b/indra/newview/skins/default/xui/fr/floater_notification.xml index 62727da007..fe4b5f9bd6 100644 --- a/indra/newview/skins/default/xui/fr/floater_notification.xml +++ b/indra/newview/skins/default/xui/fr/floater_notification.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="notification" title="CONSOLE DE NOTIFICATIONS"> <text_editor name="payload"> - Chargement.. + Chargement... </text_editor> <combo_box label="Réponse" name="response"/> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_pay_object.xml b/indra/newview/skins/default/xui/fr/floater_pay_object.xml index c96db77721..9cac739ab0 100644 --- a/indra/newview/skins/default/xui/fr/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/fr/floater_pay_object.xml @@ -17,10 +17,10 @@ <text left="105" name="object_name_text"> ... </text> - <button label="1 L$" label_selected="1 L$" left="105" name="fastpay 1"/> - <button label="5 L$" label_selected="5 L$" left="190" name="fastpay 5"/> - <button label="10 L$" label_selected="10 L$" left="105" name="fastpay 10"/> - <button label="20 L$" label_selected="20 L$" left="190" name="fastpay 20"/> + <button label="1 L$" label_selected="1 L$" name="fastpay 1"/> + <button label="5 L$" label_selected="5 L$" name="fastpay 5"/> + <button label="10 L$" label_selected="10 L$" name="fastpay 10"/> + <button label="20 L$" label_selected="20 L$" name="fastpay 20"/> <text halign="left" left="5" name="amount text"> Ou choisissez un montant : </text> diff --git a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml index 2be2ae7c88..f83000cf87 100644 --- a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml @@ -4,7 +4,7 @@ <button label="?" label_selected="?" name="help"/> <check_box label="Partager avec le groupe" name="share_with_group"/> <check_box label="Autoriser tout le monde à copier" name="everyone_copy"/> - <text name="NextOwnerLabel"> + <text name="NextOwnerLabel" width="260"> Le prochain propriétaire pourra : </text> <check_box label="Modifier" name="next_owner_modify"/> diff --git a/indra/newview/skins/default/xui/fr/floater_postcard.xml b/indra/newview/skins/default/xui/fr/floater_postcard.xml index 6a9a674fac..489b90eeba 100644 --- a/indra/newview/skins/default/xui/fr/floater_postcard.xml +++ b/indra/newview/skins/default/xui/fr/floater_postcard.xml @@ -3,19 +3,19 @@ <text name="to_label" width="135"> E-mail du destinataire : </text> - <line_editor left="143" name="to_form" width="127"/> + <line_editor left="143" name="to_form" width="130" left_delta="146"/> <text name="from_label"> Votre e-mail : </text> - <line_editor left="143" name="from_form" width="127"/> + <line_editor left="143" name="from_form" width="130" left_delta="146"/> <text name="name_label"> Votre nom : </text> - <line_editor left="143" name="name_form" width="127"/> + <line_editor left="143" name="name_form" width="130" left_delta="146"/> <text name="subject_label"> Sujet : </text> - <line_editor left="143" name="subject_form" width="127"/> + <line_editor left="143" name="subject_form" width="130" left_delta="146"/> <line_editor label="Saisissez votre sujet ici." name="subject_form"/> <text name="msg_label"> Message : diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml index 06caf0635d..d866c32882 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml @@ -6,8 +6,8 @@ <text name="key_label"> Clavier : </text> - <combo_box label="Aucun" name="modifier_combo"/> - <combo_box label="Aucun" name="key_combo"/> + <combo_box label="Aucun" name="modifier_combo" width="62"/> + <combo_box label="Aucun" name="key_combo" width="62"/> <text name="replace_text" tool_tip="Remplacez le ou les mots-clés par ces mots. Par exemple, si vous remplacez le mot-clé " bonjour " par " salut ", le chat " Je voulais te dire bonjour " devient " Je voulais te dire salut " et le geste correspondant s'affiche."> Remplacer : </text> diff --git a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml index b96e15e4bb..215df18bd6 100644 --- a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml @@ -29,13 +29,13 @@ <text name="object_name_label"> Objet : </text> - <text left_delta="70" name="object_name" width="105"> + <text left_pad="26" name="object_name" width="105"> Consetetur Sadipscing </text> - <text name="owner_name_label" width="66"> + <text name="owner_name_label" width="100"> Propriétaire : </text> - <text left_delta="70" name="owner_name" width="105"> + <text left_delta="120" name="owner_name" width="105"> Hendrerit Vulputate Kamawashi Longname </text> <combo_box name="category_combo" tool_tip="Choisissez la catégorie qui décrit le mieux ce rapport"> diff --git a/indra/newview/skins/default/xui/fr/floater_sell_land.xml b/indra/newview/skins/default/xui/fr/floater_sell_land.xml index e950a64c4c..d79726e8e2 100644 --- a/indra/newview/skins/default/xui/fr/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_sell_land.xml @@ -5,13 +5,13 @@ <text name="info_parcel_label"> Parcelle : </text> - <text name="info_parcel"> + <text name="info_parcel" left="70"> NOM DE LA PARCELLE </text> <text name="info_size_label"> Taille : </text> - <text name="info_size"> + <text name="info_size" left="70"> [AREA] m² </text> <text bottom_delta="-60" name="info_action"> diff --git a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml index aae4729347..995837e9ee 100644 --- a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml @@ -4,7 +4,7 @@ <combo_box.item label="VRAI" name="TRUE"/> <combo_box.item label="FAUX" name="FALSE"/> </combo_box> - <color_swatch label="Couleur" name="val_color_swatch"/> + <color_swatch label="Couleur" name="val_color_swatch" width="50"/> <spinner label="x" name="val_spinner_1"/> <spinner label="x" name="val_spinner_2"/> <spinner label="x" name="val_spinner_3"/> diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml index 486eafef01..74738b7e31 100644 --- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml @@ -45,8 +45,8 @@ <combo_box.item label="JPEG" name="JPEG"/> <combo_box.item label="BMP" name="BMP"/> </combo_box> - <spinner label="Largeur" label_width="41" name="snapshot_width" width="101"/> - <spinner label="Hauteur" label_width="41" left="121" name="snapshot_height" width="101"/> + <spinner label="Largeur" label_width="44" name="snapshot_width" width="101"/> + <spinner label="Hauteur" label_width="46" left="121" name="snapshot_height" width="101"/> <slider label="Qualité de l'image" name="image_quality_slider"/> <text name="layer_type_label"> Capturer : diff --git a/indra/newview/skins/default/xui/fr/floater_telehub.xml b/indra/newview/skins/default/xui/fr/floater_telehub.xml index a50cfc25c1..c529ca2736 100644 --- a/indra/newview/skins/default/xui/fr/floater_telehub.xml +++ b/indra/newview/skins/default/xui/fr/floater_telehub.xml @@ -10,8 +10,7 @@ Pour supprimer, cliquez sur Déconnecter. </text> <text bottom_delta="-18" height="38" name="help_text_not_connected"> - Sélectionner l'objet et cliquez sur Connecter -le téléhub. + Sélectionner l'objet et cliquez sur Connecter le téléhub. </text> <button label="Connecter le téléhub" name="connect_btn" width="122"/> <button label="Déconnecter" left="142" name="disconnect_btn" width="98"/> @@ -20,7 +19,7 @@ le téléhub. </text> <button label="Ajouter point" name="add_spawn_point_btn"/> <button label="Supprimer point" name="remove_spawn_point_btn"/> - <text name="spawn_point_help"> + <text name="spawn_point_help" height="100"> Sélectionnez l'objet et cliquez sur Ajouter pour indiquer la position. Vous pourrez ensuite déplacer ou supprimer l'objet. Les positions sont relatives au centre du téléhub. diff --git a/indra/newview/skins/default/xui/fr/floater_url_entry.xml b/indra/newview/skins/default/xui/fr/floater_url_entry.xml index 6a90731691..4b2be14569 100644 --- a/indra/newview/skins/default/xui/fr/floater_url_entry.xml +++ b/indra/newview/skins/default/xui/fr/floater_url_entry.xml @@ -3,11 +3,11 @@ <text name="media_label"> URL du média : </text> - <combo_box left="100" name="media_entry" width="360" /> - <button label="OK" name="ok_btn" /> + <combo_box name="media_entry"/> + <button label="OK" name="ok_btn" width="30" /> <button label="Annuler" name="cancel_btn" /> - <button label="Effacer" name="clear_btn" /> - <text name="loading_label"> + <button label="Effacer" name="clear_btn" left_pad="94"/> + <text name="loading_label" left="120"> Chargement... </text> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_water.xml b/indra/newview/skins/default/xui/fr/floater_water.xml index 287f51d9f7..1a74017330 100644 --- a/indra/newview/skins/default/xui/fr/floater_water.xml +++ b/indra/newview/skins/default/xui/fr/floater_water.xml @@ -3,7 +3,7 @@ <floater.string name="WLDefaultWaterNames"> Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez </floater.string> - <text name="KeyFramePresetsText"> + <text name="KeyFramePresetsText" width="120"> Préréglages eau : </text> <button label="Nouveau" label_selected="Nouveau" name="WaterNewPreset"/> @@ -12,8 +12,7 @@ <tab_container name="Water Tabs"> <panel label="Paramètres" name="Settings"> <text name="BHText"> - Couleur du brouillard -dans l'eau + Couleur du brouillard dans l'eau </text> <color_swatch left="75" name="WaterFogColor" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> <text name="WaterFogDensText"> diff --git a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml index e28de71625..d92fadd048 100644 --- a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml @@ -6,7 +6,7 @@ <button label="Nouveau" label_selected="Nouveau" name="WLNewPreset"/> <button label="Enregistrer" label_selected="Enregistrer" left_delta="75" name="WLSavePreset" width="75"/> <button label="Supprimer" label_selected="Supprimer" left_delta="80" name="WLDeletePreset"/> - <button label="Éditeur du cycle du jour" label_selected="Éditeur du cycle du jour" left_delta="95" name="WLDayCycleMenuButton" width="150"/> + <button label="Éditeur du cycle du jour" label_selected="Éditeur du cycle du jour" left_pad="20" left_delta="95" name="WLDayCycleMenuButton" width="150"/> <tab_container name="WindLight Tabs" width="706"> <panel label="Atmosphère" name="Atmosphere"> <text name="BHText"> diff --git a/indra/newview/skins/default/xui/fr/inspect_remote_object.xml b/indra/newview/skins/default/xui/fr/inspect_remote_object.xml index 6d8c44578a..6d7cfadc04 100644 --- a/indra/newview/skins/default/xui/fr/inspect_remote_object.xml +++ b/indra/newview/skins/default/xui/fr/inspect_remote_object.xml @@ -7,7 +7,7 @@ <text name="object_name"> Nom d'objet de test vraiment très long </text> - <text name="object_owner_label"> + <text name="object_owner_label" width="70"> Propriétaire : </text> <text name="object_owner"> diff --git a/indra/newview/skins/default/xui/fr/panel_audio_device.xml b/indra/newview/skins/default/xui/fr/panel_audio_device.xml index a9540d8346..2caa013f54 100644 --- a/indra/newview/skins/default/xui/fr/panel_audio_device.xml +++ b/indra/newview/skins/default/xui/fr/panel_audio_device.xml @@ -6,7 +6,7 @@ <text name="Input device (microphone):"> Périphérique d'entrée (micro) : </text> - <text name="Output device (speakers):"> + <text name="Output device (speakers):" width="300"> Périphérique de sortie (haut-parleurs) : </text> <text name="Input level:"> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_alpha.xml b/indra/newview/skins/default/xui/fr/panel_edit_alpha.xml index 836dd99097..3b81ef2a5f 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_alpha.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_alpha.xml @@ -5,6 +5,6 @@ <texture_picker label="Alpha haut" name="Upper Alpha" tool_tip="Cliquez pour sélectionner une image"/> <texture_picker label="Alpha tête" name="Head Alpha" tool_tip="Cliquez pour sélectionner une image"/> <texture_picker label="Alpha yeux" name="Eye Alpha" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Alpha cheveux" name="Hair Alpha" tool_tip="Cliquez pour sélectionner une image"/> + <texture_picker label="Alpha cheveux" width="80" name="Hair Alpha" tool_tip="Cliquez pour sélectionner une image"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml b/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml index e37e0b2481..73e136ade6 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml @@ -2,7 +2,7 @@ <panel name="edit_gloves_panel"> <panel name="avatar_gloves_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="gloves_main_tab" title="Gants"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml b/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml index 759db657a6..cee44eb795 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml @@ -3,7 +3,7 @@ <panel name="avatar_jacket_color_panel"> <texture_picker label="Tissu (haut)" name="Upper Fabric" tool_tip="Cliquez pour sélectionner une image"/> <texture_picker label="Tissu (bas)" name="Lower Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="jacket_main_tab" title="Veste"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pants.xml b/indra/newview/skins/default/xui/fr/panel_edit_pants.xml index 5328e885d3..71d82c817f 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_pants.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_pants.xml @@ -2,7 +2,7 @@ <panel name="edit_pants_panel"> <panel name="avatar_pants_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="pants_main_tab" title="Pantalon"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml index 4a42858861..24cf7844b5 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml @@ -53,7 +53,7 @@ </panel> </scroll_container> <panel name="profile_me_buttons_panel"> - <button label="Enregistrer les changements" name="save_btn"/> + <button label="Enregistrer les changements" width="166" name="save_btn"/> <button label="Annuler" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml index 0fe7d5bbb0..cf28cd8c1e 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml @@ -2,7 +2,7 @@ <panel name="edit_shirt_panel"> <panel name="avatar_shirt_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="shirt_main_tab" title="Chemise"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml b/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml index 588a2ca7b2..a8e0910a15 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml @@ -2,7 +2,7 @@ <panel name="edit_shoes_panel"> <panel name="avatar_shoes_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="shoes_main_tab" title="Chaussures"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_skin.xml b/indra/newview/skins/default/xui/fr/panel_edit_skin.xml index 649b91d66d..dac005f6b6 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_skin.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_skin.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_skin_panel"> <panel name="avatar_skin_color_panel"> - <texture_picker label="Tatouage tête" name="Head Tattoos" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Tatouage haut" name="Upper Tattoos" tool_tip="Cliquez pour sélectionner une image"/> + <texture_picker label="Tatouage tête" name="Head Tattoos" width="76" tool_tip="Cliquez pour sélectionner une image"/> + <texture_picker label="Tatouage haut" name="Upper Tattoos" width="80" tool_tip="Cliquez pour sélectionner une image"/> <texture_picker label="Tatouage bas" name="Lower Tattoos" tool_tip="Cliquez pour sélectionner une image"/> </panel> <accordion name="wearable_accordion"> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml index 9d0f13c4e8..e9784b9510 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml @@ -2,7 +2,7 @@ <panel name="edit_skirt_panel"> <panel name="avatar_skirt_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="skirt_main_tab" title="Jupe"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_socks.xml b/indra/newview/skins/default/xui/fr/panel_edit_socks.xml index 8b062e0145..6fc6a3dc77 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_socks.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_socks.xml @@ -2,7 +2,7 @@ <panel name="edit_socks_panel"> <panel name="avatar_socks_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="socks_main_tab" title="Chaussettes"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml index 1faee191e0..7ab2aa6bc9 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_tattoo_panel"> <panel name="avatar_tattoo_color_panel"> - <texture_picker label="Tatouage tête" name="Head Tattoo" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Tatouage haut" name="Upper Tattoo" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Tatouage bas" name="Lower Tattoo" tool_tip="Cliquez pour sélectionner une image"/> + <texture_picker label="Tatouage tête" name="Head Tattoo" width="76" tool_tip="Cliquez pour sélectionner une image"/> + <texture_picker label="Tatouage haut" name="Upper Tattoo" width="80" tool_tip="Cliquez pour sélectionner une image"/> + <texture_picker label="Tatouage bas" name="Lower Tattoo" width="76" tool_tip="Cliquez pour sélectionner une image"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml b/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml index b9164ad862..6323462877 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml @@ -2,7 +2,7 @@ <panel name="edit_underpants_panel"> <panel name="avatar_underpants_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="underpants_main_tab" title="Sous-vêtements (femme)"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml index 462eff9451..5af733d8a2 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml @@ -2,7 +2,7 @@ <panel name="edit_undershirt_panel"> <panel name="avatar_undershirt_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="undershirt_main_tab" title="Sous-vêtements (homme)"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml index 24ea030b33..c6ab686b0e 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml @@ -96,6 +96,6 @@ </panel> <panel name="button_panel"> <button label="Enregistrer sous" name="save_as_button"/> - <button label="Annuler modification" name="revert_button"/> + <button label="Annuler modification" width="130" name="revert_button"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml index b2f61fde71..8207fd7735 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml @@ -32,7 +32,7 @@ <panel name="button_row"> <button label="Créer" label_selected="Nouveau groupe" name="btn_create"/> <button label="Chat de groupe" name="btn_chat"/> - <button label="Appel de groupe" name="btn_call"/> + <button label="Appel de groupe" width="100" name="btn_call"/> <button label="Enregistrer" label_selected="Enregistrer" name="btn_apply"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml index 3ca22b6e21..02b14cb859 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml @@ -16,13 +16,13 @@ <text name="group_land_heading"> Terrain du groupe </text> - <scroll_list name="group_parcel_list"> - <column label="Parcelle" name="name"/> - <column label="Région" name="location"/> - <column label="Type" name="type"/> - <column label="Surface" name="area"/> - <column label="" name="hidden"/> - </scroll_list> + <scroll_list name="group_parcel_list" width="310"> + <column label="Parcelle" name="name" width="76" /> + <column label="Région" name="location" width="78" /> + <column label="Type" name="type" width="70" /> + <column label="Surface" name="area" width="50" /> + <column label="" name="hidden" width="-1" /> + </scroll_list> <button label="Carte" label_selected="Carte" name="map_button"/> <text name="total_contributed_land_label"> Total des contributions : diff --git a/indra/newview/skins/default/xui/fr/panel_group_notices.xml b/indra/newview/skins/default/xui/fr/panel_group_notices.xml index 1ec63cf027..68c74f9322 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_notices.xml @@ -27,23 +27,23 @@ Vous pouvez désactiver la réception des notices dans l'onglet Général. <text name="lbl"> Créer une notice </text> - <text bottom_delta="-79" left="20" name="lbl3"> + <text name="lbl3"> Sujet : </text> - <line_editor left_delta="61" name="create_subject" width="331"/> - <text left="20" name="lbl4"> + <line_editor name="create_subject" /> + <text name="lbl4"> Message : </text> - <text_editor bottom_delta="-90" height="104" left_delta="61" name="create_message" width="330"/> - <text name="lbl5" width="68"> + <text_editor name="create_message"/> + <text name="lbl5" > Pièce-jointe : </text> - <line_editor left_delta="74" name="create_inventory_name" width="190"/> + <line_editor name="create_inventory_name"/> <text name="string"> Faire glisser l'objet et le déposer ici pour le joindre : </text> - <button label="Supprimer" label_selected="Supprimer pièce-jointe" left="274" name="remove_attachment" width="140"/> - <button label="Envoyer" label_selected="Envoyer" left="274" name="send_notice" width="140"/> + <button label="Supprimer" label_selected="Supprimer pièce-jointe" name="remove_attachment"/> + <button label="Envoyer" label_selected="Envoyer" left="200" name="send_notice" width="100"/> <group_drop_target name="drop_target" tool_tip="Faites glisser un objet de l'inventaire jusqu'à cette case pour l'envoyer avec la notice. Vous devez avoir l'autorisation de copier et transférer l'objet pour pouvoir le joindre."/> </panel> <panel label="Voir ancienne notice" name="panel_view_past_notice"> diff --git a/indra/newview/skins/default/xui/fr/panel_group_roles.xml b/indra/newview/skins/default/xui/fr/panel_group_roles.xml index d0c9f2f302..400d4d6aee 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_roles.xml @@ -6,14 +6,14 @@ <panel.string name="want_apply_text"> Voulez-vous enregistrer vos modifications ? </panel.string> - <tab_container height="164" name="roles_tab_container"> - <panel height="148" label="MEMBRES" name="members_sub_tab" tool_tip="Membres"> + <tab_container name="roles_tab_container"> + <panel label="MEMBRES" name="members_sub_tab" tool_tip="Membres"> <panel.string name="help_text"> Vous pouvez ajouter ou supprimer les rôles assignés aux membres. Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la touche Ctrl enfoncée. </panel.string> <filter_editor label="Filtrer les membres" name="filter_input"/> - <name_list bottom_delta="-105" height="104" name="member_list"> + <name_list name="member_list"> <name_list.columns label="Membre" name="name"/> <name_list.columns label="Donation" name="donated" width="116"/> <name_list.columns label="Statut" name="online" width="136"/> @@ -21,7 +21,7 @@ Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la to <button label="Inviter" name="member_invite" width="165"/> <button label="Expulser" name="member_eject"/> </panel> - <panel height="148" label="RÔLES" name="roles_sub_tab"> + <panel label="RÔLES" name="roles_sub_tab"> <panel.string name="help_text"> Chaque rôle possède un titre et des pouvoirs. Les membres peuvent avoir @@ -41,13 +41,13 @@ notamment les rôles Tous et Propriétaire. Checkbox_Off </panel.string> <filter_editor label="Filtrer les rôles" name="filter_input"/> - <scroll_list bottom_delta="-104" height="104" name="role_list"> + <scroll_list name="role_list"> <scroll_list.columns label="Rôle" name="name"/> <scroll_list.columns label="Titre" name="title"/> <scroll_list.columns label="#" name="members"/> </scroll_list> <button label="Nouveau rôle" name="role_create"/> - <button label="Supprimer le rôle" name="role_delete"/> + <button label="Supprimer le rôle" width="120" name="role_delete"/> </panel> <panel height="148" label="POUVOIRS" name="actions_sub_tab" tool_tip="Vous pouvez afficher une description du pouvoir et voir quels membres et rôles peuvent s'en servir."> <panel.string name="help_text"> diff --git a/indra/newview/skins/default/xui/fr/panel_groups.xml b/indra/newview/skins/default/xui/fr/panel_groups.xml index 98320656fb..4cda98b9f7 100644 --- a/indra/newview/skins/default/xui/fr/panel_groups.xml +++ b/indra/newview/skins/default/xui/fr/panel_groups.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="groups"> <scroll_list bottom="50" name="group list"/> - <text bottom="16" height="32" name="groupdesc" width="268"> + <text name="groupdesc"> Le groupe actif est en gras. </text> - <text bottom="3" name="groupcount"> + <text name="groupcount" width="280"> Vous appartenez à [COUNT] groupes ([MAX] max). </text> <button label="IM/Appel" name="IM" tool_tip="Ouvrir une session de messagerie instantanée"/> diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml index 8f0561d243..75648d3541 100644 --- a/indra/newview/skins/default/xui/fr/panel_login.xml +++ b/indra/newview/skins/default/xui/fr/panel_login.xml @@ -23,7 +23,7 @@ <text name="start_location_text"> Commencer à : </text> - <combo_box name="start_location_combo"> + <combo_box name="start_location_combo" width="152"> <combo_box.item label="Dernier emplacement" name="MyLastLocation"/> <combo_box.item label="Domicile" name="MyHome"/> <combo_box.item label="<Saisissez le nom de la région>" name="Typeregionname"/> diff --git a/indra/newview/skins/default/xui/fr/panel_media_settings_security.xml b/indra/newview/skins/default/xui/fr/panel_media_settings_security.xml index 36d5f4e860..9d070b7aff 100644 --- a/indra/newview/skins/default/xui/fr/panel_media_settings_security.xml +++ b/indra/newview/skins/default/xui/fr/panel_media_settings_security.xml @@ -2,7 +2,8 @@ <panel label="Sécurité" name="Media Settings Security"> <check_box initial_value="false" label="Autoriser l'accès aux styles d'URL spécifiés uniquement" name="whitelist_enable"/> <text name="home_url_fails_some_items_in_whitelist"> - Les entrées par lesquelles la page d'accueil est rejetée sont indiquées : + Les entrées par lesquelles la page +d'accueil est rejetée sont indiquées : </text> <button label="Ajouter" name="whitelist_add"/> <button label="Supprimer" name="whitelist_del"/> diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml b/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml index fa1ddd2430..f1a7ebb35c 100644 --- a/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml +++ b/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml @@ -2,8 +2,8 @@ <!-- All our XML is utf-8 encoded. --> <panel name="nearby_chat"> <panel name="chat_caption"> - <text name="sender_name"> - CHAT PRÈS DE VOUS - </text> + <text + name="sender_name" +width="170">CHAT PRÈS DE VOUS</text> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_notes.xml b/indra/newview/skins/default/xui/fr/panel_notes.xml index b1be274616..ba052a0e07 100644 --- a/indra/newview/skins/default/xui/fr/panel_notes.xml +++ b/indra/newview/skins/default/xui/fr/panel_notes.xml @@ -14,8 +14,8 @@ </layout_panel> <layout_panel name="notes_buttons_panel"> <button label="Devenir amis" name="add_friend" tool_tip="Proposer à ce résident de devenir votre ami"/> - <button label="IM" name="im" tool_tip="Ouvrir une session IM"/> - <button label="Appeler" name="call" tool_tip="Appeler ce résident"/> + <button label="IM" name="im" width="30" tool_tip="Ouvrir une session IM"/> + <button label="Appeler" name="call" width="60" tool_tip="Appeler ce résident"/> <button label="Carte" name="show_on_map_btn" tool_tip="Afficher le résident sur la carte"/> <button label="Téléporter" name="teleport" tool_tip="Proposez une téléportation"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml index 04abcc8aad..0c0cc29e7a 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml @@ -9,7 +9,7 @@ <check_box label="Bulles de chat" name="bubble_text_chat"/> <color_swatch name="background" tool_tip="Choisir la couleur des bulles de chat"/> <slider label="Opacité" name="bubble_chat_opacity"/> - <text name="AspectRatioLabel1" tool_tip="largeur/hauteur"> + <text width="140" name="AspectRatioLabel1" tool_tip="largeur/hauteur"> Rapport hauteur/largeur </text> <combo_box name="aspect_ratio" tool_tip="largeur/hauteur"> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml index 4459244395..9576119eb5 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml @@ -17,7 +17,7 @@ <text name="QualitySpeed"> Qualité et vitesse : </text> - <text left="105" name="FasterText"> + <text left="35" name="FasterText"> Plus rapide </text> <text name="BetterText"> @@ -62,7 +62,7 @@ <text name="DrawDistanceMeterText2"> m </text> - <slider label="Nombre de particules max. :" label_width="143" name="MaxParticleCount"/> + <slider label="Nombre de particules max. :" label_width="147" name="MaxParticleCount"/> <slider label="Qualité post-traitement :" name="RenderPostProcess"/> <text name="MeshDetailText"> Détails des rendus : diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml index 68a735df90..d477a9532d 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml @@ -18,7 +18,7 @@ kbps </text> <check_box label="Port de connexion personnalisé" name="connection_port_enabled"/> - <spinner label="Numéro de port :" name="web_proxy_port"/> + <spinner label="Numéro de port :" label_width="95" name="web_proxy_port" width="170"/> <text name="cache_size_label_l"> Taille de la mémoire </text> diff --git a/indra/newview/skins/default/xui/fr/panel_profile.xml b/indra/newview/skins/default/xui/fr/panel_profile.xml index 0c33a0f1e0..19c6a3b090 100644 --- a/indra/newview/skins/default/xui/fr/panel_profile.xml +++ b/indra/newview/skins/default/xui/fr/panel_profile.xml @@ -39,8 +39,8 @@ </layout_panel> <layout_panel name="profile_buttons_panel"> <button label="Devenir amis" name="add_friend" tool_tip="Proposer à ce résident de devenir votre ami"/> - <button label="IM" name="im" tool_tip="Ouvrir une session IM"/> - <button label="Appeler" name="call" tool_tip="Appeler ce résident"/> + <button label="IM" name="im" width="30" tool_tip="Ouvrir une session IM"/> + <button label="Appeler" name="call" width="60" tool_tip="Appeler ce résident"/> <button label="Carte" name="show_on_map_btn" tool_tip="Afficher le résident sur la carte"/> <button label="Téléporter" name="teleport" tool_tip="Proposez une téléportation"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/fr/panel_region_covenant.xml b/indra/newview/skins/default/xui/fr/panel_region_covenant.xml index cf9f4e0fd0..cd1d0c4886 100644 --- a/indra/newview/skins/default/xui/fr/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_covenant.xml @@ -18,7 +18,7 @@ <text name="estate_cov_lbl"> Règlement : </text> - <text name="covenant_timestamp_text"> + <text name="covenant_timestamp_text" width="350"> Dernière modification le mercredi 31 décembre 1969 16:00:00 </text> <button label="?" name="covenant_help"/> @@ -27,8 +27,8 @@ </text_editor> <button label="Réinitialiser" name="reset_covenant"/> <text name="covenant_help_text"> - Les changements apportés au règlement apparaîtront sur toutes - les parcelles du domaine. + Les changements apportés au règlement apparaîtront sur +toutes les parcelles du domaine. </text> <text bottom_delta="-31" name="covenant_instructions"> Faire glisser une note pour changer le règlement de ce domaine. diff --git a/indra/newview/skins/default/xui/fr/panel_region_debug.xml b/indra/newview/skins/default/xui/fr/panel_region_debug.xml index 0fabf92889..cb4a74e142 100644 --- a/indra/newview/skins/default/xui/fr/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_debug.xml @@ -13,7 +13,7 @@ <check_box label="Désactiver la physique" name="disable_physics_check" tool_tip="Désactiver tous les effets liés à la physique dans cette région"/> <button label="?" name="disable_physics_help"/> <button bottom_delta="-38" label="Appliquer" name="apply_btn"/> - <text bottom_delta="-42" name="objret_text_lbl"> + <text bottom_delta="-42" name="objret_text_lbl" width="260"> Renvoi de l'objet </text> <text name="resident_text_lbl"> diff --git a/indra/newview/skins/default/xui/fr/panel_region_estate.xml b/indra/newview/skins/default/xui/fr/panel_region_estate.xml index a0282dd940..f9262ea478 100644 --- a/indra/newview/skins/default/xui/fr/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_estate.xml @@ -1,9 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Domaine" name="Estate"> <text bottom="-34" name="estate_help_text"> - Les modifications des paramètres de cet onglet affecteront toutes les régions du domaine. + Les modifications des paramètres de cet +onglet affecteront toutes les régions du +domaine. </text> - <text bottom_delta="-34" name="estate_text"> + <text top_pad="8" bottom_delta="-34" name="estate_text"> Domaine : </text> <text name="estate_name"> diff --git a/indra/newview/skins/default/xui/fr/panel_region_general.xml b/indra/newview/skins/default/xui/fr/panel_region_general.xml index 8a59adbd93..711278d614 100644 --- a/indra/newview/skins/default/xui/fr/panel_region_general.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_general.xml @@ -32,9 +32,9 @@ <button label="?" name="parcel_changes_help"/> <check_box label="Ne pas afficher dans la recherche" name="block_parcel_search_check" tool_tip="Afficher cette région et ses parcelles dans les résultats de recherche"/> <button label="?" name="parcel_search_help"/> - <spinner label="Nombre maximum d'avatars" label_width="127" name="agent_limit_spin" width="190"/> + <spinner label="Nombre maximum d'avatars" name="agent_limit_spin" label_width="160" width="240"/> <button label="?" name="agent_limit_help"/> - <spinner label="Bonus objet" label_width="127" name="object_bonus_spin" width="190"/> + <spinner label="Bonus objet" name="object_bonus_spin" label_width="160" width="240"/> <button label="?" name="object_bonus_help"/> <text label="Maturité" name="access_text"> Catégorie : diff --git a/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml b/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml index 0e72bbc9f5..e709100fa2 100644 --- a/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml @@ -3,19 +3,19 @@ <text name="region_text_lbl"> Région : </text> - <text name="region_text"> + <text name="region_text" left_delta="56"> inconnu </text> <text name="version_channel_text_lbl"> Version : </text> - <text name="version_channel_text"> + <text name="version_channel_text" left_delta="56"> inconnu </text> <text name="region_type_lbl"> Type : </text> - <text name="region_type"> + <text name="region_type" left_delta="56"> inconnu </text> <check_box label="Interdire le terraformage" name="block_terraform_check"/> @@ -25,8 +25,8 @@ <check_box label="Autoriser la revente de terrains" name="allow_land_resell_check"/> <check_box label="Autoriser la fusion/division de terrains" name="allow_parcel_changes_check"/> <check_box label="Interdire l'affichage du terrain dans les recherches" name="block_parcel_search_check" tool_tip="Permettre aux autres résidents de voir cette région et ses parcelles dans les résultats de recherche"/> - <spinner label="Nombre maximum d'avatars" name="agent_limit_spin"/> - <spinner label="Bonus objet" name="object_bonus_spin"/> + <spinner label="Nombre maximum d'avatars" name="agent_limit_spin" label_width="160" width="240"/> + <spinner label="Bonus objet" name="object_bonus_spin" label_width="160" width="240"/> <text label="Accès" name="access_text"> Catégorie : </text> diff --git a/indra/newview/skins/default/xui/fr/panel_region_texture.xml b/indra/newview/skins/default/xui/fr/panel_region_texture.xml index a7abb49b1a..e95d911c01 100644 --- a/indra/newview/skins/default/xui/fr/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_texture.xml @@ -39,7 +39,7 @@ <text name="height_text_lbl9"> Nord-est </text> - <text name="height_text_lbl10"> + <text name="height_text_lbl10" width="460"> Ces valeurs représentent les limites de mélange pour les textures ci-dessus. </text> <text name="height_text_lbl11"> diff --git a/indra/newview/skins/default/xui/fr/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/fr/panel_script_limits_my_avatar.xml index 24656bf379..47d8382e57 100644 --- a/indra/newview/skins/default/xui/fr/panel_script_limits_my_avatar.xml +++ b/indra/newview/skins/default/xui/fr/panel_script_limits_my_avatar.xml @@ -4,7 +4,7 @@ Chargement... </text> <scroll_list name="scripts_list"> - <scroll_list.columns label="Taille (Ko)" name="size"/> + <scroll_list.columns label="Taille (Ko)" width="80" name="size"/> <scroll_list.columns label="URL" name="urls"/> <scroll_list.columns label="Nom de l'objet" name="name"/> <scroll_list.columns label="Endroit" name="location"/> diff --git a/indra/newview/skins/default/xui/fr/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/fr/panel_script_limits_region_memory.xml index 1e5e680c09..9426047ee1 100644 --- a/indra/newview/skins/default/xui/fr/panel_script_limits_region_memory.xml +++ b/indra/newview/skins/default/xui/fr/panel_script_limits_region_memory.xml @@ -13,9 +13,9 @@ Chargement... </text> <scroll_list name="scripts_list"> - <scroll_list.columns label="Taille (Ko)" name="size"/> + <scroll_list.columns label="Taille (Ko)" width="80" name="size"/> <scroll_list.columns label="Nom de l'objet" name="name"/> - <scroll_list.columns label="Propriétaire d'objet" name="owner"/> + <scroll_list.columns label="Propriétaire d'objet" width="140" name="owner"/> <scroll_list.columns label="Parcelle/emplacement" name="location"/> </scroll_list> <button label="Rafraîchir la liste" name="refresh_list_btn"/> diff --git a/indra/newview/skins/default/xui/fr/panel_side_tray.xml b/indra/newview/skins/default/xui/fr/panel_side_tray.xml index 3ad1671921..6329324a23 100644 --- a/indra/newview/skins/default/xui/fr/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/fr/panel_side_tray.xml @@ -2,26 +2,26 @@ <!-- Side tray cannot show background because it is always partially on screen to hold tab buttons. --> <side_tray name="sidebar"> - <sidetray_tab description="Activer/désactiver le panneau latéral." name="sidebar_openclose"/> - <sidetray_tab description="Domicile." name="sidebar_home"> + <sidetray_tab description="Activer/désactiver le panneau latéral." name="sidebar_openclose" tab_title="Activer/désactiver le panneau latéral"/> + <sidetray_tab description="Domicile." name="sidebar_home" tab_title="Accueil"> <panel label="domicile" name="panel_home"/> </sidetray_tab> - <sidetray_tab description="Modifiez votre profil public et vos Favoris." name="sidebar_me"> + <sidetray_tab description="Modifiez votre profil public et vos Favoris." name="sidebar_me" tab_title="Mon profil"> <panel label="Moi" name="panel_me"/> </sidetray_tab> - <sidetray_tab description="Trouvez vos amis, vos contacts et les personnes se trouvant près de vous." name="sidebar_people"> + <sidetray_tab description="Trouvez vos amis, vos contacts et les personnes se trouvant près de vous." name="sidebar_people" tab_title="Personnes"> <panel_container name="panel_container"> <panel label="Profil du groupe" name="panel_group_info_sidetray"/> <panel label="Résidents et objets ignorés" name="panel_block_list_sidetray"/> </panel_container> </sidetray_tab> - <sidetray_tab description="Trouvez de nouveaux lieux à découvrir et les lieux que vous connaissez déjà." label="Lieux" name="sidebar_places"> + <sidetray_tab description="Trouvez de nouveaux lieux à découvrir et les lieux que vous connaissez déjà." label="Lieux" name="sidebar_places" tab_title="Endroits"> <panel label="Lieux" name="panel_places"/> </sidetray_tab> - <sidetray_tab description="Parcourez votre inventaire." name="sidebar_inventory"> + <sidetray_tab description="Parcourez votre inventaire." name="sidebar_inventory" tab_title="Mon inventaire"> <panel label="Modifier l'inventaire" name="sidepanel_inventory"/> </sidetray_tab> - <sidetray_tab description="Modifiez votre apparence actuelle." name="sidebar_appearance"> + <sidetray_tab description="Modifiez votre apparence actuelle." name="sidebar_appearance" tab_title="Mon apparence"> <panel label="Changer d'apparence" name="sidepanel_appearance"/> </sidetray_tab> </side_tray> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 1888dc1827..c6f73dde21 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -1486,8 +1486,8 @@ <string name="covenant_last_modified"> Dernière modification : </string> - <string name="none_text" value=" (aucun) "/> - <string name="never_text" value=" (jamais) "/> + <string name="none_text" value=" (aucun)"/> + <string name="never_text" value=" (jamais)"/> <string name="GroupOwned"> Propriété du groupe </string> diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml index 0fa20ab1ac..78bc355f4b 100644 --- a/indra/newview/skins/default/xui/ja/floater_about.xml +++ b/indra/newview/skins/default/xui/ja/floater_about.xml @@ -61,7 +61,8 @@ Vivox バージョン: [VIVOX_VERSION] FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). GL Copyright (C) 1999-2004 Brian Paul. Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. - jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) + jpeg2000 Copyright (C) 2001, David Taubman, The University of New South + Wales (UNSW) jpeglib Copyright (C) 1991-1998, Thomas G. Lane. ogg/vorbis Copyright (C) 2001, Xiphophorus OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml index 71a38391cd..b3278a8f9e 100644 --- a/indra/newview/skins/default/xui/ja/floater_about_land.xml +++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml @@ -97,7 +97,7 @@ <text name="For Sale: Price L$[PRICE]."> 価格: L$[PRICE] (L$[PRICE_PER_SQM]/平方メートル) </text> - <button label="土地を売る" label_selected="土地を販売..." name="Sell Land..."/> + <button label="土地を売る" label_selected="土地を販売..." name="Sell Land..." width="100"/> <text name="For sale to"> 販売先:[BUYER] </text> @@ -107,7 +107,7 @@ <text name="Selling with no objects in parcel."> オブジェクトは販売しない </text> - <button label="土地販売の取り消し" label_selected="土地販売の取り消し" name="Cancel Land Sale"/> + <button label="土地販売の取り消し" label_selected="土地販売の取り消し" name="Cancel Land Sale" width="100"/> <text name="Claimed:"> 取得日時: </text> @@ -126,10 +126,10 @@ <text name="DwellText"> 誤 </text> - <button label="土地の購入" label_selected="土地を購入..." left="130" name="Buy Land..." width="125"/> - <button label="スクリプト情報" name="Scripts..."/> + <button label="土地の購入" label_selected="土地を購入..." left="130" name="Buy Land..." width="100"/> + <button label="スクリプト情報" name="Scripts..." width="100"/> <button label="グループに購入" label_selected="グループ用に購入..." name="Buy For Group..."/> - <button label="入場許可を購入" label_selected="入場許可を購入..." left="130" name="Buy Pass..." tool_tip="この土地への一時的なアクセスを許可します。" width="125"/> + <button label="入場許可を購入" label_selected="入場許可を購入..." left="130" name="Buy Pass..." tool_tip="この土地への一時的なアクセスを許可します。" width="100"/> <button label="土地の放棄" label_selected="土地を放棄..." name="Abandon Land..."/> <button label="土地を取り戻す" label_selected="土地の返還を要求..." name="Reclaim Land..."/> <button label="リンデンセール" label_selected="Lindenセール..." name="Linden Sale..." tool_tip="土地が所有されており、コンテンツが設定されている必要があります。オークションの対象になっていないことも必要条件です。"/> @@ -206,7 +206,7 @@ [MAX]の内[COUNT]([DELETED]を削除) </panel.string> <text name="parcel_object_bonus"> - 地域オブジェクトボーナス要因: [BONUS] + オブジェクトボーナス: [BONUS] </text> <text name="Simulator primitive usage:" width="500"> プリム使用状況: @@ -263,7 +263,7 @@ <text name="Object Owners:" width="150"> オブジェクトのオーナー: </text> - <button label="リスト更新" label_selected="リスト更新" left="146" name="Refresh List" tool_tip="オブジェクトのリストを更新"/> + <button label="リスト更新" label_selected="リスト更新" left="146" name="Refresh List" tool_tip="オブジェクトのリストを更新します"/> <button label="オブジェクトを返却する" label_selected="オブジェクトの返却..." left="256" name="Return objects..."/> <name_list label="カウント" name="owner list"> <name_list.columns label="タイプ" name="type"/> @@ -329,8 +329,8 @@ 土地オプション: </text> <check_box label="安全(ダメージなし)" name="check safe" tool_tip="チェックを入れるとこの土地でのダメージコンバットが無効になり、「安全」に設定されます。 チェックを外すとダメージコンバットが有効になります。"/> - <check_box label="プッシングを制限" name="PushRestrictCheck" tool_tip="スクリプトによるプッシングを制限します。 このオプションを選択することにより、あなたの土地での破壊的行動を妨げることができます。"/> - <check_box label="検索に区画を表示(週 L$30)" name="ShowDirectoryCheck" tool_tip="検索結果でこの区画を表示させる"/> + <check_box label="プッシングを制限" name="PushRestrictCheck" tool_tip="スクリプトによるプッシングを制限します。 このオプションを選択することにより、あなたの土地での破壊的行動を防ぐことができます。"/> + <check_box label="検索に区画を表示(週 L$30)" name="ShowDirectoryCheck" tool_tip="この区画を検索結果に表示します"/> <combo_box name="land category with adult"> <combo_box.item label="全カテゴリ" name="item0"/> <combo_box.item label="Linden所在地" name="item1"/> @@ -364,7 +364,7 @@ <text name="Snapshot:"> スナップショット: </text> - <texture_picker label="" left="116" name="snapshot_ctrl" tool_tip="写真をクリックして選択"/> + <texture_picker label="" name="snapshot_ctrl" tool_tip="写真をクリックして選択"/> <text name="landing_point"> 着地点: [LANDING] </text> @@ -383,7 +383,7 @@ <text name="with media:"> 種類: </text> - <combo_box name="media type" tool_tip="URL が動画、ウェブ・ページ、その他のメディアの場合に指定します"/> + <combo_box name="media type" tool_tip="URL が動画、Webページ、その他のメディアの場合に指定します"/> <text name="at URL:"> ホームページ: </text> @@ -396,20 +396,20 @@ <text name="Description:"> 説明: </text> - <line_editor name="url_description" tool_tip="[再生]/[ロード]ボタンの隣に表示されるテキスト"/> + <line_editor name="url_description" tool_tip="「再生」「ロード」ボタンの隣に表示されるテキストです"/> <text name="Media texture:"> - テクスチャの置き換え: + テクスチャ置き換え: </text> - <texture_picker label="" name="media texture" tool_tip="写真をクリックして選択"/> + <texture_picker label="" name="media texture" tool_tip="写真をクリックして選択" left="120"/> <text name="replace_texture_help" width="290"> このテクスチャを使用するオブジェクトのプレイをクリックすると、ムービーや Web ページを表示します。 テクスチャを変更するにはサムネイルを選択してください。 </text> <check_box label="スケールを自動設定" name="media_auto_scale" tool_tip="このオプションをチェックすると、この区画のコンテンツのスケールが自動的に設定されます。 動作速度と画質が少し低下することがありますが、他のテクスチャーのスケーリングや整列が必要になることはありません。"/> - <text name="media_size" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。"> + <text name="media_size" tool_tip="レンダリングするWebメディアのサイズです。デフォルトの 0 のままにします。"> サイズ: </text> - <spinner name="media_size_width" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。"/> - <spinner name="media_size_height" tool_tip="レンダリングするウェブ・メディアのサイズ。デフォルトの 0 のままにします。"/> + <spinner name="media_size_width" tool_tip="レンダリングするWebメディアのサイズです。デフォルトの 0 のままにします。"/> + <spinner name="media_size_height" tool_tip="レンダリングするWebメディアのサイズです。デフォルトの 0 のままにします。"/> <text name="pixels"> ピクセル </text> @@ -425,13 +425,13 @@ <text name="Sound:"> サウンド: </text> - <check_box label="ジェスチャーとオブジェクトの音をこの区画だけに限定" name="check sound local"/> + <check_box label="ジェスチャーとオブジェクトの音をこの区画だけに限定する" name="check sound local"/> <text name="Voice settings:"> ボイス: </text> <check_box label="ボイスを有効にする" name="parcel_enable_voice_channel"/> <check_box label="ボイスを有効にする(不動産設定)" name="parcel_enable_voice_channel_is_estate_disabled"/> - <check_box label="この区画でのボイス使用を制限" name="parcel_enable_voice_channel_parcel"/> + <check_box label="ボイスをこの区画に限定する" name="parcel_enable_voice_channel_parcel"/> </panel> <panel label="アクセス" name="land_access_panel"> <panel.string name="access_estate_defined"> @@ -441,16 +441,16 @@ 1つ以上のオプションが、不動産レベルで設定されています。 </panel.string> <text name="Limit access to this parcel to:"> - この区画にアクセス + この区画へのアクセス </text> - <check_box label="パブリックアクセスを許可 [MATURITY]" name="public_access"/> + <check_box label="パブリックアクセスを許可する [MATURITY]" name="public_access"/> <text name="Only Allow"> - 次の住人のアクセス禁止: + 次の住人のアクセスを許可: </text> <check_box label="支払情報登録済 [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="未確認の住人の立入を禁止します。"/> <check_box label="年齢確認 [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="年齢確認を済ませていない住人の立入を禁止します。 詳しい情報は [SUPPORT_SITE] をご覧下さい。"/> - <check_box label="グループ・アクセスを許可:[GROUP]" name="GroupCheck" tool_tip="[一般]タブで、グループを選択してください。"/> - <check_box label="入場許可を販売:" name="PassCheck" tool_tip="この区画への一時的なアクセスを許可"/> + <check_box label="グループのアクセスを許可:[GROUP]" name="GroupCheck" tool_tip="[一般]タブで、グループを選択してください。"/> + <check_box label="入場許可を販売:" name="PassCheck" tool_tip="この区画への一時的なアクセスを許可します"/> <combo_box name="pass_combo"> <combo_box.item label="誰でも" name="Anyone"/> <combo_box.item label="グループ" name="Group"/> @@ -467,7 +467,7 @@ </panel> <panel name="Banned_layout_panel"> <text label="禁止" name="BanCheck"> - 立入禁止された住人 + 立入を禁止された住人 </text> <name_list name="BannedList" tool_tip="(合計 [LISTED] 人、最大 [MAX] 人)"/> <button label="追加" name="add_banned"/> diff --git a/indra/newview/skins/default/xui/ja/floater_animation_preview.xml b/indra/newview/skins/default/xui/ja/floater_animation_preview.xml index c355924f33..4674df8bec 100644 --- a/indra/newview/skins/default/xui/ja/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/ja/floater_animation_preview.xml @@ -114,8 +114,8 @@ </text> <spinner label="優先順位" name="priority" tool_tip="このアニメーションがどのアニメーションを上書きするかを決めます"/> <check_box label="ループ" name="loop_check" tool_tip="このアニメーションをループ再生します"/> - <spinner label="イン(%)" label_width="45" left="70" name="loop_in_point" tool_tip="アニメーションのループ復帰点を設定します" width="100"/> - <spinner label="アウト(%)" label_width="60" left="170" name="loop_out_point" tool_tip="アニメーションのループ終了点を設定します" width="100"/> + <spinner label="イン(%)" label_width="45" left="60" name="loop_in_point" tool_tip="アニメーションのループ復帰点を設定します" width="100"/> + <spinner label="アウト(%)" label_width="50" left="170" name="loop_out_point" tool_tip="アニメーションのループ終了点を設定します" width="100"/> <text name="hand_label"> 手の動き </text> @@ -168,17 +168,17 @@ <combo_box.item label="座る" name="Sitting"/> <combo_box.item label="飛ぶ" name="Flying"/> </combo_box> - <spinner label="フェーズイン(秒)" name="ease_in_time" tool_tip="アニメーションのブレンドイン時間(秒)"/> - <spinner label="フェーズアウト(秒)" name="ease_out_time" tool_tip="アニメーションのブレンドアウト時間(秒)"/> + <spinner label="イーズイン(秒)" name="ease_in_time" tool_tip="アニメーションのブレンドイン時間(秒)"/> + <spinner label="イーズアウト(秒)" name="ease_out_time" tool_tip="アニメーションのブレンドアウト時間(秒)"/> <button label="" name="play_btn" tool_tip="アニメーションを再生する"/> <button name="pause_btn" tool_tip="アニメーションを一時停止する"/> <button label="" name="stop_btn" tool_tip="アニメーションの再生を停止"/> <slider label="" name="playback_slider"/> <text name="bad_animation_text"> - アニメーション・ファイルを読み込めません。 + アニメーションファイルを読み込めません。 Poser 4からエクスポートされたBVHファイルを推奨します。 </text> - <button label="アップロードL$[AMOUNT]" name="ok_btn"/> + <button label="アップロードL$[AMOUNT]" name="ok_btn"/> <button label="取り消し" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml b/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml index a199a10823..0ea913e66a 100644 --- a/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml @@ -3,13 +3,13 @@ <floater.string name="InvalidAvatar"> 無効なアバター </floater.string> - <text name="label"> + <text name="label" width="100"> ベークドテクスチャ </text> <text name="composite_label" width="128"> - 合成テクスチャー + 合成テクスチャ </text> - <button label="テクスチャID一覧をコンソールに書き込む" label_selected="捨てる" name="Dump"/> + <button label="テクスチャID一覧をコンソールに書き込む" label_selected="捨てる" name="Dump" width="200"/> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> <texture_picker label="髪" name="hair-baked"/> diff --git a/indra/newview/skins/default/xui/ja/floater_build_options.xml b/indra/newview/skins/default/xui/ja/floater_build_options.xml index 8d3dba3883..9fd788d9cb 100644 --- a/indra/newview/skins/default/xui/ja/floater_build_options.xml +++ b/indra/newview/skins/default/xui/ja/floater_build_options.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="build options floater" title="グリッドオプション"> <spinner label="グリッドユニット(メートル)" name="GridResolution"/> - <spinner label="グリッド範囲(メートル)" name="GridDrawSize"/> + <spinner label="グリッド゙範囲(メートル)" name="GridDrawSize"/> <check_box label="サブユニットにスナップ" name="GridSubUnit"/> <check_box label="横断面を表示" name="GridCrossSection"/> <text name="grid_opacity_label" tool_tip="グリッドの透明度"> diff --git a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml index fbbbd85890..be24960c6e 100644 --- a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterbulkperms" title="コンテンツ権限の編集"> +<floater name="floaterbulkperms" title="中身の権限の編集"> <floater.string name="nothing_to_modify_text"> - 選択した中に編集できないコンテンツが含まれています + 選択した中に編集できないものが含まれています </floater.string> <floater.string name="status_text"> [NAME]に権限を設定中です。 @@ -28,12 +28,12 @@ <icon name="icon_script" tool_tip="スクリプト"/> <check_box label="サウンド" name="check_sound"/> <icon name="icon_sound" tool_tip="サウンド"/> - <check_box label="テクスチャー" name="check_texture"/> + <check_box label="テクスチャ" name="check_texture"/> <icon name="icon_texture" tool_tip="テクスチャ"/> <button label="すべてに √" label_selected="全て" name="check_all"/> <button label="クリア" label_selected="なし" name="check_none"/> <text name="newperms"> - 新しいコンテンツ権限 + 新しい中身の権限 </text> <text name="GroupLabel"> グループ: @@ -43,7 +43,7 @@ 全員: </text> <check_box label="コピー" name="everyone_copy"/> - <text name="NextOwnerLabel"> + <text name="NextOwnerLabel" left="160"> 次の所有者: </text> <check_box label="修正" name="next_owner_modify"/> diff --git a/indra/newview/skins/default/xui/ja/floater_buy_contents.xml b/indra/newview/skins/default/xui/ja/floater_buy_contents.xml index 53b7f24141..69d4faf5b8 100644 --- a/indra/newview/skins/default/xui/ja/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/ja/floater_buy_contents.xml @@ -1,22 +1,22 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater min_width="340" name="floater_buy_contents" title="コンテンツの購入" width="340"> +<floater min_width="340" name="floater_buy_contents" title="中身の購入" width="340"> <text name="contains_text" width="320"> - [NAME]の内容: + [NAME]の中身: </text> <scroll_list name="item_list" width="310"/> <text name="buy_text" width="320"> - コンテンツを[NAME]からL$[AMOUNT]で購入しますか? + 中身を[NAME]からL$[AMOUNT]で購入しますか? </text> <button label="取り消し" label_selected="取り消し" name="cancel_btn" width="73"/> <button label="購入" label_selected="購入" left_delta="-77" name="buy_btn" width="73"/> <check_box label="今すぐ服を着る" left_delta="-125" name="wear_check"/> <text name="no_copy_text"> - (コピーなし) + (コピー不可) </text> <text name="no_modify_text"> - (修正なし) + (修正不可) </text> <text name="no_transfer_text"> - (転送なし) + (再販・プレゼント不可) </text> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_buy_currency.xml b/indra/newview/skins/default/xui/ja/floater_buy_currency.xml index ffdcf838d3..32de533dc4 100644 --- a/indra/newview/skins/default/xui/ja/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/ja/floater_buy_currency.xml @@ -40,13 +40,13 @@ [NAME] L$ [PRICE] </text> <text name="total_label"> - 新しい残高 + 購入後の残高 </text> <text name="total_amount"> L$ [AMT] </text> <text name="currency_links"> - [http://www.secondlife.com/my/account/payment_method_management.php?lang=ja-JP payment method] | [http://www.secondlife.com/my/account/currency.php?lang=ja-JP currency] | [http://www.secondlife.com/my/account/exchange_rates.php?lang=ja-JP exchange rate] + [http://www.secondlife.com/my/account/payment_method_management.php?lang=ja-JP 支払方法] | [http://www.secondlife.com/my/account/currency.php?lang=ja-JP 通貨] | [http://www.secondlife.com/my/account/exchange_rates.php?lang=ja-JP 換算レート] </text> <text name="exchange_rate_note"> 金額を再入力して最新換算レートを確認します。 diff --git a/indra/newview/skins/default/xui/ja/floater_buy_land.xml b/indra/newview/skins/default/xui/ja/floater_buy_land.xml index 13b43d1257..f332c3d988 100644 --- a/indra/newview/skins/default/xui/ja/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/ja/floater_buy_land.xml @@ -27,10 +27,10 @@ <text name="resellable_changeable_label"> この地域で購入した土地: </text> - <text name="resellable_clause"> + <text name="resellable_clause" left="460"> 再販できる場合とできない場合があります。 </text> - <text name="changeable_clause"> + <text name="changeable_clause" left="460"> 統合または再分割できる場合とできない場合があります。 </text> <text name="covenant_text"> @@ -67,12 +67,12 @@ <text name="error_message"> 何か変です </text> - <button label="ウェブ・サイトに移動" name="error_web"/> + <button label="Webサイトに移動" name="error_web"/> <text name="account_action"> - プレミアム・メンバーにアップグレード + プレミアム会員にアップグレード </text> <text name="account_reason"> - 土地を保有できるのはプレミアム・メンバーだけです + 土地を保有できるのはプレミアム会員だけです </text> <combo_box name="account_level"> <combo_box.item label="月額 9.95米ドル、 月払い" name="US$9.95/month,billedmonthly"/> @@ -114,10 +114,10 @@ 再販不可能 </string> <string name="can_change"> - 統合/再分割可能 + 統合・再分割可能 </string> <string name="can_not_change"> - 統合/再分割不可能 + 統合・再分割不可能 </string> <string name="cant_buy_for_group"> あなたはアクティブなグループ用の土地購入を許可されていません @@ -127,7 +127,7 @@ </string> <string name="multiple_parcels_selected"> 複数の異なった区画を選択しました。 -これより小さなエリアを選択してください。 +これより小さな範囲を選択してください。 </string> <string name="no_permission"> あなたはアクティブなグループ用の土地購入を許可されていません @@ -149,7 +149,7 @@ </string> <string name="not_owned_by_you"> 他の使用者に所有された土地が選択されています。 -これより小さなエリアを選択してください。 +これより小さな範囲を選択してください。 </string> <string name="processing"> 購入処理中... @@ -203,7 +203,7 @@ オブジェクト [AMOUNT2] 個サポート </string> <string name="sold_with_objects"> - オブジェクトと共に販売済み + オブジェクト込みで販売 </string> <string name="sold_without_objects"> オブジェクトは含まれていません diff --git a/indra/newview/skins/default/xui/ja/floater_buy_object.xml b/indra/newview/skins/default/xui/ja/floater_buy_object.xml index f807e91573..7a5b7dc140 100644 --- a/indra/newview/skins/default/xui/ja/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/ja/floater_buy_object.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="contents" title="オブジェクトのコピーを購入"> <text name="contents_text"> - 内容: + 中身: </text> <text name="buy_text"> [NAME]からL$[AMOUNT]で購入しますか? @@ -12,15 +12,15 @@ 購入 </text> <string name="title_buy_copy_text"> - 次のものを買う + 次のものを購入 </string> <text name="no_copy_text"> - (コピーなし) + (コピー不可) </text> <text name="no_modify_text"> - (修正なし) + (修正不可) </text> <text name="no_transfer_text"> - (転送なし) + (再販・プレゼント不可) </text> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_camera.xml b/indra/newview/skins/default/xui/ja/floater_camera.xml index be118273fa..3730bcd385 100644 --- a/indra/newview/skins/default/xui/ja/floater_camera.xml +++ b/indra/newview/skins/default/xui/ja/floater_camera.xml @@ -11,7 +11,7 @@ </floater.string> <panel name="controls"> <joystick_track name="cam_track_stick" tool_tip="カメラを上下左右に動かします"/> - <panel name="zoom" tool_tip="向いてる方法にカメラをズーム"> + <panel name="zoom" tool_tip="向いている方法にカメラをズーム"> <slider_bar name="zoom_slider" tool_tip="向いている方向にカメラをズーム"/> </panel> <joystick_rotate name="cam_rotate_stick" tool_tip="自分を軸にカメラを回す"/> diff --git a/indra/newview/skins/default/xui/ja/floater_color_picker.xml b/indra/newview/skins/default/xui/ja/floater_color_picker.xml index a98da4b8ba..dc87d27a15 100644 --- a/indra/newview/skins/default/xui/ja/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/ja/floater_color_picker.xml @@ -18,7 +18,7 @@ <text name="l_val_text"> 輝度: </text> - <check_box label="今すぐ適用" name="apply_immediate"/> + <check_box label="すぐ適用" name="apply_immediate"/> <button label="" label_selected="" name="color_pipette"/> <button label="取り消し" label_selected="取り消し" name="cancel_btn"/> <button label="OK" label_selected="OK" name="select_btn"/> diff --git a/indra/newview/skins/default/xui/ja/floater_critical.xml b/indra/newview/skins/default/xui/ja/floater_critical.xml index 39f6ee8e3f..f69c24622a 100644 --- a/indra/newview/skins/default/xui/ja/floater_critical.xml +++ b/indra/newview/skins/default/xui/ja/floater_critical.xml @@ -3,10 +3,10 @@ <button label="続行" label_selected="続行" name="Continue" /> <button label="取り消し" label_selected="取り消し" name="Cancel" /> <text name="tos_title"> - クリティカル・メッセージ + クリティカルメッセージ </text> <text name="tos_heading"> - 次のメッセージを注意深くお読みください。 + 次のメッセージを注意してよくお読みください。 </text> <text_editor name="tos_text"> TOS_TEXT diff --git a/indra/newview/skins/default/xui/ja/floater_customize.xml b/indra/newview/skins/default/xui/ja/floater_customize.xml index 7d1809f1ed..27ce1adede 100644 --- a/indra/newview/skins/default/xui/ja/floater_customize.xml +++ b/indra/newview/skins/default/xui/ja/floater_customize.xml @@ -50,7 +50,7 @@ <panel label="スキン" name="Skin"> <button label="スキンの色" label_selected="スキンの色" name="Skin Color"/> <button label="顔の細部" label_selected="顔の細部" name="Face Detail"/> - <button label="メイクアップ" label_selected="メイクアップ" name="Makeup"/> + <button label="メイク" label_selected="メイク" name="Makeup"/> <button label="身体細部" label_selected="身体細部" name="Body Detail"/> <text name="title"> [DESC] @@ -186,10 +186,10 @@ シャツ: </text> </panel> - <panel label="ズボン" name="Pants"> + <panel label="パンツ" name="Pants"> <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/> <color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/> - <button label="新しいズボンを作成" label_selected="新しいズボンを作成" name="Create New"/> + <button label="新しいパンツを作成" label_selected="新しいパンツを作成" name="Create New"/> <button label="取り外す" label_selected="取り外す" name="Take Off"/> <button label="保存" label_selected="保存" name="Save"/> <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> @@ -216,7 +216,7 @@ あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> - ズボン: + パンツ: </text> </panel> <panel label="靴" name="Shoes"> diff --git a/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml index 2d8b54cdd5..3bd5ed2837 100644 --- a/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml @@ -84,10 +84,10 @@ <text name="DayCycleText3"> プレビュー: </text> - <button label="再生" label_selected="再生" name="WLAnimSky" /> + <button label="再生" label_selected="再生" name="WLAnimSky" left_delta="70"/> <button label="停止!" label_selected="停止" name="WLStopAnimSky" /> <button label="不動産の時刻を使用" - label_selected="不動産の時刻に変更" name="WLUseLindenTime" /> + label_selected="不動産の時刻に変更" name="WLUseLindenTime" width="140"/> <button label="デイ・テストを保存" label_selected="デイ・テストを保存" name="WLSaveDayCycle" /> <button label="デイ・テストをロード" diff --git a/indra/newview/skins/default/xui/ja/floater_god_tools.xml b/indra/newview/skins/default/xui/ja/floater_god_tools.xml index 18380bddc2..075cde8dec 100644 --- a/indra/newview/skins/default/xui/ja/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/ja/floater_god_tools.xml @@ -2,7 +2,7 @@ <floater name="godtools floater" title="ゴッド・ツール"> <tab_container name="GodTools Tabs"> <panel label="グリッド" name="grid"> - <button label="すべてのユーザーを追い出す" label_selected="すべてのユーザーを追い出す" name="Kick all users"/> + <button label="すべてのユーザーを追い出す" label_selected="すべてのユーザーを追い出す" name="Kick all users" width="160"/> <button label="この地域の地図の表示キャッシュを消去" label_selected="この地域の地図の表示キャッシュを消去" name="Flush This Region's Map Visibility Caches"/> </panel> <panel label="地域" name="region"> @@ -33,13 +33,15 @@ <line_editor name="gridposx" tool_tip="これは、この地域のグリッドxの位置です。"/> <line_editor name="gridposy" tool_tip="これは、この地域のグリッドyの位置です。"/> <text name="Redirect to Grid: "> - グリッドにリダイレクト: + グリッドにリダ +イレクト: </text> <text name="billable factor text"> 請求率: </text> <text name="land cost text"> - 平方メートル当たりL$: + 平方メートル当 +たりL$: </text> <button label="更新" label_selected="更新" name="Refresh" tool_tip="上記の情報を更新するには、ここをクリックします。"/> <button label="適用" label_selected="適用" name="Apply" tool_tip="上記の変更を適用するには、ここをクリックします。"/> diff --git a/indra/newview/skins/default/xui/ja/floater_image_preview.xml b/indra/newview/skins/default/xui/ja/floater_image_preview.xml index 57ed139e54..2e57acf0d2 100644 --- a/indra/newview/skins/default/xui/ja/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/ja/floater_image_preview.xml @@ -7,7 +7,7 @@ 説明: </text> <text name="preview_label"> - イメージのプレビュー: + プレビュー: </text> <combo_box label="服の種類" name="clothing_type_combo"> <combo_box.item label="画像" name="Image"/> @@ -26,7 +26,7 @@ 24bitTarga(.tga)でイメージを保存してください。 </text> - <check_box label="ロスのない圧縮を使用" name="lossless_check"/> + <check_box label="可逆圧縮" name="lossless_check"/> <button label="取り消し" name="cancel_btn"/> - <button label="アップロードL$[AMOUNT]" name="ok_btn"/> + <button label="アップロード゙L$[AMOUNT]" name="ok_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_inspect.xml b/indra/newview/skins/default/xui/ja/floater_inspect.xml index b7c657c2f9..b3825c0b7f 100644 --- a/indra/newview/skins/default/xui/ja/floater_inspect.xml +++ b/indra/newview/skins/default/xui/ja/floater_inspect.xml @@ -3,12 +3,12 @@ <floater.string name="timeStamp"> [year,datetime,local] [mth,datetime,local] [day,datetime,local] [wkday,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] </floater.string> - <scroll_list name="object_list" tool_tip="このリストからオブジェクトを選択し、この世界で強調表示します。"> - <scroll_list.columns label="オブジェクト名" name="object_name"/> + <scroll_list name="object_list" tool_tip="リストからオブジェクトを選択し、インワールドで強調表示します。"> + <scroll_list.columns label="名前" name="object_name"/> <scroll_list.columns label="所有者名" name="owner_name"/> <scroll_list.columns label="制作者名" name="creator_name"/> <scroll_list.columns label="作成日" name="creation_date"/> </scroll_list> - <button label="所有者のプロフィールを表示..." name="button owner" tool_tip="選択されたオブジェクトの所有者のプロフィールを見る"/> - <button label="制作者のプロフィールを表示..." name="button creator" tool_tip="選択されたオブジェクトの制作者のプロフィールを見る"/> + <button label="所有者のプロフィールを表示..." name="button owner" tool_tip="選択したオブジェクトの所有者のプロフィールを表示します" width="180"/> + <button label="制作者のプロフィールを表示..." name="button creator" tool_tip="選択したオブジェクトの制作者のプロフィールを表示します" width="180"/> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_inventory.xml b/indra/newview/skins/default/xui/ja/floater_inventory.xml index 7cf16b8ff2..b113fde94a 100644 --- a/indra/newview/skins/default/xui/ja/floater_inventory.xml +++ b/indra/newview/skins/default/xui/ja/floater_inventory.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Inventory" title="持ち物"> <floater.string name="Title"> - インベントリ + 持ち物 </floater.string> <floater.string name="TitleFetching"> 持ち物 ( [ITEM_COUNT] アイテムを取得中...) [FILTER] diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml index 86bb5dcf62..47a63e5e20 100644 --- a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml @@ -9,7 +9,7 @@ <check_box label="オブジェクト" name="check_object"/> <check_box label="スクリプト" name="check_script"/> <check_box label="サウンド" name="check_sound"/> - <check_box label="テクスチャー" name="check_texture"/> + <check_box label="テクスチャ" name="check_texture"/> <check_box label="スナップショット" name="check_snapshot"/> <button label="すべて" label_selected="すべて" name="All"/> <button label="なし" label_selected="なし" name="None"/> diff --git a/indra/newview/skins/default/xui/ja/floater_joystick.xml b/indra/newview/skins/default/xui/ja/floater_joystick.xml index 9d91fe8db9..65eeebe4ed 100644 --- a/indra/newview/skins/default/xui/ja/floater_joystick.xml +++ b/indra/newview/skins/default/xui/ja/floater_joystick.xml @@ -71,7 +71,7 @@ <spinner left="135" name="AvatarAxisDeadZone0" width="50"/> <spinner left="205" name="BuildAxisDeadZone0" width="50"/> <spinner left="275" name="FlycamAxisDeadZone0" width="50"/> - <text left="0" name="PitchDeadZone" width="135"> + <text left="0" name="PitchDeadZone" width="125"> ピッチ・デッド・ゾーン </text> <spinner left="135" name="AvatarAxisDeadZone4" width="50"/> @@ -83,7 +83,7 @@ <spinner left="135" name="AvatarAxisDeadZone5" width="50"/> <spinner left="205" name="BuildAxisDeadZone5" width="50"/> <spinner left="275" name="FlycamAxisDeadZone5" width="50"/> - <text left="0" name="RollDeadZone" width="135"> + <text left="0" name="RollDeadZone" width="125"> ロール・デッド・ゾーン </text> <spinner left="205" name="BuildAxisDeadZone3" width="50"/> diff --git a/indra/newview/skins/default/xui/ja/floater_land_holdings.xml b/indra/newview/skins/default/xui/ja/floater_land_holdings.xml index 474bd32cb0..aca916f22f 100644 --- a/indra/newview/skins/default/xui/ja/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/ja/floater_land_holdings.xml @@ -7,17 +7,17 @@ <column label="面積" name="area"/> <column label="" name="hidden"/> </scroll_list> - <button label="テレポート" label_selected="テレポート" name="Teleport" tool_tip="この土地の中心にテレポート"/> + <button label="テレポート" label_selected="テレポート" name="Teleport" tool_tip="この土地の中心にテレポートします"/> <button label="地図" label_selected="地図" name="Show on Map" tool_tip="この土地を世界地図に表示します"/> <text name="contrib_label"> - あなたのグループへの貢献: + 所属グループへの貢献: </text> <scroll_list name="grant list"> <column label="グループ名" name="group"/> <column label="面積" name="area"/> </scroll_list> <text name="allowed_label"> - 現在の支払いプランでの許可された保有地: + 現在の支払いプランで許可された保有地: </text> <text name="allowed_text"> [AREA] 平方メートル @@ -29,7 +29,7 @@ [AREA] 平方メートル </text> <text name="available_label"> - 土地購入可: + 購入可能な土地: </text> <text name="available_text"> [AREA] 平方メートル diff --git a/indra/newview/skins/default/xui/ja/floater_map.xml b/indra/newview/skins/default/xui/ja/floater_map.xml index f3cba7e674..78af3cec07 100644 --- a/indra/newview/skins/default/xui/ja/floater_map.xml +++ b/indra/newview/skins/default/xui/ja/floater_map.xml @@ -25,7 +25,7 @@ 北西 </floater.string> <floater.string name="ToolTipMsg"> - [AGENT][REGION] (ダブルクリックで地図を開く) + [AGENT][REGION] (ダブルクリックで地図を開きます) </floater.string> <text label="北" name="floater_map_north" text="北"> 北 diff --git a/indra/newview/skins/default/xui/ja/floater_media_browser.xml b/indra/newview/skins/default/xui/ja/floater_media_browser.xml index 4f67523eec..c4731b73a3 100644 --- a/indra/newview/skins/default/xui/ja/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/ja/floater_media_browser.xml @@ -22,8 +22,8 @@ <button label="現在のページを区画に送る" name="assign"/> </layout_panel> <layout_panel name="external_controls"> - <button label="外部ウェブ・ブラウザで開く" name="open_browser"/> - <check_box label="常に外部のウェブ・ブラウザで開く" name="open_always"/> + <button label="外部Webブラウザで開く" name="open_browser"/> + <check_box label="常に外部のWebブラウザで開く" name="open_always"/> <button label="閉じる" name="close"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml b/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml index 6167b6db91..f48bb94e32 100644 --- a/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="MemLeak" title="メモリリークのシミュレート"> - <spinner label="リークスピード(1フレームごとのバイト数):" label_width="244" name="leak_speed"/> - <spinner label="リークした最大メモリ数(MB):" label_width="244" name="max_leak"/> + <spinner label="リーク速度(1フレームごとのバイト数):" label_width="244" name="leak_speed"/> + <spinner label="最大メモリリーク(MB):" label_width="244" name="max_leak"/> <text name="total_leaked_label"> - 現在のリークメモリサイズ: [SIZE] KB + 現在のメモリリーク: [SIZE] KB </text> <text name="note_label_1"> [NOTE1] diff --git a/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml b/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml index adbb8596d3..98cda25a81 100644 --- a/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml @@ -5,11 +5,11 @@ <check_box label="グループで共同管理" name="share_with_group"/> <check_box label="誰に対してもコピーを許可" name="everyone_copy"/> <text name="NextOwnerLabel"> - 次のオーナーができる操作: + 次の所有者ができる操作: </text> <check_box label="修正" name="next_owner_modify"/> <check_box label="コピー" name="next_owner_copy"/> - <check_box label="再販/プレゼント" name="next_owner_transfer"/> + <check_box label="再販・プレゼント" name="next_owner_transfer"/> </panel> <button label="OK" label_selected="OK" name="ok"/> <button label="取り消し" label_selected="取り消し" name="cancel"/> diff --git a/indra/newview/skins/default/xui/ja/floater_postcard.xml b/indra/newview/skins/default/xui/ja/floater_postcard.xml index b2ca059ccd..5a2b047fe0 100644 --- a/indra/newview/skins/default/xui/ja/floater_postcard.xml +++ b/indra/newview/skins/default/xui/ja/floater_postcard.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Postcard" title="スナップショットをメール"> <text name="to_label"> - 住人のEメール: + 住人のメール: </text> <line_editor left="145" name="to_form" width="125"/> <text name="from_label"> - あなたのEメール: + あなたのメール: </text> <line_editor left="145" name="from_form" width="125"/> <text name="name_label"> @@ -15,14 +15,14 @@ <text name="subject_label"> 件名: </text> - <line_editor label="件名をここに入力" left="145" name="subject_form" width="125"/> + <line_editor label="件名を入力してください" left="145" name="subject_form" width="125"/> <text name="msg_label"> メッセージ: </text> <text_editor bottom_delta="-120" height="110" name="msg_form"> メッセージをここに入力してください。 </text_editor> - <check_box label="ウェブ上で公開" name="allow_publish_check" tool_tip="このポストカードをウェブ上で公開します。"/> + <check_box label="Web上で公開" name="allow_publish_check" tool_tip="このポストカードをWeb上で公開します。"/> <check_box label="成人向けコンテンツ" name="mature_check" tool_tip="このポストカードには成人向け内容が含まれます。"/> <button label="?" left="300" name="publish_help_btn"/> <text name="fine_print"> diff --git a/indra/newview/skins/default/xui/ja/floater_preferences.xml b/indra/newview/skins/default/xui/ja/floater_preferences.xml index 1493219b83..e2893d5eab 100644 --- a/indra/newview/skins/default/xui/ja/floater_preferences.xml +++ b/indra/newview/skins/default/xui/ja/floater_preferences.xml @@ -8,7 +8,7 @@ <panel label="プライバシー" name="im"/> <panel label="サウンド" name="audio"/> <panel label="チャット" name="chat"/> - <panel label="通知" name="msgs"/> + <panel label="メッセージ" name="msgs"/> <panel label="セットアップ" name="input"/> <panel label="詳細" name="advanced1"/> </tab_container> diff --git a/indra/newview/skins/default/xui/ja/floater_preview_animation.xml b/indra/newview/skins/default/xui/ja/floater_preview_animation.xml index fb2f2c7433..2c0d6a0097 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_animation.xml @@ -6,6 +6,6 @@ <text name="desc txt"> 説明: </text> - <button label="世界で再生" label_selected="停止" name="Anim play btn" tool_tip="他人に見えるように再生"/> - <button label="ローカルに再生" label_selected="停止" name="Anim audition btn" tool_tip="自分だけが見えるように再生"/> + <button label="ワールド再生" label_selected="停止" name="Anim play btn" tool_tip="他人にも見えるように再生します"/> + <button label="ローカル再生" label_selected="停止" name="Anim audition btn" tool_tip="自分だけが見えるように再生します"/> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml index a378700d15..8a0aea717c 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml @@ -38,7 +38,7 @@ </text> <line_editor name="replace_editor" tool_tip="トリガー・ワードをこれらの単語に置き換えます。 たとえば、トリガー「hello」を「Howdy」に置換すると、「I wanted to say hello」というチャット文が「I wanted to say howdy」に変わり、ジェスチャーにも置換が反映されます。"/> <text name="key_label"> - ショートカット・キー: + ショートカット: </text> <combo_box label="なし" left="160" name="modifier_combo"/> <combo_box label="なし" name="key_combo"/> diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml index 596699d6c1..e96a43d0c1 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml @@ -6,8 +6,8 @@ <text name="key_label"> キーボード: </text> - <combo_box label="なし" name="modifier_combo"/> - <combo_box label="なし" name="key_combo"/> + <combo_box label="なし" name="modifier_combo" width="60"/> + <combo_box label="なし" name="key_combo" width="60"/> <text name="replace_text" tool_tip="これらの単語にトリガーとなる単語を置き換えます。 例えば、「howdy」と「hello」を置き換えると、「I wanted to say hello」というチャットは、ジェスチャーを交えながらの「I wanted to say howdy」に変わります。"> 置き換え: </text> diff --git a/indra/newview/skins/default/xui/ja/floater_preview_sound.xml b/indra/newview/skins/default/xui/ja/floater_preview_sound.xml index d3c06cbef4..dc334dfc1f 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_sound.xml @@ -6,6 +6,6 @@ <text name="desc txt"> 説明: </text> - <button label="世界で再生" label_selected="世界で再生" name="Sound play btn" tool_tip="他人が聞こえるように再生"/> - <button label="ローカルに再生" label_selected="ローカルに再生" name="Sound audition btn" tool_tip="自分だけが聞こえるように再生"/> + <button label="ワールド再生" label_selected="ワールド再生" name="Sound play btn" tool_tip="他人にも聞こえるように再生します"/> + <button label="ローカル再生" label_selected="ローカル再生" name="Sound audition btn" tool_tip="自分だけが聞こえるように再生します"/> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml index ca6faf59c2..c66f307f23 100644 --- a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml @@ -25,7 +25,7 @@ <text name="select_object_label"> ボタンをクリックしてから、悪意のあるオブジェクトをクリック: </text> - <button label="" label_selected="" name="pick_btn" tool_tip="オブジェクト・ピッカー - この報告の主題となるオブジェクトを特定"/> + <button label="" label_selected="" name="pick_btn" tool_tip="オブジェクトピッカー - 報告対象のオブジェクトを選択してください"/> <text name="object_name_label"> オブジェクト: </text> @@ -33,13 +33,13 @@ Consetetur Sadipscing </text> <text name="owner_name_label"> - オーナー: + 所有者: </text> <text name="owner_name"> Hendrerit Vulputate Kamawashi Longname </text> - <combo_box name="category_combo" tool_tip="カテゴリー -- この報告に最も適したカテゴリーを選択してください"> - <combo_box.item label="カテゴリーを選択" name="Select_category"/> + <combo_box name="category_combo" tool_tip="カテゴリ -- この報告に最も適したカテゴリを選択してください"> + <combo_box.item label="カテゴリを選択してください" name="Select_category"/> <combo_box.item label="年齢>年齢偽証" name="Age__Age_play"/> <combo_box.item label="年齢 > 成人の住人が Teen Second Life にいる" name="Age__Adult_resident_on_Teen_Second_Life"/> <combo_box.item label="年齢 > 未成年の住人がTeen Second Life の外にいる" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> @@ -92,7 +92,7 @@ <text name="dscr_title"> 詳細: </text> - <text name="bug_aviso"> + <text name="bug_aviso" width="210"> できるだけ具体的に詳しく記入してください。 </text> <text name="incomplete_title"> diff --git a/indra/newview/skins/default/xui/ja/floater_sell_land.xml b/indra/newview/skins/default/xui/ja/floater_sell_land.xml index b06b16bbb3..1e884af5f2 100644 --- a/indra/newview/skins/default/xui/ja/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/ja/floater_sell_land.xml @@ -36,7 +36,7 @@ 2. 特定の人に販売: </text> <text name="sell_to_text" right="-6"> - 販売先の指定なしか、特定の人に販売するか選択してください。 + 販売先の指定なしか、特定の人に販売するかを選択してください。 </text> <combo_box name="sell_to"> <combo_box.item label="- 1つ選択 -" name="--selectone--"/> diff --git a/indra/newview/skins/default/xui/ja/floater_snapshot.xml b/indra/newview/skins/default/xui/ja/floater_snapshot.xml index 6c84de9b19..4ad54ec7ab 100644 --- a/indra/newview/skins/default/xui/ja/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/ja/floater_snapshot.xml @@ -28,21 +28,21 @@ 形式 </text> <combo_box label="解像度" name="postcard_size_combo"> - <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> + <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> <combo_box.item label="640x480" name="640x480"/> <combo_box.item label="800x600" name="800x600"/> <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="カスタム" name="Custom"/> </combo_box> <combo_box label="解像度" name="texture_size_combo"> - <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> + <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> <combo_box.item label="小(128x128)" name="Small(128x128)"/> <combo_box.item label="中(256x256)" name="Medium(256x256)"/> <combo_box.item label="大(512x512)" name="Large(512x512)"/> <combo_box.item label="カスタム" name="Custom"/> </combo_box> <combo_box label="解像度" name="local_size_combo"> - <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> + <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> <combo_box.item label="320x240" name="320x240"/> <combo_box.item label="640x480" name="640x480"/> <combo_box.item label="800x600" name="800x600"/> @@ -61,7 +61,7 @@ <check_box label="縦横比の固定" name="keep_aspect_check"/> <slider label="画質" name="image_quality_slider"/> <text name="layer_type_label"> - キャプチャ: + キャプチャ: </text> <combo_box label="画像レイヤー" name="layer_types"> <combo_box.item label="色" name="Colors"/> diff --git a/indra/newview/skins/default/xui/ja/floater_sound_preview.xml b/indra/newview/skins/default/xui/ja/floater_sound_preview.xml index a24ba6e075..7d83309c46 100644 --- a/indra/newview/skins/default/xui/ja/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/ja/floater_sound_preview.xml @@ -9,7 +9,7 @@ <button label="取り消し" label_selected="取り消し" name="cancel_btn"/> <button label="アップロード (L$[AMOUNT])" label_selected="アップロード (L$[AMOUNT])" name="ok_btn"/> <text name="text"> - ビットレート(kbps): + ビットレート(kbps): </text> <radio_group name="bitrate"> <radio_item label="32" name="32"/> diff --git a/indra/newview/skins/default/xui/ja/floater_telehub.xml b/indra/newview/skins/default/xui/ja/floater_telehub.xml index bdb92c8e30..7318083771 100644 --- a/indra/newview/skins/default/xui/ja/floater_telehub.xml +++ b/indra/newview/skins/default/xui/ja/floater_telehub.xml @@ -10,7 +10,7 @@ 「切断」をクリックして削除します。 </text> <text name="help_text_not_connected"> - 物体を選択し「テレハブの接続」をクリックする + 物体を選択して「テレハブの接続」をクリックしてください。 </text> <button label="テレハブの接続" name="connect_btn"/> <button label="切断" name="disconnect_btn"/> @@ -20,9 +20,6 @@ <button label="出現位置を追加" name="add_spawn_point_btn"/> <button label="出現地点を削除" name="remove_spawn_point_btn"/> <text name="spawn_point_help"> - オブジェクトを選び、「出現地点を追加」をクリックして位置を指定します。 -そうするとそのオブジェクトを移動させたり削除できます。 -位置はテレハブセンターに関連します。 -リストのアイテムを選択してインワールドでハイライトさせます。 + オブジェクトを選び、「出現地点を追加」をクリックして位置を指定します。そうするとそのオブジェクトを移動させたり削除できます。位置はテレハブセンターに関連します。リストのアイテムを選択してインワールドでハイライトさせます。 </text> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml index 1500808e60..399cffcce5 100644 --- a/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="texture picker" title="選択: テクスチャ"> +<floater name="texture picker" title="テクスチャの選択"> <string name="choose_picture"> クリックして写真を選択 </string> @@ -9,12 +9,12 @@ <text name="unknown"> サイズ: [DIMENSIONS] </text> - <button label="デフォルト" label_selected="デフォルト" name="Default"/> + <button label="デフォルト" label_selected="デフォルト" name="Default"/> <button label="なし" label_selected="なし" name="None"/> <button label="ブランク" label_selected="ブランク" name="Blank"/> <check_box label="フォルダを表示" name="show_folders_check"/> <search_editor label="テクスチャをフィルター" name="inventory search editor"/> - <check_box label="今すぐ適用" name="apply_immediate_check"/> + <check_box label="すぐ適用" name="apply_immediate_check"/> <button label="" label_selected="" name="Pipette"/> <button label="取り消し" label_selected="取り消し" name="Cancel"/> <button label="OK" label_selected="OK" name="Select"/> diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml index 52d3537d9a..456e30c2b4 100644 --- a/indra/newview/skins/default/xui/ja/floater_tools.xml +++ b/indra/newview/skins/default/xui/ja/floater_tools.xml @@ -171,7 +171,7 @@ Esbee Linden </text> <text name="Owner:"> - オーナー: + 所有者: </text> <text name="Owner Name"> Erica Linden @@ -197,7 +197,7 @@ <check_box label="販売対象:" name="checkbox for sale"/> <combo_box name="sale type"> <combo_box.item label="コピー" name="Copy"/> - <combo_box.item label="コンテンツ" name="Contents"/> + <combo_box.item label="中身" name="Contents"/> <combo_box.item label="オリジナル" name="Original"/> </combo_box> <spinner label="価格: L$" name="Edit Cost"/> @@ -239,9 +239,9 @@ </panel> <panel label="形状" name="Object"> <check_box label="ロック済み" name="checkbox locked" tool_tip="オブジェクトの移動と削除を禁止します。 この機能を使うと、構築中に意図しない編集を防ぐことができます。"/> - <check_box label="物理" name="Physical Checkbox Ctrl" tool_tip="オブジェクトに対する重力の作用と影響を有効にする"/> + <check_box label="物理" name="Physical Checkbox Ctrl" tool_tip="オブジェクトに対する重力の作用と影響を有効にします"/> <check_box label="臨時" name="Temporary Checkbox Ctrl" tool_tip="制作後 1 分でオブジェクトは削除されます"/> - <check_box label="ファントム" name="Phantom Checkbox Ctrl" tool_tip="オブジェクト同士の衝突またはオブジェクトとアバターの衝突を回避"/> + <check_box label="ファントム" name="Phantom Checkbox Ctrl" tool_tip="オブジェクト同士の衝突またはオブジェクトとアバターの衝突を回避します"/> <text name="label position"> 位置(メートル) </text> @@ -280,7 +280,7 @@ <combo_box.item label="ゴム" name="Rubber"/> </combo_box> <text name="text cut"> - パスカット (始点/終点) + パスカット (始点・終点) </text> <spinner label="B" name="cut begin"/> <spinner label="E" name="cut end"/> @@ -300,7 +300,7 @@ <combo_box.item label="三角形" name="Triangle"/> </combo_box> <text name="text twist"> - ひねり (始点/終点) + ひねり (始点・終点) </text> <spinner label="B" name="Twist Begin"/> <spinner label="E" name="Twist End"/> @@ -318,13 +318,13 @@ <spinner label="X" name="Shear X"/> <spinner label="Y" name="Shear Y"/> <text name="advanced_cut"> - プロフィールカット (始点/終点) + プロフィールカット (始点・終点) </text> <text name="advanced_dimple"> - くぼみ (始点/終点) + くぼみ (始点・終点) </text> <text name="advanced_slice"> - 切り取り (始点/終点) + 切り取り (始点・終点) </text> <spinner label="B" name="Path Limit Begin"/> <spinner label="E" name="Path Limit End"/> @@ -340,8 +340,8 @@ 回転体 </text> <texture_picker label="スカルプトテクスチャー" name="sculpt texture control" tool_tip="クリックして写真を選択してください。"/> - <check_box label="ミラー" name="sculpt mirror control" tool_tip="スカルプトプリムを X 軸上で反転させる"/> - <check_box label="裏返し" name="sculpt invert control" tool_tip="スカルプトプリムを反転させて裏返す"/> + <check_box label="ミラー" name="sculpt mirror control" tool_tip="スカルプトプリムを X 軸上で反転させます"/> + <check_box label="裏返し" name="sculpt invert control" tool_tip="スカルプトプリムを反転させて裏返します"/> <text name="label sculpt type"> 縫い目のタイプ </text> @@ -360,7 +360,7 @@ <text name="edit_object"> オブジェクトの特徴を編集: </text> - <check_box label="フレキシブル・パス" name="Flexible1D Checkbox Ctrl" tool_tip="Z 軸を中心にオブジェクトの屈曲を有効にする(クライアント側のみ)"/> + <check_box label="フレキシブル・パス" name="Flexible1D Checkbox Ctrl" tool_tip="Z 軸を中心にオブジェクトの屈曲を有効にします(クライアント側のみ)"/> <spinner label="柔軟性" label_width="72" name="FlexNumSections" width="135"/> <spinner label="重力" label_width="72" name="FlexGravity" width="135"/> <spinner label="ドラッグ" label_width="72" name="FlexFriction" width="135"/> @@ -369,9 +369,9 @@ <spinner label="X軸方向の力" label_width="72" name="FlexForceX" width="135"/> <spinner label="Y軸方向の力" label_width="72" name="FlexForceY" width="135"/> <spinner label="Z軸方向の力" label_width="72" name="FlexForceZ" width="135"/> - <check_box label="光" name="Light Checkbox Ctrl" tool_tip="オブジェクトが発光"/> + <check_box label="光" name="Light Checkbox Ctrl" tool_tip="オブジェクトが発光します"/> <color_swatch label="" left_delta="74" name="colorswatch" tool_tip="クリックしてカラーピッカーを開きます"/> - <texture_picker label="" name="light texture control" tool_tip="クリックで投影画を選択(遅延レンダリング有効時のみ)"/> + <texture_picker label="" name="light texture control" tool_tip="クリックで投影画を選択します(遅延レンダリング有効時のみ)"/> <spinner label="輝度" label_width="72" name="Light Intensity" width="135"/> <spinner label="FOV" name="Light FOV"/> <spinner label="半径" label_width="72" name="Light Radius" width="135"/> @@ -381,7 +381,7 @@ </panel> <panel label="材質" name="Texture"> <panel.string name="string repeats per meter"> - メートルごとに繰返す + メートルごとに繰り返す </panel.string> <panel.string name="string repeats per face"> 面ごとに繰り返す @@ -453,10 +453,10 @@ <text name="media_tex"> メディア </text> - <button name="add_media" tool_tip="メディアを追加"/> - <button name="delete_media" tool_tip="このメディアテクスチャを削除"/> - <button name="edit_media" tool_tip="このメディアを編集"/> - <button label="揃える" label_selected="メディアを一列に揃える" name="button align" tool_tip="メディアテクスチャを一列に揃える(最初に読み込む必要があります)"/> + <button name="add_media" tool_tip="メディアを追加します"/> + <button name="delete_media" tool_tip="このメディアテクスチャを削除します"/> + <button name="edit_media" tool_tip="このメディアを編集します"/> + <button label="揃える" label_selected="メディアを一列に揃える" name="button align" tool_tip="メディアテクスチャを一列に揃えます(最初に読み込む必要があります)"/> </panel> </panel> <panel label="中身" name="Contents"> @@ -475,7 +475,7 @@ 面積: [AREA] 平方メートル </text> <button label="土地情報" label_selected="土地情報" name="button about land"/> - <check_box label="オーナーを表示" name="checkbox show owners" tool_tip="所有者の種類別に区画を色づけ: 緑 = あなたの土地 アクア = あなたのグループ所有地 赤 = 他人が所有する土地 黄色 = 売り出し中 紫 = オークション グレー = パブリック"/> + <check_box label="所有者を表示" name="checkbox show owners" tool_tip="所有者の種類別に区画を色づけます: 緑 = あなたの土地 アクア = あなたのグループ所有地 赤 = 他人が所有する土地 黄色 = 売り出し中 紫 = オークション グレー = パブリック"/> <text name="label_parcel_modify"> 区画の編集 </text> diff --git a/indra/newview/skins/default/xui/ja/floater_url_entry.xml b/indra/newview/skins/default/xui/ja/floater_url_entry.xml index 9d3ca20c7c..8e09e4748a 100644 --- a/indra/newview/skins/default/xui/ja/floater_url_entry.xml +++ b/indra/newview/skins/default/xui/ja/floater_url_entry.xml @@ -3,11 +3,11 @@ <text name="media_label"> メディア URL: </text> - <combo_box left="100" name="media_entry" width="360" /> - <button label="OK" name="ok_btn" width="78"/> + <combo_box name="media_entry"/> + <button label="OK" name="ok_btn" width="38"/> <button label="キャンセル" name="cancel_btn" width="80"/> - <button label="クリア" name="clear_btn" /> - <text name="loading_label"> + <button label="クリア" name="clear_btn" left_pad="76"/> + <text name="loading_label" left="140"> ロード中... </text> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_window_size.xml b/indra/newview/skins/default/xui/ja/floater_window_size.xml index a31336c0f8..152a5f4806 100644 --- a/indra/newview/skins/default/xui/ja/floater_window_size.xml +++ b/indra/newview/skins/default/xui/ja/floater_window_size.xml @@ -4,7 +4,7 @@ [RES_X] x [RES_Y] </string> <text name="windowsize_text"> - ウィンドウのサイズの設定: + ウィンドウのサイズを設定: </text> <combo_box name="window_size_combo" tool_tip="横幅 x 高さ"> <combo_box.item label="1000 x 700 (標準)" name="item0"/> diff --git a/indra/newview/skins/default/xui/ja/floater_world_map.xml b/indra/newview/skins/default/xui/ja/floater_world_map.xml index a0f2d98adf..af9c05de91 100644 --- a/indra/newview/skins/default/xui/ja/floater_world_map.xml +++ b/indra/newview/skins/default/xui/ja/floater_world_map.xml @@ -2,13 +2,13 @@ <floater name="worldmap" title="世界地図"> <panel name="layout_panel_1"> <text name="events_label"> - レジェンド + 表記・記号 </text> </panel> <panel> - <button label="現在地を表示" label_selected="現在地を表示" name="Show My Location" tool_tip="マップを中央に表示する"/> + <button label="現在地を表示" label_selected="現在地を表示" name="Show My Location" tool_tip="アバターの位置を地図の中心に表示します"/> <text name="me_label"> - ミー + 自分 </text> <check_box label="住人" name="people_chk"/> <text name="person_label"> @@ -23,12 +23,12 @@ 土地販売 </text> <text name="by_owner_label"> - by owner + 所有者の販売 </text> <text name="auction_label"> 土地オークション </text> - <button label="ホームへ" label_selected="ホームへ" name="Go Home" tool_tip="「ホーム」にテレポート"/> + <button label="ホームへ" label_selected="ホームへ" name="Go Home" tool_tip="「ホーム」にテレポートします"/> <text name="Home_label"> ホーム </text> @@ -50,14 +50,14 @@ </panel> <panel> <text name="find_on_map_label"> - 地図で探す + 地図上で探す </text> </panel> <panel> - <combo_box label="オンラインのフレンド" name="friend combo" tool_tip="フレンドを地図に表示"> + <combo_box label="オンラインのフレンド" name="friend combo" tool_tip="フレンドを地図上に表示します"> <combo_box.item label="オンラインのフレンド" name="item1"/> </combo_box> - <combo_box label="マイ ランドマーク" name="landmark combo" tool_tip="地図に表示するランドマーク"> + <combo_box label="マイ ランドマーク" name="landmark combo" tool_tip="地図上に表示するランドマーク"> <combo_box.item label="マイ ランドマーク" name="item1"/> </combo_box> <search_editor label="リージョン名" name="location" tool_tip="地域名を入力してください。"/> @@ -66,9 +66,9 @@ <scroll_list.columns label="" name="icon"/> <scroll_list.columns label="" name="sim_name"/> </scroll_list> - <button label="テレポート" label_selected="テレポート" name="Teleport" tool_tip="選択されたロケーションにテレポート"/> - <button label="SLurl をコピー" name="copy_slurl" tool_tip="現在地を SLurl としてコピーして、Webで使用します。"/> - <button label="選択したリージョンを表示する" label_selected="目的地を表示" name="Show Destination" tool_tip="選択したロケーションを地図の中心にする"/> + <button label="テレポート" label_selected="テレポート" name="Teleport" tool_tip="選択した場所にレポートします"/> + <button label="SLurl をコピー" name="copy_slurl" tool_tip="現在地を SLurl でコピーして、Webで使用します。"/> + <button label="選択したリージョンを表示する" label_selected="目的地を表示" name="Show Destination" tool_tip="選択した場所を地図の中心に表示します"/> </panel> <panel> <text name="zoom_label"> diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml index 1bfadf8d45..9d5ce3dada 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml @@ -23,5 +23,5 @@ <menu_item_call label="容姿" name="Appearance..."/> <menu_item_call label="フレンド" name="Friends..."/> <menu_item_call label="グループ" name="Groups..."/> - <menu_item_call label="マイ プロフィール" name="Profile..."/> + <menu_item_call label="プロフィール" name="Profile..."/> </context_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml index 76c01d6109..d02701b400 100644 --- a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <menu name="Gear Menu"> <menu_item_call label="立ち上がる" name="stand_up"/> - <menu_item_call label="マイ 容姿" name="my_appearance"/> + <menu_item_call label="容姿" name="my_appearance"/> <menu_item_call label="プロフィール" name="my_profile"/> <menu_item_call label="フレンド" name="my_friends"/> <menu_item_call label="グループ" name="my_groups"/> diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml index 78c0dd0a78..3d661f96e0 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml @@ -62,13 +62,13 @@ <menu_item_call label="リンクを外す" name="Remove Link"/> <menu_item_call label="削除" name="Delete"/> <menu_item_call label="システムフォルダを削除する" name="Delete System Folder"/> - <menu_item_call label="会議チャット開始" name="Conference Chat Folder"/> + <menu_item_call label="コンファレンスチャットを開始" name="Conference Chat Folder"/> <menu_item_call label="再生" name="Sound Play"/> <menu_item_call label="ランドマークの情報" name="About Landmark"/> - <menu_item_call label="世界で再生" name="Animation Play"/> - <menu_item_call label="ローカルに再生" name="Animation Audition"/> - <menu_item_call label="インスタント・メッセージを送信" name="Send Instant Message"/> - <menu_item_call label="テレポートを贈る..." name="Offer Teleport..."/> + <menu_item_call label="ワールド再生" name="Animation Play"/> + <menu_item_call label="ローカル再生" name="Animation Audition"/> + <menu_item_call label="インスタントメッセージを送信" name="Send Instant Message"/> + <menu_item_call label="テレポートを送る..." name="Offer Teleport..."/> <menu_item_call label="会議チャット開始" name="Conference Chat"/> <menu_item_call label="アクティブ" name="Activate"/> <menu_item_call label="非アクティブ" name="Deactivate"/> diff --git a/indra/newview/skins/default/xui/ja/menu_login.xml b/indra/newview/skins/default/xui/ja/menu_login.xml index 42a95ac3d3..d6f13f0e59 100644 --- a/indra/newview/skins/default/xui/ja/menu_login.xml +++ b/indra/newview/skins/default/xui/ja/menu_login.xml @@ -24,7 +24,7 @@ <menu_item_call label="UI/色の設定" name="UI/Color Settings"/> <menu_item_call label="XUI プレビューツール" name="UI Preview Tool"/> <menu label="UI テスト" name="UI Tests"/> - <menu_item_call label="ウィンドウのサイズの設定..." name="Set Window Size..."/> + <menu_item_call label="ウィンドウのサイズを設定..." name="Set Window Size..."/> <menu_item_call label="利用規約を表示" name="TOS"/> <menu_item_call label="クリティカルメッセージを表示" name="Critical"/> <menu_item_call label="Web ブラウザのテスト" name="Web Browser Test"/> diff --git a/indra/newview/skins/default/xui/ja/menu_object.xml b/indra/newview/skins/default/xui/ja/menu_object.xml index a161c01514..d218b48c98 100644 --- a/indra/newview/skins/default/xui/ja/menu_object.xml +++ b/indra/newview/skins/default/xui/ja/menu_object.xml @@ -9,8 +9,8 @@ <menu_item_call label="ズームイン" name="Zoom In"/> <context_menu label="装着 >" name="Put On"> <menu_item_call label="装着" name="Wear"/> - <context_menu label="取り付け >" name="Object Attach"/> - <context_menu label="HUD を取り付け >" name="Object Attach HUD"/> + <context_menu label="取り付ける >" name="Object Attach"/> + <context_menu label="HUD を取り付ける >" name="Object Attach HUD"/> </context_menu> <context_menu label="削除 >" name="Remove"> <menu_item_call label="取る" name="Pie Object Take"/> diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups.xml b/indra/newview/skins/default/xui/ja/menu_people_groups.xml index 4e5dc60a3d..842d79dc4b 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_groups.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_groups.xml @@ -3,6 +3,6 @@ <menu_item_call label="情報を表示" name="View Info"/> <menu_item_call label="チャット" name="Chat"/> <menu_item_call label="コール" name="Call"/> - <menu_item_call label="有効化" name="Activate"/> + <menu_item_call label="アクティブ" name="Activate"/> <menu_item_call label="脱退" name="Leave"/> </menu> diff --git a/indra/newview/skins/default/xui/ja/menu_slurl.xml b/indra/newview/skins/default/xui/ja/menu_slurl.xml index 2e06c53494..eb24cee7e0 100644 --- a/indra/newview/skins/default/xui/ja/menu_slurl.xml +++ b/indra/newview/skins/default/xui/ja/menu_slurl.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="Popup"> <menu_item_call label="URLについて" name="about_url"/> - <menu_item_call label="URLへテレポートする" name="teleport_to_url"/> + <menu_item_call label="URLにテレポートする" name="teleport_to_url"/> <menu_item_call label="地図" name="show_on_map"/> </menu> diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index db8583ca15..c5d5914f3f 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -49,12 +49,12 @@ <menu_item_call label="日没" name="Sunset"/> <menu_item_call label="深夜" name="Midnight"/> <menu_item_call label="エステートタイム" name="Revert to Region Default"/> - <menu_item_call label="環境編集" name="Environment Editor"/> + <menu_item_call label="自然環境エディター" name="Environment Editor"/> </menu> </menu> <menu label="制作" name="BuildTools"> <menu_item_check label="制作" name="Show Build Tools"/> - <menu label="制作ツールを選択" name="Select Tool"> + <menu label="制作ツールを選択する" name="Select Tool"> <menu_item_call label="フォーカスツール" name="Focus"/> <menu_item_call label="移動ツール" name="Move"/> <menu_item_call label="編集ツール" name="Edit"/> @@ -77,9 +77,9 @@ <menu_item_call label="選択したものに焦点を合わせる" name="Focus on Selection"/> <menu_item_call label="選択したものをズームする" name="Zoom to Selection"/> <menu label="オブジェクト" name="Object"> - <menu_item_call label="買う" name="Menu Object Take"/> + <menu_item_call label="取る" name="Menu Object Take"/> <menu_item_call label="コピーを取る" name="Take Copy"/> - <menu_item_call label="「マイ 持ち物」に保存" name="Save Object Back to My Inventory"/> + <menu_item_call label="「持ち物」に保存" name="Save Object Back to My Inventory"/> <menu_item_call label="オブジェクトの中身に保存" name="Save Object Back to Object Contents"/> </menu> <menu label="スクリプト" name="Scripts"> @@ -119,8 +119,8 @@ </menu> <menu label="ヘルプ" name="Help"> <menu_item_call label="[SECOND_LIFE] ヘルプ" name="Second Life Help"/> - <menu_item_call label="嫌がらせを報告" name="Report Abuse"/> - <menu_item_call label="バグ報告" name="Report Bug"/> + <menu_item_call label="嫌がらせを報告する" name="Report Abuse"/> + <menu_item_call label="バグを報告する" name="Report Bug"/> <menu_item_call label="[APP_NAME] について" name="About Second Life"/> </menu> <menu label="アドバンス" name="Advanced"> diff --git a/indra/newview/skins/default/xui/ja/mime_types.xml b/indra/newview/skins/default/xui/ja/mime_types.xml index 2f945b2010..54663a0367 100644 --- a/indra/newview/skins/default/xui/ja/mime_types.xml +++ b/indra/newview/skins/default/xui/ja/mime_types.xml @@ -2,13 +2,13 @@ <mimetypes name="default"> <widgetset name="web"> <label name="web_label"> - ウェブ・コンテンツ + Webコンテンツ </label> <tooltip name="web_tooltip"> - ここにウェブ・コンテンツがあります。 + ここにWebコンテンツがあります。 </tooltip> <playtip name="web_playtip"> - ウェブ・コンテンツを表示 + Webコンテンツを表示 </playtip> </widgetset> <widgetset name="movie"> @@ -119,7 +119,7 @@ </mimetype> <mimetype name="application/xhtml+xml"> <label name="application/xhtml+xml_label"> - ウェブ・ページ (XHTML) + Webページ (XHTML) </label> </mimetype> <mimetype name="application/x-director"> @@ -184,7 +184,7 @@ </mimetype> <mimetype menu="1" name="text/html"> <label name="text/html_label"> - ウェブ・ページ + Webページ </label> </mimetype> <mimetype menu="1" name="text/plain"> diff --git a/indra/newview/skins/default/xui/ja/panel_bottomtray.xml b/indra/newview/skins/default/xui/ja/panel_bottomtray.xml index 414413a980..81a852522b 100644 --- a/indra/newview/skins/default/xui/ja/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/ja/panel_bottomtray.xml @@ -17,11 +17,11 @@ <button label="視界" name="camera_btn" tool_tip="カメラコントロールの表示・非表示"/> </layout_panel> <layout_panel name="snapshot_panel"> - <button label="" name="snapshots" tool_tip="スナップショットを撮る"/> + <button label="" name="snapshots" tool_tip="スナップショットを撮ります"/> </layout_panel> <layout_panel name="im_well_panel"> <chiclet_im_well name="im_well"> - <button name="Unread IM messages" tool_tip="Conversations"/> + <button name="Unread IM messages" tool_tip="会話"/> </chiclet_im_well> </layout_panel> <layout_panel name="notification_well_panel"> diff --git a/indra/newview/skins/default/xui/ja/panel_edit_alpha.xml b/indra/newview/skins/default/xui/ja/panel_edit_alpha.xml index 7825d81c53..f2e3e6e993 100644 --- a/indra/newview/skins/default/xui/ja/panel_edit_alpha.xml +++ b/indra/newview/skins/default/xui/ja/panel_edit_alpha.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_alpha_panel"> <panel name="avatar_alpha_color_panel"> - <texture_picker label="アルファ(下)" name="Lower Alpha" tool_tip="クリックして写真を選択します"/> - <texture_picker label="アルファ(上)" name="Upper Alpha" tool_tip="クリックして写真を選択します"/> - <texture_picker label="頭部のアルファ" name="Head Alpha" tool_tip="クリックして写真を選択します"/> + <texture_picker label="アルファ (下)" name="Lower Alpha" tool_tip="クリックして写真を選択します"/> + <texture_picker label="アルファ (上)" name="Upper Alpha" tool_tip="クリックして写真を選択します"/> + <texture_picker label="頭部のア ルファ" name="Head Alpha" tool_tip="クリックして写真を選択します"/> <texture_picker label="目のアルファ" name="Eye Alpha" tool_tip="クリックして写真を選択します"/> <texture_picker label="髪のアルファ" name="Hair Alpha" tool_tip="クリックして写真を選択します"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml index 2a850ab29c..d1a2b31934 100644 --- a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml @@ -45,7 +45,7 @@ <text name="my_account_link" value="[[URL] マイアカウントに移動]"/> <text name="acc_status_text" value="住人。 支払情報未登録。"/> <text name="title_partner_text" value="マイパートナー:"/> - <text name="partner_edit_link" value="[[URL] 編集]"/> + <text name="partner_edit_link" value="[[URL] 編集]" width="100"/> <panel name="partner_data_panel"> <name_box name="partner_text" value="[FIRST] [LAST]"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml index d6aec87b45..78ddae47f9 100644 --- a/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_tattoo_panel"> <panel name="avatar_tattoo_color_panel"> - <texture_picker label="頭部のタトゥー" name="Head Tattoo" tool_tip="クリックして写真を選択"/> - <texture_picker label="上部のタトゥー" name="Upper Tattoo" tool_tip="クリックして写真を選択"/> - <texture_picker label="下部のタトゥー" name="Lower Tattoo" tool_tip="クリックして写真を選択"/> + <texture_picker label="頭部のタトゥー" name="Head Tattoo" tool_tip="クリックして写真を選択" width="70"/> + <texture_picker label="上部のタトゥー" name="Upper Tattoo" tool_tip="クリックして写真を選択" width="70"/> + <texture_picker label="下部のタトゥー" name="Lower Tattoo" tool_tip="クリックして写真を選択" width="70"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_friends.xml b/indra/newview/skins/default/xui/ja/panel_friends.xml index 80a68f8258..97e58ceaed 100644 --- a/indra/newview/skins/default/xui/ja/panel_friends.xml +++ b/indra/newview/skins/default/xui/ja/panel_friends.xml @@ -4,7 +4,7 @@ 複数のフレンド </string> <scroll_list name="friend_list" tool_tip="複数のフレンドを選択するには、ShiftキーまたはCtrlキーを押しながら名前をクリックします。"> - <column name="icon_online_status" tool_tip="オンライン・ステータス"/> + <column name="icon_online_status" tool_tip="オンライン状況"/> <column label="名前" name="friend_name" tool_tip="名前"/> <column name="icon_visible_online" tool_tip="フレンドは、あなたがオンラインかどうか確認することができます。"/> <column name="icon_visible_map" tool_tip="フレンドは、地図であなたの居場所を見つけることができます。"/> @@ -15,18 +15,18 @@ <text name="friend_name_label" right="-10"> フレンドを選択して権利を変更... </text> - <check_box label="オンライン・ステータスの確認を許可する" name="online_status_cb" tool_tip="コーリングカードあるいはフレンドリストでこのフレンドがオンライン状態を確認できるよう設定"/> - <check_box label="世界地図上であなたの居場所を検索可能にする" name="map_status_cb" tool_tip="このフレンドが地図で私の位置を発見できるように設定"/> - <check_box label="オブジェクトの修正を許可する" name="modify_status_cb" tool_tip="このフレンドがオブジェクトを改造できる許可を与える"/> + <check_box label="オンライン状況の確認を許可する" name="online_status_cb" tool_tip="コーリングカードあるいはフレンドリストでこのフレンドがオンライン状況を確認できるよう設定します"/> + <check_box label="世界地図上であなたの居場所を検索可能にする" name="map_status_cb" tool_tip="このフレンドが地図で私の位置を発見できるように設定します"/> + <check_box label="オブジェクトの修正を許可する" name="modify_status_cb" tool_tip="このフレンドに私のオブジェクトを改造する許可を与えます"/> <text name="process_rights_label"> 権利変更をプロセス中... </text> </panel> <pad left="-95"/> - <button label="IM/コール" name="im_btn" tool_tip="インスタントメッセージ・セッションを開く" width="90"/> + <button label="IM・コール" name="im_btn" tool_tip="インスタントメッセージ・セッションを開きます。" width="90"/> <button label="プロフィール" name="profile_btn" tool_tip="写真、グループ、およびその他の情報を表示します。" width="90"/> - <button label="テレポート" name="offer_teleport_btn" tool_tip="このフレンドに、あなたの現在のロケーションまでのテレポートを申し出ます。" width="90"/> - <button label="支払う" name="pay_btn" tool_tip="リンデンドル (L$) をこのフレンドにあげる" width="90"/> + <button label="テレポート" name="offer_teleport_btn" tool_tip="このフレンドに、あなたの現在地へのテレポートを申し出ます。" width="90"/> + <button label="支払う" name="pay_btn" tool_tip="リンデンドル (L$) をこのフレンドにあげます。" width="90"/> <button label="削除" name="remove_btn" tool_tip="この人物をフレンドリストから外します。" width="90"/> - <button label="追加" name="add_btn" tool_tip="フレンド登録を申し出る" width="90"/> + <button label="追加" name="add_btn" tool_tip="フレンド登録を申し出ます。" width="90"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml index 1c89675c1e..f7f575206a 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml @@ -5,7 +5,7 @@ <button label="グループ情報" name="group_info_btn"/> </layout_panel> <layout_panel name="call_btn_panel"> - <button label="グループにコール" name="call_btn"/> + <button label="グループコール" name="call_btn"/> </layout_panel> <layout_panel name="end_call_btn_panel"> <button label="コール終了" name="end_call_btn"/> diff --git a/indra/newview/skins/default/xui/ja/panel_group_general.xml b/indra/newview/skins/default/xui/ja/panel_group_general.xml index 538f3800bd..247294c158 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_general.xml @@ -9,7 +9,7 @@ 一般的なグループ情報が変更されました。 </panel.string> <panel.string name="incomplete_member_data_str"> - メンバー・データを検索 + メンバーのデータを検索 </panel.string> <text_editor name="charter"> グループの理念、指針を記入してください diff --git a/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml index 0af1ce2ef2..252220b64d 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml @@ -31,7 +31,7 @@ </accordion> <panel name="button_row"> <button label="作成" label_selected="新しいグループ" name="btn_create"/> - <button label="グループチャット" name="btn_chat"/> + <button label="グループチャット" name="btn_chat" width="100"/> <button label="グループコール" name="btn_call"/> <button label="保存" label_selected="保存" name="btn_apply"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_group_invite.xml b/indra/newview/skins/default/xui/ja/panel_group_invite.xml index dc58359133..a21b340fdd 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_invite.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="メンバーを招待" name="invite_panel"> <panel.string name="confirm_invite_owner_str"> - 本当に新しい所有者を招待しますか?この操作は取り消しできません。 + 本当に新しい所有者を招待しますか?この操作は取り消しできません。 </panel.string> <panel.string name="loading"> (ローディング...) diff --git a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml index cfbc51a44e..0f014bcd2f 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml @@ -18,12 +18,12 @@ </text> <scroll_list name="group_parcel_list"> <column label="区画" name="name"/> - <column label="地域(リージョン)" name="location"/> + <column label="地域" name="location"/> <column label="種類" name="type"/> <column label="面積" name="area"/> <column label="" name="hidden"/> </scroll_list> - <button label="地図" label_selected="地図" name="map_button"/> + <button label="地図" label_selected="地図" name="map_button" width="60"/> <text name="total_contributed_land_label"> 寄付合計: </text> @@ -48,10 +48,10 @@ <string name="land_contrib_error"> 土地の貢献を設定することができません </string> - <text name="your_contribution_units"> + <text name="your_contribution_units" width="80"> 平方メートル </text> - <text name="your_contribution_max_value"> + <text name="your_contribution_max_value" width="100"> (最大 [AMOUNT]) </text> <text name="group_over_limit_text"> diff --git a/indra/newview/skins/default/xui/ja/panel_group_notices.xml b/indra/newview/skins/default/xui/ja/panel_group_notices.xml index c5168c4d7c..e33d3d854e 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_notices.xml @@ -21,8 +21,8 @@ <text name="notice_list_none_found"> 見つかりませんでした </text> - <button label="新しい通知を作成" label_selected="新しい通知を作成" name="create_new_notice" tool_tip="新しい通知を作成"/> - <button label="更新" label_selected="リスト更新" name="refresh_notices" tool_tip="通知リストを更新"/> + <button label="新しい通知を作成" label_selected="新しい通知を作成" name="create_new_notice" tool_tip="新しい通知を作成します"/> + <button label="更新" label_selected="リスト更新" name="refresh_notices" tool_tip="通知リストを更新します"/> <panel label="新しい通知を作成" name="panel_create_new_notice"> <text name="lbl"> 通知を作成 @@ -31,7 +31,7 @@ 件名: </text> <text name="lbl4"> - メッセージ: + 内容: </text> <text name="lbl5"> 添付: @@ -54,7 +54,7 @@ 件名: </text> <text name="lbl4"> - メッセージ: + 内容: </text> <button label="添付アイテムを開く" label_selected="添付物を開く" name="open_attachment"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_groups.xml b/indra/newview/skins/default/xui/ja/panel_groups.xml index 785fd868ab..de81a6431a 100644 --- a/indra/newview/skins/default/xui/ja/panel_groups.xml +++ b/indra/newview/skins/default/xui/ja/panel_groups.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="groups"> <text name="groupdesc"> - アクティブなグループ名は太字で表示されています + アクティブなグループは太字で表示されています </text> - <text name="groupcount"> - あなたは[COUNT] グループに所属しています (最大[MAX]) + <text name="groupcount" width="270"> + [COUNT] のグループに所属しています (最大[MAX]) </text> - <button label="IM/コール" name="IM" + <button label="IM・コール" name="IM" tool_tip="インスタントメッセージ・セッションを開く" /> <button label="情報" name="Info" /> <button label="アクティブ" name="Activate" /> diff --git a/indra/newview/skins/default/xui/ja/panel_landmark_info.xml b/indra/newview/skins/default/xui/ja/panel_landmark_info.xml index 9129c66a45..87477c2651 100644 --- a/indra/newview/skins/default/xui/ja/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/ja/panel_landmark_info.xml @@ -36,7 +36,7 @@ </panel> <panel name="landmark_edit_panel"> <text name="title_label" value="タイトル:"/> - <text name="notes_label" value="個人的メモ:"/> + <text name="notes_label" value="メモ:"/> <text name="folder_label" value="ランドマークの位置:"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_landmarks.xml b/indra/newview/skins/default/xui/ja/panel_landmarks.xml index 45767e8c50..151fbf33f2 100644 --- a/indra/newview/skins/default/xui/ja/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/ja/panel_landmarks.xml @@ -7,8 +7,8 @@ <accordion_tab name="tab_library" title="ライブラリ"/> </accordion> <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="その他のオプションを表示"/> - <button name="add_btn" tool_tip="新しいランドマークを追加"/> - <dnd_button name="trash_btn" tool_tip="選択したランドマークを削除"/> + <button name="options_gear_btn" tool_tip="その他のオプションを表示します"/> + <button name="add_btn" tool_tip="新しいランドマークを追加します"/> + <dnd_button name="trash_btn" tool_tip="選択したランドマークを削除します"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml index 82c52abf38..1d18a86b53 100644 --- a/indra/newview/skins/default/xui/ja/panel_login.xml +++ b/indra/newview/skins/default/xui/ja/panel_login.xml @@ -23,12 +23,12 @@ <text name="start_location_text"> 開始地点: </text> - <combo_box name="start_location_combo"> + <combo_box name="start_location_combo" width="160"> <combo_box.item label="最後にログアウトした場所" name="MyLastLocation"/> <combo_box.item label="ホーム" name="MyHome"/> <combo_box.item label="<地域名を入力>" name="Typeregionname"/> </combo_box> - <button label="ログイン" name="connect_btn"/> + <button label="ログイン" name="connect_btn" left_pad="30" width="60"/> </layout_panel> <layout_panel name="links"> <text name="create_new_account_text"> diff --git a/indra/newview/skins/default/xui/ja/panel_main_inventory.xml b/indra/newview/skins/default/xui/ja/panel_main_inventory.xml index d533ce5e0d..36c7b75f97 100644 --- a/indra/newview/skins/default/xui/ja/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/ja/panel_main_inventory.xml @@ -9,9 +9,9 @@ <inventory_panel label="最新" name="Recent Items"/> </tab_container> <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="その他のオプションを表示"/> - <button name="add_btn" tool_tip="新しいアイテムの追加"/> - <dnd_button name="trash_btn" tool_tip="選択したアイテムを削除"/> + <button name="options_gear_btn" tool_tip="その他のオプションを表示します"/> + <button name="add_btn" tool_tip="新しいアイテムを追加します"/> + <dnd_button name="trash_btn" tool_tip="選択したアイテムを削除します"/> </panel> <menu_bar name="Inventory Menu"> <menu label="ファイル" name="File"> @@ -32,7 +32,7 @@ <menu label="新規作成" name="Create"> <menu_item_call label="フォルダ" name="New Folder"/> <menu_item_call label="スクリプト" name="New Script"/> - <menu_item_call label="新しいノートカード" name="New Note"/> + <menu_item_call label="ノートカード" name="New Note"/> <menu_item_call label="ジェスチャー" name="New Gesture"/> <menu label="衣類" name="New Clothes"> <menu_item_call label="シャツ" name="New Shirt"/> @@ -40,7 +40,7 @@ <menu_item_call label="靴" name="New Shoes"/> <menu_item_call label="靴下" name="New Socks"/> <menu_item_call label="ジャケット" name="New Jacket"/> - <menu_item_call label="シャツ" name="New Skirt"/> + <menu_item_call label="スカート" name="New Skirt"/> <menu_item_call label="手袋" name="New Gloves"/> <menu_item_call label="下着(上)" name="New Undershirt"/> <menu_item_call label="下着(下)" name="New Underpants"/> diff --git a/indra/newview/skins/default/xui/ja/panel_media_settings_general.xml b/indra/newview/skins/default/xui/ja/panel_media_settings_general.xml index 74e414c381..eba26bbe3d 100644 --- a/indra/newview/skins/default/xui/ja/panel_media_settings_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_media_settings_general.xml @@ -20,7 +20,7 @@ <check_box initial_value="false" label="自動ズーム" name="auto_zoom"/> <check_box initial_value="false" label="自動メディア再生" name="auto_play"/> <text name="media_setting_note"> - 注: 住人はこの設定を無視できます + 注意: 住人はこの設定を無視できます </text> <check_box initial_value="false" label="オブジェクトの表面のメディアの自動スケール" name="auto_scale"/> <text name="size_label"> diff --git a/indra/newview/skins/default/xui/ja/panel_media_settings_security.xml b/indra/newview/skins/default/xui/ja/panel_media_settings_security.xml index 7822123a30..6accbd4852 100644 --- a/indra/newview/skins/default/xui/ja/panel_media_settings_security.xml +++ b/indra/newview/skins/default/xui/ja/panel_media_settings_security.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="セキュリティ" name="Media Settings Security"> - <check_box initial_value="false" label="指定したURLパターンにのみアクセスを許可する" name="whitelist_enable"/> + <check_box initial_value="false" label="指定したURLパターンのみアクセスを許可する" name="whitelist_enable"/> <text name="home_url_fails_some_items_in_whitelist"> ホームページに失敗したエントリーがマークされました: </text> diff --git a/indra/newview/skins/default/xui/ja/panel_my_profile.xml b/indra/newview/skins/default/xui/ja/panel_my_profile.xml index 4cce3798cf..e74a726d11 100644 --- a/indra/newview/skins/default/xui/ja/panel_my_profile.xml +++ b/indra/newview/skins/default/xui/ja/panel_my_profile.xml @@ -28,7 +28,7 @@ <icon label="" name="real_world_edit_icon" tool_tip="下の「プロフィールの編集」ボタンを押して画像を変更します"/> <text name="title_rw_descr_text" value="現実世界:"/> </panel> - <text name="title_member_text" value="住人となった日:"/> + <text name="title_member_text" value="メンバー登録:"/> <text name="title_acc_status_text" value="アカウントの状態:"/> <text name="acc_status_text"> 住人。 支払情報未登録。 diff --git a/indra/newview/skins/default/xui/ja/panel_navigation_bar.xml b/indra/newview/skins/default/xui/ja/panel_navigation_bar.xml index a154442095..b271e86852 100644 --- a/indra/newview/skins/default/xui/ja/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/ja/panel_navigation_bar.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="navigation_bar"> <panel name="navigation_panel"> - <button name="back_btn" tool_tip="前の場所"/> - <button name="forward_btn" tool_tip="次の場所"/> + <button name="back_btn" tool_tip="前の場所へ戻ります"/> + <button name="forward_btn" tool_tip="次の場所へ進みます"/> <button name="home_btn" tool_tip="「ホーム」にテレポート"/> <location_input label="場所" name="location_combo"/> <search_combo_box label="検索" name="search_combo_box" tool_tip="検索"> diff --git a/indra/newview/skins/default/xui/ja/panel_notes.xml b/indra/newview/skins/default/xui/ja/panel_notes.xml index 1948c54359..6023bf125f 100644 --- a/indra/newview/skins/default/xui/ja/panel_notes.xml +++ b/indra/newview/skins/default/xui/ja/panel_notes.xml @@ -15,9 +15,9 @@ <layout_panel name="notes_buttons_panel"> <button label="フレンド登録" name="add_friend" tool_tip="フレンド登録を申し出ます"/> <button label="IM" name="im" tool_tip="インスタントメッセージを開きます"/> - <button label="コール" name="call" tool_tip="この住人にコールする"/> - <button label="地図" name="show_on_map_btn" tool_tip="住人を地図上で表示する"/> - <button label="テレポート" name="teleport" tool_tip="テレポートを送る"/> + <button label="コール" name="call" tool_tip="この住人にコールします"/> + <button label="地図" name="show_on_map_btn" tool_tip="住人を地図上で表示します"/> + <button label="テレポート" name="teleport" tool_tip="テレポートを送ります"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml index a109b1ab51..7681ee461f 100644 --- a/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml @@ -5,10 +5,10 @@ <inventory_panel label="着用中" name="cof_accordionpanel"/> </tab_container> <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="その他のオプションを表示"/> - <dnd_button name="trash_btn" tool_tip="選択したアイテムを削除"/> - <button label="アウトフィットを保存する" name="make_outfit_btn" tool_tip="容姿をアウトフィットに保存する"/> - <button label="装着" name="wear_btn" tool_tip="選択したアウトフィットを着用する"/> + <button name="options_gear_btn" tool_tip="その他のオプションを表示します"/> + <dnd_button name="trash_btn" tool_tip="選択したアイテムを削除します"/> + <button label="アウトフィットを保存する" name="make_outfit_btn" tool_tip="容姿をアウトフィットに保存します" width="140"/> + <button label="装着" name="wear_btn" tool_tip="選択したアウトフィットを着用します"/> <button label="M" name="look_edit_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_people.xml b/indra/newview/skins/default/xui/ja/panel_people.xml index c955cf6e48..0c3690a10c 100644 --- a/indra/newview/skins/default/xui/ja/panel_people.xml +++ b/indra/newview/skins/default/xui/ja/panel_people.xml @@ -23,15 +23,15 @@ </accordion> <panel label="bottom_panel" name="bottom_panel"> <button name="friends_viewsort_btn" tool_tip="オプション"/> - <button name="add_btn" tool_tip="フレンド登録を申し出る"/> - <button name="del_btn" tool_tip="選択した人をフレンドリストから削除"/> + <button name="add_btn" tool_tip="フレンド登録を申し出ます"/> + <button name="del_btn" tool_tip="選択した人をフレンドリストから削除します"/> </panel> </panel> <panel label="グループ" name="groups_panel"> <panel label="bottom_panel" name="bottom_panel"> <button name="groups_viewsort_btn" tool_tip="オプション"/> - <button name="plus_btn" tool_tip="グループに参加 / 新規グループを作成"/> - <button name="activate_btn" tool_tip="選択したグループをアクティベート"/> + <button name="plus_btn" tool_tip="グループに参加 / 新規グループを作成します"/> + <button name="activate_btn" tool_tip="選択したグループをアクティブにします"/> </panel> </panel> <panel label="最新" name="recent_panel"> @@ -42,13 +42,13 @@ </panel> </tab_container> <panel name="button_bar"> - <button label="プロフィール" name="view_profile_btn" tool_tip="写真、グループ、その他住人情報を表示"/> - <button label="IM" name="im_btn" tool_tip="インスタントメッセージを開く"/> - <button label="コール" name="call_btn" tool_tip="この住人にコールする"/> + <button label="プロフィール" name="view_profile_btn" tool_tip="写真、グループ、その他住人情報を表示します"/> + <button label="IM" name="im_btn" tool_tip="インスタントメッセージを開きます"/> + <button label="コール" name="call_btn" tool_tip="この住人にコールします"/> <button label="共有" name="share_btn"/> - <button label="テレポート" name="teleport_btn" tool_tip="テレポートを送る"/> - <button label="グループ情報" name="group_info_btn" tool_tip="グループ情報を表示"/> - <button label="グループチャット" name="chat_btn" tool_tip="チャットを開始"/> - <button label="グループにコールする" name="group_call_btn" tool_tip="このグループにコールする"/> + <button label="テレポート" name="teleport_btn" tool_tip="テレポートを送ります"/> + <button label="グループ情報" name="group_info_btn" tool_tip="グループ情報を表示します"/> + <button label="グループチャット" name="chat_btn" tool_tip="チャットを開始します"/> + <button label="グループコール" name="group_call_btn" tool_tip="このグループにコールします"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_picks.xml b/indra/newview/skins/default/xui/ja/panel_picks.xml index f74bf7a073..4f58c032da 100644 --- a/indra/newview/skins/default/xui/ja/panel_picks.xml +++ b/indra/newview/skins/default/xui/ja/panel_picks.xml @@ -10,8 +10,8 @@ <button name="new_btn" tool_tip="現在地の新しいピック、またはクラシファイド広告を作成します"/> </panel> <panel name="buttons_cucks"> - <button label="情報" name="info_btn" tool_tip="ピックの情報を表示"/> - <button label="テレポート" name="teleport_btn" tool_tip="該当するエリアにテレポート"/> - <button label="地図" name="show_on_map_btn" tool_tip="世界地図に該当するエリアを表示"/> + <button label="情報" name="info_btn" tool_tip="ピックの情報を表示します"/> + <button label="テレポート" name="teleport_btn" tool_tip="該当するエリアにテレポートします"/> + <button label="地図" name="show_on_map_btn" tool_tip="世界地図に該当するエリアを表示します"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_place_profile.xml b/indra/newview/skins/default/xui/ja/panel_place_profile.xml index ef4b71c4aa..b9a0744372 100644 --- a/indra/newview/skins/default/xui/ja/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/ja/panel_place_profile.xml @@ -86,9 +86,10 @@ <button label="土地情報" name="about_land_btn"/> </panel> </accordion_tab> - <accordion_tab name="region_information_tab" title="リージョン"> + <accordion_tab name="region_information_tab" title="リージョン(地域) + "> <panel> - <text name="region_name_label" value="リージョン:"/> + <text name="region_name_label" value="地域:"/> <text name="region_name" value="Mooseland"/> <text name="region_type_label" value="種類:"/> <text name="region_type" value="Moose"/> @@ -105,7 +106,7 @@ </accordion_tab> <accordion_tab name="estate_information_tab" title="エステート(不動産)"> <panel> - <text name="estate_name_label" value="エステート(不動産):"/> + <text name="estate_name_label" value="不動産:"/> <text name="estate_rating_label" value="レーティング区分:"/> <text name="estate_owner_label" value="所有者:"/> <text name="covenant_label" value="約款:"/> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml index 16af659326..f0780a6cf8 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml @@ -6,9 +6,9 @@ <check_box label="リンデンドルを使用・受け取るとき" name="notify_money_change_checkbox"/> <check_box label="フレンドがログアウト・ログインするとき" name="friends_online_notify_checkbox"/> <text name="show_label" width="300"> - 常に表示する通知: + 常に表示するメッセージ: </text> <text name="dont_show_label"> - 表示しない通知: + 表示しないメッセージ: </text> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml index ece18a75ca..73d0855273 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml @@ -7,27 +7,27 @@ </radio_group> <color_swatch label="自分" name="user"/> <text name="text_box1"> - ミー + 自分 </text> <color_swatch label="その他" name="agent"/> <text name="text_box2"> - その他 + 他人 </text> <color_swatch label="IM" name="im"/> <text name="text_box3"> IM </text> - <color_swatch label="システム" name="system"/> + <color_swatch label="システム" name="system"/> <text name="text_box4"> - システム + システム </text> <color_swatch label="エラー" name="script_error"/> <text name="text_box5"> エラー </text> - <color_swatch label="オブジェクト" name="objects"/> + <color_swatch label="オブジェクト" name="objects"/> <text name="text_box6"> - オブジェクト + オブジェクト </text> <color_swatch label="所有者" name="owner"/> <text name="text_box7"> @@ -37,9 +37,9 @@ <text name="text_box9"> URL </text> - <check_box initial_value="true" label="チャット中はタイピング動作のアニメーションを再生" name="play_typing_animation"/> - <check_box label="オフライン時に受け取った IM をメールで送信" name="send_im_to_email"/> - <check_box label="文字チャットの履歴を有効にする" name="plain_text_chat_history"/> + <check_box initial_value="true" label="チャット中にタイピング動作のアニメーションを再生" name="play_typing_animation"/> + <check_box label="オフライン時に受け取った IM をメールで受信" name="send_im_to_email"/> + <check_box label="チャット履歴に文字だけで表示する" name="plain_text_chat_history"/> <radio_group name="chat_window" tool_tip="インスタントメッセージを別ウィンドウ、または1つのウィンドウに複数タブで表示(要再起動)"> <radio_item label="複数ウィンドウ" name="radio" value="0"/> <radio_item label="1つのウィンドウ" name="radio2" value="1"/> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml index 765662b96a..f216c3acbc 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml @@ -33,7 +33,7 @@ </text> <combo_box name="start_location_combo"> <combo_box.item label="最後にログアウトした場所" name="MyLastLocation" tool_tip="常に最後にいた場所にログイン"/> - <combo_box.item label="自宅(ホーム)" name="MyHome" tool_tip="常に自宅(ホーム)にログイン"/> + <combo_box.item label="ホーム" name="MyHome" tool_tip="常にホーム(自宅)にログイン"/> </combo_box> <check_box initial_value="true" label="ログイン画面に表示する" name="show_location_checkbox"/> <text name="name_tags_textbox"> @@ -48,7 +48,7 @@ <check_box initial_value="true" label="小さいアバター名" name="small_avatar_names_checkbox"/> <check_box label="グループタイトルを表示" name="show_all_title_checkbox1"/> <text name="effects_color_textbox"> - 私のビームの色: + ビームの色: </text> <text name="title_afk_text"> 一時退席までの時間: diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml index 191748fe91..8df829c296 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml @@ -55,7 +55,7 @@ <text name="AvatarRenderingText"> アバター表示: </text> - <check_box initial_value="true" label="アバターの精度を上げる" name="AvatarImpostors"/> + <check_box initial_value="true" label="アバターの描画を簡略化" name="AvatarImpostors"/> <check_box initial_value="true" label="ハードウェアスキニング" name="AvatarVertexProgram"/> <check_box initial_value="true" label="アバターの布" name="AvatarCloth"/> <slider label="描画距離:" name="DrawDistance"/> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml index 7a7cb8b96b..12e8b04f84 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml @@ -11,13 +11,13 @@ <check_box label="フレンドとグループ以外からはコールとIMを受信しない" name="voice_call_friends_only_check"/> <check_box label="コールが終了したらマイクのスイッチを切る" name="auto_disengage_mic_check"/> <check_box label="Cookieを受け入れる" name="cookies_enabled"/> - <check_box label="メディアが有効です" name="media_enabled"/> + <check_box label="メディアを有効にする" name="media_enabled"/> <check_box label="メディアを自動再生する" name="autoplay_enabled"/> <text name="Logs:"> ログ: </text> - <check_box label="コンピューターに近くのチャットログを保存する" name="log_nearby_chat"/> - <check_box label="コンピューターに IM ログを保存する" name="log_instant_messages"/> + <check_box label="近くのチャットログをコンピューターに保存する" name="log_nearby_chat"/> + <check_box label="IM ログをコンピューターに保存する" name="log_instant_messages"/> <check_box label="タイムスタンプを追加する" name="show_timestamps_check_im"/> <text name="log_path_desc"> ログの保存場所: diff --git a/indra/newview/skins/default/xui/ja/panel_profile.xml b/indra/newview/skins/default/xui/ja/panel_profile.xml index 98969f5ab3..8968b7c61e 100644 --- a/indra/newview/skins/default/xui/ja/panel_profile.xml +++ b/indra/newview/skins/default/xui/ja/panel_profile.xml @@ -26,7 +26,7 @@ <panel name="first_life_image_panel"> <text name="title_rw_descr_text" value="現実世界:"/> </panel> - <text name="title_member_text" value="住人となった日:"/> + <text name="title_member_text" value="住人登録:"/> <text name="title_acc_status_text" value="アカウントの状態:"/> <text name="acc_status_text"> 住人。 支払情報未登録。 @@ -40,9 +40,9 @@ <layout_panel name="profile_buttons_panel"> <button label="フレンド登録" name="add_friend" tool_tip="フレンド登録を申し出ます"/> <button label="IM" name="im" tool_tip="インスタントメッセージを開きます"/> - <button label="コール" name="call" tool_tip="この住人にコールする"/> - <button label="地図" name="show_on_map_btn" tool_tip="住人を地図上で表示する"/> - <button label="テレポート" name="teleport" tool_tip="テレポートを送る"/> + <button label="コール" name="call" tool_tip="この住人にコールします"/> + <button label="地図" name="show_on_map_btn" tool_tip="住人を地図上で表示します"/> + <button label="テレポート" name="teleport" tool_tip="テレポートを送ります"/> </layout_panel> <layout_panel name="profile_me_buttons_panel"> <button label="プロフィールの編集" name="edit_profile_btn" tool_tip="個人的な情報を編集します"/> diff --git a/indra/newview/skins/default/xui/ja/panel_region_covenant.xml b/indra/newview/skins/default/xui/ja/panel_region_covenant.xml index 5f43f93113..9a517d79e9 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_covenant.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="約款" name="Covenant"> - <text font="SansSerifLarge" name="estate_section_lbl"> - エステート(不動産) + <text font="SansSerifLarge" name="estate_section_lbl" width="200"> + 不動産 </text> <text name="estate_name_lbl"> 名前: @@ -26,14 +26,14 @@ この不動産には約款がありません。 </text_editor> <button label="リセット" name="reset_covenant"/> - <text name="covenant_help_text"> + <text name="covenant_help_text" left="100"> 約款の変更は不動産全区画に適用となります。 </text> - <text name="covenant_instructions"> + <text name="covenant_instructions" width="390"> この不動産約款の変更をする際は、ノートカードをドラッグ&ドロップしてください。 </text> - <text bottom_delta="-34" font="SansSerifLarge" name="region_section_lbl"> - リージョン(地域) + <text bottom_delta="-34" font="SansSerifLarge" name="region_section_lbl" width="200"> + 地域 </text> <text name="region_name_lbl"> 名前: diff --git a/indra/newview/skins/default/xui/ja/panel_region_debug.xml b/indra/newview/skins/default/xui/ja/panel_region_debug.xml index 4209fb17e5..f6865c12b1 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_debug.xml @@ -6,11 +6,11 @@ <text name="region_text"> 未知 </text> - <check_box label="スクリプト無効化" name="disable_scripts_check" tool_tip="この地域のスクリプトをすべて無効化"/> + <check_box label="スクリプト無効化" name="disable_scripts_check" tool_tip="この地域のスクリプトをすべて無効にします"/> <button label="?" name="disable_scripts_help"/> - <check_box label="衝突を無効化" name="disable_collisions_check" tool_tip="この地域の非アバター衝突を無効化"/> + <check_box label="衝突を無効化" name="disable_collisions_check" tool_tip="この地域の非アバター衝突を無効にします"/> <button label="?" name="disable_collisions_help"/> - <check_box label="物理作用を無効化" name="disable_physics_check" tool_tip="この地域の物理作用をすべて無効化"/> + <check_box label="物理作用を無効化" name="disable_physics_check" tool_tip="この地域の物理作用をすべて無効にします"/> <button label="?" name="disable_physics_help"/> <button label="適用" name="apply_btn"/> <text name="objret_text_lbl" width="120"> @@ -27,14 +27,14 @@ オプション: </text> <check_box label="スクリプト付きのもの" name="return_scripts" tool_tip="スクリプトのオブジェクトだけ返却します"/> - <check_box label="他人の土地にあるもの" name="return_other_land" tool_tip="他人に属する土地にあるオブジェクトのみを返却"/> - <check_box label="この不動産に属するすべてのリージョンのもの" name="return_estate_wide" tool_tip="この不動産に含まれているすべての地域のオブジェクトを返却"/> + <check_box label="他人の土地にあるもの" name="return_other_land" tool_tip="他人に属する土地にあるオブジェクトのみを返却します"/> + <check_box label="この不動産に属するすべてのリージョンのもの" name="return_estate_wide" tool_tip="この不動産に含まれているすべての地域のオブジェクトを返却します"/> <button label="返却" name="return_btn"/> <button label="上部コライダー取得" name="top_colliders_btn" tool_tip="衝突する可能性が最も高いオブジェクトのリスト"/> <button label="?" name="top_colliders_help"/> <button label="上部スクリプト取得" name="top_scripts_btn" tool_tip="スクリプトの実行に最も時間を費やしているオブジェクトのリスト"/> <button label="?" name="top_scripts_help"/> - <button label="地域再起動" name="restart_btn" tool_tip="2分間のカウントダウン後、地域を再起動"/> + <button label="地域再起動" name="restart_btn" tool_tip="2分間のカウントダウン後、地域を再起動します"/> <button label="?" name="restart_help"/> - <button label="再起動を遅延" name="cancel_restart_btn" tool_tip="地域の再起動を1時間遅延する"/> + <button label="再起動を遅延" name="cancel_restart_btn" tool_tip="地域の再起動を1時間遅延します"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_region_estate.xml b/indra/newview/skins/default/xui/ja/panel_region_estate.xml index 976cfacb3f..fcc225c333 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_estate.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="不動産" name="Estate"> - <text name="estate_help_text"> + <text name="estate_help_text" width="400"> このタブの設定への変更は、エステート内のすべてのリージョンに影響されます。 </text> <text name="estate_text"> @@ -40,7 +40,7 @@ <check_box label="太陽固定" name="fixed_sun_check"/> <button label="?" name="fixed_sun_help"/> <slider label="段階" name="sun_hour_slider"/> - <check_box label="パブリック・アクセスを許可" name="externally_visible_check"/> + <check_box label="パブリックアクセスを許可" name="externally_visible_check"/> <button label="?" name="externally_visible_help"/> <check_box label="直接テレポートを許可" name="allow_direct_teleport"/> <button label="?" name="allow_direct_teleport_help"/> diff --git a/indra/newview/skins/default/xui/ja/panel_region_general.xml b/indra/newview/skins/default/xui/ja/panel_region_general.xml index 00be5b6b03..168141ee77 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_general.xml @@ -3,19 +3,19 @@ <text name="region_text_lbl"> 地域: </text> - <text left="90" name="region_text"> + <text left_delta="70" name="region_text"> 未知 </text> <text name="version_channel_text_lbl" width="100"> バージョン: </text> - <text left="90" name="version_channel_text"> + <text left_delta="70" name="version_channel_text"> 不明 </text> <text name="region_type_lbl"> 種類: </text> - <text name="region_type"> + <text name="region_type" left_delta="70"> 不明 </text> <check_box label="土地整備をブロック" name="block_terraform_check"/> @@ -28,9 +28,9 @@ <button label="?" name="restrict_pushobject_help"/> <check_box label="土地の再販を許可" name="allow_land_resell_check"/> <button label="?" name="land_resell_help"/> - <check_box label="土地の統合/分割を許可" name="allow_parcel_changes_check"/> + <check_box label="土地の統合・分割を許可" name="allow_parcel_changes_check"/> <button label="?" name="parcel_changes_help"/> - <check_box label="土地の検索表示をブロック" name="block_parcel_search_check" tool_tip="検索結果で、この地域と区画を人に見せる"/> + <check_box label="土地の検索表示をブロック" name="block_parcel_search_check" tool_tip="検索結果で、この地域と区画を表示するかどうかの設定です"/> <button label="?" name="parcel_search_help"/> <spinner label="アバター数上限" name="agent_limit_spin"/> <button label="?" name="agent_limit_help"/> @@ -40,14 +40,14 @@ 区分: </text> <combo_box label="控えめ" name="access_combo"> - <combo_box.item label="Adult" name="Adult"/> + <combo_box.item label="アダルト" name="Adult"/> <combo_box.item label="控えめ" name="Mature"/> <combo_box.item label="一般" name="PG"/> </combo_box> <button label="?" name="access_help"/> <button label="適用" name="apply_btn"/> - <button label="ユーザー1人ホームテレポート" name="kick_btn"/> - <button label="ユーザー全員ホームテレポート" name="kick_all_btn"/> - <button label="メッセージを地域へ送信..." name="im_btn"/> + <button label="ユーザー1名をホームにテレポート" name="kick_btn"/> + <button label="ユーザー全員をホームにテレポート" name="kick_all_btn"/> + <button label="メッセージを地域に送信..." name="im_btn"/> <button label="テレハブの管理..." name="manage_telehub_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml b/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml index 9673953d06..df7e5d9129 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml @@ -1,21 +1,21 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="リージョン(地域)" name="General"> <text name="region_text_lbl"> - リージョン: + 地域: </text> - <text name="region_text"> + <text name="region_text" left_delta="70"> 不明 </text> <text name="version_channel_text_lbl"> バージョン: </text> - <text name="version_channel_text"> + <text name="version_channel_text" left_delta="70"> 不明 </text> <text name="region_type_lbl"> 種類: </text> - <text name="region_type"> + <text name="region_type" left_delta="70"> 不明 </text> <check_box label="地形編集をブロック" name="block_terraform_check"/> @@ -24,9 +24,9 @@ <check_box label="プッシュを制限" name="restrict_pushobject"/> <check_box label="土地の再販を許可" name="allow_land_resell_check"/> <check_box label="土地の統合・分割を許可" name="allow_parcel_changes_check"/> - <check_box label="土地の検索教示をブロック" name="block_parcel_search_check" tool_tip="このリージョンとリージョン内の区画を検索結果に表示する"/> - <spinner label="アバター数上限" name="agent_limit_spin"/> - <spinner label="オブジェクトボーナス" name="object_bonus_spin"/> + <check_box label="土地の検索表示をブロック" name="block_parcel_search_check" tool_tip="検索結果で、この地域と区画を表示するかどうかの設定です"/> + <spinner label="アバター数上限" name="agent_limit_spin" label_width="110" width="190"/> + <spinner label="物体ボーナス" name="object_bonus_spin" label_width="110" width="190"/> <text label="レーティング区分" name="access_text"> レーティング区分: </text> @@ -38,6 +38,6 @@ <button label="適用" name="apply_btn"/> <button label="ユーザー1名をホームにテレポート..." name="kick_btn"/> <button label="ユーザー全員をホームにテレポート..." name="kick_all_btn"/> - <button label="リージョンにメッセージを送信..." name="im_btn"/> + <button label="メッセージを地域に送信..." name="im_btn"/> <button label="テレハブの管理..." name="manage_telehub_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_region_texture.xml b/indra/newview/skins/default/xui/ja/panel_region_texture.xml index ea784df127..17e3260460 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_texture.xml @@ -48,7 +48,8 @@ 数値は上のテクスチャのブレンド範囲を示します。 </text> <text name="height_text_lbl11"> - 計測単位はメートルで、「低」の値は、1番のテクスチャの高さの「最大値」です。「高」の値は、4番のテクスチャの高さの「最低値」です。 + 計測単位はメートルで、「低」の値は、1番のテクスチャの高さの +「最大値」です。「高」の値は、4番のテクスチャの高さの「最低値」です。 </text> <text name="height_text_lbl12"> そして「高」の値はテクスチャー#4の高さの下限となります。 diff --git a/indra/newview/skins/default/xui/ja/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/ja/panel_script_limits_my_avatar.xml index e8b5be63ae..1d81304860 100644 --- a/indra/newview/skins/default/xui/ja/panel_script_limits_my_avatar.xml +++ b/indra/newview/skins/default/xui/ja/panel_script_limits_my_avatar.xml @@ -4,7 +4,7 @@ ローディング... </text> <scroll_list name="scripts_list"> - <scroll_list.columns label="サイズ (kb)" name="size"/> + <scroll_list.columns label="サイズ (kb)" name="size" width="90"/> <scroll_list.columns label="URL" name="urls"/> <scroll_list.columns label="オブジェクト名" name="name"/> <scroll_list.columns label="場所" name="location"/> diff --git a/indra/newview/skins/default/xui/ja/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/ja/panel_script_limits_region_memory.xml index fe0b44d8f4..6a62af4ec6 100644 --- a/indra/newview/skins/default/xui/ja/panel_script_limits_region_memory.xml +++ b/indra/newview/skins/default/xui/ja/panel_script_limits_region_memory.xml @@ -13,9 +13,9 @@ ローディング... </text> <scroll_list name="scripts_list"> - <scroll_list.columns label="サイズ (kb)" name="size"/> + <scroll_list.columns label="サイズ (kb)" name="size" width="90"/> <scroll_list.columns label="オブジェクト名" name="name"/> - <scroll_list.columns label="オブジェクトの所有者" name="owner"/> + <scroll_list.columns label="オブジェクトの所有者" name="owner" width="120"/> <scroll_list.columns label="区画・位置" name="location"/> </scroll_list> <button label="リスト更新" name="refresh_list_btn"/> diff --git a/indra/newview/skins/default/xui/ja/panel_side_tray.xml b/indra/newview/skins/default/xui/ja/panel_side_tray.xml index ce5f0b940c..48636f1e3b 100644 --- a/indra/newview/skins/default/xui/ja/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/ja/panel_side_tray.xml @@ -2,26 +2,26 @@ <!-- Side tray cannot show background because it is always partially on screen to hold tab buttons. --> <side_tray name="sidebar"> - <sidetray_tab description="サイドバーを表示・非表示" name="sidebar_openclose"/> - <sidetray_tab description="ホーム。" name="sidebar_home"> + <sidetray_tab description="サイドバーを表示・非表示" name="sidebar_openclose" tab_title="サイドバーを開く・閉じる"/> + <sidetray_tab description="ホーム。" name="sidebar_home" tab_title="ホーム"> <panel label="ホーム" name="panel_home"/> </sidetray_tab> - <sidetray_tab description="あなたの公開プロフィールとピックを編集してください。" name="sidebar_me"> + <sidetray_tab description="あなたの公開プロフィールとピックを編集してください。" name="sidebar_me" tab_title="マイ プロフィール"> <panel label="ミー" name="panel_me"/> </sidetray_tab> - <sidetray_tab description="フレンド、連絡先、近くの人を探してください。" name="sidebar_people"> + <sidetray_tab description="フレンド、連絡先、近くの人を探してください。" name="sidebar_people" tab_title="人"> <panel_container name="panel_container"> <panel label="グループ情報" name="panel_group_info_sidetray"/> <panel label="ブロックされた住人とオブジェクト" name="panel_block_list_sidetray"/> </panel_container> </sidetray_tab> - <sidetray_tab description="行きたい場所、行ったことのある場所を探してください。" label="場所" name="sidebar_places"> + <sidetray_tab description="行きたい場所、行ったことのある場所を探してください。" label="場所" name="sidebar_places" tab_title="場所"> <panel label="場所" name="panel_places"/> </sidetray_tab> - <sidetray_tab description="あなたの持ち物を眺めてください。" name="sidebar_inventory"> + <sidetray_tab description="あなたの持ち物を眺めてください。" name="sidebar_inventory" tab_title="マイ 持ち物"> <panel label="持ち物を編集" name="sidepanel_inventory"/> </sidetray_tab> - <sidetray_tab description="あなたの容姿や現在の見た目を変更してください。" name="sidebar_appearance"> + <sidetray_tab description="あなたの容姿や現在の見た目を変更してください。" name="sidebar_appearance" tab_title="マイ 容姿"> <panel label="容姿の編集" name="sidepanel_appearance"/> </sidetray_tab> </side_tray> diff --git a/indra/newview/skins/default/xui/ja/panel_status_bar.xml b/indra/newview/skins/default/xui/ja/panel_status_bar.xml index 063e584762..8d375aa6cd 100644 --- a/indra/newview/skins/default/xui/ja/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/ja/panel_status_bar.xml @@ -21,7 +21,7 @@ <panel.string name="buycurrencylabel"> L$ [AMT] </panel.string> - <button label="" label_selected="" name="buycurrency" tool_tip="私の残高"/> + <button label="" label_selected="" name="buycurrency" tool_tip="所持金"/> <button label="L$ の購入" name="buyL" tool_tip="クリックして L$ を購入します"/> <text name="TimeText" tool_tip="現在時刻(太平洋)"> 12:00 AM diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 288ad4bc1d..de628943ad 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -339,7 +339,7 @@ リンク </string> <string name="AvatarEditingAppearance"> - (容姿の編集) + (容姿の編集中) </string> <string name="AvatarAway"> 一時退席中 @@ -588,7 +588,7 @@ 接続しました </string> <string name="unavailable"> - あなたの現在のロケーションでは、ボイスを利用できません。 + 現在地では、ボイスを利用できません。 </string> <string name="hang_up"> インワールドボイスチャットの通話が切断されました @@ -642,7 +642,7 @@ 控えめ </string> <string name="SIM_ACCESS_ADULT"> - Adult + アダルト </string> <string name="SIM_ACCESS_DOWN"> オフライン @@ -786,7 +786,7 @@ 添付アイテムを保存 </string> <string name="TeleportOffer"> - テレポートを渡す + テレポートを送る </string> <string name="StartUpNotifications"> 不在中に新しい通知が届きました。 @@ -833,7 +833,7 @@ <string name="InventoryNoTexture"> 持ち物内にこのテクスチャのコピーがありません </string> - <string name="no_transfer" value=" (再販/プレゼント不可)"/> + <string name="no_transfer" value=" (再販・プレゼント不可)"/> <string name="no_modify" value=" (編集不可)"/> <string name="no_copy" value=" (コピー不可)"/> <string name="worn" value=" (着用中)"/> @@ -874,7 +874,7 @@ <string name="No Filters" value="いいえ "/> <string name="Since Logoff" value=" - ログオフ以来"/> <string name="InvFolder My Inventory"> - マイ 持ち物 + 持ち物 </string> <string name="InvFolder My Favorites"> お気に入り @@ -1706,7 +1706,7 @@ Linden 所在地 </string> <string name="Adult"> - Adult + アダルト </string> <string name="Arts&Culture"> アートとカルチャー @@ -3190,7 +3190,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ 現在地の詳細を見る </string> <string name="LocationCtrlComboBtnTooltip"> - マイロケーション履歴 + マイ ロケーション履歴 </string> <string name="LocationCtrlForSaleTooltip"> この土地を購入 @@ -3247,7 +3247,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ -- インスタントメッセージの保存開始 -- </string> <string name="IM_typing_start_string"> - [NAME] は入力中... + [NAME] は入力中です... </string> <string name="Unnamed"> (名前なし) diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp index d183aac208..0ff53f3e00 100644 --- a/indra/test_apps/llplugintest/llmediaplugintest.cpp +++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp @@ -1169,8 +1169,8 @@ void LLMediaPluginTest::keyboard( int key ) exit( 0 ); }; - mSelectedPanel->mMediaSource->keyEvent( LLPluginClassMedia::KEY_EVENT_DOWN, key, 0 ); - mSelectedPanel->mMediaSource->keyEvent( LLPluginClassMedia::KEY_EVENT_UP, key, 0 ); + mSelectedPanel->mMediaSource->keyEvent( LLPluginClassMedia::KEY_EVENT_DOWN, key, 0 , LLSD()); + mSelectedPanel->mMediaSource->keyEvent( LLPluginClassMedia::KEY_EVENT_UP, key, 0, LLSD()); }; //////////////////////////////////////////////////////////////////////////////// |