merge fix for STORM-616

master
Oz Linden 2010-11-19 15:52:52 -05:00
commit 0f72f152e8
34 changed files with 900 additions and 580 deletions

View File

@ -35,3 +35,4 @@ b0cd7e150009809a0b5b0a9d5785cd4bb230413a 2.2.0-beta3
a3c12342b1af0951b8aa3b828aacef17fcea8178 2.3.0-beta1
db0fe9bb65187f365e58a717dd23d0f4754a9c1d 2.3.0-beta2
6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-beta3
6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-release

View File

@ -51,7 +51,7 @@ viewer-release.viewer_channel = "Second Life Release"
viewer-release.login_channel = "Second Life Release"
viewer-release.build_debug_release_separately = true
viewer-release.build_viewer_update_version_manager = true
viewer-release.release-viewer.jira = DRTVWR-13
# ========================================
# aimee

View File

@ -770,6 +770,7 @@ WolfPup Lowenhar
STORM-143
STORM-535
STORM-544
STORM-654
VWR-20741
VWR-20933
Zai Lynch

View File

@ -1365,6 +1365,17 @@
<key>Value</key>
<integer>1</integer>
</map>
<key>LetterKeysFocusChatBar</key>
<map>
<key>Comment</key>
<string>When printable characters keys (possibly with Shift held) are pressed, the chatbar takes focus</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ChatBubbleOpacity</key>
<map>
<key>Comment</key>
@ -8340,6 +8351,17 @@
<key>Value</key>
<real>1.0</real>
</map>
<key>RenderTransparentWater</key>
<map>
<key>Comment</key>
<string>Render water as transparent. Setting to false renders water as opaque with a simple texture applied.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>RenderTreeLODFactor</key>
<map>
<key>Comment</key>

View File

@ -42,6 +42,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 4
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 1.0
RenderUseImpostors 1 1
RenderVBOEnable 1 1
@ -80,6 +81,7 @@ RenderObjectBump 1 0
RenderReflectionDetail 1 0
RenderTerrainDetail 1 0
RenderTerrainLODFactor 1 1
RenderTransparentWater 1 0
RenderTreeLODFactor 1 0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 0.5
@ -108,6 +110,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 0
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 1.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 0.5
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
@ -135,6 +138,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 2
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 0.5
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
@ -162,6 +166,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 4
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 1.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 2.0

View File

@ -42,6 +42,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 4
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 1.0
RenderUseImpostors 1 1
RenderVBOEnable 1 1
@ -79,6 +80,7 @@ RenderObjectBump 1 0
RenderReflectionDetail 1 0
RenderTerrainDetail 1 0
RenderTerrainLODFactor 1 1
RenderTransparentWater 1 0
RenderTreeLODFactor 1 0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 0.5
@ -107,6 +109,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 0
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 1.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 0.5
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
@ -134,6 +137,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 2
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 0.5
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
@ -161,6 +165,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 4
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 1.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 2.0

View File

@ -43,6 +43,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 3
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 1.0
RenderUseImpostors 1 1
RenderVBOEnable 1 1
@ -80,6 +81,7 @@ RenderObjectBump 1 0
RenderReflectionDetail 1 0
RenderTerrainDetail 1 0
RenderTerrainLODFactor 1 1
RenderTransparentWater 1 0
RenderTreeLODFactor 1 0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 0.5
@ -107,6 +109,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 0
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 1.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 0.5
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
@ -133,6 +136,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 2
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 0.5
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
@ -159,6 +163,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 3
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 1.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 2.0

View File

@ -42,6 +42,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 4
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 1.0
RenderUseImpostors 1 1
RenderVBOEnable 1 1
@ -80,6 +81,7 @@ RenderObjectBump 1 0
RenderReflectionDetail 1 0
RenderTerrainDetail 1 0
RenderTerrainLODFactor 1 1
RenderTransparentWater 1 0
RenderTreeLODFactor 1 0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 0.5
@ -108,6 +110,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 0
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 1.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 0.5
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
@ -135,6 +138,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 2
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 0.5
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 1.125
@ -162,6 +166,7 @@ RenderObjectBump 1 1
RenderReflectionDetail 1 4
RenderTerrainDetail 1 1
RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 1.0
RenderUseImpostors 1 1
RenderVolumeLODFactor 1 2.0

View File

