summaryrefslogtreecommitdiff
path: root/indra/newview/llfloaterjoystick.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llfloaterjoystick.cpp')
-rw-r--r--indra/newview/llfloaterjoystick.cpp333
1 files changed, 333 insertions, 0 deletions
diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp
new file mode 100644
index 0000000000..44abdd3cde
--- /dev/null
+++ b/indra/newview/llfloaterjoystick.cpp
@@ -0,0 +1,333 @@
+/**
+ * @file llfloaterjoystick.cpp
+ * @brief Joystick preferences panel
+ *
+ * $LicenseInfo:firstyear=2007&license=viewergpl$
+ *
+ * Copyright (c) 2007-2008, 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://secondlife.com/developers/opensource/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://secondlife.com/developers/opensource/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"
+
+LLFloaterJoystick::LLFloaterJoystick(const LLSD& data)
+ : LLFloater("floater_joystick")
+{
+ LLUICtrlFactory::getInstance()->buildFloater(this, "floater_joystick.xml");
+ center();
+}
+
+void LLFloaterJoystick::draw()
+{
+ 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 = getUIString("Axis");
+ LLUIString joystick = getUIString("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();
+ LLRect f = getRect();
+ rect = LLRect(350, r.mTop, r.mRight + 200, 0);
+ }
+
+ mAxisStatsView = new LLStatView("axis values", joystick, "", rect);
+ mAxisStatsView->setDisplayChildren(TRUE);
+
+ for (U32 i = 0; i < 6; i++)
+ {
+ axis.setArg("[NUM]", llformat("%d", i));
+ mAxisStats[i] = new LLStat(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);
+
+ childSetAction("SpaceNavigatorDefaults", onClickRestoreSNDefaults, this);
+ refresh();
+ return TRUE;
+}
+
+LLFloaterJoystick::~LLFloaterJoystick()
+{
+ // Children all cleaned up by default view destructor.
+}
+
+
+void LLFloaterJoystick::apply()
+{
+}
+
+void LLFloaterJoystick::refresh()
+{
+ LLFloater::refresh();
+
+ 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");
+
+ 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()
+{
+ llinfos << "reading from gSavedSettings->Cursor3D="
+ << gSavedSettings.getBOOL("Cursor3D") << "; m3DCursor="
+ << m3DCursor << llendl;
+
+ 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.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::onClickRestoreSNDefaults(void *joy_panel)
+{
+ setSNDefaults();
+}
+
+void LLFloaterJoystick::setSNDefaults()
+{
+#if LL_DARWIN
+#define kPlatformScale 20.f
+#else
+#define kPlatformScale 1.f
+#endif
+
+ //gViewerWindow->alertXml("CacheWillClear");
+ llinfos << "restoring SpaceNavigator defaults..." << llendl;
+
+ gSavedSettings.setS32("JoystickAxis1", 0); // x (slide)
+ gSavedSettings.setS32("JoystickAxis2", 2); // y (up)
+ gSavedSettings.setS32("JoystickAxis0", 1); // z (at)
+ gSavedSettings.setS32("JoystickAxis4", 3); // roll
+ gSavedSettings.setS32("JoystickAxis5", 5); // yaw
+ gSavedSettings.setS32("JoystickAxis3", 4); // pitch
+ gSavedSettings.setS32("JoystickAxis6", -1);
+
+#if LL_DARWIN
+ // The SpaceNavigator doesn't act as a 3D cursor on OS X.
+ gSavedSettings.setBOOL("Cursor3D", false);
+#else
+ gSavedSettings.setBOOL("Cursor3D", true);
+#endif
+ gSavedSettings.setBOOL("AutoLeveling", true);
+ gSavedSettings.setBOOL("ZoomDirect", false);
+
+ gSavedSettings.setF32("AvatarAxisScale0", 1.f);
+ gSavedSettings.setF32("AvatarAxisScale1", 1.f);
+ gSavedSettings.setF32("AvatarAxisScale2", 1.f);
+ gSavedSettings.setF32("AvatarAxisScale4", .1f * kPlatformScale);
+ gSavedSettings.setF32("AvatarAxisScale5", .1f * kPlatformScale);
+ gSavedSettings.setF32("AvatarAxisScale3", 0.f * kPlatformScale);
+ gSavedSettings.setF32("BuildAxisScale1", .3f * kPlatformScale);
+ gSavedSettings.setF32("BuildAxisScale2", .3f * kPlatformScale);
+ gSavedSettings.setF32("BuildAxisScale0", .3f * kPlatformScale);
+ gSavedSettings.setF32("BuildAxisScale4", .3f * kPlatformScale);
+ gSavedSettings.setF32("BuildAxisScale5", .3f * kPlatformScale);
+ gSavedSettings.setF32("BuildAxisScale3", .3f * kPlatformScale);
+ gSavedSettings.setF32("FlycamAxisScale1", 2.f * kPlatformScale);
+ gSavedSettings.setF32("FlycamAxisScale2", 2.f * kPlatformScale);
+ gSavedSettings.setF32("FlycamAxisScale0", 2.1f * kPlatformScale);
+ gSavedSettings.setF32("FlycamAxisScale4", .1f * kPlatformScale);
+ gSavedSettings.setF32("FlycamAxisScale5", .15f * kPlatformScale);
+ gSavedSettings.setF32("FlycamAxisScale3", 0.f * kPlatformScale);
+ gSavedSettings.setF32("FlycamAxisScale6", 0.f * kPlatformScale);
+
+ gSavedSettings.setF32("AvatarAxisDeadZone0", .1f);
+ gSavedSettings.setF32("AvatarAxisDeadZone1", .1f);
+ gSavedSettings.setF32("AvatarAxisDeadZone2", .1f);
+ gSavedSettings.setF32("AvatarAxisDeadZone3", 1.f);
+ gSavedSettings.setF32("AvatarAxisDeadZone4", .02f);
+ gSavedSettings.setF32("AvatarAxisDeadZone5", .01f);
+ gSavedSettings.setF32("BuildAxisDeadZone0", .01f);
+ gSavedSettings.setF32("BuildAxisDeadZone1", .01f);
+ gSavedSettings.setF32("BuildAxisDeadZone2", .01f);
+ gSavedSettings.setF32("BuildAxisDeadZone3", .01f);
+ gSavedSettings.setF32("BuildAxisDeadZone4", .01f);
+ gSavedSettings.setF32("BuildAxisDeadZone5", .01f);
+ gSavedSettings.setF32("FlycamAxisDeadZone0", .01f);
+ gSavedSettings.setF32("FlycamAxisDeadZone1", .01f);
+ gSavedSettings.setF32("FlycamAxisDeadZone2", .01f);
+ gSavedSettings.setF32("FlycamAxisDeadZone3", .01f);
+ gSavedSettings.setF32("FlycamAxisDeadZone4", .01f);
+ gSavedSettings.setF32("FlycamAxisDeadZone5", .01f);
+ gSavedSettings.setF32("FlycamAxisDeadZone6", 1.f);
+
+ gSavedSettings.setF32("AvatarFeathering", 6.f);
+ gSavedSettings.setF32("BuildFeathering", 12.f);
+ gSavedSettings.setF32("FlycamFeathering", 5.f);
+}