master
Graham Linden 2018-08-29 18:26:54 +01:00
commit ca75963f3f
48 changed files with 986 additions and 241 deletions

View File

@ -401,7 +401,10 @@ LLSettingsSky::LLSettingsSky():
void LLSettingsSky::replaceSettings(LLSD settings)
{
LLSettingsBase::replaceSettings(settings);
mNextSunTextureId.setNull();
mNextMoonTextureId.setNull();
mNextCloudTextureId.setNull();
mNextBloomTextureId.setNull();
}
void LLSettingsSky::blend(const LLSettingsBase::ptr_t &end, F64 blendf)
@ -901,7 +904,7 @@ LLColor3 LLSettingsSky::getBlueDensity() const
LLColor3 LLSettingsSky::getBlueHorizon() const
{
if (mSettings.has(SETTING_LEGACY_HAZE) && mSettings[SETTING_LEGACY_HAZE].has(SETTING_BLUE_DENSITY))
if (mSettings.has(SETTING_LEGACY_HAZE) && mSettings[SETTING_LEGACY_HAZE].has(SETTING_BLUE_HORIZON))
{
return LLColor3(mSettings[SETTING_LEGACY_HAZE][SETTING_BLUE_HORIZON]);
}

View File

@ -185,10 +185,16 @@ void LLSettingsWater::blend(const LLSettingsBase::ptr_t &end, F64 blendf)
}
else
{
LL_WARNS("SETTINGS") << "Cound not cast end settings to water. No blend performed." << LL_ENDL;
LL_WARNS("SETTINGS") << "Could not cast end settings to water. No blend performed." << LL_ENDL;
}
setBlendFactor(blendf);
mNextNormalMapID = other->getNormalMapID();
}
void LLSettingsWater::replaceSettings(LLSD settings)
{
LLSettingsBase::replaceSettings(settings);
mNextNormalMapID.setNull();
mNextTransparentTextureID.setNull();
}
LLSettingsWater::validation_list_t LLSettingsWater::getValidationList() const

View File

@ -64,6 +64,8 @@ public:
// Settings status
virtual void blend(const LLSettingsBase::ptr_t &end, F64 blendf) SETTINGS_OVERRIDE;
virtual void replaceSettings(LLSD settings) SETTINGS_OVERRIDE;
static LLSD defaults(const LLSettingsBase::TrackPosition& position = 0.0f);
//---------------------------------------------------------------------

View File