@ -48,7 +48,8 @@
#include "llviewershadermgr.h"
#include "llwaterparammanager.h"
const LLUUID WATER_TEST("2bfd3884-7e27-69b9-ba3a-3e673f680004");
const LLUUID TRANSPARENT_WATER_TEXTURE("2bfd3884-7e27-69b9-ba3a-3e673f680004");
const LLUUID OPAQUE_WATER_TEXTURE("43c32285-d658-1793-c123-bf86315de055");
static float sTime;
@ -71,10 +72,14 @@ LLDrawPoolWater::LLDrawPoolWater() :
gGL.getTexUnit(0)->bind(mHBTex[1]);
mHBTex[1]->setAddressMode(LLTexUnit::TAM_CLAMP);
mWaterImagep = LLViewerTextureManager::getFetchedTexture(WATER_TEST);
mWaterImagep->setNoDelete() ;
mWaterImagep = LLViewerTextureManager::getFetchedTexture(TRANSPARENT_WATER_TEXTURE);
llassert(mWaterImagep);
mWaterImagep->setNoDelete();
mOpaqueWaterImagep = LLViewerTextureManager::getFetchedTexture(OPAQUE_WATER_TEXTURE);
llassert(mOpaqueWaterImagep);
mWaterNormp = LLViewerTextureManager::getFetchedTexture(DEFAULT_WATER_NORMAL);
mWaterNormp->setNoDelete() ;
mWaterNormp->setNoDelete();
restoreGL();
}
@ -161,6 +166,14 @@ void LLDrawPoolWater::render(S32 pass)
std::sort(mDrawFace.begin(), mDrawFace.end(), LLFace::CompareDistanceGreater());
// See if we are rendering water as opaque or not
if (!gSavedSettings.getBOOL("RenderTransparentWater"))
{
// render water for low end hardware
renderOpaqueLegacyWater();
return;
}
LLGLEnable blend(GL_BLEND);
if ((mVertexShaderLevel > 0) && !sSkipScreenCopy)
@ -314,6 +327,87 @@ void LLDrawPoolWater::render(S32 pass)
gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
// for low end hardware
void LLDrawPoolWater::renderOpaqueLegacyWater()
{
LLVOSky *voskyp = gSky.mVOSkyp;
stop_glerror();
// Depth sorting and write to depth buffer
// since this is opaque, we should see nothing
// behind the water. No blending because
// of no transparency. And no face culling so
// that the underside of the water is also opaque.
LLGLDepthTest gls_depth(GL_TRUE, GL_TRUE);
LLGLDisable no_cull(GL_CULL_FACE);
LLGLDisable no_blend(GL_BLEND);
gPipeline.disableLights();
mOpaqueWaterImagep->addTextureStats(1024.f*1024.f);
// Activate the texture binding and bind one
// texture since all images will have the same texture
gGL.getTexUnit(0)->activate();
gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(0)->bind(mOpaqueWaterImagep);
// Automatically generate texture coords for water texture
glEnable(GL_TEXTURE_GEN_S); //texture unit 0
glEnable(GL_TEXTURE_GEN_T); //texture unit 0
glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
// Use the fact that we know all water faces are the same size
// to save some computation
// Slowly move texture coordinates over time so the watter appears
// to be moving.
F32 movement_period_secs = 50.f;
F32 offset = fmod(gFrameTimeSeconds, movement_period_secs);
if (movement_period_secs != 0)
{
offset /= movement_period_secs;
}
else
{
offset = 0;
}
F32 tp0[4] = { 16.f / 256.f, 0.0f, 0.0f, offset };
F32 tp1[4] = { 0.0f, 16.f / 256.f, 0.0f, offset };
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0);
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1);
glColor3f(1.f, 1.f, 1.f);
for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
iter != mDrawFace.end(); iter++)
{
LLFace *face = *iter;
if (voskyp->isReflFace(face))
{
continue;
}
face->renderIndexed();
}
stop_glerror();
// Reset the settings back to expected values
glDisable(GL_TEXTURE_GEN_S); //texture unit 0
glDisable(GL_TEXTURE_GEN_T); //texture unit 0
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
void LLDrawPoolWater::renderReflection(LLFace* face)
{
LLVOSky *voskyp = gSky.mVOSkyp;

View File

@ -39,6 +39,7 @@ class LLDrawPoolWater: public LLFacePool
protected:
LLPointer<LLViewerTexture> mHBTex[2];
LLPointer<LLViewerTexture> mWaterImagep;
LLPointer<LLViewerTexture> mOpaqueWaterImagep;
LLPointer<LLViewerTexture> mWaterNormp;
public:
@ -80,6 +81,9 @@ public:
void renderReflection(LLFace* face);
void shade();
protected:
void renderOpaqueLegacyWater();
};
void cgErrorCallback();

View File

