Merge storm-2145 dev into lindenlab branch parented from viewer-release

master
Graham Linden 2018-05-31 17:10:48 +01:00
commit eb8eaa58a4
41 changed files with 1906 additions and 236 deletions

View File

@ -219,6 +219,7 @@ Ansariel Hiller
STORM-2105
STORM-2151
MAINT-8085
STORM-2145
Aralara Rajal
Arare Chantilly
CHUIBUG-191
@ -772,6 +773,7 @@ Jonathan Yap
STORM-2100
STORM-2104
STORM-2142
STORM-2145
Kadah Coba
STORM-1060
STORM-1843
@ -1490,6 +1492,7 @@ Whirly Fizzle
STORM-1930
BUG-6659
STORM-2078
BUG-17349
Whoops Babii
VWR-631
VWR-1640

View File

@ -1,5 +1,4 @@
/**
* @file llfloater.cpp
* @brief LLFloater base class
*

View File

@ -212,7 +212,8 @@ public:
virtual void setColor(const LLColor4& color);
F32 getCurrentTransparency();
// Ansariel: Changed to virtual. We might want to change the transparency ourself!
virtual F32 getCurrentTransparency();
void setTransparencyType(ETypeTransparency type);
ETypeTransparency getTransparencyType() const {return mTransparencyType;}

View File

@ -279,6 +279,7 @@ set(viewer_SOURCE_FILES
llfloaterperms.cpp
llfloaterpostprocess.cpp
llfloaterpreference.cpp
llfloaterpreferenceviewadvanced.cpp
llfloaterpreviewtrash.cpp
llfloaterproperties.cpp
llfloaterregiondebugconsole.cpp
@ -467,6 +468,7 @@ set(viewer_SOURCE_FILES
llpanelplaceprofile.cpp
llpanelplaces.cpp
llpanelplacestab.cpp
llpanelpresetscamerapulldown.cpp
llpanelpresetspulldown.cpp
llpanelprimmediacontrols.cpp
llpanelprofile.cpp
@ -903,6 +905,7 @@ set(viewer_HEADER_FILES
llfloaterperms.h
llfloaterpostprocess.h
llfloaterpreference.h
llfloaterpreferenceviewadvanced.h
llfloaterpreviewtrash.h
llfloaterproperties.h
llfloaterregiondebugconsole.h
@ -1082,6 +1085,7 @@ set(viewer_HEADER_FILES
llpanelplaceprofile.h
llpanelplaces.h
llpanelplacestab.h
llpanelpresetscamerapulldown.h
llpanelpresetspulldown.h
llpanelprimmediacontrols.h
llpanelprofile.h

View File

@ -0,0 +1,115 @@
<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>2.2</real>
<real>0.0</real>
<real>0.0</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.0</real>
<real>0.0</real>
<real>0.0</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>

View File

@ -0,0 +1,115 @@
<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>

View File

@ -0,0 +1,115 @@
<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</real>
<real>0</real>
<real>0.75</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>1.0</real>
<real>0.0</real>
<real>1.0</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>

View File

@ -0,0 +1,115 @@
<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>-1.0</real>
<real>0.7</real>
<real>0.5</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>1.5</real>
<real>0.7</real>
<real>1.0</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>

View File

@ -2369,7 +2369,8 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>DEPRECATED: DebugShowPrivateMem</key> <!-- deprecated (see MAINT-8091) -->
<key>DEPRECATED: DebugShowPrivateMem</key>
<!-- deprecated (see MAINT-8091) -->
<map>
<key>Comment</key>
<string>Show Private Mem Info</string>
@ -6408,7 +6409,8 @@
<key>Value</key>
<real>600.0</real>
</map>
<key>MemoryPrivatePoolEnabled</key> <!-- deprecated (see MAINT-8091) -->
<key>MemoryPrivatePoolEnabled</key>
<!-- deprecated (see MAINT-8091) -->
<map>
<key>Comment</key>
<string>DEPRECATED: Enable the private memory pool management</string>
@ -6419,7 +6421,8 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>MemoryPrivatePoolSize</key> <!-- deprecated (see MAINT-8091) -->
<key>MemoryPrivatePoolSize</key>
<!-- deprecated (see MAINT-8091) -->
<map>
<key>Comment</key>
<string>DEPRECATED: Size of the private memory pool in MB (min. value is 256)</string>
@ -16167,7 +16170,29 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>CefVerboseLog</key>
<key>CameraOpacity</key>
<map>
<key>Comment</key>
<string>Opacity of the Camera Controls floater</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>1.0</real>
</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 />
</map>
<key>CefVerboseLog</key>
<map>
<key>Comment</key>
<string>Enable/disable CEF verbose loggingk</string>

View File

@ -56,7 +56,10 @@ enum ECameraPreset
CAMERA_PRESET_FRONT_VIEW,
/** "Above and to the left, over the shoulder, pulled back a little on the zoom" */
CAMERA_PRESET_GROUP_VIEW
CAMERA_PRESET_GROUP_VIEW,
/** Current view when a preset is saved */
CAMERA_PRESET_CUSTOM0
};
//------------------------------------------------------------------------

View File

@ -42,6 +42,7 @@
#include "llslider.h"
#include "llfirstuse.h"
#include "llhints.h"
#include "lltabcontainer.h"
static LLDefaultChildRegistry::Register<LLPanelCameraItem> r("panel_camera_item");
@ -353,6 +354,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));
}
// virtual
@ -376,6 +378,33 @@ BOOL LLFloaterCamera::postBuild()
return LLFloater::postBuild();
}
F32 LLFloaterCamera::getCurrentTransparency()
{
static LLCachedControl<F32> camera_opacity(gSavedSettings, "CameraOpacity");
static LLCachedControl<F32> active_floater_transparency(gSavedSettings, "ActiveFloaterTransparency");
return llmin(camera_opacity(), active_floater_transparency());
}
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

View File

@ -91,6 +91,10 @@ private:
/*virtual*/ BOOL postBuild();
F32 getCurrentTransparency();
void onViewButtonClick(const LLSD& user_data);
ECameraControlMode determineMode();
/* resets to the previous mode */

View File

@ -60,13 +60,15 @@ void LLFloaterDeletePrefPreset::onOpen(const LLSD& key)
{
mSubdirectory = key.asString();
std::string floater_title = getString(std::string("title_") + mSubdirectory);
setTitle(floater_title);
LLComboBox* combo = getChild<LLComboBox>("preset_combo");
EDefaultOptions option = DEFAULT_HIDE;
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
bool action;
action = LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
LLButton* delete_btn = getChild<LLButton>("delete");
delete_btn->setEnabled(action);
}
void LLFloaterDeletePrefPreset::onBtnDelete()
@ -87,12 +89,10 @@ void LLFloaterDeletePrefPreset::onBtnDelete()
void LLFloaterDeletePrefPreset::onPresetsListChange()
{
LLComboBox* combo = getChild<LLComboBox>("preset_combo");
LLButton* delete_btn = getChild<LLButton>("delete");
EDefaultOptions option = DEFAULT_HIDE;
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
delete_btn->setEnabled(0 != combo->getItemCount());
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
}
void LLFloaterDeletePrefPreset::onBtnCancel()

