Merge branch 'master' of https://vcs.firestormviewer.org/viewer-merges/phoenix-firestorm-eep
|
|
@ -221,6 +221,7 @@ Ansariel Hiller
|
|||
STORM-2151
|
||||
MAINT-6917
|
||||
MAINT-8085
|
||||
STORM-2145
|
||||
MAINT-8723
|
||||
SL-10385
|
||||
SL-10891
|
||||
|
|
@ -797,6 +798,7 @@ Jonathan Yap
|
|||
STORM-2100
|
||||
STORM-2104
|
||||
STORM-2142
|
||||
STORM-2145
|
||||
SL-10089
|
||||
Kadah Coba
|
||||
STORM-1060
|
||||
|
|
@ -1525,6 +1527,7 @@ Whirly Fizzle
|
|||
STORM-1930
|
||||
BUG-6659
|
||||
STORM-2078
|
||||
BUG-17349
|
||||
Whoops Babii
|
||||
VWR-631
|
||||
VWR-1640
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ LLButton::Params::Params()
|
|||
mouse_down_callback("mouse_down_callback"),
|
||||
mouse_up_callback("mouse_up_callback"),
|
||||
mouse_held_callback("mouse_held_callback"),
|
||||
is_toggled_callback("is_toggled_callback"), // <FS:Ansariel> Toggle callback check
|
||||
is_toggle("is_toggle", false),
|
||||
scale_image("scale_image", true),
|
||||
hover_glow_amount("hover_glow_amount"),
|
||||
|
|
@ -183,8 +184,9 @@ LLButton::LLButton(const LLButton::Params& p)
|
|||
//mFlashingTimer(NULL)
|
||||
mFlashingTimer(NULL),
|
||||
mCheckboxControl(p.checkbox_control),
|
||||
mCheckboxControlPanel(NULL)
|
||||
mCheckboxControlPanel(NULL),
|
||||
// </FS:Zi>
|
||||
mIsToggledSignal(NULL) // <FS:Ansariel> Toggle callback check
|
||||
{
|
||||
if (p.button_flash_enable)
|
||||
{
|
||||
|
|
@ -283,6 +285,12 @@ LLButton::LLButton(const LLButton::Params& p)
|
|||
{
|
||||
setHeldDownCallback(initCommitCallback(p.mouse_held_callback));
|
||||
}
|
||||
// <FS:Ansariel> Toggle callback check
|
||||
if (p.is_toggled_callback.isProvided())
|
||||
{
|
||||
setIsToggledCallback(initEnableCallback(p.is_toggled_callback));
|
||||
}
|
||||
// <FS:Ansariel>
|
||||
|
||||
if (p.badge.isProvided())
|
||||
{
|
||||
|
|
@ -295,6 +303,7 @@ LLButton::~LLButton()
|
|||
delete mMouseDownSignal;
|
||||
delete mMouseUpSignal;
|
||||
delete mHeldDownSignal;
|
||||
delete mIsToggledSignal; // <FS:Ansariel> Toggle callback check
|
||||
|
||||
if (mFlashingTimer)
|
||||
{
|
||||
|
|
@ -372,6 +381,18 @@ boost::signals2::connection LLButton::setHeldDownCallback( const commit_signal_t
|
|||
return mHeldDownSignal->connect(cb);
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Toggle callback check
|
||||
boost::signals2::connection LLButton::setIsToggledCallback(const EnableCallbackParam& cb)
|
||||
{
|
||||
return setIsToggledCallback(initEnableCallback(cb));
|
||||
}
|
||||
|
||||
boost::signals2::connection LLButton::setIsToggledCallback(const enable_signal_t::slot_type& cb)
|
||||
{
|
||||
if (!mIsToggledSignal) mIsToggledSignal = new enable_signal_t();
|
||||
return mIsToggledSignal->connect(cb);
|
||||
}
|
||||
// <FS:Ansariel>
|
||||
|
||||
// *TODO: Deprecate (for backwards compatibility only)
|
||||
boost::signals2::connection LLButton::setClickedCallback( button_callback_t cb, void* data )
|
||||
|
|
@ -788,6 +809,13 @@ void LLButton::draw()
|
|||
// Figure out appropriate color for the text
|
||||
LLColor4 label_color;
|
||||
|
||||
// <FS:Ansariel> Toggle callback check
|
||||
if (mIsToggledSignal)
|
||||
{
|
||||
setToggleState((*mIsToggledSignal)(this, LLSD()));
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
// label changes when button state changes, not when pressed
|
||||
if ( enabled )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -141,6 +141,8 @@ public:
|
|||
|
||||
Optional<std::string> checkbox_control; // <FS:Zi> Add checkbox control toggle
|
||||
|
||||
Optional<EnableCallbackParam> is_toggled_callback; // <FS:Ansariel> Toggle callback check
|
||||
|
||||
Params();
|
||||
};
|
||||
|
||||
|
|
@ -188,6 +190,10 @@ public:
|
|||
// Passes a 'count' parameter in the commit param payload, i.e. param["count"])
|
||||
boost::signals2::connection setHeldDownCallback( const commit_signal_t::slot_type& cb ); // Mouse button held down and in button
|
||||
|
||||
// <FS:Ansariel> Toggle callback check
|
||||
boost::signals2::connection setIsToggledCallback(const EnableCallbackParam& cb);
|
||||
boost::signals2::connection setIsToggledCallback(const enable_signal_t::slot_type& cb);
|
||||
|
||||
|
||||
// *TODO: Deprecate (for backwards compatability only)
|
||||
boost::signals2::connection setClickedCallback( button_callback_t cb, void* data );
|
||||
|
|
@ -308,6 +314,8 @@ protected:
|
|||
commit_signal_t* mMouseDownSignal;
|
||||
commit_signal_t* mMouseUpSignal;
|
||||
commit_signal_t* mHeldDownSignal;
|
||||
|
||||
enable_signal_t* mIsToggledSignal; // <FS:Ansariel> Toggle callback check
|
||||
|
||||
const LLFontGL* mGLFont;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
/**
|
||||
|
||||
* @file llfloater.cpp
|
||||
* @brief LLFloater base class
|
||||
*
|
||||
|
|
|
|||
|
|
@ -1112,6 +1112,9 @@ BOOL LLTextBase::handleMouseDown(S32 x, S32 y, MASK mask)
|
|||
line_start = it->mDocIndexStart;
|
||||
}
|
||||
line_end = it->mDocIndexEnd;
|
||||
|
||||
// <FS:Ansariel> FIRE-29545: Backspace not working after triple-click selecting last line
|
||||
line_end = llclamp(line_end, 0, getLength());
|
||||
}
|
||||
|
||||
if (line_start == -1)
|
||||
|
|
|
|||
|
|
@ -228,7 +228,7 @@ public:
|
|||
virtual void setColor(const LLColor4& color);
|
||||
|
||||
// Ansariel: Changed to virtual. We might want to change the transparency ourself!
|
||||
virtual F32 getCurrentTransparency();
|
||||
virtual F32 getCurrentTransparency();
|
||||
|
||||
void setTransparencyType(ETypeTransparency type);
|
||||
ETypeTransparency getTransparencyType() const {return mTransparencyType;}
|
||||
|
|
|
|||
|
|
@ -740,6 +740,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only, bool disable_wmi)
|
|||
if (!disable_wmi && SUCCEEDED(GetVideoMemoryViaWMI(deviceID + 9, &vram)))
|
||||
{
|
||||
mVRAM = vram / (1024 * 1024);
|
||||
LL_INFOS("AppInit") << "VRAM Detected via WMI: " << mVRAM << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@
|
|||
#include "v4coloru.h"
|
||||
#include "v4color.h"
|
||||
#include "v3color.h"
|
||||
#include "llquaternion.h"
|
||||
#include "llrect.h"
|
||||
#include "llxmltree.h"
|
||||
#include "llsdserialize.h"
|
||||
|
|
@ -125,6 +126,9 @@ bool LLControlVariable::llsd_compare(const LLSD& a, const LLSD & b)
|
|||
case TYPE_VEC3D:
|
||||
result = LLVector3d(a) == LLVector3d(b);
|
||||
break;
|
||||
case TYPE_QUAT:
|
||||
result = LLQuaternion(a) == LLQuaternion(b);
|
||||
break;
|
||||
case TYPE_RECT:
|
||||
result = LLRect(a) == LLRect(b);
|
||||
break;
|
||||
|
|
@ -432,6 +436,7 @@ const std::string LLControlGroup::mTypeString[TYPE_COUNT] = { "U32"
|
|||
,"String"
|
||||
,"Vector3"
|
||||
,"Vector3D"
|
||||
,"Quaternion"
|
||||
,"Rect"
|
||||
,"Color4"
|
||||
,"Color3"
|
||||
|
|
@ -625,6 +630,11 @@ LLControlVariable* LLControlGroup::declareVec3d(const std::string& name, const L
|
|||
return declareControl(name, TYPE_VEC3D, initial_val.getValue(), comment, SANITY_TYPE_NONE, LLSD(), std::string(""), persist);
|
||||
}
|
||||
|
||||
LLControlVariable* LLControlGroup::declareQuat(const std::string& name, const LLQuaternion &initial_val, const std::string& comment, LLControlVariable::ePersist persist)
|
||||
{
|
||||
return declareControl(name, TYPE_QUAT, initial_val.getValue(), comment, SANITY_TYPE_NONE, LLSD(), std::string(""), persist);
|
||||
}
|
||||
|
||||
LLControlVariable* LLControlGroup::declareRect(const std::string& name, const LLRect &initial_val, const std::string& comment, LLControlVariable::ePersist persist)
|
||||
{
|
||||
return declareControl(name, TYPE_RECT, initial_val.getValue(), comment, SANITY_TYPE_NONE, LLSD(), std::string(""), persist);
|
||||
|
|
@ -702,6 +712,11 @@ LLVector3d LLControlGroup::getVector3d(const std::string& name)
|
|||
return get<LLVector3d>(name);
|
||||
}
|
||||
|
||||
LLQuaternion LLControlGroup::getQuaternion(const std::string& name)
|
||||
{
|
||||
return get<LLQuaternion>(name);
|
||||
}
|
||||
|
||||
LLRect LLControlGroup::getRect(const std::string& name)
|
||||
{
|
||||
return get<LLRect>(name);
|
||||
|
|
@ -779,6 +794,11 @@ void LLControlGroup::setVector3d(const std::string& name, const LLVector3d &val)
|
|||
set(name, val);
|
||||
}
|
||||
|
||||
void LLControlGroup::setQuaternion(const std::string& name, const LLQuaternion &val)
|
||||
{
|
||||
set(name, val);
|
||||
}
|
||||
|
||||
void LLControlGroup::setRect(const std::string& name, const LLRect &val)
|
||||
{
|
||||
set(name, val);
|
||||
|
|
@ -961,6 +981,16 @@ U32 LLControlGroup::loadFromFileLegacy(const std::string& filename, BOOL require
|
|||
validitems++;
|
||||
}
|
||||
break;
|
||||
case TYPE_QUAT:
|
||||
{
|
||||
LLQuaternion quat;
|
||||
|
||||
child_nodep->getAttributeQuat("value", quat);
|
||||
|
||||
control->set(quat.getValue());
|
||||
validitems++;
|
||||
}
|
||||
break;
|
||||
case TYPE_RECT:
|
||||
{
|
||||
//RN: hack to support reading rectangles from a string
|
||||
|
|
@ -1317,6 +1347,11 @@ template <> eControlType get_control_type<LLVector3d>()
|
|||
return TYPE_VEC3D;
|
||||
}
|
||||
|
||||
template <> eControlType get_control_type<LLQuaternion>()
|
||||
{
|
||||
return TYPE_QUAT;
|
||||
}
|
||||
|
||||
template <> eControlType get_control_type<LLRect>()
|
||||
{
|
||||
return TYPE_RECT;
|
||||
|
|
@ -1352,6 +1387,10 @@ template <> LLSD convert_to_llsd<LLVector3d>(const LLVector3d& in)
|
|||
{
|
||||
return in.getValue();
|
||||
}
|
||||
template <> LLSD convert_to_llsd<LLQuaternion>(const LLQuaternion& in)
|
||||
{
|
||||
return in.getValue();
|
||||
}
|
||||
|
||||
template <> LLSD convert_to_llsd<LLRect>(const LLRect& in)
|
||||
{
|
||||
|
|
@ -1464,6 +1503,18 @@ LLVector3d convert_from_llsd<LLVector3d>(const LLSD& sd, eControlType type, cons
|
|||
}
|
||||
}
|
||||
|
||||
template<>
|
||||
LLQuaternion convert_from_llsd<LLQuaternion>(const LLSD& sd, eControlType type, const std::string& control_name)
|
||||
{
|
||||
if (type == TYPE_QUAT)
|
||||
return (LLQuaternion)sd;
|
||||
else
|
||||
{
|
||||
CONTROL_ERRS << "Invalid LLQuaternion value for " << control_name << ": " << LLControlGroup::typeEnumToString(type) << " " << sd << LL_ENDL;
|
||||
return LLQuaternion();
|
||||
}
|
||||
}
|
||||
|
||||
template<>
|
||||
LLRect convert_from_llsd<LLRect>(const LLSD& sd, eControlType type, const std::string& control_name)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@
|
|||
|
||||
class LLVector3;
|
||||
class LLVector3d;
|
||||
class LLQuaternion;
|
||||
class LLColor4;
|
||||
class LLColor3;
|
||||
|
||||
|
|
@ -80,6 +81,7 @@ typedef enum e_control_type
|
|||
TYPE_STRING,
|
||||
TYPE_VEC3,
|
||||
TYPE_VEC3D,
|
||||
TYPE_QUAT,
|
||||
TYPE_RECT,
|
||||
TYPE_COL4,
|
||||
TYPE_COL3,
|
||||
|
|
@ -264,6 +266,7 @@ public:
|
|||
LLControlVariable* declareString(const std::string& name, const std::string &initial_val, const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
|
||||
LLControlVariable* declareVec3(const std::string& name, const LLVector3 &initial_val,const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
|
||||
LLControlVariable* declareVec3d(const std::string& name, const LLVector3d &initial_val, const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
|
||||
LLControlVariable* declareQuat(const std::string& name, const LLQuaternion &initial_val, const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
|
||||
LLControlVariable* declareRect(const std::string& name, const LLRect &initial_val, const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
|
||||
LLControlVariable* declareColor4(const std::string& name, const LLColor4 &initial_val, const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
|
||||
LLControlVariable* declareColor3(const std::string& name, const LLColor3 &initial_val, const std::string& comment, LLControlVariable::ePersist persist = LLControlVariable::PERSIST_NONDFT);
|
||||
|
|
@ -278,10 +281,10 @@ public:
|
|||
|
||||
LLWString getWString(const std::string& name);
|
||||
LLVector3 getVector3(const std::string& name);
|
||||
LLVector3d getVector3d(const std::string& name);
|
||||
LLVector3d getVector3d(const std::string& name);
|
||||
LLRect getRect(const std::string& name);
|
||||
LLSD getLLSD(const std::string& name);
|
||||
|
||||
LLQuaternion getQuaternion(const std::string& name);
|
||||
|
||||
LLColor4 getColor(const std::string& name);
|
||||
LLColor4 getColor4(const std::string& name);
|
||||
|
|
@ -314,6 +317,7 @@ public:
|
|||
void setString(const std::string& name, const std::string& val);
|
||||
void setVector3(const std::string& name, const LLVector3 &val);
|
||||
void setVector3d(const std::string& name, const LLVector3d &val);
|
||||
void setQuaternion(const std::string& name, const LLQuaternion &val);
|
||||
void setRect(const std::string& name, const LLRect &val);
|
||||
void setColor4(const std::string& name, const LLColor4 &val);
|
||||
void setLLSD(const std::string& name, const LLSD& val);
|
||||
|
|
@ -483,7 +487,8 @@ template <> eControlType get_control_type<bool>();
|
|||
//template <> eControlType get_control_type<BOOL> ()
|
||||
template <> eControlType get_control_type<std::string>();
|
||||
template <> eControlType get_control_type<LLVector3>();
|
||||
template <> eControlType get_control_type<LLVector3d>();
|
||||
template <> eControlType get_control_type<LLVector3d>();
|
||||
template <> eControlType get_control_type<LLQuaternion>();
|
||||
template <> eControlType get_control_type<LLRect>();
|
||||
template <> eControlType get_control_type<LLColor4>();
|
||||
template <> eControlType get_control_type<LLColor3>();
|
||||
|
|
@ -491,7 +496,8 @@ template <> eControlType get_control_type<LLSD>();
|
|||
|
||||
template <> LLSD convert_to_llsd<U32>(const U32& in);
|
||||
template <> LLSD convert_to_llsd<LLVector3>(const LLVector3& in);
|
||||
template <> LLSD convert_to_llsd<LLVector3d>(const LLVector3d& in);
|
||||
template <> LLSD convert_to_llsd<LLVector3d>(const LLVector3d& in);
|
||||
template <> LLSD convert_to_llsd<LLQuaternion>(const LLQuaternion& in);
|
||||
template <> LLSD convert_to_llsd<LLRect>(const LLRect& in);
|
||||
template <> LLSD convert_to_llsd<LLColor4>(const LLColor4& in);
|
||||
template <> LLSD convert_to_llsd<LLColor3>(const LLColor3& in);
|
||||
|
|
@ -500,6 +506,7 @@ template<> std::string convert_from_llsd<std::string>(const LLSD& sd, eControlTy
|
|||
template<> LLWString convert_from_llsd<LLWString>(const LLSD& sd, eControlType type, const std::string& control_name);
|
||||
template<> LLVector3 convert_from_llsd<LLVector3>(const LLSD& sd, eControlType type, const std::string& control_name);
|
||||
template<> LLVector3d convert_from_llsd<LLVector3d>(const LLSD& sd, eControlType type, const std::string& control_name);
|
||||
template<> LLQuaternion convert_from_llsd<LLQuaternion>(const LLSD& sd, eControlType type, const std::string& control_name);
|
||||
template<> LLRect convert_from_llsd<LLRect>(const LLSD& sd, eControlType type, const std::string& control_name);
|
||||
template<> bool convert_from_llsd<bool>(const LLSD& sd, eControlType type, const std::string& control_name);
|
||||
template<> S32 convert_from_llsd<S32>(const LLSD& sd, eControlType type, const std::string& control_name);
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ public:
|
|||
virtual void setString(const std::string& name, const std::string& val) {}
|
||||
virtual void setVector3(const std::string& name, const LLVector3 &val) {}
|
||||
virtual void setVector3d(const std::string& name, const LLVector3d &val) {}
|
||||
virtual void setQuaternion(const std::string& name, const LLQuaternion &val) {}
|
||||
virtual void setRect(const std::string& name, const LLRect &val) {}
|
||||
virtual void setColor4(const std::string& name, const LLColor4 &val) {}
|
||||
virtual void setLLSD(const std::string& name, const LLSD& val) {}
|
||||
|
|
|
|||
|
|
@ -342,6 +342,7 @@ set(viewer_SOURCE_FILES
|
|||
llfloaterbuycurrencyhtml.cpp
|
||||
llfloaterbuyland.cpp
|
||||
llfloatercamera.cpp
|
||||
llfloatercamerapresets.cpp
|
||||
llfloaterchatvoicevolume.cpp
|
||||
llfloatercolorpicker.cpp
|
||||
llfloaterconversationlog.cpp
|
||||
|
|
@ -403,12 +404,14 @@ set(viewer_SOURCE_FILES
|
|||
llfloaterperms.cpp
|
||||
llfloaterpostprocess.cpp
|
||||
llfloaterpreference.cpp
|
||||
llfloaterpreferenceviewadvanced.cpp
|
||||
llfloaterpreviewtrash.cpp
|
||||
llfloaterproperties.cpp
|
||||
llfloaterregiondebugconsole.cpp
|
||||
llfloaterregioninfo.cpp
|
||||
llfloaterreporter.cpp
|
||||
llfloaterregionrestarting.cpp
|
||||
llfloatersavecamerapreset.cpp
|
||||
llfloatersaveprefpreset.cpp
|
||||
llfloatersceneloadstats.cpp
|
||||
llfloaterscriptdebug.cpp
|
||||
|
|
@ -599,6 +602,7 @@ set(viewer_SOURCE_FILES
|
|||
llpanelplaceprofile.cpp
|
||||
llpanelplaces.cpp
|
||||
llpanelplacestab.cpp
|
||||
llpanelpresetscamerapulldown.cpp
|
||||
llpanelpresetspulldown.cpp
|
||||
llpanelprimmediacontrols.cpp
|
||||
llpanelprofile.cpp
|
||||
|
|
@ -612,6 +616,7 @@ set(viewer_SOURCE_FILES
|
|||
llpaneltiptoast.cpp
|
||||
llpanelvoiceeffect.cpp
|
||||
llpaneltopinfobar.cpp
|
||||
llpanelpulldown.cpp
|
||||
llpanelvoicedevicesettings.cpp
|
||||
llpanelvolume.cpp
|
||||
llpanelvolumepulldown.cpp
|
||||
|
|
@ -1102,6 +1107,7 @@ set(viewer_HEADER_FILES
|
|||
llfloaterbuycurrency.h
|
||||
llfloaterbuycurrencyhtml.h
|
||||
llfloaterbuyland.h
|
||||
llfloatercamerapresets.h
|
||||
llfloatercamera.h
|
||||
llfloaterchatvoicevolume.h
|
||||
llfloatercolorpicker.h
|
||||
|
|
@ -1167,12 +1173,14 @@ set(viewer_HEADER_FILES
|
|||
llfloaterperms.h
|
||||
llfloaterpostprocess.h
|
||||
llfloaterpreference.h
|
||||
llfloaterpreferenceviewadvanced.h
|
||||
llfloaterpreviewtrash.h
|
||||
llfloaterproperties.h
|
||||
llfloaterregiondebugconsole.h
|
||||
llfloaterregioninfo.h
|
||||
llfloaterreporter.h
|
||||
llfloaterregionrestarting.h
|
||||
llfloatersavecamerapreset.h
|
||||
llfloatersaveprefpreset.h
|
||||
llfloatersceneloadstats.h
|
||||
llfloaterscriptdebug.h
|
||||
|
|
@ -1353,12 +1361,14 @@ set(viewer_HEADER_FILES
|
|||
llpanelplaceprofile.h
|
||||
llpanelplaces.h
|
||||
llpanelplacestab.h
|
||||
llpanelpresetscamerapulldown.h
|
||||
llpanelpresetspulldown.h
|
||||
llpanelprimmediacontrols.h
|
||||
llpanelprofile.h
|
||||
llpanelsnapshot.h
|
||||
llpanelteleporthistory.h
|
||||
llpaneltiptoast.h
|
||||
llpanelpulldown.h
|
||||
llpanelvoicedevicesettings.h
|
||||
llpanelvoiceeffect.h
|
||||
llpaneltopinfobar.h
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
6.4.2
|
||||
6.4.3
|
||||
|
|
|
|||
|
|
@ -341,10 +341,14 @@ void FloaterAO::onSelectSet()
|
|||
return;
|
||||
}
|
||||
|
||||
mSelectedSet=set;
|
||||
// only update the interface when we actually selected a different set - FIRE-29542
|
||||
if (mSelectedSet != set)
|
||||
{
|
||||
mSelectedSet=set;
|
||||
|
||||
updateSetParameters();
|
||||
updateAnimationList();
|
||||
updateSetParameters();
|
||||
updateAnimationList();
|
||||
}
|
||||
}
|
||||
|
||||
void FloaterAO::onSelectSetSmall()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,142 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>AppearanceCameraMovement</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>AvatarSitRotation</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Avatar real sitting rotation used in preset</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Quaternion</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>CameraAngle</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Camera field of view angle (Radians)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1.047197551</real>
|
||||
</map>
|
||||
<key>CameraOffsetBuild</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Default camera position relative to focus point when entering build mode</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Vector3</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>-6</real>
|
||||
<real>0</real>
|
||||
<real>6</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>CameraOffsetRearView</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Initial camera offset from avatar in Front View</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Vector3</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>2.2</real>
|
||||
<real>0.0</real>
|
||||
<real>0.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>CameraOffsetScale</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Scales the default offset</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1</real>
|
||||
</map>
|
||||
<key>CameraZoomFraction</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Mousewheel driven fraction of zoom</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>0.90322577953338623</real>
|
||||
</map>
|
||||
<key>EditCameraMovement</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When entering build mode, camera moves up above avatar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FocusOffsetRearView</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Initial focus point offset relative to avatar for the camera preset Front View (x-axis is forward)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Vector3D</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>0.0</real>
|
||||
<real>0.0</real>
|
||||
<real>0.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>PresetCameraActive</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Name of currently selected preference</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>Default</string>
|
||||
</map>
|
||||
<key>TrackFocusObject</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Camera tracks last object zoomed on</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,142 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>AppearanceCameraMovement</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>AvatarSitRotation</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Avatar real sitting rotation used in preset</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Quaternion</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>CameraAngle</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Camera field of view angle (Radians)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1.047197551</real>
|
||||
</map>
|
||||
<key>CameraOffsetBuild</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Default camera position relative to focus point when entering build mode</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Vector3</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>-6</real>
|
||||
<real>0</real>
|
||||
<real>6</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>CameraOffsetRearView</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Initial camera offset from avatar in Rear View</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Vector3</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>-3</real>
|
||||
<real>0</real>
|
||||
<real>0.75</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>CameraOffsetScale</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Scales the default offset</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1</real>
|
||||
</map>
|
||||
<key>CameraZoomFraction</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Mousewheel driven fraction of zoom</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>0.90322577953338623</real>
|
||||
</map>
|
||||
<key>EditCameraMovement</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When entering build mode, camera moves up above avatar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FocusOffsetRearView</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Initial focus point offset relative to avatar for the camera preset Rear View (x-axis is forward)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Vector3D</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>1.0</real>
|
||||
<real>0.0</real>
|
||||
<real>1.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>PresetCameraActive</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Name of currently selected preference</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>Default</string>
|
||||
</map>
|
||||
<key>TrackFocusObject</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Camera tracks last object zoomed on</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,142 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>AppearanceCameraMovement</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>AvatarSitRotation</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Avatar real sitting rotation used in preset</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Quaternion</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>CameraAngle</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Camera field of view angle (Radians)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1.047197551</real>
|
||||
</map>
|
||||
<key>CameraOffsetBuild</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Default camera position relative to focus point when entering build mode</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Vector3</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>-6</real>
|
||||
<real>0</real>
|
||||
<real>6</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>CameraOffsetRearView</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Initial camera offset from avatar in Side View</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Vector3</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>-1.0</real>
|
||||
<real>0.7</real>
|
||||
<real>0.5</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>CameraOffsetScale</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Scales the default offset</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1</real>
|
||||
</map>
|
||||
<key>CameraZoomFraction</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Mousewheel driven fraction of zoom</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>0.90322577953338623</real>
|
||||
</map>
|
||||
<key>EditCameraMovement</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When entering build mode, camera moves up above avatar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FocusOffsetRearView</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Initial focus point offset relative to avatar for the camera preset Side View (x-axis is forward)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Vector3D</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>1.5</real>
|
||||
<real>0.7</real>
|
||||
<real>1.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>PresetCameraActive</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Name of currently selected preference</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>Default</string>
|
||||
</map>
|
||||
<key>TrackFocusObject</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Camera tracks last object zoomed on</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -3046,6 +3046,21 @@
|
|||
<real>0.5</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>CameraOffsetCustomPreset</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Initial camera offset from avatar for the custom camera preset</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Vector3</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>-3.0</real>
|
||||
<real>0.0</real>
|
||||
<real>0.75</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>CameraOffsetScale</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -3057,6 +3072,17 @@
|
|||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
<key>CameraZoomFraction</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Mousewheel driven fraction of zoom</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>0.9</real>
|
||||
</map>
|
||||
<key>CameraPosOnLogout</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -3094,7 +3120,7 @@
|
|||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
<key>CameraPreset</key>
|
||||
<key>CameraPreset</key> <!-- deprecated (see SL-12429) -->
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Preset camera position - view (0 - rear, 1 - front, 2 - group)</string>
|
||||
|
|
@ -6468,6 +6494,37 @@
|
|||
<real>1.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>FocusOffsetCustomPreset</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Initial focus point offset relative to avatar for the custom camera preset (x-axis is forward)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Vector3D</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>1.0</real>
|
||||
<real>0.0</real>
|
||||
<real>1.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>AvatarSitRotation</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Avatar real sitting rotation used in preset</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Quaternion</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>1</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>FocusPosOnLogout</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -14082,6 +14139,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>BasicUITooltips</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show tooltips for various 2D UI elements like buttons or checkboxes, won't supress tooltips like drag'n'drop, inworld, links or media</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>ShowHoverTips</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -21409,6 +21477,50 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>CameraOpacity</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Opacity of the Camera Controls floater</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
<key>PresetCameraActive</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Name of currently selected preference</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>Rear View</string>
|
||||
</map>
|
||||
<key>CameraPresetType</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Preset camera position - view (0 - rear, 1 - front, 2 - group, 3 - custom)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>HoverHeightAffectsCamera</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Camera view is affected by Hover Height setting</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>CefVerboseLog</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -22411,17 +22523,6 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSAlwaysOpaqueCameraControls</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show Camera Controls always opaque</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSEnableVolumeControls</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ RenderVBOMappingDisable 1 1
|
|||
RenderVolumeLODFactor 1 4.0
|
||||
UseStartScreen 1 1
|
||||
UseOcclusion 1 1
|
||||
VertexShaderEnable 1 1
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
WLSkyDetail 1 128
|
||||
Disregard128DefaultDrawDistance 1 1
|
||||
|
|
@ -95,7 +95,7 @@ RenderTerrainLODFactor 1 1
|
|||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderVolumeLODFactor 1 1.5
|
||||
VertexShaderEnable 1 0
|
||||
//VertexShaderEnable 1 0
|
||||
WindLightUseAtmosShaders 1 0
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -127,7 +127,7 @@ RenderTerrainLODFactor 1 1
|
|||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderVolumeLODFactor 1 1.5
|
||||
VertexShaderEnable 1 1
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -158,7 +158,7 @@ RenderTerrainLODFactor 1 1.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -189,7 +189,7 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -220,7 +220,7 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -251,7 +251,7 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -282,7 +282,7 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -312,7 +312,7 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderVolumeLODFactor 1 3.0
|
||||
VertexShaderEnable 1 1
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
WLSkyDetail 1 128
|
||||
RenderDeferred 1 1
|
||||
|
|
@ -380,7 +380,7 @@ list NoPixelShaders
|
|||
RenderAvatarVP 0 0
|
||||
RenderAvatarCloth 0 0
|
||||
RenderReflectionDetail 0 0
|
||||
VertexShaderEnable 0 0
|
||||
//VertexShaderEnable 0 0
|
||||
WindLightUseAtmosShaders 0 0
|
||||
RenderDeferred 0 0
|
||||
RenderDeferredSSAO 0 0
|
||||
|
|
@ -394,7 +394,7 @@ list NoVertexShaders
|
|||
RenderAvatarVP 0 0
|
||||
RenderAvatarCloth 0 0
|
||||
RenderReflectionDetail 0 0
|
||||
VertexShaderEnable 0 0
|
||||
//VertexShaderEnable 0 0
|
||||
WindLightUseAtmosShaders 0 0
|
||||
RenderDeferred 0 0
|
||||
RenderDeferredSSAO 0 0
|
||||
|
|
|
|||
|
|
@ -50,6 +50,8 @@
|
|||
|
||||
#include "fsdiscordkey.h"
|
||||
|
||||
#include "llviewernetwork.h"
|
||||
|
||||
boost::scoped_ptr<LLEventPump> FSDiscordConnect::sStateWatcher(new LLEventStream("DiscordConnectState"));
|
||||
boost::scoped_ptr<LLEventPump> FSDiscordConnect::sInfoWatcher(new LLEventStream("DiscordConnectInfo"));
|
||||
|
||||
|
|
@ -223,8 +225,20 @@ void FSDiscordConnect::updateRichPresence()
|
|||
|
||||
discordPresence.startTimestamp = mConnectTime;
|
||||
|
||||
#ifdef OPENSIM
|
||||
if (LLGridManager::getInstance()->isInSecondLife())
|
||||
{
|
||||
discordPresence.largeImageKey = "secondlife_512";
|
||||
}
|
||||
else
|
||||
{
|
||||
discordPresence.largeImageKey = "opensimulator_512";
|
||||
}
|
||||
#else
|
||||
discordPresence.largeImageKey = "secondlife_512";
|
||||
discordPresence.largeImageText = "Second Life";
|
||||
#endif
|
||||
|
||||
discordPresence.largeImageText = LLGridManager::getInstance()->getGridLabel().c_str();
|
||||
discordPresence.smallImageKey = "firestorm_512";
|
||||
std::string appName = std::string("via " + APP_NAME);
|
||||
discordPresence.smallImageText = appName.c_str();
|
||||
|
|
|
|||
|
|
@ -1,23 +1,23 @@
|
|||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
10. CHANGES TO THIS POLICY. Vivox may revise its Acceptable Use Policy from time to time without prior notice. Any changes will be presented in the latest version at the Vivox web site. All revised copies of the Policy are effective immediately upon a user's first use of the Service after the change has been posted.
|
||||
|
|
@ -1,23 +1,23 @@
|
|||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
10. CHANGES TO THIS POLICY. Vivox may revise its Acceptable Use Policy from time to time without prior notice. Any changes will be presented in the latest version at the Vivox web site. All revised copies of the Policy are effective immediately upon a user's first use of the Service after the change has been posted.
|
||||
|
|
@ -1,23 +1,23 @@
|
|||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
10. CHANGES TO THIS POLICY. Vivox may revise its Acceptable Use Policy from time to time without prior notice. Any changes will be presented in the latest version at the Vivox web site. All revised copies of the Policy are effective immediately upon a user's first use of the Service after the change has been posted.
|
||||
|
|
@ -1,23 +1,23 @@
|
|||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
10. CHANGES TO THIS POLICY. Vivox may revise its Acceptable Use Policy from time to time without prior notice. Any changes will be presented in the latest version at the Vivox web site. All revised copies of the Policy are effective immediately upon a user's first use of the Service after the change has been posted.
|
||||
|
|
@ -1,23 +1,23 @@
|
|||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
10. CHANGES TO THIS POLICY. Vivox may revise its Acceptable Use Policy from time to time without prior notice. Any changes will be presented in the latest version at the Vivox web site. All revised copies of the Policy are effective immediately upon a user's first use of the Service after the change has been posted.
|
||||
|
|
@ -1,23 +1,23 @@
|
|||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
10. CHANGES TO THIS POLICY. Vivox may revise its Acceptable Use Policy from time to time without prior notice. Any changes will be presented in the latest version at the Vivox web site. All revised copies of the Policy are effective immediately upon a user's first use of the Service after the change has been posted.
|
||||
|
|
@ -1,23 +1,23 @@
|
|||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
10. CHANGES TO THIS POLICY. Vivox may revise its Acceptable Use Policy from time to time without prior notice. Any changes will be presented in the latest version at the Vivox web site. All revised copies of the Policy are effective immediately upon a user's first use of the Service after the change has been posted.
|
||||
|
|
@ -1,23 +1,23 @@
|
|||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
Acceptable Use Policy (AUP)
|
||||
|
||||
1. BACKGROUND: Users of the online voice services provided by Vivox, Inc. ("Vivox") (the "Service"), through the act of utilizing the Service, agree to adhere to this Acceptable Use Policy (the "Policy"). Vivox reserves the right to immediately terminate a user's access to the Service if the user engages in any of the activities prohibited by this Policy or uses the Service contrary to this Policy. Each user is responsible for all activities conducted under its account. The user is also responsible for adhering to any policy set forth by any other service provider accessed through the Service; Vivox, and its suppliers and providers, assume no responsibility or liability for a user's failure to comply with the Policy. The user acknowledges that Vivox may have access to information about or provided by the user, including diagnostic information sent automatically after a problem or error, and agrees to such access and use.
|
||||
|
||||
2. PROHIBITED USES AND ACTIVITIES: Users shall not provide inaccurate or misleading information to Vivox or use the Service to: (i) access any other person's computer or computer system, software, or data without their knowledge and consent; or breach the security of another user; or attempt to circumvent the user authentication or security of any host, network, system, or account, which includes, but is not limited to, accessing data not intended for the user, logging into or making use of a server or account the user is not expressly authorized to access, or probing the security of other hosts, networks, or accounts; or use automated means (such as robots and spiders) to obtain information from Vivox's website or, though it, from other websites; (ii) interfere with computer networking or telecommunications service to any user, host or network, including, without limitation, denial of service attacks, flooding of a network, overloading a service, improper seizing and abuse of operator privileges and attempts to "crash" a host; (iii) violate the rules, regulations, or policies applicable to any network, server, computer database, or service that accessed by the user; (iv) transmit, re-transmit, or store any content or to engage in any activity that infringes the intellectual property rights or privacy rights of Vivox or any individual, group or entity, including but not limited to any rights protected by any copyright, patent, trademark, trade secret, trade dress, right of privacy, right of publicity, moral rights or other intellectual property right now known or later recognized by statute, judicial decision or regulation; (v) host, post, transmit, or re-transmit any content or material that is threatening, harassing, obscene, indecent, pornographic, hateful, malicious, racist, defamatory, libelous, treasonous, excessively violent or promotes the use of violence, or provides instruction, information or assistance in causing or carrying out violence against any government, organization, group or individual, or provides guidance, information or assistance with respect to causing damage or security breaches to or Vivox's network or to the network of any other service provider; (vi) commit an act that constitutes a criminal offense, gives rise to civil liability, or otherwise violates any applicable local, state, federal or international law, or (vii) encourage conduct that would constitute a criminal offense, give rise to civil liability, or otherwise violate any applicable local, state, federal or international law.
|
||||
|
||||
3. SECURITY: In all cases, the user is solely responsible for the security of any device or application it chooses to connect to the Service, including any data stored on or communications passed.
|
||||
|
||||
4. TRADEMARKS AND COPYRIGHTS. "Vivox," "Powered by Vivox" and similar marks are the property of Vivox. All other names, graphics, logos, marks and trade names used in connection with this Service, are the property of their owners and suppliers and may not be used without permission for any purpose. The copyright in the Vivox website and Service and all related materials are owned by Vivox or its suppliers unless otherwise stated.
|
||||
|
||||
5. DISCLAIMER OF WARRANTIES. THE SERVICE IS PROVIDED "AS IS" AND "WITH ALL FAULTS," AND PROVIDER AND VIVOX HEREBY DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION (I) WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, AND (II) ANY WARRANTIES CONCERNING THE SECURITY, RELIABILITY OR PERFORMANCE OF THE SERVICE. Certain states prohibit the disclaimer of warranties in certain cases, so the above may not apply to all users in all instances.
|
||||
|
||||
THE DOWNLOADING OR SUBMISSION OF ANY MATERIALS IS DONE AT THE USER'S OWN RISK, AND THE USER IS SOLELY RESPONSIBLE FOR ANY LOSS OR DAMAGE TO ANY CONTENT, IMAGE, COMPUTER SYSTEM OR DATA THAT MAY RESULT FROM USING THE SERVICE.
|
||||
|
||||
6. EXCLUSION OF DAMAGES. TO THE FULLEST EXTENT ALLOWED BY LAW, VIVOX SHALL NOT BE LIABLE FOR ANY INDIRECT OR CONSEQUENTIAL DAMAGES, INCLUDING INCIDENTAL, SPECIAL, EXEMPLARY AND PUNITIVE DAMAGES, RESULTING FROM THE USE OR PROVISION OF THE SERVICE, EVEN IF THE POSSIBILITY OF SUCH DAMAGES IS KNOWN. Certain states prohibit the limitation of liability in certain cases, so the above may not apply to the user in all instances.
|
||||
|
||||
7. ENFORCEMENT OF THIS POLICY: Vivox does not routinely monitors the activity of Service accounts for violation of this Policy. Vivox reserves the right at any time to monitor usage, transmissions, and content from time to time to operate the Service; to identify violations of this Policy; and/or to protect the network, the Service and/or other users. If the Service is used in a way that Vivox, in their sole discretion, believe violate this Policy, it may take any responsive actions they deem appropriate, including, but are not limited to, the immediate suspension or termination of all or any portion of the Service. Vivox will have no liability for any of these responsive actions. These actions are not exclusive remedies and Vivox may take any other legal or technical action deemed appropriate. The user expressly authorizes Vivox to cooperate with (i) law enforcement authorities in the investigation of suspected legal violations, and (ii) any system administrators at other Internet service providers or other network or computing facilities in order to enforce this Policy. This cooperation may include making available personally identifiable information about users to law enforcement or system administrators. The failure to enforce this Policy, for whatever reason or for no reason, shall not be construed as a waiver of any right to do so at any time. The user agrees that if any portion of this Policy is held invalid or unenforceable, such portion will be construed consistent with applicable law as nearly as possible, and the remaining portions will remain in full force and effect. The user agrees to indemnify, defend and hold harmless Vivox and its affiliates, suppliers, providers, and agents against all claims and expenses (including reasonable attorney fees) resulting from users engaging in any of the prohibited activities listed in this Policy or resulting from users violating the Policy or any other posted policy related to the Service. The foregoing user indemnification will survive any termination of the user's agreements with Vivox .
|
||||
|
||||
8. ARBITRATION. Except for the right of a party to seek equitable relief, any disputes arising under or related to this Agreement ("Dispute"), excluding any Dispute relating to the validity or infringement of any intellectual property right, will be resolved by negotiation, mediation and, if necessary, arbitration, as follows. The party raising such Dispute will promptly advise the other party in writing describing in reasonable detail the nature of such Dispute ("Notice of Dispute"). The parties will negotiate in good faith to resolve the Dispute, but if they have not done so within thirty (30) days, the parties will submit the Dispute to a mutually agreed mediation organization. If the parties are unable to resolve the Dispute within sixty (60) days after delivery of the Notice of Dispute, then the Dispute will be resolved by a single arbitrator in a final and binding arbitration under the then current procedural rules of the American Arbitration Association. All proceedings will be conducted in the English language in Boston, Massachusetts. The arbitrator will have no power to modify the terms or conditions of this Agreement, or to award punitive damages. Any award rendered in such arbitration may be enforced by either party in any Court of competent jurisdiction.
|
||||
|
||||
9. GENERAL TERMS. This Agreement is governed by the laws of the Commonwealth of Massachusetts. No agency, partnership, joint venture, employment or franchise relationship is intended or created by this Agreement. This AUP constitute the entire agreement between the parties concerning the use of the Service. If any provision of this Agreement is found to be unenforceable, it shall be deemed modified to the least extent needed to make the provision enforceable; the remaining terms of this Agreement shall remain in full force and effect. Vivox reserves the right to disclose any information about any user as required by a court order or as recommended by counsel in the context of any action by any government entity or other third party.
|
||||
|
||||
10. CHANGES TO THIS POLICY. Vivox may revise its Acceptable Use Policy from time to time without prior notice. Any changes will be presented in the latest version at the Vivox web site. All revised copies of the Policy are effective immediately upon a user's first use of the Service after the change has been posted.
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE.
|
||||
|
||||
This is the format required for NSIS Unicode. See http://www.scratchpaper.com/ for details.
|
||||
|
||||
James Cook
|
||||
September 2008
|
||||
The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE.
|
||||
|
||||
This is the format required for NSIS Unicode. See http://www.scratchpaper.com/ for details.
|
||||
|
||||
James Cook
|
||||
September 2008
|
||||
|
|
|
|||
|
|
@ -193,6 +193,9 @@ LLAgentCamera::LLAgentCamera() :
|
|||
clearGeneralKeys();
|
||||
clearOrbitKeys();
|
||||
clearPanKeys();
|
||||
|
||||
resetPanDiff();
|
||||
resetOrbitDiff();
|
||||
}
|
||||
|
||||
// Requires gSavedSettings to be initialized.
|
||||
|
|
@ -214,23 +217,18 @@ void LLAgentCamera::init()
|
|||
|
||||
mCameraFocusOffsetTarget = LLVector4(gSavedSettings.getVector3("CameraOffsetBuild"));
|
||||
|
||||
mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPreset");
|
||||
mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPresetType");
|
||||
|
||||
mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("CameraOffsetRearView");
|
||||
mCameraOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("CameraOffsetFrontView");
|
||||
mCameraOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("CameraOffsetGroupView");
|
||||
// [RLVa:KB] - Checked: RLVa-2.0.0
|
||||
mCameraOffsetInitial[CAMERA_RLV_SETCAM_VIEW] = gSavedSettings.declareVec3("CameraOffsetRLVaView", LLVector3(mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW]->getDefault()), "Declared in code", LLControlVariable::PERSIST_NO);
|
||||
mCameraOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->setHiddenFromSettingsEditor(true);
|
||||
// [/RLVa:KB]
|
||||
|
||||
mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("FocusOffsetRearView");
|
||||
mFocusOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("FocusOffsetFrontView");
|
||||
mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("FocusOffsetGroupView");
|
||||
// [RLVa:KB] - Checked: RLVa-2.0.0
|
||||
mFocusOffsetInitial[CAMERA_RLV_SETCAM_VIEW] = gSavedSettings.declareVec3("FocusOffsetRLVaView", LLVector3(mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW]->getDefault()), "Declared in code", LLControlVariable::PERSIST_NO);
|
||||
mFocusOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->setHiddenFromSettingsEditor(true);
|
||||
// [/RLVa:KB]
|
||||
mCameraOffsetInitial = gSavedSettings.getControl("CameraOffsetRearView");
|
||||
mFocusOffsetInitial = gSavedSettings.getControl("FocusOffsetRearView");
|
||||
//// [RLVa:KB] - Checked: RLVa-2.0.0
|
||||
// mCameraOffsetInitial[CAMERA_RLV_SETCAM_VIEW] = gSavedSettings.declareVec3("CameraOffsetRLVaView", LLVector3(mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW]->getDefault()), "Declared in code", LLControlVariable::PERSIST_NO);
|
||||
// mCameraOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->setHiddenFromSettingsEditor(true);
|
||||
//// [/RLVa:KB]
|
||||
//// [RLVa:KB] - Checked: RLVa-2.0.0
|
||||
// mFocusOffsetInitial[CAMERA_RLV_SETCAM_VIEW] = gSavedSettings.declareVec3("FocusOffsetRLVaView", LLVector3(mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW]->getDefault()), "Declared in code", LLControlVariable::PERSIST_NO);
|
||||
// mFocusOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->setHiddenFromSettingsEditor(true);
|
||||
//// [/RLVa:KB]
|
||||
|
||||
mCameraCollidePlane.clearVec();
|
||||
mCurrentCameraDistance = getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale");
|
||||
|
|
@ -379,7 +377,8 @@ void LLAgentCamera::resetView(BOOL reset_camera, BOOL change_camera, BOOL moveme
|
|||
|
||||
mCameraFOVZoomFactor = 0.f;
|
||||
}
|
||||
|
||||
resetPanDiff();
|
||||
resetOrbitDiff();
|
||||
mHUDTargetZoom = 1.f;
|
||||
// <FS:CR> FIRE-8798: Option to prevent camera reset on movement
|
||||
}
|
||||
|
|
@ -752,7 +751,7 @@ BOOL LLAgentCamera::calcCameraMinDistance(F32 &obj_min_distance)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
F32 LLAgentCamera::getCameraZoomFraction()
|
||||
F32 LLAgentCamera::getCameraZoomFraction(bool get_third_person)
|
||||
{
|
||||
// 0.f -> camera zoomed all the way out
|
||||
// 1.f -> camera zoomed all the way in
|
||||
|
|
@ -762,7 +761,7 @@ F32 LLAgentCamera::getCameraZoomFraction()
|
|||
// already [0,1]
|
||||
return mHUDTargetZoom;
|
||||
}
|
||||
else if (mFocusOnAvatar && cameraThirdPerson())
|
||||
else if (get_third_person || (mFocusOnAvatar && cameraThirdPerson()))
|
||||
{
|
||||
return clamp_rescale(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION, 1.f, 0.f);
|
||||
}
|
||||
|
|
@ -870,6 +869,7 @@ void LLAgentCamera::cameraOrbitAround(const F32 radians)
|
|||
}
|
||||
else
|
||||
{
|
||||
mOrbitAroundRadians += radians;
|
||||
mCameraFocusOffsetTarget.rotVec(radians, 0.f, 0.f, 1.f);
|
||||
|
||||
cameraZoomIn(1.f);
|
||||
|
|
@ -901,12 +901,34 @@ void LLAgentCamera::cameraOrbitOver(const F32 angle)
|
|||
LLVector3d left_axis;
|
||||
left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis());
|
||||
F32 new_angle = llclamp(angle_from_up - angle, 1.f * DEG_TO_RAD, 179.f * DEG_TO_RAD);
|
||||
mOrbitOverAngle += angle_from_up - new_angle;
|
||||
mCameraFocusOffsetTarget.rotVec(angle_from_up - new_angle, left_axis);
|
||||
|
||||
cameraZoomIn(1.f);
|
||||
}
|
||||
}
|
||||
|
||||
void LLAgentCamera::resetCameraOrbit()
|
||||
{
|
||||
LLVector3 camera_offset_unit(mCameraFocusOffsetTarget);
|
||||
camera_offset_unit.normalize();
|
||||
|
||||
LLVector3d left_axis;
|
||||
left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis());
|
||||
mCameraFocusOffsetTarget.rotVec(-mOrbitOverAngle, left_axis);
|
||||
|
||||
mCameraFocusOffsetTarget.rotVec(-mOrbitAroundRadians, 0.f, 0.f, 1.f);
|
||||
|
||||
cameraZoomIn(1.f);
|
||||
resetOrbitDiff();
|
||||
}
|
||||
|
||||
void LLAgentCamera::resetOrbitDiff()
|
||||
{
|
||||
mOrbitAroundRadians = 0;
|
||||
mOrbitOverAngle = 0;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// cameraZoomIn()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -1070,6 +1092,8 @@ void LLAgentCamera::cameraPanIn(F32 meters)
|
|||
LLVector3d at_axis;
|
||||
at_axis.setVec(LLViewerCamera::getInstance()->getAtAxis());
|
||||
|
||||
mPanFocusDiff += meters * at_axis;
|
||||
|
||||
mFocusTargetGlobal += meters * at_axis;
|
||||
mFocusGlobal = mFocusTargetGlobal;
|
||||
// don't enforce zoom constraints as this is the only way for users to get past them easily
|
||||
|
|
@ -1086,6 +1110,8 @@ void LLAgentCamera::cameraPanLeft(F32 meters)
|
|||
LLVector3d left_axis;
|
||||
left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis());
|
||||
|
||||
mPanFocusDiff += meters * left_axis;
|
||||
|
||||
mFocusTargetGlobal += meters * left_axis;
|
||||
mFocusGlobal = mFocusTargetGlobal;
|
||||
|
||||
|
|
@ -1106,6 +1132,8 @@ void LLAgentCamera::cameraPanUp(F32 meters)
|
|||
LLVector3d up_axis;
|
||||
up_axis.setVec(LLViewerCamera::getInstance()->getUpAxis());
|
||||
|
||||
mPanFocusDiff += meters * up_axis;
|
||||
|
||||
mFocusTargetGlobal += meters * up_axis;
|
||||
mFocusGlobal = mFocusTargetGlobal;
|
||||
|
||||
|
|
@ -1118,6 +1146,26 @@ void LLAgentCamera::cameraPanUp(F32 meters)
|
|||
mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal();
|
||||
}
|
||||
|
||||
void LLAgentCamera::resetCameraPan()
|
||||
{
|
||||
mFocusTargetGlobal -= mPanFocusDiff;
|
||||
|
||||
mFocusGlobal = mFocusTargetGlobal;
|
||||
mCameraSmoothingStop = true;
|
||||
|
||||
cameraZoomIn(1.f);
|
||||
updateFocusOffset();
|
||||
|
||||
mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal();
|
||||
|
||||
resetPanDiff();
|
||||
}
|
||||
|
||||
void LLAgentCamera::resetPanDiff()
|
||||
{
|
||||
mPanFocusDiff.clear();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// updateLookAt()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -1679,7 +1727,7 @@ LLVector3d LLAgentCamera::calcThirdPersonFocusOffset()
|
|||
agent_rot *= ((LLViewerObject*)(gAgentAvatarp->getParent()))->getRenderRotation();
|
||||
}
|
||||
|
||||
focus_offset = convert_from_llsd<LLVector3d>(mFocusOffsetInitial[mCameraPreset]->get(), TYPE_VEC3D, "");
|
||||
focus_offset = convert_from_llsd<LLVector3d>(mFocusOffsetInitial->get(), TYPE_VEC3D, "");
|
||||
return focus_offset * agent_rot;
|
||||
}
|
||||
|
||||
|
|
@ -1757,10 +1805,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)
|
|||
F32 camera_land_height;
|
||||
LLVector3d frame_center_global = !isAgentAvatarValid() ?
|
||||
gAgent.getPositionGlobal() :
|
||||
// <FS:Ansariel> FIRE-15772: Adjusting Hover Height changes camera view when camera view is at default
|
||||
//gAgent.getPosGlobalFromAgent(gAgentAvatarp->mRoot->getWorldPosition());
|
||||
gAgent.getPosGlobalFromAgent(gAgentAvatarp->mRoot->getWorldPosition() - gAgentAvatarp->getHoverOffset() );
|
||||
// </FS:Ansariel>
|
||||
gAgent.getPosGlobalFromAgent(getAvatarRootPosition());
|
||||
|
||||
BOOL isConstrained = FALSE;
|
||||
LLVector3d head_offset;
|
||||
|
|
@ -1834,7 +1879,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)
|
|||
at_axis.mV[VZ] = 0.f;
|
||||
at_axis.normalize();
|
||||
gAgent.resetAxes(at_axis * ~parent_rot);
|
||||
|
||||
|
||||
local_camera_offset = local_camera_offset * gAgent.getFrameAgent().getQuaternion() * parent_rot;
|
||||
}
|
||||
else
|
||||
|
|
@ -2100,9 +2145,38 @@ bool LLAgentCamera::clampCameraPosition(LLVector3d& posCamGlobal, const LLVector
|
|||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
LLVector3 LLAgentCamera::getCurrentCameraOffset()
|
||||
{
|
||||
return (LLViewerCamera::getInstance()->getOrigin() - getAvatarRootPosition() - mThirdPersonHeadOffset) * ~getCurrentAvatarRotation();
|
||||
}
|
||||
|
||||
LLVector3d LLAgentCamera::getCurrentFocusOffset()
|
||||
{
|
||||
return (mFocusTargetGlobal - gAgent.getPositionGlobal()) * ~getCurrentAvatarRotation();
|
||||
}
|
||||
|
||||
LLQuaternion LLAgentCamera::getCurrentAvatarRotation()
|
||||
{
|
||||
LLViewerObject* sit_object = (LLViewerObject*)gAgentAvatarp->getParent();
|
||||
|
||||
LLQuaternion av_rot = gAgent.getFrameAgent().getQuaternion();
|
||||
LLQuaternion obj_rot = sit_object ? sit_object->getRenderRotation() : LLQuaternion::DEFAULT;
|
||||
return av_rot * obj_rot;
|
||||
}
|
||||
|
||||
bool LLAgentCamera::isJoystickCameraUsed()
|
||||
{
|
||||
return ((mOrbitAroundRadians != 0) || (mOrbitOverAngle != 0) || !mPanFocusDiff.isNull());
|
||||
}
|
||||
|
||||
LLVector3 LLAgentCamera::getCameraOffsetInitial()
|
||||
{
|
||||
return convert_from_llsd<LLVector3>(mCameraOffsetInitial[mCameraPreset]->get(), TYPE_VEC3, "");
|
||||
return convert_from_llsd<LLVector3>(mCameraOffsetInitial->get(), TYPE_VEC3, "");
|
||||
}
|
||||
|
||||
LLVector3d LLAgentCamera::getFocusOffsetInitial()
|
||||
{
|
||||
return convert_from_llsd<LLVector3d>(mFocusOffsetInitial->get(), TYPE_VEC3D, "");
|
||||
}
|
||||
|
||||
// <FS:Ansariel> FIRE-23470: Fix camera controls zoom glitch
|
||||
|
|
@ -2118,6 +2192,12 @@ F32 LLAgentCamera::getCameraMaxZoomDistance(bool allow_disabled_constraints /* =
|
|||
LLWorld::getInstance()->getRegionWidthInMeters() - CAMERA_FUDGE_FROM_OBJECT);
|
||||
}
|
||||
|
||||
LLVector3 LLAgentCamera::getAvatarRootPosition()
|
||||
{
|
||||
static LLCachedControl<bool> use_hover_height(gSavedSettings, "HoverHeightAffectsCamera");
|
||||
return use_hover_height ? gAgentAvatarp->mRoot->getWorldPosition() : gAgentAvatarp->mRoot->getWorldPosition() - gAgentAvatarp->getHoverOffset();
|
||||
|
||||
}
|
||||
//-----------------------------------------------------------------------------
|
||||
// handleScrollWheel()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -2445,15 +2525,7 @@ void LLAgentCamera::changeCameraToThirdPerson(BOOL animate)
|
|||
}
|
||||
|
||||
// Remove any pitch from the avatar
|
||||
if (isAgentAvatarValid() && gAgentAvatarp->getParent())
|
||||
{
|
||||
LLQuaternion obj_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation();
|
||||
at_axis = LLViewerCamera::getInstance()->getAtAxis();
|
||||
at_axis.mV[VZ] = 0.f;
|
||||
at_axis.normalize();
|
||||
gAgent.resetAxes(at_axis * ~obj_rot);
|
||||
}
|
||||
else
|
||||
if (!isAgentAvatarValid() || !gAgentAvatarp->getParent())
|
||||
{
|
||||
at_axis = gAgent.getFrameAgent().getAtAxis();
|
||||
at_axis.mV[VZ] = 0.f;
|
||||
|
|
@ -2565,8 +2637,8 @@ void LLAgentCamera::switchCameraPreset(ECameraPreset preset)
|
|||
// Reset our view when switching away
|
||||
if (CAMERA_RLV_SETCAM_VIEW != preset)
|
||||
{
|
||||
mCameraOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->resetToDefault();
|
||||
mFocusOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->resetToDefault();
|
||||
//mCameraOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->resetToDefault();
|
||||
//mFocusOffsetInitial[CAMERA_RLV_SETCAM_VIEW]->resetToDefault();
|
||||
}
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
@ -2579,7 +2651,10 @@ void LLAgentCamera::switchCameraPreset(ECameraPreset preset)
|
|||
|
||||
mCameraPreset = preset;
|
||||
|
||||
gSavedSettings.setU32("CameraPreset", mCameraPreset);
|
||||
resetPanDiff();
|
||||
resetOrbitDiff();
|
||||
|
||||
gSavedSettings.setU32("CameraPresetType", mCameraPreset);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2825,7 +2900,7 @@ void LLAgentCamera::setSitCamera(const LLUUID &object_id, const LLVector3 &camer
|
|||
//-----------------------------------------------------------------------------
|
||||
// setFocusOnAvatar()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLAgentCamera::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate)
|
||||
void LLAgentCamera::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate, BOOL reset_axes)
|
||||
{
|
||||
if (focus_on_avatar != mFocusOnAvatar)
|
||||
{
|
||||
|
|
@ -2842,22 +2917,14 @@ void LLAgentCamera::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate)
|
|||
//RN: when focused on the avatar, we're not "looking" at it
|
||||
// looking implies intent while focusing on avatar means
|
||||
// you're just walking around with a camera on you...eesh.
|
||||
if (!mFocusOnAvatar && focus_on_avatar)
|
||||
if (!mFocusOnAvatar && focus_on_avatar && reset_axes)
|
||||
{
|
||||
setFocusGlobal(LLVector3d::zero);
|
||||
mCameraFOVZoomFactor = 0.f;
|
||||
if (mCameraMode == CAMERA_MODE_THIRD_PERSON)
|
||||
{
|
||||
LLVector3 at_axis;
|
||||
if (isAgentAvatarValid() && gAgentAvatarp->getParent())
|
||||
{
|
||||
LLQuaternion obj_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation();
|
||||
at_axis = LLViewerCamera::getInstance()->getAtAxis();
|
||||
at_axis.mV[VZ] = 0.f;
|
||||
at_axis.normalize();
|
||||
gAgent.resetAxes(at_axis * ~obj_rot);
|
||||
}
|
||||
else
|
||||
if (!isAgentAvatarValid() || !gAgentAvatarp->getParent())
|
||||
{
|
||||
at_axis = LLViewerCamera::getInstance()->getAtAxis();
|
||||
at_axis.mV[VZ] = 0.f;
|
||||
|
|
@ -3034,6 +3101,17 @@ BOOL LLAgentCamera::setPointAt(EPointAtType target_type, LLViewerObject *object,
|
|||
return mPointAt->setPointAt(target_type, object, position);
|
||||
}
|
||||
|
||||
void LLAgentCamera::rotateToInitSitRot()
|
||||
{
|
||||
gAgent.rotate(~gAgent.getFrameAgent().getQuaternion());
|
||||
gAgent.rotate(mInitSitRot);
|
||||
}
|
||||
|
||||
void LLAgentCamera::resetCameraZoomFraction()
|
||||
{
|
||||
mCameraZoomFraction = INITIAL_ZOOM_FRACTION;
|
||||
}
|
||||
|
||||
ELookAtType LLAgentCamera::getLookAtType()
|
||||
{
|
||||
if (mLookAt)
|
||||
|
|
|
|||
|
|
@ -58,6 +58,9 @@ enum ECameraPreset
|
|||
/** "Above and to the left, over the shoulder, pulled back a little on the zoom" */
|
||||
CAMERA_PRESET_GROUP_VIEW,
|
||||
|
||||
/** Current view when a preset is saved */
|
||||
CAMERA_PRESET_CUSTOM,
|
||||
|
||||
// [RLVa:KB] - Checked: RLVa-2.0.0
|
||||
/* Used by RLVa */
|
||||
CAMERA_RLV_SETCAM_VIEW
|
||||
|
|
@ -114,9 +117,19 @@ private:
|
|||
//--------------------------------------------------------------------
|
||||
public:
|
||||
void switchCameraPreset(ECameraPreset preset);
|
||||
private:
|
||||
/** Determines default camera offset depending on the current camera preset */
|
||||
LLVector3 getCameraOffsetInitial();
|
||||
/** Determines default focus offset depending on the current camera preset */
|
||||
LLVector3d getFocusOffsetInitial();
|
||||
|
||||
LLVector3 getCurrentCameraOffset();
|
||||
LLVector3d getCurrentFocusOffset();
|
||||
LLQuaternion getCurrentAvatarRotation();
|
||||
bool isJoystickCameraUsed();
|
||||
void setInitSitRot(LLQuaternion sit_rot) { mInitSitRot = sit_rot; };
|
||||
void rotateToInitSitRot();
|
||||
|
||||
private:
|
||||
/** Determines maximum camera distance from target for mouselook, opposite to LAND_MIN_ZOOM */
|
||||
// <FS:Ansariel> FIRE-23470: Fix camera controls zoom glitch
|
||||
//F32 getCameraMaxZoomDistance();
|
||||
|
|
@ -126,11 +139,13 @@ private:
|
|||
/** Camera preset in Third Person Mode */
|
||||
ECameraPreset mCameraPreset;
|
||||
|
||||
/** Initial camera offsets */
|
||||
std::map<ECameraPreset, LLPointer<LLControlVariable> > mCameraOffsetInitial;
|
||||
/** Initial camera offset */
|
||||
LLPointer<LLControlVariable> mCameraOffsetInitial;
|
||||
|
||||
/** Initial focus offsets */
|
||||
std::map<ECameraPreset, LLPointer<LLControlVariable> > mFocusOffsetInitial;
|
||||
/** Initial focus offset */
|
||||
LLPointer<LLControlVariable> mFocusOffsetInitial;
|
||||
|
||||
LLQuaternion mInitSitRot;
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Position
|
||||
|
|
@ -145,6 +160,8 @@ public:
|
|||
F32 getCurrentCameraBuildOffset() { return (F32)mCameraFocusOffset.length(); }
|
||||
void clearCameraLag() { mCameraLag.clearVec(); }
|
||||
private:
|
||||
LLVector3 getAvatarRootPosition();
|
||||
|
||||
F32 mCurrentCameraDistance; // Current camera offset from avatar
|
||||
F32 mTargetCameraDistance; // Target camera offset from avatar
|
||||
F32 mCameraFOVZoomFactor; // Amount of fov zoom applied to camera when zeroing in on an object
|
||||
|
|
@ -212,7 +229,7 @@ public:
|
|||
void validateFocusObject();
|
||||
void setFocusGlobal(const LLPickInfo& pick);
|
||||
void setFocusGlobal(const LLVector3d &focus, const LLUUID &object_id = LLUUID::null);
|
||||
void setFocusOnAvatar(BOOL focus, BOOL animate);
|
||||
void setFocusOnAvatar(BOOL focus, BOOL animate, BOOL reset_axes = TRUE);
|
||||
void setCameraPosAndFocusGlobal(const LLVector3d& pos, const LLVector3d& focus, const LLUUID &object_id);
|
||||
void clearFocusObject();
|
||||
void setFocusObject(LLViewerObject* object);
|
||||
|
|
@ -266,26 +283,31 @@ public:
|
|||
void cameraOrbitAround(const F32 radians); // Rotate camera CCW radians about build focus point
|
||||
void cameraOrbitOver(const F32 radians); // Rotate camera forward radians over build focus point
|
||||
void cameraOrbitIn(const F32 meters); // Move camera in toward build focus point
|
||||
|
||||
void resetCameraOrbit();
|
||||
void resetOrbitDiff();
|
||||
//--------------------------------------------------------------------
|
||||
// Zoom
|
||||
//--------------------------------------------------------------------
|
||||
public:
|
||||
void handleScrollWheel(S32 clicks); // Mousewheel driven zoom
|
||||
void cameraZoomIn(const F32 factor); // Zoom in by fraction of current distance
|
||||
F32 getCameraZoomFraction(); // Get camera zoom as fraction of minimum and maximum zoom
|
||||
void setCameraZoomFraction(F32 fraction); // Set camera zoom as fraction of minimum and maximum zoom
|
||||
void handleScrollWheel(S32 clicks); // Mousewheel driven zoom
|
||||
void cameraZoomIn(const F32 factor); // Zoom in by fraction of current distance
|
||||
F32 getCameraZoomFraction(bool get_third_person = false); // Get camera zoom as fraction of minimum and maximum zoom
|
||||
void setCameraZoomFraction(F32 fraction); // Set camera zoom as fraction of minimum and maximum zoom
|
||||
F32 calcCameraFOVZoomFactor();
|
||||
F32 getAgentHUDTargetZoom();
|
||||
|
||||
void resetCameraZoomFraction();
|
||||
F32 getCurrentCameraZoomFraction() { return mCameraZoomFraction; }
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Pan
|
||||
//--------------------------------------------------------------------
|
||||
public:
|
||||
void cameraPanIn(const F32 meters);
|
||||
void cameraPanLeft(const F32 meters);
|
||||
void cameraPanUp(const F32 meters);
|
||||
|
||||
void cameraPanUp(const F32 meters);
|
||||
void resetCameraPan();
|
||||
void resetPanDiff();
|
||||
//--------------------------------------------------------------------
|
||||
// View
|
||||
//--------------------------------------------------------------------
|
||||
|
|
@ -387,6 +409,9 @@ private:
|
|||
F32 mOrbitInKey;
|
||||
F32 mOrbitOutKey;
|
||||
|
||||
F32 mOrbitAroundRadians;
|
||||
F32 mOrbitOverAngle;
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Pan
|
||||
//--------------------------------------------------------------------
|
||||
|
|
@ -414,6 +439,8 @@ private:
|
|||
F32 mPanInKey;
|
||||
F32 mPanOutKey;
|
||||
|
||||
LLVector3d mPanFocusDiff;
|
||||
|
||||
/** Keys
|
||||
** **
|
||||
*******************************************************************************/
|
||||
|
|
|
|||
|
|
@ -4131,20 +4131,13 @@ void LLAppViewer::writeSystemInfo()
|
|||
if (! gDebugInfo.has("Dynamic") )
|
||||
gDebugInfo["Dynamic"] = LLSD::emptyMap();
|
||||
|
||||
// <FS:ND> set filename to Firestorm.log
|
||||
// <FS:ND> we don't want this (otherwise set filename to Firestorm.old/log
|
||||
// #if LL_WINDOWS
|
||||
// gDebugInfo["SLLog"] = gDirUtilp->getExpandedFilename(LL_PATH_DUMP,"SecondLife.log");
|
||||
// #else
|
||||
// //Not ideal but sufficient for good reporting.
|
||||
// gDebugInfo["SLLog"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"SecondLife.old"); //LLError::logFileName();
|
||||
// #endif
|
||||
|
||||
#if LL_WINDOWS
|
||||
gDebugInfo["SLLog"] = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, APP_NAME + ".log");
|
||||
#else
|
||||
//Not ideal but sufficient for good reporting.
|
||||
gDebugInfo["SLLog"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, APP_NAME + ".old"); //LLError::logFileName();
|
||||
#endif
|
||||
// </FS:ND>
|
||||
|
||||
gDebugInfo["ClientInfo"]["Name"] = LLVersionInfo::getChannel();
|
||||
|
|
@ -4226,7 +4219,7 @@ void LLAppViewer::writeSystemInfo()
|
|||
LL_INFOS("SystemInfo") << "OS: " << LLOSInfo::instance().getOSStringSimple() << LL_ENDL;
|
||||
LL_INFOS("SystemInfo") << "OS info: " << LLOSInfo::instance() << LL_ENDL;
|
||||
|
||||
// <FS:ND> Breakpad merge. Only include SettingsFile if the user selected this in prefs. Path from Catznip
|
||||
// <FS:ND> Breakpad merge. Only include SettingsFile if the user selected this in prefs. Patch from Catznip
|
||||
// gDebugInfo["SettingsFilename"] = gSavedSettings.getString("ClientSettingsFile");
|
||||
if (gCrashSettings.getBOOL("CrashSubmitSettings"))
|
||||
gDebugInfo["SettingsFilename"] = gSavedSettings.getString("ClientSettingsFile");
|
||||
|
|
|
|||
|
|
@ -157,6 +157,9 @@ namespace
|
|||
sBugSplatSender->setDefaultUserEmail( WCSTR(STRINGIZE(LLOSInfo::instance().getOSStringSimple() << " (" << ADDRESS_SIZE << "-bit, flavor " << flavor <<")")));
|
||||
// </FS:ND>
|
||||
|
||||
//<FS:ND/> Clear out username first, as we get some crashes that has the OS set as username, let's see if this fixes it.
|
||||
sBugSplatSender->setDefaultUserName( WCSTR("<unset>") );
|
||||
|
||||
// <FS:ND> Only send avatar name if enabled via prefs
|
||||
if (gCrashSettings.getBOOL("CrashSubmitName"))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -616,8 +616,12 @@ void LLDrawPoolAlpha::renderEmissives(U32 mask, std::vector<LLDrawInfo*>& emissi
|
|||
|
||||
void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)
|
||||
{
|
||||
BOOL batch_fullbrights = gSavedSettings.getBOOL("RenderAlphaBatchFullbrights");
|
||||
BOOL batch_emissives = gSavedSettings.getBOOL("RenderAlphaBatchEmissives");
|
||||
// <FS:Ansariel> Tweak performance
|
||||
//BOOL batch_fullbrights = gSavedSettings.getBOOL("RenderAlphaBatchFullbrights");
|
||||
//BOOL batch_emissives = gSavedSettings.getBOOL("RenderAlphaBatchEmissives");
|
||||
static LLCachedControl<bool> batch_fullbrights(gSavedSettings, "RenderAlphaBatchFullbrights");
|
||||
static LLCachedControl<bool> batch_emissives(gSavedSettings, "RenderAlphaBatchEmissives");
|
||||
// </FS:Ansariel>
|
||||
BOOL initialized_lighting = FALSE;
|
||||
BOOL light_enabled = TRUE;
|
||||
|
||||
|
|
@ -821,7 +825,11 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)
|
|||
// If this alpha mesh has glow, then draw it a second time to add the destination-alpha (=glow). Interleaving these state-changing calls is expensive, but glow must be drawn Z-sorted with alpha.
|
||||
if (current_shader &&
|
||||
draw_glow_for_this_partition &&
|
||||
params.mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_EMISSIVE))
|
||||
// <FS:Ansariel> Re-add particle rendering optimization
|
||||
//params.mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_EMISSIVE))
|
||||
params.mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_EMISSIVE) &&
|
||||
(!params.mParticle || params.mHasGlow))
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_RENDER_ALPHA_EMISSIVE);
|
||||
|
||||
|
|
|
|||
|
|
@ -1956,17 +1956,6 @@ bool LLDrawPoolAvatar::getRiggedGeometry(
|
|||
face->setPoolType(LLDrawPool::POOL_AVATAR);
|
||||
}
|
||||
|
||||
//let getGeometryVolume know if a texture matrix is in play
|
||||
if (face->mTextureMatrix)
|
||||
{
|
||||
face->setState(LLFace::TEXTURE_ANIM);
|
||||
}
|
||||
else
|
||||
{
|
||||
face->clearState(LLFace::TEXTURE_ANIM);
|
||||
}
|
||||
|
||||
|
||||
//LL_INFOS() << "Rebuilt face " << face->getTEOffset() << " of " << face->getDrawable() << " at " << gFrameTimeSeconds << LL_ENDL;
|
||||
|
||||
// Let getGeometryVolume know if a texture matrix is in play
|
||||
|
|
|
|||
|
|
@ -832,11 +832,11 @@ LLColor3 LLDrawPoolWater::getDebugColor() const
|
|||
// <FS:Zi> Render speedup for water parameters
|
||||
void LLDrawPoolWater::onRenderTransparentWaterChanged()
|
||||
{
|
||||
mRenderTransparentWater=gSavedSettings.getBOOL("RenderTransparentWater");
|
||||
mRenderTransparentWater = gSavedSettings.getBOOL("RenderTransparentWater");
|
||||
}
|
||||
|
||||
void LLDrawPoolWater::onRenderWaterMipNormalChanged()
|
||||
{
|
||||
mRenderWaterMipNormal=gSavedSettings.getBOOL("RenderWaterMipNormal");
|
||||
mRenderWaterMipNormal = gSavedSettings.getBOOL("RenderWaterMipNormal");
|
||||
}
|
||||
// </FS:Zi>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
// Viewer includes
|
||||
#include "llagent.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llpresetsmanager.h"
|
||||
#include "lljoystickbutton.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewercamera.h"
|
||||
|
|
@ -42,6 +43,8 @@
|
|||
#include "llslider.h"
|
||||
#include "llfirstuse.h"
|
||||
#include "llhints.h"
|
||||
#include "lltabcontainer.h"
|
||||
#include "llvoavatarself.h"
|
||||
|
||||
static LLDefaultChildRegistry::Register<LLPanelCameraItem> r("panel_camera_item");
|
||||
|
||||
|
|
@ -52,7 +55,6 @@ const F32 ORBIT_NUDGE_RATE = 0.05f; // fraction of normal speed
|
|||
#define ORBIT "cam_rotate_stick"
|
||||
#define PAN "cam_track_stick"
|
||||
#define ZOOM "zoom"
|
||||
#define PRESETS "preset_views_list"
|
||||
#define CONTROLS "controls"
|
||||
|
||||
bool LLFloaterCamera::sFreeCamera = false;
|
||||
|
|
@ -281,13 +283,7 @@ void LLFloaterCamera::onAvatarEditingAppearance(bool editing)
|
|||
|
||||
void LLFloaterCamera::handleAvatarEditingAppearance(bool editing)
|
||||
{
|
||||
//camera presets (rear, front, etc.)
|
||||
getChildView("preset_views_list")->setEnabled(!editing);
|
||||
getChildView("presets_btn")->setEnabled(!editing);
|
||||
|
||||
//camera modes (object view, mouselook view)
|
||||
getChildView("camera_modes_list")->setEnabled(!editing);
|
||||
getChildView("avatarview_btn")->setEnabled(!editing);
|
||||
}
|
||||
|
||||
void LLFloaterCamera::update()
|
||||
|
|
@ -344,7 +340,6 @@ void LLFloaterCamera::onOpen(const LLSD& key)
|
|||
LLFirstUse::viewPopup();
|
||||
|
||||
mZoom->onOpen(key);
|
||||
setCameraFloaterTransparencyMode(LLSD(gSavedSettings.getBOOL("FSAlwaysOpaqueCameraControls"))); // <FS:PP> FIRE-5583, FIRE-5220: Option to show Camera Controls always opaque
|
||||
|
||||
// Returns to previous mode, see EXT-2727(View tool should remember state).
|
||||
// In case floater was just hidden and it isn't reset the mode
|
||||
|
|
@ -354,6 +349,8 @@ void LLFloaterCamera::onOpen(const LLSD& key)
|
|||
else
|
||||
toPrevMode();
|
||||
mClosed = FALSE;
|
||||
|
||||
populatePresetCombo();
|
||||
}
|
||||
|
||||
void LLFloaterCamera::onClose(bool app_quitting)
|
||||
|
|
@ -380,38 +377,49 @@ void LLFloaterCamera::onClose(bool app_quitting)
|
|||
LLFloaterCamera::LLFloaterCamera(const LLSD& val)
|
||||
: LLFloater(val),
|
||||
mClosed(FALSE),
|
||||
mUseFlatUI(false), // <AW: Flat cam floater>
|
||||
mCurrMode(CAMERA_CTRL_MODE_PAN),
|
||||
mPrevMode(CAMERA_CTRL_MODE_PAN)
|
||||
{
|
||||
LLHints::getInstance()->registerHintTarget("view_popup", getHandle());
|
||||
mCommitCallbackRegistrar.add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2));
|
||||
mCommitCallbackRegistrar.add("CameraPresets.Save", boost::bind(&LLFloaterCamera::onSavePreset, this));
|
||||
mCommitCallbackRegistrar.add("CameraPresets.ShowPresetsList", boost::bind(&LLFloaterReg::showInstance, "camera_presets", LLSD(), FALSE));
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLFloaterCamera::postBuild()
|
||||
{
|
||||
|
||||
// <FS:PP> FIRE-5583, FIRE-5220: Option to show Camera Controls always opaque
|
||||
// updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
|
||||
gSavedSettings.getControl("FSAlwaysOpaqueCameraControls")->getSignal()->connect(boost::bind(&LLFloaterCamera::setCameraFloaterTransparencyMode, this, _2));
|
||||
// </FS:PP>
|
||||
|
||||
mRotate = getChild<LLJoystickCameraRotate>(ORBIT);
|
||||
mZoom = findChild<LLPanelCameraZoom>(ZOOM);
|
||||
mTrack = getChild<LLJoystickCameraTrack>(PAN);
|
||||
// <AW: Flat cam floater>
|
||||
if (hasString("use_flat_ui"))
|
||||
mPresetCombo = getChild<LLComboBox>("preset_combo");
|
||||
|
||||
// <FS:Ansariel> Improved camera floater
|
||||
//getChild<LLTextBox>("precise_ctrs_label")->setShowCursorHand(false);
|
||||
//getChild<LLTextBox>("precise_ctrs_label")->setSoundFlags(LLView::MOUSE_UP);
|
||||
//getChild<LLTextBox>("precise_ctrs_label")->setClickedCallback(boost::bind(&LLFloaterReg::showInstance, "prefs_view_advanced", LLSD(), FALSE));
|
||||
// </FS:Ansariel>
|
||||
|
||||
// <FS:Ansariel> Phototools support
|
||||
LLButton* presets_btn = findChild<LLButton>("presets_btn");
|
||||
if (presets_btn)
|
||||
{
|
||||
mUseFlatUI = true;
|
||||
presets_btn->setCommitCallback(boost::bind(&LLFloaterCamera::switchViews, this, CAMERA_CTRL_MODE_PRESETS));
|
||||
}
|
||||
else
|
||||
// </AW: Flat cam floater>
|
||||
LLButton* modes_btn = findChild<LLButton>("avatarview_btn");
|
||||
if (modes_btn)
|
||||
{
|
||||
assignButton2Mode(CAMERA_CTRL_MODE_MODES, "avatarview_btn");
|
||||
assignButton2Mode(CAMERA_CTRL_MODE_PAN, "pan_btn");
|
||||
assignButton2Mode(CAMERA_CTRL_MODE_PRESETS, "presets_btn");
|
||||
modes_btn->setCommitCallback(boost::bind(&LLFloaterCamera::switchViews, this, CAMERA_CTRL_MODE_MODES));
|
||||
}
|
||||
LLButton* pan_btn = findChild<LLButton>("pan_btn");
|
||||
if (pan_btn)
|
||||
{
|
||||
pan_btn->setCommitCallback(boost::bind(&LLFloaterCamera::switchViews, this, CAMERA_CTRL_MODE_PAN));
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
mPresetCombo->setCommitCallback(boost::bind(&LLFloaterCamera::onCustomPresetSelected, this));
|
||||
LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCamera::populatePresetCombo, this));
|
||||
|
||||
update();
|
||||
|
||||
|
|
@ -421,21 +429,14 @@ BOOL LLFloaterCamera::postBuild()
|
|||
return LLFloater::postBuild();
|
||||
}
|
||||
|
||||
// <FS:PP> FIRE-5583, FIRE-5220: Option to show Camera Controls always opaque
|
||||
void LLFloaterCamera::setCameraFloaterTransparencyMode(const LLSD &data)
|
||||
F32 LLFloaterCamera::getCurrentTransparency()
|
||||
{
|
||||
if(data.asBoolean())
|
||||
{
|
||||
updateTransparency(TT_FORCE_OPAQUE);
|
||||
setBackgroundOpaque(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
|
||||
setBackgroundOpaque(false);
|
||||
}
|
||||
|
||||
static LLCachedControl<F32> camera_opacity(gSavedSettings, "CameraOpacity");
|
||||
static LLCachedControl<F32> active_floater_transparency(gSavedSettings, "ActiveFloaterTransparency");
|
||||
return llmin(camera_opacity(), active_floater_transparency());
|
||||
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
void LLFloaterCamera::fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel)
|
||||
{
|
||||
|
|
@ -499,48 +500,12 @@ void LLFloaterCamera::setMode(ECameraControlMode mode)
|
|||
updateState();
|
||||
}
|
||||
|
||||
void LLFloaterCamera::setModeTitle(const ECameraControlMode mode)
|
||||
{
|
||||
std::string title;
|
||||
// <AW: Flat cam floater>
|
||||
if (mUseFlatUI)
|
||||
{
|
||||
title = getString("flat_ui_title");
|
||||
}
|
||||
else
|
||||
// </AW: Flat cam floater>
|
||||
{
|
||||
switch(mode)
|
||||
{
|
||||
case CAMERA_CTRL_MODE_MODES:
|
||||
title = getString("camera_modes_title");
|
||||
break;
|
||||
case CAMERA_CTRL_MODE_PAN:
|
||||
title = getString("pan_mode_title");
|
||||
break;
|
||||
case CAMERA_CTRL_MODE_PRESETS:
|
||||
title = getString("presets_mode_title");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
setTitle(title);
|
||||
}
|
||||
|
||||
void LLFloaterCamera::switchMode(ECameraControlMode mode)
|
||||
{
|
||||
setMode(mode);
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case CAMERA_CTRL_MODE_MODES:
|
||||
if(sFreeCamera)
|
||||
{
|
||||
switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
|
||||
}
|
||||
break;
|
||||
|
||||
case CAMERA_CTRL_MODE_PAN:
|
||||
sFreeCamera = false;
|
||||
clear_camera_tool();
|
||||
|
|
@ -564,45 +529,8 @@ void LLFloaterCamera::switchMode(ECameraControlMode mode)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void LLFloaterCamera::onClickBtn(ECameraControlMode mode)
|
||||
{
|
||||
// check for a click on active button
|
||||
if (mCurrMode == mode) mMode2Button[mode]->setToggleState(TRUE);
|
||||
|
||||
switchMode(mode);
|
||||
|
||||
}
|
||||
|
||||
void LLFloaterCamera::assignButton2Mode(ECameraControlMode mode, const std::string& button_name)
|
||||
{
|
||||
LLButton* button = getChild<LLButton>(button_name);
|
||||
|
||||
button->setClickedCallback(boost::bind(&LLFloaterCamera::onClickBtn, this, mode));
|
||||
mMode2Button[mode] = button;
|
||||
}
|
||||
|
||||
void LLFloaterCamera::updateState()
|
||||
{
|
||||
// <AW: Flat cam floater>
|
||||
if (mUseFlatUI)
|
||||
{
|
||||
setModeTitle(mCurrMode);
|
||||
updateItemsSelection();
|
||||
return;
|
||||
}
|
||||
// </AW: Flat cam floater>
|
||||
|
||||
getChildView(ZOOM)->setVisible(CAMERA_CTRL_MODE_PAN == mCurrMode);
|
||||
|
||||
bool show_presets = (CAMERA_CTRL_MODE_PRESETS == mCurrMode) || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode
|
||||
&& CAMERA_CTRL_MODE_PRESETS == mPrevMode);
|
||||
getChildView(PRESETS)->setVisible(show_presets);
|
||||
|
||||
bool show_camera_modes = CAMERA_CTRL_MODE_MODES == mCurrMode || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode
|
||||
&& CAMERA_CTRL_MODE_MODES == mPrevMode);
|
||||
getChildView("camera_modes_list")->setVisible( show_camera_modes);
|
||||
|
||||
updateItemsSelection();
|
||||
|
||||
if (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode)
|
||||
|
|
@ -620,13 +548,13 @@ void LLFloaterCamera::updateState()
|
|||
|
||||
void LLFloaterCamera::updateItemsSelection()
|
||||
{
|
||||
ECameraPreset preset = (ECameraPreset) gSavedSettings.getU32("CameraPreset");
|
||||
ECameraPreset preset = (ECameraPreset) gSavedSettings.getU32("CameraPresetType");
|
||||
LLSD argument;
|
||||
argument["selected"] = preset == CAMERA_PRESET_REAR_VIEW;
|
||||
argument["selected"] = (preset == CAMERA_PRESET_REAR_VIEW) && !sFreeCamera;
|
||||
getChild<LLPanelCameraItem>("rear_view")->setValue(argument);
|
||||
argument["selected"] = preset == CAMERA_PRESET_GROUP_VIEW;
|
||||
argument["selected"] = (preset == CAMERA_PRESET_GROUP_VIEW) && !sFreeCamera;
|
||||
getChild<LLPanelCameraItem>("group_view")->setValue(argument);
|
||||
argument["selected"] = preset == CAMERA_PRESET_FRONT_VIEW;
|
||||
argument["selected"] = (preset == CAMERA_PRESET_FRONT_VIEW) && !sFreeCamera;
|
||||
getChild<LLPanelCameraItem>("front_view")->setValue(argument);
|
||||
argument["selected"] = gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK;
|
||||
getChild<LLPanelCameraItem>("mouselook_view")->setValue(argument);
|
||||
|
|
@ -634,55 +562,110 @@ void LLFloaterCamera::updateItemsSelection()
|
|||
getChild<LLPanelCameraItem>("object_view")->setValue(argument);
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void LLFloaterCamera::onClickCameraItem(const LLSD& param)
|
||||
{
|
||||
std::string name = param.asString();
|
||||
|
||||
// <AW: Flat cam floater>
|
||||
//if ("mouselook_view" == name)
|
||||
LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
|
||||
|
||||
if ("reset_view" == name)
|
||||
{
|
||||
gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
|
||||
gAgentCamera.changeCameraToDefault();
|
||||
if (camera_floater)
|
||||
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
|
||||
}
|
||||
else if ("mouselook_view" == name)
|
||||
// </AW: Flat cam floater>
|
||||
if ("mouselook_view" == name)
|
||||
{
|
||||
gAgentCamera.changeCameraToMouselook();
|
||||
}
|
||||
// <AW: Flat cam floater>
|
||||
// else if ("object_view" == name)
|
||||
// {
|
||||
// LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
|
||||
// if (camera_floater)
|
||||
// camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
|
||||
// }
|
||||
else if ("object_view" == name)
|
||||
{
|
||||
LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
|
||||
if (camera_floater)
|
||||
{
|
||||
if (camera_floater->mUseFlatUI)
|
||||
{
|
||||
camera_floater->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA ? camera_floater->switchMode(CAMERA_CTRL_MODE_PAN) : camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
|
||||
}
|
||||
else
|
||||
{
|
||||
camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
|
||||
}
|
||||
camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
|
||||
camera_floater->updateItemsSelection();
|
||||
camera_floater->fromFreeToPresets();
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Phototools camera
|
||||
camera_floater = LLFloaterCamera::findPhototoolsInstance();
|
||||
if (camera_floater)
|
||||
{
|
||||
camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
|
||||
camera_floater->updateItemsSelection();
|
||||
camera_floater->fromFreeToPresets();
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
// </AW: Flat cam floater>
|
||||
// <FS:Ansariel> Improved camera floater
|
||||
else if ("reset_view" == name)
|
||||
{
|
||||
LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
|
||||
if (camera_floater)
|
||||
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
|
||||
|
||||
// <FS:Ansariel> Phototools camera
|
||||
camera_floater = LLFloaterCamera::findPhototoolsInstance();
|
||||
if (camera_floater)
|
||||
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
|
||||
// </FS:Ansariel>
|
||||
|
||||
gAgentCamera.changeCameraToDefault();
|
||||
switchToPreset("rear_view");
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
else
|
||||
{
|
||||
LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
|
||||
if (camera_floater)
|
||||
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
|
||||
|
||||
// <FS:Ansariel> Phototools camera
|
||||
camera_floater = LLFloaterCamera::findPhototoolsInstance();
|
||||
if (camera_floater)
|
||||
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
|
||||
// </FS:Ansariel>
|
||||
|
||||
switchToPreset(name);
|
||||
}
|
||||
}
|
||||
|
||||
// LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();// <AW: Flat cam floater>
|
||||
/*static*/
|
||||
void LLFloaterCamera::switchToPreset(const std::string& name)
|
||||
{
|
||||
sFreeCamera = false;
|
||||
clear_camera_tool();
|
||||
if (PRESETS_REAR_VIEW == name)
|
||||
{
|
||||
gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
|
||||
}
|
||||
else if (PRESETS_SIDE_VIEW == name)
|
||||
{
|
||||
gAgentCamera.switchCameraPreset(CAMERA_PRESET_GROUP_VIEW);
|
||||
}
|
||||
else if (PRESETS_FRONT_VIEW == name)
|
||||
{
|
||||
gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW);
|
||||
}
|
||||
else
|
||||
{
|
||||
gAgentCamera.switchCameraPreset(CAMERA_PRESET_CUSTOM);
|
||||
}
|
||||
|
||||
if (gSavedSettings.getString("PresetCameraActive") != name)
|
||||
{
|
||||
LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, name);
|
||||
}
|
||||
|
||||
if (isAgentAvatarValid() && gAgentAvatarp->getParent())
|
||||
{
|
||||
LLQuaternion sit_rot = gSavedSettings.getQuaternion("AvatarSitRotation");
|
||||
if (sit_rot != LLQuaternion())
|
||||
{
|
||||
gAgent.rotate(~gAgent.getFrameAgent().getQuaternion());
|
||||
gAgent.rotate(sit_rot);
|
||||
}
|
||||
else
|
||||
{
|
||||
gAgentCamera.rotateToInitSitRot();
|
||||
}
|
||||
}
|
||||
gAgentCamera.resetCameraZoomFraction();
|
||||
|
||||
LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
|
||||
if (camera_floater)
|
||||
{
|
||||
camera_floater->updateItemsSelection();
|
||||
|
|
@ -691,37 +674,6 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param)
|
|||
|
||||
// <FS:Ansariel> Phototools camera
|
||||
camera_floater = LLFloaterCamera::findPhototoolsInstance();
|
||||
|
||||
if ("reset_view" == name)
|
||||
{
|
||||
gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
|
||||
gAgentCamera.changeCameraToDefault();
|
||||
if (camera_floater)
|
||||
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
|
||||
}
|
||||
else if ("mouselook_view" == name)
|
||||
{
|
||||
gAgentCamera.changeCameraToMouselook();
|
||||
}
|
||||
else if ("object_view" == name)
|
||||
{
|
||||
if (camera_floater)
|
||||
{
|
||||
if (camera_floater->mUseFlatUI)
|
||||
{
|
||||
camera_floater->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA ? camera_floater->switchMode(CAMERA_CTRL_MODE_PAN) : camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
|
||||
}
|
||||
else
|
||||
{
|
||||
camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switchToPreset(name);
|
||||
}
|
||||
|
||||
if (camera_floater)
|
||||
{
|
||||
camera_floater->updateItemsSelection();
|
||||
|
|
@ -730,36 +682,84 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param)
|
|||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
/*static*/
|
||||
void LLFloaterCamera::switchToPreset(const std::string& name)
|
||||
{
|
||||
sFreeCamera = false;
|
||||
clear_camera_tool();
|
||||
if ("rear_view" == name)
|
||||
{
|
||||
gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
|
||||
}
|
||||
else if ("group_view" == name)
|
||||
{
|
||||
gAgentCamera.switchCameraPreset(CAMERA_PRESET_GROUP_VIEW);
|
||||
}
|
||||
else if ("front_view" == name)
|
||||
{
|
||||
gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterCamera::fromFreeToPresets()
|
||||
{
|
||||
// <AW: Flat cam floater>
|
||||
// if (!sFreeCamera && mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && mPrevMode == CAMERA_CTRL_MODE_PRESETS)
|
||||
if(mUseFlatUI && !sFreeCamera && mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && mPrevMode == CAMERA_CTRL_MODE_PAN)
|
||||
{
|
||||
switchMode(CAMERA_CTRL_MODE_PAN);
|
||||
}
|
||||
else if (!sFreeCamera && mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && mPrevMode == CAMERA_CTRL_MODE_PRESETS)
|
||||
// </AW: Flat cam floater>
|
||||
if (!sFreeCamera && mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && mPrevMode == CAMERA_CTRL_MODE_PRESETS)
|
||||
{
|
||||
switchMode(CAMERA_CTRL_MODE_PRESETS);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterCamera::populatePresetCombo()
|
||||
{
|
||||
LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, EDefaultOptions::DEFAULT_HIDE);
|
||||
std::string active_preset_name = gSavedSettings.getString("PresetCameraActive");
|
||||
if (active_preset_name.empty())
|
||||
{
|
||||
gSavedSettings.setU32("CameraPresetType", CAMERA_PRESET_CUSTOM);
|
||||
updateItemsSelection();
|
||||
mPresetCombo->setLabel(getString("inactive_combo_text"));
|
||||
}
|
||||
else if ((ECameraPreset)gSavedSettings.getU32("CameraPresetType") == CAMERA_PRESET_CUSTOM)
|
||||
{
|
||||
mPresetCombo->selectByValue(active_preset_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
mPresetCombo->setLabel(getString("inactive_combo_text"));
|
||||
}
|
||||
updateItemsSelection();
|
||||
}
|
||||
|
||||
void LLFloaterCamera::onSavePreset()
|
||||
{
|
||||
LLFloaterReg::hideInstance("delete_pref_preset", PRESETS_CAMERA);
|
||||
LLFloaterReg::hideInstance("load_pref_preset", PRESETS_CAMERA);
|
||||
|
||||
LLFloaterReg::showInstance("save_camera_preset");
|
||||
}
|
||||
|
||||
void LLFloaterCamera::onCustomPresetSelected()
|
||||
{
|
||||
std::string selected_preset = mPresetCombo->getSelectedItemLabel();
|
||||
if (getString("inactive_combo_text") != selected_preset)
|
||||
{
|
||||
switchToPreset(selected_preset);
|
||||
}
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Phototools support
|
||||
void LLFloaterCamera::switchViews(ECameraControlMode mode)
|
||||
{
|
||||
switch (mode)
|
||||
{
|
||||
case CAMERA_CTRL_MODE_PRESETS:
|
||||
getChildView("preset_views_list")->setVisible(TRUE);
|
||||
getChildView("camera_modes_list")->setVisible(FALSE);
|
||||
getChildView("zoom")->setVisible(FALSE);
|
||||
getChild<LLButton>("presets_btn")->setToggleState(TRUE);
|
||||
getChild<LLButton>("avatarview_btn")->setToggleState(FALSE);
|
||||
getChild<LLButton>("pan_btn")->setToggleState(FALSE);
|
||||
break;
|
||||
case CAMERA_CTRL_MODE_MODES:
|
||||
getChildView("preset_views_list")->setVisible(FALSE);
|
||||
getChildView("camera_modes_list")->setVisible(TRUE);
|
||||
getChildView("zoom")->setVisible(FALSE);
|
||||
getChild<LLButton>("presets_btn")->setToggleState(FALSE);
|
||||
getChild<LLButton>("avatarview_btn")->setToggleState(TRUE);
|
||||
getChild<LLButton>("pan_btn")->setToggleState(FALSE);
|
||||
break;
|
||||
case CAMERA_CTRL_MODE_PAN:
|
||||
getChildView("preset_views_list")->setVisible(FALSE);
|
||||
getChildView("camera_modes_list")->setVisible(FALSE);
|
||||
getChildView("zoom")->setVisible(TRUE);
|
||||
getChild<LLButton>("presets_btn")->setToggleState(FALSE);
|
||||
getChild<LLButton>("avatarview_btn")->setToggleState(FALSE);
|
||||
getChild<LLButton>("pan_btn")->setToggleState(TRUE);
|
||||
break;
|
||||
default:
|
||||
LL_WARNS() << "Tried to switch to unsupported mode: " << mode << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
|
|
|||
|
|
@ -36,13 +36,14 @@ class LLJoystickCameraRotate;
|
|||
class LLJoystickCameraTrack;
|
||||
class LLFloaterReg;
|
||||
class LLPanelCameraZoom;
|
||||
class LLComboBox;
|
||||
|
||||
enum ECameraControlMode
|
||||
{
|
||||
CAMERA_CTRL_MODE_MODES,
|
||||
CAMERA_CTRL_MODE_PAN,
|
||||
CAMERA_CTRL_MODE_FREE_CAMERA,
|
||||
CAMERA_CTRL_MODE_PRESETS
|
||||
CAMERA_CTRL_MODE_PRESETS,
|
||||
CAMERA_CTRL_MODE_MODES // <FS:Ansariel> Phototools support
|
||||
};
|
||||
|
||||
class LLFloaterCamera : public LLFloater
|
||||
|
|
@ -50,7 +51,6 @@ class LLFloaterCamera : public LLFloater
|
|||
friend class LLFloaterReg;
|
||||
|
||||
public:
|
||||
|
||||
/* whether in free camera mode */
|
||||
static bool inFreeCameraMode();
|
||||
/* callback for camera items selection changing */
|
||||
|
|
@ -77,12 +77,15 @@ public:
|
|||
virtual void onOpen(const LLSD& key);
|
||||
virtual void onClose(bool app_quitting);
|
||||
|
||||
void onSavePreset();
|
||||
void onCustomPresetSelected();
|
||||
|
||||
void populatePresetCombo();
|
||||
|
||||
LLJoystickCameraRotate* mRotate;
|
||||
LLPanelCameraZoom* mZoom;
|
||||
LLJoystickCameraTrack* mTrack;
|
||||
|
||||
void setCameraFloaterTransparencyMode(const LLSD &data); // <FS:PP> FIRE-5583, FIRE-5220: Option to show Camera Controls always opaque
|
||||
|
||||
private:
|
||||
|
||||
LLFloaterCamera(const LLSD& val);
|
||||
|
|
@ -95,6 +98,10 @@ private:
|
|||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
F32 getCurrentTransparency();
|
||||
|
||||
void onViewButtonClick(const LLSD& user_data);
|
||||
|
||||
ECameraControlMode determineMode();
|
||||
|
||||
/* resets to the previous mode */
|
||||
|
|
@ -112,26 +119,24 @@ private:
|
|||
/* update camera modes items selection and camera preset items selection according to the currently selected preset */
|
||||
void updateItemsSelection();
|
||||
|
||||
void onClickBtn(ECameraControlMode mode);
|
||||
void assignButton2Mode(ECameraControlMode mode, const std::string& button_name);
|
||||
|
||||
// fills flatlist with items from given panel
|
||||
void fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel);
|
||||
|
||||
void handleAvatarEditingAppearance(bool editing);
|
||||
|
||||
// <FS:Ansariel> Phototools support
|
||||
void switchViews(ECameraControlMode mode);
|
||||
|
||||
// set to true when free camera mode is selected in modes list
|
||||
// remains true until preset camera mode is chosen, or pan button is clicked, or escape pressed
|
||||
static bool sFreeCamera;
|
||||
static bool sAppearanceEditing;
|
||||
BOOL mClosed;
|
||||
|
||||
void setModeTitle(const ECameraControlMode mode);
|
||||
|
||||
bool mUseFlatUI; // <AW: Flat cam floater>
|
||||
ECameraControlMode mPrevMode;
|
||||
ECameraControlMode mCurrMode;
|
||||
std::map<ECameraControlMode, LLButton*> mMode2Button;
|
||||
|
||||
LLComboBox* mPresetCombo;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -0,0 +1,145 @@
|
|||
/**
|
||||
* @file llfloatercamerapresets.cpp
|
||||
*
|
||||
* $LicenseInfo:firstyear=2019&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2019, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llfloatercamerapresets.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llpresetsmanager.h"
|
||||
#include "llviewercontrol.h"
|
||||
|
||||
LLFloaterCameraPresets::LLFloaterCameraPresets(const LLSD& key)
|
||||
: LLFloater(key)
|
||||
{}
|
||||
|
||||
LLFloaterCameraPresets::~LLFloaterCameraPresets()
|
||||
{}
|
||||
|
||||
BOOL LLFloaterCameraPresets::postBuild()
|
||||
{
|
||||
mPresetList = getChild<LLFlatListView>("preset_list");
|
||||
|
||||
LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCameraPresets::populateList, this));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
void LLFloaterCameraPresets::onOpen(const LLSD& key)
|
||||
{
|
||||
populateList();
|
||||
}
|
||||
|
||||
void LLFloaterCameraPresets::populateList()
|
||||
{
|
||||
mPresetList->clear();
|
||||
|
||||
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
|
||||
std::list<std::string> preset_names;
|
||||
|
||||
presetsMgr->loadPresetNamesFromDir(PRESETS_CAMERA, preset_names, DEFAULT_BOTTOM);
|
||||
|
||||
for (std::list<std::string>::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it)
|
||||
{
|
||||
const std::string& name = *it;
|
||||
bool is_default = presetsMgr->isDefaultCameraPreset(name);
|
||||
LLCameraPresetFlatItem* item = new LLCameraPresetFlatItem(name, is_default);
|
||||
item->postBuild();
|
||||
mPresetList->addItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
LLCameraPresetFlatItem::LLCameraPresetFlatItem(const std::string &preset_name, bool is_default)
|
||||
: LLPanel(),
|
||||
mPresetName(preset_name),
|
||||
mIsDefaultPrest(is_default)
|
||||
{
|
||||
mCommitCallbackRegistrar.add("CameraPresets.Delete", boost::bind(&LLCameraPresetFlatItem::onDeleteBtnClick, this));
|
||||
mCommitCallbackRegistrar.add("CameraPresets.Reset", boost::bind(&LLCameraPresetFlatItem::onResetBtnClick, this));
|
||||
buildFromFile("panel_camera_preset_item.xml");
|
||||
}
|
||||
|
||||
LLCameraPresetFlatItem::~LLCameraPresetFlatItem()
|
||||
{
|
||||
}
|
||||
|
||||
BOOL LLCameraPresetFlatItem::postBuild()
|
||||
{
|
||||
mDeleteBtn = getChild<LLButton>("delete_btn");
|
||||
mDeleteBtn->setVisible(false);
|
||||
|
||||
mResetBtn = getChild<LLButton>("reset_btn");
|
||||
mResetBtn->setVisible(false);
|
||||
|
||||
LLStyle::Params style;
|
||||
LLTextBox* name_text = getChild<LLTextBox>("preset_name");
|
||||
LLFontDescriptor new_desc(name_text->getFont()->getFontDesc());
|
||||
new_desc.setStyle(mIsDefaultPrest ? LLFontGL::ITALIC : LLFontGL::NORMAL);
|
||||
LLFontGL* new_font = LLFontGL::getFont(new_desc);
|
||||
style.font = new_font;
|
||||
name_text->setText(mPresetName, style);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLCameraPresetFlatItem::onMouseEnter(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mDeleteBtn->setVisible(!mIsDefaultPrest);
|
||||
mResetBtn->setVisible(mIsDefaultPrest);
|
||||
getChildView("hovered_icon")->setVisible(true);
|
||||
LLPanel::onMouseEnter(x, y, mask);
|
||||
}
|
||||
|
||||
void LLCameraPresetFlatItem::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mDeleteBtn->setVisible(false);
|
||||
mResetBtn->setVisible(false);
|
||||
getChildView("hovered_icon")->setVisible(false);
|
||||
LLPanel::onMouseLeave(x, y, mask);
|
||||
}
|
||||
|
||||
void LLCameraPresetFlatItem::setValue(const LLSD& value)
|
||||
{
|
||||
if (!value.isMap()) return;;
|
||||
if (!value.has("selected")) return;
|
||||
getChildView("selected_icon")->setVisible(value["selected"]);
|
||||
}
|
||||
|
||||
void LLCameraPresetFlatItem::onDeleteBtnClick()
|
||||
{
|
||||
if (!LLPresetsManager::getInstance()->deletePreset(PRESETS_CAMERA, mPresetName))
|
||||
{
|
||||
LLSD args;
|
||||
args["NAME"] = mPresetName;
|
||||
LLNotificationsUtil::add("PresetNotDeleted", args);
|
||||
}
|
||||
else if (gSavedSettings.getString("PresetCameraActive") == mPresetName)
|
||||
{
|
||||
gSavedSettings.setString("PresetCameraActive", "");
|
||||
}
|
||||
}
|
||||
|
||||
void LLCameraPresetFlatItem::onResetBtnClick()
|
||||
{
|
||||
LLPresetsManager::getInstance()->resetCameraPreset(mPresetName);
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
/**
|
||||
* @file llfloatercamerapresets.h
|
||||
*
|
||||
* $LicenseInfo:firstyear=2019&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2019, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
#ifndef LLFLOATERCAMERAPRESETS_H
|
||||
#define LLFLOATERCAMERAPRESETS_H
|
||||
|
||||
#include "llfloater.h"
|
||||
#include "llflatlistview.h"
|
||||
|
||||
class LLFloaterReg;
|
||||
|
||||
class LLFloaterCameraPresets : public LLFloater
|
||||
{
|
||||
friend class LLFloaterReg;
|
||||
|
||||
virtual BOOL postBuild();
|
||||
virtual void onOpen(const LLSD& key);
|
||||
|
||||
void populateList();
|
||||
|
||||
private:
|
||||
LLFloaterCameraPresets(const LLSD& key);
|
||||
~LLFloaterCameraPresets();
|
||||
|
||||
LLFlatListView* mPresetList;
|
||||
};
|
||||
|
||||
class LLCameraPresetFlatItem : public LLPanel
|
||||
{
|
||||
public:
|
||||
LLCameraPresetFlatItem(const std::string &preset_name, bool is_default);
|
||||
virtual ~LLCameraPresetFlatItem();
|
||||
|
||||
void setValue(const LLSD& value);
|
||||
|
||||
virtual BOOL postBuild();
|
||||
virtual void onMouseEnter(S32 x, S32 y, MASK mask);
|
||||
virtual void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
|
||||
private:
|
||||
void onDeleteBtnClick();
|
||||
void onResetBtnClick();
|
||||
|
||||
LLButton* mDeleteBtn;
|
||||
LLButton* mResetBtn;
|
||||
|
||||
std::string mPresetName;
|
||||
bool mIsDefaultPrest;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -60,13 +60,15 @@ void LLFloaterDeletePrefPreset::onOpen(const LLSD& key)
|
|||
{
|
||||
mSubdirectory = key.asString();
|
||||
std::string floater_title = getString(std::string("title_") + mSubdirectory);
|
||||
|
||||
setTitle(floater_title);
|
||||
|
||||
LLComboBox* combo = getChild<LLComboBox>("preset_combo");
|
||||
|
||||
EDefaultOptions option = DEFAULT_HIDE;
|
||||
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
|
||||
bool action;
|
||||
action = LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
|
||||
|
||||
LLButton* delete_btn = getChild<LLButton>("delete");
|
||||
delete_btn->setEnabled(action);
|
||||
}
|
||||
|
||||
void LLFloaterDeletePrefPreset::onBtnDelete()
|
||||
|
|
@ -80,6 +82,13 @@ void LLFloaterDeletePrefPreset::onBtnDelete()
|
|||
args["NAME"] = name;
|
||||
LLNotificationsUtil::add("PresetNotDeleted", args);
|
||||
}
|
||||
else if (mSubdirectory == PRESETS_CAMERA)
|
||||
{
|
||||
if (gSavedSettings.getString("PresetCameraActive") == name)
|
||||
{
|
||||
gSavedSettings.setString("PresetCameraActive", "");
|
||||
}
|
||||
}
|
||||
|
||||
closeFloater();
|
||||
}
|
||||
|
|
@ -87,12 +96,10 @@ void LLFloaterDeletePrefPreset::onBtnDelete()
|
|||
void LLFloaterDeletePrefPreset::onPresetsListChange()
|
||||
{
|
||||
LLComboBox* combo = getChild<LLComboBox>("preset_combo");
|
||||
LLButton* delete_btn = getChild<LLButton>("delete");
|
||||
|
||||
EDefaultOptions option = DEFAULT_HIDE;
|
||||
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
|
||||
|
||||
delete_btn->setEnabled(0 != combo->getItemCount());
|
||||
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
|
||||
}
|
||||
|
||||
void LLFloaterDeletePrefPreset::onBtnCancel()
|
||||
|
|
|
|||
|
|
@ -42,7 +42,8 @@ LLFloaterLoadPrefPreset::LLFloaterLoadPrefPreset(const LLSD &key)
|
|||
|
||||
// virtual
|
||||
BOOL LLFloaterLoadPrefPreset::postBuild()
|
||||
{ LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
|
||||
{
|
||||
LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
|
||||
if (preferences)
|
||||
{
|
||||
preferences->addDependentFloater(this);
|
||||
|
|
|
|||
|
|
@ -1111,7 +1111,7 @@ void LLFloaterPreference::cancel()
|
|||
// hide spellchecker settings folder
|
||||
LLFloaterReg::hideInstance("prefs_spellchecker");
|
||||
|
||||
// hide advancede floater
|
||||
// hide advanced graphics floater
|
||||
LLFloaterReg::hideInstance("prefs_graphics_advanced");
|
||||
|
||||
// reverts any changes to current skin
|
||||
|
|
@ -1296,7 +1296,8 @@ void LLFloaterPreference::onOpen(const LLSD& key)
|
|||
saveSettings();
|
||||
|
||||
// Make sure there is a default preference file
|
||||
LLPresetsManager::getInstance()->createMissingDefault();
|
||||
LLPresetsManager::getInstance()->createMissingDefault(PRESETS_CAMERA);
|
||||
LLPresetsManager::getInstance()->createMissingDefault(PRESETS_GRAPHIC);
|
||||
|
||||
// <FS:Ansariel> Fix resetting graphics preset on cancel
|
||||
saveGraphicsPreset(gSavedSettings.getString("PresetGraphicActive"));
|
||||
|
|
@ -1308,13 +1309,14 @@ void LLFloaterPreference::onOpen(const LLSD& key)
|
|||
//LLButton* save_btn = findChild<LLButton>("PrefSaveButton");
|
||||
//LLButton* delete_btn = findChild<LLButton>("PrefDeleteButton");
|
||||
//LLButton* exceptions_btn = findChild<LLButton>("RenderExceptionsButton");
|
||||
|
||||
//load_btn->setEnabled(started);
|
||||
//save_btn->setEnabled(started);
|
||||
//delete_btn->setEnabled(started);
|
||||
//exceptions_btn->setEnabled(started);
|
||||
//if (load_btn && save_btn && delete_btn && exceptions_btn)
|
||||
//{
|
||||
// load_btn->setEnabled(started);
|
||||
// save_btn->setEnabled(started);
|
||||
// delete_btn->setEnabled(started);
|
||||
// exceptions_btn->setEnabled(started);
|
||||
//}
|
||||
// </FS:Ansariel>
|
||||
|
||||
collectSearchableItems();
|
||||
if (!mFilterEdit->getText().empty())
|
||||
{
|
||||
|
|
@ -4114,20 +4116,17 @@ void LLPanelPreference::updateMediaAutoPlayCheckbox(LLUICtrl* ctrl)
|
|||
|
||||
void LLPanelPreference::deletePreset(const LLSD& user_data)
|
||||
{
|
||||
std::string subdirectory = user_data.asString();
|
||||
LLFloaterReg::showInstance("delete_pref_preset", subdirectory);
|
||||
LLFloaterReg::showInstance("delete_pref_preset", user_data.asString());
|
||||
}
|
||||
|
||||
void LLPanelPreference::savePreset(const LLSD& user_data)
|
||||
{
|
||||
std::string subdirectory = user_data.asString();
|
||||
LLFloaterReg::showInstance("save_pref_preset", subdirectory);
|
||||
LLFloaterReg::showInstance("save_pref_preset", user_data.asString());
|
||||
}
|
||||
|
||||
void LLPanelPreference::loadPreset(const LLSD& user_data)
|
||||
{
|
||||
std::string subdirectory = user_data.asString();
|
||||
LLFloaterReg::showInstance("load_pref_preset", subdirectory);
|
||||
LLFloaterReg::showInstance("load_pref_preset", user_data.asString());
|
||||
}
|
||||
|
||||
void LLPanelPreference::setHardwareDefaults()
|
||||
|
|
@ -4302,7 +4301,7 @@ BOOL LLPanelPreferenceGraphics::postBuild()
|
|||
|
||||
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
|
||||
presetsMgr->setPresetListChangeCallback(boost::bind(&LLPanelPreferenceGraphics::onPresetsListChange, this));
|
||||
presetsMgr->createMissingDefault(); // a no-op after the first time, but that's ok
|
||||
presetsMgr->createMissingDefault(PRESETS_GRAPHIC); // a no-op after the first time, but that's ok
|
||||
|
||||
|
||||
// <FS:CR> Hide this until we have fullscreen mode functional on OSX again
|
||||
|
|
|
|||
|
|
@ -0,0 +1,99 @@
|
|||
/**
|
||||
* @file llfloaterpreferenceviewadvanced.cpp
|
||||
* @brief floater for adjusting camera position
|
||||
*
|
||||
* $LicenseInfo:firstyear=2018&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2018, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llfloaterpreferenceviewadvanced.h"
|
||||
#include "llfloater.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llspinctrl.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llpresetsmanager.h"
|
||||
|
||||
|
||||
LLFloaterPreferenceViewAdvanced::LLFloaterPreferenceViewAdvanced(const LLSD& key)
|
||||
: LLFloater(key)
|
||||
{
|
||||
mCommitCallbackRegistrar.add("CommitSettings", boost::bind(&LLFloaterPreferenceViewAdvanced::onCommitSettings, this));
|
||||
mCommitCallbackRegistrar.add("CameraPresets.Save", boost::bind(&LLFloaterPreferenceViewAdvanced::onSavePreset, this)); // <FS:Ansariel> Improved camera floater
|
||||
}
|
||||
|
||||
LLFloaterPreferenceViewAdvanced::~LLFloaterPreferenceViewAdvanced()
|
||||
{}
|
||||
|
||||
void LLFloaterPreferenceViewAdvanced::updateCameraControl(const LLVector3& vector)
|
||||
{
|
||||
getChild<LLSpinCtrl>("camera_x")->setValue(vector[VX]);
|
||||
getChild<LLSpinCtrl>("camera_y")->setValue(vector[VY]);
|
||||
getChild<LLSpinCtrl>("camera_z")->setValue(vector[VZ]);
|
||||
}
|
||||
|
||||
void LLFloaterPreferenceViewAdvanced::updateFocusControl(const LLVector3d& vector3d)
|
||||
{
|
||||
getChild<LLSpinCtrl>("focus_x")->setValue(vector3d[VX]);
|
||||
getChild<LLSpinCtrl>("focus_y")->setValue(vector3d[VY]);
|
||||
getChild<LLSpinCtrl>("focus_z")->setValue(vector3d[VZ]);
|
||||
}
|
||||
|
||||
void LLFloaterPreferenceViewAdvanced::draw()
|
||||
{
|
||||
updateCameraControl(gAgentCamera.getCameraOffsetInitial());
|
||||
updateFocusControl(gAgentCamera.getFocusOffsetInitial());
|
||||
|
||||
LLFloater::draw();
|
||||
}
|
||||
|
||||
void LLFloaterPreferenceViewAdvanced::onCommitSettings()
|
||||
{
|
||||
LLVector3 vector;
|
||||
LLVector3d vector3d;
|
||||
|
||||
vector.mV[VX] = (F32)getChild<LLUICtrl>("camera_x")->getValue().asReal();
|
||||
vector.mV[VY] = (F32)getChild<LLUICtrl>("camera_y")->getValue().asReal();
|
||||
vector.mV[VZ] = (F32)getChild<LLUICtrl>("camera_z")->getValue().asReal();
|
||||
gSavedSettings.setVector3("CameraOffsetRearView", vector);
|
||||
|
||||
vector3d.mdV[VX] = (F32)getChild<LLUICtrl>("focus_x")->getValue().asReal();
|
||||
vector3d.mdV[VY] = (F32)getChild<LLUICtrl>("focus_y")->getValue().asReal();
|
||||
vector3d.mdV[VZ] = (F32)getChild<LLUICtrl>("focus_z")->getValue().asReal();
|
||||
gSavedSettings.setVector3d("FocusOffsetRearView", vector3d);
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Improved camera floater
|
||||
void LLFloaterPreferenceViewAdvanced::onSavePreset()
|
||||
{
|
||||
LLFloaterReg::hideInstance("delete_pref_preset", PRESETS_CAMERA);
|
||||
LLFloaterReg::hideInstance("load_pref_preset", PRESETS_CAMERA);
|
||||
|
||||
LLSD key;
|
||||
key["subdirectory"] = PRESETS_CAMERA;
|
||||
std::string current_preset = gSavedSettings.getString("PresetCameraActive");
|
||||
bool is_custom_preset = current_preset != "" && !LLPresetsManager::getInstance()->isDefaultCameraPreset(current_preset);
|
||||
key["index"] = is_custom_preset ? 1 : 0;
|
||||
LLFloaterReg::showInstance("save_pref_preset", key);
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
/**
|
||||
* @file llfloaterpreferenceviewadvanced.h
|
||||
* @brief floater for adjusting camera position
|
||||
*
|
||||
* $LicenseInfo:firstyear=2018&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2018, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LLFLOATERPREFERENCEVIEWADVANCED_H
|
||||
#define LLFLOATERPREFERENCEVIEWADVANCED_H
|
||||
|
||||
#include "llcontrol.h"
|
||||
#include "llfloater.h"
|
||||
|
||||
class LLFloaterPreferenceViewAdvanced
|
||||
: public LLFloater
|
||||
{
|
||||
friend class LLFloaterReg;
|
||||
|
||||
public:
|
||||
LLFloaterPreferenceViewAdvanced(const LLSD& key);
|
||||
virtual void draw();
|
||||
|
||||
void onCommitSettings();
|
||||
void updateCameraControl(const LLVector3& vector);
|
||||
void updateFocusControl(const LLVector3d& vector3d);
|
||||
void onSavePreset(); // <FS:Ansariel> Improved camera floater
|
||||
|
||||
private:
|
||||
virtual ~LLFloaterPreferenceViewAdvanced();
|
||||
};
|
||||
|
||||
#endif //LLFLOATERPREFERENCEVIEWADVANCED_H
|
||||
|
||||
|
|
@ -0,0 +1,173 @@
|
|||
/**
|
||||
* @file llfloatersavecamerapreset.cpp
|
||||
* @brief Floater to save a camera preset
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llfloatersavecamerapreset.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llbutton.h"
|
||||
#include "llcombobox.h"
|
||||
#include "llfloaterpreference.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "lllineeditor.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llpresetsmanager.h"
|
||||
#include "llradiogroup.h"
|
||||
#include "lltrans.h"
|
||||
#include "llvoavatarself.h"
|
||||
#include "llviewercontrol.h"
|
||||
|
||||
LLFloaterSaveCameraPreset::LLFloaterSaveCameraPreset(const LLSD &key)
|
||||
: LLModalDialog(key)
|
||||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLFloaterSaveCameraPreset::postBuild()
|
||||
{
|
||||
mPresetCombo = getChild<LLComboBox>("preset_combo");
|
||||
|
||||
mNameEditor = getChild<LLLineEditor>("preset_txt_editor");
|
||||
mNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterSaveCameraPreset::onPresetNameEdited, this), NULL);
|
||||
|
||||
mSaveButton = getChild<LLButton>("save");
|
||||
mSaveButton->setCommitCallback(boost::bind(&LLFloaterSaveCameraPreset::onBtnSave, this));
|
||||
|
||||
mSaveRadioGroup = getChild<LLRadioGroup>("radio_save_preset");
|
||||
mSaveRadioGroup->setCommitCallback(boost::bind(&LLFloaterSaveCameraPreset::onSwitchSaveReplace, this));
|
||||
|
||||
getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterSaveCameraPreset::onBtnCancel, this));
|
||||
|
||||
LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterSaveCameraPreset::onPresetsListChange, this));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLFloaterSaveCameraPreset::onPresetNameEdited()
|
||||
{
|
||||
if (mSaveRadioGroup->getSelectedIndex() == 0)
|
||||
{
|
||||
// Disable saving a preset having empty name.
|
||||
std::string name = mNameEditor->getValue();
|
||||
mSaveButton->setEnabled(!name.empty());
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterSaveCameraPreset::onOpen(const LLSD& key)
|
||||
{
|
||||
LLModalDialog::onOpen(key);
|
||||
S32 index = 0;
|
||||
if (key.has("index"))
|
||||
{
|
||||
index = key["index"].asInteger();
|
||||
}
|
||||
|
||||
LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, DEFAULT_BOTTOM);
|
||||
|
||||
mSaveRadioGroup->setSelectedIndex(index);
|
||||
onPresetNameEdited();
|
||||
onSwitchSaveReplace();
|
||||
}
|
||||
|
||||
void LLFloaterSaveCameraPreset::onBtnSave()
|
||||
{
|
||||
bool is_saving_new = mSaveRadioGroup->getSelectedIndex() == 0;
|
||||
std::string name = is_saving_new ? mNameEditor->getText() : mPresetCombo->getSimple();
|
||||
|
||||
if ((name == LLTrans::getString(PRESETS_DEFAULT)) || (name == PRESETS_DEFAULT))
|
||||
{
|
||||
LLNotificationsUtil::add("DefaultPresetNotSaved");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isAgentAvatarValid() && gAgentAvatarp->getParent())
|
||||
{
|
||||
gSavedSettings.setQuaternion("AvatarSitRotation", gAgent.getFrameAgent().getQuaternion());
|
||||
}
|
||||
if (gAgentCamera.isJoystickCameraUsed())
|
||||
{
|
||||
gSavedSettings.setVector3("CameraOffsetRearView", gAgentCamera.getCurrentCameraOffset());
|
||||
gSavedSettings.setVector3d("FocusOffsetRearView", gAgentCamera.getCurrentFocusOffset());
|
||||
gAgentCamera.resetCameraZoomFraction();
|
||||
gAgentCamera.setFocusOnAvatar(TRUE, TRUE, FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLVector3 camera_offset = gSavedSettings.getVector3("CameraOffsetRearView") * gAgentCamera.getCurrentCameraZoomFraction();
|
||||
gSavedSettings.setVector3("CameraOffsetRearView", camera_offset);
|
||||
gAgentCamera.resetCameraZoomFraction();
|
||||
}
|
||||
if (is_saving_new)
|
||||
{
|
||||
std::list<std::string> preset_names;
|
||||
LLPresetsManager::getInstance()->loadPresetNamesFromDir(PRESETS_CAMERA, preset_names, DEFAULT_HIDE);
|
||||
if (std::find(preset_names.begin(), preset_names.end(), name) != preset_names.end())
|
||||
{
|
||||
LLSD args;
|
||||
args["NAME"] = name;
|
||||
LLNotificationsUtil::add("PresetAlreadyExists", args);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!LLPresetsManager::getInstance()->savePreset(PRESETS_CAMERA, name))
|
||||
{
|
||||
LLSD args;
|
||||
args["NAME"] = name;
|
||||
LLNotificationsUtil::add("PresetNotSaved", args);
|
||||
}
|
||||
}
|
||||
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLFloaterSaveCameraPreset::onPresetsListChange()
|
||||
{
|
||||
LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, DEFAULT_BOTTOM);
|
||||
}
|
||||
|
||||
void LLFloaterSaveCameraPreset::onBtnCancel()
|
||||
{
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLFloaterSaveCameraPreset::onSwitchSaveReplace()
|
||||
{
|
||||
bool is_saving_new = mSaveRadioGroup->getSelectedIndex() == 0;
|
||||
std::string label = is_saving_new ? getString("btn_label_save") : getString("btn_label_replace");
|
||||
mSaveButton->setLabel(label);
|
||||
mNameEditor->setEnabled(is_saving_new);
|
||||
mPresetCombo->setEnabled(!is_saving_new);
|
||||
if (is_saving_new)
|
||||
{
|
||||
onPresetNameEdited();
|
||||
}
|
||||
else
|
||||
{
|
||||
mSaveButton->setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
/**
|
||||
* @file llfloatersavecamerapreset.h
|
||||
* @brief Floater to save a camera preset
|
||||
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLFLOATERSAVECAMERAPRESET_H
|
||||
#define LL_LLFLOATERSAVECAMERAPRESET_H
|
||||
|
||||
#include "llmodaldialog.h"
|
||||
|
||||
class LLComboBox;
|
||||
class LLRadioGroup;
|
||||
class LLLineEditor;
|
||||
|
||||
class LLFloaterSaveCameraPreset : public LLModalDialog
|
||||
{
|
||||
|
||||
public:
|
||||
LLFloaterSaveCameraPreset(const LLSD &key);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
void onBtnSave();
|
||||
void onBtnCancel();
|
||||
void onSwitchSaveReplace();
|
||||
|
||||
private:
|
||||
LLRadioGroup* mSaveRadioGroup;
|
||||
LLLineEditor* mNameEditor;
|
||||
LLComboBox* mPresetCombo;
|
||||
LLButton* mSaveButton;
|
||||
|
||||
void onPresetsListChange();
|
||||
void onPresetNameEdited();
|
||||
};
|
||||
|
||||
#endif // LL_LLFLOATERSAVECAMERAPRESET_H
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* @file llfloatersaveprefpreset.cpp
|
||||
* @brief Floater to save a graphics / camera preset
|
||||
* @brief Floater to save a graphics preset
|
||||
*
|
||||
* $LicenseInfo:firstyear=2014&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
|
|
@ -37,24 +37,27 @@
|
|||
#include "lltrans.h"
|
||||
|
||||
LLFloaterSavePrefPreset::LLFloaterSavePrefPreset(const LLSD &key)
|
||||
: LLFloater(key)
|
||||
: LLFloater(key)
|
||||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLFloaterSavePrefPreset::postBuild()
|
||||
{ LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
|
||||
{
|
||||
LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
|
||||
if (preferences)
|
||||
{
|
||||
preferences->addDependentFloater(this);
|
||||
}
|
||||
|
||||
getChild<LLComboBox>("preset_combo")->setTextEntryCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this));
|
||||
getChild<LLComboBox>("preset_combo")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this));
|
||||
getChild<LLButton>("save")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnSave, this));
|
||||
|
||||
getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnCancel, this));
|
||||
|
||||
LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetsListChange, this));
|
||||
|
||||
|
||||
mSaveButton = getChild<LLButton>("save");
|
||||
mPresetCombo = getChild<LLComboBox>("preset_combo");
|
||||
|
||||
|
|
@ -73,10 +76,6 @@ void LLFloaterSavePrefPreset::onOpen(const LLSD& key)
|
|||
{
|
||||
mSubdirectory = key.asString();
|
||||
|
||||
std::string floater_title = getString(std::string("title_") + mSubdirectory);
|
||||
|
||||
setTitle(floater_title);
|
||||
|
||||
EDefaultOptions option = DEFAULT_HIDE;
|
||||
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, mPresetCombo, option);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* @file llfloatersaveprefpreset.h
|
||||
* @brief Floater to save a graphics / camera preset
|
||||
* @brief Floater to save a graphics preset
|
||||
|
||||
*
|
||||
* $LicenseInfo:firstyear=2014&license=viewerlgpl$
|
||||
|
|
@ -45,6 +45,7 @@ public:
|
|||
void onBtnCancel();
|
||||
|
||||
private:
|
||||
|
||||
LLComboBox* mPresetCombo;
|
||||
LLButton* mSaveButton;
|
||||
|
||||
|
|
|
|||
|
|
@ -263,6 +263,7 @@ void LLFloaterSettingsDebug::onCommitSettings()
|
|||
|
||||
LLVector3 vector;
|
||||
LLVector3d vectord;
|
||||
LLQuaternion quat;
|
||||
LLRect rect;
|
||||
LLColor4 col4;
|
||||
LLColor3 col3;
|
||||
|
|
@ -298,6 +299,13 @@ void LLFloaterSettingsDebug::onCommitSettings()
|
|||
vectord.mdV[VZ] = mSpinner3->getValue().asReal();
|
||||
mCurrentControlVariable->set(vectord.getValue());
|
||||
break;
|
||||
case TYPE_QUAT:
|
||||
quat.mQ[VX] = getChild<LLUICtrl>("val_spinner_1")->getValue().asReal();
|
||||
quat.mQ[VY] = getChild<LLUICtrl>("val_spinner_2")->getValue().asReal();
|
||||
quat.mQ[VZ] = getChild<LLUICtrl>("val_spinner_3")->getValue().asReal();
|
||||
quat.mQ[VS] = getChild<LLUICtrl>("val_spinner_4")->getValue().asReal();;
|
||||
mCurrentControlVariable->set(quat.getValue());
|
||||
break;
|
||||
case TYPE_RECT:
|
||||
rect.mLeft = mSpinner1->getValue().asInteger();
|
||||
rect.mRight = mSpinner2->getValue().asInteger();
|
||||
|
|
@ -522,6 +530,40 @@ void LLFloaterSettingsDebug::updateControl()
|
|||
}
|
||||
break;
|
||||
}
|
||||
case TYPE_QUAT:
|
||||
{
|
||||
LLQuaternion q;
|
||||
q.setValue(sd);
|
||||
mSpinner1->setVisible(TRUE);
|
||||
mSpinner1->setLabel(std::string("X"));
|
||||
mSpinner2->setVisible(TRUE);
|
||||
mSpinner2->setLabel(std::string("Y"));
|
||||
mSpinner3->setVisible(TRUE);
|
||||
mSpinner3->setLabel(std::string("Z"));
|
||||
mSpinner4->setVisible(TRUE);
|
||||
mSpinner4->setLabel(std::string("S"));
|
||||
if (!mSpinner1->hasFocus())
|
||||
{
|
||||
mSpinner1->setPrecision(4);
|
||||
mSpinner1->setValue(q.mQ[VX]);
|
||||
}
|
||||
if (!mSpinner2->hasFocus())
|
||||
{
|
||||
mSpinner2->setPrecision(4);
|
||||
mSpinner2->setValue(q.mQ[VY]);
|
||||
}
|
||||
if (!mSpinner3->hasFocus())
|
||||
{
|
||||
mSpinner3->setPrecision(4);
|
||||
mSpinner3->setValue(q.mQ[VZ]);
|
||||
}
|
||||
if (!mSpinner4->hasFocus())
|
||||
{
|
||||
mSpinner4->setPrecision(4);
|
||||
mSpinner4->setValue(q.mQ[VS]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TYPE_RECT:
|
||||
{
|
||||
LLRect r;
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include "llui.h"
|
||||
#include "llagent.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llviewercamera.h"
|
||||
#include "llviewertexture.h"
|
||||
#include "llviewertexturelist.h"
|
||||
#include "llviewerwindow.h"
|
||||
|
|
@ -54,6 +55,8 @@ static LLDefaultChildRegistry::Register<LLJoystickQuaternion> r6("joystick_quat"
|
|||
const F32 NUDGE_TIME = 0.25f; // in seconds
|
||||
const F32 ORBIT_NUDGE_RATE = 0.05f; // fraction of normal speed
|
||||
|
||||
const S32 CENTER_DOT_RADIUS = 7;
|
||||
|
||||
//
|
||||
// Public Methods
|
||||
//
|
||||
|
|
@ -138,9 +141,25 @@ bool LLJoystick::pointInCircle(S32 x, S32 y) const
|
|||
//center is x and y coordinates of center of joystick circle, and also its radius
|
||||
int center = this->getLocalRect().getHeight()/2;
|
||||
bool in_circle = (x - center) * (x - center) + (y - center) * (y - center) <= center * center;
|
||||
|
||||
return in_circle;
|
||||
}
|
||||
|
||||
bool LLJoystick::pointInCenterDot(S32 x, S32 y, S32 radius) const
|
||||
{
|
||||
if (this->getLocalRect().getHeight() != this->getLocalRect().getWidth())
|
||||
{
|
||||
LL_WARNS() << "Joystick shape is not square" << LL_ENDL;
|
||||
return true;
|
||||
}
|
||||
|
||||
S32 center = this->getLocalRect().getHeight() / 2;
|
||||
|
||||
bool in_center_circle = (x - center) * (x - center) + (y - center) * (y - center) <= radius * radius;
|
||||
|
||||
return in_center_circle;
|
||||
}
|
||||
|
||||
BOOL LLJoystick::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
//LL_INFOS() << "joystick mouse down " << x << ", " << y << LL_ENDL;
|
||||
|
|
@ -403,8 +422,11 @@ LLJoystickCameraRotate::LLJoystickCameraRotate(const LLJoystickCameraRotate::Par
|
|||
mInLeft( FALSE ),
|
||||
mInTop( FALSE ),
|
||||
mInRight( FALSE ),
|
||||
mInBottom( FALSE )
|
||||
{ }
|
||||
mInBottom( FALSE ),
|
||||
mInCenter( FALSE )
|
||||
{
|
||||
mCenterImageName = "Cam_Rotate_Center";
|
||||
}
|
||||
|
||||
|
||||
void LLJoystickCameraRotate::updateSlop()
|
||||
|
|
@ -434,7 +456,16 @@ BOOL LLJoystickCameraRotate::handleMouseDown(S32 x, S32 y, MASK mask)
|
|||
S32 dx = x - horiz_center;
|
||||
S32 dy = y - vert_center;
|
||||
|
||||
if (dy > dx && dy > -dx)
|
||||
if (pointInCenterDot(x, y, CENTER_DOT_RADIUS))
|
||||
{
|
||||
mInitialOffset.mX = 0;
|
||||
mInitialOffset.mY = 0;
|
||||
mInitialQuadrant = JQ_ORIGIN;
|
||||
mInCenter = TRUE;
|
||||
|
||||
resetJoystickCamera();
|
||||
}
|
||||
else if (dy > dx && dy > -dx)
|
||||
{
|
||||
// top
|
||||
mInitialOffset.mX = 0;
|
||||
|
|
@ -469,9 +500,20 @@ BOOL LLJoystickCameraRotate::handleMouseDown(S32 x, S32 y, MASK mask)
|
|||
BOOL LLJoystickCameraRotate::handleMouseUp(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
gAgent.setMovementLocked(FALSE);
|
||||
mInCenter = FALSE;
|
||||
return LLJoystick::handleMouseUp(x, y, mask);
|
||||
}
|
||||
|
||||
BOOL LLJoystickCameraRotate::handleHover(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
if (!pointInCenterDot(x, y, CENTER_DOT_RADIUS))
|
||||
{
|
||||
mInCenter = FALSE;
|
||||
}
|
||||
|
||||
return LLJoystick::handleHover(x, y, mask);
|
||||
}
|
||||
|
||||
void LLJoystickCameraRotate::onHeldDown()
|
||||
{
|
||||
updateSlop();
|
||||
|
|
@ -504,6 +546,11 @@ void LLJoystickCameraRotate::onHeldDown()
|
|||
}
|
||||
}
|
||||
|
||||
void LLJoystickCameraRotate::resetJoystickCamera()
|
||||
{
|
||||
gAgentCamera.resetCameraOrbit();
|
||||
}
|
||||
|
||||
F32 LLJoystickCameraRotate::getOrbitRate()
|
||||
{
|
||||
F32 time = getElapsedHeldDownTime();
|
||||
|
|
@ -536,24 +583,31 @@ void LLJoystickCameraRotate::draw()
|
|||
getImageUnselected()->draw( getLocalRect() );
|
||||
LLPointer<LLUIImage> image = getImageSelected();
|
||||
|
||||
if( mInTop )
|
||||
if (mInCenter)
|
||||
{
|
||||
drawRotatedImage( getImageSelected(), 0 );
|
||||
drawRotatedImage(LLUI::getUIImage(mCenterImageName), 0);
|
||||
}
|
||||
|
||||
if( mInRight )
|
||||
else
|
||||
{
|
||||
drawRotatedImage( getImageSelected(), 1 );
|
||||
}
|
||||
if (mInTop)
|
||||
{
|
||||
drawRotatedImage(getImageSelected(), 0);
|
||||
}
|
||||
|
||||
if( mInBottom )
|
||||
{
|
||||
drawRotatedImage( getImageSelected(), 2 );
|
||||
}
|
||||
if (mInRight)
|
||||
{
|
||||
drawRotatedImage(getImageSelected(), 1);
|
||||
}
|
||||
|
||||
if( mInLeft )
|
||||
{
|
||||
drawRotatedImage( getImageSelected(), 3 );
|
||||
if (mInBottom)
|
||||
{
|
||||
drawRotatedImage(getImageSelected(), 2);
|
||||
}
|
||||
|
||||
if (mInLeft)
|
||||
{
|
||||
drawRotatedImage(getImageSelected(), 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -643,7 +697,9 @@ LLJoystickCameraTrack::Params::Params()
|
|||
|
||||
LLJoystickCameraTrack::LLJoystickCameraTrack(const LLJoystickCameraTrack::Params& p)
|
||||
: LLJoystickCameraRotate(p)
|
||||
{}
|
||||
{
|
||||
mCenterImageName = "Cam_Tracking_Center";
|
||||
}
|
||||
|
||||
|
||||
void LLJoystickCameraTrack::onHeldDown()
|
||||
|
|
@ -677,6 +733,11 @@ void LLJoystickCameraTrack::onHeldDown()
|
|||
}
|
||||
}
|
||||
|
||||
void LLJoystickCameraTrack::resetJoystickCamera()
|
||||
{
|
||||
gAgentCamera.resetCameraPan();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
// LLJoystickQuaternion
|
||||
//-------------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -80,7 +80,8 @@ public:
|
|||
* Image containing circle is square and this square has adherent points with joystick
|
||||
* circle. Make sure to change method according to shape other than square.
|
||||
*/
|
||||
bool pointInCircle(S32 x, S32 y) const;
|
||||
bool pointInCircle(S32 x, S32 y) const;
|
||||
bool pointInCenterDot(S32 x, S32 y, S32 radius) const;
|
||||
|
||||
static std::string nameFromQuadrant(const EJoystickQuadrant quadrant);
|
||||
static EJoystickQuadrant quadrantFromName(const std::string& name);
|
||||
|
|
@ -148,7 +149,9 @@ public:
|
|||
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
|
||||
virtual void onHeldDown();
|
||||
virtual void resetJoystickCamera();
|
||||
virtual void draw();
|
||||
|
||||
protected:
|
||||
|
|
@ -161,6 +164,9 @@ protected:
|
|||
BOOL mInTop;
|
||||
BOOL mInRight;
|
||||
BOOL mInBottom;
|
||||
BOOL mInCenter;
|
||||
|
||||
std::string mCenterImageName;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -177,6 +183,7 @@ public:
|
|||
|
||||
LLJoystickCameraTrack(const LLJoystickCameraTrack::Params&);
|
||||
virtual void onHeldDown();
|
||||
virtual void resetJoystickCamera();
|
||||
};
|
||||
|
||||
//
|
||||
|
|
|
|||
|
|
@ -4788,7 +4788,13 @@ bool LLMeshRepository::getCostData(LLUUID mesh_id, LLMeshCostData& data)
|
|||
LLMeshRepoThread::mesh_header_map::iterator iter = mThread->mMeshHeader.find(mesh_id);
|
||||
if (iter != mThread->mMeshHeader.end() && mThread->mMeshHeaderSize[mesh_id] > 0)
|
||||
{
|
||||
LLSD& header = iter->second;
|
||||
// <FS:ND> Make a copy of the header rather than holding on to the referece.
|
||||
// Assumption: mMeshHeader gets modified in another thread, invalidating iter and thus causing a lot of crashed down the line
|
||||
|
||||
// LLSD& header = iter->second;
|
||||
LLSD header = iter->second;
|
||||
|
||||
// </FS:ND>
|
||||
|
||||
bool header_invalid = (header.has("404")
|
||||
|| !header.has("lowest_lod")
|
||||
|
|
@ -4804,7 +4810,10 @@ bool LLMeshRepository::getCostData(LLUUID mesh_id, LLMeshCostData& data)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool LLMeshRepository::getCostData(LLSD& header, LLMeshCostData& data)
|
||||
// <FS:ND> Use a const ref, just to make sure no one modifies header and we can pass a copy.
|
||||
// bool LLMeshRepository::getCostData(LLSD& header, LLMeshCostData& data)
|
||||
bool LLMeshRepository::getCostData(LLSD const& header, LLMeshCostData& data)
|
||||
// </FS:ND>
|
||||
{
|
||||
data = LLMeshCostData();
|
||||
|
||||
|
|
|
|||
|
|
@ -581,7 +581,11 @@ public:
|
|||
F32 getStreamingCostLegacy(LLUUID mesh_id, F32 radius, S32* bytes = NULL, S32* visible_bytes = NULL, S32 detail = -1, F32 *unscaled_value = NULL);
|
||||
static F32 getStreamingCostLegacy(LLSD& header, F32 radius, S32* bytes = NULL, S32* visible_bytes = NULL, S32 detail = -1, F32 *unscaled_value = NULL);
|
||||
bool getCostData(LLUUID mesh_id, LLMeshCostData& data);
|
||||
bool getCostData(LLSD& header, LLMeshCostData& data);
|
||||
|
||||
// <FS:ND> Use a const ref, just to make sure no one modifies header and we can pass a copy.
|
||||
// bool getCostData(LLSD& header, LLMeshCostData& data);
|
||||
bool getCostData(LLSD const& header, LLMeshCostData& data);
|
||||
// </FS:ND>
|
||||
|
||||
LLMeshRepository();
|
||||
|
||||
|
|
|
|||
|
|
@ -93,7 +93,8 @@ LLFloaterMove::~LLFloaterMove()
|
|||
// virtual
|
||||
BOOL LLFloaterMove::postBuild()
|
||||
{
|
||||
updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
|
||||
// <FS:Ansariel> Customizable floater transparency
|
||||
//updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
|
||||
|
||||
// Code that implements floater buttons toggling when user moves via keyboard is located in LLAgent::propagate()
|
||||
|
||||
|
|
@ -534,6 +535,14 @@ void LLFloaterMove::setModeButtonToggleState(const EMovementMode mode)
|
|||
mModeControlButtonMap[mode]->setToggleState(TRUE);
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Customizable floater transparency
|
||||
F32 LLFloaterMove::getCurrentTransparency()
|
||||
{
|
||||
static LLCachedControl<F32> camera_opacity(gSavedSettings, "CameraOpacity");
|
||||
static LLCachedControl<F32> active_floater_transparency(gSavedSettings, "ActiveFloaterTransparency");
|
||||
return llmin(camera_opacity(), active_floater_transparency());
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
|
|
|
|||
|
|
@ -64,6 +64,9 @@ public:
|
|||
static void sUpdateMovementStatus();
|
||||
// [/RLVa:KB]
|
||||
|
||||
// <FS:Ansariel> Customizable floater transparency
|
||||
/*virtual*/ F32 getCurrentTransparency();
|
||||
|
||||
protected:
|
||||
void turnLeft();
|
||||
void turnRight();
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@
|
|||
#include "llnotificationsutil.h"// <FS:AW hypergrid support >
|
||||
|
||||
#include "lluictrl.h" // <FS:Zi> Make navigation bar part of the UI
|
||||
#include "rlvhandler.h"
|
||||
|
||||
//-- LLTeleportHistoryMenuItem -----------------------------------------------
|
||||
|
||||
|
|
@ -279,7 +280,8 @@ LLNavigationBar::LLNavigationBar()
|
|||
mNavigationPanel(NULL),
|
||||
mFavoritePanel(NULL),
|
||||
mNavPanWidth(0),
|
||||
mSearchComboBox(NULL)
|
||||
mSearchComboBox(NULL),
|
||||
mRlvBehaviorCallbackConnection() // <FS:Ansariel> FIRE-11847
|
||||
{
|
||||
// buildFromFile( "panel_navigation_bar.xml"); // <FS:Zi> Make navigation bar part of the UI
|
||||
|
||||
|
|
@ -292,6 +294,13 @@ LLNavigationBar::~LLNavigationBar()
|
|||
{
|
||||
mTeleportFinishConnection.disconnect();
|
||||
mTeleportFailedConnection.disconnect();
|
||||
|
||||
// <FS:Ansariel> FIRE-11847
|
||||
if (mRlvBehaviorCallbackConnection.connected())
|
||||
{
|
||||
mRlvBehaviorCallbackConnection.disconnect();
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
// <FS:Zi> Make navigation bar part of the UI
|
||||
|
|
@ -318,7 +327,7 @@ void LLNavigationBar::setupPanel()
|
|||
mView->getChild<LLUICtrl>("navigation_bar_context_menu_panel")->
|
||||
setRightMouseDownCallback(boost::bind(&LLNavigationBar::onRightMouseDown, this, _2, _3, _4));
|
||||
|
||||
mView->getChild<LLButton>("Sky")->setCommitCallback(boost::bind(&LLNavigationBar::onClickedSkyBtn, this)); // <FS:CR> FIRE-11847
|
||||
mView->getChild<LLButton>("PersonalLighting")->setCommitCallback(boost::bind(&LLNavigationBar::onClickedLightingBtn, this)); // <FS:CR> FIRE-11847
|
||||
// </FS:Zi>
|
||||
|
||||
fillSearchComboBox();
|
||||
|
|
@ -371,6 +380,9 @@ void LLNavigationBar::setupPanel()
|
|||
// return TRUE;
|
||||
LLHints::getInstance()->registerHintTarget("nav_bar",mView->getHandle());
|
||||
// </FS:Zi>
|
||||
|
||||
// <FS:Ansariel> FIRE-11847
|
||||
mRlvBehaviorCallbackConnection = gRlvHandler.setBehaviourCallback(boost::bind(&LLNavigationBar::updateRlvRestrictions, this, _1, _2));
|
||||
}
|
||||
|
||||
// <FS:Zi> No size calculations in code please. XUI handles it all now with visibility_control
|
||||
|
|
@ -881,8 +893,16 @@ void LLNavigationBar::onRightMouseDown(S32 x,S32 y,MASK mask)
|
|||
// </FS:Zi>
|
||||
|
||||
// <FS:CR> FIRE-11847
|
||||
void LLNavigationBar::onClickedSkyBtn()
|
||||
void LLNavigationBar::onClickedLightingBtn()
|
||||
{
|
||||
LLFloaterReg::showInstance("env_edit_sky", "edit");
|
||||
LLFloaterReg::showInstance("env_adjust_snapshot");
|
||||
}
|
||||
|
||||
void LLNavigationBar::updateRlvRestrictions(ERlvBehaviour behavior, ERlvParamType type)
|
||||
{
|
||||
if (behavior == RLV_BHVR_SETENV)
|
||||
{
|
||||
mView->getChild<LLButton>("PersonalLighting")->setEnabled(type != RLV_TYPE_ADD);
|
||||
}
|
||||
}
|
||||
// </FS:CR> FIRE-11847
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@
|
|||
#include "llbutton.h"
|
||||
#include "lllayoutstack.h"
|
||||
#include "llinitdestroyclass.h"
|
||||
#include "rlvdefines.h"
|
||||
|
||||
class LLLocationInputCtrl;
|
||||
class LLMenuGL;
|
||||
|
|
@ -151,7 +152,11 @@ private:
|
|||
|
||||
void fillSearchComboBox();
|
||||
|
||||
void onClickedSkyBtn(); // <FS:CR> FIRE-11847
|
||||
// <FS:CR> FIRE-11847
|
||||
void onClickedLightingBtn();
|
||||
boost::signals2::connection mRlvBehaviorCallbackConnection;
|
||||
void updateRlvRestrictions(ERlvBehaviour behavior, ERlvParamType type);
|
||||
// </FS:CR>
|
||||
|
||||
// <FS:Zi> Make navigation bar part of the UI
|
||||
// static void destroyClass()
|
||||
|
|
|
|||
|
|
@ -66,9 +66,6 @@ extern LLControlGroup gSavedSettings;
|
|||
static const LLUUID PARCEL_MEDIA_LIST_ITEM_UUID = LLUUID("CAB5920F-E484-4233-8621-384CF373A321");
|
||||
// static const LLUUID PARCEL_AUDIO_LIST_ITEM_UUID = LLUUID("DF4B020D-8A24-4B95-AB5D-CA970D694822"); // ## Zi: Media/Stream separation
|
||||
|
||||
const F32 AUTO_CLOSE_FADE_TIME_START= 2.0f;
|
||||
const F32 AUTO_CLOSE_FADE_TIME_END = 3.0f;
|
||||
|
||||
//
|
||||
// LLPanelNearByMedia
|
||||
//
|
||||
|
|
@ -82,8 +79,6 @@ LLPanelNearByMedia::LLPanelNearByMedia()
|
|||
mParcelMediaItem(NULL)
|
||||
// mParcelAudioItem(NULL) // ## Zi: Media/Stream separation
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
|
||||
// This is just an initial value, mParcelAudioAutoStart does not affect ParcelMediaAutoPlayEnable
|
||||
/* ## Zi: Media/Stream separation
|
||||
mParcelAudioAutoStart = gSavedSettings.getS32("ParcelMediaAutoPlayEnable") != 0
|
||||
|
|
@ -115,7 +110,7 @@ LLPanelNearByMedia::~LLPanelNearByMedia()
|
|||
|
||||
BOOL LLPanelNearByMedia::postBuild()
|
||||
{
|
||||
LLPanel::postBuild();
|
||||
LLPanelPulldown::postBuild();
|
||||
|
||||
const S32 RESIZE_BAR_THICKNESS = 6;
|
||||
LLResizeBar::Params p;
|
||||
|
|
@ -200,45 +195,10 @@ void LLPanelNearByMedia::handleMediaAutoPlayChanged(const LLSD& newvalue)
|
|||
</FS:Zi> Media/Stream separation
|
||||
*/
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelNearByMedia::onMouseEnter(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
LLPanel::onMouseEnter(x,y,mask);
|
||||
}
|
||||
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelNearByMedia::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mHoverTimer.start();
|
||||
LLPanel::onMouseLeave(x,y,mask);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelNearByMedia::onTopLost()
|
||||
{
|
||||
setVisible(FALSE);
|
||||
}
|
||||
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelNearByMedia::onVisibilityChange ( BOOL new_visibility )
|
||||
{
|
||||
if (new_visibility)
|
||||
{
|
||||
mHoverTimer.start(); // timer will be stopped when mouse hovers over panel
|
||||
}
|
||||
else
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
}
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelNearByMedia::reshape(S32 width, S32 height, BOOL called_from_parent)
|
||||
{
|
||||
LLPanel::reshape(width, height, called_from_parent);
|
||||
LLPanelPulldown::reshape(width, height, called_from_parent);
|
||||
|
||||
LLButton* more_btn = findChild<LLButton>("more_btn");
|
||||
if (more_btn && more_btn->getValue().asBoolean())
|
||||
|
|
@ -262,24 +222,14 @@ void LLPanelNearByMedia::draw()
|
|||
|
||||
refreshList();
|
||||
updateControls();
|
||||
|
||||
F32 alpha = mHoverTimer.getStarted()
|
||||
? clamp_rescale(mHoverTimer.getElapsedTimeF32(), AUTO_CLOSE_FADE_TIME_START, AUTO_CLOSE_FADE_TIME_END, 1.f, 0.f)
|
||||
: 1.0f;
|
||||
LLViewDrawContext context(alpha);
|
||||
|
||||
LLPanel::draw();
|
||||
|
||||
if (alpha == 0.f)
|
||||
{
|
||||
setVisible(false);
|
||||
}
|
||||
LLPanelPulldown::draw();
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
BOOL LLPanelNearByMedia::handleHover(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLPanel::handleHover(x, y, mask);
|
||||
LLPanelPulldown::handleHover(x, y, mask);
|
||||
|
||||
// If we are hovering over this panel, make sure to clear any hovered media
|
||||
// ID. Note that the more general solution would be to clear this ID when
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
#ifndef LL_LLPANELNEARBYMEDIA_H
|
||||
#define LL_LLPANELNEARBYMEDIA_H
|
||||
|
||||
#include "llpanel.h"
|
||||
#include "llpanelpulldown.h"
|
||||
|
||||
class LLPanelNearbyMedia;
|
||||
class LLButton;
|
||||
|
|
@ -39,16 +39,12 @@ class LLTextBox;
|
|||
class LLComboBox;
|
||||
class LLViewerMediaImpl;
|
||||
|
||||
class LLPanelNearByMedia : public LLPanel
|
||||
class LLPanelNearByMedia : public LLPanelPulldown
|
||||
{
|
||||
public:
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void draw();
|
||||
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void onTopLost();
|
||||
/*virtual*/ void onVisibilityChange ( BOOL new_visibility );
|
||||
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);
|
||||
/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
|
||||
|
||||
|
|
@ -176,7 +172,6 @@ private:
|
|||
|
||||
LLRect mMoreRect;
|
||||
LLRect mLessRect;
|
||||
LLFrameTimer mHoverTimer;
|
||||
LLScrollListItem* mParcelMediaItem;
|
||||
// LLScrollListItem* mParcelAudioItem; // <FS:Zi> Media/Stream separation
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,150 @@
|
|||
/**
|
||||
* @file llpanelpresetscamerapulldown.cpp
|
||||
* @brief A panel showing a quick way to pick camera presets
|
||||
*
|
||||
* $LicenseInfo:firstyear=2017&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2017, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llpanelpresetscamerapulldown.h"
|
||||
|
||||
#include "llviewercontrol.h"
|
||||
#include "llstatusbar.h"
|
||||
|
||||
#include "llbutton.h"
|
||||
#include "lltabcontainer.h"
|
||||
#include "llfloatercamera.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llfloaterpreference.h"
|
||||
#include "llpresetsmanager.h"
|
||||
#include "llsliderctrl.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "lltrans.h"
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Class LLPanelPresetsCameraPulldown
|
||||
///----------------------------------------------------------------------------
|
||||
|
||||
// Default constructor
|
||||
LLPanelPresetsCameraPulldown::LLPanelPresetsCameraPulldown()
|
||||
{
|
||||
mCommitCallbackRegistrar.add("Presets.toggleCameraFloater", boost::bind(&LLPanelPresetsCameraPulldown::onViewButtonClick, this, _2));
|
||||
mCommitCallbackRegistrar.add("PresetsCamera.RowClick", boost::bind(&LLPanelPresetsCameraPulldown::onRowClick, this, _2));
|
||||
|
||||
buildFromFile( "panel_presets_camera_pulldown.xml");
|
||||
}
|
||||
|
||||
BOOL LLPanelPresetsCameraPulldown::postBuild()
|
||||
{
|
||||
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
|
||||
if (presetsMgr)
|
||||
{
|
||||
// Make sure there is a default preference file
|
||||
presetsMgr->createMissingDefault(PRESETS_CAMERA);
|
||||
|
||||
// <FS:Ansariel> Done in LLPresetsManager ctor
|
||||
//presetsMgr->startWatching(PRESETS_CAMERA);
|
||||
|
||||
presetsMgr->setPresetListChangeCameraCallback(boost::bind(&LLPanelPresetsCameraPulldown::populatePanel, this));
|
||||
}
|
||||
|
||||
populatePanel();
|
||||
|
||||
return LLPanelPulldown::postBuild();
|
||||
}
|
||||
|
||||
void LLPanelPresetsCameraPulldown::populatePanel()
|
||||
{
|
||||
LLPresetsManager::getInstance()->loadPresetNamesFromDir(PRESETS_CAMERA, mPresetNames, DEFAULT_BOTTOM);
|
||||
|
||||
LLScrollListCtrl* scroll = getChild<LLScrollListCtrl>("preset_camera_list");
|
||||
|
||||
if (scroll && mPresetNames.begin() != mPresetNames.end())
|
||||
{
|
||||
scroll->clearRows();
|
||||
|
||||
std::string active_preset = gSavedSettings.getString("PresetCameraActive");
|
||||
if (active_preset == PRESETS_DEFAULT)
|
||||
{
|
||||
active_preset = LLTrans::getString(PRESETS_DEFAULT);
|
||||
}
|
||||
|
||||
for (std::list<std::string>::const_iterator it = mPresetNames.begin(); it != mPresetNames.end(); ++it)
|
||||
{
|
||||
const std::string& name = *it;
|
||||
LL_DEBUGS() << "adding '" << name << "'" << LL_ENDL;
|
||||
|
||||
LLSD row;
|
||||
row["columns"][0]["column"] = "preset_name";
|
||||
row["columns"][0]["value"] = name;
|
||||
|
||||
bool is_selected_preset = false;
|
||||
if (name == active_preset)
|
||||
{
|
||||
row["columns"][1]["column"] = "icon";
|
||||
row["columns"][1]["type"] = "icon";
|
||||
row["columns"][1]["value"] = "Check_Mark";
|
||||
|
||||
is_selected_preset = true;
|
||||
}
|
||||
|
||||
LLScrollListItem* new_item = scroll->addElement(row);
|
||||
new_item->setSelected(is_selected_preset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelPresetsCameraPulldown::onRowClick(const LLSD& user_data)
|
||||
{
|
||||
LLScrollListCtrl* scroll = getChild<LLScrollListCtrl>("preset_camera_list");
|
||||
|
||||
if (scroll)
|
||||
{
|
||||
LLScrollListItem* item = scroll->getFirstSelected();
|
||||
if (item)
|
||||
{
|
||||
std::string name = item->getColumn(1)->getValue().asString();
|
||||
|
||||
LL_DEBUGS() << "selected '" << name << "'" << LL_ENDL;
|
||||
LLFloaterCamera::switchToPreset(name);
|
||||
|
||||
setVisible(FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS() << "none selected" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS() << "no scroll" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelPresetsCameraPulldown::onViewButtonClick(const LLSD& user_data)
|
||||
{
|
||||
// close the minicontrol, we're bringing up the big one
|
||||
setVisible(FALSE);
|
||||
|
||||
LLFloaterReg::toggleInstanceOrBringToFront("camera");
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
/**
|
||||
* @file llpanelpresetscamerapulldown.h
|
||||
* @brief A panel showing a quick way to pick camera presets
|
||||
*
|
||||
* $LicenseInfo:firstyear=2017&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2017, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLPANELPRESETSCAMERAPULLDOWN_H
|
||||
#define LL_LLPANELPRESETSCAMERAPULLDOWN_H
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "llpanelpulldown.h"
|
||||
|
||||
class LLPanelPresetsCameraPulldown : public LLPanelPulldown
|
||||
{
|
||||
public:
|
||||
LLPanelPresetsCameraPulldown();
|
||||
/*virtual*/ BOOL postBuild();
|
||||
void populatePanel();
|
||||
|
||||
private:
|
||||
void onViewButtonClick(const LLSD& user_data);
|
||||
void onRowClick(const LLSD& user_data);
|
||||
|
||||
std::list<std::string> mPresetNames;
|
||||
LOG_CLASS(LLPanelPresetsCameraPulldown);
|
||||
};
|
||||
|
||||
#endif // LL_LLPANELPRESETSCAMERAPULLDOWN_H
|
||||
|
|
@ -40,9 +40,6 @@
|
|||
#include "llscrolllistctrl.h"
|
||||
#include "lltrans.h"
|
||||
|
||||
/* static */ const F32 LLPanelPresetsPulldown::sAutoCloseFadeStartTimeSec = 2.0f;
|
||||
/* static */ const F32 LLPanelPresetsPulldown::sAutoCloseTotalTimeSec = 3.0f;
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Class LLPanelPresetsPulldown
|
||||
///----------------------------------------------------------------------------
|
||||
|
|
@ -50,8 +47,6 @@
|
|||
// Default constructor
|
||||
LLPanelPresetsPulldown::LLPanelPresetsPulldown()
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
|
||||
mCommitCallbackRegistrar.add("Presets.GoGraphicsPrefs", boost::bind(&LLPanelPresetsPulldown::onGraphicsButtonClick, this, _2));
|
||||
mCommitCallbackRegistrar.add("Presets.RowClick", boost::bind(&LLPanelPresetsPulldown::onRowClick, this, _2));
|
||||
|
||||
|
|
@ -63,17 +58,16 @@ BOOL LLPanelPresetsPulldown::postBuild()
|
|||
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
|
||||
presetsMgr->setPresetListChangeCallback(boost::bind(&LLPanelPresetsPulldown::populatePanel, this));
|
||||
// Make sure there is a default preference file
|
||||
presetsMgr->createMissingDefault();
|
||||
presetsMgr->createMissingDefault(PRESETS_GRAPHIC);
|
||||
|
||||
populatePanel();
|
||||
|
||||
return LLPanel::postBuild();
|
||||
return LLPanelPulldown::postBuild();
|
||||
}
|
||||
|
||||
void LLPanelPresetsPulldown::populatePanel()
|
||||
{
|
||||
std::string presets_dir = LLPresetsManager::getInstance()->getPresetsDir(PRESETS_GRAPHIC);
|
||||
LLPresetsManager::getInstance()->loadPresetNamesFromDir(presets_dir, mPresetNames, DEFAULT_TOP);
|
||||
LLPresetsManager::getInstance()->loadPresetNamesFromDir(PRESETS_GRAPHIC, mPresetNames, DEFAULT_TOP);
|
||||
|
||||
LLScrollListCtrl* scroll = getChild<LLScrollListCtrl>("preset_list");
|
||||
|
||||
|
|
@ -112,61 +106,6 @@ void LLPanelPresetsPulldown::populatePanel()
|
|||
}
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelPresetsPulldown::onMouseEnter(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
LLPanel::onMouseEnter(x,y,mask);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelPresetsPulldown::onTopLost()
|
||||
{
|
||||
setVisible(FALSE);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
BOOL LLPanelPresetsPulldown::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLPanel::handleMouseDown(x,y,mask);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
BOOL LLPanelPresetsPulldown::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLPanel::handleRightMouseDown(x, y, mask);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
BOOL LLPanelPresetsPulldown::handleDoubleClick(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLPanel::handleDoubleClick(x, y, mask);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelPresetsPulldown::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mHoverTimer.start();
|
||||
LLPanel::onMouseLeave(x,y,mask);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelPresetsPulldown::onVisibilityChange ( BOOL new_visibility )
|
||||
{
|
||||
if (new_visibility)
|
||||
{
|
||||
mHoverTimer.start(); // timer will be stopped when mouse hovers over panel
|
||||
}
|
||||
else
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelPresetsPulldown::onRowClick(const LLSD& user_data)
|
||||
{
|
||||
LLScrollListCtrl* scroll = getChild<LLScrollListCtrl>("preset_list");
|
||||
|
|
@ -213,19 +152,3 @@ void LLPanelPresetsPulldown::onGraphicsButtonClick(const LLSD& user_data)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLPanelPresetsPulldown::draw()
|
||||
{
|
||||
F32 alpha = mHoverTimer.getStarted()
|
||||
? clamp_rescale(mHoverTimer.getElapsedTimeF32(), sAutoCloseFadeStartTimeSec, sAutoCloseTotalTimeSec, 1.f, 0.f)
|
||||
: 1.0f;
|
||||
LLViewDrawContext context(alpha);
|
||||
|
||||
LLPanel::draw();
|
||||
|
||||
if (alpha == 0.f)
|
||||
{
|
||||
setVisible(FALSE);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,22 +29,13 @@
|
|||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "llpanel.h"
|
||||
#include "llpanelpulldown.h"
|
||||
|
||||
class LLFrameTimer;
|
||||
|
||||
class LLPanelPresetsPulldown : public LLPanel
|
||||
class LLPanelPresetsPulldown : public LLPanelPulldown
|
||||
{
|
||||
public:
|
||||
LLPanelPresetsPulldown();
|
||||
/*virtual*/ void draw();
|
||||
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void onTopLost();
|
||||
/*virtual*/ void onVisibilityChange ( BOOL new_visibility );
|
||||
/*virtual*/ BOOL postBuild();
|
||||
void populatePanel();
|
||||
|
||||
|
|
@ -53,9 +44,6 @@ class LLPanelPresetsPulldown : public LLPanel
|
|||
void onRowClick(const LLSD& user_data);
|
||||
|
||||
std::list<std::string> mPresetNames;
|
||||
LLFrameTimer mHoverTimer;
|
||||
static const F32 sAutoCloseFadeStartTimeSec;
|
||||
static const F32 sAutoCloseTotalTimeSec;
|
||||
LOG_CLASS(LLPanelPresetsPulldown);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,118 @@
|
|||
/**
|
||||
* @file llpanelpulldown.cpp
|
||||
* @brief A panel that serves as a basis for multiple toolbar pulldown panels
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llpanelpulldown.h"
|
||||
|
||||
const F32 AUTO_CLOSE_FADE_TIME_START_SEC = 2.0f;
|
||||
const F32 AUTO_CLOSE_FADE_TIME_END_SEC = 3.0f;
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Class LLPanelPresetsCameraPulldown
|
||||
///----------------------------------------------------------------------------
|
||||
|
||||
// Default constructor
|
||||
LLPanelPulldown::LLPanelPulldown()
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelPulldown::onMouseEnter(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
LLPanel::onMouseEnter(x, y, mask);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelPulldown::onTopLost()
|
||||
{
|
||||
setVisible(FALSE);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
BOOL LLPanelPulldown::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLPanel::handleMouseDown(x, y, mask);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
BOOL LLPanelPulldown::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLPanel::handleRightMouseDown(x, y, mask);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
BOOL LLPanelPulldown::handleDoubleClick(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLPanel::handleDoubleClick(x, y, mask);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLPanelPulldown::handleScrollWheel(S32 x, S32 y, S32 clicks)
|
||||
{
|
||||
LLPanel::handleScrollWheel(x, y, clicks);
|
||||
return TRUE; //If we got here, then we are in Pulldown's rect, consume the event.
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelPulldown::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mHoverTimer.start();
|
||||
LLPanel::onMouseLeave(x, y, mask);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelPulldown::onVisibilityChange(BOOL new_visibility)
|
||||
{
|
||||
if (new_visibility)
|
||||
{
|
||||
mHoverTimer.start(); // timer will be stopped when mouse hovers over panel
|
||||
}
|
||||
else
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLPanelPulldown::draw()
|
||||
{
|
||||
F32 alpha = mHoverTimer.getStarted()
|
||||
? clamp_rescale(mHoverTimer.getElapsedTimeF32(), AUTO_CLOSE_FADE_TIME_START_SEC, AUTO_CLOSE_FADE_TIME_END_SEC, 1.f, 0.f)
|
||||
: 1.0f;
|
||||
LLViewDrawContext context(alpha);
|
||||
|
||||
LLPanel::draw();
|
||||
|
||||
if (alpha == 0.f)
|
||||
{
|
||||
setVisible(FALSE);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
/**
|
||||
* @file llpanelpulldown.h
|
||||
* @brief A panel that serves as a basis for multiple toolbar pulldown panels
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLPANELPULLDOWN_H
|
||||
#define LL_LLPANELPULLDOWN_H
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "llpanel.h"
|
||||
|
||||
class LLFrameTimer;
|
||||
|
||||
class LLPanelPulldown : public LLPanel
|
||||
{
|
||||
public:
|
||||
LLPanelPulldown();
|
||||
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
|
||||
/*virtual*/ void onTopLost();
|
||||
/*virtual*/ void onVisibilityChange(BOOL new_visibility);
|
||||
|
||||
/*virtual*/ void draw();
|
||||
|
||||
protected:
|
||||
LLFrameTimer mHoverTimer;
|
||||
};
|
||||
|
||||
#endif // LL_LLPANELPULLDOWN_H
|
||||
|
|
@ -44,9 +44,6 @@
|
|||
#include "llcheckboxctrl.h"
|
||||
#include "llviewercontrol.h"
|
||||
|
||||
/* static */ const F32 LLPanelVolumePulldown::sAutoCloseFadeStartTimeSec = 2.0f;
|
||||
/* static */ const F32 LLPanelVolumePulldown::sAutoCloseTotalTimeSec = 3.0f;
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Class LLPanelVolumePulldown
|
||||
///----------------------------------------------------------------------------
|
||||
|
|
@ -54,15 +51,11 @@
|
|||
// Default constructor
|
||||
LLPanelVolumePulldown::LLPanelVolumePulldown()
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
|
||||
/*//<FS:KC> Handled centrally now
|
||||
mCommitCallbackRegistrar.add("Vol.setControlFalse", boost::bind(&LLPanelVolumePulldown::setControlFalse, this, _2));
|
||||
mCommitCallbackRegistrar.add("Vol.SetSounds", boost::bind(&LLPanelVolumePulldown::onClickSetSounds, this));
|
||||
mCommitCallbackRegistrar.add("Vol.updateMediaAutoPlayCheckbox", boost::bind(&LLPanelVolumePulldown::updateMediaAutoPlayCheckbox, this, _1));
|
||||
mCommitCallbackRegistrar.add("Vol.GoAudioPrefs", boost::bind(&LLPanelVolumePulldown::onAdvancedButtonClick, this, _2));
|
||||
// <FS:Ansariel> Missing callback function
|
||||
mCommitCallbackRegistrar.add("Vol.SetSounds", boost::bind(&LLPanelVolumePulldown::setSounds, this));
|
||||
*/
|
||||
|
||||
buildFromFile( "panel_volume_pulldown.xml");
|
||||
|
|
@ -79,41 +72,7 @@ BOOL LLPanelVolumePulldown::postBuild()
|
|||
collisions_audio_play_btn->setEnabled(!(mute_sound_effects || mute_all_sounds));
|
||||
// </FS:PP>
|
||||
|
||||
return LLPanel::postBuild();
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelVolumePulldown::onMouseEnter(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
LLPanel::onMouseEnter(x,y,mask);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelVolumePulldown::onTopLost()
|
||||
{
|
||||
setVisible(FALSE);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelVolumePulldown::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mHoverTimer.start();
|
||||
LLPanel::onMouseLeave(x,y,mask);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelVolumePulldown::onVisibilityChange ( BOOL new_visibility )
|
||||
{
|
||||
if (new_visibility)
|
||||
{
|
||||
mHoverTimer.start(); // timer will be stopped when mouse hovers over panel
|
||||
}
|
||||
else
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
|
||||
}
|
||||
return LLPanelPulldown::postBuild();
|
||||
}
|
||||
|
||||
//<FS:KC> Handled centrally now
|
||||
|
|
@ -170,32 +129,3 @@ void LLPanelVolumePulldown::onClickSetSounds()
|
|||
getChild<LLCheckBoxCtrl>("gesture_audio_play_btn")->setEnabled(!gSavedSettings.getBOOL("MuteSounds"));
|
||||
}
|
||||
*/
|
||||
|
||||
//virtual
|
||||
void LLPanelVolumePulldown::draw()
|
||||
{
|
||||
F32 alpha = mHoverTimer.getStarted()
|
||||
? clamp_rescale(mHoverTimer.getElapsedTimeF32(), sAutoCloseFadeStartTimeSec, sAutoCloseTotalTimeSec, 1.f, 0.f)
|
||||
: 1.0f;
|
||||
LLViewDrawContext context(alpha);
|
||||
|
||||
LLPanel::draw();
|
||||
|
||||
if (alpha == 0.f)
|
||||
{
|
||||
setVisible(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
//<FS:KC> Handled centrally now
|
||||
/*
|
||||
// <FS:Ansariel> Missing callback function
|
||||
void LLPanelVolumePulldown::setSounds()
|
||||
{
|
||||
// Disable Enable gesture/collisions sounds checkbox if the master sound is disabled
|
||||
// or if sound effects are disabled.
|
||||
getChild<LLCheckBoxCtrl>("gesture_audio_play_btn")->setEnabled(!gSavedSettings.getBOOL("MuteSounds"));
|
||||
getChild<LLCheckBoxCtrl>("collisions_audio_play_btn")->setEnabled(!gSavedSettings.getBOOL("MuteSounds"));
|
||||
}
|
||||
// </FS:Ansariel> Missing callback function
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -30,19 +30,12 @@
|
|||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "llpanel.h"
|
||||
#include "llpanelpulldown.h"
|
||||
|
||||
class LLFrameTimer;
|
||||
|
||||
class LLPanelVolumePulldown : public LLPanel
|
||||
class LLPanelVolumePulldown : public LLPanelPulldown
|
||||
{
|
||||
public:
|
||||
LLPanelVolumePulldown();
|
||||
/*virtual*/ void draw();
|
||||
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void onTopLost();
|
||||
/*virtual*/ void onVisibilityChange ( BOOL new_visibility );
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
private:
|
||||
|
|
@ -53,13 +46,8 @@ class LLPanelVolumePulldown : public LLPanel
|
|||
// "Streaming Music" and "Media" are unchecked. Otherwise enables it.
|
||||
void updateMediaAutoPlayCheckbox(LLUICtrl* ctrl);
|
||||
void onAdvancedButtonClick(const LLSD& user_data);
|
||||
// <FS:Ansariel> Missing callback function
|
||||
void setSounds();
|
||||
*/
|
||||
|
||||
LLFrameTimer mHoverTimer;
|
||||
static const F32 sAutoCloseFadeStartTimeSec;
|
||||
static const F32 sAutoCloseTotalTimeSec;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -39,6 +39,8 @@
|
|||
#include "llfloaterpreference.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llfeaturemanager.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llfile.h"
|
||||
#include "quickprefs.h"
|
||||
|
||||
LLPresetsManager::LLPresetsManager()
|
||||
|
|
@ -50,10 +52,20 @@ LLPresetsManager::LLPresetsManager()
|
|||
// This works, because the LLPresetsManager instance is created in the
|
||||
// STATE_WORLD_INIT phase during startup when the status bar is initialized
|
||||
initGraphicPresetControls();
|
||||
|
||||
// <FS:Ansariel> Start watching camera controls as soon as the preset
|
||||
// manager gets initialized
|
||||
startWatching(PRESETS_CAMERA);
|
||||
}
|
||||
|
||||
LLPresetsManager::~LLPresetsManager()
|
||||
{
|
||||
mCameraChangedSignal.disconnect();
|
||||
}
|
||||
|
||||
void LLPresetsManager::triggerChangeCameraSignal()
|
||||
{
|
||||
mPresetListChangeCameraSignal();
|
||||
}
|
||||
|
||||
void LLPresetsManager::triggerChangeSignal()
|
||||
|
|
@ -61,27 +73,74 @@ void LLPresetsManager::triggerChangeSignal()
|
|||
mPresetListChangeSignal();
|
||||
}
|
||||
|
||||
void LLPresetsManager::createMissingDefault()
|
||||
void LLPresetsManager::createMissingDefault(const std::string& subdirectory)
|
||||
{
|
||||
// <FS:Ansariel> FIRE-19810: Make presets global since PresetGraphicActive setting is global as well
|
||||
//if(gDirUtilp->getLindenUserDir().empty())
|
||||
//{
|
||||
// return;
|
||||
//}
|
||||
//std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_GRAPHIC, PRESETS_DEFAULT + ".xml");
|
||||
std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, PRESETS_GRAPHIC, PRESETS_DEFAULT + ".xml");
|
||||
|
||||
if (PRESETS_CAMERA == subdirectory)
|
||||
{
|
||||
createCameraDefaultPresets();
|
||||
return;
|
||||
}
|
||||
|
||||
//std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR,
|
||||
std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR,
|
||||
subdirectory, PRESETS_DEFAULT + ".xml");
|
||||
// </FS:Ansariel>
|
||||
if (!gDirUtilp->fileExists(default_file))
|
||||
{
|
||||
LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL;
|
||||
|
||||
// Write current graphic settings as the default
|
||||
savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT, true);
|
||||
// Write current settings as the default
|
||||
savePreset(subdirectory, PRESETS_DEFAULT, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS() << "default preset exists; no-op" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLPresetsManager::createCameraDefaultPresets()
|
||||
{
|
||||
bool is_default_created = createDefaultCameraPreset(PRESETS_REAR_VIEW);
|
||||
is_default_created |= createDefaultCameraPreset(PRESETS_FRONT_VIEW);
|
||||
is_default_created |= createDefaultCameraPreset(PRESETS_SIDE_VIEW);
|
||||
|
||||
if (is_default_created)
|
||||
{
|
||||
triggerChangeCameraSignal();
|
||||
}
|
||||
}
|
||||
|
||||
void LLPresetsManager::startWatching(const std::string& subdirectory)
|
||||
{
|
||||
if (PRESETS_CAMERA == subdirectory)
|
||||
{
|
||||
std::vector<std::string> name_list;
|
||||
getControlNames(name_list);
|
||||
|
||||
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
|
||||
{
|
||||
std::string ctrl_name = *it;
|
||||
if (gSavedSettings.controlExists(ctrl_name))
|
||||
{
|
||||
LLPointer<LLControlVariable> cntrl_ptr = gSavedSettings.getControl(ctrl_name);
|
||||
if (cntrl_ptr.isNull())
|
||||
{
|
||||
LL_WARNS("Init") << "Unable to set signal on global setting '" << ctrl_name
|
||||
<< "'" << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
mCameraChangedSignal = cntrl_ptr->getCommitSignal()->connect(boost::bind(&settingChanged));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS() << "default preset exists; no-op" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory)
|
||||
|
|
@ -90,21 +149,25 @@ std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory)
|
|||
//std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR);
|
||||
std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR);
|
||||
// </FS:Ansariel>
|
||||
std::string full_path;
|
||||
|
||||
LLFile::mkdir(presets_path);
|
||||
|
||||
// <FS:Ansariel> FIRE-19810: Make presets global since PresetGraphicActive setting is global as well
|
||||
//full_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, subdirectory);
|
||||
full_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, subdirectory);
|
||||
//std::string dest_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, subdirectory);
|
||||
std::string dest_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, subdirectory);
|
||||
// </FS:Ansariel>
|
||||
LLFile::mkdir(full_path);
|
||||
if (!gDirUtilp->fileExists(dest_path))
|
||||
LLFile::mkdir(dest_path);
|
||||
|
||||
return full_path;
|
||||
return dest_path;
|
||||
}
|
||||
|
||||
void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option)
|
||||
void LLPresetsManager::loadPresetNamesFromDir(const std::string& subdirectory, preset_name_list_t& presets, EDefaultOptions default_option)
|
||||
{
|
||||
bool IS_CAMERA = (PRESETS_CAMERA == subdirectory);
|
||||
bool IS_GRAPHIC = (PRESETS_GRAPHIC == subdirectory);
|
||||
|
||||
std::string dir = LLPresetsManager::getInstance()->getPresetsDir(subdirectory);
|
||||
LL_INFOS("AppInit") << "Loading list of preset names from " << dir << LL_ENDL;
|
||||
|
||||
mPresetNames.clear();
|
||||
|
|
@ -120,16 +183,33 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam
|
|||
{
|
||||
std::string path = gDirUtilp->add(dir, file);
|
||||
std::string name = LLURI::unescape(gDirUtilp->getBaseFileName(path, /*strip_exten = */ true));
|
||||
LL_DEBUGS() << " Found preset '" << name << "'" << LL_ENDL;
|
||||
LL_DEBUGS() << " Found preset '" << name << "'" << LL_ENDL;
|
||||
|
||||
if (PRESETS_DEFAULT != name)
|
||||
if (IS_CAMERA)
|
||||
{
|
||||
if (isTemplateCameraPreset(name))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ((default_option == DEFAULT_HIDE) || (default_option == DEFAULT_BOTTOM))
|
||||
{
|
||||
if (isDefaultCameraPreset(name))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
mPresetNames.push_back(name);
|
||||
}
|
||||
else
|
||||
if (IS_GRAPHIC)
|
||||
{
|
||||
switch (default_option)
|
||||
if (PRESETS_DEFAULT != name)
|
||||
{
|
||||
mPresetNames.push_back(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (default_option)
|
||||
{
|
||||
case DEFAULT_SHOW:
|
||||
mPresetNames.push_back(LLTrans::getString(PRESETS_DEFAULT));
|
||||
break;
|
||||
|
|
@ -141,16 +221,84 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam
|
|||
case DEFAULT_HIDE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (IS_CAMERA)
|
||||
{
|
||||
mPresetNames.sort(LLStringUtil::precedesDict);
|
||||
if (default_option == DEFAULT_BOTTOM)
|
||||
{
|
||||
mPresetNames.push_back(PRESETS_FRONT_VIEW);
|
||||
mPresetNames.push_back(PRESETS_REAR_VIEW);
|
||||
mPresetNames.push_back(PRESETS_SIDE_VIEW);
|
||||
}
|
||||
}
|
||||
|
||||
presets = mPresetNames;
|
||||
}
|
||||
|
||||
bool LLPresetsManager::mCameraDirty = false;
|
||||
bool LLPresetsManager::mIgnoreChangedSignal = false;
|
||||
|
||||
void LLPresetsManager::setCameraDirty(bool dirty)
|
||||
{
|
||||
mCameraDirty = dirty;
|
||||
}
|
||||
|
||||
bool LLPresetsManager::isCameraDirty()
|
||||
{
|
||||
return mCameraDirty;
|
||||
}
|
||||
|
||||
void LLPresetsManager::settingChanged()
|
||||
{
|
||||
setCameraDirty(true);
|
||||
|
||||
static LLCachedControl<std::string> preset_camera_active(gSavedSettings, "PresetCameraActive", "");
|
||||
std::string preset_name = preset_camera_active;
|
||||
if (!preset_name.empty() && !mIgnoreChangedSignal)
|
||||
{
|
||||
gSavedSettings.setString("PresetCameraActive", "");
|
||||
|
||||
// Hack call because this is a static routine
|
||||
LLPresetsManager::getInstance()->triggerChangeCameraSignal();
|
||||
}
|
||||
}
|
||||
|
||||
void LLPresetsManager::getControlNames(std::vector<std::string>& names)
|
||||
{
|
||||
const std::vector<std::string> camera_controls = boost::assign::list_of
|
||||
// From panel_preferences_move.xml
|
||||
("CameraAngle")
|
||||
("CameraOffsetScale")
|
||||
("EditCameraMovement")
|
||||
("AppearanceCameraMovement")
|
||||
// From llagentcamera.cpp
|
||||
("CameraOffsetBuild")
|
||||
("TrackFocusObject")
|
||||
("CameraOffsetRearView")
|
||||
("FocusOffsetRearView")
|
||||
("AvatarSitRotation")
|
||||
// <FS:Ansariel> Additional settings
|
||||
("ZoomTime")
|
||||
("CameraPositionSmoothing")
|
||||
("EditAppearanceLighting")
|
||||
("FSDisableMouseWheelCameraZoom")
|
||||
("DisableCameraConstraints")
|
||||
// </FS:Ansariel>
|
||||
;
|
||||
names = camera_controls;
|
||||
}
|
||||
|
||||
bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name, bool createDefault)
|
||||
{
|
||||
bool IS_CAMERA = (PRESETS_CAMERA == subdirectory);
|
||||
bool IS_GRAPHIC = (PRESETS_GRAPHIC == subdirectory);
|
||||
|
||||
if (LLTrans::getString(PRESETS_DEFAULT) == name)
|
||||
{
|
||||
name = PRESETS_DEFAULT;
|
||||
|
|
@ -161,24 +309,30 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
|
|||
return false;
|
||||
}
|
||||
|
||||
if (isTemplateCameraPreset(name))
|
||||
{
|
||||
LL_WARNS() << "Should not overwrite template presets" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool saved = false;
|
||||
std::vector<std::string> name_list;
|
||||
|
||||
if(PRESETS_GRAPHIC == subdirectory)
|
||||
if (IS_GRAPHIC)
|
||||
{
|
||||
// <FS:Ansariel> Graphic preset controls independent from XUI
|
||||
//LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
|
||||
//if (instance && !createDefault)
|
||||
//{
|
||||
// gSavedSettings.setString("PresetGraphicActive", name);
|
||||
// gSavedSettings.setString("PresetGraphicActive", name);
|
||||
// instance->getControlNames(name_list);
|
||||
// LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL;
|
||||
// LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL;
|
||||
// name_list.push_back("PresetGraphicActive");
|
||||
//}
|
||||
//else
|
||||
//else
|
||||
//{
|
||||
// LL_WARNS() << "preferences floater instance not found" << LL_ENDL;
|
||||
//}
|
||||
// LL_WARNS("Presets") << "preferences floater instance not found" << LL_ENDL;
|
||||
//}
|
||||
if (!createDefault)
|
||||
{
|
||||
gSavedSettings.setString("PresetGraphicActive", name);
|
||||
|
|
@ -186,130 +340,172 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
|
|||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
else if(PRESETS_CAMERA == subdirectory)
|
||||
else if (IS_CAMERA)
|
||||
{
|
||||
name_list.clear();
|
||||
name_list.push_back("Placeholder");
|
||||
getControlNames(name_list);
|
||||
name_list.push_back("PresetCameraActive");
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL;
|
||||
}
|
||||
|
||||
if (name_list.size() > 1 // if the active preset name is the only thing in the list, don't save the list
|
||||
|| (createDefault && name == PRESETS_DEFAULT && subdirectory == PRESETS_GRAPHIC)) // or create a default graphics preset from hw recommended settings
|
||||
{
|
||||
// make an empty llsd
|
||||
LLSD paramsData(LLSD::emptyMap());
|
||||
else
|
||||
{
|
||||
LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL;
|
||||
}
|
||||
|
||||
// make an empty llsd
|
||||
LLSD paramsData(LLSD::emptyMap());
|
||||
|
||||
if (createDefault)
|
||||
{
|
||||
paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap();
|
||||
if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0)
|
||||
{
|
||||
mIsLoadingPreset = true; // <FS:Ansariel> Graphic preset controls independent from XUI
|
||||
// use the recommended setting as an initial one (MAINT-6435)
|
||||
gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger());
|
||||
mIsLoadingPreset = false; // <FS:Ansariel> Graphic preset controls independent from XUI
|
||||
}
|
||||
// Create a default graphics preset from hw recommended settings
|
||||
if (IS_GRAPHIC && createDefault && name == PRESETS_DEFAULT)
|
||||
{
|
||||
paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap();
|
||||
if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0)
|
||||
{
|
||||
mIsLoadingPreset = true; // <FS:Ansariel> Graphic preset controls independent from XUI
|
||||
// use the recommended setting as an initial one (MAINT-6435)
|
||||
gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger());
|
||||
mIsLoadingPreset = false; // <FS:Ansariel> Graphic preset controls independent from XUI
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Graphic preset controls independent from XUI
|
||||
// Add the controls not in feature table to the default preset with their current value
|
||||
for (std::vector<std::string>::iterator it = mGraphicPresetControls.begin(); it != mGraphicPresetControls.end(); ++it)
|
||||
// <FS:Ansariel> Graphic preset controls independent from XUI
|
||||
// Add the controls not in feature table to the default preset with their current value
|
||||
for (std::vector<std::string>::iterator it = mGraphicPresetControls.begin(); it != mGraphicPresetControls.end(); ++it)
|
||||
{
|
||||
std::string ctrl_name = *it;
|
||||
if (!paramsData.has(ctrl_name))
|
||||
{
|
||||
std::string ctrl_name = *it;
|
||||
if (!paramsData.has(ctrl_name))
|
||||
{
|
||||
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
|
||||
std::string comment = ctrl->getComment();
|
||||
std::string type = LLControlGroup::typeEnumToString(ctrl->type());
|
||||
LLSD value = ctrl->getValue();
|
||||
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
|
||||
std::string comment = ctrl->getComment();
|
||||
std::string type = LLControlGroup::typeEnumToString(ctrl->type());
|
||||
LLSD value = ctrl->getValue();
|
||||
|
||||
paramsData[ctrl_name]["Comment"] = comment;
|
||||
paramsData[ctrl_name]["Persist"] = 1;
|
||||
paramsData[ctrl_name]["Type"] = type;
|
||||
paramsData[ctrl_name]["Value"] = value;
|
||||
paramsData[ctrl_name]["Comment"] = comment;
|
||||
paramsData[ctrl_name]["Persist"] = 1;
|
||||
paramsData[ctrl_name]["Type"] = type;
|
||||
paramsData[ctrl_name]["Value"] = value;
|
||||
}
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
else
|
||||
{
|
||||
ECameraPreset new_camera_preset = (ECameraPreset)gSavedSettings.getU32("CameraPresetType");
|
||||
bool new_camera_offsets = false;
|
||||
if (IS_CAMERA)
|
||||
{
|
||||
if (isDefaultCameraPreset(name))
|
||||
{
|
||||
if (PRESETS_REAR_VIEW == name)
|
||||
{
|
||||
new_camera_preset = CAMERA_PRESET_REAR_VIEW;
|
||||
}
|
||||
else if (PRESETS_SIDE_VIEW == name)
|
||||
{
|
||||
new_camera_preset = CAMERA_PRESET_GROUP_VIEW;
|
||||
}
|
||||
else if (PRESETS_FRONT_VIEW == name)
|
||||
{
|
||||
new_camera_preset = CAMERA_PRESET_FRONT_VIEW;
|
||||
}
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
else
|
||||
{
|
||||
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
|
||||
{
|
||||
std::string ctrl_name = *it;
|
||||
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
|
||||
std::string comment = ctrl->getComment();
|
||||
std::string type = LLControlGroup::typeEnumToString(ctrl->type());
|
||||
LLSD value = ctrl->getValue();
|
||||
|
||||
paramsData[ctrl_name]["Comment"] = comment;
|
||||
paramsData[ctrl_name]["Persist"] = 1;
|
||||
paramsData[ctrl_name]["Type"] = type;
|
||||
paramsData[ctrl_name]["Value"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml");
|
||||
|
||||
// write to file
|
||||
llofstream presetsXML(pathName.c_str());
|
||||
if (presetsXML.is_open())
|
||||
{
|
||||
|
||||
LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
|
||||
formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
|
||||
presetsXML.close();
|
||||
saved = true;
|
||||
|
||||
LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL;
|
||||
|
||||
if (!createDefault)
|
||||
{
|
||||
gSavedSettings.setString("PresetGraphicActive", name);
|
||||
// signal interested parties
|
||||
triggerChangeSignal();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("Presets") << "Cannot open for output preset file " << pathName << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "No settings found; preferences floater has not yet been created" << LL_ENDL;
|
||||
}
|
||||
|
||||
return saved;
|
||||
}
|
||||
|
||||
void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option)
|
||||
{
|
||||
combo->clearRows();
|
||||
|
||||
std::string presets_dir = getPresetsDir(subdirectory);
|
||||
|
||||
if (!presets_dir.empty())
|
||||
{
|
||||
std::list<std::string> preset_names;
|
||||
loadPresetNamesFromDir(presets_dir, preset_names, default_option);
|
||||
|
||||
std::string preset_graphic_active = gSavedSettings.getString("PresetGraphicActive");
|
||||
|
||||
if (preset_names.begin() != preset_names.end())
|
||||
{
|
||||
for (std::list<std::string>::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it)
|
||||
else
|
||||
{
|
||||
const std::string& name = *it;
|
||||
combo->add(name, LLSD().with(0, name));
|
||||
new_camera_preset = CAMERA_PRESET_CUSTOM;
|
||||
}
|
||||
new_camera_offsets = (!isDefaultCameraPreset(name) || (ECameraPreset)gSavedSettings.getU32("CameraPresetType") != new_camera_preset);
|
||||
}
|
||||
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
|
||||
{
|
||||
std::string ctrl_name = *it;
|
||||
|
||||
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
|
||||
if (ctrl)
|
||||
{
|
||||
std::string comment = ctrl->getComment();
|
||||
std::string type = LLControlGroup::typeEnumToString(ctrl->type());
|
||||
LLSD value = ctrl->getValue();
|
||||
|
||||
paramsData[ctrl_name]["Comment"] = comment;
|
||||
paramsData[ctrl_name]["Persist"] = 1;
|
||||
paramsData[ctrl_name]["Type"] = type;
|
||||
paramsData[ctrl_name]["Value"] = value;
|
||||
}
|
||||
}
|
||||
if (IS_CAMERA)
|
||||
{
|
||||
gSavedSettings.setU32("CameraPresetType", new_camera_preset);
|
||||
}
|
||||
}
|
||||
|
||||
std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml");
|
||||
|
||||
// If the active preset name is the only thing in the list, don't save the list
|
||||
if (paramsData.size() > 1)
|
||||
{
|
||||
// write to file
|
||||
llofstream presetsXML(pathName.c_str());
|
||||
if (presetsXML.is_open())
|
||||
{
|
||||
LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
|
||||
formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
|
||||
presetsXML.close();
|
||||
saved = true;
|
||||
|
||||
LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL;
|
||||
|
||||
if (IS_GRAPHIC)
|
||||
{
|
||||
gSavedSettings.setString("PresetGraphicActive", name);
|
||||
// signal interested parties
|
||||
triggerChangeSignal();
|
||||
}
|
||||
|
||||
if (IS_CAMERA)
|
||||
{
|
||||
gSavedSettings.setString("PresetCameraActive", name);
|
||||
setCameraDirty(false);
|
||||
// signal interested parties
|
||||
triggerChangeCameraSignal();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
combo->setLabel(LLTrans::getString("preset_combo_label"));
|
||||
LL_WARNS("Presets") << "Cannot open for output preset file " << pathName << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "No settings available to be saved" << LL_ENDL;
|
||||
}
|
||||
|
||||
return saved;
|
||||
}
|
||||
|
||||
bool LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option)
|
||||
{
|
||||
bool sts = true;
|
||||
|
||||
combo->clearRows();
|
||||
combo->setEnabled(TRUE);
|
||||
|
||||
std::list<std::string> preset_names;
|
||||
loadPresetNamesFromDir(subdirectory, preset_names, default_option);
|
||||
|
||||
if (preset_names.begin() != preset_names.end())
|
||||
{
|
||||
for (std::list<std::string>::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it)
|
||||
{
|
||||
const std::string& name = *it;
|
||||
combo->add(name, name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
combo->setLabel(LLTrans::getString("preset_combo_label"));
|
||||
combo->setEnabled(PRESETS_CAMERA != subdirectory);
|
||||
sts = false;
|
||||
}
|
||||
|
||||
return sts;
|
||||
}
|
||||
|
||||
void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string name)
|
||||
|
|
@ -325,34 +521,42 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string n
|
|||
LL_DEBUGS() << "attempting to load preset '"<<name<<"' from '"<<full_path<<"'" << LL_ENDL;
|
||||
|
||||
mIsLoadingPreset = true; // <FS:Ansariel> Graphic preset controls independent from XUI
|
||||
mIgnoreChangedSignal = true;
|
||||
if(gSavedSettings.loadFromFile(full_path, false, true) > 0)
|
||||
{
|
||||
mIgnoreChangedSignal = false;
|
||||
if(PRESETS_GRAPHIC == subdirectory)
|
||||
{
|
||||
gSavedSettings.setString("PresetGraphicActive", name);
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Update indirect controls
|
||||
LLAvatarComplexityControls::setIndirectControls();
|
||||
// <FS:Ansariel> Update indirect controls
|
||||
LLAvatarComplexityControls::setIndirectControls();
|
||||
|
||||
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
|
||||
if (instance)
|
||||
{
|
||||
instance->refreshEnabledGraphics();
|
||||
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
|
||||
if (instance)
|
||||
{
|
||||
instance->refreshEnabledGraphics();
|
||||
}
|
||||
// <FS:Ansariel> Graphic preset controls independent from XUI
|
||||
FloaterQuickPrefs* phototools = LLFloaterReg::findTypedInstance<FloaterQuickPrefs>(PHOTOTOOLS_FLOATER);
|
||||
if (phototools)
|
||||
{
|
||||
phototools->refreshSettings();
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
triggerChangeSignal();
|
||||
}
|
||||
// <FS:Ansariel> Graphic preset controls independent from XUI
|
||||
FloaterQuickPrefs* phototools = LLFloaterReg::findTypedInstance<FloaterQuickPrefs>(PHOTOTOOLS_FLOATER);
|
||||
if (phototools)
|
||||
if(PRESETS_CAMERA == subdirectory)
|
||||
{
|
||||
phototools->refreshSettings();
|
||||
gSavedSettings.setString("PresetCameraActive", name);
|
||||
triggerChangeCameraSignal();
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
triggerChangeSignal();
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "failed to load preset '"<<name<<"' from '"<<full_path<<"'" << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
mIgnoreChangedSignal = false;
|
||||
LL_WARNS("Presets") << "failed to load preset '"<<name<<"' from '"<<full_path<<"'" << LL_ENDL;
|
||||
}
|
||||
mIsLoadingPreset = false; // <FS:Ansariel> Graphic preset controls independent from XUI
|
||||
}
|
||||
|
||||
|
|
@ -379,17 +583,73 @@ bool LLPresetsManager::deletePreset(const std::string& subdirectory, std::string
|
|||
}
|
||||
|
||||
// If you delete the preset that is currently marked as loaded then also indicate that no preset is loaded.
|
||||
if (gSavedSettings.getString("PresetGraphicActive") == name)
|
||||
if(PRESETS_GRAPHIC == subdirectory)
|
||||
{
|
||||
gSavedSettings.setString("PresetGraphicActive", "");
|
||||
if (gSavedSettings.getString("PresetGraphicActive") == name)
|
||||
{
|
||||
gSavedSettings.setString("PresetGraphicActive", "");
|
||||
}
|
||||
// signal interested parties
|
||||
triggerChangeSignal();
|
||||
}
|
||||
|
||||
// signal interested parties
|
||||
triggerChangeSignal();
|
||||
if(PRESETS_CAMERA == subdirectory)
|
||||
{
|
||||
if (gSavedSettings.getString("PresetCameraActive") == name)
|
||||
{
|
||||
gSavedSettings.setString("PresetCameraActive", "");
|
||||
}
|
||||
// signal interested parties
|
||||
triggerChangeCameraSignal();
|
||||
}
|
||||
|
||||
return sts;
|
||||
}
|
||||
|
||||
bool LLPresetsManager::isDefaultCameraPreset(std::string preset_name)
|
||||
{
|
||||
return (preset_name == PRESETS_REAR_VIEW || preset_name == PRESETS_SIDE_VIEW || preset_name == PRESETS_FRONT_VIEW);
|
||||
}
|
||||
|
||||
bool LLPresetsManager::isTemplateCameraPreset(std::string preset_name)
|
||||
{
|
||||
return (preset_name == PRESETS_REAR || preset_name == PRESETS_SIDE || preset_name == PRESETS_FRONT);
|
||||
}
|
||||
|
||||
void LLPresetsManager::resetCameraPreset(std::string preset_name)
|
||||
{
|
||||
if (isDefaultCameraPreset(preset_name))
|
||||
{
|
||||
createDefaultCameraPreset(preset_name, true);
|
||||
|
||||
if (gSavedSettings.getString("PresetCameraActive") == preset_name)
|
||||
{
|
||||
loadPreset(PRESETS_CAMERA, preset_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool LLPresetsManager::createDefaultCameraPreset(std::string preset_name, bool force_reset)
|
||||
{
|
||||
// <FS:Ansariel> FIRE-19810: Make presets global since PresetGraphicActive setting is global as well
|
||||
//std::string preset_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR,
|
||||
std::string preset_file = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR,
|
||||
// </FS:Ansariel>
|
||||
PRESETS_CAMERA, LLURI::escape(preset_name) + ".xml");
|
||||
if (!gDirUtilp->fileExists(preset_file) || force_reset)
|
||||
{
|
||||
std::string template_name = preset_name.substr(0, preset_name.size() - PRESETS_VIEW_SUFFIX.size());
|
||||
std::string default_template_file = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, PRESETS_CAMERA, template_name + ".xml");
|
||||
return LLFile::copy(default_template_file, preset_file);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
boost::signals2::connection LLPresetsManager::setPresetListChangeCameraCallback(const preset_list_signal_t::slot_type& cb)
|
||||
{
|
||||
return mPresetListChangeCameraSignal.connect(cb);
|
||||
}
|
||||
|
||||
boost::signals2::connection LLPresetsManager::setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb)
|
||||
{
|
||||
return mPresetListChangeSignal.connect(cb);
|
||||
|
|
|
|||
|
|
@ -36,11 +36,19 @@ static const std::string PRESETS_DEFAULT = "Default";
|
|||
static const std::string PRESETS_DIR = "presets";
|
||||
static const std::string PRESETS_GRAPHIC = "graphic";
|
||||
static const std::string PRESETS_CAMERA = "camera";
|
||||
static const std::string PRESETS_REAR = "Rear";
|
||||
static const std::string PRESETS_FRONT = "Front";
|
||||
static const std::string PRESETS_SIDE = "Side";
|
||||
static const std::string PRESETS_VIEW_SUFFIX = " View";
|
||||
static const std::string PRESETS_REAR_VIEW = PRESETS_REAR + PRESETS_VIEW_SUFFIX;
|
||||
static const std::string PRESETS_FRONT_VIEW = PRESETS_FRONT + PRESETS_VIEW_SUFFIX;
|
||||
static const std::string PRESETS_SIDE_VIEW = PRESETS_SIDE + PRESETS_VIEW_SUFFIX;
|
||||
|
||||
enum EDefaultOptions
|
||||
{
|
||||
DEFAULT_SHOW,
|
||||
DEFAULT_TOP,
|
||||
DEFAULT_BOTTOM,
|
||||
DEFAULT_HIDE // Do not display "Default" in a list
|
||||
};
|
||||
|
||||
|
|
@ -54,22 +62,35 @@ public:
|
|||
typedef std::list<std::string> preset_name_list_t;
|
||||
typedef boost::signals2::signal<void()> preset_list_signal_t;
|
||||
|
||||
void createMissingDefault();
|
||||
void createMissingDefault(const std::string& subdirectory);
|
||||
void startWatching(const std::string& subdirectory);
|
||||
void triggerChangeCameraSignal();
|
||||
void triggerChangeSignal();
|
||||
static std::string getPresetsDir(const std::string& subdirectory);
|
||||
void setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option);
|
||||
void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option);
|
||||
bool setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option);
|
||||
void loadPresetNamesFromDir(const std::string& subdirectory, preset_name_list_t& presets, EDefaultOptions default_option);
|
||||
bool savePreset(const std::string& subdirectory, std::string name, bool createDefault = false);
|
||||
void loadPreset(const std::string& subdirectory, std::string name);
|
||||
bool deletePreset(const std::string& subdirectory, std::string name);
|
||||
bool isCameraDirty();
|
||||
static void setCameraDirty(bool dirty);
|
||||
|
||||
void createCameraDefaultPresets();
|
||||
|
||||
bool isTemplateCameraPreset(std::string preset_name);
|
||||
bool isDefaultCameraPreset(std::string preset_name);
|
||||
void resetCameraPreset(std::string preset_name);
|
||||
bool createDefaultCameraPreset(std::string preset_name, bool force_reset = false);
|
||||
|
||||
// Emitted when a preset gets loaded, deleted, or saved.
|
||||
boost::signals2::connection setPresetListChangeCameraCallback(const preset_list_signal_t::slot_type& cb);
|
||||
boost::signals2::connection setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb);
|
||||
|
||||
// Emitted when a preset gets loaded or saved.
|
||||
|
||||
preset_name_list_t mPresetNames;
|
||||
|
||||
preset_list_signal_t mPresetListChangeCameraSignal;
|
||||
preset_list_signal_t mPresetListChangeSignal;
|
||||
|
||||
// <FS:Ansariel> Graphic preset controls independent from XUI
|
||||
|
|
@ -78,13 +99,20 @@ public:
|
|||
// </FS:Ansariel>
|
||||
|
||||
private:
|
||||
LOG_CLASS(LLPresetsManager);
|
||||
LOG_CLASS(LLPresetsManager);
|
||||
|
||||
void getControlNames(std::vector<std::string>& names);
|
||||
static void settingChanged();
|
||||
|
||||
boost::signals2::connection mCameraChangedSignal;
|
||||
|
||||
static bool mCameraDirty;
|
||||
static bool mIgnoreChangedSignal;
|
||||
|
||||
// <FS:Ansariel> Graphic preset controls independent from XUI
|
||||
void initGraphicPresetControlNames();
|
||||
void initGraphicPresetControls();
|
||||
void handleGraphicPresetControlChanged(LLControlVariablePtr control, const LLSD& new_value, const LLSD& old_value);
|
||||
|
||||
bool mIsLoadingPreset;
|
||||
bool mIsDrawDistanceSteppingActive;
|
||||
std::vector<std::string> mGraphicPresetControls;
|
||||
|
|
|
|||
|
|
@ -345,6 +345,7 @@ void LLPreviewNotecard::loadAsset()
|
|||
if((allow_modify || is_owner) && !source_library)
|
||||
{
|
||||
getChildView("Delete")->setEnabled(TRUE);
|
||||
getChildView("Edit")->setEnabled(FALSE); // <FS:LO> Don't enable external editor button on no mod notecards.
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@
|
|||
#include "llnotifications.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llpersistentnotificationstorage.h"
|
||||
#include "llpresetsmanager.h"
|
||||
#include "llteleporthistory.h"
|
||||
#include "llregionhandle.h"
|
||||
#include "llsd.h"
|
||||
|
|
@ -2778,6 +2779,8 @@ bool idle_startup()
|
|||
// JC - 7/20/2002
|
||||
gViewerWindow->sendShapeToSim();
|
||||
|
||||
LLPresetsManager::getInstance()->createMissingDefault(PRESETS_CAMERA);
|
||||
|
||||
// The reason we show the alert is because we want to
|
||||
// reduce confusion for when you log in and your provided
|
||||
// location is not your expected location. So, if this is
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#include "llfloaterbuycurrency.h"
|
||||
#include "llbuycurrencyhtml.h"
|
||||
#include "llpanelnearbymedia.h"
|
||||
#include "llpanelpresetscamerapulldown.h"
|
||||
#include "llpanelpresetspulldown.h"
|
||||
#include "llpanelvolumepulldown.h"
|
||||
#include "llfloaterregioninfo.h"
|
||||
|
|
@ -190,9 +191,11 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
|
|||
mAudioStreamEnabled(FALSE), // <FS:Zi> Media/Stream separation
|
||||
mRebakeStuck(FALSE), // <FS:LO> FIRE-7639 - Stop the blinking after a while
|
||||
mNearbyIcons(FALSE), // <FS:Ansariel> Script debug
|
||||
mIconPresets(NULL),
|
||||
mIconPresetsGraphic(NULL),
|
||||
mIconPresetsCamera(NULL),
|
||||
mMediaToggle(NULL),
|
||||
mMouseEnterPresetsConnection(),
|
||||
mMouseEnterPresetsCameraConnection(),
|
||||
mMouseEnterVolumeConnection(),
|
||||
mMouseEnterNearbyMediaConnection(),
|
||||
mCurrentLocationString()
|
||||
|
|
@ -250,6 +253,10 @@ LLStatusBar::~LLStatusBar()
|
|||
{
|
||||
mMouseEnterPresetsConnection.disconnect();
|
||||
}
|
||||
if (mMouseEnterPresetsCameraConnection.connected())
|
||||
{
|
||||
mMouseEnterPresetsCameraConnection.disconnect();
|
||||
}
|
||||
if (mMouseEnterVolumeConnection.connected())
|
||||
{
|
||||
mMouseEnterVolumeConnection.disconnect();
|
||||
|
|
@ -297,15 +304,23 @@ BOOL LLStatusBar::postBuild()
|
|||
mBoxBalance = getChild<LLTextBox>("balance");
|
||||
mBoxBalance->setClickedCallback( &LLStatusBar::onClickBalance, this );
|
||||
|
||||
mIconPresets = getChild<LLButton>( "presets_icon" );
|
||||
// <FS: KC> FIRE-19697: Add setting to disable graphics preset menu popup on mouse over
|
||||
// mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
|
||||
mIconPresetsCamera = getChild<LLButton>( "presets_icon_camera" );
|
||||
//mIconPresetsCamera->setMouseEnterCallback(boost::bind(&LLStatusBar::mIconPresetsCamera, this));
|
||||
if (gSavedSettings.getBOOL("FSStatusBarMenuButtonPopupOnRollover"))
|
||||
{
|
||||
mMouseEnterPresetsConnection = mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
|
||||
mMouseEnterPresetsCameraConnection = mIconPresetsCamera->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresetsCamera, this));
|
||||
}
|
||||
mIconPresetsCamera->setClickedCallback(boost::bind(&LLStatusBar::onMouseEnterPresetsCamera, this));
|
||||
|
||||
mIconPresetsGraphic = getChild<LLButton>( "presets_icon_graphic" );
|
||||
// <FS: KC> FIRE-19697: Add setting to disable graphics preset menu popup on mouse over
|
||||
// mIconPresetsGraphic->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
|
||||
if (gSavedSettings.getBOOL("FSStatusBarMenuButtonPopupOnRollover"))
|
||||
{
|
||||
mMouseEnterPresetsConnection = mIconPresetsGraphic->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
|
||||
}
|
||||
// </FS: KC> FIRE-19697: Add setting to disable graphics preset menu popup on mouse over
|
||||
mIconPresets->setClickedCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
|
||||
mIconPresetsGraphic->setClickedCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
|
||||
|
||||
mBtnVolume = getChild<LLButton>( "volume_btn" );
|
||||
mBtnVolume->setClickedCallback( onClickVolume, this );
|
||||
|
|
@ -396,6 +411,11 @@ BOOL LLStatusBar::postBuild()
|
|||
mSGPacketLoss = LLUICtrlFactory::create<LLStatGraph>(pgp);
|
||||
addChild(mSGPacketLoss);
|
||||
|
||||
mPanelPresetsCameraPulldown = new LLPanelPresetsCameraPulldown();
|
||||
addChild(mPanelPresetsCameraPulldown);
|
||||
mPanelPresetsCameraPulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
|
||||
mPanelPresetsCameraPulldown->setVisible(FALSE);
|
||||
|
||||
mPanelPresetsPulldown = new LLPanelPresetsPulldown();
|
||||
addChild(mPanelPresetsPulldown);
|
||||
mPanelPresetsPulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
|
||||
|
|
@ -685,7 +705,8 @@ void LLStatusBar::setVisibleForMouselook(bool visible)
|
|||
mBandwidthButton->setVisible(visible && showNetStats); // <FS:PP> FIRE-6287: Clicking on traffic indicator toggles Lag Meter window
|
||||
mTimeMediaPanel->setVisible(visible);
|
||||
setBackgroundVisible(visible);
|
||||
mIconPresets->setVisible(visible);
|
||||
mIconPresetsCamera->setVisible(visible);
|
||||
mIconPresetsGraphic->setVisible(visible);
|
||||
}
|
||||
|
||||
void LLStatusBar::debitBalance(S32 debit)
|
||||
|
|
@ -826,13 +847,40 @@ void LLStatusBar::onClickBuyCurrency()
|
|||
LLFirstUse::receiveLindens(false);
|
||||
}
|
||||
|
||||
void LLStatusBar::onMouseEnterPresetsCamera()
|
||||
{
|
||||
LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
|
||||
// <FS:Ansariel> Changed presets icon to LLButton
|
||||
//LLIconCtrl* icon = getChild<LLIconCtrl>( "presets_icon_camera" );
|
||||
//LLRect icon_rect = icon->getRect();
|
||||
LLRect icon_rect = mIconPresetsCamera->getRect();
|
||||
// </FS:Ansariel>
|
||||
LLRect pulldown_rect = mPanelPresetsCameraPulldown->getRect();
|
||||
pulldown_rect.setLeftTopAndSize(icon_rect.mLeft -
|
||||
(pulldown_rect.getWidth() - icon_rect.getWidth()),
|
||||
icon_rect.mBottom,
|
||||
pulldown_rect.getWidth(),
|
||||
pulldown_rect.getHeight());
|
||||
|
||||
pulldown_rect.translate(popup_holder->getRect().getWidth() - pulldown_rect.mRight, 0);
|
||||
mPanelPresetsCameraPulldown->setShape(pulldown_rect);
|
||||
|
||||
// show the master presets pull-down
|
||||
LLUI::getInstance()->clearPopups();
|
||||
LLUI::getInstance()->addPopup(mPanelPresetsCameraPulldown);
|
||||
mPanelNearByMedia->setVisible(FALSE);
|
||||
mPanelVolumePulldown->setVisible(FALSE);
|
||||
mPanelPresetsPulldown->setVisible(FALSE);
|
||||
mPanelPresetsCameraPulldown->setVisible(TRUE);
|
||||
}
|
||||
|
||||
void LLStatusBar::onMouseEnterPresets()
|
||||
{
|
||||
LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
|
||||
// <FS:Ansariel> Changed presets icon to LLButton
|
||||
//LLIconCtrl* icon = getChild<LLIconCtrl>( "presets_icon" );
|
||||
//LLIconCtrl* icon = getChild<LLIconCtrl>( "presets_icon_graphic" );
|
||||
//LLRect icon_rect = icon->getRect();
|
||||
LLRect icon_rect = mIconPresets->getRect();
|
||||
LLRect icon_rect = mIconPresetsGraphic->getRect();
|
||||
// </FS:Ansariel>
|
||||
LLRect pulldown_rect = mPanelPresetsPulldown->getRect();
|
||||
pulldown_rect.setLeftTopAndSize(icon_rect.mLeft -
|
||||
|
|
@ -874,6 +922,7 @@ void LLStatusBar::onMouseEnterVolume()
|
|||
// show the master volume pull-down
|
||||
LLUI::getInstance()->clearPopups();
|
||||
LLUI::getInstance()->addPopup(mPanelVolumePulldown);
|
||||
mPanelPresetsCameraPulldown->setVisible(FALSE);
|
||||
mPanelPresetsPulldown->setVisible(FALSE);
|
||||
mPanelNearByMedia->setVisible(FALSE);
|
||||
mPanelVolumePulldown->setVisible(TRUE);
|
||||
|
|
@ -898,6 +947,7 @@ void LLStatusBar::onMouseEnterNearbyMedia()
|
|||
LLUI::getInstance()->clearPopups();
|
||||
LLUI::getInstance()->addPopup(mPanelNearByMedia);
|
||||
|
||||
mPanelPresetsCameraPulldown->setVisible(FALSE);
|
||||
mPanelPresetsPulldown->setVisible(FALSE);
|
||||
mPanelVolumePulldown->setVisible(FALSE);
|
||||
mPanelNearByMedia->setVisible(TRUE);
|
||||
|
|
@ -1643,6 +1693,10 @@ void LLStatusBar::onPopupRolloverChanged(const LLSD& newvalue)
|
|||
{
|
||||
mMouseEnterPresetsConnection.disconnect();
|
||||
}
|
||||
if (mMouseEnterPresetsCameraConnection.connected())
|
||||
{
|
||||
mMouseEnterPresetsCameraConnection.disconnect();
|
||||
}
|
||||
if (mMouseEnterVolumeConnection.connected())
|
||||
{
|
||||
mMouseEnterVolumeConnection.disconnect();
|
||||
|
|
@ -1654,7 +1708,8 @@ void LLStatusBar::onPopupRolloverChanged(const LLSD& newvalue)
|
|||
|
||||
if (new_value)
|
||||
{
|
||||
mMouseEnterPresetsConnection = mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
|
||||
mMouseEnterPresetsConnection = mIconPresetsGraphic->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
|
||||
mMouseEnterPresetsCameraConnection = mIconPresetsCamera->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresetsCamera, this));
|
||||
mMouseEnterVolumeConnection = mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this));
|
||||
mMouseEnterNearbyMediaConnection = mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ class LLUICtrl;
|
|||
class LLUUID;
|
||||
class LLFrameTimer;
|
||||
class LLStatGraph;
|
||||
class LLPanelPresetsCameraPulldown;
|
||||
class LLPanelPresetsPulldown;
|
||||
class LLPanelVolumePulldown;
|
||||
class LLPanelNearByMedia;
|
||||
|
|
@ -161,6 +162,7 @@ private:
|
|||
void onClickBuyCurrency();
|
||||
void onVolumeChanged(const LLSD& newvalue);
|
||||
|
||||
void onMouseEnterPresetsCamera();
|
||||
void onMouseEnterPresets();
|
||||
void onMouseEnterVolume();
|
||||
void onMouseEnterNearbyMedia();
|
||||
|
|
@ -327,7 +329,8 @@ private:
|
|||
LLStatGraph *mSGBandwidth;
|
||||
LLStatGraph *mSGPacketLoss;
|
||||
|
||||
LLButton *mIconPresets;
|
||||
LLButton *mIconPresetsCamera;
|
||||
LLButton *mIconPresetsGraphic;
|
||||
LLButton *mBtnVolume;
|
||||
LLTextBox *mBoxBalance;
|
||||
LLButton *mStreamToggle; // ## Zi: Media/Stream separation
|
||||
|
|
@ -349,6 +352,7 @@ private:
|
|||
BOOL mShowParcelIcons;
|
||||
LLFrameTimer* mBalanceTimer;
|
||||
LLFrameTimer* mHealthTimer;
|
||||
LLPanelPresetsCameraPulldown* mPanelPresetsCameraPulldown;
|
||||
LLPanelPresetsPulldown* mPanelPresetsPulldown;
|
||||
LLPanelVolumePulldown* mPanelVolumePulldown;
|
||||
LLPanelNearByMedia* mPanelNearByMedia;
|
||||
|
|
@ -369,6 +373,7 @@ private:
|
|||
|
||||
// <FS:Ansariel> FIRE-19697: Add setting to disable graphics preset menu popup on mouse over
|
||||
boost::signals2::connection mMouseEnterPresetsConnection;
|
||||
boost::signals2::connection mMouseEnterPresetsCameraConnection;
|
||||
boost::signals2::connection mMouseEnterVolumeConnection;
|
||||
boost::signals2::connection mMouseEnterNearbyMediaConnection;
|
||||
// </FS:Ansariel>
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@
|
|||
#include "llfloaterbuyland.h"
|
||||
#include "llfloaterbvhpreview.h"
|
||||
#include "llfloatercamera.h"
|
||||
#include "llfloatercamerapresets.h"
|
||||
#include "llfloaterchatvoicevolume.h"
|
||||
#include "llfloaterconversationlog.h"
|
||||
#include "llfloaterconversationpreview.h"
|
||||
|
|
@ -104,12 +105,14 @@
|
|||
#include "llfloaterperms.h"
|
||||
#include "llfloaterpostprocess.h"
|
||||
#include "llfloaterpreference.h"
|
||||
#include "llfloaterpreferenceviewadvanced.h"
|
||||
#include "llfloaterpreviewtrash.h"
|
||||
#include "llfloaterproperties.h"
|
||||
#include "llfloaterregiondebugconsole.h"
|
||||
#include "llfloaterregioninfo.h"
|
||||
#include "llfloaterregionrestarting.h"
|
||||
#include "llfloaterreporter.h"
|
||||
#include "llfloatersavecamerapreset.h"
|
||||
#include "llfloatersaveprefpreset.h"
|
||||
#include "llfloatersceneloadstats.h"
|
||||
#include "llfloaterscriptdebug.h"
|
||||
|
|
@ -262,6 +265,7 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("bumps", "floater_bumps.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBump>);
|
||||
|
||||
LLFloaterReg::add("camera", "floater_camera.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCamera>);
|
||||
LLFloaterReg::add("camera_presets", "floater_camera_presets.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCameraPresets>);
|
||||
LLFloaterReg::add("chat_voice", "floater_voice_chat_volume.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterChatVoiceVolume>);
|
||||
// <FS:Ansariel> [FS communication UI]
|
||||
//LLFloaterReg::add("nearby_chat", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterIMNearbyChat::buildFloater);
|
||||
|
|
@ -370,6 +374,7 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("places", "floater_places.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
|
||||
LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
|
||||
LLFloaterReg::add("prefs_graphics_advanced", "floater_preferences_graphics_advanced.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceGraphicsAdvanced>);
|
||||
LLFloaterReg::add("prefs_view_advanced", "floater_preferences_view_advanced.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceViewAdvanced>);
|
||||
LLFloaterReg::add("prefs_proxy", "floater_preferences_proxy.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceProxy>);
|
||||
LLFloaterReg::add("prefs_spellchecker_import", "floater_spellcheck_import.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSpellCheckerImport>);
|
||||
LLFloaterReg::add("prefs_translation", "floater_translation_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTranslationSettings>);
|
||||
|
|
@ -389,6 +394,7 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("properties", "floater_inventory_item_properties.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterProperties>);
|
||||
LLFloaterReg::add("publish_classified", "floater_publish_classified.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPublishClassifiedFloater>);
|
||||
LLFloaterReg::add("save_pref_preset", "floater_save_pref_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSavePrefPreset>);
|
||||
LLFloaterReg::add("save_camera_preset", "floater_save_camera_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSaveCameraPreset>);
|
||||
LLFloaterReg::add("script_colors", "floater_script_ed_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptEdPrefs>);
|
||||
|
||||
LLFloaterReg::add("telehubs", "floater_telehub.xml",&LLFloaterReg::build<LLFloaterTelehub>);
|
||||
|
|
|
|||
|
|
@ -383,6 +383,7 @@ void camera_spin_around_ccw_sitting( EKeystate s )
|
|||
else
|
||||
{
|
||||
//change camera but do not send keystrokes
|
||||
gAgentCamera.unlockView();
|
||||
gAgentCamera.setOrbitLeftKey( get_orbit_rate() );
|
||||
}
|
||||
}
|
||||
|
|
@ -399,6 +400,7 @@ void camera_spin_around_cw_sitting( EKeystate s )
|
|||
else
|
||||
{
|
||||
//change camera but do not send keystrokes
|
||||
gAgentCamera.unlockView();
|
||||
gAgentCamera.setOrbitRightKey( get_orbit_rate() );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5235,13 +5235,12 @@ void handle_reset_view()
|
|||
// switching to outfit selector should automagically save any currently edited wearable
|
||||
LLFloaterSidePanelContainer::showPanel("appearance", LLSD().with("type", "my_outfits"));
|
||||
}
|
||||
|
||||
|
||||
// <FS:Zi> Added optional V1 behavior so the avatar turns into camera direction after hitting ESC
|
||||
if(gSavedSettings.getBOOL("ResetViewTurnsAvatar"))
|
||||
gAgentCamera.resetView();
|
||||
// </FS:Zi>
|
||||
|
||||
gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
|
||||
reset_view_final( TRUE );
|
||||
LLFloaterCamera::resetCameraMode();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8251,7 +8251,8 @@ void LLVOAvatar::sitOnObject(LLViewerObject *sit_object)
|
|||
mRoot->updateWorldMatrixChildren();
|
||||
|
||||
stopMotion(ANIM_AGENT_BODY_NOISE);
|
||||
|
||||
|
||||
gAgentCamera.setInitSitRot(gAgent.getFrameAgent().getQuaternion());
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ std::string unescape_name(const std::string& name);
|
|||
class FSSettingsCollector : public LLInventoryCollectFunctor
|
||||
{
|
||||
public:
|
||||
FSSettingsCollector() { LL_INFOS() << "EEP: Inventory read: " << (gInventory.isInventoryUsable() ? "yes" : "no") << LL_ENDL;}
|
||||
FSSettingsCollector() {}
|
||||
virtual ~FSSettingsCollector() {}
|
||||
|
||||
bool operator()(LLInventoryCategory* cat, LLInventoryItem* item)
|
||||
|
|
@ -69,7 +69,6 @@ public:
|
|||
if (item && item->getType() == LLAssetType::AT_SETTINGS &&
|
||||
mSeen.find(item->getAssetUUID()) == mSeen.end())
|
||||
{
|
||||
LL_INFOS() << "EEP: Found " << item->getName() << LL_ENDL;
|
||||
mSeen.insert(item->getAssetUUID());
|
||||
return true;
|
||||
}
|
||||
|
|
@ -334,19 +333,13 @@ void FloaterQuickPrefs::loadWaterPresets(const std::multimap<std::string, LLUUID
|
|||
void FloaterQuickPrefs::loadPresets()
|
||||
{
|
||||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t items, libitems;
|
||||
LLInventoryModel::item_array_t items;
|
||||
FSSettingsCollector collector;
|
||||
gInventory.collectDescendentsIf(gInventory.getRootFolderID(),
|
||||
gInventory.collectDescendentsIf(LLUUID::null,
|
||||
cats,
|
||||
items,
|
||||
LLInventoryModel::EXCLUDE_TRASH,
|
||||
collector);
|
||||
gInventory.collectDescendentsIf(gInventory.getLibraryRootFolderID(),
|
||||
cats,
|
||||
libitems,
|
||||
LLInventoryModel::EXCLUDE_TRASH,
|
||||
collector);
|
||||
items.insert(items.end(), libitems.begin(), libitems.end());
|
||||
|
||||
std::multimap<std::string, LLUUID> sky_map;
|
||||
std::multimap<std::string, LLUUID> water_map;
|
||||
|
|
@ -474,7 +467,6 @@ BOOL FloaterQuickPrefs::postBuild()
|
|||
mDayCyclePresetsCombo = getChild<LLComboBox>("DCPresetsCombo");
|
||||
|
||||
initCallbacks();
|
||||
loadPresets();
|
||||
|
||||
if (gRlvHandler.isEnabled())
|
||||
{
|
||||
|
|
@ -819,8 +811,11 @@ void FloaterQuickPrefs::refreshSettings()
|
|||
sky_spinner->setEnabled(TRUE);
|
||||
sky_default_button->setEnabled(TRUE);
|
||||
|
||||
BOOL bumpshiny = gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps && LLFeatureManager::getInstance()->isFeatureAvailable("RenderObjectBump") && gSavedSettings.getBOOL("RenderObjectBump");
|
||||
BOOL shaders = gSavedSettings.getBOOL("WindLightUseAtmosShaders");
|
||||
BOOL enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
|
||||
gSavedSettings.getBOOL("RenderObjectBump") &&
|
||||
bumpshiny &&
|
||||
shaders &&
|
||||
gGLManager.mHasFramebufferObject &&
|
||||
gSavedSettings.getBOOL("RenderAvatarVP") &&
|
||||
(mCtrlWindLight->get()) ? TRUE : FALSE;
|
||||
|
|
@ -984,6 +979,7 @@ void FloaterQuickPrefs::enableWindlightButtons(BOOL enable)
|
|||
childSetEnabled("edit_sky_preset", enable);
|
||||
childSetEnabled("new_water_preset", enable);
|
||||
childSetEnabled("edit_water_preset", enable);
|
||||
childSetEnabled("PauseClouds", enable);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 367 B |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 369 B |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 367 B |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 363 B |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 372 B |
|
Before Width: | Height: | Size: 366 B After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 366 B |
|
|
@ -99,7 +99,7 @@ with the same filename but different name
|
|||
<texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="true" scale.left="0" scale.top="1" scale.right="0" scale.bottom="0" />
|
||||
<texture name="BuyArrow_Press" file_name="navbar/BuyArrow_Press.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
|
||||
|
||||
<texture name="Cam_Avatar_Off" file_name="bottomtray/Cam_Avatar_Off.png" preload="false" />
|
||||
<texture name="Cam_Avatar_Off" file_name="bottomtray/Cam_Avatar_Off.png" preload="true" />
|
||||
<texture name="Cam_FreeCam_Off" file_name="bottomtray/Cam_FreeCam_Off.png" preload="false" />
|
||||
<texture name="Cam_Orbit_Off" file_name="bottomtray/Cam_Orbit_Off.png" preload="false" />
|
||||
<texture name="Cam_Pan_Off" file_name="bottomtray/Cam_Pan_Off.png" preload="false" />
|
||||
|
|
@ -114,8 +114,10 @@ with the same filename but different name
|
|||
|
||||
<texture name="Cam_Rotate_In" file_name="bottomtray/Cam_Rotate_In.png" preload="false" />
|
||||
<texture name="Cam_Rotate_Out" file_name="bottomtray/Cam_Rotate_Out.png" preload="false" />
|
||||
<texture name="Cam_Rotate_Center" file_name="bottomtray/Cam_Rotate_Center.png" preload="false" />
|
||||
<texture name="Cam_Tracking_In" file_name="bottomtray/Cam_Tracking_In.png" preload="false" />
|
||||
<texture name="Cam_Tracking_Out" file_name="bottomtray/Cam_Tracking_Out.png" preload="false" />
|
||||
<texture name="Cam_Tracking_Center" file_name="bottomtray/Cam_Tracking_Center.png" preload="false" />
|
||||
|
||||
<!-- FS:Ansariel: FIRE-7758: 7758 -->
|
||||
<texture name="Cam_Store_Pos" file_name="bottomtray/camera_store.png" preload="false" />
|
||||
|
|
@ -216,6 +218,7 @@ with the same filename but different name
|
|||
<texture name="Edit_Wrench" file_name="icons/Edit_Wrench.png" preload="false" />
|
||||
|
||||
<texture name="Presets_Icon" file_name="icons/Presets_Icon.png" preload="true" />
|
||||
<texture name="Presets_Icon_Graphic" file_name="icons/Presets_Icon_Graphic.png" preload="true" />
|
||||
|
||||
<texture name="Favorite_Star_Active" file_name="navbar/Favorite_Star_Active.png" preload="false" />
|
||||
<texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" />
|
||||
|
|
@ -266,6 +269,7 @@ with the same filename but different name
|
|||
<texture name="Icon_Gear_Background" file_name="windows/Icon_Gear_Background.png" preload="false" />
|
||||
<texture name="Icon_Gear_Foreground" file_name="windows/Icon_Gear_Foreground.png" preload="false" />
|
||||
<texture name="Icon_Gear_Press" file_name="windows/Icon_Gear_Press.png" preload="false" />
|
||||
<texture name="Icon_Gear" file_name="windows/Icon_Gear.png" preload="false" />
|
||||
|
||||
<texture name="Icon_Help_Foreground" file_name="windows/Icon_Help_Foreground.png" preload="true" />
|
||||
<texture name="Icon_Help_Press" file_name="windows/Icon_Help_Press.png" preload="true" />
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 6.1 KiB |
|
|
@ -12,21 +12,18 @@
|
|||
<floater.string name="free_mode_title">
|
||||
Objekt ansehen
|
||||
</floater.string>
|
||||
|
||||
<panel name="zoom">
|
||||
<layout_stack name="camera_view_layout_stack">
|
||||
<layout_panel name="camera_rotate_layout_panel">
|
||||
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="camera_zoom_layout_panel">
|
||||
<slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="panel_track">
|
||||
<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
<panel name="buttons_view">
|
||||
<string name="inactive_combo_text">
|
||||
Voreinstellung...
|
||||
</string>
|
||||
|
||||
<panel name="controls">
|
||||
<panel name="zoom">
|
||||
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
|
||||
<slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/>
|
||||
<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
|
||||
</panel>
|
||||
</panel>
|
||||
<panel name="buttons_panel">
|
||||
<panel_camera_item name="front_view" tool_tip="Frontalansicht">
|
||||
<panel_camera_item.text name="front_view_text">
|
||||
</panel_camera_item.text>
|
||||
|
|
@ -39,8 +36,6 @@
|
|||
<panel_camera_item.text name="rear_view_text">
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
</panel>
|
||||
<panel name="buttons">
|
||||
<panel_camera_item name="object_view" tool_tip="Objekt-Ansicht">
|
||||
<panel_camera_item.text name="object_view_text">
|
||||
</panel_camera_item.text>
|
||||
|
|
@ -54,4 +49,9 @@
|
|||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
</panel>
|
||||
<combo_box name="preset_combo">
|
||||
<combo_box.item label="Voreinstellung verwenden" name="Use preset"/>
|
||||
</combo_box>
|
||||
<button name="gear_btn" tool_tip="Kamera-Voreinstellungen"/>
|
||||
<button label="Kamera-Position..." name="camera_position_btn"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater title="Kamera-Voreinstellungen" name="floater_camera_presets">
|
||||
</floater>
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="HoverHeight" title="Schwebehöhe festlegen">
|
||||
<slider label="Höhe" name="HoverHeightSlider"/>
|
||||
<check_box name="BindCameraCheck" label="Kameraansicht beeinflussen"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
</text>
|
||||
<button name="btn_personal_lighting" label="Persönliche Beleuchtung..."/>
|
||||
<button name="ResetToRegionDefault" tool_tip="Setzt die Umgebungseinstellungen auf die gemeinsame Umgebung zurück."/>
|
||||
<button name="PauseClouds" label="Wolken pausieren" tool_tip="Pausiert die Wolken-Animation."/>
|
||||
</panel>
|
||||
|
||||
<panel name="P_Q_Windlights">
|
||||
|
|
|
|||
|
|
@ -12,6 +12,9 @@
|
|||
<floater.string name="free_mode_title">
|
||||
Objekt ansehen
|
||||
</floater.string>
|
||||
<string name="inactive_combo_text">
|
||||
Voreinstellung...
|
||||
</string>
|
||||
|
||||
<tab_container name="tabs">
|
||||
<panel name="P_Cam_Controls_1" label="Steuerung 1">
|
||||
|
|
@ -45,6 +48,11 @@
|
|||
Mouselook
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<combo_box name="preset_combo">
|
||||
<combo_box.item label="Voreinstellung verwenden" name="Use preset"/>
|
||||
</combo_box>
|
||||
<button name="gear_btn" tool_tip="Kamera-Voreinstellungen"/>
|
||||
<button label="Position..." name="camera_position_btn"/>
|
||||
</panel>
|
||||
<panel name="zoom">
|
||||
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="floaterpreferencesviewadvanced" title="Kamera-Position">
|
||||
<text name="camera_offset_lbl">
|
||||
Kamera-Offset:
|
||||
</text>
|
||||
<text name="focus_offset_lbl">
|
||||
Fokus-Offset:
|
||||
</text>
|
||||
<text name="offset_scale_lbl">
|
||||
Kamera-Offset-Skalierung:
|
||||
</text>
|
||||
<button label="Speichern als Voreinstellung..." name="save_preset_btn" width="180"/>
|
||||
<button label="Schließen" name="close_btn" width="70"/>
|
||||
</floater>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<floater name="save_camera_preset" title="Kameravoreinstellung speichern">
|
||||
<string name="btn_label_save">Speichern</string>
|
||||
<string name="btn_label_replace">Ersetzen</string>
|
||||
<radio_group name="radio_save_preset">
|
||||
<radio_item label="Als neue Voreinstellung speichern" name="new_preset"/>
|
||||
<radio_item label="Voreinstellung ersetzen" name="replace_preset"/>
|
||||
</radio_group>
|
||||
<button label="Speichern" name="save"/>
|
||||
<button label="Abbrechen" name="cancel"/>
|
||||
</floater>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<floater name="Save Pref Preset" title="Voreinstellung speichern">
|
||||
<floater name="save_pref_preset" title="Grafikvoreinstellung speichern">
|
||||
<string name="title_graphic">
|
||||
Grafikvoreinstellung speichern
|
||||
</string>
|
||||
|
|
|
|||