@ -282,7 +282,8 @@ std::string LLFloaterPreference::sSkin = "";
LLFloaterPreference::LLFloaterPreference(const LLSD& key)
: LLFloater(key),
mGotPersonalInfo(false),
mOriginalIMViaEmail(false)
mOriginalIMViaEmail(false),
mDoubleClickActionDirty(false)
{
//Build Floater is now Called from LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
@ -320,6 +321,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.getUIColor", boost::bind(&LLFloaterPreference::getUIColor, this ,_1, _2));
mCommitCallbackRegistrar.add("Pref.MaturitySettings", boost::bind(&LLFloaterPreference::onChangeMaturity, this));
mCommitCallbackRegistrar.add("Pref.BlockList", boost::bind(&LLFloaterPreference::onClickBlockList, this));
mCommitCallbackRegistrar.add("Pref.CommitDoubleClickChekbox", boost::bind(&LLFloaterPreference::onDoubleClickCheckBox, this, _1));
mCommitCallbackRegistrar.add("Pref.CommitRadioDoubleClick", boost::bind(&LLFloaterPreference::onDoubleClickRadio, this));
sSkin = gSavedSettings.getString("SkinCurrent");
@ -342,6 +345,8 @@ BOOL LLFloaterPreference::postBuild()
if (!tabcontainer->selectTab(gSavedSettings.getS32("LastPrefTab")))
tabcontainer->selectFirstTab();
updateDoubleClickControls();
getChild<LLUICtrl>("cache_location")->setEnabled(FALSE); // make it read-only but selectable (STORM-227)
std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
setCacheLocation(cache_location);
@ -475,6 +480,12 @@ void LLFloaterPreference::apply()
gAgent.sendAgentUpdateUserInfo(new_im_via_email,mDirectoryVisibility);
}
}
if (mDoubleClickActionDirty)
{
updateDoubleClickSettings();
mDoubleClickActionDirty = false;
}
}
void LLFloaterPreference::cancel()
@ -501,6 +512,12 @@ void LLFloaterPreference::cancel()
// reverts any changes to current skin
gSavedSettings.setString("SkinCurrent", sSkin);
if (mDoubleClickActionDirty)
{
updateDoubleClickControls();
mDoubleClickActionDirty = false;
}
}
void LLFloaterPreference::onOpen(const LLSD& key)
@ -1318,6 +1335,68 @@ void LLFloaterPreference::onClickBlockList()
}
}
void LLFloaterPreference::onDoubleClickCheckBox(LLUICtrl* ctrl)
{
if (!ctrl) return;
mDoubleClickActionDirty = true;
LLRadioGroup* radio_double_click_action = getChild<LLRadioGroup>("double_click_action");
if (!radio_double_click_action) return;
// select default value("teleport") in radio-group.
radio_double_click_action->setSelectedIndex(0);
// set radio-group enabled depending on state of checkbox
radio_double_click_action->setEnabled(ctrl->getValue());
}
void LLFloaterPreference::onDoubleClickRadio()
{
mDoubleClickActionDirty = true;
}
void LLFloaterPreference::updateDoubleClickSettings()
{
LLCheckBoxCtrl* double_click_action_cb = getChild<LLCheckBoxCtrl>("double_click_chkbox");
if (!double_click_action_cb) return;
bool enable = double_click_action_cb->getValue().asBoolean();
LLRadioGroup* radio_double_click_action = getChild<LLRadioGroup>("double_click_action");
if (!radio_double_click_action) return;
// enable double click radio-group depending on state of checkbox
radio_double_click_action->setEnabled(enable);
if (!enable)
{
// set double click action settings values to false if checkbox was unchecked
gSavedSettings.setBOOL("DoubleClickAutoPilot", false);
gSavedSettings.setBOOL("DoubleClickTeleport", false);
}
else
{
std::string selected = radio_double_click_action->getValue().asString();
bool teleport_selected = selected == "radio_teleport";
// set double click action settings values depending on chosen radio-button
gSavedSettings.setBOOL( "DoubleClickTeleport", teleport_selected );
gSavedSettings.setBOOL( "DoubleClickAutoPilot", !teleport_selected );
}
}
void LLFloaterPreference::updateDoubleClickControls()
{
// check is one of double-click actions settings enabled
bool double_click_action_enabled = gSavedSettings.getBOOL("DoubleClickAutoPilot") || gSavedSettings.getBOOL("DoubleClickTeleport");
LLCheckBoxCtrl* double_click_action_cb = getChild<LLCheckBoxCtrl>("double_click_chkbox");
if (double_click_action_cb)
{
// check checkbox if one of double-click actions settings enabled, uncheck otherwise
double_click_action_cb->setValue(double_click_action_enabled);
}
LLRadioGroup* double_click_action_radio = getChild<LLRadioGroup>("double_click_action");
if (!double_click_action_radio) return;
// set radio-group enabled if one of double-click actions settings enabled
double_click_action_radio->setEnabled(double_click_action_enabled);
// select button in radio-group depending on setting
double_click_action_radio->setSelectedIndex(gSavedSettings.getBOOL("DoubleClickAutoPilot"));
}
void LLFloaterPreference::applyUIColor(LLUICtrl* ctrl, const LLSD& param)
{

View File

@ -95,6 +95,14 @@ protected:
void setHardwareDefaults();
// callback for when client turns on shaders
void onVertexShaderEnable();
// callback for changing double click action checkbox
void onDoubleClickCheckBox(LLUICtrl* ctrl);
// callback for selecting double click action radio-button
void onDoubleClickRadio();
// updates double-click action settings depending on controls from preferences
void updateDoubleClickSettings();
// updates double-click action controls depending on values from settings.xml
void updateDoubleClickControls();
// This function squirrels away the current values of the controls so that
// cancel() can restore them.
@ -145,6 +153,9 @@ public:
static void refreshSkin(void* data);
private:
static std::string sSkin;
// set true if state of double-click action checkbox or radio-group was changed by user
// (reset back to false on apply or cancel)
bool mDoubleClickActionDirty;
bool mGotPersonalInfo;
bool mOriginalIMViaEmail;

View File

@ -87,7 +87,6 @@ LLHUDNameTag::LLHUDNameTag(const U8 type)
mZCompare(TRUE),
mVisibleOffScreen(FALSE),
mOffscreen(FALSE),
mColor(1.f, 1.f, 1.f, 1.f),
// mScale(),
mWidth(0.f),
mHeight(0.f),
@ -109,6 +108,8 @@ LLHUDNameTag::LLHUDNameTag(const U8 type)
{
LLPointer<LLHUDNameTag> ptr(this);
sTextObjects.insert(ptr);
mColor = LLUIColorTable::instance().getColor("BackgroundChatColor");
}
LLHUDNameTag::~LLHUDNameTag()
@ -256,6 +257,7 @@ void LLHUDNameTag::renderText(BOOL for_select)
LLColor4 shadow_color(0.f, 0.f, 0.f, 1.f);
F32 alpha_factor = 1.f;
mColor = LLUIColorTable::instance().getColor("BackgroundChatColor");
LLColor4 text_color = mColor;
if (mDoFade)
{
@ -521,7 +523,6 @@ void LLHUDNameTag::renderText(BOOL for_select)
x_offset += 1;
}
text_color = segment_iter->mColor;
text_color.mV[VALPHA] *= alpha_factor;
hud_render_text(segment_iter->getText(), render_position, *fontp, style, shadow, x_offset, y_offset, text_color, FALSE);

View File

@ -537,7 +537,15 @@ bool LLIMModel::LLIMSession::isOtherParticipantAvaline()
void LLIMModel::LLIMSession::onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name)
{
mHistoryFileName = av_name.mUsername;
if (av_name.mUsername.empty())
{
// display names is off, use mDisplayName which will be the legacy name
mHistoryFileName = LLCacheName::buildUsername(av_name.mDisplayName);
}
else
{
mHistoryFileName = av_name.mUsername;
}
}
void LLIMModel::LLIMSession::buildHistoryFileName()