View File

@ -42,7 +42,8 @@ LLFloaterLoadPrefPreset::LLFloaterLoadPrefPreset(const LLSD &key)
// virtual
BOOL LLFloaterLoadPrefPreset::postBuild()
{ LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
{
LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
if (preferences)
{
preferences->addDependentFloater(this);

View File

@ -661,7 +661,7 @@ void LLFloaterPreference::cancel()
// hide spellchecker settings folder
LLFloaterReg::hideInstance("prefs_spellchecker");
// hide advancede floater
// hide advanced graphics floater
LLFloaterReg::hideInstance("prefs_graphics_advanced");
// reverts any changes to current skin
@ -780,7 +780,8 @@ void LLFloaterPreference::onOpen(const LLSD& key)
saveSettings();
// Make sure there is a default preference file
LLPresetsManager::getInstance()->createMissingDefault();
LLPresetsManager::getInstance()->createMissingDefault(PRESETS_CAMERA);
LLPresetsManager::getInstance()->createMissingDefault(PRESETS_GRAPHIC);
bool started = (LLStartUp::getStartupState() == STATE_STARTED);
@ -789,10 +790,24 @@ void LLFloaterPreference::onOpen(const LLSD& key)
LLButton* delete_btn = findChild<LLButton>("PrefDeleteButton");
LLButton* exceptions_btn = findChild<LLButton>("RenderExceptionsButton");
load_btn->setEnabled(started);
save_btn->setEnabled(started);
delete_btn->setEnabled(started);
exceptions_btn->setEnabled(started);
if (load_btn && save_btn && delete_btn && exceptions_btn)
{
load_btn->setEnabled(started);
save_btn->setEnabled(started);
delete_btn->setEnabled(started);
exceptions_btn->setEnabled(started);
}
LLButton* load_camera_btn = findChild<LLButton>("PrefCameraLoadButton");
LLButton* save_camera_btn = findChild<LLButton>("PrefCameraSaveButton");
LLButton* delete_camera_btn = findChild<LLButton>("PrefCameraDeleteButton");
if (load_camera_btn && save_camera_btn && delete_camera_btn)
{
load_camera_btn->setEnabled(started);
save_camera_btn->setEnabled(started);
delete_camera_btn->setEnabled(started);
}
}
void LLFloaterPreference::onVertexShaderEnable()
@ -2211,6 +2226,11 @@ void LLFloaterPreference::changed()
}
void LLFloaterPreference::saveCameraPreset(std::string& preset)
{
mSavedCameraPreset = preset;
}
void LLFloaterPreference::saveGraphicsPreset(std::string& preset)
{
mSavedGraphicsPreset = preset;
@ -2498,18 +2518,24 @@ void LLPanelPreference::updateMediaAutoPlayCheckbox(LLUICtrl* ctrl)
void LLPanelPreference::deletePreset(const LLSD& user_data)
{
std::string subdirectory = user_data.asString();
LLFloaterReg::hideInstance("load_pref_preset", subdirectory);
LLFloaterReg::hideInstance("save_pref_preset", subdirectory);
LLFloaterReg::showInstance("delete_pref_preset", subdirectory);
}
void LLPanelPreference::savePreset(const LLSD& user_data)
{
std::string subdirectory = user_data.asString();
LLFloaterReg::hideInstance("delete_pref_preset", subdirectory);
LLFloaterReg::hideInstance("load_pref_preset", subdirectory);
LLFloaterReg::showInstance("save_pref_preset", subdirectory);
}
void LLPanelPreference::loadPreset(const LLSD& user_data)
{
std::string subdirectory = user_data.asString();
LLFloaterReg::hideInstance("delete_pref_preset", subdirectory);
LLFloaterReg::hideInstance("save_pref_preset", subdirectory);
LLFloaterReg::showInstance("load_pref_preset", subdirectory);
}
@ -2557,6 +2583,82 @@ private:
static LLPanelInjector<LLPanelPreferenceGraphics> t_pref_graph("panel_preference_graphics");
static LLPanelInjector<LLPanelPreferencePrivacy> t_pref_privacy("panel_preference_privacy");
static LLPanelInjector<LLPanelPreferenceView> t_pref_view("panel_preference_view");
BOOL LLPanelPreferenceView::postBuild()
{
setPresetText();
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
if (presetsMgr)
{
presetsMgr->setPresetListChangeCameraCallback(boost::bind(&LLPanelPreferenceView::onPresetsListChangeCamera, this));
presetsMgr->createMissingDefault(PRESETS_CAMERA); // a no-op after the first time, but that's ok
}
return LLPanelPreference::postBuild();
}
void LLPanelPreferenceView::onPresetsListChangeCamera()
{
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
if (presetsMgr)
{
presetsMgr->setCameraDirty(false);
}
setPresetText();
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
if (instance && !gSavedSettings.getString("PresetCameraActive").empty())
{
instance->saveSettings(); //make cancel work correctly after changing the preset
}
}
void LLPanelPreferenceView::draw()
{
setPresetText();
LLPanelPreference::draw();
}
void LLPanelPreferenceView::setPresetText()
{
LLTextBox* preset_text = getChild<LLTextBox>("preset_camera_text");
std::string preset_camera_active = gSavedSettings.getString("PresetCameraActive");
if (!preset_camera_active.empty() && preset_camera_active != preset_text->getText())
{
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
if (instance)
{
instance->saveCameraPreset(preset_camera_active);
}
}
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
if (presetsMgr)
{
if (presetsMgr->isCameraDirty() && !preset_camera_active.empty())
{
preset_camera_active.clear();
}
}
if (!preset_camera_active.empty())
{
if (preset_camera_active == PRESETS_DEFAULT)
{
preset_camera_active = LLTrans::getString(PRESETS_DEFAULT);
}
preset_text->setText(preset_camera_active);
}
else
{
preset_text->setText(LLTrans::getString("none_paren_cap"));
}
}
BOOL LLPanelPreferenceGraphics::postBuild()
{
@ -2580,7 +2682,7 @@ BOOL LLPanelPreferenceGraphics::postBuild()
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
presetsMgr->setPresetListChangeCallback(boost::bind(&LLPanelPreferenceGraphics::onPresetsListChange, this));
presetsMgr->createMissingDefault(); // a no-op after the first time, but that's ok
presetsMgr->createMissingDefault(PRESETS_GRAPHIC); // a no-op after the first time, but that's ok
return LLPanelPreference::postBuild();
}

View File

@ -179,6 +179,7 @@ public:
void buildPopupLists();
static void refreshSkin(void* data);
void selectPanel(const LLSD& name);
void saveCameraPreset(std::string& preset);
void saveGraphicsPreset(std::string& preset);
private:
@ -201,6 +202,7 @@ private:
std::string mDirectoryVisibility;
LLAvatarData mAvatarProperties;
std::string mSavedCameraPreset;
std::string mSavedGraphicsPreset;
LOG_CLASS(LLFloaterPreference);
};
@ -249,6 +251,18 @@ private:
LOG_CLASS(LLPanelPreference);
};
class LLPanelPreferenceView : public LLPanelPreference
{
public:
BOOL postBuild();
void draw();
void setPresetText();
private:
void onPresetsListChangeCamera();
LOG_CLASS(LLPanelPreferenceView);
};
class LLPanelPreferenceGraphics : public LLPanelPreference
{
public:
@ -266,7 +280,6 @@ protected:
bool hasDirtyChilds();
private:
void onPresetsListChange();
LOG_CLASS(LLPanelPreferenceGraphics);
};