@ -88,6 +88,7 @@ LLVirtualTrackball::LLVirtualTrackball(const LLVirtualTrackball::Params& p)
btn_rt.rect(LLRect(centerX - axis_offset_lt, border_rect.mTop, centerX + axis_offset_rb, border_rect.mTop - btn_size));
btn_rt.click_callback.function(boost::bind(&LLVirtualTrackball::onRotateTopClick, this));
btn_rt.mouse_held_callback.function(boost::bind(&LLVirtualTrackball::onRotateTopClick, this));
btn_rt.mouseenter_callback.function(boost::bind(&LLVirtualTrackball::onRotateTopMouseEnter, this));
mBtnRotateTop = LLUICtrlFactory::create<LLButton>(btn_rt);
addChild(mBtnRotateTop);
@ -104,6 +105,7 @@ LLVirtualTrackball::LLVirtualTrackball(const LLVirtualTrackball::Params& p)
btn_rr.rect(LLRect(border_rect.mRight - btn_size, centerY + axis_offset_lt, border_rect.mRight, centerY - axis_offset_rb));
btn_rr.click_callback.function(boost::bind(&LLVirtualTrackball::onRotateRightClick, this));
btn_rr.mouse_held_callback.function(boost::bind(&LLVirtualTrackball::onRotateRightClick, this));
btn_rr.mouseenter_callback.function(boost::bind(&LLVirtualTrackball::onRotateRightMouseEnter, this));
mBtnRotateRight = LLUICtrlFactory::create<LLButton>(btn_rr);
addChild(mBtnRotateRight);
@ -120,6 +122,7 @@ LLVirtualTrackball::LLVirtualTrackball(const LLVirtualTrackball::Params& p)
btn_rb.rect(LLRect(centerX - axis_offset_lt, border_rect.mBottom + btn_size, centerX + axis_offset_rb, border_rect.mBottom));
btn_rb.click_callback.function(boost::bind(&LLVirtualTrackball::onRotateBottomClick, this));
btn_rb.mouse_held_callback.function(boost::bind(&LLVirtualTrackball::onRotateBottomClick, this));
btn_rb.mouseenter_callback.function(boost::bind(&LLVirtualTrackball::onRotateBottomMouseEnter, this));
mBtnRotateBottom = LLUICtrlFactory::create<LLButton>(btn_rb);
addChild(mBtnRotateBottom);
@ -136,6 +139,7 @@ LLVirtualTrackball::LLVirtualTrackball(const LLVirtualTrackball::Params& p)
btn_rl.rect(LLRect(border_rect.mLeft, centerY + axis_offset_lt, border_rect.mLeft + btn_size, centerY - axis_offset_rb));
btn_rl.click_callback.function(boost::bind(&LLVirtualTrackball::onRotateLeftClick, this));
btn_rl.mouse_held_callback.function(boost::bind(&LLVirtualTrackball::onRotateLeftClick, this));
btn_rl.mouseenter_callback.function(boost::bind(&LLVirtualTrackball::onRotateLeftMouseEnter, this));
mBtnRotateLeft = LLUICtrlFactory::create<LLButton>(btn_rl);
addChild(mBtnRotateLeft);
@ -228,6 +232,13 @@ void LLVirtualTrackball::draw()
gl_circle_2d(draw_point.mV[VX], draw_point.mV[VY], mImgSunFront->getWidth() / 2, 12, false);
}
// hide the direction labels when disabled
BOOL enabled = isInEnabledChain();
mLabelN->setVisible(enabled);
mLabelE->setVisible(enabled);
mLabelS->setVisible(enabled);
mLabelW->setVisible(enabled);
LLView::draw();
}
@ -283,6 +294,26 @@ void LLVirtualTrackball::onRotateRightClick()
}
}
void LLVirtualTrackball::onRotateTopMouseEnter()
{
mBtnRotateTop->setHighlight(true);
}
void LLVirtualTrackball::onRotateBottomMouseEnter()
{
mBtnRotateBottom->setHighlight(true);
}
void LLVirtualTrackball::onRotateLeftMouseEnter()
{
mBtnRotateLeft->setHighlight(true);
}
void LLVirtualTrackball::onRotateRightMouseEnter()
{
mBtnRotateRight->setHighlight(true);
}
void LLVirtualTrackball::setValue(const LLSD& value)
{
if (value.isArray() && value.size() == 4)

View File

@ -130,6 +130,11 @@ private:
void onRotateLeftClick();
void onRotateRightClick();
void onRotateTopMouseEnter();
void onRotateBottomMouseEnter();
void onRotateLeftMouseEnter();
void onRotateRightMouseEnter();
S32 mPrevX;
S32 mPrevY;

View File

@ -163,7 +163,6 @@ set(viewer_SOURCE_FILES
lldebugview.cpp
lldeferredsounds.cpp
lldelayedgestureerror.cpp
lldensityctrl.cpp
lldirpicker.cpp
lldonotdisturbnotificationstorage.cpp
lldndbutton.cpp
@ -785,7 +784,6 @@ set(viewer_HEADER_FILES
lldebugview.h
lldeferredsounds.h
lldelayedgestureerror.h
lldensityctrl.h
lldirpicker.h
lldonotdisturbnotificationstorage.h
lldndbutton.h

View File

@ -38,10 +38,11 @@ void main()
{
//transform vertex
vec4 vert = vec4(position.xyz, 1.0);
vec4 pos = (modelview_matrix * vert);
vec4 pos = modelview_projection_matrix*vert;
gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0);
gl_Position = pos;
calcAtmospherics(pos.xyz);
vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
}

View File

@ -46,7 +46,7 @@ void main()
vec4 sunA = texture2D(diffuseMap, vary_texcoord0.xy);
vec4 sunB = texture2D(altDiffuseMap, vary_texcoord0.xy);
vec4 c = mix(sunB, sunA, blend_factor);
c.rgb = pow(c.rgb, vec3(0.45f));
c.rgb = pow(c.rgb, vec3(0.7f));
c.rgb = fullbrightAtmosTransport(c.rgb);
c.rgb = fullbrightScaleSoftClip(c.rgb);
frag_color = c;

View File

@ -38,9 +38,9 @@ void main()
{
//transform vertex
vec4 vert = vec4(position.xyz, 1.0);
vec4 pos = (modelview_matrix * vert);
vec4 pos = modelview_projection_matrix*vert;
gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0);
gl_Position = pos;
calcAtmospherics(pos.xyz);

View File

@ -724,7 +724,11 @@ void LLDrawPoolWater::shade()
sNeedsDistortionUpdate = TRUE;
face->renderIndexed();
}
else if (gGLManager.mHasDepthClamp || deferred_render)
// MAINT-9006 using squash clip even for deferred keeps
// horizon consistent between ALM and non-ALM rendering
// I can't think of a reason we'd want to avoid it. - g
//else if (gGLManager.mHasDepthClamp || deferred_render)
else if (gGLManager.mHasDepthClamp)
{
face->renderIndexed();
}

View File

@ -572,7 +572,8 @@ void LLDrawPoolWLSky::render(S32 pass)
{
gGL.pushMatrix();
gGL.translatef(origin.mV[0], origin.mV[1], origin.mV[2]);
// MAINT-9006 keep sun position consistent between ALM and non-ALM rendering
//gGL.translatef(origin.mV[0], origin.mV[1], origin.mV[2]);
// *NOTE: have to bind a texture here since register combiners blending in
// renderStars() requires something to be bound and we might as well only

View File

@ -137,7 +137,8 @@ LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key) :
mWaterBlender(),
mScratchSky(),
mScratchWater(),
mIsPlaying(false)
mIsPlaying(false),
mIsDirty(false)
{
mCommitCallbackRegistrar.add(EVNT_DAYTRACK, [this](LLUICtrl *ctrl, const LLSD &data) { onTrackSelectionCallback(data); });
@ -175,7 +176,7 @@ BOOL LLFloaterEditExtDayCycle::postBuild()
mFlyoutControl = new LLFlyoutComboBtnCtrl(this, BTN_SAVE, BTN_FLYOUT, XML_FLYOUTMENU_FILE);
mFlyoutControl->setAction([this](LLUICtrl *ctrl, const LLSD &data) { onButtonApply(ctrl, data); });
getChild<LLButton>(BTN_CANCEL, true)->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onBtnCancel(); });
getChild<LLButton>(BTN_CANCEL, true)->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onClickCloseBtn(); });
mTimeSlider->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onTimeSliderMoved(); });
mAddFrameButton->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onAddTrack(); });
mDeleteFrameButton->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onRemoveTrack(); });
@ -189,6 +190,26 @@ BOOL LLFloaterEditExtDayCycle::postBuild()
mTimeSlider->addSlider(0);
LLTabContainer* tab_container = mSkyTabLayoutContainer->getChild<LLTabContainer>("sky_tabs");
S32 tab_count = tab_container->getTabCount();
for (S32 idx = 0; idx < tab_count; ++idx)
{
LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx));
if (panel)
panel->setOnDirtyFlagChanged([this](LLPanel *, bool val) { onPanelDirtyFlagChanged(val); });
}
tab_container = mWaterTabLayoutContainer->getChild<LLTabContainer>("water_tabs");
tab_count = tab_container->getTabCount();
for (S32 idx = 0; idx < tab_count; ++idx)
{
LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx));
if (panel)
panel->setOnDirtyFlagChanged([this](LLPanel *, bool val) { onPanelDirtyFlagChanged(val); });
}
//getChild<LLButton>("sky1_track", true)->setToggleState(true);
return TRUE;
@ -312,12 +333,12 @@ void LLFloaterEditExtDayCycle::onClose(bool app_quitting)
doCloseInventoryFloater(app_quitting);
// there's no point to change environment if we're quitting
// or if we already restored environment
if (!app_quitting && LLEnvironment::instance().getSelectedEnvironment() == LLEnvironment::ENV_EDIT)
stopPlay();
if (!app_quitting)
{
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL, LLEnvironment::TRANSITION_FAST);
LLEnvironment::instance().clearEnvironment(LLEnvironment::ENV_EDIT);
}
stopPlay();
}
void LLFloaterEditExtDayCycle::onFocusReceived()
@ -355,7 +376,7 @@ void LLFloaterEditExtDayCycle::refresh()
mFlyoutControl->setMenuItemVisible(ACTION_APPLY_PARCEL, show_apply);
mFlyoutControl->setMenuItemVisible(ACTION_APPLY_REGION, show_apply);
mFlyoutControl->setMenuItemEnabled(ACTION_COMMIT, show_commit);
mFlyoutControl->setMenuItemEnabled(ACTION_COMMIT, show_commit && !mCommitSignal.empty());
mFlyoutControl->setMenuItemEnabled(ACTION_SAVE, is_inventory_avail);
mFlyoutControl->setMenuItemEnabled(ACTION_SAVEAS, is_inventory_avail);
mFlyoutControl->setMenuItemEnabled(ACTION_APPLY_LOCAL, true);
@ -445,14 +466,18 @@ void LLFloaterEditExtDayCycle::onButtonApply(LLUICtrl *ctrl, const LLSD &data)
}
}
void LLFloaterEditExtDayCycle::onBtnCancel()
void LLFloaterEditExtDayCycle::onClickCloseBtn(bool app_quitting /*= false*/)
{
closeFloater(); // will restore env
if (!app_quitting)
checkAndConfirmSettingsLoss([this](){ closeFloater(); });
else
closeFloater();
}
void LLFloaterEditExtDayCycle::onButtonImport()
{
doImportFromDisk();
checkAndConfirmSettingsLoss([this]() { doImportFromDisk(); });
}
void LLFloaterEditExtDayCycle::onButtonLoadFrame()
@ -616,11 +641,6 @@ void LLFloaterEditExtDayCycle::onFrameSliderCallback(const LLSD &data)
}
}
}
mTimeSlider->setCurSliderValue(sliderpos);
updateTabs();
LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_INSTANT);
}
void LLFloaterEditExtDayCycle::onFrameSliderDoubleClick(S32 x, S32 y, MASK mask)
@ -647,6 +667,11 @@ void LLFloaterEditExtDayCycle::onFrameSliderMouseDown(S32 x, S32 y, MASK mask)
mFramesSlider->resetCurSlider();
}
}
mTimeSlider->setCurSliderValue(sliderpos);
updateTabs();
LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_INSTANT);
}
void LLFloaterEditExtDayCycle::onFrameSliderMouseUp(S32 x, S32 y, MASK mask)
@ -657,6 +682,35 @@ void LLFloaterEditExtDayCycle::onFrameSliderMouseUp(S32 x, S32 y, MASK mask)
selectFrame(sliderpos, LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR);
}
void LLFloaterEditExtDayCycle::onPanelDirtyFlagChanged(bool value)
{
if (value)
setDirtyFlag();
}
void LLFloaterEditExtDayCycle::checkAndConfirmSettingsLoss(on_confirm_fn cb)
{
if (isDirty())
{
LLSD args(LLSDMap("TYPE", mEditDay->getSettingsType())
("NAME", mEditDay->getName()));
// create and show confirmation textbox
LLNotificationsUtil::add("SettingsConfirmLoss", args, LLSD(),
[this, cb](const LLSD&notif, const LLSD&resp)
{
S32 opt = LLNotificationsUtil::getSelectedOption(notif, resp);
if (opt == 0)
cb();
});
}
else if (cb)
{
cb();
}
}
void LLFloaterEditExtDayCycle::onTimeSliderMoved()
{
selectFrame(mTimeSlider->getCurSliderValue(), LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR);
@ -1176,6 +1230,7 @@ void LLFloaterEditExtDayCycle::onInventoryCreated(LLUUID asset_id, LLUUID invent
return;
}
clearDirtyFlag();
setFocus(TRUE); // Call back the focus...
loadInventoryItem(inventory_id);
}
@ -1184,6 +1239,7 @@ void LLFloaterEditExtDayCycle::onInventoryUpdated(LLUUID asset_id, LLUUID invent
{
LL_WARNS("ENVDAYEDIT") << "Inventory item " << inventory_id << " has been updated with asset " << asset_id << " results are:" << results << LL_ENDL;
clearDirtyFlag();
if (inventory_id != mInventoryId)
{
loadInventoryItem(inventory_id);
@ -1209,6 +1265,7 @@ void LLFloaterEditExtDayCycle::doImportFromDisk()
}
mCurrentTrack = 1;
setDirtyFlag();
setEditDayCycle(legacyday);
}
}
@ -1285,6 +1342,33 @@ void LLFloaterEditExtDayCycle::onIdlePlay(void* user_data)
}
void LLFloaterEditExtDayCycle::clearDirtyFlag()
{
mIsDirty = false;
LLTabContainer* tab_container = mSkyTabLayoutContainer->getChild<LLTabContainer>("sky_tabs");
S32 tab_count = tab_container->getTabCount();
for (S32 idx = 0; idx < tab_count; ++idx)
{
LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx));
if (panel)
panel->clearIsDirty();
}
tab_container = mWaterTabLayoutContainer->getChild<LLTabContainer>("water_tabs");
tab_count = tab_container->getTabCount();
for (S32 idx = 0; idx < tab_count; ++idx)
{
LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx));
if (panel)
panel->clearIsDirty();
}
}
void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e type, LLUUID currasset)
{
// LLUI::sWindow->setCursor(UI_CURSOR_WAIT);

View File

@ -91,13 +91,15 @@ public:
BOOL handleKeyUp(KEY key, MASK mask, BOOL called_from_parent) override;
private:
BOOL isDirty() const override { return getIsDirty(); }
private:
typedef std::function<void()> on_confirm_fn;
F32 getCurrentFrame() const;
// flyout response/click
void onButtonApply(LLUICtrl *ctrl, const LLSD &data);
void onBtnCancel();
virtual void onClickCloseBtn(bool app_quitting = false) override;
void onButtonImport();
void onButtonLoadFrame();
void onAddTrack();
@ -113,6 +115,10 @@ private:
void onFrameSliderMouseDown(S32 x, S32 y, MASK mask);
void onFrameSliderMouseUp(S32 x, S32 y, MASK mask);
void onPanelDirtyFlagChanged(bool);
void checkAndConfirmSettingsLoss(on_confirm_fn cb);
void selectTrack(U32 track_index, bool force = false);
void selectFrame(F32 frame, F32 slop_factor);
void clearTabs();
@ -158,6 +164,10 @@ private:
void stopPlay();
static void onIdlePlay(void *);
bool getIsDirty() const { return mIsDirty; }
void setDirtyFlag() { mIsDirty = true; }
virtual void clearDirtyFlag();
LLSettingsDay::ptr_t mEditDay; // edited copy
LLSettingsDay::Seconds mDayLength;
U32 mCurrentTrack;
@ -190,6 +200,7 @@ private:
LLFrameTimer mPlayTimer;
F32 mPlayStartFrame; // an env frame
bool mIsPlaying;
bool mIsDirty;
edit_commit_signal_t mCommitSignal;

View File

@ -69,6 +69,7 @@ namespace
const std::string ACTION_SAVE("save_settings");
const std::string ACTION_SAVEAS("save_as_new_settings");
const std::string ACTION_COMMIT("commit_changes");
const std::string ACTION_APPLY_LOCAL("apply_local");
const std::string ACTION_APPLY_PARCEL("apply_parcel");
const std::string ACTION_APPLY_REGION("apply_region");
@ -85,7 +86,8 @@ LLFloaterFixedEnvironment::LLFloaterFixedEnvironment(const LLSD &key) :
LLFloater(key),
mFlyoutControl(nullptr),
mInventoryId(),
mInventoryItem(nullptr)
mInventoryItem(nullptr),
mIsDirty(false)
{
}
@ -103,11 +105,12 @@ BOOL LLFloaterFixedEnvironment::postBuild()
mTxtName->setCommitCallback([this](LLUICtrl *, const LLSD &) { onNameChanged(mTxtName->getValue().asString()); });
getChild<LLButton>(BUTTON_NAME_IMPORT)->setClickedCallback([this](LLUICtrl *, const LLSD &) { onButtonImport(); });
getChild<LLButton>(BUTTON_NAME_CANCEL)->setClickedCallback([this](LLUICtrl *, const LLSD &) { onButtonCancel(); });
getChild<LLButton>(BUTTON_NAME_CANCEL)->setClickedCallback([this](LLUICtrl *, const LLSD &) { onClickCloseBtn(); });
getChild<LLButton>(BUTTON_NAME_LOAD)->setClickedCallback([this](LLUICtrl *, const LLSD &) { onButtonLoad(); });
mFlyoutControl = new LLFlyoutComboBtnCtrl(this, BUTTON_NAME_COMMIT, BUTTON_NAME_FLYOUT, XML_FLYOUTMENU_FILE);
mFlyoutControl->setAction([this](LLUICtrl *ctrl, const LLSD &data) { onButtonApply(ctrl, data); });
mFlyoutControl->setMenuItemVisible(ACTION_COMMIT, false);
return TRUE;
}
@ -191,6 +194,24 @@ void LLFloaterFixedEnvironment::syncronizeTabs()
}
}
LLFloaterSettingsPicker * LLFloaterFixedEnvironment::getSettingsPicker()
{
LLFloaterSettingsPicker *picker = static_cast<LLFloaterSettingsPicker *>(mInventoryFloater.get());
// Show the dialog
if (!picker)
{
picker = new LLFloaterSettingsPicker(this,
LLUUID::null, "SELECT SETTINGS");
mInventoryFloater = picker->getHandle();
picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitSetting(data.asUUID()); });
}
return picker;
}
void LLFloaterFixedEnvironment::loadInventoryItem(const LLUUID &inventoryId)
{
if (inventoryId.isNull())
@ -231,6 +252,29 @@ void LLFloaterFixedEnvironment::loadInventoryItem(const LLUUID &inventoryId)
[this](LLUUID asset_id, LLSettingsBase::ptr_t settins, S32 status, LLExtStat) { onAssetLoaded(asset_id, settins, status); });
}
void LLFloaterFixedEnvironment::checkAndConfirmSettingsLoss(LLFloaterFixedEnvironment::on_confirm_fn cb)
{
if (isDirty())
{
LLSD args(LLSDMap("TYPE", mSettings->getSettingsType())
("NAME", mSettings->getName()));
// create and show confirmation textbox
LLNotificationsUtil::add("SettingsConfirmLoss", args, LLSD(),
[this, cb](const LLSD&notif, const LLSD&resp)
{
S32 opt = LLNotificationsUtil::getSelectedOption(notif, resp);
if (opt == 0)
cb();
});
}
else if (cb)
{
cb();
}
}
void LLFloaterFixedEnvironment::onPickerCommitSetting(LLUUID asset_id)
{
LLSettingsVOBase::getSettingsAsset(asset_id,
@ -257,11 +301,12 @@ void LLFloaterFixedEnvironment::onAssetLoaded(LLUUID asset_id, LLSettingsBase::p
void LLFloaterFixedEnvironment::onNameChanged(const std::string &name)
{
mSettings->setName(name);
setDirtyFlag();
}
void LLFloaterFixedEnvironment::onButtonImport()
{
doImportFromDisk();
checkAndConfirmSettingsLoss([this](){ doImportFromDisk(); });
}
void LLFloaterFixedEnvironment::onButtonApply(LLUICtrl *ctrl, const LLSD &data)
@ -288,31 +333,17 @@ void LLFloaterFixedEnvironment::onButtonApply(LLUICtrl *ctrl, const LLSD &data)
}
}
void LLFloaterFixedEnvironment::onButtonCancel()
void LLFloaterFixedEnvironment::onClickCloseBtn(bool app_quitting)
{
// *TODO*: If changed issue a warning?
this->closeFloater();
if (!app_quitting)
checkAndConfirmSettingsLoss([this](){ closeFloater(); });
else
closeFloater();
}
void LLFloaterFixedEnvironment::onButtonLoad()
{
// LLUI::sWindow->setCursor(UI_CURSOR_WAIT);
LLFloaterSettingsPicker *picker = static_cast<LLFloaterSettingsPicker *>(mInventoryFloater.get());
// Show the dialog
if (!picker)
{
picker = new LLFloaterSettingsPicker(this,
LLUUID::null, "SELECT SETTINGS");
mInventoryFloater = picker->getHandle();
picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitSetting(data.asUUID()); });
}
picker->setSettingsFilter(mSettings->getSettingsTypeValue());
picker->openFloater();
picker->setFocus(TRUE);
checkAndConfirmSettingsLoss([this](){ doSelectFromInventory(); });
}
void LLFloaterFixedEnvironment::doApplyCreateNewInventory()
@ -396,6 +427,7 @@ void LLFloaterFixedEnvironment::onInventoryCreated(LLUUID asset_id, LLUUID inven
return;
}
clearDirtyFlag();
setFocus(TRUE); // Call back the focus...
loadInventoryItem(inventory_id);
}
@ -404,12 +436,44 @@ void LLFloaterFixedEnvironment::onInventoryUpdated(LLUUID asset_id, LLUUID inven
{
LL_WARNS("ENVIRONMENT") << "Inventory item " << inventory_id << " has been updated with asset " << asset_id << " results are:" << results << LL_ENDL;
clearDirtyFlag();
if (inventory_id != mInventoryId)
{
loadInventoryItem(inventory_id);
}
}
void LLFloaterFixedEnvironment::clearDirtyFlag()
{
mIsDirty = false;
S32 count = mTab->getTabCount();
for (S32 idx = 0; idx < count; ++idx)
{
LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(mTab->getPanelByIndex(idx));
if (panel)
panel->clearIsDirty();
}
}
void LLFloaterFixedEnvironment::doSelectFromInventory()
{
LLFloaterSettingsPicker *picker = getSettingsPicker();
picker->setSettingsFilter(mSettings->getSettingsTypeValue());
picker->openFloater();
picker->setFocus(TRUE);
}
void LLFloaterFixedEnvironment::onPanelDirtyFlagChanged(bool value)
{
if (value)
setDirtyFlag();
}
//-------------------------------------------------------------------------
bool LLFloaterFixedEnvironment::canUseInventory() const
{
@ -452,6 +516,7 @@ BOOL LLFloaterFixedEnvironmentWater::postBuild()
panel = new LLPanelSettingsWaterMainTab;
panel->buildFromFile("panel_settings_water.xml");
panel->setWater(std::static_pointer_cast<LLSettingsWater>(mSettings));
panel->setOnDirtyFlagChanged( [this] (LLPanel *, bool value) { onPanelDirtyFlagChanged(value); });
mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true));
return TRUE;
@ -477,11 +542,6 @@ void LLFloaterFixedEnvironmentWater::onOpen(const LLSD& key)
LLFloaterFixedEnvironment::onOpen(key);
}
void LLFloaterFixedEnvironmentWater::onClose(bool app_quitting)
{
LLFloaterFixedEnvironment::onClose(app_quitting);
}
void LLFloaterFixedEnvironmentWater::doImportFromDisk()
{ // Load a a legacy Windlight XML from disk.
@ -500,8 +560,9 @@ void LLFloaterFixedEnvironmentWater::doImportFromDisk()
return;
}
setDirtyFlag();
LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, legacywater);
this->setEditSettings(legacywater);
setEditSettings(legacywater);
LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_FAST, true);
}
}
@ -520,16 +581,19 @@ BOOL LLFloaterFixedEnvironmentSky::postBuild()
panel = new LLPanelSettingsSkyAtmosTab;
panel->buildFromFile("panel_settings_sky_atmos.xml");
panel->setSky(std::static_pointer_cast<LLSettingsSky>(mSettings));
panel->setOnDirtyFlagChanged([this](LLPanel *, bool value) { onPanelDirtyFlagChanged(value); });
mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true));
panel = new LLPanelSettingsSkyCloudTab;
panel->buildFromFile("panel_settings_sky_clouds.xml");
panel->setSky(std::static_pointer_cast<LLSettingsSky>(mSettings));
panel->setOnDirtyFlagChanged([this](LLPanel *, bool value) { onPanelDirtyFlagChanged(value); });
mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(false));
panel = new LLPanelSettingsSkySunMoonTab;
panel->buildFromFile("panel_settings_sky_sunmoon.xml");
panel->setSky(std::static_pointer_cast<LLSettingsSky>(mSettings));
panel->setOnDirtyFlagChanged([this](LLPanel *, bool value) { onPanelDirtyFlagChanged(value); });
mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(false));
return TRUE;
@ -553,12 +617,6 @@ void LLFloaterFixedEnvironmentSky::onOpen(const LLSD& key)
}
LLFloaterFixedEnvironment::onOpen(key);
}
void LLFloaterFixedEnvironmentSky::onClose(bool app_quitting)
{
LLFloaterFixedEnvironment::onClose(app_quitting);
}
void LLFloaterFixedEnvironmentSky::doImportFromDisk()
@ -580,8 +638,9 @@ void LLFloaterFixedEnvironmentSky::doImportFromDisk()
return;
}
clearDirtyFlag();
LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, legacysky);
this->setEditSettings(legacysky);
setEditSettings(legacysky);
LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_FAST, true);
}
}

