SL-1932 Day Cycle Edit feature "Load Track" Part 1
parent
a5392bb8e8
commit
d693c53509
|
|
@ -287,8 +287,6 @@ BOOL LLFloaterEditExtDayCycle::postBuild()
|
|||
panel->setOnDirtyFlagChanged([this](LLPanel *, bool val) { onPanelDirtyFlagChanged(val); });
|
||||
}
|
||||
|
||||
//getChild<LLButton>("sky1_track", true)->setToggleState(true);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -751,7 +749,7 @@ void LLFloaterEditExtDayCycle::onButtonLoadFrame()
|
|||
{
|
||||
curitemId = LLFloaterSettingsPicker::findItemID(mCurrentEdit->getAssetId(), false, false);
|
||||
}
|
||||
|
||||
|
||||
doOpenInventoryFloater((mCurrentTrack == LLSettingsDay::TRACK_WATER) ? LLSettingsType::ST_WATER : LLSettingsType::ST_SKY, curitemId);
|
||||
}
|
||||
|
||||
|
|
@ -810,7 +808,14 @@ void LLFloaterEditExtDayCycle::onCloneTrack()
|
|||
|
||||
void LLFloaterEditExtDayCycle::onLoadTrack()
|
||||
{
|
||||
LLUUID curitemId = mInventoryId;
|
||||
|
||||
if (mCurrentEdit && curitemId.notNull())
|
||||
{
|
||||
curitemId = LLFloaterSettingsPicker::findItemID(mCurrentEdit->getAssetId(), false, false);
|
||||
}
|
||||
|
||||
doOpenInventoryFloater(LLSettingsType::ST_DAYCYCLE, curitemId);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1021,6 +1026,34 @@ void LLFloaterEditExtDayCycle::onTimeSliderCallback()
|
|||
selectFrame(mTimeSlider->getCurSliderValue(), LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR);
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::cloneTrack(U32 source_index, U32 dest_index)
|
||||
{
|
||||
cloneTrack(mEditDay, source_index, dest_index);
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::cloneTrack(const LLSettingsDay::ptr_t &source_day, U32 source_index, U32 dest_index)
|
||||
{
|
||||
if (source_index == LLSettingsDay::TRACK_WATER || dest_index == LLSettingsDay::TRACK_WATER)
|
||||
{
|
||||
LL_WARNS() << "water track can't be source or destination for copying" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
// don't use replaceCycleTrack because we will end up with references, but we need to clone
|
||||
mEditDay->clearCycleTrack(dest_index); // because source can be empty
|
||||
LLSettingsDay::CycleTrack_t source_track = source_day->getCycleTrack(source_index);
|
||||
|
||||
for (auto &track_frame : source_track)
|
||||
{
|
||||
LLSettingsSky::ptr_t psky = std::static_pointer_cast<LLSettingsSky>(track_frame.second);
|
||||
mEditDay->setSettingsAtKeyframe(psky->buildDerivedClone(), track_frame.first, dest_index);
|
||||
}
|
||||
|
||||
updateSlider();
|
||||
updateTabs();
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::selectTrack(U32 track_index, bool force )
|
||||
{
|
||||
if (track_index < LLSettingsDay::TRACK_MAX)
|
||||
|
|
@ -1180,8 +1213,6 @@ void LLFloaterEditExtDayCycle::updateButtons()
|
|||
bool can_load(true);
|
||||
bool can_clear(true);
|
||||
|
||||
can_clear = (mCurrentTrack > 1) ? (!mEditDay->getCycleTrack(mCurrentTrack).empty()) : (mEditDay->getCycleTrack(mCurrentTrack).size() > 1);
|
||||
|
||||
if (mCurrentTrack == 0)
|
||||
{
|
||||
can_clone = false;
|
||||
|
|
@ -1196,12 +1227,20 @@ void LLFloaterEditExtDayCycle::updateButtons()
|
|||
}
|
||||
}
|
||||
|
||||
can_clear = (mCurrentTrack > 1) ? (!mEditDay->getCycleTrack(mCurrentTrack).empty()) : (mEditDay->getCycleTrack(mCurrentTrack).size() > 1);
|
||||
mCloneTrack->setEnabled(can_clone && false);
|
||||
mCloneTrack->setVisible(false);
|
||||
mLoadTrack->setEnabled(can_load && false);
|
||||
mLoadTrack->setVisible(false);
|
||||
mLoadTrack->setEnabled(can_load);
|
||||
mClearTrack->setEnabled(can_clear);
|
||||
|
||||
// update track buttons
|
||||
bool extended_env = LLEnvironment::instance().isExtendedEnvironmentEnabled();
|
||||
for (S32 track = 0; track < LLSettingsDay::TRACK_MAX; ++track)
|
||||
{
|
||||
LLButton* button = getChild<LLButton>(track_tabs[track], true);
|
||||
button->setEnabled(extended_env);
|
||||
button->setToggleState(track == mCurrentTrack);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::updateSlider()
|
||||
|
|
@ -1788,7 +1827,7 @@ void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e typ
|
|||
|
||||
mInventoryFloater = picker->getHandle();
|
||||
|
||||
picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitSetting(data.asUUID()); });
|
||||
picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitSetting(data["ItemId"].asUUID(), data["Track"].asInteger()); });
|
||||
}
|
||||
|
||||
picker->setSettingsFilter(type);
|
||||
|
|
@ -1807,25 +1846,39 @@ void LLFloaterEditExtDayCycle::doCloseInventoryFloater(bool quitting)
|
|||
}
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::onPickerCommitSetting(LLUUID item_id)
|
||||
void LLFloaterEditExtDayCycle::onPickerCommitSetting(LLUUID item_id, S32 track)
|
||||
{
|
||||
LLSettingsBase::TrackPosition frame(mTimeSlider->getCurSliderValue());
|
||||
S32 track = mCurrentTrack;
|
||||
LLViewerInventoryItem *itemp = gInventory.getItem(item_id);
|
||||
if (itemp)
|
||||
{
|
||||
LLSettingsVOBase::getSettingsAsset(itemp->getAssetUUID(),
|
||||
[this, track, frame, item_id](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onAssetLoadedForFrame(item_id, asset_id, settings, status, track, frame); });
|
||||
[this, track, frame, item_id](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onAssetLoadedForInsertion(item_id, asset_id, settings, status, track, mCurrentTrack, frame); });
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::onAssetLoadedForFrame(LLUUID item_id, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 track, LLSettingsBase::TrackPosition frame)
|
||||
void LLFloaterEditExtDayCycle::onAssetLoadedForInsertion(LLUUID item_id, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 source_track, S32 dest_track, LLSettingsBase::TrackPosition frame)
|
||||
{
|
||||
std::function<void()> cb = [this, settings, frame, track]()
|
||||
std::function<void()> cb = [this, settings, frame, source_track, dest_track]()
|
||||
{
|
||||
if (mFramesSlider->getCurSlider().empty())
|
||||
if (settings->getSettingsType() == "daycycle")
|
||||
{
|
||||
if ((mEditDay->getSettingsNearKeyframe(frame, mCurrentTrack, LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR)).second)
|
||||
// Load full track
|
||||
LLSettingsDay::ptr_t pday = std::dynamic_pointer_cast<LLSettingsDay>(settings);
|
||||
if (dest_track == LLSettingsDay::TRACK_WATER)
|
||||
{
|
||||
cloneTrack(pday, LLSettingsDay::TRACK_WATER, LLSettingsDay::TRACK_WATER);
|
||||
}
|
||||
else
|
||||
{
|
||||
cloneTrack(pday, source_track, dest_track);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// load single frame
|
||||
|
||||
if ((mEditDay->getSettingsNearKeyframe(frame, dest_track, LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR)).second)
|
||||
{
|
||||
LL_WARNS("ENVDAYEDIT") << "Attempt to add new frame too close to existing frame." << LL_ENDL;
|
||||
return;
|
||||
|
|
@ -1835,23 +1888,36 @@ void LLFloaterEditExtDayCycle::onAssetLoadedForFrame(LLUUID item_id, LLUUID asse
|
|||
LL_WARNS("ENVDAYEDIT") << "Attempt to add new frame when slider is full." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
mEditDay->setSettingsAtKeyframe(settings, frame, track);
|
||||
addSliderFrame(frame, settings, false);
|
||||
reblendSettings();
|
||||
synchronizeTabs();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mCurrentTrack == LLSettingsDay::TRACK_WATER)
|
||||
// Don't forget to clone (we might reuse/load it couple times)
|
||||
if (settings->getSettingsType() == "sky")
|
||||
{
|
||||
mEditDay->setWaterAtKeyframe(std::static_pointer_cast<LLSettingsWater>(settings), frame);
|
||||
// Load sky to frame
|
||||
if (dest_track != LLSettingsDay::TRACK_WATER)
|
||||
{
|
||||
mEditDay->setSettingsAtKeyframe(settings->buildDerivedClone(), frame, dest_track);
|
||||
addSliderFrame(frame, settings, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("ENVDAYEDIT") << "Trying to load day settings as sky" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (settings->getSettingsType() == "water")
|
||||
{
|
||||
mEditDay->setSkyAtKeyframe(std::static_pointer_cast<LLSettingsSky>(settings), frame, track);
|
||||
// Load water to frame
|
||||
if (dest_track == LLSettingsDay::TRACK_WATER)
|
||||
{
|
||||
mEditDay->setSettingsAtKeyframe(settings->buildDerivedClone(), frame, dest_track);
|
||||
addSliderFrame(frame, settings, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("ENVDAYEDIT") << "Trying to load water settings as sky" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
updateTabs();
|
||||
}
|
||||
reblendSettings();
|
||||
synchronizeTabs();
|
||||
};
|
||||
|
||||
if (!settings || status)
|
||||
|
|
|
|||
|
|
@ -132,6 +132,8 @@ private:
|
|||
|
||||
void checkAndConfirmSettingsLoss(on_confirm_fn cb);
|
||||
|
||||
void cloneTrack(U32 source_index, U32 dest_index);
|
||||
void cloneTrack(const LLSettingsDay::ptr_t &source_day, U32 source_index, U32 dest_index);
|
||||
void selectTrack(U32 track_index, bool force = false);
|
||||
void selectFrame(F32 frame, F32 slop_factor);
|
||||
void clearTabs();
|
||||
|
|
@ -160,8 +162,14 @@ private:
|
|||
|
||||
void doOpenInventoryFloater(LLSettingsType::type_e type, LLUUID curritem);
|
||||
void doCloseInventoryFloater(bool quitting = false);
|
||||
void onPickerCommitSetting(LLUUID item_id);
|
||||
void onAssetLoadedForFrame(LLUUID item_id, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 track, LLSettingsBase::TrackPosition frame);
|
||||
void onPickerCommitSetting(LLUUID item_id, S32 track);
|
||||
void onAssetLoadedForInsertion(LLUUID item_id,
|
||||
LLUUID asset_id,
|
||||
LLSettingsBase::ptr_t settings,
|
||||
S32 status,
|
||||
S32 source_track,
|
||||
S32 dest_track,
|
||||
LLSettingsBase::TrackPosition dest_frame);
|
||||
|
||||
bool canUseInventory() const;
|
||||
bool canApplyRegion() const;
|
||||
|
|
|
|||
|
|
@ -243,7 +243,7 @@ LLFloaterSettingsPicker * LLFloaterFixedEnvironment::getSettingsPicker()
|
|||
|
||||
mInventoryFloater = picker->getHandle();
|
||||
|
||||
picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitSetting(data.asUUID()); });
|
||||
picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitSetting(data["ItemId"].asUUID() /*data["Track"]*/); });
|
||||
}
|
||||
|
||||
return picker;
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
|
||||
#include "llsettingspicker.h"
|
||||
|
||||
#include "llcombobox.h"
|
||||
#include "llfiltereditor.h"
|
||||
#include "llfolderviewmodel.h"
|
||||
#include "llinventory.h"
|
||||
|
|
@ -47,7 +48,9 @@ namespace
|
|||
const std::string FLOATER_DEFINITION_XML("floater_settings_picker.xml");
|
||||
|
||||
const std::string FLT_INVENTORY_SEARCH("flt_inventory_search");
|
||||
const std::string CMB_TRACK_SELECTION("track_selection");
|
||||
const std::string PNL_INVENTORY("pnl_inventory");
|
||||
const std::string PNL_COMBO("pnl_combo");
|
||||
const std::string BTN_SELECT("btn_select");
|
||||
const std::string BTN_CANCEL("btn_cancel");
|
||||
|
||||
|
|
@ -162,6 +165,8 @@ 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);
|
||||
|
||||
mInventoryPanel->setFilterSettingsTypes(filter);
|
||||
}
|
||||
|
||||
|
|
@ -263,6 +268,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;
|
||||
if (items.size())
|
||||
{
|
||||
LLFolderViewItem* first_item = items.front();
|
||||
|
|
@ -284,9 +290,16 @@ void LLFloaterSettingsPicker::onSelectionChange(const LLFloaterSettingsPicker::i
|
|||
{
|
||||
mChangeIDSignal(mSettingItemID);
|
||||
}
|
||||
|
||||
if (bridge_model->getSettingsType() == LLSettingsType::ST_DAYCYCLE
|
||||
&& !mNoCopySettingsSelected)
|
||||
{
|
||||
track_picker_enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
getChild<LLView>(CMB_TRACK_SELECTION)->setEnabled(track_picker_enabled);
|
||||
}
|
||||
|
||||
void LLFloaterSettingsPicker::onButtonCancel()
|
||||
|
|
@ -297,7 +310,12 @@ void LLFloaterSettingsPicker::onButtonCancel()
|
|||
void LLFloaterSettingsPicker::onButtonSelect()
|
||||
{
|
||||
if (mCommitSignal)
|
||||
(*mCommitSignal)(this, LLSD(mSettingItemID));
|
||||
{
|
||||
LLSD res;
|
||||
res["ItemId"] = mSettingItemID;
|
||||
res["Track"] = getChild<LLComboBox>(CMB_TRACK_SELECTION)->getValue();
|
||||
(*mCommitSignal)(this, res);
|
||||
}
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
|
|
@ -321,7 +339,12 @@ BOOL LLFloaterSettingsPicker::handleDoubleClick(S32 x, S32 y, MASK mask)
|
|||
{
|
||||
// Quick-apply
|
||||
if (mCommitSignal)
|
||||
(*mCommitSignal)(this, LLSD(mSettingItemID));
|
||||
{
|
||||
LLSD res;
|
||||
res["ItemId"] = mSettingItemID;
|
||||
res["Track"] = getChild<LLComboBox>(CMB_TRACK_SELECTION)->getValue();
|
||||
(*mCommitSignal)(this, res);
|
||||
}
|
||||
closeFloater();
|
||||
}
|
||||
}
|
||||
|
|
@ -346,7 +369,12 @@ BOOL LLFloaterSettingsPicker::handleKeyHere(KEY key, MASK mask)
|
|||
{
|
||||
// Quick-apply
|
||||
if (mCommitSignal)
|
||||
(*mCommitSignal)(this, LLSD(mSettingItemID));
|
||||
{
|
||||
LLSD res;
|
||||
res["ItemId"] = mSettingItemID;
|
||||
res["Track"] = getChild<LLComboBox>(CMB_TRACK_SELECTION)->getValue();
|
||||
(*mCommitSignal)(this, res);
|
||||
}
|
||||
closeFloater();
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,10 +13,6 @@
|
|||
width="225">
|
||||
|
||||
<!-- top static -->
|
||||
<floater.string
|
||||
name="choose_picture">
|
||||
Click to choose a picture
|
||||
</floater.string>
|
||||
<floater.string
|
||||
name="pick title">
|
||||
Pick:
|
||||
|
|
@ -30,10 +26,10 @@
|
|||
right="-6"
|
||||
bottom="-10"
|
||||
orientation="vertical">
|
||||
<layout_panel name="temp"
|
||||
<layout_panel name="inv_list"
|
||||
border="false"
|
||||
auto_resize="true"
|
||||
user_resize="true"
|
||||
user_resize="false"
|
||||
height="29"
|
||||
min_height="29"
|
||||
bg_alpha_color="blue"
|
||||
|
|
@ -72,14 +68,48 @@
|
|||
filter_asset_type="settings" />
|
||||
</panel>
|
||||
</layout_panel>
|
||||
<layout_panel name="pnl_combo"
|
||||
border="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
visible="true"
|
||||
height="29"
|
||||
bg_alpha_color="blue"
|
||||
background_visible="false">
|
||||
<combo_box
|
||||
allow_text_entry="false"
|
||||
follows="left|top"
|
||||
height="23"
|
||||
left="10"
|
||||
max_chars="100"
|
||||
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>
|
||||
</layout_panel>
|
||||
<layout_panel name="temp"
|
||||
border="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
height="29"
|
||||
min_height="29">
|
||||
<!-- bg_alpha_color="red"
|
||||
background_visible="true" -->
|
||||
<button
|
||||
follows="top|left"
|
||||
height="20"
|
||||
|
|
|
|||
Loading…
Reference in New Issue