View File

@ -0,0 +1,112 @@
/**
* @file llfloaterpreferenceviewadvanced.cpp
* @brief floater for adjusting camera position
*
* $LicenseInfo:firstyear=2018&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2018, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llfloaterpreferenceviewadvanced.h"
#include "llfloater.h"
#include "llfloaterreg.h"
#include "lluictrlfactory.h"
#include "llspinctrl.h"
#include "llviewercontrol.h"
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]);
getChild<LLSpinCtrl>("camera_y")->setValue(vector[VY]);
getChild<LLSpinCtrl>("camera_z")->setValue(vector[VZ]);
}
void LLFloaterPreferenceViewAdvanced::updateFocusControl(const LLVector3d& vector3d)
{
getChild<LLSpinCtrl>("focus_x")->setValue(vector3d[VX]);
getChild<LLSpinCtrl>("focus_y")->setValue(vector3d[VY]);
getChild<LLSpinCtrl>("focus_z")->setValue(vector3d[VZ]);
}
void LLFloaterPreferenceViewAdvanced::draw()
{
static LLCachedControl<LLVector3> camera(gSavedSettings, "CameraOffsetRearView");
static LLCachedControl<LLVector3d> focus(gSavedSettings, "FocusOffsetRearView");
updateCameraControl(camera);
updateFocusControl(focus);
LLFloater::draw();
}
void LLFloaterPreferenceViewAdvanced::onCommitSettings()
{
LLVector3 vector;
LLVector3d vector3d;
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);
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);
}

View File

@ -0,0 +1,58 @@
/**
* @file llfloaterpreferenceviewadvanced.h
* @brief floater for adjusting camera position
*
* $LicenseInfo:firstyear=2018&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2018, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LLFLOATERPREFERENCEVIEWADVANCED_H
#define LLFLOATERPREFERENCEVIEWADVANCED_H
#include "llcontrol.h"
#include "llfloater.h"
class LLFloaterPreferenceViewAdvanced
: public LLFloater
{
friend class LLFloaterReg;
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

View File

@ -42,7 +42,8 @@ LLFloaterSavePrefPreset::LLFloaterSavePrefPreset(const LLSD &key)
// virtual
BOOL LLFloaterSavePrefPreset::postBuild()
{ LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
{
LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
if (preferences)
{
preferences->addDependentFloater(this);

View File

@ -0,0 +1,237 @@
/**
* @file llpanelpresetscamerapulldown.cpp
* @brief A panel showing a quick way to pick camera presets
*
* $LicenseInfo:firstyear=2017&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2017, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llpanelpresetscamerapulldown.h"
#include "llviewercontrol.h"
#include "llstatusbar.h"
#include "llbutton.h"
#include "lltabcontainer.h"
#include "llfloaterreg.h"
#include "llfloaterpreference.h"
#include "llpresetsmanager.h"
#include "llsliderctrl.h"
#include "llscrolllistctrl.h"
#include "lltrans.h"
/* static */ const F32 LLPanelPresetsCameraPulldown::sAutoCloseFadeStartTimeSec = 2.0f;
/* static */ const F32 LLPanelPresetsCameraPulldown::sAutoCloseTotalTimeSec = 3.0f;
///----------------------------------------------------------------------------
/// Class LLPanelPresetsCameraPulldown
///----------------------------------------------------------------------------
// Default constructor
LLPanelPresetsCameraPulldown::LLPanelPresetsCameraPulldown()
{
mHoverTimer.stop();
mCommitCallbackRegistrar.add("Presets.GoViewPrefs", boost::bind(&LLPanelPresetsCameraPulldown::onViewButtonClick, this, _2));
mCommitCallbackRegistrar.add("PresetsCamera.RowClick", boost::bind(&LLPanelPresetsCameraPulldown::onRowClick, this, _2));
buildFromFile( "panel_presets_camera_pulldown.xml");
}
BOOL LLPanelPresetsCameraPulldown::postBuild()
{
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
if (presetsMgr)
{
// Make sure there is a default preference file
presetsMgr->createMissingDefault(PRESETS_CAMERA);
presetsMgr->startWatching(PRESETS_CAMERA);
presetsMgr->setPresetListChangeCameraCallback(boost::bind(&LLPanelPresetsCameraPulldown::populatePanel, this));
}
populatePanel();
return LLPanel::postBuild();
}
void LLPanelPresetsCameraPulldown::populatePanel()
{
std::string presets_dir = LLPresetsManager::getInstance()->getPresetsDir(PRESETS_CAMERA);
LLPresetsManager::getInstance()->loadPresetNamesFromDir(presets_dir, mPresetNames, DEFAULT_TOP);
LLScrollListCtrl* scroll = getChild<LLScrollListCtrl>("preset_camera_list");
if (scroll && mPresetNames.begin() != mPresetNames.end())
{
scroll->clearRows();
std::string active_preset = gSavedSettings.getString("PresetCameraActive");
if (active_preset == PRESETS_DEFAULT)
{
active_preset = LLTrans::getString(PRESETS_DEFAULT);
}
for (std::list<std::string>::const_iterator it = mPresetNames.begin(); it != mPresetNames.end(); ++it)
{
const std::string& name = *it;
LL_DEBUGS() << "adding '" << name << "'" << LL_ENDL;
LLSD row;
row["columns"][0]["column"] = "preset_name";
row["columns"][0]["value"] = name;
bool is_selected_preset = false;
if (name == active_preset)
{
row["columns"][1]["column"] = "icon";
row["columns"][1]["type"] = "icon";
row["columns"][1]["value"] = "Check_Mark";
is_selected_preset = true;
}
LLScrollListItem* new_item = scroll->addElement(row);
new_item->setSelected(is_selected_preset);
}
}
}
/*virtual*/
void LLPanelPresetsCameraPulldown::onMouseEnter(S32 x, S32 y, MASK mask)
{
mHoverTimer.stop();
LLPanel::onMouseEnter(x,y,mask);
}
/*virtual*/
void LLPanelPresetsCameraPulldown::onTopLost()
{
setVisible(FALSE);
}
/*virtual*/
BOOL LLPanelPresetsCameraPulldown::handleMouseDown(S32 x, S32 y, MASK mask)
{
LLPanel::handleMouseDown(x,y,mask);
return TRUE;
}
/*virtual*/
BOOL LLPanelPresetsCameraPulldown::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
LLPanel::handleRightMouseDown(x, y, mask);
return TRUE;
}
/*virtual*/
BOOL LLPanelPresetsCameraPulldown::handleDoubleClick(S32 x, S32 y, MASK mask)
{
LLPanel::handleDoubleClick(x, y, mask);
return TRUE;
}
/*virtual*/
void LLPanelPresetsCameraPulldown::onMouseLeave(S32 x, S32 y, MASK mask)
{
mHoverTimer.start();
LLPanel::onMouseLeave(x,y,mask);
}
/*virtual*/
void LLPanelPresetsCameraPulldown::onVisibilityChange ( BOOL new_visibility )
{
if (new_visibility)
{
mHoverTimer.start(); // timer will be stopped when mouse hovers over panel
}
else
{
mHoverTimer.stop();
}
}
void LLPanelPresetsCameraPulldown::onRowClick(const LLSD& user_data)
{
LLScrollListCtrl* scroll = getChild<LLScrollListCtrl>("preset_camera_list");
if (scroll)
{
LLScrollListItem* item = scroll->getFirstSelected();
if (item)
{
std::string name = item->getColumn(1)->getValue().asString();
LL_DEBUGS() << "selected '" << name << "'" << LL_ENDL;
LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, name);
setVisible(FALSE);
}
else
{
LL_DEBUGS() << "none selected" << LL_ENDL;
}
}
else
{
LL_DEBUGS() << "no scroll" << LL_ENDL;
}
}
void LLPanelPresetsCameraPulldown::onViewButtonClick(const LLSD& user_data)
{
// close the minicontrol, we're bringing up the big one
setVisible(FALSE);
// 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);
}
}
}
//virtual
void LLPanelPresetsCameraPulldown::draw()
{
F32 alpha = mHoverTimer.getStarted()
? clamp_rescale(mHoverTimer.getElapsedTimeF32(), sAutoCloseFadeStartTimeSec, sAutoCloseTotalTimeSec, 1.f, 0.f)
: 1.0f;
LLViewDrawContext context(alpha);
LLPanel::draw();
if (alpha == 0.f)
{
setVisible(FALSE);
}
}