View File

@ -32,9 +32,12 @@
#include "llflyoutcombobtn.h"
#include "llinventory.h"
#include "boost/signals2.hpp"
class LLTabContainer;
class LLButton;
class LLLineEditor;
class LLFloaterSettingsPicker;
/**
* Floater container for creating and editing fixed environment settings.
@ -56,16 +59,24 @@ public:
virtual void onFocusReceived() override;
virtual void onFocusLost() override;
void setEditSettings(const LLSettingsBase::ptr_t &settings) { mSettings = settings; syncronizeTabs(); refresh(); }
void setEditSettings(const LLSettingsBase::ptr_t &settings) { mSettings = settings; clearDirtyFlag(); syncronizeTabs(); refresh(); }
LLSettingsBase::ptr_t getEditSettings() const { return mSettings; }
virtual BOOL isDirty() const override { return getIsDirty(); }
protected:
typedef std::function<void()> on_confirm_fn;
virtual void updateEditEnvironment() = 0;
virtual void refresh() override;
virtual void syncronizeTabs();
LLFloaterSettingsPicker *getSettingsPicker();
void loadInventoryItem(const LLUUID &inventoryId);
void checkAndConfirmSettingsLoss(on_confirm_fn cb);
LLTabContainer * mTab;
LLLineEditor * mTxtName;
@ -90,16 +101,26 @@ protected:
void onInventoryCreated(LLUUID asset_id, LLUUID inventory_id, LLSD results);
void onInventoryUpdated(LLUUID asset_id, LLUUID inventory_id, LLSD results);
bool getIsDirty() const { return mIsDirty; }
void setDirtyFlag() { mIsDirty = true; }
virtual void clearDirtyFlag();
void doSelectFromInventory();
void onPanelDirtyFlagChanged(bool);
virtual void onClickCloseBtn(bool app_quitting = false) override;
private:
void onNameChanged(const std::string &name);
void onButtonImport();
void onButtonApply(LLUICtrl *ctrl, const LLSD &data);
void onButtonCancel();
void onButtonLoad();
void onPickerCommitSetting(LLUUID asset_id);
void onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settins, S32 status);
bool mIsDirty;
};
class LLFloaterFixedEnvironmentWater : public LLFloaterFixedEnvironment
@ -112,7 +133,6 @@ public:
BOOL postBuild() override;
virtual void onOpen(const LLSD& key) override;
virtual void onClose(bool app_quitting) override;
protected:
virtual void updateEditEnvironment() override;
@ -132,7 +152,6 @@ public:
BOOL postBuild() override;
virtual void onOpen(const LLSD& key) override;
virtual void onClose(bool app_quitting) override;
protected:
virtual void updateEditEnvironment() override;
@ -147,13 +166,26 @@ class LLSettingsEditPanel : public LLPanel
public:
virtual void setSettings(const LLSettingsBase::ptr_t &) = 0;
// virtual void refresh() override;
typedef boost::signals2::signal<void(LLPanel *, bool)> on_dirty_charged_sg;
typedef boost::signals2::connection connection_t;
inline bool getIsDirty() const { return mIsDirty; }
inline void setIsDirty() { mIsDirty = true; if (!mOnDirtyChanged.empty()) mOnDirtyChanged(this, mIsDirty); }
inline void clearIsDirty() { mIsDirty = false; if (!mOnDirtyChanged.empty()) mOnDirtyChanged(this, mIsDirty); }
inline connection_t setOnDirtyFlagChanged(on_dirty_charged_sg::slot_type cb) { return mOnDirtyChanged.connect(cb); }
protected:
LLSettingsEditPanel() :
LLPanel()
LLPanel(),
mIsDirty(false),
mOnDirtyChanged()
{}
private:
bool mIsDirty;
on_dirty_charged_sg mOnDirtyChanged;
};
#endif // LL_FLOATERFIXEDENVIRONMENT_H

View File

@ -5097,6 +5097,11 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
tooltip_msg = LLTrans::getString("TooltipOutboxNotInInventory");
accept = FALSE;
}
else if ((inv_item->getActualType() == LLAssetType::AT_SETTINGS) && !LLEnvironment::instance().isInventoryEnabled())
{
tooltip_msg = LLTrans::getString("NoEnvironmentSettings");
accept = FALSE;
}
else
{
// Don't allow placing an original item from a notecard to Current Outfit or an outfit folder

View File

@ -109,6 +109,7 @@ public:
virtual void closeItem() {}
virtual void showProperties();
virtual BOOL isItemRenameable() const { return TRUE; }
virtual BOOL isMultiPreviewAllowed() { return TRUE; }
//virtual BOOL renameItem(const std::string& new_name) {}
virtual BOOL isItemRemovable() const;
virtual BOOL isItemMovable() const;
@ -621,6 +622,7 @@ public:
virtual LLUIImagePtr getIcon() const;
virtual void performAction(LLInventoryModel* model, std::string action);
virtual void openItem();
virtual BOOL isMultiPreviewAllowed() { return FALSE; }
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
virtual BOOL renameItem(const std::string& new_name);
virtual LLSettingsType::type_e getSettingsType() const { return mSettingsType; }

View File

@ -2395,10 +2395,29 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root
if (("task_open" == action || "open" == action) && selected_items.size() > 1)
{
multi_previewp = new LLMultiPreview();
gFloaterView->addChild(multi_previewp);
bool open_multi_preview = true;
LLFloater::setFloaterHost(multi_previewp);
for (std::set<LLFolderViewItem*>::iterator set_iter = selected_items.begin(); set_iter != selected_items.end(); ++set_iter)
{
LLFolderViewItem* folder_item = *set_iter;
if (folder_item)
{
LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getViewModelItem();
if (!bridge || !bridge->isMultiPreviewAllowed())
{
open_multi_preview = false;
break;
}
}
}
if (open_multi_preview)
{
multi_previewp = new LLMultiPreview();
gFloaterView->addChild(multi_previewp);
LLFloater::setFloaterHost(multi_previewp);
}
}
else if (("task_properties" == action || "properties" == action) && selected_items.size() > 1)

View File

@ -2604,6 +2604,7 @@ void LLInventoryModel::createCommonSystemCategories()
gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE,true);
gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD,true);
gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS,true);
gInventory.findCategoryUUIDForType(LLFolderType::FT_SETTINGS, true);
}
struct LLUUIDAndName

View File

@ -35,7 +35,6 @@
#include "llvirtualtrackball.h"
#include "llsettingssky.h"
static LLDefaultChildRegistry::Register<LLDensityCtrl> register_density_control("densityctrl");
namespace
{
@ -73,6 +72,23 @@ namespace
const std::string FIELD_SKY_MOON_IMAGE("moon_image");
const std::string FIELD_SKY_MOON_SCALE("moon_scale");
const std::string FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL("rayleigh_exponential");
const std::string FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL_SCALE("rayleigh_exponential_scale");
const std::string FIELD_SKY_DENSITY_RAYLEIGH_LINEAR("rayleigh_linear");
const std::string FIELD_SKY_DENSITY_RAYLEIGH_CONSTANT("rayleigh_constant");
const std::string FIELD_SKY_DENSITY_MIE_EXPONENTIAL("mie_exponential");
const std::string FIELD_SKY_DENSITY_MIE_EXPONENTIAL_SCALE("mie_exponential_scale");
const std::string FIELD_SKY_DENSITY_MIE_LINEAR("mie_linear");
const std::string FIELD_SKY_DENSITY_MIE_CONSTANT("mie_constant");
const std::string FIELD_SKY_DENSITY_MIE_ANISO("mie_aniso_factor");
const std::string FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL("absorption_exponential");
const std::string FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL_SCALE("absorption_exponential_scale");
const std::string FIELD_SKY_DENSITY_ABSORPTION_LINEAR("absorption_linear");
const std::string FIELD_SKY_DENSITY_ABSORPTION_CONSTANT("absorption_constant");
const std::string FIELD_SKY_DENSITY_MAX_ALTITUDE("max_altitude");
const F32 SLIDER_SCALE_SUN_AMBIENT(3.0f);
const F32 SLIDER_SCALE_BLUE_HORIZON_DENSITY(2.0f);
const F32 SLIDER_SCALE_GLOW_R(20.0f);
@ -160,46 +176,64 @@ void LLPanelSettingsSkyAtmosTab::refresh()
void LLPanelSettingsSkyAtmosTab::onAmbientLightChanged()
{
mSkySettings->setAmbientColor(LLColor3(getChild<LLColorSwatchCtrl>(FIELD_SKY_AMBIENT_LIGHT)->get() * SLIDER_SCALE_SUN_AMBIENT));
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkyAtmosTab::onBlueHorizonChanged()
{
mSkySettings->setBlueHorizon(LLColor3(getChild<LLColorSwatchCtrl>(FIELD_SKY_BLUE_HORIZON)->get() * SLIDER_SCALE_BLUE_HORIZON_DENSITY));
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkyAtmosTab::onBlueDensityChanged()
{
mSkySettings->setBlueDensity(LLColor3(getChild<LLColorSwatchCtrl>(FIELD_SKY_BLUE_DENSITY)->get() * SLIDER_SCALE_BLUE_HORIZON_DENSITY));
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkyAtmosTab::onHazeHorizonChanged()
{
mSkySettings->setHazeHorizon(getChild<LLUICtrl>(FIELD_SKY_HAZE_HORIZON)->getValue().asReal());
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkyAtmosTab::onHazeDensityChanged()
{
mSkySettings->setHazeDensity(getChild<LLUICtrl>(FIELD_SKY_HAZE_DENSITY)->getValue().asReal());
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkyAtmosTab::onSceneGammaChanged()
{
mSkySettings->setGamma(getChild<LLUICtrl>(FIELD_SKY_SCENE_GAMMA)->getValue().asReal());
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkyAtmosTab::onDensityMultipChanged()
{
mSkySettings->setDensityMultiplier(getChild<LLUICtrl>(FIELD_SKY_DENSITY_MULTIP)->getValue().asReal());
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkyAtmosTab::onDistanceMultipChanged()
{
mSkySettings->setDistanceMultiplier(getChild<LLUICtrl>(FIELD_SKY_DISTANCE_MULTIP)->getValue().asReal());
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkyAtmosTab::onMaxAltChanged()
{
mSkySettings->setMaxY(getChild<LLUICtrl>(FIELD_SKY_MAX_ALT)->getValue().asReal());
mSkySettings->update();
setIsDirty();
}
//==========================================================================
@ -283,16 +317,21 @@ void LLPanelSettingsSkyCloudTab::refresh()
void LLPanelSettingsSkyCloudTab::onCloudColorChanged()
{
mSkySettings->setCloudColor(LLColor3(getChild<LLColorSwatchCtrl>(FIELD_SKY_CLOUD_COLOR)->get()));
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkyCloudTab::onCloudCoverageChanged()
{
mSkySettings->setCloudShadow(getChild<LLUICtrl>(FIELD_SKY_CLOUD_COVERAGE)->getValue().asReal());
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkyCloudTab::onCloudScaleChanged()
{
mSkySettings->setCloudScale(getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCALE)->getValue().asReal());
setIsDirty();
}
void LLPanelSettingsSkyCloudTab::onCloudScrollChanged()
@ -300,11 +339,13 @@ void LLPanelSettingsSkyCloudTab::onCloudScrollChanged()
LLVector2 scroll(getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCROLL_XY)->getValue());
scroll += CLOUD_SCROLL_ADJUST;
mSkySettings->setCloudScrollRate(scroll);
setIsDirty();
}
void LLPanelSettingsSkyCloudTab::onCloudMapChanged()
{
mSkySettings->setCloudNoiseTextureId(getChild<LLTextureCtrl>(FIELD_SKY_CLOUD_MAP)->getValue().asUUID());
setIsDirty();
}
void LLPanelSettingsSkyCloudTab::onCloudDensityChanged()
@ -314,6 +355,7 @@ void LLPanelSettingsSkyCloudTab::onCloudDensityChanged()
getChild<LLUICtrl>(FIELD_SKY_CLOUD_DENSITY_D)->getValue().asReal());
mSkySettings->setCloudPosDensity1(density);
setIsDirty();
}
void LLPanelSettingsSkyCloudTab::onCloudDetailChanged()
@ -323,6 +365,7 @@ void LLPanelSettingsSkyCloudTab::onCloudDetailChanged()
getChild<LLUICtrl>(FIELD_SKY_CLOUD_DETAIL_D)->getValue().asReal());
mSkySettings->setCloudPosDensity2(detail);
setIsDirty();
}
//==========================================================================
@ -340,6 +383,7 @@ BOOL LLPanelSettingsSkySunMoonTab::postBuild()
getChild<LLUICtrl>(FIELD_SKY_STAR_BRIGHTNESS)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onStarBrightnessChanged(); });
getChild<LLUICtrl>(FIELD_SKY_SUN_ROTATION)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunRotationChanged(); });
getChild<LLUICtrl>(FIELD_SKY_SUN_IMAGE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunImageChanged(); });
getChild<LLUICtrl>(FIELD_SKY_SUN_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunScaleChanged(); });
getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->setBlankImageAssetID(LLSettingsSky::GetBlankSunTextureId());
getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->setDefaultImageAssetID(LLSettingsSky::GetBlankSunTextureId());
getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->setAllowNoTexture(TRUE);
@ -350,7 +394,7 @@ BOOL LLPanelSettingsSkySunMoonTab::postBuild()
getChild<LLTextureCtrl>(FIELD_SKY_MOON_IMAGE)->setBlankImageAssetID(LLSettingsSky::GetBlankSunTextureId());
getChild<LLTextureCtrl>(FIELD_SKY_MOON_IMAGE)->setAllowNoTexture(TRUE);
getChild<LLTextureCtrl>(FIELD_SKY_MOON_IMAGE)->setAllowLocalTexture(FALSE);
getChild<LLUICtrl>(FIELD_SKY_MOON_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMoonScaleChanged(); });
refresh();
@ -387,8 +431,10 @@ void LLPanelSettingsSkySunMoonTab::refresh()
getChild<LLUICtrl>(FIELD_SKY_STAR_BRIGHTNESS)->setValue(mSkySettings->getStarBrightness());
getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->setRotation(mSkySettings->getSunRotation());
getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->setValue(mSkySettings->getSunTextureId());
getChild<LLUICtrl>(FIELD_SKY_SUN_SCALE)->setValue(mSkySettings->getSunScale());
getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->setRotation(mSkySettings->getMoonRotation());
getChild<LLTextureCtrl>(FIELD_SKY_MOON_IMAGE)->setValue(mSkySettings->getMoonTextureId());
getChild<LLUICtrl>(FIELD_SKY_MOON_SCALE)->setValue(mSkySettings->getMoonScale());
}
//-------------------------------------------------------------------------
@ -399,6 +445,8 @@ void LLPanelSettingsSkySunMoonTab::onSunMoonColorChanged()
color *= SLIDER_SCALE_SUN_AMBIENT;
mSkySettings->setSunlightColor(color);
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkySunMoonTab::onGlowChanged()
@ -410,48 +458,56 @@ void LLPanelSettingsSkySunMoonTab::onGlowChanged()
mSkySettings->setGlow(glow);
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkySunMoonTab::onStarBrightnessChanged()
{
mSkySettings->setStarBrightness(getChild<LLUICtrl>(FIELD_SKY_STAR_BRIGHTNESS)->getValue().asReal());
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkySunMoonTab::onSunRotationChanged()
{
mSkySettings->setSunRotation(getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->getRotation());
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkySunMoonTab::onSunScaleChanged()
{
mSkySettings->setSunScale((getChild<LLUICtrl>(FIELD_SKY_SUN_SCALE)->getValue().asReal()));
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkySunMoonTab::onSunImageChanged()
{
mSkySettings->setSunTextureId(getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->getValue().asUUID());
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkySunMoonTab::onMoonRotationChanged()
{
mSkySettings->setMoonRotation(getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->getRotation());
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkySunMoonTab::onMoonImageChanged()
{
mSkySettings->setMoonTextureId(getChild<LLTextureCtrl>(FIELD_SKY_MOON_IMAGE)->getValue().asUUID());
mSkySettings->update();
setIsDirty();
}
void LLPanelSettingsSkySunMoonTab::onMoonScaleChanged()
{
mSkySettings->setMoonScale((getChild<LLUICtrl>(FIELD_SKY_MOON_SCALE)->getValue().asReal()));
mSkySettings->update();
setIsDirty();
}
@ -461,8 +517,24 @@ LLPanelSettingsDensityTab::LLPanelSettingsDensityTab()
BOOL LLPanelSettingsDensityTab::postBuild()
{
mControlName = LLDensityCtrl::NameForDensityProfileType(mProfileType);
getChild<LLDensityCtrl>(mControlName)->setProfileType(mProfileType);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onRayleighExponentialChanged(); });
getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onRayleighExponentialScaleChanged(); });
getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_LINEAR)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onRayleighLinearChanged(); });
getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_CONSTANT)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onRayleighConstantChanged(); });
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMieExponentialChanged(); });
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMieExponentialScaleChanged(); });
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_LINEAR)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMieLinearChanged(); });
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_CONSTANT)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMieConstantChanged(); });
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_ANISO)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMieAnisoFactorChanged(); });
getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onAbsorptionExponentialChanged(); });
getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onAbsorptionExponentialScaleChanged(); });
getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_LINEAR)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onAbsorptionLinearChanged(); });
getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_CONSTANT)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onAbsorptionConstantChanged(); });
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MAX_ALTITUDE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMaxAltitudeChanged(); });
refresh();
return TRUE;
}
@ -470,7 +542,24 @@ BOOL LLPanelSettingsDensityTab::postBuild()
void LLPanelSettingsDensityTab::setEnabled(BOOL enabled)
{
LLPanelSettingsSky::setEnabled(enabled);
getChild<LLDensityCtrl>(mControlName)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL_SCALE)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_LINEAR)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_CONSTANT)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL_SCALE)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_LINEAR)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_CONSTANT)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_ANISO)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL_SCALE)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_LINEAR)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_CONSTANT)->setEnabled(enabled);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MAX_ALTITUDE)->setEnabled(enabled);
}
void LLPanelSettingsDensityTab::refresh()
@ -484,61 +573,124 @@ void LLPanelSettingsDensityTab::refresh()
setEnabled(TRUE);
setAllChildrenEnabled(TRUE);
getChild<LLDensityCtrl>(mControlName)->setSky(mSkySettings);
getChild<LLDensityCtrl>(mControlName)->refresh();
LLSD rayleigh_config = mSkySettings->getRayleighConfigs();
LLSD mie_config = mSkySettings->getMieConfigs();
LLSD absorption_config = mSkySettings->getAbsorptionConfigs();
getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL)->setValue(rayleigh_config[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM]);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL_SCALE)->setValue(rayleigh_config[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR]);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_LINEAR)->setValue(rayleigh_config[LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM]);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_CONSTANT)->setValue(rayleigh_config[LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM]);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL)->setValue(mie_config[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM]);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL_SCALE)->setValue(mie_config[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR]);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_LINEAR)->setValue(mie_config[LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM]);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_CONSTANT)->setValue(mie_config[LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM]);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_ANISO)->setValue(mie_config[LLSettingsSky::SETTING_MIE_ANISOTROPY_FACTOR]);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL)->setValue(absorption_config[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM]);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL_SCALE)->setValue(absorption_config[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR]);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_LINEAR)->setValue(absorption_config[LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM]);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_CONSTANT)->setValue(absorption_config[LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM]);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MAX_ALTITUDE)->setValue(rayleigh_config[LLSettingsSky::SETTING_DENSITY_PROFILE_WIDTH]);
}
void LLPanelSettingsDensityTab::updateProfile()
{
getChild<LLDensityCtrl>(mControlName)->setSky(mSkySettings);
getChild<LLDensityCtrl>(mControlName)->updateProfile();
F32 rayleigh_exponential_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL)->getValueF32();
F32 rayleigh_exponential_scale = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL_SCALE)->getValueF32();
F32 rayleigh_linear_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_RAYLEIGH_LINEAR)->getValueF32();
F32 rayleigh_constant_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_RAYLEIGH_CONSTANT)->getValueF32();
F32 mie_exponential_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL)->getValueF32();
F32 mie_exponential_scale = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL_SCALE)->getValueF32();
F32 mie_linear_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_MIE_LINEAR)->getValueF32();
F32 mie_constant_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_MIE_CONSTANT)->getValueF32();
F32 mie_aniso_factor = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_MIE_ANISO)->getValueF32();
F32 absorption_exponential_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL)->getValueF32();
F32 absorption_exponential_scale = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL_SCALE)->getValueF32();
F32 absorption_linear_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_ABSORPTION_LINEAR)->getValueF32();
F32 absorption_constant_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_ABSORPTION_CONSTANT)->getValueF32();
F32 max_alt = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_MAX_ALTITUDE)->getValueF32();
LLSD rayleigh_config = LLSettingsSky::createSingleLayerDensityProfile(max_alt, rayleigh_exponential_term, rayleigh_exponential_scale, rayleigh_linear_term, rayleigh_constant_term);
LLSD mie_config = LLSettingsSky::createSingleLayerDensityProfile(max_alt, mie_exponential_term, mie_exponential_scale, mie_linear_term, mie_constant_term, mie_aniso_factor);
LLSD absorption_config = LLSettingsSky::createSingleLayerDensityProfile(max_alt, absorption_exponential_term, absorption_exponential_scale, absorption_linear_term, absorption_constant_term);
mSkySettings->setRayleighConfigs(rayleigh_config);
mSkySettings->setMieConfigs(mie_config);
mSkySettings->setAbsorptionConfigs(absorption_config);
mSkySettings->update();
}
LLPanelSettingsDensity::LLPanelSettingsDensity()
{
}
BOOL LLPanelSettingsDensity::postBuild()
void LLPanelSettingsDensityTab::onRayleighExponentialChanged()
{
//static_cast<LLPanelSettingsDensityTab*>(getChild<LLPanelSettingsDensityTab>(LLDensityCtrl::DENSITY_RAYLEIGH))->setProfileType(LLDensityCtrl::Rayleigh);
//static_cast<LLPanelSettingsDensityTab*>(getChild<LLPanelSettingsDensityTab>(LLDensityCtrl::DENSITY_MIE))->setProfileType(LLDensityCtrl::Mie);
//static_cast<LLPanelSettingsDensityTab*>(getChild<LLPanelSettingsDensityTab>(LLDensityCtrl::DENSITY_ABSORPTION))->setProfileType(LLDensityCtrl::Absorption);
refresh();
return TRUE;
updateProfile();
}
void LLPanelSettingsDensity::setEnabled(BOOL enabled)
void LLPanelSettingsDensityTab::onRayleighExponentialScaleChanged()
{
LLPanelSettingsSky::setEnabled(enabled);
//getChild<LLPanelSettingsDensityTab>(LLDensityCtrl::DENSITY_RAYLEIGH)->setEnabled(enabled);
//getChild<LLPanelSettingsDensityTab>(LLDensityCtrl::DENSITY_MIE)->setEnabled(enabled);
//getChild<LLPanelSettingsDensityTab>(LLDensityCtrl::DENSITY_ABSORPTION)->setEnabled(enabled);
updateProfile();
}
void LLPanelSettingsDensity::refresh()
void LLPanelSettingsDensityTab::onRayleighLinearChanged()
{
if (!mSkySettings)
{
setAllChildrenEnabled(FALSE);
setEnabled(FALSE);
return;
}
setEnabled(TRUE);
setAllChildrenEnabled(TRUE);
//getChild<LLDensityCtrl>(LLDensityCtrl::DENSITY_RAYLEIGH)->refresh();
//getChild<LLDensityCtrl>(LLDensityCtrl::DENSITY_MIE)->refresh();
//getChild<LLDensityCtrl>(LLDensityCtrl::DENSITY_ABSORPTION)->refresh();
updateProfile();
}
void LLPanelSettingsDensity::updateProfile()
void LLPanelSettingsDensityTab::onRayleighConstantChanged()
{
//getChild<LLDensityCtrl>(LLDensityCtrl::DENSITY_RAYLEIGH)->updateProfile();
//getChild<LLDensityCtrl>(LLDensityCtrl::DENSITY_MIE)->updateProfile();
//getChild<LLDensityCtrl>(LLDensityCtrl::DENSITY_ABSORPTION)->updateProfile();
mSkySettings->update();
updateProfile();
}
void LLPanelSettingsDensityTab::onMieExponentialChanged()
{
updateProfile();
}
void LLPanelSettingsDensityTab::onMieExponentialScaleChanged()
{
updateProfile();
}
void LLPanelSettingsDensityTab::onMieLinearChanged()
{
updateProfile();
}
void LLPanelSettingsDensityTab::onMieConstantChanged()
{
updateProfile();
}
void LLPanelSettingsDensityTab::onMieAnisoFactorChanged()
{
updateProfile();
}
void LLPanelSettingsDensityTab::onAbsorptionExponentialChanged()
{
updateProfile();
}
void LLPanelSettingsDensityTab::onAbsorptionExponentialScaleChanged()
{
updateProfile();
}
void LLPanelSettingsDensityTab::onAbsorptionLinearChanged()
{
updateProfile();
}
void LLPanelSettingsDensityTab::onAbsorptionConstantChanged()
{
updateProfile();
}
void LLPanelSettingsDensityTab::onMaxAltitudeChanged()
{
updateProfile();
}

View File

@ -30,13 +30,11 @@
#include "llpanel.h"
#include "llsettingssky.h"
#include "llfloaterfixedenvironment.h"
#include "lldensityctrl.h"
//=========================================================================
class LLSlider;
class LLColorSwatchCtrl;
class LLTextureCtrl;
class LLDensityCtrl; // custom control for specifying various sky density settings
//=========================================================================
class LLPanelSettingsSky : public LLSettingsEditPanel
@ -49,7 +47,7 @@ public:
virtual void setSettings(const LLSettingsBase::ptr_t &settings) override { setSky(std::static_pointer_cast<LLSettingsSky>(settings)); }
LLSettingsSky::ptr_t getSky() const { return mSkySettings; }
void setSky(const LLSettingsSky::ptr_t &sky) { mSkySettings = sky; refresh(); }
void setSky(const LLSettingsSky::ptr_t &sky) { mSkySettings = sky; clearIsDirty(); refresh(); }
protected:
LLSettingsSky::ptr_t mSkySettings;
@ -144,25 +142,23 @@ public:
protected:
virtual void refresh() override;
// update the settings for our profile type
void updateProfile();
void onRayleighExponentialChanged();
void onRayleighExponentialScaleChanged();
void onRayleighLinearChanged();
void onRayleighConstantChanged();
LLDensityCtrl::DensityProfileType mProfileType;
std::string mControlName;
};
void onMieExponentialChanged();
void onMieExponentialScaleChanged();
void onMieLinearChanged();
void onMieConstantChanged();
void onMieAnisoFactorChanged();
class LLPanelSettingsDensity : public LLPanelSettingsSky
{
LOG_CLASS(LLPanelSettingsDensity);
void onAbsorptionExponentialChanged();
void onAbsorptionExponentialScaleChanged();
void onAbsorptionLinearChanged();
void onAbsorptionConstantChanged();
public:
LLPanelSettingsDensity();
virtual BOOL postBuild() override;
virtual void setEnabled(BOOL enabled) override;
protected:
virtual void refresh() override;
void onMaxAltitudeChanged();
// update the settings for our profile type
void updateProfile();

View File

@ -161,21 +161,25 @@ void LLPanelSettingsWaterMainTab::refresh()
void LLPanelSettingsWaterMainTab::onFogColorChanged()
{
mWaterSettings->setWaterFogColor(LLColor3(mClrFogColor->get()));
setIsDirty();
}
void LLPanelSettingsWaterMainTab::onFogDensityChanged()
{
mWaterSettings->setWaterFogDensity(getChild<LLUICtrl>(FIELD_WATER_FOG_DENSITY)->getValue().asReal());
setIsDirty();
}
void LLPanelSettingsWaterMainTab::onFogUnderWaterChanged()
{
mWaterSettings->setFogMod(getChild<LLUICtrl>(FIELD_WATER_UNDERWATER_MOD)->getValue().asReal());
setIsDirty();
}
void LLPanelSettingsWaterMainTab::onNormalMapChanged()
{
mWaterSettings->setNormalMapID(mTxtNormalMap->getImageAssetID());
setIsDirty();
}
@ -184,6 +188,7 @@ void LLPanelSettingsWaterMainTab::onLargeWaveChanged()
LLVector2 vect(getChild<LLUICtrl>(FIELD_WATER_WAVE1_XY)->getValue());
LL_WARNS("LAPRAS") << "Changing Large Wave from " << mWaterSettings->getWave1Dir() << " -> " << vect << LL_ENDL;
mWaterSettings->setWave1Dir(vect);
setIsDirty();
}
void LLPanelSettingsWaterMainTab::onSmallWaveChanged()
@ -191,6 +196,7 @@ void LLPanelSettingsWaterMainTab::onSmallWaveChanged()
LLVector2 vect(getChild<LLUICtrl>(FIELD_WATER_WAVE2_XY)->getValue());
LL_WARNS("LAPRAS") << "Changing Small Wave from " << mWaterSettings->getWave2Dir() << " -> " << vect << LL_ENDL;
mWaterSettings->setWave2Dir(vect);
setIsDirty();
}
@ -199,29 +205,35 @@ void LLPanelSettingsWaterMainTab::onNormalScaleChanged()
LLVector3 vect(getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_X)->getValue().asReal(), getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_Y)->getValue().asReal(), getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_Z)->getValue().asReal());
LL_WARNS("LAPRAS") << "Changing normal scale from " << mWaterSettings->getNormalScale() << " -> " << vect << LL_ENDL;
mWaterSettings->setNormalScale(vect);
setIsDirty();
}
void LLPanelSettingsWaterMainTab::onFresnelScaleChanged()
{
mWaterSettings->setFresnelScale(getChild<LLUICtrl>(FIELD_WATER_FRESNEL_SCALE)->getValue().asReal());
setIsDirty();
}
void LLPanelSettingsWaterMainTab::onFresnelOffsetChanged()
{
mWaterSettings->setFresnelOffset(getChild<LLUICtrl>(FIELD_WATER_FRESNEL_OFFSET)->getValue().asReal());
setIsDirty();
}
void LLPanelSettingsWaterMainTab::onScaleAboveChanged()
{
mWaterSettings->setScaleAbove(getChild<LLUICtrl>(FIELD_WATER_SCALE_ABOVE)->getValue().asReal());
setIsDirty();
}
void LLPanelSettingsWaterMainTab::onScaleBelowChanged()
{
mWaterSettings->setScaleBelow(getChild<LLUICtrl>(FIELD_WATER_SCALE_BELOW)->getValue().asReal());
setIsDirty();
}
void LLPanelSettingsWaterMainTab::onBlurMultipChanged()
{
mWaterSettings->setBlurMultiplier(getChild<LLUICtrl>(FIELD_WATER_BLUR_MULTIP)->getValue().asReal());
setIsDirty();
}

View File

@ -49,7 +49,7 @@ public:
virtual void setSettings(const LLSettingsBase::ptr_t &settings) override { setWater(std::static_pointer_cast<LLSettingsWater>(settings)); }
LLSettingsWater::ptr_t getWater() const { return mWaterSettings; }
void setWater(const LLSettingsWater::ptr_t &water) { mWaterSettings = water; refresh(); }
void setWater(const LLSettingsWater::ptr_t &water) { mWaterSettings = water; clearIsDirty(); refresh(); }
protected:
LLSettingsWater::ptr_t mWaterSettings;

View File

@ -119,7 +119,19 @@ void LLPanelEnvironmentInfo::onVisibilityChange(BOOL new_visibility)
if (new_visibility)
gIdleCallbacks.addFunction(onIdlePlay, this);
else
{
gIdleCallbacks.deleteFunction(onIdlePlay, this);
LLFloaterEditExtDayCycle *dayeditor = getEditFloater();
if (mCommitConnection.connected())
mCommitConnection.disconnect();
if (dayeditor)
{
if (dayeditor->isDirty())
dayeditor->refresh();
else
dayeditor->closeFloater();
}
}
}
@ -213,13 +225,13 @@ LLFloaterSettingsPicker *LLPanelEnvironmentInfo::getSettingsPicker()
return picker;
}
LLFloaterEditExtDayCycle * LLPanelEnvironmentInfo::getEditFloater()
LLFloaterEditExtDayCycle * LLPanelEnvironmentInfo::getEditFloater(bool create)
{
static const S32 FOURHOURS(4 * 60 * 60);
LLFloaterEditExtDayCycle *editor = static_cast<LLFloaterEditExtDayCycle *>(mEditFloater.get());
// Show the dialog
if (!editor)
if (!editor && create)
{
LLSD params(LLSDMap(LLFloaterEditExtDayCycle::KEY_EDIT_CONTEXT, (mCurrentParcelId == INVALID_PARCEL_ID) ? LLFloaterEditExtDayCycle::CONTEXT_REGION : LLFloaterEditExtDayCycle::CONTEXT_PARCEL)
(LLFloaterEditExtDayCycle::KEY_DAY_LENGTH, mCurrentEnvironment ? (S32)(mCurrentEnvironment->mDayLength.value()) : FOURHOURS));
@ -228,9 +240,11 @@ LLFloaterEditExtDayCycle * LLPanelEnvironmentInfo::getEditFloater()
if (!editor)
return nullptr;
editor->setEditCommitSignal([this](LLSettingsDay::ptr_t pday) { onEditCommited(pday); });
}
if (editor && !mCommitConnection.connected())
mCommitConnection = editor->setEditCommitSignal([this](LLSettingsDay::ptr_t pday) { onEditCommited(pday); });
return editor;
}

View File

@ -44,17 +44,16 @@ class LLPanelEnvironmentInfo : public LLPanel
public:
LLPanelEnvironmentInfo();
// LLPanel
virtual BOOL postBuild() override;
virtual void onOpen(const LLSD& key) override;
// LLView
virtual BOOL isDirty() const override { return getIsDirty(); }
virtual void onVisibilityChange(BOOL new_visibility) override;
virtual void refresh() override;
S32 getCurrentParcelId() const { return mCurrentParcelId; }
void setCurrentParcelId(S32 parcel_id) { mCurrentParcelId = parcel_id; }
S32 getCurrentParcelId() const { return mCurrentParcelId; }
void setCurrentParcelId(S32 parcel_id) { mCurrentParcelId = parcel_id; }
virtual bool isRegion() const = 0;
virtual LLParcel * getParcel() = 0;
@ -95,9 +94,9 @@ protected:
void setApplyProgress(bool started);
void setDirtyFlag(U32 flag);
void clearDirtyFlag(U32 flag);
bool getIsDirty() const { return (mDirtyFlag != 0); }
bool getIsDirtyFlag(U32 flag) const { return ((mDirtyFlag & flag) != 0); }
U32 getDirtyFlag() const { return mDirtyFlag; }
bool getIsDirty() const { return (mDirtyFlag != 0); }
bool getIsDirtyFlag(U32 flag) const { return ((mDirtyFlag & flag) != 0); }
U32 getDirtyFlag() const { return mDirtyFlag; }
void onSwitchDefaultSelection();
void onSldDayLengthChanged(F32 value);
@ -121,17 +120,21 @@ protected:
std::string getInventoryNameForAssetId(LLUUID asset_id);
LLFloaterSettingsPicker * getSettingsPicker();
LLFloaterEditExtDayCycle * getEditFloater();
LLFloaterEditExtDayCycle * getEditFloater(bool create = true);
LLEnvironment::EnvironmentInfo::ptr_t mCurrentEnvironment;
S32 mCurrentParcelId;
private:
static void onIdlePlay(void *);
LLHandle<LLFloater> mSettingsFloater;
LLHandle<LLFloater> mEditFloater;
S32 mDirtyFlag;
typedef boost::signals2::connection connection_t;
connection_t mCommitConnection;
LLHandle<LLFloater> mSettingsFloater;
LLHandle<LLFloater> mEditFloater;
S32 mDirtyFlag;
};
#endif // LL_LLPANELEXPERIENCES_H

View File

@ -227,6 +227,14 @@ void LLSettingsVOBase::onAgentAssetUploadComplete(LLUUID itemId, LLUUID newAsset
psettings->setAssetId(newAssetId);
if (callback)
callback( newAssetId, itemId, LLUUID::null, response );
#if 0
std::string exprtFile = gDirUtilp->getTempDir() + gDirUtilp->getDirDelimiter() + newAssetId.asString() + ".llsd";
LLSettingsVOBase::exportFile(psettings, exprtFile, LLSDSerialize::LLSD_NOTATION);
LL_WARNS("LAPRAS") << "SETTINGS File written as: '" << exprtFile << "'" << LL_ENDL;
#endif
}
void LLSettingsVOBase::onTaskAssetUploadComplete(LLUUID itemId, LLUUID taskId, LLUUID newAssetId, LLSD response, LLSettingsBase::ptr_t psettings, inventory_result_fn callback)
@ -579,6 +587,9 @@ void LLSettingsVOSky::updateSettings()
gSky.setMoonTextures(getMoonTextureId(), getNextMoonTextureId());
gSky.setCloudNoiseTextures(getCloudNoiseTextureId(), getNextCloudNoiseTextureId());
gSky.setBloomTextures(getBloomTextureId(), getNextBloomTextureId());
gSky.setSunScale(getSunScale());
gSky.setMoonScale(getMoonScale());
}
void LLSettingsVOSky::applySpecial(void *ptarget)

View File

@ -129,6 +129,22 @@ void LLSky::resetVertexBuffers()
}
}
void LLSky::setSunScale(F32 sun_scale)
{
if(mVOSkyp.notNull())
{
mVOSkyp->setSunScale(sun_scale);
}
}
void LLSky::setMoonScale(F32 moon_scale)
{
if(mVOSkyp.notNull())
{
mVOSkyp->setMoonScale(moon_scale);
}
}
void LLSky::setSunTextures(const LLUUID& sun_texture, const LLUUID& sun_texture_next)
{
if(mVOSkyp.notNull()) {

View File

@ -61,6 +61,9 @@ public:
void setCloudNoiseTextures(const LLUUID& cloud_noise_texture, const LLUUID& cloud_noise_texture_next);
void setBloomTextures(const LLUUID& bloom_texture, const LLUUID& bloom_texture_next);
void setSunScale(F32 sun_scale);
void setMoonScale(F32 moon_scale);
LLColor4 getSkyFogColor() const;
void setCloudDensityAtAgent(F32 cloud_density);

View File

@ -735,6 +735,10 @@ void LLViewerAssetUpload::AssetInventoryUploadCoproc(LLCoreHttpUtil::HttpCorouti
LLUploadDialog::modalUploadFinished();
return;
}
if (!result.has("success"))
{
result["success"] = LLSD::Boolean((ulstate == "complete") && status);
}
S32 uploadPrice = result["upload_price"].asInteger();//uploadInfo->getEconomyUploadCost();

View File

@ -133,7 +133,7 @@ void LLGridManager::initialize(const std::string& grid_file)
addSystemGrid(LLTrans::getString("AditiGridLabel"),
"util.aditi.lindenlab.com",
"https://login.aditi.lindenlab.com/cgi-bin/login.cgi",
"http://aditi-secondlife.webdev.lindenlab.com/helpers/",
"https://secondlife.aditi.lindenlab.com/helpers/",
DEFAULT_LOGIN_PAGE,
SL_UPDATE_QUERY_URL,
"https://my.aditi.lindenlab.com/",

View File

@ -1123,7 +1123,9 @@ BOOL LLViewerTextEditor::openEmbeddedItem(LLPointer<LLInventoryItem> item, llwch
case LLAssetType::AT_CALLINGCARD:
openEmbeddedCallingcard( item, wc );
return TRUE;
case LLAssetType::AT_SETTINGS:
openEmbeddedSetting(item, wc);
return TRUE;
case LLAssetType::AT_NOTECARD:
case LLAssetType::AT_LSL_TEXT:
case LLAssetType::AT_CLOTHING:
@ -1198,6 +1200,18 @@ void LLViewerTextEditor::openEmbeddedCallingcard( LLInventoryItem* item, llwchar
}
}
void LLViewerTextEditor::openEmbeddedSetting(LLInventoryItem* item, llwchar wc)
{
if (LLEnvironment::instance().isInventoryEnabled())
{
showCopyToInvDialog(item, wc);
}
else
{
LLNotificationsUtil::add("NoEnvironmentSettings");
}
}
void LLViewerTextEditor::showUnsavedAlertDialog( LLInventoryItem* item )
{
LLSD payload;

View File

@ -107,6 +107,7 @@ private:
void openEmbeddedSound( LLInventoryItem* item, llwchar wc );
void openEmbeddedLandmark( LLPointer<LLInventoryItem> item_ptr, llwchar wc );
void openEmbeddedCallingcard( LLInventoryItem* item, llwchar wc);
void openEmbeddedSetting(LLInventoryItem* item, llwchar wc);
void showCopyToInvDialog( LLInventoryItem* item, llwchar wc );
void showUnsavedAlertDialog( LLInventoryItem* item );

View File

@ -775,6 +775,16 @@ LLDrawable *LLVOSky::createDrawable(LLPipeline *pipeline)
return mDrawable;
}
void LLVOSky::setSunScale(F32 sun_scale)
{
mSunScale = sun_scale;
}
void LLVOSky::setMoonScale(F32 moon_scale)
{
mMoonScale = moon_scale;
}
void LLVOSky::setSunTextures(const LLUUID& sun_texture, const LLUUID& sun_texture_next)
{
// We test the UUIDs here because we explicitly do not want the default image returned by getFetchedTexture in that case...
@ -955,8 +965,8 @@ BOOL LLVOSky::updateGeometry(LLDrawable *drawable)
right.normalize();
up.normalize();
bool draw_sun = updateHeavenlyBodyGeometry(drawable, FACE_SUN, mSun, up, right);
bool draw_moon = updateHeavenlyBodyGeometry(drawable, FACE_MOON, mMoon, up, right);
bool draw_sun = updateHeavenlyBodyGeometry(drawable, mSunScale, FACE_SUN, mSun, up, right);
bool draw_moon = updateHeavenlyBodyGeometry(drawable, mMoonScale, FACE_MOON, mMoon, up, right);
draw_sun &= LLEnvironment::getInstance()->getIsSunUp();
draw_moon &= LLEnvironment::getInstance()->getIsMoonUp();
@ -987,7 +997,7 @@ BOOL LLVOSky::updateGeometry(LLDrawable *drawable)
return TRUE;
}
bool LLVOSky::updateHeavenlyBodyGeometry(LLDrawable *drawable, const S32 f, LLHeavenBody& hb, const LLVector3 &up, const LLVector3 &right)
bool LLVOSky::updateHeavenlyBodyGeometry(LLDrawable *drawable, F32 scale, const S32 f, LLHeavenBody& hb, const LLVector3 &up, const LLVector3 &right)
{
mHeavenlyBodyUpdated = TRUE ;
@ -1010,8 +1020,8 @@ bool LLVOSky::updateHeavenlyBodyGeometry(LLDrawable *drawable, const S32 f, LLHe
F32 horiz_enlargement = 1 + enlargm_factor * 0.3f;
F32 vert_enlargement = 1 + enlargm_factor * 0.2f;
const LLVector3 scaled_right = horiz_enlargement * HEAVENLY_BODY_DIST * HEAVENLY_BODY_FACTOR * hb.getDiskRadius() * hb_right;
const LLVector3 scaled_up = vert_enlargement * HEAVENLY_BODY_DIST * HEAVENLY_BODY_FACTOR * hb.getDiskRadius() * hb_up;
const LLVector3 scaled_right = horiz_enlargement * scale * HEAVENLY_BODY_DIST * HEAVENLY_BODY_FACTOR * hb.getDiskRadius() * hb_right;
const LLVector3 scaled_up = vert_enlargement * scale * HEAVENLY_BODY_DIST * HEAVENLY_BODY_FACTOR * hb.getDiskRadius() * hb_up;
LLVector3 v_clipped[4];

View File

@ -236,7 +236,7 @@ public:
void setSunDirectionCFR(const LLVector3 &sun_direction);
void setMoonDirectionCFR(const LLVector3 &moon_direction);
bool updateHeavenlyBodyGeometry(LLDrawable *drawable, const S32 side, LLHeavenBody& hb, const LLVector3 &up, const LLVector3 &right);
bool updateHeavenlyBodyGeometry(LLDrawable *drawable, F32 scale, const S32 side, LLHeavenBody& hb, const LLVector3 &up, const LLVector3 &right);
void updateReflectionGeometry(LLDrawable *drawable, F32 H, const LLHeavenBody& HB);
F32 getWorldScale() const { return mWorldScale; }
@ -278,6 +278,9 @@ public:
void setCloudNoiseTextures(const LLUUID& cloud_noise_texture, const LLUUID& cloud_noise_texture_next);
void setBloomTextures(const LLUUID& bloom_texture, const LLUUID& bloom_texture_next);
void setSunScale(F32 sun_scale);
void setMoonScale(F32 sun_scale);
void forceSkyUpdate(void) { mForceUpdate = TRUE; }
public:
@ -297,6 +300,9 @@ protected:
LLPointer<LLViewerFetchedTexture> mCloudNoiseTexturep[2];
LLPointer<LLViewerFetchedTexture> mBloomTexturep[2];
F32 mSunScale = 1.0f;
F32 mMoonScale = 1.0f;
static S32 sResolution;
static S32 sTileResX;
static S32 sTileResY;

View File

@ -695,6 +695,10 @@ with the same filename but different name
<texture name="VirtualTrackball_Rotate_Left" file_name="widgets/track_control_rotate_left_side.png" />
<texture name="VirtualTrackball_Rotate_Right" file_name="widgets/track_control_rotate_right_side.png" />
<texture name="VirtualTrackball_Rotate_Top" file_name="widgets/track_control_rotate_top.png" />
<texture name="VirtualTrackball_Rotate_Bottom_Active" file_name="widgets/track_control_rotate_bottom_active.png" />
<texture name="VirtualTrackball_Rotate_Left_Active" file_name="widgets/track_control_rotate_left_side_active.png" />
<texture name="VirtualTrackball_Rotate_Right_Active" file_name="widgets/track_control_rotate_right_side_active.png" />
<texture name="VirtualTrackball_Rotate_Top_Active" file_name="widgets/track_control_rotate_top_active.png" />
<texture name="VirtualTrackball_Sphere" file_name="widgets/track_control_sphere.png" />
<texture name="VirtualTrackball_Sun_Back" file_name="widgets/track_control_sun_back.png" />
<texture name="VirtualTrackball_Sun_Front" file_name="widgets/track_control_sun_front.png" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

View File

@ -3,13 +3,14 @@
layout="topleft"
name="env_edit_extdaycycle"
help_topic="day_presets"
save_rect="true"
save_rect="false"
title="Edit Day Cycle"
width="705"
height="650"
min_width="705"
min_height="650"
can_resize="true">
single_instance="true"
can_resize="false">
<!-- obsolete?, add as hint for 'save' button? -->
<string name="title_new">Create a New Day Cycle</string>
@ -400,8 +401,16 @@
width="90"
label="Add Frame"
left_pad="175"
top_delta="-12"
top_delta="-20"
name="add_frame" />
<button
follows="top|left"
height="23"
width="90"
label="Load Frame"
top_pad="0"
left_delta="0"
name="btn_load_frame" />
<button
follows="left|top"
height="23"
@ -421,36 +430,18 @@
visible="true">
<!--bg_alpha_color="blue"
background_visible="true" -->
<icon
border="1"
bevel_style="out"
<text
name="icn_lock_edit"
layout="bottomleft"
follows="bottom"
image_name="Locked_Icon"
bottom="4"
left="5"
height="15"
width="15"
tab_stop="false"
visible="false"
tool_tip="Select a key frame above to edit settings"/>
<button
name="btn_load_frame"
follows="top"
image_overlay="Command_Inventory_Icon"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
hover_glow_amount="0.15"
auto_resize="false"
layout="topleft"
height="30"
width="30"
left="25"
top="1"
tool_tip="Replace frame with settings from inventory"/>
height="10"
layout="bottomleft"
left_delta="15"
top_pad="15"
font="SansSerif"
text_color="Yellow"
width="500">
Select a key frame from the timeline above to edit settings.
</text>
</layout_panel>
<layout_panel name="frame_settings_water"
auto_resize="true"
@ -537,7 +528,7 @@
layout="topleft"
left_delta="0"
top_pad="5"
name="advanced_atmo_panel" />
name="sky_density_panel" />
</tab_container>
</layout_panel>
</layout_stack>

View File

@ -2,20 +2,19 @@
<floater
can_minimize="false"
can_tear_off="false"
can_resize="true"
can_resize="false"
can_drag_on_left="false"
can_close="true"
can_dock="true"
can_dock="false"
bevel_style="in"
height="500"
height="550"
layout="topleft"
name="Fixed Environment"
save_rect="true"
title="Fixed Environment"
save_dock_state="true"
save_visibility="true"
save_visibility="false"
single_instance="true"
width="650">
width="750">
<layout_stack name="floater_stack"
left="5"
top="5"

View File

@ -11183,5 +11183,19 @@ Settings are not supported on this region.
Please move to a settings enabled region and retry your action.
<tag>fail</tag>
</notification>
<notification
icon="alertmodal.tga"
name="SettingsConfirmLoss"
type="alertmodal">
You are about to lose the changes you have made to this [TYPE] named "[NAME]".
Are you sure you want to continue?
<tag>confirm</tag>
<usetemplate
ignoretext="Are you sure you want to lose changes?"
name="okcancelignore"
notext="No"
yestext="Yes"/>
</notification>
</notifications>

View File

@ -29,8 +29,8 @@
valign="top"
top_pad="20"
text_color="white">
Parcel environmental settings are
disabled on legacy regions.
No Parcel parcel is selected. Environmental
settings are disabled.
</text>
</layout_panel>
<layout_panel

View File

@ -1,32 +1,262 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
border="true"
follows="all"
label="Density"
name="panel_settings_sky_density"
layout="topleft"
left="0"
top="0"
width="320"
height="240">
<tab_container>
<panel>
name="panel_settings_sky_density_rayleigh"
<densityctrl>
name = "density_rayleigh"
</densityctrl>
</panel>
<panel>
name="panel_settings_sky_density_mie"
<densityctrl>
name = "density_mie"
</densityctrl>
</panel>
<panel>
name="panel_settings_sky_density_absorption"
<densityctrl>
name = "density_absorption"
</densityctrl>
</panel>
</tab_container>
</panel>
border="true"
follows="all"
label="Density"
layout="topleft"
left="0"
help_topic="sky_density"
name="panel_settings_sky_density"
top="0">
<layout_stack
follows="all"
layout="topleft"
left="5"
top="5"
right="-5"
bottom="-5"
orientation="vertical">
<layout_panel
border="true"
bevel_style="in"
auto_resize="true"
user_resize="true"
visible="true"
height="28">
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="1"
name="rayleigh_exponential"
label="Rayleigh Exponential Term:"
top_delta="8"
width="400"
can_edit_text="true"/>
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="1"
name="rayleigh_exponential_scale"
label="Rayleigh Exponential Scale:"
top_delta="8"
width="400"
can_edit_text="true"/>
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="1"
name="rayleigh_linear"
label="Rayleigh Linear Term:"
top_delta="8"
width="400"
can_edit_text="true"/>
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="1"
name="rayleigh_constant"
label="Rayleigh Constant Term:"
top_delta="8"
width="400"
can_edit_text="true"/>
</layout_panel>
<layout_panel
border="true"
bevel_style="in"
auto_resize="true"
user_resize="true"
visible="true"
height="28">
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="3.0"
name="mie_exponential"
label="Mie Exponential Term:"
top_delta="8"
width="400"
can_edit_text="true"/>
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="1"
name="mie_exponential_scale"
label="Mie Exponential Scale:"
top_delta="8"
width="400"
can_edit_text="true"/>
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="3.0"
name="mie_linear"
label="Mie Linear Term:"
top_delta="8"
width="400"
can_edit_text="true"/>
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="10"
name="mie_constant"
label="Mie Constant Term:"
top_delta="8"
width="400"
can_edit_text="true"/>
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0.2"
max_val="1.8"
name="mie_aniso_factor"
label="Mie Aniso Factor:"
top_delta="8"
width="400"
can_edit_text="true"/>
</layout_panel>
<layout_panel
border="true"
bevel_style="in"
auto_resize="true"
user_resize="true"
visible="true"
height="28">
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="1"
name="absorption_exponential"
label="Absorption Exponential Term:"
top_delta="8"
width="400"
can_edit_text="true"/>
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="1"
name="absorption_exponential_scale"
label="Absorption Exponential Scale:"
top_delta="8"
width="400"
can_edit_text="true"/>
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="1"
name="absorption_linear"
label="Absorption Linear Term:"
top_delta="8"
width="400"
can_edit_text="true"/>
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="1"
name="absorption_constant"
label="Absorption Constant Term:"
top_delta="8"
width="400"
can_edit_text="true"/>
</layout_panel>
<layout_panel
border="true"
bevel_style="in"
auto_resize="true"
user_resize="true"
visible="true"
height="16">
<slider
decimal_digits="2"
follows="left|top"
height="16"
increment="1"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="1000"
max_val="40000"
name="max_altitude"
label="Max Altitude:"
top_delta="8"
width="400"
can_edit_text="true"/>
</layout_panel>
</layout_stack>
</panel>

View File

@ -260,7 +260,7 @@
left_delta="5"
min_val="0.25"
max_val="20"
name="sun_scale"
name="moon_scale"
top_delta="15"
width="130"
can_edit_text="true"/>

View File

@ -2780,6 +2780,7 @@ If you continue to receive this message, please contact Second Life support for
<!-- Environment settings -->
<string name="LocalSettings">Local Settings</string>
<string name="RegionSettings">Region Settings</string>
<string name="NoEnvironmentSettings">This Region does not support environmental settings.</string>
<!-- panel classified -->
<string name="ClassifiedClicksTxt">Clicks: [TELEPORT] teleport, [MAP] map, [PROFILE] profile</string>

View File

@ -43,26 +43,26 @@
<sun_moon_trackball.button_rotate_top
name="btn_rotate_top"
image_unselected="VirtualTrackball_Rotate_Top"
image_selected="VirtualTrackball_Rotate_Top"
image_disabled="VirtualTrackball_Rotate_Top" />
image_selected="VirtualTrackball_Rotate_Top_Active"
image_disabled="Blank" />
<sun_moon_trackball.button_rotate_bottom
name="btn_rotate_bottom"
image_unselected="VirtualTrackball_Rotate_Bottom"
image_selected="VirtualTrackball_Rotate_Bottom"
image_disabled="VirtualTrackball_Rotate_Bottom" />
image_selected="VirtualTrackball_Rotate_Bottom_Active"
image_disabled="Blank" />
<sun_moon_trackball.button_rotate_left
name="btn_rotate_left"
image_unselected="VirtualTrackball_Rotate_Left"
image_selected="VirtualTrackball_Rotate_Left"
image_disabled="VirtualTrackball_Rotate_Left" />
image_selected="VirtualTrackball_Rotate_Left_Active"
image_disabled="Blank" />
<sun_moon_trackball.button_rotate_right
name="btn_rotate_right"
image_unselected="VirtualTrackball_Rotate_Right"
image_selected="VirtualTrackball_Rotate_Right"
image_disabled="VirtualTrackball_Rotate_Right" />
image_selected="VirtualTrackball_Rotate_Right_Active"
image_disabled="Blank" />
</sun_moon_trackball>

View File

@ -258,7 +258,7 @@ namespace tut
std::string("https://login.aditi.lindenlab.com/cgi-bin/login.cgi"));
ensure_equals("Aditi helper uri",
LLGridManager::getInstance()->getHelperURI("util.aditi.lindenlab.com"),
std::string("http://aditi-secondlife.webdev.lindenlab.com/helpers/"));
std::string("https://secondlife.aditi.lindenlab.com/helpers/"));
ensure_equals("Aditi login page",
LLGridManager::getInstance()->getLoginPage("util.aditi.lindenlab.com"),
std::string("https://viewer-splash.secondlife.com/"));
@ -330,7 +330,7 @@ namespace tut
std::string("https://login.aditi.lindenlab.com/cgi-bin/login.cgi"));
ensure_equals("Aditi helper uri",
LLGridManager::getInstance()->getHelperURI("util.aditi.lindenlab.com"),
std::string("http://aditi-secondlife.webdev.lindenlab.com/helpers/"));
std::string("https://secondlife.aditi.lindenlab.com/helpers/"));
ensure_equals("Aditi login page",
LLGridManager::getInstance()->getLoginPage("util.aditi.lindenlab.com"),
std::string("https://viewer-splash.secondlife.com/"));