diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index dcb7a4eb7..e32525a9d 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -189,6 +189,7 @@ #include "llvovolume.h" #include "hippogridmanager.h" +#include "wlfPanel_AdvSettings.h" void toggle_search_floater(); @@ -4122,6 +4123,16 @@ void reset_view_final( BOOL proceed ) } gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW); + if (wlfPanel_AdvSettings::instanceExists()) // Fix up the buttons on the wlf panel to match the preset switch + { + wlfPanel_AdvSettings& inst(wlfPanel_AdvSettings::instance()); + if (inst.isExpanded()) + { + inst.getChildView("Rear")->setValue(true); + inst.getChildView("Front")->setValue(false); + inst.getChildView("Group")->setValue(false); + } + } gAgentCamera.resetView(TRUE, TRUE); gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR); diff --git a/indra/newview/skins/default/textures/Cam_Preset_Back_Off.png b/indra/newview/skins/default/textures/Cam_Preset_Back_Off.png new file mode 100644 index 000000000..00158a7bc Binary files /dev/null and b/indra/newview/skins/default/textures/Cam_Preset_Back_Off.png differ diff --git a/indra/newview/skins/default/textures/Cam_Preset_Back_On.png b/indra/newview/skins/default/textures/Cam_Preset_Back_On.png new file mode 100644 index 000000000..3748f5e19 Binary files /dev/null and b/indra/newview/skins/default/textures/Cam_Preset_Back_On.png differ diff --git a/indra/newview/skins/default/textures/Cam_Preset_Front_Off.png b/indra/newview/skins/default/textures/Cam_Preset_Front_Off.png new file mode 100644 index 000000000..c49b8f9a2 Binary files /dev/null and b/indra/newview/skins/default/textures/Cam_Preset_Front_Off.png differ diff --git a/indra/newview/skins/default/textures/Cam_Preset_Front_On.png b/indra/newview/skins/default/textures/Cam_Preset_Front_On.png new file mode 100644 index 000000000..bc8c4db04 Binary files /dev/null and b/indra/newview/skins/default/textures/Cam_Preset_Front_On.png differ diff --git a/indra/newview/skins/default/textures/Cam_Preset_Side_Off.png b/indra/newview/skins/default/textures/Cam_Preset_Side_Off.png new file mode 100644 index 000000000..b919a0a15 Binary files /dev/null and b/indra/newview/skins/default/textures/Cam_Preset_Side_Off.png differ diff --git a/indra/newview/skins/default/textures/Cam_Preset_Side_On.png b/indra/newview/skins/default/textures/Cam_Preset_Side_On.png new file mode 100644 index 000000000..de9da359a Binary files /dev/null and b/indra/newview/skins/default/textures/Cam_Preset_Side_On.png differ diff --git a/indra/newview/skins/default/xui/en-us/wlfPanel_AdvSettings_expanded.xml b/indra/newview/skins/default/xui/en-us/wlfPanel_AdvSettings_expanded.xml index 2cc0df053..5d2109ad2 100644 --- a/indra/newview/skins/default/xui/en-us/wlfPanel_AdvSettings_expanded.xml +++ b/indra/newview/skins/default/xui/en-us/wlfPanel_AdvSettings_expanded.xml @@ -1,7 +1,17 @@ - - + + Cam Preset: + + + + diff --git a/indra/newview/wlfPanel_AdvSettings.cpp b/indra/newview/wlfPanel_AdvSettings.cpp index 18613c496..9ed6ea18e 100644 --- a/indra/newview/wlfPanel_AdvSettings.cpp +++ b/indra/newview/wlfPanel_AdvSettings.cpp @@ -47,6 +47,7 @@ #include "llfloaterwindlight.h" #include "llfloaterwater.h" +#include "llagentcamera.h" #include "lldaycyclemanager.h" #include "llenvmanager.h" #include "llwaterparammanager.h" @@ -58,6 +59,7 @@ wlfPanel_AdvSettings::wlfPanel_AdvSettings() : mExpanded(false) setVisible(false); setIsChrome(TRUE); setFocusRoot(TRUE); + mCommitCallbackRegistrar.add("Wlf.ChangeCameraPreset", boost::bind(&wlfPanel_AdvSettings::onChangeCameraPreset, this, _1, _2)); if(rlv_handler_t::isEnabled()) gRlvHandler.setBehaviourToggleCallback(boost::bind(&wlfPanel_AdvSettings::onRlvBehaviorChange, this, _1, _2)); } @@ -184,6 +186,14 @@ BOOL wlfPanel_AdvSettings::postBuild() mTimeSlider->setCommitCallback(boost::bind(&wlfPanel_AdvSettings::onChangeDayTime, this, _2)); updateTimeSlider(); updateRlvVisibility(); + + const U32 preset(gSavedSettings.getU32("CameraPreset")); + if (preset == CAMERA_PRESET_REAR_VIEW) + getChildView("Rear")->setValue(true); + else if (preset == CAMERA_PRESET_FRONT_VIEW) + getChildView("Front")->setValue(true); + else if (preset == CAMERA_PRESET_GROUP_VIEW) + getChildView("Group")->setValue(true); } return TRUE; } @@ -203,6 +213,24 @@ void wlfPanel_AdvSettings::onClickExpandBtn(void* user_data) gSavedSettings.setBOOL("wlfAdvSettingsPopup",!gSavedSettings.getBOOL("wlfAdvSettingsPopup")); } +void wlfPanel_AdvSettings::onChangeCameraPreset(LLUICtrl* ctrl, const LLSD& param) +{ + if (!ctrl->getValue()) // One of these must be set at all times + { + ctrl->setValue(true); + return; + } + + // 0 is rear, 1 is front, 2 is group + const ECameraPreset preset((param.asInteger() == 0) ? CAMERA_PRESET_REAR_VIEW : (param.asInteger() == 1) ? CAMERA_PRESET_FRONT_VIEW : CAMERA_PRESET_GROUP_VIEW); + // Turn off the other preset indicators + if (preset != CAMERA_PRESET_REAR_VIEW) getChildView("Rear")->setValue(false); + if (preset != CAMERA_PRESET_FRONT_VIEW) getChildView("Front")->setValue(false); + if (preset != CAMERA_PRESET_GROUP_VIEW) getChildView("Group")->setValue(false); + // Actually switch the camera + gAgentCamera.switchCameraPreset(preset); +} + void wlfPanel_AdvSettings::onUseRegionSettings(const LLSD& value) { LLEnvManagerNew::instance().setUseRegionSettings(value.asBoolean(), gSavedSettings.getBOOL("PhoenixInterpolateSky")); diff --git a/indra/newview/wlfPanel_AdvSettings.h b/indra/newview/wlfPanel_AdvSettings.h index ea7c65d01..413b30cd6 100644 --- a/indra/newview/wlfPanel_AdvSettings.h +++ b/indra/newview/wlfPanel_AdvSettings.h @@ -57,8 +57,10 @@ public: static void updateClass(); static void onClickExpandBtn(void* user_data); + void onChangeCameraPreset(LLUICtrl* ctrl, const LLSD& param); void onChangeWWPresetName(const LLSD& value); void onChangeWLPresetName(const LLSD& value); + const bool& isExpanded() const { return mExpanded; } protected: void build();