View File

@ -0,0 +1,62 @@
/**
* @file llpanelpresetscamerapulldown.h
* @brief A panel showing a quick way to pick camera presets
*
* $LicenseInfo:firstyear=2017&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2017, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LL_LLPANELPRESETSCAMERAPULLDOWN_H
#define LL_LLPANELPRESETSCAMERAPULLDOWN_H
#include "linden_common.h"
#include "llpanel.h"
class LLFrameTimer;
class LLPanelPresetsCameraPulldown : public LLPanel
{
public:
LLPanelPresetsCameraPulldown();
/*virtual*/ void draw();
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
/*virtual*/ void onTopLost();
/*virtual*/ void onVisibilityChange ( BOOL new_visibility );
/*virtual*/ BOOL postBuild();
void populatePanel();
private:
void onViewButtonClick(const LLSD& user_data);
void onRowClick(const LLSD& user_data);
std::list<std::string> mPresetNames;
LLFrameTimer mHoverTimer;
static const F32 sAutoCloseFadeStartTimeSec;
static const F32 sAutoCloseTotalTimeSec;
LOG_CLASS(LLPanelPresetsCameraPulldown);
};
#endif // LL_LLPANELPRESETSCAMERAPULLDOWN_H

View File

@ -63,7 +63,7 @@ BOOL LLPanelPresetsPulldown::postBuild()
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
presetsMgr->setPresetListChangeCallback(boost::bind(&LLPanelPresetsPulldown::populatePanel, this));
// Make sure there is a default preference file
presetsMgr->createMissingDefault();
presetsMgr->createMissingDefault(PRESETS_GRAPHIC);
populatePanel();

View File

