diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 33f01c997d..2d325c387f 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -1010,6 +1010,9 @@ void LLFloaterPreference::apply() // Fix resetting graphics preset on cancel; Save preset here because cancel() gets called in either way! saveGraphicsPreset(gSavedSettings.getString("PresetGraphicActive")); + + // Fix resetting camera preset on cancel + saveCameraPreset(gSavedSettings.getString("PresetCameraActive")); } void LLFloaterPreference::cancel() @@ -1069,6 +1072,14 @@ void LLFloaterPreference::cancel() gSavedSettings.setString("PresetGraphicActive", mSavedGraphicsPreset); LLPresetsManager::getInstance()->triggerChangeSignal(); } + + // Fix resetting camera preset on cancel + if (mSavedCameraPreset != gSavedSettings.getString("PresetCameraActive")) + { + gSavedSettings.setString("PresetCameraActive", mSavedCameraPreset); + LLPresetsManager::getInstance()->triggerChangeCameraSignal(); + } + // } void LLFloaterPreference::onOpen(const LLSD& key) @@ -1230,6 +1241,9 @@ void LLFloaterPreference::onOpen(const LLSD& key) // Fix resetting graphics preset on cancel saveGraphicsPreset(gSavedSettings.getString("PresetGraphicActive")); + // Fix resetting camera preset on cancel + saveCameraPreset(gSavedSettings.getString("PresetCameraActive")); + // FIRE-19810: Make presets global since PresetGraphicActive setting is global as well //bool started = (LLStartUp::getStartupState() == STATE_STARTED); @@ -4154,6 +4168,27 @@ BOOL LLPanelPreferenceView::postBuild() presetsMgr->createMissingDefault(PRESETS_CAMERA); // a no-op after the first time, but that's ok } + // Hook up camera and focus spin controls + mSpinnerCameraX = getChild("camera_x"); + mSpinnerCameraY = getChild("camera_y"); + mSpinnerCameraZ = getChild("camera_z"); + mSpinnerFocusX = getChild("focus_x"); + mSpinnerFocusY = getChild("focus_y"); + mSpinnerFocusZ = getChild("focus_z"); + + mSpinnerCameraX->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeCameraX, this)); + mSpinnerCameraY->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeCameraY, this)); + mSpinnerCameraZ->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeCameraZ, this)); + mSpinnerFocusX->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeFocusX, this)); + mSpinnerFocusY->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeFocusY, this)); + mSpinnerFocusZ->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeFocusZ, this)); + + gSavedSettings.getControl("CameraOffsetRearView")->getSignal()->connect(boost::bind(&LLPanelPreferenceView::refreshCameraSettings, this)); + gSavedSettings.getControl("FocusOffsetRearView")->getSignal()->connect(boost::bind(&LLPanelPreferenceView::refreshCameraSettings, this)); + + refreshCameraSettings(); + // + return LLPanelPreference::postBuild(); } @@ -4167,42 +4202,47 @@ void LLPanelPreferenceView::onPresetsListChangeCamera() setPresetText(); - LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); - if (instance && !gSavedSettings.getString("PresetCameraActive").empty()) - { - instance->saveSettings(); //make cancel work correctly after changing the preset - } + // Fix resetting camera preset on cancel + //LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); + //if (instance && !gSavedSettings.getString("PresetCameraActive").empty()) + //{ + // instance->saveSettings(); //make cancel work correctly after changing the preset + //} + // } void LLPanelPreferenceView::draw() { - setPresetText(); + // Fix resetting camera preset on cancel + //setPresetText(); LLPanelPreference::draw(); } void LLPanelPreferenceView::setPresetText() { - LLTextBox* preset_text = getChild("preset_camera_text"); + static LLTextBox* preset_text = getChild("preset_camera_text"); std::string preset_camera_active = gSavedSettings.getString("PresetCameraActive"); - if (!preset_camera_active.empty() && preset_camera_active != preset_text->getText()) - { - LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); - if (instance) - { - instance->saveCameraPreset(preset_camera_active); - } - } + // Fix resetting camera preset on cancel + //if (!preset_camera_active.empty() && preset_camera_active != preset_text->getText()) + //{ + // LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); + // if (instance) + // { + // instance->saveCameraPreset(preset_camera_active); + // } + //} - LLPresetsManager* presetsMgr = LLPresetsManager::getInstance(); - if (presetsMgr) - { - if (presetsMgr->isCameraDirty() && !preset_camera_active.empty()) - { - preset_camera_active.clear(); - } - } + //LLPresetsManager* presetsMgr = LLPresetsManager::getInstance(); + //if (presetsMgr) + //{ + // if (presetsMgr->isCameraDirty() && !preset_camera_active.empty()) + // { + // preset_camera_active.clear(); + // } + //} + // if (!preset_camera_active.empty()) { @@ -4218,6 +4258,69 @@ void LLPanelPreferenceView::setPresetText() } } +// Hook up camera and focus spin controls +void LLPanelPreferenceView::onChangeCameraX() +{ + LLVector3 camera = gSavedSettings.getVector3("CameraOffsetRearView"); + camera.mV[VX] = mSpinnerCameraX->getValueF32(); + mSpinnerCameraX->setValue(camera.mV[VX]); + gSavedSettings.setVector3("CameraOffsetRearView", camera); +} + +void LLPanelPreferenceView::onChangeCameraY() +{ + LLVector3 camera = gSavedSettings.getVector3("CameraOffsetRearView"); + camera.mV[VY] = mSpinnerCameraY->getValueF32(); + mSpinnerCameraY->setValue(camera.mV[VY]); + gSavedSettings.setVector3("CameraOffsetRearView", camera); +} + +void LLPanelPreferenceView::onChangeCameraZ() +{ + LLVector3 camera = gSavedSettings.getVector3("CameraOffsetRearView"); + camera.mV[VZ] = mSpinnerCameraZ->getValueF32(); + mSpinnerCameraZ->setValue(camera.mV[VZ]); + gSavedSettings.setVector3("CameraOffsetRearView", camera); +} + +void LLPanelPreferenceView::onChangeFocusX() +{ + LLVector3d focus = gSavedSettings.getVector3d("FocusOffsetRearView"); + focus.mdV[VX] = mSpinnerFocusX->getValueF32(); + mSpinnerFocusX->setValue(focus.mdV[VX]); + gSavedSettings.setVector3d("FocusOffsetRearView", focus); +} + +void LLPanelPreferenceView::onChangeFocusY() +{ + LLVector3d focus = gSavedSettings.getVector3d("FocusOffsetRearView"); + focus.mdV[VY] = mSpinnerFocusY->getValueF32(); + mSpinnerFocusY->setValue(focus.mdV[VY]); + gSavedSettings.setVector3d("FocusOffsetRearView", focus); +} + +void LLPanelPreferenceView::onChangeFocusZ() +{ + LLVector3d focus = gSavedSettings.getVector3d("FocusOffsetRearView"); + focus.mdV[VZ] = mSpinnerFocusZ->getValueF32(); + mSpinnerFocusZ->setValue(focus.mdV[VZ]); + gSavedSettings.setVector3d("FocusOffsetRearView", focus); +} + +void LLPanelPreferenceView::refreshCameraSettings() +{ + LLVector3 camera = gSavedSettings.getVector3("CameraOffsetRearView"); + mSpinnerCameraX->setValue(camera.mV[VX]); + mSpinnerCameraY->setValue(camera.mV[VY]); + mSpinnerCameraZ->setValue(camera.mV[VZ]); + + LLVector3d focus = gSavedSettings.getVector3d("FocusOffsetRearView"); + mSpinnerFocusX->setValue(focus.mdV[VX]); + mSpinnerFocusY->setValue(focus.mdV[VY]); + mSpinnerFocusZ->setValue(focus.mdV[VZ]); +} +// + BOOL LLPanelPreferenceGraphics::postBuild() { // Improved graphics preferences diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index bd68259a23..510d200dd3 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -57,6 +57,7 @@ class LLSD; class LLTextBox; class LLComboBox; class LLLineEditor; +class LLSpinCtrl; typedef std::map notifications_map; @@ -368,6 +369,24 @@ public: private: void onPresetsListChangeCamera(); LOG_CLASS(LLPanelPreferenceView); + + // Hook up camera and focus spin controls + LLSpinCtrl* mSpinnerCameraX; + LLSpinCtrl* mSpinnerCameraY; + LLSpinCtrl* mSpinnerCameraZ; + LLSpinCtrl* mSpinnerFocusX; + LLSpinCtrl* mSpinnerFocusY; + LLSpinCtrl* mSpinnerFocusZ; + + void onChangeCameraX(); + void onChangeCameraY(); + void onChangeCameraZ(); + void onChangeFocusX(); + void onChangeFocusY(); + void onChangeFocusZ(); + + void refreshCameraSettings(); + // }; class LLPanelPreferenceGraphics : public LLPanelPreference diff --git a/indra/newview/llpanelpresetscamerapulldown.cpp b/indra/newview/llpanelpresetscamerapulldown.cpp index 7612c428d9..a836703efc 100644 --- a/indra/newview/llpanelpresetscamerapulldown.cpp +++ b/indra/newview/llpanelpresetscamerapulldown.cpp @@ -66,7 +66,8 @@ BOOL LLPanelPresetsCameraPulldown::postBuild() // Make sure there is a default preference file presetsMgr->createMissingDefault(PRESETS_CAMERA); - presetsMgr->startWatching(PRESETS_CAMERA); + // Done in LLPresetsManager ctor + //presetsMgr->startWatching(PRESETS_CAMERA); presetsMgr->setPresetListChangeCameraCallback(boost::bind(&LLPanelPresetsCameraPulldown::populatePanel, this)); } diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 68fb3ac850..6f084dfa51 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -52,6 +52,10 @@ 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(); + + // Start watching camera controls as soon as the preset + // manager gets initialized + startWatching(PRESETS_CAMERA); } LLPresetsManager::~LLPresetsManager() @@ -280,7 +284,7 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n } else if(PRESETS_CAMERA == subdirectory) { - gSavedSettings.setString("PresetGraphicActive", name); + gSavedSettings.setString("PresetCameraActive", name); name_list.clear(); getControlNames(name_list); diff --git a/indra/newview/skins/default/xui/de/panel_preferences_move.xml b/indra/newview/skins/default/xui/de/panel_preferences_move.xml index 1ef6c8bed3..b6e094dede 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_move.xml @@ -3,10 +3,19 @@ + + Aktuelle Voreinstellung: + + + Kamera-Abstand: + + + Fokus-Abstand: + @@ -16,6 +25,12 @@ + + Voreinstellungen: + + + +