SL-12186 WIP Added ability to reset default presets and updated item list in 'My camera presets' floater

master
maxim_productengine 2019-11-12 16:26:34 +02:00
parent 1fa0b3fe95
commit 382c184501
7 changed files with 126 additions and 13 deletions

View File

@ -1565,7 +1565,7 @@
<key>CameraPreset</key>
<map>
<key>Comment</key>
<string>Preset camera position - view (0 - rear, 1 - front, 2 - group)</string>
<string>Preset camera position - view (0 - rear, 1 - front, 2 - group, 3 - custom)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>

View File

@ -550,17 +550,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);
LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_REAR_VIEW);
}
else if ("group_view" == name)
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_GROUP_VIEW);
LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_SIDE);
LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_SIDE_VIEW);
}
else if ("front_view" == name)
{
gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW);
LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_FRONT);
LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_FRONT_VIEW);
}
}
@ -590,6 +590,7 @@ void LLFloaterCamera::populatePresetCombo()
{
mPresetCombo->setLabel(getString("inactive_combo_text"));
}
updateItemsSelection();
}
void LLFloaterCamera::onSavePreset()

View File

@ -58,7 +58,10 @@ void LLFloaterCameraPresets::populateList()
std::string presets_dir = presetsMgr->getPresetsDir(PRESETS_CAMERA);
std::list<std::string> preset_names;
presetsMgr->loadPresetNamesFromDir(presets_dir, preset_names, DEFAULT_TOP);
presetsMgr->loadPresetNamesFromDir(presets_dir, preset_names, DEFAULT_VIEWS_HIDE);
preset_names.push_back(PRESETS_FRONT_VIEW);
preset_names.push_back(PRESETS_REAR_VIEW);
preset_names.push_back(PRESETS_SIDE_VIEW);
for (std::list<std::string>::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it)
{
const std::string& name = *it;
@ -86,10 +89,10 @@ LLCameraPresetFlatItem::~LLCameraPresetFlatItem()
BOOL LLCameraPresetFlatItem::postBuild()
{
mDeleteBtn = getChild<LLButton>("delete_btn");
mDeleteBtn->setVisible(!mIsDefaultPrest);
mDeleteBtn->setVisible(false);
mResetBtn = getChild<LLButton>("reset_btn");
mResetBtn->setVisible(mIsDefaultPrest);
mResetBtn->setVisible(false);
LLStyle::Params style;
LLTextBox* name_text = getChild<LLTextBox>("preset_name");
@ -102,6 +105,29 @@ BOOL LLCameraPresetFlatItem::postBuild()
return true;
}
void LLCameraPresetFlatItem::onMouseEnter(S32 x, S32 y, MASK mask)
{
mDeleteBtn->setVisible(!mIsDefaultPrest);
mResetBtn->setVisible(mIsDefaultPrest);
getChildView("hovered_icon")->setVisible(true);
LLPanel::onMouseEnter(x, y, mask);
}
void LLCameraPresetFlatItem::onMouseLeave(S32 x, S32 y, MASK mask)
{
mDeleteBtn->setVisible(false);
mResetBtn->setVisible(false);
getChildView("hovered_icon")->setVisible(false);
LLPanel::onMouseLeave(x, y, mask);
}
void LLCameraPresetFlatItem::setValue(const LLSD& value)
{
if (!value.isMap()) return;;
if (!value.has("selected")) return;
getChildView("selected_icon")->setVisible(value["selected"]);
}
void LLCameraPresetFlatItem::onDeleteBtnClick()
{
if (!LLPresetsManager::getInstance()->deletePreset(PRESETS_CAMERA, mPresetName))

View File

@ -52,7 +52,11 @@ public:
LLCameraPresetFlatItem(const std::string &preset_name, bool is_default);
virtual ~LLCameraPresetFlatItem();
void setValue(const LLSD& value);
virtual BOOL postBuild();
virtual void onMouseEnter(S32 x, S32 y, MASK mask);
virtual void onMouseLeave(S32 x, S32 y, MASK mask);
private:
void onDeleteBtnClick();

View File

@ -65,7 +65,13 @@ void LLPresetsManager::createMissingDefault(const std::string& subdirectory)
{
if(gDirUtilp->getLindenUserDir().empty())
{
return;
return;
}
if (PRESETS_CAMERA == subdirectory)
{
createCameraDefaultPresets();
return;
}
std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR,
@ -83,6 +89,13 @@ return;
}
}
void LLPresetsManager::createCameraDefaultPresets()
{
createDefaultCameraPreset(PRESETS_REAR_VIEW);
createDefaultCameraPreset(PRESETS_FRONT_VIEW);
createDefaultCameraPreset(PRESETS_SIDE_VIEW);
}
void LLPresetsManager::startWatching(const std::string& subdirectory)
{
if (PRESETS_CAMERA == subdirectory)
@ -163,6 +176,10 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam
std::string name = LLURI::unescape(gDirUtilp->getBaseFileName(path, /*strip_exten = */ true));
LL_DEBUGS() << " Found preset '" << name << "'" << LL_ENDL;
if (isTemplateCameraPreset(name))
{
continue;
}
if (default_option == DEFAULT_VIEWS_HIDE)
{
if (isDefaultCameraPreset(name))
@ -198,6 +215,7 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam
}
bool LLPresetsManager::mCameraDirty = false;
bool LLPresetsManager::mIgnoreChangedSignal = false;
void LLPresetsManager::setCameraDirty(bool dirty)
{
@ -215,7 +233,7 @@ void LLPresetsManager::settingChanged()
static LLCachedControl<std::string> preset_camera_active(gSavedSettings, "PresetCameraActive", "");
std::string preset_name = preset_camera_active;
if (!preset_name.empty())
if (!preset_name.empty() && !mIgnoreChangedSignal)
{
gSavedSettings.setString("PresetCameraActive", "");
@ -267,6 +285,12 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
return false;
}
if (isTemplateCameraPreset(name))
{
LL_WARNS() << "Should not overwrite template presets" << LL_ENDL;
return false;
}
bool saved = false;
std::vector<std::string> name_list;
@ -434,8 +458,10 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string n
LL_DEBUGS() << "attempting to load preset '"<<name<<"' from '"<<full_path<<"'" << LL_ENDL;
mIgnoreChangedSignal = true;
if(gSavedSettings.loadFromFile(full_path, false, true) > 0)
{
mIgnoreChangedSignal = false;
if(PRESETS_GRAPHIC == subdirectory)
{
gSavedSettings.setString("PresetGraphicActive", name);
@ -453,10 +479,11 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string n
triggerChangeCameraSignal();
}
}
else
{
LL_WARNS("Presets") << "failed to load preset '"<<name<<"' from '"<<full_path<<"'" << LL_ENDL;
}
else
{
mIgnoreChangedSignal = false;
LL_WARNS("Presets") << "failed to load preset '"<<name<<"' from '"<<full_path<<"'" << LL_ENDL;
}
}
bool LLPresetsManager::deletePreset(const std::string& subdirectory, std::string name)
@ -506,13 +533,39 @@ bool LLPresetsManager::deletePreset(const std::string& subdirectory, std::string
}
bool LLPresetsManager::isDefaultCameraPreset(std::string preset_name)
{
return (preset_name == PRESETS_REAR_VIEW || preset_name == PRESETS_SIDE_VIEW || preset_name == PRESETS_FRONT_VIEW);
}
bool LLPresetsManager::isTemplateCameraPreset(std::string preset_name)
{
return (preset_name == PRESETS_REAR || preset_name == PRESETS_SIDE || preset_name == PRESETS_FRONT);
}
void LLPresetsManager::resetCameraPreset(std::string preset_name)
{
if (isDefaultCameraPreset(preset_name))
{
createDefaultCameraPreset(preset_name, true);
if (gSavedSettings.getString("PresetCameraActive") == preset_name)
{
loadPreset(PRESETS_CAMERA, preset_name);
}
}
}
void LLPresetsManager::createDefaultCameraPreset(std::string preset_name, bool force_reset)
{
std::string preset_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR,
PRESETS_CAMERA, LLURI::escape(preset_name) + ".xml");
if (!gDirUtilp->fileExists(preset_file) || force_reset)
{
std::string template_name = preset_name.substr(0, preset_name.size() - PRESETS_VIEW_SUFFIX.size());
std::string default_template_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR,
PRESETS_CAMERA, template_name + ".xml");
LLFile::copy(default_template_file, preset_file);
}
}
boost::signals2::connection LLPresetsManager::setPresetListChangeCameraCallback(const preset_list_signal_t::slot_type& cb)