@ -39,6 +39,8 @@
#include "llfloaterpreference.h"
#include "llfloaterreg.h"
#include "llfeaturemanager.h"
#include "llagentcamera.h"
#include "llfile.h"
LLPresetsManager::LLPresetsManager()
{
@ -46,6 +48,12 @@ LLPresetsManager::LLPresetsManager()
LLPresetsManager::~LLPresetsManager()
{
mCameraChangedSignal.disconnect();
}
void LLPresetsManager::triggerChangeCameraSignal()
{
mPresetListChangeCameraSignal();
}
void LLPresetsManager::triggerChangeSignal()
@ -53,19 +61,21 @@ void LLPresetsManager::triggerChangeSignal()
mPresetListChangeSignal();
}
void LLPresetsManager::createMissingDefault()
void LLPresetsManager::createMissingDefault(const std::string& subdirectory)
{
if(gDirUtilp->getLindenUserDir().empty())
{
return;
}
std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_GRAPHIC, PRESETS_DEFAULT + ".xml");
std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR,
subdirectory, PRESETS_DEFAULT + ".xml");
if (!gDirUtilp->fileExists(default_file))
{
LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL;
// Write current graphic settings as the default
savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT, true);
// Write current settings as the default
savePreset(subdirectory, PRESETS_DEFAULT, true);
}
else
{
@ -73,17 +83,64 @@ void LLPresetsManager::createMissingDefault()
}
}
void LLPresetsManager::startWatching(const std::string& subdirectory)
{
if (PRESETS_CAMERA == subdirectory)
{
std::vector<std::string> name_list;
getControlNames(name_list);
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
{
std::string ctrl_name = *it;
if (gSavedSettings.controlExists(ctrl_name))
{
LLPointer<LLControlVariable> cntrl_ptr = gSavedSettings.getControl(ctrl_name);
if (cntrl_ptr.isNull())
{
LL_WARNS("Init") << "Unable to set signal on global setting '" << ctrl_name
<< "'" << LL_ENDL;
}
else
{
mCameraChangedSignal = cntrl_ptr->getCommitSignal()->connect(boost::bind(&settingChanged));
}
}
}
}
}
std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory)
{
std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR);
std::string full_path;
LLFile::mkdir(presets_path);
full_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, subdirectory);
LLFile::mkdir(full_path);
std::string dest_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, subdirectory);
if (!gDirUtilp->fileExists(dest_path))
LLFile::mkdir(dest_path);
return full_path;
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 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);
}
}
}
return dest_path;
}
void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option)
@ -132,6 +189,47 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam
presets = mPresetNames;
}
bool LLPresetsManager::mCameraDirty = false;
void LLPresetsManager::setCameraDirty(bool dirty)
{
mCameraDirty = dirty;
}
bool LLPresetsManager::isCameraDirty()
{
return mCameraDirty;
}
void LLPresetsManager::settingChanged()
{
setCameraDirty(true);
gSavedSettings.setString("PresetCameraActive", "");
// Hack call because this is a static routine
LLPresetsManager::getInstance()->triggerChangeCameraSignal();
}
void LLPresetsManager::getControlNames(std::vector<std::string>& names)
{
const std::vector<std::string> camera_controls = boost::assign::list_of
// From panel_preferences_move.xml
("CameraAngle")
("CameraOffsetScale")
("EditCameraMovement")
("AppearanceCameraMovement")
// From llagentcamera.cpp
("CameraOffsetBuild")
("CameraOffsetRearView")
("FocusOffsetRearView")
("CameraOffsetScale")
("TrackFocusObject")
;
names = camera_controls;
}
bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name, bool createDefault)
{
if (LLTrans::getString(PRESETS_DEFAULT) == name)
@ -147,94 +245,107 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
if (instance && !createDefault)
{
gSavedSettings.setString("PresetGraphicActive", name);
gSavedSettings.setString("PresetGraphicActive", name);
instance->getControlNames(name_list);
LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL;
LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL;
name_list.push_back("PresetGraphicActive");
}
else
else
{
LL_WARNS() << "preferences floater instance not found" << LL_ENDL;
}
LL_WARNS("Presets") << "preferences floater instance not found" << LL_ENDL;
}
}
else if(PRESETS_CAMERA == subdirectory)
else if(PRESETS_CAMERA == subdirectory)
{
gSavedSettings.setString("PresetGraphicActive", name);
name_list.clear();
name_list.push_back("Placeholder");
getControlNames(name_list);
name_list.push_back("PresetCameraActive");
}
else
{
LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL;
}
// make an empty llsd
LLSD paramsData(LLSD::emptyMap());
// Create a default graphics preset from hw recommended settings
if (createDefault && name == PRESETS_DEFAULT && subdirectory == PRESETS_GRAPHIC)
{
paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap();
if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0)
{
// use the recommended setting as an initial one (MAINT-6435)
gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger());
}
}
else
{
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
{
std::string ctrl_name = *it;
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
std::string comment = ctrl->getComment();
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;
}
}
std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml");
// If the active preset name is the only thing in the list, don't save the list
if (paramsData.size() > 1)
{
// write to file
llofstream presetsXML(pathName.c_str());
if (presetsXML.is_open())
{
LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
presetsXML.close();
saved = true;
LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL;
if (subdirectory == PRESETS_GRAPHIC)
{
gSavedSettings.setString("PresetGraphicActive", name);
// signal interested parties
triggerChangeSignal();
}
if (subdirectory == PRESETS_CAMERA)
{
gSavedSettings.setString("PresetCameraActive", name);
setCameraDirty(false);
// signal interested parties
triggerChangeCameraSignal();
}
}
else
{
LL_WARNS("Presets") << "Cannot open for output preset file " << pathName << LL_ENDL;
}
}
else
{
LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL;
}
if (name_list.size() > 1 // if the active preset name is the only thing in the list, don't save the list
|| (createDefault && name == PRESETS_DEFAULT && subdirectory == PRESETS_GRAPHIC)) // or create a default graphics preset from hw recommended settings
{
// make an empty llsd
LLSD paramsData(LLSD::emptyMap());
if (createDefault)
{
paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap();
if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0)
{
// use the recommended setting as an initial one (MAINT-6435)
gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger());
}
}
else
{
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
{
std::string ctrl_name = *it;
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
std::string comment = ctrl->getComment();
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;
}
}
std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml");
// write to file
llofstream presetsXML(pathName.c_str());
if (presetsXML.is_open())
{
LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
presetsXML.close();
saved = true;
LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL;
if (!createDefault)
{
gSavedSettings.setString("PresetGraphicActive", name);
// signal interested parties
triggerChangeSignal();
}
}
else
{
LL_WARNS("Presets") << "Cannot open for output preset file " << pathName << LL_ENDL;
}
}
else
{
LL_INFOS() << "No settings found; preferences floater has not yet been created" << LL_ENDL;
}
{
LL_INFOS() << "No settings available to be saved" << LL_ENDL;
}
return saved;
}
void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option)
bool LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option)
{
bool sts = true;
combo->clearRows();
std::string presets_dir = getPresetsDir(subdirectory);
@ -257,8 +368,10 @@ void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory,
else
{
combo->setLabel(LLTrans::getString("preset_combo_label"));
sts = false;
}
}
return sts;
}
void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string name)
@ -277,18 +390,23 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string n
if(PRESETS_GRAPHIC == subdirectory)
{
gSavedSettings.setString("PresetGraphicActive", name);
}
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
if (instance)
{
instance->refreshEnabledGraphics();
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
if (instance)
{
instance->refreshEnabledGraphics();
}
triggerChangeSignal();
}
if(PRESETS_CAMERA == subdirectory)
{
gSavedSettings.setString("PresetCameraActive", name);
triggerChangeCameraSignal();
}
triggerChangeSignal();
}
else
{
LL_WARNS() << "failed to load preset '"<<name<<"' from '"<<full_path<<"'" << LL_ENDL;
LL_WARNS("Presets") << "failed to load preset '"<<name<<"' from '"<<full_path<<"'" << LL_ENDL;
}
}
@ -315,17 +433,34 @@ bool LLPresetsManager::deletePreset(const std::string& subdirectory, std::string
}
// If you delete the preset that is currently marked as loaded then also indicate that no preset is loaded.
if (gSavedSettings.getString("PresetGraphicActive") == name)
if(PRESETS_GRAPHIC == subdirectory)
{
gSavedSettings.setString("PresetGraphicActive", "");
if (gSavedSettings.getString("PresetGraphicActive") == name)
{
gSavedSettings.setString("PresetGraphicActive", "");
}
// signal interested parties
triggerChangeSignal();
}
// signal interested parties
triggerChangeSignal();
if(PRESETS_CAMERA == subdirectory)
{
if (gSavedSettings.getString("PresetCameraActive") == name)
{
gSavedSettings.setString("PresetCameraActive", "");
}
// signal interested parties
triggerChangeCameraSignal();
}
return sts;
}
boost::signals2::connection LLPresetsManager::setPresetListChangeCameraCallback(const preset_list_signal_t::slot_type& cb)
{
return mPresetListChangeCameraSignal.connect(cb);
}
boost::signals2::connection LLPresetsManager::setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb)
{
return mPresetListChangeSignal.connect(cb);

View File

@ -54,26 +54,39 @@ public:
typedef std::list<std::string> preset_name_list_t;
typedef boost::signals2::signal<void()> preset_list_signal_t;
void createMissingDefault();
void createMissingDefault(const std::string& subdirectory);
void startWatching(const std::string& subdirectory);
void triggerChangeCameraSignal();
void triggerChangeSignal();
static std::string getPresetsDir(const std::string& subdirectory);
void setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option);
bool setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option);
void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option);
bool savePreset(const std::string& subdirectory, std::string name, bool createDefault = false);
void loadPreset(const std::string& subdirectory, std::string name);
bool deletePreset(const std::string& subdirectory, std::string name);
bool isCameraDirty();
static void setCameraDirty(bool dirty);
// Emitted when a preset gets loaded, deleted, or saved.
boost::signals2::connection setPresetListChangeCameraCallback(const preset_list_signal_t::slot_type& cb);
boost::signals2::connection setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb);
// Emitted when a preset gets loaded or saved.
preset_name_list_t mPresetNames;
preset_list_signal_t mPresetListChangeCameraSignal;
preset_list_signal_t mPresetListChangeSignal;
private:
LOG_CLASS(LLPresetsManager);
LOG_CLASS(LLPresetsManager);
void getControlNames(std::vector<std::string>& names);
static void settingChanged();
boost::signals2::connection mCameraChangedSignal;
static bool mCameraDirty;
};
#endif // LL_PRESETSMANAGER_H

View File

