Moves some constants out of llavatarconstants.h 8ebf8f4608bd: Change various const constants to constexpr e07d5d43ba30: CID-143595 30b6935fc66d: CID-143595 acc96f9051cb: Fix a memory leak in viewer side baking initial wearable setup Sync llmodel.* Changesets assimilated: f8f7706c2902: CID-143554 - fix out of bounds access 223eb65adce4: CID-143554 - Chase 2ceb49aaa133: CID-42838, CID-42930, CID-42933, CID-42938, CID-42940, CID-42945, CID-42948, CID-56111, CID-83907 d220005d9f23: Missing null check before deref 31dbb0f3b6ee: CID-42571 CID-42576 CID-42578 49caf082e65c: change unordered_map to flat_map Doesn't cause as many problems as a hashmap when it comes to assumptions in the LLUI system. f93f5e881484: "update" linux cef downgrade to fix javascript problems cba818dd9269: Various null checks and etc. 1b4c6bc483bb: CID-42847, CID-42854, CID-42886, CID-42921, CID-42922, CID-42923, CID-42924, CID-42925, CID-42927, CID-42928, CID-83871, CID-83876, CID-83878, CID-83880, CID-83900, CID-143573 0fe90cd9ec24: Various file size related things a79f6f653dca: CID-42918 - Initialize member pointers in LLFloaterGodTools 0b70d600d978: Tweak LLFloaterBuyLand initializations e8b173ffe813: CID-42854 - Additional fix to LLDrawInfo b5d745cf3fde: Fix signage 4f2e2f384781: Initialize and cleanup various class member variables. CID-42899, CID-42900, CID-42902, CID-42903, CID-42904, CID-42905, CID-42909, CID-42910, CID-42911, CID-42912, CID-42913, CID-42967, CID-83853, CID-83898, CID-83890, CID-143584 9851a3e39b4c: Fix platform specific include directories 5c074e84f1be: Initialize and clenaup various more class member variables. CID-42885, CID-42853, CID-42894, CID-42895, CID-42896, CID-83908, CID-143574, CID-143575, CID-143576, CID-143576, CID-143578 ac262854ac92: Brace sub-object in initialization to make our intentions clear to clang 358da477d4c1: More double brace init c3850119314a: Initialize various member pointers in panels CID-83902, CID-83903, CID-83905, CID-83909, CID-83911, CID-83912, CID-143572
343 lines
13 KiB
C++
343 lines
13 KiB
C++
/**
|
|
* @file llfloaterjoystick.cpp
|
|
* @brief Joystick preferences panel
|
|
*
|
|
* $LicenseInfo:firstyear=2007&license=viewergpl$
|
|
*
|
|
* Copyright (c) 2007-2009, Linden Research, Inc.
|
|
*
|
|
* Second Life Viewer Source Code
|
|
* The source code in this file ("Source Code") is provided by Linden Lab
|
|
* to you under the terms of the GNU General Public License, version 2.0
|
|
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
*
|
|
* There are special exceptions to the terms and conditions of the GPL as
|
|
* it is applied to this Source Code. View the full text of the exception
|
|
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
|
* online at
|
|
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
*
|
|
* By copying, modifying or distributing this software, you acknowledge
|
|
* that you have read and understood your obligations described above,
|
|
* and agree to abide by those obligations.
|
|
*
|
|
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
|
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
|
* COMPLETENESS OR PERFORMANCE.
|
|
* $/LicenseInfo$
|
|
*/
|
|
|
|
#include "llviewerprecompiledheaders.h"
|
|
|
|
// file include
|
|
#include "llfloaterjoystick.h"
|
|
|
|
// linden library includes
|
|
#include "llerror.h"
|
|
#include "llrect.h"
|
|
#include "llstring.h"
|
|
|
|
// project includes
|
|
#include "lluictrlfactory.h"
|
|
#include "llviewercontrol.h"
|
|
#include "llappviewer.h"
|
|
#include "llviewerjoystick.h"
|
|
#include "llcheckboxctrl.h"
|
|
|
|
LLFloaterJoystick::LLFloaterJoystick(const LLSD& data)
|
|
: LLFloater("floater_joystick")
|
|
, mCheckJoystickEnabled(nullptr)
|
|
, mCheckFlycamEnabled(nullptr)
|
|
, mAxisStatsBar({ {nullptr,nullptr,nullptr,nullptr,nullptr,nullptr} })
|
|
{
|
|
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_joystick.xml");
|
|
center();
|
|
}
|
|
|
|
void LLFloaterJoystick::draw()
|
|
{
|
|
bool joystick_inited = LLViewerJoystick::getInstance()->isJoystickInitialized();
|
|
childSetEnabled("enable_joystick", joystick_inited);
|
|
childSetEnabled("joystick_type", joystick_inited);
|
|
std::string desc = LLViewerJoystick::getInstance()->getDescription();
|
|
if (desc.empty()) desc = getString("NoDevice");
|
|
childSetText("joystick_type", desc);
|
|
|
|
LLViewerJoystick* joystick(LLViewerJoystick::getInstance());
|
|
for (U32 i = 0; i < 6; i++)
|
|
{
|
|
F32 value = joystick->getJoystickAxis(i);
|
|
mAxisStats[i]->addValue(value * gFrameIntervalSeconds);
|
|
|
|
if (mAxisStatsBar[i]->mMinBar > value)
|
|
{
|
|
mAxisStatsBar[i]->mMinBar = value;
|
|
}
|
|
if (mAxisStatsBar[i]->mMaxBar < value)
|
|
{
|
|
mAxisStatsBar[i]->mMaxBar = value;
|
|
}
|
|
}
|
|
|
|
LLFloater::draw();
|
|
}
|
|
|
|
BOOL LLFloaterJoystick::postBuild()
|
|
{
|
|
F32 range = gSavedSettings.getBOOL("Cursor3D") ? 1024.f : 2.f;
|
|
LLUIString axis = getString("Axis");
|
|
LLUIString joystick = getString("JoystickMonitor");
|
|
|
|
// use this child to get relative positioning info; we'll place the
|
|
// joystick monitor on its right, vertically aligned to it.
|
|
LLView* child = getChild<LLView>("FlycamAxisScale1");
|
|
LLRect rect;
|
|
|
|
if (child)
|
|
{
|
|
LLRect r = child->getRect();
|
|
rect = LLRect(350, r.mTop, r.mRight + 200, 0);
|
|
}
|
|
|
|
|
|
LLStatView::Params params;
|
|
params.name("axis values");
|
|
params.rect(rect);
|
|
params.show_label(true);
|
|
params.label(joystick);
|
|
mAxisStatsView = LLUICtrlFactory::create<LLStatView>(params);
|
|
|
|
for (U32 i = 0; i < 6; i++)
|
|
{
|
|
axis.setArg("[NUM]", llformat("%d", i));
|
|
std::string stat_name(llformat("Joystick axis %d", i));
|
|
mAxisStats[i] = new LLStat(stat_name,4);
|
|
mAxisStatsBar[i] = mAxisStatsView->addStat(axis, mAxisStats[i]);
|
|
mAxisStatsBar[i]->mMinBar = -range;
|
|
mAxisStatsBar[i]->mMaxBar = range;
|
|
mAxisStatsBar[i]->mLabelSpacing = range * 0.5f;
|
|
mAxisStatsBar[i]->mTickSpacing = range * 0.25f;
|
|
}
|
|
|
|
addChild(mAxisStatsView);
|
|
|
|
mCheckJoystickEnabled = getChild<LLCheckBoxCtrl>("enable_joystick");
|
|
childSetCommitCallback("enable_joystick",onCommitJoystickEnabled,this);
|
|
mCheckFlycamEnabled = getChild<LLCheckBoxCtrl>("JoystickFlycamEnabled");
|
|
childSetCommitCallback("JoystickFlycamEnabled",onCommitJoystickEnabled,this);
|
|
|
|
getChild<LLUICtrl>("Default")->setCommitCallback(boost::bind(&LLFloaterJoystick::onClickDefault, this, _2));
|
|
childSetAction("cancel_btn", onClickCancel, this);
|
|
childSetAction("ok_btn", onClickOK, this);
|
|
|
|
refresh();
|
|
return TRUE;
|
|
}
|
|
|
|
LLFloaterJoystick::~LLFloaterJoystick()
|
|
{
|
|
// Children all cleaned up by default view destructor.
|
|
}
|
|
|
|
|
|
void LLFloaterJoystick::apply()
|
|
{
|
|
}
|
|
|
|
void LLFloaterJoystick::refresh()
|
|
{
|
|
LLFloater::refresh();
|
|
|
|
mJoystickEnabled = gSavedSettings.getBOOL("JoystickEnabled");
|
|
|
|
mJoystickAxis[0] = gSavedSettings.getS32("JoystickAxis0");
|
|
mJoystickAxis[1] = gSavedSettings.getS32("JoystickAxis1");
|
|
mJoystickAxis[2] = gSavedSettings.getS32("JoystickAxis2");
|
|
mJoystickAxis[3] = gSavedSettings.getS32("JoystickAxis3");
|
|
mJoystickAxis[4] = gSavedSettings.getS32("JoystickAxis4");
|
|
mJoystickAxis[5] = gSavedSettings.getS32("JoystickAxis5");
|
|
mJoystickAxis[6] = gSavedSettings.getS32("JoystickAxis6");
|
|
|
|
m3DCursor = gSavedSettings.getBOOL("Cursor3D");
|
|
mAutoLeveling = gSavedSettings.getBOOL("AutoLeveling");
|
|
mZoomDirect = gSavedSettings.getBOOL("ZoomDirect");
|
|
|
|
mAvatarEnabled = gSavedSettings.getBOOL("JoystickAvatarEnabled");
|
|
mBuildEnabled = gSavedSettings.getBOOL("JoystickBuildEnabled");
|
|
mFlycamEnabled = gSavedSettings.getBOOL("JoystickFlycamEnabled");
|
|
|
|
mAvatarAxisScale[0] = gSavedSettings.getF32("AvatarAxisScale0");
|
|
mAvatarAxisScale[1] = gSavedSettings.getF32("AvatarAxisScale1");
|
|
mAvatarAxisScale[2] = gSavedSettings.getF32("AvatarAxisScale2");
|
|
mAvatarAxisScale[3] = gSavedSettings.getF32("AvatarAxisScale3");
|
|
mAvatarAxisScale[4] = gSavedSettings.getF32("AvatarAxisScale4");
|
|
mAvatarAxisScale[5] = gSavedSettings.getF32("AvatarAxisScale5");
|
|
|
|
mBuildAxisScale[0] = gSavedSettings.getF32("BuildAxisScale0");
|
|
mBuildAxisScale[1] = gSavedSettings.getF32("BuildAxisScale1");
|
|
mBuildAxisScale[2] = gSavedSettings.getF32("BuildAxisScale2");
|
|
mBuildAxisScale[3] = gSavedSettings.getF32("BuildAxisScale3");
|
|
mBuildAxisScale[4] = gSavedSettings.getF32("BuildAxisScale4");
|
|
mBuildAxisScale[5] = gSavedSettings.getF32("BuildAxisScale5");
|
|
|
|
mFlycamAxisScale[0] = gSavedSettings.getF32("FlycamAxisScale0");
|
|
mFlycamAxisScale[1] = gSavedSettings.getF32("FlycamAxisScale1");
|
|
mFlycamAxisScale[2] = gSavedSettings.getF32("FlycamAxisScale2");
|
|
mFlycamAxisScale[3] = gSavedSettings.getF32("FlycamAxisScale3");
|
|
mFlycamAxisScale[4] = gSavedSettings.getF32("FlycamAxisScale4");
|
|
mFlycamAxisScale[5] = gSavedSettings.getF32("FlycamAxisScale5");
|
|
mFlycamAxisScale[6] = gSavedSettings.getF32("FlycamAxisScale6");
|
|
|
|
mAvatarAxisDeadZone[0] = gSavedSettings.getF32("AvatarAxisDeadZone0");
|
|
mAvatarAxisDeadZone[1] = gSavedSettings.getF32("AvatarAxisDeadZone1");
|
|
mAvatarAxisDeadZone[2] = gSavedSettings.getF32("AvatarAxisDeadZone2");
|
|
mAvatarAxisDeadZone[3] = gSavedSettings.getF32("AvatarAxisDeadZone3");
|
|
mAvatarAxisDeadZone[4] = gSavedSettings.getF32("AvatarAxisDeadZone4");
|
|
mAvatarAxisDeadZone[5] = gSavedSettings.getF32("AvatarAxisDeadZone5");
|
|
|
|
mBuildAxisDeadZone[0] = gSavedSettings.getF32("BuildAxisDeadZone0");
|
|
mBuildAxisDeadZone[1] = gSavedSettings.getF32("BuildAxisDeadZone1");
|
|
mBuildAxisDeadZone[2] = gSavedSettings.getF32("BuildAxisDeadZone2");
|
|
mBuildAxisDeadZone[3] = gSavedSettings.getF32("BuildAxisDeadZone3");
|
|
mBuildAxisDeadZone[4] = gSavedSettings.getF32("BuildAxisDeadZone4");
|
|
mBuildAxisDeadZone[5] = gSavedSettings.getF32("BuildAxisDeadZone5");
|
|
|
|
mFlycamAxisDeadZone[0] = gSavedSettings.getF32("FlycamAxisDeadZone0");
|
|
mFlycamAxisDeadZone[1] = gSavedSettings.getF32("FlycamAxisDeadZone1");
|
|
mFlycamAxisDeadZone[2] = gSavedSettings.getF32("FlycamAxisDeadZone2");
|
|
mFlycamAxisDeadZone[3] = gSavedSettings.getF32("FlycamAxisDeadZone3");
|
|
mFlycamAxisDeadZone[4] = gSavedSettings.getF32("FlycamAxisDeadZone4");
|
|
mFlycamAxisDeadZone[5] = gSavedSettings.getF32("FlycamAxisDeadZone5");
|
|
mFlycamAxisDeadZone[6] = gSavedSettings.getF32("FlycamAxisDeadZone6");
|
|
|
|
mAvatarFeathering = gSavedSettings.getF32("AvatarFeathering");
|
|
mBuildFeathering = gSavedSettings.getF32("BuildFeathering");
|
|
mFlycamFeathering = gSavedSettings.getF32("FlycamFeathering");
|
|
}
|
|
|
|
void LLFloaterJoystick::cancel()
|
|
{
|
|
gSavedSettings.setBOOL("JoystickEnabled", mJoystickEnabled);
|
|
|
|
gSavedSettings.setS32("JoystickAxis0", mJoystickAxis[0]);
|
|
gSavedSettings.setS32("JoystickAxis1", mJoystickAxis[1]);
|
|
gSavedSettings.setS32("JoystickAxis2", mJoystickAxis[2]);
|
|
gSavedSettings.setS32("JoystickAxis3", mJoystickAxis[3]);
|
|
gSavedSettings.setS32("JoystickAxis4", mJoystickAxis[4]);
|
|
gSavedSettings.setS32("JoystickAxis5", mJoystickAxis[5]);
|
|
gSavedSettings.setS32("JoystickAxis6", mJoystickAxis[6]);
|
|
|
|
gSavedSettings.setBOOL("Cursor3D", m3DCursor);
|
|
gSavedSettings.setBOOL("AutoLeveling", mAutoLeveling);
|
|
gSavedSettings.setBOOL("ZoomDirect", mZoomDirect );
|
|
|
|
gSavedSettings.setBOOL("JoystickAvatarEnabled", mAvatarEnabled);
|
|
gSavedSettings.setBOOL("JoystickBuildEnabled", mBuildEnabled);
|
|
gSavedSettings.setBOOL("JoystickFlycamEnabled", mFlycamEnabled);
|
|
|
|
gSavedSettings.setF32("AvatarAxisScale0", mAvatarAxisScale[0]);
|
|
gSavedSettings.setF32("AvatarAxisScale1", mAvatarAxisScale[1]);
|
|
gSavedSettings.setF32("AvatarAxisScale2", mAvatarAxisScale[2]);
|
|
gSavedSettings.setF32("AvatarAxisScale3", mAvatarAxisScale[3]);
|
|
gSavedSettings.setF32("AvatarAxisScale4", mAvatarAxisScale[4]);
|
|
gSavedSettings.setF32("AvatarAxisScale5", mAvatarAxisScale[5]);
|
|
|
|
gSavedSettings.setF32("BuildAxisScale0", mBuildAxisScale[0]);
|
|
gSavedSettings.setF32("BuildAxisScale1", mBuildAxisScale[1]);
|
|
gSavedSettings.setF32("BuildAxisScale2", mBuildAxisScale[2]);
|
|
gSavedSettings.setF32("BuildAxisScale3", mBuildAxisScale[3]);
|
|
gSavedSettings.setF32("BuildAxisScale4", mBuildAxisScale[4]);
|
|
gSavedSettings.setF32("BuildAxisScale5", mBuildAxisScale[5]);
|
|
|
|
gSavedSettings.setF32("FlycamAxisScale0", mFlycamAxisScale[0]);
|
|
gSavedSettings.setF32("FlycamAxisScale1", mFlycamAxisScale[1]);
|
|
gSavedSettings.setF32("FlycamAxisScale2", mFlycamAxisScale[2]);
|
|
gSavedSettings.setF32("FlycamAxisScale3", mFlycamAxisScale[3]);
|
|
gSavedSettings.setF32("FlycamAxisScale4", mFlycamAxisScale[4]);
|
|
gSavedSettings.setF32("FlycamAxisScale5", mFlycamAxisScale[5]);
|
|
gSavedSettings.setF32("FlycamAxisScale6", mFlycamAxisScale[6]);
|
|
|
|
gSavedSettings.setF32("AvatarAxisDeadZone0", mAvatarAxisDeadZone[0]);
|
|
gSavedSettings.setF32("AvatarAxisDeadZone1", mAvatarAxisDeadZone[1]);
|
|
gSavedSettings.setF32("AvatarAxisDeadZone2", mAvatarAxisDeadZone[2]);
|
|
gSavedSettings.setF32("AvatarAxisDeadZone3", mAvatarAxisDeadZone[3]);
|
|
gSavedSettings.setF32("AvatarAxisDeadZone4", mAvatarAxisDeadZone[4]);
|
|
gSavedSettings.setF32("AvatarAxisDeadZone5", mAvatarAxisDeadZone[5]);
|
|
|
|
gSavedSettings.setF32("BuildAxisDeadZone0", mBuildAxisDeadZone[0]);
|
|
gSavedSettings.setF32("BuildAxisDeadZone1", mBuildAxisDeadZone[1]);
|
|
gSavedSettings.setF32("BuildAxisDeadZone2", mBuildAxisDeadZone[2]);
|
|
gSavedSettings.setF32("BuildAxisDeadZone3", mBuildAxisDeadZone[3]);
|
|
gSavedSettings.setF32("BuildAxisDeadZone4", mBuildAxisDeadZone[4]);
|
|
gSavedSettings.setF32("BuildAxisDeadZone5", mBuildAxisDeadZone[5]);
|
|
|
|
gSavedSettings.setF32("FlycamAxisDeadZone0", mFlycamAxisDeadZone[0]);
|
|
gSavedSettings.setF32("FlycamAxisDeadZone1", mFlycamAxisDeadZone[1]);
|
|
gSavedSettings.setF32("FlycamAxisDeadZone2", mFlycamAxisDeadZone[2]);
|
|
gSavedSettings.setF32("FlycamAxisDeadZone3", mFlycamAxisDeadZone[3]);
|
|
gSavedSettings.setF32("FlycamAxisDeadZone4", mFlycamAxisDeadZone[4]);
|
|
gSavedSettings.setF32("FlycamAxisDeadZone5", mFlycamAxisDeadZone[5]);
|
|
gSavedSettings.setF32("FlycamAxisDeadZone6", mFlycamAxisDeadZone[6]);
|
|
|
|
gSavedSettings.setF32("AvatarFeathering", mAvatarFeathering);
|
|
gSavedSettings.setF32("BuildFeathering", mBuildFeathering);
|
|
gSavedSettings.setF32("FlycamFeathering", mFlycamFeathering);
|
|
}
|
|
|
|
void LLFloaterJoystick::onCommitJoystickEnabled(LLUICtrl*, void *joy_panel)
|
|
{
|
|
LLFloaterJoystick* self = (LLFloaterJoystick*)joy_panel;
|
|
BOOL joystick_enabled = self->mCheckJoystickEnabled->get();
|
|
BOOL flycam_enabled = self->mCheckFlycamEnabled->get();
|
|
|
|
if (!joystick_enabled || !flycam_enabled)
|
|
{
|
|
// Turn off flycam
|
|
LLViewerJoystick* joystick(LLViewerJoystick::getInstance());
|
|
if (joystick->getOverrideCamera())
|
|
{
|
|
joystick->toggleFlycam();
|
|
}
|
|
}
|
|
}
|
|
|
|
S32 get_joystick_type();
|
|
void LLFloaterJoystick::onClickDefault(const LLSD& val)
|
|
{
|
|
S32 type(val.asInteger());
|
|
if (val.isUndefined()) // If button portion, set to default for device.
|
|
if ((type = get_joystick_type()) == -1) // Invalid/No device
|
|
return;
|
|
LLViewerJoystick::getInstance()->setSNDefaults(type);
|
|
}
|
|
|
|
void LLFloaterJoystick::onClickCancel(void *joy_panel)
|
|
{
|
|
if (joy_panel)
|
|
{
|
|
LLFloaterJoystick* self = (LLFloaterJoystick*)joy_panel;
|
|
|
|
if (self)
|
|
{
|
|
self->cancel();
|
|
self->close();
|
|
}
|
|
}
|
|
}
|
|
|
|
void LLFloaterJoystick::onClickOK(void *joy_panel)
|
|
{
|
|
if (joy_panel)
|
|
{
|
|
LLFloaterJoystick* self = (LLFloaterJoystick*)joy_panel;
|
|
|
|
if (self)
|
|
{
|
|
self->close();
|
|
}
|
|
}
|
|
}
|