summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llfloatereditextdaycycle.cpp3
-rw-r--r--indra/newview/llfloaterfixedenvironment.cpp2
-rw-r--r--indra/newview/llpanelenvironment.cpp2
-rw-r--r--indra/newview/llsettingspicker.cpp96
-rw-r--r--indra/newview/llsettingspicker.h15
-rw-r--r--indra/newview/skins/default/xui/en/floater_settings_picker.xml40
6 files changed, 124 insertions, 34 deletions
diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp
index 601b964410..d6c104547d 100644
--- a/indra/newview/llfloatereditextdaycycle.cpp
+++ b/indra/newview/llfloatereditextdaycycle.cpp
@@ -1823,7 +1823,7 @@ void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e typ
if (!picker)
{
picker = new LLFloaterSettingsPicker(this,
- LLUUID::null, "SELECT SETTINGS");
+ LLUUID::null);
mInventoryFloater = picker->getHandle();
@@ -1834,6 +1834,7 @@ void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e typ
picker->setSettingsItemId(curritem);
picker->openFloater();
picker->setFocus(TRUE);
+ picker->setTrackWater(mCurrentTrack == LLSettingsDay::TRACK_WATER);
}
void LLFloaterEditExtDayCycle::doCloseInventoryFloater(bool quitting)
diff --git a/indra/newview/llfloaterfixedenvironment.cpp b/indra/newview/llfloaterfixedenvironment.cpp
index 98cec04898..ce231973c7 100644
--- a/indra/newview/llfloaterfixedenvironment.cpp
+++ b/indra/newview/llfloaterfixedenvironment.cpp
@@ -239,7 +239,7 @@ LLFloaterSettingsPicker * LLFloaterFixedEnvironment::getSettingsPicker()
if (!picker)
{
picker = new LLFloaterSettingsPicker(this,
- LLUUID::null, "SELECT SETTINGS");
+ LLUUID::null);
mInventoryFloater = picker->getHandle();
diff --git a/indra/newview/llpanelenvironment.cpp b/indra/newview/llpanelenvironment.cpp
index ec6352c88d..000c7050ab 100644
--- a/indra/newview/llpanelenvironment.cpp
+++ b/indra/newview/llpanelenvironment.cpp
@@ -334,7 +334,7 @@ LLFloaterSettingsPicker * LLPanelEnvironmentInfo::getSettingsPicker(bool create)
if (!picker && create)
{
picker = new LLFloaterSettingsPicker(this,
- LLUUID::null, "SELECT SETTINGS");
+ LLUUID::null);
mSettingsFloater = picker->getHandle();
diff --git a/indra/newview/llsettingspicker.cpp b/indra/newview/llsettingspicker.cpp
index d2824e04a9..a155906415 100644
--- a/indra/newview/llsettingspicker.cpp
+++ b/indra/newview/llsettingspicker.cpp
@@ -37,6 +37,7 @@
#include "llinventorymodelbackgroundfetch.h"
#include "llinventoryobserver.h"
#include "llinventorypanel.h"
+#include "llsettingsvo.h"
#include "lldraghandle.h"
#include "llviewercontrol.h"
@@ -57,16 +58,25 @@ namespace
const F32 CONTEXT_CONE_IN_ALPHA(0.0f);
const F32 CONTEXT_CONE_OUT_ALPHA(1.0f);
const F32 CONTEXT_FADE_TIME(0.08f);
+
+ // strings in xml
+
+ const std::string STR_TITLE_PREFIX = "pick title";
+ const std::string STR_TITLE_TRACK = "pick_track";
+ const std::string STR_TITLE_SETTINGS = "pick_settings";
+ const std::string STR_TRACK_WATER = "track_water";
+ const std::string STR_TRACK_GROUND = "track_ground";
+ const std::string STR_TRACK_SKY = "track_sky";
}
//=========================================================================
-LLFloaterSettingsPicker::LLFloaterSettingsPicker(LLView * owner, LLUUID initial_item_id, const std::string &label, const LLSD &params):
+LLFloaterSettingsPicker::LLFloaterSettingsPicker(LLView * owner, LLUUID initial_item_id, const LLSD &params):
LLFloater(params),
mOwnerHandle(),
- mLabel(label),
mActive(true),
mContextConeOpacity(0.0f),
mSettingItemID(initial_item_id),
+ mTrackWater(true),
mImmediateFilterPermMask(PERM_NONE)
{
mOwnerHandle = owner->getHandle();
@@ -87,12 +97,9 @@ BOOL LLFloaterSettingsPicker::postBuild()
if (!LLFloater::postBuild())
return FALSE;
- if (!mLabel.empty())
- {
- std::string pick = getString("pick title");
-
- setTitle(pick + mLabel);
- }
+ std::string prefix = getString(STR_TITLE_PREFIX);
+ std::string label = getString(STR_TITLE_SETTINGS);
+ setTitle(prefix + " " + label);
mFilterEdit = getChild<LLFilterEditor>(FLT_INVENTORY_SEARCH);
mFilterEdit->setCommitCallback([this](LLUICtrl*, const LLSD& param){ onFilterEdit(param.asString()); });
@@ -165,7 +172,20 @@ void LLFloaterSettingsPicker::setSettingsFilter(LLSettingsType::type_e type)
filter = static_cast<S64>(0x1) << static_cast<S64>(type);
}
- getChild<LLPanel>(PNL_COMBO)->setVisible(type != LLSettingsType::ST_WATER && type != LLSettingsType::ST_SKY);
+ bool day_cycle = (type != LLSettingsType::ST_WATER) && (type != LLSettingsType::ST_SKY);
+ getChild<LLPanel>(PNL_COMBO)->setVisible(day_cycle);
+ std::string prefix = getString(STR_TITLE_PREFIX);
+ std::string label;
+ if (day_cycle)
+ {
+
+ label = getString(STR_TITLE_TRACK);
+ }
+ else
+ {
+ label = getString(STR_TITLE_SETTINGS);
+ }
+ setTitle(prefix + " " + label);
mInventoryPanel->setFilterSettingsTypes(filter);
}
@@ -269,6 +289,7 @@ void LLFloaterSettingsPicker::onFilterEdit(const std::string& search_string)
void LLFloaterSettingsPicker::onSelectionChange(const LLFloaterSettingsPicker::itemlist_t &items, bool user_action)
{
bool track_picker_enabled = false;
+ LLUUID asset_id;
if (items.size())
{
LLFolderViewItem* first_item = items.front();
@@ -284,6 +305,7 @@ void LLFloaterSettingsPicker::onSelectionChange(const LLFloaterSettingsPicker::i
mNoCopySettingsSelected = true;
}
setSettingsItemId(bridge_model->getItem()->getUUID(), false);
+ asset_id = bridge_model->getItem()->getAssetUUID();
mViewModel->setDirty(); // *TODO: shouldn't we be using setValue() here?
if (user_action)
@@ -299,7 +321,61 @@ void LLFloaterSettingsPicker::onSelectionChange(const LLFloaterSettingsPicker::i
}
}
}
- getChild<LLView>(CMB_TRACK_SELECTION)->setEnabled(track_picker_enabled);
+ getChild<LLView>(CMB_TRACK_SELECTION)->setEnabled(track_picker_enabled && mSettingAssetID == asset_id);
+ if (track_picker_enabled && asset_id.notNull() && mSettingAssetID != asset_id)
+ {
+ LLUUID item_id = mSettingItemID;
+ LLHandle<LLFloater> handle = getHandle();
+ LLSettingsVOBase::getSettingsAsset(asset_id,
+ [item_id, handle](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { LLFloaterSettingsPicker::onAssetLoadedCb(handle, item_id, asset_id, settings, status); });
+ }
+}
+
+void LLFloaterSettingsPicker::onAssetLoadedCb(LLHandle<LLFloater> handle, LLUUID item_id, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status)
+{
+ if (handle.isDead() || status)
+ {
+ return;
+ }
+
+ LLFloaterSettingsPicker *picker = static_cast<LLFloaterSettingsPicker *>(handle.get());
+
+ if (picker->mSettingItemID != item_id)
+ {
+ return;
+ }
+
+ picker->onAssetLoaded(asset_id, settings);
+}
+
+void LLFloaterSettingsPicker::onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings)
+{
+ LLComboBox* track_selection = getChild<LLComboBox>(CMB_TRACK_SELECTION);
+ track_selection->clear();
+ track_selection->removeall();
+ LLSettingsDay::ptr_t pday = std::dynamic_pointer_cast<LLSettingsDay>(settings);
+
+ if (mTrackWater)
+ {
+ track_selection->add(getString(STR_TRACK_WATER), LLSD::Integer(LLSettingsDay::TRACK_WATER), ADD_TOP, true);
+ }
+ else
+ {
+ // track 1 always present
+ track_selection->add(getString(STR_TRACK_GROUND), LLSD::Integer(LLSettingsDay::TRACK_GROUND_LEVEL), ADD_TOP, true);
+ LLUIString formatted_label = getString(STR_TRACK_SKY);
+ for (int i = 2; i < LLSettingsDay::TRACK_MAX; i++)
+ {
+ if (!pday->isTrackEmpty(i))
+ {
+ formatted_label.setArg("[NUM]", llformat("%d", i));
+ track_selection->add(formatted_label.getString(), LLSD::Integer(i), ADD_TOP, true);
+ }
+ }
+ }
+
+ mSettingAssetID = asset_id;
+ track_selection->setEnabled(true);
}
void LLFloaterSettingsPicker::onButtonCancel()
diff --git a/indra/newview/llsettingspicker.h b/indra/newview/llsettingspicker.h
index 5acc562fe5..13ee90f0fe 100644
--- a/indra/newview/llsettingspicker.h
+++ b/indra/newview/llsettingspicker.h
@@ -33,6 +33,7 @@
#include "llpermissionsflags.h"
#include "llfolderview.h"
#include "llinventory.h"
+#include "llsettingsdaycycle.h"
#include <boost/signals2.hpp>
@@ -48,7 +49,7 @@ public:
typedef std::function<void()> close_callback_t;
typedef std::function<void(const LLUUID& item_id)> id_changed_callback_t;
- LLFloaterSettingsPicker(LLView * owner, LLUUID setting_item_id, const std::string &label, const LLSD &params = LLSD());
+ LLFloaterSettingsPicker(LLView * owner, LLUUID setting_item_id, const LLSD &params = LLSD());
virtual ~LLFloaterSettingsPicker() override;
@@ -64,6 +65,10 @@ public:
void setSettingsFilter(LLSettingsType::type_e type);
LLSettingsType::type_e getSettingsFilter() const { return mSettingsType; }
+ // Only for day cycle
+ void setTrackWater(bool use_water) { mTrackWater = use_water; }
+ void setTrackSky(bool use_sky) { mTrackWater = !use_sky; }
+
// Takes a UUID, wraps get/setImageAssetID
virtual void setValue(const LLSD& value) override;
virtual LLSD getValue() const override;
@@ -86,11 +91,14 @@ public:
static LLInventoryItem * findItem(const LLUUID& asset_id, bool copyable_only, bool ignore_library);
+
private:
typedef std::deque<LLFolderViewItem *> itemlist_t;
void onFilterEdit(const std::string& search_string);
void onSelectionChange(const itemlist_t &items, bool user_action);
+ static void onAssetLoadedCb(LLHandle<LLFloater> handle, LLUUID item_id, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status);
+ void onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings);
void onButtonCancel();
void onButtonSelect();
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override;
@@ -98,8 +106,9 @@ private:
LLHandle<LLView> mOwnerHandle;
- std::string mLabel;
- LLUUID mSettingItemID;
+ LLUUID mSettingItemID;
+ LLUUID mSettingAssetID;
+ bool mTrackWater;
LLFilterEditor * mFilterEdit;
LLInventoryPanel * mInventoryPanel;
diff --git a/indra/newview/skins/default/xui/en/floater_settings_picker.xml b/indra/newview/skins/default/xui/en/floater_settings_picker.xml
index 9ea949088f..55a1b540b4 100644
--- a/indra/newview/skins/default/xui/en/floater_settings_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_settings_picker.xml
@@ -17,6 +17,27 @@
name="pick title">
Pick:
</floater.string>
+ <floater.string
+ name="pick_track">
+ SELECT TRACK
+ </floater.string>
+ <floater.string
+ name="pick_settings">
+ SELECT SETTINGS
+ </floater.string>
+
+ <floater.string
+ name="track_water">
+ Water
+ </floater.string>
+ <floater.string
+ name="track_ground">
+ Ground
+ </floater.string>
+ <floater.string
+ name="track_sky">
+ Sky[NUM]
+ </floater.string>
<layout_stack name="test_stack"
follows="all"
@@ -85,24 +106,7 @@
mouse_opaque="true"
name="track_selection"
top="1"
- width="190">
- <combo_box.item
- label="Sky4"
- name="Sky4"
- value="4" />
- <combo_box.item
- label="Sky3"
- name="Sky3"
- value="3" />
- <combo_box.item
- label="Sky2"
- name="Sky2"
- value="2" />
- <combo_box.item
- label="Ground"
- name="Ground"
- value="1" />
- </combo_box>
+ width="190"/>
</layout_panel>
<layout_panel name="temp"
border="false"