@ -38,6 +38,7 @@
#include "llfloaterbuycurrency.h"
#include "llbuycurrencyhtml.h"
#include "llpanelnearbymedia.h"
#include "llpanelpresetscamerapulldown.h"
#include "llpanelpresetspulldown.h"
#include "llpanelvolumepulldown.h"
#include "llfloaterregioninfo.h"
@ -171,8 +172,11 @@ BOOL LLStatusBar::postBuild()
mBtnStats = getChildView("stat_btn");
mIconPresets = getChild<LLIconCtrl>( "presets_icon" );
mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
mIconPresetsCamera = getChild<LLIconCtrl>( "presets_icon_camera" );
mIconPresetsCamera->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresetsCamera, this));
mIconPresetsGraphic = getChild<LLIconCtrl>( "presets_icon_graphic" );
mIconPresetsGraphic->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
mBtnVolume = getChild<LLButton>( "volume_btn" );
mBtnVolume->setClickedCallback( onClickVolume, this );
@ -227,6 +231,11 @@ BOOL LLStatusBar::postBuild()
mSGPacketLoss = LLUICtrlFactory::create<LLStatGraph>(pgp);
addChild(mSGPacketLoss);
mPanelPresetsCameraPulldown = new LLPanelPresetsCameraPulldown();
addChild(mPanelPresetsCameraPulldown);
mPanelPresetsCameraPulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
mPanelPresetsCameraPulldown->setVisible(FALSE);
mPanelPresetsPulldown = new LLPanelPresetsPulldown();
addChild(mPanelPresetsPulldown);
mPanelPresetsPulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
@ -325,7 +334,8 @@ void LLStatusBar::setVisibleForMouselook(bool visible)
mSGBandwidth->setVisible(visible);
mSGPacketLoss->setVisible(visible);
setBackgroundVisible(visible);
mIconPresets->setVisible(visible);
mIconPresetsCamera->setVisible(visible);
mIconPresetsGraphic->setVisible(visible);
}
void LLStatusBar::debitBalance(S32 debit)
@ -470,10 +480,34 @@ void LLStatusBar::onClickBuyCurrency()
LLFirstUse::receiveLindens(false);
}
void LLStatusBar::onMouseEnterPresetsCamera()
{
LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
LLIconCtrl* icon = getChild<LLIconCtrl>( "presets_icon_camera" );
LLRect icon_rect = icon->getRect();
LLRect pulldown_rect = mPanelPresetsCameraPulldown->getRect();
pulldown_rect.setLeftTopAndSize(icon_rect.mLeft -
(pulldown_rect.getWidth() - icon_rect.getWidth()),
icon_rect.mBottom,
pulldown_rect.getWidth(),
pulldown_rect.getHeight());
pulldown_rect.translate(popup_holder->getRect().getWidth() - pulldown_rect.mRight, 0);
mPanelPresetsCameraPulldown->setShape(pulldown_rect);
// show the master presets pull-down
LLUI::clearPopups();
LLUI::addPopup(mPanelPresetsCameraPulldown);
mPanelNearByMedia->setVisible(FALSE);
mPanelVolumePulldown->setVisible(FALSE);
mPanelPresetsPulldown->setVisible(FALSE);
mPanelPresetsCameraPulldown->setVisible(TRUE);
}
void LLStatusBar::onMouseEnterPresets()
{
LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
LLIconCtrl* icon = getChild<LLIconCtrl>( "presets_icon" );
LLIconCtrl* icon = getChild<LLIconCtrl>( "presets_icon_graphic" );
LLRect icon_rect = icon->getRect();
LLRect pulldown_rect = mPanelPresetsPulldown->getRect();
pulldown_rect.setLeftTopAndSize(icon_rect.mLeft -
@ -512,6 +546,7 @@ void LLStatusBar::onMouseEnterVolume()
// show the master volume pull-down
LLUI::clearPopups();
LLUI::addPopup(mPanelVolumePulldown);
mPanelPresetsCameraPulldown->setVisible(FALSE);
mPanelPresetsPulldown->setVisible(FALSE);
mPanelNearByMedia->setVisible(FALSE);
mPanelVolumePulldown->setVisible(TRUE);
@ -536,6 +571,7 @@ void LLStatusBar::onMouseEnterNearbyMedia()
LLUI::clearPopups();
LLUI::addPopup(mPanelNearByMedia);
mPanelPresetsCameraPulldown->setVisible(FALSE);
mPanelPresetsPulldown->setVisible(FALSE);
mPanelVolumePulldown->setVisible(FALSE);
mPanelNearByMedia->setVisible(TRUE);

View File

@ -41,6 +41,7 @@ class LLUICtrl;
class LLUUID;
class LLFrameTimer;
class LLStatGraph;
class LLPanelPresetsCameraPulldown;
class LLPanelPresetsPulldown;
class LLPanelVolumePulldown;
class LLPanelNearByMedia;
@ -91,6 +92,7 @@ private:
void onClickBuyCurrency();
void onVolumeChanged(const LLSD& newvalue);
void onMouseEnterPresetsCamera();
void onMouseEnterPresets();
void onMouseEnterVolume();
void onMouseEnterNearbyMedia();
@ -106,7 +108,8 @@ private:
LLStatGraph *mSGPacketLoss;
LLView *mBtnStats;
LLIconCtrl *mIconPresets;
LLIconCtrl *mIconPresetsCamera;
LLIconCtrl *mIconPresetsGraphic;
LLButton *mBtnVolume;
LLTextBox *mBoxBalance;
LLButton *mMediaToggle;
@ -119,6 +122,7 @@ private:
S32 mSquareMetersCommitted;
LLFrameTimer* mBalanceTimer;
LLFrameTimer* mHealthTimer;
LLPanelPresetsCameraPulldown* mPanelPresetsCameraPulldown;
LLPanelPresetsPulldown* mPanelPresetsPulldown;
LLPanelVolumePulldown* mPanelVolumePulldown;
LLPanelNearByMedia* mPanelNearByMedia;

View File

@ -104,6 +104,7 @@
#include "llfloaterperms.h"
#include "llfloaterpostprocess.h"
#include "llfloaterpreference.h"
#include "llfloaterpreferenceviewadvanced.h"
#include "llfloaterpreviewtrash.h"
#include "llfloaterproperties.h"
#include "llfloaterregiondebugconsole.h"
@ -295,6 +296,7 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("places", "floater_places.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
LLFloaterReg::add("prefs_graphics_advanced", "floater_preferences_graphics_advanced.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceGraphicsAdvanced>);
LLFloaterReg::add("prefs_view_advanced", "floater_preferences_view_advanced.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceViewAdvanced>);
LLFloaterReg::add("prefs_proxy", "floater_preferences_proxy.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceProxy>);
LLFloaterReg::add("prefs_spellchecker_import", "floater_spellcheck_import.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSpellCheckerImport>);
LLFloaterReg::add("prefs_translation", "floater_translation_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTranslationSettings>);

View File

Before

Width:  |  Height:  |  Size: 366 B

After

Width:  |  Height:  |  Size: 366 B

View File

@ -98,7 +98,7 @@ with the same filename but different name
<texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="true" scale.left="0" scale.top="1" scale.right="0" scale.bottom="0" />
<texture name="BuyArrow_Press" file_name="navbar/BuyArrow_Press.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
<texture name="Cam_Avatar_Off" file_name="bottomtray/Cam_Avatar_Off.png" preload="false" />
<texture name="Cam_Avatar_Off" file_name="bottomtray/Cam_Avatar_Off.png" preload="true" />
<texture name="Cam_FreeCam_Off" file_name="bottomtray/Cam_FreeCam_Off.png" preload="false" />
<texture name="Cam_Orbit_Off" file_name="bottomtray/Cam_Orbit_Off.png" preload="false" />
<texture name="Cam_Pan_Off" file_name="bottomtray/Cam_Pan_Off.png" preload="false" />
@ -207,7 +207,7 @@ with the same filename but different name
<texture name="Facebook_Icon" file_name="icons/Facebook.png" preload="false" />
<texture name="Presets_Icon" file_name="icons/Presets_Icon.png" preload="true" />
<texture name="Presets_Icon_Graphic" file_name="icons/Presets_Icon_Graphic.png" preload="true" />
<texture name="Favorite_Star_Active" file_name="navbar/Favorite_Star_Active.png" preload="false" />
<texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" />

View File

@ -145,8 +145,26 @@
left="0"
mouse_opaque="false"
name="zoom"
top="20"
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" />
<joystick_rotate
follows="top|left"
height="78"
@ -157,7 +175,7 @@
sound_flags="3"
visible="true"
tool_tip="Orbit camera around focus"
top="20"
top_delta="20"
width="78" />
<button
follows="top|left"
@ -169,7 +187,7 @@
left_pad="14"
name="zoom_plus_btn"
width="18"
top="18">
top="38">
<commit_callback
function="Zoom.plus" />
<mouse_held_callback
@ -214,7 +232,7 @@
scale_image="false"
sound_flags="3"
tool_tip="Move camera up and down, left and right"
top="20"
top="40"
width="78"/>
</panel>
</panel>
@ -227,18 +245,15 @@
name="buttons"
width="226">
<button
height="23"
label=""
name="open_prefs_btn"
image_overlay="Icon_Gear_Foreground"
tool_tip = "Open view preferences"
layout="topleft"
left="70"
is_toggle="true"
image_overlay="Cam_Avatar_Off"
image_selected="PushButton_Selected_Press"
name="presets_btn"
tab_stop="false"
tool_tip="Preset Views"
top="13"
width="25">
height="23"
width="28">
<button.commit_callback
function="Presets.GoViewPrefs" />
</button>
<button
height="23"

View File

@ -4,7 +4,7 @@
height="130"
help_topic="floater_delete_preset"
layout="topleft"
name="Delete Pref Preset"
name="delete_pref_preset"
save_rect="true"
title="DELETE PREF PRESET"
width="300">

View File

@ -4,7 +4,7 @@
height="130"
help_topic="floater_load_preset"
layout="topleft"
name="Load Pref Preset"
name="load_pref_preset"
save_rect="true"
title="LOAD PREF PRESET"
width="300">

View File

@ -85,12 +85,19 @@ https://accounts.secondlife.com/change_email/
help_topic="preferences_chat_tab"
name="chat" />
<panel
class="panel_preference"
class="panel_preference_view"
filename="panel_preferences_move.xml"
label="Move &amp; View"
label="Move"
layout="topleft"
help_topic="preferences_move_tab"
name="move" />
<panel
class="panel_preference_view"
filename="panel_preferences_view.xml"
label="View"
layout="topleft"
help_topic="preferences_view_tab"
name="view" />
<panel
class="panel_preference"
filename="panel_preferences_alerts.xml"

View File

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
height="170"
layout="topleft"
name="floaterpreferencesviewadvanced"
help_topic="floaterviewadvanced"
title="ADJUST CAMERA VIEW"
save_rect="true"
width="280">
<text
follows="top|left|right"
height="16"
layout="topleft"
left="10"
top="10"
width="100">
Camera offset:
</text>
<spinner
height="20"
label="X"
label_width="12"
follows="topl|eft"
left="10"
name="camera_x"
top_pad="5"
min_val="-1e+007"
max_val="1e+007"
width="70">
<spinner.commit_callback
function="CommitSettings" />
</spinner>
<spinner
height="20"
label="Y"
label_width="12"
follows="topl|eft"
name="camera_y"
left_pad="20"
min_val="-1e+007"
max_val="1e+007"
width="70">
<spinner.commit_callback
function="CommitSettings" />
</spinner>
<spinner
height="20"
label="Z"
label_width="12"
follows="topl|eft"
name="camera_z"
left_pad="20"
min_val="-1e+007"
max_val="1e+007"
width="70">
<spinner.commit_callback
function="CommitSettings" />
</spinner>
<text
follows="top|left|right"
height="16"
layout="topleft"
left="10"
top_pad="20"
width="100">
Focus offset:
</text>
<spinner
height="20"
label="X"
label_width="12"
follows="topl|eft"
left="10"
name="focus_x"
top_pad="5"
min_val="-1e+007"
max_val="1e+007"
width="70">
<spinner.commit_callback
function="CommitSettings" />
</spinner>
<spinner
height="20"
label="Y"
label_width="12"
follows="topl|eft"
name="focus_y"
left_pad="20"
min_val="-1e+007"
max_val="1e+007"
width="70">
<spinner.commit_callback
function="CommitSettings" />
</spinner>
<spinner
height="20"
label="Z"
label_width="12"
follows="topl|eft"
name="focus_z"
left_pad="20"
min_val="-1e+007"
max_val="1e+007"
width="70">
<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>

View File

@ -4,7 +4,7 @@
height="145"
help_topic="floater_save_preset"
layout="topleft"
name="Save Pref Preset"
name="save_pref_preset"
save_rect="true"
title="SAVE PREF PRESET"
width="300">

View File

@ -293,6 +293,21 @@
width="65">
0
</text>
<text
type="string"
length="1"
follows="left|top"
height="16"
layout="topleft"
left_delta="68"
name="IndirectMaxComplexityLink"
mouse_opaque="false"
top_delta="0"
width="120">
[https://community.secondlife.com/t5/Featured-News/Why-are-all-these-people-made-of-colored-jelly/ba-p/3031255 What's this?]
</text>
<check_box
control_name="AlwaysRenderFriends"
height="16"
@ -345,7 +360,6 @@
function="Pref.PrefLoad"
parameter="graphic"/>
</button>
min_val="0.125"
<button
follows="top|left"

View File

@ -2,100 +2,24 @@
<panel
border="true"
follows="left|top|right|bottom"
height="408"
height="418"
label="Move"
layout="topleft"
left="102"
name="move_panel"
top="1"
width="517">
<icon
follows="left|top"
height="18"
image_name="Cam_FreeCam_Off"
layout="topleft"
name="camera_icon"
mouse_opaque="false"
visible="true"
width="18"
left="30"
top="10"/>
<slider
can_edit_text="true"
control_name="CameraAngle"
decimal_digits="2"
follows="left|top"
height="16"
increment="0.025"
initial_value="1.57"
height="18"
image_name="Move_Walk_Off"
layout="topleft"
label_width="100"
label="View angle"
left_pad="30"
max_val="2.97"
min_val="0.17"
name="camera_fov"
show_text="false"
width="240" />
<slider
can_edit_text="true"
control_name="CameraOffsetScale"
decimal_digits="2"
follows="left|top"
height="16"
increment="0.025"
initial_value="1"
layout="topleft"
label="Distance"
left_delta="0"
label_width="100"
max_val="3"
min_val="0.5"
name="camera_offset_scale"
show_text="false"
width="240"
top_pad="5"/>
<text
follows="left|top"
type="string"
length="1"
height="10"
left="80"
name="heading2"
width="270"
top_pad="5">
Automatic position for:
</text>
<check_box
control_name="EditCameraMovement"
height="20"
follows="left|top"
label="Build/Edit"
layout="topleft"
left_delta="30"
name="edit_camera_movement"
tool_tip="Use automatic camera positioning when entering and exiting edit mode"
width="280"
top_pad="5" />
<check_box
control_name="AppearanceCameraMovement"
follows="left|top"
height="16"
label="Appearance"
layout="topleft"
name="appearance_camera_movement"
tool_tip="Use automatic camera positioning while in edit mode"
width="242" />
<icon
follows="left|top"
height="18"
image_name="Move_Walk_Off"
layout="topleft"
name="avatar_icon"
mouse_opaque="false"
visible="true"
width="18"
top_pad="10"
name="avatar_icon"
mouse_opaque="false"
visible="true"
width="18"
top_pad="4"
left="30" />
<text
follows="left|top"
@ -264,10 +188,11 @@
label="Other Devices"
left="30"
name="joystick_setup_button"
top="30"
top_pad="5"
width="155">
<button.commit_callback
function="Floater.Show"
parameter="pref_joystick" />
</button>
</panel>

View File

@ -0,0 +1,185 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
border="true"
follows="left|top|right|bottom"
height="418"
label="View"
layout="topleft"
left="102"
name="view_panel"
top="1"
width="517">
<icon
follows="left|top"
height="18"
image_name="Cam_FreeCam_Off"
layout="topleft"
name="camera_icon"
mouse_opaque="false"
visible="true"
width="18"
left="30"
top="4"/>
<text
follows="top|left|right"
height="16"
layout="topleft"
left="80"
top_delta="0"
width="100">
Preset in use:
</text>
<text
follows="top|left|right"
height="16"
layout="topleft"
left_delta="100"
name="preset_camera_text"
width="120">
(None)
</text>
<slider
can_edit_text="true"
control_name="CameraAngle"
decimal_digits="2"
follows="left|top"
height="16"
top_pad="5"
increment="0.025"
initial_value="1.57"
layout="topleft"
label_width="100"
label="View angle"
left="80"
max_val="2.97"
min_val="0.17"
name="camera_fov"
show_text="false"
width="240" />
<slider
can_edit_text="true"
control_name="CameraOffsetScale"
decimal_digits="2"
follows="left|top"
height="16"
increment="0.025"
initial_value="1"
layout="topleft"
label="Distance"
left_delta="0"
label_width="100"
max_val="3"
min_val="0.5"
name="camera_offset_scale"
show_text="false"
width="240"
top_pad="5"/>
<text
follows="left|top"
type="string"
length="1"
height="10"
left="80"
name="heading2"
width="200"
top_pad="5">
Automatic position for:
</text>
<spinner
control_name="CameraOpacity"
decimal_digits="1"
follows="top|left|right"
height="24"
max_val="1.0"
min_val="0.0"
increment="0.1"
initial_value="1.0"
label="Camera controls opacity:"
label_width="180"
layout="topleft"
top_pad="-10"
left_pad="10"
width="220" />
<check_box
control_name="EditCameraMovement"
height="20"
follows="left|top"
label="Build/Edit"
layout="topleft"
left="100"
name="edit_camera_movement"
tool_tip="Use automatic camera positioning when entering and exiting edit mode"
width="280"
top_pad="-10" />
<check_box
control_name="AppearanceCameraMovement"
follows="left|top"
height="16"
label="Appearance"
layout="topleft"
name="appearance_camera_movement"
tool_tip="Use automatic camera positioning while in edit mode"
width="242" />
<button
follows="top|left"
height="23"
label="Advanced..."
layout="topleft"
left_pad="-102"
name="PreferencesViewAdvanced"
tool_tip="Adjust camera positioning"
width="115">
<button.commit_callback
function="Floater.Show"
parameter="prefs_view_advanced" />
</button>
<button
follows="top|left"
height="23"
label="Save settings as a preset..."
layout="topleft"
left="30"
name="PrefCameraSaveButton"
top_pad="10"
width="200">
<button.commit_callback
function="Pref.PrefSave"
parameter="camera" />
</button>
<button
follows="top|left"
height="23"
label="Load preset..."
layout="topleft"
left_pad="10"
name="PrefCameraLoadButton"
top_delta="0"
width="115">
<button.commit_callback
function="Pref.PrefLoad"
parameter="camera"/>
</button>
<button
follows="top|left"
height="23"
label="Delete preset..."
layout="topleft"
left_pad="10"
name="PrefCameraDeleteButton"
top_delta="0"
width="115">
<button.commit_callback
function="Pref.PrefDelete"
parameter="camera"/>
</button>
</panel>

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
background_opaque="true"
background_visible="true"
bg_opaque_image="Volume_Background"
bg_alpha_image="Volume_Background"
border_visible="false"
border="false"
chrome="true"
follows="bottom"
height="155"
layout="topleft"
name="presets_camera_pulldown"
width="225">
<text
type="string"
length="1"
follows="left|top"
height="12"
layout="topleft"
top="4"
left_delta="5"
font.style="BOLD"
name="Camera Presets"
width="120">
Camera Presets
</text>
<scroll_list
follows="left|top"
layout="topleft"
column_padding="0"
height="100"
width="215"
draw_heading="false"
draw_stripes="false"
bg_stripe_color="0.25 0.25 0.25 0.25"
top_delta="15"
left_delta="0"
name="preset_camera_list">
<scroll_list.columns
name="icon"
width="16" />
<scroll_list.columns
relative_width="1"
name="preset_name" />
<scroll_list.commit_callback
function="PresetsCamera.RowClick" />
</scroll_list>
<view_border
bevel_style="none"
follows="top|left"
height="0"
layout="topleft"
left="5"
name="horiz_separator"
top_delta="105"
width="215" />
<button
name="open_prefs_btn"
label="Open View Preferences"
tool_tip = "Bring up view preferences"
top_delta="5"
left="15"
height="20"
width="200">
<button.commit_callback
function="Presets.GoViewPrefs" />
</button>
</panel>

View File

@ -35,7 +35,7 @@
</panel.string>
<panel
height="18"
left="-416"
left="-458"
width="185"
top="1"
follows="right|top"
@ -108,10 +108,18 @@
<icon
follows="right|top"
height="16"
image_name="Presets_Icon"
image_name="Cam_Avatar_Off"
left_pad="8"
top="2"
name="presets_icon"
name="presets_icon_camera"
width="18" />
<icon
follows="right|top"
height="16"
image_name="Presets_Icon_Graphic"
left_pad="8"
top="2"
name="presets_icon_graphic"
width="18" />
<button
follows="right|top"

View File

@ -77,6 +77,9 @@ class ViewerManifest(LLManifest):
contributor_names = self.extract_names(contributions_path)
self.put_in_file(contributor_names, "contributors.txt", src=contributions_path)
# ... and the default camera position settings
self.path("camera")
# ... and the entire windlight directory
self.path("windlight")