View File

@ -39,6 +39,10 @@ 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";
static const std::string PRESETS_VIEW_SUFFIX = " View";
static const std::string PRESETS_REAR_VIEW = PRESETS_REAR + PRESETS_VIEW_SUFFIX;
static const std::string PRESETS_FRONT_VIEW = PRESETS_FRONT + PRESETS_VIEW_SUFFIX;
static const std::string PRESETS_SIDE_VIEW = PRESETS_SIDE + PRESETS_VIEW_SUFFIX;
enum EDefaultOptions
{
@ -71,8 +75,12 @@ public:
bool isCameraDirty();
static void setCameraDirty(bool dirty);
void createCameraDefaultPresets();
bool isTemplateCameraPreset(std::string preset_name);
bool isDefaultCameraPreset(std::string preset_name);
void resetCameraPreset(std::string preset_name);
void createDefaultCameraPreset(std::string preset_name, bool force_reset = false);
// Emitted when a preset gets loaded, deleted, or saved.
boost::signals2::connection setPresetListChangeCameraCallback(const preset_list_signal_t::slot_type& cb);
@ -95,6 +103,7 @@ public:
boost::signals2::connection mCameraChangedSignal;
static bool mCameraDirty;
static bool mIgnoreChangedSignal;
};
#endif // LL_PRESETSMANAGER_H

View File

@ -7,6 +7,26 @@
name="camera_preset_item"
top="0"
width="280">
<icon
follows="top|right|left"
height="20"
image_name="ListItem_Over"
layout="topleft"
left="0"
name="hovered_icon"
top="0"
visible="false"
width="380" />
<icon
height="20"
follows="top|right|left"
image_name="ListItem_Select"
layout="topleft"
left="0"
name="selected_icon"
top="0"
visible="false"
width="380" />
<text
follows="left"
height="20"