View File

@ -329,15 +329,23 @@ void LLPanelMainInventory::setSortBy(const LLSD& userdata)
if (sort_field == "name")
{
U32 order = getActivePanel()->getSortOrder();
getActivePanel()->setSortOrder( order & ~LLInventoryFilter::SO_DATE );
order &= ~LLInventoryFilter::SO_DATE;
getActivePanel()->setSortOrder( order );
gSavedSettings.setU32("InventorySortOrder", order);
gSavedSettings.setBOOL("Inventory.SortByName", TRUE );
gSavedSettings.setBOOL("Inventory.SortByDate", FALSE );
}
else if (sort_field == "date")
{
U32 order = getActivePanel()->getSortOrder();
getActivePanel()->setSortOrder( order | LLInventoryFilter::SO_DATE );
order |= LLInventoryFilter::SO_DATE;
getActivePanel()->setSortOrder( order );
gSavedSettings.setU32("InventorySortOrder", order);
gSavedSettings.setBOOL("Inventory.SortByName", FALSE );
gSavedSettings.setBOOL("Inventory.SortByDate", TRUE );
@ -375,6 +383,8 @@ void LLPanelMainInventory::setSortBy(const LLSD& userdata)
gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", TRUE );
}
getActivePanel()->setSortOrder( order );
gSavedSettings.setU32("InventorySortOrder", order);
}
}
@ -915,6 +925,7 @@ void LLPanelMainInventory::initListCommandsHandlers()
));
mCommitCallbackRegistrar.add("Inventory.GearDefault.Custom.Action", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));
mEnableCallbackRegistrar.add("Inventory.GearDefault.Check", boost::bind(&LLPanelMainInventory::isActionChecked, this, _2));
mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));
mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
mGearMenuButton->setMenu(mMenuGearDefault);
@ -1000,6 +1011,11 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
const LLSD arg = "date";
setSortBy(arg);
}
if (command_name == "sort_system_folders_to_top")
{
const LLSD arg = "systemfolderstotop";
setSortBy(arg);
}
if (command_name == "show_filters")
{
toggleFindOptions();
@ -1173,6 +1189,31 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
return TRUE;
}
BOOL LLPanelMainInventory::isActionChecked(const LLSD& userdata)
{
const std::string command_name = userdata.asString();
if (command_name == "sort_by_name")
{
U32 order = getActivePanel()->getSortOrder();
return ~order & LLInventoryFilter::SO_DATE;
}
if (command_name == "sort_by_recent")
{
U32 order = getActivePanel()->getSortOrder();
return order & LLInventoryFilter::SO_DATE;
}
if (command_name == "sort_system_folders_to_top")
{
U32 order = getActivePanel()->getSortOrder();
return order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
}
return FALSE;
}
bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept)
{
*accept = ACCEPT_NO;

View File

@ -136,6 +136,7 @@ protected:
void onTrashButtonClick();
void onClipboardAction(const LLSD& userdata);
BOOL isActionEnabled(const LLSD& command_name);
BOOL isActionChecked(const LLSD& userdata);
void onCustomAction(const LLSD& command_name);
bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept);
/**

View File

@ -117,10 +117,23 @@ static bool handleSetShaderChanged(const LLSD& newvalue)
gBumpImageList.destroyGL();
gBumpImageList.restoreGL();
// Changing shader also changes the terrain detail to high, reflect that change here
if (newvalue.asBoolean())
{
// shaders enabled, set terrain detail to high
gSavedSettings.setS32("RenderTerrainDetail", 1);
}
// else, leave terrain detail as is
LLViewerShaderMgr::instance()->setShaders();
return true;
}
bool handleRenderTransparentWaterChanged(const LLSD& newvalue)
{
LLWorld::getInstance()->updateWaterObjects();
return true;
}
static bool handleReleaseGLBufferChanged(const LLSD& newvalue)
{
if (gPipeline.isInit())
@ -637,6 +650,7 @@ void settings_setup_listeners()
gSavedSettings.getControl("ShowMiniLocationPanel")->getSignal()->connect(boost::bind(&toggle_show_mini_location_panel, _2));
gSavedSettings.getControl("ShowObjectRenderingCost")->getSignal()->connect(boost::bind(&toggle_show_object_render_cost, _2));
gSavedSettings.getControl("ForceShowGrid")->getSignal()->connect(boost::bind(&handleForceShowGrid, _2));
gSavedSettings.getControl("RenderTransparentWater")->getSignal()->connect(boost::bind(&handleRenderTransparentWaterChanged, _2));
}
#if TEST_CACHED_CONTROL

View File

@ -6500,16 +6500,6 @@ class LLToggleControl : public view_listener_t
std::string control_name = userdata.asString();
BOOL checked = gSavedSettings.getBOOL( control_name );
gSavedSettings.setBOOL( control_name, !checked );
// Doubleclick actions - there can be only one
if ((control_name == "DoubleClickAutoPilot") && !checked)
{
gSavedSettings.setBOOL( "DoubleClickTeleport", FALSE );
}
else if ((control_name == "DoubleClickTeleport") && !checked)
{
gSavedSettings.setBOOL( "DoubleClickAutoPilot", FALSE );
}
return true;
}
};

View File

@ -2266,6 +2266,20 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
return TRUE;
}
// If "Pressing letter keys starts local chat" option is selected, we are not in mouselook,
// no view has keyboard focus, this is a printable character key (and no modifier key is
// pressed except shift), then give focus to nearby chat (STORM-560)
if ( gSavedSettings.getS32("LetterKeysFocusChatBar") && !gAgentCamera.cameraMouselook() &&
!keyboard_focus && key < 0x80 && (mask == MASK_NONE || mask == MASK_SHIFT) )
{
LLLineEditor* chat_editor = LLBottomTray::instanceExists() ? LLBottomTray::getInstance()->getNearbyChatBar()->getChatBox() : NULL;
if (chat_editor)
{
// passing NULL here, character will be added later when it is handled by character handler.
LLBottomTray::getInstance()->getNearbyChatBar()->startChat(NULL);
return TRUE;
}
}
// give menus a chance to handle unmodified accelerator keys
if ((gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask))

View File

@ -60,8 +60,10 @@ const U32 WIDTH = (N_RES * WAVE_STEP); //128.f //64 // width of wave tile, in
const F32 WAVE_STEP_INV = (1. / WAVE_STEP);
LLVOWater::LLVOWater(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
: LLStaticViewerObject(id, pcode, regionp),
LLVOWater::LLVOWater(const LLUUID &id,
const LLPCode pcode,
LLViewerRegion *regionp) :
LLStaticViewerObject(id, pcode, regionp),
mRenderType(LLPipeline::RENDER_TYPE_WATER)
{
// Terrain must draw during selection passes so it can block objects behind it.
@ -153,11 +155,17 @@ BOOL LLVOWater::updateGeometry(LLDrawable *drawable)
LLStrider<U16> indicesp;
U16 index_offset;
S32 size = 16;
S32 num_quads = size*size;
face->setSize(4*num_quads, 6*num_quads);
// A quad is 4 vertices and 6 indices (making 2 triangles)
static const unsigned int vertices_per_quad = 4;
static const unsigned int indices_per_quad = 6;
const S32 size = gSavedSettings.getBOOL("RenderTransparentWater") ? 16 : 1;
const S32 num_quads = size * size;
face->setSize(vertices_per_quad * num_quads,
indices_per_quad * num_quads);
if (face->mVertexBuffer.isNull())
{
face->mVertexBuffer = new LLVertexBuffer(LLDrawPoolWater::VERTEX_DATA_MASK, GL_DYNAMIC_DRAW_ARB);

View File

@ -160,7 +160,7 @@
layout="topleft"
left="10"
height="70"
top="54"
top="59"
name="focus_radio_group">
<radio_item
top_pad="6"
@ -197,7 +197,7 @@
<radio_group
left="10"
height="70"
top="54"
top="59"
layout="topleft"
name="move_radio_group">
<radio_item
@ -931,7 +931,7 @@
height="23"
image_overlay="Edit_Wrench"
layout="topleft"
left_pad="3"
left_pad="13"
name="button set group"
tab_stop="false"
tool_tip="Choose a group to share this object's permissions"
@ -944,7 +944,7 @@
name="checkbox share with group"
tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."
top_pad="10"
left="106"
left="100"
width="87" />
<button
follows="top|left"
@ -953,7 +953,7 @@
label_selected="Deed"
layout="topleft"
name="button deed"
left_pad="3"
left_pad="19"
tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer."
width="80" />
<text
@ -974,7 +974,7 @@
layout="topleft"
name="clickaction"
width="148"
left_pad="0">
left_pad="10">
<combo_box.item
label="Touch (default)"
name="Touch/grab(default)"
@ -1009,7 +1009,7 @@
width="100" />
<!-- NEW SALE TYPE COMBO BOX -->
<combo_box
left_pad="0"
left_pad="10"
layout="topleft"
follows="left|top"
allow_text_entry="false"
@ -1041,7 +1041,7 @@ even though the user gets a free copy.
decimal_digits="0"
increment="1"
top_pad="8"
left="108"
left="118"
control_name="Edit Cost"
name="Edit Cost"
label="Price: L$"

View File

@ -16,22 +16,39 @@
</menu_item_call>
<menu_item_separator
layout="topleft" />
<menu_item_call
<menu_item_check
label="Sort by Name"
layout="topleft"
name="sort_by_name">
<on_click
function="Inventory.GearDefault.Custom.Action"
parameter="sort_by_name" />
</menu_item_call>
<menu_item_call
<on_check
function="Inventory.GearDefault.Check"
parameter="sort_by_name" />
</menu_item_check>
<menu_item_check
label="Sort by Most Recent"
layout="topleft"
name="sort_by_recent">
<on_click
function="Inventory.GearDefault.Custom.Action"
parameter="sort_by_recent" />
</menu_item_call>
<on_check
function="Inventory.GearDefault.Check"
parameter="sort_by_recent" />
</menu_item_check>
<menu_item_check
label="Sort System Folders to Top"
layout="topleft"
name="sort_system_folders_to_top">
<on_click
function="Inventory.GearDefault.Custom.Action"
parameter="sort_system_folders_to_top" />
<on_check
function="Inventory.GearDefault.Check"
parameter="sort_system_folders_to_top" />
</menu_item_check>
<menu_item_separator
layout="topleft" />
<menu_item_call

View File

@ -2674,26 +2674,6 @@
<menu_item_call.on_click
function="Advanced.PrintTextureMemoryStats" />
</menu_item_call>
<menu_item_check
label="Double-ClickAuto-Pilot"
name="Double-ClickAuto-Pilot">
<menu_item_check.on_check
function="CheckControl"
parameter="DoubleClickAutoPilot" />
<menu_item_check.on_click
function="ToggleControl"
parameter="DoubleClickAutoPilot" />
</menu_item_check>
<menu_item_check
label="Double-Click Teleport"
name="DoubleClick Teleport">
<menu_item_check.on_check
function="CheckControl"
parameter="DoubleClickTeleport" />
<menu_item_check.on_click
function="ToggleControl"
parameter="DoubleClickTeleport" />
</menu_item_check>
<menu_item_check
label="Region Debug Console"
name="Region Debug Console"

View File

@ -331,6 +331,7 @@
Pressing letter keys:
</text>
<radio_group
control_name="LetterKeysFocusChatBar"
height="20"
layout="topleft"
left="35"
@ -338,12 +339,12 @@
name="inworld_typing_preference">
<radio_item
label="Starts local chat"
name="radio_button1"
name="radio_start_chat"
top_delta="20"
layout="topleft"
height="16"
left="0"
value="0"
value="1"
width="150" />
<radio_item
label="Affects movement (i.e. WASD)"
@ -351,8 +352,8 @@
layout="topleft"
top_delta="0"
height="16"
name="radio_button2"
value="1"
name="radio_move"
value="0"
width="75" />
</radio_group>

View File

@ -177,7 +177,10 @@
left_delta="0"
name="double_click_chkbox"
width="237"
top_pad="0"/>
top_pad="0">
<check_box.commit_callback
function="Pref.CommitDoubleClickChekbox"/>
</check_box>
<radio_group
height="20"
layout="topleft"
@ -191,7 +194,6 @@
left="0"
name="radio_teleport"
top_delta="20"
value="0"
width="100" />
<radio_item
height="16"
@ -200,8 +202,9 @@
layout="topleft"
name="radio_autopilot"
top_delta="0"
value="1"
width="75" />
<radio_group.commit_callback
function="Pref.CommitRadioDoubleClick"/>
</radio_group>
<button
height="23"

View File

@ -70,7 +70,7 @@
name="UI Volume"
show_text="false"
slider_label.halign="right"
top_pad="5"
top_pad="4"
volume="true"
width="300">
<slider.commit_callback
@ -104,7 +104,7 @@
name="Wind Volume"
show_text="false"
slider_label.halign="right"
top_pad="5"
top_pad="4"
volume="true"
width="300">
<slider.commit_callback
@ -138,7 +138,7 @@
left="0"
name="SFX Volume"
show_text="false"
top_pad="7"
top_pad="4"
volume="true"
width="300">
<slider.commit_callback
@ -172,7 +172,7 @@
name="Music Volume"
slider_label.halign="right"
show_text="false"
top_pad="5"
top_pad="4"
volume="true"
width="300">
<slider.commit_callback
@ -215,7 +215,7 @@
name="Media Volume"
show_text="false"
slider_label.halign="right"
top_pad="5"
top_pad="4"
volume="true"
width="300">
<slider.commit_callback
@ -257,7 +257,7 @@
label_width="120"
layout="topleft"
left="0"
top_pad="5"
top_pad="4"
name="Voice Volume"
show_text="false"
slider_label.halign="right"
@ -301,9 +301,9 @@
height="15"
tool_tip="Check this to let media auto-play if it wants"
label="Allow Media to auto-play"
top_pad="5"
top_pad="1"
left="25"/>
<check_box
<check_box
name="media_show_on_others_btn"
control_name="MediaShowOnOthers"
value="true"
@ -313,16 +313,6 @@
label="Play media attached to other avatars"
left="25"
width="230"/>
<check_box
control_name="LipSyncEnabled"
follows="left|top"
height="20"
label="Move avatar lips when speaking"
layout="topleft"
left_pad="0"
name="enable_lip_sync"
width="237"
top_delta="-4" />
<text
type="string"
@ -333,7 +323,7 @@
left="25"
name="voice_chat_settings"
width="180"
top_pad="10">
top_pad="7">
Voice Chat Settings
</text>
<text
@ -341,10 +331,10 @@
length="1"
follows="left|top"
layout="topleft"
left="80"
left="46"
top_delta="16"
name="Listen from"
width="102">
width="112">
Listen from:
</text>
<icon
@ -363,7 +353,7 @@
height="18"
image_name="Move_Walk_Off"
layout="topleft"
left_pad="130"
left_pad="170"
name="avatar_icon"
mouse_opaque="false"
visible="true"
@ -375,7 +365,7 @@
draw_border="false"
follows="left|top"
layout="topleft"
left_delta="-128"
left_delta="-168"
width="221"
height="20"
name="ear_location">
@ -391,11 +381,21 @@
follows="left|top"
label="Avatar position"
layout="topleft"
left_pad="-54"
left_pad="-16"
name="1"
top_delta ="0"
width="200" />
</radio_group>
<check_box
control_name="LipSyncEnabled"
follows="left|top"
height="15"
label="Move avatar lips when speaking"
layout="topleft"
left="44"
name="enable_lip_sync"
top_pad="5"
width="237"/>
<check_box
follows="top|left"
enabled_control="EnableVoiceChat"
@ -403,10 +403,11 @@
height="15"
label="Toggle speak on/off when I press:"
layout="topleft"
left="30"
left="44"
name="push_to_talk_toggle_check"
width="237"
tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/>
tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."
top_pad="3"/>
<line_editor
follows="top|left"
control_name="PushToTalkButton"
@ -454,7 +455,7 @@
label="Input/Output devices"
layout="topleft"
left="20"
top_pad="8"
top_pad="6"
name="device_settings_btn"
width="190">
</button>

View File

@ -3,7 +3,7 @@
<menu_item_call label="Voir le profil" name="view_profile"/>
<menu_item_call label="Devenir amis" name="add_friend"/>
<menu_item_call label="IM" name="im"/>
<menu_item_call label="Appeler" name="call"/>
<menu_item_call label="Appel" name="call"/>
<menu_item_call label="Téléporter" name="teleport"/>
<menu_item_call label="Inviter dans le groupe" name="invite_to_group"/>
<menu_item_call label="Ignorer" name="block"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Choses" name="main inventory panel">
<panel.string name="ItemcountFetching">
Récupération de [ITEM_COUNT] articles... [FILTER]
Récupération : [ITEM_COUNT] articles... [FILTER]
</panel.string>
<panel.string name="ItemcountCompleted">
[ITEM_COUNT] articles [FILTER]

View File

@ -1089,7 +1089,7 @@
<string name="Textures" value=" Textures,"/>
<string name="Snapshots" value=" Photos,"/>
<string name="No Filters" value="Non "/>
<string name="Since Logoff" value=" - Depuis la déconnexion"/>
<string name="Since Logoff" value=" depuis la déconnexion"/>
<string name="InvFolder My Inventory">
Mon inventaire
</string>

View File

@ -283,7 +283,7 @@
<combo_box.item label="Plastica" name="Plastic"/>
<combo_box.item label="Gomma" name="Rubber"/>
</combo_box>
<text name="text cut">
<text name="text cut" left_delta="-10" width="170">
Riduci una sezione (inizio/fine)
</text>
<spinner label="I" name="cut begin"/>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="toolbox floater" title="" short_title="BOUWEN" height="587">
<floater name="toolbox floater" title="" short_title="BOUWEN" height="592">
<button label="" label_selected="" name="button focus" tool_tip="Focus"/>
<button label="" label_selected="" name="button move" tool_tip="Verplaats"/>
<button label="" label_selected="" name="button edit" tool_tip="Bewerk"/>
@ -81,13 +81,13 @@
<text name="Strength:">
Sterkte
</text>
<text name="obj_count" top_pad="15">
<text name="obj_count" top_pad="20">
Geselecteerde objecten: [COUNT]
</text>
<text name="prim_count">
primitieven: [COUNT]
</text>
<tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" top="180">
<tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" top="185">
<panel label="Algemeen" name="General">
<text name="Name:">
Naam:
@ -115,19 +115,19 @@
<text name="Group Name Proxy">
De Lindens
</text>
<button label="Instellen..." label_selected="Instellen..." name="button set group" left_pad="13"/>
<button label="Instellen..." label_selected="Instellen..." name="button set group"/>
<text name="Permissions:">
Permissies:
</text>
<check_box label="Deel met groep" name="checkbox share with group" tool_tip="Alle leden van de ingestelde groep toestaan om te delen en uw permissies voor dit object te gebruiken. U moet &apos;Overdragen&apos; om rolbeperkingen in te schakelen." left="100"/>
<check_box label="Deel met groep" name="checkbox share with group" tool_tip="Alle leden van de ingestelde groep toestaan om te delen en uw permissies voor dit object te gebruiken. U moet &apos;Overdragen&apos; om rolbeperkingen in te schakelen."/>
<string name="text deed continued">
Overdragen...
</string>
<string name="text deed">
Overdragen
</string>
<button label="Overdragen..." label_selected="Overdragen..." name="button deed" tool_tip="Groepgedeelde objecten kunnen door een groepofficier worden overgedragen" left_pad="19"/>
<button label="Overdragen..." label_selected="Overdragen..." name="button deed" tool_tip="Groepgedeelde objecten kunnen door een groepofficier worden overgedragen"/>
<check_box label="Iedereen mag verplaatsen" name="checkbox allow everyone move"/>
<check_box label="Iedereen mag kopiëren" name="checkbox allow everyone copy"/>
<check_box label="Toon in zoeken" name="search_check" tool_tip="Laat mensen dit object zien in zoekresultaten"/>

View File

@ -307,7 +307,7 @@
<combo_box.item label="Kwadrat" name="Square"/>
<combo_box.item label="Trójkąt" name="Triangle"/>
</combo_box>
<text name="text twist">
<text name="text twist" left_delta="-5" width="160">
Skręcenie (początek/koniec)
</text>
<spinner label="P" name="Twist Begin"/>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="toolbox floater" short_title="BUILD TOOLS" title="" width="288">
<floater name="toolbox floater" short_title="BUILD TOOLS" title="">
<floater.string name="status_rotate">
Arrastar as faixas coloridas para girar o objeto
</floater.string>