summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMnikolenko Productengine <mnikolenko@productengine.com>2019-11-04 20:35:34 +0200
committerMnikolenko Productengine <mnikolenko@productengine.com>2019-11-04 20:35:34 +0200
commitc75d443c8359f0bceee2df2adc0a67b2890922ea (patch)
tree03814e15ba8c31a82ab43a050f6cdbec02cbf437
parentb371c5a35d5a4324deb21aafe25f48fd4560e29d (diff)
SL-12186 WIP Updating UI for camera controls, including presets
-rw-r--r--indra/newview/app_settings/camera/Front.xml8
-rw-r--r--indra/newview/app_settings/camera/Pennys_Gamer.xml115
-rw-r--r--indra/newview/app_settings/camera/Side.xml8
-rw-r--r--indra/newview/app_settings/settings.xml30
-rw-r--r--indra/newview/llagentcamera.cpp17
-rw-r--r--indra/newview/llagentcamera.h9
-rw-r--r--indra/newview/llfloatercamera.cpp118
-rw-r--r--indra/newview/llfloatercamera.h10
-rw-r--r--indra/newview/llfloaterpreferenceviewadvanced.cpp40
-rw-r--r--indra/newview/llfloaterpreferenceviewadvanced.h7
-rw-r--r--indra/newview/llfloatersaveprefpreset.cpp80
-rw-r--r--indra/newview/llfloatersaveprefpreset.h9
-rw-r--r--indra/newview/llpresetsmanager.cpp96
-rw-r--r--indra/newview/llpresetsmanager.h4
-rw-r--r--indra/newview/skins/default/xui/en/floater_camera.xml292
-rw-r--r--indra/newview/skins/default/xui/en/floater_preferences_view_advanced.xml28
-rw-r--r--indra/newview/skins/default/xui/en/floater_save_pref_preset.xml60
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml12
-rw-r--r--indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml4
19 files changed, 443 insertions, 504 deletions
diff --git a/indra/newview/app_settings/camera/Front.xml b/indra/newview/app_settings/camera/Front.xml
index d5ead526b7..a4b5ace33c 100644
--- a/indra/newview/app_settings/camera/Front.xml
+++ b/indra/newview/app_settings/camera/Front.xml
@@ -37,10 +37,10 @@
<real>6</real>
</array>
</map>
- <key>CameraOffsetRearView</key>
+ <key>CameraOffsetFrontView</key>
<map>
<key>Comment</key>
- <string>Initial camera offset from avatar in Rear View</string>
+ <string>Initial camera offset from avatar in Front View</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -74,10 +74,10 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>FocusOffsetRearView</key>
+ <key>FocusOffsetFrontView</key>
<map>
<key>Comment</key>
- <string>Initial focus point offset relative to avatar for the camera preset Rear View (x-axis is forward)</string>
+ <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>
diff --git a/indra/newview/app_settings/camera/Pennys_Gamer.xml b/indra/newview/app_settings/camera/Pennys_Gamer.xml
deleted file mode 100644
index 5d249153a0..0000000000
--- a/indra/newview/app_settings/camera/Pennys_Gamer.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<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>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.0</real>
- <real>0.0</real>
- <real>-0.2</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>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>0.9</real>
- <real>0.0</real>
- <real>0.2</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>
diff --git a/indra/newview/app_settings/camera/Side.xml b/indra/newview/app_settings/camera/Side.xml
index 4cd5f2f5a4..677fd47e20 100644
--- a/indra/newview/app_settings/camera/Side.xml
+++ b/indra/newview/app_settings/camera/Side.xml
@@ -37,10 +37,10 @@
<real>6</real>
</array>
</map>
- <key>CameraOffsetRearView</key>
+ <key>CameraOffsetGroupView</key>
<map>
<key>Comment</key>
- <string>Initial camera offset from avatar in Rear View</string>
+ <string>Initial camera offset from avatar in Side View</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -74,10 +74,10 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>FocusOffsetRearView</key>
+ <key>FocusOffsetGroupView</key>
<map>
<key>Comment</key>
- <string>Initial focus point offset relative to avatar for the camera preset Rear View (x-axis is forward)</string>
+ <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>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index a02cccb613..f44185340a 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1499,6 +1499,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>
@@ -4356,6 +4371,21 @@
<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>FocusPosOnLogout</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index bbe1354fc3..3e56c1dd71 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -210,10 +210,12 @@ void LLAgentCamera::init()
mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("CameraOffsetRearView");
mCameraOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("CameraOffsetFrontView");
mCameraOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("CameraOffsetGroupView");
+ mCameraOffsetInitial[CAMERA_PRESET_CUSTOM] = gSavedSettings.getControl("CameraOffsetCustomPreset");
mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("FocusOffsetRearView");
mFocusOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("FocusOffsetFrontView");
mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("FocusOffsetGroupView");
+ mFocusOffsetInitial[CAMERA_PRESET_CUSTOM] = gSavedSettings.getControl("FocusOffsetCustomPreset");
mCameraCollidePlane.clearVec();
mCurrentCameraDistance = getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale");
@@ -1936,6 +1938,21 @@ LLVector3 LLAgentCamera::getCameraOffsetInitial()
return convert_from_llsd<LLVector3>(mCameraOffsetInitial[mCameraPreset]->get(), TYPE_VEC3, "");
}
+LLVector3d LLAgentCamera::getFocusOffsetInitial()
+{
+ return convert_from_llsd<LLVector3d>(mFocusOffsetInitial[mCameraPreset]->get(), TYPE_VEC3D, "");
+}
+
+std::string LLAgentCamera::getCameraOffsetCtrlName()
+{
+ return mCameraOffsetInitial[mCameraPreset]->getName();
+}
+
+std::string LLAgentCamera::getFocusOffsetCtrlName()
+{
+ return mFocusOffsetInitial[mCameraPreset]->getName();
+}
+
F32 LLAgentCamera::getCameraMaxZoomDistance()
{
// Ignore "DisableCameraConstraints", we don't want to be out of draw range when we focus onto objects or avatars
diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h
index 4575c1501a..294e81c2e1 100644
--- a/indra/newview/llagentcamera.h
+++ b/indra/newview/llagentcamera.h
@@ -59,7 +59,7 @@ enum ECameraPreset
CAMERA_PRESET_GROUP_VIEW,
/** Current view when a preset is saved */
- CAMERA_PRESET_CUSTOM0
+ CAMERA_PRESET_CUSTOM
};
//------------------------------------------------------------------------
@@ -112,9 +112,14 @@ 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();
+
+ std::string getCameraOffsetCtrlName();
+ std::string getFocusOffsetCtrlName();
+private:
/** Determines maximum camera distance from target for mouselook, opposite to LAND_MIN_ZOOM */
F32 getCameraMaxZoomDistance();
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index c12ccb386e..933e758653 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -34,6 +34,7 @@
// Viewer includes
#include "llagent.h"
#include "llagentcamera.h"
+#include "llpresetsmanager.h"
#include "lljoystickbutton.h"
#include "llviewercontrol.h"
#include "llviewercamera.h"
@@ -53,7 +54,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;
@@ -270,13 +270,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()
@@ -323,6 +317,8 @@ void LLFloaterCamera::onOpen(const LLSD& key)
else
toPrevMode();
mClosed = FALSE;
+
+ populatePresetCombo();
}
void LLFloaterCamera::onClose(bool app_quitting)
@@ -354,7 +350,7 @@ LLFloaterCamera::LLFloaterCamera(const LLSD& val)
{
LLHints::registerHintTarget("view_popup", getHandle());
mCommitCallbackRegistrar.add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2));
- mCommitCallbackRegistrar.add("Presets.GoViewPrefs", boost::bind(&LLFloaterCamera::onViewButtonClick, this, _2));
+ mCommitCallbackRegistrar.add("CameraPresets.Save", boost::bind(&LLFloaterCamera::onSavePreset, this));
}
// virtual
@@ -366,9 +362,11 @@ BOOL LLFloaterCamera::postBuild()
mZoom = findChild<LLPanelCameraZoom>(ZOOM);
mTrack = getChild<LLJoystickCameraTrack>(PAN);
- assignButton2Mode(CAMERA_CTRL_MODE_MODES, "avatarview_btn");
- assignButton2Mode(CAMERA_CTRL_MODE_PAN, "pan_btn");
- assignButton2Mode(CAMERA_CTRL_MODE_PRESETS, "presets_btn");
+ 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));
+ getChild<LLComboBox>("preset_combo")->setCommitCallback(boost::bind(&LLFloaterCamera::onCustomPresetSelected, this));
+ LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCamera::populatePresetCombo, this));
update();
@@ -387,24 +385,6 @@ F32 LLFloaterCamera::getCurrentTransparency()
}
-void LLFloaterCamera::onViewButtonClick(const LLSD& user_data)
-{
- // bring up the prefs floater
- LLFloater* prefsfloater = LLFloaterReg::showInstance("preferences");
- if (prefsfloater)
- {
- // grab the 'view' panel from the preferences floater and
- // bring it the front!
- LLTabContainer* tabcontainer = prefsfloater->getChild<LLTabContainer>("pref core");
- LLPanel* graphicspanel = prefsfloater->getChild<LLPanel>("view");
- if (tabcontainer && graphicspanel)
- {
- tabcontainer->selectTabPanel(graphicspanel);
- }
- }
-}
-
-
void LLFloaterCamera::fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel)
{
// copying child list and then iterating over a copy, because list itself
@@ -473,13 +453,6 @@ void LLFloaterCamera::switchMode(ECameraControlMode 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();
@@ -503,36 +476,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()
{
- 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)
@@ -552,11 +497,11 @@ void LLFloaterCamera::updateItemsSelection()
{
ECameraPreset preset = (ECameraPreset) gSavedSettings.getU32("CameraPreset");
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);
@@ -580,6 +525,9 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param)
}
else
{
+ LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance();
+ if (camera_floater)
+ camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
switchToPreset(name);
}
@@ -599,14 +547,17 @@ void LLFloaterCamera::switchToPreset(const std::string& name)
if ("rear_view" == name)
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW);
+ LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_REAR);
}
else if ("group_view" == name)
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_GROUP_VIEW);
+ LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_SIDE);
}
else if ("front_view" == name)
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW);
+ LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_FRONT);
}
}
@@ -617,3 +568,36 @@ void LLFloaterCamera::fromFreeToPresets()
switchMode(CAMERA_CTRL_MODE_PRESETS);
}
}
+
+void LLFloaterCamera::populatePresetCombo()
+{
+ LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, getChild<LLComboBox>("preset_combo"), EDefaultOptions::DEFAULT_VIEWS_HIDE);
+ if ((ECameraPreset)gSavedSettings.getU32("CameraPreset") == CAMERA_PRESET_CUSTOM)
+ {
+ getChild<LLComboBox>("preset_combo")->selectByValue(gSavedSettings.getString("PresetCameraActive"));
+ }
+ else
+ {
+ std::string inactive_text = getString("inactive_combo_text");
+ getChild<LLComboBox>("preset_combo")->setLabel(inactive_text);// add(inactive_text, inactive_text, ADD_TOP);
+ }
+}
+
+void LLFloaterCamera::onSavePreset()
+{
+ LLFloaterReg::hideInstance("delete_pref_preset", PRESETS_CAMERA);
+ LLFloaterReg::hideInstance("load_pref_preset", PRESETS_CAMERA);
+ LLFloaterReg::showInstance("save_pref_preset", PRESETS_CAMERA);
+}
+
+void LLFloaterCamera::onCustomPresetSelected()
+{
+ std::string selected_preset = getChild<LLComboBox>("preset_combo")->getSelectedItemLabel();
+ if (gSavedSettings.getString("PresetCameraActive") != selected_preset && getString("inactive_combo_text") != selected_preset)
+ {
+ gAgentCamera.switchCameraPreset(CAMERA_PRESET_CUSTOM);
+ updateItemsSelection();
+ fromFreeToPresets();
+ LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, selected_preset);
+ }
+}
diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h
index 481e9aec1b..b1e0c83ce0 100644
--- a/indra/newview/llfloatercamera.h
+++ b/indra/newview/llfloatercamera.h
@@ -39,7 +39,6 @@ class LLPanelCameraZoom;
enum ECameraControlMode
{
- CAMERA_CTRL_MODE_MODES,
CAMERA_CTRL_MODE_PAN,
CAMERA_CTRL_MODE_FREE_CAMERA,
CAMERA_CTRL_MODE_PRESETS
@@ -50,7 +49,6 @@ class LLFloaterCamera : public LLFloater
friend class LLFloaterReg;
public:
-
/* whether in free camera mode */
static bool inFreeCameraMode();
/* callback for camera items selection changing */
@@ -77,6 +75,11 @@ 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;
@@ -112,9 +115,6 @@ 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);
diff --git a/indra/newview/llfloaterpreferenceviewadvanced.cpp b/indra/newview/llfloaterpreferenceviewadvanced.cpp
index 791ff79d87..57484d0d0a 100644
--- a/indra/newview/llfloaterpreferenceviewadvanced.cpp
+++ b/indra/newview/llfloaterpreferenceviewadvanced.cpp
@@ -25,6 +25,7 @@
*/
#include "llviewerprecompiledheaders.h"
+#include "llagentcamera.h"
#include "llfloaterpreferenceviewadvanced.h"
#include "llfloater.h"
#include "llfloaterreg.h"
@@ -36,40 +37,12 @@
LLFloaterPreferenceViewAdvanced::LLFloaterPreferenceViewAdvanced(const LLSD& key)
: LLFloater(key)
{
- mCommitCallbackRegistrar.add("Cancel", boost::bind(&LLFloaterPreferenceViewAdvanced::onClickCancel, this));
mCommitCallbackRegistrar.add("CommitSettings", boost::bind(&LLFloaterPreferenceViewAdvanced::onCommitSettings, this));
- mCommitCallbackRegistrar.add("Ok", boost::bind(&LLFloaterPreferenceViewAdvanced::onClickOk, this));
-
}
LLFloaterPreferenceViewAdvanced::~LLFloaterPreferenceViewAdvanced()
{}
-void LLFloaterPreferenceViewAdvanced::onClickOk()
-{
- closeFloater();
-}
-
-void LLFloaterPreferenceViewAdvanced::onClickCancel()
-{
- gSavedSettings.setVector3("CameraOffsetRearView", mCameraSaved);
- gSavedSettings.setVector3d("FocusOffsetRearView", mFocusSaved);
-
- updateCameraControl(mCameraSaved);
- updateFocusControl(mFocusSaved);
-}
-
-BOOL LLFloaterPreferenceViewAdvanced::postBuild()
-{
- mCameraSaved = gSavedSettings.getVector3("CameraOffsetRearView");
- mFocusSaved = gSavedSettings.getVector3d("FocusOffsetRearView");
-
- updateCameraControl(mCameraSaved);
- updateFocusControl(mFocusSaved);
-
- return TRUE;
-}
-
void LLFloaterPreferenceViewAdvanced::updateCameraControl(const LLVector3& vector)
{
getChild<LLSpinCtrl>("camera_x")->setValue(vector[VX]);
@@ -86,11 +59,8 @@ void LLFloaterPreferenceViewAdvanced::updateFocusControl(const LLVector3d& vecto
void LLFloaterPreferenceViewAdvanced::draw()
{
- static LLCachedControl<LLVector3> camera(gSavedSettings, "CameraOffsetRearView");
- static LLCachedControl<LLVector3d> focus(gSavedSettings, "FocusOffsetRearView");
-
- updateCameraControl(camera);
- updateFocusControl(focus);
+ updateCameraControl(gAgentCamera.getCameraOffsetInitial());
+ updateFocusControl(gAgentCamera.getFocusOffsetInitial());
LLFloater::draw();
}
@@ -103,10 +73,10 @@ void LLFloaterPreferenceViewAdvanced::onCommitSettings()
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);
+ gSavedSettings.setVector3(gAgentCamera.getCameraOffsetCtrlName(), 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);
+ gSavedSettings.setVector3d(gAgentCamera.getFocusOffsetCtrlName(), vector3d);
}
diff --git a/indra/newview/llfloaterpreferenceviewadvanced.h b/indra/newview/llfloaterpreferenceviewadvanced.h
index 8f4b594605..4619fdaab1 100644
--- a/indra/newview/llfloaterpreferenceviewadvanced.h
+++ b/indra/newview/llfloaterpreferenceviewadvanced.h
@@ -37,21 +37,14 @@ class LLFloaterPreferenceViewAdvanced
public:
LLFloaterPreferenceViewAdvanced(const LLSD& key);
- virtual BOOL postBuild();
virtual void draw();
void onCommitSettings();
- void onClickCancel();
- void onClickOk();
void updateCameraControl(const LLVector3& vector);
void updateFocusControl(const LLVector3d& vector3d);
private:
virtual ~LLFloaterPreferenceViewAdvanced();
-
- LLVector3 mCameraSaved;
- LLVector3d mFocusSaved;
-
};
#endif //LLFLOATERPREFERENCEVIEWADVANCED_H
diff --git a/indra/newview/llfloatersaveprefpreset.cpp b/indra/newview/llfloatersaveprefpreset.cpp
index bae7602566..10fad347bf 100644
--- a/indra/newview/llfloatersaveprefpreset.cpp
+++ b/indra/newview/llfloatersaveprefpreset.cpp
@@ -32,12 +32,14 @@
#include "llcombobox.h"
#include "llfloaterpreference.h"
#include "llfloaterreg.h"
+#include "lllineeditor.h"
#include "llnotificationsutil.h"
#include "llpresetsmanager.h"
+#include "llradiogroup.h"
#include "lltrans.h"
LLFloaterSavePrefPreset::LLFloaterSavePrefPreset(const LLSD &key)
-: LLFloater(key)
+ : LLModalDialog(key)
{
}
@@ -49,29 +51,39 @@ BOOL LLFloaterSavePrefPreset::postBuild()
{
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));
+
+ mPresetCombo = getChild<LLComboBox>("preset_combo");
+ //mPresetCombo->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this));
- LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetsListChange, this));
+ mNameEditor = getChild<LLLineEditor>("preset_txt_editor");
+ mNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this), NULL);
mSaveButton = getChild<LLButton>("save");
- mPresetCombo = getChild<LLComboBox>("preset_combo");
+ mSaveButton->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnSave, this));
+
+ mSaveRadioGroup = getChild<LLRadioGroup>("radio_save_preset");
+ mSaveRadioGroup->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onSwitchSaveReplace, this));
+
+ getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnCancel, this));
+
+ LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetsListChange, this));
return TRUE;
}
void LLFloaterSavePrefPreset::onPresetNameEdited()
{
- // Disable saving a preset having empty name.
- std::string name = mPresetCombo->getSimple();
-
- mSaveButton->setEnabled(!name.empty());
+ if (mSaveRadioGroup->getSelectedIndex() == 0)
+ {
+ // Disable saving a preset having empty name.
+ std::string name = mNameEditor->getValue();
+ mSaveButton->setEnabled(!name.empty());
+ }
}
void LLFloaterSavePrefPreset::onOpen(const LLSD& key)
{
+ LLModalDialog::onOpen(key);
mSubdirectory = key.asString();
std::string floater_title = getString(std::string("title_") + mSubdirectory);
@@ -81,22 +93,41 @@ void LLFloaterSavePrefPreset::onOpen(const LLSD& key)
EDefaultOptions option = DEFAULT_HIDE;
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, mPresetCombo, option);
+ mSaveRadioGroup->setSelectedIndex(0);
onPresetNameEdited();
+ onSwitchSaveReplace();
}
void LLFloaterSavePrefPreset::onBtnSave()
{
- std::string name = mPresetCombo->getSimple();
+ bool is_saving_new = mSaveRadioGroup->getSelectedIndex() == 0;
+ std::string name = is_saving_new ? mNameEditor->getValue() : mPresetCombo->getSimple();
if ((name == LLTrans::getString(PRESETS_DEFAULT)) || (name == PRESETS_DEFAULT))
{
LLNotificationsUtil::add("DefaultPresetNotSaved");
}
- else if (!LLPresetsManager::getInstance()->savePreset(mSubdirectory, name))
+ else
{
- LLSD args;
- args["NAME"] = name;
- LLNotificationsUtil::add("PresetNotSaved", args);
+ if (is_saving_new)
+ {
+ std::list<std::string> preset_names;
+ std::string presets_dir = LLPresetsManager::getInstance()->getPresetsDir(mSubdirectory);
+ LLPresetsManager::getInstance()->loadPresetNamesFromDir(presets_dir, 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(mSubdirectory, name))
+ {
+ LLSD args;
+ args["NAME"] = name;
+ LLNotificationsUtil::add("PresetNotSaved", args);
+ }
}
closeFloater();
@@ -112,3 +143,20 @@ void LLFloaterSavePrefPreset::onBtnCancel()
{
closeFloater();
}
+
+void LLFloaterSavePrefPreset::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);
+ }
+}
diff --git a/indra/newview/llfloatersaveprefpreset.h b/indra/newview/llfloatersaveprefpreset.h
index 09a87b8c62..c61379e5ad 100644
--- a/indra/newview/llfloatersaveprefpreset.h
+++ b/indra/newview/llfloatersaveprefpreset.h
@@ -28,11 +28,13 @@
#ifndef LL_LLFLOATERSAVEPREFPRESET_H
#define LL_LLFLOATERSAVEPREFPRESET_H
-#include "llfloater.h"
+#include "llmodaldialog.h"
class LLComboBox;
+class LLRadioGroup;
+class LLLineEditor;
-class LLFloaterSavePrefPreset : public LLFloater
+class LLFloaterSavePrefPreset : public LLModalDialog
{
public:
@@ -43,8 +45,11 @@ public:
void onBtnSave();
void onBtnCancel();
+ void onSwitchSaveReplace();
private:
+ LLRadioGroup* mSaveRadioGroup;
+ LLLineEditor* mNameEditor;
LLComboBox* mPresetCombo;
LLButton* mSaveButton;
diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp
index 17fefbe6b1..94e6e64754 100644
--- a/indra/newview/llpresetsmanager.cpp
+++ b/indra/newview/llpresetsmanager.cpp
@@ -65,22 +65,22 @@ void LLPresetsManager::createMissingDefault(const std::string& subdirectory)
{
if(gDirUtilp->getLindenUserDir().empty())
{
- return;
+return;
}
std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR,
- subdirectory, PRESETS_DEFAULT + ".xml");
+ subdirectory, PRESETS_DEFAULT + ".xml");
if (!gDirUtilp->fileExists(default_file))
{
LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL;
// Write current settings as the default
- savePreset(subdirectory, PRESETS_DEFAULT, true);
+ savePreset(subdirectory, PRESETS_DEFAULT, true);
+ }
+ else
+ {
+ LL_DEBUGS() << "default preset exists; no-op" << LL_ENDL;
}
- else
- {
- LL_DEBUGS() << "default preset exists; no-op" << LL_ENDL;
- }
}
void LLPresetsManager::startWatching(const std::string& subdirectory)
@@ -99,7 +99,7 @@ void LLPresetsManager::startWatching(const std::string& subdirectory)
if (cntrl_ptr.isNull())
{
LL_WARNS("Init") << "Unable to set signal on global setting '" << ctrl_name
- << "'" << LL_ENDL;
+ << "'" << LL_ENDL;
}
else
{
@@ -120,25 +120,25 @@ std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory)
if (!gDirUtilp->fileExists(dest_path))
LLFile::mkdir(dest_path);
- if (PRESETS_CAMERA == subdirectory)
+ if (PRESETS_CAMERA == subdirectory)
+ {
+ std::string source_dir = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, PRESETS_CAMERA);
+ LLDirIterator dir_iter(source_dir, "*.xml");
+ bool found = true;
+ while (found)
{
- std::string source_dir = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, PRESETS_CAMERA);
- LLDirIterator dir_iter(source_dir, "*.xml");
- bool found = true;
- while (found)
- {
- std::string file;
- found = dir_iter.next(file);
+ std::string file;
+ found = dir_iter.next(file);
- if (found)
- {
- std::string source = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, PRESETS_CAMERA, file);
- file = LLURI::escape(file);
- std::string dest = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_CAMERA, file);
- LLFile::copy(source, dest);
- }
+ if (found)
+ {
+ std::string source = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, PRESETS_CAMERA, file);
+ file = LLURI::escape(file);
+ std::string dest = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_CAMERA, file);
+ LLFile::copy(source, dest);
}
}
+ }
return dest_path;
}
@@ -160,8 +160,15 @@ 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 (default_option == DEFAULT_VIEWS_HIDE)
+ {
+ if (name == PRESETS_REAR || name == PRESETS_SIDE || name == PRESETS_FRONT)
+ {
+ continue;
+ }
+ }
if (PRESETS_DEFAULT != name)
{
mPresetNames.push_back(name);
@@ -205,11 +212,15 @@ void LLPresetsManager::settingChanged()
{
setCameraDirty(true);
- gSavedSettings.setString("PresetCameraActive", "");
-
-// Hack call because this is a static routine
- LLPresetsManager::getInstance()->triggerChangeCameraSignal();
+ static LLCachedControl<std::string> preset_camera_active(gSavedSettings, "PresetCameraActive", "");
+ std::string preset_name = preset_camera_active;
+ if (!preset_name.empty())
+ {
+ gSavedSettings.setString("PresetCameraActive", "");
+ // Hack call because this is a static routine
+ LLPresetsManager::getInstance()->triggerChangeCameraSignal();
+ }
}
void LLPresetsManager::getControlNames(std::vector<std::string>& names)
@@ -222,8 +233,6 @@ void LLPresetsManager::getControlNames(std::vector<std::string>& names)
("AppearanceCameraMovement")
// From llagentcamera.cpp
("CameraOffsetBuild")
- ("CameraOffsetRearView")
- ("FocusOffsetRearView")
("CameraOffsetScale")
("TrackFocusObject")
;
@@ -286,9 +295,25 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
}
else
{
+ bool custom_camera_offsets = false;
+ if (subdirectory == PRESETS_CAMERA)
+ {
+ name_list.push_back(gAgentCamera.getCameraOffsetCtrlName());
+ name_list.push_back(gAgentCamera.getFocusOffsetCtrlName());
+ custom_camera_offsets = (name != PRESETS_REAR && name != PRESETS_SIDE && name != PRESETS_FRONT);
+ }
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
{
std::string ctrl_name = *it;
+ std::string dest_ctrl_name = ctrl_name;
+ if (custom_camera_offsets && ctrl_name == gAgentCamera.getCameraOffsetCtrlName())
+ {
+ dest_ctrl_name = "CameraOffsetCustomPreset";
+ }
+ if (custom_camera_offsets && ctrl_name == gAgentCamera.getFocusOffsetCtrlName())
+ {
+ dest_ctrl_name = "FocusOffsetCustomPreset";
+ }
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
if (ctrl)
{
@@ -296,10 +321,10 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
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[dest_ctrl_name]["Comment"] = comment;
+ paramsData[dest_ctrl_name]["Persist"] = 1;
+ paramsData[dest_ctrl_name]["Type"] = type;
+ paramsData[dest_ctrl_name]["Value"] = value;
}
}
}
@@ -354,6 +379,7 @@ bool LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory,
combo->clearRows();
+
std::string presets_dir = getPresetsDir(subdirectory);
if (!presets_dir.empty())
@@ -368,7 +394,7 @@ bool LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory,
for (std::list<std::string>::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it)
{
const std::string& name = *it;
- combo->add(name, LLSD().with(0, name));
+ combo->add(name, name);
}
}
else
diff --git a/indra/newview/llpresetsmanager.h b/indra/newview/llpresetsmanager.h
index 7370e0a3b1..cb32b58fc4 100644
--- a/indra/newview/llpresetsmanager.h
+++ b/indra/newview/llpresetsmanager.h
@@ -36,11 +36,15 @@ 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";
enum EDefaultOptions
{
DEFAULT_SHOW,
DEFAULT_TOP,
+ DEFAULT_VIEWS_HIDE,
DEFAULT_HIDE // Do not display "Default" in a list
};
diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml
index 25db24da2e..933d50acae 100644
--- a/indra/newview/skins/default/xui/en/floater_camera.xml
+++ b/indra/newview/skins/default/xui/en/floater_camera.xml
@@ -7,7 +7,7 @@
legacy_header_height="18"
can_minimize="true"
can_close="true"
- height="164"
+ height="135"
layout="topleft"
name="camera_floater"
help_topic="camera_floater"
@@ -16,7 +16,7 @@
title="CAMERA CONTROLS"
chrome="true"
save_rect="true"
- width="228">
+ width="400">
<floater.string
name="rotate_tooltip">
Rotate Camera Around Focus
@@ -33,6 +33,7 @@
name="free_mode_title">
View Object
</floater.string>
+ <string name="inactive_combo_text">Use preset</string>
<panel
border="false"
height="123"
@@ -41,130 +42,18 @@
top="0"
mouse_opaque="false"
name="controls"
- width="226">
- <panel
- follows="all"
- height="102"
- layout="topleft"
- left="8"
- name="preset_views_list"
- top="24"
- width="212"
- visible="false">
- <panel_camera_item
- name="front_view">
- <panel_camera_item.mousedown_callback
- function="CameraPresets.ChangeView"
- parameter="front_view" />
- <panel_camera_item.picture
- image_name="Cam_Preset_Front_Off" />
- <panel_camera_item.selected_picture
- image_name="Cam_Preset_Front_On" />
- <panel_camera_item.text
- name="front_view_text">
- Front View
- </panel_camera_item.text>
- </panel_camera_item>
- <panel_camera_item
- name="group_view"
- top_pad="4">
- <panel_camera_item.mousedown_callback
- function="CameraPresets.ChangeView"
- parameter="group_view" />
- <panel_camera_item.picture
- image_name="Cam_Preset_Side_Off" />
- <panel_camera_item.selected_picture
- image_name="Cam_Preset_Side_On" />
- <panel_camera_item.text
- name="side_view_text">
- Side View
- </panel_camera_item.text>
- </panel_camera_item>
- <panel_camera_item
- name="rear_view"
- layout="topleft"
- top_pad="4">
- <panel_camera_item.mousedown_callback
- function="CameraPresets.ChangeView"
- parameter="rear_view" />
- <panel_camera_item.picture
- image_name="Cam_Preset_Back_Off" />
- <panel_camera_item.selected_picture
- image_name="Cam_Preset_Back_On" />
- <panel_camera_item.text
- name="rear_view_text">
- Rear View
- </panel_camera_item.text>
- </panel_camera_item>
- </panel>
- <panel
- follows="all"
- height="68"
- layout="topleft"
- left="8"
- name="camera_modes_list"
- top="24"
- width="212"
- visible="false">
- <panel_camera_item
- name="object_view">
- <panel_camera_item.mousedown_callback
- function="CameraPresets.ChangeView"
- parameter="object_view" />
- <panel_camera_item.text
- name="object_view_text">
- Object View
- </panel_camera_item.text>
- <panel_camera_item.picture
- image_name="Object_View_Off" />
- <panel_camera_item.selected_picture
- image_name="Object_View_On" />
- </panel_camera_item>
- <panel_camera_item
- name="mouselook_view"
- layout="topleft">
- <panel_camera_item.mousedown_callback
- function="CameraPresets.ChangeView"
- parameter="mouselook_view" />
- <panel_camera_item.text
- name="mouselook_view_text">
- Mouselook View
- </panel_camera_item.text>
- <panel_camera_item.picture
- image_name="MouseLook_View_Off" />
- <panel_camera_item.selected_picture
- image_name="MouseLook_View_On" />
- </panel_camera_item>
- </panel>
+ width="220">
<!--TODO: replace + - images -->
<panel
border="false"
class="camera_zoom_panel"
- height="114"
+ height="123"
layout="topleft"
left="0"
mouse_opaque="false"
name="zoom"
top="0"
- width="226">
- <slider
- can_edit_text="true"
- control_name="CameraAngle"
- decimal_digits="2"
- follows="left|top"
- height="16"
- top="20"
- increment="0.025"
- initial_value="1.57"
- layout="topleft"
- label_width="112"
- label="View angle"
- left="10"
- max_val="1.6"
- min_val="0.17"
- name="camera_fov"
- show_text="false"
- width="200" />
+ width="220">
<joystick_rotate
follows="top|left"
height="78"
@@ -175,8 +64,8 @@
sound_flags="3"
visible="true"
tool_tip="Orbit camera around focus"
- top_delta="20"
- width="78" />
+ top="25"
+ width="78" />
<button
follows="top|left"
height="18"
@@ -187,7 +76,7 @@
left_pad="14"
name="zoom_plus_btn"
width="18"
- top="38">
+ top="23">
<commit_callback
function="Zoom.plus" />
<mouse_held_callback
@@ -232,53 +121,128 @@
scale_image="false"
sound_flags="3"
tool_tip="Move camera up and down, left and right"
- top="40"
+ top="25"
width="78"/>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="15"
+ layout="topleft"
+ left="41"
+ top_pad="9"
+ name="precise_ctrs_label"
+ width="200">
+ Use precise controls
+ </text>
</panel>
</panel>
<panel
- border="false"
- height="42"
+ follows="all"
+ height="102"
layout="topleft"
- left="2"
- top_pad="0"
- name="buttons"
- width="226">
- <button
- name="open_prefs_btn"
- image_overlay="Icon_Gear_Foreground"
- tool_tip = "Open view preferences"
- layout="topleft"
- left="70"
- height="23"
- width="28">
- <button.commit_callback
- function="Presets.GoViewPrefs" />
- </button>
- <button
- height="23"
- label=""
- layout="topleft"
- left_pad="1"
- is_toggle="true"
- image_overlay="PanOrbit_Off"
- image_selected="PushButton_Selected_Press"
- name="pan_btn"
- tab_stop="false"
- tool_tip="Orbit Zoom Pan"
- width="25">
- </button>
- <button
- height="23"
- label=""
- layout="topleft"
- left_pad="1"
- image_overlay="Cam_FreeCam_Off"
- image_selected="PushButton_Selected_Press"
- name="avatarview_btn"
- tab_stop="false"
- tool_tip="Camera modes"
- width="25">
- </button>
- </panel>
+ left_pad="2"
+ name="buttons_panel"
+ top="22"
+ width="212">
+ <panel_camera_item
+ name="front_view"
+ tool_tip="Front View"
+ width="30">
+ <panel_camera_item.mousedown_callback
+ function="CameraPresets.ChangeView"
+ parameter="front_view" />
+ <panel_camera_item.picture
+ image_name="Cam_Preset_Front_Off" />
+ <panel_camera_item.selected_picture
+ image_name="Cam_Preset_Front_On" />
+ </panel_camera_item>
+ <panel_camera_item
+ name="group_view"
+ tool_tip="Side View"
+ width="30"
+ left_pad="4">
+ <panel_camera_item.mousedown_callback
+ function="CameraPresets.ChangeView"
+ parameter="group_view" />
+ <panel_camera_item.picture
+ image_name="Cam_Preset_Side_Off" />
+ <panel_camera_item.selected_picture
+ image_name="Cam_Preset_Side_On" />
+ </panel_camera_item>
+ <panel_camera_item
+ name="rear_view"
+ tool_tip="Rear View"
+ width="30"
+ left_pad="4">
+ <panel_camera_item.mousedown_callback
+ function="CameraPresets.ChangeView"
+ tool_tip="Rear View"
+ parameter="rear_view" />
+ <panel_camera_item.picture
+ image_name="Cam_Preset_Back_Off" />
+ <panel_camera_item.selected_picture
+ image_name="Cam_Preset_Back_On" />
+ </panel_camera_item>
+ <panel_camera_item
+ name="object_view"
+ tool_tip="Object View"
+ width="30"
+ left_pad="4">
+ <panel_camera_item.mousedown_callback
+ function="CameraPresets.ChangeView"
+ parameter="object_view" />
+ <panel_camera_item.picture
+ image_name="Object_View_Off" />
+ <panel_camera_item.selected_picture
+ image_name="Object_View_On" />
+ </panel_camera_item>
+ <panel_camera_item
+ name="mouselook_view"
+ tool_tip="Mouselook View"
+ width="30"
+ left_pad="4">
+ <panel_camera_item.mousedown_callback
+ function="CameraPresets.ChangeView"
+ parameter="mouselook_view" />
+ <panel_camera_item.picture
+ image_name="MouseLook_View_Off" />
+ <panel_camera_item.selected_picture
+ image_name="MouseLook_View_On" />
+ </panel_camera_item>
+ <combo_box
+ height="23"
+ left="0"
+ mouse_opaque="true"
+ name="preset_combo"
+ top_pad="10"
+ width="136">
+ <combo_box.item
+ label="Use preset"
+ name="Use preset"
+ value="default" />
+ </combo_box>
+ <icon
+ height="28"
+ width="28"
+ image_name="Command_Preferences_Icon"
+ layout="topleft"
+ mouse_opaque="true"
+ name="icon_gear"
+ tool_tip="My Camera Presets"
+ top_delta="0"
+ left_pad="5" />
+ <button
+ follows="top|left"
+ height="25"
+ label="Save as preset..."
+ layout="topleft"
+ left="0"
+ name="save_preset_btn"
+ top_pad="8"
+ width="150">
+ <button.commit_callback
+ function="CameraPresets.Save"/>
+ </button>
+ </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preferences_view_advanced.xml b/indra/newview/skins/default/xui/en/floater_preferences_view_advanced.xml
index 5b2cbee914..3826ead5c2 100644
--- a/indra/newview/skins/default/xui/en/floater_preferences_view_advanced.xml
+++ b/indra/newview/skins/default/xui/en/floater_preferences_view_advanced.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- height="170"
+ height="128"
layout="topleft"
name="floaterpreferencesviewadvanced"
help_topic="floaterviewadvanced"
- title="ADJUST CAMERA VIEW"
+ title="CAMERA POSITION"
save_rect="true"
width="280">
@@ -113,28 +113,4 @@
<spinner.commit_callback
function="CommitSettings" />
</spinner>
-
- <button
- follows="left|top"
- height="23"
- label="OK"
- layout="topleft"
- left="90"
- name="ok"
- top_pad="30"
- width="90">
- <button.commit_callback
- function="Ok"/>
- </button>
- <button
- follows="left|top"
- height="23"
- label="Cancel"
- layout="topleft"
- left_pad="5"
- name="cancel"
- width="90">
- <button.commit_callback
- function="Cancel"/>
- </button>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_save_pref_preset.xml b/indra/newview/skins/default/xui/en/floater_save_pref_preset.xml
index a9cda26f0b..178ecad0f3 100644
--- a/indra/newview/skins/default/xui/en/floater_save_pref_preset.xml
+++ b/indra/newview/skins/default/xui/en/floater_save_pref_preset.xml
@@ -1,51 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<floater
legacy_header_height="18"
- height="145"
+ height="185"
help_topic="floater_save_preset"
layout="topleft"
name="save_pref_preset"
save_rect="true"
title="SAVE PREF PRESET"
- width="300">
+ width="280">
<string name="title_graphic">Save Graphic Preset</string>
<string name="title_camera">Save Camera Preset</string>
-
- <text
- follows="top|left|right"
- height="32"
+ <string name="btn_label_save">Save</string>
+ <string name="btn_label_replace">Replace</string>
+ <radio_group
+ height="85"
layout="topleft"
- word_wrap="true"
left="20"
- name="Preset"
- top="30"
- width="200">
- Type a name for the preset or choose an existing preset.
- </text>
+ top="15"
+ width="150"
+ name="radio_save_preset">
+ <radio_item
+ label="Save as a new preset"
+ name="new_preset"
+ top="10"
+ layout="topleft"
+ height="16"
+ value="0"/>
+ <radio_item
+ label="Replace a preset"
+ name="replace_preset"
+ layout="topleft"
+ top="70"
+ height="16"
+ value="1"/>
+ </radio_group>
+ <line_editor
+ commit_on_focus_lost = "true"
+ follows="top|left"
+ height="23"
+ layout="topleft"
+ left="41"
+ name="preset_txt_editor"
+ width="200"
+ top="45"/>
<combo_box
follows="top|left"
layout="topleft"
- left="20"
+ left="41"
name="preset_combo"
- top_delta="35"
- allow_text_entry="true"
+ top_pad="35"
width="200"/>
<button
follows="top|left"
- height="23"
+ height="25"
label="Save"
layout="topleft"
top_delta="40"
- left="20"
+ left="25"
name="save"
- width="70"/>
+ width="110"/>
<button
follows="bottom|right"
- height="23"
+ height="25"
label="Cancel"
layout="topleft"
left_pad="20"
name="cancel"
- width="70"/>
+ width="110"/>
</floater>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index f72767cceb..7e06389bfe 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -8356,6 +8356,18 @@ Can not overwrite default preset.
</notification>
<notification
+ icon="alertmodal.tga"
+ name="PresetAlreadyExists"
+ type="alertmodal">
+&apos;[NAME]&apos; is in use. You may replace
+this preset or choose another name.
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
icon="notifytip.tga"
name="PresetNotDeleted"
type="notifytip">
diff --git a/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml b/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml
index 98707b8495..564f695cd0 100644
--- a/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml
@@ -15,7 +15,7 @@
top="30"
scale_image="true"
visible="false"
- width="212" />
+ width="30" />
<panel_camera_item.icon_selected
follows="top|left"
height="30"
@@ -27,7 +27,7 @@
top="30"
scale_image="true"
visible="false"
- width="212" />
+ width="30" />
<panel_camera_item.picture
follows="top|left"
height="30"