diff options
| author | Mnikolenko Productengine <mnikolenko@productengine.com> | 2019-11-04 20:35:34 +0200 | 
|---|---|---|
| committer | Mnikolenko Productengine <mnikolenko@productengine.com> | 2019-11-04 20:35:34 +0200 | 
| commit | c75d443c8359f0bceee2df2adc0a67b2890922ea (patch) | |
| tree | 03814e15ba8c31a82ab43a050f6cdbec02cbf437 /indra/newview | |
| parent | b371c5a35d5a4324deb21aafe25f48fd4560e29d (diff) | |
SL-12186 WIP Updating UI for camera controls, including presets
Diffstat (limited to 'indra/newview')
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"> +'[NAME]' 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"  | 
